Merge "Add method parameter type documentation"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 8 Oct 2013 17:08:15 +0000 (17:08 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 8 Oct 2013 17:08:15 +0000 (17:08 +0000)
395 files changed:
.jshintignore
README
RELEASE-NOTES-1.22
docs/hooks.txt
includes/Action.php
includes/Article.php
includes/AutoLoader.php
includes/ChangeTags.php
includes/DefaultSettings.php
includes/EditPage.php
includes/Exception.php
includes/GitInfo.php
includes/GlobalFunctions.php
includes/HTMLForm.php
includes/HtmlFormatter.php [new file with mode: 0644]
includes/IP.php
includes/MagicWord.php
includes/OutputPage.php
includes/Preferences.php
includes/Sanitizer.php
includes/SiteStats.php
includes/Skin.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/StatCounter.php
includes/StringUtils.php
includes/StubObject.php
includes/Timestamp.php
includes/Title.php
includes/User.php
includes/WebRequest.php
includes/WebStart.php
includes/Wiki.php
includes/WikiPage.php
includes/api/ApiBase.php
includes/api/ApiEditPage.php
includes/api/ApiFeedContributions.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryFileRepoInfo.php [new file with mode: 0644]
includes/api/ApiQuerySiteinfo.php
includes/api/ApiUpload.php
includes/clientpool/RedisConnectionPool.php
includes/content/ContentHandler.php
includes/content/WikitextContentHandler.php
includes/db/Database.php
includes/db/DatabaseOracle.php
includes/db/DatabaseSqlite.php
includes/db/LoadBalancer.php
includes/diff/DifferenceEngine.php
includes/filebackend/FileBackendStore.php
includes/filebackend/SwiftFileBackend.php
includes/filerepo/FileRepo.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/file/File.php
includes/filerepo/file/ForeignDBFile.php
includes/filerepo/file/LocalFile.php
includes/installer/DatabaseUpdater.php
includes/installer/InstallDocFormatter.php
includes/installer/Installer.i18n.php
includes/installer/Installer.php
includes/installer/MysqlInstaller.php
includes/installer/WebInstallerOutput.php
includes/job/JobQueue.php
includes/job/JobQueueDB.php
includes/job/JobQueueFederated.php
includes/job/JobQueueGroup.php
includes/job/JobQueueRedis.php
includes/job/jobs/RefreshLinksJob.php
includes/libs/CSSJanus.php
includes/libs/CSSMin.php
includes/libs/lessc.inc.php [new file with mode: 0644]
includes/logging/LogPager.php
includes/media/Bitmap.php
includes/media/ImageHandler.php
includes/media/Jpeg.php
includes/media/MediaHandler.php
includes/media/SVG.php
includes/parser/CoreParserFunctions.php
includes/parser/Parser.php
includes/parser/ParserCache.php
includes/parser/Preprocessor_DOM.php
includes/profiler/ProfilerSimpleUDP.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderLESSFunctions.php [new file with mode: 0644]
includes/resourceloader/ResourceLoaderLanguageDataModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/revisiondelete/RevisionDelete.php
includes/revisiondelete/RevisionDeleteAbstracts.php
includes/revisiondelete/RevisionDeleter.php
includes/search/SearchEngine.php
includes/search/SearchUpdate.php
includes/site/SiteSQLStore.php
includes/specials/SpecialBlock.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialImport.php
includes/specials/SpecialListusers.php
includes/specials/SpecialMergeHistory.php
includes/specials/SpecialPrefixindex.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialTags.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUploadStash.php
includes/specials/SpecialUserlogin.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/upload/UploadBase.php
index.php
languages/Language.php
languages/classes/LanguageCu.php
languages/classes/LanguageEo.php
languages/classes/LanguageHi.php [deleted file]
languages/classes/LanguageMg.php [deleted file]
languages/classes/LanguageMt.php [deleted file]
languages/classes/LanguagePl.php
languages/classes/LanguageSh.php [deleted file]
languages/classes/LanguageSk.php [deleted file]
languages/classes/LanguageTi.php [deleted file]
languages/classes/LanguageTl.php [deleted file]
languages/classes/LanguageWa.php
languages/messages/MessagesAce.php
languages/messages/MessagesAf.php
languages/messages/MessagesAn.php
languages/messages/MessagesAng.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesAs.php
languages/messages/MessagesAst.php
languages/messages/MessagesAz.php
languages/messages/MessagesAzb.php
languages/messages/MessagesBa.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBn.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesCa.php
languages/messages/MessagesCe.php
languages/messages/MessagesCkb.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/MessagesDv.php
languages/messages/MessagesEl.php
languages/messages/MessagesEn.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFo.php
languages/messages/MessagesFr.php
languages/messages/MessagesGl.php
languages/messages/MessagesGu.php
languages/messages/MessagesHak.php
languages/messages/MessagesHe.php
languages/messages/MessagesHi.php
languages/messages/MessagesHif_latn.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIg.php
languages/messages/MessagesIlo.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesJv.php
languages/messages/MessagesKa.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKm.php
languages/messages/MessagesKo.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKw.php
languages/messages/MessagesKy.php
languages/messages/MessagesLa.php
languages/messages/MessagesLb.php
languages/messages/MessagesLt.php
languages/messages/MessagesLv.php
languages/messages/MessagesMai.php
languages/messages/MessagesMg.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMn.php
languages/messages/MessagesMr.php
languages/messages/MessagesMs.php
languages/messages/MessagesMy.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNe.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesOc.php
languages/messages/MessagesOr.php
languages/messages/MessagesPa.php
languages/messages/MessagesPdc.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPnb.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesRm.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesSah.php
languages/messages/MessagesScn.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSo.php
languages/messages/MessagesSq.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesTa.php
languages/messages/MessagesTh.php
languages/messages/MessagesTl.php
languages/messages/MessagesTr.php
languages/messages/MessagesTru.php
languages/messages/MessagesTyv.php
languages/messages/MessagesUg_arab.php
languages/messages/MessagesUk.php
languages/messages/MessagesVep.php
languages/messages/MessagesVi.php
languages/messages/MessagesVmf.php
languages/messages/MessagesVo.php
languages/messages/MessagesWar.php
languages/messages/MessagesWuu.php
languages/messages/MessagesYi.php
languages/messages/MessagesYo.php
languages/messages/MessagesYue.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/Maintenance.php
maintenance/checkLess.php [new file with mode: 0644]
maintenance/cleanupUploadStash.php
maintenance/dictionary/mediawiki.dic
maintenance/doMaintenance.php
maintenance/generateSitemap.php
maintenance/language/checkDupeMessages.php
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/mctest.php
maintenance/mergeMessageFileList.php
maintenance/mssql/tables.sql
maintenance/oracle/tables.sql
maintenance/postgres/tables.sql
maintenance/purgeChangedPages.php [new file with mode: 0644]
maintenance/refreshLinks.php
maintenance/showJobs.php
maintenance/tables.sql
maintenance/tidyUpBug37714.php [new file with mode: 0644]
maintenance/update.php
maintenance/userDupes.inc
resources/Resources.php
resources/jquery.chosen/chosen-sprite@2x.png
resources/jquery.tipsy/images/tipsy.png
resources/jquery.ui/themes/default/images/ui-bg_flat_0_aaaaaa_40x100.png
resources/jquery.ui/themes/default/images/ui-bg_flat_75_ffffff_40x100.png
resources/jquery.ui/themes/default/images/ui-bg_glass_55_fbf9ee_1x400.png
resources/jquery.ui/themes/default/images/ui-bg_glass_65_ffffff_1x400.png
resources/jquery.ui/themes/default/images/ui-bg_glass_75_dadada_1x400.png
resources/jquery.ui/themes/default/images/ui-bg_highlight-soft_75_cccccc_1x100.png
resources/jquery.ui/themes/vector/images/titlebar-fade.png
resources/jquery/images/jquery.arrowSteps.divider-ltr.png
resources/jquery/images/jquery.arrowSteps.divider-rtl.png
resources/jquery/images/jquery.arrowSteps.head-ltr.png
resources/jquery/images/jquery.arrowSteps.head-rtl.png
resources/jquery/images/jquery.arrowSteps.tail-ltr.png
resources/jquery/images/marker.png
resources/jquery/images/mask.png
resources/jquery/jquery.makeCollapsible.js
resources/jquery/jquery.spinner.css
resources/jquery/jquery.suggestions.js
resources/jquery/jquery.tablesorter.js
resources/jquery/jquery.textSelection.js
resources/mediawiki.action/mediawiki.action.edit.preview.js
resources/mediawiki.action/mediawiki.action.view.postEdit.js
resources/mediawiki.api/mediawiki.api.category.js
resources/mediawiki.api/mediawiki.api.edit.js
resources/mediawiki.api/mediawiki.api.parse.js
resources/mediawiki.api/mediawiki.api.watch.js
resources/mediawiki.less/mediawiki.mixins.less [new file with mode: 0644]
resources/mediawiki.special/images/glyph-people-large.png
resources/mediawiki.special/images/icon-contributors.png
resources/mediawiki.special/images/icon-edits.png
resources/mediawiki.special/images/icon-lock.png
resources/mediawiki.special/images/icon-pages.png
resources/mediawiki.special/mediawiki.special.userLogin.css
resources/mediawiki.special/mediawiki.special.vforms.css
resources/mediawiki.ui/mediawiki.ui.default.css
resources/mediawiki.ui/mediawiki.ui.vector.css
resources/mediawiki.ui/sourcefiles/scss/mixins/_forms.scss
resources/mediawiki/images/arrow-collapsed-ltr.png
resources/mediawiki/images/arrow-collapsed-rtl.png
resources/mediawiki/images/arrow-expanded.png
resources/mediawiki/mediawiki.Title.js
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.user.js
resources/mediawiki/mediawiki.util.js
skins/Vector.php
skins/common/IEFixes.js
skins/common/config.js
skins/common/images/Arr_u.png
skins/common/images/ar/button_headline.png
skins/common/images/ar/button_nowiki.png
skins/common/images/arrow_disabled_left_25.png
skins/common/images/arrow_disabled_right_25.png
skins/common/images/arrow_right_25.png
skins/common/images/button_hr.png
skins/common/images/button_nowiki.png
skins/common/images/button_sig.png
skins/common/images/button_template.png
skins/common/images/critical-32.png
skins/common/images/fa/button_nowiki.png
skins/common/images/feed-icon.png
skins/common/images/magnify-clip-rtl.png
skins/common/images/question-small.png
skins/common/images/tick-32.png
skins/common/images/warning-32.png
skins/common/protect.js
skins/common/shared.css
skins/common/upload.js
skins/common/wikiprintable.css [deleted file]
skins/modern/external.png
skins/modern/main.css
skins/monobook/IE60Fixes.css
skins/monobook/external-ltr.png
skins/monobook/external-rtl.png
skins/monobook/main.css
skins/vector/collapsibleNav.js [new file with mode: 0644]
skins/vector/collapsibleNav.less [new file with mode: 0644]
skins/vector/externalLinks.less [new file with mode: 0644]
skins/vector/images/arrow-collapsed-ltr.png [new file with mode: 0644]
skins/vector/images/arrow-collapsed-ltr.svg [new file with mode: 0644]
skins/vector/images/arrow-collapsed-rtl.png [new file with mode: 0644]
skins/vector/images/arrow-collapsed-rtl.svg [new file with mode: 0644]
skins/vector/images/arrow-expanded.png [new file with mode: 0644]
skins/vector/images/arrow-expanded.svg [new file with mode: 0644]
skins/vector/images/edit-icon.png
skins/vector/images/external-link-ltr-icon.png
skins/vector/images/external-link-rtl-icon.png
skins/vector/images/mail-icon.png
skins/vector/images/news-icon.png
skins/vector/images/page-fade.png
skins/vector/images/portal-break-ltr.png
skins/vector/images/preferences-break.png
skins/vector/images/tab-break.png
skins/vector/images/talk-icon.png
skins/vector/images/video-icon.png
skins/vector/screen.css [deleted file]
skins/vector/screen.less [new file with mode: 0644]
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/data/less/common/test.common.mixins.less [new file with mode: 0644]
tests/phpunit/data/less/module/dependency.less [new file with mode: 0644]
tests/phpunit/data/less/module/styles.css [new file with mode: 0644]
tests/phpunit/data/less/module/styles.less [new file with mode: 0644]
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/HtmlFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/ResourceLoaderTest.php
tests/phpunit/includes/StringUtilsTest.php
tests/phpunit/includes/TimestampTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/api/ApiEditPageTest.php
tests/phpunit/includes/api/ApiWatchTest.php
tests/phpunit/includes/db/DatabaseTest.php
tests/phpunit/includes/installer/InstallDocFormatterTest.php
tests/phpunit/includes/json/FormatJsonTest.php
tests/phpunit/includes/libs/CSSJanusTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/languages/LanguageClassesTestCase.php
tests/phpunit/maintenance/DumpTestCase.php
tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
thumb.php

index ad5e959..f740f13 100644 (file)
@@ -25,11 +25,5 @@ resources/jquery.ui/
 resources/mediawiki.libs/
 resources/jquery.chosen/chosen.jquery.js
 
-# legacy scripts
-skins/common/IEFixes.js
-skins/common/config.js
-skins/common/protect.js
-skins/common/upload.js
-
 # github.com/jshint/jshint/issues/729
 tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js
diff --git a/README b/README
index 4f4bc29..a4185ba 100644 (file)
--- a/README
+++ b/README
@@ -1,10 +1,10 @@
 == MediaWiki ==
 
 MediaWiki is a popular and free, open-source wiki software package written in
-PHP. It serves as the platform for Wikipedia and its sister projects, which
-deliver content in over 280 languages to more than half a billion people each
-month. MediaWiki's reliability and robust feature set have earned it a large
-and vibrant community of third-party users and developers.
+PHP. It serves as the platform for Wikipedia and the other projects of the Wikimedia
+Foundation, which deliver content in over 280 languages to more than half a billion
+people each month. MediaWiki's reliability and robust feature set have earned it a
+large and vibrant community of third-party users and developers.
 
 MediaWiki is:
 
@@ -30,4 +30,4 @@ RELEASE-NOTES, INSTALL, and UPGRADE.
 MediaWiki is the result of global collaboration and cooperation. The CREDITS
 file lists technical contributors to the project. The COPYING file explains
 MediaWiki's copyright and license (GNU General Public License, version 2 or
-later). Many thanks to the Wikimedia regulars for testing and suggestions.
+later). Many thanks to the Wikimedia community for testing and suggestions.
index e503e30..a365da6 100644 (file)
@@ -54,6 +54,13 @@ production.
   $wgRCFeeds configuration array. $wgRCFeeds makes both the format and
   destination of recent change notifications customizable, and allows for
   multiple destinations to be specified.
+* (bug 53862) portal-url, currentevents-url and helppage have been removed from the
+  default Sidebar.
+* The 'vector-simplesearch' preference is now enabled by default. Previously
+  it was only enabled if the Vector extension was installed.
+* The precise format of metric datagrams produced by the UDP profiler and stats counter
+  may now be specified as $wgUDPProfilerFormatString and $wgStatsFormatString,
+  respectively.
 
 === New features in 1.22 ===
 * (bug 44525) mediawiki.jqueryMsg can now parse (whitelisted) HTML elements and attributes.
@@ -211,7 +218,28 @@ production.
   and Special:AllMyUploads respectively.
 * IPv6 addresses in X-Forwarded-For headers are now normalised before checking
   against allowed proxy lists.
-* Add deferrable update support for callback/closure
+* Add deferrable update support for callback/closure.
+* Add TitleMove hook before page renames.
+* Revision deletion backend code is moved out of SpecialRevisiondelete
+* Add a variable (wgRedactedFunctionArguments) to redact the values sent as certain function
+  parameters from exception stack traces.
+* Added {{REVISIONSIZE}} variable to get the current size of a revision.
+* Add support for the LESS stylesheet language to ResourceLoader. LESS is a
+  stylesheet language that compiles into CSS. ResourceLoader file modules may
+  include LESS style files; ResourceLoader will compile these files into CSS
+  before sending them to the client.
+** The $wgResourceLoaderLESSVars configuration variable is an associative array
+   mapping variable names to string CSS values. These variables are considered
+   declared for all LESS files. Additional variables may be registered by
+   adding keys to the array.
+** $wgResourceLoaderLESSFunctions is an associative array of custom LESS
+   function names to PHP callables. See <http://leafo.net/lessphp/docs/#custom_functions>
+   for more details regarding custom functions.
+** $wgResourceLoaderLESSImportPaths is an array of file system paths. Files
+   referenced in LESS '@import' statements are looked up here first.
+* ResourceLoader supports hashes as module cache invalidation trigger (instead
+  of or in addition to timestamps).
+* Added $wgExtensionEntryPointListFiles for use in mergeMessageFileList.php.
 
 === Bug fixes in 1.22 ===
 * Disable Special:PasswordReset when $wgEnableEmail is false. Previously one
@@ -228,8 +256,8 @@ production.
 * mw.util.tooltipAccessKeyRegexp: The regex now matches "option-" as well.
   Support for Mac "option" was added in 1.16, but the regex was never updated.
 * (bug 46768) Usernames of blocking users now display correctly, even if numeric.
-* (bug 39590) {{PAGESIZE}} for the current page and self-transclusions now
-  show the most up to date result always instead of being a revision behind.
+* (bug 39590) Self-transclusions now show the most up to date result always
+  after save instead of being a revision behind.
 * A bias in wfRandomString() toward digits 1-7 has been corrected. Generated
   strings will now start with digits 0 and 8-f as often as they should.
 * (bug 45371) Removed Parser_LinkHooks and CoreLinkFunctions classes.
@@ -291,6 +319,11 @@ production.
 * (bug 51742) Add data-sort-value for better sorting of hitcounts Special:Tags
 * (bug 26811) On DB error pages, server hostnames are now hidden when both
   $wgShowHostnames and $wgShowSQLErrors are false.
+* (bug 6200) line breaks in <blockquote> are handled like they are in <div>
+* (bug 14931) Default character set now set to 'utf8' when a new MySQL
+  database is created.
+* (bug 47191) Fixed "Column 'si_title' cannot be part of FULLTEXT index"
+  MySQL error when installing using the binary character set option.
 
 === API changes in 1.22 ===
 * (bug 25553) The JSON output formatter now leaves forward slashes unescaped
@@ -347,6 +380,11 @@ production.
 * (bug 49090) Token-getting functions will fail when using jsonp callbacks.
 * (bug 52699) action=upload returns normalized file name on warning
   "exists-normalized" instead of filename to be uploaded to.
+* (bug 53884) action=edit will now return an error when the specified section
+  does not exist in the page.
+* Added meta=filerepoinfo API module for getting information about foreign
+  file repositories, and related ForeignAPIRepo methods getInfo and getApiUrl.
+* The new query module list=allfileusages to enumerate file usages was added.
 
 === Languages updated in 1.22===
 
@@ -443,6 +481,14 @@ changes to languages because of Bugzilla reports.
   Functions related to disambiguation pages are now handled by the Disambiguator
   extension (https://www.mediawiki.org/wiki/Extension:Disambiguator) (bug
   35981).
+* BREAKING CHANGE: The 'mediawiki.legacy.wikiprintable' module has been removed.
+  The skins/common/wikiprintable.css file no longer exists. Return value of
+  Skin#commonPrintStylesheet is ignored. Please use the 'mediawiki.legacy.commonPrint'
+  module instead or base your skin on SkinTemplate.
+* (bug 49629) The hook ExtractThumbParamaters has been deprecated in favour
+  of media handler overriding MediaHandler::parseParamString.
+* (bug 46512) The collapsibleNav feature from the Vector extension has been moved
+  to the Vector skin in core.
 
 == Compatibility ==
 
index 02413b3..2d1001b 100644 (file)
@@ -1077,6 +1077,7 @@ change the tables headers.
 
 'ExtractThumbParameters': Called when extracting thumbnail parameters from a
 thumbnail file name.
+DEPRECATED: Media handler should override MediaHandler::parseParamString instead.
 $thumbname: the base name of the thumbnail file
 &$params: the currently extracted params (has source name, temp or archived zone)
 
@@ -1222,6 +1223,16 @@ $out: OutputPage object (to check what type of page the user is on)
 $user: User whose preferences are being modified.
 &$preferences: Preferences description array, to be fed to an HTMLForm object
 
+'GetRelativeTimestamp': Pre-emptively override the relative timestamp generated
+by MWTimestamp::getRelativeTimestamp(). Return false in this hook to use the custom
+output.
+&$output: string for the output timestamp
+&$diff: DateInterval representing the difference between the timestamps
+$timestamp: MWTimestamp object of the current (user-adjusted) timestamp
+$relativeTo: MWTimestamp object of the relative (user-adjusted) timestamp
+$user: User whose preferences are being used to make timestamp
+$lang: Language that will be used to render the timestamp
+
 'getUserPermissionsErrors': Add a permissions error when permissions errors are
 checked for. Use instead of userCan for most cases. Return false if the user
 can't do it, and populate $result with the reason in the form of
@@ -1879,6 +1890,7 @@ $action : Action being performed
 &$result : Whether or not the action should be prevented
 Change $result and return false to give a definitive answer, otherwise
 the built-in rate limiting checks are used, if enabled.
+$incrBy: Amount to increment counter by
 
 'PlaceNewSection': Override placement of new sections. Return false and put the
 merged text into $text to override the default behavior.
@@ -2419,6 +2431,11 @@ $result: Boolean; whether MediaWiki currently thinks this is a wikitext page.
   Hooks may change this value to override the return value of
   Title::isWikitextPage()
 
+'TitleMove': Before moving an article (title).
+$old: old title
+$nt: new title
+$user: user who does the move
+
 'TitleMoveComplete': After moving an article (title).
 $old: old title
 $nt: new title
index 23b648f..4b6e446 100644 (file)
@@ -142,7 +142,7 @@ abstract class Action {
                        return 'view';
                }
 
-               $action = Action::factory( $actionName, $context->getWikiPage() );
+               $action = Action::factory( $actionName, $context->getWikiPage(), $context );
                if ( $action instanceof Action ) {
                        return $action->getName();
                }
@@ -167,8 +167,14 @@ abstract class Action {
        final public function getContext() {
                if ( $this->context instanceof IContextSource ) {
                        return $this->context;
+               } else if ( $this->page instanceof Article ) {
+                       // NOTE: $this->page can be a WikiPage, which does not have a context.
+                       wfDebug( __METHOD__ . ': no context known, falling back to Article\'s context.' );
+                       return $this->page->getContext();
                }
-               return $this->page->getContext();
+
+               wfWarn( __METHOD__ . ': no context known, falling back to RequestContext::getMain().' );
+               return RequestContext::getMain();
        }
 
        /**
@@ -255,6 +261,12 @@ abstract class Action {
         * @param $context IContextSource
         */
        public function __construct( Page $page, IContextSource $context = null ) {
+               if ( $context === null ) {
+                       wfWarn( __METHOD__ . ' called without providing a Context object.' );
+                       // NOTE: We could try to initialize $context using $page->getContext(),
+                       //      if $page is an Article. That however seems to not work seamlessly.
+               }
+
                $this->page = $page;
                $this->context = $context;
        }
@@ -477,7 +489,7 @@ abstract class FormAction extends Action {
        public function execute( array $data = null, $captureErrors = true ) {
                try {
                        // Set a new context so output doesn't leak.
-                       $this->context = clone $this->page->getContext();
+                       $this->context = clone $this->getContext();
 
                        // This will throw exceptions if there's a problem
                        $this->checkCanExecute( $this->getUser() );
@@ -566,7 +578,7 @@ abstract class FormlessAction extends Action {
        public function execute( array $data = null, $captureErrors = true ) {
                try {
                        // Set a new context so output doesn't leak.
-                       $this->context = clone $this->page->getContext();
+                       $this->context = clone $this->getContext();
                        if ( is_array( $data ) ) {
                                $this->context->setRequest( new FauxRequest( $data, false ) );
                        }
index 732b1c2..0b18221 100644 (file)
@@ -1121,6 +1121,13 @@ class Article implements Page {
                        return false;
                }
 
+               if ( $rc->getPerformer()->getName() == $user->getName() ) {
+                       // Don't show a patrol link for own creations. If the user could
+                       // patrol them, they already would be patrolled
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
                $rcid = $rc->getAttribute( 'rc_id' );
 
                $token = $user->getEditToken( $rcid );
index 604add3..8d571ad 100644 (file)
@@ -111,6 +111,7 @@ $wgAutoloadLocalClasses = array(
        'HistoryBlobStub' => 'includes/HistoryBlob.php',
        'Hooks' => 'includes/Hooks.php',
        'Html' => 'includes/Html.php',
+       'HtmlFormatter' => 'includes/HtmlFormatter.php',
        'HTMLApiField' => 'includes/HTMLForm.php',
        'HTMLButtonField' => 'includes/HTMLForm.php',
        'HTMLCheckField' => 'includes/HTMLForm.php',
@@ -413,6 +414,7 @@ $wgAutoloadLocalClasses = array(
        'ApiQueryQueryPage' => 'includes/api/ApiQueryQueryPage.php',
        'ApiQueryRandom' => 'includes/api/ApiQueryRandom.php',
        'ApiQueryRecentChanges' => 'includes/api/ApiQueryRecentChanges.php',
+       'ApiQueryFileRepoInfo' => 'includes/api/ApiQueryFileRepoInfo.php',
        'ApiQueryRevisions' => 'includes/api/ApiQueryRevisions.php',
        'ApiQuerySearch' => 'includes/api/ApiQuerySearch.php',
        'ApiQuerySiteinfo' => 'includes/api/ApiQuerySiteinfo.php',
@@ -704,6 +706,13 @@ $wgAutoloadLocalClasses = array(
        'JSToken' => 'includes/libs/jsminplus.php',
        'JSTokenizer' => 'includes/libs/jsminplus.php',
 
+       # includes/libs/lessphp
+       'lessc' => 'includes/libs/lessc.inc.php',
+       'lessc_parser' => 'includes/libs/lessc.inc.php',
+       'lessc_formatter_classic' => 'includes/libs/lessc.inc.php',
+       'lessc_formatter_compressed' => 'includes/libs/lessc.inc.php',
+       'lessc_formatter_lessjs' => 'includes/libs/lessc.inc.php',
+
        # includes/logging
        'DatabaseLogEntry' => 'includes/logging/LogEntry.php',
        'DeleteLogFormatter' => 'includes/logging/DeleteLogFormatter.php',
@@ -849,6 +858,7 @@ $wgAutoloadLocalClasses = array(
        'ResourceLoaderContext' => 'includes/resourceloader/ResourceLoaderContext.php',
        'ResourceLoaderFileModule' => 'includes/resourceloader/ResourceLoaderFileModule.php',
        'ResourceLoaderFilePageModule' => 'includes/resourceloader/ResourceLoaderFilePageModule.php',
+       'ResourceLoaderLESSFunctions' => 'includes/resourceloader/ResourceLoaderLESSFunctions.php',
        'ResourceLoaderModule' => 'includes/resourceloader/ResourceLoaderModule.php',
        'ResourceLoaderNoscriptModule' => 'includes/resourceloader/ResourceLoaderNoscriptModule.php',
        'ResourceLoaderSiteModule' => 'includes/resourceloader/ResourceLoaderSiteModule.php',
index 029911f..3fc27f9 100644 (file)
@@ -281,4 +281,34 @@ class ChangeTags {
                $wgMemc->set( $key, $emptyTags, 300 );
                return $emptyTags;
        }
+
+       /**
+        * Returns a map of any tags used on the wiki to number of edits
+        * tagged with them, ordered descending by the hitcount.
+        *
+        * @return array Array of string => int
+        */
+       public static function tagUsageStatistics() {
+               $out = array();
+
+               $dbr = wfGetDB( DB_SLAVE );
+               $res = $dbr->select(
+                       'change_tag',
+                       array( 'ct_tag', 'hitcount' => 'count(*)' ),
+                       array(),
+                       __METHOD__,
+                       array( 'GROUP BY' => 'ct_tag', 'ORDER BY' => 'hitcount DESC' )
+               );
+
+               foreach ( $res as $row ) {
+                       $out[$row->ct_tag] = $row->hitcount;
+               }
+               foreach ( self::listDefinedTags() as $tag ) {
+                       if ( !isset( $out[$tag] ) ) {
+                               $out[$tag] = 0;
+                       }
+               }
+
+               return $out;
+       }
 }
index 22b7f1e..98c583b 100644 (file)
@@ -1623,7 +1623,6 @@ $wgSharedTables = array( 'user', 'user_properties' );
  *                  - DBO_DEFAULT -- turns on DBO_TRX only if !$wgCommandLineMode (recommended)
  *                  - DBO_DEBUG -- equivalent of $wgDebugDumpSql
  *                  - DBO_TRX -- wrap entire request in a transaction
- *                  - DBO_IGNORE -- ignore errors (not useful in LocalSettings.php)
  *                  - DBO_NOBUFFER -- turn off buffering (not useful in LocalSettings.php)
  *                  - DBO_PERSISTENT -- enables persistent database connections
  *                  - DBO_SSL -- uses SSL/TLS encryption in database connections, if available
@@ -3282,6 +3281,59 @@ $wgResourceLoaderValidateStaticJS = false;
  */
 $wgResourceLoaderExperimentalAsyncLoading = false;
 
+/**
+ * Global LESS variables. An associative array binding variable names to CSS
+ * string values.
+ *
+ * Because the hashed contents of this array are used to construct the cache key
+ * that ResourceLoader uses to look up LESS compilation results, updating this
+ * array can be used to deliberately invalidate the set of cached results.
+ *
+ * @par Example:
+ * @code
+ *   $wgResourceLoaderLESSVars = array(
+ *     'baseFontSize'  => '1em',
+ *     'smallFontSize' => '0.75em',
+ *     'WikimediaBlue' => '#006699',
+ *   );
+ * @endcode
+ * @since 1.22
+ */
+$wgResourceLoaderLESSVars = array();
+
+/**
+ * Custom LESS functions. An associative array mapping function name to PHP
+ * callable.
+ *
+ * Changes to LESS functions do not trigger cache invalidation. If you update
+ * the behavior of a LESS function and need to invalidate stale compilation
+ * results, you can touch one of values in $wgResourceLoaderLESSVars, as
+ * documented above.
+ *
+ * @since 1.22
+ */
+$wgResourceLoaderLESSFunctions = array(
+       'embeddable' => 'ResourceLoaderLESSFunctions::embeddable',
+       'embed' => 'ResourceLoaderLESSFunctions::embed',
+);
+
+/**
+ * Default import paths for LESS modules. LESS files referenced in @import
+ * statements will be looked up here first, and relative to the importing file
+ * second. To avoid collisions, it's important for the LESS files in these
+ * directories to have a common, predictable file name prefix.
+ *
+ * Extensions need not (and should not) register paths in
+ * $wgResourceLoaderLESSImportPaths. The import path includes the path of the
+ * currently compiling LESS file, which allows each extension to freely import
+ * files from its own tree.
+ *
+ * @since 1.22
+ */
+$wgResourceLoaderLESSImportPaths = array(
+       "$IP/resources/mediawiki.less/",
+);
+
 /** @} */ # End of resource loader settings }
 
 /*************************************************************************//**
@@ -3952,6 +4004,7 @@ $wgDefaultUserOptions = array(
        'underline' => 2,
        'uselivepreview' => 0,
        'usenewrc' => 0,
+       'vector-simplesearch' => 1,
        'watchcreations' => 0,
        'watchdefault' => 0,
        'watchdeletion' => 0,
@@ -4600,6 +4653,13 @@ $wgRateLimits = array(
        'emailuser' => array(
                'user' => null,
        ),
+       'linkpurge' => array(
+               'anon' => null,
+               'user' => null,
+               'newbie' => null,
+               'ip' => null,
+               'subnet' => null,
+       ),
 );
 
 /**
@@ -4880,6 +4940,37 @@ $wgShowSQLErrors = false;
  */
 $wgShowExceptionDetails = false;
 
+/**
+ * Array of functions which need parameters redacted from stack traces shown to
+ * clients and logged. Keys are in the format '[class::]function', and the
+ * values should be either an integer or an array of integers. These are the
+ * indexes of the parameters which need to be kept secret.
+ * @since 1.22
+ */
+$wgRedactedFunctionArguments = array(
+       'AuthPlugin::setPassword' => 1,
+       'AuthPlugin::authenticate' => 1,
+       'AuthPlugin::addUser' => 1,
+
+       'DatabaseBase::__construct' => 2,
+       'DatabaseBase::open' => 2,
+
+       'SpecialChangeEmail::attemptChange' => 1,
+       'SpecialChangePassword::attemptReset' => 0,
+
+       'User::setPassword' => 0,
+       'User::setInternalPassword' => 0,
+       'User::checkPassword' => 0,
+       'User::setNewpassword' => 0,
+       'User::comparePasswords' => array( 0, 1 ),
+       'User::checkTemporaryPassword' => 0,
+       'User::setToken' => 0,
+       'User::crypt' => 0,
+       'User::oldCrypt' => 0,
+       'User::getPasswordValidity' => 0,
+       'User::isValidPassword' => 0,
+);
+
 /**
  * If true, show a backtrace for database errors
  */
@@ -4961,6 +5052,17 @@ $wgUDPProfilerHost = '127.0.0.1';
  */
 $wgUDPProfilerPort = '3811';
 
+/**
+ * Format string for the UDP profiler. The UDP profiler invokes sprintf() with
+ * (profile id, count, cpu, cpu_sq, real, real_sq, entry name) as arguments.
+ * You can use sprintf's argument numbering/swapping capability to repeat,
+ * re-order or omit fields.
+ *
+ * @see $wgStatsFormatString
+ * @since 1.22
+ */
+$wgUDPProfilerFormatString = "%s - %d %f %f %f %f %s\n";
+
 /**
  * Detects non-matching wfProfileIn/wfProfileOut calls
  */
@@ -4987,6 +5089,19 @@ $wgStatsMethod = 'cache';
  */
 $wgAggregateStatsID = false;
 
+/**
+ * When $wgStatsMethod is 'udp', this variable specifies how stats should be
+ * formatted. Its value should be a format string suitable for a sprintf()
+ * invocation with (id, count, key) arguments, where 'id' is either
+ * $wgAggregateStatsID or the DB name, 'count' is the value by which the metric
+ * is being incremented, and 'key' is the metric name.
+ *
+ * @see $wgUDPProfilerFormatString
+ * @see $wgAggregateStatsID
+ * @since 1.22
+ */
+$wgStatsFormatString = "stats/%s - %s 1 1 1 1 %s\n";
+
 /**
  * Whereas to count the number of time an article is viewed.
  * Does not work if pages are cached (for example with squid).
@@ -5803,6 +5918,13 @@ $wgExtensionFunctions = array();
  */
 $wgExtensionMessagesFiles = array();
 
+/**
+ * Array of files with list(s) of extension entry points to be used in
+ * maintenance/mergeMessageFileList.php
+ * @since 1.22
+ */
+$wgExtensionEntryPointListFiles = array();
+
 /**
  * Parser output hooks.
  * This is an associative array where the key is an extension-defined tag
index 63e3e66..12cd4b3 100644 (file)
@@ -1493,7 +1493,7 @@ class EditPage {
                        wfProfileOut( __METHOD__ );
                        return $status;
                }
-               if ( $wgUser->pingLimiter() ) {
+               if ( $wgUser->pingLimiter() || $wgUser->pingLimiter( 'linkpurge', 0 ) ) {
                        $status->fatal( 'actionthrottledtext' );
                        $status->value = self::AS_RATE_LIMITED;
                        wfProfileOut( __METHOD__ . '-checks' );
@@ -1771,6 +1771,10 @@ class EditPage {
                }
 
                $result['nullEdit'] = $doEditStatus->hasMessage( 'edit-no-change' );
+               if ( $result['nullEdit'] ) {
+                       // We don't know if it was a null edit until now, so increment here
+                       $wgUser->pingLimiter( 'linkpurge' );
+               }
                $result['redirect'] = $content->isRedirect();
                $this->updateWatchlist();
                wfProfileOut( __METHOD__ );
index dc1208a..39fe6f4 100644 (file)
@@ -127,7 +127,7 @@ class MWException extends Exception {
 
                if ( $wgShowExceptionDetails ) {
                        return '<p>' . nl2br( htmlspecialchars( $this->getMessage() ) ) .
-                               '</p><p>Backtrace:</p><p>' . nl2br( htmlspecialchars( $this->getTraceAsString() ) ) .
+                               '</p><p>Backtrace:</p><p>' . nl2br( htmlspecialchars( MWExceptionHandler::formatRedactedTrace( $this ) ) ) .
                                "</p>\n";
                } else {
                        return "<div class=\"errorbox\">" .
@@ -152,7 +152,7 @@ class MWException extends Exception {
 
                if ( $wgShowExceptionDetails ) {
                        return $this->getMessage() .
-                               "\nBacktrace:\n" . $this->getTraceAsString() . "\n";
+                               "\nBacktrace:\n" . MWExceptionHandler::formatRedactedTrace( $this ) . "\n";
                } else {
                        return "Set \$wgShowExceptionDetails = true; " .
                                "in LocalSettings.php to show detailed debugging information.\n";
@@ -247,16 +247,9 @@ class MWException extends Exception {
         * It will be either HTML or plain text based on isCommandLine().
         */
        function report() {
-               global $wgLogExceptionBacktrace, $wgMimeType;
-               $log = $this->getLogMessage();
+               global $wgMimeType;
 
-               if ( $log ) {
-                       if ( $wgLogExceptionBacktrace ) {
-                               wfDebugLog( 'exception', $log . "\n" . $this->getTraceAsString() . "\n" );
-                       } else {
-                               wfDebugLog( 'exception', $log );
-                       }
-               }
+               $this->logException();
 
                if ( defined( 'MW_API' ) ) {
                        // Unhandled API exception, we can't be sure that format printer is alive
@@ -273,6 +266,22 @@ class MWException extends Exception {
                }
        }
 
+       /**
+        * Log the error message to the exception log (if enabled)
+        */
+       function logException() {
+               global $wgLogExceptionBacktrace;
+
+               $log = $this->getLogMessage();
+               if ( $log ) {
+                       if ( $wgLogExceptionBacktrace ) {
+                               wfDebugLog( 'exception', $log . "\n" . MWExceptionHandler::formatRedactedTrace( $this ) . "\n" );
+                       } else {
+                               wfDebugLog( 'exception', $log );
+                       }
+               }
+       }
+
        /**
         * Check whether we are in command line mode or not to report the exception
         * in the correct format.
@@ -624,7 +633,7 @@ class MWExceptionHandler {
                                $message = "MediaWiki internal error.\n\n";
 
                                if ( $wgShowExceptionDetails ) {
-                                       $message .= 'Original exception: ' . $e->__toString() . "\n\n" .
+                                       $message .= 'Original exception: ' . self::formatRedactedTrace( $e ) . "\n\n" .
                                                'Exception caught inside exception handler: ' . $e2->__toString();
                                } else {
                                        $message .= "Exception caught inside exception handler.\n\n" .
@@ -641,11 +650,10 @@ class MWExceptionHandler {
                                }
                        }
                } else {
-                       $message = "Unexpected non-MediaWiki exception encountered, of type \"" . get_class( $e ) . "\"\n" .
-                               $e->__toString() . "\n";
+                       $message = "Unexpected non-MediaWiki exception encountered, of type \"" . get_class( $e ) . "\"";
 
                        if ( $wgShowExceptionDetails ) {
-                               $message .= "\n" . $e->getTraceAsString() . "\n";
+                               $message .= "\nexception '" . get_class( $e ) . "' in " . $e->getFile() . ":" . $e->getLine() . "\nStack trace:\n" . self::formatRedactedTrace( $e ) . "\n";
                        }
 
                        if ( $cmdLine ) {
@@ -700,4 +708,53 @@ class MWExceptionHandler {
                // Exit value should be nonzero for the benefit of shell jobs
                exit( 1 );
        }
+
+       /**
+        * Get the stack trace from the exception as a string, redacting certain function arguments in the process
+        * @param Exception $e The exception
+        * @return string The stack trace as a string
+        */
+       public static function formatRedactedTrace( Exception $e ) {
+               global $wgRedactedFunctionArguments;
+               $finalExceptionText = '';
+
+               foreach ( $e->getTrace() as $i => $call ) {
+                       $checkFor = array();
+                       if ( isset( $call['class'] ) ) {
+                               $checkFor[] = $call['class'] . '::' . $call['function'];
+                               foreach ( class_parents( $call['class'] ) as $parent ) {
+                                       $checkFor[] = $parent . '::' . $call['function'];
+                               }
+                       } else {
+                               $checkFor[] = $call['function'];
+                       }
+
+                       foreach ( $checkFor as $check ) {
+                               if ( isset( $wgRedactedFunctionArguments[$check] ) ) {
+                                       foreach ( (array)$wgRedactedFunctionArguments[$check] as $argNo ) {
+                                               $call['args'][$argNo] = 'REDACTED';
+                                       }
+                               }
+                       }
+
+                       $finalExceptionText .= "#{$i} {$call['file']}({$call['line']}): ";
+                       if ( isset( $call['class'] ) ) {
+                               $finalExceptionText .= $call['class'] . $call['type'] . $call['function'];
+                       } else {
+                               $finalExceptionText .= $call['function'];
+                       }
+                       $args = array();
+                       foreach ( $call['args'] as $arg ) {
+                               if ( is_object( $arg ) ) {
+                                       $args[] = 'Object(' . get_class( $arg ) . ')';
+                               } elseif( is_array( $arg ) ) {
+                                       $args[] = 'Array';
+                               } else {
+                                       $args[] = var_export( $arg, true );
+                               }
+                       }
+                       $finalExceptionText .=  '(' . implode( ', ', $args ) . ")\n";
+               }
+               return $finalExceptionText . '#' . ( $i + 1 ) . ' {main}';
+       }
 }
index 407b3cb..f49f9be 100644 (file)
@@ -162,7 +162,7 @@ class GitInfo {
        /**
         * Get an URL to a web viewer link to the HEAD revision.
         *
-        * @return string|bool string if an URL is available or false otherwise.
+        * @return string|bool string if a URL is available or false otherwise.
         */
        public function getHeadViewUrl() {
                $config = "{$this->basedir}/config";
index bed2c44..b11bce9 100644 (file)
@@ -93,6 +93,18 @@ if ( !function_exists( 'mb_strrpos' ) ) {
                return Fallback::mb_strrpos( $haystack, $needle, $offset, $encoding );
        }
 }
+
+// gzdecode function only exists in PHP >= 5.4.0
+// http://php.net/gzdecode
+if ( !function_exists( 'gzdecode' ) ) {
+       /**
+        * @codeCoverageIgnore
+        * @return string
+        */
+       function gzdecode( $data ) {
+               return gzinflate( substr( $data, 10, -8 ) );
+       }
+}
 /// @endcond
 
 /**
@@ -106,12 +118,12 @@ function wfArrayDiff2( $a, $b ) {
 }
 
 /**
- * @param $a
- * @param $b
+ * @param $a array|string
+ * @param $b array|string
  * @return int
  */
 function wfArrayDiff2_cmp( $a, $b ) {
-       if ( !is_array( $a ) ) {
+       if ( is_string( $a ) && is_string( $b ) ) {
                return strcmp( $a, $b );
        } elseif ( count( $a ) !== count( $b ) ) {
                return count( $a ) < count( $b ) ? -1 : 1;
@@ -1691,10 +1703,12 @@ function wfEmptyMsg( $key ) {
  * Throw a debugging exception. This function previously once exited the process,
  * but now throws an exception instead, with similar results.
  *
+ * @deprecated since 1.22; just throw an MWException yourself
  * @param string $msg message shown when dying.
  * @throws MWException
  */
 function wfDebugDieBacktrace( $msg = '' ) {
+       wfDeprecated( __FUNCTION__, '1.22' );
        throw new MWException( $msg );
 }
 
@@ -1937,23 +1951,6 @@ function wfViewPrevNext( $offset, $limit, $link, $query = '', $atend = false ) {
        return $wgLang->viewPrevNext( $title, $offset, $limit, $query, $atend );
 }
 
-/**
- * Make a list item, used by various special pages
- *
- * @param string $page Page link
- * @param string $details Text between brackets
- * @param $oppositedm Boolean  Add the direction mark opposite to your
- *                                                             language, to display text properly
- * @return String
- * @deprecated since 1.19; use Language::specialList() instead
- */
-function wfSpecialList( $page, $details, $oppositedm = true ) {
-       wfDeprecated( __METHOD__, '1.19' );
-
-       global $wgLang;
-       return $wgLang->specialList( $page, $details, $oppositedm );
-}
-
 /**
  * @todo document
  * @todo FIXME: We may want to blacklist some broken browsers
@@ -2020,6 +2017,10 @@ function wfEscapeWikiText( $text ) {
                        "\n*" => "\n&#42;", "\r*" => "\r&#42;",
                        "\n:" => "\n&#58;", "\r:" => "\r&#58;",
                        "\n " => "\n&#32;", "\r " => "\r&#32;",
+                       "\n\n" => "\n&#10;", "\r\n" => "&#13;\n",
+                       "\n\r" => "\n&#13;", "\r\r" => "\r&#13;",
+                       "\n\t" => "\n&#9;", "\r\t" => "\r&#9;", // "\n\t\n" is treated like "\n\n"
+                       "\n----" => "\n&#45;---", "\r----" => "\r&#45;---",
                        '__' => '_&#95;', '://' => '&#58;//',
                );
 
@@ -2458,7 +2459,7 @@ function wfIsWindows() {
  * @return Bool
  */
 function wfIsHipHop() {
-       return function_exists( 'hphp_thread_set_warmup_enabled' );
+       return defined( 'HPHP_VERSION' );
 }
 
 /**
@@ -2521,7 +2522,7 @@ function wfMkdirParents( $dir, $mode = null, $caller = null ) {
                wfDebug( "$caller: called wfMkdirParents($dir)\n" );
        }
 
-       if ( strval( $dir ) === '' || file_exists( $dir ) ) {
+       if ( strval( $dir ) === '' || ( file_exists( $dir ) && is_dir( $dir ) ) ) {
                return true;
        }
 
@@ -2537,6 +2538,11 @@ function wfMkdirParents( $dir, $mode = null, $caller = null ) {
        wfRestoreWarnings();
 
        if ( !$ok ) {
+               //directory may have been created on another request since we last checked
+               if ( is_dir( $dir ) ) {
+                       return true;
+               }
+
                // PHP doesn't report the path in its warning message, so add our own to aid in diagnosis.
                wfLogWarning( sprintf( "failed to mkdir \"%s\" mode 0%o", $dir, $mode ) );
        }
@@ -2759,9 +2765,11 @@ function wfShellExecDisabled() {
  *                 added to the executed command environment.
  * @param array $limits optional array with limits(filesize, memory, time, walltime)
  *                 this overwrites the global wgShellMax* limits.
- * @return string collected stdout as a string (trailing newlines stripped)
+ * @param array $options Array of options. Only one is "duplicateStderr" => true, which
+ *                 Which duplicates stderr to stdout, including errors from limit.sh
+ * @return string collected stdout as a string
  */
-function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array() ) {
+function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array(), $options = array() ) {
        global $IP, $wgMaxShellMemory, $wgMaxShellFileSize, $wgMaxShellTime,
                $wgMaxShellWallClockTime, $wgShellCgroup;
 
@@ -2773,6 +2781,8 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array
                        'Unable to run external programs, passthru() is disabled.';
        }
 
+       $includeStderr = isset( $options['duplicateStderr'] ) && $options['duplicateStderr'];
+
        wfInitShellLocale();
 
        $envcmd = '';
@@ -2795,6 +2805,10 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array
        $cmd = $envcmd . $cmd;
 
        if ( php_uname( 's' ) == 'Linux' ) {
+               $stderrDuplication = '';
+               if ( $includeStderr ) {
+                       $stderrDuplication = 'exec 2>&1; ';
+               }
                $time = intval ( isset( $limits['time'] ) ? $limits['time'] : $wgMaxShellTime );
                if ( isset( $limits['walltime'] ) ) {
                        $wallTime = intval( $limits['walltime'] );
@@ -2810,17 +2824,25 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array
                        $cmd = '/bin/bash ' . escapeshellarg( "$IP/includes/limit.sh" ) . ' ' .
                                escapeshellarg( $cmd ) . ' ' .
                                escapeshellarg(
+                                       $stderrDuplication .
                                        "MW_CPU_LIMIT=$time; " .
                                        'MW_CGROUP=' . escapeshellarg( $wgShellCgroup ) . '; ' .
                                        "MW_MEM_LIMIT=$mem; " .
                                        "MW_FILE_SIZE_LIMIT=$filesize; " .
                                        "MW_WALL_CLOCK_LIMIT=$wallTime"
                                );
+               } else {
+                       $cmd .= ' 2>&1';
                }
+       } elseif ( $includeStderr ) {
+               $cmd .= ' 2>&1';
        }
        wfDebug( "wfShellExec: $cmd\n" );
 
-       $retval = 1; // error by default?
+       // Default to an unusual value that shouldn't happen naturally,
+       // so in the unlikely event of a weird php bug, it would be
+       // more obvious what happened.
+       $retval = 200;
        ob_start();
        passthru( $cmd, $retval );
        $output = ob_get_contents();
@@ -2832,6 +2854,24 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array
        return $output;
 }
 
+/**
+ * Execute a shell command, returning both stdout and stderr. Convenience
+ * function, as all the arguments to wfShellExec can become unwieldy.
+ *
+ * @note This also includes errors from limit.sh, e.g. if $wgMaxShellFileSize is exceeded.
+ * @param string $cmd Command line, properly escaped for shell.
+ * @param &$retval null|Mixed optional, will receive the program's exit code.
+ *                 (non-zero is usually failure)
+ * @param array $environ optional environment variables which should be
+ *                 added to the executed command environment.
+ * @param array $limits optional array with limits(filesize, memory, time, walltime)
+ *                 this overwrites the global wgShellMax* limits.
+ * @return string collected stdout and stderr as a string
+ */
+function wfShellExecWithStderr( $cmd, &$retval = null, $environ = array(), $limits = array() ) {
+       return wfShellExec( $cmd, $retval, $environ, $limits, array( 'duplicateStderr' => true ) );
+}
+
 /**
  * Workaround for http://bugs.php.net/bug.php?id=45132
  * escapeshellarg() destroys non-ASCII characters if LANG is not a UTF-8 locale
index ed9440c..5de34d6 100644 (file)
@@ -700,7 +700,7 @@ class HTMLForm extends ContextSource {
         * @return String HTML.
         */
        function getButtons() {
-               $html = '';
+               $html = '<span class="mw-htmlform-submit-buttons">';
 
                if ( $this->mShowSubmit ) {
                        $attribs = array();
@@ -750,6 +750,8 @@ class HTMLForm extends ContextSource {
                        $html .= Html::element( 'input', $attrs );
                }
 
+               $html .= '</span>';
+
                return $html;
        }
 
diff --git a/includes/HtmlFormatter.php b/includes/HtmlFormatter.php
new file mode 100644 (file)
index 0000000..248a76f
--- /dev/null
@@ -0,0 +1,356 @@
+<?php
+/**
+ * Performs transformations of HTML by wrapping around libxml2 and working
+ * around its countless bugs.
+ *
+ * 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
+ */
+class HtmlFormatter {
+       /**
+        * @var DOMDocument
+        */
+       private $doc;
+
+       private $html;
+       private $itemsToRemove = array();
+       private $elementsToFlatten = array();
+       protected $removeMedia = false;
+
+       /**
+        * Constructor
+        *
+        * @param string $html: Text to process
+        */
+       public function __construct( $html ) {
+               $this->html = $html;
+       }
+
+       /**
+        * Turns a chunk of HTML into a proper document
+        * @param string $html
+        * @return string
+        */
+       public static function wrapHTML( $html ) {
+               return '<!doctype html><html><head></head><body>' . $html . '</body></html>';
+       }
+
+       /**
+        * Override this in descendant class to modify HTML after it has been converted from DOM tree
+        * @param string $html: HTML to process
+        * @return string: Processed HTML
+        */
+       protected function onHtmlReady( $html ) {
+               return $html;
+       }
+
+       /**
+        * @return DOMDocument: DOM to manipulate
+        */
+       public function getDoc() {
+               if ( !$this->doc ) {
+                       $html = mb_convert_encoding( $this->html, 'HTML-ENTITIES', 'UTF-8' );
+
+                       // Workaround for bug that caused spaces before references
+                       // to disappear during processing:
+                       // https://bugzilla.wikimedia.org/show_bug.cgi?id=53086
+                       //
+                       // Please replace with a better fix if one can be found.
+                       $html = str_replace( ' <', '&#32;<', $html );
+
+                       libxml_use_internal_errors( true );
+                       $loader = libxml_disable_entity_loader();
+                       $this->doc = new DOMDocument();
+                       $this->doc->strictErrorChecking = false;
+                       $this->doc->loadHTML( $html );
+                       libxml_disable_entity_loader( $loader );
+                       libxml_use_internal_errors( false );
+                       $this->doc->encoding = 'UTF-8';
+               }
+               return $this->doc;
+       }
+
+       /**
+        * Sets whether images/videos/sounds should be removed from output
+        * @param bool $flag
+        */
+       public function setRemoveMedia( $flag = true ) {
+               $this->removeMedia = $flag;
+       }
+
+       /**
+        * Adds one or more selector of content to remove. A subset of CSS selector
+        * syntax is supported:
+        *
+        *   <tag>
+        *   <tag>.class
+        *   .<class>
+        *   #<id>
+        *
+        * @param Array|string $selectors: Selector(s) of stuff to remove
+        */
+       public function remove( $selectors ) {
+               $this->itemsToRemove = array_merge( $this->itemsToRemove, (array)$selectors );
+       }
+
+       /**
+        * Adds one or more element name to the list to flatten (remove tag, but not its content)
+        * Can accept undelimited regexes
+        *
+        * Note this interface may fail in surprising unexpected ways due to usage of regexes,
+        * so should not be relied on for HTML markup security measures.
+        *
+        * @param Array|string $elements: Name(s) of tag(s) to flatten
+        */
+       public function flatten( $elements ) {
+               $this->elementsToFlatten = array_merge( $this->elementsToFlatten, (array)$elements );
+       }
+
+       /**
+        * Instructs the formatter to flatten all tags
+        */
+       public function flattenAllTags() {
+               $this->flatten( '[?!]?[a-z0-9]+' );
+       }
+
+       /**
+        * Removes content we've chosen to remove
+        */
+       public function filterContent() {
+               wfProfileIn( __METHOD__ );
+               $removals = $this->parseItemsToRemove();
+
+               if ( !$removals ) {
+                       wfProfileOut( __METHOD__ );
+                       return;
+               }
+
+               $doc = $this->getDoc();
+
+               // Remove tags
+
+               // You can't remove DOMNodes from a DOMNodeList as you're iterating
+               // over them in a foreach loop. It will seemingly leave the internal
+               // iterator on the foreach out of wack and results will be quite
+               // strange. Though, making a queue of items to remove seems to work.
+               $domElemsToRemove = array();
+               foreach ( $removals['TAG'] as $tagToRemove ) {
+                       $tagToRemoveNodes = $doc->getElementsByTagName( $tagToRemove );
+                       foreach ( $tagToRemoveNodes as $tagToRemoveNode ) {
+                               if ( $tagToRemoveNode ) {
+                                       $domElemsToRemove[] = $tagToRemoveNode;
+                               }
+                       }
+               }
+
+               $this->removeElements( $domElemsToRemove );
+
+               // Elements with named IDs
+               $domElemsToRemove = array();
+               foreach ( $removals['ID'] as $itemToRemove ) {
+                       $itemToRemoveNode = $doc->getElementById( $itemToRemove );
+                       if ( $itemToRemoveNode ) {
+                               $domElemsToRemove[] = $itemToRemoveNode;
+                       }
+               }
+               $this->removeElements( $domElemsToRemove );
+
+               // CSS Classes
+               $domElemsToRemove = array();
+               $xpath = new DOMXpath( $doc );
+               foreach ( $removals['CLASS'] as $classToRemove ) {
+                       $elements = $xpath->query( '//*[contains(@class, "' . $classToRemove . '")]' );
+
+                       /** @var $element DOMElement */
+                       foreach ( $elements as $element ) {
+                               $classes = $element->getAttribute( 'class' );
+                               if ( preg_match( "/\b$classToRemove\b/", $classes ) && $element->parentNode ) {
+                                       $domElemsToRemove[] = $element;
+                               }
+                       }
+               }
+               $this->removeElements( $domElemsToRemove );
+
+               // Tags with CSS Classes
+               foreach ( $removals['TAG_CLASS'] as $classToRemove ) {
+                       $parts = explode( '.', $classToRemove );
+
+                       $elements = $xpath->query(
+                               '//' . $parts[0] . '[@class="' . $parts[1] . '"]'
+                       );
+
+                       $this->removeElements( $elements );
+               }
+
+               wfProfileOut( __METHOD__ );
+       }
+
+       /**
+        * Removes a list of elelments from DOMDocument
+        * @param array|DOMNodeList $elements
+        */
+       private function removeElements( $elements ) {
+               $list = $elements;
+               if ( $elements instanceof DOMNodeList ) {
+                       $list = array();
+                       foreach ( $elements as $element ) {
+                               $list[] = $element;
+                       }
+               }
+               /** @var $element DOMElement */
+               foreach ( $list as $element ) {
+                       if ( $element->parentNode ) {
+                               $element->parentNode->removeChild( $element );
+                       }
+               }
+       }
+
+       /**
+        * libxml in its usual pointlessness converts many chars to entities - this function
+        * perfoms a reverse conversion
+        * @param string $html
+        * @return string
+        */
+       private function fixLibXML( $html ) {
+               wfProfileIn( __METHOD__ );
+               static $replacements;
+               if ( ! $replacements ) {
+                       // We don't include rules like '&#34;' => '&amp;quot;' because entities had already been
+                       // normalized by libxml. Using this function with input not sanitized by libxml is UNSAFE!
+                       $replacements = new ReplacementArray( array(
+                               '&quot;' => '&amp;quot;',
+                               '&amp;' => '&amp;amp;',
+                               '&lt;' => '&amp;lt;',
+                               '&gt;' => '&amp;gt;',
+                       ) );
+               }
+               $html = $replacements->replace( $html );
+               $html = mb_convert_encoding( $html, 'UTF-8', 'HTML-ENTITIES' );
+               wfProfileOut( __METHOD__ );
+               return $html;
+       }
+
+       /**
+        * Performs final transformations and returns resulting HTML
+        *
+        * @param DOMElement|string|null $element: ID of element to get HTML from or false to get it from the whole tree
+        * @return string: Processed HTML
+        */
+       public function getText( $element = null ) {
+               wfProfileIn( __METHOD__ );
+
+               if ( $this->doc ) {
+                       if ( $element !== null && !( $element instanceof DOMElement ) ) {
+                               $element = $this->doc->getElementById( $element );
+                       }
+                       if ( $element ) {
+                               $body = $this->doc->getElementsByTagName( 'body' )->item( 0 );
+                               $nodesArray = array();
+                               foreach ( $body->childNodes as $node ) {
+                                       $nodesArray[] = $node;
+                               }
+                               foreach ( $nodesArray as $nodeArray ) {
+                                       $body->removeChild( $nodeArray );
+                               }
+                               $body->appendChild( $element );
+                       }
+                       $html = $this->doc->saveHTML();
+                       $html = $this->fixLibXml( $html );
+               } else {
+                       $html = $this->html;
+               }
+               if ( wfIsWindows() ) {
+                       // Appears to be cleanup for CRLF misprocessing of unknown origin
+                       // when running server on Windows platform.
+                       //
+                       // If this error continues in the future, please track it down in the
+                       // XML code paths if possible and fix there.
+                       $html = str_replace( '&#13;', '', $html );
+               }
+               $html = preg_replace( '/<!--.*?-->|^.*?<body>|<\/body>.*$/s', '', $html );
+               $html = $this->onHtmlReady( $html );
+
+               if ( $this->elementsToFlatten ) {
+                       $elements = implode( '|', $this->elementsToFlatten );
+                       $html = preg_replace( "#</?($elements)\\b[^>]*>#is", '', $html );
+               }
+
+               wfProfileOut( __METHOD__ );
+               return $html;
+       }
+
+       /**
+        * @param $selector: CSS selector to parse
+        * @param $type
+        * @param $rawName
+        * @return bool: Whether the selector was successfully recognised
+        */
+       protected function parseSelector( $selector, &$type, &$rawName ) {
+               if ( strpos( $selector, '.' ) === 0 ) {
+                       $type = 'CLASS';
+                       $rawName = substr( $selector, 1 );
+               } elseif ( strpos( $selector, '#' ) === 0 ) {
+                       $type = 'ID';
+                       $rawName = substr( $selector, 1 );
+               } elseif ( strpos( $selector, '.' ) !== 0 &&
+                       strpos( $selector, '.' ) !== false )
+               {
+                       $type = 'TAG_CLASS';
+                       $rawName = $selector;
+               } elseif ( strpos( $selector, '[' ) === false
+                       && strpos( $selector, ']' ) === false )
+               {
+                       $type = 'TAG';
+                       $rawName = $selector;
+               } else {
+                       throw new MWException( __METHOD__ . "(): unrecognized selector '$selector'" );
+               }
+
+               return true;
+       }
+
+       /**
+        * Transforms CSS selectors into an internal representation suitable for processing
+        * @return array
+        */
+       protected function parseItemsToRemove() {
+               wfProfileIn( __METHOD__ );
+               $removals = array(
+                       'ID' => array(),
+                       'TAG' => array(),
+                       'CLASS' => array(),
+                       'TAG_CLASS' => array(),
+               );
+
+               foreach ( $this->itemsToRemove as $itemToRemove ) {
+                       $type = '';
+                       $rawName = '';
+                       if ( $this->parseSelector( $itemToRemove, $type, $rawName ) ) {
+                               $removals[$type][] = $rawName;
+                       }
+               }
+
+               if ( $this->removeMedia ) {
+                       $removals['TAG'][] = 'img';
+                       $removals['TAG'][] = 'audio';
+                       $removals['TAG'][] = 'video';
+               }
+
+               wfProfileOut( __METHOD__ );
+               return $removals;
+       }
+}
index 2051e69..fc76310 100644 (file)
@@ -212,7 +212,7 @@ class IP {
                                        $longest = $match;
                                        $longestPos = $pos;
                                }
-                               $offset += ( $pos + strlen( $match ) ); // advance
+                               $offset = ( $pos + strlen( $match ) ); // advance
                        }
                        if ( $longest !== false ) {
                                // Replace this portion of the string with the '::' abbreviation
index adb2ab7..427a1ad 100644 (file)
@@ -124,6 +124,7 @@ class MagicWord {
                'revisionyear',
                'revisiontimestamp',
                'revisionuser',
+               'revisionsize',
                'subpagename',
                'subpagenamee',
                'talkspace',
index 0df28a8..cc3f9b3 100644 (file)
@@ -1721,6 +1721,7 @@ class OutputPage extends ContextSource {
                                array(
                                        "{$wgCookiePrefix}Token",
                                        "{$wgCookiePrefix}LoggedOut",
+                                       "forceHTTPS",
                                        session_name()
                                ),
                                $wgCacheVaryCookies
@@ -2481,10 +2482,6 @@ $templates
                $userdir = $this->getLanguage()->getDir();
                $sitedir = $wgContLang->getDir();
 
-               if ( $sk->commonPrintStylesheet() ) {
-                       $this->addModuleStyles( 'mediawiki.legacy.wikiprintable' );
-               }
-
                $ret = Html::htmlHeader( array( 'lang' => $this->getLanguage()->getHtmlCode(), 'dir' => $userdir, 'class' => 'client-nojs' ) );
 
                if ( $this->getHTMLTitle() == '' ) {
@@ -2969,24 +2966,24 @@ $templates
        public function getJSVars() {
                global $wgContLang;
 
-               $latestRevID = 0;
-               $pageID = 0;
-               $canonicalName = false; # bug 21115
+               $curRevisionId = 0;
+               $articleId = 0;
+               $canonicalSpecialPageName = false; # bug 21115
 
                $title = $this->getTitle();
                $ns = $title->getNamespace();
-               $nsname = MWNamespace::exists( $ns ) ? MWNamespace::getCanonicalName( $ns ) : $title->getNsText();
+               $canonicalNamespace = MWNamespace::exists( $ns ) ? MWNamespace::getCanonicalName( $ns ) : $title->getNsText();
 
                // Get the relevant title so that AJAX features can use the correct page name
                // when making API requests from certain special pages (bug 34972).
                $relevantTitle = $this->getSkin()->getRelevantTitle();
 
                if ( $ns == NS_SPECIAL ) {
-                       list( $canonicalName, /*...*/ ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
+                       list( $canonicalSpecialPageName, /*...*/ ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
                } elseif ( $this->canUseWikiPage() ) {
                        $wikiPage = $this->getWikiPage();
-                       $latestRevID = $wikiPage->getLatest();
-                       $pageID = $wikiPage->getId();
+                       $curRevisionId = $wikiPage->getLatest();
+                       $articleId = $wikiPage->getId();
                }
 
                $lang = $title->getPageLanguage();
@@ -3008,13 +3005,14 @@ $templates
                $user = $this->getUser();
 
                $vars = array(
-                       'wgCanonicalNamespace' => $nsname,
-                       'wgCanonicalSpecialPageName' => $canonicalName,
+                       'wgCanonicalNamespace' => $canonicalNamespace,
+                       'wgCanonicalSpecialPageName' => $canonicalSpecialPageName,
                        'wgNamespaceNumber' => $title->getNamespace(),
                        'wgPageName' => $title->getPrefixedDBkey(),
                        'wgTitle' => $title->getText(),
-                       'wgCurRevisionId' => $latestRevID,
-                       'wgArticleId' => $pageID,
+                       'wgCurRevisionId' => $curRevisionId,
+                       'wgRevisionId' => (int)$this->getRevisionId(),
+                       'wgArticleId' => $articleId,
                        'wgIsArticle' => $this->isArticle(),
                        'wgIsRedirect' => $title->isRedirect(),
                        'wgAction' => Action::getActionName( $this->getContext() ),
index 29d6e07..c9caf4f 100644 (file)
@@ -335,9 +335,11 @@ class Preferences {
                        'type' => 'radio',
                        'section' => 'personal/i18n',
                        'options' => array(
-                               $context->msg( 'gender-male' )->text() => 'male',
+                               $context->msg( 'parentheses',
+                                       $context->msg( 'gender-unknown' )->text()
+                               )->text() => 'unknown',
                                $context->msg( 'gender-female' )->text() => 'female',
-                               $context->msg( 'gender-unknown' )->text() => 'unknown',
+                               $context->msg( 'gender-male' )->text() => 'male',
                        ),
                        'label-message' => 'yourgender',
                        'help-message' => 'prefs-help-gender',
@@ -388,6 +390,18 @@ class Preferences {
                        }
                }
 
+               // Stuff from Language::getExtraUserToggles()
+               // FIXME is this dead code? $extraUserToggles doesn't seem to be defined for any language
+               $toggles = $wgContLang->getExtraUserToggles();
+
+               foreach ( $toggles as $toggle ) {
+                       $defaultPreferences[$toggle] = array(
+                               'type' => 'toggle',
+                               'section' => 'personal/i18n',
+                               'label-message' => "tog-$toggle",
+                       );
+               }
+
                // show a preview of the old signature first
                $oldsigWikiText = $wgParser->preSaveTransform( "~~~", $context->getTitle(), $user, ParserOptions::newFromContext( $context ) );
                $oldsigHTML = $context->getOutput()->parseInline( $oldsigWikiText, true, true );
@@ -694,6 +708,18 @@ class Preferences {
         * @param $defaultPreferences Array
         */
        static function renderingPreferences( $user, IContextSource $context, &$defaultPreferences ) {
+               ## Diffs ####################################
+               $defaultPreferences['diffonly'] = array(
+                       'type' => 'toggle',
+                       'section' => 'rendering/diffs',
+                       'label-message' => 'tog-diffonly',
+               );
+               $defaultPreferences['norollbackdiff'] = array(
+                       'type' => 'toggle',
+                       'section' => 'rendering/diffs',
+                       'label-message' => 'tog-norollbackdiff',
+               );
+
                ## Page Rendering ##############################
                global $wgAllowUserCssPrefs;
                if ( $wgAllowUserCssPrefs ) {
@@ -1066,35 +1092,9 @@ class Preferences {
        }
 
        /**
-        * @param $user User
-        * @param $context IContextSource
-        * @param $defaultPreferences Array
+        * Dummy, kept for backwards-compatibility.
         */
        static function miscPreferences( $user, IContextSource $context, &$defaultPreferences ) {
-               global $wgContLang;
-
-               ## Misc #####################################
-               $defaultPreferences['diffonly'] = array(
-                       'type' => 'toggle',
-                       'section' => 'misc/diffs',
-                       'label-message' => 'tog-diffonly',
-               );
-               $defaultPreferences['norollbackdiff'] = array(
-                       'type' => 'toggle',
-                       'section' => 'misc/diffs',
-                       'label-message' => 'tog-norollbackdiff',
-               );
-
-               // Stuff from Language::getExtraUserToggles()
-               $toggles = $wgContLang->getExtraUserToggles();
-
-               foreach ( $toggles as $toggle ) {
-                       $defaultPreferences[$toggle] = array(
-                               'type' => 'toggle',
-                               'section' => 'personal/i18n',
-                               'label-message' => "tog-$toggle",
-                       );
-               }
        }
 
        /**
index 1d20f18..499d821 100644 (file)
@@ -54,7 +54,6 @@ class Sanitizer {
         * List of all named character entities defined in HTML 4.01
         * http://www.w3.org/TR/html4/sgml/entities.html
         * As well as &apos; which is only defined starting in XHTML1.
-        * @private
         */
        private static $htmlEntities = array(
                'Aacute'   => 193,
@@ -322,7 +321,6 @@ class Sanitizer {
 
        /**
         * Lazy-initialised attributes regex, see getAttribsRegex()
-        * @private
         */
        private static $attribsRegex;
 
index 6e2359a..355993c 100644 (file)
@@ -189,7 +189,7 @@ class SiteStats {
        static function jobs() {
                if ( !isset( self::$jobs ) ) {
                        $dbr = wfGetDB( DB_SLAVE );
-                       self::$jobs = $dbr->estimateRowCount( 'job' );
+                       self::$jobs = array_sum( JobQueueGroup::singleton()->getQueueSizes() );
                        /* Zero rows still do single row read for row that doesn't exist, but people are annoyed by that */
                        if ( self::$jobs == 1 ) {
                                self::$jobs = 0;
index 26cac58..5801806 100644 (file)
@@ -1342,14 +1342,19 @@ abstract class Skin extends ContextSource {
        }
 
        /**
-        * Should we load mediawiki.legacy.wikiprintable?  Skins that have their own
-        * print stylesheet should override this and return false.  (This is an
-        * ugly hack to get Monobook to play nicely with OutputPage::headElement().)
+        * This function previously controlled whether the 'mediawiki.legacy.wikiprintable' module
+        * should be loaded by OutputPage. That module no longer exists and the return value of this
+        * method is ignored.
         *
+        * If your skin doesn't provide its own print styles, the 'mediawiki.legacy.commonPrint' module
+        * can be used instead (SkinTemplate-based skins do it automatically).
+        *
+        * @deprecated since 1.22
         * @return bool
         */
        public function commonPrintStylesheet() {
-               return true;
+               wfDeprecated( __METHOD__, '1.22' );
+               return false;
        }
 
        /**
index e3ef6ac..44cafe9 100644 (file)
@@ -131,6 +131,7 @@ class SkinTemplate extends Skin {
        public function getLanguages() {
                global $wgHideInterlanguageLinks;
                $out = $this->getOutput();
+               $userLang = $this->getLanguage();
 
                # Language links
                $language_urls = array();
@@ -151,10 +152,14 @@ class SkinTemplate extends Skin {
                                                $ilLangName = $this->formatLanguageName( $ilLangName );
                                        }
 
+                                       // CLDR extension or similar is required to localize the language name;
+                                       // otherwise we'll end up with the autonym again.
+                                       $ilLangLocalName = Language::fetchLanguageName( $ilInterwikiCode, $userLang->getCode() );
+
                                        $language_urls[] = array(
                                                'href' => $languageLinkTitle->getFullURL(),
                                                'text' => $ilLangName,
-                                               'title' => $languageLinkTitle->getText(),
+                                               'title' => wfMessage( 'tooltip-iwiki', $languageLinkTitle->getText(), $ilLangLocalName )->escaped(),
                                                'class' => $class,
                                                'lang' => wfBCP47( $ilInterwikiCode ),
                                                'hreflang' => wfBCP47( $ilInterwikiCode ),
@@ -1275,12 +1280,14 @@ class SkinTemplate extends Skin {
                                );
                        }
 
-                       $sur = new UserrightsPage;
-                       $sur->setContext( $this->getContext() );
-                       if ( $sur->userCanExecute( $this->getUser() ) ) {
-                               $nav_urls['userrights'] = array(
-                                       'href' => self::makeSpecialUrlSubpage( 'Userrights', $rootUser )
-                               );
+                       if ( !$user->isAnon() ) {
+                               $sur = new UserrightsPage;
+                               $sur->setContext( $this->getContext() );
+                               if ( $sur->userCanExecute( $this->getUser() ) ) {
+                                       $nav_urls['userrights'] = array(
+                                               'href' => self::makeSpecialUrlSubpage( 'Userrights', $rootUser )
+                                       );
+                               }
                        }
                }
 
@@ -1296,10 +1303,6 @@ class SkinTemplate extends Skin {
        function getNameSpaceKey() {
                return $this->getTitle()->getNamespaceKey();
        }
-
-       public function commonPrintStylesheet() {
-               return false;
-       }
 }
 
 /**
index 94782db..61630a9 100644 (file)
@@ -1229,6 +1229,15 @@ class SpecialCreateAccount extends SpecialRedirectToSpecial {
        function __construct() {
                parent::__construct( 'CreateAccount', 'Userlogin', 'signup', array( 'uselang' ) );
        }
+
+       // No reason to hide this link on Special:Specialpages
+       public function isListed() {
+               return true;
+       }
+
+       protected function getGroupName() {
+               return 'login';
+       }
 }
 /**
  * SpecialMypage, SpecialMytalk and SpecialMycontributions special pages
index 374d5ca..1373f3d 100644 (file)
@@ -91,20 +91,20 @@ class StatCounter {
         * @return void
         */
        protected function sendDeltasUDP( array $deltas ) {
-               global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgAggregateStatsID;
+               global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgAggregateStatsID,
+                       $wgStatsFormatString;
 
                $id = strlen( $wgAggregateStatsID ) ? $wgAggregateStatsID : wfWikiID();
 
                $lines = array();
                foreach ( $deltas as $key => $count ) {
-                       $lines[] = "stats/{$id} - {$count} 1 1 1 1 {$key}\n";
+                       $lines[] = sprintf( $wgStatsFormatString, $id, $count, $key );
                }
 
                if ( count( $lines ) ) {
                        static $socket = null;
                        if ( !$socket ) {
                                $socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
-                               array_unshift( $lines, "stats/{$id} - 1 1 1 1 1 -total\n" );
                        }
                        $packet = '';
                        $packets = array();
index 48cde0e..c1545e6 100644 (file)
@@ -38,6 +38,9 @@ class StringUtils {
         * unit testing our internal implementation.
         *
         * @since 1.21
+        * @note In MediaWiki 1.21, this function did not provide proper UTF-8 validation.
+        * In particular, the pure PHP code path did not in fact check for overlong forms.
+        * Beware of this when backporting code to that version of MediaWiki.
         *
         * @param string $value String to check
         * @param boolean $disableMbstring Whether to use the pure PHP
@@ -47,26 +50,64 @@ class StringUtils {
         * @return boolean Whether the given $value is a valid UTF-8 encoded string
         */
        static function isUtf8( $value, $disableMbstring = false ) {
+               $value = (string)$value;
 
-               if ( preg_match( '/[\x80-\xff]/', $value ) === 0 ) {
-                       # no high bit set, this is pure ASCII which is de facto
-                       # valid UTF-8
+               // If the mbstring extension is loaded, use it. However, before PHP 5.4, values above
+               // U+10FFFF are incorrectly allowed, so we have to check for them separately.
+               if ( !$disableMbstring && function_exists( 'mb_check_encoding' ) ) {
+                       static $newPHP;
+                       if ( $newPHP === null ) {
+                               $newPHP = !mb_check_encoding( "\xf4\x90\x80\x80", 'UTF-8' );
+                       }
+
+                       return mb_check_encoding( $value, 'UTF-8' ) &&
+                               ( $newPHP || preg_match( "/\xf4[\x90-\xbf]|[\xf5-\xff]/S", $value ) === 0 );
+               }
+
+               if ( preg_match( "/[\x80-\xff]/S", $value ) === 0 ) {
+                       // String contains only ASCII characters, has to be valid
                        return true;
                }
 
-               if ( !$disableMbstring && function_exists( 'mb_check_encoding' ) ) {
-                       return mb_check_encoding( $value, 'UTF-8' );
-               } else {
-                       $hasUtf8 = preg_match( '/^(?>
-                                 [\x00-\x7f]
-                               | [\xc0-\xdf][\x80-\xbf]
-                               | [\xe0-\xef][\x80-\xbf]{2}
-                               | [\xf0-\xf7][\x80-\xbf]{3}
-                               | [\xf8-\xfb][\x80-\xbf]{4}
-                               | \xfc[\x84-\xbf][\x80-\xbf]{4}
-                       )+$/x', $value );
-                       return ( $hasUtf8 > 0 );
+               // PCRE implements repetition using recursion; to avoid a stack overflow (and segfault)
+               // for large input, we check for invalid sequences (<= 5 bytes) rather than valid
+               // sequences, which can be as long as the input string is. Multiple short regexes are
+               // used rather than a single long regex for performance.
+               static $regexes;
+               if ( $regexes === null ) {
+                       $cont = "[\x80-\xbf]";
+                       $after = "(?!$cont)"; // "(?:[^\x80-\xbf]|$)" would work here
+                       $regexes = array(
+                               // Continuation byte at the start
+                               "/^$cont/",
+
+                               // ASCII byte followed by a continuation byte
+                               "/[\\x00-\x7f]$cont/S",
+
+                               // Illegal byte
+                               "/[\xc0\xc1\xf5-\xff]/S",
+
+                               // Invalid 2-byte sequence, or valid one then an extra continuation byte
+                               "/[\xc2-\xdf](?!$cont$after)/S",
+
+                               // Invalid 3-byte sequence, or valid one then an extra continuation byte
+                               "/\xe0(?![\xa0-\xbf]$cont$after)/",
+                               "/[\xe1-\xec\xee\xef](?!$cont{2}$after)/S",
+                               "/\xed(?![\x80-\x9f]$cont$after)/",
+
+                               // Invalid 4-byte sequence, or valid one then an extra continuation byte
+                               "/\xf0(?![\x90-\xbf]$cont{2}$after)/",
+                               "/[\xf1-\xf3](?!$cont{3}$after)/S",
+                               "/\xf4(?![\x80-\x8f]$cont{2}$after)/",
+                       );
                }
+
+               foreach ( $regexes as $regex ) {
+                       if ( preg_match( $regex, $value ) !== 0 ) {
+                               return false;
+                       }
+               }
+               return true;
        }
 
        /**
@@ -217,8 +258,8 @@ class StringUtils {
        /**
         * More or less "markup-safe" explode()
         * Ignores any instances of the separator inside <...>
-        * @param $separator String
-        * @param $text String
+        * @param string $separator
+        * @param string $text
         * @return array
         */
        static function explodeMarkup( $separator, $text ) {
@@ -244,8 +285,8 @@ class StringUtils {
         * Escape a string to make it suitable for inclusion in a preg_replace()
         * replacement parameter.
         *
-        * @param $string String
-        * @return String
+        * @param string $string
+        * @return string
         */
        static function escapeRegexReplacement( $string ) {
                $string = str_replace( '\\', '\\\\', $string );
@@ -256,8 +297,8 @@ class StringUtils {
        /**
         * Workalike for explode() with limited memory usage.
         * Returns an Iterator
-        * @param $separator
-        * @param $subject
+        * @param string $separator
+        * @param string $subject
         * @return ArrayIterator|ExplodeIterator
         */
        static function explode( $separator, $subject ) {
@@ -290,14 +331,14 @@ class RegexlikeReplacer extends Replacer {
        var $r;
 
        /**
-        * @param $r string
+        * @param string $r
         */
        function __construct( $r ) {
                $this->r = $r;
        }
 
        /**
-        * @param $matches array
+        * @param array $matches
         * @return string
         */
        function replace( $matches ) {
@@ -318,7 +359,7 @@ class DoubleReplacer extends Replacer {
        /**
         * @param $from
         * @param $to
-        * @param $index int
+        * @param int $index
         */
        function __construct( $from, $to, $index = 0 ) {
                $this->from = $from;
@@ -327,7 +368,7 @@ class DoubleReplacer extends Replacer {
        }
 
        /**
-        * @param $matches array
+        * @param array $matches
         * @return mixed
         */
        function replace( $matches ) {
@@ -343,7 +384,7 @@ class HashtableReplacer extends Replacer {
 
        /**
         * @param $table
-        * @param $index int
+        * @param int $index
         */
        function __construct( $table, $index = 0 ) {
                $this->table = $table;
@@ -351,7 +392,7 @@ class HashtableReplacer extends Replacer {
        }
 
        /**
-        * @param $matches array
+        * @param array $matches
         * @return mixed
         */
        function replace( $matches ) {
@@ -389,6 +430,7 @@ class ReplacementArray {
 
        /**
         * Set the whole replacement array at once
+        * @param array $data
         */
        function setArray( $data ) {
                $this->data = $data;
@@ -404,8 +446,8 @@ class ReplacementArray {
 
        /**
         * Set an element of the replacement array
-        * @param $from string
-        * @param $to string
+        * @param string $from
+        * @param string $to
         */
        function setPair( $from, $to ) {
                $this->data[$from] = $to;
@@ -413,7 +455,7 @@ class ReplacementArray {
        }
 
        /**
-        * @param $data array
+        * @param array $data
         */
        function mergeArray( $data ) {
                $this->data = array_merge( $this->data, $data );
@@ -421,7 +463,7 @@ class ReplacementArray {
        }
 
        /**
-        * @param $other
+        * @param ReplacementArray $other
         */
        function merge( $other ) {
                $this->data = array_merge( $this->data, $other->data );
@@ -429,7 +471,7 @@ class ReplacementArray {
        }
 
        /**
-        * @param $from string
+        * @param string $from
         */
        function removePair( $from ) {
                unset( $this->data[$from] );
@@ -437,7 +479,7 @@ class ReplacementArray {
        }
 
        /**
-        * @param $data array
+        * @param array $data
         */
        function removeArray( $data ) {
                foreach ( $data as $from => $to ) {
@@ -447,7 +489,7 @@ class ReplacementArray {
        }
 
        /**
-        * @param $subject string
+        * @param string $subject
         * @return string
         */
        function replace( $subject ) {
@@ -494,15 +536,15 @@ class ExplodeIterator implements Iterator {
 
        /**
         * Construct a DelimIterator
-        * @param $delim string
-        * @param $s string
+        * @param string $delim
+        * @param string $subject
         */
-       function __construct( $delim, $s ) {
-               $this->subject = $s;
+       function __construct( $delim, $subject ) {
+               $this->subject = $subject;
                $this->delim = $delim;
 
                // Micro-optimisation (theoretical)
-               $this->subjectLength = strlen( $s );
+               $this->subjectLength = strlen( $subject );
                $this->delimLength = strlen( $delim );
 
                $this->rewind();
@@ -530,6 +572,9 @@ class ExplodeIterator implements Iterator {
                return $this->current;
        }
 
+       /**
+        * @return int|bool Current position or boolean false if invalid
+        */
        function key() {
                return $this->curPos;
        }
index 59238fa..a3970f3 100644 (file)
  * their associated module code by deferring initialisation until the first
  * method call.
  *
+ * Note on reference parameters:
+ *
+ * If the called method takes any parameters by reference, the __call magic
+ * here won't work correctly. The solution is to unstub the object before
+ * calling the method.
+ *
  * Note on unstub loops:
  *
  * Unstub loops (infinite recursion) sometimes occur when a constructor calls
@@ -63,6 +69,20 @@ class StubObject {
                return is_object( $obj ) && !$obj instanceof StubObject;
        }
 
+       /**
+        * Unstubs an object, if it is a stub object. Can be used to break a
+        * infinite loop when unstubbing an object or to avoid reference parameter
+        * breakage.
+        *
+        * @param $obj Object to check.
+        * @return void
+        */
+       static function unstub( $obj ) {
+               if ( $obj instanceof StubObject ) {
+                       $obj->_unstub( 'unstub', 3 );
+               }
+       }
+
        /**
         * Function called if any function exists with that name in this object.
         * It is used to unstub the object. Only used internally, PHP will call
index 48d972c..edcd6a8 100644 (file)
@@ -270,6 +270,44 @@ class MWTimestamp {
                return $interval;
        }
 
+       /**
+        * Generate a purely relative timestamp, i.e., represent the time elapsed between
+        * the given base timestamp and this object.
+        *
+        * @param MWTimestamp $relativeTo Relative base timestamp (defaults to now)
+        * @param User $user Use to use offset for
+        * @param Language $lang Language to use
+        * @param array $chosenIntervals Intervals to use to represent it
+        * @return string Relative timestamp
+        */
+       public function getRelativeTimestamp(
+               MWTimestamp $relativeTo = null,
+               User $user = null,
+               Language $lang = null,
+               array $chosenIntervals = array()
+       ) {
+               if ( $relativeTo === null ) {
+                       $relativeTo = new self;
+               }
+               if ( $user === null ) {
+                       $user = RequestContext::getMain()->getUser();
+               }
+               if ( $lang === null ) {
+                       $lang = RequestContext::getMain()->getLanguage();
+               }
+
+               $ts = '';
+               $diff = $this->diff( $relativeTo );
+               if ( wfRunHooks( 'GetRelativeTimestamp', array( &$ts, &$diff, $this, $relativeTo, $user, $lang ) ) ) {
+                       $seconds = ( ( ( $diff->days * 24 + $diff->h ) * 60 + $diff->i ) * 60 + $diff->s );
+                       $ts = wfMessage( 'ago', $lang->formatDuration( $seconds, $chosenIntervals ) )
+                               ->inLanguage( $lang )
+                               ->text();
+               }
+
+               return $ts;
+       }
+
        /**
         * @since 1.20
         *
index 734e009..56e9b44 100644 (file)
@@ -491,6 +491,108 @@ class Title {
                return $rxTc;
        }
 
+       /**
+        * Utility method for converting a character sequence from bytes to Unicode.
+        *
+        * Primary usecase being converting $wgLegalTitleChars to a sequence usable in
+        * javascript, as PHP uses UTF-8 bytes where javascript uses Unicode code units.
+        *
+        * @param string $byteClass
+        * @return string
+        */
+       public static function convertByteClassToUnicodeClass( $byteClass ) {
+               $length = strlen( $byteClass );
+               // Input token queue
+               $x0 = $x1 = $x2 = '';
+               // Decoded queue
+               $d0 = $d1 = $d2 = '';
+               // Decoded integer codepoints
+               $ord0 = $ord1 = $ord2 = 0;
+               // Re-encoded queue
+               $r0 = $r1 = $r2 = '';
+               // Output
+               $out = '';
+               // Flags
+               $allowUnicode = false;
+               for ( $pos = 0; $pos < $length; $pos++ ) {
+                       // Shift the queues down
+                       $x2 = $x1;
+                       $x1 = $x0;
+                       $d2 = $d1;
+                       $d1 = $d0;
+                       $ord2 = $ord1;
+                       $ord1 = $ord0;
+                       $r2 = $r1;
+                       $r1 = $r0;
+                       // Load the current input token and decoded values
+                       $inChar = $byteClass[$pos];
+                       if ( $inChar == '\\' ) {
+                               if ( preg_match( '/x([0-9a-fA-F]{2})/A', $byteClass, $m, 0, $pos + 1 ) ) {
+                                       $x0 = $inChar . $m[0];
+                                       $d0 = chr( hexdec( $m[1] ) );
+                                       $pos += strlen( $m[0] );
+                               } elseif ( preg_match( '/[0-7]{3}/A', $byteClass, $m, 0, $pos + 1 ) ) {
+                                       $x0 = $inChar . $m[0];
+                                       $d0 = chr( octdec( $m[0] ) );
+                                       $pos += strlen( $m[0] );
+                               } elseif ( $pos + 1 >= $length ) {
+                                       $x0 = $d0 = '\\';
+                               } else {
+                                       $d0 = $byteClass[$pos + 1];
+                                       $x0 = $inChar . $d0;
+                                       $pos += 1;
+                               }
+                       } else {
+                               $x0 = $d0 = $inChar;
+                       }
+                       $ord0 = ord( $d0 );
+                       // Load the current re-encoded value
+                       if ( $ord0 < 32 || $ord0 == 0x7f ) {
+                               $r0 = sprintf( '\x%02x', $ord0 );
+                       } elseif ( $ord0 >= 0x80 ) {
+                               // Allow unicode if a single high-bit character appears
+                               $r0 = sprintf( '\x%02x', $ord0 );
+                               $allowUnicode = true;
+                       } elseif ( strpos( '-\\[]^', $d0 ) !== false ) {
+                               $r0 = '\\' . $d0;
+                       } else {
+                               $r0 = $d0;
+                       }
+                       // Do the output
+                       if ( $x0 !== '' && $x1 === '-' && $x2 !== '' ) {
+                               // Range
+                               if ( $ord2 > $ord0 ) {
+                                       // Empty range
+                               } elseif ( $ord0 >= 0x80 ) {
+                                       // Unicode range
+                                       $allowUnicode = true;
+                                       if ( $ord2 < 0x80 ) {
+                                               // Keep the non-unicode section of the range
+                                               $out .= "$r2-\\x7F";
+                                       }
+                               } else {
+                                       // Normal range
+                                       $out .= "$r2-$r0";
+                               }
+                               // Reset state to the initial value
+                               $x0 = $x1 = $d0 = $d1 = $r0 = $r1 = '';
+                       } elseif ( $ord2 < 0x80 ) {
+                               // ASCII character
+                               $out .= $r2;
+                       }
+               }
+               if ( $ord1 < 0x80 ) {
+                       $out .= $r1;
+               }
+               if ( $ord0 < 0x80 ) {
+                       $out .= $r0;
+               }
+               if ( $allowUnicode ) {
+                       $out .= '\u0080-\uFFFF';
+               }
+               return $out;
+       }
+
        /**
         * Get a string representation of a title suitable for
         * including in a search index
@@ -3063,7 +3165,7 @@ class Title {
                        return false;
                }
 
-               if ( false !== strpos( $dbkey, UTF8_REPLACEMENT ) ) {
+               if ( strpos( $dbkey, UTF8_REPLACEMENT ) !== false ) {
                        # Contained illegal UTF-8 sequences or forbidden Unicode chars.
                        return false;
                }
@@ -3200,6 +3302,7 @@ class Title {
 
                # Can't make a link to a namespace alone... "empty" local links can only be
                # self-links with a fragment identifier.
+               # TODO: Why do we exclude NS_MAIN (bug 54044)
                if ( $dbkey == '' && $this->mInterwiki == '' && $this->mNamespace != NS_MAIN ) {
                        return false;
                }
@@ -3620,6 +3723,8 @@ class Title {
                        $createRedirect = true;
                }
 
+               wfRunHooks( 'TitleMove', array( $this, $nt, $wgUser ) );
+
                // If it is a file, move it first.
                // It is done before all other moving stuff is done because it's hard to revert.
                $dbw = wfGetDB( DB_MASTER );
@@ -3694,7 +3799,7 @@ class Title {
                                $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
                        }
                        // @todo FIXME: $params?
-                       $log->addEntry( 'move_prot', $nt, $comment, array( $this->getPrefixedText() ) );
+                       $log->addEntry( 'move_prot', $nt, $comment, array( $this->getPrefixedText() ), $wgUser );
                }
 
                # Update watchlists
@@ -3736,7 +3841,8 @@ class Title {
 
                if ( $createRedirect ) {
                        $contentHandler = ContentHandler::getForTitle( $this );
-                       $redirectContent = $contentHandler->makeRedirectContent( $nt );
+                       $redirectContent = $contentHandler->makeRedirectContent( $nt,
+                               wfMessage( 'move-redirect-text' )->inContentLanguage()->plain() );
 
                        // NOTE: If this page's content model does not support redirects, $redirectContent will be null.
                } else {
index 560c5dc..12912e1 100644 (file)
@@ -1489,12 +1489,13 @@ class User {
         * last-hit counters will be shared across wikis.
         *
         * @param string $action Action to enforce; 'edit' if unspecified
+        * @param integer $incrBy Positive amount to increment counter by [defaults to 1]
         * @return bool True if a rate limiter was tripped
         */
-       public function pingLimiter( $action = 'edit' ) {
+       public function pingLimiter( $action = 'edit', $incrBy = 1 ) {
                // Call the 'PingLimiter' hook
                $result = false;
-               if ( !wfRunHooks( 'PingLimiter', array( &$this, $action, &$result ) ) ) {
+               if ( !wfRunHooks( 'PingLimiter', array( &$this, $action, &$result, $incrBy ) ) ) {
                        return $result;
                }
 
@@ -1583,9 +1584,13 @@ class User {
                                }
                        } else {
                                wfDebug( __METHOD__ . ": adding record for $key $summary\n" );
-                               $wgMemc->add( $key, 0, intval( $period ) ); // first ping
+                               if ( $incrBy > 0 ) {
+                                       $wgMemc->add( $key, 0, intval( $period ) ); // first ping
+                               }
+                       }
+                       if ( $incrBy > 0 ) {
+                               $wgMemc->incr( $key, $incrBy );
                        }
-                       $wgMemc->incr( $key );
                }
 
                wfProfileOut( __METHOD__ );
@@ -1700,6 +1705,7 @@ class User {
                        return $this->mLocked;
                }
                global $wgAuth;
+               StubObject::unstub( $wgAuth );
                $authUser = $wgAuth->getUserInstance( $this );
                $this->mLocked = (bool)$authUser->isLocked();
                return $this->mLocked;
@@ -1717,6 +1723,7 @@ class User {
                $this->getBlockedStatus();
                if ( !$this->mHideName ) {
                        global $wgAuth;
+                       StubObject::unstub( $wgAuth );
                        $authUser = $wgAuth->getUserInstance( $this );
                        $this->mHideName = (bool)$authUser->isHidden();
                }
index 55bddfc..b17cb9e 100644 (file)
@@ -881,8 +881,9 @@ class WebRequest {
                        return;
                }
 
-               if ( function_exists( 'apache_request_headers' ) ) {
-                       foreach ( apache_request_headers() as $tempName => $tempValue ) {
+               $apacheHeaders = function_exists( 'apache_request_headers' ) ? apache_request_headers() : false;
+               if ( $apacheHeaders ) {
+                       foreach ( $apacheHeaders as $tempName => $tempValue ) {
                                $this->headers[strtoupper( $tempName )] = $tempValue;
                        }
                } else {
@@ -1143,10 +1144,17 @@ HTML;
                        foreach ( $ipchain as $i => $curIP ) {
                                $curIP = IP::sanitizeIP( IP::canonicalize( $curIP ) );
                                if ( wfIsTrustedProxy( $curIP ) && isset( $ipchain[$i + 1] ) ) {
-                                       if ( wfIsConfiguredProxy( $curIP ) || // bug 48919
-                                               ( IP::isPublic( $ipchain[$i + 1] ) || $wgUsePrivateIPs )
+                                       if ( wfIsConfiguredProxy( $curIP ) || // bug 48919; treat IP as sane
+                                               IP::isPublic( $ipchain[$i + 1] ) ||
+                                               $wgUsePrivateIPs
                                        ) {
-                                               $ip = IP::canonicalize( $ipchain[$i + 1] );
+                                               $nextIP = IP::canonicalize( $ipchain[$i + 1] );
+                                               if ( !$nextIP && wfIsConfiguredProxy( $ip ) ) {
+                                                       // We have not yet made it past CDN/proxy servers of this site,
+                                                       // so either they are misconfigured or there is some IP spoofing.
+                                                       throw new MWException( "Invalid IP given in XFF '$forwardedFor'." );
+                                               }
+                                               $ip = $nextIP;
                                                continue;
                                        }
                                }
@@ -1158,7 +1166,7 @@ HTML;
                wfRunHooks( 'GetIP', array( &$ip ) );
 
                if ( !$ip ) {
-                       throw new MWException( "Unable to determine IP" );
+                       throw new MWException( "Unable to determine IP." );
                }
 
                wfDebug( "IP: $ip\n" );
index f840a5e..58c953a 100644 (file)
@@ -91,9 +91,6 @@ if ( $IP === false ) {
        }
 }
 
-# Get MWInit class
-require_once "$IP/includes/Init.php";
-
 # Start the autoloader, so that extensions can derive classes from core files
 require_once "$IP/includes/AutoLoader.php";
 
index c4c67ab..edfbba2 100644 (file)
@@ -85,8 +85,6 @@ class MediaWiki {
                } elseif ( $curid ) {
                        // URLs like this are generated by RC, because rc_title isn't always accurate
                        $ret = Title::newFromID( $curid );
-               } elseif ( $title == '' && $action != 'delete' ) {
-                       $ret = Title::newMainPage();
                } else {
                        $ret = Title::newFromURL( $title );
                        // Alias NS_MEDIA page URLs to NS_FILE...we only use NS_MEDIA
@@ -102,8 +100,12 @@ class MediaWiki {
                                $wgContLang->findVariantLink( $title, $ret );
                        }
                }
-               // For non-special titles, check for implicit titles
-               if ( is_null( $ret ) || !$ret->isSpecialPage() ) {
+
+               // If title is not provided, always allow oldid and diff to set the title.
+               // If title is provided, allow oldid and diff to override the title, unless
+               // we are talking about a special page which might use these parameters for
+               // other purposes.
+               if ( $ret === null || !$ret->isSpecialPage() ) {
                        // We can have urls with just ?diff=,?oldid= or even just ?diff=
                        $oldid = $request->getInt( 'oldid' );
                        $oldid = $oldid ? $oldid : $request->getInt( 'diff' );
@@ -114,6 +116,11 @@ class MediaWiki {
                        }
                }
 
+               // Use the main page as default title if nothing else has been provided
+               if ( $ret === null && strval( $title ) === '' && $action !== 'delete' ) {
+                       $ret = Title::newMainPage();
+               }
+
                if ( $ret === null || ( $ret->getDBkey() == '' && $ret->getInterwiki() == '' ) ) {
                        $ret = SpecialPage::getTitleFor( 'Badtitle' );
                }
@@ -428,7 +435,8 @@ class MediaWiki {
 
                $act = $this->getAction();
 
-               $action = Action::factory( $act, $page );
+               $action = Action::factory( $act, $page, $this->context );
+
                if ( $action instanceof Action ) {
                        # Let Squid cache things if we can purge them.
                        if ( $wgUseSquid &&
@@ -503,9 +511,31 @@ class MediaWiki {
 
                $request = $this->context->getRequest();
 
+               // Send Ajax requests to the Ajax dispatcher.
+               if ( $wgUseAjax && $request->getVal( 'action', 'view' ) == 'ajax' ) {
+
+                       // Set a dummy title, because $wgTitle == null might break things
+                       $title = Title::makeTitle( NS_MAIN, 'AJAX' );
+                       $this->context->setTitle( $title );
+                       $wgTitle = $title;
+
+                       $dispatcher = new AjaxDispatcher();
+                       $dispatcher->performAction();
+                       wfProfileOut( __METHOD__ );
+                       return;
+               }
+
+               // Get title from request parameters,
+               // is set on the fly by parseTitle the first time.
+               $title = $this->getTitle();
+               $action = $this->getAction();
+               $wgTitle = $title;
+
                // If the user has forceHTTPS set to true, or if the user
                // is in a group requiring HTTPS, or if they have the HTTPS
                // preference set, redirect them to HTTPS.
+               // Note: Do this after $wgTitle is setup, otherwise the hooks run from
+               // isLoggedIn() will do all sorts of weird stuff.
                if (
                        (
                                $request->getCookie( 'forceHTTPS', '' ) ||
@@ -538,32 +568,14 @@ class MediaWiki {
                        $title = Title::newFromText( NS_MAIN, 'REDIR' );
                        $this->context->setTitle( $title );
                        $output = $this->context->getOutput();
+                       // Since we only do this redir to change proto, always send a vary header
+                       $output->addVaryHeader( 'X-Forwarded-Proto' );
                        $output->redirect( $redirUrl );
                        $output->output();
                        wfProfileOut( __METHOD__ );
                        return;
                }
 
-               // Send Ajax requests to the Ajax dispatcher.
-               if ( $wgUseAjax && $request->getVal( 'action', 'view' ) == 'ajax' ) {
-
-                       // Set a dummy title, because $wgTitle == null might break things
-                       $title = Title::makeTitle( NS_MAIN, 'AJAX' );
-                       $this->context->setTitle( $title );
-                       $wgTitle = $title;
-
-                       $dispatcher = new AjaxDispatcher();
-                       $dispatcher->performAction();
-                       wfProfileOut( __METHOD__ );
-                       return;
-               }
-
-               // Get title from request parameters,
-               // is set on the fly by parseTitle the first time.
-               $title = $this->getTitle();
-               $action = $this->getAction();
-               $wgTitle = $title;
-
                if ( $wgUseFileCache && $title->getNamespace() >= 0 ) {
                        wfProfileIn( 'main-try-filecache' );
                        if ( HTMLFileCache::useFileCache( $this->context ) ) {
index bfa9956..048dd68 100644 (file)
@@ -2347,6 +2347,14 @@ class WikiPage implements Page, IDBAccessObject {
                                }
                        }
 
+                       // Clear out legacy restriction fields
+                       $dbw->update(
+                               'page',
+                               array( 'page_restrictions' => '' ),
+                               array( 'page_id' => $id ),
+                               __METHOD__
+                       );
+
                        wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $nullRevision, $latest, $user ) );
                        wfRunHooks( 'ArticleProtectComplete', array( &$this, &$user, $limit, $reason ) );
                } else { // Protection of non-existing page (also known as "title protection")
@@ -3510,6 +3518,9 @@ class PoolWorkArticleView extends PoolCounterWork {
                        return false;
                }
 
+               // Reduce effects of race conditions for slow parses (bug 46014)
+               $cacheTime = wfTimestampNow();
+
                $time = - microtime( true );
                $this->parserOutput = $content->getParserOutput( $this->page->getTitle(), $this->revid, $this->parserOptions );
                $time += microtime( true );
@@ -3521,7 +3532,8 @@ class PoolWorkArticleView extends PoolCounterWork {
                }
 
                if ( $this->cacheable && $this->parserOutput->isCacheable() ) {
-                       ParserCache::singleton()->save( $this->parserOutput, $this->page, $this->parserOptions );
+                       ParserCache::singleton()->save(
+                               $this->parserOutput, $this->page, $this->parserOptions, $cacheTime );
                }
 
                // Make sure file cache is not used on uncacheable content.
index 2e6846d..ce6ecda 100644 (file)
@@ -1503,7 +1503,7 @@ abstract class ApiBase extends ContextSource {
         * @param string $message Error message
         */
        protected static function dieDebug( $method, $message ) {
-               wfDebugDieBacktrace( "Internal error in $method: $message" );
+               throw new MWException( "Internal error in $method: $message" );
        }
 
        /**
index d14219f..bd61895 100644 (file)
@@ -280,6 +280,10 @@ class ApiEditPage extends ApiBase {
                        if ( $section == 0 && $params['section'] != '0' && $params['section'] != 'new' ) {
                                $this->dieUsage( "The section parameter must be set to an integer or 'new'", "invalidsection" );
                        }
+                       $content = $pageObj->getContent();
+                       if ( $section !== 0 && ( !$content || !$content->getSection( $section ) ) ) {
+                               $this->dieUsage( "There is no section {$section}.", 'nosuchsection' );
+                       }
                        $requestArray['wpSection'] = $params['section'];
                } else {
                        $requestArray['wpSection'] = '';
index abd657c..0569109 100644 (file)
@@ -93,7 +93,7 @@ class ApiFeedContributions extends ApiBase {
 
        protected function feedItem( $row ) {
                $title = Title::makeTitle( intval( $row->page_namespace ), $row->page_title );
-               if ( $title && $title->userCan( 'read' ) ) {
+               if ( $title && $title->userCan( 'read', $this->getUser() ) ) {
                        $date = $row->rev_timestamp;
                        $comments = $title->getTalkPage()->getFullURL();
                        $revision = Revision::newFromRow( $row );
index e2eae61..0812ba5 100644 (file)
@@ -84,7 +84,7 @@ class ApiPurge extends ApiBase {
                        $r['purged'] = '';
 
                        if ( $forceLinkUpdate || $forceRecursiveLinkUpdate ) {
-                               if ( !$this->getUser()->pingLimiter() ) {
+                               if ( !$this->getUser()->pingLimiter( 'linkpurge' ) ) {
                                        global $wgEnableParserCache;
 
                                        $popts = $page->makeParserOptions( 'canonical' );
index aafd582..e03837f 100644 (file)
@@ -64,6 +64,7 @@ class ApiQuery extends ApiBase {
         */
        private static $QueryListModules = array(
                'allcategories' => 'ApiQueryAllCategories',
+               'allfileusages' => 'ApiQueryAllLinks',
                'allimages' => 'ApiQueryAllImages',
                'alllinks' => 'ApiQueryAllLinks',
                'allpages' => 'ApiQueryAllPages',
@@ -102,6 +103,7 @@ class ApiQuery extends ApiBase {
                'allmessages' => 'ApiQueryAllMessages',
                'siteinfo' => 'ApiQuerySiteinfo',
                'userinfo' => 'ApiQueryUserInfo',
+               'filerepoinfo' => 'ApiQueryFileRepoInfo',
        );
 
        /**
index 3744e3c..47d1bce 100644 (file)
@@ -37,7 +37,9 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $prefix = 'al';
                                $this->table = 'pagelinks';
                                $this->tablePrefix = 'pl_';
+                               $this->fieldTitle = 'title';
                                $this->dfltNamespace = NS_MAIN;
+                               $this->hasNamespace = true;
                                $this->indexTag = 'l';
                                $this->description = 'Enumerate all links that point to a given namespace';
                                $this->descriptionWhat = 'link';
@@ -48,13 +50,28 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $prefix = 'at';
                                $this->table = 'templatelinks';
                                $this->tablePrefix = 'tl_';
+                               $this->fieldTitle = 'title';
                                $this->dfltNamespace = NS_TEMPLATE;
+                               $this->hasNamespace = true;
                                $this->indexTag = 't';
                                $this->description = 'List all transclusions (pages embedded using {{x}}), including non-existing';
                                $this->descriptionWhat = 'transclusion';
                                $this->descriptionTargets = 'transcluded titles';
                                $this->descriptionLinking = 'transcluding';
                                break;
+                       case 'allfileusages':
+                               $prefix = 'af';
+                               $this->table = 'imagelinks';
+                               $this->tablePrefix = 'il_';
+                               $this->fieldTitle = 'to';
+                               $this->dfltNamespace = NS_FILE;
+                               $this->hasNamespace = false;
+                               $this->indexTag = 'f';
+                               $this->description = 'List all file usages, including non-existing';
+                               $this->descriptionWhat = 'file';
+                               $this->descriptionTargets = 'file titles';
+                               $this->descriptionLinking = 'using';
+                               break;
                        default:
                                ApiBase::dieDebug( __METHOD__, 'Unknown module name' );
                }
@@ -83,9 +100,15 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                $params = $this->extractRequestParams();
 
                $pfx = $this->tablePrefix;
+               $fieldTitle = $this->fieldTitle;
                $prop = array_flip( $params['prop'] );
                $fld_ids = isset( $prop['ids'] );
                $fld_title = isset( $prop['title'] );
+               if ( $this->hasNamespace ) {
+                       $namespace = $params['namespace'];
+               } else {
+                       $namespace = $this->dfltNamespace;
+               }
 
                if ( $params['unique'] ) {
                        if ( $fld_ids ) {
@@ -97,7 +120,9 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                }
 
                $this->addTables( $this->table );
-               $this->addWhereFld( $pfx . 'namespace', $params['namespace'] );
+               if ( $this->hasNamespace ) {
+                       $this->addWhereFld( $pfx . 'namespace', $namespace );
+               }
 
                $continue = !is_null( $params['continue'] );
                if ( $continue ) {
@@ -106,14 +131,14 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                        if ( $params['unique'] ) {
                                $this->dieContinueUsageIf( count( $continueArr ) != 1 );
                                $continueTitle = $db->addQuotes( $continueArr[0] );
-                               $this->addWhere( "{$pfx}title $op= $continueTitle" );
+                               $this->addWhere( "{$pfx}{$fieldTitle} $op= $continueTitle" );
                        } else {
                                $this->dieContinueUsageIf( count( $continueArr ) != 2 );
                                $continueTitle = $db->addQuotes( $continueArr[0] );
                                $continueFrom = intval( $continueArr[1] );
                                $this->addWhere(
-                                       "{$pfx}title $op $continueTitle OR " .
-                                       "({$pfx}title = $continueTitle AND " .
+                                       "{$pfx}{$fieldTitle} $op $continueTitle OR " .
+                                       "({$pfx}{$fieldTitle} = $continueTitle AND " .
                                        "{$pfx}from $op= $continueFrom)"
                                );
                        }
@@ -122,22 +147,24 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                // 'continue' always overrides 'from'
                $from = ( $continue || is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
                $to = ( is_null( $params['to'] ) ? null : $this->titlePartToKey( $params['to'] ) );
-               $this->addWhereRange( $pfx . 'title', 'newer', $from, $to );
+               $this->addWhereRange( $pfx . $fieldTitle, 'newer', $from, $to );
 
                if ( isset( $params['prefix'] ) ) {
-                       $this->addWhere( $pfx . 'title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+                       $this->addWhere( $pfx . $fieldTitle . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
                }
 
-               $this->addFields( array( 'pl_title' => $pfx . 'title' ) );
+               $this->addFields( array( 'pl_title' => $pfx . $fieldTitle ) );
                $this->addFieldsIf( array( 'pl_from' => $pfx . 'from' ), !$params['unique'] );
 
-               $this->addOption( 'USE INDEX', $pfx . 'namespace' );
+               if ( $this->hasNamespace ) {
+                       $this->addOption( 'USE INDEX', $pfx . 'namespace' );
+               }
                $limit = $params['limit'];
                $this->addOption( 'LIMIT', $limit + 1 );
 
                $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
                $orderBy = array();
-               $orderBy[] = $pfx . 'title' . $sort;
+               $orderBy[] = $pfx . $fieldTitle . $sort;
                if ( !$params['unique'] ) {
                        $orderBy[] = $pfx . 'from' . $sort;
                }
@@ -166,7 +193,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                        $vals['fromid'] = intval( $row->pl_from );
                                }
                                if ( $fld_title ) {
-                                       $title = Title::makeTitle( $params['namespace'], $row->pl_title );
+                                       $title = Title::makeTitle( $namespace, $row->pl_title );
                                        ApiQueryBase::addTitleInfo( $vals, $title );
                                }
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
@@ -179,7 +206,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                        break;
                                }
                        } elseif ( $params['unique'] ) {
-                               $titles[] = Title::makeTitle( $params['namespace'], $row->pl_title );
+                               $titles[] = Title::makeTitle( $namespace, $row->pl_title );
                        } else {
                                $pageids[] = $row->pl_from;
                        }
@@ -195,7 +222,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               return array(
+               $allowedParams = array(
                        'continue' => null,
                        'from' => null,
                        'to' => null,
@@ -228,6 +255,10 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                )
                        ),
                );
+               if ( !$this->hasNamespace ) {
+                       unset( $allowedParams['namespace'] );
+               }
+               return $allowedParams;
        }
 
        public function getParamDescription() {
@@ -235,7 +266,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                $what = $this->descriptionWhat;
                $targets = $this->descriptionTargets;
                $linking = $this->descriptionLinking;
-               return array(
+               $paramDescription = array(
                        'from' => "The title of the $what to start enumerating from",
                        'to' => "The title of the $what to stop enumerating at",
                        'prefix' => "Search for all $targets that begin with this value",
@@ -253,6 +284,10 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                        'continue' => 'When more results are available, use this to continue',
                        'dir' => 'The direction in which to list',
                );
+               if ( !$this->hasNamespace ) {
+                       unset( $paramDescription['namespace'] );
+               }
+               return $paramDescription;
        }
 
        public function getResultProperties() {
index e39c25a..2d1089a 100644 (file)
@@ -255,6 +255,9 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                if ( $this->params['limit'] == 'max' ) {
                        $this->params['limit'] = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
                        $result->setParsedLimit( $this->getModuleName(), $this->params['limit'] );
+               } else {
+                       $this->params['limit'] = intval( $this->params['limit'] );
+                       $this->validateLimit( 'limit', $this->params['limit'], 1, $userMax, $botMax );
                }
 
                $this->processContinue();
diff --git a/includes/api/ApiQueryFileRepoInfo.php b/includes/api/ApiQueryFileRepoInfo.php
new file mode 100644 (file)
index 0000000..3a35353
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+/**
+ * Copyright © 2013 Mark Holmquist <mtraceur@member.fsf.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.22
+ */
+
+/**
+ * A query action to return meta information about the foreign file repos
+ * configured on the wiki.
+ *
+ * @ingroup API
+ */
+class ApiQueryFileRepoInfo extends ApiQueryBase {
+
+       public function __construct( $query, $moduleName ) {
+               parent::__construct( $query, $moduleName, 'fri' );
+       }
+
+       protected function getInitialisedRepoGroup() {
+               $repoGroup = RepoGroup::singleton();
+
+               if ( !$repoGroup->reposInitialised ) {
+                       $repoGroup->initialiseRepos();
+               }
+
+               return $repoGroup;
+       }
+
+       public function execute() {
+               $params = $this->extractRequestParams();
+               $props = array_flip( $params['prop'] );
+
+               $repos = array();
+
+               $repoGroup = $this->getInitialisedRepoGroup();
+
+               $repoGroup->forEachForeignRepo( function ( $repo ) use ( &$repos, $props ) {
+                       $repos[] = array_intersect_key( $repo->getInfo(), $props );
+               } );
+
+               $repos[] = array_intersect_key( $repoGroup->localRepo->getInfo(), $props );
+
+               $result = $this->getResult();
+               $result->setIndexedTagName( $repos, 'repo' );
+               $result->addValue( array( 'query' ), 'repos', $repos );
+       }
+
+       public function getCacheMode( $params ) {
+               return 'public';
+       }
+
+       public function getAllowedParams() {
+               $props = $this->getProps();
+
+               return array(
+                       'prop' => array(
+                               ApiBase::PARAM_DFLT => join( '|', $props ),
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_TYPE => $props,
+                       ),
+               );
+       }
+
+       public function getProps() {
+               $props = array();
+               $repoGroup = $this->getInitialisedRepoGroup();
+
+               $repoGroup->forEachForeignRepo( function ( $repo ) use ( &$props ) {
+                       $props = array_merge( $props, array_keys( $repo->getInfo() ) );
+               } );
+
+               return array_values( array_unique( array_merge( $props, array_keys( $repoGroup->localRepo->getInfo() ) ) ) );
+       }
+
+       public function getParamDescription() {
+               $p = $this->getModulePrefix();
+               return array(
+                       'prop' => array(
+                               'Which repository properties to get (there may be more available on some wikis):',
+                               ' apiurl      - URL to the repository API - helpful for getting image info from the host.',
+                               ' name        - The key of the repository - used in e.g. $wgForeignFileRepos and imageinfo return values.',
+                               ' displayname - The human-readable name of the repository wiki.',
+                               ' rooturl     - Root URL for image paths.',
+                               ' local       - Whether that repository is the local one or not.',
+                       ),
+               );
+       }
+
+       public function getDescription() {
+               return 'Return meta information about image repositories configured on the wiki.';
+       }
+
+       public function getExamples() {
+               return array(
+                       'api.php?action=query&meta=filerepoinfo&friprop=apiurl|name|displayname',
+               );
+       }
+}
index 3c22a73..6aa311e 100644 (file)
@@ -123,6 +123,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data['mainpage'] = $mainPage->getPrefixedText();
                $data['base'] = wfExpandUrl( $mainPage->getFullURL(), PROTO_CURRENT );
                $data['sitename'] = $GLOBALS['wgSitename'];
+               $data['logo'] = $GLOBALS['wgLogo'];
                $data['generator'] = "MediaWiki {$GLOBALS['wgVersion']}";
                $data['phpversion'] = phpversion();
                $data['phpsapi'] = PHP_SAPI;
@@ -473,7 +474,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                global $wgFileExtensions;
 
                $data = array();
-               foreach ( $wgFileExtensions as $ext ) {
+               foreach ( array_unique( $wgFileExtensions ) as $ext ) {
                        $data[] = array( 'ext' => $ext );
                }
                $this->getResult()->setIndexedTagName( $data, 'fe' );
index 6f6b080..467eccf 100644 (file)
@@ -504,7 +504,7 @@ class ApiUpload extends ApiBase {
                        case UploadBase::FILETYPE_BADTYPE:
                                $extradata = array(
                                        'filetype' => $verification['finalExt'],
-                                       'allowed' => $wgFileExtensions
+                                       'allowed' => array_values( array_unique( $wgFileExtensions ) )
                                );
                                $this->getResult()->setIndexedTagName( $extradata['allowed'], 'ext' );
 
index da4621a..ef71b18 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * PhpRedis client connection pooling manager.
+ * Redis client connection pooling manager.
  *
  * 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
@@ -23,7 +23,7 @@
  */
 
 /**
- * Helper class to manage redis connections using PhpRedis.
+ * Helper class to manage Redis connections.
  *
  * This can be used to get handle wrappers that free the handle when the wrapper
  * leaves scope. The maximum number of free handles (connections) is configurable.
@@ -70,9 +70,9 @@ class RedisConnectionPool {
         * @param array $options
         */
        protected function __construct( array $options ) {
-               if ( !extension_loaded( 'redis' ) ) {
-                       throw new MWException( __CLASS__ . ' requires the phpredis extension: ' .
-                               'https://github.com/nicolasff/phpredis' );
+               if ( !class_exists( 'Redis' ) ) {
+                       throw new MWException( __CLASS__ . ' requires a Redis client library. ' .
+                               'See https://www.mediawiki.org/wiki/Redis#Setup' );
                }
                $this->connectTimeout = $options['connectTimeout'];
                $this->persistent = $options['persistent'];
index 2de8408..a8fa9ed 100644 (file)
@@ -449,10 +449,11 @@ abstract class ContentHandler {
         * @since 1.21
         *
         * @param Title $destination the page to redirect to.
+        * @param string $text text to include in the redirect, if possible.
         *
         * @return Content
         */
-       public function makeRedirectContent( Title $destination ) {
+       public function makeRedirectContent( Title $destination, $text = '' ) {
                return null;
        }
 
index 8be85bc..b1b461f 100644 (file)
@@ -55,10 +55,11 @@ class WikitextContentHandler extends TextContentHandler {
         * @see ContentHandler::makeRedirectContent
         *
         * @param Title $destination the page to redirect to.
+        * @param string $text text to include in the redirect, if possible.
         *
         * @return Content
         */
-       public function makeRedirectContent( Title $destination ) {
+       public function makeRedirectContent( Title $destination, $text = '' ) {
                $optionalColon = '';
 
                if ( $destination->getNamespace() == NS_CATEGORY ) {
@@ -72,6 +73,9 @@ class WikitextContentHandler extends TextContentHandler {
 
                $mwRedir = MagicWord::get( 'redirect' );
                $redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $optionalColon . $destination->getFullText() . ']]';
+               if ( $text != '' ) {
+                       $redirectText .= "\n" . $text;
+               }
 
                return new WikitextContent( $redirectText );
        }
index 27e6dad..4b25bd3 100644 (file)
@@ -360,6 +360,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * code should use lastErrno() and lastError() to handle the
         * situation as appropriate.
         *
+        * Do not use this function outside of the Database classes.
+        *
         * @param $ignoreErrors bool|null
         *
         * @return bool The previous value of the flag.
@@ -582,7 +584,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @param $flag Integer: DBO_* constants from Defines.php:
         *   - DBO_DEBUG: output some debug info (same as debug())
         *   - DBO_NOBUFFER: don't buffer results (inverse of bufferResults())
-        *   - DBO_IGNORE: ignore errors (same as ignoreErrors())
         *   - DBO_TRX: automatically start transactions
         *   - DBO_DEFAULT: automatically sets DBO_TRX if not in command line mode
         *       and removes it in command line mode
index fca979b..fbaa4da 100644 (file)
@@ -694,7 +694,7 @@ class DatabaseOracle extends DatabaseBase {
                                break;
                }
 
-               return parent::tableName( strtoupper( $name ), $format );
+               return strtoupper( parent::tableName( $name, $format ) );
        }
 
        function tableNameInternal( $name ) {
@@ -883,7 +883,7 @@ class DatabaseOracle extends DatabaseBase {
 
        /**
         * Query whether a given table exists (in the given schema, or the default mw one if not given)
-        * @return int
+        * @return bool
         */
        function tableExists( $table, $fname = __METHOD__ ) {
                $table = $this->tableName( $table );
@@ -891,13 +891,14 @@ class DatabaseOracle extends DatabaseBase {
                $owner = $this->addQuotes( strtoupper( $this->mDBname ) );
                $SQL = "SELECT 1 FROM all_tables WHERE owner=$owner AND table_name=$table";
                $res = $this->doQuery( $SQL );
-               if ( $res ) {
-                       $count = $res->numRows();
-                       $res->free();
+               if ( $res && $res->numRows() > 0 ) {
+                       $exists = true;
                } else {
-                       $count = 0;
+                       $exists = false;
                }
-               return $count;
+
+               $res->free();
+               return $exists;
        }
 
        /**
index 6692fa4..a8270bf 100644 (file)
@@ -709,6 +709,8 @@ class DatabaseSqlite extends DatabaseBase {
        function addQuotes( $s ) {
                if ( $s instanceof Blob ) {
                        return "x'" . bin2hex( $s->fetch() ) . "'";
+               } elseif ( is_bool( $s ) ) {
+                       return (int)$s;
                } elseif ( strpos( $s, "\0" ) !== false ) {
                        // SQLite doesn't support \0 in strings, so use the hex representation as a workaround.
                        // This is a known limitation of SQLite's mprintf function which PDO should work around,
index 3358488..857109d 100644 (file)
@@ -167,7 +167,7 @@ class LoadBalancer {
                #wfDebugLog( 'connect', var_export( $loads, true ) );
 
                # Return a random representative of the remainder
-               return $this->pickRandom( $loads );
+               return ArrayUtils::pickRandom( $loads );
        }
 
        /**
@@ -236,7 +236,7 @@ class LoadBalancer {
                        $currentLoads = $nonErrorLoads;
                        while ( count( $currentLoads ) ) {
                                if ( $wgReadOnly || $this->mAllowLagged || $laggedSlaveMode ) {
-                                       $i = $this->pickRandom( $currentLoads );
+                                       $i = ArrayUtils::pickRandom( $currentLoads );
                                } else {
                                        $i = $this->getRandomNonLagged( $currentLoads, $wiki );
                                        if ( $i === false && count( $currentLoads ) != 0 ) {
@@ -244,7 +244,7 @@ class LoadBalancer {
                                                wfDebugLog( 'replication', "All slaves lagged. Switch to read-only mode\n" );
                                                $wgReadOnly = 'The database has been automatically locked ' .
                                                        'while the slave database servers catch up to the master';
-                                               $i = $this->pickRandom( $currentLoads );
+                                               $i = ArrayUtils::pickRandom( $currentLoads );
                                                $laggedSlaveMode = true;
                                        }
                                }
index 5444bc1..0c9086b 100644 (file)
@@ -185,10 +185,14 @@ class DifferenceEngine extends ContextSource {
                $out = $this->getOutput();
 
                $missing = array();
-               if ( $this->mOldRev === null ) {
+               if ( $this->mOldRev === null ||
+                       ( $this->mOldRev && $this->mOldContent === null )
+               ) {
                        $missing[] = $this->deletedIdMarker( $this->mOldid );
                }
-               if ( $this->mNewRev === null ) {
+               if ( $this->mNewRev === null ||
+                       ( $this->mNewRev && $this->mNewContent === null )
+               ) {
                        $missing[] = $this->deletedIdMarker( $this->mNewid );
                }
 
@@ -416,12 +420,13 @@ class DifferenceEngine extends ContextSource {
         */
        protected function markPatrolledLink() {
                global $wgUseRCPatrol, $wgEnableAPI, $wgEnableWriteAPI;
+               $user = $this->getUser();
 
                if ( $this->mMarkPatrolledLink === null ) {
                        // Prepare a change patrol link, if applicable
                        if (
                                // Is patrolling enabled and the user allowed to?
-                               $wgUseRCPatrol && $this->mNewPage->quickUserCan( 'patrol', $this->getUser() ) &&
+                               $wgUseRCPatrol && $this->mNewPage->quickUserCan( 'patrol', $user ) &&
                                // Only do this if the revision isn't more than 6 hours older
                                // than the Max RC age (6h because the RC might not be cleaned out regularly)
                                RecentChange::isInRCLifespan( $this->mNewRev->getTimestamp(), 21600 )
@@ -439,22 +444,23 @@ class DifferenceEngine extends ContextSource {
                                        array( 'USE INDEX' => 'rc_timestamp' )
                                );
 
-                               if ( $change ) {
+                               if ( $change && $change->getPerformer()->getName() !== $user->getName() ) {
                                        $rcid = $change->getAttribute( 'rc_id' );
                                } else {
-                                       // None found
+                                       // None found or the page has been created by the current user.
+                                       // If the user could patrol this it already would be patrolled
                                        $rcid = 0;
                                }
                                // Build the link
                                if ( $rcid ) {
                                        $this->getOutput()->preventClickjacking();
                                        if ( $wgEnableAPI && $wgEnableWriteAPI
-                                               && $this->getUser()->isAllowed( 'writeapi' )
+                                               && $user->isAllowed( 'writeapi' )
                                        ) {
                                                $this->getOutput()->addModules( 'mediawiki.page.patrol.ajax' );
                                        }
 
-                                       $token = $this->getUser()->getEditToken( $rcid );
+                                       $token = $user->getEditToken( $rcid );
                                        $this->mMarkPatrolledLink = ' <span class="patrollink">[' . Linker::linkKnown(
                                                $this->mNewPage,
                                                $this->msg( 'markaspatrolleddiff' )->escaped(),
@@ -1179,26 +1185,29 @@ class DifferenceEngine extends ContextSource {
        function loadText() {
                if ( $this->mTextLoaded == 2 ) {
                        return true;
-               } else {
-                       // Whether it succeeds or fails, we don't want to try again
-                       $this->mTextLoaded = 2;
                }
 
+               // Whether it succeeds or fails, we don't want to try again
+               $this->mTextLoaded = 2;
+
                if ( !$this->loadRevisionData() ) {
                        return false;
                }
+
                if ( $this->mOldRev ) {
                        $this->mOldContent = $this->mOldRev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
                        if ( $this->mOldContent === null ) {
                                return false;
                        }
                }
+
                if ( $this->mNewRev ) {
                        $this->mNewContent = $this->mNewRev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
                        if ( $this->mNewContent === null ) {
                                return false;
                        }
                }
+
                return true;
        }
 
@@ -1210,13 +1219,16 @@ class DifferenceEngine extends ContextSource {
        function loadNewText() {
                if ( $this->mTextLoaded >= 1 ) {
                        return true;
-               } else {
-                       $this->mTextLoaded = 1;
                }
+
+               $this->mTextLoaded = 1;
+
                if ( !$this->loadRevisionData() ) {
                        return false;
                }
+
                $this->mNewContent = $this->mNewRev->getContent( Revision::FOR_THIS_USER, $this->getUser() );
+
                return true;
        }
 }
index e976a7a..8ff383b 100644 (file)
 abstract class FileBackendStore extends FileBackend {
        /** @var BagOStuff */
        protected $memCache;
-       /** @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 ProcessCacheLRU Map of paths to small (RAM/disk) cache items */
+       protected $cheapCache;
+       /** @var ProcessCacheLRU Map of paths to large (RAM/disk) cache items */
+       protected $expensiveCache;
 
-       /** @var Array Map of container names to sharding settings */
-       protected $shardViaHashLevels = array(); // (container name => config array)
+       /** @var Array Map of container names to sharding config */
+       protected $shardViaHashLevels = array();
+
+       /** @var callback Method to get the MIME type of files */
+       protected $mimeCallback;
 
        protected $maxFileSize = 4294967296; // integer bytes (4GiB)
 
@@ -54,11 +57,21 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackend::__construct()
+        * Additional $config params include:
+        *   - mimeCallback : Callback that takes (storage path, content, file system path) and
+        *                    returns the MIME type of the file or 'unknown/unknown'. The file
+        *                    system path parameter should be used if the content one is null.
         *
         * @param array $config
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
+               $this->mimeCallback = isset( $config['mimeCallback'] )
+                       ? $config['mimeCallback']
+                       : function( $storagePath, $content, $fsPath ) {
+                               // @TODO: handle the case of extension-less files using the contents
+                               return StreamFile::contentTypeFromPath( $storagePath ) ?: 'unknown/unknown';
+                       };
                $this->memCache = new EmptyBagOStuff(); // disabled by default
                $this->cheapCache = new ProcessCacheLRU( self::CACHE_CHEAP_SIZE );
                $this->expensiveCache = new ProcessCacheLRU( self::CACHE_EXPENSIVE_SIZE );
@@ -1583,6 +1596,18 @@ abstract class FileBackendStore extends FileBackend {
                }
                return $opts;
        }
+
+       /**
+        * Get the content type to use in HEAD/GET requests for a file
+        *
+        * @param string $storagePath
+        * @param string|null $content File data
+        * @param string|null $fsPath File system path
+        * @return MIME type
+        */
+       protected function getContentType( $storagePath, $content, $fsPath ) {
+               return call_user_func_array( $this->mimeCallback, func_get_args() );
+       }
 }
 
 /**
index f3aa145..a620f88 100644 (file)
@@ -252,10 +252,7 @@ class SwiftFileBackend extends FileBackendStore {
                        // The MD5 here will be checked within Swift against its own MD5.
                        $obj->set_etag( md5( $params['content'] ) );
                        // Use the same content type as StreamFile for security
-                       $obj->content_type = StreamFile::contentTypeFromPath( $params['dst'] );
-                       if ( !strlen( $obj->content_type ) ) { // special case
-                               $obj->content_type = 'unknown/unknown';
-                       }
+                       $obj->content_type = $this->getContentType( $params['dst'], $params['content'], null );
                        // Set any other custom headers if requested
                        if ( isset( $params['headers'] ) ) {
                                $obj->headers += $this->sanitizeHdrs( $params['headers'] );
@@ -329,10 +326,7 @@ class SwiftFileBackend extends FileBackendStore {
                        // The MD5 here will be checked within Swift against its own MD5.
                        $obj->set_etag( md5_file( $params['src'] ) );
                        // Use the same content type as StreamFile for security
-                       $obj->content_type = StreamFile::contentTypeFromPath( $params['dst'] );
-                       if ( !strlen( $obj->content_type ) ) { // special case
-                               $obj->content_type = 'unknown/unknown';
-                       }
+                       $obj->content_type = $this->getContentType( $params['dst'], null, $params['src'] );
                        // Set any other custom headers if requested
                        if ( isset( $params['headers'] ) ) {
                                $obj->headers += $this->sanitizeHdrs( $params['headers'] );
index bc1ad91..1195d5f 100644 (file)
@@ -1716,6 +1716,22 @@ class FileRepo {
         * @throws MWException
         */
        protected function assertWritableRepo() {}
+
+
+       /**
+        * Return information about the repository.
+        *
+        * @return array
+        * @since 1.22
+        */
+       public function getInfo() {
+               return array(
+                       'name' => $this->getName(),
+                       'displayname' => $this->getDisplayName(),
+                       'rootUrl' => $this->getRootUrl(),
+                       'local' => $this->isLocal(),
+               );
+       }
 }
 
 /**
index 128412c..02d83bb 100644 (file)
@@ -80,6 +80,14 @@ class ForeignAPIRepo extends FileRepo {
                }
        }
 
+       /**
+        * @return string
+        * @since 1.22
+        */
+       function getApiUrl() {
+               return $this->mApiBase;
+       }
+
        /**
         * Per docs in FileRepo, this needs to return false if we don't support versioned
         * files. Well, we don't.
@@ -416,6 +424,18 @@ class ForeignAPIRepo extends FileRepo {
                return Http::userAgent() . " ForeignAPIRepo/" . self::VERSION;
        }
 
+       /**
+        * Get information about the repo - overrides/extends the parent
+        * class's information.
+        * @return array
+        * @since 1.22
+        */
+       function getInfo() {
+               $info = parent::getInfo();
+               $info['apiurl'] = $this->getApiUrl();
+               return $info;
+       }
+
        /**
         * Like a Http:get request, but with custom User-Agent.
         * @see Http:get
index 9060731..ec5f927 100644 (file)
@@ -842,8 +842,9 @@ abstract class File {
        protected function transformErrorOutput( $thumbPath, $thumbUrl, $params, $flags ) {
                global $wgIgnoreImageErrors;
 
-               if ( $wgIgnoreImageErrors && !( $flags & self::RENDER_NOW ) ) {
-                       return $this->getHandler()->getTransform( $this, $thumbPath, $thumbUrl, $params );
+               $handler = $this->getHandler();
+               if ( $handler && $wgIgnoreImageErrors && !( $flags & self::RENDER_NOW ) ) {
+                       return $handler->getTransform( $this, $thumbPath, $thumbUrl, $params );
                } else {
                        return new MediaTransformError( 'thumbnail_error',
                                $params['width'], 0, wfMessage( 'thumbnail-dest-create' )->text() );
@@ -1000,7 +1001,7 @@ abstract class File {
        /**
         * Get a MediaHandler instance for this file
         *
-        * @return MediaHandler
+        * @return MediaHandler|boolean Registered MediaHandler for file's mime type or false if none found
         */
        function getHandler() {
                if ( !isset( $this->handler ) ) {
@@ -1656,18 +1657,22 @@ abstract class File {
        /**
         * Get the HTML text of the description page, if available
         *
+        * @param $lang Language Optional language to fetch description in
         * @return string
         */
-       function getDescriptionText() {
+       function getDescriptionText( $lang = false ) {
                global $wgMemc, $wgLang;
                if ( !$this->repo || !$this->repo->fetchDescription ) {
                        return false;
                }
-               $renderUrl = $this->repo->getDescriptionRenderUrl( $this->getName(), $wgLang->getCode() );
+               if ( !$lang ) {
+                       $lang = $wgLang;
+               }
+               $renderUrl = $this->repo->getDescriptionRenderUrl( $this->getName(), $lang->getCode() );
                if ( $renderUrl ) {
                        if ( $this->repo->descriptionCacheExpiry > 0 ) {
                                wfDebug( "Attempting to get the description from cache..." );
-                               $key = $this->repo->getLocalCacheKey( 'RemoteFileDescription', 'url', $wgLang->getCode(),
+                               $key = $this->repo->getLocalCacheKey( 'RemoteFileDescription', 'url', $lang->getCode(),
                                                                        $this->getName() );
                                $obj = $wgMemc->get( $key );
                                if ( $obj ) {
index ee5883c..01d6b0f 100644 (file)
@@ -120,10 +120,11 @@ class ForeignDBFile extends LocalFile {
        }
 
        /**
+        * @param $lang Language Optional language to fetch description in.
         * @return string
         */
-       function getDescriptionText() {
+       function getDescriptionText( $lang = false ) {
                // Restore remote behavior
-               return File::getDescriptionText();
+               return File::getDescriptionText( $lang );
        }
 }
index 39ef62c..627defd 100644 (file)
@@ -610,7 +610,11 @@ class LocalFile extends File {
                $this->load();
 
                if ( $this->isMultipage() ) {
-                       $dim = $this->getHandler()->getPageDimensions( $this, $page );
+                       $handler = $this->getHandler();
+                       if ( !$handler ) {
+                               return 0;
+                       }
+                       $dim = $handler->getPageDimensions( $this, $page );
                        if ( $dim ) {
                                return $dim['width'];
                        } else {
@@ -633,7 +637,11 @@ class LocalFile extends File {
                $this->load();
 
                if ( $this->isMultipage() ) {
-                       $dim = $this->getHandler()->getPageDimensions( $this, $page );
+                       $handler = $this->getHandler();
+                       if ( !$handler ) {
+                               return 0;
+                       }
+                       $dim = $handler->getPageDimensions( $this, $page );
                        if ( $dim ) {
                                return $dim['height'];
                        } else {
@@ -780,10 +788,12 @@ class LocalFile extends File {
 
                $backend = $this->repo->getBackend();
                $files = array( $dir );
-               $iterator = $backend->getFileList( array( 'dir' => $dir ) );
-               foreach ( $iterator as $file ) {
-                       $files[] = $file;
-               }
+               try {
+                       $iterator = $backend->getFileList( array( 'dir' => $dir ) );
+                       foreach ( $iterator as $file ) {
+                               $files[] = $file;
+                       }
+               } catch ( FileBackendError $e ) {} // suppress (bug 54674)
 
                return $files;
        }
@@ -1664,9 +1674,11 @@ class LocalFile extends File {
         * Get the HTML text of the description page
         * This is not used by ImagePage for local files, since (among other things)
         * it skips the parser cache.
+        *
+        * @param $lang Language What language to get description in (Optional)
         * @return bool|mixed
         */
-       function getDescriptionText() {
+       function getDescriptionText( $lang = null ) {
                $revision = Revision::newFromTitle( $this->title, false, Revision::READ_NORMAL );
                if ( !$revision ) {
                        return false;
@@ -1675,7 +1687,7 @@ class LocalFile extends File {
                if ( !$content ) {
                        return false;
                }
-               $pout = $content->getParserOutput( $this->title, null, new ParserOptions() );
+               $pout = $content->getParserOutput( $this->title, null, new ParserOptions( null, $lang ) );
                return $pout->getText();
        }
 
@@ -1752,6 +1764,16 @@ class LocalFile extends File {
                                $this->lockedOwnTrx = true;
                        }
                        $this->locked++;
+                       // Bug 54736: use simple lock to handle when the file does not exist.
+                       // SELECT FOR UPDATE only locks records not the gaps where there are none.
+                       $cache = wfGetMainCache();
+                       $key = $this->getCacheKey();
+                       if ( !$cache->lock( $key, 60 ) ) {
+                               throw new MWException( "Could not acquire lock for '{$this->getName()}.'" );
+                       }
+                       $dbw->onTransactionIdle( function() use ( $cache, $key ) {
+                               $cache->unlock( $key ); // release on commit
+                       } );
                }
 
                return $dbw->selectField( 'image', '1',
index f0c5a21..d4fe530 100644 (file)
@@ -373,7 +373,7 @@ abstract class DatabaseUpdater {
         * @param array $what what updates to perform
         */
        public function doUpdates( $what = array( 'core', 'extensions', 'stats' ) ) {
-               global $wgVersion, $wgLocalisationCacheConf;
+               global $wgVersion;
 
                $this->db->begin( __METHOD__ );
                $what = array_flip( $what );
@@ -390,14 +390,6 @@ abstract class DatabaseUpdater {
                        $this->checkStats();
                }
 
-               if ( isset( $what['purge'] ) ) {
-                       $this->purgeCache();
-
-                       if ( $wgLocalisationCacheConf['manualRecache'] ) {
-                               $this->rebuildLocalisationCache();
-                       }
-               }
-
                $this->setAppliedUpdates( $wgVersion, $this->updates );
 
                if ( $this->fileHandle ) {
index a508e24..ce282cc 100644 (file)
@@ -33,8 +33,8 @@ class InstallDocFormatter {
        protected function execute() {
                $text = $this->text;
                // Use Unix line endings, escape some wikitext stuff
-               $text = str_replace( array( '<', '{{', '[[', "\r" ),
-                       array( '&lt;', '&#123;&#123;', '&#91;&#91;', '' ), $text );
+               $text = str_replace( array( '<', '{{', '[[', '__', "\r" ),
+                       array( '&lt;', '&#123;&#123;', '&#91;&#91;', '&#95;&#95;', '' ), $text );
                // join word-wrapped lines into one
                do {
                        $prev = $text;
index 0172d84..7e56d05 100644 (file)
@@ -134,6 +134,10 @@ MediaWiki requires UTF-8 support to function correctly.",
 This is probably too low.
 The installation may fail!",
        'config-ctype'                    => "'''Fatal:''' PHP must be compiled with support for the [http://www.php.net/manual/en/ctype.installation.php Ctype extension].",
+       'config-json'                     => "'''Fatal:''' PHP was compiled without JSON support.
+You must install either the PHP JSON extension or the [http://pecl.php.net/package/jsonc PECL jsonc] extension before installing MediaWiki.
+* The PHP extension is included in Red Hat Enterprise Linux (CentOS) 5 and 6, though must be enabled in <code>/etc/php.ini</code> or <code>/etc/php.d/json.ini</code>.
+* Some Linux distributions released after May 2013 omit the PHP extension, instead packaging the PECL extension as <code>php5-json</code> or <code>php-pecl-jsonc</code>.",
        'config-xcache'                   => '[http://xcache.lighttpd.net/ XCache] is installed',
        'config-apc'                      => '[http://www.php.net/apc APC] is installed',
        'config-wincache'                 => '[http://www.iis.net/download/WinCacheForPhp WinCache] is installed',
@@ -656,6 +660,10 @@ Parameters:
        'config-memory-bad' => 'Parameters:
 * $1 is the configured <code>memory_limit</code>.',
        'config-ctype' => 'Message if support for [http://www.php.net/manual/en/ctype.installation.php Ctype] is missing from PHP',
+       'config-json' => 'Message if support for [[wikipedia:JSON|JSON]] is missing from PHP.
+* "[[wikipedia:Red Hat Enterprise Linux|Red Hat Enterprise Linux]]" (RHEL) and "[[wikipedia:CentOS|CentOS]]" refer to two almost-identical Linux distributions. "5 and 6" refers to version 5 or 6 of either distribution. Because RHEL 7 likely will not include the PHP extension, do not translate as "5 or newer".
+* "The [http://www.php.net/json PHP extension]" is the JSON extension included with PHP 5.2 and newer.
+* "The [http://pecl.php.net/package/jsonc PECL extension]" is based on the PHP extension, though excludes code some distributions have found unacceptable (see [[bugzilla:47431]]).',
        'config-xcache' => 'Message indicates if this program is available',
        'config-apc' => 'Message indicates if this program is available',
        'config-wincache' => 'Message indicates if this program is available',
@@ -3206,6 +3214,7 @@ $messages['ca'] = array(
  */
 $messages['ce'] = array(
        'config-your-language' => 'Хьан мотт:',
+       'config-continue' => 'Кхин дӀа →',
        'config-page-language' => 'Мотт',
        'config-page-name' => 'ЦӀе',
        'config-no-fts3' => "'''Тергам бе''': SQLite гулйина хуттург йоцуш [//sqlite.org/fts3.html FTS3] — лахар болхбеш хир дац оцу бухца.",
@@ -4063,6 +4072,10 @@ MediaWiki benötigt die UTF-8-Unterstützung, um fehlerfrei lauffähig zu sein."
 Dieser Wert ist wahrscheinlich zu niedrig.
 Der Installationsvorgang könnte daher scheitern!",
        'config-ctype' => "'''Fataler Fehler:''' PHP muss mit Unterstützung für das [http://www.php.net/manual/de/ctype.installation.php Modul ctype] kompiliert werden.",
+       'config-json' => "'''Fatal:''' PHP wurde ohne JSON-Support kompiliert.
+Du musst entweder die PHP-JSON- oder die [http://pecl.php.net/package/jsonc PECL-jsonc]-Erweiterung installieren, bevor du MediaWiki installierst.
+* Die PHP-Erweiterung ist in Red Hat Enterprise Linux (CentOS) 5 und 6 enthalten, muss jedoch in <code>/etc/php.ini</code> oder <code>/etc/php.d/json.ini</code> aktiviert werden.
+* Einige Linux-Distributionen, die nach Mai 2013 veröffentlicht wurden, lassen die PHP-Erweiterung weg, stattdessen wird die PECL-Erweiterung als <code>php5-json</code> oder <code>php-pecl-jsonc</code> mitgeliefert.",
        'config-xcache' => '[http://xcache.lighttpd.net/ XCache] ist installiert',
        'config-apc' => '[http://www.php.net/apc APC] ist installiert',
        'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] ist installiert',
@@ -5874,6 +5887,10 @@ MédiaWiki nécessite la gestion d’UTF-8 pour fonctionner correctement.",
 Cette valeur est probablement trop faible.
 Il est possible que l’installation échoue !",
        'config-ctype' => "'''Fatal ''': PHP doit être compilé avec le support pour l'[http://www.php.net/manual/en/ctype.installation.php extension Ctype].",
+       'config-json' => "'''Erreur fatale :''' PHP a été compilé sans le support de JSON.
+Vous devez soit installez l’extension JSON de PHP ou l’extension [http://pecl.php.net/package/jsonc PECL jsonc] avant d’installer MediaWiki.
+* L’extension PHP est comprise dans Red Hat Enterprise Linux (CentOS) 5 et 6, mais doit être activée dans <code>/etc/php.ini</code> ou <code>/etc/php.d/json.ini</code>.
+* Certaines distributions Linux après mai 2013 ne comprennent pas l’extension PHP, mais oint mis à la place l’extension PECL sous al forme <code>php5-json</code> ou <code>php-pecl-jsonc</code>.",
        'config-xcache' => '[http://xcache.lighttpd.net/ XCache] est installé',
        'config-apc' => '[http://www.php.net/apc APC] est installé',
        'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] est installé',
@@ -10050,8 +10067,8 @@ Controlla il tuo file php.ini ed assicurati che <code>session.save_path</code> 
        'config-help-restart' => 'Vuoi cancellare tutti i dati salvati che hai inserito e riavviare il processo di installazione?',
        'config-restart' => 'Sì, riavvia',
        'config-welcome' => "=== Controllo dell'ambiente ===
-Vengono eseguiti controlli di base per vedere se questo ambiente è adatto per l'installazione di MediaWiki.
-Se hai bisogno di aiuto durante l'installazione, è necessario fornire i risultati di questi controlli.", # Fuzzy
+Saranno eseguiti controlli di base per vedere se questo ambiente è adatto per l'installazione di MediaWiki.
+Ricordati di includere queste informazioni se chiedi assistenza su come completare l'installazione.",
        'config-sidebar' => '* [//www.mediawiki.org Pagina principale MediaWiki]
 * [//www.mediawiki.org/wiki/Aiuto:Guida ai contenuti per utenti]
 * [//www.mediawiki.org/wiki/Manuale:Guida ai contenuti per admin]
@@ -12329,7 +12346,7 @@ Kuckt Är php.ini no a vergewëssert Iech datt <code>session.save_path</code>  o
        'config-restart' => 'Jo, neistarten',
        'config-welcome' => "=== Iwwerpréifung vum Installatiounsenvironnement ===
 Et gi grondsätzlech Iwwerpréifunge gemaach fir ze kucken ob den Environnment gëeegent ass fir MediaWiki z'installéieren.
-Dir sollt d'Resultater vun dëser Iwwerpréifung ugi wann Dir während der Installatioun Hëllef braucht.",
+Dir sollt d'Resultater vun dëser Iwwerpréifung ugi wann Dir während der Installatioun Hëllef frot wéi Dir D'Installatioun ofschléisse kënnt.",
        'config-sidebar' => '* [//www.mediawiki.org MediaWiki Haaptsäit]
 * [//www.mediawiki.org/wiki/Help:Contents Benotzerguide]
 * [//www.mediawiki.org/wiki/Manual:Contents Guide fir Administrateuren]
@@ -12356,7 +12373,7 @@ Wann Dir PHP vun engem Debian oder Ubuntu Package aus installéiert hutt, da mus
        'config-outdated-sqlite' => "'''Warnung:''' SQLite $1 ass installéiert. Allerdengs brauch MediaWiki SQLite $2 oder méi nei. SQLite ass dofir net disponibel.",
        'config-memory-bad' => "'''Opgepasst:''' De Parameter <code>memory_limit</code> vu PHP ass $1.
 Dat ass wahrscheinlech ze niddreg.
-D'Installatioun kéint net fonctionnéieren.",
+D'Installatioun kéint net funktionéieren.",
        'config-xcache' => '[http://xcache.lighttpd.net/ XCache] ass installéiert',
        'config-apc' => '[http://www.php.net/apc APC] ass installéiert',
        'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] ass installéiert',
@@ -12440,7 +12457,7 @@ Dësen Numm gëtt da gebraucht fir sech an d\'Wiki anzeloggen.',
 Spezifizéiert en anere Benotzernumm.',
        'config-admin-password-blank' => 'Gitt e Passwuert fir den Adminstateur-Kont an.',
        'config-admin-password-same' => "D'Passwuert däerf net dat selwecht si wéi de Benotzernumm.",
-       'config-admin-password-mismatch' => 'Déi zwee Passwierder Déi dir aginn stëmmen net iwwerteneen.',
+       'config-admin-password-mismatch' => 'Déi zwee Passwierder Déi Dir aginn hutt stëmmen net iwwereneen.',
        'config-admin-email' => 'E-Mail-Adress:',
        'config-admin-error-user' => 'Interne Feeler beim uleeë vun engem Administrateur mam Numm "<nowiki>$1</nowiki>".',
        'config-admin-error-password' => 'Interne Feeler beim Setze vum Passwuert fir den Admin "<nowiki>$1</nowiki>": <pre>$2</pre>',
@@ -12474,15 +12491,15 @@ Dir kënnt elo déi Astellungen déi nach iwwreg sinn iwwersprangen an d'Wiki el
        'config-advanced-settings' => 'Erweidert Astellungen',
        'config-extensions' => 'Erweiderungen',
        'config-install-step-done' => 'fäerdeg',
-       'config-install-step-failed' => 'huet net fonctionnéiert',
+       'config-install-step-failed' => 'huet net funktionéiert',
        'config-install-extensions' => 'Mat den Ereiderungen',
        'config-install-database' => 'Datebank gëtt installéiert',
        'config-install-pg-plpgsql' => 'No der Sprooch PL/pgSQL sichen',
        'config-pg-no-plpgsql' => "Fir d'Datebank $1 muss d'Datebanksprooch PL/pgSQL installéiert ginn",
        'config-install-user' => 'Datebank Benotzer uleeën',
        'config-install-user-alreadyexists' => 'De Benotzer "$1" gëtt et schonn!',
-       'config-install-user-create-failed' => 'D\'Opmaache vum Benotzer "$1" huet net fonctionnéiert: $2',
-       'config-install-user-grant-failed' => 'D\'Bäisetze vu Rechter fir de Benotzer "$1" huet net fonctionnéiert: $2',
+       'config-install-user-create-failed' => 'D\'Opmaache vum Benotzer "$1" huet net funktionéiert: $2',
+       'config-install-user-grant-failed' => 'D\'Bäisetze vu Rechter fir de Benotzer "$1" huet net funktionéiert: $2',
        'config-install-user-missing' => 'De Benotzer "$1" deen ugi gouf gëtt et net.',
        'config-install-user-missing-create' => 'De spezifizéierte Benotzer "$1" gëtt et net.
 Klickt d\'Checkbox "Benotzerkont uleeën" wann Dir dee Benotzer uleeë wëllt.',
@@ -12555,8 +12572,11 @@ $messages['lo'] = array(
 
 /** Lithuanian (lietuvių)
  * @author Eitvys200
+ * @author Mantak111
  */
 $messages['lt'] = array(
+       'config-desc' => 'MediaWiki diegimas',
+       'config-title' => 'MediaWiki $1 diegimas',
        'config-information' => 'Informacija',
        'config-your-language' => 'Jūsų kalba:',
        'config-wiki-language' => 'Viki kalba:',
@@ -12564,6 +12584,8 @@ $messages['lt'] = array(
        'config-continue' => 'Toliau →',
        'config-page-language' => 'Kalba',
        'config-page-welcome' => 'Sveiki atvykę į MediaWiki!',
+       'config-page-dbconnect' => 'Prisijungti prie duomenų bazės',
+       'config-page-dbsettings' => 'Duomenų bazės nustatymai',
        'config-page-name' => 'Vardas',
        'config-page-options' => 'Parinktys',
        'config-page-install' => 'Įdiegti',
@@ -12573,7 +12595,18 @@ $messages['lt'] = array(
        'config-page-copying' => 'Kopijuojama',
        'config-page-upgradedoc' => 'Atnaujinama',
        'config-restart' => 'Taip, paleiskite jį iš naujo',
+       'config-env-php' => 'PHP $1 yra įdiegtas.',
+       'config-env-php-toolow' => 'PHP $1 įdiegta.
+Tačiau, MediaWiki reikia PHP $2 ar naujesnės.',
+       'config-db-type' => 'Duomenų bazės tipas:',
+       'config-db-host' => 'Duomenų bazės serveris:',
+       'config-db-name' => 'Duomenų bazės pavadinimas:',
+       'config-db-name-oracle' => 'Duomenų bazės schema:',
+       'config-db-username' => 'Duomenų bazės vartotojo vardas:',
+       'config-db-password' => 'Duomenų bazės slaptažodis:',
        'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
+       'config-db-port' => 'Duomenų bazės prievadas:',
+       'config-db-schema' => 'MediaWiki schema:',
        'config-header-mysql' => 'MySQL nustatymai',
        'config-header-postgres' => 'PostgreSQL nustatymai',
        'config-header-sqlite' => 'SQLite nustatymai',
@@ -12586,6 +12619,7 @@ $messages['lt'] = array(
        'config-project-namespace' => 'Projekto pavadinimas:',
        'config-ns-generic' => 'Projektas',
        'config-ns-site-name' => 'Toks pat kaip viki pavadinimas: $1',
+       'config-ns-other-default' => 'ManoWiki',
        'config-admin-box' => 'Administratoriaus paskyra',
        'config-admin-name' => 'Jūsų vardas:',
        'config-admin-password' => 'Slaptažodis:',
@@ -12609,7 +12643,25 @@ $messages['lt'] = array(
        'config-install-step-done' => 'atlikta',
        'config-install-step-failed' => 'nepavyko',
        'config-install-schema' => 'Kuriama schema',
+       'config-install-tables' => 'Kuriamos lentelės',
+       'config-install-stats' => 'Inicijuojamos statistikos',
        'config-install-keys' => 'Generuojami slapti raktai',
+       'config-install-done' => "'''Sveikiname!'''
+Jūs sėkmingai įdiegėte MediaWiki.
+
+Įdiegimo programa sukūrė <code>LocalSettings.php</code> failą.
+Jame yra visos jūsų konfigūracijos.
+
+Jums reikės atsisiųsti ir įdėti jį į savo wiki įdiegimo bazę (pačiame kataloge, kaip index.php). Atsisiuntimas turėtų prasidėti automatiškai.
+
+Jei atsisiuntimas nebuvo pasiūlytas, arba jį atšaukėte, galite iš naujo atsisiųsti paspaudę žemiau esančią nuorodą:
+
+<span class=\"notranslate\" versti=\"no\">\$3</span>
+
+'''Pastaba:''' Jei jūs to nepadarysite dabar, tada šis sukurtas konfigūracijos failas nebus galimas vėliau, jei išeisite iš įdiegimo be atsisiuntimo.
+
+Kai baigsite, jūs galėsite '''[\$2 įeiti į savo wiki]'''.",
+       'config-download-localsettings' => 'Atsisiųsti <code>LocalSettings.php</code>',
        'config-help' => 'pagalba',
        'mainpagetext' => "'''MediaWiki sėkmingai įdiegta.'''",
        'mainpagedocfooter' => 'Informacijos apie wiki programinės įrangos naudojimą, ieškokite [//meta.wikimedia.org/wiki/Help:Contents žinyne].
 Ова е веројатно премалку.
 Инсталацијата може да не успее!",
        'config-ctype' => "'''Фатална грешка''': PHP мора да се состави со поддршка за [http://www.php.net/manual/en/ctype.installation.php додатокот Ctype].",
+       'config-json' => "'''Кобно:''' PHP беше срочен без поддршка од JSON.
+Ќе мора да го инсталирате додатокот за JSON во PHP, или додатокот [http://pecl.php.net/package/jsonc PECL jsonc] пред да го инсталирате МедијаВики.
+* Додатокот за PHP е вклучен во верзиите 5 и 6 на Linux (од Red Hat Enterprise) (CentOS), но мора да се активира во <code>/etc/php.ini</code> или <code>/etc/php.d/json.ini</code>.
+* Некои варијанти на Linux излезени по мај 2013 г. не го содржат додатокот за PHP, туку го пакуваат додатокот PECL како <code>php5-json</code> или <code>php-pecl-jsonc</code>.",
        'config-xcache' => '[http://xcache.lighttpd.net/ XCache] е инсталиран',
        'config-apc' => '[http://www.php.net/apc APC] е инсталиран',
        'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] е инсталиран',
@@ -15322,8 +15378,8 @@ Sprawdź plik php.ini i upewnij się, że <code>session.save_path</code> wskazuj
        'config-help-restart' => 'Czy chcesz usunąć wszystkie zapisane dane i uruchomić ponownie proces instalacji?',
        'config-restart' => 'Tak, zacznij od nowa',
        'config-welcome' => '=== Sprawdzenie środowiska instalacji ===
-Wykonywane są podstawowe testy sprawdzające czy to środowisko jest odpowiednie dla instalacji MediaWiki.
-Jeśli potrzebujesz pomocy podczas instalacji załącz wyniki tych testów.',
+Teraz zostaną wykonane podstawowe testy sprawdzające czy to środowisko jest odpowiednie dla instalacji MediaWiki.
+Jeśli potrzebujesz pomocy podczas instalacji, załącz wyniki tych testów.',
        'config-copyright' => "=== Prawa autorskie i warunki użytkowania ===
 
 $1
@@ -16389,7 +16445,7 @@ $messages['ps'] = array(
        'config-page-welcome' => 'مېډياويکي ته ښه راغلاست!',
        'config-page-name' => 'نوم',
        'config-page-options' => 'خوښنې',
-       'config-page-install' => 'Ù\84Ú«ول',
+       'config-page-install' => 'Ù\84Ú¯ول',
        'config-page-complete' => 'بشپړ!',
        'config-env-php' => 'د $1 PHP نصب شو.',
        'config-db-type' => 'د توکبنسټ ډول:',
@@ -16408,13 +16464,13 @@ $messages['ps'] = array(
        'config-site-name-blank' => 'د وېبځي نوم وليکۍ.',
        'config-project-namespace' => 'د پروژې نوم-تشيال:',
        'config-ns-generic' => 'پروژه',
-       'config-admin-box' => 'د Ù¾Ø§Ø²Ù\88اÙ\84 Ú«ڼون',
+       'config-admin-box' => 'د Ù¾Ø§Ø²Ù\88اÙ\84 Ú¯ڼون',
        'config-admin-name' => 'ستاسې نوم:',
        'config-admin-password' => 'پټنوم:',
        'config-admin-password-confirm' => 'پټنوم يو ځل بيا:',
        'config-admin-email' => 'برېښليک پته:',
        'config-profile-wiki' => 'پرانيستې ويکي',
-       'config-license-pd' => 'Ù¼Ù\88Ù\84Ú«ړی شپول',
+       'config-license-pd' => 'Ù¼Ù\88Ù\84Ú¯ړی شپول',
        'config-email-settings' => 'د برېښليک امستنې',
        'config-install-step-done' => 'ترسره شو',
        'config-install-tables' => 'لښتيالونه جوړول',
@@ -16438,6 +16494,7 @@ $messages['ps'] = array(
  * @author SandroHc
  * @author Waldir
  * @author 아라
+ * @author 555
  */
 $messages['pt'] = array(
        'config-desc' => 'O instalador do MediaWiki',
@@ -16492,7 +16549,7 @@ Verifique o seu php.ini e certifique-se de que em <code>session.save_path</code>
        'config-restart' => 'Sim, reiniciar',
        'config-welcome' => '=== Verificações do ambiente ===
 São realizadas verificações básicas para determinar se este ambiente é apropriado para instalação do MediaWiki.
-Se necessitar de pedir ajuda durante a instalação, deve fornecer os resultados destas verificações.',
+Se necessitar de pedir ajuda durante a instalação, deve fornecer os resultados destas verificações.', # Fuzzy
        'config-copyright' => "=== Direitos de autor e Condições de uso ===
 
 $1
@@ -16519,7 +16576,7 @@ Não pode instalar o MediaWiki.',
        'config-env-php' => 'O PHP $1 está instalado.',
        'config-env-php-toolow' => 'O PHP $1 está instalado.
 No entanto, o MediaWiki requer o PHP $2 ou superior.',
-       'config-unicode-using-utf8' => 'A usar o utf8_normalize.so, por Brian Viper, para a normalização Unicode.',
+       'config-unicode-using-utf8' => 'A usar o utf8_normalize.so, por Brion Vibber, para a normalização Unicode.',
        'config-unicode-using-intl' => 'A usar a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.',
        'config-unicode-pure-php-warning' => "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode. Irá recorrer-se à implementação em PHP puro, que é mais lenta.
 Se o seu site tem alto volume de tráfego, devia informar-se um pouco sobre a [//www.mediawiki.org/wiki/Unicode_normalization_considerations/pt normalização Unicode].",
@@ -16996,11 +17053,17 @@ $messages['pt-br'] = array(
 Para atualizar esta instalação, insira no box abaixo o valor de <code>$wgUpgradeKey</code>.
 Essa informação pode ser encontrada no arquivo <code>LocalSettings.php</code>',
        'config-localsettings-cli-upgrade' => 'Foi detectada a existência do arquivo <code><code>LocalSettings.php</code></code>.
-Esta instalação deverá ser atualizada através do <code>update.php</code>',
+Atualize esta instalação executando o arquivo <code>update.php</code>',
        'config-localsettings-key' => 'Chave de atualização:',
        '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 insira a seguinte linha na parte inferior do seu <code>LocalSettings.php</code>:
+Para atualizar esta instalação, insira a seguinte linha na parte inferior do seu <code>LocalSettings.php</code>:
+
+$1',
+       'config-localsettings-incomplete' => 'O arquivo <code>LocalSettings.php</code> parece incompleto.
+A variável $1 não está definida.
+Altere seu <code>LocalSettings.php</code> com a definição dessa variável e clique em "{{int:Config-continue}}".',
+       'config-localsettings-connection-error' => 'Ocorreu um erro ao conectar ao banco de dados através das configurações presentes ou no <code>LocalSettings.php</code> ou no <code>AdminSettings.php</code>. Corrija essas configurações e tente novamente.
 
 $1',
        'config-session-error' => 'Erro ao iniciar a sessão: $1',
@@ -17010,21 +17073,21 @@ Você pode aumentar esta duração configurando <code>session.gc_maxlifetime</co
 Reinicie o processo de instalação.',
        'config-no-session' => 'Os seus dados de sessão foram perdidos!
 Verifique o seu php.ini e certifique-se de que em <code>session.save_path</code> está definido um diretório apropriado.',
-       'config-your-language' => 'A sua língua:',
-       'config-your-language-help' => 'Selecione a língua que será usada durante o processo de instalação.',
-       'config-wiki-language' => 'Língua da wiki:',
-       'config-wiki-language-help' => 'Selecione a língua que será predominante na wiki.',
+       'config-your-language' => 'Seu idioma:',
+       'config-your-language-help' => 'Selecione o idioma que será usado durante o processo de instalação.',
+       'config-wiki-language' => 'Idioma do wiki:',
+       'config-wiki-language-help' => 'Selecione o idioma em que o wiki será predominantemente escrito.',
        'config-back' => '← Voltar',
        'config-continue' => 'Continuar →',
-       'config-page-language' => 'Língua',
+       'config-page-language' => 'Idioma',
        'config-page-welcome' => 'Bem-vindo(a) ao MediaWiki!',
-       'config-page-dbconnect' => 'Ligar à base de dados',
+       'config-page-dbconnect' => 'Conectar ao banco de dados',
        'config-page-upgrade' => 'Atualizar a instalação existente',
-       'config-page-dbsettings' => 'Configurações da base de dados',
+       'config-page-dbsettings' => 'Configurações do banco de dados',
        'config-page-name' => 'Nome',
        'config-page-options' => 'Opções',
        'config-page-install' => 'Instalar',
-       'config-page-complete' => 'Terminado!',
+       'config-page-complete' => 'Concluído!',
        'config-page-restart' => 'Reiniciar a instalação',
        'config-page-readme' => 'Leia-me',
        'config-page-releasenotes' => 'Notas de lançamento',
@@ -17033,9 +17096,9 @@ Verifique o seu php.ini e certifique-se de que em <code>session.save_path</code>
        'config-page-existingwiki' => 'Wiki existente',
        'config-help-restart' => 'Deseja limpar todos os dados salvos que você introduziu e reiniciar o processo de instalação?',
        'config-restart' => 'Sim, reiniciar',
-       'config-welcome' => '=== Verificações do ambiente ===
-São realizadas verificações básicas para determinar se este ambiente é apropriado para instalação do MediaWiki.
-Você deverá fornecer os resultados destas verificações se você precisar de ajuda durante a instalação.', # Fuzzy
+       'config-welcome' => '=== Verificações de ambiente ===
+São realizadas verificações básicas para determinar se este ambiente é apropriado para instalação do MediaWiki.
+Lembre-se de incluir estas informações se for procurar por suporte para a conclusão da instalação.',
        'config-copyright' => "=== Direitos autorais e Termos de uso ===
 
 $1
@@ -17046,39 +17109,48 @@ Este programa é distribuído na esperança de que seja útil, mas '''sem qualqu
 Consulte a licença GNU General Public License para mais detalhes.
 
 Em conjunto com este programa você deve ter recebido <doclink href=Copying>uma cópia da licença GNU General Public License</doclink>; se não a recebeu, peça-a por escrito para Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [http://www.gnu.org/copyleft/gpl.html leia-a na internet].",
-       'config-sidebar' => '* [//www.mediawiki.org/wiki/MediaWiki/pt Página principal do MediaWiki]
-* [//www.mediawiki.org/wiki/Help:Contents/pt Ajuda]
-* [//www.mediawiki.org/wiki/Manual:Contents/pt Manual técnico]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]', # Fuzzy
+       'config-sidebar' => '* [//www.mediawiki.org/wiki/MediaWiki Página principal do MediaWiki]
+* [//www.mediawiki.org/wiki/Help:Contents Manual de uso]
+* [//www.mediawiki.org/wiki/Manual:Contents Manual administrativo]
+* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]
+----
+* <doclink href=Readme>Leia-me</doclink>
+* <doclink href=ReleaseNotes>Notas de lançamento</doclink>
+* <doclink href=Copying>Licença</doclink>
+* <doclink href=UpgradeDoc>Como fazer upgrade</doclink>',
        'config-env-good' => 'O ambiente foi verificado.
 Você pode instalar o MediaWiki.',
        'config-env-bad' => 'O ambiente foi verificado.
 Você não pode instalar o MediaWiki.',
        'config-env-php' => 'O PHP $1 está instalado.',
-       'config-unicode-using-utf8' => 'A usar o utf8_normalize.so, de Brian Viper, para a normalização Unicode.',
+       'config-unicode-using-utf8' => 'Usando o utf8_normalize.so, de Brion Vibber, para a normalização Unicode.',
        'config-unicode-using-intl' => 'Usando a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.',
-       'config-unicode-pure-php-warning' => "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode.
-Se o seu site tem um alto volume de tráfego, devia informar-se um pouco sobre a [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalização Unicode].", # Fuzzy
-       'config-no-db' => 'Não foi possível encontrar um driver de banco de dados adequado!', # Fuzzy
+       'config-unicode-pure-php-warning' => "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode sendo usada, em seu lugar, a lenta implementação de PHP puro.
+Se o seu site tem um alto volume de tráfego, informe-se sobre a [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalização Unicode].",
+       'config-no-db' => 'Não foi possível encontrar um driver de banco de dados adequado! É necessário instalar um driver de banco de dados para o PHP.
+São suportados os seguintes tipos de bancos de dados: $1.
+
+Se estiver em uma hospedagem partilhada, peça à sua empresa de hospedagem para instalar um driver de banco de dados adequado.
+Se você mesmo tiver compilado o PHP, reconfigure-o com um cliente de banco de dados ativado usando, por exemplo, <code>./configure --with-mysql</code>.
+Se você instalou o PHP a partir de um pacote do Debian ou do Ubuntu, instale também o módulo php5-mysql.',
        'config-no-fts3' => "' ' 'Aviso' ' ': O SQLite foi compilado sem o módulo [//sqlite.org/fts3.html FTS3]; as funcionalidades de pesquisa não estarão disponíveis nesta instalação.",
        'config-register-globals' => "' ' 'Aviso: A opção <code>[http://php.net/register_globals register_globals]</code> do PHP está ativada.'''
 ' ' 'Desative-a, se puder.'''
 O MediaWiki funcionará mesmo assim, mas o seu servidor ficará exposto a potenciais vulnerabilidades de segurança.",
-       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binário',
+       'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binary',
        'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
        'config-mysql-innodb' => 'InnoDB',
        'config-mysql-myisam' => 'MyISAM',
-       'config-mysql-binary' => 'Binário',
+       'config-mysql-binary' => 'Binary',
        'config-mysql-utf8' => 'UTF-8',
        'config-ns-generic' => 'Projeto',
        'config-admin-box' => 'Conta de administrador',
        'config-admin-name' => 'Seu nome:',
        'config-admin-password' => 'Senha:',
        'config-license-pd' => 'Domínio público',
-       'config-logo-help' => 'O tema padrão do MediaWiki inclui espaço para um logotipo de 135x160 pixels no canto superior esquerdo.
-Faça o upload de uma imagem com estas dimensões e introduza aqui a URL dessa imagem.
+       'config-logo-help' => 'Faça o upload de uma imagem de tamanho adequado e insira seu URL aqui.
 
-Se você não pretende usar um logotipo, deixe este campo em branco.', # Fuzzy
+Você pode usar <code>$wgStylePath</code> ou <code>$wgScriptPath</code> se o seu logotipo for associado a esses diretórios.',
        'config-advanced-settings' => 'Configuração avançada',
        'config-extensions' => 'Extensões',
        'config-install-step-done' => 'feito',
@@ -17354,6 +17426,7 @@ $messages['roa-tara'] = array(
  * @author Krinkle
  * @author Lockal
  * @author MaxSem
+ * @author Okras
  * @author Yuriy Apostol
  * @author Александр Сигачёв
  * @author Сrower
@@ -17411,8 +17484,8 @@ $1',
        'config-help-restart' => 'Вы хотите удалить все сохранённые данные, которые вы ввели, и запустить процесс установки заново?',
        'config-restart' => 'Да, начать заново',
        'config-welcome' => '=== Проверка окружения ===
\9fÑ\80оводÑ\8fÑ\82Ñ\81Ñ\8f базовые проверки с целью определить, подходит ли данная система для установки MediaWiki.
£ÐºÐ°Ð¶Ð¸Ñ\82е Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82Ñ\8b Ñ\8dÑ\82иÑ\85 Ð¿Ñ\80овеÑ\80ок Ð¿Ñ\80и Ð¾Ð±Ñ\80аÑ\89ении Ð·Ð° Ð¿Ð¾Ð¼Ð¾Ñ\89Ñ\8cÑ\8e Ñ\81 Ñ\83Ñ\81Ñ\82ановкой.',
\91Ñ\83дÑ\83Ñ\82 Ð¿Ñ\80оведенÑ\8b базовые проверки с целью определить, подходит ли данная система для установки MediaWiki.
\9dе Ð·Ð°Ð±Ñ\83дÑ\8cÑ\82е Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82Ñ\8c Ñ\8dÑ\82Ñ\83 Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\8e, ÐµÑ\81ли Ð²Ð°Ð¼ Ð¿Ð¾Ñ\82Ñ\80ебÑ\83еÑ\82Ñ\81Ñ\8f Ð¿Ð¾Ð¼Ð¾Ñ\89Ñ\8c Ð´Ð»Ñ\8f Ð·Ð°Ð²ÐµÑ\80Ñ\88ениÑ\8f Ñ\83Ñ\81Ñ\82ановки.',
        'config-copyright' => "=== Авторские права и условия ===
 
 $1
@@ -17487,6 +17560,7 @@ MediaWiki требует поддержки UTF-8 для корректной р
        'config-mod-security' => "'''Внимание''': на вашем веб-сервере включен [http://modsecurity.org/ mod_security]. При неправильной настройке он может вызывать проблемы для MediaWiki или другого ПО, позволяющего пользователям отправлять на сервер произвольный текст.
 Обратитесь к [http://modsecurity.org/documentation/ документации mod_security] или в поддержку вашего хостера, если при работе возникают непонятные ошибки.",
        'config-diff3-bad' => 'GNU diff3 не найден.',
+       'config-git-bad' => 'Программное обеспечение по управлению версиями Git не найдено.',
        'config-imagemagick' => 'Обнаружен ImageMagick: <code>$1</code>.
 Возможно отображение миниатюр изображений, если вы разрешите закачки файлов.',
        'config-gd' => 'Найдена встроенная графическая библиотека GD.
index afd2e3d..1044f18 100644 (file)
@@ -131,6 +131,7 @@ abstract class Installer {
                'envCheckLibicu',
                'envCheckSuhosinMaxValueLength',
                'envCheckCtype',
+               'envCheckJSON',
        );
 
        /**
@@ -1181,6 +1182,17 @@ abstract class Installer {
                return true;
        }
 
+       /**
+        * @return bool
+        */
+       protected function envCheckJSON() {
+               if ( !function_exists( 'json_decode' ) ) {
+                       $this->showError( 'config-json' );
+                       return false;
+               }
+               return true;
+       }
+
        /**
         * Get an array of likely places we can find executables. Check a bunch
         * of known Unix-like defaults, as well as the PATH environment variable
index e0bf3d7..c0b5243 100644 (file)
@@ -89,8 +89,10 @@ class MysqlInstaller extends DatabaseInstaller {
                return $this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) .
                        Html::openElement( 'fieldset' ) .
                        Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
-                       $this->getTextBox( 'wgDBname', 'config-db-name', array( 'dir' => 'ltr' ), $this->parent->getHelpBox( 'config-db-name-help' ) ) .
-                       $this->getTextBox( 'wgDBprefix', 'config-db-prefix', array( 'dir' => 'ltr' ), $this->parent->getHelpBox( 'config-db-prefix-help' ) ) .
+                       $this->getTextBox( 'wgDBname', 'config-db-name', array( 'dir' => 'ltr' ),
+                               $this->parent->getHelpBox( 'config-db-name-help' ) ) .
+                       $this->getTextBox( 'wgDBprefix', 'config-db-prefix', array( 'dir' => 'ltr' ),
+                               $this->parent->getHelpBox( 'config-db-prefix-help' ) ) .
                        Html::closeElement( 'fieldset' ) .
                        $this->getInstallUserBox();
        }
@@ -475,7 +477,7 @@ class MysqlInstaller extends DatabaseInstaller {
                $conn = $status->value;
                $dbName = $this->getVar( 'wgDBname' );
                if ( !$conn->selectDB( $dbName ) ) {
-                       $conn->query( "CREATE DATABASE " . $conn->addIdentifierQuotes( $dbName ), __METHOD__ );
+                       $conn->query( "CREATE DATABASE " . $conn->addIdentifierQuotes( $dbName ) . "CHARACTER SET utf8", __METHOD__ );
                        $conn->selectDB( $dbName );
                }
                $this->setupSchemaVars();
index 3e65eae..77e9a2c 100644 (file)
@@ -239,7 +239,6 @@ class WebInstallerOutput {
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <title><?php $this->outputTitle(); ?></title>
        <?php echo $this->getCssUrl() . "\n"; ?>
-       <?php echo Html::inlineScript( "var dbTypes = " . Xml::encodeJsVar( $dbTypes ) ) . "\n"; ?>
        <?php echo $this->getJQuery() . "\n"; ?>
        <?php echo Html::linkedScript( '../skins/common/config.js' ) . "\n"; ?>
 </head>
index 3e94b13..81e7b73 100644 (file)
@@ -616,6 +616,63 @@ abstract class JobQueue {
                return new ArrayIterator( array() ); // not implemented
        }
 
+       /**
+        * Do not use this function outside of JobQueue/JobQueueGroup
+        *
+        * @return string
+        * @since 1.22
+        */
+       public function getCoalesceLocationInternal() {
+               return null;
+       }
+
+       /**
+        * Check whether each of the given queues are empty.
+        * This is used for batching checks for queues stored at the same place.
+        *
+        * @param array $types List of queues types
+        * @return array|null (list of non-empty queue types) or null if unsupported
+        * @throws MWException
+        * @since 1.22
+        */
+       final public function getSiblingQueuesWithJobs( array $types ) {
+               $section = new ProfileSection( __METHOD__ );
+               return $this->doGetSiblingQueuesWithJobs( $types );
+       }
+
+       /**
+        * @see JobQueue::getSiblingQueuesWithJobs()
+        * @param array $types List of queues types
+        * @return array|null (list of queue types) or null if unsupported
+        */
+       protected function doGetSiblingQueuesWithJobs( array $types ) {
+               return null; // not supported
+       }
+
+       /**
+        * Check the size of each of the given queues.
+        * For queues not served by the same store as this one, 0 is returned.
+        * This is used for batching checks for queues stored at the same place.
+        *
+        * @param array $types List of queues types
+        * @return array|null (job type => whether queue is empty) or null if unsupported
+        * @throws MWException
+        * @since 1.22
+        */
+       final public function getSiblingQueueSizes( array $types ) {
+               $section = new ProfileSection( __METHOD__ );
+               return $this->doGetSiblingQueueSizes( $types );
+       }
+
+       /**
+        * @see JobQueue::getSiblingQueuesSize()
+        * @param array $types List of queues types
+        * @return array|null (list of queue types) or null if unsupported
+        */
+       protected function doGetSiblingQueueSizes( array $types ) {
+               return null; // not supported
+       }
+
        /**
         * Call wfIncrStats() for the queue overall and for the queue type
         *
index 3fa0655..af21bc1 100644 (file)
@@ -604,6 +604,36 @@ class JobQueueDB extends JobQueue {
                }
        }
 
+       public function getCoalesceLocationInternal() {
+               return $this->cluster
+                       ? "DBCluster:{$this->cluster}:{$this->wiki}"
+                       : "LBFactory:{$this->wiki}";
+       }
+
+       protected function doGetSiblingQueuesWithJobs( array $types ) {
+               list( $dbr, $scope ) = $this->getSlaveDB();
+               $res = $dbr->select( 'job', 'DISTINCT job_cmd',
+                       array( 'job_cmd' => $types ), __METHOD__ );
+
+               $types = array();
+               foreach ( $res as $row ) {
+                       $types[] = $row->job_cmd;
+               }
+               return $types;
+       }
+
+       protected function doGetSiblingQueueSizes( array $types ) {
+               list( $dbr, $scope ) = $this->getSlaveDB();
+               $res = $dbr->select( 'job', array( 'job_cmd', 'COUNT(*) AS count' ),
+                       array( 'job_cmd' => $types ), __METHOD__, array( 'GROUP BY' => 'job_cmd' ) );
+
+               $sizes = array();
+               foreach ( $res as $row ) {
+                       $sizes[$row->job_cmd] = (int)$row->count;
+               }
+               return $sizes;
+       }
+
        /**
         * Recycle or destroy any jobs that have been claimed for too long
         *
index 35b80ca..d788c98 100644 (file)
@@ -421,6 +421,38 @@ class JobQueueFederated extends JobQueue {
                return $iterator;
        }
 
+       public function getCoalesceLocationInternal() {
+               return "JobQueueFederated:wiki:" . $this->wiki;
+       }
+
+       protected function doGetSiblingQueuesWithJobs( array $types ) {
+               $result = array();
+               foreach ( $this->partitionQueues as $queue ) {
+                       $nonEmpty = $queue->doGetSiblingQueuesWithJobs( $types );
+                       if ( is_array( $nonEmpty ) ) {
+                               $result = array_merge( $result, $nonEmpty );
+                       } else {
+                               return null; // not supported on all partitions; bail
+                       }
+               }
+               return array_values( array_unique( $result ) );
+       }
+
+       protected function doGetSiblingQueueSizes( array $types ) {
+               $result = array();
+               foreach ( $this->partitionQueues as $queue ) {
+                       $sizes = $queue->doGetSiblingQueueSizes( $types );
+                       if ( is_array( $sizes ) ) {
+                               foreach ( $sizes as $type => $size ) {
+                                       $result[$type] = isset( $result[$type] ) ? $result[$type] + $size : $size;
+                               }
+                       } else {
+                               return null; // not supported on all partitions; bail
+                       }
+               }
+               return $result;
+       }
+
        public function setTestingPrefix( $key ) {
                foreach ( $this->partitionQueues as $queue ) {
                        $queue->setTestingPrefix( $key );
index e483e05..a20ea4a 100644 (file)
@@ -36,6 +36,9 @@ class JobQueueGroup {
 
        protected $wiki; // string; wiki ID
 
+       /** @var array Map of (bucket => (queue => JobQueue, types => list of types) */
+       protected $coalescedQueues;
+
        const TYPE_DEFAULT = 1; // integer; jobs popped by default
        const TYPE_ANY = 2; // integer; any job
 
@@ -254,14 +257,71 @@ class JobQueueGroup {
         */
        public function getQueuesWithJobs() {
                $types = array();
-               foreach ( $this->getQueueTypes() as $type ) {
-                       if ( !$this->get( $type )->isEmpty() ) {
-                               $types[] = $type;
+               foreach ( $this->getCoalescedQueues() as $info ) {
+                       $nonEmpty = $info['queue']->getSiblingQueuesWithJobs( $this->getQueueTypes() );
+                       if ( is_array( $nonEmpty ) ) { // batching features supported
+                               $types = array_merge( $types, $nonEmpty );
+                       } else { // we have to go through the queues in the bucket one-by-one
+                               foreach ( $info['types'] as $type ) {
+                                       if ( !$this->get( $type )->isEmpty() ) {
+                                               $types[] = $type;
+                                       }
+                               }
                        }
                }
                return $types;
        }
 
+       /**
+        * Get the size of the queus for a list of job types
+        *
+        * @return Array Map of (job type => size)
+        */
+       public function getQueueSizes() {
+               $sizeMap = array();
+               foreach ( $this->getCoalescedQueues() as $info ) {
+                       $sizes = $info['queue']->getSiblingQueueSizes( $this->getQueueTypes() );
+                       if ( is_array( $sizes ) ) { // batching features supported
+                               $sizeMap = $sizeMap + $sizes;
+                       } else { // we have to go through the queues in the bucket one-by-one
+                               foreach ( $info['types'] as $type ) {
+                                       $sizeMap[$type] = $this->get( $type )->getSize();
+                               }
+                       }
+               }
+               return $sizeMap;
+       }
+
+       /**
+        * @return array
+        */
+       protected function getCoalescedQueues() {
+               global $wgJobTypeConf;
+
+               if ( $this->coalescedQueues === null ) {
+                       $this->coalescedQueues = array();
+                       foreach ( $wgJobTypeConf as $type => $conf ) {
+                               $queue = JobQueue::factory(
+                                       array( 'wiki' => $this->wiki, 'type' => 'null' ) + $conf );
+                               $loc = $queue->getCoalesceLocationInternal();
+                               if ( !isset( $this->coalescedQueues[$loc] ) ) {
+                                       $this->coalescedQueues[$loc]['queue'] = $queue;
+                                       $this->coalescedQueues[$loc]['types'] = array();
+                               }
+                               if ( $type === 'default' ) {
+                                       $this->coalescedQueues[$loc]['types'] = array_merge(
+                                               $this->coalescedQueues[$loc]['types'],
+                                               array_diff( $this->getQueueTypes(), array_keys( $wgJobTypeConf ) )
+                                       );
+                               } else {
+                                       $this->coalescedQueues[$loc]['types'][] = $type;
+                               }
+                       }
+               }
+
+               return $this->coalescedQueues;
+       }
+
        /**
         * Check if jobs should not be popped of a queue right now.
         * This is only used for performance, such as to avoid spamming
index 57189a5..378e175 100644 (file)
@@ -501,7 +501,7 @@ LUA;
                        foreach ( $props as $prop ) {
                                $keys[] = $this->getQueueKey( $prop );
                        }
-                       $res = ( $conn->delete( $keys ) !== false );
+                       return ( $conn->delete( $keys ) !== false );
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
                }
@@ -547,6 +547,35 @@ LUA;
                }
        }
 
+       public function getCoalesceLocationInternal() {
+               return "RedisServer:" . $this->server;
+       }
+
+       protected function doGetSiblingQueuesWithJobs( array $types ) {
+               return array_keys( array_filter( $this->doGetSiblingQueueSizes( $types ) ) );
+       }
+
+       protected function doGetSiblingQueueSizes( array $types ) {
+               $sizes = array(); // (type => size)
+               $types = array_values( $types ); // reindex
+               try {
+                       $conn = $this->getConnection();
+                       $conn->multi( Redis::PIPELINE );
+                       foreach ( $types as $type ) {
+                               $conn->lSize( $this->getQueueKey( 'l-unclaimed', $type ) );
+                       }
+                       $res = $conn->exec();
+                       if ( is_array( $res ) ) {
+                               foreach ( $res as $i => $size ) {
+                                       $sizes[$types[$i]] = $size;
+                               }
+                       }
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $this->server, $conn, $e );
+               }
+               return $sizes;
+       }
+
        /**
         * This function should not be called outside JobQueueRedis
         *
@@ -804,14 +833,16 @@ LUA;
 
        /**
         * @param $prop string
+        * @param $type string|null
         * @return string
         */
-       private function getQueueKey( $prop ) {
+       private function getQueueKey( $prop, $type = null ) {
+               $type = is_string( $type ) ? $type : $this->type;
                list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
                if ( strlen( $this->key ) ) { // namespaced queue (for testing)
-                       return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, $this->key, $prop );
+                       return wfForeignMemcKey( $db, $prefix, 'jobqueue', $type, $this->key, $prop );
                } else {
-                       return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, $prop );
+                       return wfForeignMemcKey( $db, $prefix, 'jobqueue', $type, $prop );
                }
        }
 
index 474212b..4fc8bac 100644 (file)
@@ -48,7 +48,7 @@ class RefreshLinksJob extends Job {
                # Wait for the DB of the current/next slave DB handle to catch up to the master.
                # This way, we get the correct page_latest for templates or files that just changed
                # milliseconds ago, having triggered this job to begin with.
-               if ( !empty( $this->params['masterPos'] ) ) {
+               if ( isset( $this->params['masterPos'] ) && $this->params['masterPos'] !== false ) {
                        wfGetLB()->waitFor( $this->params['masterPos'] );
                }
 
index 128d9b9..5a52fc7 100644 (file)
@@ -77,6 +77,9 @@ class CSSJanus {
                'four_notation_quantity' => null,
                'four_notation_color' => null,
                'border_radius' => null,
+               'box_shadow' => null,
+               'text_shadow1' => null,
+               'text_shadow2' => null,
                'bg_horizontal_percentage' => null,
                'bg_horizontal_percentage_x' => null,
        );
@@ -117,6 +120,9 @@ class CSSJanus {
                $patterns['four_notation_quantity'] = "/(:\s*){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s*[;}])/i";
                $patterns['four_notation_color'] = "/(-color\s*:\s*){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}(\s*[;}])/i";
                $patterns['border_radius'] = "/(border-radius\s*:\s*){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s*[;}])/i";
+               $patterns['box_shadow'] = "/(box-shadow\s*:\s*(?:inset\s*)?){$patterns['possibly_negative_quantity']}/i";
+               $patterns['text_shadow1'] = "/(text-shadow\s*:\s*){$patterns['color']}(\s*){$patterns['possibly_negative_quantity']}/i";
+               $patterns['text_shadow2'] = "/(text-shadow\s*:\s*){$patterns['possibly_negative_quantity']}/i";
                // The two regexes below are parenthesized differently then in the original implementation to make the
                // callback's job more straightforward
                $patterns['bg_horizontal_percentage'] = "/(background(?:-position)?\s*:\s*[^%]*?)(-?{$patterns['num']})(%\s*(?:{$patterns['quantity']}|{$patterns['ident']}))/";
@@ -164,6 +170,7 @@ class CSSJanus {
                $css = self::fixFourPartNotation( $css );
                $css = self::fixBorderRadius( $css );
                $css = self::fixBackgroundPosition( $css );
+               $css = self::fixShadows( $css );
 
                // Detokenize stuff we tokenized before
                $css = $comments->detokenize( $css );
@@ -262,7 +269,6 @@ class CSSJanus {
        private static function fixFourPartNotation( $css ) {
                $css = preg_replace( self::$patterns['four_notation_quantity'], '$1$2$3$8$5$6$7$4$9', $css );
                $css = preg_replace( self::$patterns['four_notation_color'], '$1$2$3$8$5$6$7$4$9', $css );
-
                return $css;
        }
 
@@ -282,6 +288,41 @@ class CSSJanus {
                return $css;
        }
 
+       /**
+        * Negates horizontal offset in box-shadow and text-shadow rules.
+        *
+        * @param $css string
+        * @return string
+        */
+       private static function fixShadows( $css ) {
+               // Flips the sign of a CSS value, possibly with a unit.
+               // (We can't just negate the value with unary minus due to the units.)
+               $flipSign = function ( $cssValue ) {
+                       // Don't mangle zeroes
+                       if ( intval( $cssValue ) === 0 ) {
+                               return $cssValue;
+                       } elseif ( $cssValue[0] === '-' ) {
+                               return substr( $cssValue, 1 );
+                       } else {
+                               return "-" . $cssValue;
+                       }
+               };
+
+               $css = preg_replace_callback( self::$patterns['box_shadow'], function ( $matches ) use ( $flipSign ) {
+                       return $matches[1] . $flipSign( $matches[2] );
+               }, $css );
+
+               $css = preg_replace_callback( self::$patterns['text_shadow1'], function ( $matches ) use ( $flipSign ) {
+                       return $matches[1] . $matches[2] . $matches[3] . $flipSign( $matches[4] );
+               }, $css );
+
+               $css = preg_replace_callback( self::$patterns['text_shadow2'], function ( $matches ) use ( $flipSign ) {
+                       return $matches[1] . $flipSign( $matches[2] );
+               }, $css );
+
+               return $css;
+       }
+
        /**
         * Flip horizontal background percentages.
         * @param $css string
index 8b0e287..4f142fc 100644 (file)
@@ -81,11 +81,39 @@ class CSSMin {
                return $files;
        }
 
+       /**
+        * Encode an image file as a base64 data URI.
+        * If the image file has a suitable MIME type and size, encode it as a
+        * base64 data URI. Return false if the image type is unfamiliar or exceeds
+        * the size limit.
+        *
+        * @param string $file Image file to encode.
+        * @param string|null $type File's MIME type or null. If null, CSSMin will
+        *     try to autodetect the type.
+        * @param int|bool $sizeLimit If the size of the target file is greater than
+        *     this value, decline to encode the image file and return false
+        *     instead. If $sizeLimit is false, no limit is enforced.
+        * @return string|bool: Image contents encoded as a data URI or false.
+        */
+       public static function encodeImageAsDataURI( $file, $type = null, $sizeLimit = self::EMBED_SIZE_LIMIT ) {
+               if ( $sizeLimit !== false && filesize( $file ) >= $sizeLimit ) {
+                       return false;
+               }
+               if ( $type === null ) {
+                       $type = self::getMimeType( $file );
+               }
+               if ( !$type ) {
+                       return false;
+               }
+               $data = base64_encode( file_get_contents( $file ) );
+               return 'data:' . $type . ';base64,' . $data;
+       }
+
        /**
         * @param $file string
         * @return bool|string
         */
-       protected static function getMimeType( $file ) {
+       public static function getMimeType( $file ) {
                $realpath = realpath( $file );
                // Try a couple of different ways to get the mime-type of a file, in order of
                // preference
@@ -174,23 +202,14 @@ class CSSMin {
                                // using Z for the timezone, meaning GMT
                                $url .= '?' . gmdate( 'Y-m-d\TH:i:s\Z', round( filemtime( $file ), -2 ) );
                                // Embedding requires a bit of extra processing, so let's skip that if we can
-                               if ( $embedData && $embed ) {
-                                       $type = self::getMimeType( $file );
-                                       // Detect when URLs were preceeded with embed tags, and also verify file size is
-                                       // below the limit
-                                       if (
-                                               $type
-                                               && $match['embed'][1] > 0
-                                               && filesize( $file ) < self::EMBED_SIZE_LIMIT
-                                       ) {
-                                               // Strip off any trailing = symbols (makes browsers freak out)
-                                               $data = base64_encode( file_get_contents( $file ) );
+                               if ( $embedData && $embed && $match['embed'][1] > 0 ) {
+                                       $data = self::encodeImageAsDataURI( $file );
+                                       if ( $data !== false ) {
                                                // Build 2 CSS properties; one which uses a base64 encoded data URI in place
                                                // of the @embed comment to try and retain line-number integrity, and the
                                                // other with a remapped an versioned URL and an Internet Explorer hack
                                                // making it ignored in all browsers that support data URIs
-                                               $replacement = "{$pre}url(data:{$type};base64,{$data}){$post};";
-                                               $replacement .= "{$pre}url({$url}){$post}!ie;";
+                                               $replacement = "{$pre}url({$data}){$post};{$pre}url({$url}){$post}!ie;";
                                        }
                                }
                                if ( $replacement === false ) {
diff --git a/includes/libs/lessc.inc.php b/includes/libs/lessc.inc.php
new file mode 100644 (file)
index 0000000..3dce961
--- /dev/null
@@ -0,0 +1,3742 @@
+<?php
+
+/**
+ * lessphp v0.4.0@261f1bd28f
+ * http://leafo.net/lessphp
+ *
+ * LESS CSS compiler, adapted from http://lesscss.org
+ *
+ * For ease of distribution, lessphp 0.4.0 is under a dual license.
+ * You are free to pick which one suits your needs.
+ *
+ * MIT LICENSE
+ *
+ * Copyright 2013, Leaf Corcoran <leafot@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * GPL VERSION 3
+ *
+ * Please refer to http://www.gnu.org/licenses/gpl-3.0.html for the full
+ * text of the GPL version 3
+ */
+
+
+/**
+ * The LESS compiler and parser.
+ *
+ * Converting LESS to CSS is a three stage process. The incoming file is parsed
+ * by `lessc_parser` into a syntax tree, then it is compiled into another tree
+ * representing the CSS structure by `lessc`. The CSS tree is fed into a
+ * formatter, like `lessc_formatter` which then outputs CSS as a string.
+ *
+ * During the first compile, all values are *reduced*, which means that their
+ * types are brought to the lowest form before being dump as strings. This
+ * handles math equations, variable dereferences, and the like.
+ *
+ * The `parse` function of `lessc` is the entry point.
+ *
+ * In summary:
+ *
+ * The `lessc` class creates an instance of the parser, feeds it LESS code,
+ * then transforms the resulting tree to a CSS tree. This class also holds the
+ * evaluation context, such as all available mixins and variables at any given
+ * time.
+ *
+ * The `lessc_parser` class is only concerned with parsing its input.
+ *
+ * The `lessc_formatter` takes a CSS tree, and dumps it to a formatted string,
+ * handling things like indentation.
+ */
+class lessc {
+       static public $VERSION = "v0.4.0";
+
+       static public $TRUE = array("keyword", "true");
+       static public $FALSE = array("keyword", "false");
+
+       protected $libFunctions = array();
+       protected $registeredVars = array();
+       protected $preserveComments = false;
+
+       public $vPrefix = '@'; // prefix of abstract properties
+       public $mPrefix = '$'; // prefix of abstract blocks
+       public $parentSelector = '&';
+
+       public $importDisabled = false;
+       public $importDir = '';
+
+       protected $numberPrecision = null;
+
+       protected $allParsedFiles = array();
+
+       // set to the parser that generated the current line when compiling
+       // so we know how to create error messages
+       protected $sourceParser = null;
+       protected $sourceLoc = null;
+
+       static protected $nextImportId = 0; // uniquely identify imports
+
+       // attempts to find the path of an import url, returns null for css files
+       protected function findImport($url) {
+               foreach ((array)$this->importDir as $dir) {
+                       $full = $dir.(substr($dir, -1) != '/' ? '/' : '').$url;
+                       if ($this->fileExists($file = $full.'.less') || $this->fileExists($file = $full)) {
+                               return $file;
+                       }
+               }
+
+               return null;
+       }
+
+       protected function fileExists($name) {
+               return is_file($name);
+       }
+
+       static public function compressList($items, $delim) {
+               if (!isset($items[1]) && isset($items[0])) return $items[0];
+               else return array('list', $delim, $items);
+       }
+
+       static public function preg_quote($what) {
+               return preg_quote($what, '/');
+       }
+
+       protected function tryImport($importPath, $parentBlock, $out) {
+               if ($importPath[0] == "function" && $importPath[1] == "url") {
+                       $importPath = $this->flattenList($importPath[2]);
+               }
+
+               $str = $this->coerceString($importPath);
+               if ($str === null) return false;
+
+               $url = $this->compileValue($this->lib_e($str));
+
+               // don't import if it ends in css
+               if (substr_compare($url, '.css', -4, 4) === 0) return false;
+
+               $realPath = $this->findImport($url);
+
+               if ($realPath === null) return false;
+
+               if ($this->importDisabled) {
+                       return array(false, "/* import disabled */");
+               }
+
+               if (isset($this->allParsedFiles[realpath($realPath)])) {
+                       return array(false, null);
+               }
+
+               $this->addParsedFile($realPath);
+               $parser = $this->makeParser($realPath);
+               $root = $parser->parse(file_get_contents($realPath));
+
+               // set the parents of all the block props
+               foreach ($root->props as $prop) {
+                       if ($prop[0] == "block") {
+                               $prop[1]->parent = $parentBlock;
+                       }
+               }
+
+               // copy mixins into scope, set their parents
+               // bring blocks from import into current block
+               // TODO: need to mark the source parser these came from this file
+               foreach ($root->children as $childName => $child) {
+                       if (isset($parentBlock->children[$childName])) {
+                               $parentBlock->children[$childName] = array_merge(
+                                       $parentBlock->children[$childName],
+                                       $child);
+                       } else {
+                               $parentBlock->children[$childName] = $child;
+                       }
+               }
+
+               $pi = pathinfo($realPath);
+               $dir = $pi["dirname"];
+
+               list($top, $bottom) = $this->sortProps($root->props, true);
+               $this->compileImportedProps($top, $parentBlock, $out, $parser, $dir);
+
+               return array(true, $bottom, $parser, $dir);
+       }
+
+       protected function compileImportedProps($props, $block, $out, $sourceParser, $importDir) {
+               $oldSourceParser = $this->sourceParser;
+
+               $oldImport = $this->importDir;
+
+               // TODO: this is because the importDir api is stupid
+               $this->importDir = (array)$this->importDir;
+               array_unshift($this->importDir, $importDir);
+
+               foreach ($props as $prop) {
+                       $this->compileProp($prop, $block, $out);
+               }
+
+               $this->importDir = $oldImport;
+               $this->sourceParser = $oldSourceParser;
+       }
+
+       /**
+        * Recursively compiles a block.
+        *
+        * A block is analogous to a CSS block in most cases. A single LESS document
+        * is encapsulated in a block when parsed, but it does not have parent tags
+        * so all of it's children appear on the root level when compiled.
+        *
+        * Blocks are made up of props and children.
+        *
+        * Props are property instructions, array tuples which describe an action
+        * to be taken, eg. write a property, set a variable, mixin a block.
+        *
+        * The children of a block are just all the blocks that are defined within.
+        * This is used to look up mixins when performing a mixin.
+        *
+        * Compiling the block involves pushing a fresh environment on the stack,
+        * and iterating through the props, compiling each one.
+        *
+        * See lessc::compileProp()
+        *
+        */
+       protected function compileBlock($block) {
+               switch ($block->type) {
+               case "root":
+                       $this->compileRoot($block);
+                       break;
+               case null:
+                       $this->compileCSSBlock($block);
+                       break;
+               case "media":
+                       $this->compileMedia($block);
+                       break;
+               case "directive":
+                       $name = "@" . $block->name;
+                       if (!empty($block->value)) {
+                               $name .= " " . $this->compileValue($this->reduce($block->value));
+                       }
+
+                       $this->compileNestedBlock($block, array($name));
+                       break;
+               default:
+                       $this->throwError("unknown block type: $block->type\n");
+               }
+       }
+
+       protected function compileCSSBlock($block) {
+               $env = $this->pushEnv();
+
+               $selectors = $this->compileSelectors($block->tags);
+               $env->selectors = $this->multiplySelectors($selectors);
+               $out = $this->makeOutputBlock(null, $env->selectors);
+
+               $this->scope->children[] = $out;
+               $this->compileProps($block, $out);
+
+               $block->scope = $env; // mixins carry scope with them!
+               $this->popEnv();
+       }
+
+       protected function compileMedia($media) {
+               $env = $this->pushEnv($media);
+               $parentScope = $this->mediaParent($this->scope);
+
+               $query = $this->compileMediaQuery($this->multiplyMedia($env));
+
+               $this->scope = $this->makeOutputBlock($media->type, array($query));
+               $parentScope->children[] = $this->scope;
+
+               $this->compileProps($media, $this->scope);
+
+               if (count($this->scope->lines) > 0) {
+                       $orphanSelelectors = $this->findClosestSelectors();
+                       if (!is_null($orphanSelelectors)) {
+                               $orphan = $this->makeOutputBlock(null, $orphanSelelectors);
+                               $orphan->lines = $this->scope->lines;
+                               array_unshift($this->scope->children, $orphan);
+                               $this->scope->lines = array();
+                       }
+               }
+
+               $this->scope = $this->scope->parent;
+               $this->popEnv();
+       }
+
+       protected function mediaParent($scope) {
+               while (!empty($scope->parent)) {
+                       if (!empty($scope->type) && $scope->type != "media") {
+                               break;
+                       }
+                       $scope = $scope->parent;
+               }
+
+               return $scope;
+       }
+
+       protected function compileNestedBlock($block, $selectors) {
+               $this->pushEnv($block);
+               $this->scope = $this->makeOutputBlock($block->type, $selectors);
+               $this->scope->parent->children[] = $this->scope;
+
+               $this->compileProps($block, $this->scope);
+
+               $this->scope = $this->scope->parent;
+               $this->popEnv();
+       }
+
+       protected function compileRoot($root) {
+               $this->pushEnv();
+               $this->scope = $this->makeOutputBlock($root->type);
+               $this->compileProps($root, $this->scope);
+               $this->popEnv();
+       }
+
+       protected function compileProps($block, $out) {
+               foreach ($this->sortProps($block->props) as $prop) {
+                       $this->compileProp($prop, $block, $out);
+               }
+               $out->lines = $this->deduplicate($out->lines);
+       }
+
+       /**
+        * Deduplicate lines in a block. Comments are not deduplicated. If a
+        * duplicate rule is detected, the comments immediately preceding each
+        * occurence are consolidated.
+        */
+       protected function deduplicate($lines) {
+               $unique = array();
+               $comments = array();
+
+               foreach($lines as $line) {
+                       if (strpos($line, '/*') === 0) {
+                               $comments[] = $line;
+                               continue;
+                       }
+                       if (!in_array($line, $unique)) {
+                               $unique[] = $line;
+                       }
+                       array_splice($unique, array_search($line, $unique), 0, $comments);
+                       $comments = array();
+               }
+               return array_merge($unique, $comments);
+       }
+
+       protected function sortProps($props, $split = false) {
+               $vars = array();
+               $imports = array();
+               $other = array();
+               $stack = array();
+
+               foreach ($props as $prop) {
+                       switch ($prop[0]) {
+                       case "comment":
+                               $stack[] = $prop;
+                               break;
+                       case "assign":
+                               $stack[] = $prop;
+                               if (isset($prop[1][0]) && $prop[1][0] == $this->vPrefix) {
+                                       $vars = array_merge($vars, $stack);
+                               } else {
+                                       $other = array_merge($other, $stack);
+                               }
+                               $stack = array();
+                               break;
+                       case "import":
+                               $id = self::$nextImportId++;
+                               $prop[] = $id;
+                               $stack[] = $prop;
+                               $imports = array_merge($imports, $stack);
+                               $other[] = array("import_mixin", $id);
+                               $stack = array();
+                               break;
+                       default:
+                               $stack[] = $prop;
+                               $other = array_merge($other, $stack);
+                               $stack = array();
+                               break;
+                       }
+               }
+               $other = array_merge($other, $stack);
+
+               if ($split) {
+                       return array(array_merge($vars, $imports), $other);
+               } else {
+                       return array_merge($vars, $imports, $other);
+               }
+       }
+
+       protected function compileMediaQuery($queries) {
+               $compiledQueries = array();
+               foreach ($queries as $query) {
+                       $parts = array();
+                       foreach ($query as $q) {
+                               switch ($q[0]) {
+                               case "mediaType":
+                                       $parts[] = implode(" ", array_slice($q, 1));
+                                       break;
+                               case "mediaExp":
+                                       if (isset($q[2])) {
+                                               $parts[] = "($q[1]: " .
+                                                       $this->compileValue($this->reduce($q[2])) . ")";
+                                       } else {
+                                               $parts[] = "($q[1])";
+                                       }
+                                       break;
+                               case "variable":
+                                       $parts[] = $this->compileValue($this->reduce($q));
+                               break;
+                               }
+                       }
+
+                       if (count($parts) > 0) {
+                               $compiledQueries[] =  implode(" and ", $parts);
+                       }
+               }
+
+               $out = "@media";
+               if (!empty($parts)) {
+                       $out .= " " .
+                               implode($this->formatter->selectorSeparator, $compiledQueries);
+               }
+               return $out;
+       }
+
+       protected function multiplyMedia($env, $childQueries = null) {
+               if (is_null($env) ||
+                       !empty($env->block->type) && $env->block->type != "media")
+               {
+                       return $childQueries;
+               }
+
+               // plain old block, skip
+               if (empty($env->block->type)) {
+                       return $this->multiplyMedia($env->parent, $childQueries);
+               }
+
+               $out = array();
+               $queries = $env->block->queries;
+               if (is_null($childQueries)) {
+                       $out = $queries;
+               } else {
+                       foreach ($queries as $parent) {
+                               foreach ($childQueries as $child) {
+                                       $out[] = array_merge($parent, $child);
+                               }
+                       }
+               }
+
+               return $this->multiplyMedia($env->parent, $out);
+       }
+
+       protected function expandParentSelectors(&$tag, $replace) {
+               $parts = explode("$&$", $tag);
+               $count = 0;
+               foreach ($parts as &$part) {
+                       $part = str_replace($this->parentSelector, $replace, $part, $c);
+                       $count += $c;
+               }
+               $tag = implode($this->parentSelector, $parts);
+               return $count;
+       }
+
+       protected function findClosestSelectors() {
+               $env = $this->env;
+               $selectors = null;
+               while ($env !== null) {
+                       if (isset($env->selectors)) {
+                               $selectors = $env->selectors;
+                               break;
+                       }
+                       $env = $env->parent;
+               }
+
+               return $selectors;
+       }
+
+
+       // multiply $selectors against the nearest selectors in env
+       protected function multiplySelectors($selectors) {
+               // find parent selectors
+
+               $parentSelectors = $this->findClosestSelectors();
+               if (is_null($parentSelectors)) {
+                       // kill parent reference in top level selector
+                       foreach ($selectors as &$s) {
+                               $this->expandParentSelectors($s, "");
+                       }
+
+                       return $selectors;
+               }
+
+               $out = array();
+               foreach ($parentSelectors as $parent) {
+                       foreach ($selectors as $child) {
+                               $count = $this->expandParentSelectors($child, $parent);
+
+                               // don't prepend the parent tag if & was used
+                               if ($count > 0) {
+                                       $out[] = trim($child);
+                               } else {
+                                       $out[] = trim($parent . ' ' . $child);
+                               }
+                       }
+               }
+
+               return $out;
+       }
+
+       // reduces selector expressions
+       protected function compileSelectors($selectors) {
+               $out = array();
+
+               foreach ($selectors as $s) {
+                       if (is_array($s)) {
+                               list(, $value) = $s;
+                               $out[] = trim($this->compileValue($this->reduce($value)));
+                       } else {
+                               $out[] = $s;
+                       }
+               }
+
+               return $out;
+       }
+
+       protected function eq($left, $right) {
+               return $left == $right;
+       }
+
+       protected function patternMatch($block, $orderedArgs, $keywordArgs) {
+               // match the guards if it has them
+               // any one of the groups must have all its guards pass for a match
+               if (!empty($block->guards)) {
+                       $groupPassed = false;
+                       foreach ($block->guards as $guardGroup) {
+                               foreach ($guardGroup as $guard) {
+                                       $this->pushEnv();
+                                       $this->zipSetArgs($block->args, $orderedArgs, $keywordArgs);
+
+                                       $negate = false;
+                                       if ($guard[0] == "negate") {
+                                               $guard = $guard[1];
+                                               $negate = true;
+                                       }
+
+                                       $passed = $this->reduce($guard) == self::$TRUE;
+                                       if ($negate) $passed = !$passed;
+
+                                       $this->popEnv();
+
+                                       if ($passed) {
+                                               $groupPassed = true;
+                                       } else {
+                                               $groupPassed = false;
+                                               break;
+                                       }
+                               }
+
+                               if ($groupPassed) break;
+                       }
+
+                       if (!$groupPassed) {
+                               return false;
+                       }
+               }
+
+               if (empty($block->args)) {
+                       return $block->isVararg || empty($orderedArgs) && empty($keywordArgs);
+               }
+
+               $remainingArgs = $block->args;
+               if ($keywordArgs) {
+                       $remainingArgs = array();
+                       foreach ($block->args as $arg) {
+                               if ($arg[0] == "arg" && isset($keywordArgs[$arg[1]])) {
+                                       continue;
+                               }
+
+                               $remainingArgs[] = $arg;
+                       }
+               }
+
+               $i = -1; // no args
+               // try to match by arity or by argument literal
+               foreach ($remainingArgs as $i => $arg) {
+                       switch ($arg[0]) {
+                       case "lit":
+                               if (empty($orderedArgs[$i]) || !$this->eq($arg[1], $orderedArgs[$i])) {
+                                       return false;
+                               }
+                               break;
+                       case "arg":
+                               // no arg and no default value
+                               if (!isset($orderedArgs[$i]) && !isset($arg[2])) {
+                                       return false;
+                               }
+                               break;
+                       case "rest":
+                               $i--; // rest can be empty
+                               break 2;
+                       }
+               }
+
+               if ($block->isVararg) {
+                       return true; // not having enough is handled above
+               } else {
+                       $numMatched = $i + 1;
+                       // greater than becuase default values always match
+                       return $numMatched >= count($orderedArgs);
+               }
+       }
+
+       protected function patternMatchAll($blocks, $orderedArgs, $keywordArgs, $skip=array()) {
+               $matches = null;
+               foreach ($blocks as $block) {
+                       // skip seen blocks that don't have arguments
+                       if (isset($skip[$block->id]) && !isset($block->args)) {
+                               continue;
+                       }
+
+                       if ($this->patternMatch($block, $orderedArgs, $keywordArgs)) {
+                               $matches[] = $block;
+                       }
+               }
+
+               return $matches;
+       }
+
+       // attempt to find blocks matched by path and args
+       protected function findBlocks($searchIn, $path, $orderedArgs, $keywordArgs, $seen=array()) {
+               if ($searchIn == null) return null;
+               if (isset($seen[$searchIn->id])) return null;
+               $seen[$searchIn->id] = true;
+
+               $name = $path[0];
+
+               if (isset($searchIn->children[$name])) {
+                       $blocks = $searchIn->children[$name];
+                       if (count($path) == 1) {
+                               $matches = $this->patternMatchAll($blocks, $orderedArgs, $keywordArgs, $seen);
+                               if (!empty($matches)) {
+                                       // This will return all blocks that match in the closest
+                                       // scope that has any matching block, like lessjs
+                                       return $matches;
+                               }
+                       } else {
+                               $matches = array();
+                               foreach ($blocks as $subBlock) {
+                                       $subMatches = $this->findBlocks($subBlock,
+                                               array_slice($path, 1), $orderedArgs, $keywordArgs, $seen);
+
+                                       if (!is_null($subMatches)) {
+                                               foreach ($subMatches as $sm) {
+                                                       $matches[] = $sm;
+                                               }
+                                       }
+                               }
+
+                               return count($matches) > 0 ? $matches : null;
+                       }
+               }
+               if ($searchIn->parent === $searchIn) return null;
+               return $this->findBlocks($searchIn->parent, $path, $orderedArgs, $keywordArgs, $seen);
+       }
+
+       // sets all argument names in $args to either the default value
+       // or the one passed in through $values
+       protected function zipSetArgs($args, $orderedValues, $keywordValues) {
+               $assignedValues = array();
+
+               $i = 0;
+               foreach ($args as  $a) {
+                       if ($a[0] == "arg") {
+                               if (isset($keywordValues[$a[1]])) {
+                                       // has keyword arg
+                                       $value = $keywordValues[$a[1]];
+                               } elseif (isset($orderedValues[$i])) {
+                                       // has ordered arg
+                                       $value = $orderedValues[$i];
+                                       $i++;
+                               } elseif (isset($a[2])) {
+                                       // has default value
+                                       $value = $a[2];
+                               } else {
+                                       $this->throwError("Failed to assign arg " . $a[1]);
+                                       $value = null; // :(
+                               }
+
+                               $value = $this->reduce($value);
+                               $this->set($a[1], $value);
+                               $assignedValues[] = $value;
+                       } else {
+                               // a lit
+                               $i++;
+                       }
+               }
+
+               // check for a rest
+               $last = end($args);
+               if ($last[0] == "rest") {
+                       $rest = array_slice($orderedValues, count($args) - 1);
+                       $this->set($last[1], $this->reduce(array("list", " ", $rest)));
+               }
+
+               // wow is this the only true use of PHP's + operator for arrays?
+               $this->env->arguments = $assignedValues + $orderedValues;
+       }
+
+       // compile a prop and update $lines or $blocks appropriately
+       protected function compileProp($prop, $block, $out) {
+               // set error position context
+               $this->sourceLoc = isset($prop[-1]) ? $prop[-1] : -1;
+
+               switch ($prop[0]) {
+               case 'assign':
+                       list(, $name, $value) = $prop;
+                       if ($name[0] == $this->vPrefix) {
+                               $this->set($name, $value);
+                       } else {
+                               $out->lines[] = $this->formatter->property($name,
+                                               $this->compileValue($this->reduce($value)));
+                       }
+                       break;
+               case 'block':
+                       list(, $child) = $prop;
+                       $this->compileBlock($child);
+                       break;
+               case 'mixin':
+                       list(, $path, $args, $suffix) = $prop;
+
+                       $orderedArgs = array();
+                       $keywordArgs = array();
+                       foreach ((array)$args as $arg) {
+                               $argval = null;
+                               switch ($arg[0]) {
+                               case "arg":
+                                       if (!isset($arg[2])) {
+                                               $orderedArgs[] = $this->reduce(array("variable", $arg[1]));
+                                       } else {
+                                               $keywordArgs[$arg[1]] = $this->reduce($arg[2]);
+                                       }
+                                       break;
+
+                               case "lit":
+                                       $orderedArgs[] = $this->reduce($arg[1]);
+                                       break;
+                               default:
+                                       $this->throwError("Unknown arg type: " . $arg[0]);
+                               }
+                       }
+
+                       $mixins = $this->findBlocks($block, $path, $orderedArgs, $keywordArgs);
+
+                       if ($mixins === null) {
+                               $this->throwError("{$prop[1][0]} is undefined");
+                       }
+
+                       foreach ($mixins as $mixin) {
+                               if ($mixin === $block && !$orderedArgs) {
+                                       continue;
+                               }
+
+                               $haveScope = false;
+                               if (isset($mixin->parent->scope)) {
+                                       $haveScope = true;
+                                       $mixinParentEnv = $this->pushEnv();
+                                       $mixinParentEnv->storeParent = $mixin->parent->scope;
+                               }
+
+                               $haveArgs = false;
+                               if (isset($mixin->args)) {
+                                       $haveArgs = true;
+                                       $this->pushEnv();
+                                       $this->zipSetArgs($mixin->args, $orderedArgs, $keywordArgs);
+                               }
+
+                               $oldParent = $mixin->parent;
+                               if ($mixin != $block) $mixin->parent = $block;
+
+                               foreach ($this->sortProps($mixin->props) as $subProp) {
+                                       if ($suffix !== null &&
+                                               $subProp[0] == "assign" &&
+                                               is_string($subProp[1]) &&
+                                               $subProp[1]{0} != $this->vPrefix)
+                                       {
+                                               $subProp[2] = array(
+                                                       'list', ' ',
+                                                       array($subProp[2], array('keyword', $suffix))
+                                               );
+                                       }
+
+                                       $this->compileProp($subProp, $mixin, $out);
+                               }
+
+                               $mixin->parent = $oldParent;
+
+                               if ($haveArgs) $this->popEnv();
+                               if ($haveScope) $this->popEnv();
+                       }
+
+                       break;
+               case 'raw':
+                       $out->lines[] = $prop[1];
+                       break;
+               case "directive":
+                       list(, $name, $value) = $prop;
+                       $out->lines[] = "@$name " . $this->compileValue($this->reduce($value)).';';
+                       break;
+               case "comment":
+                       $out->lines[] = $prop[1];
+                       break;
+               case "import";
+                       list(, $importPath, $importId) = $prop;
+                       $importPath = $this->reduce($importPath);
+
+                       if (!isset($this->env->imports)) {
+                               $this->env->imports = array();
+                       }
+
+                       $result = $this->tryImport($importPath, $block, $out);
+
+                       $this->env->imports[$importId] = $result === false ?
+                               array(false, "@import " . $this->compileValue($importPath).";") :
+                               $result;
+
+                       break;
+               case "import_mixin":
+                       list(,$importId) = $prop;
+                       $import = $this->env->imports[$importId];
+                       if ($import[0] === false) {
+                               if (isset($import[1])) {
+                                       $out->lines[] = $import[1];
+                               }
+                       } else {
+                               list(, $bottom, $parser, $importDir) = $import;
+                               $this->compileImportedProps($bottom, $block, $out, $parser, $importDir);
+                       }
+
+                       break;
+               default:
+                       $this->throwError("unknown op: {$prop[0]}\n");
+               }
+       }
+
+
+       /**
+        * Compiles a primitive value into a CSS property value.
+        *
+        * Values in lessphp are typed by being wrapped in arrays, their format is
+        * typically:
+        *
+        *     array(type, contents [, additional_contents]*)
+        *
+        * The input is expected to be reduced. This function will not work on
+        * things like expressions and variables.
+        */
+       protected function compileValue($value) {
+               switch ($value[0]) {
+               case 'list':
+                       // [1] - delimiter
+                       // [2] - array of values
+                       return implode($value[1], array_map(array($this, 'compileValue'), $value[2]));
+               case 'raw_color':
+                       if (!empty($this->formatter->compressColors)) {
+                               return $this->compileValue($this->coerceColor($value));
+                       }
+                       return $value[1];
+               case 'keyword':
+                       // [1] - the keyword
+                       return $value[1];
+               case 'number':
+                       list(, $num, $unit) = $value;
+                       // [1] - the number
+                       // [2] - the unit
+                       if ($this->numberPrecision !== null) {
+                               $num = round($num, $this->numberPrecision);
+                       }
+                       return $num . $unit;
+               case 'string':
+                       // [1] - contents of string (includes quotes)
+                       list(, $delim, $content) = $value;
+                       foreach ($content as &$part) {
+                               if (is_array($part)) {
+                                       $part = $this->compileValue($part);
+                               }
+                       }
+                       return $delim . implode($content) . $delim;
+               case 'color':
+                       // [1] - red component (either number or a %)
+                       // [2] - green component
+                       // [3] - blue component
+                       // [4] - optional alpha component
+                       list(, $r, $g, $b) = $value;
+                       $r = round($r);
+                       $g = round($g);
+                       $b = round($b);
+
+                       if (count($value) == 5 && $value[4] != 1) { // rgba
+                               return 'rgba('.$r.','.$g.','.$b.','.$value[4].')';
+                       }
+
+                       $h = sprintf("#%02x%02x%02x", $r, $g, $b);
+
+                       if (!empty($this->formatter->compressColors)) {
+                               // Converting hex color to short notation (e.g. #003399 to #039)
+                               if ($h[1] === $h[2] && $h[3] === $h[4] && $h[5] === $h[6]) {
+                                       $h = '#' . $h[1] . $h[3] . $h[5];
+                               }
+                       }
+
+                       return $h;
+
+               case 'function':
+                       list(, $name, $args) = $value;
+                       return $name.'('.$this->compileValue($args).')';
+               default: // assumed to be unit
+                       $this->throwError("unknown value type: $value[0]");
+               }
+       }
+
+       protected function lib_pow($args) {
+               list($base, $exp) = $this->assertArgs($args, 2, "pow");
+               return pow($this->assertNumber($base), $this->assertNumber($exp));
+       }
+
+       protected function lib_pi() {
+               return pi();
+       }
+
+       protected function lib_mod($args) {
+               list($a, $b) = $this->assertArgs($args, 2, "mod");
+               return $this->assertNumber($a) % $this->assertNumber($b);
+       }
+
+       protected function lib_tan($num) {
+               return tan($this->assertNumber($num));
+       }
+
+       protected function lib_sin($num) {
+               return sin($this->assertNumber($num));
+       }
+
+       protected function lib_cos($num) {
+               return cos($this->assertNumber($num));
+       }
+
+       protected function lib_atan($num) {
+               $num = atan($this->assertNumber($num));
+               return array("number", $num, "rad");
+       }
+
+       protected function lib_asin($num) {
+               $num = asin($this->assertNumber($num));
+               return array("number", $num, "rad");
+       }
+
+       protected function lib_acos($num) {
+               $num = acos($this->assertNumber($num));
+               return array("number", $num, "rad");
+       }
+
+       protected function lib_sqrt($num) {
+               return sqrt($this->assertNumber($num));
+       }
+
+       protected function lib_extract($value) {
+               list($list, $idx) = $this->assertArgs($value, 2, "extract");
+               $idx = $this->assertNumber($idx);
+               // 1 indexed
+               if ($list[0] == "list" && isset($list[2][$idx - 1])) {
+                       return $list[2][$idx - 1];
+               }
+       }
+
+       protected function lib_isnumber($value) {
+               return $this->toBool($value[0] == "number");
+       }
+
+       protected function lib_isstring($value) {
+               return $this->toBool($value[0] == "string");
+       }
+
+       protected function lib_iscolor($value) {
+               return $this->toBool($this->coerceColor($value));
+       }
+
+       protected function lib_iskeyword($value) {
+               return $this->toBool($value[0] == "keyword");
+       }
+
+       protected function lib_ispixel($value) {
+               return $this->toBool($value[0] == "number" && $value[2] == "px");
+       }
+
+       protected function lib_ispercentage($value) {
+               return $this->toBool($value[0] == "number" && $value[2] == "%");
+       }
+
+       protected function lib_isem($value) {
+               return $this->toBool($value[0] == "number" && $value[2] == "em");
+       }
+
+       protected function lib_isrem($value) {
+               return $this->toBool($value[0] == "number" && $value[2] == "rem");
+       }
+
+       protected function lib_rgbahex($color) {
+               $color = $this->coerceColor($color);
+               if (is_null($color))
+                       $this->throwError("color expected for rgbahex");
+
+               return sprintf("#%02x%02x%02x%02x",
+                       isset($color[4]) ? $color[4]*255 : 255,
+                       $color[1],$color[2], $color[3]);
+       }
+
+       protected function lib_argb($color){
+               return $this->lib_rgbahex($color);
+       }
+
+       // utility func to unquote a string
+       protected function lib_e($arg) {
+               switch ($arg[0]) {
+                       case "list":
+                               $items = $arg[2];
+                               if (isset($items[0])) {
+                                       return $this->lib_e($items[0]);
+                               }
+                               $this->throwError("unrecognised input");
+                       case "string":
+                               $arg[1] = "";
+                               return $arg;
+                       case "keyword":
+                               return $arg;
+                       default:
+                               return array("keyword", $this->compileValue($arg));
+               }
+       }
+
+       protected function lib__sprintf($args) {
+               if ($args[0] != "list") return $args;
+               $values = $args[2];
+               $string = array_shift($values);
+               $template = $this->compileValue($this->lib_e($string));
+
+               $i = 0;
+               if (preg_match_all('/%[dsa]/', $template, $m)) {
+                       foreach ($m[0] as $match) {
+                               $val = isset($values[$i]) ?
+                                       $this->reduce($values[$i]) : array('keyword', '');
+
+                               // lessjs compat, renders fully expanded color, not raw color
+                               if ($color = $this->coerceColor($val)) {
+                                       $val = $color;
+                               }
+
+                               $i++;
+                               $rep = $this->compileValue($this->lib_e($val));
+                               $template = preg_replace('/'.self::preg_quote($match).'/',
+                                       $rep, $template, 1);
+                       }
+               }
+
+               $d = $string[0] == "string" ? $string[1] : '"';
+               return array("string", $d, array($template));
+       }
+
+       protected function lib_floor($arg) {
+               $value = $this->assertNumber($arg);
+               return array("number", floor($value), $arg[2]);
+       }
+
+       protected function lib_ceil($arg) {
+               $value = $this->assertNumber($arg);
+               return array("number", ceil($value), $arg[2]);
+       }
+
+       protected function lib_round($arg) {
+               if($arg[0] != "list") {
+                       $value = $this->assertNumber($arg);
+                       return array("number", round($value), $arg[2]);
+               } else {
+                       $value = $this->assertNumber($arg[2][0]);
+                       $precision = $this->assertNumber($arg[2][1]);
+                       return array("number", round($value, $precision), $arg[2][0][2]);
+               }
+       }
+
+       protected function lib_unit($arg) {
+               if ($arg[0] == "list") {
+                       list($number, $newUnit) = $arg[2];
+                       return array("number", $this->assertNumber($number),
+                               $this->compileValue($this->lib_e($newUnit)));
+               } else {
+                       return array("number", $this->assertNumber($arg), "");
+               }
+       }
+
+       /**
+        * Helper function to get arguments for color manipulation functions.
+        * takes a list that contains a color like thing and a percentage
+        */
+       public function colorArgs($args) {
+               if ($args[0] != 'list' || count($args[2]) < 2) {
+                       return array(array('color', 0, 0, 0), 0);
+               }
+               list($color, $delta) = $args[2];
+               $color = $this->assertColor($color);
+               $delta = floatval($delta[1]);
+
+               return array($color, $delta);
+       }
+
+       protected function lib_darken($args) {
+               list($color, $delta) = $this->colorArgs($args);
+
+               $hsl = $this->toHSL($color);
+               $hsl[3] = $this->clamp($hsl[3] - $delta, 100);
+               return $this->toRGB($hsl);
+       }
+
+       protected function lib_lighten($args) {
+               list($color, $delta) = $this->colorArgs($args);
+
+               $hsl = $this->toHSL($color);
+               $hsl[3] = $this->clamp($hsl[3] + $delta, 100);
+               return $this->toRGB($hsl);
+       }
+
+       protected function lib_saturate($args) {
+               list($color, $delta) = $this->colorArgs($args);
+
+               $hsl = $this->toHSL($color);
+               $hsl[2] = $this->clamp($hsl[2] + $delta, 100);
+               return $this->toRGB($hsl);
+       }
+
+       protected function lib_desaturate($args) {
+               list($color, $delta) = $this->colorArgs($args);
+
+               $hsl = $this->toHSL($color);
+               $hsl[2] = $this->clamp($hsl[2] - $delta, 100);
+               return $this->toRGB($hsl);
+       }
+
+       protected function lib_spin($args) {
+               list($color, $delta) = $this->colorArgs($args);
+
+               $hsl = $this->toHSL($color);
+
+               $hsl[1] = $hsl[1] + $delta % 360;
+               if ($hsl[1] < 0) $hsl[1] += 360;
+
+               return $this->toRGB($hsl);
+       }
+
+       protected function lib_fadeout($args) {
+               list($color, $delta) = $this->colorArgs($args);
+               $color[4] = $this->clamp((isset($color[4]) ? $color[4] : 1) - $delta/100);
+               return $color;
+       }
+
+       protected function lib_fadein($args) {
+               list($color, $delta) = $this->colorArgs($args);
+               $color[4] = $this->clamp((isset($color[4]) ? $color[4] : 1) + $delta/100);
+               return $color;
+       }
+
+       protected function lib_hue($color) {
+               $hsl = $this->toHSL($this->assertColor($color));
+               return round($hsl[1]);
+       }
+
+       protected function lib_saturation($color) {
+               $hsl = $this->toHSL($this->assertColor($color));
+               return round($hsl[2]);
+       }
+
+       protected function lib_lightness($color) {
+               $hsl = $this->toHSL($this->assertColor($color));
+               return round($hsl[3]);
+       }
+
+       // get the alpha of a color
+       // defaults to 1 for non-colors or colors without an alpha
+       protected function lib_alpha($value) {
+               if (!is_null($color = $this->coerceColor($value))) {
+                       return isset($color[4]) ? $color[4] : 1;
+               }
+       }
+
+       // set the alpha of the color
+       protected function lib_fade($args) {
+               list($color, $alpha) = $this->colorArgs($args);
+               $color[4] = $this->clamp($alpha / 100.0);
+               return $color;
+       }
+
+       protected function lib_percentage($arg) {
+               $num = $this->assertNumber($arg);
+               return array("number", $num*100, "%");
+       }
+
+       // mixes two colors by weight
+       // mix(@color1, @color2, [@weight: 50%]);
+       // http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html#mix-instance_method
+       protected function lib_mix($args) {
+               if ($args[0] != "list" || count($args[2]) < 2)
+                       $this->throwError("mix expects (color1, color2, weight)");
+
+               list($first, $second) = $args[2];
+               $first = $this->assertColor($first);
+               $second = $this->assertColor($second);
+
+               $first_a = $this->lib_alpha($first);
+               $second_a = $this->lib_alpha($second);
+
+               if (isset($args[2][2])) {
+                       $weight = $args[2][2][1] / 100.0;
+               } else {
+                       $weight = 0.5;
+               }
+
+               $w = $weight * 2 - 1;
+               $a = $first_a - $second_a;
+
+               $w1 = (($w * $a == -1 ? $w : ($w + $a)/(1 + $w * $a)) + 1) / 2.0;
+               $w2 = 1.0 - $w1;
+
+               $new = array('color',
+                       $w1 * $first[1] + $w2 * $second[1],
+                       $w1 * $first[2] + $w2 * $second[2],
+                       $w1 * $first[3] + $w2 * $second[3],
+               );
+
+               if ($first_a != 1.0 || $second_a != 1.0) {
+                       $new[] = $first_a * $weight + $second_a * ($weight - 1);
+               }
+
+               return $this->fixColor($new);
+       }
+
+       protected function lib_contrast($args) {
+               if ($args[0] != 'list' || count($args[2]) < 3) {
+                       return array(array('color', 0, 0, 0), 0);
+               }
+
+               list($inputColor, $darkColor, $lightColor) = $args[2];
+
+               $inputColor = $this->assertColor($inputColor);
+               $darkColor = $this->assertColor($darkColor);
+               $lightColor = $this->assertColor($lightColor);
+               $hsl = $this->toHSL($inputColor);
+
+               if ($hsl[3] > 50) {
+                       return $darkColor;
+               }
+
+               return $lightColor;
+       }
+
+       public function assertColor($value, $error = "expected color value") {
+               $color = $this->coerceColor($value);
+               if (is_null($color)) $this->throwError($error);
+               return $color;
+       }
+
+       public function assertNumber($value, $error = "expecting number") {
+               if ($value[0] == "number") return $value[1];
+               $this->throwError($error);
+       }
+
+       public function assertArgs($value, $expectedArgs, $name="") {
+               if ($expectedArgs == 1) {
+                       return $value;
+               } else {
+                       if ($value[0] !== "list" || $value[1] != ",") $this->throwError("expecting list");
+                       $values = $value[2];
+                       $numValues = count($values);
+                       if ($expectedArgs != $numValues) {
+                               if ($name) {
+                                       $name = $name . ": ";
+                               }
+
+                               $this->throwError("${name}expecting $expectedArgs arguments, got $numValues");
+                       }
+
+                       return $values;
+               }
+       }
+
+       protected function toHSL($color) {
+               if ($color[0] == 'hsl') return $color;
+
+               $r = $color[1] / 255;
+               $g = $color[2] / 255;
+               $b = $color[3] / 255;
+
+               $min = min($r, $g, $b);
+               $max = max($r, $g, $b);
+
+               $L = ($min + $max) / 2;
+               if ($min == $max) {
+                       $S = $H = 0;
+               } else {
+                       if ($L < 0.5)
+                               $S = ($max - $min)/($max + $min);
+                       else
+                               $S = ($max - $min)/(2.0 - $max - $min);
+
+                       if ($r == $max) $H = ($g - $b)/($max - $min);
+                       elseif ($g == $max) $H = 2.0 + ($b - $r)/($max - $min);
+                       elseif ($b == $max) $H = 4.0 + ($r - $g)/($max - $min);
+
+               }
+
+               $out = array('hsl',
+                       ($H < 0 ? $H + 6 : $H)*60,
+                       $S*100,
+                       $L*100,
+               );
+
+               if (count($color) > 4) $out[] = $color[4]; // copy alpha
+               return $out;
+       }
+
+       protected function toRGB_helper($comp, $temp1, $temp2) {
+               if ($comp < 0) $comp += 1.0;
+               elseif ($comp > 1) $comp -= 1.0;
+
+               if (6 * $comp < 1) return $temp1 + ($temp2 - $temp1) * 6 * $comp;
+               if (2 * $comp < 1) return $temp2;
+               if (3 * $comp < 2) return $temp1 + ($temp2 - $temp1)*((2/3) - $comp) * 6;
+
+               return $temp1;
+       }
+
+       /**
+        * Converts a hsl array into a color value in rgb.
+        * Expects H to be in range of 0 to 360, S and L in 0 to 100
+        */
+       protected function toRGB($color) {
+               if ($color[0] == 'color') return $color;
+
+               $H = $color[1] / 360;
+               $S = $color[2] / 100;
+               $L = $color[3] / 100;
+
+               if ($S == 0) {
+                       $r = $g = $b = $L;
+               } else {
+                       $temp2 = $L < 0.5 ?
+                               $L*(1.0 + $S) :
+                               $L + $S - $L * $S;
+
+                       $temp1 = 2.0 * $L - $temp2;
+
+                       $r = $this->toRGB_helper($H + 1/3, $temp1, $temp2);
+                       $g = $this->toRGB_helper($H, $temp1, $temp2);
+                       $b = $this->toRGB_helper($H - 1/3, $temp1, $temp2);
+               }
+
+               // $out = array('color', round($r*255), round($g*255), round($b*255));
+               $out = array('color', $r*255, $g*255, $b*255);
+               if (count($color) > 4) $out[] = $color[4]; // copy alpha
+               return $out;
+       }
+
+       protected function clamp($v, $max = 1, $min = 0) {
+               return min($max, max($min, $v));
+       }
+
+       /**
+        * Convert the rgb, rgba, hsl color literals of function type
+        * as returned by the parser into values of color type.
+        */
+       protected function funcToColor($func) {
+               $fname = $func[1];
+               if ($func[2][0] != 'list') return false; // need a list of arguments
+               $rawComponents = $func[2][2];
+
+               if ($fname == 'hsl' || $fname == 'hsla') {
+                       $hsl = array('hsl');
+                       $i = 0;
+                       foreach ($rawComponents as $c) {
+                               $val = $this->reduce($c);
+                               $val = isset($val[1]) ? floatval($val[1]) : 0;
+
+                               if ($i == 0) $clamp = 360;
+                               elseif ($i < 3) $clamp = 100;
+                               else $clamp = 1;
+
+                               $hsl[] = $this->clamp($val, $clamp);
+                               $i++;
+                       }
+
+                       while (count($hsl) < 4) $hsl[] = 0;
+                       return $this->toRGB($hsl);
+
+               } elseif ($fname == 'rgb' || $fname == 'rgba') {
+                       $components = array();
+                       $i = 1;
+                       foreach ($rawComponents as $c) {
+                               $c = $this->reduce($c);
+                               if ($i < 4) {
+                                       if ($c[0] == "number" && $c[2] == "%") {
+                                               $components[] = 255 * ($c[1] / 100);
+                                       } else {
+                                               $components[] = floatval($c[1]);
+                                       }
+                               } elseif ($i == 4) {
+                                       if ($c[0] == "number" && $c[2] == "%") {
+                                               $components[] = 1.0 * ($c[1] / 100);
+                                       } else {
+                                               $components[] = floatval($c[1]);
+                                       }
+                               } else break;
+
+                               $i++;
+                       }
+                       while (count($components) < 3) $components[] = 0;
+                       array_unshift($components, 'color');
+                       return $this->fixColor($components);
+               }
+
+               return false;
+       }
+
+       protected function reduce($value, $forExpression = false) {
+               switch ($value[0]) {
+               case "interpolate":
+                       $reduced = $this->reduce($value[1]);
+                       $var = $this->compileValue($reduced);
+                       $res = $this->reduce(array("variable", $this->vPrefix . $var));
+
+                       if ($res[0] == "raw_color") {
+                               $res = $this->coerceColor($res);
+                       }
+
+                       if (empty($value[2])) $res = $this->lib_e($res);
+
+                       return $res;
+               case "variable":
+                       $key = $value[1];
+                       if (is_array($key)) {
+                               $key = $this->reduce($key);
+                               $key = $this->vPrefix . $this->compileValue($this->lib_e($key));
+                       }
+
+                       $seen =& $this->env->seenNames;
+
+                       if (!empty($seen[$key])) {
+                               $this->throwError("infinite loop detected: $key");
+                       }
+
+                       $seen[$key] = true;
+                       $out = $this->reduce($this->get($key));
+                       $seen[$key] = false;
+                       return $out;
+               case "list":
+                       foreach ($value[2] as &$item) {
+                               $item = $this->reduce($item, $forExpression);
+                       }
+                       return $value;
+               case "expression":
+                       return $this->evaluate($value);
+               case "string":
+                       foreach ($value[2] as &$part) {
+                               if (is_array($part)) {
+                                       $strip = $part[0] == "variable";
+                                       $part = $this->reduce($part);
+                                       if ($strip) $part = $this->lib_e($part);
+                               }
+                       }
+                       return $value;
+               case "escape":
+                       list(,$inner) = $value;
+                       return $this->lib_e($this->reduce($inner));
+               case "function":
+                       $color = $this->funcToColor($value);
+                       if ($color) return $color;
+
+                       list(, $name, $args) = $value;
+                       if ($name == "%") $name = "_sprintf";
+                       $f = isset($this->libFunctions[$name]) ?
+                               $this->libFunctions[$name] : array($this, 'lib_'.$name);
+
+                       if (is_callable($f)) {
+                               if ($args[0] == 'list')
+                                       $args = self::compressList($args[2], $args[1]);
+
+                               $ret = call_user_func($f, $this->reduce($args, true), $this);
+
+                               if (is_null($ret)) {
+                                       return array("string", "", array(
+                                               $name, "(", $args, ")"
+                                       ));
+                               }
+
+                               // convert to a typed value if the result is a php primitive
+                               if (is_numeric($ret)) $ret = array('number', $ret, "");
+                               elseif (!is_array($ret)) $ret = array('keyword', $ret);
+
+                               return $ret;
+                       }
+
+                       // plain function, reduce args
+                       $value[2] = $this->reduce($value[2]);
+                       return $value;
+               case "unary":
+                       list(, $op, $exp) = $value;
+                       $exp = $this->reduce($exp);
+
+                       if ($exp[0] == "number") {
+                               switch ($op) {
+                               case "+":
+                                       return $exp;
+                               case "-":
+                                       $exp[1] *= -1;
+                                       return $exp;
+                               }
+                       }
+                       return array("string", "", array($op, $exp));
+               }
+
+               if ($forExpression) {
+                       switch ($value[0]) {
+                       case "keyword":
+                               if ($color = $this->coerceColor($value)) {
+                                       return $color;
+                               }
+                               break;
+                       case "raw_color":
+                               return $this->coerceColor($value);
+                       }
+               }
+
+               return $value;
+       }
+
+
+       // coerce a value for use in color operation
+       protected function coerceColor($value) {
+               switch($value[0]) {
+                       case 'color': return $value;
+                       case 'raw_color':
+                               $c = array("color", 0, 0, 0);
+                               $colorStr = substr($value[1], 1);
+                               $num = hexdec($colorStr);
+                               $width = strlen($colorStr) == 3 ? 16 : 256;
+
+                               for ($i = 3; $i > 0; $i--) { // 3 2 1
+                                       $t = $num % $width;
+                                       $num /= $width;
+
+                                       $c[$i] = $t * (256/$width) + $t * floor(16/$width);
+                               }
+
+                               return $c;
+                       case 'keyword':
+                               $name = $value[1];
+                               if (isset(self::$cssColors[$name])) {
+                                       $rgba = explode(',', self::$cssColors[$name]);
+
+                                       if(isset($rgba[3]))
+                                               return array('color', $rgba[0], $rgba[1], $rgba[2], $rgba[3]);
+
+                                       return array('color', $rgba[0], $rgba[1], $rgba[2]);
+                               }
+                               return null;
+               }
+       }
+
+       // make something string like into a string
+       protected function coerceString($value) {
+               switch ($value[0]) {
+               case "string":
+                       return $value;
+               case "keyword":
+                       return array("string", "", array($value[1]));
+               }
+               return null;
+       }
+
+       // turn list of length 1 into value type
+       protected function flattenList($value) {
+               if ($value[0] == "list" && count($value[2]) == 1) {
+                       return $this->flattenList($value[2][0]);
+               }
+               return $value;
+       }
+
+       public function toBool($a) {
+               if ($a) return self::$TRUE;
+               else return self::$FALSE;
+       }
+
+       // evaluate an expression
+       protected function evaluate($exp) {
+               list(, $op, $left, $right, $whiteBefore, $whiteAfter) = $exp;
+
+               $left = $this->reduce($left, true);
+               $right = $this->reduce($right, true);
+
+               if ($leftColor = $this->coerceColor($left)) {
+                       $left = $leftColor;
+               }
+
+               if ($rightColor = $this->coerceColor($right)) {
+                       $right = $rightColor;
+               }
+
+               $ltype = $left[0];
+               $rtype = $right[0];
+
+               // operators that work on all types
+               if ($op == "and") {
+                       return $this->toBool($left == self::$TRUE && $right == self::$TRUE);
+               }
+
+               if ($op == "=") {
+                       return $this->toBool($this->eq($left, $right) );
+               }
+
+               if ($op == "+" && !is_null($str = $this->stringConcatenate($left, $right))) {
+                       return $str;
+               }
+
+               // type based operators
+               $fname = "op_${ltype}_${rtype}";
+               if (is_callable(array($this, $fname))) {
+                       $out = $this->$fname($op, $left, $right);
+                       if (!is_null($out)) return $out;
+               }
+
+               // make the expression look it did before being parsed
+               $paddedOp = $op;
+               if ($whiteBefore) $paddedOp = " " . $paddedOp;
+               if ($whiteAfter) $paddedOp .= " ";
+
+               return array("string", "", array($left, $paddedOp, $right));
+       }
+
+       protected function stringConcatenate($left, $right) {
+               if ($strLeft = $this->coerceString($left)) {
+                       if ($right[0] == "string") {
+                               $right[1] = "";
+                       }
+                       $strLeft[2][] = $right;
+                       return $strLeft;
+               }
+
+               if ($strRight = $this->coerceString($right)) {
+                       array_unshift($strRight[2], $left);
+                       return $strRight;
+               }
+       }
+
+
+       // make sure a color's components don't go out of bounds
+       protected function fixColor($c) {
+               foreach (range(1, 3) as $i) {
+                       if ($c[$i] < 0) $c[$i] = 0;
+                       if ($c[$i] > 255) $c[$i] = 255;
+               }
+
+               return $c;
+       }
+
+       protected function op_number_color($op, $lft, $rgt) {
+               if ($op == '+' || $op == '*') {
+                       return $this->op_color_number($op, $rgt, $lft);
+               }
+       }
+
+       protected function op_color_number($op, $lft, $rgt) {
+               if ($rgt[0] == '%') $rgt[1] /= 100;
+
+               return $this->op_color_color($op, $lft,
+                       array_fill(1, count($lft) - 1, $rgt[1]));
+       }
+
+       protected function op_color_color($op, $left, $right) {
+               $out = array('color');
+               $max = count($left) > count($right) ? count($left) : count($right);
+               foreach (range(1, $max - 1) as $i) {
+                       $lval = isset($left[$i]) ? $left[$i] : 0;
+                       $rval = isset($right[$i]) ? $right[$i] : 0;
+                       switch ($op) {
+                       case '+':
+                               $out[] = $lval + $rval;
+                               break;
+                       case '-':
+                               $out[] = $lval - $rval;
+                               break;
+                       case '*':
+                               $out[] = $lval * $rval;
+                               break;
+                       case '%':
+                               $out[] = $lval % $rval;
+                               break;
+                       case '/':
+                               if ($rval == 0) $this->throwError("evaluate error: can't divide by zero");
+                               $out[] = $lval / $rval;
+                               break;
+                       default:
+                               $this->throwError('evaluate error: color op number failed on op '.$op);
+                       }
+               }
+               return $this->fixColor($out);
+       }
+
+       function lib_red($color){
+               $color = $this->coerceColor($color);
+               if (is_null($color)) {
+                       $this->throwError('color expected for red()');
+               }
+
+               return $color[1];
+       }
+
+       function lib_green($color){
+               $color = $this->coerceColor($color);
+               if (is_null($color)) {
+                       $this->throwError('color expected for green()');
+               }
+
+               return $color[2];
+       }
+
+       function lib_blue($color){
+               $color = $this->coerceColor($color);
+               if (is_null($color)) {
+                       $this->throwError('color expected for blue()');
+               }
+
+               return $color[3];
+       }
+
+
+       // operator on two numbers
+       protected function op_number_number($op, $left, $right) {
+               $unit = empty($left[2]) ? $right[2] : $left[2];
+
+               $value = 0;
+               switch ($op) {
+               case '+':
+                       $value = $left[1] + $right[1];
+                       break;
+               case '*':
+                       $value = $left[1] * $right[1];
+                       break;
+               case '-':
+                       $value = $left[1] - $right[1];
+                       break;
+               case '%':
+                       $value = $left[1] % $right[1];
+                       break;
+               case '/':
+                       if ($right[1] == 0) $this->throwError('parse error: divide by zero');
+                       $value = $left[1] / $right[1];
+                       break;
+               case '<':
+                       return $this->toBool($left[1] < $right[1]);
+               case '>':
+                       return $this->toBool($left[1] > $right[1]);
+               case '>=':
+                       return $this->toBool($left[1] >= $right[1]);
+               case '=<':
+                       return $this->toBool($left[1] <= $right[1]);
+               default:
+                       $this->throwError('parse error: unknown number operator: '.$op);
+               }
+
+               return array("number", $value, $unit);
+       }
+
+
+       /* environment functions */
+
+       protected function makeOutputBlock($type, $selectors = null) {
+               $b = new stdclass;
+               $b->lines = array();
+               $b->children = array();
+               $b->selectors = $selectors;
+               $b->type = $type;
+               $b->parent = $this->scope;
+               return $b;
+       }
+
+       // the state of execution
+       protected function pushEnv($block = null) {
+               $e = new stdclass;
+               $e->parent = $this->env;
+               $e->store = array();
+               $e->block = $block;
+
+               $this->env = $e;
+               return $e;
+       }
+
+       // pop something off the stack
+       protected function popEnv() {
+               $old = $this->env;
+               $this->env = $this->env->parent;
+               return $old;
+       }
+
+       // set something in the current env
+       protected function set($name, $value) {
+               $this->env->store[$name] = $value;
+       }
+
+
+       // get the highest occurrence entry for a name
+       protected function get($name) {
+               $current = $this->env;
+
+               $isArguments = $name == $this->vPrefix . 'arguments';
+               while ($current) {
+                       if ($isArguments && isset($current->arguments)) {
+                               return array('list', ' ', $current->arguments);
+                       }
+
+                       if (isset($current->store[$name]))
+                               return $current->store[$name];
+                       else {
+                               $current = isset($current->storeParent) ?
+                                       $current->storeParent : $current->parent;
+                       }
+               }
+
+               $this->throwError("variable $name is undefined");
+       }
+
+       // inject array of unparsed strings into environment as variables
+       protected function injectVariables($args) {
+               $this->pushEnv();
+               $parser = new lessc_parser($this, __METHOD__);
+               foreach ($args as $name => $strValue) {
+                       if ($name{0} != '@') $name = '@'.$name;
+                       $parser->count = 0;
+                       $parser->buffer = (string)$strValue;
+                       if (!$parser->propertyValue($value)) {
+                               throw new Exception("failed to parse passed in variable $name: $strValue");
+                       }
+
+                       $this->set($name, $value);
+               }
+       }
+
+       /**
+        * Initialize any static state, can initialize parser for a file
+        * $opts isn't used yet
+        */
+       public function __construct($fname = null) {
+               if ($fname !== null) {
+                       // used for deprecated parse method
+                       $this->_parseFile = $fname;
+               }
+       }
+
+       public function compile($string, $name = null) {
+               $locale = setlocale(LC_NUMERIC, 0);
+               setlocale(LC_NUMERIC, "C");
+
+               $this->parser = $this->makeParser($name);
+               $root = $this->parser->parse($string);
+
+               $this->env = null;
+               $this->scope = null;
+
+               $this->formatter = $this->newFormatter();
+
+               if (!empty($this->registeredVars)) {
+                       $this->injectVariables($this->registeredVars);
+               }
+
+               $this->sourceParser = $this->parser; // used for error messages
+               $this->compileBlock($root);
+
+               ob_start();
+               $this->formatter->block($this->scope);
+               $out = ob_get_clean();
+               setlocale(LC_NUMERIC, $locale);
+               return $out;
+       }
+
+       public function compileFile($fname, $outFname = null) {
+               if (!is_readable($fname)) {
+                       throw new Exception('load error: failed to find '.$fname);
+               }
+
+               $pi = pathinfo($fname);
+
+               $oldImport = $this->importDir;
+
+               $this->importDir = (array)$this->importDir;
+               $this->importDir[] = $pi['dirname'].'/';
+
+               $this->addParsedFile($fname);
+
+               $out = $this->compile(file_get_contents($fname), $fname);
+
+               $this->importDir = $oldImport;
+
+               if ($outFname !== null) {
+                       return file_put_contents($outFname, $out);
+               }
+
+               return $out;
+       }
+
+       // compile only if changed input has changed or output doesn't exist
+       public function checkedCompile($in, $out) {
+               if (!is_file($out) || filemtime($in) > filemtime($out)) {
+                       $this->compileFile($in, $out);
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * Execute lessphp on a .less file or a lessphp cache structure
+        *
+        * The lessphp cache structure contains information about a specific
+        * less file having been parsed. It can be used as a hint for future
+        * calls to determine whether or not a rebuild is required.
+        *
+        * The cache structure contains two important keys that may be used
+        * externally:
+        *
+        * compiled: The final compiled CSS
+        * updated: The time (in seconds) the CSS was last compiled
+        *
+        * The cache structure is a plain-ol' PHP associative array and can
+        * be serialized and unserialized without a hitch.
+        *
+        * @param mixed $in Input
+        * @param bool $force Force rebuild?
+        * @return array lessphp cache structure
+        */
+       public function cachedCompile($in, $force = false) {
+               // assume no root
+               $root = null;
+
+               if (is_string($in)) {
+                       $root = $in;
+               } elseif (is_array($in) and isset($in['root'])) {
+                       if ($force or ! isset($in['files'])) {
+                               // If we are forcing a recompile or if for some reason the
+                               // structure does not contain any file information we should
+                               // specify the root to trigger a rebuild.
+                               $root = $in['root'];
+                       } elseif (isset($in['files']) and is_array($in['files'])) {
+                               foreach ($in['files'] as $fname => $ftime ) {
+                                       if (!file_exists($fname) or filemtime($fname) > $ftime) {
+                                               // One of the files we knew about previously has changed
+                                               // so we should look at our incoming root again.
+                                               $root = $in['root'];
+                                               break;
+                                       }
+                               }
+                       }
+               } else {
+                       // TODO: Throw an exception? We got neither a string nor something
+                       // that looks like a compatible lessphp cache structure.
+                       return null;
+               }
+
+               if ($root !== null) {
+                       // If we have a root value which means we should rebuild.
+                       $out = array();
+                       $out['root'] = $root;
+                       $out['compiled'] = $this->compileFile($root);
+                       $out['files'] = $this->allParsedFiles();
+                       $out['updated'] = time();
+                       return $out;
+               } else {
+                       // No changes, pass back the structure
+                       // we were given initially.
+                       return $in;
+               }
+
+       }
+
+       // parse and compile buffer
+       // This is deprecated
+       public function parse($str = null, $initialVariables = null) {
+               if (is_array($str)) {
+                       $initialVariables = $str;
+                       $str = null;
+               }
+
+               $oldVars = $this->registeredVars;
+               if ($initialVariables !== null) {
+                       $this->setVariables($initialVariables);
+               }
+
+               if ($str == null) {
+                       if (empty($this->_parseFile)) {
+                               throw new exception("nothing to parse");
+                       }
+
+                       $out = $this->compileFile($this->_parseFile);
+               } else {
+                       $out = $this->compile($str);
+               }
+
+               $this->registeredVars = $oldVars;
+               return $out;
+       }
+
+       protected function makeParser($name) {
+               $parser = new lessc_parser($this, $name);
+               $parser->writeComments = $this->preserveComments;
+
+               return $parser;
+       }
+
+       public function setFormatter($name) {
+               $this->formatterName = $name;
+       }
+
+       protected function newFormatter() {
+               $className = "lessc_formatter_lessjs";
+               if (!empty($this->formatterName)) {
+                       if (!is_string($this->formatterName))
+                               return $this->formatterName;
+                       $className = "lessc_formatter_$this->formatterName";
+               }
+
+               return new $className;
+       }
+
+       public function setPreserveComments($preserve) {
+               $this->preserveComments = $preserve;
+       }
+
+       public function registerFunction($name, $func) {
+               $this->libFunctions[$name] = $func;
+       }
+
+       public function unregisterFunction($name) {
+               unset($this->libFunctions[$name]);
+       }
+
+       public function setVariables($variables) {
+               $this->registeredVars = array_merge($this->registeredVars, $variables);
+       }
+
+       public function unsetVariable($name) {
+               unset($this->registeredVars[$name]);
+       }
+
+       public function setImportDir($dirs) {
+               $this->importDir = (array)$dirs;
+       }
+
+       public function addImportDir($dir) {
+               $this->importDir = (array)$this->importDir;
+               $this->importDir[] = $dir;
+       }
+
+       public function allParsedFiles() {
+               return $this->allParsedFiles;
+       }
+
+       public function addParsedFile($file) {
+               $this->allParsedFiles[realpath($file)] = filemtime($file);
+       }
+
+       /**
+        * Uses the current value of $this->count to show line and line number
+        */
+       public function throwError($msg = null) {
+               if ($this->sourceLoc >= 0) {
+                       $this->sourceParser->throwError($msg, $this->sourceLoc);
+               }
+               throw new exception($msg);
+       }
+
+       // compile file $in to file $out if $in is newer than $out
+       // returns true when it compiles, false otherwise
+       public static function ccompile($in, $out, $less = null) {
+               if ($less === null) {
+                       $less = new self;
+               }
+               return $less->checkedCompile($in, $out);
+       }
+
+       public static function cexecute($in, $force = false, $less = null) {
+               if ($less === null) {
+                       $less = new self;
+               }
+               return $less->cachedCompile($in, $force);
+       }
+
+       static protected $cssColors = array(
+               'aliceblue' => '240,248,255',
+               'antiquewhite' => '250,235,215',
+               'aqua' => '0,255,255',
+               'aquamarine' => '127,255,212',
+               'azure' => '240,255,255',
+               'beige' => '245,245,220',
+               'bisque' => '255,228,196',
+               'black' => '0,0,0',
+               'blanchedalmond' => '255,235,205',
+               'blue' => '0,0,255',
+               'blueviolet' => '138,43,226',
+               'brown' => '165,42,42',
+               'burlywood' => '222,184,135',
+               'cadetblue' => '95,158,160',
+               'chartreuse' => '127,255,0',
+               'chocolate' => '210,105,30',
+               'coral' => '255,127,80',
+               'cornflowerblue' => '100,149,237',
+               'cornsilk' => '255,248,220',
+               'crimson' => '220,20,60',
+               'cyan' => '0,255,255',
+               'darkblue' => '0,0,139',
+               'darkcyan' => '0,139,139',
+               'darkgoldenrod' => '184,134,11',
+               'darkgray' => '169,169,169',
+               'darkgreen' => '0,100,0',
+               'darkgrey' => '169,169,169',
+               'darkkhaki' => '189,183,107',
+               'darkmagenta' => '139,0,139',
+               'darkolivegreen' => '85,107,47',
+               'darkorange' => '255,140,0',
+               'darkorchid' => '153,50,204',
+               'darkred' => '139,0,0',
+               'darksalmon' => '233,150,122',
+               'darkseagreen' => '143,188,143',
+               'darkslateblue' => '72,61,139',
+               'darkslategray' => '47,79,79',
+               'darkslategrey' => '47,79,79',
+               'darkturquoise' => '0,206,209',
+               'darkviolet' => '148,0,211',
+               'deeppink' => '255,20,147',
+               'deepskyblue' => '0,191,255',
+               'dimgray' => '105,105,105',
+               'dimgrey' => '105,105,105',
+               'dodgerblue' => '30,144,255',
+               'firebrick' => '178,34,34',
+               'floralwhite' => '255,250,240',
+               'forestgreen' => '34,139,34',
+               'fuchsia' => '255,0,255',
+               'gainsboro' => '220,220,220',
+               'ghostwhite' => '248,248,255',
+               'gold' => '255,215,0',
+               'goldenrod' => '218,165,32',
+               'gray' => '128,128,128',
+               'green' => '0,128,0',
+               'greenyellow' => '173,255,47',
+               'grey' => '128,128,128',
+               'honeydew' => '240,255,240',
+               'hotpink' => '255,105,180',
+               'indianred' => '205,92,92',
+               'indigo' => '75,0,130',
+               'ivory' => '255,255,240',
+               'khaki' => '240,230,140',
+               'lavender' => '230,230,250',
+               'lavenderblush' => '255,240,245',
+               'lawngreen' => '124,252,0',
+               'lemonchiffon' => '255,250,205',
+               'lightblue' => '173,216,230',
+               'lightcoral' => '240,128,128',
+               'lightcyan' => '224,255,255',
+               'lightgoldenrodyellow' => '250,250,210',
+               'lightgray' => '211,211,211',
+               'lightgreen' => '144,238,144',
+               'lightgrey' => '211,211,211',
+               'lightpink' => '255,182,193',
+               'lightsalmon' => '255,160,122',
+               'lightseagreen' => '32,178,170',
+               'lightskyblue' => '135,206,250',
+               'lightslategray' => '119,136,153',
+               'lightslategrey' => '119,136,153',
+               'lightsteelblue' => '176,196,222',
+               'lightyellow' => '255,255,224',
+               'lime' => '0,255,0',
+               'limegreen' => '50,205,50',
+               'linen' => '250,240,230',
+               'magenta' => '255,0,255',
+               'maroon' => '128,0,0',
+               'mediumaquamarine' => '102,205,170',
+               'mediumblue' => '0,0,205',
+               'mediumorchid' => '186,85,211',
+               'mediumpurple' => '147,112,219',
+               'mediumseagreen' => '60,179,113',
+               'mediumslateblue' => '123,104,238',
+               'mediumspringgreen' => '0,250,154',
+               'mediumturquoise' => '72,209,204',
+               'mediumvioletred' => '199,21,133',
+               'midnightblue' => '25,25,112',
+               'mintcream' => '245,255,250',
+               'mistyrose' => '255,228,225',
+               'moccasin' => '255,228,181',
+               'navajowhite' => '255,222,173',
+               'navy' => '0,0,128',
+               'oldlace' => '253,245,230',
+               'olive' => '128,128,0',
+               'olivedrab' => '107,142,35',
+               'orange' => '255,165,0',
+               'orangered' => '255,69,0',
+               'orchid' => '218,112,214',
+               'palegoldenrod' => '238,232,170',
+               'palegreen' => '152,251,152',
+               'paleturquoise' => '175,238,238',
+               'palevioletred' => '219,112,147',
+               'papayawhip' => '255,239,213',
+               'peachpuff' => '255,218,185',
+               'peru' => '205,133,63',
+               'pink' => '255,192,203',
+               'plum' => '221,160,221',
+               'powderblue' => '176,224,230',
+               'purple' => '128,0,128',
+               'red' => '255,0,0',
+               'rosybrown' => '188,143,143',
+               'royalblue' => '65,105,225',
+               'saddlebrown' => '139,69,19',
+               'salmon' => '250,128,114',
+               'sandybrown' => '244,164,96',
+               'seagreen' => '46,139,87',
+               'seashell' => '255,245,238',
+               'sienna' => '160,82,45',
+               'silver' => '192,192,192',
+               'skyblue' => '135,206,235',
+               'slateblue' => '106,90,205',
+               'slategray' => '112,128,144',
+               'slategrey' => '112,128,144',
+               'snow' => '255,250,250',
+               'springgreen' => '0,255,127',
+               'steelblue' => '70,130,180',
+               'tan' => '210,180,140',
+               'teal' => '0,128,128',
+               'thistle' => '216,191,216',
+               'tomato' => '255,99,71',
+               'transparent' => '0,0,0,0',
+               'turquoise' => '64,224,208',
+               'violet' => '238,130,238',
+               'wheat' => '245,222,179',
+               'white' => '255,255,255',
+               'whitesmoke' => '245,245,245',
+               'yellow' => '255,255,0',
+               'yellowgreen' => '154,205,50'
+       );
+}
+
+// responsible for taking a string of LESS code and converting it into a
+// syntax tree
+class lessc_parser {
+       static protected $nextBlockId = 0; // used to uniquely identify blocks
+
+       static protected $precedence = array(
+               '=<' => 0,
+               '>=' => 0,
+               '=' => 0,
+               '<' => 0,
+               '>' => 0,
+
+               '+' => 1,
+               '-' => 1,
+               '*' => 2,
+               '/' => 2,
+               '%' => 2,
+       );
+
+       static protected $whitePattern;
+       static protected $commentMulti;
+
+       static protected $commentSingle = "//";
+       static protected $commentMultiLeft = "/*";
+       static protected $commentMultiRight = "*/";
+
+       // regex string to match any of the operators
+       static protected $operatorString;
+
+       // these properties will supress division unless it's inside parenthases
+       static protected $supressDivisionProps =
+               array('/border-radius$/i', '/^font$/i');
+
+       protected $blockDirectives = array("font-face", "keyframes", "page", "-moz-document", "viewport", "-moz-viewport", "-o-viewport", "-ms-viewport");
+       protected $lineDirectives = array("charset");
+
+       /**
+        * if we are in parens we can be more liberal with whitespace around
+        * operators because it must evaluate to a single value and thus is less
+        * ambiguous.
+        *
+        * Consider:
+        *     property1: 10 -5; // is two numbers, 10 and -5
+        *     property2: (10 -5); // should evaluate to 5
+        */
+       protected $inParens = false;
+
+       // caches preg escaped literals
+       static protected $literalCache = array();
+
+       public function __construct($lessc, $sourceName = null) {
+               $this->eatWhiteDefault = true;
+               // reference to less needed for vPrefix, mPrefix, and parentSelector
+               $this->lessc = $lessc;
+
+               $this->sourceName = $sourceName; // name used for error messages
+
+               $this->writeComments = false;
+
+               if (!self::$operatorString) {
+                       self::$operatorString =
+                               '('.implode('|', array_map(array('lessc', 'preg_quote'),
+                                       array_keys(self::$precedence))).')';
+
+                       $commentSingle = lessc::preg_quote(self::$commentSingle);
+                       $commentMultiLeft = lessc::preg_quote(self::$commentMultiLeft);
+                       $commentMultiRight = lessc::preg_quote(self::$commentMultiRight);
+
+                       self::$commentMulti = $commentMultiLeft.'.*?'.$commentMultiRight;
+                       self::$whitePattern = '/'.$commentSingle.'[^\n]*\s*|('.self::$commentMulti.')\s*|\s+/Ais';
+               }
+       }
+
+       public function parse($buffer) {
+               $this->count = 0;
+               $this->line = 1;
+
+               $this->env = null; // block stack
+               $this->buffer = $this->writeComments ? $buffer : $this->removeComments($buffer);
+               $this->pushSpecialBlock("root");
+               $this->eatWhiteDefault = true;
+               $this->seenComments = array();
+
+               // trim whitespace on head
+               // if (preg_match('/^\s+/', $this->buffer, $m)) {
+               //      $this->line += substr_count($m[0], "\n");
+               //      $this->buffer = ltrim($this->buffer);
+               // }
+               $this->whitespace();
+
+               // parse the entire file
+               while (false !== $this->parseChunk());
+
+               if ($this->count != strlen($this->buffer))
+                       $this->throwError();
+
+               // TODO report where the block was opened
+               if (!is_null($this->env->parent))
+                       throw new exception('parse error: unclosed block');
+
+               return $this->env;
+       }
+
+       /**
+        * Parse a single chunk off the head of the buffer and append it to the
+        * current parse environment.
+        * Returns false when the buffer is empty, or when there is an error.
+        *
+        * This function is called repeatedly until the entire document is
+        * parsed.
+        *
+        * This parser is most similar to a recursive descent parser. Single
+        * functions represent discrete grammatical rules for the language, and
+        * they are able to capture the text that represents those rules.
+        *
+        * Consider the function lessc::keyword(). (all parse functions are
+        * structured the same)
+        *
+        * The function takes a single reference argument. When calling the
+        * function it will attempt to match a keyword on the head of the buffer.
+        * If it is successful, it will place the keyword in the referenced
+        * argument, advance the position in the buffer, and return true. If it
+        * fails then it won't advance the buffer and it will return false.
+        *
+        * All of these parse functions are powered by lessc::match(), which behaves
+        * the same way, but takes a literal regular expression. Sometimes it is
+        * more convenient to use match instead of creating a new function.
+        *
+        * Because of the format of the functions, to parse an entire string of
+        * grammatical rules, you can chain them together using &&.
+        *
+        * But, if some of the rules in the chain succeed before one fails, then
+        * the buffer position will be left at an invalid state. In order to
+        * avoid this, lessc::seek() is used to remember and set buffer positions.
+        *
+        * Before parsing a chain, use $s = $this->seek() to remember the current
+        * position into $s. Then if a chain fails, use $this->seek($s) to
+        * go back where we started.
+        */
+       protected function parseChunk() {
+               if (empty($this->buffer)) return false;
+               $s = $this->seek();
+
+               if ($this->whitespace()) {
+                       return true;
+               }
+
+               // setting a property
+               if ($this->keyword($key) && $this->assign() &&
+                       $this->propertyValue($value, $key) && $this->end())
+               {
+                       $this->append(array('assign', $key, $value), $s);
+                       return true;
+               } else {
+                       $this->seek($s);
+               }
+
+
+               // look for special css blocks
+               if ($this->literal('@', false)) {
+                       $this->count--;
+
+                       // media
+                       if ($this->literal('@media')) {
+                               if (($this->mediaQueryList($mediaQueries) || true)
+                                       && $this->literal('{'))
+                               {
+                                       $media = $this->pushSpecialBlock("media");
+                                       $media->queries = is_null($mediaQueries) ? array() : $mediaQueries;
+                                       return true;
+                               } else {
+                                       $this->seek($s);
+                                       return false;
+                               }
+                       }
+
+                       if ($this->literal("@", false) && $this->keyword($dirName)) {
+                               if ($this->isDirective($dirName, $this->blockDirectives)) {
+                                       if (($this->openString("{", $dirValue, null, array(";")) || true) &&
+                                               $this->literal("{"))
+                                       {
+                                               $dir = $this->pushSpecialBlock("directive");
+                                               $dir->name = $dirName;
+                                               if (isset($dirValue)) $dir->value = $dirValue;
+                                               return true;
+                                       }
+                               } elseif ($this->isDirective($dirName, $this->lineDirectives)) {
+                                       if ($this->propertyValue($dirValue) && $this->end()) {
+                                               $this->append(array("directive", $dirName, $dirValue));
+                                               return true;
+                                       }
+                               }
+                       }
+
+                       $this->seek($s);
+               }
+
+               // setting a variable
+               if ($this->variable($var) && $this->assign() &&
+                       $this->propertyValue($value) && $this->end())
+               {
+                       $this->append(array('assign', $var, $value), $s);
+                       return true;
+               } else {
+                       $this->seek($s);
+               }
+
+               if ($this->import($importValue)) {
+                       $this->append($importValue, $s);
+                       return true;
+               }
+
+               // opening parametric mixin
+               if ($this->tag($tag, true) && $this->argumentDef($args, $isVararg) &&
+                       ($this->guards($guards) || true) &&
+                       $this->literal('{'))
+               {
+                       $block = $this->pushBlock($this->fixTags(array($tag)));
+                       $block->args = $args;
+                       $block->isVararg = $isVararg;
+                       if (!empty($guards)) $block->guards = $guards;
+                       return true;
+               } else {
+                       $this->seek($s);
+               }
+
+               // opening a simple block
+               if ($this->tags($tags) && $this->literal('{', false)) {
+                       $tags = $this->fixTags($tags);
+                       $this->pushBlock($tags);
+                       return true;
+               } else {
+                       $this->seek($s);
+               }
+
+               // closing a block
+               if ($this->literal('}', false)) {
+                       try {
+                               $block = $this->pop();
+                       } catch (exception $e) {
+                               $this->seek($s);
+                               $this->throwError($e->getMessage());
+                       }
+
+                       $hidden = false;
+                       if (is_null($block->type)) {
+                               $hidden = true;
+                               if (!isset($block->args)) {
+                                       foreach ($block->tags as $tag) {
+                                               if (!is_string($tag) || $tag{0} != $this->lessc->mPrefix) {
+                                                       $hidden = false;
+                                                       break;
+                                               }
+                                       }
+                               }
+
+                               foreach ($block->tags as $tag) {
+                                       if (is_string($tag)) {
+                                               $this->env->children[$tag][] = $block;
+                                       }
+                               }
+                       }
+
+                       if (!$hidden) {
+                               $this->append(array('block', $block), $s);
+                       }
+
+                       // this is done here so comments aren't bundled into he block that
+                       // was just closed
+                       $this->whitespace();
+                       return true;
+               }
+
+               // mixin
+               if ($this->mixinTags($tags) &&
+                       ($this->argumentDef($argv, $isVararg) || true) &&
+                       ($this->keyword($suffix) || true) && $this->end())
+               {
+                       $tags = $this->fixTags($tags);
+                       $this->append(array('mixin', $tags, $argv, $suffix), $s);
+                       return true;
+               } else {
+                       $this->seek($s);
+               }
+
+               // spare ;
+               if ($this->literal(';')) return true;
+
+               return false; // got nothing, throw error
+       }
+
+       protected function isDirective($dirname, $directives) {
+               // TODO: cache pattern in parser
+               $pattern = implode("|",
+                       array_map(array("lessc", "preg_quote"), $directives));
+               $pattern = '/^(-[a-z-]+-)?(' . $pattern . ')$/i';
+
+               return preg_match($pattern, $dirname);
+       }
+
+       protected function fixTags($tags) {
+               // move @ tags out of variable namespace
+               foreach ($tags as &$tag) {
+                       if ($tag{0} == $this->lessc->vPrefix)
+                               $tag[0] = $this->lessc->mPrefix;
+               }
+               return $tags;
+       }
+
+       // a list of expressions
+       protected function expressionList(&$exps) {
+               $values = array();
+
+               while ($this->expression($exp)) {
+                       $values[] = $exp;
+               }
+
+               if (count($values) == 0) return false;
+
+               $exps = lessc::compressList($values, ' ');
+               return true;
+       }
+
+       /**
+        * Attempt to consume an expression.
+        * @link http://en.wikipedia.org/wiki/Operator-precedence_parser#Pseudo-code
+        */
+       protected function expression(&$out) {
+               if ($this->value($lhs)) {
+                       $out = $this->expHelper($lhs, 0);
+
+                       // look for / shorthand
+                       if (!empty($this->env->supressedDivision)) {
+                               unset($this->env->supressedDivision);
+                               $s = $this->seek();
+                               if ($this->literal("/") && $this->value($rhs)) {
+                                       $out = array("list", "",
+                                               array($out, array("keyword", "/"), $rhs));
+                               } else {
+                                       $this->seek($s);
+                               }
+                       }
+
+                       return true;
+               }
+               return false;
+       }
+
+       /**
+        * recursively parse infix equation with $lhs at precedence $minP
+        */
+       protected function expHelper($lhs, $minP) {
+               $this->inExp = true;
+               $ss = $this->seek();
+
+               while (true) {
+                       $whiteBefore = isset($this->buffer[$this->count - 1]) &&
+                               ctype_space($this->buffer[$this->count - 1]);
+
+                       // If there is whitespace before the operator, then we require
+                       // whitespace after the operator for it to be an expression
+                       $needWhite = $whiteBefore && !$this->inParens;
+
+                       if ($this->match(self::$operatorString.($needWhite ? '\s' : ''), $m) && self::$precedence[$m[1]] >= $minP) {
+                               if (!$this->inParens && isset($this->env->currentProperty) && $m[1] == "/" && empty($this->env->supressedDivision)) {
+                                       foreach (self::$supressDivisionProps as $pattern) {
+                                               if (preg_match($pattern, $this->env->currentProperty)) {
+                                                       $this->env->supressedDivision = true;
+                                                       break 2;
+                                               }
+                                       }
+                               }
+
+
+                               $whiteAfter = isset($this->buffer[$this->count - 1]) &&
+                                       ctype_space($this->buffer[$this->count - 1]);
+
+                               if (!$this->value($rhs)) break;
+
+                               // peek for next operator to see what to do with rhs
+                               if ($this->peek(self::$operatorString, $next) && self::$precedence[$next[1]] > self::$precedence[$m[1]]) {
+                                       $rhs = $this->expHelper($rhs, self::$precedence[$next[1]]);
+                               }
+
+                               $lhs = array('expression', $m[1], $lhs, $rhs, $whiteBefore, $whiteAfter);
+                               $ss = $this->seek();
+
+                               continue;
+                       }
+
+                       break;
+               }
+
+               $this->seek($ss);
+
+               return $lhs;
+       }
+
+       // consume a list of values for a property
+       public function propertyValue(&$value, $keyName = null) {
+               $values = array();
+
+               if ($keyName !== null) $this->env->currentProperty = $keyName;
+
+               $s = null;
+               while ($this->expressionList($v)) {
+                       $values[] = $v;
+                       $s = $this->seek();
+                       if (!$this->literal(',')) break;
+               }
+
+               if ($s) $this->seek($s);
+
+               if ($keyName !== null) unset($this->env->currentProperty);
+
+               if (count($values) == 0) return false;
+
+               $value = lessc::compressList($values, ', ');
+               return true;
+       }
+
+       protected function parenValue(&$out) {
+               $s = $this->seek();
+
+               // speed shortcut
+               if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] != "(") {
+                       return false;
+               }
+
+               $inParens = $this->inParens;
+               if ($this->literal("(") &&
+                       ($this->inParens = true) && $this->expression($exp) &&
+                       $this->literal(")"))
+               {
+                       $out = $exp;
+                       $this->inParens = $inParens;
+                       return true;
+               } else {
+                       $this->inParens = $inParens;
+                       $this->seek($s);
+               }
+
+               return false;
+       }
+
+       // a single value
+       protected function value(&$value) {
+               $s = $this->seek();
+
+               // speed shortcut
+               if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] == "-") {
+                       // negation
+                       if ($this->literal("-", false) &&
+                               (($this->variable($inner) && $inner = array("variable", $inner)) ||
+                               $this->unit($inner) ||
+                               $this->parenValue($inner)))
+                       {
+                               $value = array("unary", "-", $inner);
+                               return true;
+                       } else {
+                               $this->seek($s);
+                       }
+               }
+
+               if ($this->parenValue($value)) return true;
+               if ($this->unit($value)) return true;
+               if ($this->color($value)) return true;
+               if ($this->func($value)) return true;
+               if ($this->string($value)) return true;
+
+               if ($this->keyword($word)) {
+                       $value = array('keyword', $word);
+                       return true;
+               }
+
+               // try a variable
+               if ($this->variable($var)) {
+                       $value = array('variable', $var);
+                       return true;
+               }
+
+               // unquote string (should this work on any type?
+               if ($this->literal("~") && $this->string($str)) {
+                       $value = array("escape", $str);
+                       return true;
+               } else {
+                       $this->seek($s);
+               }
+
+               // css hack: \0
+               if ($this->literal('\\') && $this->match('([0-9]+)', $m)) {
+                       $value = array('keyword', '\\'.$m[1]);
+                       return true;
+               } else {
+                       $this->seek($s);
+               }
+
+               return false;
+       }
+
+       // an import statement
+       protected function import(&$out) {
+               if (!$this->literal('@import')) return false;
+
+               // @import "something.css" media;
+               // @import url("something.css") media;
+               // @import url(something.css) media;
+
+               if ($this->propertyValue($value)) {
+                       $out = array("import", $value);
+                       return true;
+               }
+       }
+
+       protected function mediaQueryList(&$out) {
+               if ($this->genericList($list, "mediaQuery", ",", false)) {
+                       $out = $list[2];
+                       return true;
+               }
+               return false;
+       }
+
+       protected function mediaQuery(&$out) {
+               $s = $this->seek();
+
+               $expressions = null;
+               $parts = array();
+
+               if (($this->literal("only") && ($only = true) || $this->literal("not") && ($not = true) || true) && $this->keyword($mediaType)) {
+                       $prop = array("mediaType");
+                       if (isset($only)) $prop[] = "only";
+                       if (isset($not)) $prop[] = "not";
+                       $prop[] = $mediaType;
+                       $parts[] = $prop;
+               } else {
+                       $this->seek($s);
+               }
+
+
+               if (!empty($mediaType) && !$this->literal("and")) {
+                       // ~
+               } else {
+                       $this->genericList($expressions, "mediaExpression", "and", false);
+                       if (is_array($expressions)) $parts = array_merge($parts, $expressions[2]);
+               }
+
+               if (count($parts) == 0) {
+                       $this->seek($s);
+                       return false;
+               }
+
+               $out = $parts;
+               return true;
+       }
+
+       protected function mediaExpression(&$out) {
+               $s = $this->seek();
+               $value = null;
+               if ($this->literal("(") &&
+                       $this->keyword($feature) &&
+                       ($this->literal(":") && $this->expression($value) || true) &&
+                       $this->literal(")"))
+               {
+                       $out = array("mediaExp", $feature);
+                       if ($value) $out[] = $value;
+                       return true;
+               } elseif ($this->variable($variable)) {
+                       $out = array('variable', $variable);
+                       return true;
+               }
+
+               $this->seek($s);
+               return false;
+       }
+
+       // an unbounded string stopped by $end
+       protected function openString($end, &$out, $nestingOpen=null, $rejectStrs = null) {
+               $oldWhite = $this->eatWhiteDefault;
+               $this->eatWhiteDefault = false;
+
+               $stop = array("'", '"', "@{", $end);
+               $stop = array_map(array("lessc", "preg_quote"), $stop);
+               // $stop[] = self::$commentMulti;
+
+               if (!is_null($rejectStrs)) {
+                       $stop = array_merge($stop, $rejectStrs);
+               }
+
+               $patt = '(.*?)('.implode("|", $stop).')';
+
+               $nestingLevel = 0;
+
+               $content = array();
+               while ($this->match($patt, $m, false)) {
+                       if (!empty($m[1])) {
+                               $content[] = $m[1];
+                               if ($nestingOpen) {
+                                       $nestingLevel += substr_count($m[1], $nestingOpen);
+                               }
+                       }
+
+                       $tok = $m[2];
+
+                       $this->count-= strlen($tok);
+                       if ($tok == $end) {
+                               if ($nestingLevel == 0) {
+                                       break;
+                               } else {
+                                       $nestingLevel--;
+                               }
+                       }
+
+                       if (($tok == "'" || $tok == '"') && $this->string($str)) {
+                               $content[] = $str;
+                               continue;
+                       }
+
+                       if ($tok == "@{" && $this->interpolation($inter)) {
+                               $content[] = $inter;
+                               continue;
+                       }
+
+                       if (!empty($rejectStrs) && in_array($tok, $rejectStrs)) {
+                               break;
+                       }
+
+                       $content[] = $tok;
+                       $this->count+= strlen($tok);
+               }
+
+               $this->eatWhiteDefault = $oldWhite;
+
+               if (count($content) == 0) return false;
+
+               // trim the end
+               if (is_string(end($content))) {
+                       $content[count($content) - 1] = rtrim(end($content));
+               }
+
+               $out = array("string", "", $content);
+               return true;
+       }
+
+       protected function string(&$out) {
+               $s = $this->seek();
+               if ($this->literal('"', false)) {
+                       $delim = '"';
+               } elseif ($this->literal("'", false)) {
+                       $delim = "'";
+               } else {
+                       return false;
+               }
+
+               $content = array();
+
+               // look for either ending delim , escape, or string interpolation
+               $patt = '([^\n]*?)(@\{|\\\\|' .
+                       lessc::preg_quote($delim).')';
+
+               $oldWhite = $this->eatWhiteDefault;
+               $this->eatWhiteDefault = false;
+
+               while ($this->match($patt, $m, false)) {
+                       $content[] = $m[1];
+                       if ($m[2] == "@{") {
+                               $this->count -= strlen($m[2]);
+                               if ($this->interpolation($inter, false)) {
+                                       $content[] = $inter;
+                               } else {
+                                       $this->count += strlen($m[2]);
+                                       $content[] = "@{"; // ignore it
+                               }
+                       } elseif ($m[2] == '\\') {
+                               $content[] = $m[2];
+                               if ($this->literal($delim, false)) {
+                                       $content[] = $delim;
+                               }
+                       } else {
+                               $this->count -= strlen($delim);
+                               break; // delim
+                       }
+               }
+
+               $this->eatWhiteDefault = $oldWhite;
+
+               if ($this->literal($delim)) {
+                       $out = array("string", $delim, $content);
+                       return true;
+               }
+
+               $this->seek($s);
+               return false;
+       }
+
+       protected function interpolation(&$out) {
+               $oldWhite = $this->eatWhiteDefault;
+               $this->eatWhiteDefault = true;
+
+               $s = $this->seek();
+               if ($this->literal("@{") &&
+                       $this->openString("}", $interp, null, array("'", '"', ";")) &&
+                       $this->literal("}", false))
+               {
+                       $out = array("interpolate", $interp);
+                       $this->eatWhiteDefault = $oldWhite;
+                       if ($this->eatWhiteDefault) $this->whitespace();
+                       return true;
+               }
+
+               $this->eatWhiteDefault = $oldWhite;
+               $this->seek($s);
+               return false;
+       }
+
+       protected function unit(&$unit) {
+               // speed shortcut
+               if (isset($this->buffer[$this->count])) {
+                       $char = $this->buffer[$this->count];
+                       if (!ctype_digit($char) && $char != ".") return false;
+               }
+
+               if ($this->match('([0-9]+(?:\.[0-9]*)?|\.[0-9]+)([%a-zA-Z]+)?', $m)) {
+                       $unit = array("number", $m[1], empty($m[2]) ? "" : $m[2]);
+                       return true;
+               }
+               return false;
+       }
+
+       // a # color
+       protected function color(&$out) {
+               if ($this->match('(#(?:[0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{3}))', $m)) {
+                       if (strlen($m[1]) > 7) {
+                               $out = array("string", "", array($m[1]));
+                       } else {
+                               $out = array("raw_color", $m[1]);
+                       }
+                       return true;
+               }
+
+               return false;
+       }
+
+       // consume an argument definition list surrounded by ()
+       // each argument is a variable name with optional value
+       // or at the end a ... or a variable named followed by ...
+       // arguments are separated by , unless a ; is in the list, then ; is the
+       // delimiter.
+       protected function argumentDef(&$args, &$isVararg) {
+               $s = $this->seek();
+               if (!$this->literal('(')) return false;
+
+               $values = array();
+               $delim = ",";
+               $method = "expressionList";
+
+               $isVararg = false;
+               while (true) {
+                       if ($this->literal("...")) {
+                               $isVararg = true;
+                               break;
+                       }
+
+                       if ($this->$method($value)) {
+                               if ($value[0] == "variable") {
+                                       $arg = array("arg", $value[1]);
+                                       $ss = $this->seek();
+
+                                       if ($this->assign() && $this->$method($rhs)) {
+                                               $arg[] = $rhs;
+                                       } else {
+                                               $this->seek($ss);
+                                               if ($this->literal("...")) {
+                                                       $arg[0] = "rest";
+                                                       $isVararg = true;
+                                               }
+                                       }
+
+                                       $values[] = $arg;
+                                       if ($isVararg) break;
+                                       continue;
+                               } else {
+                                       $values[] = array("lit", $value);
+                               }
+                       }
+
+
+                       if (!$this->literal($delim)) {
+                               if ($delim == "," && $this->literal(";")) {
+                                       // found new delim, convert existing args
+                                       $delim = ";";
+                                       $method = "propertyValue";
+
+                                       // transform arg list
+                                       if (isset($values[1])) { // 2 items
+                                               $newList = array();
+                                               foreach ($values as $i => $arg) {
+                                                       switch($arg[0]) {
+                                                       case "arg":
+                                                               if ($i) {
+                                                                       $this->throwError("Cannot mix ; and , as delimiter types");
+                                                               }
+                                                               $newList[] = $arg[2];
+                                                               break;
+                                                       case "lit":
+                                                               $newList[] = $arg[1];
+                                                               break;
+                                                       case "rest":
+                                                               $this->throwError("Unexpected rest before semicolon");
+                                                       }
+                                               }
+
+                                               $newList = array("list", ", ", $newList);
+
+                                               switch ($values[0][0]) {
+                                               case "arg":
+                                                       $newArg = array("arg", $values[0][1], $newList);
+                                                       break;
+                                               case "lit":
+                                                       $newArg = array("lit", $newList);
+                                                       break;
+                                               }
+
+                                       } elseif ($values) { // 1 item
+                                               $newArg = $values[0];
+                                       }
+
+                                       if ($newArg) {
+                                               $values = array($newArg);
+                                       }
+                               } else {
+                                       break;
+                               }
+                       }
+               }
+
+               if (!$this->literal(')')) {
+                       $this->seek($s);
+                       return false;
+               }
+
+               $args = $values;
+
+               return true;
+       }
+
+       // consume a list of tags
+       // this accepts a hanging delimiter
+       protected function tags(&$tags, $simple = false, $delim = ',') {
+               $tags = array();
+               while ($this->tag($tt, $simple)) {
+                       $tags[] = $tt;
+                       if (!$this->literal($delim)) break;
+               }
+               if (count($tags) == 0) return false;
+
+               return true;
+       }
+
+       // list of tags of specifying mixin path
+       // optionally separated by > (lazy, accepts extra >)
+       protected function mixinTags(&$tags) {
+               $tags = array();
+               while ($this->tag($tt, true)) {
+                       $tags[] = $tt;
+                       $this->literal(">");
+               }
+
+               if (count($tags) == 0) return false;
+
+               return true;
+       }
+
+       // a bracketed value (contained within in a tag definition)
+       protected function tagBracket(&$parts, &$hasExpression) {
+               // speed shortcut
+               if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] != "[") {
+                       return false;
+               }
+
+               $s = $this->seek();
+
+               $hasInterpolation = false;
+
+               if ($this->literal("[", false)) {
+                       $attrParts = array("[");
+                       // keyword, string, operator
+                       while (true) {
+                               if ($this->literal("]", false)) {
+                                       $this->count--;
+                                       break; // get out early
+                               }
+
+                               if ($this->match('\s+', $m)) {
+                                       $attrParts[] = " ";
+                                       continue;
+                               }
+                               if ($this->string($str)) {
+                                       // escape parent selector, (yuck)
+                                       foreach ($str[2] as &$chunk) {
+                                               $chunk = str_replace($this->lessc->parentSelector, "$&$", $chunk);
+                                       }
+
+                                       $attrParts[] = $str;
+                                       $hasInterpolation = true;
+                                       continue;
+                               }
+
+                               if ($this->keyword($word)) {
+                                       $attrParts[] = $word;
+                                       continue;
+                               }
+
+                               if ($this->interpolation($inter, false)) {
+                                       $attrParts[] = $inter;
+                                       $hasInterpolation = true;
+                                       continue;
+                               }
+
+                               // operator, handles attr namespace too
+                               if ($this->match('[|-~\$\*\^=]+', $m)) {
+                                       $attrParts[] = $m[0];
+                                       continue;
+                               }
+
+                               break;
+                       }
+
+                       if ($this->literal("]", false)) {
+                               $attrParts[] = "]";
+                               foreach ($attrParts as $part) {
+                                       $parts[] = $part;
+                               }
+                               $hasExpression = $hasExpression || $hasInterpolation;
+                               return true;
+                       }
+                       $this->seek($s);
+               }
+
+               $this->seek($s);
+               return false;
+       }
+
+       // a space separated list of selectors
+       protected function tag(&$tag, $simple = false) {
+               if ($simple)
+                       $chars = '^@,:;{}\][>\(\) "\'';
+               else
+                       $chars = '^@,;{}["\'';
+
+               $s = $this->seek();
+
+               $hasExpression = false;
+               $parts = array();
+               while ($this->tagBracket($parts, $hasExpression));
+
+               $oldWhite = $this->eatWhiteDefault;
+               $this->eatWhiteDefault = false;
+
+               while (true) {
+                       if ($this->match('(['.$chars.'0-9]['.$chars.']*)', $m)) {
+                               $parts[] = $m[1];
+                               if ($simple) break;
+
+                               while ($this->tagBracket($parts, $hasExpression));
+                               continue;
+                       }
+
+                       if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] == "@") {
+                               if ($this->interpolation($interp)) {
+                                       $hasExpression = true;
+                                       $interp[2] = true; // don't unescape
+                                       $parts[] = $interp;
+                                       continue;
+                               }
+
+                               if ($this->literal("@")) {
+                                       $parts[] = "@";
+                                       continue;
+                               }
+                       }
+
+                       if ($this->unit($unit)) { // for keyframes
+                               $parts[] = $unit[1];
+                               $parts[] = $unit[2];
+                               continue;
+                       }
+
+                       break;
+               }
+
+               $this->eatWhiteDefault = $oldWhite;
+               if (!$parts) {
+                       $this->seek($s);
+                       return false;
+               }
+
+               if ($hasExpression) {
+                       $tag = array("exp", array("string", "", $parts));
+               } else {
+                       $tag = trim(implode($parts));
+               }
+
+               $this->whitespace();
+               return true;
+       }
+
+       // a css function
+       protected function func(&$func) {
+               $s = $this->seek();
+
+               if ($this->match('(%|[\w\-_][\w\-_:\.]+|[\w_])', $m) && $this->literal('(')) {
+                       $fname = $m[1];
+
+                       $sPreArgs = $this->seek();
+
+                       $args = array();
+                       while (true) {
+                               $ss = $this->seek();
+                               // this ugly nonsense is for ie filter properties
+                               if ($this->keyword($name) && $this->literal('=') && $this->expressionList($value)) {
+                                       $args[] = array("string", "", array($name, "=", $value));
+                               } else {
+                                       $this->seek($ss);
+                                       if ($this->expressionList($value)) {
+                                               $args[] = $value;
+                                       }
+                               }
+
+                               if (!$this->literal(',')) break;
+                       }
+                       $args = array('list', ',', $args);
+
+                       if ($this->literal(')')) {
+                               $func = array('function', $fname, $args);
+                               return true;
+                       } elseif ($fname == 'url') {
+                               // couldn't parse and in url? treat as string
+                               $this->seek($sPreArgs);
+                               if ($this->openString(")", $string) && $this->literal(")")) {
+                                       $func = array('function', $fname, $string);
+                                       return true;
+                               }
+                       }
+               }
+
+               $this->seek($s);
+               return false;
+       }
+
+       // consume a less variable
+       protected function variable(&$name) {
+               $s = $this->seek();
+               if ($this->literal($this->lessc->vPrefix, false) &&
+                       ($this->variable($sub) || $this->keyword($name)))
+               {
+                       if (!empty($sub)) {
+                               $name = array('variable', $sub);
+                       } else {
+                               $name = $this->lessc->vPrefix.$name;
+                       }
+                       return true;
+               }
+
+               $name = null;
+               $this->seek($s);
+               return false;
+       }
+
+       /**
+        * Consume an assignment operator
+        * Can optionally take a name that will be set to the current property name
+        */
+       protected function assign($name = null) {
+               if ($name) $this->currentProperty = $name;
+               return $this->literal(':') || $this->literal('=');
+       }
+
+       // consume a keyword
+       protected function keyword(&$word) {
+               if ($this->match('([\w_\-\*!"][\w\-_"]*)', $m)) {
+                       $word = $m[1];
+                       return true;
+               }
+               return false;
+       }
+
+       // consume an end of statement delimiter
+       protected function end() {
+               if ($this->literal(';', false)) {
+                       return true;
+               } elseif ($this->count == strlen($this->buffer) || $this->buffer[$this->count] == '}') {
+                       // if there is end of file or a closing block next then we don't need a ;
+                       return true;
+               }
+               return false;
+       }
+
+       protected function guards(&$guards) {
+               $s = $this->seek();
+
+               if (!$this->literal("when")) {
+                       $this->seek($s);
+                       return false;
+               }
+
+               $guards = array();
+
+               while ($this->guardGroup($g)) {
+                       $guards[] = $g;
+                       if (!$this->literal(",")) break;
+               }
+
+               if (count($guards) == 0) {
+                       $guards = null;
+                       $this->seek($s);
+                       return false;
+               }
+
+               return true;
+       }
+
+       // a bunch of guards that are and'd together
+       // TODO rename to guardGroup
+       protected function guardGroup(&$guardGroup) {
+               $s = $this->seek();
+               $guardGroup = array();
+               while ($this->guard($guard)) {
+                       $guardGroup[] = $guard;
+                       if (!$this->literal("and")) break;
+               }
+
+               if (count($guardGroup) == 0) {
+                       $guardGroup = null;
+                       $this->seek($s);
+                       return false;
+               }
+
+               return true;
+       }
+
+       protected function guard(&$guard) {
+               $s = $this->seek();
+               $negate = $this->literal("not");
+
+               if ($this->literal("(") && $this->expression($exp) && $this->literal(")")) {
+                       $guard = $exp;
+                       if ($negate) $guard = array("negate", $guard);
+                       return true;
+               }
+
+               $this->seek($s);
+               return false;
+       }
+
+       /* raw parsing functions */
+
+       protected function literal($what, $eatWhitespace = null) {
+               if ($eatWhitespace === null) $eatWhitespace = $this->eatWhiteDefault;
+
+               // shortcut on single letter
+               if (!isset($what[1]) && isset($this->buffer[$this->count])) {
+                       if ($this->buffer[$this->count] == $what) {
+                               if (!$eatWhitespace) {
+                                       $this->count++;
+                                       return true;
+                               }
+                               // goes below...
+                       } else {
+                               return false;
+                       }
+               }
+
+               if (!isset(self::$literalCache[$what])) {
+                       self::$literalCache[$what] = lessc::preg_quote($what);
+               }
+
+               return $this->match(self::$literalCache[$what], $m, $eatWhitespace);
+       }
+
+       protected function genericList(&$out, $parseItem, $delim="", $flatten=true) {
+               $s = $this->seek();
+               $items = array();
+               while ($this->$parseItem($value)) {
+                       $items[] = $value;
+                       if ($delim) {
+                               if (!$this->literal($delim)) break;
+                       }
+               }
+
+               if (count($items) == 0) {
+                       $this->seek($s);
+                       return false;
+               }
+
+               if ($flatten && count($items) == 1) {
+                       $out = $items[0];
+               } else {
+                       $out = array("list", $delim, $items);
+               }
+
+               return true;
+       }
+
+
+       // advance counter to next occurrence of $what
+       // $until - don't include $what in advance
+       // $allowNewline, if string, will be used as valid char set
+       protected function to($what, &$out, $until = false, $allowNewline = false) {
+               if (is_string($allowNewline)) {
+                       $validChars = $allowNewline;
+               } else {
+                       $validChars = $allowNewline ? "." : "[^\n]";
+               }
+               if (!$this->match('('.$validChars.'*?)'.lessc::preg_quote($what), $m, !$until)) return false;
+               if ($until) $this->count -= strlen($what); // give back $what
+               $out = $m[1];
+               return true;
+       }
+
+       // try to match something on head of buffer
+       protected function match($regex, &$out, $eatWhitespace = null) {
+               if ($eatWhitespace === null) $eatWhitespace = $this->eatWhiteDefault;
+
+               $r = '/'.$regex.($eatWhitespace && !$this->writeComments ? '\s*' : '').'/Ais';
+               if (preg_match($r, $this->buffer, $out, null, $this->count)) {
+                       $this->count += strlen($out[0]);
+                       if ($eatWhitespace && $this->writeComments) $this->whitespace();
+                       return true;
+               }
+               return false;
+       }
+
+       // match some whitespace
+       protected function whitespace() {
+               if ($this->writeComments) {
+                       $gotWhite = false;
+                       while (preg_match(self::$whitePattern, $this->buffer, $m, null, $this->count)) {
+                               if (isset($m[1]) && empty($this->seenComments[$this->count])) {
+                                       $this->append(array("comment", $m[1]));
+                                       $this->seenComments[$this->count] = true;
+                               }
+                               $this->count += strlen($m[0]);
+                               $gotWhite = true;
+                       }
+                       return $gotWhite;
+               } else {
+                       $this->match("", $m);
+                       return strlen($m[0]) > 0;
+               }
+       }
+
+       // match something without consuming it
+       protected function peek($regex, &$out = null, $from=null) {
+               if (is_null($from)) $from = $this->count;
+               $r = '/'.$regex.'/Ais';
+               $result = preg_match($r, $this->buffer, $out, null, $from);
+
+               return $result;
+       }
+
+       // seek to a spot in the buffer or return where we are on no argument
+       protected function seek($where = null) {
+               if ($where === null) return $this->count;
+               else $this->count = $where;
+               return true;
+       }
+
+       /* misc functions */
+
+       public function throwError($msg = "parse error", $count = null) {
+               $count = is_null($count) ? $this->count : $count;
+
+               $line = $this->line +
+                       substr_count(substr($this->buffer, 0, $count), "\n");
+
+               if (!empty($this->sourceName)) {
+                       $loc = "$this->sourceName on line $line";
+               } else {
+                       $loc = "line: $line";
+               }
+
+               // TODO this depends on $this->count
+               if ($this->peek("(.*?)(\n|$)", $m, $count)) {
+                       throw new exception("$msg: failed at `$m[1]` $loc");
+               } else {
+                       throw new exception("$msg: $loc");
+               }
+       }
+
+       protected function pushBlock($selectors=null, $type=null) {
+               $b = new stdclass;
+               $b->parent = $this->env;
+
+               $b->type = $type;
+               $b->id = self::$nextBlockId++;
+
+               $b->isVararg = false; // TODO: kill me from here
+               $b->tags = $selectors;
+
+               $b->props = array();
+               $b->children = array();
+
+               $this->env = $b;
+               return $b;
+       }
+
+       // push a block that doesn't multiply tags
+       protected function pushSpecialBlock($type) {
+               return $this->pushBlock(null, $type);
+       }
+
+       // append a property to the current block
+       protected function append($prop, $pos = null) {
+               if ($pos !== null) $prop[-1] = $pos;
+               $this->env->props[] = $prop;
+       }
+
+       // pop something off the stack
+       protected function pop() {
+               $old = $this->env;
+               $this->env = $this->env->parent;
+               return $old;
+       }
+
+       // remove comments from $text
+       // todo: make it work for all functions, not just url
+       protected function removeComments($text) {
+               $look = array(
+                       'url(', '//', '/*', '"', "'"
+               );
+
+               $out = '';
+               $min = null;
+               while (true) {
+                       // find the next item
+                       foreach ($look as $token) {
+                               $pos = strpos($text, $token);
+                               if ($pos !== false) {
+                                       if (!isset($min) || $pos < $min[1]) $min = array($token, $pos);
+                               }
+                       }
+
+                       if (is_null($min)) break;
+
+                       $count = $min[1];
+                       $skip = 0;
+                       $newlines = 0;
+                       switch ($min[0]) {
+                       case 'url(':
+                               if (preg_match('/url\(.*?\)/', $text, $m, 0, $count))
+                                       $count += strlen($m[0]) - strlen($min[0]);
+                               break;
+                       case '"':
+                       case "'":
+                               if (preg_match('/'.$min[0].'.*?(?<!\\\\)'.$min[0].'/', $text, $m, 0, $count))
+                                       $count += strlen($m[0]) - 1;
+                               break;
+                       case '//':
+                               $skip = strpos($text, "\n", $count);
+                               if ($skip === false) $skip = strlen($text) - $count;
+                               else $skip -= $count;
+                               break;
+                       case '/*':
+                               if (preg_match('/\/\*.*?\*\//s', $text, $m, 0, $count)) {
+                                       $skip = strlen($m[0]);
+                                       $newlines = substr_count($m[0], "\n");
+                               }
+                               break;
+                       }
+
+                       if ($skip == 0) $count += strlen($min[0]);
+
+                       $out .= substr($text, 0, $count).str_repeat("\n", $newlines);
+                       $text = substr($text, $count + $skip);
+
+                       $min = null;
+               }
+
+               return $out.$text;
+       }
+
+}
+
+class lessc_formatter_classic {
+       public $indentChar = "  ";
+
+       public $break = "\n";
+       public $open = " {";
+       public $close = "}";
+       public $selectorSeparator = ", ";
+       public $assignSeparator = ":";
+
+       public $openSingle = " { ";
+       public $closeSingle = " }";
+
+       public $disableSingle = false;
+       public $breakSelectors = false;
+
+       public $compressColors = false;
+
+       public function __construct() {
+               $this->indentLevel = 0;
+       }
+
+       public function indentStr($n = 0) {
+               return str_repeat($this->indentChar, max($this->indentLevel + $n, 0));
+       }
+
+       public function property($name, $value) {
+               return $name . $this->assignSeparator . $value . ";";
+       }
+
+       protected function isEmpty($block) {
+               if (empty($block->lines)) {
+                       foreach ($block->children as $child) {
+                               if (!$this->isEmpty($child)) return false;
+                       }
+
+                       return true;
+               }
+               return false;
+       }
+
+       public function block($block) {
+               if ($this->isEmpty($block)) return;
+
+               $inner = $pre = $this->indentStr();
+
+               $isSingle = !$this->disableSingle &&
+                       is_null($block->type) && count($block->lines) == 1;
+
+               if (!empty($block->selectors)) {
+                       $this->indentLevel++;
+
+                       if ($this->breakSelectors) {
+                               $selectorSeparator = $this->selectorSeparator . $this->break . $pre;
+                       } else {
+                               $selectorSeparator = $this->selectorSeparator;
+                       }
+
+                       echo $pre .
+                               implode($selectorSeparator, $block->selectors);
+                       if ($isSingle) {
+                               echo $this->openSingle;
+                               $inner = "";
+                       } else {
+                               echo $this->open . $this->break;
+                               $inner = $this->indentStr();
+                       }
+
+               }
+
+               if (!empty($block->lines)) {
+                       $glue = $this->break.$inner;
+                       echo $inner . implode($glue, $block->lines);
+                       if (!$isSingle && !empty($block->children)) {
+                               echo $this->break;
+                       }
+               }
+
+               foreach ($block->children as $child) {
+                       $this->block($child);
+               }
+
+               if (!empty($block->selectors)) {
+                       if (!$isSingle && empty($block->children)) echo $this->break;
+
+                       if ($isSingle) {
+                               echo $this->closeSingle . $this->break;
+                       } else {
+                               echo $pre . $this->close . $this->break;
+                       }
+
+                       $this->indentLevel--;
+               }
+       }
+}
+
+class lessc_formatter_compressed extends lessc_formatter_classic {
+       public $disableSingle = true;
+       public $open = "{";
+       public $selectorSeparator = ",";
+       public $assignSeparator = ":";
+       public $break = "";
+       public $compressColors = true;
+
+       public function indentStr($n = 0) {
+               return "";
+       }
+}
+
+class lessc_formatter_lessjs extends lessc_formatter_classic {
+       public $disableSingle = true;
+       public $breakSelectors = true;
+       public $assignSeparator = ": ";
+       public $selectorSeparator = ",";
+}
+
+
index 3fb7b89..09ae3b8 100644 (file)
@@ -249,20 +249,10 @@ class LogPager extends ReverseChronologicalPager {
                                # no duplicate log rows. Otherwise, we need to remove the duplicates.
                                $options[] = 'DISTINCT';
                        }
-               # Avoid usage of the wrong index by limiting
-               # the choices of available indexes. This mainly
-               # avoids site-breaking filesorts.
-               } elseif ( $this->title || $this->pattern || $this->performer ) {
-                       $index['logging'] = array( 'page_time', 'user_time' );
-                       if ( count( $this->types ) == 1 ) {
-                               $index['logging'][] = 'log_user_type_time';
-                       }
-               } elseif ( count( $this->types ) == 1 ) {
-                       $index['logging'] = 'type_time';
-               } else {
-                       $index['logging'] = 'times';
                }
-               $options['USE INDEX'] = $index;
+               if ( count( $index ) ) {
+                       $options['USE INDEX'] = $index;
+               }
                # Don't show duplicate rows when using log_search
                $joins['log_search'] = array( 'INNER JOIN', 'ls_log_id=log_id' );
 
index 9f7a09c..e2444a1 100644 (file)
@@ -99,17 +99,6 @@ class BitmapHandler extends ImageHandler {
                return array( $width, $height );
        }
 
-       /**
-        * Function that returns the number of pixels to be thumbnailed.
-        * Intended for animated GIFs to multiply by the number of frames.
-        *
-        * @param File $image
-        * @return int
-        */
-       function getImageArea( $image ) {
-               return $image->getWidth() * $image->getHeight();
-       }
-
        /**
         * @param $image File
         * @param  $dstPath
@@ -357,12 +346,12 @@ class BitmapHandler extends ImageHandler {
                        " -depth 8 $sharpen " .
                        " -rotate -$rotation " .
                        " {$animation_post} " .
-                       wfEscapeShellArg( $this->escapeMagickOutput( $params['dstPath'] ) ) . " 2>&1";
+                       wfEscapeShellArg( $this->escapeMagickOutput( $params['dstPath'] ) );
 
                wfDebug( __METHOD__ . ": running ImageMagick: $cmd\n" );
                wfProfileIn( 'convert' );
                $retval = 0;
-               $err = wfShellExec( $cmd, $retval, $env );
+               $err = wfShellExecWithStderr( $cmd, $retval, $env );
                wfProfileOut( 'convert' );
 
                if ( $retval !== 0 ) {
@@ -472,7 +461,7 @@ class BitmapHandler extends ImageHandler {
                wfDebug( __METHOD__ . ": Running custom convert command $cmd\n" );
                wfProfileIn( 'convert' );
                $retval = 0;
-               $err = wfShellExec( $cmd, $retval );
+               $err = wfShellExecWithStderr( $cmd, $retval );
                wfProfileOut( 'convert' );
 
                if ( $retval !== 0 ) {
@@ -712,24 +701,6 @@ class BitmapHandler extends ImageHandler {
                imagejpeg( $dst_image, $thumbPath, 95 );
        }
 
-       /**
-        * On supporting image formats, try to read out the low-level orientation
-        * of the file and return the angle that the file needs to be rotated to
-        * be viewed.
-        *
-        * This information is only useful when manipulating the original file;
-        * the width and height we normally work with is logical, and will match
-        * any produced output views.
-        *
-        * The base BitmapHandler doesn't understand any metadata formats, so this
-        * is left up to child classes to implement.
-        *
-        * @param $file File
-        * @return int 0, 90, 180 or 270
-        */
-       public function getRotation( $file ) {
-               return 0;
-       }
 
        /**
         * Returns whether the current scaler supports rotation (im and gd do)
@@ -774,11 +745,11 @@ class BitmapHandler extends ImageHandler {
                                $cmd = wfEscapeShellArg( $wgImageMagickConvertCommand ) . " " .
                                        wfEscapeShellArg( $this->escapeMagickInput( $params['srcPath'], $scene ) ) .
                                        " -rotate -$rotation " .
-                                       wfEscapeShellArg( $this->escapeMagickOutput( $params['dstPath'] ) ) . " 2>&1";
+                                       wfEscapeShellArg( $this->escapeMagickOutput( $params['dstPath'] ) );
                                wfDebug( __METHOD__ . ": running ImageMagick: $cmd\n" );
                                wfProfileIn( 'convert' );
                                $retval = 0;
-                               $err = wfShellExec( $cmd, $retval, $env );
+                               $err = wfShellExecWithStderr( $cmd, $retval, $env );
                                wfProfileOut( 'convert' );
                                if ( $retval !== 0 ) {
                                        $this->logErrorForExternalProcess( $retval, $err, $cmd );
index 8e46f2f..e079003 100644 (file)
@@ -200,6 +200,19 @@ abstract class ImageHandler extends MediaHandler {
                wfRestoreWarnings();
                return $gis;
        }
+       /**
+        * Function that returns the number of pixels to be thumbnailed.
+        * Intended for animated GIFs to multiply by the number of frames.
+        *
+        * If the file doesn't support a notion of "area" return 0.
+        *
+        * @param File $image
+        * @return int
+        */
+       function getImageArea( $image ) {
+               return $image->getWidth() * $image->getHeight();
+       }
+
 
        /**
         * @param $file File
index 1feb378..fa76366 100644 (file)
@@ -75,11 +75,11 @@ class JpegHandler extends ExifBitmapHandler {
                        $cmd = wfEscapeShellArg( $wgJpegTran ) .
                                " -rotate " . wfEscapeShellArg( $rotation ) .
                                " -outfile " . wfEscapeShellArg( $params['dstPath'] ) .
-                               " " . wfEscapeShellArg( $params['srcPath'] ) . " 2>&1";
+                               " " . wfEscapeShellArg( $params['srcPath'] );
                        wfDebug( __METHOD__ . ": running jpgtran: $cmd\n" );
                        wfProfileIn( 'jpegtran' );
                        $retval = 0;
-                       $err = wfShellExec( $cmd, $retval, $env );
+                       $err = wfShellExecWithStderr( $cmd, $retval, $env );
                        wfProfileOut( 'jpegtran' );
                        if ( $retval !== 0 ) {
                                $this->logErrorForExternalProcess( $retval, $err, $cmd );
index 2e8d41d..779e23c 100644 (file)
@@ -79,13 +79,15 @@ abstract class MediaHandler {
         * Merge a parameter array into a string appropriate for inclusion in filenames
         *
         * @param $params array Array of parameters that have been through normaliseParams.
+        * @return String
         */
        abstract function makeParamString( $params );
 
        /**
         * Parse a param string made with makeParamString back into an array
         *
-        * @param $str string
+        * @param $str string The parameter string without file name (e.g. 122px)
+        * @return Array|Boolean Array of parameters or false on failure.
         */
        abstract function parseParamString( $str );
 
@@ -643,4 +645,23 @@ abstract class MediaHandler {
        public static function canRotate() {
                return false;
        }
+
+       /**
+        * On supporting image formats, try to read out the low-level orientation
+        * of the file and return the angle that the file needs to be rotated to
+        * be viewed.
+        *
+        * This information is only useful when manipulating the original file;
+        * the width and height we normally work with is logical, and will match
+        * any produced output views.
+        *
+        * For files we don't know, we return 0.
+        *
+        * @param $file File
+        * @return int 0, 90, 180 or 270
+        */
+       public function getRotation( $file ) {
+               return 0;
+       }
+
 }
index 4c055a5..72a9696 100644 (file)
@@ -177,7 +177,7 @@ class SvgHandler extends ImageHandler {
                                                wfEscapeShellArg( $srcPath ),
                                                wfEscapeShellArg( $dstPath ) ),
                                        $wgSVGConverters[$wgSVGConverter]
-                               ) . " 2>&1";
+                               );
 
                                $env = array();
                                if ( $lang !== false ) {
@@ -186,7 +186,7 @@ class SvgHandler extends ImageHandler {
 
                                wfProfileIn( 'rsvg' );
                                wfDebug( __METHOD__ . ": $cmd\n" );
-                               $err = wfShellExec( $cmd, $retval, $env );
+                               $err = wfShellExecWithStderr( $cmd, $retval, $env );
                                wfProfileOut( 'rsvg' );
                        }
                }
index 8df0e2c..70a94fe 100644 (file)
@@ -719,13 +719,7 @@ class CoreParserFunctions {
                $page = $title->getPrefixedText();
 
                $length = 0;
-               if ( $title->equals( $parser->getTitle() )
-                       && $parser->mInputSize !== false
-               ) {
-                       # We are on current page (and not in PST), so
-                       # take length of input to parser.
-                       $length = $parser->mInputSize;
-               } elseif ( isset( $cache[$page] ) ) {
+               if ( isset( $cache[$page] ) ) {
                        $length = $cache[$page];
                } elseif ( $parser->incrementExpensiveFunctionCount() ) {
                        $rev = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
index 170148c..eac2202 100644 (file)
@@ -191,6 +191,7 @@ class Parser {
        var $mRevisionId;   # ID to display in {{REVISIONID}} tags
        var $mRevisionTimestamp; # The timestamp of the specified revision ID
        var $mRevisionUser; # User to display in {{REVISIONUSER}} tag
+       var $mRevisionSize; # Size to display in {{REVISIONSIZE}} variable
        var $mRevIdForTs;   # The revision ID which was used to fetch the timestamp
        var $mInputSize = false; # For {{PAGESIZE}} on current page.
 
@@ -292,7 +293,7 @@ class Parser {
                $this->mLinkHolders = new LinkHolderArray( $this );
                $this->mLinkID = 0;
                $this->mRevisionObject = $this->mRevisionTimestamp =
-                       $this->mRevisionId = $this->mRevisionUser = null;
+                       $this->mRevisionId = $this->mRevisionUser = $this->mRevisionSize = null;
                $this->mVarCache = array();
                $this->mUser = null;
                $this->mLangLinkLanguages = array();
@@ -375,11 +376,13 @@ class Parser {
                $oldRevisionObject = $this->mRevisionObject;
                $oldRevisionTimestamp = $this->mRevisionTimestamp;
                $oldRevisionUser = $this->mRevisionUser;
+               $oldRevisionSize = $this->mRevisionSize;
                if ( $revid !== null ) {
                        $this->mRevisionId = $revid;
                        $this->mRevisionObject = null;
                        $this->mRevisionTimestamp = null;
                        $this->mRevisionUser = null;
+                       $this->mRevisionSize = null;
                }
 
                wfRunHooks( 'ParserBeforeStrip', array( &$this, &$text, &$this->mStripState ) );
@@ -566,6 +569,7 @@ class Parser {
                $this->mRevisionObject = $oldRevisionObject;
                $this->mRevisionTimestamp = $oldRevisionTimestamp;
                $this->mRevisionUser = $oldRevisionUser;
+               $this->mRevisionSize = $oldRevisionSize;
                $this->mInputSize = false;
                wfProfileOut( $fname );
                wfProfileOut( __METHOD__ );
@@ -1414,7 +1418,8 @@ class Parser {
         */
        public function doQuotes( $text ) {
                $arr = preg_split( "/(''+)/", $text, -1, PREG_SPLIT_DELIM_CAPTURE );
-               if ( count( $arr ) == 1 ) {
+               $countarr = count( $arr );
+               if ( $countarr == 1 ) {
                        return $text;
                }
 
@@ -1423,26 +1428,29 @@ class Parser {
                // of bold and italics mark-ups.
                $numbold = 0;
                $numitalics = 0;
-               for ( $i = 1; $i < count( $arr ); $i += 2 ) {
+               for ( $i = 1; $i < $countarr; $i += 2 ) {
+                       $thislen = strlen( $arr[$i] );
                        // If there are ever four apostrophes, assume the first is supposed to
                        // be text, and the remaining three constitute mark-up for bold text.
                        // (bug 13227: ''''foo'''' turns into ' ''' foo ' ''')
-                       if ( strlen( $arr[$i] ) == 4 ) {
+                       if ( $thislen == 4 ) {
                                $arr[$i - 1] .= "'";
                                $arr[$i] = "'''";
-                       } elseif ( strlen( $arr[$i] ) > 5 ) {
+                               $thislen = 3;
+                       } elseif ( $thislen > 5 ) {
                                // If there are more than 5 apostrophes in a row, assume they're all
                                // text except for the last 5.
                                // (bug 13227: ''''''foo'''''' turns into ' ''''' foo ' ''''')
-                               $arr[$i - 1] .= str_repeat( "'", strlen( $arr[$i] ) - 5 );
+                               $arr[$i - 1] .= str_repeat( "'", $thislen - 5 );
                                $arr[$i] = "'''''";
+                               $thislen = 5;
                        }
                        // Count the number of occurrences of bold and italics mark-ups.
-                       if ( strlen( $arr[$i] ) == 2 ) {
+                       if ( $thislen == 2 ) {
                                $numitalics++;
-                       } elseif ( strlen( $arr[$i] ) == 3 ) {
+                       } elseif ( $thislen == 3 ) {
                                $numbold++;
-                       } elseif ( strlen( $arr[$i] ) == 5 ) {
+                       } elseif ( $thislen == 5 ) {
                                $numitalics++;
                                $numbold++;
                        }
@@ -1456,7 +1464,7 @@ class Parser {
                        $firstsingleletterword = -1;
                        $firstmultiletterword = -1;
                        $firstspace = -1;
-                       for ( $i = 1; $i < count( $arr ); $i += 2 ) {
+                       for ( $i = 1; $i < $countarr; $i += 2 ) {
                                if ( strlen( $arr[$i] ) == 3 ) {
                                        $x1 = substr( $arr[$i - 1], -1 );
                                        $x2 = substr( $arr[$i - 1], -2, 1 );
@@ -1467,6 +1475,9 @@ class Parser {
                                        } elseif ( $x2 === ' ' ) {
                                                if ( $firstsingleletterword == -1 ) {
                                                        $firstsingleletterword = $i;
+                                                       // if $firstsingleletterword is set, we don't
+                                                       // look at the other options, so we can bail early.
+                                                       break;
                                                }
                                        } else {
                                                if ( $firstmultiletterword == -1 ) {
@@ -1506,7 +1517,8 @@ class Parser {
                                        $output .= $r;
                                }
                        } else {
-                               if ( strlen( $r ) == 2 ) {
+                               $thislen = strlen( $r );
+                               if ( $thislen == 2 ) {
                                        if ( $state === 'i' ) {
                                                $output .= '</i>';
                                                $state = '';
@@ -1523,7 +1535,7 @@ class Parser {
                                                $output .= '<i>';
                                                $state .= 'i';
                                        }
-                               } elseif ( strlen( $r ) == 3 ) {
+                               } elseif ( $thislen == 3 ) {
                                        if ( $state === 'b' ) {
                                                $output .= '</b>';
                                                $state = '';
@@ -1540,7 +1552,7 @@ class Parser {
                                                $output .= '<b>';
                                                $state .= 'b';
                                        }
-                               } elseif ( strlen( $r ) == 5 ) {
+                               } elseif ( $thislen == 5 ) {
                                        if ( $state === 'b' ) {
                                                $output .= '</b><i>';
                                                $state = 'i';
@@ -2354,6 +2366,7 @@ class Parser {
                $this->mDTopen = $inBlockElem = false;
                $prefixLength = 0;
                $paragraphStack = false;
+               $inBlockquote = false;
 
                foreach ( $textLines as $oLine ) {
                        # Fix up $linestart
@@ -2447,10 +2460,10 @@ class Parser {
                                wfProfileIn( __METHOD__ . "-paragraph" );
                                # No prefix (not in list)--go to paragraph mode
                                # XXX: use a stack for nestable elements like span, table and div
-                               $openmatch = preg_match( '/(?:<table|<blockquote|<h1|<h2|<h3|<h4|<h5|<h6|<pre|<tr|<p|<ul|<ol|<dl|<li|<\\/tr|<\\/td|<\\/th)/iS', $t );
+                               $openmatch = preg_match( '/(?:<table|<h1|<h2|<h3|<h4|<h5|<h6|<pre|<tr|<p|<ul|<ol|<dl|<li|<\\/tr|<\\/td|<\\/th)/iS', $t );
                                $closematch = preg_match(
-                                       '/(?:<\\/table|<\\/blockquote|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6|' .
-                                       '<td|<th|<\\/?div|<hr|<\\/pre|<\\/p|' . $this->mUniqPrefix . '-pre|<\\/li|<\\/ul|<\\/ol|<\\/dl|<\\/?center)/iS', $t );
+                                       '/(?:<\\/table|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6|' .
+                                       '<td|<th|<\\/?blockquote|<\\/?div|<hr|<\\/pre|<\\/p|' . $this->mUniqPrefix . '-pre|<\\/li|<\\/ul|<\\/ol|<\\/dl|<\\/?center)/iS', $t );
                                if ( $openmatch or $closematch ) {
                                        $paragraphStack = false;
                                        # TODO bug 5718: paragraph closed
@@ -2458,9 +2471,14 @@ class Parser {
                                        if ( $preOpenMatch and !$preCloseMatch ) {
                                                $this->mInPre = true;
                                        }
+                                       $bqOffset = 0;
+                                       while ( preg_match( '/<(\\/?)blockquote[\s>]/i', $t, $bqMatch, PREG_OFFSET_CAPTURE, $bqOffset ) ) {
+                                               $inBlockquote = !$bqMatch[1][0]; // is this a close tag?
+                                               $bqOffset = $bqMatch[0][1] + strlen( $bqMatch[0][0] );
+                                       }
                                        $inBlockElem = !$closematch;
                                } elseif ( !$inBlockElem && !$this->mInPre ) {
-                                       if ( ' ' == substr( $t, 0, 1 ) and ( $this->mLastSection === 'pre' || trim( $t ) != '' ) ) {
+                                       if ( ' ' == substr( $t, 0, 1 ) and ( $this->mLastSection === 'pre' || trim( $t ) != '' ) and !$inBlockquote ) {
                                                # pre
                                                if ( $this->mLastSection !== 'pre' ) {
                                                        $paragraphStack = false;
@@ -2890,6 +2908,13 @@ class Parser {
                                wfDebug( __METHOD__ . ": {{REVISIONUSER}} used, setting vary-revision...\n" );
                                $value = $this->getRevisionUser();
                                break;
+                       case 'revisionsize':
+                               # Let the edit saving system know we should parse the page
+                               # *after* a revision ID has been assigned. This is for null edits.
+                               $this->mOutput->setFlag( 'vary-revision' );
+                               wfDebug( __METHOD__ . ": {{REVISIONSIZE}} used, setting vary-revision...\n" );
+                               $value = $this->getRevisionSize();
+                               break;
                        case 'namespace':
                                $value = str_replace( '_', ' ', $wgContLang->getNsText( $this->mTitle->getNamespace() ) );
                                break;
@@ -5789,6 +5814,27 @@ class Parser {
                return $this->mRevisionUser;
        }
 
+       /**
+        * Get the size of the revision
+        *
+        * @return int|null revision size
+        */
+       function getRevisionSize() {
+               if ( is_null( $this->mRevisionSize ) ) {
+                       $revObject = $this->getRevisionObject();
+
+                       # if this variable is subst: the revision id will be blank,
+                       # so just use the parser input size, because the own substituation
+                       # will change the size.
+                       if ( $revObject ) {
+                               $this->mRevisionSize = $revObject->getSize();
+                       } elseif ( $this->ot['wiki'] || $this->mOptions->getIsPreview() ) {
+                               $this->mRevisionSize = $this->mInputSize;
+                       }
+               }
+               return $this->mRevisionSize;
+       }
+
        /**
         * Mutator for $mDefaultSort
         *
index 7c5eeb4..7053f13 100644 (file)
@@ -223,19 +223,19 @@ class ParserCache {
         * @param $parserOutput ParserOutput
         * @param $article Article
         * @param $popts ParserOptions
+        * @param $cacheTime Time when the cache was generated
         */
-       public function save( $parserOutput, $article, $popts ) {
+       public function save( $parserOutput, $article, $popts, $cacheTime = null ) {
                $expire = $parserOutput->getCacheExpiry();
-
                if ( $expire > 0 ) {
-                       $now = wfTimestampNow();
+                       $cacheTime = $cacheTime ?: wfTimestampNow();
 
                        $optionsKey = new CacheTime;
                        $optionsKey->mUsedOptions = $parserOutput->getUsedOptions();
                        $optionsKey->updateCacheExpiry( $expire );
 
-                       $optionsKey->setCacheTime( $now );
-                       $parserOutput->setCacheTime( $now );
+                       $optionsKey->setCacheTime( $cacheTime );
+                       $parserOutput->setCacheTime( $cacheTime );
 
                        $optionsKey->setContainsOldMagic( $parserOutput->containsOldMagic() );
 
@@ -245,8 +245,8 @@ class ParserCache {
                        // Save the timestamp so that we don't have to load the revision row on view
                        $parserOutput->setTimestamp( $article->getTimestamp() );
 
-                       $parserOutput->mText .= "\n<!-- Saved in parser cache with key $parserOutputKey and timestamp $now -->\n";
-                       wfDebug( "Saved in parser cache with key $parserOutputKey and timestamp $now\n" );
+                       $parserOutput->mText .= "\n<!-- Saved in parser cache with key $parserOutputKey and timestamp $cacheTime\n -->\n";
+                       wfDebug( "Saved in parser cache with key $parserOutputKey and timestamp $cacheTime\n" );
 
                        // Save the parser output
                        $this->mMemc->set( $parserOutputKey, $parserOutput, $expire );
index dde0609..3138f48 100644 (file)
@@ -183,21 +183,21 @@ class Preprocessor_DOM implements Preprocessor {
                        $xml = UtfNormal::cleanUp( $xml );
                        // 1 << 19 == XML_PARSE_HUGE, needed so newer versions of libxml2 don't barf when the XML is >256 levels deep
                        $result = $dom->loadXML( $xml, 1 << 19 );
-                       if ( !$result ) {
-                               wfProfileOut( __METHOD__ . '-loadXML' );
-                               if ( $cacheable ) {
-                                       wfProfileOut( __METHOD__ . '-cacheable' );
-                               }
-                               wfProfileOut( __METHOD__ );
-                               throw new MWException( __METHOD__ . ' generated invalid XML' );
-                       }
                }
-               $obj = new PPNode_DOM( $dom->documentElement );
+               if ( $result ) {
+                       $obj = new PPNode_DOM( $dom->documentElement );
+               }
                wfProfileOut( __METHOD__ . '-loadXML' );
+
                if ( $cacheable ) {
                        wfProfileOut( __METHOD__ . '-cacheable' );
                }
+
                wfProfileOut( __METHOD__ );
+
+               if ( !$result ) {
+                       throw new MWException( __METHOD__ . ' generated invalid XML' );
+               }
                return $obj;
        }
 
index 9204763..0a1f3b1 100644 (file)
@@ -32,7 +32,7 @@ class ProfilerSimpleUDP extends ProfilerSimple {
        }
 
        public function logData() {
-               global $wgUDPProfilerHost, $wgUDPProfilerPort;
+               global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgUDPProfilerFormatString;
 
                $this->close();
 
@@ -57,7 +57,7 @@ class ProfilerSimpleUDP extends ProfilerSimple {
                                || !isset( $pfdata['real_sq'] ) ) {
                                continue;
                        }
-                       $pfline = sprintf( "%s %s %d %f %f %f %f %s\n", $this->getProfileID(), "-", $pfdata['count'],
+                       $pfline = sprintf( $wgUDPProfilerFormatString, $this->getProfileID(), $pfdata['count'],
                                $pfdata['cpu'], $pfdata['cpu_sq'], $pfdata['real'], $pfdata['real_sq'], $entry );
                        $length = strlen( $pfline );
                        /* printf("<!-- $pfline -->"); */
index ff3ea35..81390dc 100644 (file)
@@ -153,6 +153,7 @@ class ResourceLoader {
                $cache = wfGetCache( CACHE_ANYTHING );
                $cacheEntry = $cache->get( $key );
                if ( is_string( $cacheEntry ) ) {
+                       wfIncrStats( "rl-$filter-cache-hits" );
                        wfProfileOut( __METHOD__ );
                        return $cacheEntry;
                }
@@ -160,6 +161,7 @@ class ResourceLoader {
                $result = '';
                // Run the filter - we've already verified one of these will work
                try {
+                       wfIncrStats( "rl-$filter-cache-misses" );
                        switch ( $filter ) {
                                case 'minify-js':
                                        $result = JavaScriptMinifier::minify( $data,
@@ -177,6 +179,7 @@ class ResourceLoader {
                        // Save filtered text to Memcached
                        $cache->set( $key, $result );
                } catch ( Exception $exception ) {
+                       $exception->logException();
                        wfDebugLog( 'resourceloader', __METHOD__ . ": minification failed: $exception" );
                        $this->hasErrors = true;
                        // Return exception as a comment
@@ -474,6 +477,7 @@ class ResourceLoader {
                try {
                        $this->preloadModuleInfo( array_keys( $modules ), $context );
                } catch ( Exception $e ) {
+                       $e->logException();
                        wfDebugLog( 'resourceloader', __METHOD__ . ": preloading module info failed: $e" );
                        $this->hasErrors = true;
                        // Add exception to the output as a comment
@@ -493,6 +497,7 @@ class ResourceLoader {
                                // Calculate maximum modified time
                                $mtime = max( $mtime, $module->getModifiedTime( $context ) );
                        } catch ( Exception $e ) {
+                               $e->logException();
                                wfDebugLog( 'resourceloader', __METHOD__ . ": calculating maximum modified time failed: $e" );
                                $this->hasErrors = true;
                                // Add exception to the output as a comment
@@ -607,15 +612,7 @@ class ResourceLoader {
                                // See also http://bugs.php.net/bug.php?id=51579
                                // To work around this, we tear down all output buffering before
                                // sending the 304.
-                               // On some setups, ob_get_level() doesn't seem to go down to zero
-                               // no matter how often we call ob_get_clean(), so instead of doing
-                               // the more intuitive while ( ob_get_level() > 0 ) ob_get_clean();
-                               // we have to be safe here and avoid an infinite loop.
-                               // Caching the level is not an option, need to allow it to
-                               // shorten the loop on-the-fly (bug 46836)
-                               for ( $i = 0; $i < ob_get_level(); $i++ ) {
-                                       ob_end_clean();
-                               }
+                               wfResetOutputBuffers( /* $resetGzipEncoding = */ true );
 
                                header( 'HTTP/1.0 304 Not Modified' );
                                header( 'Status: 304 Not Modified' );
@@ -727,6 +724,7 @@ class ResourceLoader {
                        try {
                                $blobs = MessageBlobStore::get( $this, $modules, $context->getLanguage() );
                        } catch ( Exception $e ) {
+                               $e->logException();
                                wfDebugLog( 'resourceloader', __METHOD__ . ": pre-fetching blobs from MessageBlobStore failed: $e" );
                                $this->hasErrors = true;
                                // Add exception to the output as a comment
@@ -834,6 +832,7 @@ class ResourceLoader {
                                                break;
                                }
                        } catch ( Exception $e ) {
+                               $e->logException();
                                wfDebugLog( 'resourceloader', __METHOD__ . ": generating module package failed: $e" );
                                $this->hasErrors = true;
                                // Add exception to the output as a comment
@@ -1214,4 +1213,41 @@ class ResourceLoader {
        public static function isValidModuleName( $moduleName ) {
                return !preg_match( '/[|,!]/', $moduleName ) && strlen( $moduleName ) <= 255;
        }
+
+       /**
+        * Returns LESS compiler set up for use with MediaWiki
+        *
+        * @since 1.22
+        * @return lessc
+        */
+       public static function getLessCompiler() {
+               global $wgResourceLoaderLESSFunctions, $wgResourceLoaderLESSImportPaths;
+
+               $less = new lessc();
+               $less->setPreserveComments( true );
+               $less->setVariables( self::getLESSVars() );
+               $less->setImportDir( $wgResourceLoaderLESSImportPaths );
+               foreach ( $wgResourceLoaderLESSFunctions as $name => $func ) {
+                       $less->registerFunction( $name, $func );
+               }
+               return $less;
+       }
+
+       /**
+        * Get global LESS variables.
+        *
+        * $since 1.22
+        * @return array: Map of variable names to string CSS values.
+        */
+       public static function getLESSVars() {
+               global $wgResourceLoaderLESSVars;
+
+               static $lessVars = null;
+               if ( $lessVars === null ) {
+                       $lessVars = $wgResourceLoaderLESSVars;
+                       // Sort by key to ensure consistent hashing for cache lookups.
+                       ksort( $lessVars );
+               }
+               return $lessVars;
+       }
 }
index af533c6..c9c7e4e 100644 (file)
@@ -115,6 +115,12 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        protected $raw = false;
        protected $targets = array( 'desktop' );
 
+       /**
+        * Boolean: Whether getStyleURLsForDebug should return raw file paths,
+        * or return load.php urls
+        */
+       protected $hasGeneratedStyles = false;
+
        /**
         * Array: Cache for mtime
         * @par Usage:
@@ -259,8 +265,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        /**
         * Gets all scripts for a given context concatenated together.
         *
-        * @param $context ResourceLoaderContext: Context in which to generate script
-        * @return String: JavaScript code for $context
+        * @param ResourceLoaderContext $context Context in which to generate script
+        * @return string: JavaScript code for $context
         */
        public function getScript( ResourceLoaderContext $context ) {
                $files = $this->getScriptFiles( $context );
@@ -268,7 +274,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        }
 
        /**
-        * @param $context ResourceLoaderContext
+        * @param ResourceLoaderContext $context
         * @return array
         */
        public function getScriptURLsForDebug( ResourceLoaderContext $context ) {
@@ -289,7 +295,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        /**
         * Gets loader script.
         *
-        * @return String: JavaScript code to be added to startup module
+        * @return string: JavaScript code to be added to startup module
         */
        public function getLoaderScript() {
                if ( count( $this->loaderScripts ) == 0 ) {
@@ -301,8 +307,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        /**
         * Gets all styles for a given context concatenated together.
         *
-        * @param $context ResourceLoaderContext: Context in which to generate styles
-        * @return String: CSS code for $context
+        * @param ResourceLoaderContext $context Context in which to generate styles
+        * @return string: CSS code for $context
         */
        public function getStyles( ResourceLoaderContext $context ) {
                $styles = $this->readStyleFiles(
@@ -330,10 +336,17 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        }
 
        /**
-        * @param $context ResourceLoaderContext
+        * @param ResourceLoaderContext $context
         * @return array
         */
        public function getStyleURLsForDebug( ResourceLoaderContext $context ) {
+               if ( $this->hasGeneratedStyles ) {
+                       // Do the default behaviour of returning a url back to load.php
+                       // but with only=styles.
+                       return parent::getStyleURLsForDebug( $context );
+               }
+               // Our module consists entirely of real css files,
+               // in debug mode we can load those directly.
                $urls = array();
                foreach ( $this->getStyleFiles( $context ) as $mediaType => $list ) {
                        $urls[$mediaType] = array();
@@ -347,7 +360,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        /**
         * Gets list of message keys used by this module.
         *
-        * @return Array: List of message keys
+        * @return array: List of message keys
         */
        public function getMessages() {
                return $this->messages;
@@ -356,7 +369,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        /**
         * Gets the name of the group this module should be loaded in.
         *
-        * @return String: Group name
+        * @return string: Group name
         */
        public function getGroup() {
                return $this->group;
@@ -372,7 +385,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        /**
         * Gets list of names of modules this module depends on.
         *
-        * @return Array: List of module names
+        * @return array: List of module names
         */
        public function getDependencies() {
                return $this->dependencies;
@@ -394,9 +407,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * calculations on files relevant to the given language, skin and debug
         * mode.
         *
-        * @param $context ResourceLoaderContext: Context in which to calculate
+        * @param ResourceLoaderContext $context Context in which to calculate
         *     the modified time
-        * @return Integer: UNIX timestamp
+        * @return int: UNIX timestamp
         * @see ResourceLoaderModule::getFileDependencies
         */
        public function getModifiedTime( ResourceLoaderContext $context ) {
@@ -455,7 +468,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        /* Protected Methods */
 
        /**
-        * @param $path string
+        * @param string $path
         * @return string
         */
        protected function getLocalPath( $path ) {
@@ -463,21 +476,32 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        }
 
        /**
-        * @param $path string
+        * @param string $path
         * @return string
         */
        protected function getRemotePath( $path ) {
                return "{$this->remoteBasePath}/$path";
        }
 
+       /**
+        * Infer the stylesheet language from a stylesheet file path.
+        *
+        * @since 1.22
+        * @param string $path
+        * @return string: the stylesheet language name
+        */
+       public function getStyleSheetLang( $path ) {
+               return preg_match( '/\.less$/i', $path ) ? 'less' : 'css';
+       }
+
        /**
         * Collates file paths by option (where provided).
         *
         * @param array $list List of file paths in any combination of index/path
         *     or path/options pairs
         * @param string $option option name
-        * @param $default Mixed: default value if the option isn't set
-        * @return Array: List of file paths, collated by $option
+        * @param mixed $default default value if the option isn't set
+        * @return array: List of file paths, collated by $option
         */
        protected static function collateFilePathListByOption( array $list, $option, $default ) {
                $collatedFiles = array();
@@ -506,7 +530,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @param array $list List of lists to select from
         * @param string $key Key to look for in $map
         * @param string $fallback Key to look for in $list if $key doesn't exist
-        * @return Array: List of elements from $map which matched $key or $fallback,
+        * @return array: List of elements from $map which matched $key or $fallback,
         *     or an empty list in case of no match
         */
        protected static function tryForKey( array $list, $key, $fallback = null ) {
@@ -524,8 +548,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        /**
         * Gets a list of file paths for all scripts in this module, in order of propper execution.
         *
-        * @param $context ResourceLoaderContext: Context
-        * @return Array: List of file paths
+        * @param ResourceLoaderContext $context
+        * @return array: List of file paths
         */
        protected function getScriptFiles( ResourceLoaderContext $context ) {
                $files = array_merge(
@@ -543,8 +567,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        /**
         * Gets a list of file paths for all styles in this module, in order of propper inclusion.
         *
-        * @param $context ResourceLoaderContext: Context
-        * @return Array: List of file paths
+        * @param ResourceLoaderContext $context
+        * @return array: List of file paths
         */
        protected function getStyleFiles( ResourceLoaderContext $context ) {
                return array_merge_recursive(
@@ -555,12 +579,29 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                );
        }
 
+       /**
+        * Returns all style files used by this module
+        * @return array
+        */
+       public function getAllStyleFiles() {
+               $files = array();
+               foreach( (array)$this->styles as $key => $value ) {
+                       if ( is_array( $value ) ) {
+                               $path = $key;
+                       } else {
+                               $path = $value;
+                       }
+                       $files[] = $this->getLocalPath( $path );
+               }
+               return $files;
+       }
+
        /**
         * Gets the contents of a list of JavaScript files.
         *
         * @param array $scripts List of file paths to scripts to read, remap and concetenate
         * @throws MWException
-        * @return String: Concatenated and remapped JavaScript data from $scripts
+        * @return string: Concatenated and remapped JavaScript data from $scripts
         */
        protected function readScriptFiles( array $scripts ) {
                global $wgResourceLoaderValidateStaticJS;
@@ -591,9 +632,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @param array $styles List of media type/list of file paths pairs, to read, remap and
         * concetenate
         *
-        * @param $flip bool
+        * @param bool $flip
         *
-        * @return Array: List of concatenated and remapped CSS data from $styles,
+        * @return array: List of concatenated and remapped CSS data from $styles,
         *     keyed by media type
         */
        protected function readStyleFiles( array $styles, $flip ) {
@@ -620,9 +661,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * This method can be used as a callback for array_map()
         *
         * @param string $path File path of style file to read
-        * @param $flip bool
+        * @param bool $flip
         *
-        * @return String: CSS data in script file
+        * @return string: CSS data in script file
         * @throws MWException if the file doesn't exist
         */
        protected function readStyleFile( $path, $flip ) {
@@ -632,7 +673,14 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        wfDebugLog( 'resourceloader', $msg );
                        throw new MWException( $msg );
                }
-               $style = file_get_contents( $localPath );
+
+               if ( $this->getStyleSheetLang( $path ) === 'less' ) {
+                       $style = $this->compileLESSFile( $localPath );
+                       $this->hasGeneratedStyles = true;
+               } else {
+                       $style = file_get_contents( $localPath );
+               }
+
                if ( $flip ) {
                        $style = CSSJanus::transform( $style, true, false );
                }
@@ -655,7 +703,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
 
        /**
         * Get whether CSS for this module should be flipped
-        * @param $context ResourceLoaderContext
+        * @param ResourceLoaderContext $context
         * @return bool
         */
        public function getFlip( $context ) {
@@ -671,4 +719,82 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                return $this->targets;
        }
 
+       /**
+        * Generate a cache key for a LESS file.
+        *
+        * The cache key varies on the file name, the names and values of global
+        * LESS variables, and the value of $wgShowExceptionDetails. Varying on
+        * $wgShowExceptionDetails ensures the CSS comment indicating compilation
+        * failure shows the right level of detail.
+        *
+        * @since 1.22
+        * @param string $fileName File name of root LESS file.
+        * @return string: Cache key
+        */
+       protected static function getLESSCacheKey( $fileName ) {
+               global $wgShowExceptionDetails;
+
+               $vars = json_encode( ResourceLoader::getLESSVars() );
+               $hash = md5( $fileName . $vars );
+               return wfMemcKey( 'resourceloader', 'less', (string)$wgShowExceptionDetails, $hash );
+       }
+
+       /**
+        * Compile a LESS file into CSS.
+        *
+        * If invalid, returns replacement CSS source consisting of the compilation
+        * error message encoded as a comment. To save work, we cache a result object
+        * which comprises the compiled CSS and the names & mtimes of the files
+        * that were processed. lessphp compares the cached & current mtimes and
+        * recompiles as necessary.
+        *
+        * @since 1.22
+        * @param string $fileName File path of LESS source
+        * @return string: CSS source
+        */
+       protected function compileLESSFile( $fileName ) {
+               global $wgShowExceptionDetails;
+
+               $key = self::getLESSCacheKey( $fileName );
+               $cache = wfGetCache( CACHE_ANYTHING );
+
+               // The input to lessc. Either an associative array representing the
+               // cached results of a previous compilation, or the string file name if
+               // no cache result exists.
+               $source = $cache->get( $key );
+               if ( !is_array( $source ) || !isset( $source['root'] ) ) {
+                       $source = $fileName;
+               }
+
+               $compiler = ResourceLoader::getLessCompiler();
+               $expire = 0;
+               try {
+                       $result = $compiler->cachedCompile( $source );
+                       if ( !is_array( $result ) ) {
+                               throw new Exception( 'LESS compiler result has type ' . gettype( $result ) . '; array expected.' );
+                       }
+               } catch ( Exception $e ) {
+                       // The exception might have been caused by an imported file rather
+                       // than the root node. But we don't know which files were imported,
+                       // because compilation failed; we thus cannot rely on file mtime to
+                       // know when to reattempt compilation. Expire in 5 mins. instead.
+                       $expire = 300;
+                       wfDebugLog( 'resourceloader', __METHOD__ . ": $e" );
+                       $result = array();
+                       $result['root'] = $fileName;
+
+                       if ( $wgShowExceptionDetails ) {
+                               $result['compiled'] = ResourceLoader::makeComment( 'LESS error: ' . $e->getMessage() );
+                       } else {
+                               $result['compiled'] = ResourceLoader::makeComment( 'LESS stylesheet compilation failed. ' .
+                                       'Set "$wgShowExceptionDetails = true;" to show detailed debugging information.' );
+                       }
+
+                       $result['files'] = array( $fileName => self::safeFilemtime( $fileName ) );
+                       $result['updated'] = time();
+               }
+               $this->localFileRefs += array_keys( $result['files'] );
+               $cache->set( $key, $result, $expire );
+               return $result['compiled'];
+       }
 }
diff --git a/includes/resourceloader/ResourceLoaderLESSFunctions.php b/includes/resourceloader/ResourceLoaderLESSFunctions.php
new file mode 100644 (file)
index 0000000..c7570f6
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+/**
+ * PHP-provided functions for LESS; see docs for $wgResourceLoaderLESSFunctions
+ *
+ * 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
+ */
+
+class ResourceLoaderLESSFunctions {
+       /**
+        * Check if an image file reference is suitable for embedding.
+        * An image is embeddable if it (a) exists, (b) has a suitable MIME-type,
+        * (c) does not exceed IE<9 size limit of 32kb. This is a LESS predicate
+        * function; it returns a LESS boolean value and can thus be used as a
+        * mixin guard.
+        *
+        * @par Example:
+        * @code
+        *   .background-image(@url) when(embeddable(@url)) {
+        *       background-image: url(@url) !ie;
+        *   }
+        * @endcode
+        */
+       public static function embeddable( $frame, $less ) {
+               $base = pathinfo( $less->parser->sourceName, PATHINFO_DIRNAME );
+               $url = $frame[2][0];
+               $file = realpath( $base . '/' . $url );
+               return $less->toBool( $file
+                       && strpos( $url, '//' ) === false
+                       && filesize( $file ) < CSSMin::EMBED_SIZE_LIMIT
+                       && CSSMin::getMimeType( $file ) !== false );
+       }
+
+       /**
+        * Convert an image URI to a base64-encoded data URI.
+        *
+        * @par Example:
+        * @code
+        *   .fancy-button {
+        *       background-image: embed('../images/button-bg.png');
+        *   }
+        * @endcode
+        */
+       public static function embed( $frame, $less ) {
+               $base = pathinfo( $less->parser->sourceName, PATHINFO_DIRNAME );
+               $url = $frame[2][0];
+               $file = realpath( $base . '/' . $url );
+
+               $data = CSSMin::encodeImageAsDataURI( $file );
+               $less->addParsedFile( $file );
+               return 'url(' . $data . ')';
+       }
+}
index e840300..fa0fbf8 100644 (file)
@@ -75,9 +75,10 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
                return $this->language->separatorTransformTable();
        }
 
-
        /**
-        * Get all the dynamic data for the content language to an array
+        * Get all the dynamic data for the content language to an array.
+        *
+        * NOTE: Before calling this you HAVE to make sure $this->language is set.
         *
         * @return array
         */
@@ -105,26 +106,20 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
 
        /**
         * @param $context ResourceLoaderContext
-        * @return array|int|Mixed
+        * @return int: UNIX timestamp
         */
        public function getModifiedTime( ResourceLoaderContext $context ) {
-               $this->language = Language::factory( $context->getLanguage() );
-               $cache = wfGetCache( CACHE_ANYTHING );
-               $key = wfMemcKey( 'resourceloader', 'langdatamodule', 'changeinfo' );
+               return max( 1, $this->getHashMtime( $context ) );
+       }
 
-               $data = $this->getData();
-               $hash = md5( serialize( $data ) );
+       /**
+        * @param $context ResourceLoaderContext
+        * @return string: Hash
+        */
+       public function getModifiedHash( ResourceLoaderContext $context ) {
+               $this->language = Language::factory( $context->getLanguage() );
 
-               $result = $cache->get( $key );
-               if ( is_array( $result ) && $result['hash'] === $hash ) {
-                       return $result['timestamp'];
-               }
-               $timestamp = wfTimestamp();
-               $cache->set( $key, array(
-                       'hash' => $hash,
-                       'timestamp' => $timestamp,
-               ) );
-               return $timestamp;
+               return md5( serialize( $this->getData() ) );
        }
 
        /**
index 9847ac0..11264fc 100644 (file)
@@ -71,7 +71,7 @@ abstract class ResourceLoaderModule {
         * Get this module's name. This is set when the module is registered
         * with ResourceLoader::register()
         *
-        * @return Mixed: Name (string) or null if no name was set
+        * @return mixed: Name (string) or null if no name was set
         */
        public function getName() {
                return $this->name;
@@ -91,7 +91,7 @@ abstract class ResourceLoaderModule {
         * Get this module's origin. This is set when the module is registered
         * with ResourceLoader::register()
         *
-        * @return Int ResourceLoaderModule class constant, the subclass default
+        * @return int: ResourceLoaderModule class constant, the subclass default
         *     if not set manually
         */
        public function getOrigin() {
@@ -109,7 +109,7 @@ abstract class ResourceLoaderModule {
        }
 
        /**
-        * @param $context ResourceLoaderContext
+        * @param ResourceLoaderContext $context
         * @return bool
         */
        public function getFlip( $context ) {
@@ -122,8 +122,8 @@ abstract class ResourceLoaderModule {
         * Get all JS for this module for a given language and skin.
         * Includes all relevant JS except loader scripts.
         *
-        * @param $context ResourceLoaderContext: Context object
-        * @return String: JavaScript code
+        * @param ResourceLoaderContext $context
+        * @return string: JavaScript code
         */
        public function getScript( ResourceLoaderContext $context ) {
                // Stub, override expected
@@ -141,8 +141,8 @@ abstract class ResourceLoaderModule {
         * #2 is important to prevent an infinite loop, therefore this function
         * MUST return either an only= URL or a non-load.php URL.
         *
-        * @param $context ResourceLoaderContext: Context object
-        * @return Array of URLs
+        * @param ResourceLoaderContext $context
+        * @return array: Array of URLs
         */
        public function getScriptURLsForDebug( ResourceLoaderContext $context ) {
                $url = ResourceLoader::makeLoaderURL(
@@ -172,8 +172,8 @@ abstract class ResourceLoaderModule {
        /**
         * Get all CSS for this module for a given skin.
         *
-        * @param $context ResourceLoaderContext: Context object
-        * @return Array: List of CSS strings or array of CSS strings keyed by media type.
+        * @param ResourceLoaderContext $context
+        * @return array: List of CSS strings or array of CSS strings keyed by media type.
         *  like array( 'screen' => '.foo { width: 0 }' );
         *  or array( 'screen' => array( '.foo { width: 0 }' ) );
         */
@@ -188,8 +188,8 @@ abstract class ResourceLoaderModule {
         * the module, but file-based modules will want to override this to
         * load the files directly. See also getScriptURLsForDebug()
         *
-        * @param $context ResourceLoaderContext: Context object
-        * @return Array: array( mediaType => array( URL1, URL2, ... ), ... )
+        * @param ResourceLoaderContext $context
+        * @return array: array( mediaType => array( URL1, URL2, ... ), ... )
         */
        public function getStyleURLsForDebug( ResourceLoaderContext $context ) {
                $url = ResourceLoader::makeLoaderURL(
@@ -211,7 +211,7 @@ abstract class ResourceLoaderModule {
         *
         * To get a JSON blob with messages, use MessageBlobStore::get()
         *
-        * @return Array: List of message keys. Keys may occur more than once
+        * @return array: List of message keys. Keys may occur more than once
         */
        public function getMessages() {
                // Stub, override expected
@@ -221,7 +221,7 @@ abstract class ResourceLoaderModule {
        /**
         * Get the group this module is in.
         *
-        * @return String: Group name
+        * @return string: Group name
         */
        public function getGroup() {
                // Stub, override expected
@@ -231,7 +231,7 @@ abstract class ResourceLoaderModule {
        /**
         * Get the origin of this module. Should only be overridden for foreign modules.
         *
-        * @return String: Origin name, 'local' for local modules
+        * @return string: Origin name, 'local' for local modules
         */
        public function getSource() {
                // Stub, override expected
@@ -263,7 +263,7 @@ abstract class ResourceLoaderModule {
        /**
         * Get the loader JS for this module, if set.
         *
-        * @return Mixed: JavaScript loader code as a string or boolean false if no custom loader set
+        * @return mixed: JavaScript loader code as a string or boolean false if no custom loader set
         */
        public function getLoaderScript() {
                // Stub, override expected
@@ -278,7 +278,7 @@ abstract class ResourceLoaderModule {
         *
         * To add dependencies dynamically on the client side, use a custom
         * loader script, see getLoaderScript()
-        * @return Array: List of module names as strings
+        * @return array: List of module names as strings
         */
        public function getDependencies() {
                // Stub, override expected
@@ -288,7 +288,7 @@ abstract class ResourceLoaderModule {
        /**
         * Get target(s) for the module, eg ['desktop'] or ['desktop', 'mobile']
         *
-        * @return array of strings
+        * @return array: Array of strings
         */
        public function getTargets() {
                return $this->targets;
@@ -299,7 +299,7 @@ abstract class ResourceLoaderModule {
         * Currently these are only image files referenced by the module's CSS.
         *
         * @param string $skin Skin name
-        * @return Array: List of files
+        * @return array: List of files
         */
        public function getFileDependencies( $skin ) {
                // Try in-object cache first
@@ -335,7 +335,7 @@ abstract class ResourceLoaderModule {
         * Get the last modification timestamp of the message blob for this
         * module in a given language.
         * @param string $lang Language code
-        * @return Integer: UNIX timestamp, or 0 if the module doesn't have messages
+        * @return int: UNIX timestamp, or 0 if the module doesn't have messages
         */
        public function getMsgBlobMtime( $lang ) {
                if ( !isset( $this->msgBlobMtime[$lang] ) ) {
@@ -382,22 +382,67 @@ abstract class ResourceLoaderModule {
         * If you want this to happen, you'll need to call getMsgBlobMtime()
         * yourself and take its result into consideration.
         *
-        * @param $context ResourceLoaderContext: Context object
-        * @return Integer: UNIX timestamp
+        * NOTE: The mtime of the module's hash is NOT automatically included.
+        * If your module provides a getModifiedHash() method, you'll need to call getHashMtime()
+        * yourself and take its result into consideration.
+        *
+        * @param ResourceLoaderContext $context Context object
+        * @return integer UNIX timestamp
         */
        public function getModifiedTime( ResourceLoaderContext $context ) {
                // 0 would mean now
                return 1;
        }
 
+       /**
+        * Helper method for calculating when the module's hash (if it has one) changed.
+        *
+        * @param ResourceLoaderContext $context
+        * @return integer: UNIX timestamp or 0 if there is no hash provided
+        */
+       public function getHashMtime( ResourceLoaderContext $context ) {
+               $hash = $this->getModifiedHash( $context );
+               if ( !is_string( $hash ) ) {
+                       return 0;
+               }
+
+               $cache = wfGetCache( CACHE_ANYTHING );
+               $key = wfMemcKey( 'resourceloader', 'modulemodifiedhash', $this->getName() );
+
+               $data = $cache->get( $key );
+               if ( is_array( $data ) && $data['hash'] === $hash ) {
+                       // Hash is still the same, re-use the timestamp of when we first saw this hash.
+                       return $data['timestamp'];
+               }
+
+               $timestamp = wfTimestamp();
+               $cache->set( $key, array(
+                       'hash' => $hash,
+                       'timestamp' => $timestamp,
+               ) );
+
+               return $timestamp;
+       }
+
+       /**
+        * Get the last modification timestamp of the message blob for this
+        * module in a given language.
+        *
+        * @param ResourceLoaderContext $context
+        * @return string|null: Hash
+        */
+       public function getModifiedHash( ResourceLoaderContext $context ) {
+               return null;
+       }
+
        /**
         * Check whether this module is known to be empty. If a child class
         * has an easy and cheap way to determine that this module is
         * definitely going to be empty, it should override this method to
         * return true in that case. Callers may optimize the request for this
         * module away if this function returns true.
-        * @param $context ResourceLoaderContext: Context object
-        * @return Boolean
+        * @param ResourceLoaderContext $context
+        * @return bool
         */
        public function isKnownEmpty( ResourceLoaderContext $context ) {
                return false;
@@ -413,7 +458,7 @@ abstract class ResourceLoaderModule {
         *
         * @param string $fileName
         * @param string $contents
-        * @return string JS with the original, or a replacement error
+        * @return string: JS with the original, or a replacement error
         */
        protected function validateScriptFile( $fileName, $contents ) {
                global $wgResourceLoaderValidateJS;
index 861ff18..20f6e0b 100644 (file)
@@ -84,7 +84,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        'wgFormattedNamespaces' => $wgContLang->getFormattedNamespaces(),
                        'wgNamespaceIds' => $namespaceIds,
                        'wgSiteName' => $wgSitename,
-                       'wgFileExtensions' => array_values( $wgFileExtensions ),
+                       'wgFileExtensions' => array_values( array_unique( $wgFileExtensions ) ),
                        'wgDBname' => $wgDBname,
                        // This sucks, it is only needed on Special:Upload, but I could
                        // not find a way to add vars only for a certain module
@@ -95,6 +95,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        'wgCookiePrefix' => $wgCookiePrefix,
                        'wgResourceLoaderMaxQueryLength' => $wgResourceLoaderMaxQueryLength,
                        'wgCaseSensitiveNamespaces' => $caseSensitiveNamespaces,
+                       'wgLegalTitleChars' => Title::convertByteClassToUnicodeClass( Title::legalChars() ),
                );
 
                wfRunHooks( 'ResourceLoaderGetConfigVars', array( &$vars ) );
index 191286d..7185087 100644 (file)
@@ -41,6 +41,19 @@ class RevDel_RevisionList extends RevDel_List {
                return 'rev_id';
        }
 
+       public static function getRestriction() {
+               return 'deleterevision';
+       }
+
+       public static function getRevdelConstant() {
+               return Revision::DELETED_TEXT;
+       }
+
+       public static function suggestTarget( $target, array $ids ) {
+               $rev = Revision::newFromId( $ids[0] );
+               return $rev ? $rev->getTitle() : $target;
+       }
+
        /**
         * @param $db DatabaseBase
         * @return mixed
@@ -441,6 +454,14 @@ class RevDel_FileList extends RevDel_List {
                return 'oi_archive_name';
        }
 
+       public static function getRestriction() {
+               return 'deleterevision';
+       }
+
+       public static function getRevdelConstant() {
+               return File::DELETED_FILE;
+       }
+
        var $storeBatch, $deleteBatch, $cleanupBatch;
 
        /**
@@ -802,6 +823,28 @@ class RevDel_LogList extends RevDel_List {
                return 'log_id';
        }
 
+       public static function getRestriction() {
+               return 'deletelogentry';
+       }
+
+       public static function getRevdelConstant() {
+               return LogPage::DELETED_ACTION;
+       }
+
+       public static function suggestTarget( $target, array $ids ) {
+               $result = wfGetDB( DB_SLAVE )->select( 'logging',
+                       'log_type',
+                       array( 'log_id' => $ids ),
+                       __METHOD__,
+                       array( 'DISTINCT' )
+               );
+               if ( $result->numRows() == 1 ) {
+                       // If there's only one type, the target can be set to include it.
+                       return SpecialPage::getTitleFor( 'Log', $result->current()->log_type );
+               }
+               return SpecialPage::getTitleFor( 'Log' );
+       }
+
        /**
         * @param $db DatabaseBase
         * @return mixed
index 9ace35a..803467e 100644 (file)
@@ -37,12 +37,44 @@ abstract class RevDel_List extends RevisionListBase {
         * Get the DB field name associated with the ID list.
         * This used to populate the log_search table for finding log entries.
         * Override this function.
-        * @return null
+        * @return string|null
         */
        public static function getRelationType() {
                return null;
        }
 
+       /**
+        * Get the user right required for this list type
+        * Override this function.
+        * @since 1.22
+        * @return string|null
+        */
+       public static function getRestriction() {
+               return null;
+       }
+
+       /**
+        * Get the revision deletion constant for this list type
+        * Override this function.
+        * @since 1.22
+        * @return int|null
+        */
+       public static function getRevdelConstant() {
+               return null;
+       }
+
+       /**
+        * Suggest a target for the revision deletion
+        * Optionally override this function.
+        * @since 1.22
+        * @param Title|null $target User-supplied target
+        * @param array $ids
+        * @return Title|null
+        */
+       public static function suggestTarget( $target, array $ids ) {
+               return $target;
+       }
+
        /**
         * Set the visibility for the revisions in this list. Logging and
         * transactions are done here.
@@ -72,7 +104,7 @@ abstract class RevDel_List extends RevisionListBase {
 
                        $oldBits = $item->getBits();
                        // Build the actual new rev_deleted bitfield
-                       $newBits = SpecialRevisionDelete::extractBitfield( $bitPars, $oldBits );
+                       $newBits = RevisionDeleter::extractBitfield( $bitPars, $oldBits );
 
                        if ( $oldBits == $newBits ) {
                                $status->warning( 'revdelete-no-change', $item->formatDate(), $item->formatTime() );
@@ -203,7 +235,7 @@ abstract class RevDel_List extends RevisionListBase {
                // Actually add the deletion log entry
                $log = new LogPage( $logType );
                $logid = $log->addEntry( $this->getLogAction(), $params['title'],
-                       $params['comment'], $logParams );
+                       $params['comment'], $logParams, $this->getUser() );
                // Allow for easy searching of deletion log items for revision/log items
                $log->addRelations( $field, $params['ids'], $logid );
                $log->addRelations( 'target_author_id', $params['authorIds'], $logid );
index 2de19ac..dbcb3d7 100644 (file)
  */
 
 /**
- * Temporary b/c interface, collection of static functions.
- * @ingroup SpecialPage
+ * General controller for RevDel, used by both SpecialRevisiondelete and
+ * ApiRevisionDelete.
  * @ingroup RevisionDelete
  */
 class RevisionDeleter {
+       /** List of known revdel types, with their corresponding list classes */
+       private static $allowedTypes = array(
+               'revision' => 'RevDel_RevisionList',
+               'archive' => 'RevDel_ArchiveList',
+               'oldimage' => 'RevDel_FileList',
+               'filearchive' => 'RevDel_ArchivedFileList',
+               'logging' => 'RevDel_LogList',
+       );
+
+       /** Type map to support old log entries */
+       private static $deprecatedTypeMap = array(
+               'oldid' => 'revision',
+               'artimestamp' => 'archive',
+               'oldimage' => 'oldimage',
+               'fileid' => 'filearchive',
+               'logid' => 'logging',
+       );
+
+       /**
+        * Lists the valid possible types for revision deletion.
+        *
+        * @since 1.22
+        * @return array
+        */
+       public static function getTypes() {
+               return array_keys( self::$allowedTypes );
+       }
+
+       /**
+        * Gets the canonical type name, if any.
+        *
+        * @since 1.22
+        * @param string $typeName
+        * @return string|null
+        */
+       public static function getCanonicalTypeName( $typeName ) {
+               if ( isset( self::$deprecatedTypeMap[$typeName] ) ) {
+                       $typeName = self::$deprecatedTypeMap[$typeName];
+               }
+               return isset( self::$allowedTypes[$typeName] ) ? $typeName : null;
+       }
+
+       /**
+        * Instantiate the appropriate list class for a given list of IDs.
+        *
+        * @since 1.22
+        * @param string $typeName RevDel type, see RevisionDeleter::getTypes()
+        * @param IContextSource $context
+        * @param Title $title
+        * @param array $ids
+        * @return RevDel_List
+        */
+       public static function createList( $typeName, IContextSource $context, Title $title, array $ids ) {
+               $typeName = self::getCanonicalTypeName( $typeName );
+               if ( !$typeName ) {
+                       throw new MWException( __METHOD__ . ": Unknown RevDel type '$typeName'" );
+               }
+               return new self::$allowedTypes[$typeName]( $context, $title, $ids );
+       }
+
        /**
         * Checks for a change in the bitfield for a certain option and updates the
         * provided array accordingly.
@@ -86,20 +146,62 @@ class RevisionDeleter {
        /** Get DB field name for URL param...
         * Future code for other things may also track
         * other types of revision-specific changes.
+        * @param string $typeName
         * @return string One of log_id/rev_id/fa_id/ar_timestamp/oi_archive_name
         */
        public static function getRelationType( $typeName ) {
-               if ( isset( SpecialRevisionDelete::$deprecatedTypeMap[$typeName] ) ) {
-                       $typeName = SpecialRevisionDelete::$deprecatedTypeMap[$typeName];
+               $typeName = self::getCanonicalTypeName( $typeName );
+               if ( !$typeName ) {
+                       return null;
+               }
+               return call_user_func( array( self::$allowedTypes[$typeName], 'getRelationType' ) );
+       }
+
+       /**
+        * Get the user right required for the RevDel type
+        * @since 1.22
+        * @param string $typeName
+        * @return string User right
+        */
+       public static function getRestriction( $typeName ) {
+               $typeName = self::getCanonicalTypeName( $typeName );
+               if ( !$typeName ) {
+                       return null;
                }
-               if ( isset( SpecialRevisionDelete::$allowedTypes[$typeName] ) ) {
-                       $class = SpecialRevisionDelete::$allowedTypes[$typeName]['list-class'];
-                       return call_user_func( array( $class, 'getRelationType' ) );
-               } else {
+               return call_user_func( array( self::$allowedTypes[$typeName], 'getRestriction' ) );
+       }
+
+       /**
+        * Get the revision deletion constant for the RevDel type
+        * @since 1.22
+        * @param string $typeName
+        * @return int RevDel constant
+        */
+       public static function getRevdelConstant( $typeName ) {
+               $typeName = self::getCanonicalTypeName( $typeName );
+               if ( !$typeName ) {
                        return null;
                }
+               return call_user_func( array( self::$allowedTypes[$typeName], 'getRevdelConstant' ) );
        }
 
+       /**
+        * Suggest a target for the revision deletion
+        * @since 1.22
+        * @param string $typeName
+        * @param Title|null $title User-supplied target
+        * @param array $ids
+        * @return Title|null
+        */
+       public static function suggestTarget( $typeName, $target, array $ids ) {
+               $typeName = self::getCanonicalTypeName( $typeName );
+               if ( !$typeName ) {
+                       return $target;
+               }
+               return call_user_func( array( self::$allowedTypes[$typeName], 'suggestTarget' ), $target, $ids );
+       }
+
+
        /**
         * Checks if a revision still exists in the revision table.
         * If it doesn't, returns the corresponding ar_timestamp field
@@ -125,4 +227,24 @@ class RevisionDeleter {
 
                return $timestamp;
        }
+
+       /**
+        * Put together a rev_deleted bitfield
+        * @since 1.22
+        * @param array $bitPars extractBitParams() params
+        * @param int $oldfield current bitfield
+        * @return array
+        */
+       public static function extractBitfield( $bitPars, $oldfield ) {
+               // Build the actual new rev_deleted bitfield
+               $newBits = 0;
+               foreach ( $bitPars as $const => $val ) {
+                       if ( $val == 1 ) {
+                               $newBits |= $const; // $const is the *_deleted const
+                       } elseif ( $val == -1 ) {
+                               $newBits |= ( $oldfield & $const ); // use existing
+                       }
+               }
+               return $newBits;
+       }
 }
index e5925fa..71c05d8 100644 (file)
@@ -877,11 +877,11 @@ class SearchResult {
         * @return String: highlighted text snippet, null (and not '') if not supported
         */
        function getTextSnippet( $terms ) {
-               global $wgUser, $wgAdvancedSearchHighlighting;
+               global $wgAdvancedSearchHighlighting;
                $this->initText();
 
                // TODO: make highliter take a content object. Make ContentHandler a factory for SearchHighliter.
-               list( $contextlines, $contextchars ) = SearchEngine::userHighlightPrefs( $wgUser );
+               list( $contextlines, $contextchars ) = SearchEngine::userHighlightPrefs();
                $h = new SearchHighlighter();
                if ( $wgAdvancedSearchHighlighting ) {
                        return $h->highlightText( $this->mText, $terms, $contextlines, $contextchars );
index 2148210..82a413e 100644 (file)
@@ -89,7 +89,7 @@ class SearchUpdate implements DeferrableUpdate {
 
                wfProfileIn( __METHOD__ );
 
-               $page = WikiPage::newFromId( $this->id );
+               $page = WikiPage::newFromId( $this->id, WikiPage::READ_LATEST );
                $indexTitle = Title::indexTitle( $this->title->getNamespace(), $this->title->getText() );
 
                foreach ( SearchEngine::getSearchTypes() as $type ) {
index 4123805..11141e0 100644 (file)
@@ -188,6 +188,39 @@ class SiteSQLStore implements SiteStore {
                return $site;
        }
 
+       /**
+        * Get a new ORMRow from a Site object
+        *
+        * @since 1.22
+        *
+        * @param Site
+        *
+        * @return ORMRow
+        */
+       protected function getRowFromSite( Site $site ) {
+               $fields = array(
+                       // Site data
+                       'global_key' => $site->getGlobalId(), // TODO: check not null
+                       'type' => $site->getType(),
+                       'group' => $site->getGroup(),
+                       'source' => $site->getSource(),
+                       'language' => $site->getLanguageCode() === null ? '' : $site->getLanguageCode(),
+                       'protocol' => $site->getProtocol(),
+                       'domain' => strrev( $site->getDomain() ) . '.',
+                       'data' => $site->getExtraData(),
+
+                       // Site config
+                       'forward' => $site->shouldForward(),
+                       'config' => $site->getExtraConfig(),
+               );
+
+               if ( $site->getInternalId() !== null ) {
+                       $fields['id'] = $site->getInternalId();
+               }
+
+               return new ORMRow( $this->sitesTable, $fields );
+       }
+
        /**
         * Fetches the site from the database and loads them into the sites field.
         *
@@ -291,28 +324,11 @@ class SiteSQLStore implements SiteStore {
                $localIds = array();
 
                foreach ( $sites as $site ) {
-                       $fields = array(
-                               // Site data
-                               'global_key' => $site->getGlobalId(), // TODO: check not null
-                               'type' => $site->getType(),
-                               'group' => $site->getGroup(),
-                               'source' => $site->getSource(),
-                               'language' => $site->getLanguageCode() === null ? '' : $site->getLanguageCode(),
-                               'protocol' => $site->getProtocol(),
-                               'domain' => strrev( $site->getDomain() ) . '.',
-                               'data' => $site->getExtraData(),
-
-                               // Site config
-                               'forward' => $site->shouldForward(),
-                               'config' => $site->getExtraConfig(),
-                       );
-
                        if ( $site->getInternalId() !== null ) {
-                               $fields['id'] = $site->getInternalId();
                                $internalIds[] = $site->getInternalId();
                        }
 
-                       $siteRow = new ORMRow( $this->sitesTable, $fields );
+                       $siteRow = $this->getRowFromSite( $site );
                        $success = $siteRow->save( __METHOD__ ) && $success;
 
                        foreach ( $site->getLocalIds() as $idType => $ids ) {
index 6ba009a..3b73a37 100644 (file)
@@ -772,7 +772,8 @@ class SpecialBlock extends FormSpecialPage {
                        $logaction,
                        Title::makeTitle( NS_USER, $target ),
                        $data['Reason'][0],
-                       $logParams
+                       $logParams,
+                       $performer
                );
                # Relate log ID to block IDs (bug 25763)
                $blockIds = array_merge( array( $status['id'] ), $status['autoIds'] );
index 614bd3e..65aa07e 100644 (file)
@@ -267,19 +267,7 @@ class SpecialContributions extends SpecialPage {
                        }
                }
 
-               // Old message 'contribsub' had one parameter, but that doesn't work for
-               // languages that want to put the "for" bit right after $user but before
-               // $links.  If 'contribsub' is around, use it for reverse compatibility,
-               // otherwise use 'contribsub2'.
-               // @todo Should this be removed at some point?
-               $oldMsg = $this->msg( 'contribsub' );
-               if ( $oldMsg->exists() ) {
-                       $linksWithParentheses = $this->msg( 'parentheses' )->rawParams( $links )->escaped();
-
-                       return $oldMsg->rawParams( "$user $linksWithParentheses" );
-               }
-
-               return $this->msg( 'contribsub2' )->rawParams( $user, $links );
+               return $this->msg( 'contribsub2' )->rawParams( $user, $links )->params( $userObj->getName() );
        }
 
        /**
index 28ca24b..2cf1730 100644 (file)
@@ -482,16 +482,7 @@ class DeletedContributionsPage extends SpecialPage {
                        }
                }
 
-               // Old message 'contribsub' had one parameter, but that doesn't work for
-               // languages that want to put the "for" bit right after $user but before
-               // $links.  If 'contribsub' is around, use it for reverse compatibility,
-               // otherwise use 'contribsub2'.
-               $oldMsg = $this->msg( 'contribsub' );
-               if ( $oldMsg->exists() ) {
-                       return $oldMsg->rawParams( "$user ($links)" );
-               }
-
-               return $this->msg( 'contribsub2' )->rawParams( $user, $links );
+               return $this->msg( 'contribsub2' )->rawParams( $user, $links )->params( $userObj->getName() );
        }
 
        /**
index 0d54bb3..d7d860d 100644 (file)
@@ -478,7 +478,7 @@ class ImportReporter extends ContextSource {
                                if ( $this->reason ) {
                                        $detail .= $this->msg( 'colon-separator' )->inContentLanguage()->text() . $this->reason;
                                }
-                               $log->addEntry( 'upload', $title, $detail );
+                               $log->addEntry( 'upload', $title, $detail, array(), $this->getUser() );
                        } else {
                                $interwiki = '[[:' . $this->mInterwiki . ':' .
                                        $origTitle->getPrefixedText() . ']]';
@@ -487,7 +487,7 @@ class ImportReporter extends ContextSource {
                                if ( $this->reason ) {
                                        $detail .= $this->msg( 'colon-separator' )->inContentLanguage()->text() . $this->reason;
                                }
-                               $log->addEntry( 'interwiki', $title, $detail );
+                               $log->addEntry( 'interwiki', $title, $detail, array(), $this->getUser() );
                        }
 
                        $comment = $detail; // quick
index 75b8490..8cd9173 100644 (file)
@@ -69,6 +69,7 @@ class UsersPager extends AlphabeticPager {
                $this->editsOnly = $request->getBool( 'editsOnly' );
                $this->creationSort = $request->getBool( 'creationSort' );
                $this->including = $including;
+               $this->mDefaultDirection = $request->getBool( 'desc' );
 
                $this->requestedUser = '';
 
@@ -277,6 +278,13 @@ class UsersPager extends AlphabeticPager {
                        'creationSort',
                        $this->creationSort
                );
+               $out .= '&#160;';
+               $out .= Xml::checkLabel(
+                       $this->msg( 'listusers-desc' )->text(),
+                       'desc',
+                       'desc',
+                       $this->mDefaultDirection
+               );
                $out .= '<br />';
 
                wfRunHooks( 'SpecialListusersHeaderForm', array( $this, &$out ) );
index 2a86fca..fb5ea65 100644 (file)
@@ -417,7 +417,7 @@ class SpecialMergeHistory extends SpecialPage {
                $log = new LogPage( 'merge' );
                $log->addEntry(
                        'merge', $targetTitle, $this->mComment,
-                       array( $destTitle->getPrefixedText(), $timestampLimit )
+                       array( $destTitle->getPrefixedText(), $timestampLimit ), $this->getUser()
                );
 
                $this->getOutput()->addWikiMsg( 'mergehistory-success',
index c4c5c99..28d07ff 100644 (file)
@@ -210,7 +210,8 @@ class SpecialPrefixindex extends SpecialAllpages {
                                        $t = Title::makeTitle( $s->page_namespace, $s->page_title );
                                        if ( $t ) {
                                                $displayed = $t->getText();
-                                               if ( $this->stripPrefix ) {
+                                               // Try not to generate unclickable links
+                                               if ( $this->stripPrefix && $prefixLength !== strlen( $displayed ) ) {
                                                        $displayed = substr( $displayed, $prefixLength );
                                                }
                                                $link = ( $s->page_is_redirect ? '<div class="allpagesredirect">' : '' ) .
index a408beb..60cdb0e 100644 (file)
@@ -424,59 +424,16 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                        return false;
                }
 
-               // Don't use the new_namespace_time timestamp index if:
-               // (a) "All namespaces" selected
-               // (b) We want pages in more than one namespace (inverted/associated)
-               // (c) There is a tag to filter on (use tag index instead)
-               // (d) UNION + sort/limit is not an option for the DBMS
-               if ( $namespace === ''
-                       || ( $invert || $associated )
-                       || $opts['tagfilter'] != ''
-                       || !$dbr->unionSupportsOrderAndLimit()
-               ) {
-                       $res = $dbr->select( $tables, $fields, $conds, __METHOD__,
-                               array( 'ORDER BY' => 'rc_timestamp DESC', 'LIMIT' => $limit ) +
-                                       $query_options,
-                               $join_conds );
-               } else {
-                       // We have a new_namespace_time index! UNION over new=(0,1) and sort result set!
-
-                       // New pages
-                       $sqlNew = $dbr->selectSQLText(
-                               $tables,
-                               $fields,
-                               array( 'rc_new' => 1 ) + $conds,
-                               __METHOD__,
-                               array(
-                                       'ORDER BY' => 'rc_timestamp DESC',
-                                       'LIMIT' => $limit,
-                                       'USE INDEX' => array( 'recentchanges' => 'new_name_timestamp' )
-                               ),
-                               $join_conds
-                       );
-
-                       // Old pages
-                       $sqlOld = $dbr->selectSQLText(
-                               $tables,
-                               $fields,
-                               array( 'rc_new' => 0 ) + $conds,
-                               __METHOD__,
-                               array(
-                                       'ORDER BY' => 'rc_timestamp DESC',
-                                       'LIMIT' => $limit,
-                                       'USE INDEX' => array( 'recentchanges' => 'new_name_timestamp' )
-                               ),
-                               $join_conds
-                       );
-
-                       # Join the two fast queries, and sort the result set
-                       $sql = $dbr->unionQueries( array( $sqlNew, $sqlOld ), false ) .
-                               ' ORDER BY rc_timestamp DESC';
-                       $sql = $dbr->limitResult( $sql, $limit, false );
-                       $res = $dbr->query( $sql, __METHOD__ );
-               }
-
-               return $res;
+               // rc_new is not an ENUM, but adding a redundant rc_new IN (0,1) gives mysql enough
+               // knowledge to use an index merge if it wants (it may use some other index though).
+               return $dbr->select(
+                       $tables,
+                       $fields,
+                       $conds + array( 'rc_new' => array( 0, 1 ) ),
+                       __METHOD__,
+                       array( 'ORDER BY' => 'rc_timestamp DESC', 'LIMIT' => $limit ) + $query_options,
+                       $join_conds
+               );
        }
 
        /**
index 1e9adf5..825be6c 100644 (file)
@@ -49,68 +49,43 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
        /** Array of checkbox specs (message, name, deletion bits) */
        var $checks;
 
-       /** Information about the current type */
-       var $typeInfo;
+       /** UI Labels about the current type */
+       var $typeLabels;
 
        /** The RevDel_List object, storing the list of items to be deleted/undeleted */
        var $list;
 
        /**
-        * Assorted information about each type, needed by the special page.
-        * TODO Move some of this to the list class
+        * UI labels for each type.
         */
-       static $allowedTypes = array(
+       static $UILabels = array(
                'revision' => array(
                        'check-label'   => 'revdelete-hide-text',
-                       'deletion-bits' => Revision::DELETED_TEXT,
                        'success'               => 'revdelete-success',
                        'failure'               => 'revdelete-failure',
-                       'list-class'    => 'RevDel_RevisionList',
-                       'permission'    => 'deleterevision',
                ),
                'archive' => array(
                        'check-label'   => 'revdelete-hide-text',
-                       'deletion-bits' => Revision::DELETED_TEXT,
                        'success'               => 'revdelete-success',
                        'failure'               => 'revdelete-failure',
-                       'list-class'    => 'RevDel_ArchiveList',
-                       'permission'    => 'deleterevision',
                ),
                'oldimage' => array(
                        'check-label'   => 'revdelete-hide-image',
-                       'deletion-bits' => File::DELETED_FILE,
                        'success'               => 'revdelete-success',
                        'failure'               => 'revdelete-failure',
-                       'list-class'    => 'RevDel_FileList',
-                       'permission'    => 'deleterevision',
                ),
                'filearchive' => array(
                        'check-label'   => 'revdelete-hide-image',
-                       'deletion-bits' => File::DELETED_FILE,
                        'success'               => 'revdelete-success',
                        'failure'               => 'revdelete-failure',
-                       'list-class'    => 'RevDel_ArchivedFileList',
-                       'permission'    => 'deleterevision',
                ),
                'logging' => array(
                        'check-label'   => 'revdelete-hide-name',
-                       'deletion-bits' => LogPage::DELETED_ACTION,
                        'success'               => 'logdelete-success',
                        'failure'               => 'logdelete-failure',
-                       'list-class'    => 'RevDel_LogList',
-                       'permission'    => 'deletelogentry',
                ),
        );
 
-       /** Type map to support old log entries */
-       static $deprecatedTypeMap = array(
-               'oldid' => 'revision',
-               'artimestamp' => 'archive',
-               'oldimage' => 'oldimage',
-               'fileid' => 'filearchive',
-               'logid' => 'logging',
-       );
-
        public function __construct() {
                parent::__construct( 'Revisiondelete', 'deletedhistory' );
        }
@@ -147,19 +122,6 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                } else {
                        $this->typeName = $request->getVal( 'type' );
                        $this->targetObj = Title::newFromText( $request->getText( 'target' ) );
-                       if ( $this->targetObj && $this->targetObj->isSpecial( 'Log' ) && count( $this->ids ) !== 0 ) {
-                               $result = wfGetDB( DB_SLAVE )->select( 'logging',
-                                       'log_type',
-                                       array( 'log_id' => $this->ids ),
-                                       __METHOD__,
-                                       array( 'DISTINCT' )
-                               );
-
-                               if ( $result->numRows() == 1 ) {
-                                       // If there's only one type, the target can be set to include it.
-                                       $this->targetObj = SpecialPage::getTitleFor( 'Log', $result->current()->log_type );
-                               }
-                       }
                }
 
                # For reviewing deleted files...
@@ -170,24 +132,17 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        return;
                }
 
-               if ( isset( self::$deprecatedTypeMap[$this->typeName] ) ) {
-                       $this->typeName = self::$deprecatedTypeMap[$this->typeName];
-               }
+               $this->typeName = RevisionDeleter::getCanonicalTypeName( $this->typeName );
 
                # No targets?
-               if ( !isset( self::$allowedTypes[$this->typeName] ) || count( $this->ids ) == 0 ) {
+               if ( !$this->typeName || count( $this->ids ) == 0 ) {
                        throw new ErrorPageError( 'revdelete-nooldid-title', 'revdelete-nooldid-text' );
                }
-               $this->typeInfo = self::$allowedTypes[$this->typeName];
-               $this->mIsAllowed = $user->isAllowed( $this->typeInfo['permission'] );
-
-               # If we have revisions, get the title from the first one
-               # since they should all be from the same page. This allows
-               # for more flexibility with page moves...
-               if ( $this->typeName == 'revision' ) {
-                       $rev = Revision::newFromId( $this->ids[0] );
-                       $this->targetObj = $rev ? $rev->getTitle() : $this->targetObj;
-               }
+               $this->typeLabels = self::$UILabels[$this->typeName];
+               $this->mIsAllowed = $user->isAllowed( RevisionDeleter::getRestriction( $this->typeName ) );
+
+               # Allow the list type to adjust the passed target
+               $this->targetObj = RevisionDeleter::suggestTarget( $this->typeName, $this->targetObj, $this->ids );
 
                $this->otherReason = $request->getVal( 'wpReason' );
                # We need a target page!
@@ -200,7 +155,9 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
 
                # Initialise checkboxes
                $this->checks = array(
-                       array( $this->typeInfo['check-label'], 'wpHidePrimary', $this->typeInfo['deletion-bits'] ),
+                       array( $this->typeLabels['check-label'], 'wpHidePrimary',
+                               RevisionDeleter::getRevdelConstant( $this->typeName )
+                       ),
                        array( 'revdelete-hide-comment', 'wpHideComment', Revision::DELETED_COMMENT ),
                        array( 'revdelete-hide-user', 'wpHideUser', Revision::DELETED_USER )
                );
@@ -343,8 +300,9 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
         */
        protected function getList() {
                if ( is_null( $this->list ) ) {
-                       $class = $this->typeInfo['list-class'];
-                       $this->list = new $class( $this->getContext(), $this->targetObj, $this->ids );
+                       $this->list = RevisionDeleter::createList(
+                               $this->typeName, $this->getContext(), $this->targetObj, $this->ids
+                       );
                }
                return $this->list;
        }
@@ -561,7 +519,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
         */
        protected function success() {
                $this->getOutput()->setPageTitle( $this->msg( 'actioncomplete' ) );
-               $this->getOutput()->wrapWikiMsg( "<span class=\"success\">\n$1\n</span>", $this->typeInfo['success'] );
+               $this->getOutput()->wrapWikiMsg( "<span class=\"success\">\n$1\n</span>", $this->typeLabels['success'] );
                $this->list->reloadFromMaster();
                $this->showForm();
        }
@@ -571,7 +529,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
         */
        protected function failure( $status ) {
                $this->getOutput()->setPageTitle( $this->msg( 'actionfailed' ) );
-               $this->getOutput()->addWikiText( $status->getWikiText( $this->typeInfo['failure'] ) );
+               $this->getOutput()->addWikiText( $status->getWikiText( $this->typeLabels['failure'] ) );
                $this->showForm();
        }
 
@@ -598,21 +556,13 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
 
        /**
         * Put together a rev_deleted bitfield
+        * @deprecated since 1.22, use RevisionDeleter::extractBitfield instead
         * @param array $bitPars extractBitParams() params
         * @param int $oldfield current bitfield
         * @return array
         */
        public static function extractBitfield( $bitPars, $oldfield ) {
-               // Build the actual new rev_deleted bitfield
-               $newBits = 0;
-               foreach ( $bitPars as $const => $val ) {
-                       if ( $val == 1 ) {
-                               $newBits |= $const; // $const is the *_deleted const
-                       } elseif ( $val == -1 ) {
-                               $newBits |= ( $oldfield & $const ); // use existing
-                       }
-               }
-               return $newBits;
+               return RevisionDeleter::extractBitfield( $bitPars, $oldfield );
        }
 
        /**
index 6a282c9..7e34e98 100644 (file)
@@ -44,30 +44,21 @@ class SpecialTags extends SpecialPage {
                $html = Xml::tags( 'tr', null, Xml::tags( 'th', null, $this->msg( 'tags-tag' )->parse() ) .
                                Xml::tags( 'th', null, $this->msg( 'tags-display-header' )->parse() ) .
                                Xml::tags( 'th', null, $this->msg( 'tags-description-header' )->parse() ) .
+                               Xml::tags( 'th', null, $this->msg( 'tags-active-header' )->parse() ) .
                                Xml::tags( 'th', null, $this->msg( 'tags-hitcount-header' )->parse() )
                        );
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( 'change_tag', array( 'ct_tag', 'hitcount' => 'count(*)' ),
-                       array(), __METHOD__, array( 'GROUP BY' => 'ct_tag', 'ORDER BY' => 'hitcount DESC' ) );
 
-               foreach ( $res as $row ) {
-                       $html .= $this->doTagRow( $row->ct_tag, $row->hitcount );
-               }
+               // Used in #doTagRow()
+               $this->definedTags = array_fill_keys( ChangeTags::listDefinedTags(), true );
 
-               foreach ( ChangeTags::listDefinedTags() as $tag ) {
-                       $html .= $this->doTagRow( $tag, 0 );
+               foreach ( ChangeTags::tagUsageStatistics() as $tag => $hitcount ) {
+                       $html .= $this->doTagRow( $tag, $hitcount );
                }
 
                $out->addHTML( Xml::tags( 'table', array( 'class' => 'wikitable sortable mw-tags-table' ), $html ) );
        }
 
        function doTagRow( $tag, $hitcount ) {
-               static $doneTags = array();
-
-               if ( in_array( $tag, $doneTags ) ) {
-                       return '';
-               }
-
                $user = $this->getUser();
                $newRow = '';
                $newRow .= Xml::tags( 'td', null, Xml::element( 'code', null, $tag ) );
@@ -89,13 +80,14 @@ class SpecialTags extends SpecialPage {
                }
                $newRow .= Xml::tags( 'td', null, $desc );
 
+               $active = $this->msg( isset( $this->definedTags[$tag] ) ? 'tags-active-yes' : 'tags-active-no' )->escaped();
+               $newRow .= Xml::tags( 'td', null, $active );
+
                $hitcountLabel = $this->msg( 'tags-hitcount' )->numParams( $hitcount )->escaped();
                $hitcountLink = Linker::link( SpecialPage::getTitleFor( 'Recentchanges' ), $hitcountLabel, array(), array( 'tagfilter' => $tag ) );
                // add raw $hitcount for sorting, because tags-hitcount contains numbers and letters
                $newRow .= Xml::tags( 'td', array( 'data-sort-value' => $hitcount ), $hitcountLink );
 
-               $doneTags[] = $tag;
-
                return Xml::tags( 'tr', null, $newRow ) . "\n";
        }
 
index 4da5155..ca93b6d 100644 (file)
@@ -211,7 +211,7 @@ class SpecialUnblock extends SpecialPage {
 
                # Make log entry
                $log = new LogPage( 'block' );
-               $log->addEntry( 'unblock', $page, $data['Reason'] );
+               $log->addEntry( 'unblock', $page, $data['Reason'], array(), $performer );
 
                return true;
        }
index 263ec3a..51a0a86 100644 (file)
@@ -93,7 +93,6 @@ class SpecialUpload extends SpecialPage {
                if ( !$this->mDesiredDestName && $request->getFileName( 'wpUploadFile' ) !== null ) {
                        $this->mDesiredDestName = $request->getFileName( 'wpUploadFile' );
                }
-               $this->mComment = $request->getText( 'wpUploadDescription' );
                $this->mLicense = $request->getText( 'wpLicense' );
 
                $this->mDestWarningAck = $request->getText( 'wpDestFileWarningAck' );
@@ -104,6 +103,14 @@ class SpecialUpload extends SpecialPage {
                $this->mCopyrightSource = $request->getText( 'wpUploadSource' );
 
                $this->mForReUpload = $request->getBool( 'wpForReUpload' ); // updating a file
+
+               $commentDefault = '';
+               $commentMsg = wfMessage( 'upload-default-description' )->inContentLanguage();
+               if ( !$this->mForReUpload && !$commentMsg->isDisabled() ) {
+                       $commentDefault = $commentMsg->plain();
+               }
+               $this->mComment = $request->getText( 'wpUploadDescription', $commentDefault );
+
                $this->mCancelUpload = $request->getCheck( 'wpCancelUpload' )
                        || $request->getCheck( 'wpReUpload' ); // b/w compat
 
@@ -563,8 +570,9 @@ class SpecialUpload extends SpecialPage {
                                } else {
                                        $msg->params( $details['finalExt'] );
                                }
-                               $msg->params( $this->getLanguage()->commaList( $wgFileExtensions ),
-                                       count( $wgFileExtensions ) );
+                               $extensions = array_unique( $wgFileExtensions );
+                               $msg->params( $this->getLanguage()->commaList( $extensions ),
+                                       count( $extensions ) );
 
                                // Add PLURAL support for the first parameter. This results
                                // in a bit unlogical parameter sequence, but does not break
@@ -870,16 +878,16 @@ class UploadForm extends HTMLForm {
                                # Everything not permitted is banned
                                $extensionsList =
                                        '<div id="mw-upload-permitted">' .
-                                       $this->msg( 'upload-permitted', $this->getContext()->getLanguage()->commaList( $wgFileExtensions ) )->parseAsBlock() .
+                                       $this->msg( 'upload-permitted', $this->getContext()->getLanguage()->commaList( array_unique( $wgFileExtensions ) ) )->parseAsBlock() .
                                        "</div>\n";
                        } else {
                                # We have to list both preferred and prohibited
                                $extensionsList =
                                        '<div id="mw-upload-preferred">' .
-                                               $this->msg( 'upload-preferred', $this->getContext()->getLanguage()->commaList( $wgFileExtensions ) )->parseAsBlock() .
+                                               $this->msg( 'upload-preferred', $this->getContext()->getLanguage()->commaList( array_unique( $wgFileExtensions ) ) )->parseAsBlock() .
                                        "</div>\n" .
                                        '<div id="mw-upload-prohibited">' .
-                                               $this->msg( 'upload-prohibited', $this->getContext()->getLanguage()->commaList( $wgFileBlacklist ) )->parseAsBlock() .
+                                               $this->msg( 'upload-prohibited', $this->getContext()->getLanguage()->commaList( array_unique( $wgFileBlacklist ) ) )->parseAsBlock() .
                                        "</div>\n";
                        }
                } else {
index e7f36ee..002e949 100644 (file)
@@ -134,8 +134,13 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                        $paramString = substr( $thumbPart, 0, $srcNamePos - 1 );
 
                        $handler = $file->getHandler();
-                       $params = $handler->parseParamString( $paramString );
-                       return array( 'file' => $file, 'type' => $type, 'params' => $params );
+                       if ( $handler ) {
+                               $params = $handler->parseParamString( $paramString );
+                               return array( 'file' => $file, 'type' => $type, 'params' => $params );
+                       } else {
+                               throw new UploadStashBadPathException( 'No handler found for ' .
+                                               "mime {$file->getMimeType()} of file {$file->getPath()}" );
+                       }
                }
 
                return array( 'file' => $file, 'type' => $type );
index 48bef9d..2b60ca2 100644 (file)
@@ -48,7 +48,7 @@ class LoginForm extends SpecialPage {
        var $mLoginattempt, $mRemember, $mEmail, $mDomain, $mLanguage;
        var $mSkipCookieCheck, $mReturnToQuery, $mToken, $mStickHTTPS;
        var $mType, $mReason, $mRealName;
-       var $mAbortLoginErrorMsg = 'login-abort-generic';
+       var $mAbortLoginErrorMsg = null;
        private $mLoaded = false;
        private $mSecureLoginUrl;
 
@@ -168,10 +168,7 @@ class LoginForm extends SpecialPage {
 
                // If logging in and not on HTTPS, either redirect to it or offer a link.
                global $wgSecureLogin;
-               if (
-                       $this->mType !== 'signup' &&
-                       WebRequest::detectProtocol() !== 'https'
-               ) {
+               if ( WebRequest::detectProtocol() !== 'https' ) {
                        $title = $this->getFullTitle();
                        $query = array(
                                'returnto' => $this->mReturnTo,
@@ -181,6 +178,8 @@ class LoginForm extends SpecialPage {
                        if ( $wgSecureLogin && wfCanIPUseHTTPS( $this->getRequest()->getIP() ) ) {
                                $url = wfAppendQuery( $url, 'fromhttp=1' );
                                $this->getOutput()->redirect( $url );
+                               // Since we only do this redir to change proto, always vary
+                               $this->getOutput()->addVaryHeader( 'X-Forwarded-Proto' );
                                return;
                        } else {
                                // A wiki without HTTPS login support should set $wgServer to
@@ -583,7 +582,9 @@ class LoginForm extends SpecialPage {
 
                // Give general extensions, such as a captcha, a chance to abort logins
                $abort = self::ABORTED;
-               if ( !wfRunHooks( 'AbortLogin', array( $u, $this->mPassword, &$abort, &$this->mAbortLoginErrorMsg ) ) ) {
+               $msg = null;
+               if ( !wfRunHooks( 'AbortLogin', array( $u, $this->mPassword, &$abort, &$msg ) ) ) {
+                       $this->mAbortLoginErrorMsg = $msg;
                        return $abort;
                }
 
@@ -781,51 +782,62 @@ class LoginForm extends SpecialPage {
                                break;
 
                        case self::NEED_TOKEN:
-                               $this->mainLoginForm( $this->msg( 'nocookiesforlogin' )->parse() );
+                               $error = $this->mAbortLoginErrorMsg ?: 'nocookiesforlogin';
+                               $this->mainLoginForm( $this->msg( $error )->parse() );
                                break;
                        case self::WRONG_TOKEN:
-                               $this->mainLoginForm( $this->msg( 'sessionfailure' )->text() );
+                               $error = $this->mAbortLoginErrorMsg ?: 'sessionfailure';
+                               $this->mainLoginForm( $this->msg( $error )->text() );
                                break;
                        case self::NO_NAME:
                        case self::ILLEGAL:
-                               $this->mainLoginForm( $this->msg( 'noname' )->text() );
+                               $error = $this->mAbortLoginErrorMsg ?: 'noname';
+                               $this->mainLoginForm( $this->msg( $error )->text() );
                                break;
                        case self::WRONG_PLUGIN_PASS:
-                               $this->mainLoginForm( $this->msg( 'wrongpassword' )->text() );
+                               $error = $this->mAbortLoginErrorMsg ?: 'wrongpassword';
+                               $this->mainLoginForm( $this->msg( $error )->text() );
                                break;
                        case self::NOT_EXISTS:
                                if ( $this->getUser()->isAllowed( 'createaccount' ) ) {
-                                       $this->mainLoginForm( $this->msg( 'nosuchuser',
+                                       $error = $this->mAbortLoginErrorMsg ?: 'nosuchuser';
+                                       $this->mainLoginForm( $this->msg( $error,
                                                wfEscapeWikiText( $this->mUsername ) )->parse() );
                                } else {
-                                       $this->mainLoginForm( $this->msg( 'nosuchusershort',
+                                       $error = $this->mAbortLoginErrorMsg ?: 'nosuchusershort';
+                                       $this->mainLoginForm( $this->msg( $error,
                                                wfEscapeWikiText( $this->mUsername ) )->text() );
                                }
                                break;
                        case self::WRONG_PASS:
-                               $this->mainLoginForm( $this->msg( 'wrongpassword' )->text() );
+                               $error = $this->mAbortLoginErrorMsg ?: 'wrongpassword';
+                               $this->mainLoginForm( $this->msg( $error )->text() );
                                break;
                        case self::EMPTY_PASS:
-                               $this->mainLoginForm( $this->msg( 'wrongpasswordempty' )->text() );
+                               $error = $this->mAbortLoginErrorMsg ?: 'wrongpasswordempty';
+                               $this->mainLoginForm( $this->msg( $error )->text() );
                                break;
                        case self::RESET_PASS:
-                               $this->resetLoginForm( $this->msg( 'resetpass_announce' )->text() );
+                               $error = $this->mAbortLoginErrorMsg ?: 'resetpass_announce';
+                               $this->resetLoginForm( $this->msg( $error )->text() );
                                break;
                        case self::CREATE_BLOCKED:
                                $this->userBlockedMessage( $this->getUser()->isBlockedFromCreateAccount() );
                                break;
                        case self::THROTTLED:
-                               $this->mainLoginForm( $this->msg( 'login-throttled' )
+                               $error = $this->mAbortLoginErrorMsg ?: 'login-throttled';
+                               $this->mainLoginForm( $this->msg( $error )
                                ->params ( $this->getLanguage()->formatDuration( $wgPasswordAttemptThrottle['seconds'] ) )
                                ->text()
                                );
                                break;
                        case self::USER_BLOCKED:
-                               $this->mainLoginForm( $this->msg( 'login-userblocked',
-                                       $this->mUsername )->escaped() );
+                               $error = $this->mAbortLoginErrorMsg ?: 'login-userblocked';
+                               $this->mainLoginForm( $this->msg( $error, $this->mUsername )->escaped() );
                                break;
                        case self::ABORTED:
-                               $this->mainLoginForm( $this->msg( $this->mAbortLoginErrorMsg )->text() );
+                               $error = $this->mAbortLoginErrorMsg ?: 'login-abort-generic';
+                               $this->mainLoginForm( $this->msg( $error )->text() );
                                break;
                        default:
                                throw new MWException( 'Unhandled case value' );
@@ -1155,12 +1167,8 @@ class LoginForm extends SpecialPage {
                $template->set( 'remember', $user->getOption( 'rememberpassword' ) || $this->mRemember );
                $template->set( 'cansecurelogin', ( $wgSecureLogin === true ) );
                $template->set( 'stickhttps', (int)$this->mStickHTTPS );
-
-               if ( $this->mType === 'signup' && $user->isLoggedIn() ) {
-                       $template->set( 'createAnother', true );
-               } else {
-                       $template->set( 'createAnother', false );
-               }
+               $template->set( 'loggedin', $user->isLoggedIn() );
+               $template->set( 'loggedinuser', $user->getName() );
 
                if ( $this->mType == 'signup' ) {
                        if ( !self::getCreateaccountToken() ) {
@@ -1219,9 +1227,7 @@ class LoginForm extends SpecialPage {
         * @return bool
         */
        private function showCreateOrLoginLink( &$user ) {
-               if ( $user->isLoggedIn() ) {
-                       return false;
-               } elseif ( $this->mType == 'signup' ) {
+               if ( $this->mType == 'signup' ) {
                        return true;
                } elseif ( $user->isAllowed( 'createaccount' ) ) {
                        return true;
index 3d848cf..50dfaec 100644 (file)
@@ -58,7 +58,7 @@ class UsercreateTemplate extends BaseTemplate {
 <div id="userloginForm">
 <h2 class="createaccount-join">
        <?php
-       $this->msg( $this->data['createAnother'] ?
+       $this->msg( $this->data['loggedin'] ?
                'createacct-another-join' : 'createacct-join' );
        ?>
 </h2>
@@ -89,7 +89,7 @@ class UsercreateTemplate extends BaseTemplate {
                                'tabindex' => '1',
                                'size' => '20',
                                'required',
-                               'placeholder' => $this->getMsg( $this->data['createAnother'] ?
+                               'placeholder' => $this->getMsg( $this->data['loggedin'] ?
                                        'createacct-another-username-ph' : 'userlogin-yourname-ph' )->text(),
                        ) );
                        ?>
@@ -162,7 +162,7 @@ class UsercreateTemplate extends BaseTemplate {
                                        'id' => 'wpEmail',
                                        'tabindex' => '6',
                                        'size' => '20',
-                                       'placeholder' => $this->getMsg( $this->data['createAnother'] ?
+                                       'placeholder' => $this->getMsg( $this->data['loggedin'] ?
                                                'createacct-another-email-ph' : 'createacct-email-ph' )->text()
                                ) + ( $this->data['emailrequired'] ? array() : array( 'required' => '' ) ) );
                        ?>
@@ -175,7 +175,7 @@ class UsercreateTemplate extends BaseTemplate {
                                        tabindex="7"
                                        value="<?php $this->text( 'realname' ); ?>" size='20' />
                                <div class="prefsectiontip">
-                                       <?php $this->msgWiki( $this->data['createAnother'] ? 'createacct-another-realname-tip' : 'prefs-help-realname' ); ?>
+                                       <?php $this->msgWiki( $this->data['loggedin'] ? 'createacct-another-realname-tip' : 'prefs-help-realname' ); ?>
                                </div>
                        </div>
                <?php }
@@ -253,7 +253,7 @@ class UsercreateTemplate extends BaseTemplate {
                <div class="mw-submit">
                        <?php
                        echo Html::input( 'wpCreateaccount',
-                               $this->getMsg( $this->data['createAnother'] ?
+                               $this->getMsg( $this->data['loggedin'] ?
                                        'createacct-another-submit' : 'createacct-submit' ),
                                'submit',
                                array(
index 39091ef..202ec55 100644 (file)
@@ -39,6 +39,11 @@ class UserloginTemplate extends BaseTemplate {
        ?>
 <div id="userloginForm">
 <form name="userlogin" class="mw-ui-vform" method="post" action="<?php $this->text( 'action' ); ?>">
+       <?php if ( $this->data['loggedin'] ) { ?>
+               <div class="warningbox">
+                       <?php echo $this->getMsg( 'userlogin-loggedin' )->params( $this->data['loggedinuser'] )->parse(); ?>
+               </div>
+       <?php } ?>
        <section class="mw-form-header">
                <?php $this->html( 'header' ); /* extensions such as ConfirmEdit add form HTML here */ ?>
        </section>
@@ -164,9 +169,15 @@ class UserloginTemplate extends BaseTemplate {
                        <?php echo $this->getMsg( 'userlogin-helplink' )->parse(); ?>
                </div>
                <?php if ( $this->haveData( 'createOrLoginHref' ) ) { ?>
-                       <div id="mw-createaccount-cta">
-                               <h3 id="mw-userloginlink"><?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7"  class="mw-ui-button mw-ui-constructive"><?php $this->msg( 'userlogin-joinproject' ); ?></a></h3>
-                       </div>
+                       <?php if ( $this->data['loggedin'] ) { ?>
+                               <div id="mw-createaccount-another">
+                                       <h3 id="mw-userloginlink"><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7"  class="mw-ui-button"><?php $this->msg( 'userlogin-createanother' ); ?></a></h3>
+                               </div>
+                       <?php } else { ?>
+                               <div id="mw-createaccount-cta">
+                                       <h3 id="mw-userloginlink"><?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7"  class="mw-ui-button mw-ui-constructive"><?php $this->msg( 'userlogin-joinproject' ); ?></a></h3>
+                               </div>
+                       <?php } ?>
                <?php } ?>
 <?php if ( $this->haveData( 'uselang' ) ) { ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php } ?>
 <?php if ( $this->haveData( 'token' ) ) { ?><input type="hidden" name="wpLoginToken" value="<?php $this->text( 'token' ); ?>" /><?php } ?>
index 37dc7cb..2260241 100644 (file)
@@ -618,9 +618,10 @@ abstract class UploadBase {
                // Check whether the file extension is on the unwanted list
                global $wgCheckFileExtensions, $wgFileExtensions;
                if ( $wgCheckFileExtensions ) {
-                       if ( !$this->checkFileExtension( $this->mFinalExtension, $wgFileExtensions ) ) {
+                       $extensions = array_unique( $wgFileExtensions );
+                       if ( !$this->checkFileExtension( $this->mFinalExtension, $extensions ) ) {
                                $warnings['filetype-unwanted-type'] = array( $this->mFinalExtension,
-                                       $wgLang->commaList( $wgFileExtensions ), count( $wgFileExtensions ) );
+                                       $wgLang->commaList( $extensions ), count( $extensions ) );
                        }
                }
 
@@ -1323,7 +1324,7 @@ abstract class UploadBase {
                # NOTE: there's a 50 line workaround to make stderr redirection work on windows, too.
                #      that does not seem to be worth the pain.
                #      Ask me (Duesentrieb) about it if it's ever needed.
-               $output = wfShellExec( "$command 2>&1", $exitCode );
+               $output = wfShellExecWithStderr( $command, $exitCode );
 
                # map exit code to AV_xxx constants.
                $mappedCode = $exitCode;
index ff71c20..b18fb80 100644 (file)
--- a/index.php
+++ b/index.php
@@ -8,16 +8,10 @@
  * See the README, INSTALL, and UPGRADE files for basic setup instructions
  * and pointers to the online documentation.
  *
- * http://www.mediawiki.org/
+ * https://www.mediawiki.org/
  *
  * ----------
  *
- * Copyright (C) 2001-2011 Magnus Manske, Brion Vibber, Lee Daniel Crocker,
- * Tim Starling, Erik Möller, Gabriel Wicke, Ævar Arnfjörð Bjarmason,
- * Niklas Laxström, Domas Mituzas, Rob Church, Yuri Astrakhan, Aryeh Gregor,
- * Aaron Schulz, Andrew Garrett, Raimond Spekking, Alexandre Emsenhuber
- * Siebrand Mazeland, Chad Horohoe, Roan Kattouw and others.
- *
  * 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
index 86639a3..527f382 100644 (file)
@@ -30,10 +30,6 @@ if ( !defined( 'MEDIAWIKI' ) ) {
        exit( 1 );
 }
 
-# Read language names
-global $wgLanguageNames;
-require_once __DIR__ . '/Names.php';
-
 if ( function_exists( 'mb_strtoupper' ) ) {
        mb_internal_encoding( 'UTF-8' );
 }
@@ -232,7 +228,7 @@ class Language {
                // Check if there is a language class for the code
                $class = self::classFromCode( $code );
                self::preloadLanguageClass( $class );
-               if ( MWInit::classExists( $class ) ) {
+               if ( class_exists( $class ) ) {
                        $lang = new $class;
                        return $lang;
                }
@@ -246,7 +242,7 @@ class Language {
 
                        $class = self::classFromCode( $fallbackCode );
                        self::preloadLanguageClass( $class );
-                       if ( MWInit::classExists( $class ) ) {
+                       if ( class_exists( $class ) ) {
                                $lang = Language::newFromCode( $fallbackCode );
                                $lang->setCode( $code );
                                return $lang;
@@ -396,7 +392,8 @@ class Language {
                }
 
                if ( $coreLanguageNames === null ) {
-                       include MWInit::compiledPath( 'languages/Names.php' );
+                       global $IP;
+                       include "$IP/languages/Names.php";
                }
 
                if ( isset( $coreLanguageNames[$tag] )
@@ -878,7 +875,8 @@ class Language {
                static $coreLanguageNames;
 
                if ( $coreLanguageNames === null ) {
-                       include MWInit::compiledPath( 'languages/Names.php' );
+                       global $IP;
+                       include "$IP/languages/Names.php";
                }
 
                $names = array();
@@ -2290,6 +2288,8 @@ class Language {
                        // Timestamp within the past week: show the day of the week and time
                        $format = $this->getDateFormatString( 'time', $user->getDatePreference() ?: 'default' );
                        $weekday = self::$mWeekdayMsgs[$ts->timestamp->format( 'w' )];
+                       // Messages:
+                       // sunday-at, monday-at, tuesday-at, wednesday-at, thursday-at, friday-at, saturday-at
                        $ts = wfMessage( "$weekday-at" )
                                ->inLanguage( $this )
                                ->params( $this->sprintfDate( $format, $ts->getTimestamp( TS_MW ) ) )
@@ -2617,7 +2617,7 @@ class Language {
         */
        function checkTitleEncoding( $s ) {
                if ( is_array( $s ) ) {
-                       wfDebugDieBacktrace( 'Given array to checkTitleEncoding.' );
+                       throw new MWException( 'Given array to checkTitleEncoding.' );
                }
                if ( StringUtils::isUtf8( $s ) ) {
                        return $s;
@@ -3068,7 +3068,7 @@ class Language {
         * Normally we output all numbers in plain en_US style, that is
         * 293,291.235 for twohundredninetythreethousand-twohundredninetyone
         * point twohundredthirtyfive. However this is not suitable for all
-        * languages, some such as Pakaran want ੨੯੩,੨੯੫.੨੩੫ and others such as
+        * languages, some such as Punjabi want ੨੯੩,੨੯੫.੨੩੫ and others such as
         * Icelandic just want to use commas instead of dots, and dots instead
         * of commas like "293.291,235".
         *
index 454ce34..60cf2b1 100644 (file)
@@ -63,24 +63,4 @@ class LanguageCu extends Language {
                }
                return $word;
        }
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) {
-                       return '';
-               }
-               $forms = $this->preConvertPlural( $forms, 4 );
-
-               switch ( $count % 10 ) {
-                       case 1: return $forms[0];
-                       case 2: return $forms[1];
-                       case 3:
-                       case 4: return $forms[2];
-                       default: return $forms[3];
-               }
-       }
 }
index 39bdfb5..0e2d8b4 100644 (file)
@@ -114,30 +114,6 @@ class LanguageEo extends Language {
                return strtr( $matches[1], $xu ) . strtr( $matches[2], $xu );
        }
 
-       /**
-        * @param $s string
-        * @return string
-        */
-       function checkTitleEncoding( $s ) {
-               # Check for X-system backwards-compatibility URLs
-               $ishigh = preg_match( '/[\x80-\xff]/', $s );
-               $isutf = preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
-                       '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );
-
-               if ( $ishigh and !$isutf ) {
-                       # Assume Latin1
-                       $s = utf8_encode( $s );
-               } elseif ( preg_match( '/(\xc4[\x88\x89\x9c\x9d\xa4\xa5\xb4\xb5]' .
-                               '|\xc5[\x9c\x9d\xac\xad])/', $s )
-               ) {
-                       return $s;
-               }
-
-               // if( preg_match( '/[cghjsu]x/i', $s ) )
-               //      return $this->iconv( 'x', 'utf-8', $s );
-               return $s;
-       }
-
        function initEncoding() {
                global $wgEditEncoding;
                $wgEditEncoding = 'x';
diff --git a/languages/classes/LanguageHi.php b/languages/classes/LanguageHi.php
deleted file mode 100644 (file)
index 6f7edb4..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/**
- * Hindi (हिन्दी) specific code.
- *
- * 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 Language
- */
-
-/**
- * Hindi (हिन्दी)
- *
- * @ingroup Language
- */
-class LanguageHi extends Language {
-       /**
-        * Use singular form for zero
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) {
-                       return '';
-               }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
-}
diff --git a/languages/classes/LanguageMg.php b/languages/classes/LanguageMg.php
deleted file mode 100644 (file)
index bf6800c..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/**
- * Malagasy (Malagasy) specific code.
- *
- * 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 Language
- */
-
-/**
- * Malagasy (Malagasy)
- *
- * @ingroup Language
- */
-class LanguageMg extends Language {
-       /**
-        * Use singular form for zero
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) {
-                       return '';
-               }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
-}
diff --git a/languages/classes/LanguageMt.php b/languages/classes/LanguageMt.php
deleted file mode 100644 (file)
index 20213a8..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Maltese (Malti) specific code.
- *
- * 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
- * @author Niklas Laxström
- * @ingroup Language
- */
-
-/**
- * Maltese (Malti)
- *
- * @ingroup Language
- */
-class LanguageMt extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) {
-                       return '';
-               }
-
-               $forms = $this->preConvertPlural( $forms, 4 );
-
-               if ( $count == 1 ) {
-                       $index = 0;
-               } elseif ( $count == 0 || ( $count % 100 > 1 && $count % 100 < 11 ) ) {
-                       $index = 1;
-               } elseif ( $count % 100 > 10 && $count % 100 < 20 ) {
-                       $index = 2;
-               } else {
-                       $index = 3;
-               }
-               return $forms[$index];
-       }
-}
index e15c9e2..8e286c9 100644 (file)
  * @ingroup Language
  */
 class LanguagePl extends Language {
-
-       /**
-        * @param $count string
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) {
-                       return '';
-               }
-               $forms = $this->preConvertPlural( $forms, 3 );
-               $count = abs( $count );
-               if ( $count == 1 ) {
-                       return $forms[0]; // singular
-               }
-               switch ( $count % 10 ) {
-                       case 2:
-                       case 3:
-                       case 4:
-                               if ( $count / 10 % 10 != 1 ) {
-                                       return $forms[1]; // plural
-                               }
-                       default:
-                               return $forms[2];   // plural genitive
-               }
-       }
-
        /**
         * @param $_ string
         * @return string
diff --git a/languages/classes/LanguageSh.php b/languages/classes/LanguageSh.php
deleted file mode 100644 (file)
index 83c42cc..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Serbo-Croatian (Srpskohrvatski / Српскохрватски) specific code.
- *
- * 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 Language
- */
-
-/**
- * Serbo-Croatian (Srpskohrvatski / Српскохрватски)
- *
- * @ingroup Language
- */
-class LanguageSh extends Language {
-
-       /**
-        * @param $count string
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) {
-                       return '';
-               }
-
-               // if no number with word, then use $form[0] for singular and $form[1] for plural or zero
-               if ( count( $forms ) === 2 ) {
-                       return $count == 1 ? $forms[0] : $forms[1];
-               }
-
-               // @todo FIXME: CLDR defines 4 plural forms. Form with decimals missing.
-               // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#sh
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) {
-                       return $forms[2];
-               } else {
-                       switch ( $count % 10 ) {
-                               case 1: return $forms[0];
-                               case 2:
-                               case 3:
-                               case 4: return $forms[1];
-                               default: return $forms[2];
-                       }
-               }
-       }
-}
diff --git a/languages/classes/LanguageSk.php b/languages/classes/LanguageSk.php
deleted file mode 100644 (file)
index cd15f18..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Slovak (Slovenčina) specific code.
- *
- * 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 Language
- */
-
-/**
- * Slovak (Slovenčina)
- *
- * @ingroup Language
- */
-class LanguageSk extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) {
-                       return '';
-               }
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count == 1 ) {
-                       $index = 0;
-               } elseif ( $count == 2 || $count == 3 || $count == 4 ) {
-                       $index = 1;
-               } else {
-                       $index = 2;
-               }
-               return $forms[$index];
-       }
-}
diff --git a/languages/classes/LanguageTi.php b/languages/classes/LanguageTi.php
deleted file mode 100644 (file)
index f17b4d1..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/**
- * Tigrinya (ትግርኛ) specific code.
- *
- * 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 Language
- */
-
-/**
- * Tigrinya (ትግርኛ)
- *
- * @ingroup Language
- */
-class LanguageTi extends Language {
-       /**
-        * Use singular form for zero
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) {
-                       return '';
-               }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
-}
diff --git a/languages/classes/LanguageTl.php b/languages/classes/LanguageTl.php
deleted file mode 100644 (file)
index 060d1e2..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/**
- * Tagalog (Tagalog) specific code.
- *
- * 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 Language
- */
-
-/**
- * Tagalog (Tagalog)
- *
- * @ingroup Language
- */
-class LanguageTl extends Language {
-       /**
-        * Use singular form for zero
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) {
-                       return '';
-               }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
-}
index fde8c53..e5f7438 100644 (file)
  * @ingroup Language
  */
 class LanguageWa extends Language {
-       /**
-        * Use singular form for zero
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) {
-                       return '';
-               }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
 
        /**
         * Dates in Walloon are "1î d' <monthname>" for 1st of the month,
index 1a418c4..56a674e 100644 (file)
@@ -313,7 +313,7 @@ $messages = array(
 'vector-simplesearch-preference' => 'Peuudep beunteueng mita biasa (kulet Vector khong)',
 'vector-view-create' => 'Peugöt',
 'vector-view-edit' => 'Andam',
-'vector-view-history' => 'Atra u likôt',
+'vector-view-history' => 'Eu riwayat',
 'vector-view-view' => 'Beuët',
 'vector-view-viewsource' => 'Eu nè',
 'actions' => 'Buët',
@@ -329,8 +329,8 @@ $messages = array(
 'searchbutton' => 'Mita',
 'go' => 'Jak u',
 'searcharticle' => 'Jak u',
-'history' => 'Atra u likot',
-'history_short' => 'Atra u likôt',
+'history' => 'Riwayat ôn',
+'history_short' => 'Riwayat',
 'updatedmarker' => 'geuubah yoh seunaweue keuneulheueh lon phon kon',
 'printableversion' => 'Seunalén rakam',
 'permalink' => 'Hubông teutap',
@@ -356,7 +356,7 @@ $messages = array(
 'personaltools' => 'Peukakaih droë',
 'postcomment' => 'Beunagi baro',
 'articlepage' => 'Eu ôn asoë',
-'talk' => 'Peugah haba',
+'talk' => 'Marit',
 'views' => 'Ôn',
 'toolbox' => 'Plôk alat',
 'userpage' => 'Eu on ureueng nguy',
@@ -370,7 +370,7 @@ $messages = array(
 'otherlanguages' => 'Bahsa la’én',
 'redirectedfrom' => '(Geupeupinah nibak $1)',
 'redirectpagesub' => 'Ôn peuninah',
-'lastmodifiedat' => 'Ôn nyoë keuneulheuëh geu’ubah bak $2, $1.',
+'lastmodifiedat' => 'Ôn nyoë seuneulheuëh geuubah bak $2, $1.',
 'viewcount' => 'On nyoe ka geusaweue {{PLURAL:$1|sigo|$sigo}}.<br />',
 'protectedpage' => 'Ôn teupeulindông',
 'jumpto' => 'Lansông u:',
@@ -561,19 +561,19 @@ Meunyo ureueng la\'en nyang peugot neulakee nyoe, atawa meunyo droeneuh ka neuin
 
 # Edit page toolbar
 'bold_sample' => 'Rakam teubay naseukah nyoë',
-'bold_tip' => 'Citak teubay',
+'bold_tip' => 'Haraih teubay',
 'italic_sample' => 'Rakam singèt naseukah nyoë',
 'italic_tip' => 'Rakam singèt',
 'link_sample' => 'Nan hubông',
 'link_tip' => 'Hubông dalam',
-'extlink_sample' => 'http://www.example.com nan neuhubông',
+'extlink_sample' => 'http://www.example.com nan hubông',
 'extlink_tip' => 'Hubông luwa (bèk tuwoë bôh http:// bak away)',
 'headline_sample' => 'Naseukah nan',
 'headline_tip' => 'Aneuk beunagi tingkat 1',
 'nowiki_sample' => 'Bèk format naseukah nyoë',
 'nowiki_tip' => 'Bèk seutot beuntuk wiki',
 'image_tip' => 'Pasoë beureukaih',
-'media_tip' => 'Hubông beureukah alat',
+'media_tip' => 'Hubông beureukaih',
 'sig_tip' => 'Tanda jaroë Droëneuh ngön tanda watèë',
 'hr_tip' => 'Garéh data',
 
@@ -806,7 +806,7 @@ Ceunatat: (bida) = neuubah, (riwayat) = riwayat teumuléh, '''B''' = ôn barô,
 # File description page
 'file-anchor-link' => 'Beureukaih',
 'filehist' => 'Riwayat beureukaih',
-'filehist-help' => 'Teugon bak uroë buleuën/watèë keu eu beureukaih nyoë ‘oh watèë nyan.',
+'filehist-help' => "Neuteugon bak uroë buleuën/watèë keu neu'eu beureukaih nyoë ‘oh watèë nyan.",
 'filehist-revert' => 'peuriwang',
 'filehist-current' => 'jinoë hat',
 'filehist-datetime' => 'Uroë buleuën/Watèë',
@@ -815,7 +815,7 @@ Ceunatat: (bida) = neuubah, (riwayat) = riwayat teumuléh, '''B''' = ôn barô,
 'filehist-user' => 'Ureuëng nguy',
 'filehist-dimensions' => 'Dimènsi',
 'filehist-filesize' => 'Rayek beureukah',
-'filehist-comment' => 'Tapeusé',
+'filehist-comment' => "Seuneu'ôt",
 'imagelinks' => 'Neunguy beureukaih',
 'linkstoimage' => 'Ôn di yup nyoë na {{PLURAL:$1|hubông|$1 hubông}} u beureukah nyoë:',
 'nolinkstoimage' => 'Hana ôn nyang na hubông u beureukah nyoë.',
@@ -1085,7 +1085,7 @@ Lam masalah nyoë, meunyo neuhawa, Droëneuh jeuët neupeupinah atawa neupeugab
 'tooltip-pt-userpage' => 'Ôn ureuëng nguy Droëneuh',
 'tooltip-pt-mytalk' => 'Ôn marit Droëneuh',
 'tooltip-pt-preferences' => 'Atô',
-'tooltip-pt-watchlist' => 'Dapeuta ôn nyang lôn kalön',
+'tooltip-pt-watchlist' => 'Dapeuta ôn nyang lônkalön',
 'tooltip-pt-mycontris' => 'Dapeuta beuneuri Droëneuh',
 'tooltip-pt-login' => 'Droëneuh geupadan keu tamong log, bah pih nyan hana geupeuwajéb.',
 'tooltip-pt-logout' => 'Teubiët',
@@ -1094,7 +1094,7 @@ Lam masalah nyoë, meunyo neuhawa, Droëneuh jeuët neupeupinah atawa neupeugab
 'tooltip-ca-addsection' => 'Puphôn beunagi barô',
 'tooltip-ca-viewsource' => 'Ôn nyoë geupeulindông.
 Droëneuh jeuët neu’eu nèjih.',
-'tooltip-ca-history' => 'Seunalén-seunalén sigohlomjih nibak ôn nyoë',
+'tooltip-ca-history' => 'Seunalén away nibak ôn nyoë',
 'tooltip-ca-protect' => 'Peulindông ôn nyoë',
 'tooltip-ca-delete' => 'Sampôh ôn nyoë',
 'tooltip-ca-move' => 'Peupinah ôn nyoë',
@@ -1103,16 +1103,16 @@ Droëneuh jeuët neu’eu nèjih.',
 'tooltip-search' => 'Mita {{SITENAME}}',
 'tooltip-search-go' => 'Mita saboh ôn ngon nan nyang peureuséh lagèë nyoë meunyo na',
 'tooltip-search-fulltext' => 'Mita ôn nyang na asoë lagèë nyoë',
-'tooltip-p-logo' => 'Saweuë Ã\94n Keuë',
-'tooltip-n-mainpage' => 'Jak u Ã\94n Keuë',
-'tooltip-n-mainpage-description' => 'Saweuë Ã\94n Keuë',
+'tooltip-p-logo' => 'Saweuë Ã´n keuë',
+'tooltip-n-mainpage' => 'Jak u Ã´n keuë',
+'tooltip-n-mainpage-description' => 'Saweuë Ã´n keuë',
 'tooltip-n-portal' => 'Bhaih buët, peuë nyang jeuët neupeulaku, pat tamita sipeuë hay',
 'tooltip-n-currentevents' => 'Mita haba barô',
 'tooltip-n-recentchanges' => 'Dapeuta neuubah baro lam wiki.',
 'tooltip-n-randompage' => 'Peuleumah ôn beurangkari',
 'tooltip-n-help' => 'Bak mita bantu.',
 'tooltip-t-whatlinkshere' => 'Dapeuta ban dum ôn wiki nyang na neuhubông u ôn nyoë',
-'tooltip-t-recentchangeslinked' => 'Neuubah barô ôn-ôn nyang na neuhubông u ôn nyoë',
+'tooltip-t-recentchangeslinked' => 'Neuubah barô ôn nyang na seuneumat u ôn nyoë',
 'tooltip-feed-rss' => 'Umpeuën RSS keu ôn nyoë',
 'tooltip-feed-atom' => 'Umpeuën Atom keu ôn nyoë',
 'tooltip-t-contributions' => 'Eu dapeuta nyang ka geutuléh lé ureuëng nguy nyoë',
@@ -1120,7 +1120,7 @@ Droëneuh jeuët neu’eu nèjih.',
 'tooltip-t-upload' => 'Peutamong beureukaih',
 'tooltip-t-specialpages' => 'Dapeuta ban dum ôn kusuih',
 'tooltip-t-print' => 'Seunalén rakam ôn nyoë',
-'tooltip-t-permalink' => 'Neuhubông teutap keu geunantoë ôn nyoë',
+'tooltip-t-permalink' => 'Hubông teutap keu geunantoë ôn nyoë',
 'tooltip-ca-nstab-main' => 'Eu ôn asoë',
 'tooltip-ca-nstab-user' => 'Eu ôn ureuëng nguy',
 'tooltip-ca-nstab-special' => 'Nyoë nakeuh ôn kusuih nyang h’an jeuët geu’andam.',
@@ -1131,7 +1131,7 @@ Droëneuh jeuët neu’eu nèjih.',
 'tooltip-ca-nstab-category' => 'Eu ôn kawan',
 'tooltip-minoredit' => 'Bôh tanda keu nyoë sibagoë andam bacut',
 'tooltip-save' => 'Keubah neuubah Droëneuh',
-'tooltip-preview' => 'Peuleumah neuubah Droëneuh, nguy nyoë sigohlom keubah!',
+'tooltip-preview' => 'Peuleumah neuubah Droëneuh, neunguy nyoë sigohlom neukeubah!',
 'tooltip-diff' => 'Peuleumah neuubah nyang ka Droëneuh peugöt',
 'tooltip-compareselectedversions' => 'Ngiëng bida antara duwa curak ôn nyang jipilèh.',
 'tooltip-watch' => 'Peutamah ôn nyoë u dapeuta keunalön Droëneuh',
index fed3ead..14285d3 100644 (file)
@@ -19,6 +19,7 @@
  * @author Purodha
  * @author Reedy
  * @author SPQRobin
+ * @author Servien
  * @author Shirayuki
  * @author Spacebirdy
  * @author Xethron
@@ -252,6 +253,7 @@ $messages = array(
 'tog-showhiddencats' => 'Wys versteekte kategorië',
 'tog-norollbackdiff' => 'Laat verskille weg na terugrol',
 'tog-useeditwarning' => "Waarsku my as ek 'n gewysigde bladsy verlaat voordat dit gestoor is",
+'tog-prefershttps' => "Gebruik altyd 'n beveiligde verbinding wanneer aangemeld is",
 
 'underline-always' => 'Altyd',
 'underline-never' => 'Nooit',
@@ -352,7 +354,7 @@ $messages = array(
 'newwindow' => '(verskyn in nuwe venster)',
 'cancel' => 'Kanselleer',
 'moredotdotdot' => 'Meer…',
-'morenotlisted' => 'Meer nie gelys nie...',
+'morenotlisted' => 'Die lys is nie volledig nie.',
 'mypage' => 'Gebruikersblad',
 'mytalk' => 'Bespreking',
 'anontalk' => 'Besprekingsblad vir hierdie IP',
@@ -455,7 +457,7 @@ $1",
 # 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).
 'aboutsite' => 'Inligting oor {{SITENAME}}',
 'aboutpage' => 'Project:Omtrent',
-'copyright' => 'Teks is beskikbaar onderhewig aan $1.',
+'copyright' => 'Inhoud is onderhewig aan $1, tensy anders vermeld',
 'copyrightpage' => '{{ns:project}}:kopiereg',
 'currentevents' => 'Huidige gebeure',
 'currentevents-url' => 'Project:Huidige gebeure',
@@ -538,6 +540,10 @@ Dit kan ook dui op 'n fout in die sagteware van {{SITENAME}}.",
 # General errors
 'error' => 'Fout',
 'databaseerror' => 'Databasisfout',
+'databaseerror-textcl' => "'n Databasis-versoek het gefaal.",
+'databaseerror-query' => 'SQL: $1',
+'databaseerror-function' => 'Funksie: $1',
+'databaseerror-error' => 'Fout: $1',
 'laggedslavemode' => 'Waarskuwing: Onlangse wysigings dalk nie in bladsy vervat nie.',
 'readonly' => 'Databasis gesluit',
 'enterlockreason' => 'Rede vir die sluiting,
@@ -820,6 +826,9 @@ Tydelike wagwoord: $2',
 'changeemail-submit' => 'Wysig E-posadres',
 'changeemail-cancel' => 'Kanselleer',
 
+# Special:ResetTokens
+'resettokens-token-label' => '$1 (huidige waarde: $2)',
+
 # Edit page toolbar
 'bold_sample' => 'Vetgedrukte teks',
 'bold_tip' => 'Vetdruk',
@@ -1403,9 +1412,9 @@ Die tildes word in u handtekening omgeskakel en die datum en tyd word insluit.',
 'badsiglength' => 'U handtekening is te lank.
 Dit mag nie meer as $1 {{PLURAL:$1|karakter|karakters}} bevat nie.',
 'yourgender' => 'Geslag:',
-'gender-unknown' => 'Nie gespesifiseer',
-'gender-male' => 'Man',
-'gender-female' => 'Vrou',
+'gender-unknown' => 'Ek wil nie sê nie',
+'gender-male' => 'Hy bewerk wikiblaaie',
+'gender-female' => 'Sy bewerk wikiblaaie',
 'prefs-help-gender' => 'Opsioneel: dit word gebruik om gebruikers korrek aan te spreek in die sagteware.
 Die inligting is vir ander gebruikers sigbaar.',
 'email' => 'E-pos',
@@ -1566,7 +1575,7 @@ As u dit verskaf, sal dit gebruik word om erkenning vir u werk te gee.',
 'action-edit' => 'hierdie bladsy te wysig nie',
 'action-createpage' => 'skep bladsye',
 'action-createtalk' => 'skep besprekingsblaaie',
-'action-createaccount' => 'skep die genruiker',
+'action-createaccount' => 'skep die gebruiker',
 'action-minoredit' => "merk die wysiging as 'n klein verandering",
 'action-move' => 'skuif die bladsy',
 'action-move-subpages' => 'skuif die bladsy met sy subbladsye',
@@ -1604,6 +1613,8 @@ As u dit verskaf, sal dit gebruik word om erkenning vir u werk te gee.',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|wysiging|wysigings}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|sedert u laaste besoek}}',
+'enhancedrc-history' => 'geskiedenis',
 'recentchanges' => 'Onlangse wysigings',
 'recentchanges-legend' => 'Opsies vir onlangse wysigings',
 'recentchanges-summary' => 'Volg die mees onlangse wysigings aan die wiki op die bladsy.',
@@ -1635,7 +1646,7 @@ As u dit verskaf, sal dit gebruik word om erkenning vir u werk te gee.',
 'rc_categories_any' => 'Enige',
 'rc-change-size-new' => '$1 {{PLURAL:$1|greep|grepe}} na die wysiging',
 'newsectionsummary' => '/* $1 */ nuwe afdeling',
-'rc-enhanced-expand' => 'Wys details (benodig JavaScript)',
+'rc-enhanced-expand' => 'Wys details',
 'rc-enhanced-hide' => 'Steek details weg',
 'rc-old-title' => 'oorspronklik geskep as "$1"',
 
@@ -1917,6 +1928,9 @@ Kliek op die opskrifte om die tabel te hersorteer.',
 'listfiles_size' => 'Grootte',
 'listfiles_description' => 'Beskrywing',
 'listfiles_count' => 'Weergawes',
+'listfiles-latestversion' => 'Huidige weergawe',
+'listfiles-latestversion-yes' => 'Ja',
+'listfiles-latestversion-no' => 'Nee',
 
 # File description page
 'file-anchor-link' => 'Lêer',
@@ -2011,6 +2025,11 @@ Miskien wil u eerder die beskrywing daar op die [$2 lêerbeskrywing] bywerk.',
 'randompage' => 'Lukrake bladsy',
 'randompage-nopages' => 'Daar is geen bladsye in die volgende {{PLURAL:$2|naamruimte|naamruimtes}} nie: $1.',
 
+# Random page in category
+'randomincategory-invalidcategory' => '"$1" is nie \'n geldige kategorienaam nie.',
+'randomincategory-nopages' => 'Daar is geen bladsye in kategorie [[:Category:$1|$1]].',
+'randomincategory-selectcategory-submit' => 'Gaan',
+
 # Random redirect
 'randomredirect' => 'Lukrake aanstuur',
 'randomredirect-nopages' => 'Daar is geen aansture in naamruimte "$1" nie.',
@@ -3067,12 +3086,12 @@ Hierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons
 'pageinfo-article-id' => 'Bladsy-ID',
 'pageinfo-language' => 'Taal vir die bladsy',
 'pageinfo-robot-policy' => 'Status vir soekenjins',
-'pageinfo-robot-index' => 'Indekseerbaar',
-'pageinfo-robot-noindex' => 'Nie indekseerbaar nie',
+'pageinfo-robot-index' => 'Toegestaan',
+'pageinfo-robot-noindex' => 'Nie toegestaan',
 'pageinfo-views' => 'Aantal kere gewys',
 'pageinfo-watchers' => 'Aantal dophouers',
 'pageinfo-few-watchers' => 'Minder as {{PLURAL:$1|dophouer|$1 dophouers}}',
-'pageinfo-redirects-name' => 'Aansture na die bladsy',
+'pageinfo-redirects-name' => 'Aantal aansture na die bladsy',
 'pageinfo-subpages-name' => 'Subblaaie van die bladsy',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|aanstuur|aansture}}; $3 {{PLURAL:$3|nie-aanstuur|nie-aansture}})',
 'pageinfo-firstuser' => 'Gebruiker wat die bladsy geskep het',
@@ -3805,6 +3824,7 @@ U kan ook die [[Special:EditWatchlist|standaard opdaterigskerm gebruik]].',
 'version-license' => 'Lisensie',
 'version-poweredby-credits' => "Hierdie wiki word aangedryf deur '''[//www.mediawiki.org/ MediaWiki]''', kopiereg © 2001-$1 $2.",
 'version-poweredby-others' => 'andere',
+'version-poweredby-translators' => 'translatewiki.net-vertalers',
 'version-credits-summary' => 'Ons erken graag die volgende persone vir hul bydrae aan [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki is vrye sagteware, u kan MediaWiki versprei en/of wysig onder die voorwaardes van die "GNU Algemene Publieke Lisensie", soos deur die "Free Software Foundation" gepubliseer; óf weergawe 2 van die lisensie, of (as u wil) enige latere weergawe daarvan.
 
@@ -3905,6 +3925,7 @@ Saam met die program moes u \'n [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van van
 'dberr-problems' => 'Jammer! Die webwerf ondervind op die oomblik tegniese probleme.',
 'dberr-again' => "Wag 'n paar minute en probeer dan weer.",
 'dberr-info' => '(Kan nie die databasisbediener kontak nie: $1)',
+'dberr-info-hidden' => '(Kan nie die databasisbediener kontak nie)',
 'dberr-usegoogle' => 'Tot tyd en wyl kan u inligting op Google soek.',
 'dberr-outofdate' => 'Let daarop dat hulle indekse van ons inhoud moontlik verouderd mag wees.',
 'dberr-cachederror' => "Hierdie is 'n gekaste kopie van die aangevraagde blad, en dit mag moontlik nie op datum wees nie.",
@@ -4040,4 +4061,17 @@ Anders kan u die eenvoudige vorm hieronder gebruik. U kommentaar sal by die blad
 # Image rotation
 'rotate-comment' => 'Beeld $1 {{PLURAL:$1|graad|grade}} kloksgewys gedraai',
 
+# Limit report
+'limitreport-title' => 'Ontleder se prestasie:',
+'limitreport-cputime' => 'Tydsgebruik van SVE',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|sekonde|sekondes}}',
+'limitreport-walltime' => 'Reëel tydsgebruik',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekonde|sekondes}}',
+'limitreport-ppvisitednodes' => 'Aantal nodes besoek tydens voorverwerking:',
+'limitreport-ppgeneratednodes' => 'Aantal nodes geskep tydens voorverwerking:',
+'limitreport-postexpandincludesize' => 'Inklusiegrootte na uitbreiding',
+'limitreport-postexpandincludesize-value' => '$1/$2 grepe',
+'limitreport-templateargumentsize-value' => '$1/$2 grepe',
+'limitreport-expansiondepth' => 'Hoogste uitbreidingsdiepte',
+
 );
index 06db089..10330ed 100644 (file)
@@ -264,7 +264,7 @@ $messages = array(
 'cancel' => 'Cancelar',
 'moredotdotdot' => 'Más...',
 'mypage' => 'A mía pachina',
-'mytalk' => 'Pachina de descusión',
+'mytalk' => 'Pachina de discusión',
 'anontalk' => "Pachina de descusión d'ista IP",
 'navigation' => 'Navego',
 'and' => '&#32;y',
@@ -731,8 +731,8 @@ Diferents usuarios pueden compartir una mesma adreza IP.
 Si vusté ye un usuario anonimo y creye que l'han escrito comentarios no relevants, [[Special:UserLogin/signup|creye una cuenta]] u [[Special:UserLogin/signup|identifique-se]] ta privar confusions futuras con atros usuarios anonimos.''",
 'noarticletext' => 'Por agora no bi ha garra texto en ista pachina. Puet [[Special:Search/{{PAGENAME}}|mirar o títol d\'ista pachina]] en atras pachinas, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mirar os rechistros relacionatos] u [{{fullurl:{{FULLPAGENAME}}|action=edit}} escribir ista pachina]</span>.',
 'noarticletext-nopermission' => 'Por l\'inte no i hai garra texto en ista pachina.
-Puet [[Special:Search/{{PAGENAME}}|mirar iste títol]] en atras páginas,
-u bien <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mirar en os rechistros relacionatos]</span>.',
+Puede [[Special:Search/{{PAGENAME}}|mirar iste titol]] en atras pachinas,
+u bien <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mirar en os rechistros relacionatos]</span>, pero no tien permiso ta creyar ista pachina.',
 'userpage-userdoesnotexist' => 'A cuenta d\'usuario "<nowiki>$1</nowiki>" no ye rechistrada. Piense si quiere creyar u editar ista pachina.',
 'userpage-userdoesnotexist-view' => 'A cuenta d\'usuario "$1" no ye rechistrada.',
 'blocked-notice-logextract' => "Ista cuenta d'usuario ye actualment bloqueyata.
@@ -755,7 +755,7 @@ A zaguera dentrada d'o rechistro de bloqueyos s'amuestra contino:",
 'userinvalidcssjstitle' => "'''Pare cuenta:''' No bi ha garra aparencia clamata \"\$1\". Remere que as pachinas presonalizatas .css y .js tienen un títol en minusclas, p.e. {{ns:user}}:Foo/vector.css en cuenta de {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Esviellato)',
 'note' => "'''Nota:'''",
-'previewnote' => "'''Pare cuenta que isto no ye que l'anvista previa d'a pachina; os cambeos encara no s'ha alzato!'''",
+'previewnote' => "'''Pare cuenta que isto no ye que l'anvista previa.''' Os cambeos encara no s'ha alzato!",
 'previewconflict' => "L'anvista previa li amostrará l'aparencia d'o texto dimpués d'alzar os cambeos.",
 'session_fail_preview' => "'''Ya lo sentimos, pero no hemos puesto alzar a suya edición por una perda d'os datos de sesion. Por favor, prebe de fer-lo una atra vez, y si encara no funciona, [[Special:UserLogout|salga d'a sesión]] y torne a identificar-se.'''",
 'session_fail_preview_html' => "'''Ya lo sentimos, pero no s'ha puesto procesar a suya edición por haber-se trafegato os datos de sesión.'''
@@ -870,8 +870,8 @@ A razón indicada por $3 ye ''$2''",
 Leyenda: '''({{int:cur}})''' = esferencias con a versión actual, '''({{int:last}})''' = esferencias con a versión anterior, '''{{int:minoreditletter}}''' = edición menor",
 'history-fieldset-title' => 'Mirar en o historial',
 'history-show-deleted' => 'Nomás os borratos',
-'histfirst' => 'Primeras contrebucions',
-'histlast' => 'Zagueras',
+'histfirst' => 'primeras',
+'histlast' => 'zagueras',
 'historysize' => '({{PLURAL:$1|1 byte|$1 bytes}})',
 'historyempty' => '(buedo)',
 
@@ -1383,7 +1383,7 @@ Habría de tener menos de $1 {{PLURAL:$1|carácter|carácters}}.',
 'rc_categories_any' => 'Todas',
 'rc-change-size-new' => "$1 {{PLURAL:$1|byte|bytes}} dimpués d'o cambio",
 'newsectionsummary' => 'Nueva sección: /* $1 */',
-'rc-enhanced-expand' => 'Amostrar detalles (cal JavaScript)',
+'rc-enhanced-expand' => 'Amostrar detalles',
 'rc-enhanced-hide' => 'Amagar detalles',
 
 # Recent changes linked
@@ -2212,10 +2212,10 @@ $1",
 'blanknamespace' => '(Prencipal)',
 
 # Contributions
-'contributions' => "Contrebucions de l'usuario",
+'contributions' => "Contribucions de {{GENDER:$1|l'usuario|la usuaria}}",
 'contributions-title' => "Contribucions de l'usuario $1",
-'mycontris' => 'Contrebucions',
-'contribsub2' => 'De $1 ($2)',
+'mycontris' => 'Contribucions',
+'contribsub2' => 'Ta {{GENDER:$3|$1}} ($2)',
 'nocontribs' => "No s'han trobato cambeos que concordasen con ixos criterios",
 'uctop' => '(zaguer cambeo)',
 'month' => 'Dende o mes (y anteriors):',
index f704d94..3c723b7 100644 (file)
@@ -154,15 +154,15 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Flocc|Floccas}}',
-'category_header' => 'Trametas in flocce "$1"',
+'category_header' => 'Trametas in "$1" flocce',
 'subcategories' => 'Underfloccas',
-'category-media-header' => 'Missenmiddel in flocce "$1"',
-'category-empty' => "''Þes flocc hæfþ nū nǣngu geƿritu oþþe missenmiddel.''",
-'hidden-categories' => '{{PLURAL:$1|Gehȳded flocc|$1 Gehȳdede floccas}}',
+'category-media-header' => 'Missenmiddel in "$1" flocce',
+'category-empty' => "''Þes flocc hæfþ nū nǣngu gewritu oþþe missenmiddel.''",
+'hidden-categories' => '{{PLURAL:$1|Gehȳded flocc|$1 Gehȳdedra flocca}}',
 'hidden-category-category' => 'Gehȳdede floccas',
 'category-subcat-count' => '{{PLURAL:$2|Þes flocc hæfþ synderlīce þone folgiendan underflocc.|Þes flocc hæfþ {{PLURAL:$1|þone folgiendan underflocc|þā folgiendan $1 underflocca}} - þæt fulle rīm is $2.}}',
 'category-subcat-count-limited' => 'Þes flocc hæfþ {{PLURAL:$1|þisne underflocc|$1 þās underfloccas}}.',
-'category-article-count' => '{{PLURAL:$2|Þes flocc hæfþ synderlīce þone folgiendan ānne tramet.|{{PLURAL:$1|Se folgienda tramet is|Þā folgiendan $1 trametaa sind}} in þissum flocce - þæt fulle rīm is $2.}}',
+'category-article-count' => '{{PLURAL:$2|Þes flocc hæfþ synderlīce þone folgiendan tramet.|{{PLURAL:$1|Se folgienda tramet is|Þā folgiendan $1 trameta sind}} in þissum flocce - þæt fulle rīm is $2.}}',
 'category-article-count-limited' => '{{PLURAL:$1|Se folgienda tramet is|$1 Þā folgiendan trametas sind}} on þissum flocce hēr.',
 'category-file-count' => '{{PLURAL:$2|Þes flocc hæfþ synderlīce þā folgiendan ymelan.|{{PLURAL:$1|Sēo folgiende ymele is|Þā folgiendan $1 ymelena sind}} in þissum flocce - þæt fulle rīm is $2.}}',
 'category-file-count-limited' => '{{PLURAL:$1|Þēos ymele is|$1 Þās ymelan sind}} in þissum flocce hēr.',
@@ -171,7 +171,7 @@ $messages = array(
 'noindex-category' => 'Ungetǣcnede trametas',
 'broken-file-category' => 'Trametas þā habbaþ gebrocene hlencan mid ymelum',
 
-'about' => 'Gecȳþness',
+'about' => 'Cȳþþu',
 'article' => 'Innunge tramet',
 'newwindow' => '(openaþ in nīwum ēagþyrele)',
 'cancel' => 'Undōn',
@@ -194,7 +194,7 @@ $messages = array(
 'faqpage' => 'Project:FAQ',
 
 # Vector skin
-'vector-action-addsection' => 'Ēacnian mid mearcunge',
+'vector-action-addsection' => 'Besettan mearcunge',
 'vector-action-delete' => 'Forlēosan',
 'vector-action-move' => 'Wegan',
 'vector-action-protect' => 'Beorgan',
@@ -221,7 +221,7 @@ $messages = array(
 'history' => 'Trametes stǣr',
 'history_short' => 'Stǣr',
 'updatedmarker' => 'nīwod æfter mīnre lætestan sōcne',
-'printableversion' => 'Ūtmǣlendlicu fadung',
+'printableversion' => 'Ūtmǣlendlīc fadung',
 'permalink' => 'Fæst hlenca',
 'print' => 'Ūtmǣlan',
 'view' => 'Sihþ',
@@ -403,10 +403,10 @@ Cnāw þæt sume trametas mihten gīet wesan geīwde swā þū wǣre gīet inmel
 'notloggedin' => 'Nā ingemeldod',
 'userlogin-noaccount' => 'Слерде аккаунт јок по?',
 'userlogin-joinproject' => '{{SITENAME}} кирер',
-'nologin' => 'Слерде аккаунт јок по? $1.',
+'nologin' => 'Næfst þū reccinge? $1',
 'nologinlink' => 'Scieppan reccinge',
 'createaccount' => 'Scieppan reccinge',
-'gotaccount' => 'Белен аккаунт бар ба? $1.',
+'gotaccount' => 'Hafast þū reccinge ǣr? $1.',
 'gotaccountlink' => 'Inmeldian',
 'createaccountmail' => 'Notian sceortne tīman hlētlic þafungword and sendan hit to þǣm spearcǣrenda naman þe is niðer',
 'createaccountreason' => 'Racu:',
@@ -425,7 +425,7 @@ Stafena micelnessa sind hefiga and ānlica on brūcendnamum.
 Scēawa þīne wrītunge eft, oþþe [[Special:UserLogin/signup|sciepp nīwe reccinge]].',
 'nosuchusershort' => 'Þǣr nis nān brūcend mid þǣm naman "$1".  Scēawa þīne wrītunge.',
 'passwordtooshort' => 'Þafungword sculon habban læst {{PLURAL:$1|1 stafan|$1 stafena}}.',
-'mailmypassword' => 'Sendan nīwe þafungword on spearcǣrend',
+'mailmypassword' => 'Sendan nīwe þafungword on spearcǣrende',
 'acct_creation_throttle_hit' => 'Hwæt, þu hæfst gēo geseted {{PLURAL:$1|1 hordcleofan|$1 -}}. Þu ne canst settan ǣnige māran.',
 'accountcreated' => 'Scōp reccinge',
 'loginlanguagelabel' => 'Sprǣc: $1',
@@ -448,7 +448,7 @@ Scēawa þīne wrītunge eft, oþþe [[Special:UserLogin/signup|sciepp nīwe rec
 'extlink_sample' => 'http://www.example.com hlencan nama',
 'extlink_tip' => 'Ūtanweard hlenca (beþenc þone http:// foredǣl)',
 'headline_sample' => 'Hēafodlīnan traht',
-'headline_tip' => 'Emnet 2 hēafodlīn',
+'headline_tip' => '2. emnettes hēafodlīn',
 'nowiki_sample' => 'Unendebyrdodne traht hēr settan',
 'nowiki_tip' => 'Wiki endebyrdunge forgietan',
 'image_sample' => 'Bisen.jpg',
@@ -459,7 +459,7 @@ Scēawa þīne wrītunge eft, oþþe [[Special:UserLogin/signup|sciepp nīwe rec
 'hr_tip' => 'Brād līn (ne brūc oft)',
 
 # Edit pages
-'summary' => 'Scortnes:',
+'summary' => 'Scortness:',
 'subject' => 'Ymbe/hēafodlīn:',
 'minoredit' => 'Þēos is lytel adihtung',
 'watchthis' => 'Behealdan þisne tramet',
@@ -480,9 +480,9 @@ Scēawa þīne wrītunge eft, oþþe [[Special:UserLogin/signup|sciepp nīwe rec
 
 Þū mōst þæt þafungword andwendan for þisse nīwan reccinge on þǣm ''[[Special:ChangePassword|andwendan þafungword]]'' tramete siþþan þū inmeldie.",
 'newarticle' => '(Nīwe)',
-'newarticletext' => "Þu hæfst bende tō tramete gefolgod þe nū gīet ne stendeþ.
-Tō scieppene þone tramet, onginn þyddan in þǣre boxe under (sēo þone [[{{MediaWiki:Helppage}}|helptramet]] for mā gefrǣge).
-Gif þu hider misfōn cōme, cnoca þā þīnne webbscēaweres '''on bæc''' cnæpp.",
+'newarticletext' => "Þū hæfst hlencan tō tramete þe nū gīet ne stent gefolgod.
+Tō scieppene þone tramet, onginn tō wrītenne in þǣre mearce þe is beneoþan (seoh þone [[{{MediaWiki:Helppage}}|helpes tramet]] ymb mā cȳþþu).
+Gif þū hider be misfēnge cōme, cnoca þīnes webbsēcendes '''on bæc''' cnæpp.",
 'usercssyoucanpreview' => "'''Rǣd:''' Brūc þone \"{{int:Forescēaƿian}}\" cnæpp tō costnienne þīne nīwan css/js wrītunge ǣr hit sīe hordod.",
 'userjsyoucanpreview' => "'''Rǣd:''' Brūc þone 'Forescēawian' cnæpp tō āfandienne þīne nīwe css/js beforan sparunge.",
 'updated' => '(Ednīwed)',
@@ -511,15 +511,15 @@ folcliċum āgnunge oþþe ȝelīċum frēom horde (sēo $1 for āscungum).
 'nocreate-loggedin' => 'Þū ne hæfst þafunge to scieppenne nīwe trametas.',
 'permissionserrors' => 'Þafunga wōh',
 'permissionserrorstext-withaction' => 'Þū ne hæfst þafunge tō $2, for {{PLURAL:$1|þisre race|þissum racum}}:',
-'recreate-moveddeleted-warn' => "'''Warnung: Þu edsciepst tramet þe wæs ǣr āfeorsod.'''
+'recreate-moveddeleted-warn' => "'''Warnung: Þū edsciepst tramet þe wæs ǣr forloren.'''
 
-Þu sceoldest smēagan, hwæðer hit gerādlic sīe, forþ tō gānne mid ādihtunge þisses trametes.
-Þæt āfeorsungbred þisses trametes is hēr geīeht for behēfnesse:",
+Þu sceoldest smēagan, hwæðer hit gerādlīc sīe, forþ tō gānne mid þǣre adihtunge þisses trametes.
+Þæt forlēosunge and wegunge ealdhord þisses trametes is hēr geīeht for behēfnesse:",
 
 # History pages
 'viewpagelogs' => 'Sēon þisses trametes ealdhold',
 'nohistory' => 'Nis nān adihtunge stǣr for þissum tramete.',
-'currentrev-asof' => 'Nīwost fadung on $1',
+'currentrev-asof' => 'Nīwost fadung on þǣre $3. tīde þæs $2.',
 'revisionasof' => 'Nīwung fram $1',
 'previousrevision' => '← Ieldre fadung',
 'nextrevision' => 'Nīwre fadung →',
@@ -528,8 +528,8 @@ folcliċum āgnunge oþþe ȝelīċum frēom horde (sēo $1 for āscungum).
 'next' => 'nīehst',
 'last' => 'ǣr',
 'history-fieldset-title' => 'Sēcan stǣr',
-'histfirst' => 'Ǣrest',
-'histlast' => 'Nīwost',
+'histfirst' => 'ieldeste',
+'histlast' => 'nīwoste',
 'historyempty' => '(æmettig)',
 
 # Revision feed
@@ -627,7 +627,7 @@ folcliċum āgnunge oþþe ȝelīċum frēom horde (sēo $1 for āscungum).
 'default' => 'gewunelic',
 'youremail' => 'Spearcǣrenda nama:',
 'username' => '{{GENDER:$1|Brūcendnama}}:',
-'yourrealname' => 'Þīn rihtnama*',
+'yourrealname' => 'Þīn sōða nama:',
 'yourlanguage' => 'Brūcendofermearces sprǣc',
 'yourvariant' => 'Sprǣce wendung:',
 'yourgender' => 'Gecynd:',
@@ -676,7 +676,7 @@ folcliċum āgnunge oþþe ȝelīċum frēom horde (sēo $1 for āscungum).
 'recentchanges-label-newpage' => 'Þēos adihtung scōp nīwne tramet',
 'recentchanges-label-minor' => 'Þēos is lytel adihtung',
 'recentchanges-label-bot' => 'Searuþrǣl fremede þās adihtunge',
-'rcnote' => "Under {{PLURAL:$1|... '''1''' ...|sind þā æftemestan '''$1''' hweorfunga}} in {{PLURAL:$2|...|þǣm æftemestum '''$2''' dagum}}, . . $5, $4.",
+'rcnote' => "Beneoðan {{PLURAL:$1|is '''1''' andwendung|sind þā æftemestan '''$1''' andwendunga}} in {{PLURAL:$2|þǣm æftermestan dæge|þǣm æftemestum '''$2''' daga}}, fram $5 on $4.",
 'rcnotefrom' => "Niðer sind þā andwendunga fram '''$2''' (mǣst īweþ '''$1''').",
 'rclistfrom' => 'Īwan nīwa andwendunga fram $1 and siþþan',
 'rcshowhideminor' => '$1 lytela adihtunga',
@@ -687,13 +687,13 @@ folcliċum āgnunge oþþe ȝelīċum frēom horde (sēo $1 for āscungum).
 'rclinks' => 'Īwan þā nīwostan $1 andwendunga in þissum nīehstum $2 daga<br />$3',
 'diff' => 'scēad',
 'hist' => 'stǣr',
-'hide' => 'hȳdan',
+'hide' => 'Hȳdan',
 'show' => 'Īwan',
 'minoreditletter' => 'ly',
 'newpageletter' => 'N',
 'boteditletter' => 'þr',
 'rc_categories_any' => 'Ǣnig',
-'rc-enhanced-expand' => 'Īwan stafas (þearf JavaScript)',
+'rc-enhanced-expand' => 'Īwan stafas',
 'rc-enhanced-hide' => 'Hȳdan stafas',
 
 # Recent changes linked
@@ -742,7 +742,7 @@ Gif se brūcend asifte hine. synderlīce sind ymelan geīwda þǣre þe se brūc
 # File description page
 'file-anchor-link' => 'Ymele',
 'filehist' => 'Ymelan stǣr',
-'filehist-help' => 'Swing dæg/tīde mid mýs to sēonne þā ymelan swā wæs hēo on þǣre tīde.',
+'filehist-help' => 'Swing dæg/tīde mid mȳs to sēonne þā ymelan swā wæo hēo on þǣre tīde.',
 'filehist-deleteall' => 'forlēosan eall',
 'filehist-deleteone' => 'forlēosan',
 'filehist-revert' => 'undōn',
@@ -774,7 +774,7 @@ Gif se brūcend asifte hine. synderlīce sind ymelan geīwda þǣre þe se brūc
 'unusedtemplateswlh' => 'ōðre hlencan',
 
 # Random page
-'randompage' => 'Gelimplic tramet',
+'randompage' => 'Gelimplīc tramet',
 
 # Statistics
 'statistics' => 'Cȳþþu',
@@ -816,8 +816,8 @@ Gif se brūcend asifte hine. synderlīce sind ymelan geīwda þǣre þe se brūc
 'ancientpages' => 'Ieldestan trametas',
 'move' => 'Wegan',
 'movethispage' => 'Wegan þisne tramet',
-'pager-newer-n' => '{{PLURAL:$1|nīwran 1|nīwran $1}}',
-'pager-older-n' => '{{PLURAL:$1|ieldran 1|ieldran $1}}',
+'pager-newer-n' => '{{PLURAL:$1|nīwre 1|nīwran $1}}',
+'pager-older-n' => '{{PLURAL:$1|ieldre 1|ieldran $1}}',
 
 # Book sources
 'booksources' => 'Bōcfruman',
@@ -887,10 +887,10 @@ Gif se brūcend asifte hine. synderlīce sind ymelan geīwda þǣre þe se brūc
 'watchthispage' => 'Behealdan þisne tramet',
 'unwatch' => 'Ablinnan behealdunge',
 'unwatchthispage' => 'Ablinnan behealdunge',
-'watchlist-details' => '{{PLURAL:$1|Þǣr is $1 tramet|Þǣr sind $1 trameta}} on þīnum behealdunggetæle, nā arīmedum mōtungum.',
+'watchlist-details' => '{{PLURAL:$1|Þǣr is $1 tramet|Þǣr sind $1 trameta}} on þīnum behealdunggetæle, nā arīmedum mōtunga trametum.',
 'watchlistcontains' => 'Þīn behealdungtæl hæfþ $1 {{PLURAL:$1|tramet|trameta}}.',
 'wlnote' => "Niðer {{PLURAL:$1|is sēo nīwoste andwendung|sind þā nīwostan '''$1''' andwendunga}} in {{PLURAL:$2|þǣre latostan tīde|þǣm latostan '''$2''' tīda}}, fram: $3, $4.",
-'wlshowlast' => 'Īwan þā latostan $1 tīda $2 daga $3',
+'wlshowlast' => 'Īwan þā nīwostan $1 tīda $2 daga $3',
 'watchlist-options' => 'Behealdungtæles cyras',
 
 # Displayed when you click the "watch" button and it is in the process of watching
@@ -966,21 +966,21 @@ Gif se brūcend asifte hine. synderlīce sind ymelan geīwda þǣre þe se brūc
 
 # Namespace form on various pages
 'namespace' => 'Namstede:',
-'invert' => 'Cyre edƿendan',
+'invert' => 'Onhwirfan gecorennesse',
 'blanknamespace' => '(Hēafod)',
 
 # Contributions
 'contributions' => '{{GENDER:$1|Brūcendes}} forðunga',
-'contributions-title' => 'Brūcendforðunga for $1',
+'contributions-title' => 'Brūcendes forðunga for $1',
 'mycontris' => 'Mīna forðunga',
 'contribsub2' => 'For $1 ($2)',
-'uctop' => '(hēafod)',
-'month' => 'Fram mōnþe (and ǣror)',
-'year' => 'Fram ȝēare (and ǣror)',
+'uctop' => '(genge)',
+'month' => 'Fram mōnþe (and ǣr)',
+'year' => 'Fram iēare (and ǣr)',
 
 'sp-contributions-talk' => 'mōtung',
 'sp-contributions-search' => 'Sēcan forðunga',
-'sp-contributions-username' => 'IP address oþþe brūcendnama:',
+'sp-contributions-username' => 'IP nama oþþe brūcendes nama:',
 'sp-contributions-submit' => 'Sēcan',
 
 # What links here
@@ -1012,7 +1012,7 @@ Gif se brūcend asifte hine. synderlīce sind ymelan geīwda þǣre þe se brūc
 ** Uncwēme brūcendnama',
 'ipbsubmit' => 'Fortȳnan þisne brūcend',
 'ipbother' => 'Ōðeru tīd',
-'ipboptions' => '2 tīda:2 hours,1 dæg:1 day,3 dagas:3 days,1 wucu:1 week,2 wuca:2 weeks,1 mōnaþ:1 month,3 mōnðas:3 months,6 mōnðas:6 months,1 gēar:1 year,unendiende:infinite',
+'ipboptions' => '2 tīda:2 hours,1 dæg:1 day,3 dagas:3 days,1 wucu:1 week,2 wuca:2 weeks,1 mōnaþ:1 month,3 mōnðas:3 months,6 mōnða:6 months,1 gēar:1 year,unendiende:infinite',
 'ipbotheroption' => 'ōðer',
 'ipbotherreason' => 'Ōðru oþþe nīehst racu:',
 'ipblocklist-submit' => 'Sēcan',
@@ -1046,7 +1046,7 @@ Cēos ōðerne naman lā.',
 
 # Namespace 8 related
 'allmessagesname' => 'Nama',
-'allmessagesdefault' => 'Gewunelic ǣrendgewrites traht',
+'allmessagesdefault' => 'Gewunelīc ǣrendgewrites traht',
 'allmessagescurrent' => 'Þisses tīman ǣrendgewrites traht',
 'allmessages-filter-unmodified' => 'Nā andwended',
 'allmessages-filter-all' => 'Eall',
@@ -1076,7 +1076,7 @@ Cēos ōðerne naman lā.',
 'tooltip-pt-mycontris' => 'Getæl þīnra forðunga',
 'tooltip-pt-login' => 'Man þē byldeþ to inmeldienne; þēah, þis nis abeden',
 'tooltip-pt-logout' => 'Ūtmeldian',
-'tooltip-ca-talk' => 'Mōtung ymbe þone innungtramet',
+'tooltip-ca-talk' => 'Mōtung ymbe þone innungtramet',
 'tooltip-ca-edit' => 'Þū meaht þisne tramet adihtan. Brūc lā þone fōrebysene cnæpp ǣr þū hordie.',
 'tooltip-ca-addsection' => 'Beginnan nīwne dǣl',
 'tooltip-ca-viewsource' => 'Þes tramet is borgen.
@@ -1089,7 +1089,7 @@ Cēos ōðerne naman lā.',
 'tooltip-ca-watch' => 'Ēacnian þīn behealdungtæl mid þissum tramete',
 'tooltip-ca-unwatch' => 'Animan þisne tramet fram þīnum behealdungtæle',
 'tooltip-search' => 'Sēcan {{SITENAME}}',
-'tooltip-search-go' => 'Gān tō tramete þe hæbbe þisne rihte syndigan naman, gif swilc tramet sīe',
+'tooltip-search-go' => 'Gān tō tramete þe hæbbe þisne rihte syndrigan naman, gif swilc tramet sīe',
 'tooltip-search-fulltext' => 'Sēcan þisne traht on þǣm trametum',
 'tooltip-p-logo' => 'Sēcan þone hēafodtramet',
 'tooltip-n-mainpage' => 'Sēcan þone hēafodtramet',
@@ -1097,7 +1097,7 @@ Cēos ōðerne naman lā.',
 'tooltip-n-portal' => 'Ymbe þæt weorc, hwæt meaht þū dōn, hwǣr man finde þing',
 'tooltip-n-currentevents' => 'Findan ieldran cȳþþe ymbe nīwu gelimp',
 'tooltip-n-recentchanges' => 'Getæl nīwra andwendunga on þǣm wiki',
-'tooltip-n-randompage' => 'Hladan gelimplicne tramet',
+'tooltip-n-randompage' => 'Hladan gelimplīcne tramet',
 'tooltip-n-help' => 'Cunnunge stede',
 'tooltip-t-whatlinkshere' => 'Getæl eallra wiki trameta þā habbaþ hlencan hider',
 'tooltip-t-recentchangeslinked' => 'Nīwa andwendunga in trametum tō þǣm þes tramet hæbbe hlencan',
@@ -1107,7 +1107,7 @@ Cēos ōðerne naman lā.',
 'tooltip-t-emailuser' => 'Sendan spearcǣrend þissum brūcende',
 'tooltip-t-upload' => 'Hladan ymelan forþ',
 'tooltip-t-specialpages' => 'Getæl eallra syndrigra trameta',
-'tooltip-t-print' => 'Gemǣnendlicu fadung þisses trametes',
+'tooltip-t-print' => 'Gemǣnendlīc fadung þisses trametes',
 'tooltip-t-permalink' => 'Fæst hlenca tō þisre fadunge þæs trametes',
 'tooltip-ca-nstab-main' => 'Sēon þone innunge tramet',
 'tooltip-ca-nstab-user' => 'Sēon þone brūcendes tramet',
@@ -1118,9 +1118,9 @@ Cēos ōðerne naman lā.',
 'tooltip-ca-nstab-category' => 'Sēon þone flocces tramet',
 'tooltip-minoredit' => 'Mearcian þās tō lytelre adihtunge',
 'tooltip-save' => 'Hordian þīna andwendunga',
-'tooltip-preview' => 'Seoh fōrebysene þīna andwendunga. Brūc þīs lā ǣr þū hordie!',
-'tooltip-diff' => 'Īwan þā andwendunga þā þū dydest þone traht',
-'tooltip-compareselectedversions' => 'Þā tōdāl sēon betƿēonan þǣre tƿǣm coren fadungum þisse sīdan',
+'tooltip-preview' => 'Seoh fōrebysene þīnra andwendunga. Brūc þis lā ǣr þū hordie!',
+'tooltip-diff' => 'Īwan þā andwendunga þā þū dydest wiþ þone traht',
+'tooltip-compareselectedversions' => 'Sēon þā gescēad betweonan þǣm twǣm gecorenum fadungum þisses trametes',
 'tooltip-watch' => 'Ēacnian þīn behealdungtæl mid þissum tramete',
 'tooltip-undo' => '"Undōn" undēþ þās adihtunge and openaþ þǣre adihtunge bysene tō fōrebysene. Man cann secgan race on þǣre sceortnesse.',
 
@@ -1139,7 +1139,7 @@ Cēos ōðerne naman lā.',
 'thumbsize' => 'Þumannæglmicelnes:',
 'file-info-size' => '$1 × $2 pixels, ymelan micelu: $3, MIME cynn: $4',
 'file-nohires' => 'Þǣr nis nǣnig māre micelness.',
-'svg-long-desc' => 'SVG ymele, rihte $1 × $2 pixels, ymelan micelness: $3',
+'svg-long-desc' => 'SVG ymele, rihte $1 × $2 pixela, ymelan micelness: $3',
 'show-big-image' => 'Full micelness',
 
 # Special:NewFiles
@@ -1218,7 +1218,7 @@ Cēos ōðerne naman lā.',
 'exif-gpsdirection-t' => 'Sōþ rihtung',
 
 # External editor support
-'edit-externally-help' => '(Þā [//www.mediawiki.org/wiki/Manual:External_editors ȝearƿunga tyhtas] sēon for mā cȳþþe)',
+'edit-externally-help' => '(Sēon þā [//www.mediawiki.org/wiki/Manual:External_editors gearwunge gewissunga] ymb mā cȳþþe)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'eall',
@@ -1268,8 +1268,8 @@ $5
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Sēon andwendunga',
-'watchlisttools-edit' => 'Sēon and adihtan behealdungtæle',
-'watchlisttools-raw' => 'Adihtan hrēaw behealdungtæle',
+'watchlisttools-edit' => 'Sēon and adihtan behealdungtæl',
+'watchlisttools-raw' => 'Adihtan hrēaw behealdungtæl',
 
 # Special:Version
 'version' => 'Fadung',
index ed24b23..d6a0d08 100644 (file)
@@ -17,6 +17,7 @@
  * @author Alnokta
  * @author Antime
  * @author Arjanizary
+ * @author Asaifm
  * @author Avocato
  * @author Bachounda
  * @author Bassem JARKAS
@@ -474,57 +475,57 @@ $imageFiles = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'ضع Ø®Ø·Ø§ ØªØ­Øª Ø§Ù\84رÙ\88ابط:',
-'tog-justify' => 'حاذ الفقرات',
-'tog-hideminor' => 'أخÙ\81 Ø§Ù\84تحرÙ\8aرات الطفيفة في أحدث التغييرات',
-'tog-hidepatrolled' => 'أخÙ\81 Ø§Ù\84تحرÙ\8aرات المراجعة في أحدث التغييرات',
+'tog-underline' => 'سطر ØªØ­Øª Ø§Ù\84Ù\88صÙ\84ات:',
+'tog-justify' => 'تسÙ\88Ù\8aØ© Ø¹Ø±Ø¶ الفقرات',
+'tog-hideminor' => 'أخÙ\81 Ø§Ù\84تعدÙ\8aÙ\84ات الطفيفة في أحدث التغييرات',
+'tog-hidepatrolled' => 'أخÙ\81 Ø§Ù\84تعدÙ\8aÙ\84ات المراجعة في أحدث التغييرات',
 'tog-newpageshidepatrolled' => 'أخف الصفحات المعاينة من قائمة الصفحات الجديدة',
 'tog-extendwatchlist' => 'مدد قائمة المراقبة لتعرض كل التغييرات، وليس أحدثها فقط',
-'tog-usenewrc' => 'جÙ\85Ù\91ع Ø§Ù\84تغÙ\8aÙ\8aرات Ø­Ø³Ø¨ Ø§Ù\84صÙ\81حة Ù\81Ù\8a Ø£Ø­Ø¯Ø« Ø§Ù\84تغÙ\8aÙ\8aرات Ù\88Ù\82ائÙ\85Ø© Ø§Ù\84Ù\85راÙ\82بة (Ù\8aتطÙ\84ب Ø¬Ø§Ù\81اسÙ\83ربت)',
-'tog-numberheadings' => 'رÙ\82Ù\91Ù\85 Ø§Ù\84عÙ\86اÙ\88Ù\8aÙ\86 ØªÙ\84Ù\82ائÙ\8aÙ\8bا',
-'tog-showtoolbar' => 'أظÙ\87ر Ø´Ø±Ù\8aØ· Ø§Ù\84تحرÙ\8aر (Ù\8aتطÙ\84ب Ø¬Ø§Ù\81اسÙ\83ربت)',
-'tog-editondblclick' => 'تحرÙ\8aر Ø§Ù\84صÙ\81حات Ø¨Ø§Ù\84Ù\86Ù\82ر Ø§Ù\84Ù\85زدÙ\88ج (جاÙ\81اسÙ\83ربت)',
-'tog-editsection' => 'مكن تحرير الأقسام بروابط [عدل]',
-'tog-editsectiononrightclick' => 'فعِّل تحرير الأقسام بالنقر باليمين على عناوين الأقسام (يتطلب جافاسكريبت)',
-'tog-showtoc' => 'اعرض Ù\81Ù\87رس Ø§Ù\84Ù\85حتÙ\88Ù\8aات (Ù\84Ù\84صÙ\81حات Ø§Ù\84تÙ\8a ØªØ­ØªÙ\88Ù\8a Ø¹Ù\84Ù\89 Ø£Ù\83ثر Ù\85Ù\86 3 Ø¹Ù\86اÙ\88Ù\8aÙ\86)',
+'tog-usenewrc' => 'Ø·Ù\8a Ø§Ù\84تغÙ\8aÙ\8aرات Ø­Ø³Ø¨ Ø§Ù\84صÙ\81حة Ù\81Ù\8a Ø£Ø­Ø¯Ø« Ø§Ù\84تغÙ\8aÙ\8aرات Ù\88Ù\82ائÙ\85Ø© Ø§Ù\84Ù\85راÙ\82بة',
+'tog-numberheadings' => 'ترÙ\82Ù\8aÙ\85 Ø§Ù\84عÙ\86اÙ\88Ù\8aÙ\86 ØªÙ\84Ù\82ائÙ\8aا',
+'tog-showtoolbar' => 'إظÙ\87ار Ø´Ø±Ù\8aØ· Ø§Ù\84تحرÙ\8aر',
+'tog-editondblclick' => 'تعدÙ\8aÙ\84 Ø§Ù\84صÙ\81حات Ø¨Ø§Ù\84Ù\86Ù\82ر Ø§Ù\84Ù\85زدÙ\88ج',
+'tog-editsection' => 'تفعيل تعديل الأقسام بالضغط على [عدل]',
+'tog-editsectiononrightclick' => 'تفعيل تعديل الأقسام بالنقر باليمين على عناوين الأقسام',
+'tog-showtoc' => 'عرض فهرس المحتويات (للصفحات التي تحتوي على أكثر من 3 عناوين)',
 'tog-rememberpassword' => 'تذكر دخولي بهذا المتصفح (لمدة أقصاها {{PLURAL:$1||يوم واحد|يومان|$1 أيام|$1 يوما|$1 يوم}})',
 'tog-watchcreations' => 'أضف الصفحات التي أنشئها والملفات التي أرفعها إلى قائمة مراقبتي.',
 'tog-watchdefault' => 'أضف الصفحات والملفات التي أعدلها إلى قائمة مراقبتي',
 'tog-watchmoves' => 'أضف الصفحات والملفات التي أنقلها إلى قائمة مراقبتي',
 'tog-watchdeletion' => 'أضف الصفحات والملفات التي أحذفها إلى قائمة مراقبتي',
 'tog-minordefault' => 'أشِّر كل التعديلات على أنها طفيفة مبدئيا',
-'tog-previewontop' => 'أظهر معاينة النّصّ فوق صندوق التحرير',
-'tog-previewonfirst' => 'أظÙ\87ر Ù\85عاÙ\8aÙ\86Ø© Ù\85ع Ø£Ù\88Ù\84 ØªØ­Ø±Ù\8aر',
-'tog-nocache' => 'عطÙ\91Ù\84 ØªØ®Ø¨Ø¦Ø© Ø§Ù\84Ù\85تصÙ\81Ø­ Ù\84Ù\84صÙ\81حة',
-'tog-enotifwatchlistpages' => 'أرسل إليّ رسالة إلكترونية عندما تتغيّر صفحة أو ملف في قائمة مراقبتي',
-'tog-enotifusertalkpages' => 'أرسل إليّ بريدا كلّما عُدّلت صفحة نقاشي',
-'tog-enotifminoredits' => 'أرسل إليّ رسالة إلكترونية بشأن التحريرات الطفيفة للصفحات والملفات',
-'tog-enotifrevealaddr' => 'أظÙ\87ر Ø¹Ù\86Ù\88اÙ\86 Ø¨Ø±Ù\8aدÙ\8a Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a Ù\81Ù\8a Ø±Ø³Ø§Ø¦Ù\84 Ø§Ù\84إخطار',
-'tog-shownumberswatching' => 'اعرض Ø¹Ø¯Ø¯ Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ù\84Ù\85راÙ\82بÙ\90Ù\8aÙ\86',
+'tog-previewontop' => 'أظهر معاينة النص فوق صندوق التحرير',
+'tog-previewonfirst' => 'أظÙ\87ر Ù\85عاÙ\8aÙ\86Ø© Ù\85ع Ø£Ù\88Ù\84 ØªØ¹Ø¯Ù\8aÙ\84',
+'tog-nocache' => 'تعطÙ\8aÙ\84 Ø­Ù\81ظ Ø§Ù\84Ù\85تصÙ\81Ø­ Ù\84Ù\84Ù\83اش',
+'tog-enotifwatchlistpages' => 'أرسل إلي رسالة إلكترونية عند تعديل صفحة أو ملف في قائمة مراقبتي',
+'tog-enotifusertalkpages' => 'أرسل إلي رسالة إلكترونية عند تعديل صفحة نقاشي',
+'tog-enotifminoredits' => 'أرسل إلي رسالة إلكترونية بشأن التعديلات الطفيفة للصفحات والملفات',
+'tog-enotifrevealaddr' => 'أظÙ\87ر Ø¹Ù\86Ù\88اÙ\86 Ø¨Ø±Ù\8aدÙ\8a Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a Ù\81Ù\8a Ø¥Ø´Ø¹Ø§Ø±Ø§Øª Ø§Ù\84برÙ\8aد Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a',
+'tog-shownumberswatching' => 'اعرض عدد المستخدمين المراقبين',
 'tog-oldsig' => 'التوقيع الحالي:',
-'tog-fancysig' => 'عامل التوقيع كنصّ ويكي (بلا رابط تلقائي)',
-'tog-uselivepreview' => 'استخدÙ\85 Ø§Ù\84Ù\85عاÙ\8aÙ\86Ø© Ø§Ù\84سرÙ\8aعة (تتطÙ\84ب Ø¬Ø§Ù\81اسÙ\83رÙ\8aبت) (تجرÙ\8aبÙ\8aØ©)',
-'tog-forceeditsummary' => 'Ù\86بÙ\87Ù\86Ù\8a Ø¹Ù\86د Ø¥Ø¯Ø®Ø§Ù\84 Ù\85Ù\84خص ØªØ­Ø±Ù\8aر Ù\81ارغ',
-'tog-watchlisthideown' => 'أخÙ\81 ØªØ­Ø±Ù\8aراتي من قائمة المراقبة',
-'tog-watchlisthidebots' => 'أخÙ\81 ØªØ­Ø±Ù\8aرات Ø§Ù\84رÙ\88بوتات من قائمة المراقبة',
-'tog-watchlisthideminor' => 'في قائمة المراقبة أخف التعديلات الطفيفة',
-'tog-watchlisthideliu' => 'في قائمة المراقبة أخف تعديلات المستخدمين الوالجين',
-'tog-watchlisthideanons' => 'في قائمة المراقبة أخف تعديلات المستخدمين المجهولين',
-'tog-watchlisthidepatrolled' => 'في قائمة المراقبة أخف التعديلات المعاينة',
-'tog-ccmeonemails' => 'أرسل إليّ نسخا من رسائل البريد التي أرسلها إلى مستخدمين آخرين',
-'tog-diffonly' => 'Ù\84ا ØªØ¹Ø±Ø¶ Ù\85حتÙ\88Ù\89 Ø§Ù\84صÙ\81حة Ø£Ø³Ù\81Ù\84 Ø§Ù\84Ù\81رÙ\88Ù\82ات',
+'tog-fancysig' => 'وضع الوصلة يدويا واستعمال نص الويكي',
+'tog-uselivepreview' => 'استعÙ\85اÙ\84 Ø§Ù\84Ù\85عاÙ\8aÙ\86Ø© Ø§Ù\84Ù\85باشرة (تجرÙ\8aبÙ\8a)',
+'tog-forceeditsummary' => 'Ù\86بÙ\87Ù\86Ù\8a Ø¹Ù\86د Ø¹Ø¯Ù\85 Ø¥Ø¯Ø®Ø§Ù\84 Ù\85Ù\84خص ØªØ¹Ø¯Ù\8aÙ\84',
+'tog-watchlisthideown' => 'أخÙ\81 ØªØ¹Ø¯Ù\8aÙ\84اتي من قائمة المراقبة',
+'tog-watchlisthidebots' => 'أخÙ\81 ØªØ¹Ø¯Ù\8aÙ\84ات Ø§Ù\84بوتات من قائمة المراقبة',
+'tog-watchlisthideminor' => 'أخف التعديلات الطفيفة في قائمة المراقبة',
+'tog-watchlisthideliu' => 'أخف تعديلات المستخدمين المسجلين في قائمة المراقبة',
+'tog-watchlisthideanons' => 'أخف تعديلات المستخدمين المجهولين في قائمة المراقبة',
+'tog-watchlisthidepatrolled' => ' أخف التعديلات المراجعة في قائمة المراقبة',
+'tog-ccmeonemails' => 'أرسل إلي نسخا من الرسائل الإلكترونية التي أرسلها إلى المستخدمين الآخرين',
+'tog-diffonly' => 'Ù\84ا ØªØ¹Ø±Ø¶ Ù\85حتÙ\88Ù\89 Ø§Ù\84صÙ\81حة Ø£Ø³Ù\81Ù\84 Ø§Ù\84Ù\81رÙ\82',
 'tog-showhiddencats' => 'أظهر التصنيفات المخفية',
 'tog-noconvertlink' => 'عطل تحويل عناوين الروابط',
 'tog-norollbackdiff' => 'أزل الفرق بعد إحداث استرجاع',
 'tog-useeditwarning' => 'حذّرني عندما أغادر تحرير صفحة فيها تغييرات لم أحفظها',
-'tog-prefershttps' => 'دائÙ\85ا Ø§Ø³ØªØ®Ø¯Ù\85 Ø§ØªØµØ§Ù\84ا Ø£منا بعد الدخول',
+'tog-prefershttps' => 'دائÙ\85ا Ø§Ø³ØªØ®Ø¯Ù\85 Ø§ØªØµØ§Ù\84ا Ø¢منا بعد الدخول',
 
 'underline-always' => 'دائما',
 'underline-never' => 'أبدا',
-'underline-default' => 'Ù\88Ù\81Ù\82 Ø§Ù\84Ù\83سÙ\88Ø© Ø£Ù\88 Ø§Ù\84Ù\85تصÙ\81Ù\91ح',
+'underline-default' => 'Ù\88Ù\81Ù\82 Ø§Ù\84Ù\85ظÙ\87ر Ø£Ù\88 Ø§Ù\84Ù\85تصÙ\81ح',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'طراز خط منطقة التحرير:',
+'editfont-style' => 'طراز خط صندوق التحرير:',
 'editfont-default' => 'وفق إعدادات المتصفح',
 'editfont-monospace' => 'خط ثابت العرض',
 'editfont-sansserif' => 'خط بلا زوائد',
@@ -596,10 +597,10 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|بلا تصنيف|تصنيف|تصنيفان|تصنيفات}}',
-'category_header' => 'اÙ\84صÙ\81حات Ù\81Ù\8a Ø§Ù\84تصنيف "$1"',
+'category_header' => 'صÙ\81حات تصنيف "$1"',
 'subcategories' => 'تصنيفات فرعية',
-'category-media-header' => 'الوسائط في التصنيف "$1"',
-'category-empty' => "''هذا التصنيف لا يحتوي حاليا على صفحات و لا وسائط.''",
+'category-media-header' => 'ملفات تصنيف "$1"',
+'category-empty' => 'هذا التصنيف لا يحتوي حاليا على صفحات أو ملفات.',
 'hidden-categories' => '{{PLURAL:$1|لا تصنيفات مخفية|تصنيف مخفي|تصنيفان مخفيان|تصنيفات مخفية}}',
 'hidden-category-category' => 'تصنيفات مخفية',
 'category-subcat-count' => '{{PLURAL:$2|هذا التصنيف يحوي التصنيف الفرعي التالي|هذا التصنيف يحوي {{PLURAL:$1||التصنيف الفرعي|تصنيفين فرعيين|$1 تصنيفات فرعية}}، من إجمالي $2.}}',
@@ -608,27 +609,27 @@ $messages = array(
 'category-article-count-limited' => '{{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|الصفحات $1 التالية}} مصنّفة بهذا التصنيف.',
 'category-file-count' => '{{PLURAL:$2|لا ملفات مصنّفة بهذا التصنيف سوى التالي.|{{PLURAL:$1||الملف التالي مصنّف|الملفان التاليان مصنّفان|الملفات $1 التالية مصنّفة}} بهذا التصنيف من إجمالي $2.}}',
 'category-file-count-limited' => '{{PLURAL:$1|الملف التالي مصنّف|الملفان التاليان مصنّفان|الملفات $1 التالية مصنّفة}} بهذا التصنيف.',
-'listingcontinuesabbrev' => '(تتÙ\85Ø©)',
+'listingcontinuesabbrev' => '(تابع)',
 'index-category' => 'صفحات مفهرسة',
 'noindex-category' => 'صفحات غير مفهرسة',
 'broken-file-category' => 'صفحات تحوي روابط ملفات معطوبة',
 
-'about' => 'عن هذه الويكي',
+'about' => 'عن',
 'article' => 'صفحة محتوى',
 'newwindow' => '(تفتح في نافذة جديدة)',
 'cancel' => 'ألغِ',
 'moredotdotdot' => 'المزيد...',
-'morenotlisted' => 'Ù\8aÙ\88جد Ø§Ù\84Ù\85زÙ\8aد ØºÙ\8aر Ù\85سرÙ\88د...',
+'morenotlisted' => 'Ù\87Ø°Ù\87 Ø§Ù\84Ù\82ائÙ\85Ø© ØºÙ\8aر Ù\85Ù\83تÙ\85Ù\84Ø©.',
 'mypage' => 'صفحة',
 'mytalk' => 'نقاش',
-'anontalk' => 'Ù\86Ù\82اش Ø¹Ù\86Ù\88اÙ\86 Ø¢Ù\8aâ\80\8cبÙ\8a Ù\87ذا',
+'anontalk' => 'Ù\86Ù\82اش Ø¹Ù\86Ù\88اÙ\86 Ø§Ù\84Ø¢Ù\8a Ø¨Ù\8a',
 'navigation' => 'إبحار',
 'and' => '&#32;و',
 
 # Cologne Blue skin
 'qbfind' => 'جد',
 'qbbrowse' => 'تصفح',
-'qbedit' => 'حرÙ\91ر',
+'qbedit' => 'عدÙ\84',
 'qbpageoptions' => 'هذه الصفحة',
 'qbmyoptions' => 'صفحاتي',
 'qbspecialpages' => 'الصفحات الخاصة',
@@ -640,20 +641,20 @@ $messages = array(
 'vector-action-delete' => 'احذف',
 'vector-action-move' => 'انقل',
 'vector-action-protect' => 'احم',
-'vector-action-undelete' => 'تدارÙ\83 الحذف',
-'vector-action-unprotect' => 'غيّر الحماية',
-'vector-simplesearch-preference' => 'فعّل شريط البحث المبسط (لواجهة فكتور فقط)',
+'vector-action-undelete' => 'Ø£Ù\84غ الحذف',
+'vector-action-unprotect' => 'غير الحماية',
+'vector-simplesearch-preference' => 'تفعيل شريط البحث المبسط (لمظهر فكتور فقط)',
 'vector-view-create' => 'أنشئ',
-'vector-view-edit' => 'عدÙ\91Ù\84',
+'vector-view-edit' => 'عدل',
 'vector-view-history' => 'اعرض التاريخ',
-'vector-view-view' => 'طاÙ\84ع',
-'vector-view-viewsource' => 'طاÙ\84ع المصدر',
+'vector-view-view' => 'اÙ\82رأ',
+'vector-view-viewsource' => 'اعرض المصدر',
 'actions' => 'أفعال',
 'namespaces' => 'فضاءات التسمية',
 'variants' => 'المتغيرات',
 
 'navigation-heading' => 'قائمة التصفح',
-'errorpagetitle' => 'عطÙ\84',
+'errorpagetitle' => 'خطأ',
 'returnto' => 'ارجع إلى $1.',
 'tagline' => 'من {{SITENAME}}',
 'help' => 'مساعدة',
@@ -669,8 +670,8 @@ $messages = array(
 'print' => 'اطبع',
 'view' => 'مطالعة',
 'edit' => 'عدل',
-'create' => 'Ø¥Ù\86شاء',
-'editthispage' => 'حرÙ\90Ù\91ر هذه الصفحة',
+'create' => 'Ø£Ù\86شئ',
+'editthispage' => 'عدÙ\84 هذه الصفحة',
 'create-this-page' => 'أنشئ صفحة بهذا العنوان',
 'delete' => 'حذف',
 'deletethispage' => 'احذف هذه الصفحة',
@@ -680,15 +681,15 @@ $messages = array(
 'protect' => 'حماية',
 'protect_change' => 'غيّر',
 'protectthispage' => 'احم هذه الصفحة',
-'unprotect' => 'غيّر الحماية',
-'unprotectthispage' => 'غيّر حماية هذه الصفحة',
+'unprotect' => 'غير الحماية',
+'unprotectthispage' => 'غير حماية هذه الصفحة',
 'newpage' => 'صفحة جديدة',
 'talkpage' => 'ناقش هذه الصفحة',
 'talkpagelinktext' => 'نقاش',
 'specialpage' => 'صفحة خاصة',
 'personaltools' => 'أدوات شخصية',
 'postcomment' => 'قسم جديد',
-'articlepage' => 'طاÙ\84ع صفحة المحتوى',
+'articlepage' => 'اعرض صفحة المحتوى',
 'talk' => 'نقاش',
 'views' => 'معاينة',
 'toolbox' => 'صندوق الأدوات',
@@ -699,7 +700,7 @@ $messages = array(
 'templatepage' => 'طالع صفحة القالب',
 'viewhelppage' => 'طالع صفحة المساعدة',
 'categorypage' => 'طالع صفحة التصنيف',
-'viewtalkpage' => 'طاÙ\84ع النقاش',
+'viewtalkpage' => 'اعرض النقاش',
 'otherlanguages' => 'بلغات أخرى',
 'redirectedfrom' => '(بالتحويل من $1)',
 'redirectpagesub' => 'صفحة تحويل',
@@ -716,12 +717,12 @@ $messages = array(
 $1',
 'pool-timeout' => 'انتهت مهلة القفل',
 'pool-queuefull' => 'الطابور ملآن',
-'pool-errorunknown' => 'عطÙ\84 غير معروف',
+'pool-errorunknown' => 'خطأ غير معروف',
 
 # 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).
 'aboutsite' => 'عن {{SITENAME}}',
 'aboutpage' => 'Project:عن',
-'copyright' => 'المحتوى منشور وفق $1.',
+'copyright' => 'المحتوى منشور وفق $1 إن لم يرد خلاف ذلك.',
 'copyrightpage' => '{{ns:project}}:حقوق النسخ',
 'currentevents' => 'الأحداث الجارية',
 'currentevents-url' => 'Project:الأحداث الجارية',
@@ -749,31 +750,31 @@ $1',
 'youhavenewmessages' => 'لك $1 ($2).',
 'newmessageslink' => 'رسائل جديدة',
 'newmessagesdifflink' => 'أحدث تغيير',
-'youhavenewmessagesfromusers' => 'لك $1 من {{PLURAL:$3||مستخدم واحد|مستخدمين اثنين|$3 مستخدمين|$3 مستخدماً|$3 مستخدم}} ($2).',
-'youhavenewmessagesmanyusers' => 'لك $1 من مستخدمين كثُر ($2).',
+'youhavenewmessagesfromusers' => 'لديك $1 من {{PLURAL:$3|مستخدم واحد|مستخدم واحد|مستخدمين اثنين|$3 مستخدمين|$3 مستخدما|$3 مستخدم}} ($2).',
+'youhavenewmessagesmanyusers' => 'لديك $1 من مستخدمين كثر ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|رسالة جديدة|رسائل جديدة}}',
 'newmessagesdifflinkplural' => 'أحدث {{PLURAL:$1|تغيير|تغييرات}}',
 'youhavenewmessagesmulti' => 'لديك رسائل جديدة في $1',
 'editsection' => 'عدل',
 'editold' => 'عدل',
-'viewsourceold' => 'استعرض Ø§Ù\84Ù\85صدر',
+'viewsourceold' => 'اعرض المصدر',
 'editlink' => 'عدل',
-'viewsourcelink' => 'استعرض Ø§Ù\84Ù\85صدر',
-'editsectionhint' => 'حرر القسم: $1',
+'viewsourcelink' => 'اعرض المصدر',
+'editsectionhint' => 'عدÙ\84 القسم: $1',
 'toc' => 'محتويات',
 'showtoc' => 'أظهر',
 'hidetoc' => 'أخف',
-'collapsible-collapse' => 'اطÙ\88',
-'collapsible-expand' => 'مدّد',
-'thisisdeleted' => 'هل أعرض أو أسترجع $1؟',
-'viewdeleted' => 'أأعرض $1Ø\9f',
+'collapsible-collapse' => 'أخÙ\81',
+'collapsible-expand' => 'أظهر',
+'thisisdeleted' => 'عرض أو استرجاع $1؟',
+'viewdeleted' => 'عرض $1؟',
 'restorelink' => '{{PLURAL:$1|$1 تعديل محذوف|تعديلا واحدا محذوفا|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلا محذوفا|$1 تعديل محذوف}}',
 'feedlinks' => 'التلقيمة:',
 'feed-invalid' => 'نوع التلقيمة غير صحيح.',
 'feed-unavailable' => 'التلقيمات غير متوفرة',
-'site-rss-feed' => 'تلقيمة آر‌إس‌إس $1',
+'site-rss-feed' => 'تلقيمة آر إس إس $1',
 'site-atom-feed' => 'تلقيمة أتوم $1',
-'page-rss-feed' => 'تلقيمة آر‌إس‌إس "$1"',
+'page-rss-feed' => 'تلقيمة آر إس إس "$1"',
 'page-atom-feed' => 'تلقيمة أتوم "$1"',
 'feed-atom' => 'أتوم',
 'feed-rss' => 'أر إس إس',
@@ -806,6 +807,11 @@ $1',
 # General errors
 'error' => 'عطل',
 'databaseerror' => 'عطل في قاعدة البيانات',
+'databaseerror-text' => 'حدث خطأ في إستعلام قاعدة البيانات. قد يشير هذا إلى خطأ في البرنامج.',
+'databaseerror-textcl' => 'حدث خطأ في إستعلام قاعدة البيانات.',
+'databaseerror-query' => 'إستعلام: $1',
+'databaseerror-function' => 'دالة: $1',
+'databaseerror-error' => 'خطأ: $1',
 'laggedslavemode' => "'''تحذير:''' الصفحة قد لا تحتوي على أحدث التحديثات.",
 'readonly' => 'قاعدة البيانات مقفلة',
 'enterlockreason' => 'أدخل سببا للقفل ذاكرا تقديرا لوقت إزالة الغلق',
@@ -850,7 +856,7 @@ $1',
 'wrong_wfQuery_params' => 'معاملات خاطئة في wfQuery()<br />
 الدالة: $1<br />
 الاستعلام: $2',
-'viewsource' => 'استعرض Ø§Ù\84Ù\85صدر',
+'viewsource' => 'اعرض المصدر',
 'viewsource-title' => 'استعرض مصدر $1',
 'actionthrottled' => 'تم كبح الفعل',
 'actionthrottledtext' => 'احترازا من السُّخام، يُحظر إجراء هذا الفعل مرات كثيرة في فترة زمنية قصيرة، و لقد تجاوزت هذا الحد.
@@ -1278,8 +1284,7 @@ $2
 الإداري الذي أغلقها أعطى هذا التفسير: $1",
 'protectedpagewarning' => "'''تحذير: تمت حماية هذه الصفحة حتى يمكن للمستخدمين ذوي الصلاحيات الإدارية فقط تعديلها.'''
 آخر مدخلة سجل موفرة بالأسفل كمرجع:",
-'semiprotectedpagewarning' => "'''ملاحظة:''' تمت حماية هذه الصفحة بحيث يمكن للمستخدمين المسجلين فقط تعديلها.
-آخر مدخلة سجل موفرة بالأسفل كمرجع:",
+'semiprotectedpagewarning' => "'''ملاحظة:''' هذه الصفحة محمية بحيث يمكن للمستخدمين المسجلين وحدهم تعديلها.",
 'cascadeprotectedwarning' => "'''تحذير:''' تمت حماية هذه الصفحة بحيث يستطيع المستخدمون ذوو الصلاحيات الإدارية فقط تعديلها، وذلك لأنها مدمجة في {{PLURAL:\$1||الصفحة التالية والتي تمت حمايتها|الصفحتين التاليتين واللتين تمت حمايتها|الصفحات التالية والتي تمت حمايتها}} بخاصية \"حماية الصفحات المدمجة\":",
 'titleprotectedwarning' => "'''تحذير:  هذه الصفحة تمت حمايتها بحيث أن [[Special:ListGroupRights|صلاحيات معينة]] مطلوبة لإنشائها.'''
 آخر مدخلة سجل موفرة بالأسفل كمرجع:",
@@ -1331,19 +1336,19 @@ $2
 'expensive-parserfunction-warning' => "'''تحذير:''' هذه الصفحة تحتوي على استدعاءات دالة محلل كثيرة مكلفة.
 
 ينبغي أن تكون أقل من {{PLURAL:$2||استدعاء واحد|استدعاءين|$2 استدعاءات|$2 استدعاء}}، يوجد الآن {{PLURAL:$1|استدعاء واحد|استدعاءان|$2 استدعاءات|$2 استدعاء}}.",
-'expensive-parserfunction-category' => 'صÙ\81حات Ù\8aÙ\88جد Ø¨Ù\87ا Ø§Ø³ØªØ¯Ø¹Ø§Ø¡Ø§Øª Ø¯Ù\88اÙ\84 Ù\85Ø­Ù\84Ù\84 Ù\83Ø«Ù\8aرة Ù\88مكلفة',
+'expensive-parserfunction-category' => 'تجاÙ\88زات Ø§Ù\84دÙ\88اÙ\84 Ø§Ù\84مكلفة',
 'post-expand-template-inclusion-warning' => "'''تحذير:''' حجم تضمين القالب كبير جدا.
 بعض القوالب لن تضمن.",
-'post-expand-template-inclusion-category' => 'اÙ\84صÙ\81حات Ø­Ù\8aØ« ØªÙ\85 ØªØ¬Ø§Ù\88ز Ø­Ø¬Ù\85 ØªØ¶Ù\85Ù\8aÙ\86 Ø§Ù\84Ù\82اÙ\84ب',
+'post-expand-template-inclusion-category' => 'تجاÙ\88زات Ø­Ø¬Ù\85 Ø§Ù\84تضÙ\85Ù\8aÙ\86 Ø¨Ø¹Ø¯ Ø§Ù\84تÙ\88سÙ\8aع',
 'post-expand-template-argument-warning' => "'''تحذير:''' هذه الصفحة تحتوي على عامل قالب واحد على الأقل له حجم تمدد كبير جدا.
 هذه العوامل تم حذفها.",
-'post-expand-template-argument-category' => 'صÙ\81حات ØªØ­ØªÙ\88Ù\8a Ù\85دخÙ\84ات Ø§Ù\84Ù\82اÙ\84ب Ø§Ù\84Ù\85حذÙ\88Ù\81Ø©',
+'post-expand-template-argument-category' => 'تجاÙ\88زات Ù\85عطÙ\8aات Ø§Ù\84Ù\82Ù\88اÙ\84ب',
 'parser-template-loop-warning' => 'تم كشف حلقة قالب: [[$1]]',
 'parser-template-recursion-depth-warning' => 'تم تجاوز حد عمق فرد القوالب ($1)',
 'language-converter-depth-warning' => 'تم تخطي حد عمق محول اللغة ($1)',
-'node-count-exceeded-category' => 'اÙ\84صÙ\81حات Ø§Ù\84تÙ\8a Ø­Ø¯Ø« Ù\81Ù\8aÙ\87ا ØªØ¬Ø§Ù\88ز تعداد العقد',
+'node-count-exceeded-category' => 'تجاÙ\88زات تعداد العقد',
 'node-count-exceeded-warning' => 'تجاوزت هذه الصفحة تعداد العقد',
-'expansion-depth-exceeded-category' => 'اÙ\84صÙ\81حات Ø§Ù\84تÙ\8a Ø­Ø¯Ø« Ù\81Ù\8aÙ\87ا ØªØ¬Ø§Ù\88ز عمق التوسيع',
+'expansion-depth-exceeded-category' => 'تجاÙ\88زات عمق التوسيع',
 'expansion-depth-exceeded-warning' => 'الصفحة تجاوزت عمق التوسيع',
 'parser-unstrip-loop-warning' => 'حلقة معراة تم الكشف عنها',
 'parser-unstrip-recursion-limit' => 'تعدى حد العودية Unstrip  ($1)',
@@ -1386,7 +1391,7 @@ $2
 'histfirst' => 'الأقدم',
 'histlast' => 'الأحدث',
 'historysize' => '({{PLURAL:$1|1 بايت|$1 بايت}})',
-'historyempty' => '(فارغ)',
+'historyempty' => '(فارغة)',
 
 # Revision feed
 'history-feed-title' => 'تاريخ المراجعة',
@@ -1613,7 +1618,7 @@ $1",
 
 # Preferences page
 'preferences' => 'تفضيلات',
-'mypreferences' => 'تفضيلاتي',
+'mypreferences' => 'تفضيلات',
 'prefs-edits' => 'عدد التعديلات:',
 'prefsnologin' => 'غير مسجل الدخول',
 'prefsnologintext' => 'يجب أن تكون <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} مسجل الدخول]</span>  حتى تتمكن من تعديل تفضيلات المستخدم.',
@@ -1641,7 +1646,7 @@ $1",
 'prefs-rendering' => 'المظهر',
 'saveprefs' => 'احفظ',
 'resetprefs' => 'أزل التغييرات غير المحفوظة',
-'restoreprefs' => 'استرجع كل الإعدادات الافتراضية',
+'restoreprefs' => 'Ø¥سترجع كل الإعدادات الافتراضية',
 'prefs-editing' => 'التحرير',
 'rows' => 'صفوف:',
 'columns' => 'أعمدة:',
@@ -1729,6 +1734,7 @@ $1",
 'prefs-displaywatchlist' => 'خصائص العرض',
 'prefs-tokenwatchlist' => 'مفتاح',
 'prefs-diffs' => 'فروقات',
+'prefs-help-prefershttps' => 'سيتم تفعيل هذا التفضيل عند ولوجوك في المرة القادمة.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'يبدو أن عنوان البريد الإلكتروني صالح',
@@ -1831,6 +1837,8 @@ $1",
 'right-editmyusercss' => 'تعديل ملفات CSS للمستخدم نفسه',
 'right-editmyuserjs' => 'تعديل ملفات جافاسكربت للمستخدم نفسه',
 'right-viewmywatchlist' => 'عرض قائمة مراقبتك',
+'right-viewmyprivateinfo' => 'إستعرض بياناتك الشخصية (مثل البريد الإلكتروني والإسم الحقيقي)',
+'right-editmyprivateinfo' => 'حرر بياناتك الشخصية (مثل البريد الإلكتروني والإسم الحقيقي)',
 'right-editmyoptions' => 'تعديل تفضيلاتك',
 'right-rollback' => 'استرجاع تعديلات آخر مستخدم عدل صفحة معينة سريعا',
 'right-markbotedits' => 'التعليم على تعديلات الاسترجاع كتعديلات بوت',
@@ -1900,6 +1908,7 @@ $1",
 
 # Recent changes
 'nchanges' => '{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|منذ الزيارة الأخيرة}}',
 'enhancedrc-history' => 'تاريخ',
 'recentchanges' => 'أحدث التغييرات',
 'recentchanges-legend' => 'خيارات أحدث التغييرات',
@@ -1932,7 +1941,7 @@ $1",
 'rc_categories_any' => 'أي',
 'rc-change-size-new' => '$1 {{PLURAL:$1|بايت|بايت}} بعد التغيير',
 'newsectionsummary' => '/* $1 */ قسم جديد',
-'rc-enhanced-expand' => 'عرض التفاصيل (يتطلب جافاسكريبت)',
+'rc-enhanced-expand' => 'عرض التفاصيل',
 'rc-enhanced-hide' => 'أخفِ التفاصيل',
 'rc-old-title' => 'تم إنشاؤها أصلا ك"$1"',
 
@@ -2204,8 +2213,7 @@ $1',
 'upload_source_file' => ' (ملف على حاسوبك)',
 
 # Special:ListFiles
-'listfiles-summary' => 'هذه الصفحة الخاصة تعرض كل الملفات المرفوعة.
-عندما ترشحها حسب المستخدم ستعرض فقط الملفات التي رفع آخر نسخة منها ذلك المستخدم.',
+'listfiles-summary' => 'هذه الصفحة الخاصة تعرض كل الملفات المرفوعة.',
 'listfiles_search_for' => 'ابحث عن اسم الميديا:',
 'imgfile' => 'ملف',
 'listfiles' => 'قائمة الملفات',
@@ -2216,6 +2224,10 @@ $1',
 'listfiles_size' => 'الحجم',
 'listfiles_description' => 'الوصف',
 'listfiles_count' => 'نسخ',
+'listfiles-show-all' => 'أدرج النسخ القديمة من الصور',
+'listfiles-latestversion' => 'النسخة الحالية',
+'listfiles-latestversion-yes' => 'نعم',
+'listfiles-latestversion-no' => 'لا',
 
 # File description page
 'file-anchor-link' => 'ملف',
@@ -2318,6 +2330,7 @@ $1',
 # Random page in category
 'randomincategory' => 'صفحة عشوائية في التصنيف',
 'randomincategory-invalidcategory' => '"$1" ليس اسم تصنيف صالح.',
+'randomincategory-nopages' => 'لا توجد صفحات في التصنيف [[:Category:$1|$1]].',
 'randomincategory-selectcategory' => 'عرض صفحة عشوائية من التصنيف:  $1   $2',
 'randomincategory-selectcategory-submit' => 'اذهب',
 
@@ -2512,7 +2525,7 @@ $1',
 'linksearch-error' => 'الكروت الخاصة يمكن أن تظهر فقط في بداية اسم المضيف.',
 
 # Special:ListUsers
-'listusersfrom' => 'اعرض Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø¨Ø¯Ø¡Ø§Ù\8b من:',
+'listusersfrom' => 'اعرض Ø§Ù\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø§Ø¨ØªØ¯Ø§Ø¡ من:',
 'listusers-submit' => 'اعرض',
 'listusers-noresult' => 'لم يتم إيجاد مستخدم.',
 'listusers-blocked' => '(ممنوع)',
@@ -2727,7 +2740,7 @@ $UNWATCHURL
 'protectlogtext' => 'بالأسفل قائمة بالتغييرات في حماية الصفحات.
 انظر [[Special:ProtectedPages|قائمة الصفحات المحمية]] لقائمة بعمليات حماية الصفحات المفعلة حاليا.',
 'protectedarticle' => 'حمى "[[$1]]"',
-'modifiedarticleprotection' => 'غÙ\8aر Ù\85ستÙ\88Ù\89 Ø§Ù\84Ø­Ù\85اÙ\8aØ© Ù\84"[[$1]]"',
+'modifiedarticleprotection' => 'غÙ\8aر Ù\85ستÙ\88Ù\89 Ø­Ù\85اÙ\8aØ© "[[$1]]"',
 'unprotectedarticle' => 'أزال الحماية من "[[$1]]"',
 'movedarticleprotection' => 'نقل إعدادات الحماية من "[[$2]]" إلى "[[$1]]"',
 'protect-title' => 'ضبط مستوى الحماية ل"$1"',
@@ -4122,7 +4135,7 @@ $5
 'table_pager_empty' => 'لا نتائج',
 
 # Auto-summaries
-'autosumm-blank' => 'Ø£Ù\81رغ الصفحة',
+'autosumm-blank' => 'Ø¥Ù\81راغ الصفحة',
 'autosumm-replace' => "استبدال الصفحة ب'$1'",
 'autoredircomment' => 'تحويل إلى [[$1]]',
 'autosumm-new' => "أنشأ الصفحة ب'$1'",
@@ -4365,8 +4378,8 @@ $5
 'compare-selector' => 'قارن مراجعات الصفحة',
 'compare-page1' => 'صفحة 1',
 'compare-page2' => 'صفحة 2',
-'compare-rev1' => 'Ù\85راجعة 1',
-'compare-rev2' => 'Ù\85راجعة 2',
+'compare-rev1' => 'Ù\86سخة 1',
+'compare-rev2' => 'Ù\86سخة 2',
 'compare-submit' => 'قارن',
 'compare-invalid-title' => 'العنوان الذي حددته غير متاح.',
 'compare-title-not-exists' => 'العنوان الذي حددته غير موجود.',
@@ -4377,6 +4390,7 @@ $5
 'dberr-problems' => 'عذرا! هذا الموقع يعاني من صعوبات تقنية.',
 'dberr-again' => 'جرب الانتظار بضع دقائق وإعادة التحميل.',
 'dberr-info' => '(غير قادر على الاتصال بخادوم قاعدة البيانات: $1)',
+'dberr-info-hidden' => '(لا يمكن الإتصال بخادم قاعدة البيانات)',
 'dberr-usegoogle' => 'يمكنك محاولة البحث من خلال جوجل في الوقت الحاضر.',
 'dberr-outofdate' => 'لاحظ أن فهارسهم لمحتوانا ربما تكون غير محدثة.',
 'dberr-cachederror' => 'التالي نسخة مخزنة من الصفحة المطلوبة، وربما لا تكون محدثة.',
@@ -4513,7 +4527,11 @@ $5
 'rotate-comment' => 'تدوير الصورة  {{PLURAL:$1||درجة واحدة|درجتان|$1 درجات|$1 درجة}} باتجاه عقارب الساعة',
 
 # Limit report
-'limitreport-cputime-value' => '{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوانٍ|$1 ثانية}}',
-'limitreport-walltime-value' => '{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوانٍ|$1 ثانية}}',
+'limitreport-cputime' => 'زمن المعالجة المستغرق',
+'limitreport-cputime-value' => '{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوان|$1 ثانية}}',
+'limitreport-walltime' => 'الزمن الحقيقي المستغرق',
+'limitreport-walltime-value' => '{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوان|$1 ثانية}}',
+'limitreport-postexpandincludesize-value' => '$1/$2 بايت',
+'limitreport-templateargumentsize-value' => '$1/$2 بايت',
 
 );
index 4d53b1d..a6b49d2 100644 (file)
@@ -144,7 +144,7 @@ $messages = array(
 'tog-hidepatrolled' => 'ܛܫܝ ܫܘܚܠܦ̈ܐ ܟܪ̈ܝܟܐ ܒܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ',
 'tog-newpageshidepatrolled' => 'ܛܫܝ ܦܐܬܬ̈ܐ ܟܪ̈ܝܟܬܐ ܡܢ ܡܟܬܒܘܬܐ ܕܦܐܬܐ ܚܕܬܐ',
 'tog-extendwatchlist' => 'ܐܪܘܚ ܪ̈ܗܝܬܐ ܠܚܘܘܝܐ ܕܟܠܗܘܢ ܫܘܚܠܦ̈ܐ، ܠܐ ܚܕ̈ܬܐ ܒܠܚܘܕ',
-'tog-editondblclick' => 'ܫܚܠܦ ܦܐܬ̈ܐ ܬܪ ܢܩܪܐ ܙܘܓܢܝܐ (ܣܢܝܩܬ ܠ JavaScript)',
+'tog-editondblclick' => 'ܫܚܠܦ ܦܐܬܬ̈ܐ ܒܢܩܪܐ ܙܘܓܢܝܐ',
 'tog-editsection' => 'ܡܫܟܚ ܫܘܚܠܦܐ ܕܦܘܣܩ̈ܐ ܒܐܘܪܚܐ ܕܐܝܨܘܪ̈ܐ  [ܫܚܠܦ]',
 'tog-rememberpassword' => 'ܕܟܘܪ ܥܠܠܬܝ ܥܠ ܡܦܐܬܢܐ ܗܢܐ (ܠܡܬܚܐ ܥܠܝܐ ܕ $1 {{PLURAL:$1|ܝܘܡܐ|ܝܘܡܬ̈ܐ}})',
 'tog-watchcreations' => 'ܐܘܣܦ ܦܐܬܬ̈ܐ ܕܒܪܐ ܐܢܐ ܘܠܠܦ̈ܐ ܕܐܣܩ ܐܢܐ ܠܪ̈ܗܝܬܝ',
@@ -337,7 +337,7 @@ $1',
 # 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).
 'aboutsite' => 'ܡܢܘ {{SITENAME}}',
 'aboutpage' => 'Project:ܡܢܘ',
-'copyright' => 'ܚܒܝܫܬ̈ܐ ܐܝܬ ܬܚܝܬ $1.',
+'copyright' => 'ܚܒܝܫܬ̈ܐ ܐܝܬ ܬܚܝܬ $1 ܐܢ ܠܝܬ ܠܩܘܒܠܐ.',
 'copyrightpage' => '{{ns:project}}:ܙܕ̈ܩܐ ܕܚܬܡܐ',
 'currentevents' => 'ܓܕ̈ܫܐ ܗܫܝ̈ܐ',
 'currentevents-url' => 'Project:ܓܕ̈ܫܐ ܗܫܝ̈ܐ',
@@ -911,7 +911,7 @@ $1',
 'rc_categories_any' => 'ܐܝܢܐ ܕܗܘ',
 'rc-change-size-new' => '$1 {{PLURAL:$1|ܒܐܝܛ|ܒܐܝܛ̈ܐ}} ܒܬܪ ܫܘܚܠܦܐ',
 'newsectionsummary' => '/* $1 */ ܡܢܬܐ ܚܕܬܐ',
-'rc-enhanced-expand' => 'ܚܘܝ ܐܪ̈ܝܟܬܐ (ܒܥܐ ܠܟ JavaScript)',
+'rc-enhanced-expand' => 'ܚܘܝ ܐܪ̈ܝܟܬܐ',
 'rc-enhanced-hide' => 'ܛܫܝ ܐܪ̈ܝܟܬܐ',
 'rc-old-title' => 'ܐܬܒܪܝ ܫܪܫܐܝܬ ܐܝܟ "$1"',
 
@@ -1583,7 +1583,7 @@ Do you want to change the settings?',
 'pageinfo-default-sort' => 'ܩܠܝܕܐ ܕܛܘܟܣܐ ܡܬܚܫܒܢܝܐ',
 'pageinfo-length' => 'ܥܓܪܐ ܕܦܐܬܐ (ܒܒܐܝܛ)',
 'pageinfo-article-id' => 'ܗܝܝܘܬܐ ܕܦܐܬܐ',
-'pageinfo-robot-policy' => 'Ü\90Ü\9dÜ\9fÜ¢Ü\9dÜ\98ܬÜ\90 Ü\95Ü¡Ü\99Ü\9dܥܢÜ\90 Ü\95Ü\92ܨÜ\9dܐ',
+'pageinfo-robot-policy' => 'Ü«Ü\98Ü\98Ü\95Ü¥Ü\90 Ü\92Ü\9dÜ\95 ÜªÌ\88Ü\98Ü\92Ü\98Ü\9bܐ',
 'pageinfo-robot-index' => 'ܡܬܦܣܣܢܐ',
 'pageinfo-robot-noindex' => 'ܠܐ ܡܬܦܣܣܢܐ',
 'pageinfo-views' => 'ܡܢܝܢܐ ܕܚܙܝܬ̈ܐ',
index b2f0979..2c044f9 100644 (file)
@@ -190,12 +190,12 @@ $messages = array(
 'tog-hidepatrolled' => 'সাম্প্ৰতিক সাল-সলনিত তহলদাৰী সম্পাদনা নেদেখুৱাব',
 'tog-newpageshidepatrolled' => 'নতুন পৃষ্ঠা তালিকাত তহলদাৰী পৃষ্ঠাসমূহ নেদেখুৱাব',
 'tog-extendwatchlist' => 'কেৱল সাম্প্ৰতিকেই নহয, লক্ষ্য-তালিকাৰ সকলো সাল-সলনি বহলাই দেখুৱাওক',
-'tog-usenewrc' => 'বৰà§\8dদà§\8dধিত à¦¸à¦¾à¦®à§\8dপà§\8dৰতিà¦\95 à¦¸à¦¾à¦²-সলনি à¦¬à§\8dযৱহাৰ à¦\95ৰà¦\95 (à¦\9cাভাসà§\8dà¦\95à§\8dৰিপà§\8dà¦\9fৰ à¦ªà§\8dৰয়à§\8bà¦\9cন)',
+'tog-usenewrc' => 'পà§\83ষà§\8dঠাৰ à¦ªà§°à¦¿à§±à§°à§\8dতনসমà§\82হ à¦¶à§\87হতà§\80য়া à¦¸à¦¾à¦²à¦¸à¦²à¦¨à¦¿ à¦\86ৰà§\81 à¦²à¦\95à§\8dষà§\8dযতালিà¦\95াত à¦­à¦¾à¦\97 à¦\95ৰà¦\95',
 'tog-numberheadings' => 'শীৰ্ষকত স্বয়ংক্ৰিয়ভাৱে ক্ৰমিক নং দিয়ক',
-'tog-showtoolbar' => 'সম্পাদনা দণ্ডিকা দেখুৱাওক (জাভাস্ক্ৰিপ্টৰ দৰকাৰ)',
-'tog-editondblclick' => 'à¦\8fà¦\95à§\87লà¦\97à§\87 à¦¦à§\81বাৰ à¦\9fিপা à¦®à¦¾à§°à¦¿à¦²à§\87 à¦ªà§\83ষà§\8dঠা à¦¸à¦®à§\8dপাদনা à¦\95ৰà¦\95 (à¦\9cাভাসà§\8dà¦\95à§\8dৰিপà§\8dà¦\9fৰ à¦¦à§°à¦\95াৰ)',
+'tog-showtoolbar' => 'সম্পাদনা দণ্ডিকা দেখুৱাওক',
+'tog-editondblclick' => 'দà§\81বাৰ à¦\95à§\8dলিà¦\95 à¦\95ৰিলà§\87 à¦ªà§\83ষà§\8dঠা à¦¸à¦®à§\8dপাদনা à¦\95ৰà¦\95',
 'tog-editsection' => '[সম্পাদনা] সংযোগৰ দ্বাৰা অনুচ্ছেদ সম্পাদনা কৰা সক্ৰিয় কৰক',
-'tog-editsectiononrightclick' => 'à¦\85নà§\81à¦\9aà§\8dà¦\9bà§\87দৰ à¦¶à¦¿à§°à§\8bনামাত à¦¸à§\8bà¦\81-বà§\81à¦\9fাম à¦\9fিপা à¦®à¦¾à§°à¦¿ à¦¸à¦®à§\8dপাদনা à¦\95ৰাà¦\9fà§\8b à¦¸à¦\95à§\8dৰিয় à¦\95ৰà¦\95 (à¦\9cাভাসà§\8dà¦\95à§\8dৰিপà§\8dà¦\9fৰ à¦ªà§\8dৰয়à§\8bà¦\9cন)',
+'tog-editsectiononrightclick' => 'à¦\85নà§\81à¦\9aà§\8dà¦\9bà§\87দৰ à¦¶à¦¿à§°à§\8bনামাত à§°à¦¾à¦\87à¦\9fà§\8dâ\80\8c à¦\95à§\8dলিà¦\95 à¦\9fিপি à¦¸à¦®à§\8dপাদনা à¦\95ৰাà¦\9fà§\8b à¦¸à¦\95à§\8dৰিয় à¦\95ৰà¦\95',
 'tog-showtoc' => 'শিৰোনামাৰ সূচী দেখুৱাওক (যিবোৰ পৃষ্ঠাত তিনিটাতকৈ বেছি শিৰোনামা আছে)',
 'tog-rememberpassword' => 'মোৰ প্ৰৱেশ এই কম্পিউটাৰত মনত ৰাখক (সৰ্বাধিক $1 {{PLURAL:$1|দিনলৈ|দিনলৈ}})',
 'tog-watchcreations' => 'মই সৃষ্টি সকলো পৃষ্ঠা মোৰ লক্ষ্য-তালিকাত যোগ কৰক',
@@ -213,7 +213,7 @@ $messages = array(
 'tog-shownumberswatching' => 'লক্ষ্য কৰি থকা সদস্য সমূহৰ সংখ্যা দেখুৱাওক',
 'tog-oldsig' => 'বৰ্তমানৰ স্বাক্ষৰ:',
 'tog-fancysig' => 'স্বাক্ষৰ ৱিকিটেক্সট হিচাপে ব্যৱহাৰ কৰক (স্বয়ংক্ৰিয় সংযোগ অবিহনে)',
-'tog-uselivepreview' => 'সমà§\8dপাদনাৰ à¦²à¦\97à§\87 à¦²à¦\97à§\87 à¦\96à¦\9aৰা à¦¦à§\87à¦\96à§\81ৱাà¦\93à¦\95 (à¦\9cাভাসà§\8dà¦\95à§\8dৰিপà§\8dà¦\9fৰ à¦ªà§\8dৰয়à§\8bà¦\9cন) (পৰà§\80à¦\95à§\8dষামà§\82লà¦\95)',
+'tog-uselivepreview' => 'সম্পাদনাৰ লগে লগে খচৰা দেখুৱাওক (পৰীক্ষামূলক)',
 'tog-forceeditsummary' => 'সম্পাদনাৰ সাৰাংশ নিদিলে মোক জনাব',
 'tog-watchlisthideown' => 'মোৰ লক্ষ্য-তালিকাত মোৰ সম্পাদনা নেদেখুৱাব',
 'tog-watchlisthidebots' => "মোৰ লক্ষ্য-তালিকাত ব'টে কৰা সম্পাদনা নেদেখুৱাব",
@@ -226,6 +226,7 @@ $messages = array(
 'tog-showhiddencats' => 'নিহিত শ্ৰেণী সমূহ দেখুৱাওক',
 'tog-norollbackdiff' => 'পূৰ্বৱত কৰা পাছত পাৰ্থক্য নেদেখুৱাব',
 'tog-useeditwarning' => 'সালসলনি সংৰক্ষণ নকৰাকৈ সম্পাদনা পৃষ্ঠা ত্যাগৰ সময়ত মোক সাৱধান কৰক',
+'tog-prefershttps' => 'প্ৰৱেশ কৰোঁতে সদায় সুৰক্ষিত সংযোগ ব্যৱহাৰ কৰক',
 
 'underline-always' => 'সদায়',
 'underline-never' => 'কেতিয়াও নহয়',
@@ -326,7 +327,7 @@ $messages = array(
 'newwindow' => "(নতুন ৱিণ্ড'ত খোল খায়)",
 'cancel' => 'বাতিল কৰক',
 'moredotdotdot' => 'অধিক...',
-'morenotlisted' => 'à¦\86ৰà§\81 à¦¤à¦¾à¦²à¦¿à¦\95াভà§\81à¦\95à§\8dত à¦\95ৰা à¦¹à§\8bৱা à¦¨à¦¾à¦\87...',
+'morenotlisted' => 'à¦\8fà¦\87 à¦¤à¦¾à¦²à¦¿à¦\95া à¦¸à¦®à§\8dপà§\82ৰà§\8dণ à¦¨à¦¹à¦¯à¦¼à¥¤',
 'mypage' => 'মোৰ পৃষ্ঠা',
 'mytalk' => 'কথা-বতৰা',
 'anontalk' => 'এই IP-ত যোগাযোগ কৰক',
@@ -512,6 +513,11 @@ $1',
 # General errors
 'error' => 'ভুল',
 'databaseerror' => 'তথ্যকোষৰ ভুল',
+'databaseerror-text' => "এটা ডেটাবে'ছ কুৱেৰী ত্ৰুটি হৈছে।
+ইয়ে ছফ্টৱেৰটোত কিবা বাগ্‌ থকাটো সূচাব পাৰে।",
+'databaseerror-textcl' => "এটা ডেটাবে'ছ কুৱেৰী ত্ৰুটি হৈছে।",
+'databaseerror-function' => 'ফাংচন: $1',
+'databaseerror-error' => 'ত্ৰুটি: $1',
 'laggedslavemode' => 'সাৱধানবাণী: ইয়াত সাম্প্ৰতিক সাল-সলনি নাথাকিব পাৰে',
 'readonly' => 'তথ্যকোষ বন্ধ কৰা আছে',
 'enterlockreason' => 'বন্ধ কৰাৰ কাৰণ দিয়ক, লগতে কেতিয়ামানে খোলা হব তাকো জনাব।',
@@ -545,6 +551,7 @@ $1',
 'cannotdelete-title' => '"$1" পৃষ্ঠা বিলোপ কৰিব নোৱাৰি',
 'delete-hook-aborted' => 'হুকৰ দ্বাৰা সম্পাদনা প্ৰত্যাখ্যান কৰা হৈছে ।
 ইয়াৰ কোনো ব্যাখ্যা নাই ।',
+'no-null-revision' => '"$1" পৃষ্ঠাৰ বাবে নতুন শূন্য সংশোধন সৃষ্টি কৰিব পৰা নগ\'ল',
 'badtitle' => 'অগ্ৰহণীয় শিৰোনামা',
 'badtitletext' => 'আপুনি বিচৰা পৃষ্ঠাটোৰ শিৰোনামা অযোগ্য, খালী বা ভুলকৈ জড়িত আন্তৰ্ভাষিক বা আন্তৰ্ৱিকি শিৰোনামা। ইয়াত এক বা ততোধিক বৰ্ণ আছে যাক শিৰোনামাত ব্যৱহাৰ কৰিব নোৱাৰি।',
 'perfcached' => "তলত দিয়া তথ্যখিনি আগতে জমা কৰি থোৱা (cached) আৰু সাম্প্ৰতিক নহ'ব পাৰে। এই তথ্যখিনিত সৰ্বোচ্চ {{PLURAL:$1|এটা ফলাফল|$1টা ফলাফল}} উপলব্ধ।",
@@ -572,6 +579,8 @@ $2',
 'customjsprotected' => 'এই জাভালিপিৰ পৃষ্ঠা সম্পাদনা কৰাৰ অধিকাৰ আপোনাৰ নাই, কাৰণ ইয়াত আন সদস্যৰ ব্যক্তিগত পছন্দসমূহত আছে ।',
 'mycustomcssprotected' => 'এই CSS পৃষ্ঠা সম্পাদনা কৰিবলৈ আপোনাৰ অনুমতি নাই।',
 'mycustomjsprotected' => 'এই JavaScript পৃষ্ঠা সম্পাদনা কৰিবলৈ আপোনাৰ অনুমতি নাই।',
+'myprivateinfoprotected' => 'ব্যক্তিগত তথ্য সম্পাদনা কৰিবলৈ আপোনাৰ অনুমতি নাই।',
+'mypreferencesprotected' => 'পছন্দসমূহ সম্পাদনা কৰিবলৈ আপোনাৰ অনুমতি  নাই।',
 'ns-specialprotected' => 'বিশেষ পৃষ্ঠা সম্পাদিত কৰিব নোৱাৰি।',
 'titleprotected' => "[[User:$1|$1]] সদস্যজনে এই শিৰোনাণমাৰ লিখনী লিখা ৰোধ কৰিছে ।
 ইয়াৰ কাৰণ হৈছে ''$2'' ।",
@@ -588,10 +597,9 @@ $2',
 'virus-unknownscanner' => 'অজ্ঞাত এন্টিভাইৰাচ:',
 
 # Login and logout pages
-'logouttext' => "'''আপুনি প্ৰস্থান কৰিলে ।'''
+'logouttext' => "'''আপুনি প্ৰস্থান কৰিলে।'''
 
-আপুনি বেনামী ভাবেও {{SITENAME}} ব্যৱহাৰ কৰিব পাৰে, অথবা আকৌ সেই একে বা বেলেগ নামেৰে <span class='plainlinks'>[$1 প্ৰৱেশ]</span> কৰিব পাৰে।
-মন কৰিব যে যেতিয়ালৈকে আপোনাৰ ব্ৰাউজাৰৰ অস্থায়ী-স্মৃতি (cache memory) খালী নকৰে, তেতিয়ালৈকে কিছুমান পৃষ্ঠাত আপুনি প্ৰৱেশ কৰা বুলি দেখুৱাই থাকিব পাৰে।",
+মন কৰিব যে যেতিয়ালৈকে আপোনাৰ ব্ৰাউজাৰৰ অস্থায়ী-স্মৃতি (cache) খালী নকৰে, তেতিয়ালৈকে কিছুমান পৃষ্ঠাত আপুনি প্ৰৱেশ কৰা বুলি দেখুৱাই থাকিব পাৰে।",
 'welcomeuser' => 'আদৰিছোঁ, $1!',
 'welcomecreation-msg' => '== আদৰিছোঁ, $1! ==
 আপোনাৰ সদস্যভুক্তি হৈ গ’ল ।
@@ -599,6 +607,7 @@ $2',
 'yourname' => 'সদস্যনাম:',
 'userlogin-yourname' => 'সদস্যনাম',
 'userlogin-yourname-ph' => 'আপোনাৰ সদস্যনাম লিখক',
+'createacct-another-username-ph' => 'সদস্যনাম লিখক',
 'yourpassword' => 'আপোনাৰ গুপ্তশব্দ',
 'userlogin-yourpassword' => 'গুপ্তশব্দ',
 'userlogin-yourpassword-ph' => 'আপোনাৰ গুপ্তশব্দ লিখক',
@@ -632,10 +641,12 @@ $2',
 'helplogin-url' => 'Help:প্ৰৱেশ/লগ্‌-ইন',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|প্ৰৱেশ সম্পৰ্কীয় সাহায্য]]',
 'createacct-join' => 'আপোনাৰ তথ্যসমূহ তলত লিখক।',
+'createacct-another-join' => 'নতুন একাউণ্টৰ তথ্যসমূহ তলত লিখক।',
 'createacct-emailrequired' => 'ই-মেইল ঠিকনা',
 'createacct-emailoptional' => 'ই-মেইল ঠিকনা (বৈকল্পিক)',
 'createacct-email-ph' => 'আপোনাৰ ই-মেইল ঠিকনা লিখক',
-'createaccountmail' => 'যিকোনো এটা অস্থায়ী গুপ্তশব্দ ব্যৱহাৰ কৰক আৰু ইয়াক তলত দিয়া ইমেইল ঠিকনাটোলৈ পঠিয়াই দিয়ক',
+'createacct-another-email-ph' => 'ইমেইল ঠিকনা লিখক',
+'createaccountmail' => 'এটা যাদৃচ্ছিক অস্থায়ী গুপ্তশব্দ ব্যৱহাৰ কৰক আৰু ইয়াক তলত দিয়া ইমেইল ঠিকনাটোলৈ পঠিয়াই দিয়ক',
 'createacct-realname' => 'প্ৰকৃত নাম (বৈকল্পিক)',
 'createaccountreason' => 'কাৰণ:',
 'createacct-reason' => 'কাৰণ',
@@ -643,6 +654,7 @@ $2',
 'createacct-captcha' => 'সুৰক্ষা পৰীক্ষা',
 'createacct-imgcaptcha-ph' => 'ওপৰত দেখা পোৱা পাঠ্য লিখক',
 'createacct-submit' => 'আপোনাৰ একাউণ্ট সৃষ্টি কৰক',
+'createacct-another-submit' => 'আন এটা একাউণ্ট সৃষ্টি কৰক',
 'createacct-benefit-heading' => 'আপোনাৰ দৰে মানুহেই {{SITENAME}} তৈয়াৰ কৰিছে',
 'createacct-benefit-body1' => '{{PLURAL:$1|সম্পাদনা}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|পৃষ্ঠা|পৃষ্ঠাসমূহ}}',
@@ -714,10 +726,12 @@ $2',
 যদি এইয়া ভুলতে হৈছে, তেনেহলে আপুনি এই বাৰ্তাটো অবজ্ঞা কৰিব পাৰে ।',
 'usernamehasherror' => 'সদস্যনামত হেচ্‌ চিহ্ন থাকিব নোৱাৰে',
 'login-throttled' => 'আপুনি স‍ম্প্ৰতি অজস্ৰবাৰ লগ্‌-ইনৰ প্ৰয়াস কৰিছে ।
-অনুগ্ৰহ কৰি কিছু সময় অপেক্ষা কৰি আকৌ প্ৰয়াস কৰক ।',
+অনুগ্ৰহ কৰি $1 সময়ৰ পিছত আকৌ চেষ্টা কৰক ।',
 'login-abort-generic' => 'আপোনাৰ প্ৰৱেশ অসফল হৈছে- বাতিল কৰা হ’ল',
 'loginlanguagelabel' => 'ভাষা: $1',
 'suspicious-userlogout' => 'আপোনাৰ প্ৰস্থানৰ অনুৰোধ বাতিল কৰা হৈছে কাৰণ হয়তো আপোনাৰ ব্ৰাউজাৰ অসম্পূৰ্ণ নতুবা পূৰ্বৱতী তথ্য পঠাইছে ।',
+'createacct-another-realname-tip' => "প্ৰকৃত নাম দিয়াটো বৈকল্পিক।
+আপুনি নামটো দিলে সেইটো আপোনাৰ বৰঙণিসমূহৰ বাবে স্বীকৃতি প্ৰদানত ব্যৱহাৰ কৰা হ'ব।",
 
 # Email sending
 'php-mail-error-unknown' => 'পি.এইছ.পি মেইল () কাৰ্যত অজ্ঞাত ত্ৰুটি ।',
@@ -733,7 +747,7 @@ $2',
 'newpassword' => 'নতুন গুপ্তশব্দ:',
 'retypenew' => 'নতুন গুপ্তশব্দ আকৌ লিখক',
 'resetpass_submit' => 'গুপ্তশব্দ বহুৱাওক আৰু প্ৰৱেশ কৰক',
-'changepassword-success' => 'আপোনাৰ গুপ্তশব্দ সফলতাৰে সলনি কৰা হৈছে, এতিয়া আপুনি প্ৰৱেশ কৰি আছে...',
+'changepassword-success' => 'আপোনাৰ গুপ্তশব্দ সফলতাৰে সলনি কৰা হৈছে!',
 'resetpass_forbidden' => 'গুপ্তশব্দ সলনি কৰিব নোৱাৰি',
 'resetpass-no-info' => 'এই পৃষ্ঠা প্ৰত্যক্ষ ভাৱে ঢুকি পাবলৈ আপুনি প্ৰৱেশ কৰিব লাগিব ।',
 'resetpass-submit-loggedin' => 'গুপ্তশব্দ সলনি কৰক',
@@ -783,6 +797,9 @@ $2
 'changeemail-submit' => 'ই-মেইল ঠিকনা সলনি কৰক',
 'changeemail-cancel' => 'বাতিল কৰক',
 
+# Special:ResetTokens
+'resettokens' => "ট'কেন ৰিছে'ট কৰক",
+
 # Edit page toolbar
 'bold_sample' => 'গাঢ় পাঠ্য',
 'bold_tip' => 'গাঢ় পাঠ্য',
@@ -3861,8 +3878,7 @@ $5
 
 # Database error messages
 'dberr-header' => 'এই ৱিকিত এটা সমস্যা হৈছে',
-'dberr-problems' => 'দুঃখিত!
-চাইটটোত কিছু কাৰিকৰী সমস্যা হৈছে ।',
+'dberr-problems' => 'দুঃখিত! চাইটটোত কিছু কাৰিকৰী সমস্যা হৈছে ।',
 'dberr-again' => "অলপ সময় অপেক্ষা কৰি পুনৰ আপল'ডৰ চেষ্টা কৰক ।",
 'dberr-info' => '(তথ্যকোষৰ চাৰ্ভাৰৰ লগত যোগাযোগ কৰিব নোৱাৰি: $1)',
 'dberr-usegoogle' => 'এই পৰিস্থিতিত আপুনি গুগলৰ মাধ্যমেৰে অনুসন্ধান কৰিব পাৰে ।',
index 03897de..37e02fe 100644 (file)
@@ -311,7 +311,7 @@ $1",
 # 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).
 'aboutsite' => 'Tocante a {{SITENAME}}',
 'aboutpage' => 'Project:Tocante a',
-'copyright' => 'El conteníu ta disponible baxo los términos de la $1.',
+'copyright' => "El conteníu ta disponible baxo los términos de la $1 si nun s'indica otra cosa.",
 'copyrightpage' => "{{ns:project}}:Drechos d'autor",
 'currentevents' => 'Fechos actuales',
 'currentevents-url' => 'Project:Fechos actuales',
@@ -1482,7 +1482,7 @@ Esta información sedrá pública.',
 'action-protect' => 'camudar los niveles de proteición pa esta páxina',
 'action-rollback' => "Revertir rápido les ediciones del caberu usuariu qu'editó una páxina determinada",
 'action-import' => 'importar esta páxina dende otra wiki',
-'action-importupload' => "importar esta páxina dende una xubida d'archivu",
+'action-importupload' => 'importar esta páxina dende un ficheru xubíu',
 'action-patrol' => "marcar les ediciones d'otros como supervisaes",
 'action-autopatrol' => 'marcar la to edición como supervisada',
 'action-unwatchedpages' => 'ver la llista de páxines non vixilaes',
@@ -2027,6 +2027,7 @@ Les entraes <del>tachaes</del> tan resueltes.',
 'listusers' => "Llista d'usuarios",
 'listusers-editsonly' => 'Amosar namái usuarios con ediciones',
 'listusers-creationsort' => 'Ordenar por data de creación',
+'listusers-desc' => "Ordenar n'orde descendente",
 'usereditcount' => '$1 {{PLURAL:$1|edición|ediciones}}',
 'usercreated' => "{{GENDER:$3|Creáu el|Creada'l}} $1 a les $2",
 'newpages' => 'Páxines nueves',
@@ -2312,7 +2313,7 @@ daquién más yá editó o revirtió la páxina.
 La postrer edición foi fecha por [[User:$3|$3]] ([[User talk:$3|alderique]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "El resume de la edición yera: \"''\$1''\".",
 'revertpage' => 'Revertíes les ediciones de [[Special:Contributions/$2|$2]] ([[User talk:$2|alderique]]) hasta la cabera versión de [[User:$1|$1]]',
-'revertpage-nouser' => "Revertíes les ediciones d'un usuariu tapecíu a la cabera revisión de [[User:$1|$1]]",
+'revertpage-nouser' => 'Revertíes les ediciones de (usuariu desaniciáu) a la cabera revisión de {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Revertíes les ediciones de $1; camudáu a la última versión de $2.',
 
 # Edit tokens
@@ -3816,7 +3817,10 @@ Tendría d'haber recibío [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Llic
 'tags-tag' => "Nome d'etiqueta",
 'tags-display-header' => 'Aspeutu nes llistes de cambios',
 'tags-description-header' => 'Descripción completa del significáu',
+'tags-active-header' => '¿Activu?',
 'tags-hitcount-header' => 'Cambios etiquetaos',
+'tags-active-yes' => 'Sí',
+'tags-active-no' => 'Non',
 'tags-edit' => 'editar',
 'tags-hitcount' => '$1 {{PLURAL:$1|cambiu|cambios}}',
 
@@ -3982,9 +3986,9 @@ D\'otra miente, pues usar el formulariu cenciellu d\'abaxo. El to comentariu apa
 'limitreport-ppvisitednodes' => 'Cuenta de noyos visitaos pol preprocesador',
 'limitreport-ppgeneratednodes' => 'Cuenta de noyos xeneraos pol preprocesador',
 'limitreport-postexpandincludesize' => "Tamañu d'inclusión de post-espansión",
-'limitreport-postexpandincludesize-value' => '$1/$2 bytes',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
 'limitreport-templateargumentsize' => 'Tamañu del argumentu de plantía',
-'limitreport-templateargumentsize-value' => '$1/$2 bytes',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
 'limitreport-expansiondepth' => "Máxima fondura d'espansión",
 'limitreport-expensivefunctioncount' => "Cuenta de funciones d'analís costoses",
 
index 4342a4c..c1eeaa2 100644 (file)
@@ -2880,7 +2880,10 @@ Variants for Chinese language
 'tags-title' => 'Etiketlər',
 'tags-tag' => 'Etiket adı',
 'tags-description-header' => 'Anlamının tam açıqlaması',
+'tags-active-header' => 'Aktiv?',
 'tags-hitcount-header' => 'Etiketli dəyişikliklər',
+'tags-active-yes' => 'Bəli',
+'tags-active-no' => 'Xeyr',
 'tags-edit' => 'redaktə',
 'tags-hitcount' => '$1 {{PLURAL:$1|dəyişiklik|dəyişiklik}}',
 
@@ -2895,8 +2898,7 @@ Variants for Chinese language
 
 # Database error messages
 'dberr-header' => 'Bu vikidə problem var',
-'dberr-problems' => 'Üzr istəyirik!
-Bu saytda texniki problemlər var.',
+'dberr-problems' => 'Üzr istəyirik! Bu saytda texniki problemlər var.',
 'dberr-info' => '($1: Məlumat bazası ilə əlaqə yoxdur)',
 
 # HTML forms
index cb09b7b..b845a59 100644 (file)
@@ -3726,8 +3726,7 @@ $5
 
 # Database error messages
 'dberr-header' => 'بو ویکی‌ده بیر ایشکال وار',
-'dberr-problems' => 'عوذر ایسته‌ییریک!
-بو سایت‌دا تِکنیکی ایشکال‌لار واردیر.',
+'dberr-problems' => 'عوذر ایسته‌ییریک! بو سایت‌دا تِکنیکی ایشکال‌لار واردیر.',
 'dberr-again' => 'بیر نئچه دقیقه دؤزوب سونرا یئنی‌دن یوکله‌یین.',
 'dberr-info' => '(دیتابیس خیدمت‌چیسی‌یه باغلانماق اولونمادی: $1)',
 'dberr-usegoogle' => 'بو آرادا، گوگل‌ده آختارابیلرسینیز.',
index 11365f7..3197a42 100644 (file)
@@ -3712,8 +3712,7 @@ MediaWiki файҙалы булыр, тигән өмөттә, ләкин БЕР
 
 # Database error messages
 'dberr-header' => 'Был вики проектта ҡыйынлыҡтар бар',
-'dberr-problems' => 'Ғәфү итегеҙ!
-Был сайтта техник ҡыйынлыҡтар тыуҙы.',
+'dberr-problems' => 'Ғәфү итегеҙ! Был сайтта техник ҡыйынлыҡтар тыуҙы.',
 'dberr-again' => 'Битте бер нисә минуттан яңыртып ҡарағыҙ.',
 'dberr-info' => '(Мәғлүмәттәр базаһы серверы менән тоташтырылып булмай: $1)',
 'dberr-usegoogle' => 'Әлегә һеҙ Google ярҙамында эҙләп ҡарай алһығыҙ.',
index 01c43ce..d76944c 100644 (file)
@@ -104,12 +104,12 @@ $messages = array(
 '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-usenewrc' => 'Pangrupong mga kaliwatan sa kada pahina kan mga dae pa sana nahaloy na mga kaliwatan asin bantay-listahan',
 '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-showtoolbar' => 'Ipahiling an barang-gamit nin pagliwat',
+'tog-editondblclick' => 'Liwaton an mga pahina sa pagdoble nin klik',
 '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-editsectiononrightclick' => 'Paganaha an seksyon nin pagliliwat sa pag-klik kan mga titulo nin seksyon',
 '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 an mga pahina na ako an nagmukna asin an mga sagunson na ako an nagkarga sa sakong bantay-listahan',
@@ -127,7 +127,7 @@ $messages = array(
 '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-uselivepreview' => 'Gamíta an buhay na patànaw (minakaipo nin JavaScript) (eksperimental)',
+'tog-uselivepreview' => 'Gamíta an buhay na patànaw (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',
@@ -241,7 +241,7 @@ $messages = array(
 'newwindow' => '(minabukas sa bàgong bintanà)',
 'cancel' => 'Kanselaron',
 'moredotdotdot' => 'Kadagdagan...',
-'morenotlisted' => 'Dakol pa an bakong listado...',
+'morenotlisted' => 'Ining listahan bako pang kumpleto.',
 'mypage' => 'An Pahina',
 'mytalk' => 'Orolayan',
 'anontalk' => 'Olay para kaining IP address',
@@ -428,6 +428,12 @@ Pwede mong mahiling an lista nin mga marhay na pahina sa [[Special:SpecialPages|
 # General errors
 'error' => 'Salâ',
 'databaseerror' => 'Salâ sa base nin datos',
+'databaseerror-text' => 'Sarong hapot sa datos-sarayan na kasalaan an nangyari.
+Ini puwedeng minapasabot nin sarong kudol sa panuklob.',
+'databaseerror-textcl' => 'Sarong hapot sa datos-sarayan na kasalaan an nangyari.',
+'databaseerror-query' => 'Hapot: $1',
+'databaseerror-function' => 'Punksyon: $1',
+'databaseerror-error' => 'Kasalaan: $1',
 'laggedslavemode' => 'Patanid: An pahina pwedeng dai nin pagbabâgo sa ngonyan.',
 'readonly' => 'Nakakandado na datos-sarayan',
 'enterlockreason' => 'Magkaag tabì nin rason sa pagkandado, asin ikalkulo kun nuarin bubukasón an kandado',
@@ -1544,7 +1550,7 @@ An saimong e-surat na adres dae ipagbuyagyag kunsoarin na an ibang paragamit mak
 '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-expand' => 'Ipahiling an mga detalye',
 'rc-enhanced-hide' => 'Itago an mga detalye',
 'rc-old-title' => 'orihinal na pinagmukna bilang "$1"',
 
@@ -3805,10 +3811,10 @@ Ika dapat na nakapagresibe na kan [{{SERVER}}{{SCRIPTPATH}}/COPYING sarong kopya
 
 # Database error messages
 'dberr-header' => 'Ining wiki igwa nin sarong problema',
-'dberr-problems' => 'Sori!
-Ining sityo igwang naeksperiyensiyahan na mga kakundian sa teknikal.',
+'dberr-problems' => 'Sori! Ining sityo igwang naeksperiyensiyahan na mga kakundian sa teknikal.',
 'dberr-again' => 'Prubaring maghalat tabi nin nagkapirang minutos asin otrohon ikarga.',
 'dberr-info' => '(Dae makakontak sa serbidor kan datos-sarayan: $1)',
+'dberr-info-hidden' => '(Dae makakontak sa serbidor kan datos-sarayan)',
 'dberr-usegoogle' => 'Ika puwedeng magprubar na maghanap sa Google nguna.',
 'dberr-outofdate' => 'Pasinon mo tabi na an saindang mga indekso kan satuyang laog puwedeng luwas na sa petsa.',
 'dberr-cachederror' => 'Ini sarong nakasaray na kopya kan pinaghahagad na pahina, asin puwedeng bakong angat sa petsa.',
index 38c5bd8..5bda6d8 100644 (file)
@@ -510,7 +510,7 @@ $1',
 # 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).
 'aboutsite' => 'Пра {{GRAMMAR:вінавальны|{{SITENAME}}}}',
 'aboutpage' => 'Project:Пра {{GRAMMAR:вінавальны|{{SITENAME}}}}',
-'copyright' => 'Зьмест даступны на ўмовах $1.',
+'copyright' => 'Зьмест даступны на ўмовах $1, калі не пазначана іншае.',
 'copyrightpage' => '{{ns:project}}:Аўтарскія правы',
 'currentevents' => 'Актуальныя падзеі',
 'currentevents-url' => 'Project:Актуальныя падзеі',
@@ -1065,7 +1065,7 @@ $2
 'templatesusedsection' => 'У гэтай сэкцыі {{PLURAL:$1|выкарыстаны наступны шаблён|выкарыстаныя наступныя шаблёны}}:',
 'template-protected' => '(абаронены)',
 'template-semiprotected' => '(часткова абароненая)',
-'hiddencategories' => 'Гэтая старонка належыць $1 {{PLURAL:$1|схаванай катэгорыі|схаваным катэгорыям|схаваным катэгорыям}}:',
+'hiddencategories' => 'Гэтая старонка належыць да $1 {{PLURAL:$1|схаванай катэгорыі|схаваных катэгорыяў}}:',
 'nocreatetext' => 'У {{GRAMMAR:месны|{{SITENAME}}}} абмежаванае стварэньне новых старонак.
 Вы можаце вярнуцца і рэдагаваць існуючую старонку, альбо [[Special:UserLogin|ўвайсьці ў сыстэму ці стварыць рахунак]].',
 'nocreate-loggedin' => 'Вы ня маеце дазволу на стварэньне новых старонак.',
@@ -1658,8 +1658,8 @@ $1",
 'action-block' => 'блякаваньне гэтага ўдзельніка ад рэдагаваньняў',
 'action-protect' => 'зьмену ўзроўню абароны гэтай старонкі',
 'action-rollback' => 'хуткі адкат рэдагаваньняў апошняга ўдзельніка, які рэдагаваў старонку',
-'action-import' => 'імпарт гэтай старонкі зь іншай вікі',
-'action-importupload' => 'імпарт гэтай старонкі праз загрузку файла',
+'action-import' => 'імпарт старонак зь іншай вікі',
+'action-importupload' => 'імпарт старонак праз загрузку файла',
 'action-patrol' => 'пазначэньне чужых рэдагаваньняў як «патруляваныя»',
 'action-autopatrol' => 'пазначэньне ўласных рэдагаваньняў як «патруляваныя»',
 'action-unwatchedpages' => 'прагляд сьпісу старонак, за якімі ніхто не назірае',
@@ -2184,6 +2184,7 @@ $1',
 'listusers' => 'Сьпіс удзельнікаў і ўдзельніц',
 'listusers-editsonly' => 'Паказаць толькі ўдзельнікаў, якія маюць рэдагаваньні',
 'listusers-creationsort' => 'Адсартаваць па даце стварэньня',
+'listusers-desc' => 'Сартаваць па зьмяншэньні',
 'usereditcount' => '$1 {{PLURAL:$1|рэдагаваньне|рэдагаваньні|рэдагаваньняў}}',
 'usercreated' => '{{GENDER:$3|Створаны|Створаная}} $1 у $2',
 'newpages' => 'Новыя старонкі',
@@ -2468,7 +2469,7 @@ $UNWATCHURL
 Апошнія зьмены зробленыя [[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]]',
+'revertpage-nouser' => 'Рэдагаваньні схаванага ўдзельніка скасаваныя да папярэдняй вэрсіі {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Адмененыя рэдагаваньні $1;
 вернутая папярэдняя вэрсія $2.',
 
@@ -3965,7 +3966,10 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'tags-tag' => 'Назва тэга',
 'tags-display-header' => 'Новыя запісы ў сьпісе зьменаў',
 'tags-description-header' => 'Поўнае апісаньне значэньня',
+'tags-active-header' => 'Актыўны?',
 'tags-hitcount-header' => 'Пазначаныя зьмены',
+'tags-active-yes' => 'Так',
+'tags-active-no' => 'Не',
 'tags-edit' => 'рэдагаваць',
 'tags-hitcount' => '$1 {{PLURAL:$1|зьмена|зьмены|зьменаў}}',
 
@@ -4131,9 +4135,9 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'limitreport-ppvisitednodes' => 'Колькасьць наведаных прэпрацэсарам вузлоў',
 'limitreport-ppgeneratednodes' => 'Колькасьць створаных прэпрацэсарам вузлоў',
 'limitreport-postexpandincludesize' => 'Памер уключэньняў па разгортваньні',
-'limitreport-postexpandincludesize-value' => '$1/$2 байт',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|байт}}',
 'limitreport-templateargumentsize' => 'Памер аргумэнтаў шаблёнаў',
-'limitreport-templateargumentsize-value' => '$1/$2 байт',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|байт}}',
 'limitreport-expansiondepth' => 'Найбольшая глыбіня разгортваньня',
 'limitreport-expensivefunctioncount' => 'Колькасьць дарагіх функцыяў парсэра',
 
index 0678465..ad62950 100644 (file)
@@ -248,10 +248,10 @@ $messages = array(
 'tog-extendwatchlist' => 'Разширяване на списъка, така че да показва всички промени, не само най-скорошните',
 'tog-usenewrc' => 'Групиране на последните промени и списъка за наблюдение по страници (изисква Джаваскрипт)',
 'tog-numberheadings' => 'Номериране на заглавията',
-'tog-showtoolbar' => 'Ð\9fомоÑ\89на Ð»ÐµÐ½Ñ\82а Ð·Ð° Ñ\80едакÑ\82иÑ\80ане (изиÑ\81ква Ð\94жаваÑ\81кÑ\80ипÑ\82)',
-'tog-editondblclick' => 'РедакÑ\82иÑ\80ане Ð¿Ñ\80и Ð´Ð²Ð¾Ð¹Ð½Ð¾ Ñ\89Ñ\80акване (изиÑ\81ква Ð\94жаваÑ\81кÑ\80ипÑ\82)',
+'tog-showtoolbar' => 'Ð\9fоказване Ð½Ð° Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83менÑ\82иÑ\82е Ð·Ð° Ñ\80едакÑ\82иÑ\80ане',
+'tog-editondblclick' => 'РедакÑ\82иÑ\80ане Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86иÑ\82е Ñ\87Ñ\80ез Ð´Ð²Ð¾Ð¹Ð½Ð¾ Ñ\89Ñ\80акване',
 'tog-editsection' => 'Възможност за редактиране на раздел чрез препратка [редактиране]',
-'tog-editsectiononrightclick' => 'Възможност за редактиране на раздел при щракване с десния бутон върху заглавие на раздел (изисква Джаваскрипт)',
+'tog-editsectiononrightclick' => 'Възможност за редактиране на раздел при щракване с десния бутон върху заглавието му',
 'tog-showtoc' => 'Показване на съдържание (за страници с повече от три раздела)',
 'tog-rememberpassword' => 'Запомяне на паролата ми в този браузър (за не повече от $1 {{PLURAL:$1|ден|дни}})',
 'tog-watchcreations' => 'Добавяне на създадените от мен страници и качените от мен файлове към списъка ми за наблюдение',
@@ -269,7 +269,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Показване на броя на потребителите, наблюдаващи дадена страница',
 'tog-oldsig' => 'Текущ подпис:',
 'tog-fancysig' => 'Без превръщане на подписа в препратка към потребителската страница',
-'tog-uselivepreview' => 'Ð\98зползване Ð½Ð° Ð±Ñ\8aÑ\80з Ð¿Ñ\80едваÑ\80иÑ\82елен Ð¿Ñ\80еглед (изиÑ\81ква Ð\94жаваÑ\81кÑ\80ипÑ\82; ÐµÐºÑ\81пеÑ\80именÑ\82ално)',
+'tog-uselivepreview' => 'Използване на бърз предварителен преглед (експериментално)',
 'tog-forceeditsummary' => 'Предупреждаване при празно поле за резюме на редакцията',
 'tog-watchlisthideown' => 'Скриване на моите редакции в списъка ми за наблюдение',
 'tog-watchlisthidebots' => 'Скриване на редакциите на ботове в списъка ми за наблюдение',
@@ -282,6 +282,7 @@ $messages = array(
 'tog-showhiddencats' => 'Показване на скритите категории',
 'tog-norollbackdiff' => 'Пропускане на разликовата връзка след извършване на отмяна на редакции',
 'tog-useeditwarning' => 'Предупреждаване при опит за напускане на страница, отворена в режим на редактиране, без да са запазени промените',
+'tog-prefershttps' => 'Да се използва винаги защитена връзка след влизане',
 
 'underline-always' => 'Винаги',
 'underline-never' => 'Никога',
@@ -382,6 +383,7 @@ $messages = array(
 'newwindow' => '(отваря се в нов прозорец)',
 'cancel' => 'Отказ',
 'moredotdotdot' => 'Още…',
+'morenotlisted' => 'Този списък не е пълен.',
 'mypage' => 'Страница',
 'mytalk' => 'Беседа',
 'anontalk' => 'Беседа за адреса',
@@ -568,6 +570,9 @@ $1',
 # General errors
 'error' => 'Грешка',
 'databaseerror' => 'Грешка при работа с базата от данни',
+'databaseerror-query' => 'Заявка: $1',
+'databaseerror-function' => 'Функция: $1',
+'databaseerror-error' => 'Грешка: $1',
 'laggedslavemode' => 'Внимание: Страницата може да не съдържа последните обновявания.',
 'readonly' => 'Базата от данни е затворена за промени',
 'enterlockreason' => 'Посочете причина за затварянето, като дадете и приблизителна оценка кога базата от данни ще бъде отново отворена',
@@ -821,6 +826,9 @@ $2
 'changeemail-submit' => 'Промяна на е-пощата',
 'changeemail-cancel' => 'Отказване',
 
+# Special:ResetTokens
+'resettokens-token-label' => '$1 (текуща стойност: $2)',
+
 # Edit page toolbar
 'bold_sample' => 'Получер текст',
 'bold_tip' => 'Получер (удебелен) текст',
@@ -1227,6 +1235,7 @@ $1",
 'compareselectedversions' => 'Сравнение на избраните версии',
 'showhideselectedversions' => 'Показване/скриване на избрани версии',
 'editundo' => 'връщане',
+'diff-empty' => '(Няма разлика)',
 'diff-multi' => '({{PLURAL:$1|Не е показана една междинна версия|Не са показани $1 междинни версии}} от {{PLURAL:$2|един потребител|$2 потребителя}}.)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Не е показана една междинна версия|Не са показани $1 междинни версии}} от повече от $2 {{PLURAL:$2|потребител|потребителя}})',
 'difference-missing-revision' => '{{PLURAL:$2|Не беше открита|Не бяха открити}} {{PLURAL:$2|една версия|$2 версии}} от тази разликова препратка ($1).
@@ -1398,6 +1407,7 @@ $1",
 'prefs-dateformat' => 'Формат на датата',
 'prefs-timeoffset' => 'Часово отместване',
 'prefs-advancedediting' => 'Разширени настройки',
+'prefs-preview' => 'Преглед',
 'prefs-advancedrc' => 'Разширени настройки',
 'prefs-advancedrendering' => 'Разширени настройки',
 'prefs-advancedsearchoptions' => 'Разширени настройки',
@@ -1598,7 +1608,7 @@ $1",
 'rc_categories_any' => 'Която и да е',
 'rc-change-size-new' => '$1 {{PLURAL:$1|байт|байта}} след редакцията',
 'newsectionsummary' => 'Нова тема /* $1 */',
-'rc-enhanced-expand' => 'Показване на детайли (изисква JavaScript)',
+'rc-enhanced-expand' => 'Показване на детайли',
 'rc-enhanced-hide' => 'Скриване на детайли',
 'rc-old-title' => 'първоначално създадена като „$1“',
 
@@ -1621,7 +1631,7 @@ $1",
 'reuploaddesc' => 'Връщане към формуляра за качване.',
 'upload-tryagain' => 'Съхраняване на промененото описание на файла',
 'uploadnologin' => 'Не сте влезли',
-'uploadnologintext' => 'Ð\9dеобÑ\85одимо Ðµ Ð´Ð° [[Special:UserLogin|влезеÑ\82е]], Ð·Ð° Ð´Ð° Ð¼Ð¾Ð¶Ðµ Ð´Ð° ÐºÐ°Ñ\87ваÑ\82е Ñ\84айлове.',
+'uploadnologintext' => 'Ð\97а Ð´Ð° Ð¼Ð¾Ð³Ð°Ñ\82 Ð´Ð° Ð±Ñ\8aдаÑ\82 ÐºÐ°Ñ\87вани Ñ\84айлове Ðµ Ð½ÐµÐ¾Ð±Ñ\85одимо $1 Ð² Ñ\81иÑ\81Ñ\82емаÑ\82а.',
 'upload_directory_missing' => 'Директорията за качване ($1) липсва и не може да бъде създадена на сървъра.',
 'upload_directory_read_only' => 'Сървърът няма достъп за писане в директорията за качване „$1“.',
 'uploaderror' => 'Грешка при качване',
@@ -1818,6 +1828,7 @@ $1',
 'listfiles_size' => 'Размер',
 'listfiles_description' => 'Описание',
 'listfiles_count' => 'Версии',
+'listfiles-show-all' => 'Включване на старите версии на изображенията',
 'listfiles-latestversion' => 'Текущата версия',
 'listfiles-latestversion-yes' => 'Да',
 'listfiles-latestversion-no' => 'Не',
@@ -1853,6 +1864,8 @@ $1',
 За повече информация вижте [$2 описателната му страница].',
 'sharedupload-desc-here' => 'Този файл е от $1 и може да се използва от други проекти.
 Следва информация за файла, достъпна през [$2 оригиналната му описателна страница].',
+'sharedupload-desc-edit' => 'Този файл е от $1 и може да бъде използван от други проекти.
+Вероятно желаете да редактирате описанието му на [$2 неговата описателна страница].',
 'filepage-nofile' => 'Не съществува файл с това име.',
 'filepage-nofile-link' => 'Не съществува файл с това име, но можете [$1 да го качите].',
 'uploadnewversion-linktext' => 'Качване на нова версия на файла',
@@ -2925,6 +2938,7 @@ $1',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Скрита категория|Скрити категории}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Включен шаблон|Включени шаблони}} ($1)',
 'pageinfo-toolboxlink' => 'Информация за страницата',
+'pageinfo-redirectsto' => 'Пренасочване към',
 'pageinfo-redirectsto-info' => 'инфо',
 'pageinfo-contentpage-yes' => 'Да',
 'pageinfo-protect-cascading' => 'Каскадни защити, започващи от тази страница',
@@ -3170,6 +3184,7 @@ $1',
 'exif-citycreated' => 'Град, в който е направена снимката',
 'exif-objectname' => 'Кратко заглавие',
 'exif-specialinstructions' => 'Специални инструкции',
+'exif-headline' => 'Заглавие',
 'exif-source' => 'Източник',
 'exif-contact' => 'Информация за контакти',
 'exif-languagecode' => 'Език',
@@ -3575,6 +3590,7 @@ $5
 'version-license' => 'Лиценз',
 'version-poweredby-credits' => "Това уики се задвиждва от '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'други',
+'version-poweredby-translators' => 'преводачи в translatewiki.net',
 'version-credits-summary' => 'Бихме искали да изкажем признателност на следните хора за техните приноси към [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki е свободен софтуер, можете да го разпространявате и/или променяте съгласно условията на GNU General Public License, както е публикуван от Free Software Foundation, версия 2 на лиценза или (по ваше усмотрение) която и да е следваща версия.
 
@@ -3683,6 +3699,7 @@ MediaWiki се разпространява с надеждата, че ще б
 'htmlform-selectorother-other' => 'Друга',
 'htmlform-no' => 'Не',
 'htmlform-yes' => 'Да',
+'htmlform-chosen-placeholder' => 'Избиране',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 с поддръжка на пълнотекстово търсене',
index e1dd94b..420b898 100644 (file)
@@ -3645,8 +3645,7 @@ Pian saharusnya [{{SERVER}}{{SCRIPTPATH}}/COPYING sabuting salinan Lisansi Publi
 
 # Database error messages
 'dberr-header' => 'Wiki ngini baisi sabuah masalah',
-'dberr-problems' => 'Ampun!
-Situs ngini mangalami kangalihan teknik.',
+'dberr-problems' => 'Ampun!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 mancuba manggagai lung Google wayah pahadangan ngini.',
index 9a24304..0c6cd4c 100644 (file)
@@ -78,12 +78,12 @@ $messages = array(
 'tog-hidepatrolled' => 'পরীক্ষিত সম্পাদনা গুলো সাম্প্রতিক পরিবর্তনসমূহে আড়াল করো',
 'tog-newpageshidepatrolled' => 'পরীক্ষিত পাতা গুলো নতুন পাতার তালিকায় আড়াল করো',
 'tog-extendwatchlist' => 'শুধু সাম্প্রতিক পরিবর্তনই নয়, সকল পরিবর্তন দেখতে নজর তালিকা সম্প্রসারণ করুন।',
-'tog-usenewrc' => 'সাম্প্রতিক পরিবর্তনসমূহ এবং নজরতালিকা পাতায় পরিবর্তনগুলো একত্রে প্রদর্শন (জাভাস্ক্রিপ্ট প্রয়োজন)',
+'tog-usenewrc' => 'সাম্প্রতিক পরিবর্তনসমূহ এবং নজরতালিকা পাতায় পরিবর্তনগুলো একত্রে প্রদর্শন',
 'tog-numberheadings' => 'শিরোনামগুলোকে স্বয়ংক্রিয়ভাবে ক্রমিক নম্বর দাও',
-'tog-showtoolbar' => 'সম্পাদনা টুলবার দেখাও (জাভাস্ক্রিপ্ট প্রয়োজন)',
-'tog-editondblclick' => 'দুইবার ক্লিক করে পাতা সম্পাদনা (জাভাস্ক্রিপ্ট প্রয়োজন)',
+'tog-showtoolbar' => 'সম্পাদনা টুলবার দেখাও',
+'tog-editondblclick' => 'দুইবার ক্লিক করে পাতা সম্পাদনা',
 'tog-editsection' => '[সম্পাদনা] সংযোগের সাহায্যে পরিচ্ছেদ সম্পাদনা করার ক্ষমতা দেয়া হোক',
-'tog-editsectiononrightclick' => 'পরিচ্ছেদের শিরোনামে ডান ক্লিকের মাধ্যমে সম্পাদনা করার ক্ষমতা দেয়া হোক (জাভাস্ক্রিপ্ট)',
+'tog-editsectiononrightclick' => 'পরিচ্ছেদের শিরোনামে ডান ক্লিকের মাধ্যমে সম্পাদনা করার ক্ষমতা দেয়া হোক',
 'tog-showtoc' => 'সূচিপত্র দেখানো হোক (৩টির বেশি পরিচ্ছেদের শিরোনামবিশিষ্ট পাতার জন্য)',
 'tog-rememberpassword' => 'এই ব্রাউজারে আমার লগ ইন তথ্য (শব্দচাবি) মনে রাখো (সর্বোচ্চ $1 {{PLURAL:$1|দিনের|দিনের}} জন্য)',
 'tog-watchcreations' => 'আমার তৈরি পাতা এবং আপলোড করা ফাইলগুললো আমার নজরতালিকায় যোগ করা হোক',
@@ -101,7 +101,7 @@ $messages = array(
 'tog-shownumberswatching' => 'নজরদারী করছে, এমন ব্যবহারকারীর সংখ্যা দেখানো হোক',
 'tog-oldsig' => 'বর্তমান স্বাক্ষর:',
 'tog-fancysig' => 'স্বাক্ষরকে উইকিটেক্সট হিসেবে মনে করুন (কোন সয়ংক্রিয় লিঙ্ক ছাড়া)',
-'tog-uselivepreview' => 'তাà§\8eà¦\95à§\8dষণিà¦\95 à¦ªà§\8dরাà¦\95দরà§\8dশনà§\87র à¦\95à§\8dষমতা à¦\9aালà§\81 à¦\95রা à¦¹à§\8bà¦\95 (à¦\9cাভাসà§\8dà¦\95à§\8dরিপà§\8dà¦\9f) (পরà§\80à¦\95à§\8dষামà§\82লà¦\95)',
+'tog-uselivepreview' => 'তাৎক্ষণিক প্রাকদর্শনের ক্ষমতা চালু করা হোক (পরীক্ষামূলক)',
 'tog-forceeditsummary' => 'খালি সম্পাদনা সারাংশ প্রবেশ করানোর সময় আমাকে জানানো হোক',
 'tog-watchlisthideown' => 'আমার সম্পাদনাগুলি আমার নজরতালিকায় না দেখানো হোক',
 'tog-watchlisthidebots' => 'বটের করা সম্পাদনাগুলি নজরতালিকায় না দেখানো হোক',
@@ -402,6 +402,12 @@ $1',
 # General errors
 'error' => 'ত্রুটি',
 'databaseerror' => 'ডাটাবেস ত্রুটি',
+'databaseerror-text' => 'ডাটাবেজ অনুসন্ধান ত্রুটি।
+এটি সফটওয়্যারের একটি ত্রুটি হতে পারে।',
+'databaseerror-textcl' => 'ডাটাবেজ অনুসন্ধান ত্রুটি।',
+'databaseerror-query' => 'অনুসন্ধান: $1',
+'databaseerror-function' => 'ফাংশন: $1',
+'databaseerror-error' => 'ত্রুটি: $1',
 'laggedslavemode' => 'সতর্কীকরণ: পাতাটি সম্ভবত সম্প্রতি হালনাগাদকৃত নয়।',
 'readonly' => 'ডেটাবেজের ব্যবহার সীমাবদ্ধ',
 'enterlockreason' => 'তালাবদ্ধ করার কারণ কি তা বলুন, সাথে কখন তালা খুলবেন তার আনুমানিক সময় উল্লখ্য করুন',
@@ -3779,10 +3785,10 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 
 # Database error messages
 'dberr-header' => 'এই উইকিতে কোন সমস্যা রয়েছে',
-'dberr-problems' => 'দুঃখিত!
-এই সাইটটি বর্তমানে কারীগরী অসুবিধার মুখোমুখি হয়েছে।',
+'dberr-problems' => ' দুঃখিত! এই সাইটটি বর্তমানে কারীগরী অসুবিধার মুখোমুখি হয়েছে।',
 'dberr-again' => 'কয়েক মিনিট পর পুনরায় পরিদর্শনের চেষ্টা করুন।',
 'dberr-info' => '(ডেটাবেজ সার্ভার $1-এর সাথে যোগাযোগ করা সম্ভব হয়নি)',
+'dberr-info-hidden' => '(ডাটাবেজ সার্ভারের সাথে সংযোগ দেয়া সম্ভব হচ্ছে না)',
 'dberr-usegoogle' => 'এই পরিস্থিতিতে আপনি গুগলের মাধ্যমে অনুসন্ধান করার চেষ্টা করতে পারেন।',
 'dberr-outofdate' => 'খেয়াল করুন যে, আমাদের বিষয়বস্তু সম্পর্কিত তাদের সূচি মেয়াদ উত্তীর্ণ হতে পারে।',
 'dberr-cachederror' => 'এটি অনুরোধকৃত পাতার ক্যাশে লিপি, যা হালনাগাতকৃত নাও হতে পারে।',
index 50f4370..154a6fa 100644 (file)
@@ -189,7 +189,7 @@ $messages = array(
 'tog-extendwatchlist' => 'Astenn ar roll evezhiañ a-benn diskouez an holl gemmoù ha neket ar re ziwezhañ hepken.',
 'tog-usenewrc' => "Diskouez ar c'hemmoù nevez en ur feson kempennoc'h (rekis eo JavaScript)",
 'tog-numberheadings' => 'Niverenniñ emgefre an titloù',
-'tog-showtoolbar' => 'Diskouez ar varrenn gant ar meuzioù skridaozañ',
+'tog-showtoolbar' => 'Diskouez ar varrenn ostilhoù aozañ',
 'tog-editondblclick' => 'Daouglikañ evit kemmañ pajennoù',
 'tog-editsection' => 'Kemmañ ur rann dre al liammoù [kemmañ]',
 'tog-editsectiononrightclick' => 'Kemmañ ur rann dre glikañ a-zehou<br /> war titl ar rann',
@@ -210,7 +210,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Diskouez an niver a lennerien',
 'tog-oldsig' => 'Ar sinadur zo evit poent :',
 'tog-fancysig' => 'Ober gant ar sinadur evel pa vefe wikitestenn (hep liamm emgefre)',
-'tog-uselivepreview' => 'Implijout Rakwelet prim (JavaScript) (taol-arnod)',
+'tog-uselivepreview' => 'Implijout Rakwelet prim (taol-arnod)',
 'tog-forceeditsummary' => 'Kemenn din pa ne skrivan netra er stern diverrañ',
 'tog-watchlisthideown' => "Kuzhat ma c'hemmoù er rollad evezhiañ",
 'tog-watchlisthidebots' => 'Kuzhat kemmoù ar botoù er rollad evezhiañ',
@@ -1399,6 +1399,7 @@ Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset g
 'prefs-displaywatchlist' => 'Dibarzhioù diskwel',
 'prefs-tokenwatchlist' => 'Jedouer',
 'prefs-diffs' => "Diforc'hioù",
+'prefs-help-prefershttps' => "Efediñ a ray an dibarzh-mañ kentañ gwech ma kevreoc'h.",
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => "Reizh eo ar chomlec'h postel war a seblant",
@@ -2008,6 +2009,8 @@ Marteze a-walc'h e fell deoc'h kemmañ an deskrivadur anezhi war ar [$2 bajenn d
 'statistics-users-active-desc' => "Implijerien o deus degaset da nebeutañ ur c'hemm {{PLURAL:$1|an deiz paseet|e-kerzh an $1 deiz diwezhañ}}",
 'statistics-mostpopular' => 'Pajennoù muiañ sellet',
 
+'pageswithprop' => 'Pajennoù gant ur perzh pajenn',
+'pageswithprop-legend' => 'Pajennoù gant ur perzh pajenn',
 'pageswithprop-prop' => 'Anv ar perzh :',
 'pageswithprop-submit' => 'Mont',
 
@@ -2514,7 +2517,7 @@ $1',
 'contributions' => 'Degasadennoù an {{GENDER:$1|implijer|implijerez}}',
 'contributions-title' => 'Degasadennoù an implijer evit $1',
 'mycontris' => 'Ma degasadennoù',
-'contribsub2' => 'Evit $1 ($2)',
+'contribsub2' => 'Evit {{GENDER:$3|$1}} ($2)',
 'nocontribs' => "N'eus bet kavet kemm ebet o klotañ gant an dezverkoù-se.",
 'uctop' => '(red)',
 'month' => 'Abaoe miz (hag a-raok) :',
@@ -3871,6 +3874,8 @@ Sañset oc'h bezañ resevet [{{SERVER}}{{SCRIPTPATH}}/COPYING un eilskrid eus ar
 'tags-display-header' => "Neuz e rolloù ar c'hemmoù",
 'tags-description-header' => 'Deskrivadur klok ar valizenn',
 'tags-hitcount-header' => 'Kemmoù balizennet',
+'tags-active-yes' => 'Ya',
+'tags-active-no' => 'Ket',
 'tags-edit' => 'aozañ',
 'tags-hitcount' => '$1 {{PLURAL:$1|kemm|kemm}}',
 
@@ -3919,11 +3924,11 @@ Sañset oc'h bezañ resevet [{{SERVER}}{{SCRIPTPATH}}/COPYING un eilskrid eus ar
 'logentry-delete-delete' => 'Diverket eo bet ar bajenn $3 gant $1',
 'logentry-delete-restore' => 'Assavet eo bet ar bajenn $3 gant $1',
 'logentry-delete-event' => "Kemmet eo bet gwelusted {{PLURAL:$5|un darvoud eus ar marilh|$5 darvoud eus ar marilh}} d'an $3 gant $1 : $4",
-'logentry-delete-revision' => 'Kemmet eo bet gwelusted {{PLURAL:$5|reizhadenn}} war ar bajenn $3 gant $1 : $4',
+'logentry-delete-revision' => 'Kemmet eo bet gwelusted {{PLURAL:$5|$5reizhadenn}} war ar bajenn $3 gant $1 : $4',
 'logentry-delete-event-legacy' => 'Kemmet eo bet gwelusted darvoudoù ar marilh $3 gant $1',
 'logentry-delete-revision-legacy' => 'Kemmet eo bet gwelusted ar reizhadennoù war ar bajenn $3 gant $1',
 'logentry-suppress-delete' => '$1 {{GENDER:$2|en deus dilamet}} ar bajenn $3',
-'logentry-suppress-event' => "Kemmet eo bet dre guzh gwelusted {{PLURAL:$5|un darvoud eus ar marilh|$5 darvoud eus ar marilh}} d'an $3 gant $1 : $4",
+'logentry-suppress-event' => "Kemmet eo bet dre guzh gwelusted {{PLURAL:$5|un darvoud eus ar marilh|$5 darvoud eus ar marilh}} d'an $3 gant $1 : $4",
 'logentry-suppress-revision' => 'Kemmet eo bet dre guzh gwelusted {{PLURAL:$5|reizhadenn|$5 reizhadenn}} war ar bajenn $3 gant $1 : $4',
 'logentry-suppress-event-legacy' => "Kemmet eo bet dre guzh gwelusted darvoudoù ar marilh d'an $3 gant $1",
 'logentry-suppress-revision-legacy' => 'Kemmet eo bet dre guzh gwelusted ar reizhadennoù war ar bajenn $3 gant $1',
@@ -4027,7 +4032,8 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|eiladenn}}',
 'limitreport-walltime' => 'Amzer implij gwirion',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|eiladenn}}',
-'limitreport-postexpandincludesize-value' => '$1/$2 okted',
-'limitreport-templateargumentsize-value' => '$1/$2 okted',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|okted}}',
+'limitreport-templateargumentsize' => 'Ment arguzenn ar patrom',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|okted}}',
 
 );
index 81661cd..a5d49ac 100644 (file)
@@ -289,7 +289,7 @@ $messages = array(
 'tog-extendwatchlist' => 'Proširi spisak praćenja za pogled svih izmjena, ne samo nedavnih',
 'tog-usenewrc' => 'Grupiraj izmjene po stranicama sa nedavnih izmjena i praćenih članaka',
 'tog-numberheadings' => 'Automatski numeriši podnaslove',
-'tog-showtoolbar' => 'Prikaži dugmiće za izmjene (JavaScript)',
+'tog-showtoolbar' => 'Prikaži traku s alatkama za uređivanje',
 'tog-editondblclick' => 'Izmijeni stranice dvostrukim klikom',
 'tog-editsection' => 'Omogući da mijenjam pojedinačne odjeljke putem [uredi] linka',
 'tog-editsectiononrightclick' => 'Uključite uređivanje odjeljka sa pritiskom na desno dugme miša u naslovu odjeljka',
@@ -425,7 +425,7 @@ $messages = array(
 'newwindow' => '(otvara se u novom prozoru)',
 'cancel' => 'Poništite',
 'moredotdotdot' => 'Još...',
-'morenotlisted' => 'Više nije prikazano...',
+'morenotlisted' => 'Ovaj spisak nije kompletan.',
 'mypage' => 'Korisnička stranica',
 'mytalk' => 'Razgovor',
 'anontalk' => 'Razgovor za ovu IP adresu',
@@ -723,7 +723,7 @@ Ne zaboravite da prilagodite sebi svoja [[Special:Preferences|{{SITENAME}} pode
 'userlogout' => 'Odjavi me',
 'notloggedin' => 'Niste prijavljeni',
 'userlogin-noaccount' => 'Nemate korisnički račun?',
-'userlogin-joinproject' => 'Pridružite se {{SITENAME}}',
+'userlogin-joinproject' => 'Pridružite se {{GRAMMAR:dativ|{{SITENAME}}}}',
 'nologin' => 'Nemate korisničko ime? $1.',
 'nologinlink' => 'Napravite nalog',
 'createaccount' => 'Napravi korisnički račun',
@@ -1968,8 +1968,7 @@ Možda možete pokušati kada bude manje opterećenje.',
 'upload_source_file' => ' (datoteka na Vašem računaru)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Ova posebna stranica prikazuje sve postavljene datoteke.
-Kada je filtrirana od strane korisnika, prikazane su samo datoteke ako je korisnik postavio posljednju verziju te datoteke.',
+'listfiles-summary' => 'Ova posebna stranica prikazuje sve postavljene datoteke.',
 'listfiles_search_for' => 'Traži medije po imenu:',
 'imgfile' => 'datoteka',
 'listfiles' => 'Spisak slika',
@@ -2469,7 +2468,7 @@ nastavite s oprezom.',
 Posljednja izmjena je bila od korisnika [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Sažetak izmjene je bio: \"''\$1''\".",
 'revertpage' => 'Vraćene izmjene [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na posljednju izmjenu korisnika [[User:$1|$1]]',
-'revertpage-nouser' => 'Vraćene izmjene skrivenog korisnika na posljednju reviziju koju je načinio [[User:$1|$1]]',
+'revertpage-nouser' => 'Vraćene izmjene skrivenog korisnika na posljednju reviziju koju je {{GENDER:$1|načinio|načinila}} [[User:$1|$1]]',
 'rollback-success' => 'Poništene izmjene korisnika $1;
 vraćeno na posljednju verziju koju je sačuvao $2.',
 
@@ -4016,6 +4015,8 @@ Trebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU GNU opće javne licence] z
 'tags-display-header' => 'Vidljivost na spisku izmjena',
 'tags-description-header' => 'Puni opis značenja',
 'tags-hitcount-header' => 'Označene izmjene',
+'tags-active-yes' => 'Da',
+'tags-active-no' => 'Ne',
 'tags-edit' => 'uređivanje',
 'tags-hitcount' => '$1 {{PLURAL:$1|izmjena|izmjene|izmjena}}',
 
@@ -4171,4 +4172,7 @@ Inače, možete ispuniti jednostavan obrazac ispod. Vaš komentar biti će dodan
 # Image rotation
 'rotate-comment' => 'Slika rotirana za $1 {{PLURAL:$1|stepen|stepeni}} u smjeru kazaljke na satu',
 
+# Limit report
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}',
+
 );
index 7392bfb..088e6a8 100644 (file)
@@ -209,7 +209,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Amaga edicions patrullades als canvis recents',
 'tog-newpageshidepatrolled' => 'Amaga pàgines patrullades de la llista de pàgines noves',
 'tog-extendwatchlist' => 'Desplega la llista de seguiment per a mostrar tots els canvis afectats, no només els més recents',
-'tog-usenewrc' => 'Canvis de grup per pàgina en canvis recents i llista de seguiment (cal JavaScript)',
+'tog-usenewrc' => 'Agrupa els canvis per pàgina en canvis recents i llista de seguiment',
 'tog-numberheadings' => 'Enumera automàticament els encapçalaments',
 'tog-showtoolbar' => "Mostra la barra d'eines d'edició (cal JavaScript)",
 'tog-editondblclick' => 'Edita les pàgines amb un doble clic (cal JavaScript)',
@@ -451,7 +451,7 @@ $1",
 # 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).
 'aboutsite' => 'Quant al projecte {{SITENAME}}',
 'aboutpage' => 'Project:Quant a',
-'copyright' => 'El contingut està disponible sota els termes de la $1.',
+'copyright' => "El contingut està disponible sota la llicència $1 si no s'indica el contrari.",
 'copyrightpage' => "{{ns:project}}:Drets d'autor",
 'currentevents' => 'Actualitat',
 'currentevents-url' => 'Project:Actualitat',
@@ -534,6 +534,11 @@ Vegeu la llista de pàgines especials a [[Special:SpecialPages]].',
 # General errors
 'error' => 'Error',
 'databaseerror' => "S'ha produït un error en la base de dades",
+'databaseerror-text' => "S'ha produït un error en la consulta de la base de dades.
+Això pot indicar un error en el programari.",
+'databaseerror-textcl' => "S'ha produït un error en la consulta de la base de dades.",
+'databaseerror-query' => 'Consulta: $1',
+'databaseerror-function' => 'Funció: $1',
 'laggedslavemode' => 'Avís: La pàgina podria mancar de modificacions recents.',
 'readonly' => 'La base de dades es troba bloquejada',
 'enterlockreason' => 'Escriviu una raó pel bloqueig, així com una estimació de quan tindrà lloc el desbloqueig',
@@ -567,6 +572,7 @@ 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ó.',
+'no-null-revision' => "No s'ha pogut crear una nova revisió nul·la de la pàgina «$1»",
 '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.",
@@ -734,6 +740,8 @@ Espereu $1 abans de tornar-ho a provar.",
 'login-abort-generic' => "L'entrada al compte d'usuari no ha reeixit - Abortada",
 'loginlanguagelabel' => 'Llengua: $1',
 'suspicious-userlogout' => "S'ha denegat la vostra petició per tancar la sessió ja què sembla que va ser enviada per un navegador defectuós o un proxy cau.",
+'createacct-another-realname-tip' => "El nom real és opcional.
+Si decidiu proporcionar-lo, s'utilitzarà per a reconèixer a l'usuari el seu treball.",
 
 # Email sending
 'php-mail-error-unknown' => 'Error desconegut en la funció mail() de PHP',
@@ -762,6 +770,7 @@ Deveu haver canviat la vostra contrasenya o demanat una nova contrasenya tempora
 # Special:PasswordReset
 'passwordreset' => 'Restablir contrasenya',
 'passwordreset-text-one' => 'Cal completar aquest formulari per reiniciar la contrasenya',
+'passwordreset-text-many' => '{{PLURAL:$1|Ompliu un dels camps per a reiniciar la vostra contrasenya.}}',
 'passwordreset-legend' => 'Restablir contrasenya',
 'passwordreset-disabled' => "S'ha desactivat el restabliment de contranyes en aquest wiki.",
 'passwordreset-emaildisabled' => 'Les opcions de correu electrònic no estan habilitades en aquest wiki.',
@@ -801,6 +810,16 @@ Contrasenya temporal: $2",
 'changeemail-submit' => 'Canvia de correu electrònic',
 'changeemail-cancel' => 'Cancel·la',
 
+# Special:ResetTokens
+'resettokens' => 'Reinicia els testimonis',
+'resettokens-no-tokens' => 'No hi ha testimonis per reiniciar.',
+'resettokens-legend' => 'Reinicia els testimonis',
+'resettokens-tokens' => 'Testimonis:',
+'resettokens-token-label' => '$1 (valor actual: $2)',
+'resettokens-watchlist-token' => 'Testimoni del canal web (Atom/RSS) dels [[Special:Watchlist|canvis a la llista de seguiment]]',
+'resettokens-done' => "S'han reiniciat els testimonis.",
+'resettokens-resetbutton' => 'Reinicia els testimonis seleccionats',
+
 # Edit page toolbar
 'bold_sample' => 'Text en negreta',
 'bold_tip' => 'Text en negreta',
@@ -1501,6 +1520,8 @@ Ha de tenir com a molt {{PLURAL:$1|un caràcter|$1 caràcters}}.',
 'right-editusercssjs' => "Editar els fitxers de configuració CSS i JS d'altres usuaris",
 'right-editusercss' => "Editar els fitxers de configuració CSS d'altres usuaris",
 'right-edituserjs' => "Editar els fitxers de configuració JS d'altres usuaris",
+'right-viewmywatchlist' => 'Mostra la llista de seguiment pròpia',
+'right-editmyoptions' => 'Edita les pròpies preferències',
 'right-rollback' => "Revertir ràpidament l'últim editor d'una pàgina particular",
 'right-markbotedits' => 'Marcar les reversions com a edicions de bot',
 'right-noratelimit' => "No veure's afectat pels límits d'accions",
@@ -1562,6 +1583,10 @@ Ha de tenir com a molt {{PLURAL:$1|un caràcter|$1 caràcters}}.',
 'action-userrights-interwiki' => "modificar permisos d'usuari en altres wikis",
 'action-siteadmin' => 'bloquejar o desbloquejar la base de dades',
 'action-sendemail' => 'enviar missatges de correu',
+'action-editmywatchlist' => 'edita la llista de seguiment',
+'action-viewmywatchlist' => 'mostra la llista de seguiment',
+'action-viewmyprivateinfo' => 'mostra la informació personal',
+'action-editmyprivateinfo' => 'edita la informació personal',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|canvi|canvis}}',
@@ -1852,6 +1877,9 @@ Si filtreu per usuari només es mostraran els fitxers la versió més recent del
 'listfiles_size' => 'Mida (octets)',
 'listfiles_description' => 'Descripció',
 'listfiles_count' => 'Versions',
+'listfiles-show-all' => 'Inclou versions antigues de les imatges',
+'listfiles-latestversion' => 'Versió actual',
+'listfiles-latestversion-yes' => 'Sí',
 
 # File description page
 'file-anchor-link' => 'Fitxer',
@@ -1946,6 +1974,13 @@ Potser voleu modificar-ne la descripció en la seva [$2 pàgina de descripció].
 'randompage' => "Pàgina a l'atzar",
 'randompage-nopages' => "No hi ha cap pàgina en {{PLURAL:$2|l'espai de noms següent|els espais de noms següents}}: $1.",
 
+# Random page in category
+'randomincategory' => 'Pàgina aleatòria en la categoria',
+'randomincategory-invalidcategory' => '«$1» no és un nom de categoria vàlid.',
+'randomincategory-nopages' => 'No hi ha pàgines a la categoria [[:Category:$1|$1]].',
+'randomincategory-selectcategory' => "Obté una pàgina a l'atzar de la categoria: $1 $2.",
+'randomincategory-selectcategory-submit' => 'Vés-hi',
+
 # Random redirect
 'randomredirect' => "Redirecció a l'atzar",
 'randomredirect-nopages' => "No hi ha cap redirecció a l'espai de noms «$1».",
@@ -2804,6 +2839,8 @@ En el darrer cas, podeu fer servir un enllaç com ara [[{{#Special:Export}}/{{Me
 'thumbnail-more' => 'Amplia',
 'filemissing' => 'Fitxer inexistent',
 'thumbnail_error' => "S'ha produït un error en crear la miniatura: $1",
+'thumbnail_error_remote' => "Missatge d'error de $1:
+$2",
 'djvu_page_error' => "La pàgina DjVu està fora de l'abast",
 'djvu_no_xml' => "No s'ha pogut recollir l'XML per al fitxer DjVu",
 'thumbnail-temp-create' => "No s'ha pogut creat el fitxer de miniatura temporal",
@@ -3752,9 +3789,14 @@ Amb aquest programa heu d'haver rebut [{{SERVER}}{{SCRIPTPATH}}/COPYING una còp
 'version-entrypoints-header-url' => 'URL',
 
 # Special:Redirect
+'redirect' => 'Redirigeix per fitxer, usuari o ID de la revisió',
+'redirect-legend' => 'Redirigeix a un fitxer o a una pàgina',
 'redirect-submit' => 'Vés-hi',
+'redirect-lookup' => 'Consulta:',
 'redirect-value' => 'Valor:',
 'redirect-user' => "ID d'usuari",
+'redirect-revision' => 'Revisió de la pàgina',
+'redirect-file' => 'Nom del fitxer',
 'redirect-not-exists' => "No s'ha trobat el valor",
 
 # Special:FileDuplicateSearch
@@ -3805,6 +3847,7 @@ Amb aquest programa heu d'haver rebut [{{SERVER}}{{SCRIPTPATH}}/COPYING una còp
 'tags' => 'Etiquetes de canvi vàlides',
 'tag-filter' => "Filtre d'[[Special:Tags|etiquetes]]:",
 'tag-filter-submit' => 'Filtra',
+'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetes}}]]: $2)',
 'tags-title' => 'Etiquetes',
 'tags-intro' => 'Aquesta pàgina llista les etiquetes amb les què el programari pot marcar una modificació, i llur significat.',
 'tags-tag' => "Nom de l'etiqueta",
@@ -3831,6 +3874,7 @@ Amb aquest programa heu d'haver rebut [{{SERVER}}{{SCRIPTPATH}}/COPYING una còp
 'dberr-problems' => 'Ho sentim. Aquest lloc web està experimentant dificultats tècniques.',
 'dberr-again' => 'Intenteu esperar uns minuts i tornar a carregar.',
 'dberr-info' => '(No es pot contactar amb el servidor de dades: $1)',
+'dberr-info-hidden' => '(No es pot contactar amb el servidor de la base de dades)',
 'dberr-usegoogle' => 'Podeu intentar fer la cerca via Google mentrestant.',
 'dberr-outofdate' => 'Tingueu en compte que la seva indexació del nostre contingut pot no estar actualitzada.',
 'dberr-cachederror' => 'A continuació hi ha una còpia emmagatzemada de la pàgina demanada, que pot no estar actualitzada.',
index 8fe6a4c..12eaac5 100644 (file)
@@ -820,8 +820,8 @@ $1',
 # Edit page toolbar
 'bold_sample' => 'Дерстино до йоза',
 'bold_tip' => 'Дерстино до йоза',
-'italic_sample' => 'Ð\9aÑ\83Ñ\80Ñ\81еттан до йоза',
-'italic_tip' => 'Ð\9aÑ\83Ñ\80Ñ\81еттан до йоза',
+'italic_sample' => 'Сеттан до йоза',
+'italic_tip' => 'Сеттан до йоза',
 'link_sample' => 'Хьажориган коьрта могlа',
 'link_tip' => 'Чоьхьа хьажориг',
 'extlink_sample' => 'http://www.example.com хьажориг корта',
@@ -1758,6 +1758,8 @@ PICT # тайп тайпан
 'sp-contributions-logs' => 'тéптарш',
 'sp-contributions-talk' => 'дийцаре',
 'sp-contributions-userrights' => 'декъашхочун бакъона урхалладар',
+'sp-contributions-blocked-notice-anon' => 'ХӀара IP-адрес хӀинца блоктоьхна ду.
+Лахахь гойту блоктохаршан тептар чура тӀаьхьарлера дӀаяздар:',
 'sp-contributions-search' => 'Къинхьегам лахар',
 'sp-contributions-username' => 'IP-адрес я декъашхочун цӀе:',
 'sp-contributions-toponly' => 'ТӀаьхьара бина хийцамаш гайта',
index 3ea3f33..3090f3f 100644 (file)
@@ -378,7 +378,7 @@ $messages = array(
 'viewtalkpage' => 'بینینی لێدوان',
 'otherlanguages' => 'بە زمانەکانی تر',
 'redirectedfrom' => '(ڕەوانەکراوە لە $1ەوە)',
-'redirectpagesub' => 'پەڕەی ڕەوانەکردن',
+'redirectpagesub' => 'پەڕەی ڕەوانەکەر',
 'lastmodifiedat' => 'ئەم پەڕەیە دواجار لە $2ی $1 نوێ کراوەتەوە.',
 'viewcount' => 'ئەم پەڕەیە {{PLURAL:$1|یەکجار|$1 جار}} بینراوە.',
 'protectedpage' => 'پەڕەی پارێزراو',
@@ -1213,7 +1213,7 @@ $1",
 لەیادت بێت لەوانەیە پێرستەکانیان بۆ گەڕانی ناو {{SITENAME}}، کات‌بەسەرچوو بێت.',
 
 # Preferences page
-'preferences' => 'ھەڵبەژاردەکان',
+'preferences' => 'ھەڵبژاردەکان',
 'mypreferences' => 'ھەڵبژاردەکان',
 'prefs-edits' => 'ژمارەی گۆڕانکارییەکان:',
 'prefsnologin' => 'لەژوورەوە نیت',
@@ -1434,7 +1434,7 @@ $1",
 'right-importupload' => 'ھاوردنی پەڕەکان بە بارکردنی پەڕگە',
 'right-patrol' => 'نیشانکردنی دەستکاریەکانی کەسانی تر وەک پاس دراو',
 'right-autopatrol' => 'نیشانکردنی خۆگەڕی دەستکارییەکانی خۆی وەک پاس دراو',
-'right-patrolmarks' => 'دیتنی نیشان کراوەکان وەک پاس دراو لە دوایین گۆڕانکارییەکاندا',
+'right-patrolmarks' => 'دیتنی نیشانەکانی پاسدان لە دوایین گۆڕانکارییەکاندا',
 'right-unwatchedpages' => 'دیتنی پێرستێک لە پەڕە چاودێری نەکراوەکان',
 'right-mergehistory' => 'میژووی پەڕەکان بکە یەک',
 'right-userrights' => 'دەستکاری مافەکانی هەموو بەکارهێنەران',
@@ -2344,11 +2344,11 @@ $1',
 'linkshere' => "ئەم پەڕانە بەستەریان ھەیە بۆ '''[[:$1]]''':",
 'nolinkshere' => "هیچ لاپەڕەیەک بەستەری نەداوە بە '''[[:$1]]'''.",
 'nolinkshere-ns' => "هیچ لاپەڕەیەک بەستەری نەداوە بە '''[[:$1]]''' لە بۆشایی‌ناوی هەڵبژێردراو.",
-'isredirect' => 'پەڕەی ڕەوانەکردن',
+'isredirect' => 'پەڕەی ڕەوانەکەر',
 'istemplate' => 'بەکارھێنراو',
 'isimage' => 'بەستەری پەڕگە',
-'whatlinkshere-prev' => '{{PLURAL:$1|پێشتر|$1 ی پێشتر}}',
-'whatlinkshere-next' => '{{PLURAL:$1|دیکە|$1 ی دیکە}}',
+'whatlinkshere-prev' => '{{PLURAL:$1|پێشتر|$1ی پێشتر}}',
+'whatlinkshere-next' => '{{PLURAL:$1|دیکە|$1ی تر}}',
 'whatlinkshere-links' => '← بەستەرەکان',
 'whatlinkshere-hideredirs' => 'ڕەوانەکەرەکان $1',
 'whatlinkshere-hidetrans' => '$1 ھێنانەناوەوەکان',
@@ -2436,7 +2436,7 @@ $1',
 'blocklog-showlog' => 'ئەم بەکارھێنەرە پێشتر بربەست کراوە.
 لۆگی بەربەستن لە ژێرەوە ھاتووە:',
 'blocklogentry' => '[[$1]]ی بۆ ماوەی $2 بەربەست کرد $3',
-'reblock-logentry' => 'دÛ\86Ø®Û\8c Ø¦Ø§Ø³ØªÛ\95Ù\86Ú¯ Ú©Ø±Ø¯Ù\86Û\8c [[$1]]  Ø¨Û\86 گۆڕدرا بۆ ماوەی $2 $3',
+'reblock-logentry' => 'دÛ\86Ø®Û\8c Ø¨Û\95ربÛ\95ستÙ\86Û\8c [[$1]]  گۆڕدرا بۆ ماوەی $2 $3',
 'blocklogtext' => 'ئەمە لۆگێکی کردەوەکانی بەربەستن یان لابردنی بەربەستنی بەکارھێنەرە.
 ئەو ئایپی ئەدرەسانە خۆکارانە بەربستکراون بە ڕیز نەکراون.
 سەیری [[Special:BlockList|لیستی بەربەستن]] بکە بۆ بینینی ئەو بەرگری و بەربەستنانە ئێستا لە بەرکاردان.',
@@ -2893,13 +2893,29 @@ $1',
 'minutes-abbrev' => '$1خ',
 'hours-abbrev' => '$1ک',
 'days-abbrev' => '$1ڕ',
-'seconds' => '{{PLURAL:$1|$1 چرکە|$1 چرکە}}',
-'minutes' => '{{PLURAL:$1|$1 خولەک|$1 خولەک}}',
-'hours' => '{{PLURAL:$1|$1 کاتژمێر|$1 کاتژمێر}}',
-'days' => '{{PLURAL:$1|$1 ڕۆژ|$1 ڕۆژ}}',
-'ago' => '$1 پێش',
+'seconds' => '{{PLURAL:$1|$1 چرکە}}',
+'minutes' => '{{PLURAL:$1|$1 خولەک}}',
+'hours' => '{{PLURAL:$1|$1 کاتژمێر}}',
+'days' => '{{PLURAL:$1|$1 ڕۆژ}}',
+'weeks' => '{{PLURAL:$1|$1 حەفتە}}',
+'months' => '{{PLURAL:$1|$1 مانگ}}',
+'years' => '{{PLURAL: $1|$1 ساڵ}}',
+'ago' => '$1 لەمە پێش',
 'just-now' => 'ھەرئێستا',
 
+# Human-readable timestamps
+'hours-ago' => '$1 {{PLURAL:$1|کاتژمێر}} لەمه پێش',
+'minutes-ago' => '$1 {{PLURAL:$1|خولەک}} لەمە پێش',
+'seconds-ago' => '$1 {{PLURAL:$1|چرکە}} لەمە پێش',
+'monday-at' => 'دووشەممە $1',
+'tuesday-at' => 'سێشەممە $1',
+'wednesday-at' => 'چوارشەممە $1',
+'thursday-at' => 'پێنجشەممە $1',
+'friday-at' => 'ھەینی $1',
+'saturday-at' => 'شەممە $1',
+'sunday-at' => 'یەکشەممە $1',
+'yesterday-at' => 'دوێنێ $1',
+
 # Bad image list
 'bad_image_list' => 'فۆرمات بەم شێوەی خوارەوەیە:
 
index 5c91131..e88847d 100644 (file)
@@ -610,7 +610,7 @@ $1',
 # 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).
 'aboutsite' => 'O&nbsp;{{grammar:6sg|{{SITENAME}}}}',
 'aboutpage' => 'Project:{{SITENAME}}',
-'copyright' => 'Obsah je dostupný pod $1.',
+'copyright' => 'Obsah je dostupný pod $1, pokud není uvedeno jinak.',
 'copyrightpage' => '{{ns:project}}:Autorské právo',
 'currentevents' => 'Aktuality',
 'currentevents-url' => 'Project:Aktuality',
@@ -855,7 +855,8 @@ Ujistěte se, že máte povoleny cookies, obnovte tuto stránku a zkuste to znov
 'nosuchusershort' => 'Neexistuje uživatel se jménem „$1“. Zkontrolujte zápis.',
 'nouserspecified' => 'Musíte zadat uživatelské jméno.',
 'login-userblocked' => 'Tento uživatel je zablokován. Přihlášení není dovoleno.',
-'wrongpassword' => 'Vámi uvedené heslo nesouhlasí. Zkuste to znovu.',
+'wrongpassword' => 'Bylo zadáno nesprávné heslo.
+Zkuste to znovu.',
 'wrongpasswordempty' => 'Bylo zadáno prázdné heslo. Zkuste to znovu.',
 'passwordtooshort' => 'Heslo musí být dlouhé nejméně $1 {{PLURAL:$1|znak|znaky|znaků}}.',
 'password-name-match' => 'Vaše heslo nesmí být stejné jako uživatelské jméno.',
@@ -875,8 +876,8 @@ a používat staré heslo.',
 'noemailcreate' => 'Musíte uvést platnou e-mailovou adresu',
 'passwordsent' => 'Dočasné heslo bylo zasláno na e-mailovou adresu registrovanou pro „$1“. Přihlaste se, prosím, znovu, jakmile ho obdržíte.',
 'blocked-mailpassword' => 'Vaší IP adrese byla zablokována možnost editace, a současně s tím je zablokována funkce pro zaslání nového hesla.',
-'eauthentsent' => 'Potvrzovací e-mail byl zaslán na zadanou adresu.
-Před tím, než vám na tuto adresu budou moci být zasílány další zprávy, následujte instrukce v e-mailu, abyste potvrdili, že tato adresa skutečně patří vám.',
+'eauthentsent' => 'Na zadanou adresu byl zaslán potvrzovací e-mail.
+Žádné další zprávy vám však na tuto adresu nebudou odeslány, dokud podle instrukcí v e-mailu nepotvrdíte, že tato adresa skutečně patří vám.',
 'throttled-mailpassword' => 'Během {{PLURAL:$1|poslední hodiny|posledních $1 hodin}} již bylo heslo jednou zasláno.
 Kvůli prevenci zneužívání lze heslo zaslat jen jednou za $1 {{PLURAL:$1|hodinu|hodiny|hodin}}.',
 'mailerror' => 'Chyba při zasílání e-mailu: $1',
@@ -1005,7 +1006,7 @@ Dočasné heslo: $2',
 'nowiki_sample' => 'Sem vložte neformátovaný text',
 'nowiki_tip' => 'Ignorovat formátování wiki',
 'image_sample' => 'Příklad.jpg',
-'image_tip' => 'Vložený soubor',
+'image_tip' => 'Soubor',
 'media_sample' => 'Příklad.ogg',
 'media_tip' => 'Odkaz na mediální soubor',
 'sig_tip' => 'Váš podpis s datem a časem',
@@ -1593,7 +1594,7 @@ Vaše adresa v takovém případě není prozrazena.',
 'prefs-help-prefershttps' => 'Toto nastavení se projeví při příštím přihlášení.',
 
 # User preference: email validation using jQuery
-'email-address-validity-valid' => 'E-mailová adresa vypadá platně',
+'email-address-validity-valid' => 'E-mailová adresa vypadá jako platná',
 'email-address-validity-invalid' => 'Zadejte platnou e-mailovou adresu',
 
 # User rights
@@ -1601,14 +1602,14 @@ Vaše adresa v takovém případě není prozrazena.',
 'userrights-lookup-user' => 'Spravovat uživatelské skupiny',
 'userrights-user-editname' => 'Zadejte uživatelské jméno:',
 'editusergroup' => 'Upravit uživatelské skupiny',
-'editinguser' => "Úprava práv uživatele '''[[User:$1|$1]]''' $2",
+'editinguser' => "Úprava práv {{GENDER:$1|uživatele|uživatelky}} '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup' => 'Upravit uživatelské skupiny',
 'saveusergroups' => 'Uložit uživatelské skupiny',
-'userrights-groupsmember' => 'Člen skupin:',
-'userrights-groupsmember-auto' => 'Automaticky člen skupin:',
-'userrights-groups-help' => 'Můžete měnit skupiny, do nichž je uživatel zařazen.
-* Zaškrtnuté políčko znamená, že uživatel je v dané skupině.
-* Nezaškrtnuté políčko značí, že uživatel v dané skupině není.
+'userrights-groupsmember' => '{{GENDER:$2|Člen|Členka}} {{PLURAL:$1|skupiny|skupin}}:',
+'userrights-groupsmember-auto' => 'Automaticky {{GENDER:$2|člen|členka}} {{PLURAL:$1|skupiny|skupin}}:',
+'userrights-groups-help' => 'Můžete měnit skupiny, do nichž je {{GENDER:$1|uživatel zařazen|uživatelka zařazena}}.
+* Zaškrtnuté políčko znamená, že {{GENDER:$1|uživatel|uživatelka}} je v dané skupině.
+* Nezaškrtnuté políčko značí, že {{GENDER:$1|uživatel|uživatelka}} v dané skupině není.
 * Hvězdička (*) znamená, že nemůžete danou skupinu odstranit, jakmile ji přidáte, nebo naopak.',
 'userrights-reason' => 'Důvod:',
 'userrights-no-interwiki' => 'Nemáte povoleno měnit uživatelská práva na jiných wiki.',
@@ -1748,8 +1749,8 @@ Vaše adresa v takovém případě není prozrazena.',
 'action-block' => 'znemožnit tomuto uživateli editování',
 'action-protect' => 'změnit úrovně ochrany této stránky',
 'action-rollback' => 'rychle revertovat úpravy posledního uživatele editujícího danou stránku',
-'action-import' => 'importovat tuto stránku z jiné wiki',
-'action-importupload' => 'importovat tuto stránku z nahraného souboru',
+'action-import' => 'importovat stránky z jiné wiki',
+'action-importupload' => 'importovat stránky z načteného souboru',
 'action-patrol' => 'označit úpravy ostatních jako zhlédnuté',
 'action-autopatrol' => 'označit vlastní úpravy jako zhlédnuté',
 'action-unwatchedpages' => 'zobrazit seznam nesledovaných stránek',
@@ -2278,6 +2279,7 @@ Každý řádek obsahuje odkaz na první a druhé přesměrování a k tomu cíl
 'listusers' => 'Uživatelé',
 'listusers-editsonly' => 'Zobrazit pouze uživatele s editacemi',
 'listusers-creationsort' => 'Seřadit podle data registrace',
+'listusers-desc' => 'Řadit sestupně',
 'usereditcount' => '$1 {{PLURAL:$1|editace|editace|editací}}',
 'usercreated' => '{{GENDER:$3|Registrován|Registrována|Registrován(a)}} $1 v $2',
 'newpages' => 'Nejnovější stránky',
@@ -2558,7 +2560,7 @@ Rady a kontakt:
 Poslední editaci této stránky provedl(a) [[User:$3|$3]] ([[User talk:$3|diskuse]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Shrnutí editace bylo: ''„$1“''.",
 'revertpage' => 'Editace uživatele „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|diskuse]]) vráceny do předchozího stavu, jehož autorem je „[[User:$1|$1]]“',
-'revertpage-nouser' => 'Editace skrytého uživatele vráceny do předchozího stavu, jehož autorem je „[[User:$1|$1]]“',
+'revertpage-nouser' => 'Editace skrytého uživatele vráceny do předchozího stavu, jehož {{GENDER:$1|autorem|autorkou}} je „[[User:$1|$1]]“',
 'rollback-success' => 'Editace uživatele $1 byly vráceny na poslední verzi od uživatele $2.',
 
 # Edit tokens
@@ -3230,10 +3232,10 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'pageinfo-redirects-name' => 'Počet přesměrování na tuto stránku',
 'pageinfo-subpages-name' => 'Podstránky této stránky',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|přesměrování}}; $3 {{PLURAL:$3|nepřesměrování}})',
-'pageinfo-firstuser' => 'Zakladatel stránky',
+'pageinfo-firstuser' => 'Stránku vytvořil',
 'pageinfo-firsttime' => 'Datum založení stránky',
-'pageinfo-lastuser' => 'Nejnovější editor',
-'pageinfo-lasttime' => 'Datum nejnovější editace',
+'pageinfo-lastuser' => 'Naposledy editoval',
+'pageinfo-lasttime' => 'Datum poslední editace',
 'pageinfo-edits' => 'Celkový počet editací',
 'pageinfo-authors' => 'Celkový počet různých autorů',
 'pageinfo-recent-edits' => 'Počet nedávných ($1) editací',
@@ -4100,7 +4102,10 @@ MediaWiki je distribuována v naději, že bude užitečná, avšak BEZ JAKÉKOL
 'tags-tag' => 'Název značky',
 'tags-display-header' => 'Zobrazení na seznamech změn',
 'tags-description-header' => 'Úplný popis významu',
+'tags-active-header' => 'Aktivní?',
 'tags-hitcount-header' => 'Označené změny',
+'tags-active-yes' => 'Ano',
+'tags-active-no' => 'Ne',
 'tags-edit' => 'editovat',
 'tags-hitcount' => '$1 {{PLURAL:$1|změna|změny|změn}}',
 
@@ -4266,9 +4271,9 @@ Jinak můžete využít jednoduchý formulář níže. Váš komentář bude př
 'limitreport-ppvisitednodes' => 'Počet uzlů navštívených preprocesorem',
 'limitreport-ppgeneratednodes' => 'Počet uzlů vygenerovaných preprocesorem',
 'limitreport-postexpandincludesize' => 'Velikost vložení po expanzi',
-'limitreport-postexpandincludesize-value' => '$1/$2 bajtů',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bajt|bajty|bajtů}}',
 'limitreport-templateargumentsize' => 'Velikost argumentů šablon',
-'limitreport-templateargumentsize-value' => '$1/$2 bajtů',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bajt|bajty|bajtů}}',
 'limitreport-expansiondepth' => 'Největší hloubka expanze',
 'limitreport-expensivefunctioncount' => 'Počet náročných funkcí parseru',
 
index a6572a6..e9c7e05 100644 (file)
@@ -814,7 +814,7 @@ $messages = array(
 'blocklink' => 'ꙁагради',
 'contribslink' => 'добродѣꙗниꙗ',
 'blocklogpage' => 'ꙁаграждєниꙗ їсторїꙗ',
-'blocklogentry' => 'ꙁаградихъ [[$1]] на врѣмѧ $2 $3',
+'blocklogentry' => 'ꙁаградилъ [[$1]] на врѣмѧ $2 $3',
 'block-log-flags-anononly' => 'тъкъмо анѡнѷмьнꙑ польꙃєватєлє',
 
 # Move page
index 1323f69..93a28bb 100644 (file)
@@ -364,7 +364,7 @@ $1',
 # 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).
 'aboutsite' => 'Ynglŷn â {{SITENAME}}',
 'aboutpage' => 'Project:Amdanom',
-'copyright' => "Mae'r cynnwys ar gael o dan $1.",
+'copyright' => "Rhoddir y cynnwys ar gael ar delerau'r drwydded $1, heblaw ei fod wedi nodi'n wahanol.",
 'copyrightpage' => '{{ns:project}}:Hawlfraint',
 'currentevents' => 'Materion cyfoes',
 'currentevents-url' => 'Project:Materion cyfoes',
@@ -572,6 +572,9 @@ Sylwer y bydd rhai tudalennau yn parhau i ymddangos fel ag yr oeddent pan oeddec
 'userlogin-resetpassword-link' => 'Ailosod eich cyfrinair',
 'helplogin-url' => 'Help:Mewngofnodi',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Cymorth i fewngofnodi]]',
+'userlogin-loggedin' => 'Rydych eisoes wedi mewngofnodi wrth yr enw {{GENDER:$1|$1}}.
+Defnyddiwch y ffurflen isod i fewngofnodi wrth rhyw enw arall.',
+'userlogin-createanother' => 'Creu cyfrif ychwanegol',
 'createacct-join' => 'Rhowch eich manylion isod',
 'createacct-another-join' => 'Rhowch fanylion y cyfrif newydd isod.',
 'createacct-emailrequired' => 'Cyfeiriad ebost',
@@ -1233,7 +1236,7 @@ Cofiwch y gall mynegeion Google o gynnwys {{SITENAME}} fod ar ei hôl hi.",
 'prefs-datetime' => 'Dyddiad ac amser',
 'prefs-labs' => 'Nodweddion Labs',
 'prefs-user-pages' => 'Tudalennau defnyddwyr',
-'prefs-personal' => 'Data defnyddiwr',
+'prefs-personal' => 'Data personol',
 'prefs-rc' => 'Newidiadau diweddar',
 'prefs-watchlist' => 'Rhestr wylio',
 'prefs-watchlist-days' => "Nifer y diwrnodau i'w dangos yn y rhestr wylio:",
@@ -1495,8 +1498,8 @@ Mae'r wybodaeth hon ar gael i'r cyhoedd.",
 'action-block' => 'atal y defnyddiwr hwn rhag golygu',
 'action-protect' => 'newid lefelau gwarchod y dudalen hon',
 'action-rollback' => 'gwrthdroi golygiadau defnyddiwr diwethaf rhyw dudalen, yn sydyn',
-'action-import' => "mewnforio'r dudalen hon o wici arall",
-'action-importupload' => "mewnforio'r dudalen hon drwy uwchlwytho ffeil XML",
+'action-import' => 'mewnforio tudalennau o wici arall',
+'action-importupload' => 'mewnforio tudalennau drwy uwchlwytho ffeil',
 'action-patrol' => 'marcio bod golygiad defnyddiwr arall wedi derbyn ymweliad patrôl',
 'action-autopatrol' => 'cael derbyn marc ymweliad patrôl ar eich golygiad',
 'action-unwatchedpages' => 'gweld rhestr y tudalennau heb neb yn eu gwylio',
@@ -2021,6 +2024,7 @@ Gosodwyd <del>llinell</del> drwy'r eitemau sydd eisoes wedi eu datrys.",
 'listusers' => 'Rhestr defnyddwyr',
 'listusers-editsonly' => 'Dangos y defnyddwyr hynny sydd wedi golygu rhywbeth yn unig',
 'listusers-creationsort' => 'Trefnwch yn ôl dyddiad creu',
+'listusers-desc' => 'Trefnu gan ddisgyn',
 'usereditcount' => '$1 {{PLURAL:$1|golygiad|golygiad|olygiad|golygiad|golygiad|o olygiadau}}',
 'usercreated' => '{{GENDER:$3|Crëwyd}} ar $1 am $2',
 'newpages' => 'Erthyglau newydd',
@@ -2307,7 +2311,7 @@ mae rhywun arall eisoes wedi dadwneud y golygiad neu wedi golygu'r dudalen.
 [[User:$3|$3]] ([[User talk:$3|Sgwrs]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) a wnaeth y golygiad diwethaf.",
 'editcomment' => "Crynodeb y golygiad oedd: \"''\$1''\".",
 'revertpage' => 'Wedi gwrthdroi golygiadau gan [[Special:Contributions/$2|$2]] ([[User talk:$2|Sgwrs]]); wedi adfer y golygiad diweddaraf gan [[User:$1|$1]]',
-'revertpage-nouser' => 'Wedi gwrthdroi golygiadau gan ddefnyddiwr cudd; wedi adfer y golygiad diweddaraf gan [[User:$1|$1]]',
+'revertpage-nouser' => 'Wedi gwrthdroi golygiadau gan ddefnyddiwr cudd; wedi adfer y golygiad diweddaraf gan {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => "Gwrthdrowyd y golygiadau gan $1;
 wedi gwrthdroi i'r golygiad olaf gan $2.",
 
@@ -2447,7 +2451,7 @@ $1',
 'contributions' => "{{GENDER:$1|Cyfraniadau'r defnyddiwr}}",
 'contributions-title' => "Cyfraniadau'r defnyddiwr am $1",
 'mycontris' => 'Cyfraniadau',
-'contribsub2' => 'Dros $1 ($2)',
+'contribsub2' => 'Gan {{GENDER:$3|$1}} ($2)',
 'nocontribs' => "Heb ddod o hyd i newidiadau gyda'r meini prawf hyn.",
 'uctop' => '(cyfredol)',
 'month' => 'Cyfraniadau hyd at fis (ac yn gynharach):',
@@ -2928,6 +2932,7 @@ Mae ffolder dros dro yn eisiau.',
 Gellir ychwanegu rheswm dros y dadwneud yn y crynodeb.',
 'tooltip-preferences-save' => 'Rhodder y dewisiadau ar gadw',
 'tooltip-summary' => 'Rhowch grynodeb byr',
+'tooltip-iwiki' => '$1 - $2',
 
 # Metadata
 'notacceptable' => "Dydy gweinydd y wici ddim yn medru rhoi'r data mewn fformat darllenadwy i'ch cleient.",
@@ -3773,7 +3778,10 @@ Dylech fod wedi derbyn [{{SERVER}}{{SCRIPTPATH}}/COPYING gopi o GNU General Publ
 'tags-tag' => "Enw'r tag",
 'tags-display-header' => 'Y nodyn a welir ar logiau',
 'tags-description-header' => 'Disgrifiad llawn y tag',
+'tags-active-header' => 'Yn weithredol?',
 'tags-hitcount-header' => 'Nifer wedi tagio',
+'tags-active-yes' => 'Ydy',
+'tags-active-no' => 'Nacydy',
 'tags-edit' => 'golygu',
 'tags-hitcount' => '$1 {{PLURAL:$1|newid}}',
 
@@ -3938,9 +3946,9 @@ Dylech fod wedi derbyn [{{SERVER}}{{SCRIPTPATH}}/COPYING gopi o GNU General Publ
 'limitreport-ppvisitednodes' => "Rhif y nodau ar ymweliadau'r rhagbrosesydd",
 'limitreport-ppgeneratednodes' => 'Rhif y nodau a gynhyrchodd y rhagbrosesydd',
 'limitreport-postexpandincludesize' => 'Uchafswm maint y nodiadau ar ôl eu chwyddo',
-'limitreport-postexpandincludesize-value' => '$1/$2 beit',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|beit|beit|feit|beit}}',
 'limitreport-templateargumentsize' => 'Maint arg y nodyn',
-'limitreport-templateargumentsize-value' => '$1/$2 beit',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|beit|beit|feit|beit}}',
 'limitreport-expansiondepth' => 'Uchafswm dyfnder yr ehangu',
 'limitreport-expensivefunctioncount' => "Nifer y ffwythiannau dosrannu sy'n dreth ar adnoddau",
 
index ed2b36b..d68ce61 100644 (file)
@@ -1611,7 +1611,7 @@ Vær venlig at gennemse og bekræft dine ændringer.',
 'rc-change-size' => '$1 {{PLURAL:$1|Byte|Bytes}}',
 'rc-change-size-new' => '$1 {{PLURAL:$1|byte|bytes}} efter ændring',
 'newsectionsummary' => '/* $1 */ nyt afsnit',
-'rc-enhanced-expand' => 'Vis detaljer (kræver JavaScript)',
+'rc-enhanced-expand' => 'Vis detaljer',
 'rc-enhanced-hide' => 'Skjul detaljer',
 'rc-old-title' => 'oprindeligt oprettet som "$1"',
 
@@ -2512,7 +2512,7 @@ $1',
 'contributions' => '{{GENDER:$1|Brugerbidrag}}',
 'contributions-title' => 'Brugerbidrag for $1',
 'mycontris' => 'Bidrag',
-'contribsub2' => 'For $1 ($2)',
+'contribsub2' => 'For {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Ingen ændringer er fundet som opfylder disse kriterier.',
 'uctop' => '(seneste)',
 'month' => 'Måned:',
index 3b1f43c..a660912 100644 (file)
@@ -35,6 +35,7 @@
  * @author Li-sung
  * @author Locos epraix
  * @author Lyzzy
+ * @author MBq
  * @author MF-Warburg
  * @author Man77
  * @author Melancholie
@@ -665,7 +666,7 @@ $1',
 # 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).
 'aboutsite' => 'Über {{SITENAME}}',
 'aboutpage' => 'Project:Über_{{SITENAME}}',
-'copyright' => 'Der Inhalt ist verfügbar unter der Lizenz $1.',
+'copyright' => 'Der Inhalt ist verfügbar unter der Lizenz $1, sofern nicht anders angegeben.',
 'copyrightpage' => '{{ns:project}}:Urheberrechte',
 'currentevents' => 'Aktuelle Ereignisse',
 'currentevents-url' => 'Project:Aktuelle Ereignisse',
@@ -879,6 +880,9 @@ Vergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ände
 'userlogin-resetpassword-link' => 'Passwort zurücksetzen',
 'helplogin-url' => 'Help:Anmelden',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hilfe beim Anmelden]]',
+'userlogin-loggedin' => 'Du bist bereits als {{GENDER:$1|$1}} angemeldet.
+Benutze das unten stehende Formular, um sich unter einem anderen Benutzer anzumelden.',
+'userlogin-createanother' => 'Ein weiteres Benutzerkonto erstellen',
 'createacct-join' => 'Gib unten deine Informationen ein.',
 'createacct-another-join' => 'Gib unten die Informationen des neuen Benutzerkontos ein.',
 'createacct-emailrequired' => 'E-Mail-Adresse',
@@ -894,7 +898,7 @@ Vergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ände
 'createacct-imgcaptcha-ph' => 'Gib den Text ein, den du oben siehst.',
 'createacct-submit' => 'Dein Benutzerkonto erstellen',
 'createacct-another-submit' => 'Anderes Benutzerkonto erstellen',
-'createacct-benefit-heading' => '{{SITENAME}} wird von Leuten wie dir erstellt.',
+'createacct-benefit-heading' => '{{SITENAME}} wird von Menschen wie dir geschaffen.',
 'createacct-benefit-body1' => '{{PLURAL:$1|Bearbeitung|Bearbeitungen}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|Seite|Seiten}}',
 'createacct-benefit-body3' => '{{PLURAL:$1|aktiver Autor|aktive Autoren}}',
@@ -1621,15 +1625,15 @@ Dies kann nicht mehr rückgängig gemacht werden.',
 'prefs-help-signature' => 'Beiträge auf Diskussionsseiten sollten mit „<nowiki>~~~~</nowiki>“ signiert werden, was dann in die Signatur mit Zeitstempel umgewandelt wird.',
 'badsig' => 'Die Syntax der Signatur ist ungültig; bitte HTML überprüfen.',
 'badsiglength' => 'Die Signatur darf maximal $1 {{PLURAL:$1|Zeichen}} lang sein.',
-'yourgender' => 'Wie willst du dich beschreiben?',
-'gender-unknown' => 'Ich will es nicht beschreiben',
-'gender-male' => 'Er bearbeitet Wikiseiten',
-'gender-female' => 'Sie bearbeitet Wikiseiten',
-'prefs-help-gender' => 'Das Festlegen dieser Einstellung ist optional.
-Die Software verwendet den Wert, um dich anzureden und zur Erwähnung für andere durch Verwendung des passenden grammatikalischen Geschlechts.
+'yourgender' => 'Welches Geschlecht hast du?',
+'gender-unknown' => 'Ich möchte hierzu keine Angabe machen',
+'gender-male' => 'Ich bin männlich',
+'gender-female' => 'Ich bin weiblich',
+'prefs-help-gender' => 'Dies ist eine freiwillige Angabe.
+Die Software nutzt sie, um dich anzureden sowie als Hinweis für andere durch Verwendung des zutreffenden grammatikalischen Geschlechts.
 Diese Information ist öffentlich.',
 'email' => 'E-Mail',
-'prefs-help-realname' => 'Optional. Damit kann dein bürgerlicher Name deinen Beiträgen zugeordnet werden.',
+'prefs-help-realname' => 'Dies ist eine freiwillige Angabe. Damit kann dein bürgerlicher Name deinen Beiträgen zugeordnet werden.',
 'prefs-help-email' => 'Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern du dein Passwort vergessen hast.',
 'prefs-help-email-others' => 'Mit anderen Benutzern kannst du auch über die Benutzerdiskussionsseiten Kontakt aufnehmen, ohne dass du deine Identität offenlegen musst.',
 'prefs-help-email-required' => 'Es wird eine gültige E-Mail-Adresse benötigt.',
@@ -2344,6 +2348,7 @@ Jede Zeile enthält Links zur ersten und zweiten Weiterleitung sowie dem Ziel de
 'listusers' => 'Benutzerverzeichnis',
 'listusers-editsonly' => 'Zeige nur Benutzer mit Beiträgen',
 'listusers-creationsort' => 'Nach Erstelldatum sortieren',
+'listusers-desc' => 'In absteigender Reihenfolge sortieren',
 'usereditcount' => '$1 {{PLURAL:$1|Bearbeitung|Bearbeitungen}}',
 'usercreated' => '{{GENDER:$3|Erstellt}} am $1 um $2 Uhr',
 'newpages' => 'Neue Seiten',
@@ -2618,7 +2623,7 @@ Rückmeldungen und weitere Hilfe: {{canonicalurl:{{MediaWiki:Helppage}}}}',
 Die letzte Änderung stammt von [[User:$3|$3]] ([[User talk:$3|Diskussion]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Die Änderungszusammenfassung lautet: ''„$1“''.",
 'revertpage' => 'Änderungen von [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) wurden auf die letzte Version von [[User:$1|$1]] zurückgesetzt',
-'revertpage-nouser' => 'Änderungen von einem versteckten Benutzer rückgängig gemacht und letzte Version von [[User:$1|$1]] wiederhergestellt',
+'revertpage-nouser' => 'Änderungen von einem versteckten Benutzer rückgängig gemacht und letzte Version von {{GENDER:$1|[[User:$1|$1]]}} wiederhergestellt',
 'rollback-success' => 'Die Änderungen von $1 wurden rückgängig gemacht und die letzte Version von $2 wurde wiederhergestellt.',
 
 # Edit tokens
@@ -2757,7 +2762,7 @@ $1',
 'contributions' => '{{GENDER:$1|Benutzerbeiträge}}',
 'contributions-title' => 'Benutzerbeiträge von „$1“',
 'mycontris' => 'Beiträge',
-'contribsub2' => 'Von $1 ($2)',
+'contribsub2' => 'Von {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Es wurden keine Benutzerbeiträge mit diesen Kriterien gefunden.',
 'uctop' => '(aktuell)',
 'month' => 'und Monat:',
@@ -3228,6 +3233,7 @@ Diese auf dem lokalen Rechner speichern und danach hier hochladen.',
 'tooltip-undo' => 'Macht lediglich diese eine Änderung rückgängig und zeigt das Resultat in der Vorschau an, damit in der Zusammenfassungszeile eine Begründung angegeben werden kann.',
 'tooltip-preferences-save' => 'Einstellungen speichern',
 'tooltip-summary' => 'Gib eine kurze Zusammenfassung ein.',
+'tooltip-iwiki' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/* Das folgende CSS wird für alle Benutzeroberflächen geladen. */',
@@ -4126,11 +4132,16 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 'tag-filter-submit' => 'Filter',
 'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Markierung|Markierungen}}]]: $2)',
 'tags-title' => 'Markierungen',
-'tags-intro' => 'Diese Seite zeigt alle Markierungen, die für Bearbeitungen verwendet werden, sowie deren Bedeutung.',
+'tags-intro' => 'Diese Seite zeigt alle Markierungen, die für Bearbeitungen verwendet wurden, sowie deren Bedeutung. 
+
+Bei entsprechender Einstellung können die Missbrauchfilter beliebige Markierungen in die Versionsgeschichte setzen. Man kann die Versionsgeschichte dann nach den Markierungen filtern.',
 'tags-tag' => 'Markierungsname',
 'tags-display-header' => 'Benennung auf den Änderungslisten',
 'tags-description-header' => 'Vollständige Beschreibung',
+'tags-active-header' => 'Aktiv?',
 'tags-hitcount-header' => 'Markierte Änderungen',
+'tags-active-yes' => 'Ja',
+'tags-active-no' => 'Nein',
 'tags-edit' => 'bearbeiten',
 'tags-hitcount' => '$1 {{PLURAL:$1|Änderung|Änderungen}}',
 
@@ -4298,9 +4309,9 @@ Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kom
 'limitreport-ppgeneratednodes' => 'Erzeugte Knotenanzahl des Präprozessors',
 'limitreport-ppgeneratednodes-value' => '$1/$2',
 'limitreport-postexpandincludesize' => 'Einbindungsgröße nach dem Expandieren',
-'limitreport-postexpandincludesize-value' => '$1/$2 Bytes',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|Byte|Bytes}}',
 'limitreport-templateargumentsize' => 'Vorlagenargumentgröße',
-'limitreport-templateargumentsize-value' => '$1/$2 Bytes',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|Byte|Bytes}}',
 'limitreport-expansiondepth' => 'Höchste Expansionstiefe',
 'limitreport-expansiondepth-value' => '$1/$2',
 'limitreport-expensivefunctioncount' => 'Anzahl aufwändiger Parserfunktionen',
index c6f696f..e0987e7 100644 (file)
@@ -568,7 +568,7 @@ $1',
 # 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).
 'aboutsite' => 'Heqa {{SITENAME}}i de',
 'aboutpage' => 'Project:Heqdê cı',
-'copyright' => 'Zerrek bınê $1 dero.',
+'copyright' => 'Zerrekacı $1 bındı not biya.',
 'copyrightpage' => '{{ns:project}}:Heqa telifi',
 'currentevents' => 'Veng u vac',
 'currentevents-url' => 'Project:Veng u vac',
@@ -576,7 +576,7 @@ $1',
 'disclaimerpage' => 'Project:Reddê mesuliyetê bıngey',
 'edithelp' => 'Peştdariya vurnayışi',
 'helppage' => 'Help:Estêni',
-'mainpage' => 'Pela Seri',
+'mainpage' => 'Pera Seri',
 'mainpage-description' => 'Pela Seri',
 'policy-url' => 'Project:Terzê hereketi',
 'portal' => 'Portalê cemaeti',
@@ -657,6 +657,7 @@ Seba lista pelanê xasanê vêrdeyan reca kena: [[Special:SpecialPages|{{int:spe
 # General errors
 'error' => 'Xırab',
 'databaseerror' => 'Xeta serveri',
+'databaseerror-query' => 'Perskerdış:$1',
 'databaseerror-function' => 'Fonksiyon: $1',
 'databaseerror-error' => 'Xırab: $1',
 'laggedslavemode' => 'Diqet: Pel de newe vıraşteyi belka çini .',
@@ -888,6 +889,7 @@ Bıne vındere u newe ra dest pê bıkere.',
 # Special:PasswordReset
 'passwordreset' => 'Parola reset ke',
 'passwordreset-text-one' => 'Na form de parola reset kerdış temamiye',
+'passwordreset-text-many' => '{{PLURAL:$1|Qande parola reset kerdışi cayanra taynın pırkeri}}',
 'passwordreset-legend' => 'Parola reset ke',
 'passwordreset-disabled' => 'Parola reset kerdış ena viki sera qefılneyayo.',
 'passwordreset-username' => 'Nameyê karberi:',
@@ -4202,8 +4204,7 @@ satır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.
 
 # Database error messages
 'dberr-header' => 'Ena Wiki de yew ğelet esta',
-'dberr-problems' => 'Mayê muxulêm!
-Ena sita dı newke xırabiya teknik esta.',
+'dberr-problems' => 'Mayê muxulêm! Ena sita dı newke xırabiya teknik esta.',
 'dberr-again' => 'Yew di dekika vinder u hin bar bike.',
 'dberr-info' => '(Erzmelumati ra xızmetkari nêreseno: $1)',
 'dberr-usegoogle' => 'Ti eşkeno hem zi ser Google de bigêre.',
@@ -4341,10 +4342,15 @@ Ena sita dı newke xırabiya teknik esta.',
 'rotate-comment' => 'Resim heta sehata $1 {{PLURAL:$1|derece|derecey}} bi cerx',
 
 # Limit report
+'limitreport-title' => 'Agoznaye malumata profili:',
+'limitreport-cputime' => 'CPU dem karnayış',
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|saniye|saniyeyan}}',
+'limitreport-walltime' => 'Raştay demdı bıkarn',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|saniye|saniyeyan}}',
-'limitreport-postexpandincludesize-value' => '$1/$2 bayt',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bayt|bayti}}',
 'limitreport-templateargumentsize' => 'Ebata hacetandi şablonan',
-'limitreport-templateargumentsize-value' => '$1/$2 bayt',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bayt|bayti}}',
+'limitreport-expansiondepth' => 'Tewr veşi herayina dergbiyayışi',
+'limitreport-expensivefunctioncount' => 'Amoriya fonksiyonde vay agozni',
 
 );
index baec32d..04b7ff0 100644 (file)
@@ -261,7 +261,7 @@ $messages = array(
 $1',
 'pool-errorunknown' => 'ކޮންމެވެސް ކުށެއް',
 
-# 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).
+# 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).
 'aboutsite' => '{{SITENAME}}ގެ ތަޢާރަފު',
 'aboutpage' => 'Project:ތަޢާރަފު',
 'copyright' => 'ހުރިހާ މާއްދާއެއް $1 ގެ ދަށުން ލިބެން އެބަހުއްޓެވެ.',
index a6d47b2..1aad0c5 100644 (file)
@@ -370,10 +370,10 @@ $messages = array(
 'tog-extendwatchlist' => 'Επέκταση της λίστας παρακολούθησης ώστε να δείχνει όλες τις αλλαγές, όχι μόνο τις πιο πρόσφατες',
 'tog-usenewrc' => 'Ομαδοποίηση αλλαγών ανά σελίδα στις πρόσφατες αλλαγές και στη λίστα παρακολούθησης (απαιτεί JavaScript)',
 'tog-numberheadings' => 'Αυτόματη αρίθμηση επικεφαλίδων',
-'tog-showtoolbar' => 'Εμφάνιση μπάρας εργαλείων επεξεργασίας (απαιτεί JavaScript)',
-'tog-editondblclick' => 'Επεξεργασία σελίδων με διπλό κλικ (απαιτεί JavaScript)',
+'tog-showtoolbar' => 'Εμφάνιση μπάρας εργαλείων επεξεργασίας',
+'tog-editondblclick' => 'Επεξεργασία σελίδων με διπλό κλικ',
 'tog-editsection' => 'Ενεργοποίηση επεξεργασίας ενοτήτων μέσω των συνδέσμων [επεξεργασία]',
-'tog-editsectiononrightclick' => 'Ενεργοποίηση επεξεργασίας ενοτήτων με δεξί κλικ στους τίτλους των ενοτήτων (απαιτεί JavaScript)',
+'tog-editsectiononrightclick' => 'Ενεργοποίηση επεξεργασίας ενοτήτων με δεξί κλικ στους τίτλους των ενοτήτων',
 'tog-showtoc' => 'Εμφάνιση πίνακα περιεχομένων (για σελίδες με περισσότερες από τρεις κεφαλίδες)',
 'tog-rememberpassword' => 'Διατήρηση της σύνδεσής μου σε αυτόν τον περιηγητή (για μέγιστο $1 {{PLURAL:$1|ημέρας|ημερών}})',
 'tog-watchcreations' => 'Προσθήκη σελίδων που δημιουργώ και αρχείων που ανεβάζω στη λίστα παρακολούθησής μου',
@@ -692,6 +692,7 @@ $1',
 # General errors
 'error' => 'Σφάλμα',
 'databaseerror' => 'Σφάλμα στη βάση δεδομένων',
+'databaseerror-error' => 'Σφάλμα: $1',
 'laggedslavemode' => "'''Προειδοποίηση:''' Η σελίδα μπορεί να μην περιέχει πρόσφατες ενημερώσεις.",
 'readonly' => 'Κλειδωμένη βάση δεδομένων',
 'enterlockreason' => 'Εισαγάγετε μια αιτία για το κλείδωμα και μια εκτίμησή για το πότε το κλείδωμα αυτό θα αρθεί',
@@ -1499,8 +1500,8 @@ $1",
 'recentchangesdays-max' => '($1 {{PLURAL:$1|ημέρα|ημέρες}} το μέγιστο)',
 'recentchangescount' => 'Αριθμός επεξεργασιών που να εμφανίζονται για προεπιλογή.',
 'prefs-help-recentchangescount' => 'Αυτό περιλαμβάνει τις πρόσφατες αλλαγές, τα ιστορικά των σελίδων, και τα αρχεία διαγραφών.',
-'prefs-help-watchlist-token2' => 'Αυτό είναι το μυστικό κλειδί για την τροφοδοσία web της λίστας παρακολούθησής σας.
-Όποιος τον γνωρίζει θα είναι σε θέση να διαβάσει την λίστα παρακολούθησης σας, οπότε μην τον μοιράζεστε.
+'prefs-help-watchlist-token2' => 'Αυτό είναι το μυστικό κλειδί για την web τροφοδοσία  της λίστας παρακολούθησής σας.
+Όποιος το γνωρίζει θα είναι σε θέση να διαβάσει την λίστα παρακολούθησης σας, οπότε μην τον μοιράζεστε.
 [[Special: ResetTokens|Κάνε κλικ εδώ εάν θέλετε να τον επαναφέρετε]].',
 'savedprefs' => 'Οι προτιμήσεις σας έχουν αποθηκευτεί.',
 'timezonelegend' => 'Ζώνη ώρας:',
@@ -2138,7 +2139,7 @@ $1',
 'unusedtemplateswlh' => 'άλλοι σύνδεσμοι',
 
 # Random page
-'randompage' => 'ΤÏ\85Ï\87αία Ï\83ελίδα',
+'randompage' => 'ΤÏ\85Ï\87αίο Î»Î®Î¼Î¼α',
 'randompage-nopages' => 'Δεν υπάρχουν σελίδες {{PLURAL:$2|στον ακόλουθο ονοματοχώρο|στους ακόλουθους ονοματοχώρους}}: $1.',
 
 # Random page in category
@@ -2930,7 +2931,7 @@ $1',
 'delete_and_move_text' => '==Χρειάζεται διαγραφή.==
 
 Το άρθρο [[:$1]] υπάρχει ήδη. Θέλετε να το διαγράψετε για να εκτελεσθεί η μετακίνηση;',
-'delete_and_move_confirm' => 'Î\9dαι, Î´Î¹Î­Î³Ï\81αÏ\88ε Ï\84η Ï\83ελίδα',
+'delete_and_move_confirm' => 'Î\9dαι, Î½Î± Î´Î¹Î±Î³Ï\81αÏ\86εί Î· Ï\83ελίδα.',
 'delete_and_move_reason' => 'Διαγράφηκε για να δημιουργήσει χώρο για μετακίνηση από το "[[$1]]"',
 'selfmove' => 'Ο τίτλος προέλευσης είναι ο ίδιος με τον τίτλο προορισμού -δεν είναι δυνατόν να μετακινηθεί μια σελίδα προς τον εαυτό της.',
 'immobile-source-namespace' => 'Δεν μπορούν να μετακινηθούν σελίδες στον ονοματοχώρο "$1"',
@@ -4057,7 +4058,7 @@ $5
 'logentry-delete-delete' => '{{GENDER:$1|Ο|Η}} $1 διέγραψε τη σελίδα $3',
 'logentry-delete-restore' => 'Ο/Η $1 αποκατέστησε τη σελίδα $3',
 'logentry-delete-event' => ' $1 {{GENDER:$1|άλλαξε}} την ορατότητα σε {{PLURAL:$5|ένα γεγονός καταγραφής|$5 γεγονότα καταγραφής}} στο $3: $4',
-'logentry-delete-revision' => '$1 {{GENDER:$2|άλλαξε}} άλλαξε την ορατότητα {{PLURAL:$5|μια έκδοση|$5 εκδόσεις}} στη σελίδα $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|άλλαξε}} την ορατότητα για {{PLURAL:$5|μία έκδοση|$5 εκδόσεις}} στη σελίδα $3: $4',
 'logentry-delete-event-legacy' => '{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα των καταγραφόμενων συμβάντων στη σελίδα $3',
 'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|άλλαξε}} την  ορατότητα των αναθεωρήσεων στη σελίδα $3',
 'logentry-suppress-delete' => '$1 {{GENDER:$2|διέγραψε}} τη σελίδα $3',
@@ -4090,8 +4091,8 @@ $5
 'rightsnone' => '(κανένα)',
 
 # Feedback
-'feedback-bugornote' => 'Εάν είστε έτοιμοι να περιγράψετε ένα τεχνικό πρόβλημα λεπτομερώς παρακαλώ [ $1  κάντε μια αναφορά σφάλματος].
-Διαφορετικά, μπορείτε να χρησιμοποιήσετε την παρακάτω απλή φόρμα. Το σχόλιό σας θα προστεθεί στη σελίδα "[ $3  $2 ]", μαζί με το όνομα χρήστη σας και ποιο πρόγραμμα περιήγησης χρησιμοποιείτε.',
+'feedback-bugornote' => 'Εάν είστε έτοιμοι να περιγράψετε ένα τεχνικό πρόβλημα λεπτομερώς παρακαλούμε [$1  κάντε μια αναφορά σφάλματος].
+Διαφορετικά, μπορείτε να χρησιμοποιήσετε την παρακάτω απλή φόρμα. Το σχόλιό σας θα προστεθεί στη σελίδα "[$3  $2]", μαζί με το όνομα χρήστη σας.',
 'feedback-subject' => 'Θέμα:',
 'feedback-message' => 'Μήνυμα:',
 'feedback-cancel' => 'Ακύρωση',
index a63d1f8..faaccd2 100644 (file)
@@ -321,6 +321,7 @@ $magicWords = array(
        'revisionyear'            => array( 1,    'REVISIONYEAR' ),
        'revisiontimestamp'       => array( 1,    'REVISIONTIMESTAMP' ),
        'revisionuser'            => array( 1,    'REVISIONUSER' ),
+       'revisionsize'            => array( 1,    'REVISIONSIZE' ),
        'plural'                  => array( 0,    'PLURAL:' ),
        'fullurl'                 => array( 0,    'FULLURL:' ),
        'fullurle'                => array( 0,    'FULLURLE:' ),
@@ -550,6 +551,7 @@ $preloadedMessages = array(
        'editsectionhint',
        'help',
        'helppage',
+       'tooltip-iwiki',
        'jumpto',
        'jumptonavigation',
        'jumptosearch',
@@ -903,7 +905,7 @@ $1',
 # 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).
 'aboutsite'            => 'About {{SITENAME}}',
 'aboutpage'            => 'Project:About',
-'copyright'            => 'Content is available under $1.',
+'copyright'            => 'Content is available under $1 unless otherwise noted.',
 'copyrightpage'        => '{{ns:project}}:Copyrights',
 'currentevents'        => 'Current events',
 'currentevents-url'    => 'Project:Current events',
@@ -971,6 +973,7 @@ See [[Special:Version|version page]].',
 'red-link-title'               => '$1 (page does not exist)',
 'sort-descending'              => 'Sort descending',
 'sort-ascending'               => 'Sort ascending',
+'tooltip-iwiki'                => '$1 – $2', # only translate this message to other languages if you have to change it
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main'      => 'Page',
@@ -1131,6 +1134,9 @@ Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
 'userlogin-resetpassword-link'    => 'Reset your password',
 'helplogin-url'                   => 'Help:Logging in',
 'userlogin-helplink'              => '[[{{MediaWiki:helplogin-url}}|Help with logging in]]',
+'userlogin-loggedin'              => 'You are already logged in as {{GENDER:$1|$1}}.
+Use the form below to log in as another user.',
+'userlogin-createanother'         => 'Create another account',
 'createacct-join'                 => 'Enter your information below.',
 'createacct-another-join'         => "Enter the new account's information below.",
 'createacct-emailrequired'        => 'Email address',
@@ -1396,13 +1402,13 @@ The reason given is ''$2''.
 * Intended blockee: $7
 
 You can contact $1 or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the block.
-You cannot use the 'email this user' feature unless a valid email address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.
+You cannot use the \"email this user\" feature unless a valid email address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.
 Your current IP address is $3, and the block ID is #$5.
 Please include all above details in any queries you make.",
-'autoblockedtext'                  => 'Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.
+'autoblockedtext'                  => "Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.
 The reason given is:
 
-:\'\'$2\'\'
+:''$2''
 
 * Start of block: $8
 * Expiry of block: $6
@@ -1410,10 +1416,10 @@ The reason given is:
 
 You may contact $1 or one of the other [[{{MediaWiki:Grouppage-sysop}}|administrators]] to discuss the block.
 
-Note that you may not use the "email this user" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.
+Note that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.
 
 Your current IP address is $3, and the block ID is #$5.
-Please include all above details in any queries you make.',
+Please include all above details in any queries you make.",
 'blockednoreason'                  => 'no reason given',
 'whitelistedittext'                => 'You have to $1 to edit pages.',
 'confirmedittext'                  => 'You must confirm your email address before editing pages.
@@ -1678,7 +1684,7 @@ You can still [$1 view this diff] if you wish to proceed.",
 You can view this diff; details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
 'rev-suppressed-diff-view'    => "One of the revisions of this diff has been '''suppressed'''.
 You can view this diff; details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
-'rev-delundel'                => 'show/hide',
+'rev-delundel'                => 'change visibility',
 'rev-showdeleted'             => 'show',
 'revisiondelete'              => 'Delete/undelete revisions',
 'revdelete-nooldid-title'     => 'Invalid target revision',
@@ -1790,7 +1796,7 @@ Note that using the navigation links will reset this column.',
 'difference-multipage'        => '(Difference between pages)',
 'lineno'                      => 'Line $1:',
 'compareselectedversions'     => 'Compare selected revisions',
-'showhideselectedversions'    => 'Show/hide selected revisions',
+'showhideselectedversions'    => 'Change visibility of selected revisions',
 'editundo'                    => 'undo',
 'diff-empty'                  => '(No difference)',
 'diff-multi'                  => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one user|$2 users}} not shown)',
@@ -1979,7 +1985,7 @@ Check HTML tags.',
 'badsiglength'                  => 'Your signature is too long.
 It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'yourgender'                    => 'How do you prefer to be described?',
-'gender-unknown'                => 'I prefer not to detail',
+'gender-unknown'                => 'I prefer not to say',
 'gender-male'                   => 'He edits wiki pages',
 'gender-female'                 => 'She edits wiki pages',
 'prefs-help-gender'             => 'Setting this preference is optional.
@@ -2170,9 +2176,9 @@ Your email address is not revealed when other users contact you.',
 'action-block'                => 'block this user from editing',
 'action-protect'              => 'change protection levels for this page',
 'action-rollback'             => 'quickly rollback the edits of the last user who edited a particular page',
-'action-import'               => 'import this page from another wiki',
-'action-importupload'         => 'import this page from a file upload',
-'action-patrol'               => "mark others' edit as patrolled",
+'action-import'               => 'import pages from another wiki',
+'action-importupload'         => 'import pages from a file upload',
+'action-patrol'               => "mark others' edits as patrolled",
 'action-autopatrol'           => 'have your edit marked as patrolled',
 'action-unwatchedpages'       => 'view the list of unwatched pages',
 'action-mergehistory'         => 'merge the history of this page',
@@ -2258,12 +2264,13 @@ To view or search previously uploaded files go to the [[Special:FileList|list of
 
 To include a file in a page, use a link in one of the following forms:
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' to use the full version of the file
-* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' to use a 200 pixel wide rendition in a box in the left margin with 'alt text' as description
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' to use a 200 pixel wide rendition in a box in the left margin with \"alt text\" as description
 * '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' for directly linking to the file without displaying the file",
 'upload-permitted'            => 'Permitted file types: $1.',
 'upload-preferred'            => 'Preferred file types: $1.',
 'upload-prohibited'           => 'Prohibited file types: $1.',
 'uploadfooter'                => '-', # do not translate or duplicate this message to other languages
+'upload-default-description'  => '-', # do not translate or duplicate this message to other languages
 'uploadlog'                   => 'upload log',
 'uploadlogpage'               => 'Upload log',
 'uploadlogpagetext'           => 'Below is a list of the most recent file uploads.
@@ -2506,21 +2513,21 @@ You may want to try at a less busy time.',
 'upload_source_file' => '(a file on your computer)',
 
 # Special:ListFiles
-'listfiles-summary'     => 'This special page shows all uploaded files.',
-'listfiles_search_for'  => 'Search for media name:',
-'imgfile'               => 'file',
-'listfiles'             => 'File list',
-'listfiles_thumb'       => 'Thumbnail',
-'listfiles_date'        => 'Date',
-'listfiles_name'        => 'Name',
-'listfiles_user'        => 'User',
-'listfiles_size'        => 'Size',
-'listfiles_description' => 'Description',
-'listfiles_count'       => 'Versions',
-'listfiles-show-all'    => 'Include old versions of images',
-'listfiles-latestversion' => 'Current version',
+'listfiles-summary'           => 'This special page shows all uploaded files.',
+'listfiles_search_for'        => 'Search for media name:',
+'imgfile'                     => 'file',
+'listfiles'                   => 'File list',
+'listfiles_thumb'             => 'Thumbnail',
+'listfiles_date'              => 'Date',
+'listfiles_name'              => 'Name',
+'listfiles_user'              => 'User',
+'listfiles_size'              => 'Size',
+'listfiles_description'       => 'Description',
+'listfiles_count'             => 'Versions',
+'listfiles-show-all'          => 'Include old versions of images',
+'listfiles-latestversion'     => 'Current version',
 'listfiles-latestversion-yes' => 'Yes',
-'listfiles-latestversion-no' => 'No',
+'listfiles-latestversion-no'  => 'No',
 
 # File description page
 'file-anchor-link'                  => 'File',
@@ -2769,6 +2776,7 @@ It now redirects to [[$2]].',
 'listusers-summary'               => '', # do not translate or duplicate this message to other languages
 'listusers-editsonly'             => 'Show only users with edits',
 'listusers-creationsort'          => 'Sort by creation date',
+'listusers-desc'                  => 'Sort in descending order',
 'usereditcount'                   => '$1 {{PLURAL:$1|edit|edits}}',
 'usercreated'                     => '{{GENDER:$3|Created}} on $1 at $2',
 'newpages'                        => 'New pages',
@@ -2812,7 +2820,7 @@ Please note that other web sites may link to a file with a direct URL, and so ma
 You can narrow down the view by selecting a log type, the username (case-sensitive), or the affected page (also case-sensitive).',
 'logempty'                   => 'No matching items in log.',
 'log-title-wildcard'         => 'Search titles starting with this text',
-'showhideselectedlogentries' => 'Show/hide selected log entries',
+'showhideselectedlogentries' => 'Change visibility of selected log entries',
 
 # Special:AllPages
 'allpages'                => 'All pages',
@@ -2970,7 +2978,7 @@ Future changes to this page and its associated talk page will be listed there.',
 'watchmethod-recent'   => 'checking recent edits for watched pages',
 'watchmethod-list'     => 'checking watched pages for recent edits',
 'watchlistcontains'    => 'Your watchlist contains $1 {{PLURAL:$1|page|pages}}.',
-'iteminvalidname'      => "Problem with item '$1', invalid name...",
+'iteminvalidname'      => 'Problem with item "$1", invalid name...',
 'wlnote'               => "Below {{PLURAL:$1|is the last change|are the last '''$1''' changes}} in the last {{PLURAL:$2|hour|'''$2''' hours}}, as of $3, $4.",
 'wlshowlast'           => 'Show last $1 hours $2 days $3',
 'watchlist-options'    => 'Watchlist options',
@@ -3074,7 +3082,7 @@ someone else has edited or rolled back the page already.
 The last edit to the page was by [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment'                => "The edit summary was: \"''\$1''\".",
 'revertpage'                 => 'Reverted edits by [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) to last revision by [[User:$1|$1]]',
-'revertpage-nouser'          => 'Reverted edits by a hidden user to last revision by [[User:$1|$1]]',
+'revertpage-nouser'          => 'Reverted edits by a hidden user to last revision by {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success'           => 'Reverted edits by $1;
 changed back to last revision by $2.',
 
@@ -3224,7 +3232,7 @@ $1',
 'contributions-summary' => '', # do not translate or duplicate this message to other languages
 'contributions-title'   => 'User contributions for $1',
 'mycontris'             => 'Contributions',
-'contribsub2'           => 'For $1 ($2)',
+'contribsub2'           => 'For {{GENDER:$3|$1}} ($2)',
 'nocontribs'            => 'No changes were found matching these criteria.',
 'uctop'                 => '(current)',
 'month'                 => 'From month (and earlier):',
@@ -3496,6 +3504,7 @@ Please merge them manually.'''",
 'movesubpagetext'              => 'This page has $1 {{PLURAL:$1|subpage|subpages}} shown below.',
 'movenosubpage'                => 'This page has no subpages.',
 'movereason'                   => 'Reason:',
+'move-redirect-text'           => '', # do not translate or duplicate this message to other languages
 'revertmove'                   => 'revert',
 'delete_and_move'              => 'Delete and move',
 'delete_and_move_text'         => '== Deletion required ==
@@ -4925,7 +4934,10 @@ You should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU Gen
 'tags-tag'                => 'Tag name',
 'tags-display-header'     => 'Appearance on change lists',
 'tags-description-header' => 'Full description of meaning',
+'tags-active-header'      => 'Active?',
 'tags-hitcount-header'    => 'Tagged changes',
+'tags-active-yes'         => 'Yes',
+'tags-active-no'          => 'No',
 'tags-edit'               => 'edit',
 'tags-hitcount'           => '$1 {{PLURAL:$1|change|changes}}',
 
@@ -5120,9 +5132,9 @@ Otherwise, you can use the easy form below. Your comment will be added to the pa
 'limitreport-ppgeneratednodes'             => 'Preprocessor generated node count',
 'limitreport-ppgeneratednodes-value'       => '$1/$2', # only translate this message to other languages if you have to change it
 'limitreport-postexpandincludesize'        => 'Post-expand include size',
-'limitreport-postexpandincludesize-value'  => '$1/$2 bytes',
+'limitreport-postexpandincludesize-value'  => '$1/$2 {{PLURAL:$2|byte|bytes}}',
 'limitreport-templateargumentsize'         => 'Template argument size',
-'limitreport-templateargumentsize-value'   => '$1/$2 bytes',
+'limitreport-templateargumentsize-value'   => '$1/$2 {{PLURAL:$2|byte|bytes}}',
 'limitreport-expansiondepth'               => 'Highest expansion depth',
 'limitreport-expansiondepth-value'         => '$1/$2', # only translate this message to other languages if you have to change it
 'limitreport-expensivefunctioncount'       => 'Expensive parser function count',
index ded7b3d..681ab4a 100644 (file)
  * @author Muro de Aguas
  * @author Omnipaedista
  * @author Orgullomoore
+ * @author Ovruni
  * @author Paucabot
  * @author Penarc
  * @author PerroVerd
  * @author Pertile
+ * @author Pginer
  * @author Piolinfax
  * @author Platonides
  * @author PoLuX124
@@ -620,7 +622,7 @@ $1',
 # 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).
 'aboutsite' => 'Acerca de {{SITENAME}}',
 'aboutpage' => 'Project:Acerca de',
-'copyright' => 'El contenido está disponible bajo los términos de la $1.',
+'copyright' => 'El contenido está disponible bajo  $1  a menos que se indique lo contrario.',
 'copyrightpage' => '{{ns:project}}:Derechos de autor',
 'currentevents' => 'Actualidad',
 'currentevents-url' => 'Project:Actualidad',
@@ -790,9 +792,9 @@ El administrador que lo ha bloqueado ofrece esta explicación: "$3".',
 # Login and logout pages
 'logouttext' => '"\'Usted está ahora desconectado."\'
 Tenga en cuenta que algunas páginas pueden continuar mostrándose como si todavía estuviera conectado, hasta que borres la caché de tu navegador.',
-'welcomeuser' => '¡Bienvenido, $1!',
-'welcomecreation-msg' => 'Tu cuenta ha sido creada.
-No olvides cambiar tus [[Special:Preferences|preferencias de {{SITENAME}} ]].',
+'welcomeuser' => '¡Te damos la bienvenida, $1!',
+'welcomecreation-msg' => 'Se ha creado tu cuenta.
+No olvides personalizar tus [[Special:Preferences|preferencias de {{SITENAME}}]].',
 'yourname' => 'Nombre de usuario:',
 'userlogin-yourname' => 'Usuario',
 'userlogin-yourname-ph' => 'Escribe tu nombre de usuario',
@@ -829,6 +831,7 @@ No olvides cambiar tus [[Special:Preferences|preferencias de {{SITENAME}} ]].',
 'userlogin-resetpassword-link' => 'Restablecer la contraseña',
 'helplogin-url' => 'Help:Inicio de sesión',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ayuda]]',
+'userlogin-createanother' => 'Crear otra cuenta',
 'createacct-join' => 'Introduce tus datos debajo.',
 'createacct-another-join' => 'Introduzca la información de la nueva cuenta a continuación.',
 'createacct-emailrequired' => 'Dirección de correo electrónico',
@@ -984,7 +987,7 @@ Contraseña temporal: $2',
 
 # Special:ChangeEmail
 'changeemail' => 'Cambiar la dirección de correo electrónico',
-'changeemail-header' => 'Cambiar la dirección de correo electrónico de la cuenta',
+'changeemail-header' => 'Cambiar la dirección de correo de la cuenta',
 'changeemail-text' => 'Rellena este formulario para cambiar tu dirección de correo electrónico. Debes introducir la contraseña para confirmar este cambio.',
 'changeemail-no-info' => 'Debes iniciar sesión para acceder directamente a esta página.',
 'changeemail-oldemail' => 'Dirección de correo electrónico actual:',
@@ -1003,7 +1006,7 @@ Deberías hacerlo si accidentalmente la has compartido con alguien o si su cuent
 'resettokens-legend' => 'Restablecer claves',
 'resettokens-tokens' => 'Claves:',
 'resettokens-token-label' => '$1 (valor actual: $2)',
-'resettokens-watchlist-token' => 'Lista de seguimiento de la red de claves',
+'resettokens-watchlist-token' => 'Clave para la lista de seguimiento (RSS/Atom) de los [[Special:Watchlist|cambios a las páginas en tu lista de seguimiento]]',
 'resettokens-done' => 'Restablecimiento de claves.',
 'resettokens-resetbutton' => 'Restablecer las claves',
 
@@ -1541,9 +1544,9 @@ Mientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índice
 'recentchangesdays-max' => '(máximo {{PLURAL:$1|un día|$1 días}})',
 'recentchangescount' => 'Número de ediciones a mostrar de manera predeterminada:',
 'prefs-help-recentchangescount' => 'Esto incluye cambios recientes, historiales de página, y registros.',
-'prefs-help-watchlist-token2' => 'Esta es la llave secreta al feed de tu lista de seguimiento web.
-Toda persona que la sepa será capaz de leer tu lista, así que no la compartiremos.
-[[Special:ResetTokens|Has clic aquí si necesitas reiniciarlo]].',
+'prefs-help-watchlist-token2' => 'Esta es la clave secreta para el canal de contenido web de tu lista de seguimiento.
+Cualquier persona que la conozca podría leer tu lista, así que no la compartas.
+[[Special:ResetTokens|Pulsa aquí si necesitas restablecerla]].',
 'savedprefs' => 'Tus preferencias han sido guardadas.',
 'timezonelegend' => 'Zona horaria:',
 'localtime' => 'Hora local:',
@@ -1774,8 +1777,8 @@ Tu dirección de correo no se revela cuando otros usuarios te contactan.',
 'action-block' => 'bloquear a este usuario para que no edite',
 'action-protect' => 'cambiar los niveles de protección para esta página',
 'action-rollback' => 'revertir rápidamente las ediciones del último usuario que modificó una página en particular',
-'action-import' => 'importar esta página desde otro wiki',
-'action-importupload' => 'importar esta página mediante la carga de un archivo',
+'action-import' => 'importar páginas desde otro wiki',
+'action-importupload' => 'importar páginas mediante la carga de un archivo',
 'action-patrol' => 'marcar ediciones de otros como patrulladas',
 'action-autopatrol' => 'marcar como patrulladas tus propias ediciones',
 'action-unwatchedpages' => 'ver la lista de páginas no vigiladas',
@@ -2295,6 +2298,7 @@ Las entradas <del>tachadas</del> han sido resueltas.',
 'mostrevisions' => 'Artículos con más ediciones',
 'prefixindex' => 'Todas las páginas con prefijo',
 'prefixindex-namespace' => 'Todas las páginas con el prefijo (espacio de nombres $1)',
+'prefixindex-strip' => 'Prefijo de la hilera en la lista',
 'shortpages' => 'Páginas cortas',
 'longpages' => 'Páginas largas',
 'deadendpages' => 'Páginas sin salida',
@@ -2310,6 +2314,7 @@ Las entradas <del>tachadas</del> han sido resueltas.',
 'listusers' => 'Lista de usuarios',
 'listusers-editsonly' => 'Muestra sólo usuarios con ediciones',
 'listusers-creationsort' => 'Ordenado por fecha de creación',
+'listusers-desc' => 'Ordenar de forma descendente',
 'usereditcount' => '$1 {{PLURAL:$1|edición|ediciones}}',
 'usercreated' => '{{GENDER:$3|Registrado|Registrada}} el $1 a las $2',
 'newpages' => 'Páginas nuevas',
@@ -3266,7 +3271,7 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'pageinfo-length' => 'Longitud de la página (en bytes)',
 'pageinfo-article-id' => 'Identificador ID de la página',
 'pageinfo-language' => 'Idioma de la página',
-'pageinfo-robot-policy' => 'Indexación por robots',
+'pageinfo-robot-policy' => 'Indización por robots',
 'pageinfo-robot-index' => 'Permitido',
 'pageinfo-robot-noindex' => 'No permitido',
 'pageinfo-views' => 'Número de vistas',
@@ -4090,7 +4095,9 @@ Has recibido [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Licencia Pública
 'tags-tag' => 'Nombre de etiqueta',
 'tags-display-header' => 'Apariencia de la lista de cambios',
 'tags-description-header' => 'Descripción completa de significado',
+'tags-active-header' => '¿Activo?',
 'tags-hitcount-header' => 'Cambios etiquetados',
+'tags-active-yes' => 'Sí',
 'tags-edit' => 'editar',
 'tags-hitcount' => '$1 {{PLURAL:$1|cambio|cambios}}',
 
@@ -4108,8 +4115,7 @@ Has recibido [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Licencia Pública
 
 # Database error messages
 'dberr-header' => 'Este wiki tiene un problema',
-'dberr-problems' => 'Lo sentimos.
-Este sitio está experimentando dificultades técnicas.',
+'dberr-problems' => 'Lo sentimos. Este sitio está experimentando dificultades técnicas.',
 'dberr-again' => 'Prueba a recargar dentro de unos minutos.',
 'dberr-info' => '(No se puede contactar con la base de datos del servidor: $1)',
 'dberr-info-hidden' => '(No se puede contactar con la base de datos del servidor)',
@@ -4250,17 +4256,17 @@ En otro caso, puedes usar el siguiente formulario. Tu comentario será añadido
 'rotate-comment' => 'Imagen girada por $1 {{PLURAL:$1|grado|grados}} en el sentido de las agujas del reloj',
 
 # Limit report
-'limitreport-title' => 'Analizador de datos de perfiles:',
+'limitreport-title' => 'Datos de perfilado del analizador:',
 'limitreport-cputime' => 'Tiempo de uso de CPU',
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|segundo|segundos}}',
-'limitreport-walltime' => 'Tiempo Real de uso',
+'limitreport-walltime' => 'Tiempo real de uso',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|segundo|segundos}}',
-'limitreport-ppvisitednodes' => 'Preprocesador visitó la cantidad de nodos',
-'limitreport-ppgeneratednodes' => 'Preprocesador genera el número de nodos',
-'limitreport-postexpandincludesize' => 'Post-Expand incluyen el tamaño',
-'limitreport-postexpandincludesize-value' => '$1/$2 bytes',
+'limitreport-ppvisitednodes' => 'N.º de nodos visitados por el preprocesador',
+'limitreport-ppgeneratednodes' => 'N.º de nodos generados por el preprocesador',
+'limitreport-postexpandincludesize' => 'Tamaño de inclusión posexpansión',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
 'limitreport-templateargumentsize' => 'Argumento del tamaño de la plantilla',
-'limitreport-templateargumentsize-value' => '$1/$2 bytes',
-'limitreport-expansiondepth' => 'Máxima expansión de profundidad',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
+'limitreport-expansiondepth' => 'Profundidad máxima de expansión',
 
 );
index 3947674..74f1332 100644 (file)
@@ -538,7 +538,7 @@ $1',
 # 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).
 'aboutsite' => '{{GRAMMAR:genitive|{{SITENAME}}}} tiitelandmed',
 'aboutpage' => 'Project:Tiitelandmed',
-'copyright' => 'Kogu tekst on kasutatav litsentsi $1 tingimustel.',
+'copyright' => 'Sisu on kasutatav litsentsi $1 tingimustel, kui pole öeldud teisiti.',
 'copyrightpage' => '{{ns:project}}:Autoriõigus',
 'currentevents' => 'Sündmused',
 'currentevents-url' => 'Project:Sündmused',
@@ -595,8 +595,8 @@ Vaata [[Special:Version|versiooni lehekülge]].',
 'page-rss-feed' => '"$1" RSS-toide',
 'page-atom-feed' => '"$1" Atom-toide',
 'red-link-title' => '$1 (pole veel kirjutatud)',
-'sort-descending' => 'Järjesta kahanevalt',
-'sort-ascending' => 'Järjesta kasvavalt',
+'sort-descending' => 'Järjesta laskuvalt',
+'sort-ascending' => 'Järjesta tõusvalt',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Artikkel',
@@ -623,6 +623,8 @@ Käibel olevad erileheküljed on loetletud leheküljel [[Special:SpecialPages|{{
 # General errors
 'error' => 'Viga',
 'databaseerror' => 'Andmebaasi viga',
+'databaseerror-text' => 'Esines andmebaasipäringu tõrge.
+See võib viidata veale tarkvaras.',
 'databaseerror-textcl' => 'Esines andmebaasipäringu tõrge.',
 'databaseerror-query' => 'Päring: $1',
 'databaseerror-function' => 'Funktsioon: $1',
@@ -1216,7 +1218,7 @@ Saad soovi korral siiski [$1 seda muudatust vaadata].",
 Saad seda muudatust vaadata. [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Kustutamislogis] võib leiduda üksikasju.",
 'rev-suppressed-diff-view' => "Üks selle lehekülje muudatustest on '''varjatud'''.
 Saad seda muudatust vaadata. [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Varjamislogis] võib üksikasju olla.",
-'rev-delundel' => 'näita/peida',
+'rev-delundel' => 'muuda nähtavust',
 'rev-showdeleted' => 'näita',
 'revisiondelete' => 'Redaktsioonide kustutamine või taastamine',
 'revdelete-nooldid-title' => 'Sellist redaktsiooni pole.',
@@ -1325,7 +1327,7 @@ Pane tähele, et navigeerimislinkide kasutamine lähtestab redaktsioonide valiku
 'difference-multipage' => '(Lehekülgede erinevus)',
 'lineno' => '$1. rida:',
 'compareselectedversions' => 'Võrdle valitud redaktsioone',
-'showhideselectedversions' => 'Näita/peida valitud versioonid',
+'showhideselectedversions' => 'Muuda valitud redaktsioonide nähtavust',
 'editundo' => 'eemalda',
 'diff-empty' => '(Erinevus puudub)',
 'diff-multi' => '({{PLURAL:$1|Ühte|$1}} vahepealset {{PLURAL:$2|ühe|$2}} kasutaja redaktsiooni ei näidata.)',
@@ -1678,8 +1680,8 @@ See teave on avalik.',
 'action-block' => 'selle kasutaja redigeerimisõigust blokeerida',
 'action-protect' => 'selle lehekülje kaitsetasemeid muuta',
 'action-rollback' => 'tühistada otsekohe lehekülge viimati redigeerinud kasutaja muudatusi',
-'action-import' => 'seda lehekülge teisest vikist importida',
-'action-importupload' => 'seda lehekülge faili üleslaadimise abil importida',
+'action-import' => 'lehekülgi teisest vikist importida',
+'action-importupload' => 'lehekülgi faili üleslaadimise teel importida',
 'action-patrol' => 'teiste muudatusi kontrollituks märkida',
 'action-autopatrol' => 'oma muudatusi kontrollituks märkida',
 'action-unwatchedpages' => 'jälgimata lehekülgede loendit vaadata',
@@ -2178,7 +2180,7 @@ Igal real on ära toodud esimene ja teine ümbersuunamisleht ning samuti teise 
 'shortpages' => 'Lühikesed leheküljed',
 'longpages' => 'Pikad leheküljed',
 'deadendpages' => 'Edasipääsuta leheküljed',
-'deadendpagestext' => 'Järgmised leheküljed ei viita ühelegi teisele viki leheküljele.',
+'deadendpagestext' => 'Järgmised leheküljed ei viita ühelegi teisele {{GRAMMAR:genitive|{{SITENAME}}}} leheküljele.',
 'protectedpages' => 'Kaitstud leheküljed',
 'protectedpages-indef' => 'Ainult määramata ajani kaitstud',
 'protectedpages-cascade' => 'Ainult kaskaadkaitsega',
@@ -2190,6 +2192,7 @@ Igal real on ära toodud esimene ja teine ümbersuunamisleht ning samuti teise 
 'listusers' => 'Kasutajad',
 'listusers-editsonly' => 'Näita vaid kasutajaid, kes on teinud muudatusi',
 'listusers-creationsort' => 'Järjesta konto loomise aja järgi',
+'listusers-desc' => 'Järjesta laskuvalt',
 'usereditcount' => '$1 {{PLURAL:$1|redigeerimine|redigeerimist}}',
 'usercreated' => 'Konto {{GENDER:$3|loomise}} aeg: $1 kell $2',
 'newpages' => 'Uued leheküljed',
@@ -2225,7 +2228,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',
+'showhideselectedlogentries' => 'Muuda valitud logisissekannete nähtavust',
 
 # Special:AllPages
 'allpages' => 'Kõik leheküljed',
@@ -2616,7 +2619,7 @@ $1',
 'contributions' => '{{GENDER:$1|Kasutaja}} kaastöö',
 'contributions-title' => 'Kasutaja $1 kaastöö',
 'mycontris' => 'Kaastöö',
-'contribsub2' => 'Kasutaja $1 ($2) jaoks',
+'contribsub2' => 'Kasutaja {{GENDER:$3|$1}} ($2) jaoks',
 'nocontribs' => 'Antud kriteeriumitele vastavaid muudatusi ei leitud.',
 'uctop' => '(praegune)',
 'month' => 'Alates kuust (ja varasemad):',
@@ -2653,9 +2656,9 @@ Allpool on toodud viimane blokeerimislogi sissekanne:',
 'whatlinkshere-next' => '{{PLURAL:$1|järgmine|järgmised $1}}',
 'whatlinkshere-links' => '← lingid',
 'whatlinkshere-hideredirs' => 'Ümbersuunamised ($1)',
-'whatlinkshere-hidetrans' => '$1 mallina kasutamised',
-'whatlinkshere-hidelinks' => '$1 lingid',
-'whatlinkshere-hideimages' => '$1 faililingid',
+'whatlinkshere-hidetrans' => 'Mallina kasutamised ($1)',
+'whatlinkshere-hidelinks' => 'Lingid ($1)',
+'whatlinkshere-hideimages' => 'Faililingid ($1)',
 'whatlinkshere-filters' => 'Filtrid',
 
 # Block/unblock
@@ -3923,7 +3926,10 @@ GNU Üldise Avaliku Litsentsi [{{SERVER}}{{SCRIPTPATH}}/COPYING eksemplar] peaks
 'tags-tag' => 'Märgise nimi',
 'tags-display-header' => 'Tähistus muudatusloendis',
 'tags-description-header' => 'Täiskirjeldus',
+'tags-active-header' => 'Aktiivne?',
 'tags-hitcount-header' => 'Märgistatud muudatused',
+'tags-active-yes' => 'Jah',
+'tags-active-no' => 'Ei',
 'tags-edit' => 'muuda',
 'tags-hitcount' => '$1 {{PLURAL:$1|muudatus|muudatust}}',
 
@@ -4089,9 +4095,9 @@ Kui ei, kasuta allolevat lihtsat vormi. Sinu kommentaar lisatakse koos kasutajan
 'limitreport-ppvisitednodes' => 'Eelprotsessori külastatud sõlmede arv',
 'limitreport-ppgeneratednodes' => 'Eelprotsessori genereeritud sõlmede arv',
 'limitreport-postexpandincludesize' => 'Hõrendusjärgne kaasa arvatav suurus',
-'limitreport-postexpandincludesize-value' => '$1/$2 baiti',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bait|baiti}}',
 'limitreport-templateargumentsize' => 'Malli argumendi suurus',
-'limitreport-templateargumentsize-value' => '$1/$2 baiti',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bait|baiti}}',
 'limitreport-expansiondepth' => 'Suurim hõrendussügavus',
 'limitreport-expensivefunctioncount' => 'Kulukate parserifunktsioonide arv',
 
index 7ea78fd..825466d 100644 (file)
@@ -881,7 +881,7 @@ Azken erregistroko sarrera ematen da azpian erreferentzia gisa:",
 'templatesusedsection' => 'Atal honetan erabiltzen {{PLURAL:$1|den txantiloia|diren txantiloiak}}:',
 'template-protected' => '(babestua)',
 'template-semiprotected' => '(erdi-babestua)',
-'hiddencategories' => 'Orrialde hau {{PLURAL:$1|kategoria izkutu bateko|$1 kategoria izkutuko}} kide da:',
+'hiddencategories' => 'Orri hau ezkutuko {{PLURAL:$1|kategoria bateko|$1 kategoriatako}} kide da:',
 'edittools' => '<!-- Hemen jarritako testua aldaketa eta igoera formularioen azpian agertuko da. -->',
 'nocreatetext' => 'Gune honek orrialde berriak sortzeko gaitasuna mugatu du. Atzera egin dezakezu existitzen den orrialde bat aldatzeko, edo [[Special:UserLogin|saio hasi edo kontua sortu]].',
 'nocreate-loggedin' => 'Ez duzu orri berriak sortzeko baimenik.',
@@ -1914,7 +1914,7 @@ Mesedez, kontuan izan beste webgune batzutatik URL zuzena erabiliz lotura izan d
 Erregistro mota, erabiltzailearen izena edota orrialdearen izena iragaziz bistaratu daiteke. Letra larriak eta xeheak bereizten dira.',
 'logempty' => 'Ez dago emaitzarik erregistroan.',
 'log-title-wildcard' => 'Testu honekin hasten diren izenburuak bilatu',
-'showhideselectedlogentries' => 'Erakutsi/izkutatu aukeratutako log sarrerak',
+'showhideselectedlogentries' => 'Erakutsi/ezkutatu aukeratutako log sarrerak',
 
 # Special:AllPages
 'allpages' => 'Orri guztiak',
@@ -2379,9 +2379,9 @@ Ikus [[Special:BlockList|blokeoen zerrenda]] blokeoak aztertzeko.',
 'blocklist' => 'Blokeatutako erabiltzaileak',
 'ipblocklist' => 'Blokeatutako erabiltzaileak',
 'ipblocklist-legend' => 'Blokeatutako erabiltzaile bat bilatu',
-'blocklist-userblocks' => 'Izkutatu kontuaren blokeak',
-'blocklist-tempblocks' => 'Izkutatu behin-behineko blokeoak',
-'blocklist-addressblocks' => 'Izkutatu IP bakarretako blokeoak',
+'blocklist-userblocks' => 'Ezkutatu kontu-blokeatzeak',
+'blocklist-tempblocks' => 'Ezkutatu behin-behineko blokeoak',
+'blocklist-addressblocks' => 'Ezkutatu IP bakarreko blokeoak',
 'blocklist-rangeblocks' => 'Izkuntatu eremu blokeoak',
 'blocklist-timestamp' => 'Eguna eta ordua',
 'blocklist-target' => 'Helburua',
@@ -2432,7 +2432,7 @@ Ikus [[Special:BlockList|blokeoen zerrenda]] aktibo dauden blokeoak eta debekuak
 'ipb_already_blocked' => '"$1" badago blokeatuta',
 'ipb-needreblock' => '$1 dagoeneko blokeaturik dago. Ezarpenak aldatu nahi al dituzu?',
 'ipb-otherblocks-header' => 'Bestelako {{PLURAL:$1|blokeoa|blokeoak}}',
-'unblock-hideuser' => 'Ezin duzu erabiltzaile hau desblokeatu, bere erabiltzaile izena izkutatua izan baita.',
+'unblock-hideuser' => 'Ezin duzu erabiltzaile hau desblokeatu, haren erabiltzaile izena ezkutatua izan baita.',
 'ipb_cant_unblock' => 'Errorea: Ez da $1 IDa duen blokeoa aurkitu. Baliteke blokeoa jada kenduta egotea.',
 'ipb_blocked_as_range' => 'Akatsa: $1 IPa ez dago zuzenean blokeatuta eta ezin da blokeoa kendu.
 Hala ere, $2-(r)en parte denez, blokeoa kendu daiteke.',
@@ -3573,13 +3573,14 @@ Halaber [[Special:EditWatchlist|aldatzaile estandarra]] erabil dezakezu.',
 'logentry-delete-delete' => '$1 wikilariak $3 orria {{GENDER:$2|ezabatu}} du',
 'logentry-delete-restore' => '$1(e)k $3 orrialdea {{GENDER:$2|berrezarri}} du',
 'logentry-delete-event' => '$1 wikilariak ikusgaitasuna aldatu {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerari}}, $3 orrian: $4',
+'logentry-delete-revision' => '$1 erabiltzaileak {{PLURAL:$5|berrikuste baten|$5 berrikusteren}} ikusgaitasuna aldatu du «$3» orrian: $4',
 'logentry-suppress-delete' => '$1 erabiltzaileak $3 orrialdea {{GENDER:$2|ezabatu}} du',
-'logentry-suppress-event' => '$1 wikilariak ezkutuan ikusgaitasuna aldatu {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerari}}, $3 orrian: $4',
-'revdelete-content-hid' => 'edukia izkutatua',
-'revdelete-summary-hid' => 'aldaketa laburpena izkutatua',
+'logentry-suppress-event' => '$1 wikilariak ezkutuan ikusgaitasuna aldatu {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerari}}, «$3» orrian: $4',
+'revdelete-content-hid' => 'edukia ezkutatu da',
+'revdelete-summary-hid' => 'edizioaren laburpena ezkutatu da',
 'revdelete-uname-hid' => 'lankide izena ezkutatua',
 'revdelete-content-unhid' => 'eduki ezkutua erakutsi',
-'revdelete-summary-unhid' => 'aldaketa laburpen izkutua erakutsi',
+'revdelete-summary-unhid' => 'edizioaren laburpen ezkutua bistaratu da',
 'revdelete-uname-unhid' => 'lankide ezkutua erakutsi',
 'revdelete-restricted' => 'administratzaileentzako mugak ezarri dira',
 'revdelete-unrestricted' => 'administratzaileentzako mugak kendu dira',
index 62f1cfb..9f586f8 100644 (file)
  * @author Meno25
  * @author Mjbmr
  * @author Mormegil
+ * @author Omidh
  * @author Omnia
  * @author Pouyana
  * @author Reza1615
  * @author Roozbeh Pournader <roozbeh at gmail.com>
+ * @author Rtemis
  * @author Sahim
  * @author Surena
  * @author Taha
@@ -444,7 +446,7 @@ $messages = array(
 'tog-extendwatchlist' => 'گسترش فهرست پی‌گیری‌ها برای نمایش همهٔ تغییرات، نه فقط آخرین‌ها',
 'tog-usenewrc' => 'گروه‌بندی تغییرات بر پایه صفحه در تغییرات اخیر و فهرست پیگیری‌ها (نیازمند جاوااسکریپت)',
 'tog-numberheadings' => 'شماره‌گذاری خودکار عنوان‌ها',
-'tog-showtoolbar' => 'نوار ابزار جعبهٔ ویرایش نمایش یابد (نیازمند جاوااسکریپت)',
+'tog-showtoolbar' => 'نوار ابزار جعبهٔ ویرایش نمایش یابد',
 'tog-editondblclick' => 'ویرایش صفحه‌ها با دوکلیک (نیازمند جاوااسکریپت)',
 'tog-editsection' => 'ویرایش بخش‌ها از طریق پیوندهای [ویرایش] فعال باشد',
 'tog-editsectiononrightclick' => 'امکان ویرایش بخش‌ها با کلیک راست روی عنوان‌های بخش (نیازمند جاوااسکریپت)',
@@ -580,7 +582,7 @@ $messages = array(
 'newwindow' => '(در پنجرهٔ جدید باز می‌شود)',
 'cancel' => 'لغو',
 'moredotdotdot' => 'بیشتر...',
-'morenotlisted' => 'ادامه لیست...',
+'morenotlisted' => 'این لیست کامل نیست.',
 'mypage' => 'صفحه',
 'mytalk' => 'بحث',
 'anontalk' => 'بحث برای این آی‌پی',
@@ -683,7 +685,7 @@ $1',
 # 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).
 'aboutsite' => 'دربارهٔ {{SITENAME}}',
 'aboutpage' => 'Project:درباره',
-'copyright' => 'محتوا تحت اجازه‌نامهٔ $1 در دسترس است.',
+'copyright' => 'محتوا تحت اجازه‌نامهٔ $1 در دسترس است مگر اینکه خلافش ذکر شده باشد.',
 'copyrightpage' => '{{ns:project}}:حق تکثیر',
 'currentevents' => 'رویدادهای کنونی',
 'currentevents-url' => 'Project:رویدادهای کنونی',
@@ -770,6 +772,10 @@ $1',
 # General errors
 'error' => 'خطا',
 'databaseerror' => 'خطای پایگاه داده',
+'databaseerror-text' => 'مشکلی در پایگاه داده ها رخ داده است. 
+این ممکن است نشان دهنده یک مشکل در نرم افزار باشد.',
+'databaseerror-function' => 'تابع: $1',
+'databaseerror-error' => 'خطا: $1',
 'laggedslavemode' => "'''هشدار:''' صفحه ممکن است به‌روزرسانی‌های اخیر را شامل نشود.",
 'readonly' => 'پایگاه داده قفل شد',
 'enterlockreason' => 'دلیلی برای قفل کردن ذکر کنید، که حاوی تقریبی از زمانی باشد که قفل برداشته خواهد شد',
@@ -894,6 +900,9 @@ $2',
 'userlogin-resetpassword-link' => 'گذرواژه‌تان را فراموش کردید؟',
 'helplogin-url' => 'Help:ورود به سامانه',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|راهنمای ورود به سامانه]]',
+'userlogin-loggedin' => 'شما در حال حاضر به عنوان {{GENDER:$1|$1}} وارد سیستم شده اید.
+از فرم پایین برای ورود به عنوان یک کاربر دیگر استفاده کنید.',
+'userlogin-createanother' => 'ایجاد یک حساب کاربری دیگر',
 'createacct-join' => 'اطلاعاتتان را در زیر وارد کنید',
 'createacct-another-join' => 'در زیر اطلاعات کاربری جدیدتان را وارد کنید.',
 'createacct-emailrequired' => 'آدرس رایانامه',
@@ -1580,7 +1589,7 @@ $1",
 'prefs-skin' => 'پوسته',
 'skin-preview' => 'پیش‌نمایش',
 'datedefault' => 'بدون ترجیح',
-'prefs-beta' => 'ویژگی های بتا',
+'prefs-beta' => 'ویژگی‌های آزمایشی',
 'prefs-datetime' => 'تاریخ و زمان',
 'prefs-labs' => 'گزینه‌های آزمایشی',
 'prefs-user-pages' => 'صفحه‌های کاربری',
@@ -1600,7 +1609,7 @@ $1",
 'prefs-rendering' => 'نمایش صفحه',
 'saveprefs' => 'ذخیره',
 'resetprefs' => 'صفرکردن ترجیحات',
-'restoreprefs' => 'برگرداندن تمام تنظیمات پیش‌فرض',
+'restoreprefs' => 'برگرداندن تمام تنظیمات پیش‌فرض (در تمامی قسمت ها)',
 'prefs-editing' => 'ویرایش',
 'rows' => 'تعداد سطرها:',
 'columns' => 'تعداد ستون‌ها:',
@@ -1663,7 +1672,8 @@ $1",
 'gender-unknown' => 'ترجیح می‌دهم مشخص نکنم',
 'gender-male' => 'مرد',
 'gender-female' => 'زن',
-'prefs-help-gender' => 'اختیاری: برای خطاب‌شدن با جنسیت درست توسط نرم‌افزار به کار می‌رود.
+'prefs-help-gender' => 'انجام این تنظیم اختیاری است.
+نرم افزار از این تنظیم استفاده می کند که جنسیت گرامری شما را بدرستی بیان کند.
 این اطلاعات عمومی خواهد بود.',
 'email' => 'رایانامه',
 'prefs-help-realname' => 'نام واقعی اختیاری است.
@@ -1688,6 +1698,7 @@ $1",
 'prefs-displaysearchoptions' => 'گزینه‌های نمایش',
 'prefs-displaywatchlist' => 'گزینه‌های نمایش',
 'prefs-diffs' => 'تفاوت‌ها',
+'prefs-help-prefershttps' => 'تاثیر این ترجیح بعد از ورود بعدی شما اعمال خواهد شد.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'نشانی رایانامه معتبر به نظر می‌رسد',
@@ -1711,10 +1722,10 @@ $1",
 'userrights-no-interwiki' => 'شما اجازهٔ تغییر اختیارات کاربران دیگر ویکی‌ها را ندارید.',
 'userrights-nodatabase' => 'پایگاه دادهٔ $1 وجود ندارد یا محلی نیست.',
 'userrights-nologin' => 'شما باید با یک حساب کاربری مدیر [[Special:UserLogin|به سامانه وارد شوید]] تا بتوانید اختیارات کاربران را تعیین کنید.',
-'userrights-notallowed' => 'حساب Ú©Ø§Ø±Ø¨Ø±Û\8c Ø´Ù\85ا Ø§Ø¬Ø§Ø²Ù\87 Ø§Ù\81زÙ\88دÙ\86 Û\8cا Ø­Ø°Ù\81 Ú©Ø±Ø¯Ù\86 Ø§Ø®ØªÛ\8cارات Ú©Ø§Ø±Ø¨Ø±Û\8c Ø±Ø§ Ù\86دارد.',
+'userrights-notallowed' => 'Ø´Ù\85ا Ù\85جÙ\88ز Ø¨Ø±Ø§Û\8c Ø§Ù\81زÙ\88دÙ\86 Û\8cا Ø­Ø°Ù\81 Ø­Ù\82Ù\88Ù\82 Ú©Ø§Ø±Ø¨Ø± Ø±Ø§ Ù\86دارÛ\8cد.',
 'userrights-changeable-col' => 'گروه‌هایی که می‌توانید تغییر دهید',
 'userrights-unchangeable-col' => 'گروه‌هایی که نمی‌توانید تغییر دهید',
-'userrights-conflict' => 'تعارض دسترسی‌های کاربری! لطفاً تغییراتتان را دوباره اعمال کنید.',
+'userrights-conflict' => 'تعارض دسترسی‌های کاربری! لطفا بررسی کنید و تغییرات را تایید کنید.',
 'userrights-removed-self' => 'شما با موفقیت دسترسی‌های خود را واستاندید. به این ترتیب شما دیگر به این صفحه دسترسی ندارید.',
 
 # Groups
@@ -1845,8 +1856,8 @@ $1",
 'action-block' => 'قطع دسترسی این کاربر از ویرایش کردن',
 'action-protect' => 'تغییر سطح محافظت این صفحه',
 'action-rollback' => 'واگردانی سریع ویرایش‌های آخرین کاربری که یک صفحه را ویرایش کرده‌است',
-'action-import' => 'Ù\88ارد Ú©Ø±Ø¯Ù\86 Ø§Û\8cÙ\86 ØµÙ\81Ø­Ù\87 Ø§Ø² Û\8cÚ© Ù\88Û\8cÚ©ی دیگر',
-'action-importupload' => 'Ù\88ارد Ú©Ø±Ø¯Ù\86 Ø§Û\8cÙ\86 ØµÙ\81Ø­Ù\87 Ø§Ø² Ø·Ø±Û\8cÙ\82 Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û\8c Ù¾Ø±Ù\88Ù\86دÙ\87',
+'action-import' => 'Ù\88ارد Ú©Ø±Ø¯Ù\86 ØµÙ\81Ø­Ù\87 Ø§Ø² Ù\88Û\8cÚ©Û\8c Ù\87ای دیگر',
+'action-importupload' => 'وارد کردن صفحه از طریق بارگذاری پرونده',
 'action-patrol' => 'گشت زدن ویرایش دیگران',
 'action-autopatrol' => 'گشت زدن ویرایش خودتان',
 'action-unwatchedpages' => 'مشاهدهٔ صفحه‌های پی‌گیری نشده',
@@ -1862,6 +1873,8 @@ $1",
 
 # Recent changes
 'nchanges' => '$1 تغییر',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|از آخرین بازدید}}',
+'enhancedrc-history' => 'تاریخچه',
 'recentchanges' => 'تغییرات اخیر',
 'recentchanges-legend' => 'گزینه‌های تغییرات اخیر',
 'recentchanges-summary' => 'آخرین تغییرات ویکی را در این صفحه پی‌گیری کنید.',
@@ -1893,7 +1906,7 @@ $1",
 'rc_categories_any' => 'هر کدام',
 'rc-change-size-new' => '$1 {{PLURAL:$1|بایت}} پس از تغییر',
 'newsectionsummary' => '/* $1 */ بخش جدید',
-'rc-enhanced-expand' => 'نمایش جزئیات (نیازمند جاوااسکریپت)',
+'rc-enhanced-expand' => 'نمایش جزئیات',
 'rc-enhanced-hide' => 'نهفتن جزئیات',
 'rc-old-title' => 'ایجادشده با عنوان اصلی «$1»',
 
@@ -2157,8 +2170,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'upload_source_file' => '(پرونده‌ای در رایانهٔ شما)',
 
 # Special:ListFiles
-'listfiles-summary' => 'این صفحهٔ ویژه تمام پرونده‌های بارگذاری شده را نمایش می‌دهد.
-در صورت پالایش بر اساس کاربر، تنها پرونده‌هایی که آخرین نسخه‌شان توسط کاربر موردنظر بارگذاری شده باشد نمایش می‌یابند.',
+'listfiles-summary' => 'این صفحهٔ ویژه تمام پرونده‌های بارگذاری شده را نمایش می‌دهد.',
 'listfiles_search_for' => 'جستجو به دنبال نام پرونده چندرسانه‌ای:',
 'imgfile' => 'پرونده',
 'listfiles' => 'فهرست پرونده‌ها',
@@ -2169,6 +2181,10 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'listfiles_size' => 'اندازه',
 'listfiles_description' => 'توضیح',
 'listfiles_count' => 'نسخه‌ها',
+'listfiles-show-all' => 'شامل نسخه های قدیمی عکس ها',
+'listfiles-latestversion' => 'نسخه فعلی',
+'listfiles-latestversion-yes' => 'بله',
+'listfiles-latestversion-no' => 'خیر',
 
 # File description page
 'file-anchor-link' => 'پرونده',
@@ -2266,6 +2282,13 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'randompage' => 'مقالهٔ تصادفی',
 'randompage-nopages' => 'هیچ صفحه‌ای در این {{PLURAL:$2|فضای نام|فضاهای نام}} موجود نیست: $1.',
 
+# Random page in category
+'randomincategory' => 'صفحهٔ تصادفی در رده',
+'randomincategory-invalidcategory' => '"$1" نام یک رده معتبر نمی باشد.',
+'randomincategory-nopages' => 'هیج صفحه ای در رده  [[:Category:$1|$1]] وجود ندارد.',
+'randomincategory-selectcategory' => 'دریافت صفحه تصادفی از دسته بندی:  $1   $2 .',
+'randomincategory-selectcategory-submit' => 'برو',
+
 # Random redirect
 'randomredirect' => 'تغییرمسیر تصادفی',
 'randomredirect-nopages' => 'هیج صفحهٔ تغییرمسیری در فضای نام «$1» موجود نیست.',
@@ -2368,6 +2391,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'listusers' => 'فهرست کاربران',
 'listusers-editsonly' => 'فقط کاربرانی که ویرایش دارند را نشان بده',
 'listusers-creationsort' => 'مرتب کردن بر اساس تاریخ ایجاد',
+'listusers-desc' => 'ترتیب نزولی',
 'usereditcount' => '$1 {{PLURAL:$1|ویرایش|ویرایش}}',
 'usercreated' => '{{GENDER:$3|ایجادشده}} در تاریخ $1 در ساعت $2',
 'newpages' => 'صفحه‌های تازه',
@@ -2800,7 +2824,7 @@ $1',
 'contributions' => 'مشارکت‌های {{GENDER:$1|کاربر}}',
 'contributions-title' => 'مشارکت‌های کاربری $1',
 'mycontris' => 'مشارکت‌ها',
-'contribsub2' => 'برای $1 ($2)',
+'contribsub2' => 'برای {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'هیچ تغییری با این مشخصات یافت نشد.',
 'uctop' => '(بالا)',
 'month' => 'در این ماه (و پیش از آن):',
@@ -3321,19 +3345,19 @@ $2',
 'pageinfo-header-basic' => 'اطلاعات اولیه',
 'pageinfo-header-edits' => 'ویرایش تاریخچه',
 'pageinfo-header-restrictions' => 'حفاظت از صفحه',
-'pageinfo-header-properties' => 'ويژگيهای صفحه',
+'pageinfo-header-properties' => 'ويژگی‌های صفحه',
 'pageinfo-display-title' => 'نمایش عنوان',
 'pageinfo-default-sort' => 'کلید مرتب‌سازی پیش‌فرض',
 'pageinfo-length' => 'حجم صفحه  (بایت)',
 'pageinfo-article-id' => 'شناسهٔ صفحه',
 'pageinfo-language' => 'زبان محتوای صفحه',
-'pageinfo-robot-policy' => 'Ù\88ضعÛ\8cت Ù\85Ù\88تÙ\88ر Ø¬Ø³ØªØ¬Ù\88',
-'pageinfo-robot-index' => 'Ù\81Ù\87رستâ\80\8cپذÛ\8cر',
-'pageinfo-robot-noindex' => 'عدÙ\85 Ù\81Ù\87رستâ\80\8cپذÛ\8cرÛ\8c',
+'pageinfo-robot-policy' => 'Ù\81Ù\87رست Ú©Ø±Ø¯Ù\86 ØªÙ\88سط Ø±Ù\88بات Ù\87ا',
+'pageinfo-robot-index' => 'Ù\85جاز',
+'pageinfo-robot-noindex' => 'غÛ\8cر Ù\85جاز',
 'pageinfo-views' => 'شمار بازدیدها',
 'pageinfo-watchers' => 'شمار پی‌گیری‌کنندگان صفحه',
 'pageinfo-few-watchers' => 'کمتر از  $1 {{PLURAL:$1| پی‌گیر|پی‌گیر}}',
-'pageinfo-redirects-name' => 'تغییرمسیرها به این صفحه',
+'pageinfo-redirects-name' => 'تعداد ØªØºÛ\8cÛ\8cرÙ\85سÛ\8cرÙ\87ا Ø¨Ù\87 Ø§Û\8cÙ\86 ØµÙ\81Ø­Ù\87',
 'pageinfo-subpages-name' => 'زیرصفحه‌های این صفحه',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|تغییرمسیر|تغییرمسیر}}; $3 {{PLURAL:$3|غیرتغییرمسیر|غیرتغییرمسیر}})',
 'pageinfo-firstuser' => 'به‌وجود آورندهٔ صفحه',
@@ -3450,8 +3474,8 @@ $1',
 'just-now' => 'هم‌اکنون',
 
 # Human-readable timestamps
-'hours-ago' => '$1 {{PLURAL:$1|ساعت|ساعت}} قبل',
-'minutes-ago' => '$1 {{PLURAL:$1|دقیقه|دقیقه}} قبل',
+'hours-ago' => '$1 ساعت قبل',
+'minutes-ago' => '$1 دقیقه قبل',
 'seconds-ago' => '$1 {{PLURAL:$1|ثانیه|ثانیه}} قبل',
 'monday-at' => 'دوشنبهٔ $1',
 'tuesday-at' => 'سه‌شنبهٔ $1',
@@ -3460,7 +3484,7 @@ $1',
 'friday-at' => 'جمعهٔ $1',
 'saturday-at' => 'شنبهٔ $1',
 'sunday-at' => 'یک‌شنبهٔ $1',
-'yesterday-at' => 'دیروز $1',
+'yesterday-at' => 'دیروز در $1',
 
 # Bad image list
 'bad_image_list' => 'اطلاعات را باید اینگونه وارد کنید:
@@ -3937,7 +3961,8 @@ $3
 $5
 
 این تأییدیه در $4 منقضی می‌گردد.',
-'confirmemail_body_set' => 'یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 نشانی رایانامه حساب «$2» در {{SITENAME}} را به این نشانی تغییر داده‌است.
+'confirmemail_body_set' => 'یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1,
+نشانی رایانامه حساب «$2» در {{SITENAME}} را به این نشانی تغییر داده‌است.
 
 برای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ ویژگی رایانامه در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:
 
@@ -3979,6 +4004,7 @@ $5
 # Separators for various lists, etc.
 'semicolon-separator' => '؛&#32;',
 'comma-separator' => '،&#32;',
+'percent' => '$1٪',
 
 # Multipage image navigation
 'imgmultipageprev' => '&rarr; صفحهٔ پیشین',
@@ -4131,6 +4157,7 @@ $5
 'version-license' => 'اجازه‌نامه',
 'version-poweredby-credits' => "این ویکی توسط '''[//www.mediawiki.org/ مدیاویکی]''' پشتیبانی می‌شود، کلیهٔ حقوق محفوظ است © 2001-$1 $2.",
 'version-poweredby-others' => 'دیگران',
+'version-poweredby-translators' => 'مترجمان translatewiki.net',
 'version-credits-summary' => 'افراد زیر را به خاطر ویرایش‌هایش در [[Special:Version|مدیاویکی]] معرفی می‌نمائیم.',
 'version-license-info' => 'مدیاویکی نرم‌افزاری رایگان است؛ می‌توانید آن را تحت شرایط مجوز عمومی همگانی گنو که توسط بنیاد نرم‌افزار رایگان منتشر شده‌است، بازنشر کنید؛ یا نسخهٔ ۲ از این مجوز، یا (بنا به اختیار) نسخه‌های بعدی.
 
@@ -4211,7 +4238,10 @@ $5
 'tags-tag' => 'نام برچسب',
 'tags-display-header' => 'نمایش در فهرست‌های تغییرات',
 'tags-description-header' => 'توضیح کامل معنی',
+'tags-active-header' => 'فعال؟',
 'tags-hitcount-header' => 'تغییرهای برچسب‌دار',
+'tags-active-yes' => 'بله',
+'tags-active-no' => 'خیر',
 'tags-edit' => 'ویرایش',
 'tags-hitcount' => '$1 {{PLURAL:$1|تغییر|تغییر}}',
 
@@ -4229,10 +4259,10 @@ $5
 
 # Database error messages
 'dberr-header' => 'این ویکی یک ایراد دارد',
-'dberr-problems' => 'شرمنده!
-این تارنما از مشکلات فنی رنج می‌برد.',
+'dberr-problems' => 'شرمنده! این تارنما از مشکلات فنی رنج می‌برد.',
 'dberr-again' => 'چند دقیقه صبر کند و دوباره صفحه را بارگیری کنید.',
 'dberr-info' => '(امکان برقراری ارتباط با کارساز پایگاه داده وجود ندارد: $1)',
+'dberr-info-hidden' => '(امکان تماس با پایگاه داده سرور امکان پذیر نیست)',
 'dberr-usegoogle' => 'شما در این مدت می‌توانید با استفاده از گوگل جستجو کنید.',
 'dberr-outofdate' => 'توجه کنید که نمایه‌های آن‌ها از محتوای ما ممکن است به روز نباشد.',
 'dberr-cachederror' => 'آن‌چه در ادامه می‌آید یک کپی از صفحهٔ درخواست شده است که در کاشه قرار دارد، و ممکن است به روز نباشد.',
@@ -4369,5 +4399,9 @@ $5
 
 # Limit report
 'limitreport-title' => 'داده‌های رخ‌نمانگاری تجزیه‌کننده:',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|ثانیه|ثانیه}}',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|ثانیه|ثانیه}}',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|بایت|بایت}}',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|بایت|بایت}}',
 
 );
index 756d7ba..79da6f3 100644 (file)
@@ -18,6 +18,7 @@
  * @author Jaakonam
  * @author Jack Phoenix
  * @author Jafeluv
+ * @author Kaanteli
  * @author Kaganer
  * @author Kulmalukko
  * @author Linnea
@@ -27,6 +28,7 @@
  * @author Ochs
  * @author Olli
  * @author Pxos
+ * @author Samoasambia
  * @author Silvonen
  * @author Snidata
  * @author Str4nd
@@ -562,7 +564,7 @@ $1',
 # 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).
 'aboutsite' => 'Tietoja {{GRAMMAR:elative|{{SITENAME}}}}',
 'aboutpage' => 'Project:Tietoja',
-'copyright' => 'Sisältö on käytettävissä lisenssillä $1.',
+'copyright' => 'Sisältö on käytettävissä lisenssillä $1, ellei toisin ole mainittu.',
 'copyrightpage' => '{{ns:project}}:Tekijänoikeudet',
 'currentevents' => 'Ajankohtaista',
 'currentevents-url' => 'Project:Ajankohtaista',
@@ -1674,8 +1676,8 @@ Tämä tieto on julkinen.',
 'action-block' => 'estää tätä käyttäjää muokkaamasta',
 'action-protect' => 'muuttaa tämän sivun suojaustasoa',
 'action-rollback' => 'käyttää nopeaa palautusta kumoamaan viimeisen käyttäjän viimeiset muutokset sivuun',
-'action-import' => 'tuoda tätä sivua toisesta wikistä',
-'action-importupload' => 'tuoda tätä sivua tiedostosta',
+'action-import' => 'tuoda sivuja toisesta wikistä',
+'action-importupload' => 'tuoda sivuja tiedostosta',
 'action-patrol' => 'merkitä muiden muokkauksia tarkastetuiksi',
 'action-autopatrol' => 'saada muokkaukset automaattisesti tarkastetuiksi',
 'action-unwatchedpages' => 'tarkastella tarkkailemattomien sivujen listaa',
@@ -2036,7 +2038,7 @@ Voit tarvittaessa muokata [$2 tiedoston kuvaussivua] kohteessa.',
 'filerevert-legend' => 'Tiedoston palautus',
 'filerevert-intro' => '<span class="plainlinks">Olet palauttamassa tiedostoa \'\'\'[[Media:$1|$1]]\'\'\' [$4 versioon, joka luotiin $2 kello $3].</span>',
 'filerevert-comment' => 'Syy',
-'filerevert-defaultcomment' => 'Palautettiin versioon, joka luotiin $1 kello $2',
+'filerevert-defaultcomment' => 'Palautettiin versioon, joka luotiin $1 kello $2 (UTC)',
 'filerevert-submit' => 'Palauta',
 'filerevert-success' => '<span class="plainlinks">\'\'\'[[Media:$1|$1]]\'\'\' on palautettu [$4 versioon, joka luotiin $2 kello $3].</span>',
 'filerevert-badversion' => 'Tiedostosta ei ole luotu versiota kyseisellä ajan hetkellä.',
@@ -2195,6 +2197,7 @@ Jokaisella rivillä on linkit ensimmäiseen ja toiseen ohjaukseen sekä toisen o
 'listusers' => 'Käyttäjälista',
 'listusers-editsonly' => 'Näytä vain käyttäjät, joilla on muokkauksia',
 'listusers-creationsort' => 'Lajittele tunnuksen luontipäivämäärän mukaan',
+'listusers-desc' => 'Lajittele alenevassa järjestyksessä',
 'usereditcount' => '$1 {{PLURAL:$1|muokkaus|muokkausta}}',
 'usercreated' => '{{GENDER:$3|Luotu}} $1 kello $2',
 'newpages' => 'Uudet sivut',
@@ -2474,7 +2477,7 @@ Sivulla $2 on lista viimeaikaisista poistoista.',
 Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|keskustelu]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Muokkauksen yhteenveto oli: ''$1''.",
 'revertpage' => 'Käyttäjän [[Special:Contributions/$2|$2]] ([[User talk:$2|keskustelu]]) muokkaukset kumottiin ja sivu palautettiin viimeisimpään käyttäjän [[User:$1|$1]] tekemään versioon.',
-'revertpage-nouser' => 'Käyttäjän (käyttäjänimi poistettu) muokkaukset kumottiin ja sivu palautettiin viimeisimpään käyttäjän [[User:$1|$1]] tekemään versioon.',
+'revertpage-nouser' => 'Käyttäjän (käyttäjänimi poistettu) muokkaukset kumottiin ja sivu palautettiin viimeisimpään käyttäjän {{GENDER:$1|[[User:$1|$1]]}} tekemään versioon',
 'rollback-success' => 'Käyttäjän $1 tekemät muokkaukset kumottiin ja sivu palautettiin käyttäjän $2 versioon.',
 
 # Edit tokens
@@ -3107,13 +3110,13 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'nocredits' => 'Tämän sivun tekijäluettelotietoja ei löydy.',
 
 # Spam protection
-'spamprotectiontitle' => 'Mainossuodatin',
-'spamprotectiontext' => 'Mainossuodatin on estänyt sivun tallentamisen. Syynä on todennäköisimmin mustalistattu ulkopuoliselle sivustolle osoittava linkki.',
-'spamprotectionmatch' => 'Teksti, joka ei läpäissyt mainossuodatinta: $1',
-'spambot_username' => 'MediaWikin mainospoistaja',
+'spamprotectiontitle' => 'Roskalinkkien suodatin',
+'spamprotectiontext' => 'Roskalinkkien suodatin on estänyt sivun tallentamisen. Syynä on luultavasti mustalla listalla olevalle ulkopuoliselle sivustolle osoittava linkki.',
+'spamprotectionmatch' => 'Seuraava teksti aiheutti osuman roskalinkkien suodattimessa: $1',
+'spambot_username' => 'MediaWikin roskalinkkien puhdistaja',
 'spam_reverting' => 'Palautettu viimeisimpään versioon, joka ei sisällä linkkejä kohteeseen $1.',
 'spam_blanking' => 'Kaikki versiot sisälsivät linkkejä kohteeseen $1. Sivu tyhjennetty.',
-'spam_deleting' => 'Sivun poisto: kaikki versiot sisälsivät linkkejä palvelimeen $1',
+'spam_deleting' => 'Kaikki versiot sisälsivät linkkejä kohteeseen $1, poistetaan',
 
 # Info page
 'pageinfo-title' => 'Tietoja sivusta $1',
@@ -3916,7 +3919,7 @@ Sinun olisi pitänyt saada [{{SERVER}}{{SCRIPTPATH}}/COPYING kopio GNU General P
 'specialpages-group-pagetools' => 'Sivutyökalut',
 'specialpages-group-wiki' => 'Tiedot ja työkalut',
 'specialpages-group-redirects' => 'Ohjaavat toimintosivut',
-'specialpages-group-spam' => 'Mainostenpoistotyökalut',
+'specialpages-group-spam' => 'Roskalinkkien (spam) työkalut',
 
 # Special:BlankPage
 'blankpage' => 'Tyhjä sivu',
@@ -4100,7 +4103,14 @@ Muussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi
 'rotate-comment' => 'Kuvaa käännettiin $1 aste{{PLURAL:$1||tta}} myötäpäivään',
 
 # Limit report
+'limitreport-title' => 'Jäsentimen profilointitiedot',
+'limitreport-cputime' => 'Suorittimen ajankäyttö',
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|sekunti|sekuntia}}',
+'limitreport-walltime' => 'Oikea ajankäyttö',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekunti|sekuntia}}',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|tavu|tavua}}',
+'limitreport-templateargumentsize' => 'Mallineen argumenttien koko',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|tavu|tavua}}',
+'limitreport-expansiondepth' => 'Korkein laajennussyvyys',
 
 );
index 4683c16..2cda462 100644 (file)
@@ -359,7 +359,7 @@ $1',
 # 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).
 'aboutsite' => 'Um {{SITENAME}}',
 'aboutpage' => 'Project:Um',
-'copyright' => 'Innihald er tøkt undir $1.',
+'copyright' => 'Innihaldið er tøkt undir $1, um ikki annað er viðmerkt.',
 'copyrightpage' => '{{ns:project}}:Upphavsrættur',
 'currentevents' => 'Aktuellar hendingar',
 'currentevents-url' => 'Project:Aktuellar hendingar',
index e86e769..c364468 100644 (file)
@@ -397,7 +397,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Masquer les modifications surveillées dans les modifications récentes',
 'tog-newpageshidepatrolled' => 'Masquer les pages surveillées dans la liste des nouvelles pages',
 'tog-extendwatchlist' => 'Étendre la liste de suivi pour afficher toutes les modifications et pas uniquement les plus récentes',
-'tog-usenewrc' => 'Grouper les changements dans les modifications récentes et la liste de suivi (nécessite JavaScript)',
+'tog-usenewrc' => 'Grouper les changements par page dans les modifications récentes et la liste de suivi (nécessite JavaScript)',
 'tog-numberheadings' => 'Numéroter automatiquement les titres de section',
 'tog-showtoolbar' => "Montrer la barre d'outils de modification (nécessite JavaScript)",
 'tog-editondblclick' => 'Modifier des pages sur double-clic (nécessite JavaScript)',
@@ -638,7 +638,7 @@ $1",
 # 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).
 'aboutsite' => 'À propos de {{SITENAME}}',
 'aboutpage' => 'Project:À propos',
-'copyright' => 'Le contenu est disponible sous licence $1 .',
+'copyright' => 'Le contenu est disponible sous licence $1 sauf mention contraire.',
 'copyrightpage' => '{{ns:project}}:Copyrights',
 'currentevents' => 'Actualités',
 'currentevents-url' => 'Project:Actualités',
@@ -655,8 +655,8 @@ $1",
 'privacypage' => 'Project:Confidentialité',
 
 'badaccess' => 'Erreur de permissions',
-'badaccess-group0' => "Vous n'avez pas les droits suffisants pour réaliser l'action demandée.",
-'badaccess-groups' => "L'action que vous essayez de réaliser n'est accessible qu'aux utilisateurs {{PLURAL:$2|du groupe|des groupes}} : $1.",
+'badaccess-group0' => 'Vous n’avez pas les droits suffisants pour réaliser l’action demandée.',
+'badaccess-groups' => 'L’action que vous essayez de réaliser n’est permise qu’aux utilisateurs {{PLURAL:$2|du groupe|des groupes}} : $1.',
 
 'versionrequired' => 'Version $1 de MediaWiki nécessaire',
 'versionrequiredtext' => 'La version $1 de MediaWiki est nécessaire pour utiliser cette page. Consultez [[Special:Version|la page des versions]]',
@@ -721,6 +721,8 @@ Une liste des pages spéciales valides se trouve sur [[Special:SpecialPages|{{in
 # General errors
 'error' => 'Erreur',
 'databaseerror' => 'Erreur de la base de données',
+'databaseerror-text' => "Une erreur de requête de base de données s'est produite. Cela peut provenir d'un bogue dans le logiciel.",
+'databaseerror-textcl' => "Une erreur de requête de base de données s'est produite.",
 'databaseerror-query' => 'Requête : $1',
 'databaseerror-function' => 'Fonction : $1',
 'databaseerror-error' => 'Erreur : $1',
@@ -752,14 +754,14 @@ Veuillez le signaler à un [[Special:ListUsers/sysop|administrateur]] sans oubli
 'unexpected' => 'Valeur inattendue : « $1 » = « $2 ».',
 'formerror' => 'Erreur : Impossible de soumettre le formulaire.',
 'badarticleerror' => 'Cette action ne peut pas être effectuée sur cette page.',
-'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' => '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.",
 'no-null-revision' => 'Impossible de créer une nouvelle révision vide pour la page « $1 »',
 '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.",
+'badtitletext' => 'Le titre de la page demandée est invalide, vide, ou il s’agit d’un titre inter-langue ou inter-projet mal formé. 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.',
 'perfcachedts' => 'Les données suivantes sont en cache et ont été mises à jour pour la dernière fois à $1. Un maximum de {{PLURAL:$4|un résultat|$4 résultats}} est disponible dans le cache.',
 'querypage-no-updates' => 'Les mises à jour pour cette page sont actuellement désactivées. Les données ci-dessous ne sont pas mises à jour.',
@@ -776,10 +778,10 @@ Essayez à nouveau dans quelques minutes.",
 'viewyourtext' => "Vous pouvez voir et copier le contenu de '''vos modifications''' à cette page :",
 'protectedinterface' => "Cette page fournit du texte d'interface pour le logiciel sur ce wiki, et est protégée pour éviter les abus.
 Pour ajouter ou modifier des traductions sur tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MediaWiki.",
-'editinginterface' => "'''Attention''': Vous êtes en train de modifier une page utilisée pour créer le texte de l'interface du logiciel. Les changements sur cette page se répercuteront dur l'apparence de l'interface utilisateur pour les autres utilisateurs de ce wiki.
-Pour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet d'internationalisation de MediaWiki.",
-'cascadeprotected' => "Cette page est protégée car elle est incluse par {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l'option « protection en cascade » activée :
-$2",
+'editinginterface' => "'''Attention''' : vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel. Les changements sur cette page se répercuteront sur l’apparence de l’interface utilisateur pour les autres utilisateurs de ce wiki.
+Pour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet dinternationalisation de MediaWiki.",
+'cascadeprotected' => 'Cette page est protégée car elle est incluse par {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l’option « protection en cascade » activée :
+$2',
 'namespaceprotected' => "Vous n'avez pas la permission de modifier les pages de l'espace de noms « '''$1''' ».",
 'customcssprotected' => "Vous n'avez pas la permission de modifier cette page de CSS, car elle contient les paramètres personnels d'un autre utilisateur.",
 'customjsprotected' => "Vous n'avez pas la permission de modifier cette page de JavaScript, car elle contient les paramètres personnels d'un autre utilisateur.",
@@ -846,13 +848,16 @@ N'oubliez pas de modifier [[Special:Preferences|vos préférences pour {{SITENAM
 'userlogin-resetpassword-link' => 'Réinitialiser le mot de passe',
 'helplogin-url' => 'Help:Connexion',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Aide à la connexion]]',
+'userlogin-loggedin' => 'Vous êtes déjà connecté en tant que {{GENDER:$1|$1}}.
+Utilisez le formulaire ci-dessous pour vous connecter avec un autre utilisateur.',
+'userlogin-createanother' => 'Créer un autre compte',
 'createacct-join' => 'Entrez vos informations ci-dessous.',
 'createacct-another-join' => 'Saisir les informations du nouveau compte ci-dessous.',
 'createacct-emailrequired' => 'Adresse de courriel',
 'createacct-emailoptional' => 'Adresse de courriel (facultative)',
 'createacct-email-ph' => 'Entrez votre adresse de courriel',
 'createacct-another-email-ph' => 'Saisir l’adresse de courriel',
-'createaccountmail' => "Utiliser un mot de passe aléatoire temporaire et l'envoyer à l'adresse de courriel spécifiée",
+'createaccountmail' => 'Utiliser un mot de passe aléatoire temporaire et l’envoyer à l’adresse de courriel spécifiée',
 'createacct-realname' => 'Nom réel (facultatif)',
 'createaccountreason' => 'Motif :',
 'createacct-reason' => 'Motif',
@@ -920,11 +925,11 @@ Entrez une adresse bien formatée ou laissez ce champ vide.',
 'emaildisabled' => 'Ce site ne peut pas envoyer de courriels.',
 'accountcreated' => 'Compte créé',
 'accountcreatedtext' => 'Le compte utilisateur pour [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|discussion]]) a été créé.',
-'createaccount-title' => "Création d'un compte pour {{SITENAME}}",
-'createaccount-text' => "Quelqu'un a créé un compte pour votre adresse de courriel sur {{SITENAME}} ($4) intitulé « $2 », avec le mot de passe « $3 ».
+'createaccount-title' => 'Création d’un compte pour {{SITENAME}}',
+'createaccount-text' => 'Quelqu’un a créé un compte pour votre adresse de courriel sur {{SITENAME}} ($4) intitulé « $2 », avec le mot de passe « $3 ».
 Vous devriez ouvrir une session et modifier dès à présent votre mot de passe.
 
-Ignorez ce message si ce compte a été créé par erreur.",
+Ignorez ce message si ce compte a été créé par erreur.',
 'usernamehasherror' => "Le nom d'utilisateur ne peut pas contenir des caractères de hachage",
 'login-throttled' => "Vous avez tenté un trop grand nombre de connexions dernièrement.
 Veuillez attendre $1 avant d'essayer à nouveau.",
@@ -988,15 +993,15 @@ Mot de passe temporaire : $2",
 'passwordreset-emailerror-capture' => "Un courriel de réinitialisation de mot de passe a été généré, qui est affiché ci-dessous, mais l'envoi à l'{{GENDER:$2|utilisateur}} a échoué : $1",
 
 # Special:ChangeEmail
-'changeemail' => "Changer l'adresse de courriel",
-'changeemail-header' => "Changer l'adresse de courriel du compte",
+'changeemail' => 'Changer l’adresse de courriel',
+'changeemail-header' => 'Changer l’adresse de courriel du compte',
 'changeemail-text' => 'Remplissez ce formulaire pour changer votre adresse de courriel. Vous devrez entrer votre mot de passe pour confirmer ce changement.',
 'changeemail-no-info' => 'Vous devez être connecté pour pouvoir accéder directement à cette page.',
 'changeemail-oldemail' => 'Adresse de courriel actuelle :',
 'changeemail-newemail' => 'Nouvelle adresse de courriel :',
 'changeemail-none' => '(aucune)',
 'changeemail-password' => 'Votre mot de passe sur {{SITENAME}} :',
-'changeemail-submit' => "Changer l'adresse de courriel",
+'changeemail-submit' => 'Changer l’adresse de courriel',
 'changeemail-cancel' => 'Annuler',
 
 # Special:ResetTokens
@@ -1051,7 +1056,7 @@ Si vous cliquez de nouveau sur le bouton « {{int:savearticle}} », la publicati
 Si vous cliquez de nouveau sur « {{int:Savearticle}} », votre modification sera enregistrée sans titre.",
 'summary-preview' => 'Aperçu du résumé :',
 'subject-preview' => 'Prévisualisation du sujet/titre :',
-'blockedtitle' => "L'utilisateur est bloqué.",
+'blockedtitle' => 'L’utilisateur est bloqué.',
 'blockedtext' => "'''Votre compte utilisateur ou votre adresse IP a été bloqué.'''
 
 Le blocage a été effectué par $1.
@@ -1062,7 +1067,7 @@ La raison invoquée est la suivante : ''$2''.
 * Compte bloqué : $7.
 
 Vous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour en discuter.
-Vous ne pouvez utiliser la fonction « {{MediaWiki:emailpage}} » que si une adresse de courriel valide est spécifiée dans vos [[Special:Preferences|préférences]] et que cette fonctionnalité n'a pas été bloquée.
+Vous ne pouvez utiliser la fonction « {{MediaWiki:emailpage}} » que si une adresse de courriel valide est spécifiée dans vos [[Special:Preferences|préférences]] et que si cette fonctionnalité n’a pas été bloquée.
 Votre adresse IP actuelle est $3 et votre identifiant de blocage est $5.
 Veuillez préciser ces indications dans toutes les requêtes que vous ferez.",
 'autoblockedtext' => "Votre adresse IP a été bloquée automatiquement car elle a été utilisée par un autre utilisateur, lui-même bloqué par $1.
@@ -1074,9 +1079,9 @@ La raison invoquée est :
 * Expiration du blocage : $6
 * Compte bloqué : $7
 
-Vous pouvez contacter $1 ou l'un des autres [[{{MediaWiki:Grouppage-sysop}}|administrateurs]] pour discuter de ce blocage.
+Vous pouvez contacter $1 ou lun des autres [[{{MediaWiki:Grouppage-sysop}}|administrateurs]] pour discuter de ce blocage.
 
-Notez que vous ne pourrez utiliser la fonctionnalité d'envoi de courriel que si vous avez une adresse de courriel validée dans vos [[Special:Preferences|préférences]] et que la fonctionnalité n'a pas été désactivée.
+Notez que vous ne pourrez utiliser la fonctionnalité d’envoi de courriel que si vous avez une adresse de courriel validée dans vos [[Special:Preferences|préférences]] et que si cette fonctionnalité n’a pas été désactivée.
 
 Votre adresse IP actuelle est $3, et le numéro de blocage est $5.
 Veuillez préciser ces indications dans toutes les requêtes que vous ferez.",
@@ -1111,8 +1116,8 @@ Cela survient en général en suivant un lien historique obsolète vers une page
 Vous pouvez trouver plus de détails dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].",
 'userpage-userdoesnotexist' => "Le compte utilisateur « <nowiki>$1</nowiki> » n'est pas enregistré. Veuillez vérifier que vous voulez créer cette page.",
 'userpage-userdoesnotexist-view' => "Le compte utilisateur « $1 » n'est pas enregistré.",
-'blocked-notice-logextract' => "Cet utilisateur est actuellement bloqué.
-La dernière entrée du journal des blocages est indiquée ci-dessous à titre d'information :",
+'blocked-notice-logextract' => 'Cet utilisateur est actuellement bloqué.
+La dernière entrée du journal des blocages est indiquée ci-dessous à titre d’information :',
 'clearyourcache' => "'''Note :''' après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
 * '''Firefox / Safari :''' Maintenez la touche ''Maj'' (''Shift'') en cliquant sur le bouton ''Actualiser'' ou pressez ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' sur un Mac) ;
 * '''Google Chrome :''' Appuyez sur ''Ctrl-Maj-R'' (''⌘-Shift-R'' sur un Mac) ;
@@ -1164,21 +1169,21 @@ Une solution de rechange a été trouvée pour vous permettre de modifier en tou
 'editingold' => "'''Attention : vous êtes en train de modifier une ancienne version de cette page.
 Si vous la publiez, toutes les modifications effectuées depuis cette version seront perdues.'''",
 'yourdiff' => 'Différences',
-'copyrightwarning' => "Toutes les contributions à {{SITENAME}} sont considérées comme publiées sous les termes de la $2 (voir $1 pour plus de détails). Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br />
-Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l'avez copié d'une source provenant du domaine public, ou d'une ressource libre. '''N'UTILISEZ PAS DE TRAVAUX SOUS DROIT D'AUTEUR SANS AUTORISATION EXPRESSE !'''",
-'copyrightwarning2' => "Toutes les contributions à {{SITENAME}} peuvent être modifiées ou supprimées par d'autres utilisateurs. Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br />
-Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l'avez copié d'une source provenant du domaine public, ou d'une ressource libre. (voir $1 pour plus de détails).
-'''N'UTILISEZ PAS DE TRAVAUX SOUS DROIT D'AUTEUR SANS AUTORISATION EXPRESSE !'''",
+'copyrightwarning' => "Toutes les contributions à {{SITENAME}} sont considérées comme publiées sous les termes de la $2 (voir $1 pour plus de détails). Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br 
+/>Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. '''N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !'''",
+'copyrightwarning2' => "Toutes les contributions à {{SITENAME}} peuvent être modifiées ou supprimées par d’autres utilisateurs. Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br 
+/>Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. (voir $1 pour plus de détails).
+'''N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !'''",
 'longpageerror' => "'''Erreur: Le texte que vous avez soumis fait {{PLURAL:$1|un Kio|$1 Kio}}, ce qui dépasse la limite fixée à {{PLURAL:$2|un Kio|$2 Kio}}.'''
 Il ne peut pas être sauvegardé.",
-'readonlywarning' => "'''AVERTISSEMENT : la base de données a été verrouillée pour des opérations de maintenance. Vous ne pouvez donc pas publier vos modifications pour l'instant.'''
-Vous pouvez copier et coller votre texte dans un fichier texte et l'enregistrer pour plus tard.
+'readonlywarning' => "'''AVERTISSEMENT : la base de données a été verrouillée pour des opérations de maintenance. Vous ne pouvez donc pas publier vos modifications pour linstant.'''
+Vous pouvez copier et coller votre texte dans un fichier texte et lenregistrer pour plus tard.
 
-L'administrateur ayant verrouillé la base de données a donné l'explication suivante: $1",
+L’administrateur ayant verrouillé la base de données a donné l’explication suivante : $1",
 'protectedpagewarning' => "'''AVERTISSEMENT : cette page est protégée. Seuls les utilisateurs ayant le statut d'administrateur peuvent la modifier.'''<br />
 La dernière entrée du journal est affichée ci-dessous pour référence :",
 'semiprotectedpagewarning' => "'''Note :''' Cette page a été protégée de telle façon que seuls les contributeurs enregistrés puissent la modifier. La dernière entrée du journal est affichée ci-dessous pour référence :",
-'cascadeprotectedwarning' => "'''ATTENTION :''' Cette page a été protégée de manière à ce que seuls les administrateurs puissent l'éditer. Cette protection est héritée par son inclusion par {{PLURAL:$1|la page protégée suivante, qui a|les pages protégées suivantes, qui ont}} la « protection en cascade » activée :",
+'cascadeprotectedwarning' => "'''ATTENTION :''' Cette page a été protégée de manière à ce que seuls les administrateurs puissent la modifier. Cette protection est héritée par son inclusion par {{PLURAL:$1|la page protégée suivante, qui a|les pages protégées suivantes, qui ont}} la « protection en cascade » activée :",
 'titleprotectedwarning' => "'''ATTENTION : Cette page a été protégée de telle manière que des [[Special:ListGroupRights|droits spécifiques]] sont requis pour pouvoir la créer.''' La dernière entrée du journal est affichée ci-dessous pour référence :",
 'templatesused' => '{{PLURAL:$1|Modèle utilisé|Modèles utilisés}} par cette page :',
 'templatesusedpreview' => '{{PLURAL:$1|Modèle utilisé|Modèles utilisés}} dans cette prévisualisation :',
@@ -1210,9 +1215,9 @@ Il semble qu'elle ait été supprimée.",
 'edit-already-exists' => "La nouvelle page n'a pas pu être créée.
 Elle existe déjà.",
 'defaultmessagetext' => 'Message par défaut',
-'content-failed-to-parse' => "Échec de l'analyse du contenu de $2 pour le modèle $1: $3",
+'content-failed-to-parse' => 'Échec de l’analyse syntaxique du contenu de $2 pour le modèle $1: $3',
 'invalid-content-data' => 'Données du contenu non valides',
-'content-not-allowed-here' => 'Le contenu "$1" n\'est pas autorisé sur la page [[$2]]',
+'content-not-allowed-here' => 'Le contenu « $1 » n’est pas autorisé sur la page [[$2]]',
 'editwarning-warning' => 'Quitter cette page vous fera perdre toutes les modifications que vous avez faites.
 Si vous êtes connecté, vous pouvez désactiver cet avertissement dans la section « Modification » de vos préférences.',
 
@@ -1771,8 +1776,8 @@ Cette information sera publique.',
 'action-block' => 'bloquer en écriture cet utilisateur',
 'action-protect' => 'modifier les niveaux de protection pour cette page',
 'action-rollback' => 'annuler rapidement les modifications du dernier utilisateur qui a modifié une page donnée',
-'action-import' => "importer cette page à partir d'un autre wiki",
-'action-importupload' => "importer cette page à partir d'un fichier",
+'action-import' => 'importer des pages depuis un autre wiki',
+'action-importupload' => 'importer des pages depuis un fichier téléchargé',
 'action-patrol' => 'marquer la modification des autres comme relue',
 'action-autopatrol' => 'avoir votre modification marquée comme relue',
 'action-unwatchedpages' => 'voir la liste des pages non suivies',
@@ -1986,29 +1991,29 @@ Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]
 # File backend
 'backend-fail-stream' => 'Impossible de lire le fichier $1.',
 'backend-fail-backup' => 'Impossible de sauvegarder le fichier $1.',
-'backend-fail-notexists' => "Le fichier $1 n'existe pas.",
-'backend-fail-hashes' => "Impossible d'obtenir les hachages du fichier pour comparaison.",
+'backend-fail-notexists' => 'Le fichier $1 n’existe pas.',
+'backend-fail-hashes' => 'Impossible d’obtenir les hachages du fichier pour comparaison.',
 'backend-fail-notsame' => 'Un fichier différent existe déjà pour $1 .',
-'backend-fail-invalidpath' => "$1 n'est pas un chemin de stockage valide.",
+'backend-fail-invalidpath' => '$1 n’est pas un chemin de stockage valide.',
 'backend-fail-delete' => 'Impossible de supprimer le fichier $1.',
 'backend-fail-describe' => 'Impossible de modifier les métadonnées du fichier "$1".',
 'backend-fail-alreadyexists' => 'Le fichier $1 existe déjà.',
 'backend-fail-store' => 'Impossible de stocker le fichier $1 en $2.',
 'backend-fail-copy' => 'Impossible de copier le fichier $1 en $2.',
 'backend-fail-move' => 'Impossible de déplacer le fichier $1 en $2.',
-'backend-fail-opentemp' => "Impossible d'ouvrir le fichier temporaire.",
-'backend-fail-writetemp' => "Impossible d'écrire dans le fichier temporaire.",
+'backend-fail-opentemp' => 'Impossible d’ouvrir le fichier temporaire.',
+'backend-fail-writetemp' => 'Impossible d’écrire dans le fichier temporaire.',
 'backend-fail-closetemp' => 'Impossible de fermer le fichier temporaire.',
 'backend-fail-read' => 'Impossible de lire le fichier $1.',
-'backend-fail-create' => "Impossible d'écrire le fichier $1.",
-'backend-fail-maxsize' => "Impossible d'écrire le fichier $1 parce qu'il est plus grand {{PLURAL:$2|qu'un octet|que $2 octets}}.",
+'backend-fail-create' => 'Impossible d’écrire le fichier $1.',
+'backend-fail-maxsize' => 'Impossible d’écrire le fichier $1 parce qu’il est plus grand {{PLURAL:$2|qu’un octet|que $2 octets}}.',
 'backend-fail-readonly' => 'Le support de stockage "$1" est actuellement en lecture seule. La raison indiquée est: "$2"',
 'backend-fail-synced' => 'Le fichier "$1" est dans un état incohérent dans les supports de stockage internes',
 'backend-fail-connect' => 'Impossible de se connecter au support de stockage "$1".',
-'backend-fail-internal' => 'Une erreur inconnue s\'est produite dans le support de stockage "$1".',
+'backend-fail-internal' => 'Une erreur inconnue sest produite dans le support de stockage "$1".',
 'backend-fail-contenttype' => 'Impossible de déterminer le type de contenu du fichier à stocker en "$1".',
 'backend-fail-batchsize' => 'Le support de stockage a fourni un lot de $1 {{PLURAL:$1|opération|opérations}} de fichier; la limite est $2 {{PLURAL:$2|opération|opérations}}.',
-'backend-fail-usable' => "Impossible de lire ou d'écrire le fichier « $1 » en raison de droits insuffisants ou répertoires/conteneurs manquants.",
+'backend-fail-usable' => 'Impossible de lire ou d’écrire le fichier « $1 » en raison de droits insuffisants ou répertoires/conteneurs manquants.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Impossible de se connecter à la base de données du journal pour le terminal de stockage "$1".',
@@ -2311,6 +2316,7 @@ Les entrées <del>barrées</del> ont été résolues.',
 'listusers' => 'Liste des utilisateurs',
 'listusers-editsonly' => 'Ne montrer que les utilisateurs ayant au moins une contribution',
 'listusers-creationsort' => 'Trier par date de création',
+'listusers-desc' => 'Trier en ordre descendant',
 'usereditcount' => '$1 modification{{PLURAL:$1||s}}',
 'usercreated' => '{{GENDER:$3|Créé}} le $1 à $2',
 'newpages' => 'Nouvelles pages',
@@ -2335,8 +2341,8 @@ Veuillez noter que d'autres sites peuvent avoir un lien direct vers un fichier,
 'booksources-search-legend' => 'Rechercher parmi des ouvrages de référence',
 'booksources-isbn' => 'ISBN :',
 'booksources-go' => 'Lister',
-'booksources-text' => "Voici une liste indicative et non exclusive de liens vers d'autres sites vendant des livres neufs et d'occasion et sur lesquels vous trouverez peut-être des informations sur les ouvrages que vous cherchez :",
-'booksources-invalid-isbn' => "L'ISBN donné ne semble pas être correct ; vérifiez si vous avez fait une erreur en copiant la source originale.",
+'booksources-text' => 'Voici une liste indicative de liens vers d’autres sites vendant des livres neufs et d’occasion et sur lesquels vous trouverez peut-être des informations sur les ouvrages que vous cherchez :',
+'booksources-invalid-isbn' => 'L’ISBN donné ne semble pas être correct ; vérifiez si vous avez fait une erreur en copiant la source originale.',
 
 # Special:Log
 'specialloguserlabel' => 'Auteur :',
@@ -2368,7 +2374,7 @@ Vous pouvez personnaliser l'affichage en sélectionnant le type de journal, le n
 'allpages-hide-redirects' => 'Masquer les redirections',
 
 # SpecialCachedPage
-'cachedspecial-viewing-cached-ttl' => "Vous visualisez une version de cette page mise en cache, qui peut être dater d'au plus $1.",
+'cachedspecial-viewing-cached-ttl' => 'Vous visualisez une version de cette page mise en cache, qui peut être datée d’au plus $1.',
 'cachedspecial-viewing-cached-ts' => 'Vous visualisez une version de cette page mise en cache, qui pourrait ne pas être complètement à jour.',
 'cachedspecial-refresh-now' => 'Voir le plus récent.',
 
@@ -2559,7 +2565,7 @@ Retour et assistance :
 'delete-confirm' => 'Supprimer « $1 »',
 'delete-legend' => 'Supprimer',
 'historywarning' => "'''Attention :''' la page que vous êtes sur le point de supprimer a un historique avec environ $1 {{PLURAL:$1|version|versions}} :",
-'confirmdeletetext' => "Vous êtes sur le point de supprimer une page ou un fichier, ainsi que toutes ses versions antérieures historisées. Veuillez confirmer que c'est bien là ce que vous voulez faire, que vous en comprenez les conséquences et que vous faites ceci en accord avec les [[{{MediaWiki:Policy-url}}|règles internes]].",
+'confirmdeletetext' => 'Vous êtes sur le point de supprimer une page ou un fichier, ainsi que toutes ses versions antérieures historisées. Veuillez confirmer que c’est bien là ce que vous voulez faire, que vous en comprenez les conséquences et que vous faites ceci en accord avec les [[{{MediaWiki:Policy-url}}|règles internes]].',
 'actioncomplete' => 'Action effectuée',
 'actionfailed' => "L'action a échoué",
 'deletedtext' => '« $1 » a été supprimée.
@@ -2597,7 +2603,7 @@ quelqu'un d'autre a déjà modifié ou révoqué la page.
 La dernière modification de la page a été effectuée par [[User:$3|$3]] ([[User talk:$3|Discuter]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
 'editcomment' => "Le résumé de la modification était : « ''$1'' ».",
 'revertpage' => 'Révocation des modifications de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]]) vers la dernière version de [[User:$1|$1]]',
-'revertpage-nouser' => 'Révocation des modifications par un utilisateur masqué à la dernière version par [[User:$1|$1]]',
+'revertpage-nouser' => 'Révocation des modifications par un utilisateur masqué à la dernière version par {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Révocation des modifications effectuées par $1 ;
 rétablissement de la dernière version par $2.',
 
@@ -2739,10 +2745,10 @@ $1',
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => "Contributions de l'{{GENDER:$1|utilisateur|utilisatrice}}",
-'contributions-title' => "Liste des contributions de l'utilisateur $1",
+'contributions' => 'Contributions de l’{{GENDER:$1|utilisateur|utilisatrice}}',
+'contributions-title' => 'Liste des contributions de l’utilisat{{GENDER:$1|eur|rice|eur}} $1',
 'mycontris' => 'Contributions',
-'contribsub2' => 'Pour $1 ($2)',
+'contribsub2' => 'Pour {{GENDER:$3|$1}} ($2)',
 'nocontribs' => "Aucune modification correspondant à ces critères n'a été trouvée.",
 'uctop' => '(actuel)',
 'month' => 'À partir du mois (et précédents) :',
@@ -2786,14 +2792,14 @@ La dernière entrée du journal des blocages est indiquée ci-dessous à titre d
 
 # Block/unblock
 'autoblockid' => 'Blocage automatique #$1',
-'block' => "Bloquer l'utilisateur",
+'block' => 'Bloquer l’utilisateur',
 'unblock' => "Débloquer l'utilisateur",
-'blockip' => "Bloquer l'utilisateur",
-'blockip-title' => "Bloquer l'utilisateur",
-'blockip-legend' => "Bloquer l'utilisateur",
-'blockiptext' => "Utilisez le formulaire ci-dessous pour bloquer l'accès aux modifications faites à partir d'une adresse IP spécifique ou d'un nom d'utilisateur.
+'blockip' => 'Bloquer l’utilisateur',
+'blockip-title' => 'Bloquer l’utilisateur',
+'blockip-legend' => 'Bloquer l’utilisateur',
+'blockiptext' => 'Utilisez le formulaire ci-dessous pour bloquer les tentatives de modification faites à partir d’une adresse IP spécifique ou d’un nom d’utilisateur.
 Une telle mesure ne devrait être prise que pour prévenir le vandalisme et en accord avec les [[{{MediaWiki:Policy-url}}|règles internes]].
-Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont été vandalisées).",
+Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont été vandalisées).',
 'ipadressorusername' => "Adresse IP ou nom d'utilisateur :",
 'ipbexpiry' => 'Durée avant expiration :',
 'ipbreason' => 'Motif :',
@@ -2842,11 +2848,11 @@ Consultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.'
 'ipblocklist-legend' => 'Chercher un utilisateur bloqué',
 'blocklist-userblocks' => 'Masquer les blocages de comptes',
 'blocklist-tempblocks' => 'Masquer les blocages temporaires',
-'blocklist-addressblocks' => "Masquer les blocages d'adresses IP uniques",
+'blocklist-addressblocks' => 'Masquer les blocages d’adresses IP uniques',
 'blocklist-rangeblocks' => 'Masquer les blocs de portée',
 'blocklist-timestamp' => 'Date et heure',
 'blocklist-target' => 'Cible',
-'blocklist-expiry' => "Date d'expiration",
+'blocklist-expiry' => 'Date d’expiration',
 'blocklist-by' => 'Administrateur ayant effectué le blocage',
 'blocklist-params' => 'Paramètres de blocage',
 'blocklist-reason' => 'Motif',
@@ -2874,9 +2880,9 @@ Le motif fourni pour le blocage de $1 est : « $2 ».',
 'blocklog-showsuppresslog' => 'Cet utilisateur a été bloqué et caché précédemment. Le journal des suppressions est disponible ci-dessous :',
 'blocklogentry' => 'a bloqué [[$1]] ; expiration : $2 $3',
 'reblock-logentry' => 'a modifié les paramètres du blocage de [[$1]] avec une expiration au $2 $3',
-'blocklogtext' => "Ceci est le journal des actions de blocages et déblocages d'utilisateurs.
+'blocklogtext' => 'Ceci est le journal des actions de blocage et déblocage d’utilisateurs.
 Les adresses IP automatiquement bloquées ne sont pas listées.
-Consultez la [[Special:BlockList|liste des blocages]] pour voir les bannissements et blocages effectivement en cours.",
+Consultez la [[Special:BlockList|liste des blocages]] pour voir les bannissements et blocages effectivement en cours.',
 'unblocklogentry' => 'a débloqué $1',
 'block-log-flags-anononly' => 'utilisateurs anonymes seulement',
 'block-log-flags-nocreate' => 'création de compte interdite',
@@ -2884,7 +2890,7 @@ Consultez la [[Special:BlockList|liste des blocages]] pour voir les bannissement
 'block-log-flags-noemail' => 'envoi de courriel interdit',
 'block-log-flags-nousertalk' => 'ne peut modifier sa propre page de discussion',
 'block-log-flags-angry-autoblock' => 'autoblocage amélioré activé',
-'block-log-flags-hiddenname' => "nom d'utilisateur caché",
+'block-log-flags-hiddenname' => 'nom d’utilisateur masqué',
 'range_block_disabled' => 'Le droit administrateur de créer des blocages de plages IP est désactivé.',
 'ipb_expiry_invalid' => "Durée d'expiration incorrecte.",
 'ipb_expiry_temp' => "Les blocages de noms d'utilisateurs cachés doivent être permanents.",
@@ -2909,8 +2915,8 @@ Veuillez contacter votre fournisseur d'accès Internet ou votre support techniqu
 'sorbs_create_account_reason' => 'Votre adresse IP est listée comme mandataire ouvert dans le DNSBL utilisé par {{SITENAME}}.
 Vous ne pouvez pas créer un compte.',
 'xffblockreason' => "Une adresse IP dans l'en-tête X-Forwarded-For, soit la vôtre ou celle d'un serveur proxy que vous utilisez, a été bloquée. La raison du blocage initial est : $1",
-'cant-block-while-blocked' => "Vous ne pouvez pas bloquer d'autres utilisateurs tant que vous êtes bloqué{{GENDER:||e|(e)}}.",
-'cant-see-hidden-user' => "L'utilisateur que vous tentez de bloquer a déjà été bloqué et masqué. N'ayant pas le droit ''hideuser'', vous ne pouvez pas voir ou modifier le blocage de cet utilisateur.",
+'cant-block-while-blocked' => 'Vous ne pouvez pas bloquer d’autres utilisateurs tant que vous êtes bloqué{{GENDER:||e|(e)}}.',
+'cant-see-hidden-user' => "L’utilisateur que vous tentez de bloquer a déjà été bloqué et masqué. N’ayant pas le droit ''hideuser'', vous ne pouvez pas voir ou modifier le blocage de cet utilisateur.",
 'ipbblocked' => "Vous ne pouvez pas bloquer ou débloquer d'autres utilisateurs, parce que vous êtes vous-même bloqué",
 'ipbnounblockself' => "Vous n'êtes pas autorisé à vous débloquer vous-même",
 
@@ -2966,8 +2972,8 @@ Dans ces cas-là, vous devrez renommer ou fusionner cette page de discussion man
 'movenologintext' => "Pour pouvoir renommer une page, vous devez être [[Special:UserLogin|identifié{{GENDER:||e|(e)}}]] avec un compte utilisateur enregistré et d'ancienneté suffisante.",
 'movenotallowed' => "Vous n'avez pas la permission de renommer les pages.",
 'movenotallowedfile' => "Vous n'avez pas la permission de renommer les fichiers.",
-'cant-move-user-page' => "Vous n'avez pas la permission de renommer les pages principales d'utilisateurs (en dehors de leurs sous-pages).",
-'cant-move-to-user-page' => "Vous n'avez pas la permission de renommer une page vers une page utilisateur (à l'exception d'une sous-page).",
+'cant-move-user-page' => 'Vous n’avez pas la permission de renommer les pages principales d’utilisateurs.',
+'cant-move-to-user-page' => 'Vous n’avez pas la permission de renommer une page vers une page utilisateur (à l’exception d’une sous-page).',
 'newtitle' => 'Vers le nouveau titre :',
 'move-watch' => 'Suivre les pages originale et nouvelle',
 'movepagebtn' => 'Renommer la page',
@@ -3216,6 +3222,7 @@ Vous pouvez toutefois en visualiser la source.',
 'tooltip-undo' => '« Annuler » rétablit la modification précédente et ouvre la fenêtre de modification en mode prévisualisation. Il est possible d’ajouter une raison dans le résumé.',
 'tooltip-preferences-save' => 'Sauvegarder les préférences',
 'tooltip-summary' => 'Entrez un bref résumé',
+'tooltip-iwiki' => '$1 — $2',
 
 # Stylesheets
 'common.css' => '/* Le CSS placé ici sera appliqué à tous les habillages. */',
@@ -3413,10 +3420,10 @@ Si vous l'exécutez, votre système peut être compromis.",
 'yesterday-at' => 'Hier à $1',
 
 # Bad image list
-'bad_image_list' => "Le format est le suivant :
+'bad_image_list' => 'Le format est le suivant :
 
-Seules les listes d'énumération (commençant par *) sont prises en compte. Le premier lien d'une ligne doit être celui d'une mauvaise image.
-Les autres liens sur la même ligne sont considérés comme des exceptions, par exemple des pages sur lesquelles l'image peut apparaître.",
+Seules les listes d’énumération (commençant par *) sont prises en compte. Le premier lien d’une ligne doit être celui d’une mauvaise image.
+Les autres liens sur la même ligne sont considérés comme des exceptions, par exemple des pages sur lesquelles l’image peut apparaître.',
 
 # Metadata
 'metadata' => 'Métadonnées',
@@ -3641,6 +3648,9 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-planarconfiguration-1' => 'Données contiguës',
 'exif-planarconfiguration-2' => 'Données séparées',
 
+'exif-xyresolution-i' => '$1 ppp',
+'exif-xyresolution-c' => '$1 p/cm',
+
 'exif-colorspace-65535' => 'Non calibré',
 
 'exif-componentsconfiguration-0' => "N'existe pas",
@@ -3841,8 +3851,8 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'limitall' => 'tous',
 
 # Email address confirmation
-'confirmemail' => "Confirmer l'adresse de courriel",
-'confirmemail_noemail' => "Vous n'avez pas défini une adresse de courriel valide dans vos [[Special:Preferences|préférences]].",
+'confirmemail' => 'Confirmer l’adresse de courriel',
+'confirmemail_noemail' => 'Vous n’avez pas défini une adresse de courriel valide dans vos [[Special:Preferences|préférences]].',
 'confirmemail_text' => 'Ce wiki nécessite la vérification de votre adresse de courriel avant de pouvoir utiliser toute fonction de messagerie.
 Utilisez le bouton ci-dessous pour envoyer un courriel de confirmation à votre adresse.
 Le courriel inclura un lien comportant un code à usage unique et limité dans le temps ;
@@ -3851,39 +3861,39 @@ chargez ce lien dans votre navigateur pour confirmer que votre adresse de courri
 si vous venez de créer votre compte, veuillez attendre quelques minutes que le courriel arrive avant de demander un nouveau code.',
 'confirmemail_send' => 'Envoyer un code de confirmation',
 'confirmemail_sent' => 'Courriel de confirmation envoyé',
-'confirmemail_oncreate' => "Un code de confirmation a été envoyé à votre adresse de courriel.
-Ce code n'est pas requis pour vous identifier sur ce wiki, mais vous devrez le fournir pour activer toute fonction de messagerie.",
-'confirmemail_sendfailed' => "{{SITENAME}} n'a pas pu vous envoyer le courriel de confirmation.
+'confirmemail_oncreate' => 'Un code de confirmation a été envoyé à votre adresse de courriel.
+Ce code n’est pas requis pour vous identifier sur ce wiki, mais vous devrez le fournir pour activer toute fonction de messagerie.',
+'confirmemail_sendfailed' => '{{SITENAME}} n’a pas pu vous envoyer le courriel de confirmation.
 Veuillez vérifiez que votre adresse de courriel ne comprend aucun caractère incorrect.
 
-Le programme d'envoi de courriel a retourné l'indication suivante : $1",
+Le programme d’envoi de courriel a retourné l’indication suivante : $1',
 'confirmemail_invalid' => 'Code de confirmation incorrect.
 Celui-ci a peut-être expiré.',
 'confirmemail_needlogin' => 'Vous devez vous $1 pour confirmer votre adresse de courriel.',
 'confirmemail_success' => 'Votre adresse de courriel a été confirmée.
 Vous pouvez maintenant vous [[Special:UserLogin|{{MediaWiki:Loginreqlink}}]] et profiter du wiki.',
 'confirmemail_loggedin' => 'Votre adresse de courriel est maintenant confirmée.',
-'confirmemail_error' => "Un problème est survenu lors de l'enregistrement de votre confirmation.",
-'confirmemail_subject' => "Confirmation d'adresse de courriel pour {{SITENAME}}",
-'confirmemail_body' => "Quelqu'un, probablement vous, à partir de l'adresse IP $1,
+'confirmemail_error' => 'Un problème est survenu lors de l’enregistrement de votre confirmation.',
+'confirmemail_subject' => 'Confirmation d’adresse de courriel pour {{SITENAME}}',
+'confirmemail_body' => 'Quelqu’un, probablement vous, à partir de l’adresse IP $1,
 a enregistré un compte « $2 » avec cette adresse de courriel
 sur le site {{SITENAME}}.
 
 Pour confirmer que ce compte vous appartient vraiment et afin
-d'activer les fonctions de messagerie sur {{SITENAME}},
+dactiver les fonctions de messagerie sur {{SITENAME}},
 veuillez suivre ce lien dans votre navigateur :
 
 $3
 
-Si vous n'avez *pas* enregistré ce compte, n'ouvrez pas ce lien ;
-vous pouvez suivre l'autre lien ci-dessous pour annuler la
+Si vous n’avez *pas* enregistré ce compte, n’ouvrez pas ce lien ;
+vous pouvez suivre lautre lien ci-dessous pour annuler la
 confirmation de votre adresse courriel :
 
 $5
 
-Ce code de confirmation expirera le $4.",
-'confirmemail_body_changed' => "Quelqu'un, probablement vous, à partir de l'adresse IP $1,
-a modifié l'adresse de courriel associée au compte « $2 » de {{SITENAME}}
+Ce code de confirmation expirera le $4.',
+'confirmemail_body_changed' => 'Quelqu’un, probablement vous, à partir de l’adresse IP $1,
+a modifié ladresse de courriel associée au compte « $2 » de {{SITENAME}}
 en cette adresse.
 
 Pour confirmer que ce compte vous appartient vraiment et afin
@@ -3892,13 +3902,13 @@ veuillez suivre ce lien dans votre navigateur :
 
 $3
 
-Si ce compte ne vous appartient *pas*, n'ouvrez pas ce lien ;
-vous pouvez suivre l'autre lien ci-dessous pour annuler la
+Si ce compte ne vous appartient *pas*, nouvrez pas ce lien ;
+vous pouvez suivre lautre lien ci-dessous pour annuler la
 confirmation de votre adresse courriel :
 
 $5
 
-Ce code de confirmation expirera le $4.",
+Ce code de confirmation expirera le $4.',
 'confirmemail_body_set' => 'Quelqu’un, probablement vous, depuis l’adresse IP $1, a modifié l’adresse de courriel du compte « $2 » en celle-ci sur {{SITENAME}}.
 
 Pour confirmer que ce compte vous appartient et réactiver les fonctions de courriel sur {{SITENAME}}, ouvrez ce lien dans votre navigateur Web :
@@ -3910,7 +3920,7 @@ Ce code de confirmation expirera le $4.
 Si le compte ne vous appartient *pas*, suivez plutôt ce lien pour annuler la confirmation de l’adresse de courriel :
 
 $5',
-'confirmemail_invalidated' => "Confirmation de l'adresse courriel annulée",
+'confirmemail_invalidated' => 'Confirmation de l’adresse courriel annulée',
 'invalidateemail' => "Annuler la confirmation de l'adresse de courriel",
 
 # Scary transclusion
@@ -3921,16 +3931,16 @@ $5',
 
 # Delete conflict
 'deletedwhileediting' => "'''Attention''' : cette page a été supprimée après que vous avez commencé à la modifier !",
-'confirmrecreate' => "L'utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à l'éditer, pour le motif suivant :
+'confirmrecreate' => "L’utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à la modifier, pour le motif suivant :
 : ''$2''
 Veuillez confirmer que vous désirez réellement recréer cette page.",
-'confirmrecreate-noreason' => "L'utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à l'éditer. Veuillez confirmer que vous désirez réellement recréer cette page.",
+'confirmrecreate-noreason' => 'L’utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à la modifier. Veuillez confirmer que vous désirez réellement recréer cette page.',
 'recreate' => 'Recréer',
 
 # action=purge
 'confirm_purge_button' => 'Confirmer',
 'confirm-purge-top' => 'Voulez-vous rafraîchir cette page (purger le cache) ?',
-'confirm-purge-bottom' => "Purger une page l'efface du cache de rendu et force sa dernière version à être régénérée et affichée.",
+'confirm-purge-bottom' => 'Purger une page l’efface du cache de rendu et force sa dernière version à être régénérée et affichée.',
 
 # action=watch/unwatch
 'confirm-watch-button' => 'Valider',
@@ -4178,7 +4188,10 @@ Vous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licen
 'tags-tag' => 'Nom de la balise',
 'tags-display-header' => 'Apparence dans les listes de modifications',
 'tags-description-header' => 'Description complète de la balise',
+'tags-active-header' => 'Actif ?',
 'tags-hitcount-header' => 'Modifications balisées',
+'tags-active-yes' => 'Oui',
+'tags-active-no' => 'Non',
 'tags-edit' => 'modifier',
 'tags-hitcount' => '$1 modification{{PLURAL:$1||s}}',
 
@@ -4190,9 +4203,9 @@ Vous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licen
 'compare-rev1' => 'Version 1',
 'compare-rev2' => 'Version 2',
 'compare-submit' => 'Comparer',
-'compare-invalid-title' => "Le titre que vous avez spécifié n'est pas valide.",
-'compare-title-not-exists' => "Le titre que vous avez spécifié n'existe pas.",
-'compare-revision-not-exists' => "La révision que vous avez spécifié n'existe pas.",
+'compare-invalid-title' => 'Le titre que vous avez spécifié n’est pas valide.',
+'compare-title-not-exists' => 'Le titre que vous avez spécifié n’existe pas.',
+'compare-revision-not-exists' => 'La révision que vous avez spécifiée n’existe pas.',
 
 # Database error messages
 'dberr-header' => 'Ce wiki a un problème',
@@ -4344,9 +4357,9 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'limitreport-ppvisitednodes' => 'Nombre de nœuds de préprocesseur visités',
 'limitreport-ppgeneratednodes' => 'Nombre de nœuds de préprocesseur générés',
 'limitreport-postexpandincludesize' => 'Taille d’inclusion après expansion',
-'limitreport-postexpandincludesize-value' => '$1/$2 octets',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|octet|octets}}',
 'limitreport-templateargumentsize' => 'Taille de l’argument du modèle',
-'limitreport-templateargumentsize-value' => '$1/$2 octets',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|octet|octets}}',
 'limitreport-expansiondepth' => 'Plus grande profondeur d’expansion',
 'limitreport-expensivefunctioncount' => 'Nombre de fonctions d’analyse coûteuses',
 
index e7c49b0..1cd5667 100644 (file)
@@ -501,7 +501,7 @@ $1',
 # 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).
 'aboutsite' => 'Acerca de {{SITENAME}}',
 'aboutpage' => 'Project:Acerca de',
-'copyright' => 'Todo o texto está dispoñible baixo $1.',
+'copyright' => 'Todo o contido está dispoñible baixo a licenza $1, agás que se indique o contrario.',
 'copyrightpage' => '{{ns:project}}:Dereitos de autor',
 'currentevents' => 'Actualidade',
 'currentevents-url' => 'Project:Actualidade',
@@ -714,6 +714,9 @@ Non esqueza personalizar as súas [[Special:Preferences|preferencias de {{SITENA
 'userlogin-resetpassword-link' => 'Restablecer o seu contrasinal',
 'helplogin-url' => 'Help:Rexistro',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Axuda co rexistro]]',
+'userlogin-loggedin' => 'Xa accedeu ao sistema como {{GENDER:$1|$1}}.
+Utilice o formulario inferior para acceder como outro usuario.',
+'userlogin-createanother' => 'Crear outra conta',
 'createacct-join' => 'Insira a súa información embaixo.',
 'createacct-another-join' => 'Insira a información da nova conta embaixo.',
 'createacct-emailrequired' => 'Enderezo de correo electrónico',
@@ -1672,8 +1675,8 @@ Se escolle dalo utilizarase para atribuírlle o seu traballo.',
 'action-block' => 'bloquear o usuario fronte á edición',
 'action-protect' => 'cambiar o nivel de protección desta páxina',
 'action-rollback' => 'reverter rapidamente as edicións do último usuario que editou unha páxina en particular',
-'action-import' => 'importar esta páxina doutro wiki',
-'action-importupload' => 'importar esta páxina da carga dun ficheiro',
+'action-import' => 'importar páxinas doutro wiki',
+'action-importupload' => 'importar páxinas desde un ficheiro cargado',
 'action-patrol' => 'marcar a edición doutro como patrullada',
 'action-autopatrol' => 'marcar a súa edición como patrullada',
 'action-unwatchedpages' => 'ver a lista das páxinas non vixiadas',
@@ -2214,11 +2217,12 @@ As entradas <del>riscadas</del> xa foron resoltas.',
 'protectedpagestext' => 'As seguintes páxinas están protexidas fronte á edición ou traslado',
 'protectedpagesempty' => 'Actualmente non hai ningunha páxina protexida con eses parámetros.',
 'protectedtitles' => 'Títulos protexidos',
-'protectedtitlestext' => 'Os seguintes títulos están protexidos da creación',
+'protectedtitlestext' => 'Os seguintes títulos están protexidos fronte á creación',
 'protectedtitlesempty' => 'Actualmente non hai ningún título protexido con eses parámetros.',
 'listusers' => 'Lista de usuarios',
 'listusers-editsonly' => 'Mostrar só os usuarios con edicións',
 'listusers-creationsort' => 'Ordenar por data de creación',
+'listusers-desc' => 'Ordenar de xeito descendente',
 'usereditcount' => '$1 {{PLURAL:$1|edición|edicións}}',
 'usercreated' => '{{GENDER:$3|Creado|Creada}} o $1 ás $2',
 'newpages' => 'Páxinas novas',
@@ -2505,7 +2509,7 @@ proceda con coidado.',
 A última edición fíxoa [[User:$3|$3]] ([[User talk:$3|conversa]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "O resumo de edición foi: \"''\$1''\".",
 'revertpage' => 'Desfixéronse as edicións de [[Special:Contributions/$2|$2]] ([[User talk:$2|conversa]]); cambiado á última versión feita por [[User:$1|$1]]',
-'revertpage-nouser' => 'Desfixéronse as edicións dun usuario agochado; cambiado á última versión feita por [[User:$1|$1]]',
+'revertpage-nouser' => 'Desfixéronse as edicións dun usuario agochado; cambiado á última versión feita por {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Desfixéronse as edicións de $1;
 volveuse á última edición, feita por $2.',
 
@@ -2649,7 +2653,7 @@ $1',
 'contributions' => 'Contribucións {{GENDER:$1|do usuario|da usuaria}}',
 'contributions-title' => 'Contribucións de $1',
 'mycontris' => 'Contribucións',
-'contribsub2' => 'De $1 ($2)',
+'contribsub2' => 'De {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Non se deron atopado cambios con eses criterios.',
 'uctop' => '(última revisión)',
 'month' => 'Desde o mes de (e anteriores):',
@@ -4015,7 +4019,10 @@ Debería recibir [{{SERVER}}{{SCRIPTPATH}}/COPYING unha copia da licenza públic
 'tags-tag' => 'Nome da etiqueta',
 'tags-display-header' => 'Aparición nas listas de cambios',
 'tags-description-header' => 'Descrición completa do significado',
+'tags-active-header' => 'Activa?',
 'tags-hitcount-header' => 'Edicións etiquetadas',
+'tags-active-yes' => 'Si',
+'tags-active-no' => 'Non',
 'tags-edit' => 'editar',
 'tags-hitcount' => '$1 {{PLURAL:$1|modificación|modificacións}}',
 
@@ -4181,9 +4188,9 @@ En caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario
 'limitreport-ppvisitednodes' => 'Número de nodos do preprocesador visitados',
 'limitreport-ppgeneratednodes' => 'Número de nodos do preprocesador xerados',
 'limitreport-postexpandincludesize' => 'Tamaño de inclusión logo da expansión',
-'limitreport-postexpandincludesize-value' => '$1/$2 bytes',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
 'limitreport-templateargumentsize' => 'Tamaño dos argumentos do modelo',
-'limitreport-templateargumentsize-value' => '$1/$2 bytes',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
 'limitreport-expansiondepth' => 'Máxima profundidade de expansión',
 'limitreport-expensivefunctioncount' => 'Número de funcións de análise custosas',
 
index daf33df..1398614 100644 (file)
@@ -158,14 +158,14 @@ $messages = array(
 'tog-hidepatrolled' => 'હાલના સલામતી માટે કરવામાં આવેલાં થયેલા ફેરફારો છુપાવો.',
 'tog-newpageshidepatrolled' => 'નવાં પાનાંની યાદીમાંથી દેખરેખ હેઠળનાં પાનાં છુપાવો',
 'tog-extendwatchlist' => 'ધ્યાનસૂચિને વિસ્તૃત કરો જેથી,ફક્ત તાજેતરનાજ નહીં, બધા આનુષાંગિક ફેરફારો જોઇ શકાય',
-'tog-usenewrc' => 'તાજા ફેરફારોમાં અને ધ્યાનસૂચિમાં ફેરફારોને પાનાં અનુસાર જૂથમાં ગોઠવો (જાવાસ્ક્રીપ્ટ જરૂરી)',
+'tog-usenewrc' => 'તાજા ફેરફારોમાં અને ધ્યાનસૂચિમાં ફેરફારોને પાનાં અનુસાર જૂથમાં ગોઠવો',
 'tog-numberheadings' => 'મથાળાંઓને આપો-આપ ક્રમ (ઑટો નંબર) આપો',
 'tog-showtoolbar' => 'ફેરફાર માટેની ટૂલબાર બતાવો',
-'tog-editondblclick' => 'બà«\87 àªµàª\96ત àª\95à«\8dલિàª\95 àªªàª° પાનાંઓમાં ફેરફાર કરો',
+'tog-editondblclick' => 'બà«\87 àªµàª\96ત àª\95à«\8dલિàª\95 àª\95રà«\80 પાનાંઓમાં ફેરફાર કરો',
 'tog-editsection' => 'વિભાગોમાં [ફેરફાર કરો] કડી દ્વારા વિભાગીય ફેરફાર લાગુ કરો.',
-'tog-editsectiononrightclick' => 'વિભાગના મથાળાં ને રાઇટ ક્લિક દ્વારા ફેરફાર કરવાની રીત અપનાવો. (જાવાસ્ક્રિપ્ટ જરૂરી)',
+'tog-editsectiononrightclick' => 'વિભાગના મથાળાં ને રાઇટ ક્લિક દ્વારા ફેરફાર કરવાની રીત અપનાવો.',
 'tog-showtoc' => 'અનુક્રમણિકા દર્શાવો (૩થી વધુ પેટા-મથાળા વાળા લેખો માટે)',
-'tog-rememberpassword' => 'આ કમ્પ્યૂટર પર મારી લોગ-ઇન વિગતો યાદ રાખો (મહત્તમ $1 {{PLURAL:$1|દિવસ|દિવસ}} માટે)',
+'tog-rememberpassword' => 'આ કમ્પ્યૂટર પર મારી લોગ-ઇન વિગતો યાદ રાખો (મહત્તમ $1 {{PLURAL:$1|દિવસ|દિવસ}} માટે)',
 'tog-watchcreations' => 'મેં બનાવેલાં પાનાં અને અપલોડ કરેલી ફાઇલો મારી ધ્યાનસૂચિમાં ઉમેરો',
 'tog-watchdefault' => 'હું ફેરફાર કરૂં તે પાનાં અને ફાઇલ્સ મારી ધ્યાનસૂચિમાં ઉમેરો',
 'tog-watchmoves' => 'હું ખસેડું તે પાનાં અને ફાઇલ્સ મારી ધ્યાનસૂચિમાં ઉમેરો',
@@ -184,7 +184,7 @@ $messages = array(
 'tog-uselivepreview' => 'જીવંત પૂર્વદર્શન વાપરો (પ્રાયોગીક)',
 'tog-forceeditsummary' => "કોરો 'ફેરફાર સારાંશ' ઉમેરતા પહેલા મને ચેતવો",
 'tog-watchlisthideown' => "'મારી ધ્યાનસુચી'માં મે કરેલા ફેરફારો છુપાવો",
-'tog-watchlisthidebots' => 'ધà«\8dયાનસà«\81àª\9aિમાં બોટ દ્વારા થયેલા ફેરફાર સંતાડો.',
+'tog-watchlisthidebots' => 'ધà«\8dયાનસà«\81àª\9aà«\80માં બોટ દ્વારા થયેલા ફેરફાર સંતાડો.',
 'tog-watchlisthideminor' => "'મારી ધ્યાનસુચી'માં નાનાં ફેરફારો છુપાવો",
 'tog-watchlisthideliu' => 'લોગ થયેલા સભ્ય દ્વારા કરવામાં આવેલ ફેરફાર ધ્યાનસુચીમાં છુપાવો.',
 'tog-watchlisthideanons' => 'અજાણ્યાસભ્ય દ્વારા થયેલ ફેરફાર મારી ધ્યાનસુચીમાં છુપાવો.',
@@ -206,7 +206,7 @@ $messages = array(
 'editfont-default' => 'બ્રાઉઝરના સેટીંગ્સ પ્રમાણે',
 'editfont-monospace' => 'મોનોસ્પેસ્ડ ફોન્ટ',
 'editfont-sansserif' => 'સાન્સ-સેરિફ ફોન્ટ',
-'editfont-serif' => 'Serif font',
+'editfont-serif' => 'સેરિફ ફોન્ટ',
 
 # Dates
 'sunday' => 'રવિવાર',
@@ -249,8 +249,8 @@ $messages = array(
 'december-gen' => 'ડિસેમ્બર',
 'jan' => 'જાન્યુ',
 'feb' => 'ફેબ્રુ',
-'mar' => 'મા',
-'apr' => 'એપ્ર',
+'mar' => 'માર્ચ',
+'apr' => 'એપ્રિલ',
 'may' => 'મે',
 'jun' => 'જૂન',
 'jul' => 'જુલા',
@@ -359,7 +359,7 @@ $messages = array(
 'undelete_short' => 'હટાવેલ {{PLURAL:$1|એક ફેરફાર|$1 ફેરફારો}} પરત લાવો.',
 'viewdeleted_short' => '{{PLURAL:$1|ભૂંસી નાખેલો એક|ભૂંસી નાખેલા $1}} ફેરફાર જુઓ',
 'protect' => 'સુરક્ષિત કરો',
-'protect_change' => 'ફà«\87રફાર àª\95રો',
+'protect_change' => 'બદલો',
 'protectthispage' => 'આ પાનું સુરક્ષિત કરો.',
 'unprotect' => 'સુરક્ષા બદલો',
 'unprotectthispage' => 'આ પાનાનું સુરક્ષા  બદલો',
@@ -404,7 +404,7 @@ $1',
 # 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).
 'aboutsite' => '{{SITENAME}} વિષે',
 'aboutpage' => 'Project:વિષે',
-'copyright' => 'માહિતી $1 હેઠળ ઉપલબ્ધ છે.',
+'copyright' => 'àª\85લàª\97થà«\80 àª\89લà«\8dલà«\87àª\96 àª¨ àª\95રાયà«\8b àª¹à«\8bય àª¤à«\8dયાàª\82 àª¸à«\81ધà«\80 àª®àª¾àª¹àª¿àª¤à«\80 $1 àª¹à«\87ઠળ àª\89પલબà«\8dધ àª\9bà«\87.',
 'copyrightpage' => '{{ns:project}}:પ્રકાશનાધિકાર',
 'currentevents' => 'વર્તમાન ઘટનાઓ',
 'currentevents-url' => 'Project:વર્તમાન ઘટનાઓ',
@@ -615,6 +615,7 @@ $2',
 'userlogin-resetpassword-link' => 'તમારી ગુપ્તસંજ્ઞા બદલો',
 'helplogin-url' => 'Help:પ્રવેશ માટે',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|પ્રવેશવા માટેની મદદ]]',
+'userlogin-createanother' => 'બીજું ખાતું બનાવો',
 'createacct-join' => 'તમારી માહિતી નીચે દાખલ કરો.',
 'createacct-another-join' => 'નવા ખાતાંની માહિતી નીચે દાખલ કરો.',
 'createacct-emailrequired' => 'ઇમેલ સરનામું',
@@ -710,6 +711,8 @@ $2',
 'login-abort-generic' => 'તમારું પ્રવેશ નિષ્ફળ થયું - છોડી દેવાયું',
 'loginlanguagelabel' => 'ભાષા: $1',
 'suspicious-userlogout' => 'લોગ આઉટ કરવાની તમારી વિનંતિ પૂરી ન કરી શકાઇ. એમ લાગે છે કે તેને તૃટિ પામેલ બ્રાઉઝર કે પ્રોક્સી દ્વારા મોકલાઈ હતી.',
+'createacct-another-realname-tip' => 'સાચું નામ મરજીયાત છે.
+જો તમે તે આપવાનું પસંદ કરશો, તો તેનો ઉપયોગ તમે કરેલ યોગદાનનું શ્રેય આપવા માટે થશે.',
 
 # Email sending
 'php-mail-error-unknown' => 'PHPની મેલ() કામગીરીમાં અજ્ઞાત ત્રુટિ',
@@ -732,7 +735,7 @@ $2',
 'resetpass-submit-cancel' => 'રદ કરો',
 'resetpass-wrong-oldpass' => 'અવૈધ હંગામે કે કાયમી ગુપ્તસંજ્ઞા.
 કદાચ તમે પહેલેથી સફળતા પૂર્વક તમારી ગુપ્ત સંજ્ઞા બદલી દીધી હોય કે નવી ગુપ્ત સંંજ્ઞામાટે વિનંતિ કરી હોય',
-'resetpass-temp-password' => 'àª\95ામàª\9aલાવ ગુપ્તસંજ્ઞા:',
+'resetpass-temp-password' => 'àª\95ામàª\9aલાàª\89 ગુપ્તસંજ્ઞા:',
 'resetpass-abort-generic' => 'વિસ્તારક વડે પાસવર્ડ બદલવાનું રોકી રખાયું છે.',
 
 # Special:PasswordReset
@@ -782,7 +785,7 @@ $2
 'resettokens-legend' => 'નિશાનીઓ ફરી ગોઠવો',
 'resettokens-tokens' => 'નિશાનીઓ:',
 'resettokens-token-label' => '$1 (હાલની કિંમત: $2)',
-'resettokens-watchlist-token' => 'ધ્યાનસૂચિ વેબ ફીડ નિશાની',
+'resettokens-watchlist-token' => '[[Special:Watchlist|તમારી ધ્યાનસૂચિના પાનામાં ફેરફાર ]]ની વેબ ફીડ (Atom/RSS) નિશાની',
 'resettokens-done' => 'નિશાનીઓ ફરી ગોઠવવામાં આવી.',
 'resettokens-resetbutton' => 'પસંદ કરેલ નિશાનીઓ ફરી ગોઠવો',
 
@@ -863,8 +866,7 @@ $2
 'loginreqlink' => 'પ્રવેશ કરો',
 'loginreqpagetext' => 'બીજા પાનાં જોવા માટે જરૂરી છે કે તમે $1.',
 'accmailtitle' => 'ગુપ્તસંજ્ઞા મોકલવામાં આવી છે.',
-'accmailtext' => "[[User talk:$1|$1]] માટે રચેલ ગુપ્તસંજ્ઞા $2 ને મોકલાવી દેવાઇ છે 
-આ નવા ખાતાનીગુપ્તસંજ્ઞા  ''[[Special:ChangePassword|change password]]'' વાપરીને પ્રવેશ કર્યા બાદ બદલી શકાશે.",
+'accmailtext' => "[[User talk:$1|$1]] માટે રચેલ ગુપ્તસંજ્ઞા $2 ને મોકલાવી દેવાઇ છે. આ નવા ખાતાનીગુપ્તસંજ્ઞા પ્રવેશ કર્યા બાદ ''[[Special:ChangePassword|ગુપ્તસંજ્ઞા બદલો]]'' વાપરીને બદલી શકાશે.",
 'newarticle' => '(નવીન)',
 'newarticletext' => "આપ જે કડીને અનુસરીને અહીં પહોંચ્યા છો તે પાનું અસ્તિત્વમાં નથી.
 <br />નવું પાનું બનાવવા માટે નીચે આપેલા ખાનામાં લખવાનું શરૂ કરો (વધુ માહિતિ માટે [[{{MediaWiki:Helppage}}|મદદ]] જુઓ).
@@ -990,6 +992,7 @@ $2
 તે પહેલેથી હાજર છે.',
 'defaultmessagetext' => 'મૂળભૂત સંદેશ લખાણ',
 'invalid-content-data' => 'અયોગ્ય વિગત માહિતી',
+'content-not-allowed-here' => '"$1" વિગત [[$2]] પાનાં પર માન્ય નથી',
 'editwarning-warning' => 'આ પાનું છોડી દેશો તો તમારા ફેરફારો સચવાશે નહીં.
 જો તમે પ્રવેશ કરેલો હોય તો તમે આ ચેતવણીને તમારી પસંદના "ફેરફાર" વિભાગના વિકલ્પો બદલીને બંધ કરી શકો છો.',
 
@@ -1301,8 +1304,8 @@ $1",
 'prefs-rendering' => 'દેખાવ',
 'saveprefs' => 'સાચવો',
 'resetprefs' => 'બીન સાચવેલ ફેરફારો સાફ કરો',
-'restoreprefs' => 'મૂળ વિકલ્પો ફરી ગોઠવો',
-'prefs-editing' => 'ફà«\87રફાર àª\9cારà«\80 àª\9bà«\87',
+'restoreprefs' => 'મૂળ વિકલ્પો ફરી ગોઠવો (બધાં વિભાગોમાં)',
+'prefs-editing' => 'સàª\82પાદન',
 'rows' => 'પંક્તિઓ',
 'columns' => 'સ્તંભ',
 'searchresultshead' => 'શોધો',
@@ -1362,7 +1365,8 @@ HTML નાકું ચકાસો',
 'gender-unknown' => 'હું વિગતો ન આપવાનું પસંદ કરું છું',
 'gender-male' => 'તેણે વિકિ પાનાંઓમાં ફેરફાર કર્યા',
 'gender-female' => 'તેણીએ વિકિ પાનાંઓમાં ફેરફાર કર્યા',
-'prefs-help-gender' => 'વૈકલ્પિક:  સોફ્ટવેર દ્વારા લિંગ  ઓળખ માટે વપરાયેલ .
+'prefs-help-gender' => 'આ પસંદગી ગોઠવવી વૈકલ્પિક છે.  
+સોફ્ટવેર આ વિગત આપને વ્યાકરણની રીતે લિંગ ઓળખ દ્વારા સંબોધવા માટે વાપરશે.
 આ માહિતી જન સમુદાય માટે જાહેર હશે.',
 'email' => 'ઇ-મેઇલ',
 'prefs-help-realname' => 'સાચું નામ મરજીયાત છે.
@@ -1410,7 +1414,7 @@ HTML નાકું ચકાસો',
 'userrights-no-interwiki' => 'અન્ય વિકિ પર અન્ય સભ્યો ના અધિકારો માં પરિવર્તન કરવાની તમને પરવાનગી નથી',
 'userrights-nodatabase' => 'માહિતીસંચ $1 અસ્તિત્વમાં નથી કે તે સ્થાનીય નથી.',
 'userrights-nologin' => 'સભ્યના અધિકારો આપવા તમે પ્રબંધક તરીકે પ્રવેશ  [[Special:UserLogin|log in]] કરેલ હોવો જરૂરી છે.',
-'userrights-notallowed' => 'તમારà«\81àª\82 àª\8fàª\95ાàª\89નà«\8dàª\9f àª\89મà«\87રà«\8b àª\95રવા àª\85થવા àªµàªªàª°àª¾àª¶àª\95રà«\8dતા àª\85ધિàª\95ારà«\8b દૂર કરવાની પરવાનગી નથી.',
+'userrights-notallowed' => 'તમનà«\87 àªµàªªàª°àª¾àª¶àª\95રà«\8dતા àª\85ધિàª\95ારà«\8b àª\89મà«\87રવા àª\95à«\87 દૂર કરવાની પરવાનગી નથી.',
 'userrights-changeable-col' => 'તમે બદલી શકો તેવા જૂથ',
 'userrights-unchangeable-col' => 'તમે બદલી ન શકો તેવા જૂથ',
 
@@ -1476,13 +1480,17 @@ HTML નાકું ચકાસો',
 'right-ipblock-exempt' => 'IP દ્વારા, સ્વયં ચાલિત રીતે અને સમૂહ રોકને અવગનીને આગળ વધો',
 'right-proxyunbannable' => 'અવેજીના અવયંચાલિત ખંડોને ટાળો',
 'right-unblockself' => 'તમને જાતે જ અપ્રતિબંધિત કરો',
-'right-protect' => 'સંરક્ષણ સ્તર બદલો અને સંરક્ષિત પાનાઓમાં ફેરફાર કરો.',
+'right-protect' => 'સàª\82રàª\95à«\8dષણ àª¸à«\8dતર àª¬àª¦àª²à«\8b àª\85નà«\87 àª§à«\8bધાàª\95ાર-સàª\82રàª\95à«\8dષિત àªªàª¾àª¨àª¾àª\93માàª\82 àª«à«\87રફાર àª\95રà«\8b.',
 'right-editprotected' => 'પાનામાં "{{int:protect-level-sysop}}" તરીકે ફેરફાર કરો',
 'right-editinterface' => 'સભ્ય સંભાષણ પટલમાં ફેરફાર કરો',
 'right-editusercssjs' => 'અન્ય સભ્યોની CSS અને JavaScript ફાઇલમાં ફેરફાર કરો',
 'right-editusercss' => 'અન્ય સભ્યોની CSS ફાઇલમાં ફેરફાર કરો',
 'right-edituserjs' => 'અન્ય સભ્યોની JavaScript ફાઇલમાં ફેરફાર કરો',
+'right-editmyusercss' => 'તમારી પોતાની CSS ફાઇલોમાં ફેરફાર કરો',
+'right-editmyuserjs' => 'તમારી પોતાની જાવાસ્ક્રિપ્ટ ફાઇલોમાં ફેરફાર કરો',
 'right-viewmywatchlist' => 'તમારી પોતાની ધ્યાનસૂચી જુઓ',
+'right-viewmyprivateinfo' => 'તમારી પોતાની અંગત માહિતી જુઓ (દા.ત. ઇમેલ સરનામું, ખરું નામ)',
+'right-editmyprivateinfo' => 'તમારી પોતાની અંગત માહિતીમાં ફેરફાર કરો (દા.ત. ઇમેલ સરનામું, ખરું નામ)',
 'right-editmyoptions' => 'તમારી પોતાની પ્રાથમિકતાઓમાં ફેરફાર કરો',
 'right-rollback' => 'ચોક્કસ પાનામાં જે છેલ્લા સભ્યએ ફેરફારો કર્યાં હોય તેને ઝડપથી ઉલટાવો',
 'right-markbotedits' => 'ઉલટાવનારા અને બોટ ફેરફારો નોંધો',
@@ -1535,8 +1543,8 @@ HTML નાકું ચકાસો',
 'action-block' => 'આ સભ્ય દ્વારા થનાર ફેરફાર પ્રતિબંધીત કરો',
 'action-protect' => 'આ પાનાંનું પ્રતિબંધ સ્તર બદલો',
 'action-rollback' => 'ચોક્કસ પાનામાં જે છેલ્લા સભ્યએ ફેરફારો કર્યાં હોય તેને ઝડપથી ઉલટાવો',
-'action-import' => 'àª\85નà«\8dય àªµàª¿àª\95િ àªªàª°àª¥à«\80 àª\86 àªªàª¾àª¨à«\81àª\82 આયાત કરો',
-'action-importupload' => 'àª\9aઢાવà«\87લà«\80 àª«àª¾àª\87લ àªªàª°àª¥à«\80 àª\86 àªªàª¾àª¨à«\81àª\82 àª\86યાત àª\95રà«\8b.',
+'action-import' => 'àª\85નà«\8dય àªµàª¿àª\95િ àªªàª°àª¥à«\80 àªªàª¾àª¨àª¾àª\82àª\93 આયાત કરો',
+'action-importupload' => 'àª\9aઢાવà«\87લà«\80 àª«àª¾àª\87લ àªªàª°àª¥à«\80 àªªàª¾àª¨àª¾àª\82àª\93 àª\86યાત àª\95રà«\8b',
 'action-patrol' => 'અન્યો ના ફેરફારો નીરીક્ષીત અંકિત કરો',
 'action-autopatrol' => 'તમે તમારા ફેરફારો નીરીક્ષિત અંકિત કરો',
 'action-unwatchedpages' => 'ન જોવાતા પાનાની યાદી જુઓ',
@@ -1552,6 +1560,8 @@ HTML નાકું ચકાસો',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|ફેરફાર|ફેરફારો}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|છેલ્લી મુલાકાતથી}}',
+'enhancedrc-history' => 'ઇતિહાસ',
 'recentchanges' => 'તાજા ફેરફારો',
 'recentchanges-legend' => 'હાલમાં થયેલા ફેરફારોના વિકલ્પ',
 'recentchanges-summary' => 'વિકિમાં તાજેતરમાં થયેલા ફેરફારો પર અહિંથી નજર રાખો.',
@@ -1582,7 +1592,7 @@ HTML નાકું ચકાસો',
 'rc_categories_any' => 'કોઇ પણ',
 'rc-change-size-new' => 'બદલાયા પછી $1 {{PLURAL:$1|બાઈટ|બાઈટો}}',
 'newsectionsummary' => '/* $1 */ નવો વિભાગ',
-'rc-enhanced-expand' => 'વિગતો બતાવો (જાવા સ્ક્રિપ્ટ જરૂરી છે)',
+'rc-enhanced-expand' => 'વિગતો બતાવો',
 'rc-enhanced-hide' => 'વિગતો છુપાવો',
 
 # Recent changes linked
@@ -1835,8 +1845,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'upload_source_file' => '(તમારા કોમ્પ્યુટર પરની એક ફાઇલ)',
 
 # Special:ListFiles
-'listfiles-summary' => 'આ વિશિષ્ટ પાનું બધા અપલોડ કરાયેલ ફાઈલો બતાવે છે.
-જ્યારે વપરાશકર્તા દ્વારા ફિલ્ટર, માત્ર ફાઈલો જ્યાં તે વપરાશકર્તા ફાઈલ સૌથી તાજેતરનું વર્ઝન અપલોડ બતાવવામાં આવે છે.',
+'listfiles-summary' => 'આ વિશિષ્ટ પાનું બધી અપલોડ કરાયેલી ફાઈલો દર્શાવે છે.',
 'listfiles_search_for' => 'મિડિયા નામ શોધો:',
 'imgfile' => 'ફાઇલ',
 'listfiles' => 'ફાઇલોની યાદી',
@@ -1847,6 +1856,10 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'listfiles_size' => 'માપ',
 'listfiles_description' => 'વર્ણન',
 'listfiles_count' => 'આવૃત્તિ',
+'listfiles-show-all' => 'ચિત્રોની જૂની આવૃત્તિઓનો સમાવેશ કરો',
+'listfiles-latestversion' => 'વર્તમાન આવૃતિ',
+'listfiles-latestversion-yes' => 'હા',
+'listfiles-latestversion-no' => 'ના',
 
 # File description page
 'file-anchor-link' => 'ફાઇલ/દસ્તાવેજ',
@@ -2146,7 +2159,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'listgrouprights' => 'સભ્ય જૂથ ના હક્કો',
 'listgrouprights-summary' => 'નીચે આ વિકિ પર વ્યાખ્યાયિત સભ્ય જૂથોની યાદી, તેમની સાથે સંકળાયેલા હક્કો સાથે આપી છે.
 વ્યક્તિગત હક્કો માટે [[{{MediaWiki:Listgrouprights-helppage}}|વધારાની માહિતી]].',
-'listgrouprights-key' => '* <span class="listgrouprights-granted">અધિકાર અપાયા</span>
+'listgrouprights-key' => 'Legend:
+* <span class="listgrouprights-granted">અધિકાર અપાયા</span>
 * <span class="listgrouprights-revoked">અધિકાર હટાવાયા</span>',
 'listgrouprights-group' => 'જૂથ',
 'listgrouprights-rights' => 'હક્કો',
@@ -2223,7 +2237,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'watchmethod-recent' => 'હાલમાં ફેરફાર થયેલ પાનાની ચકાસણી જારી',
 'watchmethod-list' => 'હાલમાં થયેલ ફેરફાર માટે નીરીક્ષીત પાના તપાસાય છે',
 'watchlistcontains' => 'તમારી ધ્યાનસૂચીમાં $1 {{PLURAL:$1|પાનું|પાનાં}} છે.',
-'iteminvalidname' => "વસà«\8dતà«\81 '$1' àª¸àª¾àª¥à«\87 àª\97ડબડ, અવૈધ નામ...",
+'iteminvalidname' => "વસà«\8dતà«\81 '$1' àª¸àª¾àª¥à«\87 àª¸àª®àª¸à«\8dયા, અવૈધ નામ...",
 'wlnote' => "નીચે $3, $4 વાગ્યા સુધીના છેલ્લા {{PLURAL:$2|એક કલાક|'''$2''' કલાક}}માં થયેલા {{PLURAL:$1|ફેરફાર|'''$1''' ફેરફારો }} દર્શાવ્યા છે.",
 'wlshowlast' => 'છેલ્લા $1 કલાક $2 દિવસ $3 બતાવો',
 'watchlist-options' => 'ધ્યાનસૂચિના વિકલ્પો',
@@ -2330,7 +2344,7 @@ Deleting it may disrupt database operations of {{SITENAME}};',
 આ પાના પર ના છેલ્લા ફેરફારો [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) દ્વારા કરવામાં આવ્યાં હતાં.',
 'editcomment' => "ફેરફાર સારાંશ હતી: \"''\$1''\".",
 'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|talk]])દ્વારા ફેરફરોને  [[User:$1|$1]] દ્વારા કરેલા છેલ્લા સુધારા સુધી ઉલટાવાયા.',
-'revertpage-nouser' => 'ગુપ્ત સભ્ય વડે કરાયેલ ફેરફારને [[User:$1|$1]] વડે કરેલ છેલ્લા પુનરાવર્તન પર પાછા લઇ જવાયું.',
+'revertpage-nouser' => 'ગુપ્ત સભ્ય વડે કરાયેલ ફેરફારને {{GENDER:$1|[[User:$1|$1]]}} વડે કરેલ છેલ્લા પુનરાવર્તન પર પાછા લઇ જવાયું.',
 'rollback-success' => '$1 દ્વારા થયેલા ફેરફારો ઉલટાવાયા
 તેને $2 દ્વારા થયેલ સંપાદન સુધી લઇ જવાયું',
 
@@ -2474,7 +2488,7 @@ $1',
 'contributions' => '{{GENDER:$1|સભ્ય}}નું યોગદાન',
 'contributions-title' => 'સભ્ય $1નું યોગદાન',
 'mycontris' => 'યોગદાન',
-'contribsub2' => '$1 માટે ($2)',
+'contribsub2' => '($2) માટે {{GENDER:$3|$1}}',
 'nocontribs' => 'આ પરિમાણને મળતી પરિણામ નથી મળ્યાં',
 'uctop' => '(વર્તમાન)',
 'month' => ':મહિનાથી (અને પહેલાનાં)',
@@ -2495,7 +2509,7 @@ $1',
 તમરા સંદર્ભ માટે તાજી પ્રતિબંધ યાદિ આપી છે.',
 'sp-contributions-search' => 'યોગદાન શોધો',
 'sp-contributions-username' => 'IP સરનામું અથવા સભ્યનામ:',
-'sp-contributions-toponly' => 'તાàª\9cà«\87તરમાàª\82 àª¥àª¯à«\87લા àª«à«\87રફારà«\8b àª\9cબતાવો',
+'sp-contributions-toponly' => 'માતà«\8dર àª\9bà«\87લà«\8dલà«\80 àª\86વà«\83તà«\8dતિના àª«à«\87રફારà«\8b àª\9c àª¦àª°à«\8dશાવો',
 'sp-contributions-submit' => 'શોધો',
 
 # What links here
@@ -2996,7 +3010,7 @@ $1',
 'pageinfo-robot-noindex' => 'અમાન્ય',
 'pageinfo-views' => 'જોનારાની સંખ્યા',
 'pageinfo-watchers' => 'પાના નીરીક્ષકોની સંખ્યા',
-'pageinfo-redirects-name' => 'àª\86 àªªàª¾àª¨àª¾àª\82 àªªàª° àªµàª¾àª³à«\8b',
+'pageinfo-redirects-name' => 'àª\86 àªªàª¾àª¨àª¾àª\82 àªªàª° àª¦àª¿àª¶àª¾àª¨àª¿àª°à«\8dદà«\87શનà«\8bનà«\80 àª¸àª\82àª\96à«\8dયા',
 'pageinfo-subpages-name' => 'આ પાનાંનું ઉપપાનું',
 'pageinfo-firstuser' => 'પૃષ્ઠ સર્જક',
 'pageinfo-firsttime' => 'પૃષ્ઠ સર્જનની તારીખ',
@@ -3005,9 +3019,12 @@ $1',
 'pageinfo-edits' => 'કુલ સંપાદનોની સંખ્યા',
 'pageinfo-authors' => 'ક્ષેત્રના લેખકોની કુલ સંખ્યા',
 'pageinfo-recent-edits' => 'તાજા ફેરફારોની સંખ્યા (છેલ્લા $1 દરમ્યાન)',
+'pageinfo-recent-authors' => 'અલગ અલગ લેખકોની કુલ સંખ્યા',
+'pageinfo-magic-words' => 'ચમત્કારી {{PLURAL:$1|શબ્દ|શબ્દો}} ($1)',
 'pageinfo-hidden-categories' => 'છુપી {{PLURAL:$1|શ્રેણી|શ્રેણીઓ}} ($1)',
 'pageinfo-templates' => 'પ્રયુક્ત {{PLURAL:$1|ઢાંચો|ઢાંચાઓ}} ($1)',
 'pageinfo-toolboxlink' => 'પૃષ્ઠમાહિતી',
+'pageinfo-redirectsto' => 'તરફ દિશાનિર્દેશન',
 'pageinfo-redirectsto-info' => 'માહિતી',
 'pageinfo-contentpage-yes' => 'હા',
 'pageinfo-protect-cascading-yes' => 'હા',
@@ -3580,13 +3597,13 @@ $5
 
 આ પુષ્ટિ કોડ $4 સુધીજ કામમાં આવશે.',
 'confirmemail_body_set' => 'કોઇકે, કદાચ તમે પોતે જ , IP સરનામા  $1 પરથી,
-{{SITENAME}} પર "$2" ખાતાનું ઇ-મેલ સરનામું બદલ્યું છે.
+{{SITENAME}} પર "$2" ખાતાનું ઇમેલ સરનામું બદલ્યું છે.
 
-એ વાતની પુષ્ટિ કરવા માટે કે આ ઇ-મેલ ખાતું તમારું જ છે અને {{SITENAME}}ના ઇ-મેલ સંબંધિત વિકલ્પો સક્રીય કરવા માટે આપેલી કડીને તમારા બ્રાઉઝરમાં સક્રીય કરો:
+એ વાતની પુષ્ટિ કરવા માટે કે આ ઇમેલ ખાતું તમારું જ છે અને {{SITENAME}}ના ઇમેલ સંબંધિત વિકલ્પો સક્રીય કરવા માટે આપેલી કડીને તમારા બ્રાઉઝરમાં સક્રીય કરો:
 
 $3
 
-જો ખાતું તમારું ના હોય તો, આ કડીને અનુસરી ઈ-મેલ ખાતાની પુષ્ટિની નોંધણીને રદ કરો:
+જો ખાતું તમારું ના હોય તો, આ કડીને અનુસરી ઈમેલ ખાતાની પુષ્ટિની નોંધણીને રદ કરો:
 
 $5
 આ પુષ્ટિ કોડ  $4 સુધીજ કામમાં આવશે.',
@@ -3721,6 +3738,7 @@ $5
 # Special:Redirect
 'redirect-legend' => 'ફાઇલ અથવા પાનાં તરફ વાળો',
 'redirect-submit' => 'જાઓ',
+'redirect-lookup' => 'જુઓ:',
 'redirect-value' => 'કિંમત:',
 'redirect-user' => 'સભ્ય નામ',
 'redirect-revision' => 'પાનાંની આવૃત્તિ',
@@ -3780,7 +3798,10 @@ $5
 'tags-tag' => 'ટૅગનું નામ',
 'tags-display-header' => 'ફેરફારની યાદિઓમાં દેખાવ',
 'tags-description-header' => 'અર્થનું પૂર્ણ વિવરણ',
+'tags-active-header' => 'સક્રિય?',
 'tags-hitcount-header' => 'અંકિત ફેરફારો',
+'tags-active-yes' => 'હા',
+'tags-active-no' => 'ના',
 'tags-edit' => 'ફેરફાર કરો',
 'tags-hitcount' => '$1 {{PLURAL:$1|ફેરફાર|ફેરફારો}}',
 
@@ -3798,8 +3819,7 @@ $5
 
 # Database error messages
 'dberr-header' => 'આ વિકિમાં તકલીફ છે',
-'dberr-problems' => 'દિલગીરી!
-આ સાઇટ તકનિકી અડચણ અનુભવી રહી છે.',
+'dberr-problems' => 'દિલગીરી! આ સાઇટ તકનિકી અડચણ અનુભવી રહી છે.',
 'dberr-again' => 'થોડી વાર રાહ જોઈને ફરી પેજ લોડ કરવાનો પ્રયત્ન કરો.',
 'dberr-info' => '(માહિતી સંચય સર્વર : $1નો સંપર્ક નથી કરી શકાયો)',
 'dberr-usegoogle' => 'તેસમયા દરમ્યાન તમે ગુગલ દ્વારા શોધી શકો',
@@ -3846,9 +3866,9 @@ $5
 'revdelete-restricted' => 'પ્રબઁધકોના ફેરફાર કરવા પર પ્રતિબંધ મુકાયો',
 'revdelete-unrestricted' => 'પ્રબંધકોના ફેરફાર કરવા પર પ્રતિબંધ હટાવાયો.',
 'logentry-move-move' => '$1એ {{GENDER:$2|ખસેડાયું }} પાના $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-noredirect' => '$1 એ દિશાનિર્દેશન છોડ્યા વગર પાના $3ને $4 પર {{GENDER:$2|વાળ્યું}}',
+'logentry-move-move_redir' => '$1એ દિશાનિર્દેશન કરીને પાના $3ને $4 પર {{GENDER:$2|ખસેડ્યું}}',
+'logentry-move-move_redir-noredirect' => '$1એ દિશાનિર્દેશન કરીને પાના $3ને $4 પર {{GENDER:$2|વાળ્યું}} પણ પાછળ દિશાનિર્દેશન છોડ્યું નહી',
 'logentry-patrol-patrol' => '$1 આવૃત્તિ ચિહ્નિત થયેલ પાનાં $4 $3 ચોકી કરવા ફરવા નીકળવું',
 'logentry-patrol-patrol-auto' => '$1 આપોઆપ ચિહ્નિત ચોકી પહેરો કરવા લાગ્યા આવૃત્તિ પાનું $4 $3',
 'logentry-newusers-newusers' => 'સભ્ય ખાતું $1 {{GENDER:$2|બનાવવામાં આવ્યું}}',
@@ -3932,4 +3952,12 @@ $5
 # Image rotation
 'rotate-comment' => 'ચિત્ર $1 {{PLURAL:$1|ડિગ્રી|ડિગ્રીઓ}} ઘડિયાળની દિશામાં ફેરવવામાં આવ્યું',
 
+# Limit report
+'limitreport-cputime' => 'CPU સમય વપરાશ',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|સેકંડ|સેકંડો}}',
+'limitreport-walltime' => 'ખરો સમય વપરાશ',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|સેકંડ|સેકંડો}}',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|બાઇટ|બાઇટ્સ}}',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|બાઇટ|બાઇટ્સ}}',
+
 );
index 530de57..3176244 100644 (file)
@@ -23,12 +23,12 @@ $messages = array(
 'tog-hidepatrolled' => '隱藏最近更改肚巡查過嘅編寫',
 'tog-newpageshidepatrolled' => '隱藏新頁面清單肚巡查過嘅頁面',
 'tog-extendwatchlist' => '展開監視列表來顯示所有更改,毋單淨係最近嘅',
-'tog-usenewrc' => '在最近更改與監視列表中整合同一頁嘅修改 (愛有JavaScript)',
+'tog-usenewrc' => '在最近更改和監視列表肚整合同一頁嘅修改',
 'tog-numberheadings' => '標題自動編號',
-'tog-showtoolbar' => '顯示編寫工具欄 (愛有JavaScript)',
-'tog-editondblclick' => '雙撳編寫頁面 (愛有JavaScript)',
+'tog-showtoolbar' => '展示編寫工具欄',
+'tog-editondblclick' => '雙撳編寫頁面',
 'tog-editsection' => '允許通過點撳[編寫]鏈接編寫段落',
-'tog-editsectiononrightclick' => '允許右撳標題編寫段落 (愛有JavaScript)',
+'tog-editsectiononrightclick' => '允許右撳標題編寫段落',
 'tog-showtoc' => '顯示目錄(針對一頁超過3隻標題嘅頁面)',
 'tog-rememberpassword' => '在邇隻瀏覽器記下亻厓嘅登入狀態(最多$1日)',
 'tog-watchcreations' => '加亻厓建立嘅頁面撈上傳嘅文件加入亻厓嘅監視列表',
@@ -46,7 +46,7 @@ $messages = array(
 'tog-shownumberswatching' => '展示監視中嘅使用人數目',
 'tog-oldsig' => '現有簽名:',
 'tog-fancysig' => '將簽名看做維基文字(毋會自動產生鏈接)',
-'tog-uselivepreview' => '使用即時預覽(愛有 JavaScript)(實驗中)',
+'tog-uselivepreview' => '使用即時預覽(實驗中)',
 'tog-forceeditsummary' => '還吂輸入編寫摘要時提醒亻厓',
 'tog-watchlisthideown' => '監視列表肚隱藏亻厓嘅編寫',
 'tog-watchlisthidebots' => '監視列表肚隱藏機器人嘅編寫',
@@ -59,6 +59,7 @@ $messages = array(
 'tog-showhiddencats' => '展示隱藏分類',
 'tog-norollbackdiff' => '执行回退後毋顯示差別',
 'tog-useeditwarning' => '當離開頁面之時變更還吂儲存,請提醒𠊎',
+'tog-prefershttps' => '登入時一直使用安全連線',
 
 'underline-always' => '總係使用',
 'underline-never' => '從來毋用',
@@ -122,6 +123,18 @@ $messages = array(
 'oct' => '10月',
 'nov' => '11月',
 'dec' => '12月',
+'january-date' => '1月$1日',
+'february-date' => '2月$1日',
+'march-date' => '3月$1日',
+'april-date' => '4月$1日',
+'may-date' => '5月$1日',
+'june-date' => '6月$1日',
+'july-date' => '7月$1日',
+'august-date' => '8月$1日',
+'september-date' => '9月$1日',
+'october-date' => '10月$1日',
+'november-date' => '11月$1日',
+'december-date' => '12月$1日',
 
 # Categories related messages
 'pagecategories' => '$1隻分類',
@@ -147,7 +160,7 @@ $messages = array(
 'newwindow' => '(在新視窗肚打開)',
 'cancel' => '取消',
 'moredotdotdot' => '還較多...',
-'morenotlisted' => '有較多還吂列出嘅項目...',
+'morenotlisted' => '邇列表吂完成。',
 'mypage' => '頁面',
 'mytalk' => '交流',
 'anontalk' => '本IP地址嘅交流',
@@ -203,6 +216,7 @@ $messages = array(
 'create-this-page' => '建立本頁',
 'delete' => '刪除',
 'deletethispage' => '刪除本頁',
+'undeletethispage' => '取消刪除邇頁',
 'undelete_short' => '恢復$1隻分删除嘅编寫',
 'viewdeleted_short' => '查看$1項已刪除嘅修訂',
 'protect' => '保護',
@@ -247,7 +261,7 @@ $1',
 # 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).
 'aboutsite' => '關於 {{SITENAME}}',
 'aboutpage' => 'Project:關於',
-'copyright' => '本站內容使用$1條款授權。',
+'copyright' => '除非另有講明,否則本站內容都係以$1條款提供。',
 'copyrightpage' => '{{ns:project}}:版權信息',
 'currentevents' => '新聞動態',
 'currentevents-url' => 'Project:新聞動態',
@@ -331,6 +345,8 @@ $1',
 # General errors
 'error' => '差錯',
 'databaseerror' => '數據庫差錯',
+'databaseerror-text' => '出現資料庫查詢錯誤。
+邇可能表示軟件肚存在錯誤。',
 'laggedslavemode' => "'''警告:'''頁面可能毋包含最近嘅更新。",
 'readonly' => '數據庫分人鎖定',
 'enterlockreason' => '請撳入禁止訪問原因, 包括估計重新開放嘅時間',
index 472b447..4d9a9c5 100644 (file)
@@ -11,6 +11,7 @@
  * @author Amire80
  * @author Dekel E
  * @author Drorsnir
+ * @author Guycn1
  * @author Hoo
  * @author Ijon
  * @author Inkbug
@@ -508,7 +509,7 @@ $messages = array(
 'morenotlisted' => 'רשימה זו אינה מלאה.',
 'mypage' => 'דף משתמש',
 'mytalk' => 'שיחה',
-'anontalk' => '×\94ש×\99×\97×\94 ×¢×\91×\95ר IP ×\96×\94',
+'anontalk' => '×\93×£ ×\94ש×\99×\97×\94 ×¢×\91×\95ר ×\9bת×\95×\91ת IP ×\96×\95',
 'navigation' => 'ניווט',
 'and' => '&#32;וגם',
 
@@ -608,7 +609,7 @@ $1',
 # 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).
 'aboutsite' => 'אודות {{SITENAME}}',
 'aboutpage' => 'Project:אודות',
-'copyright' => '×\94ת×\95×\9b×\9f ×\9e×\95×\92ש ×\91×\9bפ×\95×£ ×\9cÖ¾$1.<br /> ×\91×¢×\9c×\99 ×\96×\9b×\95×\99×\95ת ×\94×\99×\95צר×\99×\9d ×\9eפ×\95ר×\98×\99×\9d ×\91×\94×\99ס×\98×\95ר×\99×\99ת ×\94ש×\99× ×\95×\99×\99×\9d ×©×\9c ×\94×\93×£.',
+'copyright' => '×\94ת×\95×\9b×\9f ×\96×\9e×\99×\9f ×\9cפ×\99 ×ª× ×\90×\99 $1 ×\90×\9c×\90 ×\90×\9d × ×\90×\9eר ×\90×\97רת.',
 'copyrightpage' => '{{ns:project}}:זכויות יוצרים',
 'currentevents' => 'אקטואליה',
 'currentevents-url' => 'Project:אקטואליה',
@@ -822,6 +823,9 @@ $2',
 'userlogin-resetpassword-link' => 'איפוס הסיסמה',
 'helplogin-url' => 'Help:כניסה לחשבון',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|עזרה בכניסה לחשבון]]',
+'userlogin-loggedin' => 'אתם כבר מחוברים לחשבון {{GENDER:$1|$1}}.
+השתמשו בטופס שלהלן כדי להתחבר לחשבון אחר.',
+'userlogin-createanother' => 'יצירת חשבון אחר',
 'createacct-join' => 'יש להקליד להלן את הפרטים שלך.',
 'createacct-another-join' => 'יש להקליד להלן את פרטי החשבון החדש.',
 'createacct-emailrequired' => 'כתובת דוא"ל',
@@ -1583,7 +1587,7 @@ $1",
 'badsiglength' => 'חתימתכם ארוכה מדי.
 אורך החתימה המרבי הוא {{PLURAL:$1|תו אחד|$1 תווים}}.',
 'yourgender' => 'איזה תיאור מתאים לך?',
-'gender-unknown' => '×\90×\99× ×\99 ×¨×\95צ×\94 ×\9cפר×\98',
+'gender-unknown' => '×\90×\99× ×\99 ×¨×\95צ×\94 ×\9c×\95×\9eר',
 'gender-male' => 'הוא עורך דפים בוויקי',
 'gender-female' => 'היא עורכת דפים בוויקי',
 'prefs-help-gender' => 'אין חובה למלא את ההעדפה הזאת.
@@ -1771,8 +1775,8 @@ $1",
 'action-block' => 'לחסום משתמש זה מעריכה',
 'action-protect' => 'לשנות את רמת ההגנה על דף זה',
 'action-rollback' => 'לשחזר במהירות את עריכות המשתמש האחרון שערך דף מסוים',
-'action-import' => '×\9c×\99×\99×\91×\90 ×\93×£ ×\96×\94 מאתר ויקי אחר',
-'action-importupload' => '×\9c×\99×\99×\91×\90 ×\93×£ ×\96×\94 באמצעות העלאת קובץ',
+'action-import' => '×\9c×\99×\99×\91×\90 ×\93פ×\99×\9d מאתר ויקי אחר',
+'action-importupload' => '×\9c×\99×\99×\91×\90 ×\93פ×\99×\9d באמצעות העלאת קובץ',
 'action-patrol' => 'לסמן עריכות של אחרים כבדוקות',
 'action-autopatrol' => 'לסמן את עריכותיך כבדוקות',
 'action-unwatchedpages' => 'לצפות ברשימת הדפים שאינם במעקב',
@@ -2126,7 +2130,7 @@ $1',
 'linkstoimage-more' => 'יותר {{PLURAL:$1|מדף אחד מקשר|מ־$1 דפים מקשרים}} לקובץ זה.
 הרשימה הבאה מראה רק את {{PLURAL:$1|הדף הראשון שמקשר|$1 הדפים הראשונים שמקשרים}} לקובץ זה.
 ניתן לצפות ב[[Special:WhatLinksHere/$2|רשימה המלאה]].',
-'nolinkstoimage' => '×\90×\99×\9f ×\93פ×\99×\9d ×©משתמשים בקובץ זה.',
+'nolinkstoimage' => '×\90×\99×\9f ×\93פ×\99×\9d ×\94משתמשים בקובץ זה.',
 'morelinkstoimage' => 'ראו [[Special:WhatLinksHere/$1|דפים נוספים]] שמשתמשים בקובץ זה.',
 'linkstoimage-redirect' => '$1 (הפניה של קובץ) $2',
 'duplicatesoffile' => '{{PLURAL:$1|הקובץ הבא זהה|הקבצים הבאים זהים}} לקובץ זה ([[Special:FileDuplicateSearch/$2|לפרטים נוספים]]):',
@@ -2312,6 +2316,7 @@ $1',
 'listusers' => 'רשימת משתמשים',
 'listusers-editsonly' => 'הצגת משתמשים עם עריכות בלבד',
 'listusers-creationsort' => 'סידור לפי תאריך היצירה',
+'listusers-desc' => 'סידור בסדר יורד',
 'usereditcount' => '{{PLURAL:$1|עריכה אחת|$1 עריכות}}',
 'usercreated' => '{{GENDER:$3|נוצר|נוצרה}} ב־$2, $1',
 'newpages' => 'דפים חדשים',
@@ -2554,9 +2559,9 @@ $UNWATCHURL
 # Delete
 'deletepage' => 'מחיקה',
 'confirm' => 'אישור',
-'excontent' => 'תוכן היה: "$1"',
-'excontentauthor' => 'התוכן היה: "$1" (והתורם היחיד היה "[[Special:Contributions/$2|$2]]")',
-'exbeforeblank' => 'תוכן לפני שרוקן היה: "$1"',
+'excontent' => '×\94ת×\95×\9b×\9f ×\94×\99×\94: "$1"',
+'excontentauthor' => 'התוכן היה: "$1" ({{gender:$2|והתורם היחיד היה|והתורמת היחידה הייתה}} "[[Special:Contributions/$2|$2]]")',
+'exbeforeblank' => '×\94ת×\95×\9b×\9f ×\9cפנ×\99 ×©×¨×\95ק×\9f ×\94×\99×\94: "$1"',
 'exblank' => 'הדף היה ריק',
 'delete-confirm' => 'מחיקת $1',
 'delete-legend' => 'מחיקה',
@@ -2597,8 +2602,8 @@ $UNWATCHURL
 העריכה האחרונה הייתה של [[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' => 'ש×\95×\97×\96ר ×\9eער×\99×\9b×\94 של $1 לעריכה האחרונה של $2',
+'revertpage-nouser' => 'שוחזר מעריכות של משתמש מוסתר לעריכה האחרונה של {{GENDER:$1|[[User:$1|$1]]}}',
+'rollback-success' => 'ש×\95×\97×\96ר ×\9eער×\99×\9b×\95ת של $1 לעריכה האחרונה של $2',
 
 # Edit tokens
 'sessionfailure-title' => 'בעיה בחיבור',
@@ -2611,7 +2616,7 @@ $UNWATCHURL
 'protectlogtext' => 'להלן רשימה של שינויי ההגנה על דפים.
 ראו גם את [[Special:ProtectedPages|רשימת הדפים המוגנים]] הנוכחית.',
 'protectedarticle' => 'הפעיל הגנה על [[$1]]',
-'modifiedarticleprotection' => 'שינה את רמת ההגנה של [[$1]]',
+'modifiedarticleprotection' => 'שינה את רמת ההגנה של "[[$1]]"',
 'unprotectedarticle' => 'ביטל את ההגנה על [[$1]]',
 'movedarticleprotection' => 'העביר את הגדרות ההגנה מ"[[$2]]" ל"[[$1]]"',
 'protect-title' => 'שינוי רמת ההגנה של "$1"',
@@ -2736,7 +2741,7 @@ $1',
 'contributions' => 'תרומות {{GENDER:$1|המשתמש|המשתמשת}}',
 'contributions-title' => 'תרומות של המשתמש $1',
 'mycontris' => 'תרומות',
-'contribsub2' => 'עבור $1 ($2)',
+'contribsub2' => 'עבור {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'לא נמצאו שינויים המתאימים לקריטריונים אלו.',
 'uctop' => '(נוכחי)',
 'month' => 'עד החודש:',
@@ -2807,11 +2812,11 @@ $1',
 'ipbenableautoblock' => 'חסימה אוטומטית גם של כתובת ה־IP האחרונה שהשתמש בה ושל כל כתובת IP שינסה להשתמש בה בעתיד',
 'ipbsubmit' => 'חסימה',
 'ipbother' => 'זמן אחר:',
-'ipboptions' => 'שעת×\99×\99×\9d:2 hours,×\99×\95×\9d:1 day,ש×\9c×\95ש×\94 ×\99×\9e×\99×\9d:3 days,ש×\91×\95×¢:1 week,ש×\91×\95×¢×\99×\99×\9d:2 weeks,×\97×\95×\93ש:1 month,ש×\9c×\95ש×\94 ×\97×\95×\93ש×\99×\9d:3 months,ש×\99ש×\94 ×\97×\95×\93ש×\99×\9d:6 months,שנ×\94:1 year,×\9c×\96×\9e×\9f ×\91×\9cת×\99 ×\9e×\95×\92×\91×\9c:infinite',
+'ipboptions' => 'שעתיים:2 hours,יום:1 day,שלושה ימים:3 days,שבוע:1 week,שבועיים:2 weeks,חודש:1 month,שלושה חודשים:3 months,שישה חודשים:6 months,שנה:1 year,זמן בלתי מוגבל:infinite',
 'ipbotheroption' => 'אחר',
 'ipbotherreason' => 'סיבה אחרת/נוספת:',
 'ipbhidename' => 'הסתרת שם המשתמש מהעריכות ומהרשימות',
-'ipbwatchuser' => 'מעקב אחרי דפי המשתמש והשיחה של משתמש זה',
+'ipbwatchuser' => 'מעקב אחר דף המשתמש ודף השיחה של משתמש זה',
 'ipb-disableusertalk' => 'ביטול האפשרות של המשתמש לערוך את דף השיחה של עצמו בעת החסימה',
 'ipb-change-block' => 'חסימת המשתמש מחדש עם הגדרות אלה',
 'ipb-confirm' => 'אישור החסימה',
@@ -2830,7 +2835,7 @@ $1',
 'unblockip' => 'שחרור חסימה',
 'unblockiptext' => 'השתמשו בטופס שלהלן כדי להחזיר את הרשאות הכתיבה למשתמש או כתובת IP חסומים.',
 'ipusubmit' => 'שחרור חסימה',
-'unblocked' => 'המשתמש [[User:$1|$1]] שוחרר מחסימתו.',
+'unblocked' => '[[User:$1|$1]] {{GENDER:$1|שוחרר מחסימתו|שוחררה מחסימתה}}.',
 'unblocked-range' => '$1 שוחרר מחסימתו.',
 'unblocked-id' => 'חסימה מספר $1 שוחררה.',
 'blocklist' => 'משתמשים חסומים',
@@ -2868,7 +2873,7 @@ $1',
 'blocklogpage' => 'יומן חסימות',
 'blocklog-showlog' => 'משתמש זה נחסם בעבר. יומן החסימות מוצג למטה:',
 'blocklog-showsuppresslog' => 'משתמש זה נחסם והוסתר בעבר. יומן ההסתרות מוצג למטה:',
-'blocklogentry' => '{{GENDER:$4|חסם|חסמה}} את [[$1]] למשך $2 $3',
+'blocklogentry' => 'חסם את [[$1]] למשך $2 $3',
 'reblock-logentry' => 'שינה את הגדרות החסימה של [[$1]] עם זמן פקיעה של $2 $3',
 'blocklogtext' => 'זהו יומן פעולות החסימה והשחרור של משתמשים.
 כתובות IP שנחסמו אוטומטית אינן מופיעות.
@@ -2970,7 +2975,7 @@ $1',
 'cant-move-user-page' => 'אינכם מורשים להעביר דפי משתמש (למעט דפי משנה).',
 'cant-move-to-user-page' => 'אינכם מורשים להעביר דף לדף משתמש (למעט לדף משנה של דף משתמש).',
 'newtitle' => 'לשם החדש:',
-'move-watch' => 'מעקב אחרי דף המקור ואחרי דף היעד',
+'move-watch' => 'מעקב אחר דף המקור ואחר דף היעד',
 'movepagebtn' => 'העברה',
 'pagemovedsub' => 'ההעברה הושלמה בהצלחה',
 'movepage-moved' => 'הדף "$1" הועבר לשם "$2".',
@@ -3235,10 +3240,10 @@ $2',
 'monobook.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Monobook */',
 'modern.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Modern */',
 'vector.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Vector */',
-'group-autoconfirmed.js' => '/* ×\9b×\9c ×¡×§×¨×\99פ×\98 JavaScript ×©× ×\9bת×\91 ×\9b×\90×\9f ×\99ר×\95×¥ ×¨×§ ×¢×\91×\95ר ×\9eשת×\9eש×\99×\9d ×\95ת×\99ק×\99×\9d */',
-'group-bot.js' => '/* ×\9b×\9c ×¡×§×¨×\99פ×\98 JavaScript ×©× ×\9bת×\91 ×\9b×\90×\9f ×\99ר×\95×¥ ×¨×§ ×¢×\91×\95ר ×\91×\95×\98×\99×\9d */',
-'group-sysop.js' => '/* ×\9b×\9c ×¡×§×¨×\99פ×\98 JavaScript ×©× ×\9bת×\91 ×\9b×\90×\9f ×\99ר×\95×¥ ×¨×§ ×¢×\91×\95ר ×\9eפע×\99×\9c×\99 ×\9eער×\9bת */',
-'group-bureaucrat.js' => '/* ×\9b×\9c ×¡×§×¨×\99פ×\98 JavaScript ×©× ×\9bת×\91 ×\9b×\90×\9f ×\99ר×\95×¥ ×¨×§ ×¢×\91×\95ר ×\91×\99×\95ר×\95קר×\98×\99×\9d */',
+'group-autoconfirmed.js' => '/* ×\9b×\9c ×¡×§×¨×\99פ×\98 JavaScript ×©× ×\9bת×\91 ×\9b×\90×\9f ×\99ר×\95×¥ ×¢×\91×\95ר ×\9eשת×\9eש×\99×\9d ×\95ת×\99ק×\99×\9d ×\91×\9c×\91×\93 */',
+'group-bot.js' => '/* ×\9b×\9c ×¡×§×¨×\99פ×\98 JavaScript ×©× ×\9bת×\91 ×\9b×\90×\9f ×\99ר×\95×¥ ×¢×\91×\95ר ×\91×\95×\98×\99×\9d ×\91×\9c×\91×\93 */',
+'group-sysop.js' => '/* ×\9b×\9c ×¡×§×¨×\99פ×\98 JavaScript ×©× ×\9bת×\91 ×\9b×\90×\9f ×\99ר×\95×¥ ×¢×\91×\95ר ×\9eפע×\99×\9c×\99 ×\9eער×\9bת ×\91×\9c×\91×\93 */',
+'group-bureaucrat.js' => '/* ×\9b×\9c ×¡×§×¨×\99פ×\98 JavaScript ×©× ×\9bת×\91 ×\9b×\90×\9f ×\99ר×\95×¥ ×¢×\91×\95ר ×\91×\99×\95ר×\95קר×\98×\99×\9d ×\91×\9c×\91×\93 */',
 
 # Metadata
 'notacceptable' => 'האתר לא יכול לספק מידע בפורמט שתוכנת הלקוח יכולה לקרוא.',
@@ -3305,7 +3310,7 @@ $2',
 'pageinfo-contentpage-yes' => 'כן',
 'pageinfo-protect-cascading' => 'מופעלת הגנה מדורגת מכאן',
 'pageinfo-protect-cascading-yes' => 'כן',
-'pageinfo-protect-cascading-from' => '×\93×£ ×\96×\94 ×\9e×\95×\92×\9f ×\91×\92×\9cל הגנה מדורגת על',
+'pageinfo-protect-cascading-from' => '×\93×£ ×\96×\94 ×\9e×\95×\92×\9f ×\91של הגנה מדורגת על',
 'pageinfo-category-info' => 'מידע על הקטגוריה',
 'pageinfo-category-pages' => 'מספר הדפים',
 'pageinfo-category-subcats' => 'מספר קטגוריות המשנה',
@@ -4163,7 +4168,10 @@ $5
 'tags-tag' => 'שם התגית',
 'tags-display-header' => 'הופעה ברשימות השינויים',
 'tags-description-header' => 'תיאור מלא של המשמעות',
+'tags-active-header' => 'פעילה?',
 'tags-hitcount-header' => 'שינויים עם תגיות',
+'tags-active-yes' => 'כן',
+'tags-active-no' => 'לא',
 'tags-edit' => 'עריכה',
 'tags-hitcount' => '{{PLURAL:$1|שינוי אחד|$1 שינויים}}',
 
@@ -4209,17 +4217,17 @@ $5
 'sqlite-no-fts' => '$1 ללא תמיכה בחיפוש בטקסט מלא',
 
 # New logging system
-'logentry-delete-delete' => '$1 {{GENDER:$2|מחק|מחקה}} את הדף $3',
-'logentry-delete-restore' => '$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|מחק|מחקה}} את הדף $3&rlm;',
+'logentry-delete-restore' => '$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3&rlm;',
 'logentry-delete-event' => '$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של {{PLURAL:$5|פעולת יומן|$5 פעולות יומן}} של $3: $4',
-'logentry-delete-revision' => '$1 {{GENDER:$2|ש×\99× ×\94|ש×\99נת×\94}} ×\90ת ×\9eצ×\91 ×\94תצ×\95×\92×\94 ×©×\9c {{PLURAL:$5|×\92רס×\94|$5 ×\92רס×\90×\95ת}} ×©×\9c ×\94דף $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|ש×\99× ×\94|ש×\99נת×\94}} ×\90ת ×\9eצ×\91 ×\94תצ×\95×\92×\94 ×©×\9c {{PLURAL:$5|×\92רס×\94|$5 ×\92רס×\90×\95ת}} ×\91דף $3: $4',
 'logentry-delete-event-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של פעולות יומן של $3',
 'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של גרסאות בדף $3',
 'logentry-suppress-delete' => '$1 {{GENDER:$2|הסתיר|הסתירה}} לחלוטין את הדף $3',
 'logentry-suppress-event' => '$1 {{GENDER:$2|שינה|שינתה}} בסודיות את מצב התצוגה של {{PLURAL:$5|פעולת יומן|$5 פעולות יומן}} של $3: $4',
-'logentry-suppress-revision' => '$1 {{GENDER:$2|ש×\99× ×\94|ש×\99נת×\94}} ×\91ס×\95×\93×\99×\95ת ×\90ת ×\9eצ×\91 ×\94תצ×\95×\92×\94 ×©×\9c {{PLURAL:$5|×\92רס×\94|$5 ×\92רס×\90×\95ת}} ×©×\9c ×\94דף $3: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|ש×\99× ×\94|ש×\99נת×\94}} ×\91ס×\95×\93×\99×\95ת ×\90ת ×\9eצ×\91 ×\94תצ×\95×\92×\94 ×©×\9c {{PLURAL:$5|×\92רס×\94|$5 ×\92רס×\90×\95ת}} ×\91דף $3: $4',
 'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} בסודיות את מצב התצוגה של פעולות יומן של $3',
-'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|ש×\99× ×\94|ש×\99נת×\94}} ×\91ס×\95×\93×\99×\95ת ×\90ת ×\9eצ×\91 ×\94תצ×\95×\92×\94 ×©×\9c ×\92רס×\90×\95ת ×©×\9c ×\94דף $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|ש×\99× ×\94|ש×\99נת×\94}} ×\91ס×\95×\93×\99×\95ת ×\90ת ×\9eצ×\91 ×\94תצ×\95×\92×\94 ×©×\9c ×\92רס×\90×\95ת ×\91דף $3',
 'revdelete-content-hid' => 'התוכן הוסתר',
 'revdelete-summary-hid' => 'תקציר העריכה הוסתר',
 'revdelete-uname-hid' => 'שם המשתמש הוסתר',
@@ -4228,7 +4236,7 @@ $5
 'revdelete-uname-unhid' => 'הסתרת שם המשתמש בוטלה',
 'revdelete-restricted' => 'נוספו הגבלות למפעילי מערכת',
 'revdelete-unrestricted' => 'הוסרו הגבלות ממפעילי מערכת',
-'logentry-move-move' => '$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל$4',
+'logentry-move-move' => '$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}}',
 'logentry-move-move-noredirect' => '$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} בלי להשאיר הפניה',
 'logentry-move-move_redir' => '$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה',
 'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה ובלי להשאיר הפניה',
@@ -4239,7 +4247,7 @@ $5
 'logentry-newusers-create2' => 'חשבון המשתמש $3 נוצר על ידי $1',
 'logentry-newusers-byemail' => 'חשבון המשתמש $3 נוצר על ידי $1 והסיסמה נשלחה בדוא"ל',
 'logentry-newusers-autocreate' => 'חשבון המשתמש $1 {{GENDER:$2|נוצר}} אוטומטית',
-'logentry-rights-rights' => '$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3 מ$4 ל$5',
+'logentry-rights-rights' => '$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3 מ$4 ל$5&rlm;',
 'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3',
 'logentry-rights-autopromote' => '$1 קודם אוטומטית מ$4 ל$5',
 'rightsnone' => '(כלום)',
@@ -4289,7 +4297,7 @@ $5
 'api-error-invalid-file-key' => 'שגיאה פנימית: הקובץ לא נמצא במאגר הזמני.',
 'api-error-missingparam' => 'שגיאה פנימית: פרמטרים חסרים בבקשה שנשלחה.',
 'api-error-missingresult' => 'שגיאה פנימית: לא ניתן לקבוע אם ההעתקה הצליחה.',
-'api-error-mustbeloggedin' => '×¢×\9c×\99×\9b×\9d ×\9c×\94×\99×\95ת ×\9e×\97×\95×\91ר×\99×\9d לחשבון כדי להעלות קבצים.',
+'api-error-mustbeloggedin' => '×\99ש ×\9c×\94×\99×\9bנס לחשבון כדי להעלות קבצים.',
 'api-error-mustbeposted' => 'שגיאה פנימית: הבקשה דורשת שימוש בשיטת POST של HTTP.',
 'api-error-noimageinfo' => 'ההעלאה הושלמה בהצלחה, אבל השרת לא נתן לנו שום מידע על הקובץ.',
 'api-error-nomodule' => 'שגיאה פנימית: מודול ההעלאה אינו מוגדר.',
@@ -4329,9 +4337,9 @@ $5
 'limitreport-ppvisitednodes' => 'מספר הצמתים שקדם־המפענח ביקר בהם',
 'limitreport-ppgeneratednodes' => 'מספר הצמתים שקדם־המפענח יצר',
 'limitreport-postexpandincludesize' => 'גודל הטקסט המוכלל לאחר הפריסה',
-'limitreport-postexpandincludesize-value' => '$1/$2 בתים',
+'limitreport-postexpandincludesize-value' => '{{PLURAL:$2|$1 מתוך בית אחד|$1/$2 בתים}}',
 'limitreport-templateargumentsize' => 'גודל הפרמטרים של התבניות',
-'limitreport-templateargumentsize-value' => '$1/$2 בתים',
+'limitreport-templateargumentsize-value' => '{{PLURAL:$2|$1 מתוך בית אחד|$1/$2 בתים}}',
 'limitreport-expansiondepth' => 'עומק הפריסה הגבוה ביותר',
 'limitreport-expensivefunctioncount' => 'מספר פונקציות המפענח שגוזלות משאבים',
 
index 007e8e1..91834c5 100644 (file)
@@ -435,7 +435,7 @@ $1',
 # 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).
 'aboutsite' => '{{SITENAME}} के बारे में',
 'aboutpage' => 'Project:परिचय',
-'copyright' => 'उपलब्ध सामग्री $1 के अधीन है।',
+'copyright' => 'उपलब्ध सामग्री $1 के अधीन है जब तक अलग से उल्लेख ना किया गया हो।',
 'copyrightpage' => '{{ns:project}}:सर्वाधिकार',
 'currentevents' => 'हाल की घटनाएँ',
 'currentevents-url' => 'Project:हाल की घटनाएँ',
@@ -1066,6 +1066,7 @@ $2
 'expansion-depth-exceeded-warning' => 'पृष्ठ में विस्तार गहराई पार की गई है',
 'parser-unstrip-loop-warning' => 'Unstrip लूप पाया गया',
 'parser-unstrip-recursion-limit' => 'Unstrip पुनरावर्तन सीमा पार की गई ($1)',
+'converter-manual-rule-error' => 'मैन्यूअल भाषा परिवर्तन नियम में त्रुटि',
 
 # "Undo" feature
 'undo-success' => 'यह संपादन पूर्ववत किया जा सकता है।
index 9464e46..d27923c 100644 (file)
@@ -42,12 +42,12 @@ $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' => 'Dher jan se badla gais panna, haali ke badlao aur dhyan suchi me (Javascript maange hae)',
+'tog-usenewrc' => 'Dher jan se badla gais panna, haali ke badlao aur dhyan suchi me',
 '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)',
+'tog-showtoolbar' => 'Badle waala toolbar ke dekhao',
+'tog-editondblclick' => 'Dugnaa click pe panna ke badlo',
 'tog-editsection' => '[Badlao] ke jorr se section ke badlao se enable karo',
-'tog-editsectiononrightclick' => 'Bhaag ke title pe right click kare pe bhaag ke badle ke laabu karo  (JavaScript)',
+'tog-editsectiononrightclick' => 'Bhaag ke title pe right click kare pe bhaag ke badle ke laabu karo',
 '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 aur upload karaa gais file ke hamaar dhyaan suchi me jorro',
@@ -65,7 +65,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Ketna sadasya dekhe hai ke number dekhao',
 'tog-oldsig' => 'Abhi ke signature:',
 'tog-fancysig' => 'Signature ke wikitext ke rakam dekho (binaa automatic jorr se)',
-'tog-uselivepreview' => 'Jinda jhalak ke kaam me lao (JavaScript) (Experimental)',
+'tog-uselivepreview' => 'Jinda jhalak ke kaam me lao',
 'tog-forceeditsummary' => 'Ek khali badlao waala summary ke likhe ke time hamse puchho',
 'tog-watchlisthideown' => 'Hamaar badlao ke hamaar dhyaan suchi se lukao',
 'tog-watchlisthidebots' => 'Bot waala badlao ke hamaar dhyaan suchi se lukao',
@@ -78,6 +78,7 @@ $messages = array(
 'tog-showhiddencats' => 'Lukawal waala vibhag ke dekhao',
 'tog-norollbackdiff' => 'Rollback kare ke baad diff ke mitae do',
 'tog-useeditwarning' => 'Jab ham koi panna se bina bachae nikaltaa hae, tab hamke warning do',
+'tog-prefershttps' => 'Logged in hoe pe secure connection ke kaam me lao',
 
 'underline-always' => 'Sab time',
 'underline-never' => 'Kabhi nai',
@@ -178,7 +179,7 @@ $messages = array(
 'newwindow' => '(Nawaa window me khule hai)',
 'cancel' => 'Nai karo',
 'moredotdotdot' => 'Aur...',
-'morenotlisted' => 'Au ke nai list karaa gais hae...',
+'morenotlisted' => 'Ii suchi puura nai hae',
 'mypage' => 'Panna',
 'mytalk' => 'Baat',
 'anontalk' => 'Ii IP khatir bichar',
@@ -281,7 +282,7 @@ $1',
 # 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).
 'aboutsite' => '{{SITENAME}} ke baare me',
 'aboutpage' => 'Project:Ke baare me',
-'copyright' => 'Ii panna me likha gae chij ke aap $1 ke niche kaam me lae sakta hai.',
+'copyright' => 'Agar duusra kaaran nai dewa gais hae, tab aap ii panna me likha gae chij ke aap $1 ke niche kaam me lae sakta hai.',
 'copyrightpage' => '{{ns:project}}:Chhaape ke adhikaar',
 'currentevents' => 'Abhi ke ghatna',
 'currentevents-url' => 'Project:Abhi ke ghatna',
@@ -364,6 +365,12 @@ Sahi khaas panna ke suchi [[Special:SpecialPages|{{int:specialpages}}]]pe mili.'
 # General errors
 'error' => 'Galti',
 'databaseerror' => 'Database me galti hai',
+'databaseerror-text' => 'Database ke khoj me kuchh karrbarr bhais hae
+Ii saait software me ek bug ke indicate kare hae.',
+'databaseerror-textcl' => 'Database ke khoj me kuchh garrbarri hoe gais hae.',
+'databaseerror-query' => 'Khoj:$1',
+'databaseerror-function' => 'Kaam: $1',
+'databaseerror-error' => 'Galti: $1',
 'laggedslavemode' => 'Chetawni: Panna me nawaa badlao sait nai hoi.',
 'readonly' => 'Database band hai',
 'enterlockreason' => 'Band kare ke kaaran likho, aur ii bhi likho ki kab khola jaai.',
@@ -396,6 +403,7 @@ Iske, URL ke likh ke, koi administrator ke report karo.',
 '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.',
+'no-null-revision' => 'Panna "$1" ke khatir nawaa null badlao nai banae sakaa 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.',
@@ -444,8 +452,7 @@ Jon administrator iske lock karis hae, koi kaaran nai diis hae: "$3"',
 # Login and logout pages
 'logouttext' => "'''Aap abhi logged out hai.'''
 
-Aap bina naam ke {{SITENAME}} ke kaam me lae sakta hai, nai to aap wahi sadasya ke naam se nai to duusra sadasya ke naam se <span class='plainlinks'>[$1 log in kare sakta hai]</span>.
-Yaad rakhna ki kuch panna wahi rakam se dekhai jaise ki aap log in bhaya hai, jab tak ki browser ke cache safaa nai hoe jaae.",
+Yaad rakhna ki kuch panna wahi rakam se dekhai jaise ki aap log in bhaya hai, jab talak ki browser ke cache safaa nai hoe jaae.",
 'welcomeuser' => 'Swagat, $1!',
 'welcomecreation-msg' => 'Aap ke account banae dewa gais hai.
 Aapan [[Special:Preferences|{{SITENAME}} pasand]]  ke badle nai bhulna.',
@@ -491,7 +498,7 @@ Aapan [[Special:Preferences|{{SITENAME}} pasand]]  ke badle nai bhulna.',
 'createacct-emailoptional' => 'Email address (jaruri nai hae)',
 'createacct-email-ph' => 'Aapan mail address ke likho',
 'createacct-another-email-ph' => 'Email address ke likho',
-'createaccountmail' => 'Ek temporary password ke kaam me laao aur iske niche dekhawa gais Email pe bhej do',
+'createaccountmail' => 'Ek temporary password ke kaam me laao aur iske batawa gais Email pe bhej do',
 'createacct-realname' => 'Aslii naam (jaruri nai hae)',
 'createaccountreason' => 'Kaaran:',
 'createacct-reason' => 'Kaaran',
@@ -569,11 +576,13 @@ Meharbaani kar ke achchha address ke enter karo nai to uu field ke khali kar do.
 Aap ke chaahi ki aap login kar ke password ke badal do.
 Agar ii account galti se banaa hai tab ii sandes ke ignore kar do.',
 'usernamehasherror' => 'Sadasya ke naam me hash akchhar ke nai kaam me lawa jaae sake hae',
-'login-throttled' => 'Aap bahut jaada dafe ii account ke password ke enter kare ke kosis karaa hai.
-Thora deri baad fir se kosis karna.',
+'login-throttled' => 'Aap bahut jaada dafe ii account ke password ke enter kare ke kosis karaa hae.
+$1 talak wait kar ke fir se try karo.',
 'login-abort-generic' => 'Aap ke login nai chalaa - Aborted',
 'loginlanguagelabel' => 'Bhasa: $1',
 'suspicious-userlogout' => 'Aap ke log out kare ke maang ke na kar dewa gais hae kaahe ki ii janaawe hae ki ii maang ke ek tuuta browser nai to caching proxy bhejis hae.',
+'createacct-another-realname-tip' => 'Aslii naam ke jaruri nai hae.
+Agar aap iske diya hae tab iske aapke kaam ke attribute kare ke khatir kaam me lawa jaai.',
 
 # Email sending
 'php-mail-error-unknown' => 'PHP ke mail() function me koi anjaan kharaabi hae',
@@ -590,7 +599,7 @@ Login khatam kare khatir, aap ke nawaa password set kare ke parri hian:',
 'newpassword' => 'Nawaa password:',
 'retypenew' => 'Password fir se type karo:',
 'resetpass_submit' => 'Password ke set kar ke login karo',
-'changepassword-success' => 'Aap ke password ke safalta se badal dewa gais hai! Aap ke ab login karaa jaae hai...',
+'changepassword-success' => 'Aap ke password ke safalta se badal dewa gais hai!',
 'resetpass_forbidden' => 'Password nai badlaa jaae sake hai',
 'resetpass-no-info' => 'Ii panna ke sidha access kare ke khatir aap ke logged in rahe ke parri.',
 'resetpass-submit-loggedin' => 'Password ke badlo',
@@ -652,7 +661,7 @@ Aap ke ii kare ke chaahi agar aap galti se ii jaankari ke aur koi ke de diya hae
 'resettokens-legend' => 'Token ke reset karo',
 'resettokens-tokens' => 'Chinh (token)',
 'resettokens-token-label' => '$1 (abhi ke value: $2)',
-'resettokens-watchlist-token' => 'Dhyan suchi ke web feed token',
+'resettokens-watchlist-token' => 'Dhyan suchi ke web feed token (Atom/RSS) of [[Special:Watchlist|changes to pages on your watchlist]]',
 'resettokens-done' => 'Token ke reset kar dewa gais hae.',
 'resettokens-resetbutton' => 'Chuna gais token ke reset karo',
 
@@ -1186,7 +1195,7 @@ Yaad rakhna ki uu log ke {{SITENAME}} ke index saait purana hoi.',
 'prefs-rendering' => 'Dekhe me kaise lage hai',
 'saveprefs' => 'Save karo',
 'resetprefs' => 'Binaa bachawa gias badlao ke mitao',
-'restoreprefs' => 'Sab default settings ke pahile jaise karo',
+'restoreprefs' => 'Sab default settings ke pahile jaise karo (sab vibhag me)',
 'prefs-editing' => 'Badaltaa hai',
 'rows' => 'Line:',
 'columns' => 'Column:',
@@ -1245,10 +1254,10 @@ Iske pahile jaise nai karaa jaawe sake hai.',
 'badsig' => 'Invalid raw signature; HTML tags ke check karo.',
 'badsiglength' => 'Signature bahut lambaa hai.
 Iske $1 {{PLURAL:$1|character|characters}} se kamti rahe ke chaahi.',
-'yourgender' => 'Admi ki aurat:',
-'gender-unknown' => 'Khaas ruup nai dewa gais hae',
-'gender-male' => 'Admi',
-'gender-female' => 'Aurat',
+'yourgender' => 'Aap kaise describe hoe mangtaa hae?',
+'gender-unknown' => 'Ham bole nai mangtaa hae',
+'gender-male' => 'Uu wiki panna ke badle hae',
+'gender-female' => 'Uu wiki panna ke badle hae',
 'prefs-help-gender' => 'Optional: used for gender-correct addressing by the software. This information will be public.',
 'email' => 'E-mail',
 'prefs-help-realname' => 'Asli naam ke jaruri nai hai lekin agar jo aap aapan naam diya hai to iske aap ke kaam ke pahachane khatir kaam me lawa jai.',
@@ -1272,6 +1281,7 @@ Iske $1 {{PLURAL:$1|character|characters}} se kamti rahe ke chaahi.',
 'prefs-displaywatchlist' => 'Choice dekhao',
 'prefs-tokenwatchlist' => 'Chinh (token)',
 'prefs-diffs' => 'Farka',
+'prefs-help-prefershttps' => 'Aap ke agla login pe ii preferences effect me aai.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mail address kanuni hae',
index fa07b71..a6e681f 100644 (file)
@@ -322,12 +322,12 @@ $messages = array(
 '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',
 'tog-extendwatchlist' => 'A figyelőlistán az összes változtatás látszódjon, ne csak az utolsó',
-'tog-usenewrc' => 'Szerkesztések csoportosítása oldal szerint a friss változtatásokban és a figyelőlistán (JavaScript-alapú)',
+'tog-usenewrc' => 'Szerkesztések csoportosítása oldal szerint a friss változtatásokban és a figyelőlistán',
 'tog-numberheadings' => 'Fejezetcímek automatikus számozása',
-'tog-showtoolbar' => 'Szerkesztőeszközsor megjelenítése (JavaScript-alapú)',
-'tog-editondblclick' => 'A lapok szerkesztése dupla kattintásra (JavaScript-alapú)',
+'tog-showtoolbar' => 'Szerkesztőeszközsor megjelenítése',
+'tog-editondblclick' => 'A lapok szerkesztése dupla kattintásra',
 'tog-editsection' => '[szerkesztés] linkek az egyes szakaszok szerkesztéséhez',
-'tog-editsectiononrightclick' => 'Szakaszok szerkesztése a szakaszcímre való jobb kattintással (JavaScript-alapú)',
+'tog-editsectiononrightclick' => 'Szakaszok szerkesztése a szakaszcímre való jobb kattintással',
 'tog-showtoc' => 'Tartalomjegyzék megjelenítése a három fejezetnél többel rendelkező cikkeknél',
 'tog-rememberpassword' => 'Emlékezzen rám ezzel a böngészővel (legfeljebb {{PLURAL:$1|egy|$1}} napig)',
 'tog-watchcreations' => 'Az általam létrehozott lapok és feltöltött fájlok felvétele a figyelőlistámra',
@@ -345,7 +345,7 @@ $messages = array(
 'tog-shownumberswatching' => 'A lapot figyelő szerkesztők számának megjelenítése',
 'tog-oldsig' => 'A jelenlegi aláírás:',
 'tog-fancysig' => 'Az aláírás wikiszöveg (nem lesz automatikusan hivatkozásba rakva)',
-'tog-uselivepreview' => 'Élő előnézet használata (JavaScript-alapú, kísérleti)',
+'tog-uselivepreview' => 'Élő előnézet használata (kísérleti)',
 'tog-forceeditsummary' => 'Figyelmeztessen, ha nem adok meg szerkesztési összefoglalót',
 'tog-watchlisthideown' => 'Saját szerkesztések elrejtése',
 'tog-watchlisthidebots' => 'Robotok szerkesztéseinek elrejtése',
@@ -459,7 +459,7 @@ $messages = array(
 'newwindow' => '(új ablakban nyílik meg)',
 'cancel' => 'Mégse',
 'moredotdotdot' => 'Tovább…',
-'morenotlisted' => 'Tovább…',
+'morenotlisted' => 'A lista nem teljes.',
 'mypage' => 'Lapom',
 'mytalk' => 'Vitalap',
 'anontalk' => 'Az IP-címhez tartozó vitalap',
@@ -561,7 +561,7 @@ $1',
 # 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).
 'aboutsite' => 'A {{SITENAME}} wikiről',
 'aboutpage' => 'Project:Rólunk',
-'copyright' => 'A tartalom a(z) $1 feltételei szerint használható fel.',
+'copyright' => 'A tartalom további jelölés hiányában a(z) $1 feltételei szerint használható fel.',
 'copyrightpage' => '{{ns:project}}:Szerzői jogok',
 'currentevents' => 'Aktuális események',
 'currentevents-url' => 'Project:Friss események',
@@ -646,6 +646,11 @@ Az érvényes speciális lapok listáját a [[Special:SpecialPages|{{int:special
 # General errors
 'error' => 'Hiba',
 'databaseerror' => 'Adatbázishiba',
+'databaseerror-text' => 'Hiba történt az adatbázis-lekérdezés során. Lehetséges, hogy ez egy szoftverhiba eredménye.',
+'databaseerror-textcl' => 'Hiba történt az adatbázis-lekérdezés során.',
+'databaseerror-query' => 'Lekérdezés: $1',
+'databaseerror-function' => 'Függvény: $1',
+'databaseerror-error' => 'Hiba: $1',
 'laggedslavemode' => "'''Figyelem:''' Ez a lap nem feltétlenül tartalmazza a legfrissebb változtatásokat!",
 'readonly' => 'Az adatbázis le van zárva',
 'enterlockreason' => 'Add meg a lezárás okát, valamint egy becslést, hogy mikor lesz a lezárásnak vége',
@@ -679,6 +684,7 @@ Talán már valaki más törölte.',
 'cannotdelete-title' => 'Nem lehet törölni a(z) „$1” lapot',
 'delete-hook-aborted' => 'A törlés meg lett szakítva egy hook által.
 Nem lett magyarázat csatolva.',
+'no-null-revision' => 'Nem sikerült új null-revíziót létrehozni a(z) „$1” lap számára.',
 'badtitle' => 'Hibás cím',
 'badtitletext' => 'A kért oldal címe érvénytelen, üres, vagy rosszul hivatkozott nyelvközi vagy wikiközi cím volt. Olyan karaktereket is tartalmazhatott, melyek a címekben nem használhatóak.',
 'perfcached' => "Az alábbi adatok gyorsítótárból (''cache''-ből) származnak, és ezért lehetséges, hogy nem a legfrissebb változatot mutatják. Legfeljebb {{PLURAL:$1|egy|$1 }} eredmény áll rendelkezésre a gyorsítótárban.",
@@ -701,6 +707,10 @@ $2',
 'namespaceprotected' => "Nincs jogosultságod a(z) '''$1''' névtérben található lapok szerkesztésére.",
 'customcssprotected' => 'Nem szerkesztheted ezt a CSS-lapot, mert egy másik felhasználó személyes beállításait tartalmazza.',
 'customjsprotected' => 'Nem szerkesztheted ezt a JavaScript-lapot, mert egy másik felhasználó személyes beállításait tartalmazza.',
+'mycustomcssprotected' => 'Nincs jogod szerkeszteni ezt a CSS lapot.',
+'mycustomjsprotected' => 'Nincs jogod szerkeszteni ezt a Javascript lapot.',
+'myprivateinfoprotected' => 'Nincs jogod módosítani a privát adataidat.',
+'mypreferencesprotected' => 'Nincs jogod módosítani a beállításaidat.',
 'ns-specialprotected' => 'A speciális lapok nem szerkeszthetők.',
 'titleprotected' => "Ilyen címmel nem lehet szócikket készíteni, [[User:$1|$1]] letiltotta.
 Az indoklás: „''$2''”.",
@@ -720,7 +730,6 @@ A lezárást végrehajtó rendszergazda az alábbi indoklást adta meg: "$3".',
 # Login and logout pages
 'logouttext' => "'''Sikeresen kijelentkeztél.'''
 
-Folytathatod névtelenül  a(z) {{SITENAME}} használatát, vagy <span class='plainlinks'>[$1 ismét bejelentkezhetsz]</span> ugyanezzel, vagy egy másik névvel.
 Lehetséges, hogy néhány oldalon továbbra is azt látod, be vagy jelentkezve, mindaddig, amíg nem üríted a böngésződ gyorsítótárát.",
 'welcomeuser' => 'Üdvözlünk, $1!',
 'welcomecreation-msg' => 'A felhasználói fiókod elkészült.
@@ -728,6 +737,7 @@ Ne felejtsd el módosítani a [[Special:Preferences|{{SITENAME}} beállításaid
 'yourname' => 'Szerkesztőneved:',
 'userlogin-yourname' => 'Felhasználónév',
 'userlogin-yourname-ph' => 'Add meg a felhasználóneved',
+'createacct-another-username-ph' => 'Add meg a felhasználónevet',
 'yourpassword' => 'Jelszavad:',
 'userlogin-yourpassword' => 'Jelszó',
 'userlogin-yourpassword-ph' => 'Add meg a jelszavad',
@@ -761,10 +771,12 @@ Ne felejtsd el módosítani a [[Special:Preferences|{{SITENAME}} beállításaid
 'helplogin-url' => 'Help:Bejelentkezés',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Segítség a bejelentkezéshez]]',
 'createacct-join' => 'Add meg az alábbi információkat.',
+'createacct-another-join' => 'Add meg az új fiók adatait alább.',
 'createacct-emailrequired' => 'E-mail cím',
 'createacct-emailoptional' => 'E-mail cím (opcionális)',
 'createacct-email-ph' => 'Add meg e-mail címed',
-'createaccountmail' => 'Átmeneti, véletlenszerű jelszó használata és kiküldése az alábbi e-mail címre',
+'createacct-another-email-ph' => 'Add meg az emailcímet',
+'createaccountmail' => 'Átmeneti, véletlenszerű jelszó beállítása és kiküldése a megadott e-mail címre',
 'createacct-realname' => 'Igazi neved (nem kötelező)',
 'createaccountreason' => 'Indoklás:',
 'createacct-reason' => 'Indoklás',
@@ -772,6 +784,7 @@ Ne felejtsd el módosítani a [[Special:Preferences|{{SITENAME}} beállításaid
 'createacct-captcha' => 'Biztonsági ellenőrzés',
 'createacct-imgcaptcha-ph' => 'Írd be a szöveget, amit fent látsz',
 'createacct-submit' => 'Felhasználói fiók létrehozása',
+'createacct-another-submit' => 'Újabb felhasználó létrehozása',
 'createacct-benefit-heading' => 'A(z) {{SITENAME}}-t hozzád hasonló emberek készítik.',
 'createacct-benefit-body1' => '{{PLURAL:$1|szerkesztés|szerkesztés}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|lap|lap}}',
@@ -830,7 +843,7 @@ A visszaélések elkerülése végett {{PLURAL:$1|egy|$1}} óránként csak egy
 'cannotchangeemail' => 'Ezen a wikin nem módosítható a fiókhoz tartozó e-mail cím.',
 'emaildisabled' => 'Ez az oldal nem küld e-maileket.',
 'accountcreated' => 'Felhasználói fiók létrehozva',
-'accountcreatedtext' => '$1 felhasználói fiókja sikeresen létrejött.',
+'accountcreatedtext' => '[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|vita]]) felhasználói fiókja sikeresen létrejött.',
 'createaccount-title' => 'Új {{SITENAME}}-azonosító létrehozása',
 'createaccount-text' => 'Valaki létrehozott számodra egy "$2" nevű {{SITENAME}}-azonosítót ($4).
 A hozzá tartozó jelszó "$3", melyet a bejelentkezés után minél előbb változtass meg.
@@ -838,7 +851,7 @@ A hozzá tartozó jelszó "$3", melyet a bejelentkezés után minél előbb vál
 Ha nem kértél új azonosítót, és tévedésből kaptad ezt a levelet, hagyd figyelmen kívül.',
 'usernamehasherror' => 'A felhasználónév nem tartalmazhat hash karaktereket',
 'login-throttled' => 'Túl sok hibás bejelentkezés.
-Várj egy kicsit, mielőtt újra próbálkozol.',
+Várj $1, mielőtt újra próbálkozol.',
 'login-abort-generic' => 'A bejelentkezés sikertelen – megszakítva',
 'loginlanguagelabel' => 'Nyelv: $1',
 'suspicious-userlogout' => 'A kijelentkezési kérésed vissza lett utasítva, mert úgy tűnik, hogy egy hibás böngésző vagy gyorsítótárazó proxy küldte.',
@@ -857,7 +870,7 @@ Várj egy kicsit, mielőtt újra próbálkozol.',
 'newpassword' => 'Új jelszó:',
 'retypenew' => 'Új jelszó ismét:',
 'resetpass_submit' => 'Add meg a jelszót és jelentkezz be',
-'changepassword-success' => 'A jelszavad megváltoztatása sikeresen befejeződött! Bejelentkezés...',
+'changepassword-success' => 'A jelszavad megváltoztatása sikeresen befejeződött!',
 'resetpass_forbidden' => 'A jelszavak nem változtathatók meg',
 'resetpass-no-info' => 'Be kell jelentkezned, hogy közvetlenül elérd ezt a lapot.',
 'resetpass-submit-loggedin' => 'Jelszó megváltoztatása',
@@ -1319,6 +1332,7 @@ Győződj meg róla, hogy a laptörténet folytonossága megmarad.',
 'compareselectedversions' => 'Kiválasztott változatok összehasonlítása',
 'showhideselectedversions' => 'Kiválasztott változatok láthatóságának beállítása',
 'editundo' => 'visszavonás',
+'diff-empty' => '(Nincs különbség)',
 'diff-multi' => '({{PLURAL:$2|egy|$2}} szerkesztő {{PLURAL:$1|egy|$1}} közbeeső változata nincs mutatva)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Egy közbeeső változat|$1 közbeeső változat}} nincs mutatva, amit $2 szerkesztő módosított)',
 'difference-missing-revision' => 'A(z) "{{PAGENAME}}" nevű oldal #$1 $2 változata nem létezik.
@@ -1429,6 +1443,9 @@ Ezt általában egy elavult, törölt oldalra mutató laptörténeti hivatkozás
 'recentchangesdays-max' => '(maximum {{PLURAL:$1|egy|$1}} nap)',
 'recentchangescount' => 'Az alapértelmezettként mutatott szerkesztések száma:',
 'prefs-help-recentchangescount' => 'Ez vonatkozik a friss változtatásokra, laptörténetekre és naplókra is.',
+'prefs-help-watchlist-token2' => 'Ez a titkos kulcs a figyelőlistádhoz.
+Aki ismeri, meg tudja nézni, milyen lapokat figyelsz, úgyhogy ne oszdd meg másokkal.
+[[Special:ResetTokens|Kattints ide, ha meg akarod változtatni]].',
 'savedprefs' => 'Az új beállításaid érvénybe léptek.',
 'timezonelegend' => 'Időzóna:',
 'localtime' => 'Helyi idő:',
@@ -1659,9 +1676,12 @@ A műveletet nem lehet visszavonni.',
 
 # Recent changes
 'nchanges' => '{{PLURAL:$1|egy|$1}} változtatás',
+'enhancedrc-since-last-visit' => '$1 az utolsó látogatás óta',
+'enhancedrc-history' => 'történet',
 'recentchanges' => 'Friss változtatások',
 'recentchanges-legend' => 'A friss változtatások beállításai',
 'recentchanges-summary' => 'Ezen a lapon a wikiben történt legutóbbi fejleményeket lehet nyomon követni.',
+'recentchanges-noresult' => 'A megadott időszakban nincs a feltételeknek megfelelő szerkesztés.',
 'recentchanges-feed-description' => 'Kövesd a wiki friss változtatásait ezzel a hírcsatornával.',
 'recentchanges-label-newpage' => 'Ezzel a szerkesztéssel egy új lap jött létre',
 'recentchanges-label-minor' => 'Ez egy apró szerkesztés',
@@ -1689,7 +1709,7 @@ A műveletet nem lehet visszavonni.',
 'rc_categories_any' => 'Bármelyik',
 'rc-change-size-new' => '{{PLURAL:$1| egy bájt|$1 bájt}} módosítás után',
 'newsectionsummary' => '/* $1 */ (új szakasz)',
-'rc-enhanced-expand' => 'Részletek megjelenítése (JavaScript szükséges)',
+'rc-enhanced-expand' => 'Részletek megjelenítése',
 'rc-enhanced-hide' => 'Részletek elrejtése',
 'rc-old-title' => 'eredetileg létrehozott " $1 "',
 
@@ -4000,7 +4020,7 @@ A MediaWikit abban a reményben terjesztjük, hogy hasznos lesz, de GARANCIA NÉ
 'api-error-badtoken' => 'Belső hiba: hibás token.',
 'api-error-copyuploaddisabled' => 'Az URL-címes feltöltés nem engedélyezett ezen a kiszolgálón.',
 'api-error-duplicate' => 'Már van {{PLURAL:$1|egy|néhány}} [$2 másik fájl] az oldalon ugyanilyen tartalommal',
-'api-error-duplicate-archive' => 'Az oldalon {{PLURAL:$1|szerepelt|szerepeltek}} más [$2 más {{PLURAL:$1|fájl|fájlok}}] is ugyanezzel a tartalommal, de törlölve {{PLURAL:$1|lett|lettek}}.',
+'api-error-duplicate-archive' => 'Az oldalon {{PLURAL:$1|szerepelt|szerepeltek}} [$2 más {{PLURAL:$1|fájl|fájlok}}] is ugyanezzel a tartalommal, de törölve {{PLURAL:$1|lett|lettek}}.',
 'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|Az azonos fájl, ami törölve lett|Azonos fájlok, amik törölve lettek}}',
 'api-error-duplicate-popup-title' => '{{PLURAL:$1|Duplikátum|Duplikátumok}}',
 'api-error-empty-file' => 'Az általad elküldött fájl üres volt.',
index 567bdc2..e358141 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Ahmed-Najib-Biabani-Ibrahimkhel
  * @author Chaojoker
  * @author Nemo bis
  * @author Pandukht
@@ -1015,7 +1016,7 @@ $2',
 <charinsert>~ | ° ¹ ² ³ ¼ ½ ¾ € $ ¥ £ † × ← → ↔ ↑ ± ≠ © ® ™ ‰ «+» ‹+› „+“ „+” ‚+‘ ¡ ¿ …</charinsert> –
 <charinsert>&amp;nbsp; &nbsp; [[Category:+]] #REDIRECT[[+]] {{msg-mw|+|notext=1}}  ~~~~</charinsert>
 <charinsert>ڈ ڑ ٹ </charinsert>
-<charinsert>Ù¼ Ú\85 Ú\81 Ú\89 Ú\93 Ú\96 Ú\9a Ú« Ú¼ Ø¤ Ù\8a Û\90 Û\8d Ø¦ </charinsert>
+<charinsert>ټ څ ځ ډ ړ ږ ښ ڼ ؤ ي ې ۍ ئ </charinsert>
 <charinsert>{{{+}}} {{+}} {{subst:+}} <noinclude>+</noinclude></charinsert>
 </p></div>',
 'nocreatetext' => '{{SITENAME}} կայքում էջերի ստեղծման հնարավորությունը սահմանափակված է։
index 0c81558..a61585c 100644 (file)
@@ -392,7 +392,7 @@ $1',
 # 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).
 'aboutsite' => 'A proposito de {{SITENAME}}',
 'aboutpage' => 'Project:A proposito',
-'copyright' => 'Le contento es disponibile sub $1.',
+'copyright' => 'Le contento es disponibile sub $1 si non alteremente specificate.',
 'copyrightpage' => '{{ns:project}}:Copyright',
 'currentevents' => 'Actualitates',
 'currentevents-url' => 'Project:Actualitates',
@@ -570,7 +570,7 @@ Nota que alcun paginas pote continuar a apparer como si tu esserea ancora authen
 'welcomecreation-msg' => 'Tu conto ha essite create.
 Non oblida personalisar tu [[Special:Preferences|preferentias in {{SITENAME}}]].',
 'yourname' => 'Nomine de usator:',
-'userlogin-yourname' => 'Nomine de usator',
+'userlogin-yourname' => 'Nomine de usator',
 'userlogin-yourname-ph' => 'Entra tu nomine de usator',
 'createacct-another-username-ph' => 'Entra le nomine de usator',
 'yourpassword' => 'Contrasigno:',
@@ -1576,8 +1576,8 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut
 'action-block' => 'blocar iste usator de facer modificationes',
 'action-protect' => 'cambiar le nivellos de protection pro iste pagina',
 'action-rollback' => 'revocar rapidemente le modificationes del ultime usator qui modificava un particular pagina',
-'action-import' => 'importar iste pagina ab un altere wiki',
-'action-importupload' => 'importar iste pagina ex un file incargate',
+'action-import' => 'importar paginas ab un altere wiki',
+'action-importupload' => 'importar paginas ex un file incargate',
 'action-patrol' => 'marcar le modificationes de alteros como patruliate',
 'action-autopatrol' => 'haber tu modification marcate como patruliate',
 'action-unwatchedpages' => 'vider le lista de paginas non observate',
@@ -2122,6 +2122,7 @@ Le entratas <del>cancellate</del> ha essite resolvite.',
 'listusers' => 'Lista de usatores',
 'listusers-editsonly' => 'Monstrar solmente usatores con modificationes',
 'listusers-creationsort' => 'Ordinar per data de creation',
+'listusers-desc' => 'Ordinar in senso descendente',
 'usereditcount' => '$1 {{PLURAL:$1|modification|modificationes}}',
 'usercreated' => '{{GENDER:$3|Create}} le $1 a $2',
 'newpages' => 'Nove paginas',
@@ -2414,7 +2415,7 @@ un altere persona ha ja modificate o revocate le pagina.
 Le ultime modification esseva facite per [[User:$3|$3]] ([[User talk:$3|discussion]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Le summario del modification esseva: \"''\$1''\".",
 'revertpage' => 'Reverteva modificationes per [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussion]]) al ultime version per [[User:$1|$1]]',
-'revertpage-nouser' => 'Reverteva modificationes per un usator celate al ultime version per [[User:$1|$1]]',
+'revertpage-nouser' => 'Reverteva modificationes per un usator celate al ultime version per {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Revocava modificationes per $1;
 retornava al version per $2.',
 
@@ -4092,9 +4093,9 @@ Si non, tu pote usar le formulario facile hic infra. Tu commento essera addite a
 'limitreport-ppvisitednodes' => 'Numero de nodos de preprocessor visitate',
 'limitreport-ppgeneratednodes' => 'Numero de nodos de preprocessor generate',
 'limitreport-postexpandincludesize' => 'Dimension de inclusion post expansion',
-'limitreport-postexpandincludesize-value' => '$1/$2 bytes',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
 'limitreport-templateargumentsize' => 'Dimension del argumento del patrono',
-'limitreport-templateargumentsize-value' => '$1/$2 bytes',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
 'limitreport-expansiondepth' => 'Maxime profunditate de expansion',
 'limitreport-expensivefunctioncount' => 'Numero de functiones analysator costose',
 
index c4d2a28..3842069 100644 (file)
@@ -34,6 +34,7 @@
  * @author Rex
  * @author Rv77ax
  * @author Urhixidur
+ * @author William Surya Permana
  * @author לערי ריינהארט
  */
 
@@ -346,12 +347,12 @@ $messages = array(
 'tog-hidepatrolled' => 'Sembunyikan suntingan terpatroli di perubahan terbaru',
 'tog-newpageshidepatrolled' => 'Sembunyikan halaman terpatroli dari daftar halaman baru',
 'tog-extendwatchlist' => 'Kembangkan daftar pantauan untuk menunjukkan semua perubahan, tidak hanya yang terbaru',
-'tog-usenewrc' => 'Gunakan tampilan perubahan terbaru tingkat lanjut (memerlukan JavaScript)',
+'tog-usenewrc' => 'Kelompokkan suntingan di tampilan perubahan terbaru dan daftar pantauan berdasarkan halaman',
 'tog-numberheadings' => 'Beri nomor judul secara otomatis',
-'tog-showtoolbar' => 'Perlihatkan bilah alat penyuntingan',
-'tog-editondblclick' => 'Sunting halaman dengan klik ganda (JavaScript)',
+'tog-showtoolbar' => 'Tampilkan bilah alat penyuntingan',
+'tog-editondblclick' => 'Sunting halaman dengan klik ganda',
 'tog-editsection' => 'Fungsikan penyuntingan subbagian melalui pranala [sunting]',
-'tog-editsectiononrightclick' => 'Fungsikan penyuntingan subbagian dengan mengeklik kanan pada judul bagian (JavaScript)',
+'tog-editsectiononrightclick' => 'Fungsikan penyuntingan bagian dengan mengeklik kanan pada judul bagian',
 'tog-showtoc' => 'Perlihatkan daftar isi (untuk halaman yang mempunyai lebih dari 3 subbagian)',
 'tog-rememberpassword' => 'Ingat kata sandi saya di peramban ini (selama $1 {{PLURAL:$1|hari}})',
 'tog-watchcreations' => 'Tambahkan halaman yang saya buat ke daftar pantauan',
@@ -369,7 +370,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Tunjukkan jumlah pemantau',
 'tog-oldsig' => 'Tanda tangan sekarang:',
 'tog-fancysig' => 'Perlakukan tanda tangan sebagai teks wiki (tanpa suatu pranala otomatis)',
-'tog-uselivepreview' => 'Gunakan pratayang langsung (JavaScript) (eksperimental)',
+'tog-uselivepreview' => 'Gunakan pratayang langsung (eksperimental)',
 'tog-forceeditsummary' => 'Ingatkan saya bila kotak ringkasan suntingan masih kosong',
 'tog-watchlisthideown' => 'Sembunyikan suntingan saya di daftar pantauan',
 'tog-watchlisthidebots' => 'Sembunyikan suntingan bot di daftar pantauan',
@@ -486,7 +487,7 @@ $messages = array(
 'newwindow' => '(buka di jendela baru)',
 'cancel' => 'Batalkan',
 'moredotdotdot' => 'Lainnya...',
-'morenotlisted' => 'Selanjutnya...',
+'morenotlisted' => 'Daftar ini belum lengkap.',
 'mypage' => 'Halaman',
 'mytalk' => 'Pembicaraan',
 'anontalk' => 'Pembicaraan IP ini',
@@ -1777,7 +1778,7 @@ Jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan
 'rc-change-size' => '$1',
 'rc-change-size-new' => '$1 {{PLURAL:$1|bita|bita}} setelah perubahan',
 'newsectionsummary' => '/* $1 */ bagian baru',
-'rc-enhanced-expand' => 'Tampilkan rincian (memerlukan JavaScript)',
+'rc-enhanced-expand' => 'Tampilkan rincian',
 'rc-enhanced-hide' => 'Sembunyikan rincian',
 'rc-old-title' => 'awalnya dibuat sebagai "$1"',
 
@@ -2678,7 +2679,7 @@ $1',
 'contributions' => 'Kontribusi {{GENDER:$1|pengguna}}',
 'contributions-title' => 'Kontribusi pengguna untuk $1',
 'mycontris' => 'Kontribusi',
-'contribsub2' => 'Untuk $1 ($2)',
+'contribsub2' => 'Untuk {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Tidak ada perubahan yang sesuai dengan kriteria tersebut.',
 'uctop' => '(saat ini)',
 'month' => 'Sejak bulan (dan sebelumnya):',
@@ -2693,7 +2694,7 @@ $1',
 'sp-contributions-logs' => 'log',
 'sp-contributions-talk' => 'bicara',
 'sp-contributions-userrights' => 'pengelolaan hak pengguna',
-'sp-contributions-blocked-notice' => 'Pengguna ini sedang di blok. log pemblokiran terakhir ditampilkan berikut untuk referensi:',
+'sp-contributions-blocked-notice' => 'Pengguna ini sedang diblok. Log pemblokiran terakhir ditampilkan berikut untuk referensi:',
 'sp-contributions-blocked-notice-anon' => 'Alamat IP ini diblokir pada saat ini.
 Catatan log pemblokiran terakhir tersedia di bawah ini sebagai rujukan:',
 'sp-contributions-search' => 'Cari kontribusi',
index c5de1e0..2d5a126 100644 (file)
@@ -1721,8 +1721,7 @@ Nke ozor gí zonari na áká onwe ha.
 
 # Database error messages
 'dberr-header' => 'Wiki nka nwere nsogbu',
-'dberr-problems' => 'Ndó!
-Ámá nka nwere nsogbu ime ime.',
+'dberr-problems' => 'Ndó! Ámá nka nwere nsogbu ime ime.',
 
 # HTML forms
 'htmlform-required' => 'Ọgụgụ nke gi dị',
index e070127..d87b481 100644 (file)
@@ -42,12 +42,12 @@ $messages = array(
 'tog-hidepatrolled' => 'Ilemmeng dagiti napatruliaan nga inurnos kadagiti naudi a sinuk-sukatan',
 'tog-newpageshidepatrolled' => 'Ilemmeng dagiti napatruliaan a panid manipud ti 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' => 'Dagiti grupo a panagbaliw babaen ti panid kadagiti kinaudi a panagbaliw ken banbantayan  (masapul ti JavaScript)',
+'tog-usenewrc' => 'Dagiti grupo a panagbaliw babaen ti panid kadagiti kinaudi a panagbaliw ken banbantayan',
 'tog-numberheadings' => 'Automatiko a pabilangan dagiti paulo',
-'tog-showtoolbar' => 'Ipakita ti baras ti ramit ti panag-urnos (masapul ti JavaScript)',
-'tog-editondblclick' => 'Urnosen dagiti panid iti mamindua a panagpindut (masapul ti JavaScript)',
+'tog-showtoolbar' => 'Ipakita ti baras ti ramit ti panag-urnos',
+'tog-editondblclick' => 'Urnosen dagiti panid iti mamindua a panagpindut',
 'tog-editsection' => 'Pakabaelan ti panag-urnos ti paset babaen kadagiti silpo nga [urnosen]',
-'tog-editsectiononrightclick' => 'Pakabaelan ti panag-urnos ti paset babaen ti kanawan a panagpindut kadagiti titulo ti paset (masapul ti JavaScript)',
+'tog-editsectiononrightclick' => 'Pakabaelan ti panag-urnos ti paset babaen ti kanawan a panagpindut kadagiti titulo ti paset',
 'tog-showtoc' => 'Ipakita ti tabla dagiti linaon (para kadagiti panid nga adda ti ad-adu ngem dagiti 3 a paulo)',
 'tog-rememberpassword' => 'Laglagipem ti iseserrekko iti daytoy a pagbasabasa (iti kapaut nga $1 {{PLURAL:$1|aldaw|al-aldaw}})',
 'tog-watchcreations' => 'Agnayon kadagiti panid a pinartuatko ken papeles nga inkargak idiay listaan ti bambantayak',
@@ -65,7 +65,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Ipakita ti bilang dagiti agbuybuya nga agar-aramat',
 'tog-oldsig' => 'Ti adda a pirma:',
 'tog-fancysig' => 'Tratuen ti pirma a kas wikitext (nga awan ti automatiko a panagsilpo)',
-'tog-uselivepreview' => 'Usaren ti agdama a panagipadas (masapul ti JavaScript) (eksperimento)',
+'tog-uselivepreview' => 'Usaren ti agdama a panagipadas (eksperimento)',
 'tog-forceeditsummary' => 'Pakaammuannak no sumrek ti blanko a pakabuklan ti panag-urnos',
 'tog-watchlisthideown' => 'Ilemmeng dagiti inurnosko manipud ti listaan ti bambantayan',
 'tog-watchlisthidebots' => 'Ilemmeng dagiti inurnos ti bot manipud ti listaan ti bambantayan',
@@ -179,7 +179,7 @@ $messages = array(
 'newwindow' => '(aglukat iti sabali a tawa)',
 'cancel' => 'Ukasen',
 'moredotdotdot' => 'Adu pay...',
-'morenotlisted' => 'Adu a saan a nailista...',
+'morenotlisted' => 'Daytoy a listaan ket saan a kompleto.',
 'mypage' => 'Panid',
 'mytalk' => 'Tungtungan',
 'anontalk' => 'Tungtungan para iti daytoy a pagtaengan ti IP',
@@ -282,7 +282,7 @@ $1',
 # 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).
 'aboutsite' => 'Maipanggep ti {{SITENAME}}',
 'aboutpage' => 'Project:Maipanggep',
-'copyright' => 'Ti linaon ket magun-od babaen ti $1.',
+'copyright' => 'Ti linaon ket magun-od babaen ti $1 malaksid no adda sabali a naibaga.',
 'copyrightpage' => '{{ns:project}}:Dagiti karbengan ti kopia',
 'currentevents' => 'Agdama a paspasamak',
 'currentevents-url' => 'Project:Agdama a paspasamak',
@@ -366,6 +366,12 @@ Masarakan ti listaan dagiti umisu nga espesial a pampanid iti [[Special:SpecialP
 # General errors
 'error' => 'Biddut',
 'databaseerror' => 'Biddut iti database',
+'databaseerror-text' => 'Adda napasamak a biddut ti usisa ti database.
+Daytoy ket mabalin a mangibagbaga ti parikut ti sopwer.',
+'databaseerror-textcl' => 'Adda napasamak a biddut ti usisa ti database.',
+'databaseerror-query' => 'Usisa: $1',
+'databaseerror-function' => 'Annong: $1',
+'databaseerror-error' => 'Biddut: $1',
 'laggedslavemode' => "'''Ballaag:''' Ti panid ket mabalin a saan nga aglaon kadagiti kinaudi a panagpabaro.",
 'readonly' => 'Narikepan ti database',
 'enterlockreason' => 'Agikabil ti rason para iti pannakarikep, agraman ti maysa a karkulo no kaanonto a maluktan',
@@ -1163,7 +1169,7 @@ Dagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete
 'searcheverything-enable' => 'Agbirukka kadagiti amin a nagan ti espasio',
 'searchrelated' => 'mainaig',
 'searchall' => 'amin',
-'showingresults' => "Maiparang iti baba ti agingga {{PLURAL:$1|iti '''1''' a nagbanagan|dagiti '''$1''' a nagbanagan}} a mangrugi iti #'''$2'''.",
+'showingresults' => "Maiparang dita baba agingga {{PLURAL:$1|iti '''1''' a nagbanagan|dagiti '''$1''' a nagbanagan}} a mangrugi iti #'''$2'''.",
 'showingresultsnum' => "Maipakpakita dita baba  {{PLURAL:$3|iti '''1''' a nagbanagan|dagiti '''$3''' a nagbanagan}} a mangrugi iti #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Nagbanagan a '''$1''' iti '''$3'''|Dagiti Nagbanagan a '''$1 - $2''' iti '''$3'''}} para iti '''$4'''",
 'nonefound' => "'''Palagip'': Adda laeng bassit dagita nagan ti espasio a masigud a biruken.
@@ -1213,13 +1219,13 @@ Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 'prefs-rendering' => 'Tabas',
 'saveprefs' => 'Idulin',
 'resetprefs' => 'Dalusan dagiti saan a naidulin a sinuksukatan',
-'restoreprefs' => 'Isublim amin dagiti kinasigud a kasasaad',
+'restoreprefs' => 'Isubli amin dagiti kasisigud a pannakaiyasentar (kadagiti amin a paset)',
 'prefs-editing' => 'Ur-urnosen',
 'rows' => 'Ar-aray:',
 'columns' => 'Tuk-tukol:',
 'searchresultshead' => 'Biruken',
 'resultsperpage' => 'Nabirukan ti tunggal maysa a panid:',
-'stub-threshold' => 'Pangruggian ti <a href="#" class="stub">pungol a silpo</a>panagporma (dagiti byte):',
+'stub-threshold' => 'Pagpatinggaan para iti panagporma ti <a href="#" class="stub">pungol a silpo</a> (dagiti byte):',
 'stub-threshold-disabled' => 'Nabaldado',
 'recentchangesdays' => 'Al-aldaw nga ipakita dagiti kinaudi a binalbaliwan:',
 'recentchangesdays-max' => 'Kapaut nga $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}}',
@@ -1304,6 +1310,7 @@ Ti esurat a pagtaengam ket saan a maipakita kadagiti agar-aramat nga agkontak ke
 'prefs-displaywatchlist' => 'Ipakita dagiti pagpilian',
 'prefs-tokenwatchlist' => 'Tandaan',
 'prefs-diffs' => 'Sabali',
+'prefs-help-prefershttps' => 'Daytoy a kakaykayatan ket mapakabaelanto iti sumaruno nga iseserrekmo.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'Ti esurat a pagtaengan ket kasla umiso',
@@ -1461,8 +1468,8 @@ Ti esurat a pagtaengam ket saan a maipakita kadagiti agar-aramat nga agkontak ke
 'action-block' => 'serraan daytoy nga agar-aramat manipud ti panag-urnos',
 'action-protect' => 'sukatan dagiti lessaad ti salaknib iti daytoy a panid',
 'action-rollback' => 'pardasan nga ipasubli dagiti inurnos ti kinaudi nga agar-aramat a nagurnos ti naisangsangayan a panid',
-'action-import' => 'agala ka ti panid iti sabali a wiki',
-'action-importupload' => 'alaem daytoy a panid idiay naipan a papeles',
+'action-import' => 'agala ti pampanid manipud ti sabali a wiki',
+'action-importupload' => 'agala ti pampanid manipud ti naipan a papeles',
 'action-patrol' => 'markaan a kas napatruliaan dagiti inurnos ti dadduma',
 'action-autopatrol' => 'markaam dagiti napatruliam nga inurnos',
 'action-unwatchedpages' => 'kitaen ti listaan dagiti saan a nabambantayan a panid',
@@ -1511,7 +1518,7 @@ Ti esurat a pagtaengam ket saan a maipakita kadagiti agar-aramat nga agkontak ke
 'rc_categories_any' => 'Uray ania',
 'rc-change-size-new' => '$1 {{PLURAL:$1|a byte|kadagiti byte}} kalpasan ti panag-sukat',
 'newsectionsummary' => '/* $1 */ baro a paset',
-'rc-enhanced-expand' => 'Ipakita dagiti salaysay (masapul ti JavaScript)',
+'rc-enhanced-expand' => 'Ipakita dagiti salaysay',
 'rc-enhanced-hide' => 'Ilemmeng dagiti salaysay',
 'rc-old-title' => 'kasisigud nga inaramid a kas ti "$1"',
 
@@ -1773,8 +1780,7 @@ Baka kayatmo a padasen no saan a makumikom nga oras.',
 'upload_source_file' => '(papeles iti kompiutermo)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Daytoy nga espesial a panid ket agiparang kadagiti pinag-ipan kadagiti papeles.
-No sagaten ti agar-aramat, dagiti laeng papeles a pinag-ipan ti agar-aramat ti kinaudi a bersion ti papeles ti maipakita.',
+'listfiles-summary' => 'Daytoy nga espesial a panid ket agiparang kadagiti amin a naipan a papeles.',
 'listfiles_search_for' => 'Agsapul para iti nagan ti midia:',
 'imgfile' => 'papeles',
 'listfiles' => 'Listaan ti papeles',
@@ -1785,6 +1791,10 @@ No sagaten ti agar-aramat, dagiti laeng papeles a pinag-ipan ti agar-aramat ti k
 'listfiles_size' => 'Kadakkel',
 'listfiles_description' => 'Panagipalpalawag',
 'listfiles_count' => 'Dagiti bersion',
+'listfiles-show-all' => 'Iraman dagiti daan a bersion dagiti ladawan',
+'listfiles-latestversion' => 'Agdama a bersion',
+'listfiles-latestversion-yes' => 'Wen',
+'listfiles-latestversion-no' => 'Saan',
 
 # File description page
 'file-anchor-link' => 'Papeles',
@@ -1994,6 +2004,7 @@ Tattan ket naibaw-ing idiay [[$2]].',
 'listusers' => 'Listaan dagiti agar-aramat',
 'listusers-editsonly' => 'Ipakita laeng dagiti agar-aramat nga adda inurnosda',
 'listusers-creationsort' => 'Ilasin no ania a petsa ti pannakaaramid',
+'listusers-desc' => 'Paglalasinen iti agpababa nga urnos',
 'usereditcount' => '$1 {{PLURAL:$1|nga inurnos|kadagiti inurnos}}',
 'usercreated' => '{{GENDER:$3|Inaramid}} idi $1 idi $2',
 'newpages' => 'Baro a pampanid',
@@ -2280,7 +2291,7 @@ adda sabali a naurnos wenno nagipasubli ti panid.
 Ti kinaudi a panagurnos ti daytoy a panid ket babaen ni [[User:$3|$3]] ([[User talk:$3|tungtungan]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Ti panagurnos a pakabuklan idi ket: \"''\$1''\".",
 'revertpage' => 'Insubli ti panagurnos babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]]), naisubli ti kinaudi a panagbaliw babaen ni [[User:$1|$1]]',
-'revertpage-nouser' => 'Naisubli ti panagurnos babaen ti nailemmeng nga agar-aramat iti kinaudi a panagbalbaliw babaen ni [[User:$1|$1]]',
+'revertpage-nouser' => 'Naisubli dagiti inurnos babaen ti nailemmeng nga agar-aramat iti kinaudi a panagbalbaliw babaen ni {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Naibabawi dagiti panag-urnos babaen ni $1;
 naisubli manen ti naudi a panagbaliw babaen ni $2.',
 
@@ -2426,7 +2437,7 @@ $1',
 'contributions' => 'Naar-aramid ti {{GENDER:$1|Agar-aramat}}',
 'contributions-title' => 'Inar-aramid ti agar-aramat para kenni $1',
 'mycontris' => 'Naar-aramid',
-'contribsub2' => 'Para iti $1 ($2)',
+'contribsub2' => 'Para kenni {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Awan ti nasarakan a nasukatan a kapada daytoy a kita.',
 'uctop' => '(agdama)',
 'month' => 'Manipud iti bulan ti (ken nasapsapa pay):',
@@ -3724,8 +3735,7 @@ Naka-awatka koman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU Sapasap a
 'specialpages' => 'Espesial a pampanid',
 'specialpages-note' => '----
 * Kadawyan nga espesial a pampanid.
-* <span class="mw-specialpagerestricted">Naiparit nga espesial a pampanid.</span>
-* <span class="mw-specialpagecached">Cached nga espesial a pampanid (baka nagpaso).</span>',
+* <span class="mw-specialpagerestricted">Nagawidan nga espesial a pampanid.</span>',
 'specialpages-group-maintenance' => 'Dagiti padamag ti panagtaripato',
 'specialpages-group-other' => 'Sabsabali pay nga espesial a pampanid',
 'specialpages-group-login' => 'Sumrek / agaramid ti pakabilangan',
@@ -3763,7 +3773,10 @@ Naka-awatka koman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU Sapasap a
 'tags-tag' => 'Nagan ti etiketa',
 'tags-display-header' => 'Tabas dagiti listaan ti panagsukat',
 'tags-description-header' => 'Napno a panangipalpalawag iti kayatna a saoen.',
+'tags-active-header' => 'Aktibo?',
 'tags-hitcount-header' => 'Dagiti etiketa a sinukatan',
+'tags-active-yes' => 'Wen',
+'tags-active-no' => 'Saan',
 'tags-edit' => 'urnosen',
 'tags-hitcount' => '$1 {{PLURAL:$1|a sinukatan|kadagiti sinukatan}}',
 
@@ -3781,10 +3794,10 @@ Naka-awatka koman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU Sapasap a
 
 # Database error messages
 'dberr-header' => 'Adda ti pakirutna daytoy a wiki',
-'dberr-problems' => 'Pasensian a!
-Daytoy a pagsaadan ket agdadama ti teknikal a pagrigrigatan.',
+'dberr-problems' => 'Pasensian a! Daytoy a pagsaadan ket agdadama ti teknikal a pagrigrigatan.',
 'dberr-again' => 'Padasem ti agururay to manu a minutos ken agikarga.',
-'dberr-info' => '(San a makontak ti database server: $1)',
+'dberr-info' => '(Saan a makontak ti database server: $1)',
+'dberr-info-hidden' => '(Saan a makontak ti database server)',
 'dberr-usegoogle' => 'Padasem  ti agbiruk idiay Google tatta.',
 'dberr-outofdate' => 'Palagip a dagiti listaan da kadagiti kukuami a nagyan ket baka nagpaso.',
 'dberr-cachederror' => 'Daytoy ket naidulin a kopia ti kiniddawmo a panid, ken mabalin a saan a kabarbaro.',
@@ -3929,9 +3942,9 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'limitreport-ppvisitednodes' => 'Nabisita a bilang ti nodo ti preproseso',
 'limitreport-ppgeneratednodes' => 'Napataud a bilang ti nodo ti preproseso',
 'limitreport-postexpandincludesize' => 'Pannakairaman a kadakkel ti kalpasan a panagpadakkel',
-'limitreport-postexpandincludesize-value' => 'Dagiti $1/$2 a byte',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|a byte|kadagiti byte}}',
 'limitreport-templateargumentsize' => 'Argumento a kadakkel ti plantilia',
-'limitreport-templateargumentsize-value' => 'Dagiti $1/$2 a byte',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|a byte|kadagiti byte}}',
 'limitreport-expansiondepth' => 'Kangatuan a panagpadakkel ti kauneg',
 'limitreport-expensivefunctioncount' => 'Bilang ti nangina nga annong ti parser',
 
index c3506b2..2eb6224 100644 (file)
@@ -3824,8 +3824,7 @@ MediaWiki er útgefin í þeirri von að hann sé gagnlegur, en ÁN ALLRAR ÁBYR
 
 # Database error messages
 'dberr-header' => 'Vandamál við þennan wiki',
-'dberr-problems' => 'Því miður!
-Tæknilegir örðugleikar eru á þessari síðu.',
+'dberr-problems' => 'Því miður!Tæknilegir örðugleikar eru á þessari síðu.',
 'dberr-again' => 'Reyndu að bíða í nokkrar mínútur og endurhladdu síðan síðuna.',
 'dberr-info' => '(Mistókst að hafa samband við gagnaþjón: $1)',
 'dberr-usegoogle' => 'Þú getur notað Google til að leita á meðan.',
index 2165fd7..5d131bf 100644 (file)
@@ -537,7 +537,7 @@ $1',
 # 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).
 'aboutsite' => 'Informazioni su {{SITENAME}}',
 'aboutpage' => 'Project:Informazioni',
-'copyright' => "Contenuti soggetti a licenza d'uso $1.",
+'copyright' => 'Il contenuto è disponibile in base alla licenza $1, se non diversamente specificato.',
 'copyrightpage' => '{{ns:project}}:Copyright',
 'currentevents' => 'Attualità',
 'currentevents-url' => 'Project:Attualità',
@@ -748,6 +748,9 @@ Non dimenticare di personalizzare le [[Special:Preferences|preferenze di {{SITEN
 'userlogin-resetpassword-link' => 'Reimposta la tua password',
 'helplogin-url' => 'Help:Login',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Aiuto con il login]]',
+'userlogin-loggedin' => 'Sei già connesso come {{GENDER:$1|$1}}.
+Usa il modulo sottostante per accedere come altro utente.',
+'userlogin-createanother' => "Crea un'altra utenza",
 'createacct-join' => 'Inserisci i tuoi dati qui sotto.',
 'createacct-another-join' => 'Inserisci le informazioni per la registrazione qui sotto.',
 'createacct-emailrequired' => 'Indirizzo email',
@@ -1461,7 +1464,7 @@ Chiunque la conosce sarà in grado di leggere i tuoi osservati speciali, per cui
 'prefs-reset-intro' => "È possibile usare questa pagina per reimpostare le proprie preferenze a quelle predefinite del sito.
 L'operazione non può essere annullata.",
 'prefs-emailconfirm-label' => "Conferma dell'e-mail:",
-'youremail' => 'Indirizzo e-mail:',
+'youremail' => 'Indirizzo email:',
 'username' => '{{GENDER:$1|Nome utente}}:',
 'uid' => '{{GENDER:$1|ID utente}}:',
 'prefs-memberingroups' => '{{GENDER:$2|Membro}} {{PLURAL:$1|del gruppo|dei gruppi}}:',
@@ -1625,7 +1628,7 @@ Il tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.',
 'right-userrights-interwiki' => 'Modifica i diritti degli utenti di altre wiki',
 'right-siteadmin' => 'Blocca e sblocca il database',
 'right-override-export-depth' => 'Esporta le pagine includendo le pagine collegate fino ad una profondità di 5',
-'right-sendemail' => 'Invia e-mail ad altri utenti',
+'right-sendemail' => 'Invia email ad altri utenti',
 'right-passwordreset' => 'Vede i messaggi di reimpostazione della password',
 
 # Special:Log/newusers
@@ -1662,8 +1665,8 @@ Il tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.',
 'action-block' => 'bloccare questo utente in scrittura',
 'action-protect' => 'modificare i livelli di protezione per questa pagina',
 'action-rollback' => "annullare rapidamente le modifiche dell'ultimo utente che ha modificato una determinata pagina",
-'action-import' => "importare questa pagina da un'altra wiki",
-'action-importupload' => 'importare questa pagina tramite upload da file',
+'action-import' => "importare pagine da un'altra wiki",
+'action-importupload' => 'importare pagine tramite upload da file',
 'action-patrol' => 'segnare le modifiche degli altri utenti come verificate',
 'action-autopatrol' => 'segnare le proprie modifiche come verificate',
 'action-unwatchedpages' => 'visionare la lista di pagine non osservate',
@@ -2186,6 +2189,7 @@ I redirect <del>cancellati</del> sono stati corretti.',
 'listusers' => 'Elenco degli utenti',
 'listusers-editsonly' => 'Mostra solo utenti con dei contributi',
 'listusers-creationsort' => 'Ordina per data di creazione',
+'listusers-desc' => 'Ordina in senso decrescente',
 'usereditcount' => '$1 {{PLURAL:$1|contributo|contributi}}',
 'usercreated' => '{{GENDER:$3|Creato/a}} il $1 alle $2',
 'newpages' => 'Pagine più recenti',
@@ -2467,7 +2471,7 @@ Consultare il log delle $2 per un elenco delle pagine cancellate di recente.',
 La modifica più recente alla pagina è stata apportata da [[User:$3|$3]] ([[User talk:$3|discussione]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "L'oggetto della modifica era: \"''\$1''\".",
 'revertpage' => 'Annullate le modifiche di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]]), riportata alla versione precedente di [[User:$1|$1]]',
-'revertpage-nouser' => 'Annullate le modifiche di un utente nascosto, riportata alla versione precedente di [[User:$1|$1]]',
+'revertpage-nouser' => 'Annullate le modifiche di un utente nascosto, riportata alla versione precedente di {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => "Annullate le modifiche di $1; pagina riportata all'ultima versione di $2.",
 
 # Edit tokens
@@ -2604,7 +2608,7 @@ $1',
 'contributions' => 'Contributi {{GENDER:$1|utente}}',
 'contributions-title' => 'Contributi di $1',
 'mycontris' => 'contributi',
-'contribsub2' => 'Per $1 ($2)',
+'contribsub2' => 'Per {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Non sono state trovate modifiche che soddisfino i criteri di ricerca.',
 'uctop' => '(attuale)',
 'month' => 'Dal mese (e precedenti):',
@@ -3957,7 +3961,10 @@ Questo programma deve essere distribuito assieme ad [{{SERVER}}{{SCRIPTPATH}}/CO
 'tags-tag' => "Nome dell'etichetta",
 'tags-display-header' => 'Aspetto nella lista delle modifiche',
 'tags-description-header' => 'Descrizione completa del significato',
+'tags-active-header' => 'Attivo?',
 'tags-hitcount-header' => 'Modifiche che hanno etichetta',
+'tags-active-yes' => 'Sì',
+'tags-active-no' => 'No',
 'tags-edit' => 'modifica',
 'tags-hitcount' => '$1 {{PLURAL:$1|modifica|modifiche}}',
 
@@ -4122,9 +4129,9 @@ Questo programma deve essere distribuito assieme ad [{{SERVER}}{{SCRIPTPATH}}/CO
 'limitreport-ppvisitednodes' => 'Numero nodi preprocessore visitati',
 'limitreport-ppgeneratednodes' => 'Numero nodi preprocessore generati',
 'limitreport-postexpandincludesize' => 'Dimensione inclusioni post-espansione',
-'limitreport-postexpandincludesize-value' => '$1/$2 byte',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|byte}}',
 'limitreport-templateargumentsize' => 'Dimensione parametri template',
-'limitreport-templateargumentsize-value' => '$1/$2 byte',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte}}',
 'limitreport-expansiondepth' => 'Massima profondità di espansione',
 'limitreport-expensivefunctioncount' => 'Numero funzioni parser dispendiose',
 
index 5cda489..09f45bf 100644 (file)
@@ -615,7 +615,7 @@ $1',
 # 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).
 'aboutsite' => '{{SITENAME}}について',
 'aboutpage' => 'Project:{{SITENAME}}について',
-'copyright' => '内容は$1のライセンスで利用できます。',
+'copyright' => '特に記載がない限り、内容は$1のライセンスで利用できます。',
 'copyrightpage' => '{{ns:project}}:著作権',
 'currentevents' => '最近の出来事',
 'currentevents-url' => 'Project:最近の出来事',
@@ -832,6 +832,9 @@ $2',
 'userlogin-resetpassword-link' => 'パスワードを再設定',
 'helplogin-url' => 'Help:ログイン',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ログインのヘルプ]]',
+'userlogin-loggedin' => '{{GENDER:$1|$1}} として既にログインしています。
+別の利用者としてログインするには下のフォームを使用してください。',
+'userlogin-createanother' => '別アカウントを作成',
 'createacct-join' => '以下の情報を入力してください。',
 'createacct-another-join' => '新しいアカウントの情報を以下に記入してください。',
 'createacct-emailrequired' => 'メールアドレス',
@@ -1206,7 +1209,7 @@ $1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのブロッ
 'template-protected' => '(保護)',
 'template-semiprotected' => '(半保護)',
 'hiddencategories' => 'このページは {{PLURAL:$1|$1 個の隠しカテゴリ}}に属しています:',
-'edittools' => '<!-- ここに書いたテキストは編集びアップロードのフォームの下に表示されます。 -->',
+'edittools' => '<!-- ここに書いたテキストは編集およびアップロードのフォームの下に表示されます。 -->',
 'nocreatetext' => '{{SITENAME}}ではページの新規作成を制限しています。
 元のページに戻って既存のページを編集するか、[[Special:UserLogin|ログインまたはアカウント作成]]をしてください。',
 'nocreate-loggedin' => '新しいページを作成する権限がありません。',
@@ -1342,7 +1345,7 @@ $3が示した理由: ''$2''",
 この差分を閲覧できます。[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]に詳細情報があるかもしれません。",
 'rev-suppressed-diff-view' => "この差分の一方の版は'''秘匿されています'''。
 この差分を閲覧できます。[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 秘匿記録]に詳細情報があるかもしれません。",
-'rev-delundel' => '表示/非表示',
+'rev-delundel' => '表示/非表示を切り替え',
 'rev-showdeleted' => '表示',
 'revisiondelete' => '版の削除と復元',
 'revdelete-nooldid-title' => '無効な対象版',
@@ -1430,8 +1433,8 @@ $1",
 'mergehistory-empty' => '統合できる版がありません。',
 'mergehistory-success' => '[[:$1]]の $3 {{PLURAL:$3|版}}を[[:$2]]に統合しました。',
 'mergehistory-fail' => '履歴の統合を実行できません。ページと時刻の引数を再確認してください。',
-'mergehistory-no-source' => '統合元ページ「$1」が存在しません。',
-'mergehistory-no-destination' => '統合先ページ「$1」が存在しません。',
+'mergehistory-no-source' => '統合元ページ $1 が存在しません。',
+'mergehistory-no-destination' => '統合先ページ $1 が存在しません。',
 'mergehistory-invalid-source' => '統合元のページは有効な名前でなければなりません。',
 'mergehistory-invalid-destination' => '統合先のページは有効な名前でなければなりません。',
 'mergehistory-autocomment' => '[[:$1]]を[[:$2]]に統合',
@@ -1452,7 +1455,7 @@ $1",
 'difference-multipage' => '(ページ間の差分)',
 'lineno' => '$1行:',
 'compareselectedversions' => '選択した版同士を比較',
-'showhideselectedversions' => 'é\81¸æ\8a\9eã\81\97ã\81\9fç\89\88ã\82\92表示/é\9d\9e表示',
+'showhideselectedversions' => 'é\81¸æ\8a\9eã\81\97ã\81\9fç\89\88ã\81®è¡¨ç¤º/é\9d\9e表示ã\82\92å\88\87ã\82\8aæ\9b¿ã\81\88',
 'editundo' => '取り消し',
 'diff-empty' => '(相違点なし)',
 'diff-multi' => '({{PLURAL:$2|$2人の利用者}}による、{{PLURAL:$1|間の$1版}}が非表示)',
@@ -1764,7 +1767,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'right-noratelimit' => '速度制限を受けない',
 'right-import' => '他のウィキからページを取り込み',
 'right-importupload' => 'ファイルアップロードでページを取り込み',
-'right-patrol' => '他の編集を巡回済みにする',
+'right-patrol' => '他の利用者の編集を巡回済みにする',
 'right-autopatrol' => '自身の編集を自動で巡回済みにする',
 'right-patrolmarks' => '最近の更新で巡回済み印を閲覧',
 'right-unwatchedpages' => 'ウォッチされていないページ一覧を閲覧',
@@ -1810,8 +1813,8 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'action-block' => 'この利用者の編集ブロック',
 'action-protect' => 'このページの保護レベルの変更',
 'action-rollback' => '特定ページを最後に編集した利用者の編集の即時巻き戻し',
-'action-import' => 'ä»\96ã\81®ã\82¦ã\82£ã\82­ã\81\8bã\82\89ã\81®ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\8f\96ã\82\8aè¾¼ã\81¿',
-'action-importupload' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81§ã\81®ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¸ã\81®å\8f\96ã\82\8aè¾¼ã\81¿',
+'action-import' => '他のウィキからのページの取り込み',
+'action-importupload' => 'ファイルアップロードでのページへの取り込み',
 'action-patrol' => '他の利用者の編集を巡回済みにする',
 'action-autopatrol' => '自分の編集を巡回済みにする',
 'action-unwatchedpages' => 'ウォッチされていないページ一覧の閲覧',
@@ -2153,6 +2156,7 @@ URLが正しいものであり、ウェブサイトが稼働していること
 'listfiles_description' => '概要',
 'listfiles_count' => '版数',
 'listfiles-show-all' => '画像の古い版を含める',
+'listfiles-latestversion' => '現在の版',
 'listfiles-latestversion-yes' => 'はい',
 'listfiles-latestversion-no' => 'いいえ',
 
@@ -2366,6 +2370,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'listusers' => '利用者一覧',
 'listusers-editsonly' => '投稿記録のある利用者のみを表示',
 'listusers-creationsort' => '作成日順に並べ替え',
+'listusers-desc' => '降順に並べ替える',
 'usereditcount' => '$1 {{PLURAL:$1|回編集}}',
 'usercreated' => '$1 $2 に{{GENDER:$3|作成}}',
 'newpages' => '新しいページ',
@@ -2402,7 +2407,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 記録の種類、実行した利用者 (大文字小文字は区別)、影響を受けたページ (大文字小文字は区別) による絞り込みができます。',
 'logempty' => '該当する記録はありません。',
 'log-title-wildcard' => 'この文字列で始まるページ名を検索',
-'showhideselectedlogentries' => 'é\81¸æ\8a\9eã\81\97ã\81\9fè¨\98é\8c²é \85ç\9b®ã\82\92表示/é\9d\9e表示',
+'showhideselectedlogentries' => 'é\81¸æ\8a\9eã\81\97ã\81\9fè¨\98é\8c²é \85ç\9b®ã\81®è¡¨ç¤º/é\9d\9e表示ã\82\92å\88\87ã\82\8aæ\9b¿ã\81\88',
 
 # Special:AllPages
 'allpages' => '全ページ',
@@ -2552,7 +2557,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'watchmethod-recent' => '最近の更新内のウォッチされているページを確認中',
 'watchmethod-list' => 'ウォッチされているページ内の最近の更新を確認中',
 'watchlistcontains' => 'ウォッチリストには {{PLURAL:$1|$1 ページ}}が登録されています。',
-'iteminvalidname' => '項目「$1」には問題があります。名前が正しくありません...',
+'iteminvalidname' => '項目「$1」には問題があります。名前が無効です...',
 'wlnote' => "$3 $4 までの{{PLURAL:$2|'''$2'''時間}}になされた{{PLURAL:$1|'''$1'''件の変更}}は以下の通りです。",
 'wlshowlast' => '次の期間で表示: $1時間、$2日間、$3',
 'watchlist-options' => 'ウォッチリストのオプション',
@@ -2577,7 +2582,7 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'enotif_body_intro_changed' => '{{SITENAME}}のページ「$1」が$PAGEEDITDATEに、$2 によって{{GENDER:$2|変更}}されました。現在の版は $3 で閲覧できます。',
 'enotif_lastvisited' => '最終訪問以降のすべての変更は $1 をご覧ください。',
 'enotif_lastdiff' => 'この変更内容を表示するには $1 をご覧ください。',
-'enotif_anon_editor' => '匿名利用者「$1」',
+'enotif_anon_editor' => '匿名利用者 $1',
 'enotif_body' => '$WATCHINGUSERNAMEさん
 
 $PAGEINTRO $NEWPAGE
@@ -2618,7 +2623,7 @@ $UNWATCHURL
 'delete-legend' => '削除',
 'historywarning' => "'''警告:''' 削除しようとしているページには、約$1版の履歴があります:",
 'confirmdeletetext' => 'ページをすべての履歴とともに削除しようとしています。
\9c¬å½\93ã\81«ã\81\93ã\81®æ\93\8dä½\9cã\82\92è¡\8cã\81\84ã\81\9fã\81\84ã\81\8bã\80\81æ\93\8dä½\9cã\81®çµ\90æ\9e\9cã\82\92ç\90\86解ã\81\97ã\81¦ã\81\84ã\82\8bã\81\8bã\80\81ã\81\8aã\82\88ã\81³ã\81\93ã\81®æ\93\8dä½\9cã\81\8c[[{{MediaWiki:Policy-url}}|æ\96¹é\87\9d]]ã\81«å¾\93ã\81£ã\81¦ã\81\84ã\82\8bã\81\8bã\81©ã\81\86ã\81\8bã\80\81確èª\8dã\82\92ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82',
+本当にこの操作を行いたいか、操作の結果を理解しているか、およびこの操作が[[{{MediaWiki:Policy-url}}|方針]]に従っているかどうか、確認してください。',
 'actioncomplete' => '操作を完了しました',
 'actionfailed' => '操作に失敗しました',
 'deletedtext' => '「$1」は削除されました。
@@ -2655,8 +2660,8 @@ $UNWATCHURL
 
 このページの最後の編集は[[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]]による直前の版へ差し戻しました',
+'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|トーク]]) による編集を [[User:$1|$1]] による直前の版へ差し戻しました',
+'revertpage-nouser' => '非表示の利用者による編集を {{GENDER:$1|[[User:$1|$1]]}} による直前の版へ差し戻しました',
 'rollback-success' => '$1による編集を差し戻しました。
 $2による直前の版へ変更されました。',
 
@@ -2687,13 +2692,13 @@ $2による直前の版へ変更されました。',
 'protect_expiry_invalid' => '有効期間が正しくありません。',
 'protect_expiry_old' => '有効期限が過去の時刻です。',
 'protect-unchain-permissions' => '追加保護オプションをロック解除',
-'protect-text' => "ã\83\9aã\83¼ã\82¸ã\80\8c'''$1'''ã\80\8dに対する保護レベルの表示と操作ができます。",
+'protect-text' => "ã\81\93ã\81\93ã\81§ã\81¯ã\80\81ã\83\9aã\83¼ã\82¸ '''$1''' に対する保護レベルの表示と操作ができます。",
 'protect-locked-blocked' => "ブロックされている間は、保護レベルを変更できません。
-ページ「'''$1'''」の現在の状態は以下の通りです:",
+ページ '''$1''' の現在の状態は以下の通りです:",
 'protect-locked-dblock' => "データベースのロックが有効なため、保護レベルを変更できません。
-ページ「'''$1'''」の現在の状態は以下の通りです:",
+ページ '''$1''' の現在の状態は以下の通りです:",
 'protect-locked-access' => "アカウントに、ページの保護レベルを変更する権限がありません。
-ページ「'''$1'''」の現在の状態は以下の通りです:",
+ページ '''$1''' の現在の状態は以下の通りです:",
 'protect-cascadeon' => 'このページは現在、カスケード保護が有効になっている以下の{{PLURAL:$1|ページ|ページ群}}から読み込まれているため、保護されています。
 このページの保護レベルを変更できますが、カスケード保護には影響しません。',
 'protect-default' => 'すべての利用者に許可',
@@ -2754,7 +2759,7 @@ $2による直前の版へ変更されました。',
 'undeletehistorynoadmin' => 'このページは削除されています。
 削除の理由は、削除前にこのページを編集していた利用者の詳細情報と共に、以下に表示されています。
 管理者以外の利用者には、削除された各版の本文への制限がかけられています。',
-'undelete-revision' => '削除されたページ「$1」の $4 $5 時点での $3 による版:',
+'undelete-revision' => '削除されたページ $1 の $4 $5 時点での $3 による版:',
 'undeleterevision-missing' => '無効または存在しない版です。
 間違ったリンクをたどったか、この版は既に復元されたか、もしくは保存版から除去された可能性があります。',
 'undelete-nodiff' => 'これより前の版はありません。',
@@ -2803,7 +2808,7 @@ $1',
 'contributions' => '{{GENDER:$1|利用者}}の投稿記録',
 'contributions-title' => '$1の投稿記録',
 'mycontris' => '投稿記録',
-'contribsub2' => '利用者: $1 ($2)',
+'contribsub2' => '利用者: {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'これらの条件に一致する変更は見つかりませんでした。',
 'uctop' => '(最新)',
 'month' => 'この月以前:',
@@ -3056,9 +3061,9 @@ $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 {{PLURAL:$1|ページ}}までで、それ以上は移動されません。',
 'movelogpage' => '移動記録',
 'movelogpagetext' => '以下はすべてのページ移動の一覧です。',
@@ -4318,7 +4323,10 @@ MediaWikiは、有用であることを期待して配布されていますが
 'tags-tag' => 'タグ名',
 'tags-display-header' => '変更一覧に表示されるもの',
 'tags-description-header' => '詳細な意味の説明',
+'tags-active-header' => 'アクティブ?',
 'tags-hitcount-header' => 'タグが付与された変更',
+'tags-active-yes' => 'はい',
+'tags-active-no' => 'いいえ',
 'tags-edit' => '編集',
 'tags-hitcount' => '$1 {{PLURAL:$1|回の変更}}',
 
@@ -4336,8 +4344,7 @@ MediaWikiは、有用であることを期待して配布されていますが
 
 # Database error messages
 'dberr-header' => 'このウィキには問題があります',
-'dberr-problems' => '申し訳ありません!
-このウェブサイトに技術的な障害が発生しています。',
+'dberr-problems' => '申し訳ありません! このウェブサイトに技術的な障害が発生しています。',
 'dberr-again' => '数分間待った後、もう一度読み込んでください。',
 'dberr-info' => '(データベースサーバー $1 に接続できませんでした)',
 'dberr-info-hidden' => '(データベース サーバーと通信できません)',
@@ -4485,9 +4492,9 @@ MediaWikiは、有用であることを期待して配布されていますが
 'limitreport-ppvisitednodes' => 'プリプロセッサが訪問したノード数',
 'limitreport-ppgeneratednodes' => 'プリプロセッサが生成したノード数',
 'limitreport-postexpandincludesize' => '参照読み込みの展開後のサイズ',
-'limitreport-postexpandincludesize-value' => '$1/$2 バイト',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|バイト}}',
 'limitreport-templateargumentsize' => 'テンプレート引数のサイズ',
-'limitreport-templateargumentsize-value' => '$1/$2 バイト',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|バイト}}',
 'limitreport-expansiondepth' => '展開の最大深さ',
 'limitreport-expensivefunctioncount' => '高負荷パーサー関数の数',
 
index 658417f..ca273a2 100644 (file)
@@ -60,10 +60,10 @@ $messages = array(
 'tog-extendwatchlist' => 'Jembaraké daptar pangawasan kanggo nuduhaké kabèh owahan, ora mung sing paling anyar',
 'tog-usenewrc' => 'Owah-owahané paguyuban miturut kaca nèng owah-owahan anyar lan daptar panto (mbutuhaké JavaScript)',
 'tog-numberheadings' => 'Wènèhana nomer judul secara otomatis',
-'tog-showtoolbar' => 'Tuduhna <em>toolbar</em> (batang piranti) panyuntingan',
-'tog-editondblclick' => 'Sunting kaca nganggo klik ping loro (JavaScript)',
+'tog-showtoolbar' => 'Tuduhna <em>toolbar</em> (batang piranti) panyuntingan (mbutuhaké JavaScript)',
+'tog-editondblclick' => 'Sunting kaca nganggo klik ping loro (mbutuhaké JavaScript)',
 'tog-editsection' => 'Fungsèkna panyuntingan sub-bagian ngliwati pranala [sunting]',
-'tog-editsectiononrightclick' => 'Fungsèkna panyuntingan sub-bagian mawa klik-tengen ing judul bagian (JavaScript)',
+'tog-editsectiononrightclick' => 'Fungsèkna panyuntingan sub-bagian mawa klik-tengen ing judul bagian (mbutuhaké JavaScript)',
 'tog-showtoc' => 'Tuduhna daftar isi (kanggo kaca sing nduwé luwih saka 3 sub-bagian)',
 'tog-rememberpassword' => 'Émut tembung sandi kula ing peramban punika (salebeting $1 {{PLURAL:$1|dinten|dinten}})',
 'tog-watchcreations' => 'Tambahaké kaca sing tak gawé lan berkas sing tak unggah nèng daptar pangawasan',
@@ -81,7 +81,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Tuduhna cacahé pangawas',
 'tog-oldsig' => 'Tapak asma sing ana:',
 'tog-fancysig' => 'Anggepen tapak asta minangka teks wiki (tanpa pranala otomatis)',
-'tog-uselivepreview' => 'Nganggoa pratayang langsung (JavaScript) (eksperimental)',
+'tog-uselivepreview' => 'Nganggoa pratayang langsung (mbutuhaké JavaScript) (eksperimental)',
 'tog-forceeditsummary' => 'Élingna aku menawa kothak ringkesan suntingan isih kosong',
 'tog-watchlisthideown' => 'Delikna suntinganku ing daftar pangawasan',
 'tog-watchlisthidebots' => 'Delikna suntingan ing daftar pangawasan',
@@ -186,7 +186,7 @@ $messages = array(
 'newwindow' => '(buka ing jendhéla anyar)',
 'cancel' => 'Batalna',
 'moredotdotdot' => 'Liyané...',
-'morenotlisted' => 'Isih ana...',
+'morenotlisted' => 'Isih ana sing ora didaptarne...',
 'mypage' => 'Kaca',
 'mytalk' => 'Wicara',
 'anontalk' => 'Dhiskusi IP puniki',
@@ -289,7 +289,7 @@ $1',
 # 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).
 'aboutsite' => 'Prakara {{SITENAME}}',
 'aboutpage' => 'Project:Prakara',
-'copyright' => 'Kabèh tèks kasedyakaké miturut $1.',
+'copyright' => 'Kabèh isi kasedyakaké miturut $1.',
 'copyrightpage' => '{{ns:project}}:Hak cipta',
 'currentevents' => 'Prastawa saiki',
 'currentevents-url' => 'Project:Prastawa saiki',
@@ -441,9 +441,9 @@ Pangurus sing ngopèni kuwi ngawedharaké: "$3".',
 # Login and logout pages
 'logouttext' => "'''Sampéyan wis metu log'''
 
-Sampéyan bisa nganggo {{SITENAME}} sacara anonim, utawa bisa <span class='plainlinks'>[$1 mlebu log manèh]</span> kanthi jeneng panganggo sing padha utawa beda.
+Sampéyan isa nganggo {{SITENAME}} sacara anonim, utawa isa <span class='plainlinks'>[$1 mlebu log manèh]</span> kanthi jeneng panganggo sing padha utawa beda.
 
-Cathet yèn sapérangan kaca mungkin isih nampilaké tulisan yèn Sampéyan isih nèng njero log, kuwi bisa ilang yèn Sampéyan ngresiki ''cache'' pramban Sampéyan.",
+Cathet yèn sapérangan kaca mungkin isih nampilaké kayata sampéyan isih mlebu log, kuwi bisa ilang yèn sampéyan ngresiki ''cache'' pramban sampéyan.",
 'welcomeuser' => 'Sugeng Rawuh, $1!',
 'welcomecreation-msg' => 'Akun panjenengan wis kacipta. Aja lali nata konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] panjenengan.',
 'yourname' => 'Asma pangangeman',
@@ -469,7 +469,7 @@ Cathet yèn sapérangan kaca mungkin isih nampilaké tulisan yèn Sampéyan isih
 'gotaccount' => "Wis kagungan akun? '''$1'''.",
 'gotaccountlink' => 'Mlebu',
 'userlogin-resetlink' => 'Lali rincian mlebu log Sampéyan?',
-'createaccountmail' => 'Nganggoa sandi sembarang lan kirimna liwat layang e-mail ing ngisor iki',
+'createaccountmail' => 'Nganggoa sandi sauntara sembarang lan kirimna liwat layang e-mail ing ngisor iki',
 'createaccountreason' => 'Alesan:',
 'badretype' => 'Sandhi panjenengan ora gathuk',
 'userexists' => 'Jeneng panganggo sing dilebokaké lagi dianggo.
@@ -517,7 +517,7 @@ Amarga saka kuwi., tamu kanthi alamat IP iki ora bisa gawé akun manèh kanggo s
 'cannotchangeemail' => 'Alamat layang èlèktronik akun ora bisa diganti nèng wiki iki.',
 'emaildisabled' => 'Situs iki ora bisa ngirim layang èlèktronik.',
 'accountcreated' => 'Akun wis kacipta.',
-'accountcreatedtext' => 'Akun kanggo $1 wis digawé.',
+'accountcreatedtext' => 'Akun panganggo kanggo $1 wis digawé.',
 'createaccount-title' => 'Gawé rékening kanggo {{SITENAME}}',
 'createaccount-text' => 'Ana wong sing nggawé sawijining akun utawa rékening kanggo alamat e-mail panjenengan ing {{SITENAME}} ($4) mawa jeneng "$2" lan tembung sandi "$3". Panjenengan disaranaké kanggo mlebu log lan ngganti tembung sandi panjenengan saiki.
 
@@ -670,9 +670,9 @@ Bagéan iki manawa wis dipindhah utawa dibusak nalika panjenengan buka.',
 'loginreqlink' => 'mlebu log',
 'loginreqpagetext' => 'Panjenengan kudu $1 kanggo bisa mirsani kaca liyané.',
 'accmailtitle' => 'Tembung sandhi wis dikirim.',
-'accmailtext' => "Sawijining tembung sandi acak kanggo [[User talk:$1|$1]] wis digawé lan dikirim menyang $2.
+'accmailtext' => "Sawijining tembung sandi sembarang kanggo [[User talk:$1|$1]] wis dikirim menyang $2.
 
-Tembung sandi kanggo akun anyar iki bisa diganti ing kaca ''[[Special:ChangePassword|ganti tembung sandi]]'' sawisé mlebu log.",
+Tembung sandi kanggo panganggo anyar iki isa diganti ing kaca ''[[Special:ChangePassword|ganti tembung sandi]]'' sawisé mlebu log.",
 'newarticle' => '(Anyar)',
 'newarticletext' => "Katonané panjenengan ngetutaké pranala artikel sing durung ana.
 Manawa kersa manulis artikel iki, manggaa. (Mangga mirsani [[{{MediaWiki:Helppage}}|Pitulung]] kanggo informasi sabanjuré).
@@ -1150,7 +1150,7 @@ Aja luwih saka {{PLURAL:$1|karakter|karakter}}.',
 'gender-unknown' => 'Ora dinyatakaké',
 'gender-male' => 'Lanang',
 'gender-female' => 'Wadon',
-'prefs-help-gender' => 'Opsional: dipigunakaké kanggo panyebutan jinis kelamin sing bener déning piranti alus.
+'prefs-help-gender' => 'Opsional: Dipigunakaké kanggo panyebutan jinis kelamin sing bener déning piranti alus.
 Informasi iki bakal kabuka kanggo publik.',
 'email' => 'Layang élèktronik (E-mail)',
 'prefs-help-realname' => '* <strong>Asma asli</strong> (ora wajib): menawa panjenengan maringi, asma asli panjenengan bakal digunakaké kanggo mènèhi akrédhitasi kanggo kasil karya tulis panjenengan.',
@@ -1195,7 +1195,7 @@ Alamat layang èlèktronik Sampéyan ora dituduhaké nalika wong liya ngubungi S
 'userrights-no-interwiki' => 'Panjenengan ora ana hak kanggo ngowahi hak panganggo ing wiki liyané.',
 'userrights-nodatabase' => 'Basis data $1 ora ana utawa ora lokal.',
 'userrights-nologin' => 'Panjenengan kudu [[Special:UserLogin|mlebu log]] mawa nganggo akun utawa rékening pangurus supaya bisa ngowahi hak panganggo.',
-'userrights-notallowed' => 'Akun Sampéyan ora nduwé idin kanggo nambah utawa nyuda hak-hak panganggo.',
+'userrights-notallowed' => 'Sampéyan ora nduwé idin kanggo nambah utawa nyuda hak-hak panganggo.',
 'userrights-changeable-col' => 'Grup sing bisa panjenengan owahi',
 'userrights-unchangeable-col' => 'Grup sing ora bisa diowahi panjenengan',
 
@@ -1362,7 +1362,7 @@ Alamat layang èlèktronik Sampéyan ora dituduhaké nalika wong liya ngubungi S
 'rc_categories_any' => 'Apa waé',
 'rc-change-size-new' => '$1 {{PLURAL:$1|bita|bita}} sakwisé diowah',
 'newsectionsummary' => '/* $1 */ bagéyan anyar',
-'rc-enhanced-expand' => 'Tuduhaké princèn (merlokaké JavaScript)',
+'rc-enhanced-expand' => 'Tuduhaké princèn',
 'rc-enhanced-hide' => 'Dhelikaké princèn',
 'rc-old-title' => 'wigatiné digawé minangka "$1"',
 
@@ -1610,7 +1610,7 @@ Mbok-menawa panjenengan bisa nyoba manèh ing wektu sing luwih longgar.',
 'upload_source_file' => ' (sawijining berkas ing komputeré panjenengan)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Kaca astamiwa nudhuhaké kabèk kaca kaunggah.
+'listfiles-summary' => 'Kaca astamiwa nudhuhaké kabèh berkas kaunggah.
 Yèn disaring déning panganggo, namung berkas mawa vèrsi paling anyar waé sing bakal katon.',
 'listfiles_search_for' => 'Golèk jeneng gambar:',
 'imgfile' => 'gambar',
@@ -3584,7 +3584,7 @@ Anda seharusnya telah menerima [{{SERVER}}{{SCRIPTPATH}}/COPYING salinan Lisensi
 'logentry-newusers-create2' => 'Akun panganggo $3 digawé déning $1',
 'logentry-newusers-byemail' => 'Akun pengguna $3 dibuat oleh $1 dan kata sandi dikirim melalui e-mail',
 'logentry-newusers-autocreate' => 'Akun $1 digawé otomatis',
-'logentry-rights-rights' => 'ngganti kaanggotan kelompok kanggo $3 saka $4 dadi $5',
+'logentry-rights-rights' => '$1 {{GENDER:$2|ngganti}} kaanggotan kelompok kanggo $3 saka $4 dadi $5',
 'logentry-rights-rights-legacy' => '$1 mengubah keanggotaan grup $3',
 'logentry-rights-autopromote' => 'otomatis ditawakaké saka $4 nèng $5',
 'rightsnone' => '(ora ana)',
index 281b53e..c900581 100644 (file)
@@ -177,10 +177,10 @@ $messages = array(
 'tog-extendwatchlist' => 'გავრცობილი კონტროლის სია ყველა დაკავშირებული ცვლილების ჩვენების ჩათვლით',
 'tog-usenewrc' => 'ბოლო ცვლილებების და კონტროლის სიის ცვლილებების დაჯგუფება (საჭიროა ჯავასკრიპტი)',
 'tog-numberheadings' => 'ავტომატურად დანომრე ქვესათაურები',
-'tog-showtoolbar' => 'á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\91á\83\98á\83¡ á\83\98á\83\9cá\83¡á\83¢á\83 á\83£á\83\9bá\83\94á\83\9cá\83¢á\83\94á\83\91á\83\98á\83¡ á\83©á\83\95á\83\94á\83\9cá\83\94á\83\91á\83\90 (á\83¯á\83\90á\83\95á\83\90á\83¡á\83\99á\83 á\83\98á\83\9eá\83¢á\83\98)',
-'tog-editondblclick' => 'გვერდების რედაქტირება ორმაგი დაწკაპუნებით (ჯავასკრიპტი)',
+'tog-showtoolbar' => 'á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\91á\83\98á\83¡ á\83\9eá\83\90á\83\9cá\83\94á\83\9aá\83\98á\83¡ á\83©á\83\95á\83\94á\83\9cá\83\94á\83\91á\83\90',
+'tog-editondblclick' => 'გვერდების რედაქტირება ორმაგი დაწკაპუნებით',
 'tog-editsection' => 'სექციის რედაქტირების ნებართვა [რედაქტირებული] ბმულების გავლით',
-'tog-editsectiononrightclick' => 'á\83¡á\83\94á\83¥á\83ªá\83\98á\83\98á\83¡ á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\91á\83\98á\83¡ á\83\9cá\83\94á\83\91á\83\90á\83 á\83\97á\83\95á\83\90 á\83\9bá\83\90á\83 á\83¯á\83\95á\83\94á\83\9cá\83\90 á\83¦á\83\98á\83\9aá\83\90á\83\99á\83\96á\83\94 á\83\93á\83\90á\83­á\83\94á\83 á\83\98á\83\97<br />á\83¡á\83\94á\83¥á\83ªá\83\98á\83\98á\83¡ á\83¡á\83\90á\83\97á\83\90á\83£á\83 á\83\94á\83\91á\83\96á\83\94 (á\83¯á\83\90á\83\95á\83\90á\83¡á\83\99á\83 á\83\98á\83\9eá\83¢á\83\98)',
+'tog-editsectiononrightclick' => 'á\83¡á\83\94á\83¥á\83ªá\83\98á\83\98á\83¡ á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\91á\83\98á\83¡ á\83\9cá\83\94á\83\91á\83\90á\83 á\83\97á\83\95á\83\90 á\83¡á\83\90á\83\97á\83\90á\83£á\83 á\83\94á\83\91á\83\96á\83\94 á\83\9bá\83\90á\83 á\83¯á\83\95á\83\94á\83\9cá\83\90 á\83¦á\83\98á\83\9aá\83\90á\83\99á\83\96á\83\94 á\83\93á\83\90á\83­á\83\94á\83 á\83\98á\83\97',
 'tog-showtoc' => 'აჩვენე სარჩევი (სამ ქვესათაურზე მეტის მქონე გვერდებისთვის)',
 'tog-rememberpassword' => 'დამიმახსოვრე ამ კომპიუტერზე (მაქსიმუმ $1 {{PLURAL:$1|დღე|დღე}})',
 'tog-watchcreations' => 'დაამატე ჩემი კონტროლის სიას ჩემს მიერ შექმნილი გვერდები და ატვირთული ფაილები',
@@ -198,7 +198,7 @@ $messages = array(
 'tog-shownumberswatching' => 'მაკონტროლებელ მომხმარებელთა რიცხვის ჩვენება',
 'tog-oldsig' => 'არსებული ხელმოწერა:',
 'tog-fancysig' => 'საკუთარი ვიკიფორმატიანი ხელმოწერა (ავტომატური ბმულის გარეშე)',
-'tog-uselivepreview' => 'á\83\92á\83\90á\83\9bá\83\9dá\83\98á\83§á\83\94á\83\9cá\83\94á\83\97 á\83\90á\83®á\83\90á\83\9aá\83\98 á\83¬á\83\98á\83\9cá\83\90á\83¡á\83¬á\83\90á\83 á\83\98 á\83\92á\83\90á\83\93á\83\90á\83®á\83\94á\83\93á\83\95á\83\90 (á\83¯á\83\90á\83\95á\83\90á\83¡á\83\99á\83 á\83\98á\83\9eá\83¢á\83\98 (ექსპერიმენტული)',
+'tog-uselivepreview' => 'á\83\92á\83\90á\83\9bá\83\9dá\83\98á\83§á\83\94á\83\9cá\83\94á\83\97 á\83¡á\83¬á\83 á\83\90á\83¤á\83\98 á\83¬á\83\98á\83\9cá\83\90á\83¡á\83¬á\83\90á\83 á\83\98 á\83\92á\83\90á\83\93á\83\90á\83®á\83\94á\83\93á\83\95á\83\90 (ექსპერიმენტული)',
 'tog-forceeditsummary' => 'გამაფრთხილე ცარიელი რედაქტირების რეზიუმეს შემთხვევაში',
 'tog-watchlisthideown' => 'დამალე ჩემი რედაქტირება კონტროლის სიაში',
 'tog-watchlisthidebots' => 'დამალე რობოტის რედაქტირება კონტროლის სიაში',
@@ -212,6 +212,7 @@ $messages = array(
 'tog-noconvertlink' => 'სათაურის გარდაქმნის ბმულის გამორთვა',
 'tog-norollbackdiff' => 'გაუქმებისას გამოტოვეთ ცვლილებათა განსხვავება',
 'tog-useeditwarning' => 'გამაფრთხილე, როდესაც დავტოვებ რედაქტირებად გვერდს, დაუმახსოვრებელი ცვლილებებით',
+'tog-prefershttps' => 'უსაფრთხო კავშირის მუდამ გამოყენება ავტორიზაციის შემდეგ',
 
 'underline-always' => 'მუდამ',
 'underline-never' => 'არასდროს',
@@ -315,7 +316,7 @@ $messages = array(
 'newwindow' => '(ახალ ფანჯარაში)',
 'cancel' => 'გაუქმება',
 'moredotdotdot' => 'ვრცლად...',
-'morenotlisted' => 'á\83\9bá\83\94á\83¢á\83\98 á\83\90á\83  á\83\90á\83 á\83\98á\83¡ á\83\9cá\83\90á\83©á\83\95á\83\94á\83\9cá\83\94á\83\91á\83\98...',
+'morenotlisted' => 'á\83\94á\83¡ á\83\90á\83 á\83\90á\83¡á\83 á\83£á\83\9aá\83\98 á\83¡á\83\98á\83\90á\83\90.',
 'mypage' => 'გვერდი',
 'mytalk' => 'განხილვა',
 'anontalk' => 'ამ IP-ს განხილვა',
@@ -445,7 +446,7 @@ $1',
 'pagetitle' => '$1 - {{SITENAME}}',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'backlinksubtitle' => '← $1',
-'retrievedfrom' => 'მოძიებულია „$1\83\93á\83\90á\83\9câ\80\9c',
+'retrievedfrom' => 'მოძიებულია „$1â\80\9c\83\93á\83\90á\83\9c',
 'youhavenewmessages' => 'თქვენ გაქვთ $1 ($2).',
 'newmessageslink' => 'ახალი შეტყობინებები',
 'newmessagesdifflink' => 'განსხვავება წინა ვერსიასთან',
@@ -473,8 +474,8 @@ $1',
 'feed-unavailable' => 'სინდიკაციის კენტები მიუწვდომელია',
 'site-rss-feed' => '$1-ის არხი RSS',
 'site-atom-feed' => '$1-ის არხი Atom',
-'page-rss-feed' => '„$1-ის“ არხი RSS',
-'page-atom-feed' => '„$1-ის“ არხი Atom',
+'page-rss-feed' => '„$1“-ის არხი RSS',
+'page-atom-feed' => '„$1“-ის არხი Atom',
 'feed-atom' => 'Atom',
 'feed-rss' => 'RSS',
 'red-link-title' => '$1 (გვერდი არ არსებობს)',
@@ -506,6 +507,9 @@ $1',
 # General errors
 'error' => 'შეცდომა',
 'databaseerror' => 'შეცდომა მონაცემთა ბაზაში',
+'databaseerror-query' => 'მოთხოვნა: $1',
+'databaseerror-function' => 'ფუნქცია: $1',
+'databaseerror-error' => 'შეცდომა: $1',
 'laggedslavemode' => 'ყურადღება: გვერდი შესაძლოა არ შეიცავდეს ბოლო ცვლილებებს.',
 'readonly' => 'მონაცემთა ბაზა დახურულია',
 'enterlockreason' => 'მიუთიეთ ბლოკირების მიზეზი და ხანგრძლივობის ვადა',
@@ -523,9 +527,9 @@ $1',
 'readonly_lag' => 'მონაცემთა ბაზა ავტომატურად დაიხურა, სანამ შვილობილი ბაზის სერვერები მთავარ ბაზასთან სინქრონიზაციას ახდენს',
 'internalerror' => 'შიდა შეცდომა',
 'internalerror_info' => 'შიდა შეცდომა: $1',
-'fileappenderrorread' => 'შეუძლებელია „$1-ის“ წაკითხვა დამატებისას.',
-'fileappenderror' => 'ვერ მოხერხდა „$1“ შეერთება „$2\83\97á\83\90á\83\9câ\80\9c',
-'filecopyerror' => '„$1“ ფაილის „$2-ზე“ კოპირება ვერ მოხერხდა.',
+'fileappenderrorread' => 'შეუძლებელია „$1“-ის წაკითხვა დამატებისას.',
+'fileappenderror' => 'ვერ მოხერხდა „$1“ შეერთება „$2â\80\9c\83\97á\83\90á\83\9c',
+'filecopyerror' => '„$1“ ფაილის „$2“-ზე კოპირება ვერ მოხერხდა.',
 'filerenameerror' => 'შეუძლებელია ფაილის „$1“ სათაურის შეცვლა სახელწოდებით „$2“.',
 'filedeleteerror' => 'ფაილის „$1“ წაშლა ვერ მოხერხდა.',
 'directorycreateerror' => 'დირექტორიის „$1“ შექმნა შეუძლებელია.',
@@ -594,6 +598,7 @@ $2',
 'yourname' => 'მომხმარებელი:',
 'userlogin-yourname' => 'მომხმარებლის სახელი',
 'userlogin-yourname-ph' => 'შეიყვანეთ თქვენი მომხმარებლის სახელი',
+'createacct-another-username-ph' => 'შეიყვანეთ მომხმარებლის სახელი',
 'yourpassword' => 'პაროლი:',
 'userlogin-yourpassword' => 'პაროლი',
 'userlogin-yourpassword-ph' => 'შეიყვანეთ თქვენი პაროლი',
@@ -630,6 +635,7 @@ $2',
 'createacct-emailrequired' => 'ელ. ფოსტის მისამართი',
 'createacct-emailoptional' => 'ელ. ფოსტის მისამართი (არასავალდებულო)',
 'createacct-email-ph' => 'შეიყვანეთ თქვენი ელ. ფოსტის მისამართი',
+'createacct-another-email-ph' => 'შეიყვანეთ ელ.ფოსტის მისამართი',
 'createaccountmail' => 'გამოიყენეთ შემთხვევითობის მეთოდით შერჩეული დროებითი პაროლი და მისი გაგზავნა ქვემოთ მითითებულ ელ. ფოსტის მისამართზე:',
 'createacct-realname' => 'ნამდვილი სახელი (არააუცილებელი)',
 'createaccountreason' => 'მიზეზი:',
@@ -638,6 +644,7 @@ $2',
 'createacct-captcha' => 'უსაფრთხოების შემოწმება',
 'createacct-imgcaptcha-ph' => 'შეიყვანეთ ზემოთ მოცემული ტექსტი',
 'createacct-submit' => 'შექმენით თქვენი ანგარიში',
+'createacct-another-submit' => 'სხვა ანგარიშის შექმნა',
 'createacct-benefit-heading' => '{{SITENAME}} შექმნილია თქვენნაირი ადამიანების მიერ.',
 'createacct-benefit-body1' => '{{PLURAL:$1|რედაქტირება|რედაქტირება}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|გვერდი|გვერდი}}',
@@ -790,6 +797,10 @@ $2
 'changeemail-submit' => 'ელ-ფოსტის შეცვლა',
 'changeemail-cancel' => 'გაუქმება',
 
+# Special:ResetTokens
+'resettokens-tokens' => 'ჟეტონები:',
+'resettokens-token-label' => '$1 (მიმდინარე მნიშვნელობა: $2)',
+
 # Edit page toolbar
 'bold_sample' => 'მუქი ტექსტი',
 'bold_tip' => 'მუქი ტექსტი',
@@ -1094,12 +1105,12 @@ $3 -ემ ამგვარი ახსნა : ''$2''",
 'rev-suppressed-no-diff' => "თქვენ არ შეგიძლიათ ამ განსხვავების ნახვა, რადგან ერთ-ერთი ცვლილება '''წაშლილია'''.",
 'rev-deleted-unhide-diff' => "გვერდის ერთ-ერთი ვერსია '''წაიშალა'''.
 დეტალები შეგიძლიათ იხილოთ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} წაშლის ჟურნალში].
-სურვილის შემთხვევაში თქვენ შეგიძლიათ [$1 იხილოთ განსხვავება ვერსიაში].",
+სურვილის შემთხვევაში, თქვენ შეგიძლიათ [$1 იხილოთ განსხვავება ვერსიაში].",
 'rev-suppressed-unhide-diff' => "ამ ვერსიის შედარების ერთ–ერთი ვერსია '''დაიმალა'''.
 დეტალები შეგიძლიათ იხილოთ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} დამალვების ჟურნალში].
 თქვენ, შეგიძლიათ [$1 იხილოთ ეს შედარება].",
-'rev-deleted-diff-view' => "ამ ვერსიის შედარების ერთერთი ვერსია '''წაიშალა'''.
-თქვენ, შეგიძლიათ იხილოთ ეს შედარება. დეტალები შეგიძლიათ იხილოთ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} წაშლის ჟურნალში].",
+'rev-deleted-diff-view' => "ამ ვერსიის შედარების ერთ-ერთი ვერსია '''წაიშალა'''.
+თქვენ შეგიძლიათ იხილოთ ეს შედარება. დეტალები შეგიძლიათ იხილოთ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} წაშლის ჟურნალში].",
 'rev-suppressed-diff-view' => "ამ ვერსიის შედარების ერთ–ერთი ვერსია '''დაიმალა'''.
 თქვენ, შეგიძლიათ იხილოთ ეს შედარება. დეტალები შეგიძლიათ იხილოთ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} დამალვების ჟურნალში].",
 'rev-delundel' => 'ჩვენება/დამალვა',
@@ -1211,6 +1222,7 @@ $1",
 'compareselectedversions' => 'არჩეული ვერსიების შედარება',
 'showhideselectedversions' => 'ჩვენება/დამალვა არჩეული ვერსიებისა',
 'editundo' => 'გაუქმება',
+'diff-empty' => '(განსხვავება არ არის)',
 'diff-multi' => '({{PLURAL:$2|ერთი მომხმარებლის|$2 მომხმარებლების}} {{PLURAL:$1|ერთი შუალედური ვერსია|$1 შუალედური ვერსიები}} არ არის ნაჩვენები.)',
 'diff-multi-manyusers' => '({{PLURAL:$2|ერთი მომხმარებლის|$2 მომხმარებლების}} {{PLURAL:$1|ერთი შუალედური ვერსია|$1 შუალედური ვერსიები}}, რომლებიც არ არის ნაჩვენები.)',
 'difference-missing-revision' => '{{PLURAL:$2|$2 ვერსია}} ამ შედარებისათვის ($1) {{PLURAL:$2|ვერ მოიძებნა}}.
@@ -1236,7 +1248,7 @@ $1",
 'shown-title' => 'აჩვენეთ $1 {{PLURAL:$1|რეზულტატი|რეზულტატი}} გვერდზე',
 'viewprevnext' => 'იხილე  ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-legend' => 'ძიების დაწყობა:',
-'searchmenu-exists' => "'''ამ ვიკიპროექტში არის გვერდი «[[:$1]]»'''",
+'searchmenu-exists' => "'''ამ ვიკიპროექტში არის გვერდი „[[:$1]]“'''",
 'searchmenu-new' => "'''შექმენით გვერდი „[[:$1]]“ ამ ვიკიში!'''",
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|აჩვენეთ გვერდები ამ პრეფიქსით]]',
 'searchprofile-articles' => 'ძირითადი გვერდები',
@@ -1351,7 +1363,7 @@ $1",
 'prefs-custom-js' => 'მომხმარებლის JS',
 'prefs-common-css-js' => 'ზოგადი CSS/JS ყველა თემისთვის:',
 'prefs-reset-intro' => 'ეს გვერდი შეიძლება გამოყენებული იქნეს თქვენი კონფიგურაციის შესაცვლელად საწყის კონფიგურაციაზე. ამ მოქმედების დადასტურების შემთხვევაში, თქვენ ვეღარ შეძლებთ მის გაუქმებას.',
-'prefs-emailconfirm-label' => 'ელფოსტის დადასტურება:',
+'prefs-emailconfirm-label' => 'ელ-ფოსტის დადასტურება:',
 'youremail' => 'ელექტრონული ფოსტა:',
 'username' => '{{GENDER:$1|მომხმარებლის სახელი}}:',
 'uid' => '{{GENDER:$1|მომხმარებლის}} იდენტიფიკატორი:',
@@ -1364,20 +1376,20 @@ $1",
 'yourvariant' => 'შინაარსის ენის ვარიანტი:',
 'prefs-help-variant' => 'საურველი დაწერილობა ან ორთოგრაფია, რომელშიც  უნდა იყოს ნაჩვენები ვიკის გვერდები.',
 'yournick' => 'მეტსახელი:',
-'prefs-help-signature' => 'á\83\99á\83\9dá\83\9bá\83\94á\83\9cá\83¢á\83\90á\83 á\83\94á\83\91á\83\98 á\83\92á\83\90á\83\9cá\83®á\83\98á\83\9aá\83\95á\83\98á\83¡ á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83\96á\83\94 á\83£á\83\9cá\83\93á\83\90 á\83\98á\83§á\83\95á\83\9cá\83\94á\83\9c á\83®á\83\94á\83\9aá\83\9bá\83\9dá\83¬á\83\94á\83 á\83\98á\83\9aá\83\9cá\83\98 Â«<nowiki>~~~~</nowiki>» á\83¡á\83\98á\83\9bá\83\91á\83\9dá\83\9aá\83\9dá\83\94á\83\91á\83\98á\83¡ á\83\9bá\83\94á\83¨á\83\95á\83\94á\83\9dá\83\91á\83\98á\83\97, á\83 á\83\9dá\83\9bá\83\9aá\83\94á\83\91á\83\98á\83ª á\83\92á\83\90á\83\93á\83\90á\83\99á\83\94á\83\97á\83\93á\83\94á\83\91á\83\90 á\83\97á\83¥á\83\95á\83\94á\83\9c ხელმოწერად და ხელმოწერის დროთი.',
+'prefs-help-signature' => 'á\83\99á\83\9dá\83\9bá\83\94á\83\9cá\83¢á\83\90á\83 á\83\94á\83\91á\83\98 á\83\92á\83\90á\83\9cá\83®á\83\98á\83\9aá\83\95á\83\98á\83¡ á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83\96á\83\94 á\83®á\83\94á\83\9aá\83\9bá\83\9dá\83¬á\83\94á\83 á\83\98á\83\9aá\83\98 á\83£á\83\9cá\83\93á\83\90 á\83\98á\83§á\83\9dá\83¡ â\80\9e<nowiki>~~~~</nowiki>â\80\9c á\83¡á\83\98á\83\9bá\83\91á\83\9dá\83\9aá\83\9dá\83\94á\83\91á\83\98á\83¡ á\83\92á\83\90á\83\9bá\83\9dá\83§á\83\94á\83\9cá\83\94á\83\91á\83\98á\83\97, á\83 á\83\9dá\83\9bá\83\9aá\83\94á\83\91á\83\98á\83ª á\83\92á\83\90á\83\93á\83\90á\83\99á\83\94á\83\97á\83\93á\83\94á\83\91á\83\90 á\83\97á\83¥á\83\95á\83\94á\83\9cá\83¡ ხელმოწერად და ხელმოწერის დროთი.',
 'badsig' => 'არასწორი ნედლი ხელმოწერა; შეამოწმეთ HTML ჭდეები.',
 'badsiglength' => 'ხელმოწერა ძალიან გრძელია.
 უნდა შედგებოდეს მაქსიმუმ $1 ნიშნისაგან.',
-'yourgender' => 'á\83¡á\83¥á\83\94á\83¡á\83\98:',
-'gender-unknown' => 'á\83\90á\83  á\83\90á\83 á\83\98á\83¡ á\83\9bá\83\98á\83\97á\83\98á\83\97á\83\94á\83\91á\83£á\83\9aá\83\98',
-'gender-male' => 'á\83\9bá\83\90á\83\9bá\83 á\83\9dá\83\91á\83\98á\83\97á\83\98',
-'gender-female' => 'á\83\9bá\83\93á\83\94á\83\93á\83 á\83\9dá\83\91á\83\98á\83\97á\83\98',
+'yourgender' => 'á\83 á\83\9dá\83\9bá\83\94á\83\9aá\83\98 á\83\90á\83¦á\83¬á\83\94á\83 á\83\90 á\83£á\83¤á\83 á\83\9d á\83¨á\83\94á\83\92á\83\94á\83¤á\83\94á\83 á\83\94á\83\91á\83\90á\83\97 á\83\97á\83¥á\83\95á\83\94á\83\9c?',
+'gender-unknown' => 'á\83\9bá\83\98á\83\97á\83\98á\83\97á\83\94á\83\91á\83\90á\83¡ á\83\90á\83  á\83\95á\83\97á\83\95á\83\9aá\83\98 á\83¡á\83\90á\83­á\83\98á\83 á\83\9dá\83\93',
+'gender-male' => 'á\83\98á\83¡ (á\83\9bá\83\90á\83\9bá\83 á\83\9dá\83\91á\83\98á\83\97á\83\98) á\83\90á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\91á\83¡ á\83\95á\83\98á\83\99á\83\98\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83¡',
+'gender-female' => 'á\83\98á\83¡ (á\83\9bá\83\93á\83\94á\83\93á\83 á\83\9dá\83\91á\83\98á\83\97á\83\98) á\83\90á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\91á\83¡ á\83\95á\83\98á\83\99á\83\98\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83¡',
 'prefs-help-gender' => 'არასავალდებულო ველი: გამოიყენება პროგრამული უზრუნველყოფის იმ შეტყობინებებისთვის, რომლებიც ადამიანის სქესზეა დამოკიდებული.
 ეს ინფორმაცია საზოგადოებრივი  იქნება.',
 'email' => 'ელ. ფოსტა',
 'prefs-help-realname' => 'ნამდვილი სახელის მითითება აუცილებელი არ არის, მაგრამ თუ მიუთითებთ ის გამოყენებული იქნება თქვენი ნამუშევრის აღსანიშნავად.',
-'prefs-help-email' => 'ელ. ფოსტის მისამართი არ არის სავალდებულო, მაგრამ იძლევა ახალი პაროლის გამოგზავნის საშუალებას თქვენი პაროლის დავიწყების შემთხვევაში.',
-'prefs-help-email-others' => 'ის აგრეთვე მისცემს საშუალებას სხვა მომხმარებლებს დაგიკავშირდნენ თქვენ პირადი გვერდის საშუალებით თქვენი ელექტრონული ფოსტის მისამართის გამხელის გარეშე.',
+'prefs-help-email' => 'á\83\94á\83\9a. á\83¤á\83\9dá\83¡á\83¢á\83\98á\83¡ á\83\9bá\83\98á\83¡á\83\90á\83\9bá\83\90á\83 á\83\97á\83\98 á\83\90á\83  á\83\90á\83 á\83\98á\83¡ á\83¡á\83\90á\83\95á\83\90á\83\9aá\83\93á\83\94á\83\91á\83£á\83\9aá\83\9d, á\83\9bá\83\90á\83\92á\83 á\83\90á\83\9b á\83\9bá\83\98á\83¡á\83\98 á\83\9bá\83\98á\83\97á\83\98á\83\97á\83\94á\83\91á\83\90 á\83\98á\83«á\83\9aá\83\94á\83\95á\83\90 á\83\90á\83®á\83\90á\83\9aá\83\98 á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83\92á\83\90á\83\9bá\83\9dá\83\92á\83\96á\83\90á\83\95á\83\9cá\83\98á\83¡ á\83¡á\83\90á\83¨á\83£á\83\90á\83\9aá\83\94á\83\91á\83\90á\83¡ á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83\93á\83\90á\83\95á\83\98á\83¬á\83§á\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83\9bá\83\97á\83®á\83\95á\83\94á\83\95á\83\90á\83¨á\83\98.',
+'prefs-help-email-others' => 'ის აგრეთვე მისცემს საშუალებას სხვა მომხმარებლებს, დაგიკავშირდნენ თქვენს პირად გვერდზე მითითებული ბმულის მეშვეობით. თქვენი ელ. ფოსტის მისამართი არ იქნება გამხელილი, როდესაც სხვა მომხმარებლები დაგიკავშირდებიან.',
 'prefs-help-email-required' => 'თქვენი ელ-ფოსტის მისამართი აუცილებელია.',
 'prefs-info' => 'საბაზისო ინფორმაცია',
 'prefs-i18n' => 'ინტერნაციონალიზაცია',
@@ -1386,6 +1398,7 @@ $1",
 'prefs-timeoffset' => 'სასაათო სარტყლის ცვლილება',
 'prefs-advancedediting' => 'მთავარი პარამეტრები',
 'prefs-editor' => 'რედაქტორი',
+'prefs-preview' => 'წინასწარი გადახედვა',
 'prefs-advancedrc' => 'გაფართოებული პარამეტრები',
 'prefs-advancedrendering' => 'გაფართოებული პარამეტრები',
 'prefs-advancedsearchoptions' => 'გაფართოებული პარამეტრები',
@@ -1393,7 +1406,9 @@ $1",
 'prefs-displayrc' => 'გამოსახვის კონფიგურაციები',
 'prefs-displaysearchoptions' => 'გამოსახვის კონფიგურაციები',
 'prefs-displaywatchlist' => 'გამოსახვის კონფიგურაციები',
+'prefs-tokenwatchlist' => 'ჟეტონი',
 'prefs-diffs' => 'სხვაობა ვერსიებს შორის',
+'prefs-help-prefershttps' => 'ამ კონფიგურაციის არჩევა შედეგს გამოიღებს შემდგომი ავტორიზაციის შედმეგ.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'ელ-ფოსტის მისამართი სწორად გამოიყურება',
@@ -1422,7 +1437,7 @@ $1",
 'userrights-changeable-col' => 'ჯგუფები, რომლებიც შეგიძლიათ შეცვალოთ',
 'userrights-unchangeable-col' => 'ჯგუფები, რომლებიც არ შეგიძლიათ შეცვალოთ',
 'userrights-irreversible-marker' => '$1*',
-'userrights-conflict' => 'მომხმარებელთა უფლებების კონფლიქტი! გთხოვთ, ხელმეორედ შეინახოთ თქვენი ცვლილებები.',
+'userrights-conflict' => 'მომხმარებელთა უფლებების კონფლიქტი! გთხოვთ ხელმეორედ შეინახოთ თქვენი ცვლილებები.',
 
 # Groups
 'group' => 'ჯგუფი:',
@@ -1486,15 +1501,17 @@ $1",
 'right-hideuser' => 'მომხმარებლის სახელის დაბლოკვა და მისი დამალვა საზოგადოებისგან',
 'right-ipblock-exempt' => 'IP ბლოკის, ავტობლოკის და დიაპაზონთა ბლოკის გასვლა',
 'right-proxyunbannable' => 'პროქსის ავტობლოკის გადასვლა',
-'right-unblockself' => 'á\83\9bá\83\9dá\83®á\83¡á\83\9cá\83\90á\83\9c á\83\91á\83\9aá\83\9dá\83\99á\83\98 á\83\97á\83\95á\83\98á\83\97á\83\9dá\83\9c',
+'right-unblockself' => 'á\83¡á\83\90á\83\99á\83£á\83\97á\83\90á\83 á\83\98 á\83\97á\83\90á\83\95á\83\98á\83¡ á\83\92á\83\90á\83\9cá\83\91á\83\9aá\83\9dá\83\99á\83\95á\83\90',
 'right-protect' => 'გვერდების დაცვის დონის შეცვლა და დაცული გვერდების რედაქტირება',
-'right-editprotected' => 'დაცული გვერდების რედაქტირება (იერარქიული დაცვის გარეშე)',
+'right-editprotected' => 'გვერდების რედაქტირება რომლებიც დაცულია როგორც „{{int:protect-level-sysop}}“',
+'right-editsemiprotected' => 'გვერდების რედაქტირება რომლებიც დაცულია როგორც „{{int:protect-level-autoconfirmed}}“',
 'right-editinterface' => 'მომხმარებლის ინტერფეისის შეცვლა',
 'right-editusercssjs' => 'სხვა მომხმარებლების CSS- и JS- ფაილების შესწორება',
 'right-editusercss' => 'სხვა მომხმარებლების CSS- ფაილების შესწორება',
 'right-edituserjs' => 'სხვა მომხმარებლების JS- ფაილების შესწორება',
 'right-editmyusercss' => 'თქვენი საკუთარი CSS-ფაილების რედაქტირება',
 'right-editmyuserjs' => 'თქვენი საკუთარი JavaScript-ფაილების რედაქტირება',
+'right-viewmywatchlist' => 'თქვენი კონტროლის სიის ხილვა',
 'right-rollback' => 'გარკვეულ გვერდზე ბოლო მომხმარებლის რედაქტირების სწრაფი გაუქმება',
 'right-markbotedits' => 'გაუქმებული შესწორებების მონიშვნა როგორც ბოტის',
 'right-noratelimit' => 'სიჩქარის შეზღუდვის არ არსებობა',
@@ -1546,8 +1563,8 @@ $1",
 'action-block' => 'ამ მომხმარებლისთვის რედაქტირების დაბლოკვა',
 'action-protect' => 'ამ გვერდის დაცვის დონის შეცვლა',
 'action-rollback' => 'გარკვეულ გვერდზე ბოლო მომხმარებლის რედაქტირების სწრაფი გაუქმება',
-'action-import' => 'á\83\90á\83\9b á\83\92á\83\95á\83\94á\83 á\83\93ის იმპორტი სხვა ვიკიდან',
-'action-importupload' => 'á\83\90á\83\9b á\83\92á\83\95á\83\94á\83 á\83\93ის იმპორტი ატვირთული ფაილიდან',
+'action-import' => 'á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91ის იმპორტი სხვა ვიკიდან',
+'action-importupload' => 'á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91ის იმპორტი ატვირთული ფაილიდან',
 'action-patrol' => 'სხვა მომხმარებლის შესწორების მონიშვნა შემოწმებულად',
 'action-autopatrol' => 'თქვენი ცვლილების მონიშვნა პატრულირებადით',
 'action-unwatchedpages' => 'იმ გვერდების ხილვა, რომლებიც არავის კონტროლში არ არის შესული',
@@ -1557,10 +1574,14 @@ $1",
 'action-siteadmin' => 'მონაცემთა ბაზის დაბლოკვა და განბლოკვა',
 'action-sendemail' => 'ელ-ფოსტების გაგზავნა',
 'action-editmywatchlist' => 'თქვენი კონტროლის სიის რედაქტირება',
+'action-viewmywatchlist' => 'თქვენი კონტროლის სიის ხილვა',
+'action-viewmyprivateinfo' => 'თქვენი პირადი ინფორმაციის ხილვა',
 'action-editmyprivateinfo' => 'თქვენი პირადი ინფორმაციის რედაქტირება',
 
 # Recent changes
 'nchanges' => '$1 ცვლილება',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|ბოლო ვიზიტის შემდეგ}}',
+'enhancedrc-history' => 'ისტორია',
 'recentchanges' => 'ბოლო ცვლილებები',
 'recentchanges-legend' => 'ბოლო ცვლილებების პარამეტრები',
 'recentchanges-summary' => 'უთვალთვალეთ ვიკიში ბოლო ცვლილებებს ამ გვერდზე.',
@@ -1593,7 +1614,7 @@ $1",
 'rc-change-size' => '$1',
 'rc-change-size-new' => 'ზომა ცვლილების შემდეგ არის: {{PLURAL:$1|ბაიტი|ბაიტი}}',
 'newsectionsummary' => '/* $1 */ ახალი სექცია',
-'rc-enhanced-expand' => 'á\83\93á\83\90á\83\9bá\83\90á\83¢á\83\94á\83\91á\83\98á\83\97á\83\98 á\83\98á\83\9cá\83¤á\83\9dá\83 á\83\9bá\83\90á\83ªá\83\98á\83\98á\83¡ á\83©á\83\95á\83\94á\83\9cá\83\94á\83\91á\83\90 (á\83\9bá\83\9dá\83\98á\83\97á\83®á\83\9dá\83\95á\83¡ á\83¯á\83\90á\83\95á\83\90á\83¡á\83\99á\83 á\83\98á\83\9eá\83¢á\83¡)',
+'rc-enhanced-expand' => 'á\83\93á\83\94á\83¢á\83\90á\83\9aá\83\94á\83\91á\83\98á\83¡  á\83©á\83\95á\83\94á\83\9cá\83\94á\83\91á\83\90',
 'rc-enhanced-hide' => 'დამატებითი ინფორმაციის დამალვა',
 'rc-old-title' => 'თავდაპირველად შექმნილი როგორც „$1“',
 
@@ -1613,7 +1634,7 @@ $1",
 'reuploaddesc' => 'გააუქმეთ ატვირთვა და დაუბრუნდით ატვირთვის ფორმას.',
 'upload-tryagain' => 'შეინახეთ ფაილის შეცვლილი აღწერა',
 'uploadnologin' => 'რეგისტრაცია არ გაქვთ გავლილი',
-'uploadnologintext' => 'ფაილის ასატვირთად თქვენ უნდა [[Special:UserLogin|შეხვიდეთ]] სისტემაში.',
+'uploadnologintext' => 'ფაილის ასატვირთად თქვენ უნდა $1.',
 'upload_directory_missing' => 'შესანახი დირექტორია ($1) არ არსებობს და მისი აღდგენა ვებ-სერვერის მიერ შეუძლებელია.',
 'upload_directory_read_only' => 'ვებსერვერი ვერ იწერს ატვირთვის დირექტორიაში ($1).',
 'uploaderror' => 'ატვირთვის შეცდომა',
@@ -1772,7 +1793,7 @@ $1',
 # Lock manager
 'lockmanager-notlocked' => '"$1"–ის განბლოკვა ვერ მოხერხდა; ის არ არის დაბლოკილი.',
 'lockmanager-fail-closelock' => 'ბლოკირების ფაილის დახურვა "$1"–თვის ვერ მოხერხდა.',
-'lockmanager-fail-deletelock' => 'ბლოკირების ფაილის წაშლა "$1"–თვის ვერ მოხერხდა.',
+'lockmanager-fail-deletelock' => 'ბლოკირების ფაილის წაშლა „$1“-თვის ვერ მოხერხდა.',
 'lockmanager-fail-acquirelock' => '"$1"–ის ბლოკირება ვერ მოხერხდა.',
 'lockmanager-fail-openlock' => 'ბლოკირების ფაილის გახსნა "$1"–თვის ვერ მოხერხდა.',
 'lockmanager-fail-releaselock' => '"$1"–ის განბლოკვა ვერ მოხერხდა.',
@@ -1856,6 +1877,9 @@ $1',
 'listfiles_size' => 'ზომა (ბაიტები)',
 'listfiles_description' => 'აღწერილობა',
 'listfiles_count' => 'ვერსიები',
+'listfiles-show-all' => 'სურათების ძველი ვერსიების ჩართვა',
+'listfiles-latestversion-yes' => 'დიახ',
+'listfiles-latestversion-no' => 'არა',
 
 # File description page
 'file-anchor-link' => 'ფაილი',
@@ -1952,6 +1976,9 @@ $1',
 'randompage' => 'ნებისმიერი გვერდი',
 'randompage-nopages' => '{{PLURAL:$2|სახელთა შემდეგი სივრცე|სახელთა შემდეგ სივრცეში}} "$1" არ არის გვერდები.',
 
+# Random page in category
+'randomincategory-selectcategory-submit' => 'მიდი',
+
 # Random redirect
 'randomredirect' => 'ნებისმიერი გადამისამართება',
 'randomredirect-nopages' => 'სახელთა სივრცეში „$1“ არ არის გადამისამართებები.',
@@ -2161,8 +2188,9 @@ $1',
 'listgrouprights' => 'მომხმარებელთა ჯგუფების უფლებები',
 'listgrouprights-summary' => 'ქვემოთ წარმოდგენილია ამ ვიკიში გარკვეულ ჯგუფთა სია და მათი უფლებები.
 შესაძლოა არსებობს [[{{MediaWiki:Listgrouprights-helppage}}|დამატებითი ინფორმაცია]] ინდივიდუალურ უფლებებთან დაკავშირებით.',
-'listgrouprights-key' => '* <span class="listgrouprights-granted">წარმოდგენილი უფლებები</span>
-* <span class="listgrouprights-revoked">გაუქმებული უფლებები</span>',
+'listgrouprights-key' => 'ლეგენდა:
+* <span class="listgrouprights-granted">მიცემული უფლებები</span>
+* <span class="listgrouprights-revoked">გაწვეული უფლებები</span>',
 'listgrouprights-group' => 'ჯგუფი',
 'listgrouprights-rights' => 'უფლებები',
 'listgrouprights-helppage' => 'Help:ჯგუფების უფლებები',
@@ -2304,7 +2332,7 @@ $UNWATCHURL
 'excontentauthor' => 'შინაარსი იყო: „$1“ (და ერთადერთი ავტორი იყო „[[Special:Contributions/$2|$2]]“)',
 'exbeforeblank' => 'გვერდის შინაარსი წაშლამდე იყო შემდეგი: „$1“',
 'exblank' => 'გვერდი ცარიელი იყო',
-'delete-confirm' => '„$1-ის“ წაშლა',
+'delete-confirm' => '„$1“-ის წაშლა',
 'delete-legend' => 'წაშლა',
 'historywarning' => "'''ყურადღება:''' გვერდს, რომლის წაშლასაც აპირებთ, აქვს დიდი ისტორია: ($1)",
 'confirmdeletetext' => 'თქვენ მოითხოვეთ გვერდისა (ან ფაილისა) და მონაცემთა ბაზიდან მისი ისტორიის წაშლა.
@@ -2344,7 +2372,7 @@ $UNWATCHURL
 ბოლო ცვლილებები შეიტანა  [[User:$3|$3]] ([[User talk:$3|განხილვა]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "რედაქტირება განმარტებული იყო როგორც: \"''\$1''\".",
 'revertpage' => '[[Special:Contributions/$2|$2]]-ის რედაქტირება გაუქმდა; აღდგა ბოლოს [[User:$1|$1]]-ის მიერ რედაქტირებული ვერსია',
-'revertpage-nouser' => 'á\83\92á\83\90á\83£á\83¥á\83\9bá\83\93á\83\90 (á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\98á\83¡ á\83¡á\83\90á\83®á\83\94á\83\9aá\83\98 á\83¬á\83\90á\83\98á\83¨á\83\90á\83\9aá\83\90) á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\94á\83\9a [[User:$1|$1]] á\83\91á\83\9dá\83\9aá\83\9d á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\90á\83\96á\83\94.',
+'revertpage-nouser' => 'á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\94á\83\9a (á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\98á\83¡ á\83¡á\83\90á\83®á\83\94á\83\9aá\83\98 á\83\93á\83\90á\83\9bá\83\90á\83\9aá\83£á\83\9aá\83\98á\83\90)-á\83\98á\83¡ á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\91á\83\90 á\83\93á\83\90á\83\91á\83 á\83£á\83\9cá\83\94á\83\91á\83£á\83\9aá\83\98á\83\90 á\83\95á\83\94á\83 á\83¡á\83\98á\83\90á\83\96á\83\94 [[User:$1|$1]]',
 'rollback-success' => 'გაუქმდა შესწორება $1; დაბრუნება ვერსიაზე $2.',
 
 # Edit tokens
@@ -2746,7 +2774,7 @@ $1',
 
 სტატია დასახელებით „[[:$1]]“ უკვე არსებობს. გსურთ მისი წაშლა გადატანისთვის ადგილის დასათმობად?',
 'delete_and_move_confirm' => 'დიახ, წაშალეთ ეს გვერდი',
-'delete_and_move_reason' => 'წაშლილია „[[$1]]\83\93á\83\90á\83\9câ\80\9c á\83\92á\83\90á\83\93á\83\90á\83¢á\83\90á\83\9cá\83\98á\83¡á\83\97á\83\95á\83\98á\83¡ á\83\90á\83\93á\83\92á\83\98á\83\9aá\83\98á\83¡ á\83\93á\83\90á\83¡á\83\90á\83\97á\83\9bá\83\9dá\83\91á\83\90á\83\93',
+'delete_and_move_reason' => 'წაშლილია „[[$1]]â\80\9c\83\93á\83\90á\83\9c á\83\92á\83\90á\83\93á\83\90á\83¢á\83\90á\83\9cá\83\98á\83¡á\83\97á\83\95á\83\98á\83¡ á\83\90á\83\93á\83\92á\83\98á\83\9aá\83\98á\83¡ á\83\93á\83\90á\83¡á\83\90á\83\97á\83\9bá\83\9dá\83\91á\83\90á\83\93',
 'selfmove' => 'წყარო და დანიშნულების სათაურები მსგავსია; შეუძლებელია გვერდის საკუთარ თავზე გადატანა.',
 'immobile-source-namespace' => 'შეუძლებელია სახელის გადარქმევა „$1“ სახელთა სივრცეში',
 'immobile-target-namespace' => 'შეუძლებელია გვერდის გადატანა „$1“ სახელთა სივრცეში',
@@ -2957,6 +2985,7 @@ $2',
 'tooltip-undo' => 'შეტანილი ცვლილებების გაუქმება და წინასწარ გადახედვის ჩვენება, გაუქმების მიზეზის სქოლიოში ჩაწერასთან ერთად.',
 'tooltip-preferences-save' => 'შეინახეთ კონფიგურაცია',
 'tooltip-summary' => 'შეიყვანეთ მოკლე სქოლიო',
+'tooltip-iwiki' => '$1 — $2',
 
 # Stylesheets
 'common.css' => '/** აქ ჩასმული CSS გამოყენებული იქნება გაფორმების ყველა გარეკანზე */',
@@ -3015,7 +3044,7 @@ $2',
 'pageinfo-views' => 'ხილვების რაოდენობა',
 'pageinfo-watchers' => 'გვერდის დამკვირვებელთა რაოდენობა',
 'pageinfo-few-watchers' => 'სულ მცირე $1 {{PLURAL:$1|დამკვირვებელი|დამკვირვებელი}}',
-'pageinfo-redirects-name' => 'გადამისამართება ამ გვერდზე',
+'pageinfo-redirects-name' => 'á\83\92á\83\90á\83\93á\83\90á\83\9bá\83\98á\83¡á\83\90á\83\9bá\83\90á\83 á\83\97á\83\94á\83\91á\83\94á\83\91á\83\98á\83¡ á\83 á\83\90á\83\9dá\83\93á\83\94á\83\9cá\83\9dá\83\91á\83\90 á\83\90á\83\9b á\83\92á\83\95á\83\94á\83 á\83\93á\83\96á\83\94',
 'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'ამ გვერდის ქვეგვერდები',
 'pageinfo-subpages-value' => '$1($2 {{PLURAL:$2|გადამისამართება|გადამისამართება}}; $3 {{PLURAL:$3|ჩვეულებრივი|ჩვეულებრივი}})',
@@ -3060,7 +3089,7 @@ $2',
 'markedaspatrollederror' => 'შეუძლებელია ამ სტატიის მოhttp://translatewiki.net/w/i.php?title=MediaWiki:Markedaspatrollederror/ka&action=edit&loadgroup=core&loadtask=untranslatedნიშნვნა პატრულირებულად.',
 'markedaspatrollederrortext' => 'თქვენ უნდა მონიშნოთ ვერსია, რომელიც პატრულირებულად ჩაითვლება.',
 'markedaspatrollederror-noautopatrol' => 'თქვენ ვერ მონიშნავთ თქვენივე შესწორებებს პატრულირებულად.',
-'markedaspatrollednotify' => 'ეს ცვლილება გვერდზე $1 პატრულირებულად მოინიშნა.',
+'markedaspatrollednotify' => 'ეს ცვლილება გვერდზე „$1“ პატრულირებულად მოინიშნა.',
 'markedaspatrollederrornotify' => 'პატრულირებულად მონიშვნა ვერ მოხერხდა.',
 
 # Patrol log
@@ -3387,7 +3416,7 @@ $8',
 'exif-compression-34712' => 'JPEG2000',
 
 'exif-copyrighted-true' => 'საავტორო უფლებებით დაცული',
-'exif-copyrighted-false' => 'á\83¡á\83\90á\83\96á\83\9dá\83\92á\83\90á\83\93á\83\9dá\83\94á\83\91á\83 á\83\98á\83\95á\83\98 á\83\93á\83\9dá\83\9bá\83\94á\83\9cი',
+'exif-copyrighted-false' => 'á\83¡á\83\90á\83\90á\83\95á\83¢á\83\9dá\83 á\83\9d á\83£á\83¤á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98 á\83\90á\83  á\83\90á\83 á\83\98á\83¡ á\83\90á\83 á\83©á\83\94á\83£á\83\9aი',
 
 'exif-photometricinterpretation-2' => 'RGB',
 'exif-photometricinterpretation-6' => 'YCbCr',
@@ -3678,7 +3707,7 @@ $3
 $5
 
 წერილი მოძველდება $4.',
-'confirmemail_invalidated' => 'ელფოსტის დადასტურება გაუქმდა',
+'confirmemail_invalidated' => 'ელ-ფოსტის დადასტურება გაუქმდა',
 'invalidateemail' => 'ელ-ფოსტის დადასტურების გაუქმება',
 
 # Scary transclusion
@@ -3831,6 +3860,7 @@ $5
 'version-license' => 'ლიცენზია',
 'version-poweredby-credits' => "ეს ვიკი მუშაობს '''[//www.mediawiki.org/ MediaWiki]'''-ს ძრავზე, copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'სხვები',
+'version-poweredby-translators' => 'translatewiki.net-ის მთარგმნელები',
 'version-credits-summary' => 'გვინდა მადლობა გადავუხადოთ შემდეგ მომხმარებლებს მათი წვლილისათვის [[Special:Version|მედიავიკის]] განვითარებაში.',
 'version-license-info' => 'MediaWiki არის თავისუფალი პროგრამული უზრუნველყოფა; შეგიძლიათ მისი გავრცელება ან/და მოდიფიცირება GNU General Public License ლიცენზიის პირობების შესაბამისად. როგორც გამოქვეყნებულია თავისუფალი პროგრამული უზრუნველყოფის ფონდის მიერ; ან ლიცენზიის მეორე ვერსიაში, ან (თქვენი აზრით) უფრო ახალში.
 
@@ -3899,15 +3929,18 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 #ხაზები გრძნობადები არიან რეგისტრისადმი.</pre>',
 
 # Special:Tags
-'tags' => 'á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\90á\83\97á\83\90 á\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\98 á\83\90á\83¦ნიშვნები',
-'tag-filter' => '[[Special:Tags|á\83\90á\83¦ნიშვნათა]] ფილტრი',
+'tags' => 'á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\90á\83\97á\83\90 á\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\98 á\83\9bá\83\9dნიშვნები',
+'tag-filter' => '[[Special:Tags|á\83\9bá\83\9dნიშვნათა]] ფილტრი',
 'tag-filter-submit' => 'გაფილტვრა',
-'tags-title' => 'á\83\90á\83¦ნიშვნები',
-'tags-intro' => 'á\83\90á\83\9b á\83\92á\83\95á\83\94á\83 á\83\93á\83\96á\83\94 á\83¬á\83\90á\83 á\83\9bá\83\9dá\83\93á\83\92á\83\94á\83\9cá\83\98á\83\9aá\83\98á\83\90 á\83\98á\83\9b á\83\90á\83¦á\83\9cá\83\98á\83¨á\83\95á\83\9cá\83\90á\83\97á\83\90 á\83¡á\83\98á\83\90, á\83 á\83\9dá\83\9bá\83\94á\83\9aá\83\98á\83\97á\83\90á\83ª á\83\9eá\83 á\83\9dá\83\92á\83 á\83\90á\83\9bá\83£á\83\9aá\83\98 á\83£á\83\96á\83 á\83£á\83\9cá\83\95á\83\94á\83\9aá\83§á\83\9dá\83¤á\83\90 á\83\90á\83¦á\83\9cá\83\98á\83¨á\83\9cá\83\90á\83\95á\83¡ á\83¨á\83\94á\83¡á\83¬á\83\9dá\83 á\83\94á\83\91á\83\94á\83\91á\83¡, á\83\93á\83\90 á\83\90á\83¡á\83\94á\83\95á\83\94 á\83\90á\83\9b á\83\90á\83¦ნიშვნათა მნიშვნელობებს.',
+'tags-title' => 'á\83\9bá\83\9dნიშვნები',
+'tags-intro' => 'á\83\90á\83\9b á\83\92á\83\95á\83\94á\83 á\83\93á\83\96á\83\94 á\83¬á\83\90á\83 á\83\9bá\83\9dá\83\93á\83\92á\83\94á\83\9cá\83\98á\83\9aá\83\98á\83\90 á\83\98á\83\9b á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\95á\83\9cá\83\90á\83\97á\83\90 á\83¡á\83\98á\83\90, á\83 á\83\9dá\83\9bá\83\9aá\83\98á\83\97á\83\90á\83ª á\83\9eá\83 á\83\9dá\83\92á\83 á\83\90á\83\9bá\83£á\83\9aá\83\98 á\83£á\83\96á\83 á\83£á\83\9cá\83\95á\83\94á\83\9aá\83§á\83\9dá\83¤á\83\90 á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\9cá\83\90á\83\95á\83¡ á\83¨á\83\94á\83¡á\83¬á\83\9dá\83 á\83\94á\83\91á\83\94á\83\91á\83¡ á\83\93á\83\90 á\83\90á\83¡á\83\94á\83\95á\83\94 á\83\90á\83\9b á\83\9bá\83\9dნიშვნათა მნიშვნელობებს.',
 'tags-tag' => 'ტეგის სახელი',
 'tags-display-header' => 'რედაქტირებების სიაში ცვლილებების წარმოდგენა',
 'tags-description-header' => 'მნიშვნელობის სრული აღწერა',
+'tags-active-header' => 'აქტიურია?',
 'tags-hitcount-header' => 'აღნიშნული ცვლილებები',
+'tags-active-yes' => 'დიახ',
+'tags-active-no' => 'არა',
 'tags-edit' => 'რედაქტირება',
 'tags-hitcount' => '$1 ცვლილება',
 
@@ -3928,6 +3961,7 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'dberr-problems' => 'ბოდიში! საიტზე დროებითი ტექნიკური პრობლემებია',
 'dberr-again' => 'ეცადეთ რამდენიმე წუთით დაცდა და ამ გვერდის გადატვირთვა',
 'dberr-info' => 'ვერ მოხერხდა ინფორმაციის $1 სერვერთან დაკავშირება',
+'dberr-info-hidden' => '(მონაცემთა ბაზის სერვერთან დაკავშირება შეუძლებელია)',
 'dberr-usegoogle' => 'ამ დროს კი  შეგიძლიათ Google-ით ძიება',
 'dberr-outofdate' => 'გაითვალისწინეთ, რომ თქვენი კონტენტის ინდექსები შეიძლება შეუსაბამო იყოს',
 'dberr-cachederror' => 'ეს არის მოთხოვნილი გვერდის კეშირებული ვერსია, და შესაძლება მოძველდა.',
@@ -4063,4 +4097,10 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 # Image rotation
 'rotate-comment' => 'სურათი მოტრიალებულია $1 {{PLURAL:$1|გრადუსით|გრადუსით}} საათის ისრის მიმართულებით',
 
+# Limit report
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|წამი}}',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|წამი}}',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|ბაიტი}}',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|ბაიტი}}',
+
 );
index 8cd646d..23528c1 100644 (file)
@@ -505,7 +505,7 @@ $messages = array(
 'newwindow' => '(жаңа терезеде ашу)',
 'cancel' => 'Болдырмау',
 'moredotdotdot' => 'Көбірек…',
-'morenotlisted' => 'Басқасы көрсетілмеген...',
+'morenotlisted' => 'Бұл тізім толық емес.',
 'mypage' => 'Жеке бет',
 'mytalk' => 'Талқылау',
 'anontalk' => 'IP талқылауы',
@@ -536,7 +536,7 @@ $messages = array(
 'vector-view-view' => 'Оқу',
 'vector-view-viewsource' => 'Қайнарын қарау',
 'actions' => 'Әрекеттер',
-'namespaces' => 'Ð\95Ñ\81Ñ\96м ÐºÐµÒ£Ñ\96Ñ\81Ñ\82Ñ\96гі',
+'namespaces' => 'Ð\95Ñ\81Ñ\96м ÐºÐµÒ£Ñ\96Ñ\81Ñ\82Ñ\96кÑ\82еÑ\80і',
 'variants' => 'Нұсқалар',
 
 'navigation-heading' => 'Бағыттау мәзірі',
@@ -551,22 +551,22 @@ $messages = array(
 'history' => 'Бет тарихы',
 'history_short' => 'Тарихы',
 'updatedmarker' => 'соңғы қаралғаннан кейін жаңартылған',
-'printableversion' => 'Басып шығару үшін',
+'printableversion' => 'Басып шығару нұсқасы',
 'permalink' => 'Тұрақты сілтеме',
 'print' => 'Басып шығару',
 'view' => 'Қарау',
 'edit' => 'Өңдеу',
 'create' => 'Бастау',
-'editthispage' => 'Бетті өңдеу',
+'editthispage' => 'Бұл бетті өңдеу',
 'create-this-page' => 'Осы бетті бастау',
 'delete' => 'Жою',
-'deletethispage' => 'Бетті жою',
+'deletethispage' => 'Бұл бетті жою',
 'undeletethispage' => 'Жойылған бетті қайтару',
 'undelete_short' => '{{PLURAL:$1|өңдеме|$1 өңдеме}} жоюын болдырмау',
 'viewdeleted_short' => '{{PLURAL:$1|жойылған өңдеуді|$1 жойылған өңдеулерді }} көру',
 'protect' => 'Қорғау',
 'protect_change' => 'өзгерту',
-'protectthispage' => 'Бетті қорғау',
+'protectthispage' => 'Бұл бетті қорғау',
 'unprotect' => 'Қорғалуын өзгерту',
 'unprotectthispage' => 'Бұл беттің қорғауын өзгерту',
 'newpage' => 'Жаңа бет',
@@ -593,7 +593,7 @@ $messages = array(
 'lastmodifiedat' => 'Бұл беттің соңғы өзгертілген кезі: $2, $1.',
 'viewcount' => 'Бұл бет {{PLURAL:$1|бір рет|$1 уақыт}} қатыналған.',
 'protectedpage' => 'Қорғалған бет',
-'jumpto' => 'Мында өту:',
+'jumpto' => 'Мұнда ауысу:',
 'jumptonavigation' => 'шарлау',
 'jumptosearch' => 'іздеу',
 'view-pool-error' => 'Кешіріңіз, қазір серверлер шектен тыс жүктелуде.
@@ -655,7 +655,7 @@ $1',
 'collapsible-expand' => 'Жазу',
 'thisisdeleted' => '$1 қарайсыз ба, немесе қалпына келтіресіз бе?',
 'viewdeleted' => '$1 қарайсыз ба?',
-'restorelink' => 'Жойылған $1 өңдемені',
+'restorelink' => '{{PLURAL:$1|жойылған өңдеме|$1 жойылған өңдемелер}}',
 'feedlinks' => 'Арна:',
 'feed-invalid' => 'Жарамсыз жазылымды арна түрі.',
 'feed-unavailable' => 'Синдикация таспалары қолжетімсіз',
@@ -692,6 +692,8 @@ $1',
 # General errors
 'error' => 'Қате',
 'databaseerror' => 'Дерекқор қатесі',
+'databaseerror-query' => 'Сұрау:$1',
+'databaseerror-error' => 'Қате:$1',
 'laggedslavemode' => "'''Ескерту:''' Бетте жуықтағы жаңартулар болмауы мүмкін.",
 'readonly' => 'Дерекқоры құлыпталған',
 'enterlockreason' => 'Құлыптау себебін, қай уақытқа дейін құлыпталғанын кірістіріп, енгізіңіз.',
@@ -704,7 +706,7 @@ $1',
 
 Егер бұл орынды болмаса, бағдарламалық жасақтамадағы қатеге тап болуыңыз мүмкін.
 Бұл туралы нақты URL жайына аңғартпа жасап, [[Special:ListUsers/sysop|әкімшіге]] баяндаңыз.',
-'missingarticle-rev' => '(түзету нұсқасы: $1)',
+'missingarticle-rev' => '(түзету нұсқасы#: $1)',
 'missingarticle-diff' => '(Айырым: $1, $2)',
 'readonly_lag' => 'Жетек дерекқор серверлер басқасымен қадамланғанда осы дерекқор өздіктік құлыпталынған',
 'internalerror' => 'Ішкі қате',
@@ -742,8 +744,8 @@ $1',
 'protectedpagetext' => 'Бұл бет өңдеу немесе басқа өзгерістер енгізілмес үшін қорғалған.',
 'viewsourcetext' => 'Бұл беттің қайнарын қарауыңызға және көшіріп алуыңызға болады:',
 'viewyourtext' => 'Осы бет арқылы "өзіңіз жасаған өңдеулердің" бастапқы мәтінін көруге және көшіруге мүмкіндігіңіз болады.',
-'protectedinterface' => 'Бұл бет бағдарламалық жасақтаманың тілдесу мәтінін жетістіреді, сондықтан қиянатты қақпайлау үшін өзгертуі құлыпталған
\91аÑ\80лÑ\8bÒ\9b Ñ\83икилеÑ\80 Ò¯Ñ\88Ñ\96н Ð°Ñ\83даÑ\80малаÑ\80дÑ\8b Ó©Ð·Ð³ÐµÑ\80Ñ\82Ñ\83 Ð½ÐµÐ¼ÐµÑ\81е Ò\9bоÑ\81Ñ\83 Ò¯Ñ\88Ñ\96н [//translatewiki.net/ translatewiki.net] Ð\9cедиаУики Ð¶ÐµÑ\80леÑ\81Ñ\82Ñ\96Ñ\80Ñ\83 Ð¶Ð¾Ð±Ð°Ñ\81Ñ\8bн Ð¿Ð°Ð¹Ð´Ð°Ð»Ð°Ð½Ñ\8bÒ£Ñ\8bз.',
+'protectedinterface' => 'Бұл MediaWiki-дің [[Уикипедия:Интерфейсті аудару|жүйе хабарламасы]], оны тек жоба [[Уикипедия:Әкімшілер|әкімшілер]] ғана өзгерте алады
\9aейбÑ\96Ñ\80 Ñ\85абаÑ\80ламалаÑ\80 [[translatewiki:{{FULLPAGENAME}}/qqq|Ò\9bұжаÑ\82Ñ\82амада]] [[mw:Manual:Interface/{{PAGENAME}}|баÑ\80]].',
 'editinginterface' => "'''Ескерту:''' Бағдарламалық жасақтаманың тілдесу мәтінін жетістіретін бетін өңдеп жатырсыз.
 Бұл беттің өзгертуі басқа қатысушыларға пайдаланушылық тілдесуі қалай көрінетіне әсер етеді.
 Барлық уикилер үшін аудармаларды өзгерту немесе қосу үшін [//translatewiki.net/ translatewiki.net] МедиаУики жерлестіру жобасын пайдаланыңыз.",
@@ -781,8 +783,8 @@ $2',
 [[Special:Preferences|{{SITENAME}} баптауларыңызды]] өзгертуді ұмытпаңыз.',
 'yourname' => 'Қатысушы аты:',
 'userlogin-yourname' => 'Қатысушы есіміңіз',
-'userlogin-yourname-ph' => 'Қатысушы есіміңізді еңгізіңіз',
-'createacct-another-username-ph' => 'Қатысушы есіміңізді еңгізіңіз',
+'userlogin-yourname-ph' => 'Қатысушы есіміңізді енгізіңіз',
+'createacct-another-username-ph' => 'Қатысушы есіміңізді енгізіңіз',
 'yourpassword' => 'Құпия сөз:',
 'userlogin-yourpassword' => 'Құпия сөз',
 'userlogin-yourpassword-ph' => 'Құпия сөздіңізді енгізіңіз',
@@ -806,7 +808,7 @@ $2',
 'notloggedin' => 'Кірмегенсіз',
 'userlogin-noaccount' => 'Тіркелгіңіз жоқ па?',
 'userlogin-joinproject' => '{{SITENAME}} жобасына тіркелу',
-'nologin' => "Тіркелгіңіз бар ма? '''$1'''.",
+'nologin' => 'Тіркелгіңіз бар ма? $1.',
 'nologinlink' => 'Тіркелгіңізді жасаңыз',
 'createaccount' => 'Жаңа тіркелгі',
 'gotaccount' => "Бұған дейін тіркеліп пе едіңіз? '''$1'''.",
@@ -829,7 +831,7 @@ $2',
 'createacct-captcha' => 'Құпиялық тексеруі',
 'createacct-imgcaptcha-ph' => 'Жоғарғыдағы көріп тұрған мәтінді енгізіңіз',
 'createacct-submit' => 'Тіркелгіңізді жасаңыз',
-'createacct-another-submit' => 'Бөлек жаңа тіркелгі жасау',
+'createacct-another-submit' => 'Басқа тіркелгі жасау',
 'createacct-benefit-heading' => '{{SITENAME}} сіз сияқты қызығатын адамдар арқылы жасалады.',
 'createacct-benefit-body1' => '{{PLURAL:$1|өңдеме|өңдеме}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|бет|бет}}',
@@ -854,7 +856,7 @@ $2',
 'nosuchuser' => '«$1» деген қатысушы тіркелмеген.
 Қатысушы аттары кіші әріптерден тұру керек.
 Емлеңізді тексеріңіз, немесе [[Special:UserLogin/signup|жаңа тіркелгі жасаңыз]].',
-'nosuchusershort' => 'Мында «$1» деп аталған қатысушы жоқ.
+'nosuchusershort' => 'Мұнда «$1» деп аталған қатысушы жоқ.
 Емлеңізді тексеріңіз.',
 'nouserspecified' => 'Қатысушы атын келтіруіңіз жөн.',
 'login-userblocked' => 'Бұл қатысушы бұғатталған. Жүйеге кiру рұқсат етiлмеген.',
@@ -891,7 +893,7 @@ $2',
 Дұрыс пішімделген е-пошта есімін енгізіңіз, немесе аумақты бос қалдырыңыз.',
 'cannotchangeemail' => 'Тіркелгінің е-поштасының мекен-жайы бұл уикиде өзгертілмейді.',
 'emaildisabled' => 'Бұл сайт е-поштаның хабарламасын жібере алмайды.',
-'accountcreated' => 'Ð\96аңа Ñ\82іркелгі жасалды',
+'accountcreated' => 'Тіркелгі жасалды',
 'accountcreatedtext' => '[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|талқылауы]]) үшін жаңа қатысушы тіркелгісі жасалды.',
 'createaccount-title' => '{{SITENAME}} үшін тіркелу',
 'createaccount-text' => 'Кейбіреу е-пошта мекенжайыңызды пайдаланып {{SITENAME}} жобасында ($4) «$2» атауымен, «$3» құпия сөзімен тіркелгі жасаған.
@@ -899,7 +901,7 @@ $2',
 
 Егер бұл тіркелгі қателікпен жасалса, осы хабарға елемеуіңіз мүмкін.',
 'usernamehasherror' => 'Қатысушы есіміне тор белгі нышаны енгізілмейді.',
-'login-throttled' => 'Сіз жүйеге кіру үшін тым көп талпыныс жасадыңыз. Өтінемін, қайта кірмес бұрын кішкене күте тұрыңыз.',
+'login-throttled' => 'Сіз жүйеге кіру үшін тым көп талпыныс жасадыңыз. Өтінемін, қайта кірмес бұрын $1 күте тұрыңыз.',
 'login-abort-generic' => 'Жүйеге кіру үшін сәтсіз талпыныс жасадыңыз.',
 'loginlanguagelabel' => 'Тіл: $1',
 'suspicious-userlogout' => 'Сіздің жүйеден шығу сұранымыңыз қабылданбады, өйткені, бұл жарамсыз браузер немесе кэштеуші проксидің сұранымына ұқсайды.',
@@ -917,7 +919,7 @@ $2',
 'newpassword' => 'Жаңа құпия сөзіңіз:',
 'retypenew' => 'Жаңа құпия сөзіңізді қайталаңыз:',
 'resetpass_submit' => 'Құпия сөзді қойыңыз да кіріңіз',
-'changepassword-success' => 'Құпия сөзіңіз сәтті өзгертілді! Енді кіріңіз…',
+'changepassword-success' => 'Құпия сөзіңіз сәтті өзгертілді!',
 'resetpass_forbidden' => 'Құпия сөз өзгертілмейді',
 'resetpass-no-info' => 'Бұл бетке тікелей ену үшін, жүйеге кіруіңіз керек.',
 'resetpass-submit-loggedin' => 'Құпия сөзді өзгерту',
@@ -1046,6 +1048,8 @@ IP-мекенжайыңыз бұл беттің түзету тарихында
 * Басқа беттерден [[Special:Search/{{PAGENAME}}|бұл бет атауын іздеу]],
 * <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Журналдардан бұл бетке қатысты сәйкес жазбаларды табу]</span>,
 * <span class=\"plainlinks\">'''[{{fullurl:{{FULLPAGENAME}}|action=edit}} Бұл бетті жаңадан бастау]'''</span>.",
+'noarticletext-nopermission' => 'Ағымда бұл бетте еш мәтін жоқ.
+Сіз [[Special:Search/{{PAGENAME}}|бұл бет атауын]] басқа беттерден іздей аласыз, немесе <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} журналдардан бұл бетке қатысты сәйкес жазбаларды таба аласыз]</span>. Ал бұл бетті жаңадан бастауға сізде рұқсат жоқ.',
 'userpage-userdoesnotexist' => '«<nowiki>$1</nowiki>» қатысушы тіркелгісі жазып алынбаған. Бұл бетті бастау/өңдеу талабыңызды тексеріп шығыңыз.',
 'userpage-userdoesnotexist-view' => '«$1» қатысушы есімі тіркелмеген.',
 'blocked-notice-logextract' => 'Бұл қатысушы қазіргі уақытта  бұғатталған.
@@ -1086,7 +1090,7 @@ IP-мекенжайыңыз бұл беттің түзету тарихында
 Жоғарғы кірістіру орнында беттің ағымдық мәтіні бар.
 Төменгі кірістіру орнында сіз өзгерткен мәтіні көрсетіледі.
 Өзгертуіңізді ағымдық мәтінге үстеуіңіз жөн.
-«Бетті сақта! батырмасын басқанда '''тек''' жоғарғы кірістіру орнындағы мәтін сақталады.",
+\"{{int:savearticle}}\" батырмасын басқанда '''тек''' жоғарғы кірістіру орнындағы мәтін сақталады.",
 'yourtext' => 'Мәтініңіз',
 'storedversion' => 'Сақталған нұсқасы',
 'nonunicodebrowser' => "'''ЕСКЕРТУ: Шолғышыңыз Unicode белгілеуіне үйлесімді емес, сондықтан латын емес әріптері бар беттерді өңдеу зіл болу мүмкін.
@@ -1193,10 +1197,10 @@ $3 келтірілген себебі: ''$2''",
 'last' => 'соң.',
 'page_first' => 'алғашқысына',
 'page_last' => 'соңғысына',
-'histlegend' => "</span><br /><span style=\"white-space:nowrap;\">Сыртқы құралдар: [http://vs.aka-online.de/cgi-bin/wppagehiststat.pl?lang=kk.wikipedia&page={{FULLPAGENAMEE}} Өңдеу статистикасы] '''·'''</span> <span style=\"white-space:nowrap;\">[http://wikipedia.ramselehof.de/wikiblame.php?lang=kk&article={{FULLPAGENAMEE}} Өзгеріс тарихын іздеу] '''·'''</span> <span style=\"white-space:nowrap;\">[//toolserver.org/~daniel/WikiSense/Contributors.php?wikilang=kk&wikifam=.wikipedia.org&grouped=on&page={{FULLPAGENAMEE}} Үлестер статистикасы] '''·'''</span> <span style=\"white-space:nowrap;\">[http://toolserver.org/~snottywong/usersearch.html?page={{FULLPAGENAMEE}} Қатысушы өңдемелері] '''·'''</span> <span style=\"white-space:nowrap;\">[//toolserver.org/~mzmcbride/cgi-bin/watcher.py?db=kkwiki_p&titles={{FULLPAGENAMEE}} Көрушілер саны] '''·'''</span> <span style=\"white-space:nowrap;\">[http://stats.grok.se/kk/latest/{{FULLPAGENAMEE}} Бетің қаралу статистикасы]</span>
+'histlegend' => "</span><br /><span style=\"white-space:nowrap;\">Сыртқы құралдар: [http://vs.aka-online.de/cgi-bin/wppagehiststat.pl?lang=kk.wikipedia&page={{FULLPAGENAMEE}} Өңдеу статистикасы] '''·'''</span> <span style=\"white-space:nowrap;\">[http://wikipedia.ramselehof.de/wikiblame.php?lang=kk&article={{FULLPAGENAMEE}} Өзгеріс тарихын іздеу] '''·'''</span> <span style=\"white-space:nowrap;\">[//toolserver.org/~daniel/WikiSense/Contributors.php?wikilang=kk&wikifam=.wikipedia.org&grouped=on&page={{FULLPAGENAMEE}} Үлестер статистикасы] '''·'''</span> <span style=\"white-space:nowrap;\">[http://toolserver.org/~snottywong/usersearch.html?page={{FULLPAGENAMEE}} Қатысушы өңдемелері] '''·'''</span> <span style=\"white-space:nowrap;\">[//toolserver.org/~mzmcbride/cgi-bin/watcher.py?db=kkwiki_p&titles={{FULLPAGENAMEE}} Көрушілер саны] '''·'''</span> <span style=\"white-space:nowrap;\">[http://stats.grok.se/kk/latest/{{FULLPAGENAMEE}} Бетің қаралу статистикасы] '''·'''</span> Тағы қараңыз: <span style=\"white-space:nowrap;\">[{{fullurl:{{FULLPAGENAMEE}}|action=info}} бет туралы мәліметтер]</span>
 ----
 Айырмасын бөлектеу: салыстырмақ нұсқаларының қосу көздерін белгілеп <Enter> пернесін басыңыз, немесе төмендегі батырманы нұқыңыз.<br />
-Шартты белгілер: <span style=\"white-space:nowrap;\">(ағым.) = ағымдық нұсқамен айырмасы, <span style=\"white-space:nowrap;\">(соң.) = алдыңғы нұсқамен айырмасы, </span> <span style=\"white-space:nowrap;\">&nbsp; '''ш''' = [[Уикипедия:Шағын өңдеме|шағын өңдеме]], → = [[Help:Бөлім#Бөлімін өңдеу|бөлімін өңдеу]], ← = [[Уикипедия:Өңдеменің түйіндемесі|автоматты өңдеу түйіндемесі]]</span></div>",
+Шартты белгілер: <span style=\"white-space:nowrap;\">(ағым.) = ағымдық нұсқамен айырмасы, <span style=\"white-space:nowrap;\">(соң.) = алдыңғы нұсқамен айырмасы, </span> <span style=\"white-space:nowrap;\">&nbsp; '''ш''' = [[Уикипедия:Шағын өңдеме|шағын өңдеме]], → = [[Help:Бөлім#Бөлімін өңдеу|бөлімін өңдеу]]</span></div>",
 'history-fieldset-title' => 'Тарихынан іздеу',
 'history-show-deleted' => 'Жойылғанын ғана көрсету',
 'histfirst' => 'Ең ескісіне',
@@ -1358,6 +1362,7 @@ $1",
 'searchall' => 'барлық',
 'showingresults' => "Төменде нөмір '''$2''' орнынан бастап барынша '''$1''' нәтиже көрсетіледі.",
 'showingresultsnum' => "Төменде нөмір '''$2''' орнынан бастап '''$3''' нәтиже көрсетіледі.",
+'showingresultsheader' => "«'''$4'''» үшін {{PLURAL:$5|тек '''$1''' нәтиже табылды|табылған '''$3''' нәтиженің '''$1—$2''' аралығы көрсетілген}}",
 'nonefound' => "'''Аңғартпа''': Әдепкіден тек кейбір есім аялардан ізделінеді. Барлық мағлұмат түрін (соның ішінде талқылау беттерді, үлгілерді т.б.) іздеу үшін сұранымыңызды ''барлық:'' деп бастаңыз, немесе қалаған есім аясын бастауыш есебінде қолданыңыз.",
 'search-nonefound' => 'Сұрауға сәйкес нәтижелер табылмады.',
 'powersearch' => 'Кеңейтілген іздеу',
@@ -1684,7 +1689,7 @@ $1",
 'rc_categories_any' => 'Кез келген',
 'rc-change-size-new' => 'Өңдеуден кейінгі көлемі: $1{{PLURAL:$1|байт|байт}}',
 'newsectionsummary' => '/* $1 */ жаңа бөлім',
-'rc-enhanced-expand' => 'Толық ақпаратты көрсету (JavaScript-ті керек етеді)',
+'rc-enhanced-expand' => 'Толық ақпаратты көрсету',
 'rc-enhanced-hide' => 'Толық ақпаратты жасыру',
 'rc-old-title' => 'Бастапқы «$1» сияқты жасалған',
 
@@ -2283,8 +2288,10 @@ $NEWPAGE
 'delete-confirm' => '«$1» дегенді жою',
 'delete-legend' => 'Жою',
 'historywarning' => "'''Ескету:'' Жоюы көзделген бетте бет тарихында шамамен $1 {{PLURAL:$1|түзетілуі|түзетілулері}} бар:",
-'confirmdeletetext' => 'Бетті бүкіл тарихымен бірге дерекқордан жойғалы жатырсыз.
-Бұл әрекетіңіз ниетпен жасалғанын, әрекет салдары есепке алынғанын және әрекетіңіз [[{{MediaWiki:Policy-url}}|the policy]]-іне лайықты болғанын тағы бір рет тексеріп шығуыңызды сұраймыз.',
+'confirmdeletetext' => '<div id="confirmdeletetext">
+Бетті бүкіл тарихымен бірге дерекқордан жойғалы жатырсыз.
+Бұл әрекетіңіз ниетпен жасалғанын, әрекет салдары есепке алынғанын және әрекетіңіз [[{{MediaWiki:Policy-url}}|ережелерге]] лайықты болғанын тағы бір рет тексеріп шығуыңызды сұраймыз. Сонымен бірге [[Special:Whatlinkshere/{{FULLPAGENAMEE}}|мұнда сілтенген беттерді]] тексеріңіз, мүмкін болса сілтемелерін дұрыстап шығыңыз.
+</div>',
 'actioncomplete' => 'Әрекет орындалды',
 'actionfailed' => 'Әрекет орындалмады',
 'deletedtext' => '"$1" жойылды.
@@ -2677,7 +2684,7 @@ $1 бұғаттауы үшін келтірілген себебі: «$2».',
 'movearticle' => 'Ағымдағы бет атауы:',
 'movenologin' => 'Сіз жүйеге кірмегенсіз',
 'movenologintext' => 'Бетті жылжыту үшін тіркелген болуыңыз және [[{{#special:UserLogin}}|кіруіңіз]] жөн.',
-'movenotallowed' => '{{SITENAME}} жобасында беттерді жылжыту руқсатыңыз жоқ.',
+'movenotallowed' => '{{SITENAME}} жобасында беттерді жылжытуға рұқсатыңыз жоқ.',
 'newtitle' => 'Жаңа бет атауы:',
 'move-watch' => 'Бұл бетті бақылау',
 'movepagebtn' => 'Бетті жылжыту',
@@ -2691,7 +2698,7 @@ $1 бұғаттауы үшін келтірілген себебі: «$2».',
 Бұны қолмен қосыңыз.'''",
 'movedto' => 'мынаған жылжытылды:',
 'movetalk' => 'Қатысты талқылау бетін де жылжыту',
-'move-subpages' => 'Ð\91аÑ\80лÑ\8bÒ\9b Ð±ÐµÑ\82Ñ\88елеÑ\80Ñ\96н Ð¶Ñ\8bлжÑ\8bÑ\82Ñ\83 ($1 Ð´ÐµÐ³ÐµÐ½Ð³Ðµ)',
+'move-subpages' => 'Ð\91аÑ\80лÑ\8bÒ\9b Ð±ÐµÑ\82Ñ\88елеÑ\80Ñ\96н Ð¶Ñ\8bлжÑ\8bÑ\82Ñ\83 ($1 Ð´ÐµÐ¹Ñ\96н)',
 'move-talk-subpages' => 'Талқылау бетінің барлық бетшелерін жылжыту ($1 дегенге)',
 'movepage-page-exists' => '$1 деген бет алдақашан бар және үстіне өздіктік жазылмайды.',
 'movepage-page-moved' => '$1 деген бет $2 дегенге жылжытылды.',
@@ -3399,7 +3406,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'Бұл файлды шеттік қондырма арқылы өңдеу',
-'edit-externally-help' => '(көбірек ақпарат үшін [//www.mediawiki.org/wiki/Manual:External_editors орнату нұсқауларын] қараңыз.',
+'edit-externally-help' => '(көбірек ақпарат үшін [//www.mediawiki.org/wiki/Manual:External_editors орнату нұсқауларын] қараңыз)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'барлық',
index 5f0e462..b962cdd 100644 (file)
@@ -285,7 +285,7 @@ $messages = array(
 'tog-previewontop' => 'បង្ហាញ​ការមើលមុន​ពីលើ​ប្រអប់​កែប្រែ',
 'tog-previewonfirst' => 'បង្ហាញ​ការមើលមុនសម្រាប់កំណែប្រែ​ដំបូងគេ',
 'tog-nocache' => 'មិនប្រើសតិភ្ជាប់​នៃ​ទំព័រ',
-'tog-enotifwatchlistpages' => 'ផ្ញើá\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\98á\9e\80á\9e\81á\9f\92á\9e\89á\9e»á\9f\86â\80\8bá\9e\80á\9e¶á\9e\9bá\9e\94á\9e¾â\80\8bá\9e\98á\9e¶á\9e\93á\9e\94á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\93á\9f\83á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aâ\80\8bá\9e\8eá\9e¶á\9e\98á\9e½á\9e\99á\9e\8aá\9f\82á\9e\9bá\9e\98á\9e¶á\9e\93á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\8fá\9e¶á\9e\98á\9e\8aá\9e¶á\9e\93á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\81á\9f\92á\9e\89á\9e»á\9f\86',
+'tog-enotifwatchlistpages' => 'ផ្ញើâ\80\8bá\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bâ\80\8bá\9e\98á\9e\80â\80\8bá\9e\81á\9f\92á\9e\89á\9e»á\9f\86â\80\8bâ\80\8bá\9e\80á\9e¶á\9e\9bâ\80\8bá\9e\94á\9e¾â\80\8bâ\80\8bá\9e\98á\9e¶á\9e\93â\80\8bá\9e\94á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\93á\9f\83â\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aâ\80\8bá\9e\8eá\9e¶â\80\8bá\9e\98á\9e½á\9e\99â\80\8bá\9e\8aá\9f\82á\9e\9bâ\80\8bá\9e\98á\9e¶á\9e\93â\80\8bá\9e\80á\9f\92á\9e\93á\9e»á\9e\84â\80\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¸â\80\8bá\9e\8fá\9e¶á\9e\98â\80\8bá\9e\8aá\9e¶á\9e\93â\80\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bâ\80\8bá\9e\81á\9f\92á\9e\89á\9e»á\9f\86',
 'tog-enotifusertalkpages' => 'ផ្ញើអ៊ីមែល​មកខ្ញុំ​កាលបើ​មានបន្លាស់ប្ដូរ​នៅ​ក្នុងទំព័រពិភាក្សា​របស់ខ្ញុំ',
 'tog-enotifminoredits' => 'ផ្ញើអ៊ីមែល​មកខ្ញុំពេលមានបន្លាស់ប្ដូរតិចតួច​លើទំព័រឬឯកសារផងដែរ​',
 'tog-enotifrevealaddr' => 'បង្ហាញ​អាសយដ្ឋានអ៊ីមែល​របស់ខ្ញុំ​ក្នុង​​អ៊ីមែល​ក្រើនរំលឹក​',
@@ -326,13 +326,13 @@ $messages = array(
 'thursday' => 'ថៃ្ងព្រហស្បតិ៍',
 'friday' => 'ថ្ងៃសុក្រ',
 'saturday' => 'ថ្ងៃសៅរ៍',
-'sun' => 'អាទិត្យ',
-'mon' => 'ច័ន្ទ',
-'tue' => 'អង្គារ',
-'wed' => 'ពុ',
-'thu' => 'ព្រហស្បតិ៍',
-'fri' => 'សុក្រ',
-'sat' => 'សៅរ៍',
+'sun' => 'អា',
+'mon' => 'ច',
+'tue' => 'អ',
+'wed' => 'ពុ',
+'thu' => 'ព្រ',
+'fri' => 'សុ',
+'sat' => 'ស',
 'january' => 'ខែមករា',
 'february' => 'ខែកុម្ភៈ',
 'march' => 'ខែមីនា',
@@ -345,18 +345,18 @@ $messages = array(
 'october' => 'ខែតុលា',
 'november' => 'ខែវិច្ឆិកា',
 'december' => 'ខែធ្នូ',
-'january-gen' => 'á\9e\81á\9f\82á\9e\98á\9e\80á\9e\9aá\9e¶',
-'february-gen' => 'á\9e\81á\9f\82á\9e\80á\9e»á\9e\98á\9f\92á\9e\97á\9f\88',
-'march-gen' => 'á\9e\81á\9f\82á\9e\98á\9e¸á\9e\93á\9e¶',
-'april-gen' => 'á\9e\81á\9f\82á\9e\98á\9f\81á\9e\9fá\9e¶',
-'may-gen' => 'á\9e\81á\9f\82á\9e§á\9e\9fá\9e\97á\9e¶',
-'june-gen' => 'á\9e\81á\9f\82á\9e\98á\9e·á\9e\90á\9e»á\9e\93á\9e¶',
-'july-gen' => 'á\9e\81á\9f\82á\9e\80á\9e\80á\9f\92á\9e\80á\9e\8aá\9e¶',
-'august-gen' => 'á\9e\81á\9f\82á\9e\9fá\9e¸á\9e á\9e¶',
-'september-gen' => 'á\9e\81á\9f\82á\9e\80á\9e\89á\9f\92á\9e\89á\9e¶',
-'october-gen' => 'á\9e\81á\9f\82á\9e\8fá\9e»á\9e\9bá\9e¶',
-'november-gen' => 'á\9e\81á\9f\82á\9e\9cá\9e·á\9e\85á\9f\92á\9e\86á\9e·á\9e\80á\9e¶',
-'december-gen' => 'á\9e\81á\9f\82á\9e\92á\9f\92á\9e\93á\9e¼',
+'january-gen' => 'មករា',
+'february-gen' => 'កុម្ភៈ',
+'march-gen' => 'មីនា',
+'april-gen' => 'មេសា',
+'may-gen' => 'ឧសភា',
+'june-gen' => 'មិថុនា',
+'july-gen' => 'កក្កដា',
+'august-gen' => 'សីហា',
+'september-gen' => 'កញ្ញា',
+'october-gen' => 'តុលា',
+'november-gen' => 'វិច្ឆិកា',
+'december-gen' => 'ធ្នូ',
 'jan' => 'មករា',
 'feb' => 'កុម្ភៈ',
 'mar' => 'មីនា',
@@ -384,7 +384,7 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|ចំណាត់ថ្នាក់ក្រុម|ចំណាត់ថ្នាក់ក្រុម}}',
-'category_header' => 'ទំព័រដែលមាន​ក្នុងចំណាត់ថ្នាក់ក្រុម"$1"',
+'category_header' => 'ទំព័រ​ក្នុង​ចំណាត់​ថ្នាក់​ក្រុម "$1"',
 'subcategories' => 'កូនចំណាត់ថ្នាក់ក្រុម',
 'category-media-header' => 'ឯកសារមេឌា​ដែលមានក្នុង​ចំណាត់ថ្នាក់ក្រុម "$1"',
 'category-empty' => "''ចំណាត់ថ្នាក់ក្រុមនេះ​មិនមានផ្ទុកអត្ថបទឬ​ឯកសារមេឌា​ណាមួយទេ។''",
@@ -1991,12 +1991,12 @@ $1',
 'sharedupload' => 'ឯកសារ​នេះ​​បាន​មក​ពី $1 និង​អាច​ត្រូវ​បាន​ប្រើប្រាស់​នៅ​គម្រោង​ដទៃ​ទៀត។',
 'sharedupload-desc-there' => 'ឯកសារ​នេះ​មក​ពី ​$1 និង​អាច​ត្រូវ​បាន​ប្រើប្រាស់​ដោយ​គម្រោង​ផ្សេង​ៗ​ដទៃ​ទៀត​។
 សូម​មើល​[ទំព័របរិយាយ​ឯកសារ​ $2] សម្រាប់​ព័ត៌មាន​បន្ថែម​។',
-'sharedupload-desc-here' => 'ឯកសារនេះមានប្រភពមកពី $1  និងអាចត្រូវបានប្រើដោយគម្រោងដ៏ទៃទៀត។
-ការពណ៌នានៅលើ[$2 ទំព័រពណ៌នា]អំពីវា មានបង្ហាញខាងក្រោមនេះ។',
-'sharedupload-desc-edit' => 'ឯកសារនេះមានប្រភពមកពី $1  និងអាចត្រូវបានប្រើដោយគម្រោងដ៏ទៃទៀត។
-ប្រហែលជាអ្នកចង់កែប្រែការពណ៌នានៅលើ[$2 ទំព័រពណ៌នា]អំពីវានៅទីនោះ។',
-'sharedupload-desc-create' => 'ឯកសារនេះមានប្រភពមកពី $1  និងអាចត្រូវបានប្រើដោយគម្រោងដ៏ទៃទៀត។
-ប្រហែលជាអ្នកកែប្រែការពណ៌នានៅលើ[$2 ទំព័រពណ៌នា]អំពីវានៅទីនោះ។',
+'sharedupload-desc-here' => 'ឯកសារ​នេះ​មាន​ប្រភព​មក​ពី $1  និង​អាច​ត្រូវ​បាន​ប្រើ​ដោយ​គម្រោង​ដទៃ​ទៀត។
+ការ​ពណ៌នា​នៅ​លើ[$2 ទំព័រពណ៌នា]អំពី​វា មាន​បង្ហាញ​ខាង​ក្រោម​នេះ។',
+'sharedupload-desc-edit' => 'ឯកសារ​នេះ​មាន​ប្រភព​មក​ពី $1  និង​អាច​ត្រូវ​បាន​ប្រើ​ដោយ​គម្រោង​ដទៃ​ទៀត។
+ប្រហែល​ជា​អ្នក​ចង់​កែប្រែ​ការ​ពណ៌នា​នៅ​លើ[$2 ទំព័រពណ៌នា]អំពី​វា​នៅ​ទី​នោះ។',
+'sharedupload-desc-create' => 'ឯកសារ​នេះ​មាន​ប្រភព​មក​ពី $1  និង​អាច​ត្រូវ​បាន​ប្រើ​ដោយ​គម្រោង​ដទៃ​ទៀត។
+ប្រហែល​ជា​អ្នក​ចង់​កែប្រែ​ការ​ពណ៌នា​នៅ​លើ[$2 ទំព័រពណ៌នា]អំពី​វា​នៅ​ទី​នោះ។',
 'filepage-nofile' => 'គ្មានឯកសារ​ដែលមានឈ្មោះនេះទេ។',
 'filepage-nofile-link' => 'គ្មានរូបភាពដែលមានឈ្មោះនេះទេ។ ប៉ុន្តែអ្នកអាច[$1 ផ្ទុក​វា​ឡើង​] ។',
 'uploadnewversion-linktext' => 'ផ្ទុកឡើងមួយកំណែថ្មីនៃឯកសារនេះ',
index d6aaa75..d3c7270 100644 (file)
@@ -19,6 +19,7 @@
  * @author Gjue
  * @author Ha98574
  * @author Hoo
+ * @author Hym411
  * @author IRTC1015
  * @author ITurtle
  * @author Idh0854
@@ -598,7 +599,7 @@ $1',
 # 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).
 'aboutsite' => '{{SITENAME}} 소개',
 'aboutpage' => 'Project:소개',
-'copyright' => '내용은 $1 라이선스에 따라 사용할 수 있습니다.',
+'copyright' => '내용은 별도로 명시하지 않을 경우 $1에 따라 사용할 수 있습니다.',
 'copyrightpage' => '{{ns:project}}:저작권',
 'currentevents' => '요즘 화제',
 'currentevents-url' => 'Project:요즘 화제',
@@ -611,8 +612,8 @@ $1',
 'policy-url' => 'Project:정책',
 'portal' => '사용자 모임',
 'portal-url' => 'Project:사용자 모임',
-'privacy' => '개인정보 정책',
-'privacypage' => 'Project:개인정보 정책',
+'privacy' => '개인 정보 정책',
+'privacypage' => 'Project:개인 정보 정책',
 
 'badaccess' => '권한 오류',
 'badaccess-group0' => '요청한 동작을 실행할 권한이 없습니다.',
@@ -1017,7 +1018,7 @@ $2
 # Edit pages
 'summary' => '요약:',
 'subject' => '주제/제목:',
-'minoredit' => 'ì\9d´ í\8e¸ì§\91ì\9d\80 ì\82¬ì\86\8cí\95\9c í\8e¸ì§\91ì\9e\85ë\8b\88ë\8b¤',
+'minoredit' => 'ì\82¬ì\86\8cí\95\9c í\8e¸ì§\91',
 'watchthis' => '이 문서 주시하기',
 'savearticle' => '저장',
 'preview' => '미리 보기',
@@ -1418,7 +1419,7 @@ $1",
 'mergelogpagetext' => '다음은 한 문서의 역사를 다른 문서의 역사와 합친 최근 기록입니다.',
 
 # Diffs
-'history-title' => '"$1"ì\9d\98 í\8c\90 ë\82´ì\97­',
+'history-title' => '"$1"ì\9d\98 í\8e¸ì§\91 ì\97­ì\82¬',
 'difference-title' => '"$1"의 두 판 사이의 차이',
 'difference-title-multipage' => '"$1" 문서와 "$2" 문서 사이의 차이',
 'difference-multipage' => '(문서 사이의 차이)',
@@ -1777,7 +1778,7 @@ HTML 태그를 확인하세요.',
 'action-block' => '이 사용자를 편집하지 못하도록 차단',
 'action-protect' => '이 문서의 보호 설정을 바꾸기',
 'action-rollback' => '특정 문서를 마지막으로 편집한 사용자의 모든 편집을 간편하게 되돌리기',
-'action-import' => '다른 위키에서 이 문서를 가져오기',
+'action-import' => '다른 위키에서 문서 가져오기',
 'action-importupload' => '파일 올리기를 통해 문서를 가져올',
 'action-patrol' => '다른 사용자의 편집을 검토된 것으로 표시하기',
 'action-autopatrol' => '자신의 편집을 검토된 것으로 표시할',
@@ -1802,7 +1803,7 @@ HTML 태그를 확인하세요.',
 'recentchanges-noresult' => '지정한 조건과 일치하는 주어진 기간 동안 바뀜이 없습니다.',
 'recentchanges-feed-description' => '위키의 최근 바뀜이 나와 있습니다.',
 'recentchanges-label-newpage' => '새로운 문서',
-'recentchanges-label-minor' => 'ì\9d´ í\8e¸ì§\91ì\9d\80 ì\82¬ì\86\8cí\95\9c í\8e¸ì§\91ì\9e\85ë\8b\88ë\8b¤',
+'recentchanges-label-minor' => 'ì\82¬ì\86\8cí\95\9c í\8e¸ì§\91',
 'recentchanges-label-bot' => '봇의 편집',
 'recentchanges-label-unpatrolled' => '아직 검토하지 않은 편집',
 'rcnote' => "다음은 $4 $5 까지의 {{PLURAL:$2|'''$2'''일}}동안 {{PLURAL:$1|바뀐 문서 '''$1'''개입니다}}.",
@@ -2329,6 +2330,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'listusers' => '사용자 목록',
 'listusers-editsonly' => '기여가 있는 사용자만 보기',
 'listusers-creationsort' => '계정을 만든 날짜 순으로 정렬',
+'listusers-desc' => '내림차순으로 정렬',
 'usereditcount' => '{{PLURAL:$1|편집}} $1회',
 'usercreated' => '$1 $2에 계정 {{GENDER:$3|만들어짐}}',
 'newpages' => '새 문서 목록',
@@ -2353,7 +2355,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'booksources-search-legend' => '책 찾기',
 'booksources-isbn' => 'ISBN:',
 'booksources-go' => '찾기',
-'booksources-text' => '아래의 목록은 새 책이나 중고 책을 판매하는 바깥 사이트로, 원하는 책의 정보를 얻을 수 있습니다:',
+'booksources-text' => '아래의 목록은 새 책이나 중고 책을 판매하는 바깥 사이트로, 원하는 책의 정보를 얻을 수 있습니다.',
 'booksources-invalid-isbn' => '입력한 ISBN이 잘못된 것으로 보입니다. 원본과 대조해 보세요.',
 
 # Special:Log
@@ -2618,7 +2620,7 @@ $UNWATCHURL
 마지막으로 이 문서를 편집한 사용자는 [[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]]의 마지막 편집으로 되돌림',
+'revertpage-nouser' => '숨긴 사용자의 편집을 {{GENDER:$1|[[User:$1|$1]]}}의 마지막 판으로 되돌림',
 'rollback-success' => '$1의 편집을 $2의 마지막 버전으로 되돌렸습니다.',
 
 # Edit tokens
@@ -2763,7 +2765,7 @@ $1',
 'contributions' => '{{GENDER:$1|사용자}} 기여',
 'contributions-title' => '$1 사용자의 기여 목록',
 'mycontris' => '기여 목록',
-'contribsub2' => '$1($2)의 기여',
+'contribsub2' => '{{GENDER:$3|$1}}($2)의 기여',
 'nocontribs' => '지정한 조건과 일치하는 바뀜을 찾을 수 없습니다.',
 'uctop' => '(최신)',
 'month' => '월:',
@@ -3249,6 +3251,7 @@ $2',
 'tooltip-undo' => '"편집 취소" 기능을 사용하면 이 편집이 되돌려지고 차이 보기 기능이 미리 보기 형식으로 나타납니다. 편집 요약에 이 편집을 왜 되돌리는지에 대한 이유를 쓸 수 있습니다.',
 'tooltip-preferences-save' => '환경 설정 저장하기',
 'tooltip-summary' => '짧은 요약을 적어주세요',
+'tooltip-iwiki' => '$2 - $1',
 
 # Stylesheets
 'common.css' => '/* 이 CSS 설정은 모든 스킨에 동일하게 적용됩니다 */',
@@ -3423,20 +3426,20 @@ $1',
 'sp-newimages-showfrom' => '$1 $2부터 올라온 파일 목록 보기',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
-'seconds' => '{{PLURAL:$1|$1초}}',
-'minutes' => '{{PLURAL:$1|$1분}}',
-'hours' => '{{PLURAL:$1|$1시간}}',
-'days' => '{{PLURAL:$1|$1일}}',
+'seconds' => '$1초',
+'minutes' => '$1분',
+'hours' => '$1시간',
+'days' => '$1일',
 'weeks' => '{{PLURAL:$1|$1주}}',
-'months' => '{{PLURAL:$1|$1월}}',
-'years' => '{{PLURAL:$1|$1년}}',
+'months' => '$1달',
+'years' => '$1년',
 'ago' => '$1 전',
 'just-now' => '방금',
 
 # Human-readable timestamps
-'hours-ago' => '$1{{PLURAL:$1|시간}} 전',
-'minutes-ago' => '$1{{PLURAL:$1|분}} 전',
-'seconds-ago' => '$1{{PLURAL:$1|초}} 전',
+'hours-ago' => '$1시간 전',
+'minutes-ago' => '$1 전',
+'seconds-ago' => '$1 전',
 'monday-at' => '월요일 $1',
 'tuesday-at' => '화요일 $1',
 'wednesday-at' => '수요일 $1',
@@ -4141,7 +4144,7 @@ $5
 #모든 정규 표현식은 이 줄 위에 넣어 주십시오. 그리고 이 줄은 그대로 두십시오.</pre>',
 
 # Special:Tags
-'tags' => 'ì\98¬ë°\94른 편집 태그',
+'tags' => 'ì\9c í\9a¨í\95\9c 편집 태그',
 'tag-filter' => '[[Special:Tags|태그]] 필터:',
 'tag-filter-submit' => '필터',
 'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|태그}}]]: $2)',
@@ -4150,7 +4153,10 @@ $5
 'tags-tag' => '태그 이름',
 'tags-display-header' => '바뀜 목록의 모양',
 'tags-description-header' => '태그에 대한 설명',
+'tags-active-header' => '활성하겠습니까?',
 'tags-hitcount-header' => '태그된 바뀜',
+'tags-active-yes' => '예',
+'tags-active-no' => '아니오',
 'tags-edit' => '편집',
 'tags-hitcount' => '$1개 {{PLURAL:$1|바뀜}}',
 
@@ -4168,8 +4174,7 @@ $5
 
 # Database error messages
 'dberr-header' => '이 위키에 문제가 있습니다',
-'dberr-problems' => '죄송합니다!
-이 사이트는 기술적인 문제가 있습니다.',
+'dberr-problems' => '죄송합니다! 이 사이트에 기술적인 문제가 발생하고 있습니다.',
 'dberr-again' => '잠시 기다리고 나서 다시 불러오세요.',
 'dberr-info' => '(데이터베이스 서버에 연결할 수 없습니다: $1)',
 'dberr-info-hidden' => '(데이터베이스 서버에 연결할 수 없습니다)',
@@ -4317,9 +4322,9 @@ $5
 'limitreport-ppvisitednodes' => '전처리기가 방문한 노드 수',
 'limitreport-ppgeneratednodes' => '전처리기가 생성한 노드 수',
 'limitreport-postexpandincludesize' => '전개한 뒤 포함 크기',
-'limitreport-postexpandincludesize-value' => '$1/$2 바이트',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|바이트}}',
 'limitreport-templateargumentsize' => '틀 인수 크기',
-'limitreport-templateargumentsize-value' => '$1/$2 바이트',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|바이트}}',
 'limitreport-expansiondepth' => '최대 전개 깊이',
 'limitreport-expensivefunctioncount' => '부하 높은 파서 함수 수',
 
index 2ae91df..171fd70 100644 (file)
@@ -357,7 +357,7 @@ $1',
 # 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).
 'aboutsite' => '{{SITENAME}} сайтны юсюнден',
 'aboutpage' => 'Project:Суратлау',
-'copyright' => 'Информация мунга кёре хайырланады: $1',
+'copyright' => 'Ичиндегиси,  $1 лицензиягъа кёре бериледи (башха белгиленмеген эсе).',
 'copyrightpage' => '{{ns:project}}:Авторлукъ хакъла',
 'currentevents' => 'Бусагъатда бола тургъанла',
 'currentevents-url' => 'Project:Бусагъатда бола тургъанла',
index 6a63e8b..99fa094 100644 (file)
@@ -1523,8 +1523,7 @@ Hwi a yll [[Special:EditWatchlist|devnydhya an janjyel usadow]] ynwedh.',
 
 # Database error messages
 'dberr-header' => "An wiki-ma a'n jeves kudyn",
-'dberr-problems' => "Drog yw genen!
-An wiasva-ma a's teves kaletter teknogel.",
+'dberr-problems' => "Drog yw genen! An wiasva-ma a's teves kaletter teknogel.",
 'dberr-again' => 'Assayewgh gortos pols ha daskarga.',
 'dberr-info' => '(Ny yllir kestava orth servyer an database: $1)',
 'dberr-usegoogle' => 'Hwi a yll assaya hwilas dre Google.',
index 6120440..45e12ea 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Kirghiz (Кыргызча)
+/** Kyrgyz (Кыргызча)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index 97832c6..e850a2e 100644 (file)
@@ -169,7 +169,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Redactiones censae inter nuper mutatas celandae',
 'tog-newpageshidepatrolled' => 'Paginae censae inter nouissime creatas celandae',
 'tog-extendwatchlist' => 'Indicem paginarum obseruandarum cunctas mutatas praeter nouissimas includere decet',
-'tog-usenewrc' => 'Indice nuper mutatarum excelsa uti (JavaScript necesse est)',
+'tog-usenewrc' => 'Indice nuper mutatarum excelsa uti',
 'tog-numberheadings' => 'Subtituli numeris adornandi',
 'tog-showtoolbar' => 'Affigere trabem redigentem',
 'tog-editondblclick' => 'Percussus duplex redactionem hortetur',
@@ -385,11 +385,12 @@ $messages = array(
 'jumpto' => 'Salire ad:',
 'jumptonavigation' => 'navigationem',
 'jumptosearch' => 'quaerere',
+'pool-errorunknown' => 'Error ignotus',
 
 # 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).
 'aboutsite' => 'De {{grammar:ablative|{{SITENAME}}}}',
 'aboutpage' => 'Project:De {{GRAMMAR:ablative|{{SITENAME}}}}',
-'copyright' => 'Res ad manum sub $1.',
+'copyright' => 'Res ad manum sub $1 nisi aliter denuntiatum est.',
 'copyrightpage' => '{{ns:project}}:Verba privata',
 'currentevents' => 'Novissima',
 'currentevents-url' => 'Project:Novissima',
@@ -475,6 +476,7 @@ Pro indice paginarum specialum validarum, vide [[Special:SpecialPages|{{int:spec
 'internalerror' => 'Erratum internum',
 'internalerror_info' => 'Erratum internum: $1',
 'filecopyerror' => 'Non potuit fasciculus "$1" ad "$2" transcribi.',
+'filerenameerror' => 'Transnominare "$1" in "$2" non contigit.',
 'filedeleteerror' => 'Non potuit deleri fasciculus "$1".',
 'directorycreateerror' => 'Non potuit directorium "$1" creari.',
 'filenotfound' => 'Non potuit fasciculus "$1" inveniri.',
@@ -482,6 +484,7 @@ Pro indice paginarum specialum validarum, vide [[Special:SpecialPages|{{int:spec
 'badarticleerror' => 'Haec actio non perfici potest in hac pagina.',
 'cannotdelete' => 'Pagina vel fasciculus "$1" deleri non potuit.
 Fortasse usor alius iam deleverat.',
+'cannotdelete-title' => 'Paginam "$1" delere non contigit',
 'badtitle' => 'Titulus malus',
 'badtitletext' => 'Nomen paginae quaestae fuit invalidum, vacuum, aut praeverbium interlingualem vel intervicialem habuit. Fortasse insunt una aut plus litterarum quae in titulis non possunt inscribier.',
 'wrong_wfQuery_params' => 'Parametri incorrectae pro wfQuery()<br />
@@ -547,6 +550,7 @@ Noli oblivisci [[Special:Preferences|praeferentias]] tuas apud {{grammar:accusat
 'createacct-email-ph' => 'Inscriptionem electronicam tuam inscribe',
 'createacct-another-email-ph' => 'Inscriptionem electronicam inscribe',
 'createaccountmail' => 'Use a temporary random password and send it to the email address specified below',
+'createacct-realname' => 'Nomen rectum (non necesse)',
 'createaccountreason' => 'Causa:',
 'createacct-reason' => 'Causa',
 'createacct-reason-ph' => 'Cur aliam rationem creas',
@@ -743,6 +747,7 @@ Nobis etiam spondes te esse ipsum horum verborum scriptorem primum, aut ex opere
 'template-semiprotected' => '(semi-protecta)',
 'hiddencategories' => 'Haec pagina ad {{PLURAL:$1|unam categoriam celatam|$1 categorias celatas}} pertinet:',
 'nocreate-loggedin' => 'Tibi non licet paginas novas creare.',
+'sectioneditnotsupported-title' => 'Recensio partis non praebetur',
 'permissionserrors' => 'Error permissionis',
 'permissionserrorstext-withaction' => 'Tibi non licet $2, ex {{PLURAL:$1|ratione|rationibus}}:',
 'recreate-moveddeleted-warn' => "'''Cave: paginam quae antea iam deleta est creas.'''
@@ -760,6 +765,9 @@ Haec pagina deleta esse videtur.',
 'edit-already-exists' => 'Non potui paginam novam creare
 quia haec pagina iam est.',
 
+# Content models
+'content-model-wikitext' => 'vicitextum',
+
 # Parser/template warnings
 'parser-template-loop-warning' => 'Ansa formulae detecta: [[$1]]',
 
@@ -800,6 +808,7 @@ Titulus: '''({{int:cur}})''' = dissimilis ab emendatione novissima,
 
 # Revision feed
 'history-feed-title' => 'Historia',
+'history-feed-description' => 'Historia emendationum huius paginae',
 'history-feed-item-nocomment' => '$1 ad $2',
 
 # Revision deletion
@@ -827,6 +836,7 @@ Titulus: '''({{int:cur}})''' = dissimilis ab emendatione novissima,
 'revdel-restore-visible' => 'Recensiones visibiles',
 'pagehist' => 'Historia paginae',
 'deletedhist' => 'Historia deleta',
+'revdelete-otherreason' => 'Causa alia vel explicatio:',
 'revdelete-reasonotherlist' => 'Causa alia',
 'revdelete-edit-reasonlist' => 'Causas deletionum recensere',
 'revdelete-offender' => 'Auctor emendationis:',
@@ -857,6 +867,7 @@ Titulus: '''({{int:cur}})''' = dissimilis ab emendatione novissima,
 'compareselectedversions' => 'Conferre emendationes selectas',
 'showhideselectedversions' => 'Monstrare/celare emendationes selectas',
 'editundo' => 'abrogare',
+'diff-empty' => '(Nulla dissimilitudo)',
 'diff-multi' => '(Inter has {{PLURAL:$1|una emendatio|$1 emendationes}} ab {{PLURAL:$2|uno usore|$2 usoribus}} {{PLURAL:$1|facta|factae}} non {{PLURAL:$1|videtur|videntur}})',
 
 # Search results
@@ -915,6 +926,7 @@ Conare praefixare tua inquisitionem cum ''all:'' ut quaeras contenta omnia (pagi
 'powersearch-togglenone' => 'Nullum',
 'search-external' => 'Inquisitio externalis',
 'searchdisabled' => 'Per {{grammar:accusative|{{SITENAME}}}} ad tempus non potes quaerere. Interea per [http://www.google.com Googlem] quaeras. Nota indices {{grammar:genitive|{{SITENAME}}}} contentorum apud Googlem fortasse antiquiores esse.',
+'search-error' => 'Error in quaerendo: $1',
 
 # Preferences page
 'preferences' => 'Praeferentiae',
@@ -926,7 +938,9 @@ Conare praefixare tua inquisitionem cum ''all:'' ut quaeras contenta omnia (pagi
 'prefs-skin' => 'Aspectum',
 'skin-preview' => 'Praevisum',
 'datedefault' => 'Nullum praeferentiae',
+'prefs-beta' => 'Facultates experimentales',
 'prefs-datetime' => 'Dies et tempus',
+'prefs-user-pages' => 'Paginae usoris',
 'prefs-personal' => 'Minutiae rationis',
 'prefs-rc' => 'Nuper mutata',
 'prefs-watchlist' => 'Paginae custoditae',
@@ -987,7 +1001,7 @@ Conare praefixare tua inquisitionem cum ''all:'' ut quaeras contenta omnia (pagi
 {{PLURAL:$1|Una littera est|$1 litterae sunt}} longitudo maxima.',
 'yourgender' => 'Sexus:',
 'gender-unknown' => 'Indefinitus',
-'gender-male' => 'Mas',
+'gender-male' => 'Masculinum',
 'gender-female' => 'Femina',
 'email' => 'Litterae electronicae',
 'prefs-help-realname' => 'Nomen verum non necesse est.
@@ -998,6 +1012,11 @@ Si vis id dare, opera tua tibi ascribentur.',
 'prefs-info' => 'Informatio basica',
 'prefs-i18n' => 'Internationalizatio',
 'prefs-signature' => 'Subscriptio',
+'prefs-preview' => 'Praevisum',
+'prefs-advancedwatchlist' => 'Praeferentiae monstrare',
+'prefs-displayrc' => 'Praeferentiae vultus',
+'prefs-displaysearchoptions' => 'Praeferentiae vultus',
+'prefs-displaywatchlist' => 'Praeferentiae vultus',
 'prefs-diffs' => 'Differentiae',
 
 # User rights
@@ -1106,16 +1125,19 @@ Si vis id dare, opera tua tibi ascribentur.',
 'action-suppressionlog' => 'haec acta privata inspicere',
 'action-block' => 'hunc usorem obstruere ne recensere potest',
 'action-protect' => 'protectionem huius paginae mutare',
-'action-import' => 'paginam ex vico alio importare',
-'action-importupload' => 'paginam ex fasciculo imponendo importare',
+'action-import' => 'paginas ex vico alio importare',
+'action-importupload' => 'paginas ex fasciculo imponendo importare',
 'action-unwatchedpages' => 'indicem paginarum non custoditarum inspicere',
 'action-mergehistory' => 'historiam huius paginae confundere',
 'action-userrights' => 'omnes potestates usorum recensere',
 'action-userrights-interwiki' => 'potestates usorum aliis in vicis recensere',
 'action-siteadmin' => 'basem datorum obstruere vel deobstruere',
+'action-editmywatchlist' => 'Recensere paginas custoditas',
+'action-viewmywatchlist' => 'Spectare paginas custoditas',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|mutatio|mutationes}}',
+'enhancedrc-history' => 'Historia',
 'recentchanges' => 'Nuper mutata',
 'recentchanges-legend' => 'Indicis paginarum nuper mutatarum praeferentiae',
 'recentchanges-summary' => 'Inspice mutationes recentes huic vici in hac pagina.',
@@ -1143,7 +1165,7 @@ Si vis id dare, opera tua tibi ascribentur.',
 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|usor custodiens|usores custodientes}}]',
 'rc_categories_any' => 'Ulla',
 'newsectionsummary' => '/* $1 */ nova pars',
-'rc-enhanced-expand' => 'Minima monstrare (JavaScript utendum)',
+'rc-enhanced-expand' => 'Minima monstrare',
 'rc-enhanced-hide' => 'Minima celare',
 
 # Recent changes linked
@@ -1301,6 +1323,9 @@ Fortasse [$2 paginam descriptionis fasciculi] ibi sitam recensere vis.',
 'randompage' => 'Pagina fortuita',
 'randompage-nopages' => 'Non est ulla pagina {{PLURAL:$2|hoc in spatio nominale|in his spatiis nominalibus}}: $1.',
 
+# Random page in category
+'randomincategory-selectcategory-submit' => 'Pergere',
+
 # Random redirect
 'randomredirect' => 'Redirectio fortuita',
 'randomredirect-nopages' => 'Non est ulla redirectio in spatio nominali "$1".',
@@ -1325,6 +1350,8 @@ Fortasse [$2 paginam descriptionis fasciculi] ibi sitam recensere vis.',
 'statistics-users-active-desc' => 'Usores qui {{PLURAL:$1|proxima die|proximis $1 diebus}} actionem perfecerunt',
 'statistics-mostpopular' => 'Paginae plurimum visae',
 
+'pageswithprop-submit' => 'Pergere',
+
 'doubleredirects' => 'Redirectiones duplices',
 'double-redirect-fixed-move' => '[[$1]] mota est et nunc redirigit ad [[$2]]',
 'double-redirect-fixer' => 'Rectificator redirectionum',
@@ -1400,7 +1427,7 @@ Fortasse [$2 paginam descriptionis fasciculi] ibi sitam recensere vis.',
 
 # Special:Log
 'specialloguserlabel' => 'Usor:',
-'speciallogtitlelabel' => 'Titulus:',
+'speciallogtitlelabel' => 'Destinatum (titulus aut usor):',
 'log' => 'Acta',
 'all-logs-page' => 'Acta publica omnia',
 'alllogstext' => 'Ostentantur omnia acta {{grammar:genitive|{{SITENAME}}}}.
@@ -1425,6 +1452,9 @@ Adspectum graciliorem potes facere modum indicum, nomen usoris (cave litteras ma
 'allpages-bad-ns' => 'Non est spatium nominale "$1" apud {{grammar:accusative|{{SITENAME}}}}.',
 'allpages-hide-redirects' => 'Celare redirectiones',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'Recentissima vide.',
+
 # Special:Categories
 'categories' => 'Categoriae',
 'categoriespagetext' => '{{PLURAL:$1|Categoria subter paginas vel fasciculos continet.|Categoriae subter paginas vel fasciculos continent.}}
@@ -1481,6 +1511,8 @@ Inscriptio electronica quam in [[Special:Preferences|praeferentiis tuis]] dedis
 'noemailtext' => 'Hic usor inscriptionem electronicam ratam non dedit.',
 'nowikiemailtitle' => 'Litterae electronicae non permissae',
 'nowikiemailtext' => 'Hic usor litteras electronicas ab aliis usoribus non vult.',
+'emailusername' => 'Nomen usoris:',
+'emailusernamesubmit' => 'Conferre',
 'email-legend' => 'Litteras electronicas usori {{grammar:genitive|{{SITENAME}}}} mittere',
 'emailfrom' => 'Ab:',
 'emailto' => 'Ad:',
@@ -1689,7 +1721,7 @@ Si pagina nova cum ipso nomine post deletionem creata est, emendationes restitut
 'mycontris' => 'Conlationes',
 'contribsub2' => 'Pro $1 ($2)',
 'nocontribs' => 'Nullae mutationes inventae sunt ex his indiciis.',
-'uctop' => ' (vertex)',
+'uctop' => '(vertex)',
 'month' => 'Ab mense (et prior):',
 'year' => 'Ab anno (et prior):',
 
@@ -2008,6 +2040,7 @@ Paginae nomen petitum "[[:$1]]" iam existit. Vin tu eam delere ut pagina illic m
 # Info page
 'pageinfo-title' => 'Res quae ad "$1" pertinent',
 'pageinfo-header-basic' => 'De hac pagina',
+'pageinfo-header-edits' => 'Conspectus recensionum',
 'pageinfo-display-title' => 'Titulus ut in pagina ipsa monstratur',
 'pageinfo-length' => 'Magnitudo paginae (octeti)',
 'pageinfo-article-id' => 'Identificatio paginis',
@@ -2016,6 +2049,7 @@ Paginae nomen petitum "[[:$1]]" iam existit. Vin tu eam delere ut pagina illic m
 'pageinfo-firsttime' => 'Dies et tempus creationis paginae',
 'pageinfo-lastuser' => 'Usor qui ultimam recensionem fecit',
 'pageinfo-lasttime' => 'Dies ultimae emendationis',
+'pageinfo-recent-edits' => 'Praesens numerus recensionum (intra praeterita $1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria celata|Categoriae celatae}} ($1)',
 'pageinfo-toolboxlink' => 'De hac pagina',
 
@@ -2139,6 +2173,7 @@ Paginae nomen petitum "[[:$1]]" iam existit. Vin tu eam delere ut pagina illic m
 'exif-gpsareainformation' => 'Nomen areae GPS',
 'exif-gpsdatestamp' => 'Dies GPS',
 'exif-gpsdifferential' => 'Correctio differentialis GPS',
+'exif-source' => 'Fons',
 
 # Exif attributes
 'exif-compression-1' => 'Incompressus',
@@ -2393,7 +2428,7 @@ Quaesumus, adfirma ut iterum hanc paginam crees.",
 'tags' => 'Affixa mutationum validarum',
 'tag-filter-submit' => 'Filtrum',
 'tags-title' => 'Affixa',
-'tags-edit' => 'mutatum',
+'tags-edit' => 'recensere',
 'tags-hitcount' => '$1 {{PLURAL:$1|mutatum|mutata}}',
 
 # Special:ComparePages
index 9fabe18..080d942 100644 (file)
@@ -188,7 +188,7 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Linken ënnersträichen:',
 'tog-justify' => "Ränner vum Text riichten (''justify'')",
-'tog-hideminor' => 'Kleng Ännerungen an de rezenten Ännerungen verstoppen',
+'tog-hideminor' => 'Kleng Ännerungen an de rezenten Ännerunge verstoppen',
 'tog-hidepatrolled' => 'Iwwerkuckten Ännerungen an de "Rezenten Ännerungen" verstoppen',
 'tog-newpageshidepatrolled' => 'Iwwerkuckte Säiten op der Lëscht vun den "Neie Säite" verstoppen',
 'tog-extendwatchlist' => 'Iwwerwaachungslëscht op all Ännerungen ausbreeden, net nëmmen op déi rezentst',
@@ -433,7 +433,7 @@ $1",
 # 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).
 'aboutsite' => 'Iwwer {{SITENAME}}',
 'aboutpage' => 'Project:Iwwer',
-'copyright' => 'Inhalt ass zur Verfügung gestallt ënner der $1.<br />',
+'copyright' => 'Den Inhalt ass ënner $1 disponibel wann et net anescht uginn ass.',
 'copyrightpage' => '{{ns:project}}:Copyright',
 'currentevents' => 'Aktualitéit',
 'currentevents-url' => 'Project:Aktualitéit',
@@ -520,7 +520,7 @@ All Spezialsäiten déi et gëtt, sinn op der [[Special:SpecialPages|{{int:speci
 'databaseerror-text' => 'Et ass ee Feeler bäi enger Ufro un Datebank geschitt. Dat deit op e Feeler an der Software.',
 'databaseerror-textcl' => "Et ass e Feeler bäi enger Ufro un d'Datebank geschitt.",
 'databaseerror-query' => 'Ufro: $1',
-'databaseerror-function' => 'Fonctioun: $1',
+'databaseerror-function' => 'Funktioun: $1',
 'databaseerror-error' => 'Feeler: $1',
 'laggedslavemode' => "'''Opgepasst:''' Dës Säit ass net onbedéngt um neiste Stand.",
 'readonly' => "D'Datebank ass gespaart",
@@ -535,7 +535,7 @@ Dat geschitt normalerweis duerch e Link op eng Säit déi geläscht oder geréck
 Wann dat net de Fall ass, hutt Dir eventuell e Feeler an der Software fonnt.
 Mellt dëst w.e.g. bei engem [[Special:ListUsers/sysop|Administrateur]] a vergiesst net d'URL unzeginn.",
 'missingarticle-rev' => '(Versiounsnummer: $1)',
-'missingarticle-diff' => '(Ënnerscheed tëschent Versiounen: $1, $2)',
+'missingarticle-diff' => '(Ënnerscheed tëscht Versiounen: $1, $2)',
 'readonly_lag' => "D'Datebank gouf automatesch gespaart fir datt d'Zweetserveren (slaves) nees mat dem Haaptserver (master) synchron geschalt kënne ginn.",
 'internalerror' => 'Interne Feeler',
 'internalerror_info' => 'Interne Feeler: $1',
@@ -598,7 +598,7 @@ Den Administrateur den d\'Schreiwe gespaart huet, huet dës Erklärung uginn: "$
 
 # Virus scanner
 'virus-badscanner' => "Schlecht Configuratioun: onbekannte  Virescanner: ''$1''",
-'virus-scanfailed' => 'De Scan huet net fonctionnéiert (Code $1)',
+'virus-scanfailed' => 'De Scan huet net funktionéiert (Code $1)',
 'virus-unknownscanner' => 'onbekannten Antivirus:',
 
 # Login and logout pages
@@ -644,6 +644,9 @@ Vergiesst net fir Är [[Special:Preferences|{{SITENAME}} Astellungen]] z'ännere
 'userlogin-resetpassword-link' => 'Setzt Äert Passwuert zréck',
 'helplogin-url' => 'Help:Aloggen',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hëllef beim Aloggen]]',
+'userlogin-loggedin' => 'Dir sidd schonn als {{GENDER:$1|$1}} ageloggt.
+Benotzt de Formulaire hei drënner fir Iech als een anere Benotzer anzeloggen.',
+'userlogin-createanother' => 'Maacht een anere Benotzerkont op',
 'createacct-join' => 'Gitt Är Informatioune hei drënner an.',
 'createacct-another-join' => "Gitt d'Informatioune fir den neie Benotzerkont hei drënner an.",
 'createacct-emailrequired' => 'E-Mail-Adress',
@@ -682,7 +685,7 @@ Vergewëssert Iech datt Dir Cookien zouloosst, luet dës Säit nei a probéiert
 'loginsuccesstitle' => 'Umeldung huet geklappt',
 'loginsuccess' => "'''Dir sidd elo als \"\$1\" op {{SITENAME}} ugemellt.'''",
 'nosuchuser' => 'Et gëtt kee Benotzernumm mam Numm "$1".
-Beim Benotzernumm gëtt tëschent groussen a klenge Buschtawen ënnerscheet (casesensitive).
+Beim Benotzernumm gëtt tëscht groussen a klenge Buschtawen ënnerscheet (casesensitive).
 Kuckt w.e.g. op d\'Schreifweis richteg ass, oder [[Special:UserLogin/signup|maacht en neie Benotzerkont op]].',
 'nosuchusershort' => 'De Benotzernumm "$1" gëtt et net.
 Kuckt w.e.g. op d\'Schreifweis richteg ass.',
@@ -738,7 +741,7 @@ Waart w.e.g. $1 ier Dir et nach eng Kéier probéiert.',
 Wann Dir en ugitt, gëtt e benotzt fir d'Benotzerattributiounen fir Är Aarbecht zouzeuerdnen.",
 
 # Email sending
-'php-mail-error-unknown' => 'Onbekannte Feeler an der PHP-Mail-Fonctioun',
+'php-mail-error-unknown' => 'Onbekannte Feeler an der PHP-Mail-Funktioun',
 'user-mail-no-addy' => 'Huet versicht eng Mail ouni Mailadress ze schécken',
 'user-mail-no-body' => 'Et gouf probéiert eng E-Mail ouni Text oder mat engem ze kuerzen Text ze schécken.',
 
@@ -768,7 +771,7 @@ Vläicht hutt Dir Äert Passwuert scho geännert oder en neit temporäert Passwu
 'passwordreset-text-many' => '{{PLURAL:$1|Fëllt eent vun de Felder aus fir Äert Passwuert zeréckzesetzen.}}',
 'passwordreset-legend' => 'Passwuert zrécksetzen',
 'passwordreset-disabled' => "D'Zerécksetze vum Passwuert ass op dëser Wiki ausgeschalt.",
-'passwordreset-emaildisabled' => "D'E-Mail-Fonctioune goufen op dëser Wiki ausgeschalt.",
+'passwordreset-emaildisabled' => "D'E-Mail-Funktioune goufen op dëser Wiki ausgeschalt.",
 'passwordreset-username' => 'Benotzernumm:',
 'passwordreset-domain' => 'Domaine:',
 'passwordreset-capture' => "D'Mail kucken?",
@@ -884,7 +887,7 @@ De Grond dofir war:
 
 Dir kënnt de(n) $1 oder soss een [[{{MediaWiki:Grouppage-sysop}}|Administrateur]] kontaktéieren, fir iwwer déi Spär ze diskutéieren.
 
-Bedenkt datt Dir d\'Fonctioun "Dësem Benotzer eng E-Mail schécken" benotze kënnt wann Dir eng gëlteg E-Mail-Adress an Ären [[Special:Preferences|Astellungen]] uginn hutt a wann dat net fir Iech gespaart gouf.
+Bedenkt datt Dir d\'Funktioun "Dësem Benotzer eng E-Mail schécken" benotze kënnt wann Dir eng gëlteg E-Mail-Adress an Ären [[Special:Preferences|Astellungen]] uginn hutt a wann dat net fir Iech gespaart gouf.
 
 Är aktuell IP-Adress ass $3 an d\'Nummer vun Ärer Spär ass $5.
 Gitt dës Donnéeë w.e.g bei allen Ufroen zu dëser Spär un.',
@@ -911,7 +914,7 @@ Wann Dir en anonyme Benotzer sidd an Dir irrelevant Bemierkunge krut, [[Special:
 Dir kënnt op anere Säiten no [[Special:Search/{{PAGENAME}}|dësem Säitentitel sichen]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} an den entspriechende Logbicher nokucken] oder [{{fullurl:{{FULLPAGENAME}}|action=edit}} esou eng Säit uleeën]</span>.',
 'noarticletext-nopermission' => 'Elo ass keen Text op dëser Säit.
-Dir kënnt op anere Säiten [[Special:Search/{{PAGENAME}}|no dësem Sàitentitel sichen]], oder <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} an de Logbicher sichen]</span>, mä Dir hutt net déi néideg Rechter fir dës Säit unzeleeën.',
+Dir kënnt op anere Säiten [[Special:Search/{{PAGENAME}}|no dësem Säitentitel sichen]], oder <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} an de Logbicher sichen]</span>, mä Dir hutt net déi néideg Rechter fir dës Säit unzeleeën.',
 'missing-revision' => 'D\'Versioun #$1 vun der Säit mam Numm "{{PAGENAME}}" gëtt et net.
 
 Dat geschitt normalerweis wann Dir op e vereelste Link vun enger Versioun vun enger Säit klickt déi geläscht ginn ass.
@@ -962,7 +965,7 @@ Dëst geschitt heiansdo wann Dir en anonyme Proxy-Service um Internet benotzt.",
 'editingsection' => 'Ännere vu(n) $1 (Abschnitt)',
 'editingcomment' => 'Ännere vu(n) $1 (neien Abschnitt)',
 'editconflict' => 'Ännerungskonflikt: $1',
-'explainconflict' => "En anere Benotzer huet un dëser Säit geschafft, während Dir amgaange waart, se z'änneren.
+'explainconflict' => "En anere Benotzer huet un dëser Säit geschafft, während Dir am Gaang waart, se z'änneren.
 Dat iewescht Textfeld weist Iech den aktuellen Text.
 Är Ännerunge gesitt Dir am ënneschten Textfeld.
 Dir musst Är Ännerungen an dat iewescht Textfeld androen.
@@ -985,7 +988,7 @@ Dir kënnt den Text kopéieren an an een Textfichier drasetzen an deen ofspäich
 Den Administrateur den d'Datebank gespaart huet, huet dës Erklärung ginn: $1",
 'protectedpagewarning' => "'''OPGEPASST: Dës Säit gouf gespaart a kann nëmme vun engem Administrateur geännert ginn.''' Déi lescht Zeil aus de Logbicher fannt Dir zu Ärer Informatioun hei ënnendrënner.",
 'semiprotectedpagewarning' => "'''Bemierkung:''' Dës Säit gouf esou gespaart, datt nëmme ugemellt Benotzer s'ännere kënnen. Déi lescht Zeil aus de Logbicher fannt Dir zu Ärer Informatioun hei ënnendrënner.",
-'cascadeprotectedwarning' => "'''Passt op:''' Dës Säit gouf gespaart a kann nëmme vu Benotzer mat Administreursrechter geännert ginn. Si ass an dës {{PLURAL:$1|Säit|Säiten}} agebonnen, déi duerch Cascadespäroptioun gespaart {{PLURAL:$1|ass|sinn}}:'''",
+'cascadeprotectedwarning' => "'''Opgepasst:''' Dës Säit gouf gespaart a kann nëmme vu Benotzer mat Administreursrechter geännert ginn. Si ass an dës {{PLURAL:$1|Säit|Säiten}} agebonnen, déi duerch Cascadespäroptioun gespaart {{PLURAL:$1|ass|sinn}}:'''",
 'titleprotectedwarning' => "'''OPGEPASST: Dës Säit gouf gespaart sou datt [[Special:ListGroupRights|spezifesch Rechter]] gebraucht gi fir se uleeën ze kënnen.''' Déi lescht Zeil aus de Logbicher fannt Dir zu Ärer Informatioun hei ënnendrënner.",
 'templatesused' => '{{PLURAL:$1|Schabloun|Schablounen}} déi op dëser Säit am Gebrauch sinn:',
 'templatesusedpreview' => '{{PLURAL:$1|Schabloun|Schablounen}} déi an dëser nach net gespäicherter Versioun benotzt {{PLURAL:$1|gëtt|ginn}}:',
@@ -993,15 +996,15 @@ Den Administrateur den d'Datebank gespaart huet, huet dës Erklärung ginn: $1",
 'template-protected' => '(gespaart)',
 'template-semiprotected' => '(gespaart fir net-ugemellten an nei Benotzer)',
 'hiddencategories' => 'Dës Säit gehéiert zu {{PLURAL:$1|1 verstoppter Kategorie|$1 verstoppte Kategorien}}:',
-'edittools' => '<!-- Dësen Text gëtt ënnert dem "Ännere"-Formulair esouwéi dem "Eropluede"-Formulair ugewisen. -->',
+'edittools' => '<!-- Dësen Text gëtt ënner dem "Ännere"Formulaire esouwéi dem "Eropluede"-Formulaire ugewisen. -->',
 'nocreatetext' => "Op {{SITENAME}} gouf d'Schafe vun neie Säite limitéiert. Dir kënnt Säiten déi scho bestinn änneren oder Iech [[Special:UserLogin|umellen]].",
 'nocreate-loggedin' => 'Dir hutt keng Berechtigung fir nei Säiten unzeleeën.',
 'sectioneditnotsupported-title' => 'Ännere vum Abschnitt gëtt net ënnerstëtzt',
-'sectioneditnotsupported-text' => "D'Ännere vun Abschnitten gëtt op dëser Ännerungssäit net ënnerstetzt.",
+'sectioneditnotsupported-text' => "D'Ännere vun Abschnitte gëtt op dëser Ännerungssäit net ënnerstëtzt.",
 'permissionserrors' => 'Net genuch Rechter',
 'permissionserrorstext' => 'Dir hutt net genuch Rechter fir déi Aktioun auszeféieren. {{PLURAL:$1|Grond|Grënn}}:',
 'permissionserrorstext-withaction' => 'Dir sidd, aus {{PLURAL:$1|dësem Grond|dëse Grënn}}, net berechtegt $2 :',
-'recreate-moveddeleted-warn' => "'''Opgepasst: Dir sidd amgaang eng Säit unzeleeën déi schonn eng Kéier geläscht gouf.'''
+'recreate-moveddeleted-warn' => "'''Opgepasst: Dir sidd am Gaang eng Säit unzeleeën déi schonn eng Kéier geläscht gouf.'''
 
 Frot Iech ob et wierklech sënnvoll ass dës Säit nees nei ze schafen.
 Fir Iech z'informéieren fannt Dir hei d'Logbuch vum Läsche mam Grond:",
@@ -1226,9 +1229,9 @@ Denkt w.e.g drunn datt d'Navigatiounslinken d'Wiel vun de Versiounen nees zréck
 
 # Diffs
 'history-title' => '$1: Historique vun de Versiounen',
-'difference-title' => '$1: Ënnerscheed tëschent de Versiounen',
-'difference-title-multipage' => '$1 a(n) $2: Ënnerscheed tëschent de Säiten',
-'difference-multipage' => '(Ënnerscheed tëschent Säiten)',
+'difference-title' => '$1: Ënnerscheed tëscht de Versiounen',
+'difference-title-multipage' => '$1 a(n) $2: Ënnerscheed tëscht de Säiten',
+'difference-multipage' => '(Ënnerscheed tëscht Säiten)',
 'lineno' => 'Linn $1:',
 'compareselectedversions' => 'Ausgewielte Versioune vergläichen',
 'showhideselectedversions' => 'Erausgesicht Versioune weisen/verstoppen',
@@ -1290,7 +1293,7 @@ Detailer fannt Dir am [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'showingresultsnum' => "Hei gesitt der  {{PLURAL:$3|'''1''' Resultat|'''$3''' Resultater}}, ugefaange mat #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Resultat '''$1''' vu(n) '''$3'''|Resultater '''$1 - $2''' vu(n) '''$3'''}} fir '''$4'''",
 'nonefound' => "'''Opgepasst''': Nëmmen e puer Nummraim gi ''par default'' duerchsicht. Versicht an ärer Ufro ''all:'' anzestellen fir de gesamten Inhalt (inklusiv Diskussiounssäiten, Schablonen, ...), oder benotzt déi gwënschten Nummraim als Virastellung.",
-'search-nonefound' => 'Fir Ã¤r Ufro gouf näischt fonnt.',
+'search-nonefound' => 'Fir Ã\84r Ufro gouf näischt fonnt.',
 'powersearch' => 'Erweidert Sich',
 'powersearch-legend' => 'Erweidert Sich',
 'powersearch-ns' => 'Sichen an den Nummraim:',
@@ -1313,9 +1316,9 @@ Detailer fannt Dir am [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'prefs-skin' => 'Skin',
 'skin-preview' => 'Kucken',
 'datedefault' => 'Egal (Standard)',
-'prefs-beta' => 'Beta-Fonctiounen',
+'prefs-beta' => 'Beta-Funktiounen',
 'prefs-datetime' => 'Datum an Auerzäit',
-'prefs-labs' => '"Labs"-Fonctiounen',
+'prefs-labs' => '"Labs"-Funktiounen',
 'prefs-user-pages' => 'Benotzersäiten',
 'prefs-personal' => 'Benotzerprofil',
 'prefs-rc' => 'Rezent Ännerungen',
@@ -1345,7 +1348,7 @@ Detailer fannt Dir am [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'recentchangesdays-max' => '(Maximal $1 {{PLURAL:$1|Dag|Deeg}})',
 'recentchangescount' => 'Zuel vun den Ännerungen déi als Standard gewise ginn:',
 'prefs-help-recentchangescount' => 'Inklusiv Rezent Ännerungen, Versiounshistoriquen a Logbicher.',
-'prefs-help-watchlist-token2' => 'Dëst ass de geheime Schlëssel fir de Webfeed vun Ärer Iwwerwaachungslëscht. Jiddereen deen e kënnt kann Är Iwwerwaachungslëscht liesen, dofir sollt Dir en net weider ginn. [[Special:ResetTokens|Klickt hei wann dir en zrécksetze musst]].',
+'prefs-help-watchlist-token2' => 'Dëst ass de geheime Schlëssel fir de Webfeed vun Ärer Iwwerwaachungslëscht. Jiddwereen deen e kennt kann Är Iwwerwaachungslëscht liesen, dofir sollt Dir en net weider ginn. [[Special:ResetTokens|Klickt hei wann Dir en zrécksetze musst]].',
 'savedprefs' => 'Är Astellunge goufe gespäichert.',
 'timezonelegend' => 'Zäitzon:',
 'localtime' => 'Lokalzäit:',
@@ -1501,7 +1504,7 @@ Dës Informatioun ass ëffentlech.",
 'right-deletelogentry' => 'Eenzel Androungen an de Logbicher läschen a restauréieren',
 'right-deleterevision' => 'Spezifesch Versioune vu Säite läschen a restauréieren',
 'right-deletedhistory' => 'Weis geläscht Versiounen am Historique, ouni den associéierten Text',
-'right-deletedtext' => "Geläschten Text an d'Ännerungen tëschent de geläschte Versioune weisen",
+'right-deletedtext' => "Geläschten Text an d'Ännerungen tëscht de geläschte Versioune weisen",
 'right-browsearchive' => 'Geläscht Säite sichen',
 'right-undelete' => 'Eng Säit restauréieren',
 'right-suppressrevision' => 'Virun den Administrateure verstoppte Versiounen nokucken a restauréieren',
@@ -1512,7 +1515,7 @@ Dës Informatioun ass ëffentlech.",
 'right-ipblock-exempt' => 'Ausname vun IP-Spären, automatesche Spären a vu Späre vu Plage vun IPen',
 'right-proxyunbannable' => 'Automatesche Proxyspären ëmgoen',
 'right-unblockself' => 'Seng eege Spär ophiewen',
-'right-protect' => 'Protectiounsniveauen änneren a kaskade.gespaarte Säiten änneren',
+'right-protect' => 'Protektiounsniveauen änneren a kaskadegespaart Säiten änneren',
 'right-editprotected' => 'Protegéiert Säiten als "{{int:protect-level-sysop}}" änneren',
 'right-editsemiprotected' => 'Säiten déi als  "{{int:protect-level-autoconfirmed}}" gespaart sinn änneren',
 'right-editinterface' => 'De Benotzerinterface änneren',
@@ -1575,10 +1578,10 @@ Dës Informatioun ass ëffentlech.",
 'action-suppressrevision' => 'déi verstoppt Versioun kucken a restauréieren',
 'action-suppressionlog' => 'dës privat Lëscht ze kucken',
 'action-block' => 'dëse Benotzer fir Ännerungen ze spären',
-'action-protect' => 'de Protectiounsstatus vun dëser Säit änneren',
+'action-protect' => 'de Protektiounsstatus vun dëser Säit änneren',
 'action-rollback' => "Ännerunge vum läschte Benotzer vun enger spezieller Säit séier z'récksetzen ''(rollback)''",
-'action-import' => "dës Säit aus enger anerer Wiki z'importéieren",
-'action-importupload' => "dës Säit duerch d'Eropluede vun engem Fichier importéieren",
+'action-import' => 'Säiten aus enger anerer Wiki importéieren',
+'action-importupload' => "Säiten duerch d'Eropluede vun engem Fichier importéieren",
 'action-patrol' => "d'Ännerunge vun Aneren als nogekuckt markéieren",
 'action-autopatrol' => 'eegen Ännerungen als nogekuckt ze markéieren',
 'action-unwatchedpages' => "d'Lëscht vun den net iwwerwaachte Säiten ze kucken",
@@ -1708,10 +1711,10 @@ Erlaabt {{PLURAL:$3|ass|sinn}}: $2.',
 'fileexists' => 'Et gëtt schonn e Fichier mat dësem Numm, kuckt w.e.g.
 <strong>[[:$1]]</strong> wann Dir net sécher sidd, ob Dir den Numm ännere wëllt.
 [[$1|thumb]]',
-'filepageexists' => "D'Beschreiwungssäit fir dëse Fichier gouf schonns als <strong>[[:$1]]</strong> ugeluecht, et gëtt awer kee Fichier mat deem Numm.
+'filepageexists' => "D'Beschreiwungssäit fir dëse Fichier gouf schonn als <strong>[[:$1]]</strong> ugeluecht, et gëtt awer kee Fichier mat deem Numm.
 
 De Resumé deen Dir agitt, gëtt net op d'Beschreiwungssäit iwwerholl.
-Fir datt Ã¤re Resumé do opdaucht musst Dir e manuell änneren.
+Fir datt Ã\84re Resumé do opdaucht musst Dir e manuell änneren.
 [[$1|thumb]]",
 'fileexists-extension' => 'E Fichier mat engem ähnlechen Numm gëtt et schonn: [[$2|thumb]]
 * Numm vum Fichier deen Dir versicht eropzelueden: <strong>[[:$1]]</strong>
@@ -1754,7 +1757,7 @@ D'Eropluede vu JAVA-Fichieren ass net erlaabt, well si d'Ëmgoe vu Sécherheetsm
 'filewasdeleted' => 'E Fichier mat dësem Numm gouf schonn eemol eropgelueden an duerno nees geläscht. Kuckt w.e.g op $1 no, ier Dir dee Fichier nach eng Kéier eropluet.',
 'filename-bad-prefix' => "Den Numm vum Fichier fänkt mat '''„$1“''' un. Dësen Numm krut en automatesch vun der Kamera a seet näischt iwwer dat aus, wat drop ass. Gitt dem Fichier w.e.g. en Numm, deen den Inhalt besser beschreift, an deen net verwiesselt ka ginn.",
 'upload-success-subj' => 'Eroplueden erfollegräich',
-'upload-success-msg' => 'Äert Eropluede vun [$2] huet fonctionnéiert. De Fichier ass hei disponibel: [[:{{ns:file}}:$1]]',
+'upload-success-msg' => 'Äert Eropluede vun [$2] huet funktionéiert. De Fichier ass hei disponibel: [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => 'Problem beim Eroplueden',
 'upload-failure-msg' => 'Et gouf e Problem mam Fichier vu(n) [$2] deen Dir eropgelueden hutt:
 
@@ -1821,7 +1824,7 @@ Wann de Problem weider besteet, dann un de [[Special:ListUsers/sysop|Administrat
 'zip-wrong-format' => 'De Fichier deen Dir uginn hutt war kee ZIP Fichier.',
 'zip-bad' => 'De Fichier ass korrupt oder ass aus anere Grënn en net liesbare ZIP-Fichier.
 E kann net uerdentlech op seng Sécherheet nogekuckt ginn.',
-'zip-unsupported' => "Dëse ZIP-Fichier benotzt ZIP-Fonctiounen déi MediaWiki net ënnerstëtzt.
+'zip-unsupported' => "Dëse ZIP-Fichier benotzt ZIP-Funktiounen déi MediaWiki net ënnerstëtzt.
 E kann net op d'Sécherheet nogekuckt ginn.",
 
 # Special:UploadStash
@@ -1829,8 +1832,8 @@ E kann net op d'Sécherheet nogekuckt ginn.",
 'uploadstash-summary' => 'Op dëser Säit huet en Zougrëff op Fichieren déi eropgeluede sinn (oder am Gaang sinn eropgelueden ze ginn) déi awer nach net op der Wiki publizéiert sinn. Dës Fichier kënnen eenzeg an eleng vun deem Benotzer deen se eropgelueden huet gesi ginn.',
 'uploadstash-clear' => 'Um Server gespäichert Fichieren déi nach net eropgeluede si läschen',
 'uploadstash-nofiles' => 'Dir hutt keng gespäichert Fichieren déi Dir nach net eropgelueden hutt.',
-'uploadstash-badtoken' => "D'Ausféiere vun dëser Aktioun huet net fonctionnéiert, vläicht well d'Informatiounen iwwer Är Rechter ofgelaf sinn. Probéiert et nach emol.",
-'uploadstash-errclear' => "D'Läsche vun de Fichieren huet net fonctionnéiert.",
+'uploadstash-badtoken' => "D'Ausféiere vun dëser Aktioun huet net funktionéiert, vläicht well d'Informatiounen iwwer Är Rechter ofgelaf sinn. Probéiert et nach emol.",
+'uploadstash-errclear' => "D'Läsche vun de Fichieren huet net funktionéiert.",
 'uploadstash-refresh' => 'Lëscht vun de Fichieren aktualiséieren',
 
 # img_auth script messages
@@ -1846,16 +1849,16 @@ Kuckt  https://www.mediawiki.org/wiki/Manual:Image_Authorization',
 'img-auth-isdir' => 'Dir versicht op de Repertoire "$1" zouzegräifen.
 Nèemmen Datenofruff ass erlaabt.',
 'img-auth-streaming' => '"$1" lueden.',
-'img-auth-public' => "D'Fonctioun img_auth.php erlaabt et fir Fichieren vun enger privater Wiki erauszeginn.
+'img-auth-public' => "D'Funktioun img_auth.php erlaabt et fir Fichieren vun enger privater Wiki erauszeginn.
 Dës Wiki ass als ëffentlech Wiki configuréiert.
-Fir eng oprimal Sécherheet ass img_auth.php ausgeschalt.",
+Fir eng optimal Sécherheet ass img_auth.php ausgeschalt.",
 'img-auth-noread' => 'De Benotzer hut keen Zougang fir "$1" ze liesen',
 'img-auth-bad-query-string' => "D'URL huet eng net valabel Rei vun Zeechen.",
 
 # HTTP errors
 'http-invalid-url' => 'Net-valabel URL: $1',
 'http-invalid-scheme' => 'URLe mam Schema "$1" ginn net ënnerstëtzt',
-'http-request-error' => "D'HTTP-Ufro huet wéinst engem onbekannte Feeler net fonctionnéiert.",
+'http-request-error' => "D'HTTP-Ufro huet wéinst engem onbekannte Feeler net funktionéiert.",
 'http-read-error' => 'HTTP-Feeler beim Liesen.',
 'http-timed-out' => 'HTTP-Ufro huet ze laang gebraucht (time out).',
 'http-curl-error' => 'Feeler beim Ofruff vun der URL: $1',
@@ -2352,7 +2355,7 @@ Reaktiounen a méi Hëllef:
 'confirmdeletetext' => "Dir sidd am Gaang, eng Säit mat hirem kompletten Historique vollstänneg aus der Datebank ze läschen.
 W.e.g. confirméiert, datt Dir dëst wierklech wëllt, datt Dir d'Konsequenze verstitt, an datt dat Ganzt am Aklang mat de [[{{MediaWiki:Policy-url}}|Richtlinne]] geschitt.",
 'actioncomplete' => 'Aktioun ofgeschloss',
-'actionfailed' => 'Aktioun huet net fonctionnéiert',
+'actionfailed' => 'Aktioun huet net funktionéiert',
 'deletedtext' => '"$1" gouf geläscht. Kuckt $2 fir eng Lëscht vun de Säiten déi viru Kuerzem geläscht goufen.',
 'dellogpage' => 'Läschlëscht',
 'dellogpagetext' => 'Hei fannt dir eng Lëscht mat rezent geläschte Säiten. All Auerzäiten sinn déi vum Server.',
@@ -2369,8 +2372,8 @@ W.e.g. confirméiert, datt Dir dëst wierklech wëllt, datt Dir d'Konsequenze ve
 'delete-toobig' => "Dës Säit huet e laangen Historique, méi wéi $1 {{PLURAL:$1|Versioun|Versiounen}}.
 D'Läsche vun esou Säite gouf limitéiert fir ongewollte Stéierungen op {{SITENAME}} ze verhënneren.",
 'delete-warning-toobig' => "Dës Säit huet eng laang Versiounsgeschicht, méi wéi $1 {{PLURAL:$1|Versioun|Versiounen}}.
-D'Läschen dovun kann zu Stéierungen am Funktionnement vun {{SITENAME}} féieren;
-dës Aktioun soll mat Vierssiicht gemaach ginn.",
+D'Läschen dovu kann zu Stéierungen am Fonctionnement vun {{SITENAME}} féieren;
+dës Aktioun soll mat Virsiicht gemaach ginn.",
 
 # Rollback
 'rollback' => 'Ännerungen zrécksetzen',
@@ -2386,7 +2389,7 @@ een Aneren huet dëst entweder scho gemaach oder nei Ännerungen agedroen.
 Déi lescht Ännerung vun der Säit ass vum [[User:$3|$3]] ([[User talk:$3|Diskussioun]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "De Resumé vun der Ännerung war: \"''\$1''\".",
 'revertpage' => 'Ännerunge vum [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussioun]]) zréckgesat op déi lescht Versioun vum [[User:$1|$1]]',
-'revertpage-nouser' => 'Zréckgesaten Ännerungen duerch e verstoppte Benotzer op déi lescht Versioun vum [[User:$1|$1]]',
+'revertpage-nouser' => 'Zréckgesaten Ännerungen duerch e verstoppte Benotzer op déi lescht Versioun vum {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => "D'Ännerunge vum $1 goufen zréckgesat op déi lescht Versioun vum $2.",
 
 # Edit tokens
@@ -2396,39 +2399,39 @@ Dës Aktioun gouf aus Sécherheetsgrënn ofgebrach, fir ze verhënneren datt är
 Klickt w.e.g. op "Zréck" a lued déi Säit vun där Dir komm sidd nei, a versicht et dann nach eng Kéier.',
 
 # Protect
-'protectlogpage' => 'Protectiouns-Logbuch',
+'protectlogpage' => 'Protektiounslogbuch',
 'protectlogtext' => "Dëst ass d'Lëscht vun de Säitespären.
 Kuckt d'[[Special:ProtectedPages|Lëscht vun de gespaarte Säite]] fir eng Lëscht vun den aktuelle Säitespären.",
 'protectedarticle' => 'huet "[[$1]]" gespaart',
-'modifiedarticleprotection' => 'huet d\'Protectioun vun "[[$1]]" geännert',
+'modifiedarticleprotection' => 'huet d\'Protektioun vun "[[$1]]" geännert',
 'unprotectedarticle' => 'huet d\'Spär vu(n) "[[$1]]" opgehuewen',
 'movedarticleprotection' => 'huet de Säiteschutz vun "[[$2]]" op "[[$1]]" geännert',
-'protect-title' => 'Ännerung vun der Protectioun vu(n) „$1“',
-'protect-title-notallowed' => 'Den Niveau vun der Protectioun vu(n) "$1" weisen',
+'protect-title' => 'Ännerung vun der Protektioun vu(n) „$1“',
+'protect-title-notallowed' => 'Den Niveau vun der Protektioun vu(n) "$1" weisen',
 'prot_1movedto2' => '[[$1]] gouf op [[$2]] geréckelt',
 'protect-badnamespace-title' => 'Nummraum deen net gespaart ka ginn',
 'protect-badnamespace-text' => 'Säiten an dësem Nummraum kënnen net gespaart ginn.',
 'protect-norestrictiontypes-text' => 'Dës Säit kann net gespaart gi well keng Restriktiounstypen disponibel sinn.',
 'protect-norestrictiontypes-title' => 'Säit kann net gespaart ginn',
-'protect-legend' => "Confirméiert d'Protectioun",
+'protect-legend' => "Confirméiert d'Protektioun",
 'protectcomment' => 'Grond:',
 'protectexpiry' => 'Dauer vun der Spär:',
 'protect_expiry_invalid' => "D'Dauer déi Dir uginn hutt ass ongëlteg.",
 'protect_expiry_old' => "D'Spärzäit läit an der Vergaangenheet.",
 'protect-unchain-permissions' => "D'Spär vu weidere Spär-Optioune ophiewen",
-'protect-text' => "Hei kënnt Dir de Protectiounsstatus fir d'Säit '''$1''' kucken an änneren.",
-'protect-locked-blocked' => "Dir kënnt den Niveau vun der Säite-Protectioun net änneren, well Äre Benotzerkont gespaart ass.
-Hei sinn déi aktuell Säite-Protectiouns-Astellungen fir d'Säit '''$1''':",
+'protect-text' => "Hei kënnt Dir de Protektiounsstatus fir d'Säit '''$1''' kucken an änneren.",
+'protect-locked-blocked' => "Dir kënnt den Niveau vun der Säiteprotektioun net änneren, well Äre Benotzerkont gespaart ass.
+Hei sinn déi aktuell Säiteprotektiounsastellunge fir d'Säit '''$1''':",
 'protect-locked-dblock' => "Den Niveau vun der Proectioun vun der Säit kann net geänenert ginn, well d'Datebank gespaart ass.
 Hei sinn déi aktuell Astellungen fir d'Säit '''$1''':",
-'protect-locked-access' => "Dir hutt net déi néideg Rechter fir de Protectiouns-Niveau vun dëser Säit z'änneren.
+'protect-locked-access' => "Dir hutt net déi néideg Rechter fir de Protektiounsniveau vun dëser Säit z'änneren.
 Hei sinn déi aktuell Astellunge fir d'Säit '''$1''':",
-'protect-cascadeon' => "Dës Säit ass elo gespaart well si an déi folgend {{PLURAL:$1|Säit|Säiten}} agebonn ass déi duerch eng Kaskadespär gespaart {{PLURAL:$1|ass|sinn}}. De Protectiounsniveau ka fir dës Säit geännert ginn, dat huet awer keen Afloss op d'Kaskadespär.",
+'protect-cascadeon' => "Dës Säit ass elo gespaart well si an déi folgend {{PLURAL:$1|Säit|Säiten}} agebonnen ass déi duerch eng Kaskadespär gespaart {{PLURAL:$1|ass|sinn}}. De Protektiounsniveau ka fir dës Säit geännert ginn, dat huet awer keen Afloss op d'Kaskadespär.",
 'protect-default' => 'All Benotzer erlaben',
 'protect-fallback' => 'Nëmme Benotzer mat enger "$1"-Autorisatioun erlaben.',
 'protect-level-autoconfirmed' => 'Nëmmen automatesch ugemellt Benotzer erlaben',
 'protect-level-sysop' => 'Nëmmen Administrateuren erlaben',
-'protect-summary-cascade' => 'Protectioun a Kaskaden',
+'protect-summary-cascade' => 'Protektioun a Kaskaden',
 'protect-expiring' => 'bis $1 (UTC)',
 'protect-expiring-local' => 'bis $1',
 'protect-expiry-indefinite' => 'net definéiert',
@@ -2444,7 +2447,7 @@ Hei sinn déi aktuell Astellunge fir d'Säit '''$1''':",
 ** Permanenten Ännerungskonflikt
 ** Dacks benotzt Schablounen
 ** Säit déi dacks gekuckt gëtt',
-'protect-edit-reasonlist' => 'Grënn vun der Protectioun änneren',
+'protect-edit-reasonlist' => 'Grënn vun der Protektioun änneren',
 'protect-expiry-options' => '1 Stonn:1 hour,1 Dag:1 day,1 Woch:1 week,2 Wochen:2 weeks,1 Mount:1 month,3 Méint:3 months,6 Méint:6 months,1 Joer:1 year,onbegrenzt:infinite',
 'restriction-type' => 'Berechtigung:',
 'restriction-level' => 'Niveau vun de Limitatiounen:',
@@ -2490,7 +2493,7 @@ An esou Fäll däerf déi neiste Versioun net markéiert ginn oder déi neiste g
 'undeletedrevisions' => '$1 {{PLURAL:$1|Versioun gouf|$1 Versioune goufe}} restauréiert',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 Versioun|$1 Versiounen}} a(n) {{PLURAL:$2|1 Fichier|$2 Fichiere}} goufe restauréiert',
 'undeletedfiles' => '$1 {{PLURAL:$1|Fichier gouf|Fichiere goufe}} restauréiert',
-'cannotundelete' => "D'Restauratioun huet net fonctionnéiert:
+'cannotundelete' => "D'Restauratioun huet net funktionéiert:
 $1",
 'undeletedpage' => "'''$1''' gouf restauréiert.
 
@@ -2525,7 +2528,7 @@ $1',
 'contributions' => '{{GENDER:$1|Benotzer}}kontributiounen',
 'contributions-title' => 'Kontributioune vum $1',
 'mycontris' => 'Kontributiounen',
-'contribsub2' => 'Fir $1 ($2)',
+'contribsub2' => "Fir {{GENDER:$3|den $1|d'$1|de Benotzer $1}} ($2)",
 'nocontribs' => 'Et goufe keng Ännerunge fonnt, déi dëse Kritèren entspriechen.',
 'uctop' => '(aktuell)',
 'month' => 'Vum Mount (a virdrun):',
@@ -2607,7 +2610,7 @@ $1',
 
 Kuckt d'[[Special:BlockList|Spär-Lëscht]] fir all Spären nozekucken.",
 'ipb-blockingself' => 'Dir sidd am gaang Iech selwer ze spären! Sidd Dir sécher datt Dir dat maache wëllt?',
-'ipb-confirmhideuser' => 'Dir sidd am gaang e Benotzer ze späre mat der Fonctioun "Benotzer verstoppen" ageschalt. Dëst hëlt den Numm vum Benotzer aus alle Lëschten a Logbicher eraus. Sidd Dir sécher datt Dir dat maache wëllt?',
+'ipb-confirmhideuser' => 'Dir sidd am Gaang e Benotzer ze späre mat der Funktioun "Benotzer verstoppen" ageschalt. Dëst hëlt den Numm vum Benotzer aus alle Lëschten a Logbicher eraus. Sidd Dir sécher datt Dir dat maache wëllt?',
 'ipb-edit-dropdown' => 'Spärgrënn änneren',
 'ipb-unblock-addr' => 'Spär vum $1 ophiewen',
 'ipb-unblock' => 'Spär vun enger IP-Adress oder engem Benotzer ophiewen',
@@ -2719,32 +2722,32 @@ Fir d'Datebank ze spären oder fir d'Spär opzehiewen muss dëse Fichier vum Web
 # Move page
 'move-page' => 'Réckel $1',
 'move-page-legend' => 'Säit réckelen',
-'movepagetext' => "Wann dir dëse Formulaire benotzt gitt Dir enger Säit en aneren Numm a réckelt se mat hirem Historique op den neien Numm.
+'movepagetext' => "Wann Dir dëse Formulaire benotzt gitt Dir enger Säit en aneren Numm a réckelt se mat hirem Historique op den neien Numm.
 Den alen Titel gëtt eng Viruleedung op déi nei Säit.
 Dir kënnt Viruleedungen déi op déi al Säit ginn automatesch aktualiséieren.
 Wann Dir dat net maacht, da vergewëssert Iech datt keng [[Special:DoubleRedirects|duebel]] oder [[Special:BrokenRedirects|futtis Viruleedungen]] am Spill sinn.
 Dir sidd responsabel datt d'Linke weiderhin dohinner pointéieren, wou se hi sollen.
 
-Beuecht w.e.g. datt d'Säit '''net''' geréckelt gëtt, wann et schonns eng Säit mat deem Titel gëtt, ausser déi ass eidel, ass eng Viruleedung oder huet keen Historique.
-Dëst bedeit datt dir eng Säit zréck op hiren ursprénglechen Numm ëmbenenne kënnt wann Dir Iech geiert hat an datt Dir keng Säit iwwerschreiwe kënnt, déi et schonns gëtt.
+Beuecht w.e.g. datt d'Säit '''net''' geréckelt gëtt, wann et schonn eng Säit mat deem Titel gëtt, ausser déi ass eidel, ass eng Viruleedung oder huet keen Historique.
+Dëst bedeit datt dir eng Säit zréck op hiren ursprénglechen Numm ëmbenenne kënnt wann Dir Iech geiert hat an datt Dir keng Säit iwwerschreiwe kënnt, déi et scho gëtt.
 
 '''OPGEPASST!'''
 Dëst kann en drastesche Changement fir eng populär Säit bedeiten;
-verstitt w.e.g. d'Konsequenze vun Ärer Handlung éier Dir dëst maacht.",
-'movepagetext-noredirectfixer' => "Wann Dir dëse Formulaire benotzt, réckelt dir eng komplett Säit mat hirem Historique op en neien Numm.
+verstitt w.e.g. d'Konsequenze vun Ärer Handlung ier Dir dëst maacht.",
+'movepagetext-noredirectfixer' => "Wann Dir dëse Formulaire benotzt, réckelt Dir eng komplett Säit mat hirem Historique op en neien Numm.
 Den alen Titel gëtt eng Viruleedung op den neien Titel.
 Dir kënnt Viruleedungen déi op déi al Säit ginn automatesch aktualiséieren.
 Vergewëssert Iech datt keng [[Special:DoubleRedirects|duebel]] oder [[Special:BrokenRedirects|futtis Viruleedungen]] am Spill sinn.
-Dir sidd responsabel datt d'Linke weider dohinner pointéieren, wou se hi sollen.
+Dir sidd responsabel datt d'Linke weider dohi pointéieren, wou se hi sollen.
 
-Denkt w.e.g. drun datt d'Säit '''net''' geréckelt gëtt, wann et schonns eng Säit mat deem Titel gëtt, ausser déi ass eidel, ass eng Viruleedung oder huet keen Historique.
-Dëst bedeit datt dir eng Säit zréck op deen Numm dee se virdrun hat ëmbenenne kënnt wann Dir e Feeler maacht an datt Dir keng Säit iwwerschreiwe kënnt, déi et schonns gëtt.
+Denkt w.e.g. drun datt d'Säit '''net''' geréckelt gëtt, wann et schonn eng Säit mat deem Titel gëtt, ausser déi ass eidel, ass eng Viruleedung oder huet keen Historique.
+Dëst bedeit datt dir eng Säit zréck op deen Numm dee se virdrun hat ëmbenenne kënnt wann Dir e Feeler maacht an datt Dir keng Säit iwwerschreiwe kënnt, déi et scho gëtt.
 
 '''OPGEPASST!'''
 Dëst kann en drastesche Changement fir eng populär Säit sinn;
-verstitt w.e.g. d'Konsequenze vun ärer Handlung éier Dir dëst maacht.",
+verstitt w.e.g. d'Konsequenze vun ärer Handlung ier Dir dëst maacht.",
 'movepagetalktext' => "D'associéiert Diskussiounssäit, am Fall wou  eng do ass, gëtt automatesch matgeréckelt, '''ausser:'''
-*D'Säit gëtt an een anere Nummraum geréckelt.
+*D'Säit gëtt an een aneren Nummraum geréckelt.
 *Et gëtt schonn eng Diskussiounssäit mat dësem Numm, oder
 *Dir klickt d'Këschtchen ënnendrënner net un.
 
@@ -2764,10 +2767,10 @@ An deene Fäll musst Dir d'Diskussiounssäit manuell réckelen oder fusionéiere
 'movepage-moved' => "'''D'Säit \"\$1\" gouf op \"\$2\" geréckelt.'''",
 'movepage-moved-redirect' => 'Et gouf eng Viruleedung ugeluecht.',
 'movepage-moved-noredirect' => "D'Uleeë vun enger Viruleedung gouf ënnerdréckt.",
-'articleexists' => 'Eng Säit mat dësem Numm gëtt et schonns, oder den Numm deen Dir gewielt hutt gëtt net akzeptéiert.
+'articleexists' => 'Eng Säit mat dësem Numm gëtt et schonn, oder den Numm deen Dir gewielt hutt gëtt net akzeptéiert.
 Wielt w.e.g. en aneren Numm.',
 'cantmove-titleprotected' => "Dir kënnt keng Säit op dës Plaz réckelen, well deen neien Titel fir d'Uleeë gespaart ass.",
-'talkexists' => "D'Säit selwer gouf erfollegräich geréckelt, mä d'Diskussiounssäit konnt net mat eriwwergeholl gi well et schonns eng ënner deem neien Titel gëtt. W.e.g. setzt dës manuell zesummen.",
+'talkexists' => "D'Säit selwer gouf geréckelt, mä d'Diskussiounssäit konnt net mat eriwwergeholl gi well et schonn eng ënner deem neien Titel gëtt. W.e.g. setzt dës manuell zesummen.",
 'movedto' => 'geréckelt op',
 'movetalk' => 'Déi associéiert Diskussiounssäit matréckelen',
 'move-subpages' => 'Ënnersäite (bis zu $1) réckelen',
@@ -2815,7 +2818,7 @@ Sicht Iech w.e.g. en aneren Numm.',
 
 Fir eng Säit z'exportéieren, gitt den Titel an d'Textkëscht heidrënner an, een Titel pro Linn, a wielt aus op Dir nëmmen déi aktuell Versioun oder all Versioune mam ganzen Historique exportéiere wëllt.
 
-Wann nëmmen déi aktuell Versioun exportéiert soll ginn, kënnt Dir och e Link benotze wéi z.B [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] fir d'\"[[{{MediaWiki:Mainpage}}]]\".",
+Wann nëmmen déi aktuell Versioun exportéiert soll ginn, kënnt Dir och e Link benotze wéi z. B. [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] fir d'\"[[{{MediaWiki:Mainpage}}]]\".",
 'exportall' => 'All Säiten Exportéieren',
 'exportcuronly' => 'Nëmmen déi aktuell Versioun exportéieren an net de ganzen Historique',
 'exportnohistory' => "----
@@ -2860,7 +2863,7 @@ $2',
 'thumbnail_invalid_params' => 'Ongëlteg Miniatur-Parameter',
 'thumbnail_dest_directory' => 'Den Zilepertoire konnt net ugeluecht ginn.',
 'thumbnail_image-type' => 'Bildtyp gëtt net ënnerstëtzt',
-'thumbnail_gd-library' => "D'Konfiguratioun vun der GD-Bibliothéik (GD library) ass net komplett: D'Fonctioun $1 feelt",
+'thumbnail_gd-library' => "D'Konfiguratioun vun der GD-Bibliothéik (GD library) ass net komplett: D'Funktioun $1 feelt",
 'thumbnail_image-missing' => 'De Fichier schengt ze feelen: $1',
 
 # Special:Import
@@ -2876,13 +2879,13 @@ All Transwiki-Import-Aktioune ginn am [[Special:Log/import|Import-Logbuch]] prot
 'import-interwiki-namespace' => 'Zil-Nummraum:',
 'import-upload-filename' => 'Numm vum Fichier:',
 'import-comment' => 'Bemierkung:',
-'importtext' => 'Exportéiert de Fichier w.e.g vun der Source-Wiki mat der [[Special:Export|Export-Fonctioun]].
+'importtext' => 'Exportéiert de Fichier w.e.g. vun der Source-Wiki mat der [[Special:Export|Export-Funktioun]].
 Späichert en op Ärem Computer of a luet en hei nees erop.',
 'importstart' => 'Importéier Säiten …',
 'import-revision-count' => '$1 {{PLURAL:$1|Versioun|Versiounen}}',
 'importnopages' => "Et gëtt keng Säiten fir z'importéieren.",
 'imported-log-entries' => "$1 {{PLURAL:$1|Entrée|Entréeën}} an d'Logbuch importéiert.",
-'importfailed' => 'Importatioun huet net fonctionnéiert: <nowiki>$1</nowiki>',
+'importfailed' => 'Importatioun huet net funktionéiert: <nowiki>$1</nowiki>',
 'importunknownsource' => 'Onbekannt Importquell',
 'importcantopen' => 'De Fichier dee sollt importéiert gi konnt net opgemaach ginn',
 'importbadinterwiki' => 'Falschen Interwiki-Link',
@@ -2891,9 +2894,9 @@ Späichert en op Ärem Computer of a luet en hei nees erop.',
 'importhistoryconflict' => 'Et gëtt Konflikter am Historique vun de Versiounen, (méiglecherweis gouf dës Säit virdrun importéiert).',
 'importnosources' => 'Fir den Transwiki-Import si keng Quellen definéiert an et ass net méiglech fir Säite mat alle Versiounen aus dem Transwiki-Tëschespäicher eropzelueden.',
 'importnofile' => 'Et gouf keen importéierte Fichier eropgelueden',
-'importuploaderrorsize' => "D'Eropluede vum importéierte Fichier huet net fonctionnéiert. De Fichier ass méi grouss wéi maximal erlaabt.",
+'importuploaderrorsize' => "D'Eropluede vum importéierte Fichier huet net funktionéiert. De Fichier ass méi grouss wéi maximal erlaabt.",
 'importuploaderrorpartial' => "D'Eropluede vum Fichier huet net geklappt. De Fichier gouf nëmmen deelweis eropgelueden.",
-'importuploaderrortemp' => "D'Eropluede vum Fichier huet net fonctionnéiert. En temporäre Repertoire feelt.",
+'importuploaderrortemp' => "D'Eropluede vum Fichier huet net funktionéiert. En temporäre Repertoire feelt.",
 'import-parse-failure' => 'Feeler bei engem XML-Import',
 'import-noarticle' => "Keng Säit fir z'importéieren!",
 'import-nonewrevisions' => "All d'Versioune goufe scho virdrunn importéiert.",
@@ -2987,7 +2990,7 @@ Späichert en op Ärem Computer of a luet en hei nees erop.',
 'tooltip-save' => 'Ännerunge späicheren',
 'tooltip-preview' => 'Kuckt är Ännerungen ouni ofzespäicheren, Benotzt dëst w.e.g. virum späicheren!',
 'tooltip-diff' => 'Weist wéi eng Ännerungen Dir beim Text gemaach hutt.',
-'tooltip-compareselectedversions' => "D'Ënnerscheeder op dëser Säit tëschent den zwou gewielte Versioune weisen.",
+'tooltip-compareselectedversions' => "D'Ënnerscheeder op dëser Säit tëscht den zwou gewielte Versioune weisen.",
 'tooltip-watch' => 'Dës Säit op Är Iwwerwaachungslëscht bäisetzen',
 'tooltip-watchlistedit-normal-submit' => 'Säiten erofhuelen',
 'tooltip-watchlistedit-raw-submit' => 'Iwwerwaachungslëscht aktualiséieren',
@@ -2998,6 +3001,7 @@ Späichert en op Ärem Computer of a luet en hei nees erop.',
 Erlaabt et e Grond an de Resumé derbäizesetzen.',
 'tooltip-preferences-save' => 'Astellunge späicheren',
 'tooltip-summary' => 'Gitt e kuerze Resumé an',
+'tooltip-iwiki' => '$1 - $2',
 
 # Stylesheets
 'common.css' => "/* Dës CSS huet nëmmen Afloss op de Skin ''Chick''  */",
@@ -3095,7 +3099,7 @@ Dëst wahrscheinlech duerch en externe Link den op der schwaarzer Lëscht (black
 'markedaspatrollederrortext' => 'Dir musst eng Säitenännerung auswielen.',
 'markedaspatrollederror-noautopatrol' => 'Dir däerft Är eegen Ännerungen net als nogekuckt markéieren.',
 'markedaspatrollednotify' => 'Dës Ännerung vu(n) $1 gouf als nogekuckt markéiert.',
-'markedaspatrollederrornotify' => 'Markéieren als kontrolléiert huet net fonctionnéiert.',
+'markedaspatrollederrornotify' => 'Markéieren als kontrolléiert huet net funktionéiert.',
 
 # Patrol log
 'patrol-log-page' => 'Logbuch vun den iwwerkuckte Versiounen',
@@ -3152,7 +3156,7 @@ Duerch d'Opmaache vum Fichier kann Äre System beschiedegt ginn.",
 'noimages' => 'Keng Biller fonnt.',
 'ilsubmit' => 'Sichen',
 'bydate' => 'no Datum',
-'sp-newimages-showfrom' => 'Nei Biller weisen, ugefaangen den $1 ëm $2',
+'sp-newimages-showfrom' => 'Nei Biller weisen, ugefaangen de(n) $1 ëm $2',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'seconds' => '{{PLURAL:$1|enger Sekonn|$1 Sekonnen}}',
@@ -3355,7 +3359,7 @@ Déi aner sinn am Standard verstoppt.
 'exif-lens' => 'Objektiv dat benotzt gouf',
 'exif-serialnumber' => 'Seriennummer vun der Kamera',
 'exif-cameraownername' => 'Besëtzer vun der Kamera',
-'exif-label' => 'Etiquette',
+'exif-label' => 'Etikett',
 'exif-datetimemetadata' => 'Datum vun der leschter Ännerung vun de Metadaten',
 'exif-nickname' => 'Informellen Numm vum Bild',
 'exif-rating' => 'Bewäertung (vu 5)',
@@ -3447,7 +3451,7 @@ Déi aner sinn am Standard verstoppt.
 # Flash modes
 'exif-flash-fired-0' => 'Ouni Blëtz',
 'exif-flash-fired-1' => 'mat Blëtz',
-'exif-flash-return-0' => "keng Fonctioun fir d'Reflexioun vum Blëtz festzestellen",
+'exif-flash-return-0' => "keng Funktioun fir d'Reflexioun vum Blëtz festzestellen",
 'exif-flash-return-2' => 'keng Reflexioun vum Blëtz festgestallt',
 'exif-flash-return-3' => 'Reflexioun vum Blëtz festgestallt',
 'exif-flash-mode-1' => 'erzwongene Blëtz',
@@ -3520,7 +3524,7 @@ Déi aner sinn am Standard verstoppt.
 'exif-gpsaltitude-above-sealevel' => '$1 {{plural:$1|Meter|Meter}} iwwer dem Niveau vum Mier',
 'exif-gpsaltitude-below-sealevel' => '$1 {{plural:$1|Meter|Meter}} ënner dem Niveau vum Mier',
 
-'exif-gpsstatus-a' => 'Miessung am gaang',
+'exif-gpsstatus-a' => 'Miessung am Gaang',
 'exif-gpsstatus-v' => 'Interoperabilitéit vu der Miessung',
 
 'exif-gpsmeasuremode-2' => '2-dimensional Miessung',
@@ -3656,13 +3660,13 @@ Dëse Confirmatiounscode leeft den $4 of.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Interwiki-Abannung ass ausgeschalt]',
 'scarytranscludefailed' => "[D'Siche no der Schabloun fir $1 huet net funktionéiert]",
-'scarytranscludefailed-httpstatus' => "[D'Oprufe vun der Schabloun $1: HTTP $2 huet net fonctionnéiert]",
+'scarytranscludefailed-httpstatus' => "[D'Opruffe vun der Schabloun $1: HTTP $2 huet net funktionéiert]",
 'scarytranscludetoolong' => "[D'URL ass ze laang]",
 
 # Delete conflict
-'deletedwhileediting' => "'''Opgepasst''': Dës Säit gouf geläscht nodeems datt dir ugefaangen hutt se z'änneren!",
-'confirmrecreate' => "De Benotzer [[User:$1|$1]] ([[User talk:$1|Diskussioun]]) huet dës Säit geläscht, nodeems datt där ugefaangen hutt drun ze schaffen. D'Begrënnung war: ''$2'' Bestätegt w.e.g., datt Dir dës Säit wierklech erëm nei opmaache wëllt.",
-'confirmrecreate-noreason' => 'De Benotzer [[User:$1|$1]] ([[User talk:$1|Diskussioun]]) huet dës Säit geläscht, nodeems datt Dir ugefaangen hutt drun ze schaffen. Confirméiert w.e.g., datt Dir dës Säit wierklech erëm nei opmaache wëllt.',
+'deletedwhileediting' => "'''Opgepasst''': Dës Säit gouf geläscht nodeem s datt dir ugefaangen hutt se z'änneren!",
+'confirmrecreate' => "De Benotzer [[User:$1|$1]] ([[User talk:$1|Diskussioun]]) huet dës Säit geläscht, nodeem s datt där ugefaangen hutt drun ze schaffen. D'Begrënnung war: ''$2'' Bestätegt w.e.g., datt Dir dës Säit wierklech erëm nei opmaache wëllt.",
+'confirmrecreate-noreason' => 'De Benotzer [[User:$1|$1]] ([[User talk:$1|Diskussioun]]) huet dës Säit geläscht, nodeem s datt Dir ugefaangen hutt drun ze schaffen. Confirméiert w.e.g., datt Dir dës Säit wierklech erëm nei opmaache wëllt.',
 'recreate' => 'Erëm uleeën',
 
 # action=purge
@@ -3703,7 +3707,7 @@ Dëse Confirmatiounscode leeft den $4 of.',
 # Live preview
 'livepreview-loading' => 'Lueden...',
 'livepreview-ready' => 'Lueden … Fäerdeg!',
-'livepreview-failed' => "Live-Preview huet net fonctionéiert! Benotzt w.e.g. d'Fonctioun ''Kucken ouni ofzespäicheren''.",
+'livepreview-failed' => "Live-Preview huet net funktionéiert! Benotzt w.e.g. d'Funktioun ''Kucken ouni ofzespäicheren''.",
 'livepreview-error' => "Verbindung net méiglech: $1 „$2“.
 Benotzt w.e.g. d'Funktioun fir déi nach net gespäichert Versioun ze kucken (Kucken ouni ofzespäicheren).",
 
@@ -3716,7 +3720,7 @@ Benotzt w.e.g. d'Funktioun fir déi nach net gespäichert Versioun ze kucken (Ku
 'watchlistedit-noitems' => 'Är Iwwerwaachungslëscht ass eidel.',
 'watchlistedit-normal-title' => 'Iwwerwaachungslëscht änneren',
 'watchlistedit-normal-legend' => 'Säite vun der Iwwerwaachungslëscht erofhuelen',
-'watchlistedit-normal-explain' => 'D\'Säite vun Ã¤rer Iwwerwaachungslëscht ginn drënner gewisen.
+'watchlistedit-normal-explain' => 'D\'Säite vun Ã\84rer Iwwerwaachungslëscht ginn drënner gewisen.
 Fir eng Säit erofzehuelen, klickt op d\'Haischen niewendrun a klickt duerno op "{{int:Watchlistedit-normal-submit}}".
 Dir kënnt och [[Special:EditWatchlist/raw|déi net formatéiert Iwwerwaachungslëscht änneren]].',
 'watchlistedit-normal-submit' => 'Säiten erofhuelen',
@@ -3742,7 +3746,7 @@ Dir kënnt och [[Special:EditWatchlist|de Standard Editeur benotzen]].",
 
 # Core parser functions
 'unknown_extension_tag' => 'Onbekannten Erweiderungs-Tag "$1"',
-'duplicate-defaultsort' => '\'\'\'Opgepasst:\'\'\' Den Zortéierschlëssel "$2" iwwerschreift de viregen Standard-Zortéierschlëssel "$1".',
+'duplicate-defaultsort' => '\'\'\'Opgepasst:\'\'\' Den Zortéierschlëssel "$2" iwwerschreift de virege Standard-Zortéierschlëssel "$1".',
 
 # Special:Version
 'version' => 'Versioun',
@@ -3761,11 +3765,11 @@ Dir kënnt och [[Special:EditWatchlist|de Standard Editeur benotzen]].",
 'version-hook-subscribedby' => 'Opruff vum',
 'version-version' => '(Versioun $1)',
 'version-license' => 'Lizenz',
-'version-poweredby-credits' => "Dës Wiki fonctionnéiert mat '''[//www.mediawiki.org/ MediaWiki]''', Copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Dës Wiki funktionéiert mat '''[//www.mediawiki.org/ MediaWiki]''', Copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'anerer',
 'version-poweredby-translators' => 'translatewiki.net Iwwersetzer',
 'version-credits-summary' => "Mir soen dëse Persoune 'Merci' fir hir Mataarbecht u [[Special:Version|MediaWiki]].",
-'version-license-info' => "MediaWiki ass fräi Software; Dir kënnt se weiderginn an/oder s'änneren ënner de Bedingungen vun der GNU-General Public License esou wéi se vun der Free Softare Foundation publizéiert ass; entweder ënner der Versioun 2 vun der Lizenz, oder (no Ärem Choix) enger spéiderer Versioun.
+'version-license-info' => "MediaWiki ass fräi Software; Dir kënnt se weiderginn an/oder s'änneren ënner de Bedingunge vun der GNU-General Public License esou wéi se vun der Free Softare Foundation publizéiert ass; entweder ënner der Versioun 2 vun der Lizenz, oder (no Ärem Choix) enger spéiderer Versioun.
 
 MediaWiki gëtt verdeelt an der Hoffnung datt se nëtzlech ass, awer OUNI IERGENDENG GARANTIE; ouni eng implizit Garantie vu Commercialisatioun oder Eegnung fir e bestëmmte Gebrauch. Kuckt d'GPL General Public License fir méi Informatiounen.
 
@@ -3825,11 +3829,11 @@ Dir misst eng [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun der GNU General Public
 
 # External image whitelist
 'external_image_whitelist' => "#Dës Zeil genee esou loosse wéi se ass<pre>
-#Schreift hei ënnendrënner Fragmenter vu regulären Ausdréck (just den Deel zwëschen den // aginn)
+#Schreift hei ënnendrënner Fragmenter vu regulären Ausdréck (just den Deel zwëscht den // aginn)
 #Dës gi mat den URLe vu Biller aus externe Quelle verglach
 #Wann d'Resultat positiv ass, gëtt d'Bild gewisen, soss gëtt d'Bild just als Link gewisen
 #Zeilen, déi mat engem # ufänken, ginn als Bemierkung behandelt
-#Et gëtt en Ënnerscheed tëschent groussen a klenge Buschtawe gemaach
+#Et gëtt en Ënnerscheed tëscht groussen a klenge Buschtawe gemaach
 
 #All regulär Ausdréck ënner dëser Zeil androen. Dës Zeil genee esou loosse wéi se ass</pre>",
 
@@ -3843,7 +3847,10 @@ Dir misst eng [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun der GNU General Public
 'tags-tag' => 'Numm vun der Markéierung',
 'tags-display-header' => 'Opzielungen op den Ännerungslëschten',
 'tags-description-header' => 'Ganz Beschreiwung vun der Bedeitung',
+'tags-active-header' => 'Aktiv?',
 'tags-hitcount-header' => 'Markéiert Ännerungen',
+'tags-active-yes' => 'Jo',
+'tags-active-no' => 'Neen',
 'tags-edit' => 'änneren',
 'tags-hitcount' => '$1 {{PLURAL:$1|Ännerung|Ännerungen}}',
 
@@ -3937,7 +3944,7 @@ Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gë
 'feedback-error3' => 'Feeler: Keng Äntwert vum API',
 'feedback-thanks' => 'Merci! Äre Feedback gouf op der Säit "[$2 $1]" gespäichert.',
 'feedback-close' => 'Fäerdeg',
-'feedback-bugcheck' => 'Super! Kuckt just no ob et net ee vun de schonns [$1 bekannte Feeler] ass.',
+'feedback-bugcheck' => 'Super! Kuckt just no ob et net ee vun de scho [$1 bekannte Feeler] ass.',
 'feedback-bugnew' => 'Ech hunn et nogekuckt. Den neie Bug mellen',
 
 # Search suggestions
@@ -3954,7 +3961,7 @@ Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gë
 'api-error-duplicate-popup-title' => '{{PLURAL:$1|Duebele Fichier|Duebel Fichieren}}',
 '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-fetchfileerror' => 'Interne Feeler: beim Opruffe vum Fichier huet eppes net funktionéiert.',
 'api-error-fileexists-forbidden' => 'E Fichier mam Numm "$1" gëtt et schonn an e kann net iwwerschriwwe ginn.',
 'api-error-fileexists-shared-forbidden' => 'E Fichier mam Numm "$1" gëtt et schonn am gedeelte Repertoire an e kann net iwwerschriwwe ginn.',
 'api-error-file-too-large' => 'De Fichier deen Dir geschéckt hutt war ze grouss.',
@@ -3971,7 +3978,7 @@ Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gë
 'api-error-missingresult' => "Interne Feeler: et konnt net festgestallt ginn ob d'Kopie eppes ginn ass.",
 'api-error-mustbeloggedin' => 'Dir musst ageloggt si fir Fichieren eropzelueden.',
 'api-error-mustbeposted' => 'An dëser Software ass e Feeler; se benotzt net déi richteg HTTP-Method.',
-'api-error-noimageinfo' => "D'Eroplueden huet fonctionnéiert, awer de Server huet eis keng Informatiounen iwwer de Fichier ginn.",
+'api-error-noimageinfo' => "D'Eroplueden huet funktionéiert, awer de Server huet eis keng Informatiounen iwwer de Fichier ginn.",
 'api-error-nomodule' => "Interne Feeler: de Modul fir d'Eroplueden ass net agestallt.",
 'api-error-ok-but-empty' => 'Interne Feeler: keng Äntwert vum Server.',
 'api-error-overwrite' => "D'Iwwerschreiwe vun engem Fichier ass net erlaabt.",
@@ -4005,7 +4012,7 @@ Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gë
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|Sekonn|Sekonnen}}',
 'limitreport-walltime' => 'Echtzäitnotzung',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|Sekonn|Sekonnen}}',
-'limitreport-postexpandincludesize-value' => '$1/$2 Byten',
-'limitreport-templateargumentsize-value' => '$1/$2 Byten',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|Byte|Byten}}',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|Byte|Byten}}',
 
 );
index f1ff6cf..673991c 100644 (file)
@@ -1573,7 +1573,7 @@ teisės",
 'rc_categories_any' => 'Bet kokia',
 'rc-change-size-new' => '$1 {{PLURAL:$1|baitas|baitai|baitų}} po pakeitimo',
 'newsectionsummary' => '/* $1 */ naujas skyrius',
-'rc-enhanced-expand' => 'Rodyti detales (reikia JavaScript)',
+'rc-enhanced-expand' => 'Rodyti detales',
 'rc-enhanced-hide' => 'Slėpti detales',
 'rc-old-title' => 'iš pradžių sukurtas kaip " $1 "',
 
index 61c2665..877054d 100644 (file)
@@ -63,7 +63,7 @@ $messages = array(
 'tog-usenewrc' => "Grupēt izmaiņas pēc lapas pēdējās izmaiņās un uzraugāmo lapu sarakstā  (izmanto ''JavaScript'')",
 'tog-numberheadings' => 'Automātiski numurēt virsrakstus',
 'tog-showtoolbar' => 'Rādīt rediģēšanas rīkjoslu',
-'tog-editondblclick' => "Atvērt rediģēšanas lapu ar dubultklikšķi (izmanto ''JavaScript'')",
+'tog-editondblclick' => 'Atvērt lapu rediģēšanai ar dubultklikšķi',
 'tog-editsection' => 'Rādīt sadaļām izmainīšanas saiti "[labot]"',
 'tog-editsectiononrightclick' => "Atvērt sadaļas rediģēšanas lapu, uzklikšķinot ar labo peles pogu uz sadaļas virsraksta (izmanto ''JavaScript'')",
 'tog-showtoc' => 'Parādīt satura rādītāju (lapām, kurās ir vairāk par 3 virsrakstiem)',
@@ -196,6 +196,7 @@ $messages = array(
 'newwindow' => '(atveras jaunā logā)',
 'cancel' => 'Atcelt',
 'moredotdotdot' => 'Vairāk...',
+'morenotlisted' => 'Šis saraksts nav pilnīgs.',
 'mypage' => 'Lapa',
 'mytalk' => 'Diskusijas',
 'anontalk' => 'Šīs IP adreses diskusija',
@@ -296,7 +297,7 @@ $1',
 # 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).
 'aboutsite' => 'Par {{grammar:akuzatīvs|{{SITENAME}}}}',
 'aboutpage' => 'Project:Par',
-'copyright' => 'Saturs ir pieejams saskaņā ar $1.',
+'copyright' => 'Saturs ir pieejams saskaņā ar $1, ja vien nav norādīts citādi.',
 'copyrightpage' => '{{ns:project}}:Autortiesības',
 'currentevents' => 'Aktualitātes',
 'currentevents-url' => 'Project:Aktualitātes',
@@ -376,6 +377,10 @@ Derīgo īpašo lapu saraksts atrodas te: [[Special:SpecialPages|{{int:specialpa
 # General errors
 'error' => 'Kļūda',
 'databaseerror' => 'Datu bāzes kļūda',
+'databaseerror-textcl' => 'Datu bāzes vaicājuma kļūda.',
+'databaseerror-query' => 'Vaicājums: $1',
+'databaseerror-function' => 'Funkcija: $1',
+'databaseerror-error' => 'Kļūda: $1',
 'laggedslavemode' => 'Uzmanību: Iespējams, šajā lapā nav redzami nesen izdarītie papildinājumi.',
 'readonly' => 'Datubāze bloķēta',
 'enterlockreason' => 'Ievadiet bloķēšanas iemeslu, ieskaitot aplēses, kad bloķēšana tiks beigta.',
@@ -420,6 +425,12 @@ Vaicājums: $2',
 'protectedinterface' => 'Šī lapa satur programmatūras interfeisā lietotu tekstu un ir bloķēta pret izmaiņām, lai pasargātu no bojājumiem.',
 'editinginterface' => "'''Brīdinājums:''' Tu izmaini lapu, kuras saturu izmanto wiki programmatūras lietotāja saskarnē (''interfeisā''). Šīs lapas izmaiņas ietekmēs lietotāja saskarni citiem lietotājiem. Pēc modificēšanas, šīs izmaiņas būtu lietderīgi pievienot arī [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], kas ir MediaWiki lokalizēšanas projekts.",
 'namespaceprotected' => "Tev nav atļaujas izmainīt lapas, kas atrodas '''$1''' ''namespacē''.",
+'customcssprotected' => 'Jums nav tiesību rediģēt šo CSS lapu, jo tā satur cita lietotāja personiskos iestatījumus.',
+'customjsprotected' => 'Jums nav tiesību rediģēt šo JavaScript lapu, jo tā satur cita lietotāja personiskos iestatījumus.',
+'mycustomcssprotected' => 'Jums nav tiesību rediģēt šo CSS lapu.',
+'mycustomjsprotected' => 'Jums nav tiesību rediģēt šo JavaScript lapu.',
+'myprivateinfoprotected' => 'Jums nav tiesību rediģēt savu privāto informāciju.',
+'mypreferencesprotected' => 'Jums nav tiesību rediģēt savus iestatījumus.',
 'ns-specialprotected' => 'Nevar izmainīt īpašās lapas.',
 'titleprotected' => "Šī lapa ir aizsargāta pret izveidošanu. To aizsargāja [[User:$1|$1]].
 Norādītais iemesls bija ''$2''.",
@@ -467,20 +478,26 @@ Vari turpināt to izmantot anonīmi, vari <span class='plainlinks'>[$1 atgriezti
 'gotaccount' => "Tev jau ir lietotājvārds? '''$1'''!",
 'gotaccountlink' => 'Dodies iekšā',
 'userlogin-resetlink' => 'Esat aizmirsis savu pieslēgšanās informāciju?',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Palīdzība ar pieslēgšanos]]',
+'createacct-join' => 'Ievadiet savu informāciju zemāk.',
+'createacct-another-join' => 'Ievadiet jaunā konta informāciju zemāk.',
 'createacct-emailrequired' => 'E-pasta adrese',
 'createacct-emailoptional' => 'E-pasta adrese (nav obligāta)',
 'createacct-email-ph' => 'Ievadiet savu e-pasta adresi',
 'createacct-another-email-ph' => 'Ievadiet e-pasta adresi',
-'createaccountmail' => 'pa e-pastu',
+'createaccountmail' => 'Izmantot nejauši ģenerētu pagaidu paroli un nosūtīt to uz norādīto e-pasta adresi',
 'createacct-realname' => 'Īstais vārds (nav obligāts)',
 'createaccountreason' => 'Iemesls:',
 'createacct-reason' => 'Iemesls',
 'createacct-reason-ph' => 'Kāpēc jūs veidojat citu kontu',
 'createacct-captcha' => 'Drošības pārbaude',
+'createacct-imgcaptcha-ph' => 'Ievadiet tekstu, kuru jūs redzat augstāk',
 'createacct-submit' => 'Izveidot savu kontu',
 'createacct-another-submit' => 'Izveidot citu lietotāja kontu',
+'createacct-benefit-heading' => '{{SITENAME}} darbojas ar tādu cilvēku kā jūs ieguldījumu.',
 'createacct-benefit-body1' => '{{PLURAL:$1|labojums|labojumi}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|lapa|lapas}}',
+'createacct-benefit-body3' => '{{PLURAL:$1|nesens dalībnieks|neseni dalībnieki}}',
 'badretype' => 'Tevis ievadītās paroles nesakrīt.',
 'userexists' => 'Ievadītais lietotājvārds jau ir aizņemts.
 Lūdzu, izvēlieties citu vārdu.',
@@ -2682,7 +2699,7 @@ Pārējie lauki, pēc noklusējuma, būs paslēpti.
 'exif-devicesettingdescription' => 'Ierīces uzstādījumu apraksts',
 'exif-subjectdistancerange' => 'Objekta attāluma diapazons',
 'exif-imageuniqueid' => 'Unikālais attēla ID',
-'exif-gpsversionid' => 'GPS taga versija',
+'exif-gpsversionid' => 'GPS iezīmes versija',
 'exif-gpslatituderef' => 'Ziemeļu vai dienvidu platums',
 'exif-gpslatitude' => 'Platums',
 'exif-gpslongituderef' => 'Austrumu vai rietumu garums',
@@ -3097,11 +3114,13 @@ Var arī lietot [[Special:EditWatchlist|standarta izmainīšanas lapu]].',
 'intentionallyblankpage' => 'Šī lapa ar nodomu ir atstāta tukša.',
 
 # Special:Tags
-'tags' => 'Derīgi izmaiņu tagi',
-'tag-filter' => '[[Special:Tags|Tagu]] filtrs:',
+'tags' => 'Derīgas izmaiņu iezīmes',
+'tag-filter' => '[[Special:Tags|Iezīmju]] filtrs:',
 'tag-filter-submit' => 'Filtrs',
-'tags-title' => 'Tagi',
-'tags-tag' => 'Taga nosaukums',
+'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Iezīme|Iezīmes}}]]: $2)',
+'tags-title' => 'Iezīmes',
+'tags-intro' => 'Šajā lapā uzskaitītas iezīmes, ar kurām programmatūra var atzīmēt labojumus, un to nozīme.',
+'tags-tag' => 'Iezīmes nosaukums',
 'tags-display-header' => 'Izmainīto sarakstu izskats',
 'tags-description-header' => 'Nozīmes pilns apraksts',
 'tags-hitcount-header' => 'Iezīmētās izmaiņas',
@@ -3122,7 +3141,7 @@ Var arī lietot [[Special:EditWatchlist|standarta izmainīšanas lapu]].',
 
 # Database error messages
 'dberr-header' => 'Šim viki ir problēma',
-'dberr-problems' => 'Atvainojiet! 
+'dberr-problems' => 'Atvainojiet!
 Šai vietnei ir radušās tehniskas problēmas.',
 'dberr-again' => 'Uzgaidiet dažas minūtes un pārlādējiet šo lapu.',
 'dberr-info' => '(Nevar sazināties ar datubāzes serveri: $1)',
@@ -3199,6 +3218,7 @@ Var arī lietot [[Special:EditWatchlist|standarta izmainīšanas lapu]].',
 'api-error-uploaddisabled' => 'Augšupielāde šajā wiki  ir atslēgta.',
 
 # Limit report
+'limitreport-title' => 'Parsētāja profilēšanas dati:',
 'limitreport-postexpandincludesize-value' => '$1/$2 baiti',
 'limitreport-templateargumentsize-value' => '$1/$2 baiti',
 
index 695dbdf..187fbcb 100644 (file)
@@ -3418,8 +3418,7 @@ $5
 
 # Database error messages
 'dberr-header' => 'ऐ विकीमे एकटा समस्या अछि',
-'dberr-problems' => 'दुखी छी!
-ई जालस्थल तकनीकी समस्या अनुभव कऽ अछि।',
+'dberr-problems' => 'दुखी छी! ई जालस्थल तकनीकी समस्या अनुभव कऽ अछि।',
 'dberr-again' => 'किछु काल बाट ताकू आ फेरसँ भारित करू।',
 'dberr-info' => '(दत्तनिधि वितरककेँ सम्पर्क नै कऽ सकल: $1)',
 'dberr-usegoogle' => 'ऐ बीचमे अहाँ गूगलसँ खोज कऽ सकै छी।',
index 9e0818f..5e71254 100644 (file)
@@ -224,12 +224,12 @@ $messages = array(
 'tog-hidepatrolled' => "Hanitrika ny fanovana voaara-maso ao amin'ny fanovana farany",
 'tog-newpageshidepatrolled' => "Hanitsika ny pejy voaara-maso ao amin'ny pejy vaovao",
 'tog-extendwatchlist' => 'Hanitatra ny lisitra fanaraham-pejy mba haneho ny fanovana rehetra fa tsy ny vaovao indrindra fotsiny',
-'tog-usenewrc' => "Hamondrona ny fanovana araka ny pejy ao amin'ny fanovàna farany ary ao amin'ny pejy arahana (mila Javascript)",
+'tog-usenewrc' => "Hamondrona ny fanovana araky ny pejy ao amin'ny fanovana farany ary ao amin'ny lisitry ny pejy arahana",
 'tog-numberheadings' => 'Asio laharany ny lohateny',
-'tog-showtoolbar' => 'Asehoy ny edit toolbar (mila JavaScript)',
-'tog-editondblclick' => 'Ovay ny pejy rehefa voatsindry indroa misesy ny totozy (mila JavaScript)',
+'tog-showtoolbar' => 'Haneho ny toolbar fanovana',
+'tog-editondblclick' => "Hanova pejy amin'ny alalan'ny tsindrim-boalavo roa misesy",
 'tog-editsection' => "Ataovy mety ny fanovana fizaràna amin'ny alalan'ny rohy [hanova]",
-'tog-editsectiononrightclick' => "Ovay ny fizaràna rehefa manindry ny bokotra havanana amin'ny totozy eo amin'ny lohateny hoe fizaràna (mila JavaScript)",
+'tog-editsectiononrightclick' => "Hampiasa ny fanovana fizarana amin'ny tsindry havanana eo amin'ny lohatenim-pizarana.",
 'tog-showtoc' => "Asehoy ny fanoroan-takila (ho an'ny pejy misy lohateny mihoatra ny 3)",
 'tog-rememberpassword' => "Tadidio ny tenimiafiko eto amin'ity solosaina ity (mandritry ny andro $1 fara-fahabetsany){{PLURAL:}}",
 'tog-watchcreations' => 'Hanaraka ny pejy foronoko ary ny rakitra ampidiriko',
@@ -247,7 +247,7 @@ $messages = array(
 'tog-shownumberswatching' => "Asehoy ny isan'ny mpikambana manara-maso ny pejy",
 'tog-oldsig' => "Topi-mason'ny sonia :",
 'tog-fancysig' => 'Sonia tsotra (tsy misy rohy)',
-'tog-uselivepreview' => 'Ampesao ny topi-maso maikamaika (mila Javascript) (mbola am-panandramana)',
+'tog-uselivepreview' => 'Hampiasa ny topi-maso malakay (andramana)',
 'tog-forceeditsummary' => 'Teneno ahy ra tsy nametraka ny ambangovangony',
 'tog-watchlisthideown' => "Tsy ampiseho anatin'ny pejy fanaraha-maso ny zavatra nosoratako",
 'tog-watchlisthidebots' => "Asitriho amin'ny lisitro ny fanovàna nataon'ny rôbô",
@@ -259,6 +259,8 @@ $messages = array(
 'tog-diffonly' => "Aza ampiseho ny voatonin'ny pejy eo amban'ny diff",
 'tog-showhiddencats' => 'Asehoy ny sokajy misitrika',
 'tog-norollbackdiff' => 'Aza aseho ny diff rehefa avy namafa fanàvana iray',
+'tog-useeditwarning' => 'Ampitandremo aho raha miala sady mamela pejy ovaiko nefa tsy notahiriziko',
+'tog-prefershttps' => 'Fanohizana azo antoka foana no ampaisaina rehefa tafiditra',
 
 'underline-always' => 'Foana foana',
 'underline-never' => 'Tsy tsipihina mihitsy',
@@ -359,7 +361,7 @@ $messages = array(
 'newwindow' => '(sokafy anaty takila hafa)',
 'cancel' => 'Aoka ihany',
 'moredotdotdot' => 'Tohiny...',
-'morenotlisted' => 'Tohiny tsy voalisitra...',
+'morenotlisted' => 'Tsy feno ity lisitra ity.',
 'mypage' => 'Pejy',
 'mytalk' => 'Dinika',
 'anontalk' => "Resaka ho an'io adiresy IP io",
@@ -393,6 +395,7 @@ $messages = array(
 'namespaces' => 'Valam-pejy',
 'variants' => "Ny ''skin'' Voasintona",
 
+'navigation-heading' => 'Meny fitetezana',
 'errorpagetitle' => 'Tsy fetezana',
 'returnto' => "Hiverina any amin'ny $1.",
 'tagline' => "Avy amin'i {{SITENAME}}",
@@ -542,6 +545,12 @@ Mitaky version $1-n'i MediaWiki",
 # General errors
 'error' => 'Tsy mety',
 'databaseerror' => "Tsy fetezana eo amin'ny toby",
+'databaseerror-text' => "Nisy hadisoana banky angona nitranga.
+Mety maneho baogy ao amin'ny rindrankajy izany.",
+'databaseerror-textcl' => 'Nisy hadisoana banky angona nitranga.',
+'databaseerror-query' => 'Hataka: $1',
+'databaseerror-function' => 'Lefa: $1',
+'databaseerror-error' => 'Hadisoana: $1',
 'laggedslavemode' => 'Fampitandremana: Mety ho tsy nisy fanovana vao haingana angamba io pejy io',
 'readonly' => 'Mihidy ny banky angona',
 'enterlockreason' => 'Manomeza antony hanidiana ny pejy, ahitana ny fotoana tokony hamahana izay fihidiana izay',
@@ -577,6 +586,7 @@ Mety efa nataon'ny hafa angamba ny famafàna.",
 'cannotdelete-title' => 'Tsy afaka mamafa ny pejy "$1"',
 'delete-hook-aborted' => "Famafana nofoanan'ny itatra.
 Tsy nanome fanazavana.",
+'no-null-revision' => 'Tsy nahaforona famerenana poaka aty ho an\'ny pejy "$1"',
 'badtitle' => 'Tsy mety ny lohateny',
 'badtitletext' => "Tsy mety io anaram-pejy nangatahinao io na tsy misy n'inon'inona na rohy dikan-teny vahiny misy diso tsipelina.",
 'perfcached' => "Ao amin'ny voatakona ireo data manaraka ireo ary mety tsy voavao. $1{{PLURAL:}} ihany no isan'ireo zavatra voatahiry ao amin'ny voatakona",
@@ -627,16 +637,16 @@ Ny antony nomen\'ny mpandrindra nanidy azy: "$3".',
 'virus-unknownscanner' => 'Tsy fantatra io Antivirus io :',
 
 # Login and logout pages
-'logouttext' => "'''Tafavoaka ianao ankehitriny.'''
+'logouttext' => "'''Efa tafavoaka amin'izay ianao.'''
 
-Mbola afaka mampiasa ny {{SITENAME}} ianao na dia ef anivoaka aza, na afaka <span class='plainlinks'>[$1 miverina mihiditra]</span> ianao ambanin'ny anaranao na anaram-pikambana hafa.
-Fantaro fa ny endriky ny pejy sasany dia mety mitovy amin'ny endrika nahitanao azy tamin' ianao mbola niditra tato, ho toy izany ny endri-pejy raha tsy nofafanao ny cache.",
+Fantaro fa mety mbola misy ireo pejy milaza anao fa mbola tafiditra raha tsy namafa ny pejy voatakona (cache) ianao.",
 'welcomeuser' => 'Tonga soa, $1',
 'welcomecreation-msg' => "Noforonina ny aontinao.
 Aza adin ny manova ny [[Special:Preferences|safidinao ro amin'i{{SITENAME}}]].",
 'yourname' => 'Solonanarana',
 'userlogin-yourname' => 'Anaram-pikambana',
 'userlogin-yourname-ph' => 'Atsofohy ny anaram-pikambanao',
+'createacct-another-username-ph' => 'Atsofohy ny anaram-pikambana',
 'yourpassword' => 'Tenimiafina',
 'userlogin-yourpassword' => 'Tenimiafina',
 'userlogin-yourpassword-ph' => 'Atsofohy ny tenimiafinao',
@@ -668,19 +678,23 @@ Mila manaiky cookies ianao raha te hiditra amin'ny {{SITENAME}}.",
 'gotaccountlink' => 'Midira',
 'userlogin-resetlink' => "Adinonavo ve ny antsipihan'ny fidiranao ?",
 'userlogin-resetpassword-link' => 'Hamerina ny tenimiafinao',
-'helplogin-url' => 'Fanoroana:Fidirana',
+'helplogin-url' => 'Help:Fidirana',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Fanoroana mikasika ny fidirana]]',
 'createacct-join' => 'Atsofohy eo ambany ny fampahalalana momba anao.',
+'createacct-another-join' => "Atsofohy eo ambany ny fampahalalana vaovaon'ny kaonty",
 'createacct-emailrequired' => 'Adiresy mailaka :',
 'createacct-emailoptional' => 'Adiresy mailaka (azo tsy atao) :',
 'createacct-email-ph' => 'Atsofohy ny adiresy mailakao',
-'createaccountmail' => "Hampiasa tenimiafina kisendra vonjimaika ary handefa azy mailaka any amin'ny adiresy nolazaina teo ambany",
+'createacct-another-email-ph' => 'Atsofohy ny adiresy mailaka',
+'createaccountmail' => "Hampiasa tenimiafina vonjimaika ary handefa azy eo amin'ny adiresy mailaka voalaza",
 'createacct-realname' => 'Tena anarana (azo tsy atao)',
 'createaccountreason' => 'Antony :',
 'createacct-reason' => 'Antony',
 'createacct-reason-ph' => 'Inona ny antony hamoronanao kaonty hafa',
+'createacct-captcha' => 'Fitsapana ny antoka',
 'createacct-imgcaptcha-ph' => 'Atsofohy ny teny hitanao eo ambony',
 'createacct-submit' => 'Hamorona ny kaontinao',
+'createacct-another-submit' => 'Hamorona kaonty vaovao',
 'createacct-benefit-heading' => "Olona tahaka ianao no manoratra eo amin'i {{SITENAME}}",
 'createacct-benefit-body1' => 'fanovana{{PLURAL:$1}}',
 'createacct-benefit-body2' => 'pejy{{PLURAL:$1}}',
@@ -752,11 +766,14 @@ Tokony miditra na manokatra kaonty ianao, ary ovay ny tenimiafinao dien-izao.
 
 Aza mijery ity hafatra ity ianao raha voaforona an-tsifetezana ilay kaonty io.",
 'usernamehasherror' => 'Ny anaram-pikambana dia tsy afaka manana soratra fanaovana hash.',
-'login-throttled' => "Im-betsaka loatra ianao no nanandrana tenimiafina teo amin'io kaonty io.
-Andraso kely ary andramo indray.",
+'login-throttled' => "Betsaka loatra ny andram-pidirana nataonao.
+
+Andraso $1 alohan'ny mamerina.",
 'login-abort-generic' => 'Tsy nahomby ny fanandramanao niditra',
 'loginlanguagelabel' => 'fiteny : $1',
 'suspicious-userlogout' => "Ny fangataham-pialanao dia tsy nekena satria ohatry ny nalfan'ny mpizahan-tsehatra simba izy na kasy ny proxy.",
+'createacct-another-realname-tip' => "Azo tsy atsofoka ny tena anarana.
+Raha misafidy ny hanome azy ianao, ho ampiasaina amin'ny fanehoana ny anjara asan'ilay mpikambana ilay izy.",
 
 # Email sending
 'php-mail-error-unknown' => "Hadisoana tsy fantatra tao amin'ny tao mial() an'i PHP.",
@@ -771,7 +788,7 @@ Andraso kely ary andramo indray.",
 'newpassword' => 'Tenimiafina vaovao:',
 'retypenew' => 'Avereno ampidirina ny tenimiafina vaovao:',
 'resetpass_submit' => 'Ovay ny tenimiafina ary midira',
-'changepassword-success' => 'Voasolo soa aman-tsara ny tenimiafinao ! Mampiditranao izao ankehitriny...',
+'changepassword-success' => 'Voaova soa aman-tsara ny tenimiafinao!',
 'resetpass_forbidden' => 'Tsy afaka ovaina ny tenimiafina',
 'resetpass-no-info' => "Tsy maintsy tafiditra ao amin'ny kaontinao ianao vao afaka mijery ity pejy ity.",
 'resetpass-submit-loggedin' => 'Ovay ny tenimiafina',
@@ -830,6 +847,9 @@ Tenimiafina miserana : $2',
 'resettokens-legend' => 'Famerenana ny token',
 'resettokens-tokens' => 'Token:',
 'resettokens-token-label' => '$1 (sanda ankehitriny: $2)',
+'resettokens-watchlist-token' => "Token ho an'ny fahna web (Atom/RSS) ho an'ny  [[Special:Watchlist|fanovana ny pejy ao amin'ny lisitry ny pejy arahanao]]",
+'resettokens-done' => 'Natao reset ny token',
+'resettokens-resetbutton' => 'Hanao reset ny token voafidy',
 
 # Edit page toolbar
 'bold_sample' => 'Soratra matavy',
@@ -910,7 +930,7 @@ Mety efa nakisaka angamba izy, na voafafa tamin' ianareo namaky ity pejy ity far
 'loginreqlink' => 'miditra',
 'loginreqpagetext' => 'Tokony $1 ianao raha te hijery pejy hafa.',
 'accmailtitle' => 'Lasa ny tenimiafina.',
-'accmailtext' => 'Lasa any amin\'i $2 ny tenimiafin\'i "$1".',
+'accmailtext' => "Nalefa tany amin'i $2 ny tenimiafina kisendra ho an'ny kaonty [[User talk:$1|$1]]! Azo ovaina eo amin'i ''[[Special:ChangePassword|Manova tenimiafina]]'' izany amin'ny alalan'ny fidirana.",
 'newarticle' => '(Vaovao)',
 'newarticletext' => "Mbola tsy misy ity takelaka ity koa azonao atao ny mamorona azy eto ambany. Jereo ny [[{{MediaWiki:Helppage}}|Fanoroana]] raha misy fanazavana ilainao.
 
@@ -1059,6 +1079,7 @@ Ao aorian'ny fivelarana, mety namoaka valy lava loatra angamba izy, ary tsy namp
 'expansion-depth-exceeded-category' => 'Pejy manana halalim-panitarana mihoatra',
 'expansion-depth-exceeded-warning' => 'Pejy manana halalim-panitarana mihoatra',
 'parser-unstrip-loop-warning' => 'Nahitana tondro mifolaka tsy azo vahana',
+'parser-unstrip-recursion-limit' => 'Tafahoatra ny fetra avo ny fetra recursion ($1)',
 'converter-manual-rule-error' => "Nahitana hadisoana ao amin'ny fepetra famadihana tanana ny fiteny.",
 
 # "Undo" feature
@@ -1066,6 +1087,7 @@ Ao aorian'ny fivelarana, mety namoaka valy lava loatra angamba izy, ary tsy namp
 'undo-failure' => "Tsy afaka esorina io fanovàna io : mety tsy miraikitra amin'ny fanovàna misy eo ampivoaniny ra esorina",
 'undo-norev' => 'Tsy afaka nesorina ilay fanovàna satria tsy misy na efa voafafa izy.',
 'undo-summary' => "Niala ny fanovàna $1 nataon'i [[Special:Contributions/$2|$2]] ([[User talk:$2|resaho]])",
+'undo-summary-username-hidden' => 'Namafa ny famerenana $1 nataom-pikambana afenina',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Tsy afaka manokatra kaonty ianao.',
@@ -1314,6 +1336,7 @@ ihany no miseho amin'ny vokatry ny karoka).",
 'powersearch-togglenone' => 'Tsy misy',
 'search-external' => 'Hikaroka any ivelany',
 'searchdisabled' => "Tsy nalefa ny karoka eto amin'i {{SITENAME}}. Afaka mampiasa an'i Google aloha ianao mandra-paha. Nefa fantaro fa mety ho efa lany daty ny valiny omeny.",
+'search-error' => 'Hadisoana nitranga tam-pikarohana: $1',
 
 # Preferences page
 'preferences' => 'Ny momba anao',
@@ -1345,7 +1368,7 @@ ihany no miseho amin'ny vokatry ny karoka).",
 'prefs-rendering' => 'Fampisehoana',
 'saveprefs' => 'Tehirizo',
 'resetprefs' => 'Avereno',
-'restoreprefs' => 'Averina ny reglages taloha',
+'restoreprefs' => "Hamerina ny safidy taloha (amin'ny fizarana rehetra)",
 'prefs-editing' => 'Fanovana',
 'rows' => 'Filaharana :',
 'columns' => 'Tsanganana/Tioba :',
@@ -1401,10 +1424,10 @@ Fenoy araka ny datin'ny solosainan'ny mpitsidika",
 'badsig' => 'Tsy mety io sonia io; hamarino ny kialo HTML.',
 'badsiglength' => "Lava loatra ny sonianao. {{PLURAL:$1||}}
 Tokony mba manana lohavy ambanimbany kokoa non'ny $1",
-'yourgender' => 'lahi-vavy :',
-'gender-unknown' => 'Tsy voalaza',
-'gender-male' => 'Lehilahy',
-'gender-female' => 'Vehivavy',
+'yourgender' => 'Tiana hofaritana ahoana ianao?',
+'gender-unknown' => 'Tsy tia hanome ny antsipirihany aho',
+'gender-male' => 'Manova pejy wiki izy (lehilahy)',
+'gender-female' => 'Manova pejy wiki izy (vehivavy)',
 'prefs-help-gender' => "Ankifidy : Ampiasaina mba hifanaraka amin'ny lahi-vavy. Ho sarababem-bahoaka io fampahalalàna io.",
 'email' => 'Imailaka',
 'prefs-help-realname' => "Anarana marina (afaka tsy fenoina): raha fenoinao ity dia hampiasaina hanomezana anao tambin'ny asa izay efainao eto.",
@@ -1427,7 +1450,9 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'prefs-displayrc' => 'safidim-tseho',
 'prefs-displaysearchoptions' => 'Safidin-tseho',
 'prefs-displaywatchlist' => 'Safidin-tseho',
+'prefs-tokenwatchlist' => 'Token',
 'prefs-diffs' => 'Diff',
+'prefs-help-prefershttps' => "Hihatra amin'ny fidiranao manaraka ity safidy ity.",
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'Adiresy imailaka mameno fepetra',
@@ -1451,10 +1476,10 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'userrights-no-interwiki' => "Tsy manana alalana manova ny alalan'ny mpikambana eny amin'ny wiki hafa ianao.",
 'userrights-nodatabase' => 'Tsy eto akaiky na tsy misy ny banky angona « $1 ».',
 'userrights-nologin' => "Tsy maintsy [[Special:UserLogin|miditra]] ary manana kaontim-pandrindra ianao raha hanova ny alalan'ny mpikambana.",
-'userrights-notallowed' => "Tsy afaka manova ny fahafahan'ny mpikambana ny kaontinao.",
+'userrights-notallowed' => 'Tsy manana alalana ny manova na manampy zom-pikambana ianao.',
 'userrights-changeable-col' => 'Ny gropy azonao ovaina',
 'userrights-unchangeable-col' => 'Ny gropy tsy azonao ovaina',
-'userrights-conflict' => 'Fifandonana zom-pikambana! Ampiharo fanindroany ny fanovanao.',
+'userrights-conflict' => 'Fifandonana fanovana zom-pikambana! Avereno vakiana ary marino ny fanovanao.',
 'userrights-removed-self' => "Afakao soa aman-tsara ny zonao. Noho izany, tsy afaka mijery amin'ilay pejy intsony ianao.",
 
 # Groups
@@ -1520,8 +1545,9 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'right-ipblock-exempt' => 'Tsy voakasiky ny fanakanana IP, ny fanakanana mandeha ho azy (aotômatika) ary ny fanakanana sampana IP',
 'right-proxyunbannable' => "Tsy voakasiky ny fanakana mande hoazy avy amin'ny proxy",
 'right-unblockself' => "Manala ny hidin'ny tena",
-'right-protect' => "Manova ny fiarovan'ny pejy sy manova ny pejy voaaro",
+'right-protect' => "Manova ny lenta fiarovan'ny pejy sy manova ny pejy voaaro miriana",
 'right-editprotected' => 'Manova pejy voaaro (tsy misy fiarovana en cascade)',
+'right-editsemiprotected' => 'Hanova ny pejy narovna ho "{{int:protect-level-autoconfirmed}}"',
 'right-editinterface' => 'Manova ny interface ny mpikambana',
 'right-editusercssjs' => 'Manova ny rakitra CSS sy JS ny mpikambana hafa',
 'right-editusercss' => 'Manova ny rakitra CSS ny mpikambana hafa',
@@ -1601,6 +1627,8 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 
 # Recent changes
 'nchanges' => '{{PLURAL:$1|fanovana|fanovana}} $1',
+'enhancedrc-since-last-visit' => '$1 ({{PLURAL:$1|hatry ny famangiana farany}})',
+'enhancedrc-history' => 'tantara',
 'recentchanges' => 'Fanovana farany',
 'recentchanges-legend' => 'Safidy ny fanovàna farany',
 'recentchanges-summary' => "Jereo eto amin'ity pejy ity izay vao niova vao haingana teto amin'ity wiki ity.",
@@ -1632,7 +1660,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'rc_categories_any' => 'Tsy misy fetrany',
 'rc-change-size-new' => "$1{{PLURAL:}} oktety taorian'ny fanovana",
 'newsectionsummary' => '/* $1 */ fizarana vaovao',
-'rc-enhanced-expand' => 'Jereo ny detail (mila JavaScript)',
+'rc-enhanced-expand' => 'Hijery ny antsipirihany',
 'rc-enhanced-hide' => 'Asitriho ny adidiny sy ny antsipiriany',
 'rc-old-title' => 'noforonina tamin\'ilay lohateny "$1"',
 
@@ -1887,6 +1915,8 @@ Rehefa sivanin'ny mpikambana iray izy ity, ny rakitra izay ahitana santiôna vao
 'listfiles_size' => 'Habe',
 'listfiles_description' => 'Visavisa',
 'listfiles_count' => 'Version',
+'listfiles-latestversion-yes' => 'Eny',
+'listfiles-latestversion-no' => 'Tsia',
 
 # File description page
 'file-anchor-link' => 'Rakitra',
@@ -2005,8 +2035,13 @@ Aza manadino manamarina raha tsy misy rohy makany amin'ny endrika hafa alohan'ny
 'statistics-users-active-desc' => "Mpikambana nanao zavatra teto tanatin'ny $1 andro{{PLURAL:}}.",
 'statistics-mostpopular' => 'Pejy voatsidika',
 
+'pageswithprop' => 'Pejy misy toe-pejy',
+'pageswithprop-legend' => 'Pejy misy toe-pejy',
+'pageswithprop-text' => 'Manalisitra ny pejy mampiasa toe-pejy manokana ity',
 'pageswithprop-prop' => "Anaran'ilay tondro",
 'pageswithprop-submit' => 'Alefa',
+'pageswithprop-prophidden-long' => 'Sandan-toe-dahatsoratra lava miafina ($1)',
+'pageswithprop-prophidden-binary' => 'sandan-toetra roa fototra miafina ($1)',
 
 'doubleredirects' => 'Fihodinana roa',
 'double-redirect-fixed-move' => "Ity fihodinana ity, nanana ny tanjona [[$1]] novaina anarana, dia mitondra mankany amin'ny [[$2]].",
@@ -2855,6 +2890,11 @@ Tsy hita ny rakitra miserana.',
 'import-token-mismatch' => 'Very ny fampahalalàna momba ny kaonty.
 Avereno fanindroany.',
 'import-invalid-interwiki' => "Tsy afaka mampiditra avy any amin'ilay wiki nofidiana.",
+'import-error-edit' => 'Tsy nafarana ny pejy "$1" satria tsy afaka manova azy ianao.',
+'import-error-create' => 'Tsy nafarana ny pejy "$1" satria tsy afaka mamorona azy ianao.',
+'import-error-interwiki' => 'Tsy nafarana ny pejy "$1" satria atokana ho an\'ny rohy interwiki ny anarany.',
+'import-error-special' => 'Tsy nafarana ny pejy "$1" satria amy valan\'anarana tsy mandray pejy ilay izy.',
+'import-error-invalid' => 'Tsy nafarana ny pejy "$1" satria tsy ekena ny anarany.',
 'import-rootpage-invalid' => 'Lohateny tsy azo raisina ny foto-pejy nomenao:',
 
 # Import log
@@ -3156,10 +3196,18 @@ Tokony sary tsy misy na sary tsy izy ny rohy voalohany anaty andalana iray .
 'exif-fnumber' => 'Isa F',
 'exif-exposureprogram' => 'Fomba famakiana',
 'exif-isospeedratings' => 'ISO',
+'exif-shutterspeedvalue' => 'hafaingam-panapenana ny APEX',
 'exif-aperturevalue' => 'Fisanasana APEX',
+'exif-brightnessvalue' => "Hazavan'ny APEX",
+'exif-exposurebiasvalue' => 'fanitsiana ny fanehoana',
+'exif-maxaperturevalue' => 'Fisokafana be indrindra',
+'exif-subjectdistance' => "Halaviran'ny alaina sary",
+'exif-meteringmode' => 'Fomba fandrefesana',
 'exif-lightsource' => 'Loharanon-kazavana',
 'exif-flashenergy' => "Angôvon'akonkazavana",
+'exif-subjectlocation' => "Toeram-pisian'ny alaina sary",
 'exif-filesource' => 'Fangon-drakitra',
+'exif-digitalzoomratio' => "Tahan'ny zoom arak'isa",
 'exif-imageuniqueid' => "ID an'io sary io manokana",
 'exif-gpslatituderef' => 'Laharam-pehintany avaratra na atsimo',
 'exif-gpslatitude' => 'Laharam-pehintany',
index a94eb29..d215781 100644 (file)
@@ -2609,8 +2609,7 @@ Sanak mustilah alah manarimo [{{SERVER}}{{SCRIPTPATH}}/COPYING salinan Lisensi P
 
 # Database error messages
 'dberr-header' => 'Wiki ko bamasalah',
-'dberr-problems' => 'Maaf!
-Situs ko mangalami masalah teknis.',
+'dberr-problems' => 'Maaf! Situs ko mangalami masalah teknis.',
 
 # HTML forms
 'htmlform-required' => 'Nilai ko diparaluan',
index d9147ce..7931083 100644 (file)
@@ -599,7 +599,7 @@ $1',
 # 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).
 'aboutsite' => 'За {{SITENAME}}',
 'aboutpage' => 'Project:За {{SITENAME}}',
-'copyright' => 'СиÑ\82е Ñ\82екÑ\81Ñ\82ови Ñ\81е Ð´Ð¾Ñ\81Ñ\82апни Ð¿Ð¾Ð´ Ñ\83Ñ\81ловиÑ\82е Ð½Ð° $1.',
+'copyright' => 'СодÑ\80жинаÑ\82а Ðµ Ð´Ð¾Ñ\81Ñ\82апна Ð¿Ð¾Ð´ Ñ\83Ñ\81ловиÑ\82е Ð½Ð° $1 Ð¾Ñ\81вен Ð°ÐºÐ¾ Ð½Ðµ Ðµ Ð¿Ð¾Ð¸Ð½Ð°ÐºÑ\83 Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾.',
 'copyrightpage' => '{{ns:project}}:Авторски права',
 'currentevents' => 'Тековни настани',
 'currentevents-url' => 'Project:Тековни настани',
@@ -816,6 +816,9 @@ $2',
 'userlogin-resetpassword-link' => 'Смени лозинка',
 'helplogin-url' => 'Help:Најава',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Помош со најавата]]',
+'userlogin-loggedin' => 'Веќе сте најавени како {{GENDER:$1|$1}}.
+Со образецот подолу можете да се најавите како друг корисник.',
+'userlogin-createanother' => 'Направи нова сметка',
 'createacct-join' => 'Внесете ваши информации',
 'createacct-another-join' => 'Подолу внесете податоци за сметката',
 'createacct-emailrequired' => 'Е-пошта',
@@ -1169,8 +1172,8 @@ $2
 Администраторот кој ја заклучил базата на податоци го дал следново објаснување: $1",
 'protectedpagewarning' => "'''Предупредување:  Оваа страница е заклучена, така што само корисници со администраторски привилегии можат да ја уредуваат.'''
 За ваша информација, последната ставка во дневникот на промени е прикажана подолу:",
-'semiprotectedpagewarning' => "'''Предупредување:'''  Оваа страница е заклучена, така што само регистрирани корисници може да ја уредуваат.'''
-За ваша информација, последната ставка во дневникот на промени е прикажана подолу:",
+'semiprotectedpagewarning' => "'''Предупредување:'''  Оваа страница е заштитена, така што може да ја уредуваат само регистрирани корисници.'''
+За ваша информација, подолу е прикажана последната ставка во дневникот на измени:",
 'cascadeprotectedwarning' => "'''Предупредување:''' Оваа страница е заклучена, така што можат да ја уредуваат само корисници со администраторски привилегии, бидејќи е вклучена во {{PLURAL:$1|следнава „преносно-заштитена“ страница|следниве „преносно-заштитени“ страници}}:",
 'titleprotectedwarning' => "'''Предупредување:'''  Оваа страница е заклучена, така што се потребни [[Special:ListGroupRights|посебни права]] за да се создаде.''''
 За ваша информација, последната ставка во дневникот на промени е прикажана подолу:",
@@ -1774,8 +1777,8 @@ $1",
 'action-block' => 'оневозможи го овој корисник да уредува',
 'action-protect' => 'измени го степенот на заштита на оваа страница',
 'action-rollback' => 'брзо отповикување на измени направени од последниот уредник на страницата',
-'action-import' => 'Ñ\83вези Ñ\98а Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а од друго вики',
-'action-importupload' => 'Ñ\83вези Ñ\98а Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¾Ð´ Ð¿Ð¾Ð´Ð¸Ð³Ð½Ð°Ñ\82а Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека',
+'action-import' => 'Ñ\83воз Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и од друго вики',
+'action-importupload' => 'Ñ\83воз Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и Ñ\81о Ð¿Ð¾Ð´Ð¸Ð³Ð°Ñ\9aе Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки',
 'action-patrol' => 'означи ги уредувањата на другите како проверени',
 'action-autopatrol' => 'вашите уредувања да се обележуват како испатролирани',
 'action-unwatchedpages' => 'преглед на список на ненабљудувани страници',
@@ -2323,6 +2326,7 @@ $1',
 'listusers' => 'Список на корисници',
 'listusers-editsonly' => 'Прикажи само корисници кои уредувале',
 'listusers-creationsort' => 'Подреди по датум на создавање',
+'listusers-desc' => 'Подреди по надолен редослед',
 'usereditcount' => '$1 {{PLURAL:$1|уредување|уредувања}}',
 'usercreated' => '{{GENDER:$3|Создадена}} на $1 во $2 ч.',
 'newpages' => 'Нови страници',
@@ -2613,7 +2617,7 @@ $UNWATCHURL
 Последното уредување го изврши [[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' => 'Ð\92Ñ\80аÑ\82ени Ñ\83Ñ\80едÑ\83ваÑ\9aа Ð¾Ð´ Ñ\81кÑ\80иен ÐºÐ¾Ñ\80иÑ\81ник Ð½Ð° Ð¿Ð¾Ñ\81леднаÑ\82а Ñ\80евизиÑ\98а Ð¾Ð´ [[User:$1|$1]]',
+'revertpage-nouser' => 'Ð\92Ñ\80аÑ\82ени Ñ\83Ñ\80едÑ\83ваÑ\9aа Ð¾Ð´ Ñ\81кÑ\80иен ÐºÐ¾Ñ\80иÑ\81ник Ð½Ð° Ð¿Ð¾Ñ\81леднаÑ\82а Ñ\80евизиÑ\98а Ð½Ð° {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Откажани уредувањата на $1; вратено на последната верзија на $2.',
 
 # Edit tokens
@@ -2759,7 +2763,7 @@ $1',
 'contributions' => '{{GENDER:$1|Кориснички}} придонеси',
 'contributions-title' => 'Придонеси на корисникот $1',
 'mycontris' => 'придонеси',
-'contribsub2' => 'За $1 ($2)',
+'contribsub2' => 'За {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Не се пронајдени промени што одговараат на овој критериум.',
 'uctop' => '(тековно)',
 'month' => 'Од месец (и порано):',
@@ -3041,10 +3045,10 @@ $1',
 'imageinvalidfilename' => 'Целниот наслов на податотеката е невалиден',
 'fix-double-redirects' => 'Подновете ги сите пренасочувања што водат кон првобитниот наслов',
 'move-leave-redirect' => 'Направи пренасочување',
-'protectedpagemovewarning' => "'''Предупредување:'''  Оваа страница е заклучена, така што само корисници со администраторски привилегии може да ја преместат.
-За ваша информација, последната ставка во дневникот на промени е прикажана подолу:",
-'semiprotectedpagemovewarning' => "'''Напомена:'''  Оваа страница е заклучена, така што само регистрирани корисници може да ја преместат.
-За ваша информација, последната ставка во дневникот на промени е прикажана подолу:",
+'protectedpagemovewarning' => "'''Предупредување:'''  Оваа страница е заштитена, така што само може да ја преместуваат само корисници со администраторски привилегии.
+За ваша информација, подолу е прикажана последната ставка во дневникот на измени:",
+'semiprotectedpagemovewarning' => "'''Напомена:'''  Оваа страница е заштитена, така што може да ја преместуваат само регистрирани корисници.
+За ваша информација, подолу е прикажана последната ставка во дневникот на измени:",
 'move-over-sharedrepo' => '== Податотеката постои ==
 [[:$1]] постои на заедничко складиште. Ако податотеката ја преместите на овој наслов, тоа ќе ја потисне заедничката податотека.',
 'file-exists-sharedrepo' => 'Одбраното име на податотеката веќе се користи на заедничко складиште.
@@ -3243,6 +3247,7 @@ $2',
 'tooltip-undo' => '„Откажи“ го поништува ова уредување и ве носи на уредувањето во режим на преглед. Дава можност за наведување на причина во описот.',
 'tooltip-preferences-save' => 'Зачувај',
 'tooltip-summary' => 'Внесете краток опис',
+'tooltip-iwiki' => '$1 — $2',
 
 # Stylesheets
 'common.css' => '/* Тука поставениот CSS ќе се применува врз сите рува */',
@@ -4284,7 +4289,10 @@ $5
 'tags-tag' => 'Име на ознака',
 'tags-display-header' => 'Изглед во списоците на промени',
 'tags-description-header' => 'Целосен опис на значењето',
+'tags-active-header' => 'Активно?',
 'tags-hitcount-header' => 'Означени промени',
+'tags-active-yes' => 'Да',
+'tags-active-no' => 'Не',
 'tags-edit' => 'уреди',
 'tags-hitcount' => '$1 {{PLURAL:$1|промена|промени}}',
 
@@ -4450,9 +4458,9 @@ $5
 'limitreport-ppvisitednodes' => 'Бр. на пројдени јазли од предобработувачот',
 'limitreport-ppgeneratednodes' => 'Бр. на создадени јазли од предобработувачот',
 'limitreport-postexpandincludesize' => 'Големина на вклученото по проширувањето',
-'limitreport-postexpandincludesize-value' => '$1/$2 бајти',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|бајт|бајти}}',
 'limitreport-templateargumentsize' => 'Големина на аргументот во шаблонот',
-'limitreport-templateargumentsize-value' => '$1/$2 бајти',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|бајт|бајти}}',
 'limitreport-expansiondepth' => 'Најголема длабочина на проширувањето',
 'limitreport-expensivefunctioncount' => 'Бр. на сложени парсерски функции',
 
index 160773c..b5f4b1b 100644 (file)
@@ -588,7 +588,7 @@ $1',
 # 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).
 'aboutsite' => '{{SITENAME}} സം‌രംഭത്തെക്കുറിച്ച്',
 'aboutpage' => 'Project:വിവരണം',
-'copyright' => 'ഉള്ളടക്കം $1 പ്രകാരം ലഭ്യം.',
+'copyright' => 'à´ªàµ\8dà´°à´¤àµ\8dà´¯àµ\87à´\95à´\82 à´ªà´±à´¯à´¾à´¤àµ\8dà´¤ à´ªà´\95àµ\8dà´·à´\82 à´\89à´³àµ\8dà´³à´\9fà´\95àµ\8dà´\95à´\82 $1 à´ªàµ\8dà´°à´\95ാരà´\82 à´²à´­àµ\8dà´¯à´\82.',
 'copyrightpage' => '{{ns:project}}:പകർപ്പവകാശം',
 'currentevents' => 'സമകാലികം',
 'currentevents-url' => 'Project:സമകാലികം',
@@ -1178,6 +1178,8 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'node-count-exceeded-warning' => 'താൾ നോഡ്-എണ്ണം അധികരിച്ചിരിക്കുന്നു',
 'expansion-depth-exceeded-category' => 'വികസന ആഴം അധികരിച്ച താളുകൾ',
 'expansion-depth-exceeded-warning' => 'താളിന്റെ വികസന ആഴം അധികരിച്ചിരിക്കുന്നു',
+'parser-unstrip-loop-warning' => 'അൺസ്ട്രിപ്പ് (Unstrip) പാഴ്സർ ഫങ്ഷനിൽ കുരുക്ക് കണ്ടെത്തി',
+'parser-unstrip-recursion-limit' => 'അൺസ്ട്രിപ്പ് (Unstrip) പാഴ്സർ ഫങ്ഷന്റെ പുനരാവർത്തന പരിധി അധികരിച്ചിരിക്കുന്നു ($1)',
 'converter-manual-rule-error' => 'മാനുഷികമായുള്ള ഭാഷാ പരിവർത്തന നിയമത്തിൽ പിഴവ് കണ്ടെത്തി',
 
 # "Undo" feature
@@ -1715,8 +1717,8 @@ $1",
 'action-block' => 'ഈ ഉപയോക്താവിനെ തിരുത്തുന്നതിൽ നിന്നും തടയുക',
 'action-protect' => 'ഈ താളിന്റെ സം‌രക്ഷണ മാനത്തിൽ വ്യത്യാസം വരുത്തുക',
 'action-rollback' => 'ഒരു പ്രത്യേക താളിൽ അവസാനം തിരുത്തൽ നടത്തിയ ഉപയോക്താവിന്റെ തിരുത്തലുകൾ പെട്ടെന്ന് ഒഴിവാക്കുക',
-'action-import' => 'à´\88 à´¤à´¾àµ¾ à´®à´±àµ\8dà´±àµ\8aà´°àµ\81 à´µà´¿à´\95àµ\8dà´\95à´¿à´¯àµ\80ൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 ഇറക്കുമതി ചെയ്യുക',
-'action-importupload' => 'à´\85à´ªàµ\8dâ\80\8cà´²àµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dà´¤ à´ªàµ\8dരമാണതàµ\8dതിൽ à´\87à´¨àµ\8dà´¨àµ\81à´\82 à´\88 à´¤à´¾ൾ ഇറക്കുമതി ചെയ്യുക',
+'action-import' => 'മറàµ\8dà´±àµ\8aà´°àµ\81 à´µà´¿à´\95àµ\8dà´\95à´¿à´¯àµ\80ൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 à´¤à´¾à´³àµ\81à´\95ൾ ഇറക്കുമതി ചെയ്യുക',
+'action-importupload' => 'à´\85à´ªàµ\8dâ\80\8cà´²àµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dà´¤ à´ªàµ\8dരമാണതàµ\8dതിൽ à´\87à´¨àµ\8dà´¨àµ\81à´\82 à´¤à´¾à´³àµ\81à´\95ൾ ഇറക്കുമതി ചെയ്യുക',
 'action-patrol' => 'മറ്റുള്ളവരുടെ തിരുത്തൽ റോന്തുചുറ്റിയതായി അടയാളപ്പെടുത്തുക',
 'action-autopatrol' => 'താങ്കളുടെ തിരുത്തലിൽ റോന്തുചുറ്റിയതായി അടയാളപ്പെടുത്തി',
 'action-unwatchedpages' => 'ശ്രദ്ധിക്കാത്ത താളുകളുടെ പട്ടിക കാട്ടുക',
@@ -2238,6 +2240,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'listusers' => 'ഉപയോക്താക്കളുടെ പട്ടിക',
 'listusers-editsonly' => 'തിരുത്തലുകൾ ചെയ്തിട്ടുള്ള ഉപയോക്താക്കളെ മാത്രം കാണിക്കുക',
 'listusers-creationsort' => 'സൃഷ്ടിക്കപ്പെട്ട തീയതി അനുസരിച്ച് ക്രമീകരിക്കുക',
+'listusers-desc' => 'അവരോഹണക്രമത്തിൽ ആക്കുക',
 'usereditcount' => '{{PLURAL:$1|ഒരു തിരുത്തൽ|$1 തിരുത്തലുകൾ}}',
 'usercreated' => '$1 $2-നു {{GENDER:$3|സൃഷ്ടിച്ചത്}}',
 'newpages' => 'പുതിയ താളുകൾ',
@@ -2520,7 +2523,7 @@ $UNWATCHURL
 താളിലെ അവസാന തിരുത്തൽ ചെയ്തിരിക്കുന്നത് [[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]] സൃഷ്ടിച്ച അവസാന പതിപ്പിലേയ്ക്ക് മുൻപ്രാപനം ചെയ്തിരിക്കുന്നു',
+'revertpage-nouser' => 'മറയ്ക്കപ്പെട്ട ഉപയോക്താവ് നടത്തിയ തിരുത്തലുകൾ {{GENDER:$1|[[User:$1|$1]]}} സൃഷ്ടിച്ച അവസാന പതിപ്പിലേയ്ക്ക് മുൻപ്രാപനം ചെയ്തിരിക്കുന്നു',
 'rollback-success' => '$1 ചെയ്ത തിരുത്തൽ തിരസ്ക്കരിച്ചിരിക്കുന്നു; $2 ചെയ്ത തൊട്ടു മുൻപത്തെ പതിപ്പിലേക്ക് സേവ് ചെയ്യുന്നു.',
 
 # Edit tokens
@@ -2662,7 +2665,7 @@ $1',
 'contributions' => '{{GENDER:$1|ഉപയോക്താവിന്റെ}} സംഭാവനകൾ',
 'contributions-title' => '$1 എന്ന ഉപയോക്താവിന്റെ സംഭാവനകൾ',
 'mycontris' => 'സംഭാവനകൾ',
-'contribsub2' => '$1 എന്ന ഉപയോക്താവിന്റെ $2.',
+'contribsub2' => '{{GENDER:$3|$1} എന്ന ഉപയോക്താവിന്റെ $2.',
 'nocontribs' => 'ഈ മാനദണ്ഡങ്ങളുമായി യോജിക്കുന്ന മാറ്റങ്ങൾ ഒന്നും കണ്ടില്ല.',
 'uctop' => '(നിലവിലുള്ളത്)',
 'month' => 'മാസം:',
@@ -4020,7 +4023,10 @@ $5
 'tags-tag' => 'റ്റാഗിന്റെ പേര്‌',
 'tags-display-header' => 'മാറ്റങ്ങളുടെ പട്ടികകളിലെ രൂപം',
 'tags-description-header' => 'അർത്ഥത്തിന്റെ പൂർണ്ണ വിവരണം',
+'tags-active-header' => 'സീജീവമാണോ?',
 'tags-hitcount-header' => 'അനുബന്ധമുള്ള മാറ്റങ്ങൾ',
+'tags-active-yes' => 'അതെ',
+'tags-active-no' => 'അല്ല',
 'tags-edit' => 'തിരുത്തുക',
 'tags-hitcount' => '{{PLURAL:$1|ഒരു മാറ്റം|$1 മാറ്റങ്ങൾ}}',
 
@@ -4038,8 +4044,7 @@ $5
 
 # Database error messages
 'dberr-header' => 'ഈ വിക്കിയിൽ പ്രശ്നമുണ്ട്',
-'dberr-problems' => 'ക്ഷമിക്കണം! 
-ഈ സൈറ്റിൽ സാങ്കേതിക തകരാറുകൾ അനുഭവപ്പെടുന്നുണ്ട്.',
+'dberr-problems' => 'ക്ഷമിക്കണം! ഈ സൈറ്റിൽ സാങ്കേതിക തകരാറുകൾ അനുഭവപ്പെടുന്നുണ്ട്.',
 'dberr-again' => 'കുറച്ച് മിനിട്ടുകൾ കാത്തിരുന്ന് വീണ്ടും തുറക്കുവാൻ ശ്രമിക്കുക.',
 'dberr-info' => '(വിവരശേഖര സെർവറുമായി ബന്ധപ്പെടാൻ പറ്റിയില്ല: $1)',
 'dberr-info-hidden' => '(ഡേറ്റാബേസ് സെർവറുമായി ബന്ധപ്പെടരുത്)',
@@ -4187,9 +4192,9 @@ $5
 'limitreport-ppvisitednodes' => 'പ്രീപ്രോസസർ സന്ദർശിച്ച നോഡിന്റെ എണ്ണം',
 'limitreport-ppgeneratednodes' => 'പ്രീപ്രോസർ സൃഷ്ടിച്ച നോഡിന്റെ എണ്ണം',
 'limitreport-postexpandincludesize' => 'വികസിപ്പിച്ചതിനു ശേഷമുള്ള ഉൾപ്പെടുത്തൽ വലിപ്പം',
-'limitreport-postexpandincludesize-value' => '$1/$2 ബൈറ്റുകൾ',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|ബൈറ്റ് |ബൈറ്റുകൾ}}',
 'limitreport-templateargumentsize' => 'ഫലകത്തിലെ ചരങ്ങൾക്കനുവദിച്ചിരിക്കുന്ന വലിപ്പം',
-'limitreport-templateargumentsize-value' => '$1/$2 ബൈറ്റുകൾ',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|ബൈറ്റ് |ബൈറ്റുകൾ}}',
 'limitreport-expansiondepth' => 'വികസിപ്പിക്കാനാവുന്ന ഉയർന്ന പരിധി',
 'limitreport-expensivefunctioncount' => 'വ്യയമേറിയ പാഴ്സർ ഫങ്ഷൻ എണ്ണം',
 
index e5f3a6d..b158fe3 100644 (file)
@@ -3404,8 +3404,7 @@ $5
 
 # Database error messages
 'dberr-header' => 'Энэхүү викид асуудал үүсэв',
-'dberr-problems' => 'Уучлаарай!
-Энэхүү сайтад техникийн саатал учирч байна.',
+'dberr-problems' => 'Уучлаарай! Энэхүү сайтад техникийн саатал учирч байна.',
 'dberr-again' => 'Хэдэн минут хүлээгээд дахин ачаалж үзнэ үү.',
 'dberr-info' => '(өгөгдлийн сангийн серверт хандаж чадсангүй: $1)',
 'dberr-usegoogle' => 'Та одоохондоо Google-г ашиглан хайлтаа хийх боломжтой.',
index de7479c..d5a7690 100644 (file)
@@ -568,7 +568,7 @@ $1',
 # 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).
 'aboutsite' => '{{SITENAME}}बद्दल',
 'aboutpage' => 'Project:माहितीपृष्ठ',
-'copyright' => 'येथील मजकूर $1च्या अंतर्गत उपलब्ध आहे.',
+'copyright' => 'येथील मजकूर $1च्या अंतर्गत उपलब्ध आहे जोपर्यंत इतर नोंदी केलेल्या नाहीत.',
 'copyrightpage' => '{{ns:project}}:प्रताधिकार',
 'currentevents' => 'सद्य घटना',
 'currentevents-url' => 'Project:सद्य घटना',
index 08d895a..fea4ebe 100644 (file)
@@ -448,7 +448,7 @@ $1',
 # 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).
 'aboutsite' => 'Perihal {{SITENAME}}',
 'aboutpage' => 'Project:Perihal',
-'copyright' => 'Kandungan disediakan dengan $1.',
+'copyright' => 'Kandungan disediakan di bawah $1 melainkan dinyatakan sebaliknya.',
 'copyrightpage' => '{{ns:project}}:Hak cipta',
 'currentevents' => 'Hal semasa',
 'currentevents-url' => 'Project:Hal semasa',
@@ -1428,6 +1428,7 @@ Tindakan ini tidak boleh dibatalkan.',
 'prefs-displaysearchoptions' => 'Pilihan paparan',
 'prefs-displaywatchlist' => 'Pilihan paparan',
 'prefs-diffs' => 'Beza',
+'prefs-help-prefershttps' => 'Keutamaan inu akan berkuatkuasa pada lain kali anda log masuk.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'Alamat e-mel adalah sah',
@@ -1586,8 +1587,8 @@ Tindakan ini tidak boleh dibatalkan.',
 'action-block' => 'menyekat pengguna ini daripada menyunting',
 'action-protect' => 'mengubah aras perlindungan bagi laman ini',
 'action-rollback' => 'mengundurkan suntingan-suntingan pengguna terkini yang menyunting laman tertentu dengan cepat',
-'action-import' => 'mengimport laman ini dari wiki lain',
-'action-importupload' => 'mengimport laman ini dengan memuat naik fail',
+'action-import' => 'mengimport halaman-halaman dari wiki lain',
+'action-importupload' => 'mengimport halaman-halaman daripada memuat naik fail',
 'action-patrol' => 'menanda ronda suntingan orang lain',
 'action-autopatrol' => 'menanda ronda suntingan anda sendiri',
 'action-unwatchedpages' => 'melihat senarai laman tidak dipantau',
@@ -2115,6 +2116,7 @@ Masukan yang <del>dipotong</del> telah diselesaikan.',
 'listusers' => 'Senarai pengguna',
 'listusers-editsonly' => 'Hanya papar pengguna yang telah membuat suntingan',
 'listusers-creationsort' => 'Susun mengikut tarikh penciptaan',
+'listusers-desc' => 'Susun dalam turutan menurun',
 'usereditcount' => '$1 suntingan',
 'usercreated' => '{{GENDER:$3|Dibuat}} pada $1, $2',
 'newpages' => 'Laman baru',
@@ -2400,7 +2402,7 @@ Sila lihat $2 untuk rekod penghapusan terkini.',
 Suntingan terakhir telah dibuat oleh [[User:$3|$3]] ([[User talk:$3|Perbualan]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Ringkasan sutingan: \"''\$1''\".",
 'revertpage' => 'Membalikkan suntingan oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|Perbincangan]]) kepada versi terakhir oleh [[User:$1|$1]]',
-'revertpage-nouser' => 'Membalikkan suntingan oleh seorang pengguna tersorok kepada semakan terakhir oleh [[User:$1|$1]]',
+'revertpage-nouser' => 'Membalikkan suntingan oleh seorang pengguna tersorok kepada semakan terakhir oleh {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Membalikkan suntingan oleh $1 kepada versi terakhir oleh $2.',
 
 # Edit tokens
@@ -3916,6 +3918,7 @@ Anda patut telah menerima [{{SERVER}}{{SCRIPTPATH}}/COPYING sebuah salinan bagi
 'dberr-problems' => 'Harap maaf. Tapak web ini dilanda masalah teknikal.',
 'dberr-again' => 'Cuba tunggu selama beberapa minit dan muat semula.',
 'dberr-info' => '(Tidak dapat menghubungi pelayan pangkalan data: $1)',
+'dberr-info-hidden' => '(Pelayan pangkalan data tidak dapat dihubungi)',
 'dberr-usegoogle' => 'Buat masa ini, anda boleh cuba mencari melalui Google.',
 'dberr-outofdate' => 'Sila ambil perhatian bahawa indeks mereka bagi kandungan kami mungkin sudah ketinggalan zaman.',
 'dberr-cachederror' => 'Yang berikut ialah salinan bagi laman yang diminta yang diambil daripada cache, dan mungkin bukan yang terkini.',
@@ -4052,11 +4055,18 @@ Ataupun, anda boleh menggunakan borang yang mudah di bawah. Ulasan anda akan dic
 'rotate-comment' => 'Imej diputar sebanyak $1 {{PLURAL:$1|darjah|darjah}} mengikut arah jam',
 
 # Limit report
+'limitreport-title' => 'Data pemprofilan penghurai:',
 'limitreport-cputime' => 'Penggunaan masa CPU',
 'limitreport-cputime-value' => '$1 saat',
 'limitreport-walltime' => 'Penggunaan masa nyata',
 'limitreport-walltime-value' => '$1 saat',
-'limitreport-postexpandincludesize-value' => '$1/$2 bait',
-'limitreport-templateargumentsize-value' => '$1/$2 bait',
+'limitreport-ppvisitednodes' => 'Kiraan nod kunjungan pempraproses',
+'limitreport-ppgeneratednodes' => 'Kiraan nod hasilan pempraproses',
+'limitreport-postexpandincludesize' => 'Saiz selepas peluasan',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bait}}',
+'limitreport-templateargumentsize' => 'Saiz parameter templat',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bait}}',
+'limitreport-expansiondepth' => 'Kedalaman peluasan terjauh',
+'limitreport-expensivefunctioncount' => 'Kiraan fungsi penghurai muatan tinggi',
 
 );
index 1c95001..227cad4 100644 (file)
@@ -1899,8 +1899,7 @@ Your e-mail address is not revealed when other users contact you.
 
 # Database error messages
 'dberr-header' => 'ဤဝီကီတွင် ပြဿနာတစ်ခု ရှိနေသည်',
-'dberr-problems' => 'ဝမ်းနည်းပါသည်။
-ဤဆိုက်သည် နည်းပညာပိုင်းဆိုင်ရာ အခက်အခဲများ ကြုံတွေ့နေရပါသည်။',
+'dberr-problems' => 'ဝမ်းနည်းပါသည်။ ဤဆိုက်သည် နည်းပညာပိုင်းဆိုင်ရာ အခက်အခဲများ ကြုံတွေ့နေရပါသည်။',
 
 # HTML forms
 'htmlform-required' => 'ဤတန်ဖိုး လိုအပ်သည်',
index b3bd6a7..91c0d6e 100644 (file)
@@ -412,18 +412,18 @@ $messages = array(
 'october-gen' => 'oktober',
 'november-gen' => 'november',
 'december-gen' => 'desember',
-'jan' => 'jan',
-'feb' => 'feb',
-'mar' => 'mar',
-'apr' => 'apr',
+'jan' => 'jan.',
+'feb' => 'feb.',
+'mar' => 'mar.',
+'apr' => 'apr.',
 'may' => 'mai',
-'jun' => 'jun',
-'jul' => 'jul',
-'aug' => 'aug',
-'sep' => 'sep',
-'oct' => 'okt',
-'nov' => 'nov',
-'dec' => 'des',
+'jun' => 'jun.',
+'jul' => 'jul.',
+'aug' => 'aug.',
+'sep' => 'sep.',
+'oct' => 'okt.',
+'nov' => 'nov.',
+'dec' => 'des.',
 'january-date' => '$1. januar',
 'february-date' => '$1. februar',
 'march-date' => '$1. mars',
index 81df40b..11c4d6f 100644 (file)
@@ -314,12 +314,12 @@ $messages = array(
 'tog-hidepatrolled' => 'Wiezigingen die emarkeerd bin verbargen in "Leste wiezigingen"',
 'tog-newpageshidepatrolled' => 'Ziejen 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' => 'Groepeer wiezigingen per zied in "Leste wiezigingen" en "Mien volglieste" (hierveur he\'j JavaScript neudig)',
+'tog-usenewrc' => 'Groepeer wiezigingen per zied in "Leste wiezigingen" en "Mien volglieste"',
 'tog-numberheadings' => 'Koppen vanzelf nummeren',
 'tog-showtoolbar' => 'Laot de warkbalke zien',
-'tog-editondblclick' => 'Mit dubbelklik bewarken (JavaScript)',
+'tog-editondblclick' => 'Mit dubbelklik bewarken',
 'tog-editsection' => 'Mit bewarkgedeelten',
-'tog-editsectiononrightclick' => 'Bewarkgedeelte mit rechtermuusknoppe bewarken (JavaScript)',
+'tog-editsectiononrightclick' => 'Bewarken van deelziejen meugelik maken mit n rechtermuusklik op n tussenkop',
 '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' => "Spul wa'k anmake op mien volglieste zetten",
@@ -337,7 +337,7 @@ $messages = array(
 'tog-shownumberswatching' => 't Antal gebrukers bekieken die disse zied volgt',
 'tog-oldsig' => 'Bestaonde haandtekening:',
 'tog-fancysig' => 'Ondertekening zien as wikitekste (zonder automatiese verwiezing)',
-'tog-uselivepreview' => 'Gebruuk "rechtstreeks naokieken" (mu\'j JavaScript veur hebben - experimenteel)',
+'tog-uselivepreview' => 'Gebruuk "rechtstreeks naokieken" (experimenteel)',
 'tog-forceeditsummary' => 'Geef n melding bie n lege samenvatting',
 'tog-watchlisthideown' => 'Verbarg mien eigen bewarkingen',
 'tog-watchlisthidebots' => 'Verbarg botgebrukers',
@@ -351,6 +351,7 @@ $messages = array(
 'tog-noconvertlink' => 'Ziednaamkonversie uutschakelen',
 'tog-norollbackdiff' => 'Wiezigingen vortlaoten nao t weerummedreien',
 'tog-useeditwarning' => "Waorschuw mien a'k n bewörken zied aof wil sluten die nog niet op-esleugen is",
+'tog-prefershttps' => "Altied n beveiligde verbiending gebruken a'j an-emeld bin",
 
 'underline-always' => 'Altied',
 'underline-never' => 'Nooit',
@@ -451,7 +452,7 @@ $messages = array(
 'newwindow' => '(niej vienster)',
 'cancel' => 'Aofbreken',
 'moredotdotdot' => 'Meer...',
-'morenotlisted' => 'Meer niet in de lieste...',
+'morenotlisted' => 'Disse lieste is niet kompleet...',
 'mypage' => 'Gebrukerszied',
 'mytalk' => 'Mien overleg',
 'anontalk' => 'Overlegzied veur dit IP-adres',
@@ -542,19 +543,19 @@ $messages = array(
 'jumpto' => 'Gao naor:',
 'jumptonavigation' => 'navigasie',
 'jumptosearch' => 'zeuk',
-'view-pool-error' => "De servers bin noen overbelast.
-Te veule meensen proberen disse zied te bekieken.
-Wacht even veurda'j opniej toegang proberen te kriegen tot disse zied.
+'view-pool-error' => "De servers bin op heden overbelast.
+Te veule gebrukers proberen disse zied te bekieken.
+Wacht effen veurda'j opniej toegang proberen te kriegen tot disse zied.
 
 $1",
-'pool-timeout' => 'Wachttied tiejens t wachten op vergrendeling',
+'pool-timeout' => 'De maximumwachttied veur databankvergrendeling is verleupen.',
 'pool-queuefull' => 'De wachtrie van de poel is vol',
 'pool-errorunknown' => 'Onbekende fout',
 
 # 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).
 'aboutsite' => 'Over {{SITENAME}}',
 'aboutpage' => 'Project:Info',
-'copyright' => 'De inhoud is beschikbaor onder de $1.',
+'copyright' => 'De inhoud is beschikbaor onder de $1 as der niks aanders an-egeven is.',
 'copyrightpage' => '{{ns:project}}:Auteursrechten',
 'currentevents' => 'In t niejs',
 'currentevents-url' => 'Project:In t niejs',
@@ -637,6 +638,12 @@ n Lieste mit bestaonde spesiale ziejen ku'j vienen op [[Special:SpecialPages|{{i
 # General errors
 'error' => 'Foutmelding',
 'databaseerror' => 'Fout in de databanke',
+'databaseerror-text' => 'Der is wat mis egaon bie n databankzeukopdrachte.
+Dit kan betekenen dat der n fout in de programmtuur zit.',
+'databaseerror-textcl' => 'Der is wat mis egaon bie n databankzeukopdrachte.',
+'databaseerror-query' => 'Zeukopdrachte: $1',
+'databaseerror-function' => 'Funksie: $1',
+'databaseerror-error' => 'Fout: $1',
 'laggedslavemode' => '<strong>Waorschuwing:</strong> t is meugelik dat leste wiezigingen in de tekste van dit artikel nog niet verwarkt bin.',
 'readonly' => 'De databanke is beveiligd',
 'enterlockreason' => 'Waorumme en veur hoe lange is t eblokkeerd?',
@@ -765,11 +772,11 @@ Vergeet niet joew [[Special:Preferences|veurkeuren veur {{SITENAME}}]] an te pas
 'createacct-realname' => 'Echte naam (niet verplicht)',
 'createaccountreason' => 'Reden:',
 'createacct-reason' => 'Reden',
-'createacct-reason-ph' => 'Waorumme jie n aandere gebruker anmaken',
+'createacct-reason-ph' => 'Waorumme je n aandere gebrukerskonto anmaken',
 'createacct-captcha' => 'Veiligheidskontraole',
 'createacct-imgcaptcha-ph' => "Voer de tekste in die'j hierboven zien",
-'createacct-submit' => 'Gebruker anmaken',
-'createacct-another-submit' => 'n Aandere gebruker anmaken',
+'createacct-submit' => 'Gebrukerskonto anmaken',
+'createacct-another-submit' => 'n Aandere gebrukerskonto anmaken',
 'createacct-benefit-heading' => '{{SITENAME}} wörden emaakt deur meensen zo as jie.',
 'createacct-benefit-body1' => 'bewarking{{PLURAL:$1||en}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|zied|ziejen}}',
@@ -833,8 +840,8 @@ Voer de juuste opmaak van t adres in of laot t veld leeg.',
 'accountcreated' => 'Gebrukersprofiel is an-emaakt',
 'accountcreatedtext' => 'De gebrukersnaam veur [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) is an-emaakt.',
 'createaccount-title' => 'Gebrukers anmaken veur {{SITENAME}}',
-'createaccount-text' => 'Der hef der ene n gebruker veur $2 an-emaakt op {{SITENAME}} ($4). t Wachtwoord veur "$2" is "$3".
-Meld je noen an en wiezig t wachtwoord.
+'createaccount-text' => 'Der hef der ene n gebruker an-emaakt op {{SITENAME}} ($4), mit de naam $2 en t wachtwoord "$3". 
+Meld je eigen noen an en wiezig t wachtwoord.
 
 Negeer dit bericht as disse gebruker zonder joew toestemming an-emaakt is.',
 'usernamehasherror' => "In n gebrukersnaam ma'j gien hekjen gebruken.",
@@ -843,6 +850,8 @@ Je mutten effen $1 wachten veurda'j t opniej proberen.",
 'login-abort-generic' => 'Je bin niet an-emeld. De procedure is aofebreuken.',
 'loginlanguagelabel' => 'Taal: $1',
 'suspicious-userlogout' => 'Joew verzeuk um of te melden is aofewezen umdat t dernaor uutziet dat t verstuurd is deur n kepotte webkieker of tussenopslagbuffer',
+'createacct-another-realname-tip' => "Joew echte naam opgeven is niet verplicht.
+A'j t invullen, dan zu'w t gebruken um erkenning te geven veur joew warkzaamhejen.",
 
 # Email sending
 'php-mail-error-unknown' => 'Der was n onbekende fout mit de mail()-funksie van PHP',
@@ -922,7 +931,7 @@ Do dit a'j ze per ongelok mit ene edeeld hebben of as onbevoegden toegang ekrege
 'resettokens-legend' => 'Tokens ongedaonmaken',
 'resettokens-tokens' => 'Tokens:',
 'resettokens-token-label' => '$1 (aktuele weerde: $2)',
-'resettokens-watchlist-token' => 'Token veur webvoer van volglieste',
+'resettokens-watchlist-token' => 'Token veur webvoer (Atom/RSS) van [[Special:Watchlist|wiezigingen van ziejen die joew volglieste staon]]',
 'resettokens-done' => 'Tokens ongedaonmaken.',
 'resettokens-resetbutton' => 'Ekeuzen tokens ongedaonmaken',
 
@@ -1437,7 +1446,7 @@ Waorschienlik ku'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}
 'prefs-rendering' => 'Ziedweergave',
 'saveprefs' => 'Veurkeuren opslaon',
 'resetprefs' => 'Standardveurkeuren herstellen',
-'restoreprefs' => 'Alle standardinstellingen weerummezetten',
+'restoreprefs' => 'Alle standardinstellingen weerummezetten (veur alle seksies)',
 'prefs-editing' => 'Bewarkingsveld',
 'rows' => 'Regels',
 'columns' => 'Kolommen',
@@ -1526,6 +1535,7 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'prefs-displaywatchlist' => 'Weergave-instellingen',
 'prefs-tokenwatchlist' => 'Token',
 'prefs-diffs' => 'Verschillen',
+'prefs-help-prefershttps' => "Disse veurkeur wörden toe-epast a'j je eigen de volgende keer anmelden.",
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'Geldig netpostadres',
@@ -1662,7 +1672,7 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'action-edit' => 'disse zied bewarken',
 'action-createpage' => 'ziejen schrieven',
 'action-createtalk' => 'overlegziejen anmaken',
-'action-createaccount' => 'disse gebruker anmaken',
+'action-createaccount' => 'disse gebrukerskonto anmaken',
 'action-minoredit' => 'disse bewarking as klein markeren',
 'action-move' => 'disse zied herneumen',
 'action-move-subpages' => 'disse zied en de biebeheurende ziejen die deronder hangen herneumen',
@@ -1683,8 +1693,8 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'action-block' => 'disse gebruker blokkeren',
 'action-protect' => 't beveiligingsnivo van disse zied anpassen',
 'action-rollback' => 'bewarkingen van de leste gebruker die n zied hef ewiezigd rap weerummedreien',
-'action-import' => 'disse zied van n aandere wiki invoeren',
-'action-importupload' => 'disse zied invoeren vanaof n op-estuurd bestaand',
+'action-import' => 'ziejen van n aandere wiki invoeren',
+'action-importupload' => 'ziejen invoeren vanaof n op-estuurd bestaand',
 'action-patrol' => 'bewarkingen van aandere luui op nao-ekeken zetten',
 'action-autopatrol' => 'eigen bewarkingen op nao-ekeken zetten',
 'action-unwatchedpages' => 'bekiek de lieste mit ziejen die niet evolgd wörden',
@@ -1700,6 +1710,8 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|wieziging|wiezigingen}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|sinds joew leste bezeuk}}',
+'enhancedrc-history' => 'geschiedenisse',
 'recentchanges' => 'Leste wiezigingen',
 'recentchanges-legend' => 'Opsies veur leste wiezigingen',
 'recentchanges-summary' => "Op disse zied ku'j de leste wiezigingen van disse wiki bekieken.",
@@ -1732,7 +1744,7 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'rc_categories_any' => 'alles',
 'rc-change-size-new' => '$1 {{PLURAL:$1|byte|bytes}} nao de wieziging',
 'newsectionsummary' => 'Niej onderwarp: /* $1 */',
-'rc-enhanced-expand' => "Details bekieken (hier he'j JavaScript veur neudig)",
+'rc-enhanced-expand' => 'Details bekieken',
 'rc-enhanced-hide' => 'Details verbargen',
 'rc-old-title' => 'oorspronkelik an-emaakt as "$1"',
 
@@ -1965,14 +1977,14 @@ Um beveiligingsredens is img_auth.php uutezet.',
 'http-invalid-scheme' => 'Webadressen mit de opmaak "$1" wörden niet ondersteund.',
 'http-request-error' => 'Fout bie t verzenden van t verzeuk.',
 'http-read-error' => 'Fout bie t lezen van HTTP',
-'http-timed-out' => 'Wachttied bie t HTTP verzeuk',
+'http-timed-out' => 'Tiedsoverschriejing bie t HTTP-verzeuk',
 'http-curl-error' => 'Fout bie t ophaolen van t webadres: $1',
 'http-bad-status' => 'Der is n probleem mit t HTTP-verzeuk: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Kon webadres niet bereiken',
 'upload-curl-error6-text' => "t Webadres kon niet bereikt wörden. Kiek effen nao o'j t goeie adres in-evoerd hebben en of de webstee bereikbaor is.",
-'upload-curl-error28' => 'Wachttied veur t versturen van t bestaand',
+'upload-curl-error28' => 'Tiedsoverschriejing veur t versturen van t bestaand',
 'upload-curl-error28-text' => 't Duren te lange veurdat de webstee reageren. Kiek effen nao of de webstee bereikbaor is, wacht effen en probeer t daornao weer. Probeer t aanders as t wat rustiger is.',
 
 'license' => 'Lisensie',
@@ -1983,8 +1995,7 @@ Um beveiligingsredens is img_auth.php uutezet.',
 'upload_source_file' => ' (n bestaand op de hardeschieve)',
 
 # Special:ListFiles
-'listfiles-summary' => "Op disse spesiale zied ku'j alle bestaanden bekieken die lestens op-estuurd bin.
-As disse zied efilterd wörden op gebruker, zie'j allinnig bestaanden waor de gebruker de leste versie van hef op-estuurd.",
+'listfiles-summary' => "Op disse spesiale zied ku'j alle bestaanden bekieken die lestens op-estuurd bin.",
 'listfiles_search_for' => 'Zeuk naor bestaand:',
 'imgfile' => 'bestaand',
 'listfiles' => 'Bestaandslieste',
@@ -1995,6 +2006,10 @@ As disse zied efilterd wörden op gebruker, zie'j allinnig bestaanden waor de ge
 'listfiles_size' => 'Grootte (bytes)',
 'listfiles_description' => 'Beschrieving',
 'listfiles_count' => 'Versies',
+'listfiles-show-all' => 'Ouwe versies van aofbeeldingen opnemen',
+'listfiles-latestversion' => 'Aktuele versie',
+'listfiles-latestversion-yes' => 'Ja',
+'listfiles-latestversion-no' => 'Nee',
 
 # File description page
 'file-anchor-link' => 'Bestaand',
@@ -2125,8 +2140,8 @@ Vergeet niet de verwiezingen nao te kieken veurda\'j de mal vortdoon.',
 'pageswithprop-text' => 'Op disse zied staon ziejen mit n bepaolde ziedeigenschap.',
 'pageswithprop-prop' => 'Naam van de eigenschap:',
 'pageswithprop-submit' => 'Zeuk',
-'pageswithprop-prophidden-long' => 'lange tekste-eigenschapsweerde verbörgen ({{PLURAL:$1|$1 kilobyte}})',
-'pageswithprop-prophidden-binary' => 'binaere eigenschapsweerde verbörgen ({{PLURAL:$1|$1 kilobyte}})',
+'pageswithprop-prophidden-long' => 'lange teksteigenschapsweerde verbörgen ($1)',
+'pageswithprop-prophidden-binary' => 'binaere eigenschapsweerde verbörgen ($1)',
 
 'doubleredirects' => 'Dubbele deurverwiezingen',
 'doubleredirectstext' => 'Op disse lieste staon alle ziejen die deurverwiezen naor aandere deurverwiezingen.
@@ -2200,6 +2215,7 @@ Meestentieds is leste zied de gewunste doelzied, waor oek de eerste zied heer zo
 'listusers' => 'Gebrukerslieste',
 'listusers-editsonly' => 'Allinnig gebrukers mit bewarkingen laoten zien',
 'listusers-creationsort' => 'Sorteren op inschriefdaotum',
+'listusers-desc' => 'Sorteren in aoflopende volgorde',
 'usereditcount' => '$1 {{PLURAL:$1|bewarking|bewarkingen}}',
 'usercreated' => '{{GENDER:$3|Eregistreerd}} op $1 um $2',
 'newpages' => 'Nieje artikels',
@@ -2465,9 +2481,9 @@ Bevestig hieronder dat dit inderdaod de bedoeling is, da'j de gevolgen begriepen
 'deleteotherreason' => 'Aandere/extra reden:',
 'deletereasonotherlist' => 'Aandere reden',
 'deletereason-dropdown' => '*Redens veur t vortdoon van ziejen
-** Op vrage van de auteur
-** Schending van de auteursrechten
-** Vandelisme',
+** Op verzeuk van de auteur
+** Schending van auteursrecht
+** Vandalisme',
 'delete-edit-reasonlist' => 'Redens veur t vortdoon bewarken',
 'delete-toobig' => 'Disse zied hef n lange bewarkingsgeschiedenisse, meer as $1 {{PLURAL:$1|versie|versies}}.
 t Vortdoon van dit soort ziejen is mit rechten bepark um t per ongelok versteuren van de warking van {{SITENAME}} te veurkoemen.',
@@ -2489,7 +2505,7 @@ n Aander hef disse zied al bewarkt of hersteld naor n eerdere versie.
 De leste bewarking op disse zied is edaon deur [[User:$3|$3]] ([[User talk:$3|Overleg]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "De bewarkingssamenvatting was: ''$1''.",
 'revertpage' => 'Wiezigingen deur [[Special:Contributions/$2|$2]] hersteld tot de versie nao de leste wieziging deur $1',
-'revertpage-nouser' => 'Wiezigingen deur n verbörgen gebruker weerummedreid naor de leste versie deur [[User:$1|$1]]',
+'revertpage-nouser' => 'Wiezigingen deur n verbörgen gebruker weerummedreid naor de leste versie deur {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Wiezigingen van $1; weerummedreid naor de leste versie van $2.',
 
 # Edit tokens
@@ -2540,8 +2556,8 @@ Hier staon de instellingen zo as ze noen bin veur de zied '''$1''':",
 'protect-otherreason' => 'Aandere reden:',
 'protect-otherreason-op' => 'aandere reden',
 'protect-dropdown' => '*Veulveurkomende redens veur beveiliging
-** Vandelisme
-** Ongewunste verwiezingen plaotsen
+** Te veul vandalisme
+** Te veul moekreklame
 ** Bewarkingsoorlog
 ** Zied mit veule bezeukers',
 'protect-edit-reasonlist' => 'Redens veur beveiliging bewarken',
@@ -2626,7 +2642,7 @@ $1',
 'contributions' => '{{GENDER:$1|Biedragen van disse gebruker}}',
 'contributions-title' => 'Biedragen van $1',
 'mycontris' => 'Mien biedragen',
-'contribsub2' => 'Veur $1 ($2)',
+'contribsub2' => 'Veur {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Gien wiezigingen evunnen die an de estelde criteria voldoon.',
 'uctop' => '(leste wieziging)',
 'month' => 'Maond:',
@@ -2676,7 +2692,9 @@ De leste regel uut t blokkeerlogboek steet as referensie',
 'blockip' => 'Gebruker blokkeren',
 'blockip-title' => 'Gebruker blokkeren',
 'blockip-legend' => 'n Gebruker of IP-adres blokkeren',
-'blockiptext' => 'Gebruuk dit formulier um n IP-adres of gebrukersnaam te blokkeren. t Is bedoeld um vandelisme te veurkoemen en mit in akkerderen mit t [[{{MediaWiki:Policy-url}}|beleid]]. Geef hieronder n reden op (bieveurbeeld op welke ziejen de vandelisme epleeg is)',
+'blockiptext' => 'Gebruuk dit formulier um n IP-adres of gebrukersnaam te blokkeren. 
+t Is bedoeld um vandalisme te veurkoemen en mut akkederen mit t [[{{MediaWiki:Policy-url}}|beleid]]. 
+Geef hieronder n reden op (bieveurbeeld op welke ziejen de vandalisme epleegd is).',
 'ipadressorusername' => 'IP-adres of gebrukersnaam',
 'ipbexpiry' => 'Verlöp nao',
 'ipbreason' => 'Reden:',
@@ -3099,6 +3117,7 @@ De tiedelike map is niet anwezig.',
 Iej könt in de bewearkingssamenvatting n reden opgeven.',
 'tooltip-preferences-save' => 'Vuurkeuren opsloan',
 'tooltip-summary' => 'Voer ne korte samenvatting in',
+'tooltip-iwiki' => '$1 – $2',
 
 # Metadata
 'notacceptable' => 'De wikiserver kan de gegevens niet leveren in n vorm die joew kliënt kan lezen.',
@@ -3951,7 +3970,10 @@ Samen mit dit programma heur je n [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van de
 'tags-tag' => 'Etiketnaam',
 'tags-display-header' => 'Weergave in wiezigingsliesten',
 'tags-description-header' => 'Beschrieving van de betekenisse',
+'tags-active-header' => 'Aktief?',
 'tags-hitcount-header' => 'Bewarkingen mit etiket',
+'tags-active-yes' => 'Ja',
+'tags-active-no' => 'Nee',
 'tags-edit' => 'bewarking',
 'tags-hitcount' => '$1 {{PLURAL:$1|wieziging|wiezigingen}}',
 
@@ -3972,6 +3994,7 @@ Samen mit dit programma heur je n [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van de
 'dberr-problems' => 't Spiet ons, mer disse webstee hef op t moment wat techniese problemen.',
 'dberr-again' => 'Wach n paor minuten en probeer t daornao opniej.',
 'dberr-info' => '(Kan gien verbiending maken mit de databankeserver: $1)',
+'dberr-info-hidden' => '(Kan gien verbiending maken mit de databankserver)',
 'dberr-usegoogle' => "Misschien ku'j ondertussen zeuken via Google.",
 'dberr-outofdate' => 'Let op: indexen die zee hebben van onze ziejen bin misschien niet aktueel.',
 'dberr-cachederror' => 'Disse zied is n kopie uut t tussengeheugen en is misschien niet aktueel.',
@@ -4021,9 +4044,9 @@ Samen mit dit programma heur je n [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van de
 'logentry-move-move_redir-noredirect' => '$1 hef de zied $3 {{GENDER:$2|herneumd}} naor $4 over n deurverwiezing heer zonder n deurverwiezing achter te laoten',
 'logentry-patrol-patrol' => '$1 hef versie $4 van de zied $3 op {{GENDER:$2|nao-ekeken}} ezet',
 'logentry-patrol-patrol-auto' => '$1 hef versie $4 van de zied $3 automaties op {{GENDER:$2|nao-ekeken}} ezet',
-'logentry-newusers-newusers' => '$1 hef n gebruker {{GENDER:$2|an-emaakt}}',
-'logentry-newusers-create' => '$1 hef n gebruker {{GENDER:$2|an-emaakt}}',
-'logentry-newusers-create2' => '$1 hef n gebruker $3 {{GENDER:$2|an-emaakt}}',
+'logentry-newusers-newusers' => 'Gebruker $1 is {{GENDER:$2|an-emaakt}}',
+'logentry-newusers-create' => 'Gebruker $1 is {{GENDER:$2|an-emaakt}}',
+'logentry-newusers-create2' => 'Gebruker $3 is {{GENDER:$2|an-emaakt}} an-emaakt deur $1',
 'logentry-newusers-byemail' => 'Gebruker $3 {{GENDER:$2|is}} an-emaakt deur $1 en t wachtwoord is per netpost verstuurd',
 'logentry-newusers-autocreate' => 'De gebruker $1 is automaties {{GENDER:$2|an-emaakt}}',
 'logentry-rights-rights' => '$1 {{GENDER:$2|hef}} groepslidmaotschap veur $3 ewiezigd van $4 naor $5',
@@ -4109,9 +4132,17 @@ Aanders ku\'j oek t eenvoudige formulier hieronder gebruken. Joew kommentaar zal
 
 # Limit report
 'limitreport-title' => 'Parser-profieldata:',
+'limitreport-cputime' => 'Tiedsgebruuk van de prosessor',
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|sekonde|sekonden}}',
+'limitreport-walltime' => 'Reëel tiedsgebruuk',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekonde|sekonden}}',
-'limitreport-postexpandincludesize-value' => '$1/$2 byte',
-'limitreport-templateargumentsize-value' => '$1/$2 byte',
+'limitreport-ppvisitednodes' => 'Antal verbiendingsknopen bezöcht tiejens de veurverwarking:',
+'limitreport-ppgeneratednodes' => 'Antal verbiedingsknopen an-emaakt tiejens de veurverwarking:',
+'limitreport-postexpandincludesize' => 'Inklusiegrootte nao uutbreien',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
+'limitreport-templateargumentsize' => 'Grootte van malparameters',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
+'limitreport-expansiondepth' => 'Hoogste uutbreidingsdiepte',
+'limitreport-expensivefunctioncount' => 'Antal kostbaore parserfunksies',
 
 );
index 15fe0d4..cd42746 100644 (file)
@@ -62,10 +62,10 @@ $messages = array(
 'tog-extendwatchlist' => 'निगरानी सूचीलाई सबै परिवर्तनहरू देखाउने गरी बढाउने , हालैको  बाहेक',
 'tog-usenewrc' => 'पृष्ठका भर्खरका परिवर्तन र अवलोकन सूचीको आधारमा सामूहिक परिवर्तनहरु ( जाभास्क्रिप्ट चाहिन्छ)',
 'tog-numberheadings' => 'शीर्षकहरुलाई स्वत:अङ्कित गर्नुहोस्',
-'tog-showtoolbar' => 'सम्पादन औजारबट्टा देखाउने( जाभा स्क्रिप्ट चाहिन्छ)',
-'tog-editondblclick' => 'दोहोरो क्लिकमा पृष्ठ सम्पादन गर्ने (जाभा स्क्रिप्ट चाहिन्छ)',
+'tog-showtoolbar' => 'सम्पादन औजारबट्टा देखाउने',
+'tog-editondblclick' => 'दोहोरो क्लिकमा पृष्ठ सम्पादन गर्ने',
 'tog-editsection' => '[सम्पादन] सम्बन्ध मार्फत हुने खण्ड सम्पादनलाई सक्षम पार्ने',
-'tog-editsectiononrightclick' => 'शीर्षकमा दाहिने क्लिकद्वारा खण्ड सम्पादन सक्षम पार्ने ( जाभा स्क्रिप्ट चाहिने )',
+'tog-editsectiononrightclick' => 'शीर्षकमा दाहिने क्लिकद्वारा खण्ड सम्पादन सक्षम पार्ने',
 'tog-showtoc' => 'सामग्री तालिका हेर्ने (तीन भन्दा बढी शीर्षक भएमा)',
 'tog-rememberpassword' => 'यस ब्राउजरमा मेरो प्रवेशलाई सम्झनुहोस् (अधिकतम $1 {{PLURAL:$1|दिन|दिनहरु}} सम्म)',
 'tog-watchcreations' => 'मेरो निगरानी सूचीमा मैले सृजना गरेको पृष्ठ र अपलोड जोड्ने',
@@ -83,7 +83,7 @@ $messages = array(
 'tog-shownumberswatching' => 'निगरानी गरिरहेका प्रयोगकर्ताहरुको संख्या देखाउने',
 'tog-oldsig' => 'वर्तमान हस्ताक्षर:',
 'tog-fancysig' => 'मेरो दस्तखतलाई विकि पाठको रुपमा लिने(स्वत सम्वन्ध बिना)',
-'tog-uselivepreview' => 'प्रत्यक्ष पूर्वरुप प्रयोग गर्नुहोस् ( जाभा स्क्रिप्ट आवश्यक) (प्रयोगात्मक)',
+'tog-uselivepreview' => 'प्रत्यक्ष पूर्वरुप प्रयोग गर्नुहोस् (प्रयोगात्मक)',
 'tog-forceeditsummary' => 'खाली सम्पादन सार प्रविष्टि गरेमा मलाई सोध्ने',
 'tog-watchlisthideown' => 'मेरा सम्पादनहरू निगनारी सूचीबाट लुकाउने',
 'tog-watchlisthidebots' => 'बोट सम्पादनहरू निगरानी सूचीबाट लुकाउने',
@@ -96,6 +96,8 @@ $messages = array(
 'tog-showhiddencats' => 'लुकाइएको प्रकारहरु देखाउने',
 'tog-noconvertlink' => 'सम्बन्ध शीर्षक रुपान्तरण निस्क्रिय पार्ने',
 'tog-norollbackdiff' => 'पूर्वस्थितिमा फर्काएपछि  diff हटाउने',
+'tog-useeditwarning' => 'सम्पादनहरू सङ्ग्रह गरिनसकेको अवस्थामा अर्को पृष्ठमा जान खोज्दा चेतावनी देखाउने',
+'tog-prefershttps' => 'प्रवेश गर्दा जहिले पनि सुरक्षित जडान प्रयोग गर्ने',
 
 'underline-always' => 'सधैँ',
 'underline-never' => 'कहिल्यै',
@@ -159,6 +161,18 @@ $messages = array(
 'oct' => 'अक्टोबर',
 'nov' => 'नोभेम्बर',
 'dec' => 'डिसेम्बर',
+'january-date' => 'जनवरी $1',
+'february-date' => 'फेब्रुअरी $1',
+'march-date' => 'मार्च $1',
+'april-date' => 'अप्रिल $1',
+'may-date' => 'मे $1',
+'june-date' => 'जुन $1',
+'july-date' => 'जुलाई $1',
+'august-date' => 'अगस्ट $1',
+'september-date' => 'सेप्टेम्बर $1',
+'october-date' => 'अक्टोबर $1',
+'november-date' => 'नोभेम्बर $1',
+'december-date' => 'डिसेम्बर $1',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|श्रेणी|श्रेणीहरु}}',
@@ -186,7 +200,7 @@ $messages = array(
 'newwindow' => '(नयाँ विन्डोमा खुल्छ)',
 'cancel' => 'रद्द',
 'moredotdotdot' => 'थप...',
-'morenotlisted' => 'थप à¤\9cानà¤\95ारà¥\80 à¤¦à¤¿à¤\87à¤\8fà¤\95à¥\8b  à¤\9bà¥\88न',
+'morenotlisted' => 'यà¥\8b à¤¸à¥\82à¤\9aà¥\80 à¤ªà¥\82रà¥\8dण à¤¹à¥\88न à¥¤',
 'mypage' => 'पृष्ठ',
 'mytalk' => 'वार्ता',
 'anontalk' => 'यस IP को वारेमा वार्तालाप गर्नुहोस्',
@@ -242,6 +256,7 @@ $messages = array(
 'create-this-page' => 'यो पृष्ठ बनाउने',
 'delete' => 'मेट्ने',
 'deletethispage' => 'यो पृष्ठ हटाउनुहोस्',
+'undeletethispage' => 'मेटेको पृष्ठ फिर्तागर्ने',
 'undelete_short' => '{{PLURAL:$1|एउटा  मेटिएको सम्पादन|$1 मेटिएका सम्पादनहरु}} फर्काउने',
 'viewdeleted_short' => '{{PLURAL:$1|मेटिएको सम्पादन |$1 मेटिएका सम्पादनहरू}}',
 'protect' => 'सुरक्षित राख्नुहोस्',
@@ -288,7 +303,7 @@ $1',
 # 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).
 'aboutsite' => '{{SITENAME}}को बारेमा',
 'aboutpage' => 'Project:बारेमा',
-'copyright' => 'लà¥\87à¤\96à¤\95ा à¤¸à¤¾à¤®à¤¾à¤\97à¥\8dरà¥\80 $1 à¤\85नà¥\81सार à¤\89पलबà¥\8dध à¤\9b।',
+'copyright' => 'सामाà¤\97à¥\8dरà¥\80 $1 à¤\85नà¥\81सार à¤\89पलबà¥\8dध à¤\9b, à¤\96à¥\81लाà¤\87à¤\8fà¤\95à¥\8b à¤\85वसà¥\8dथा à¤¬à¤¾à¤¹à¥\87à¤\95à¤\95à¥\8b à¤¹à¤\95मा ।',
 'copyrightpage' => '{{ns:project}}:प्रतिलिपी अधिकारहरु',
 'currentevents' => 'हालैका घटनाहरु',
 'currentevents-url' => 'Project:हालैका घटनाहरु',
@@ -3342,8 +3357,7 @@ $5
 
 # Database error messages
 'dberr-header' => 'यो विकिमा समस्या छ',
-'dberr-problems' => 'क्षमा पाउँ!
-यो साइटमा तकनीकी गड़बड़ी आइपरेकोछ।',
+'dberr-problems' => 'क्षमा पाउँ! यो साइटमा तकनीकी गड़बड़ी आइपरेकोछ।',
 'dberr-again' => 'केही समय पर्खिएर पुन: लोड हुन दिनुहोस् ।',
 'dberr-info' => '(डेटाबेस सर्वर $1सित सम्पर्क साध्न सकिंदैन)',
 'dberr-usegoogle' => 'तपाईले अहिले गुगलबाट खोज गर्न प्रयास गर्न सक्नुहुन्छ।',
index 27a1072..2ff55f1 100644 (file)
@@ -42,6 +42,7 @@
  * @author Servien
  * @author Siebrand
  * @author Slomox
+ * @author Southparkfan
  * @author TBloemink
  * @author Tedjuh10
  * @author Tjcool007
@@ -615,7 +616,7 @@ $1',
 # 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).
 'aboutsite' => 'Over {{SITENAME}}',
 'aboutpage' => 'Project:Info',
-'copyright' => 'De inhoud is beschikbaar onder de $1.',
+'copyright' => 'De inhoud is beschikbaar onder de $1 tenzij anders aangegeven.',
 'copyrightpage' => '{{ns:project}}:Auteursrechten',
 'currentevents' => 'In het nieuws',
 'currentevents-url' => 'Project:In het nieuws',
@@ -699,6 +700,12 @@ Een lijst met bestaande speciale pagina’s staat op [[Special:SpecialPages|{{in
 # General errors
 'error' => 'Fout',
 'databaseerror' => 'Databasefout',
+'databaseerror-text' => 'Er is een databasefout opgetreden.
+Dit kan duiden op een fout in de software.',
+'databaseerror-textcl' => 'Er is een databasefout opgetreden.',
+'databaseerror-query' => 'Zoekopdracht: $1',
+'databaseerror-function' => 'Functie: $1',
+'databaseerror-error' => 'Fout: $1',
 'laggedslavemode' => "'''Waarschuwing:''' in deze pagina zijn recente wijzigingen mogelijk nog niet verwerkt.",
 'readonly' => 'Database geblokkeerd',
 'enterlockreason' => 'Geef een reden op voor de blokkade en geef op wanneer die waarschijnlijk wordt opgeheven',
@@ -825,6 +832,9 @@ Vergeet niet uw [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te pass
 'userlogin-resetpassword-link' => 'Uw wachtwoord opnieuw instellen',
 'helplogin-url' => 'Help:Aanmelden',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hulp bij aanmelden]]',
+'userlogin-loggedin' => 'U bent al aangemeld als {{GENDER:$1|$1}}.
+Gebruik het onderstaande formulier om aan te melden als een andere gebruiker.',
+'userlogin-createanother' => 'Nog een gebruiker aanmaken',
 'createacct-join' => 'Geef uw gegevens hieronder op.',
 'createacct-another-join' => 'Geef hieronder de informatie voor de nieuwe gebruiker op.',
 'createacct-emailrequired' => 'E-mailadres',
@@ -1136,8 +1146,8 @@ Uw eigen .css- en .js-pagina's beginnen met een kleine letter, bijvoorbeeld {{ns
 Uw tekst is niet opgeslagen!",
 'continue-editing' => 'Naar het bewerkingsvenster gaan',
 'previewconflict' => 'Deze voorvertoning geeft aan hoe de tekst in het bovenste veld eruit ziet als u deze opslaat.',
-'session_fail_preview' => "'''Excuses, uw bewerking is niet opgeslagen, omdat de sessiegegevens verloren zijn gegaan.'''
-Probeert U het opnieuw.
+'session_fail_preview' => "'''Uw bewerking is helaas niet opgeslagen omdat de sessiegegevens verloren zijn gegaan.'''
+Probeer het opnieuw.
 Als het dan nog niet lukt, [[Special:UserLogout|meld uzelf dan af]] en vervolgens weer aan.",
 'session_fail_preview_html' => "'''Uw bewerking is niet verwerkt, omdat de sessiegegevens verloren zijn gegaan.'''
 
@@ -1796,8 +1806,8 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'action-block' => 'deze gebruiker een bewerkingsblokkade op te leggen',
 'action-protect' => 'het beveiligingsniveau van deze pagina aan te passen',
 'action-rollback' => 'bewerkingen van de laatste gebruiker die een pagina heeft bewerkt snel terugdraaien',
-'action-import' => 'deze pagina van een andere wiki te importeren',
-'action-importupload' => 'deze pagina uit een bestandsupload importeren',
+'action-import' => "pagina's importeren van een andere wiki",
+'action-importupload' => 'deze pagina importeren uit een bestandsupload',
 'action-patrol' => 'bewerkingen van anderen als gecontroleerd te markeren',
 'action-autopatrol' => 'eigen bewerkingen als gecontroleerd te laten markeren',
 'action-unwatchedpages' => "de lijst met pagina's die niet op een volglijst staan te bekijken",
@@ -2353,6 +2363,7 @@ De pagina's zijn ook niet als sjabloon opgenomen.",
 'listusers' => 'Gebruikerslijst',
 'listusers-editsonly' => 'Alleen gebruikers met bewerkingen weergeven',
 'listusers-creationsort' => 'Sorteren op registratiedatum',
+'listusers-desc' => 'Sorteren in aflopende volgorde',
 'usereditcount' => '$1 {{PLURAL:$1|bewerking|bewerkingen}}',
 'usercreated' => '{{GENDER:$3|Geregistreerd}} op $1 om $2',
 'newpages' => "Nieuwe pagina's",
@@ -2642,7 +2653,7 @@ Iemand anders heeft deze pagina al bewerkt of hersteld naar een eerdere versie.
 De meest recente bewerking is gemaakt door [[User:$3|$3]] ([[User talk:$3|overleg]]{{int:pipe-separator}}[[Special:Contributions/$3|bijdragen]]).',
 'editcomment' => "De bewerkingssamenvatting was: \"''\$1''\".",
 'revertpage' => 'Wijzigingen door [[Special:Contributions/$2|$2]] ([[User talk:$2|Overleg]]) hersteld tot de laatste versie door [[User:$1|$1]]',
-'revertpage-nouser' => 'Wijzigingen door een verborgen gebruiker teruggedraaid naar de laatste versie door [[User:$1|$1]]',
+'revertpage-nouser' => 'Wijzigingen door een verborgen gebruiker teruggedraaid naar de laatste versie door {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'De wijzigingen door $1 zijn teruggedraaid.
 De laatste versie van $2 is hersteld.',
 
@@ -2787,7 +2798,7 @@ $1',
 'contributions' => '{{GENDER:$1|Gebruikersbijdragen}}',
 'contributions-title' => 'Bijdragen van $1',
 'mycontris' => 'Bijdragen',
-'contribsub2' => 'Voor $1 ($2)',
+'contribsub2' => 'Voor {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Geen wijzigingen gevonden die aan de gestelde criteria voldoen.',
 'uctop' => '(laatste wijziging)',
 'month' => 'Van maand (en eerder):',
@@ -3274,6 +3285,7 @@ U kunt wel de broncode bekijken.',
 'tooltip-undo' => 'Met "ongedaan maken" draait u deze bewerking terug en komt in het bewerkingsvenster. U kunt in de bewerkingssamenvatting een reden opgeven.',
 'tooltip-preferences-save' => 'Voorkeuren opslaan',
 'tooltip-summary' => 'Voer een korte samenvatting in',
+'tooltip-iwiki' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/** CSS die hier wordt geplaatst heeft invloed op alle skins */',
@@ -4178,7 +4190,10 @@ Samen met dit programma hoort u een [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van
 'tags-tag' => 'Labelnaam',
 'tags-display-header' => 'Weergave in wijzigingslijsten',
 'tags-description-header' => 'Volledige beschrijving van betekenis',
+'tags-active-header' => 'Actief?',
 'tags-hitcount-header' => 'Gelabelde bewerkingen',
+'tags-active-yes' => 'Ja',
+'tags-active-no' => 'Nee',
 'tags-edit' => 'bewerken',
 'tags-hitcount' => '$1 {{PLURAL:$1|wijziging|wijzigingen}}',
 
@@ -4199,6 +4214,7 @@ Samen met dit programma hoort u een [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van
 'dberr-problems' => 'Onze excuses. Deze site ondervindt op het moment technische problemen.',
 'dberr-again' => 'Wacht een aantal minuten en probeer het daarna opnieuw.',
 'dberr-info' => '(Kan geen verbinding maken met de databaseserver: $1)',
+'dberr-info-hidden' => '(Kan geen verbinding maken met de databaseserver)',
 'dberr-usegoogle' => 'Wellicht kunt u in de tussentijd zoeken via Google.',
 'dberr-outofdate' => "Let op: hun indexen van onze pagina's zijn wellicht niet recent.",
 'dberr-cachederror' => 'Deze pagina is een kopie uit de cache en is wellicht niet de meest recente versie.',
@@ -4343,9 +4359,9 @@ Anders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt
 'limitreport-ppvisitednodes' => 'Aantal nodes bekeken tijdens de voorverwerking:',
 'limitreport-ppgeneratednodes' => 'Aantal nodes aangemaakt tijdens de voorverwerking:',
 'limitreport-postexpandincludesize' => 'Inclusiegrootte na uitbreiden',
-'limitreport-postexpandincludesize-value' => '$1 / $2 bytes',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
 'limitreport-templateargumentsize' => 'Grootte sjabloonparameters',
-'limitreport-templateargumentsize-value' => '$1 / $2 bytes',
+'limitreport-templateargumentsize-value' => '$1 / $2 {{PLURAL:$2|byte|bytes}}',
 'limitreport-expansiondepth' => 'Hoogste uitbreidingsdiepte',
 'limitreport-expensivefunctioncount' => 'Aantal kostbare parserfuncties',
 
index 9c21764..64d0725 100644 (file)
@@ -368,8 +368,8 @@ $messages = array(
 'underline-default' => 'Drakt- eller nettlesarstandard',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'Endre stilen for skrifttypen i området:',
-'editfont-default' => 'Nettlesar i utgangspunktet',
+'editfont-style' => 'Skrifttype i endringsboksen:',
+'editfont-default' => 'Nettlesarstandard',
 'editfont-monospace' => 'Skrift med fast breidd',
 'editfont-sansserif' => 'Skrifttype utan seriffar',
 'editfont-serif' => 'Skrifttype med seriffar',
@@ -941,7 +941,7 @@ Mellombels passord: $2',
 'preview' => 'Førehandsvising',
 'showpreview' => 'Førehandsvis',
 'showlivepreview' => 'Levande førehandsvising',
-'showdiff' => 'Vis skilnader',
+'showdiff' => 'Sjå skilnader',
 'anoneditwarning' => "'''Åtvaring:''' Du er ikkje innlogga.
 IP-adressa di vert lagra i endringshistorikken til sida.",
 'anonpreviewwarning' => "''Du er ikkje innlogga. Lagrar du vil IP-adressa di verta ført opp i endringshistorikken til denne sida.''",
@@ -3014,7 +3014,7 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'tooltip-ca-nstab-category' => 'Vis kategoriside',
 'tooltip-minoredit' => 'Merk dette som småplukk',
 'tooltip-save' => 'Lagra endringane dine',
-'tooltip-preview' => 'Førehandsvis endringane dine, bruk denne funksjonen før du lagrar!',
+'tooltip-preview' => 'Førehandsvis endringane dine. Helst brukar du denne funksjonen før du lagrar.',
 'tooltip-diff' => 'Sjå kva endringar du gjorde i teksten',
 'tooltip-compareselectedversions' => 'Sjå endringane mellom dei valde versjonane av denne sida.',
 'tooltip-watch' => 'Legg sida til i overvakingslista di [alt-w]',
index ff90c3c..d53a578 100644 (file)
@@ -1004,9 +1004,9 @@ o [{{fullurl:{{FULLPAGENAME}}|action=edit}} crear aquesta pagina]</span>.',
 'noarticletext-nopermission' => 'Actualament i a pas cap de tèxte dins aquesta pagina.
 Podètz [[Special:Search/{{PAGENAME}}|far una recèrca sul títol de la pagina]] dins las autras paginas,
 o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} recercar dins los jornals associats]</span>.',
-'missing-revision' => "La rrvision n° $1 de la pagina intitulada « {{PAGENAME}} » existís pas.
+'missing-revision' => "La revision n° $1 de la pagina intitulada « {{PAGENAME}} » existís pas.
 
-Aquò se produsís en general en seguent un ligam istoric obsolèt cap a una pagina qu'es estada suprimida.
+Aquò se produsís en general en seguent un ligam istoric obsolet cap a una pagina qu'es estada suprimida.
 Podètz trobar mai de detalhs dins lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de las supressions].",
 'userpage-userdoesnotexist' => "Lo compte d'utilizaire « <nowiki>$1</nowiki> » es pas enregistrat. Indicatz se volètz crear o editar aquesta pagina.",
 'userpage-userdoesnotexist-view' => "Lo compte d'utilizaire « $1 » es pas enregistrat.",
index bdcda3d..850153d 100644 (file)
@@ -1459,7 +1459,9 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'prefs-signature' => 'ସନ୍ତକ',
 'prefs-dateformat' => 'ତାରିଖ ସଜାଣି',
 'prefs-timeoffset' => 'ସମୟ ଆରମ୍ଭ',
-'prefs-advancedediting' => 'ସାଧାରଣ',
+'prefs-advancedediting' => 'ସାଧାରଣ ବିକଳ୍ପ',
+'prefs-editor' => 'ସମ୍ପାଦକ',
+'prefs-preview' => 'ଦେଖଣା',
 'prefs-advancedrc' => 'ଉନ୍ନତ ବିକଳ୍ପସମୂହ',
 'prefs-advancedrendering' => 'ଉନ୍ନତ ବିକଳ୍ପସମୂହ',
 'prefs-advancedsearchoptions' => 'ଉନ୍ନତ ବିକଳ୍ପସମୂହ',
@@ -1467,7 +1469,9 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'prefs-displayrc' => 'ଦେଖଣା ବିକଳ୍ପ',
 'prefs-displaysearchoptions' => 'ଦେଖଣା ବିକଳ୍ପ',
 'prefs-displaywatchlist' => 'ଦେଖଣା ବିକଳ୍ପ',
+'prefs-tokenwatchlist' => 'ଟୋକନ୍‌',
 'prefs-diffs' => 'ତଫାତସବୁ',
+'prefs-help-prefershttps' => 'ଏହି ପସନ୍ଦ ଆପଣଙ୍କ ଲଗ୍ଇନ୍ କରିବାପରେ କାର୍ଯ୍ୟକ୍ଷମ ହେବ ।',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'ଇ-ମେଲ ଠିକଣା ବୈଧ ଭଳି ଲାଗୁଅଛି',
@@ -2396,8 +2400,8 @@ wiki: $PAGEEDITOR_WIKI
 
 # Rollback
 'rollback' => 'ପୁରାପୁରି ପଛକୁ ଫେରିବା ବଦଳ',
-'rollback_short' => 'ପà­\81ରାପà­\81ରି ପଛକୁ ଫେରିଯିବେ',
-'rollbacklink' => 'ପà­\81ରାପà­\81ରି ପଛକୁ ଫେରିଯିବେ',
+'rollback_short' => 'ପà­\82ରାପà­\82ରି ପଛକୁ ଫେରିଯିବେ',
+'rollbacklink' => 'ପà­\82ରାପà­\82ରି ପଛକୁ ଫେରିଯିବେ',
 'rollbacklinkcount' => '{{PLURAL:$1|edit|edits}} $1 ପଛକୁ ଫେରାଇବେ',
 'rollbacklinkcount-morethan' => '{{PLURAL:$1|edit|edits}} $1ରୁ ଅଧିକ ପଛକୁ ଫେରାଇବେ',
 'rollbackfailed' => 'ପୁରାପୁରି ପଛକୁ ଫେରିବା ବିଫଳ ହେଲା',
@@ -3885,8 +3889,7 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 
 # Database error messages
 'dberr-header' => 'ଏହି ଉଇକିରେ କିଛି ଅସୁବିଧା ଅଛି ।',
-'dberr-problems' => 'କ୍ଷମାକରିବେ ! 
-ଏହି ସାଇଟରେ ଟିକେ ଯାନ୍ତ୍ରିକ',
+'dberr-problems' => 'କ୍ଷମାକରିବେ !  ଏହି ସାଇଟରେ ଟିକେ ବୈଷୟିକ ତ୍ରୁଟି ଦେଖାଦେଇଛି ।',
 'dberr-again' => 'କିଛି ମିନିଟ ଅପେକ୍ଷା କରିବା ସହ ଆଉ ଥରେ ଲୋଡ କରନ୍ତୁ ।',
 'dberr-info' => '(ଡାଟାବେସ ସର୍ଭର ସହ ଯୋଗାଯୋଗ କରିପାରିଲୁ ନାହିଁ: $1)',
 'dberr-usegoogle' => 'ଏହି ସମୟ ଭିତରେ ଆପଣ ଗୁଗଲରେ ଖୋଜି ପାରିବେ ।',
index fa3a13d..270fa0d 100644 (file)
@@ -197,10 +197,10 @@ $messages = array(
 'tog-extendwatchlist' => 'ਸਿਰਫ਼ ਤਾਜ਼ਾ ਹੀ ਨਹੀਂ, ਸਗੋਂ ਸਾਰੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਵਖਾਉਣ ਲਈ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਨੂੰ ਵਧਾਓ',
 'tog-usenewrc' => 'ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਅਤੇ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿੱਚ ਸਫ਼ੇ ਮੁਤਾਬਕ ਤਬਦੀਲੀਆਂ ਦੇ ਗਰੁੱਕ ਬਣਾਓ (ਜਾਵਾਸਕਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
 'tog-numberheadings' => 'ਆਟੋ-ਨੰਬਰ ਸਿਰਨਾਵੇਂ',
-'tog-showtoolbar' => 'ਸੋਧ ਸੰਦਬਕਸਾ ਵੇਖੋ (ਜਾਵਾਸਕਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
-'tog-editondblclick' => "ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰਨ 'ਤੇ ਸਫ਼ੇ ਸੋਧੋ (ਜਾਵਾਸਕਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)",
+'tog-showtoolbar' => 'ਸੋਧ ਸੰਦਬਕਸਾ ਵੇਖੋ',
+'tog-editondblclick' => "ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰਨ 'ਤੇ ਸਫ਼ੇ ਸੋਧੋ",
 'tog-editsection' => '[ਸੋਧੋ] ਲਿੰਕਾਂ ਰਾਹੀਂ ਭਾਗ ਸੋਧਣਾ ਚਾਲੂ ਕਰੋ',
-'tog-editsectiononrightclick' => 'ਭਾà¨\97 à¨¸à¨¿à¨°à¨²à©\87à¨\96ਾà¨\82 ਤੇ ਸੱਜੀ ਕਲਿੱਕ ਨਾਲ਼ ਸੋਧ ਚਾਲੂ ਕਰੋ (ਜਾਵਾਸਕਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
+'tog-editsectiononrightclick' => 'ਸà©\88à¨\95ਸ਼ਨ à¨¸à¨¿à¨°à¨²à©\87à¨\96ਾà¨\82 â\80\99ਤੇ ਸੱਜੀ ਕਲਿੱਕ ਨਾਲ਼ ਸੋਧ ਚਾਲੂ ਕਰੋ (ਜਾਵਾਸਕਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
 'tog-showtoc' => 'ਤਤਕਰਾ ਵਿਖਾਓ (੩ ਤੋਂ ਵੱਧ ਸਿਰਲੇਖਾਂ ਵਾਲੇ ਸਫ਼ਿਆਂ ਲਈ)',
 'tog-rememberpassword' => 'ਇਸ ਬਰਾਊਜ਼ਰ ਉੱਤੇ ਮੇਰਾ ਦਾਖ਼ਲਾ ਯਾਦ ਰੱਖੋ (ਵੱਧ ਤੋਂ ਵੱਧ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਲਈ)',
 'tog-watchcreations' => 'ਮੇਰੇ ਵਲੋਂ ਬਣਾਏ ਗਏ ਸਫ਼ੇ ਅਤੇ ਅੱਪਲੋਡ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਮੇਰੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿੱਚ ਪਾਓ',
@@ -218,7 +218,7 @@ $messages = array(
 'tog-shownumberswatching' => 'ਨਜ਼ਰ ਰੱਖ ਰਹੇ ਵਰਤੋਂਕਾਰਾਂ ਦੀ ਗਿਣਤੀ ਵਖਾਓ',
 'tog-oldsig' => 'ਮੌਜੂਦਾ ਦਸਤਖ਼ਤ:',
 'tog-fancysig' => 'ਦਸਤਖ਼ਤ ਨੂੰ ਬਤੌਰ ਵਿਕੀਲਿਖਤ ਮੰਨੋ (ਬਿਨਾਂ ਆਟੋਮੈਟਿਕ ਲਿੰਕ)',
-'tog-uselivepreview' => 'ਸਿੱਧà©\80 à¨\9dਲà¨\95 à¨µà¨°à¨¤à©\8b (à¨\9cਾਵਾਸà¨\95ਰਿਪà¨\9f à¨²à©\8bà©\9cà©\80à¨\82ਦà©\80 à¨¹à©\88) (ਤà¨\9cਰਬà©\87-à¨\85ਧà©\80ਨ)',
+'tog-uselivepreview' => 'ਸਿੱਧੀ ਝਲਕ ਵਰਤੋ (ਤਜਰਬੇ-ਅਧੀਨ)',
 'tog-forceeditsummary' => 'ਜਦੋਂ ਮੈਂ ਖ਼ਾਲੀ ਸੋਧ ਸਾਰ ਦੇਵਾਂ ਤਾਂ ਮੈਨੂੰ ਆਗਾਹ ਕਰੋ',
 'tog-watchlisthideown' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿੱਚੋਂ ਮੇਰੀਆਂ ਸੋਧਾਂ ਲੁਕਾਓ',
 'tog-watchlisthidebots' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿੱਚੋਂ ਬੋਟਾਂ ਦੀਆਂ ਸੋਧਾਂ ਲੁਕਾਓ',
@@ -331,7 +331,7 @@ $messages = array(
 'newwindow' => '(ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਖੁੱਲ੍ਹਦੀ ਹੈ)',
 'cancel' => 'ਰੱਦ ਕਰੋ',
 'moredotdotdot' => 'ਹੋਰ...',
-'morenotlisted' => '....ਹੋਰ ਸੂਚੀਬੱਧ ਨਹੀਂ',
+'morenotlisted' => 'ਇਹ ਸੂਚੀ ਪੂਰੀ ਨਹੀਂ ਹੈ।',
 'mypage' => 'ਸਫ਼ਾ',
 'mytalk' => 'ਗੱਲ-ਬਾਤ',
 'anontalk' => 'ਇਸ IP ਲਈ ਗੱਲ-ਬਾਤ',
@@ -408,7 +408,7 @@ $messages = array(
 'userpage' => 'ਵਰਤੋਂਕਾਰ ਸਫ਼ਾ ਵੇਖੋ',
 'projectpage' => 'ਪ੍ਰੋਜੈਕਟ ਸਫ਼ਾ ਵੇਖੋ',
 'imagepage' => 'ਫਾਇਲ ਸਫ਼ਾ ਵੇਖੋ',
-'mediawikipage' => 'ਸà©\81ਨà©\87ਹਾ à¨ªà©\87à¨\9c ਵੇਖੋ',
+'mediawikipage' => 'ਸà©\81ਨà©\87ਹਾ à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
 'templatepage' => 'ਫਰਮਾ ਸਫ਼ਾ ਵੇਖੋ',
 'viewhelppage' => 'ਮਦਦ ਸਫ਼ਾ ਵੇਖੋ',
 'categorypage' => 'ਸ਼੍ਰੇਣੀ ਸਫ਼ਾ ਵੇਖੋ',
@@ -597,7 +597,7 @@ $2',
 ਧਿਆਨ ਦਿਉ ਕਿ ਜਿੰਨੀ ਦੇਰ ਤੱਕ ਤੁਸੀਂ ਆਪਣੇ ਬਰਾਊਜ਼ਰ ਦਾ ਕੈਸ਼ ਸਾਫ਼ ਨਹੀਂ ਕਰਦੇ, ਕੁਝ ਸਫ਼ੇ ਇੱਦਾਂ ਵਿਖਣਗੇ ਜਿਵੇਂ ਤੁਸੀਂ ਅਜੇ ਵੀ ਦਾਖ਼ਲ ਹੀ ਹੋ।",
 'welcomeuser' => '$1 ਜੀ ਆਇਆਂ ਨੂੰ!',
 'welcomecreation-msg' => 'ਤੁਹਾਡਾ ਖਾਤਾ ਬਣ ਚੁੱਕਾ ਹੈ। ਆਪਣੀਆਂ [[Special:Preferences|{{SITENAME}} ਪਸੰਦ]] ਬਦਲਣੀ ਨਾ ਭੁੱਲੋ।',
-'yourname' => 'ਯà©\82à¨\9c਼ਰ-ਨਾਂ:',
+'yourname' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ-ਨਾਂ:',
 'userlogin-yourname' => 'ਯੂਜ਼ਰ-ਨਾਂ',
 'userlogin-yourname-ph' => 'ਆਪਣਾ ਯੂਜ਼ਰ-ਨਾਂ ਭਰੋ',
 'createacct-another-username-ph' => 'ਯੂਜ਼ਰ ਨਾਂ ਦਿਓ',
@@ -1235,9 +1235,9 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 'badsiglength' => 'ਦਸਤਖ਼ਤ ਬਹੁਤ ਲੰਬਾ ਹੋ ਗਿਆ ਹੈ। ਇਹ {{PLURAL:$1|ਅੱਖਰ|ਅੱਖਰਾਂ}} ਤੋਂ ਲੰਬਾ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ।',
 'yourgender' => 'ਲਿੰਗ:',
-'gender-unknown' => 'à¨\9c਼ਾਹਰ à¨¨à¨¹à©\80à¨\82 à¨\95à©\80ਤਾ',
-'gender-male' => 'ਮਰਦ',
-'gender-female' => 'à¨\94ਰਤ',
+'gender-unknown' => 'ਮà©\88à¨\82 à¨¦à©±à¨¸à¨£à¨¾ à¨¨à¨¹à©\80à¨\82 à¨\9aਾਹà©\81ੰਦਾ/à¨\9aਾਹà©\81ੰਦà©\80',
+'gender-male' => 'à¨\89ਹ à¨µà¨¿à¨\95à©\80 à¨¸à¨«à¨¼à©\87 à¨¸à©\8bਧਦਾ à¨¹à©\88',
+'gender-female' => 'à¨\89ਹ à¨µà¨¿à¨\95à©\80 à¨¸à¨«à¨¼à©\87 à¨¸à©\8bਧਦà©\80 à¨¹à©\88',
 'email' => 'ਈਮੇਲ',
 'prefs-help-realname' => 'ਅਸਲੀ ਨਾਂ ਚੋਣਵਾਂ ਹੈ, ਅਤੇ ਜੇ ਤੁਸੀਂ ਇਹ ਦਿੱਤਾ ਹੈ ਤਾਂ ਤੁਹਾਡੇ ਕੰਮ ਵਾਸਤੇ ਗੁਣ ਦੇ ਤੌਰ ਉੱਤੇ ਵਰਤਿਆ ਜਾਵੇਗਾ।',
 'prefs-help-email' => 'ਤੁਹਾਡੀ ਮਰਜੀ ਹੈ ਈਮੇਲ ਪਤਾ ਦਿਓ ਜਾਂ ਨਾ ਦਿਓ ਪਰ ਪਾਸਵਰਡ ਭੁੱਲ ਜਾਣ ਤੇ ਨਵਾਂ ਪਾਸਵਰਡ ਹਾਸਲ ਕਰਨ ਲਈ ਇਹ ਜਰੂਰੀ ਹੈ।',
@@ -1249,7 +1249,7 @@ HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 'prefs-signature' => 'ਦਸਤਖ਼ਤ',
 'prefs-dateformat' => 'ਮਿਤੀ ਦਾ ਅੰਦਾਜ਼',
 'prefs-timeoffset' => 'ਸਮੇਂ ਦਾ ਆਫ਼ਸੈੱਟ',
-'prefs-advancedediting' => 'ਆਮ',
+'prefs-advancedediting' => 'ਆਮ ਚੋਣਾਂ',
 'prefs-editor' => 'ਸੰਪਾਦਕ',
 'prefs-preview' => 'ਝਲਕ',
 'prefs-advancedrc' => 'ਤਕਨੀਕੀ ਚੋਣਾਂ',
@@ -1278,7 +1278,7 @@ HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 'userrights-reason' => 'ਕਾਰਨ:',
 'userrights-no-interwiki' => 'ਤੁਹਾਨੂੰ ਦੂਜੇ ਵਿਕੀਆਂ ਤੇ ਮੈਂਬਰਾਂ ਦੇ ਹੱਕਾਂ ਵਿਚ ਤਬਦੀਲੀ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।',
 'userrights-nodatabase' => 'ਡੈਟਾਬੇਸ $1 ਮੌਜੂਦ ਨਹੀਂ ਜਾਂ ਮਕਾਮੀ ਨਹੀਂ ਹੈ।',
-'userrights-notallowed' => 'ਤà©\81ਹਾਡà©\87 à¨\96ਾਤà©\87 à¨¨à©\82à©° à¨®à©\88à¨\82ਬਰ à¨¨à©\82à©° à¨¹à©±à¨\95 à¨¦à©\87ਣ à¨\9cਾà¨\82 à¨\96à©\8bਹਣ à¨¦à©\80 à¨\87à¨\9cਾà¨\9c਼ਤ à¨¨à¨¹à©\80à¨\82 à¨¹à©\88।',
+'userrights-notallowed' => 'ਤà©\81ਹਾਨà©\82à©° à¨¨à©\82à©° à¨¯à©\82à¨\9c਼ਰ à¨¹à©±à¨\95 à¨¦à©\87ਣ à¨\9cਾà¨\82 à¨\96à©\8bਹਣ à¨¦à©\80 à¨\87à¨\9cਾà¨\9c਼ਤ à¨¨à¨¹à©\80à¨\82 à¨¹à©\88।',
 'userrights-changeable-col' => 'ਉਹ ਸਮੂਹ ਜਿਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ ਬਦਲ ਸਕਦੇ ਹੋ',
 'userrights-unchangeable-col' => 'ਉਹ ਸਮੂਹ ਜਿਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ ਬਦਲ ਨਹੀਂ ਸਕਦੇ',
 
@@ -1322,7 +1322,7 @@ HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 'right-block' => 'ਦੂਜੇ ਵਰਤੋਂਕਾਰਾਂ ਦੇ ਸੋਧ ਕਰਨ ਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ',
 'right-blockemail' => 'ਵਰਤੋਂਕਾਰ ਦੇ ਈ-ਮੇਲ ਭੇਜਣ ਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ',
 'right-hideuser' => 'ਵਰਤੋਂਕਾਰ ਦੇ ਨਾਂ ਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ ਅਤੇ ਇਸਨੂੰ ਲੋਕਾਂ ਤੋਂ ਲੁਕਾਉਣਾ',
-'right-unblockself' => 'à¨\86ਪਣà©\87-à¨\86ਪ à¨°à©\8bà¨\95 à¨¹à¨\9fਾà¨\89ਣ',
+'right-unblockself' => 'à¨\95ਿਸà©\87 à¨¤à©\8bà¨\82 à¨ªà¨¾à¨¬à©°à¨¦à©\80 à¨¹à¨\9fਾà¨\93',
 'right-editinterface' => 'ਵਰਤੋਂਕਾਰ ਇੰਟਰਫ਼ੇਸ ਸੋਧੋ',
 'right-editusercss' => 'ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਦੀਆਂ CSS ਫ਼ਾਈਲਾਂ ਸੋਧਣ',
 'right-edituserjs' => 'ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਦੀਆਂ ਜਾਵਾਸਕਰਿਪਟ ਫ਼ਾਈਲਾਂ ਸੋਧਣ',
@@ -1371,7 +1371,7 @@ HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 'action-suppressionlog' => 'ਇਹ ਨਿੱਜੀ ਇੰਦਰਾਜ ਵੇਖੋ',
 'action-block' => 'ਇਸ ਮੈਂਬਰ ਦੇ ਸੋਧ ਕਰਨ ਤੇ ਪਾਬੰਦੀ ਲਾਓ',
 'action-protect' => 'ਇਸ ਸਫ਼ੇ ਦੀ ਸੁਰੱਖਿਆ ਬਦਲੋ',
-'action-import' => 'ਹà©\8bਰ à¨µà¨¿à¨\95à©\80 à¨¤à©\8bà¨\82 à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨®à©°à¨\97ਾà¨\93',
+'action-import' => 'ਹà©\8bਰ à¨µà¨¿à¨\95à©\80 à¨¤à©\8bà¨\82 à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨²à¨µà©\8b',
 'action-importupload' => 'ਫ਼ਾਈਲ ਅੱਪਲੋਡ ਤੋਂ ਇਹ ਸਫ਼ਾ ਮੰਗਾਓ',
 'action-unwatchedpages' => 'ਨਜ਼ਰ ਨਾ ਰੱਖੇ ਜਾ ਰਹੇ ਸਫ਼ਿਆਂ ਦੀ ਸੂਚੀ ਵੇਖੋ',
 'action-mergehistory' => 'ਇਸ ਸਫ਼ੇ ਦੇ ਅਤੀਤ ਨੂੰ ਰਲ਼ਾਉਣ',
@@ -1410,11 +1410,11 @@ HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 'show' => 'ਵਖਾਓ',
 'minoreditletter' => 'ਛੋ',
 'newpageletter' => 'ਨ',
-'boteditletter' => 'ਬੋ',
+'boteditletter' => 'ਬੋ',
 'number_of_watching_users_pageview' => '[$1 ਵੇਖ ਰਹੇ ਹਨ {{PLURAL:$1|ਯੂਜ਼ਰ}}]',
 'rc_categories_any' => 'ਕੋਈ ਵੀ',
 'newsectionsummary' => '/* $1 */ ਨਵਾਂ ਭਾਗ',
-'rc-enhanced-expand' => 'ਵà©\87ਰਵਾ à¨µà©\87à¨\96ਾà¨\93 (à¨\9cਾਵਾਸà¨\95à©\8dਰਿਪà¨\9f à¨²à©\8bà©\9cà©\80à¨\82ਦà©\80 à¨¹à©\88)',
+'rc-enhanced-expand' => 'ਵà©\87ਰਵà©\87 à¨µà©\87à¨\96ਾà¨\93',
 'rc-enhanced-hide' => 'ਵੇਰਵਾ ਲੁਕਾਓ',
 'rc-old-title' => 'ਅਸਲ ਵਿੱਚ "$1" ਵਜੋਂ ਬਣਾਇਆ',
 
@@ -1995,7 +1995,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'nolinkshere' => "ਕੋਈ ਵੀ ਸਫ਼ਾ '''[[:$1]]''' ਨਾਲ ਨਹੀਂ ਜੋੜਦਾ।",
 'isredirect' => 'ਰੀਡਿਰੈਕਟ ਸਫ਼ਾ',
 'istemplate' => 'ਟਾਕਰਾ ਕਰੋ',
-'isimage' => 'ਫ਼ਾà¨\88ਲ à¨\95à©\9cà©\80',
+'isimage' => 'ਫ਼ਾà¨\88ਲ à¨²à¨¿à©°à¨\95',
 'whatlinkshere-prev' => '{{PLURAL:$1|ਪਿਛਲਾ|ਪਿਛਲੇ $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|ਅਗਲਾ|ਅਗਲੇ $1}}',
 'whatlinkshere-links' => '← ਕੜੀਆਂ',
@@ -2008,7 +2008,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 # Block/unblock
 'block' => "ਵਰਤੋਂਕਾਰ 'ਤੇ ਪਾਬੰਦੀ ਲਾਓ",
 'unblock' => "ਵਰਤੋਂਕਾਰ 'ਤੇ ਲੱਗੀ ਪਾਬੰਦੀ ਹਟਾਓ",
-'blockip' => 'ਪਾਬੰਦà©\80ਸ਼à©\81ਦਾ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ',
+'blockip' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ â\80\99ਤà©\87 à¨ªà¨¾à¨¬à©°à¨¦à©\80 à¨²à¨¾à¨\93',
 'blockip-title' => "ਵਰਤੋਂਕਾਰ 'ਤੇ ਪਾਬੰਦੀ ਲਾਓ",
 'blockip-legend' => "ਵਰਤੋਂਕਾਰ 'ਤੇ ਪਾਬੰਦੀ ਲਾਓ",
 'ipadressorusername' => 'IP ਐਡਰੈਸ ਜਾਂ ਯੂਜ਼ਰ ਨਾਂ:',
@@ -2216,7 +2216,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'tooltip-t-contributions' => 'ਇਸ ਵਰਤੋਂਕਾਰ ਦੇ ਯੋਗਦਾਨ ਦੀ ਸੂਚੀ',
 'tooltip-t-emailuser' => 'ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
 'tooltip-t-upload' => 'ਫ਼ਾਈਲਾਂ ਅਪਲੋਡ ਕਰੋ',
-'tooltip-t-specialpages' => 'ਸਾਰà©\87 à¨\96਼ਾਸ à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨¦à©\80 à¨¸à©\82à¨\9aà©\80',
+'tooltip-t-specialpages' => 'ਸਾਰà©\87 à¨\96਼ਾਸ à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨¦à©\80 à¨²à¨¿à¨¸à¨\9f',
 'tooltip-t-print' => 'ਇਸ ਸਫ਼ੇ ਦਾ ਛਪਣਯੋਗ ਵਰਜਨ',
 'tooltip-t-permalink' => 'ਸਫ਼ੇ ਦੇ ਇਸ ਰੀਵਿਜਨ ਲਈ ਪੱਕੀ ਕੜੀ',
 'tooltip-ca-nstab-main' => 'ਸਮੱਗਰੀ ਸਫ਼ਾ ਵੇਖੋ',
@@ -2260,8 +2260,8 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'pageinfo-article-id' => 'ਸਫ਼ੇ ਦੀ ਸ਼ਨਾਖ਼ਤ',
 'pageinfo-language' => 'ਸਫ਼ੇ ਦੀ ਸਮੱਗਰੀ ਦੀ ਭਾਸ਼ਾ',
 'pageinfo-robot-policy' => 'ਇੰਜਨ ਦੀ ਹਾਲਤ ਖੋਜੋ',
-'pageinfo-robot-index' => 'ਤਤà¨\95ਰਾਯà©\8bà¨\97',
-'pageinfo-robot-noindex' => 'à¨\97਼à©\88ਰ-ਤਤà¨\95ਰਾਯà©\8bà¨\97',
+'pageinfo-robot-index' => 'ਮਨà¨\9c਼à©\82ਰ à¨¹à©\88',
+'pageinfo-robot-noindex' => 'ਨਾ-ਮਨà¨\9c਼à©\82ਰ',
 'pageinfo-views' => 'ਵਖਾਵਿਆਂ ਦੀ ਗਿਣਤੀ',
 'pageinfo-watchers' => 'ਸਫ਼ੇ ’ਤੇ ਨਜ਼ਰ ਰੱਖਣ ਵਾਲਿਆਂ ਦੀ ਗਿਣਤੀ',
 'pageinfo-subpages-name' => 'ਇਸ ਸਫ਼ੇ ਦੇ ਉਪ-ਸਫ਼ੇ',
@@ -2719,8 +2719,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 
 # Database error messages
 'dberr-header' => 'ਇਸ ਵਿਕੀ ਵਿਚ ਔਕੜ ਹੈ',
-'dberr-problems' => "ਅਫ਼ਸੋਸ!
-ਇਸ ਸਾਈਟ 'ਤੇ ਕੁਝ ਤਕਨੀਕੀ ਔਕੜਾਂ ਆ ਰਹੀਆਂ ਹਨ।",
+'dberr-problems' => "ਅਫ਼ਸੋਸ! ਇਸ ਸਾਈਟ 'ਤੇ ਕੁਝ ਤਕਨੀਕੀ ਔਕੜਾਂ ਆ ਰਹੀਆਂ ਹਨ।",
 'dberr-again' => 'ਕੁਝ ਮਿੰਟਾਂ ਲਈ ਉਡੀਕ ਕਰਨ ਅਤੇ ਮੁੜ ਲੋਡ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ',
 'dberr-usegoogle' => 'ਉਨੀ ਦੇਰ ਤੱਕ ਤੁਸੀਂ ਗੂਗਲ ਰਾਹੀਂ ਲੱਭਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹੋ।',
 
@@ -2737,6 +2736,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'htmlform-chosen-placeholder' => 'ਕੋਈ ਚੋਣ ਚੁਣੋ',
 
 # New logging system
+'logentry-delete-delete' => '$1 ਨੇ ਸਫ਼ਾ $3 ਮਿਟਾਇਆ',
 'revdelete-content-hid' => 'ਸਮੱਗਰੀ ਲੁਕਾਈ ਹੋਈ',
 'revdelete-summary-hid' => 'ਸੋਧ ਸਾਰ ਲੁਕਾਈ ਹੋਈ',
 'revdelete-uname-hid' => 'ਵਰਤੋਂਕਾਰ ਨਾਂ ਲੁਕਾਇਆ ਹੋਇਆ',
index 3dfc3fe..25ddedf 100644 (file)
@@ -209,7 +209,7 @@ $messages = array(
 'jumptonavigation' => 'Faahre-Gnepp',
 'jumptosearch' => 'guck uff',
 
-# 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).
+# 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).
 'aboutsite' => 'Iwwer {{SITENAME}}',
 'aboutpage' => 'Project:Iwwer_{{SITENAME}}',
 'copyright' => 'Was do drin schdeht iss unner $1 verfiechbar',
index 91ce501..a00080c 100644 (file)
@@ -13,6 +13,7 @@
  * @author Beau
  * @author BeginaFelicysym
  * @author Chrumps
+ * @author Clamira
  * @author Cysioland
  * @author Debeet
  * @author Derbeth
@@ -556,7 +557,7 @@ $1',
 # 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).
 'aboutsite' => 'O {{GRAMMAR:MS.lp|{{SITENAME}}}}',
 'aboutpage' => 'Project:O {{GRAMMAR:MS.lp|{{SITENAME}}}}',
-'copyright' => 'Treść udostępniana na licencji $1.',
+'copyright' => 'Treść udostępniana na licencji $1, jeśli nie podano inaczej.',
 'copyrightpage' => '{{ns:project}}:Prawa_autorskie',
 'currentevents' => 'Bieżące wydarzenia',
 'currentevents-url' => 'Project:Aktualności',
@@ -847,7 +848,7 @@ Poniższe funkcje poczty nie działają.",
 Wpisz poprawny adres e‐mail lub wyczyść pole.',
 'cannotchangeemail' => 'Na tej wiki nie ma możliwości zmiany adresu e‐mail przypisanego do konta.',
 'emaildisabled' => 'Ta witryna nie może wysłać wiadomości e-mail.',
-'accountcreated' => 'Konto zostało utworzone',
+'accountcreated' => 'Utworzono konto',
 'accountcreatedtext' => 'Konto dla [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|dyskusja]]) zostało utworzone.',
 'createaccount-title' => 'Utworzenie konta w {{GRAMMAR:MS.lp|{{SITENAME}}}}',
 'createaccount-text' => 'Ktoś utworzył w {{GRAMMAR:MS.lp|{{SITENAME}}}} ($4), podając Twój adres e‐mail, konto „$2”. Aktualnym hasłem jest „$3”.
@@ -1715,8 +1716,8 @@ Jeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje auto
 'action-block' => 'zablokowania temu użytkownikowi możliwości edycji',
 'action-protect' => 'zmiany poziomu zabezpieczenia tej strony',
 'action-rollback' => 'szybkiego wycofania zmian wprowadzonych przez użytkownika, który jako ostatni edytował tę stronę',
-'action-import' => 'importu tej strony z innej wiki',
-'action-importupload' => 'importu tej strony poprzez przesłanie pliku',
+'action-import' => 'importu stron z innej wiki',
+'action-importupload' => 'importu stron poprzez przesłanie pliku',
 'action-patrol' => 'oznaczenia cudzej edycji jako „sprawdzonej”',
 'action-autopatrol' => 'oznaczenia własnej edycji jako „sprawdzonej”',
 'action-unwatchedpages' => 'podglądu listy nieobserwowanych stron',
@@ -1789,7 +1790,7 @@ Strony z [[Special:Watchlist|listy obserwowanych]] są '''wytłuszczone'''.",
 'upload_directory_missing' => 'Katalog dla przesyłanych plików ($1) nie istnieje i nie może zostać utworzony przez serwer WWW.',
 'upload_directory_read_only' => 'Serwer nie może zapisywać do katalogu ($1) przeznaczonego na przesyłane pliki.',
 'uploaderror' => 'Błąd wysyłania',
-'upload-recreate-warning' => "'''Uwaga – plik o tej nazwie został wcześniej usunięty lub przrniesiony.'''
+'upload-recreate-warning' => "'''Uwaga: plik o tej nazwie został wcześniej usunięty lub przeniesiony.''' 
 
 Poniżej znajduje się rejestr usunięć i zmian nazwy tej strony:",
 'uploadtext' => "Użyj poniższego formularza do przesłania plików.
@@ -1813,7 +1814,7 @@ Przejdź na stronę [[Special:NewFiles|galerii nowych plików]], by zobaczyć pl
 'filestatus' => 'Status prawny',
 'filesource' => 'Źródło',
 'uploadedfiles' => 'Przesłane pliki',
-'ignorewarning' => 'Zignoruj ostrzeżenia i wymuś zapisanie pliku.',
+'ignorewarning' => 'Zignoruj ostrzeżenia i wymuś zapisanie pliku',
 'ignorewarnings' => 'Ignoruj wszystkie ostrzeżenia',
 'minlength1' => 'Nazwa pliku musi składać się co najmniej z jednej litery.',
 'illegalfilename' => 'Nazwa pliku „$1” zawiera znaki niedozwolone w tytułach stron.
@@ -2259,6 +2260,7 @@ Każdy wiersz zawiera linki do pierwszego i drugiego przekierowania oraz link, d
 'listusers' => 'Lista użytkowników',
 'listusers-editsonly' => 'Pokaż tylko użytkowników z edycjami',
 'listusers-creationsort' => 'Sortuj według daty utworzenia',
+'listusers-desc' => 'Sortuj w kolejności malejącej',
 'usereditcount' => '$1 {{PLURAL:$1|edycja|edycje|edycji}}',
 'usercreated' => '{{GENDER:$3|Utworzył|Utworzyła|Utworzone}} $1 o $2',
 'newpages' => 'Nowe strony',
@@ -2521,9 +2523,9 @@ Zobacz na stronie $2 rejestr ostatnio wykonanych usunięć.',
 ** Naruszenie praw autorskich
 ** Wandalizm',
 'delete-edit-reasonlist' => 'Edytuj listę przyczyn usunięcia',
-'delete-toobig' => 'Ta strona ma bardzo długą historię edycji, ponad $1 {{PLURAL:$1|zmianę|zmiany|zmian}}.
-Usunięcie jej mogłoby spowodować zakłócenia w pracy {{GRAMMAR:D.lp|{{SITENAME}}}} i dlatego zostało ograniczone.',
-'delete-warning-toobig' => 'Ta strona ma bardzo długą historię edycji, ponad $1 {{PLURAL:$1|zmianę|zmiany|zmian}}.
+'delete-toobig' => 'Ta strona ma bardzo długą historię edycji – ponad $1 {{PLURAL:$1|zmianę|zmiany|zmian}}.<br />
+Usuwanie jej zostało ograniczone ze względu na możliwość zakłócenia pracy {{GRAMMAR:D.lp|{{SITENAME}}}}.',
+'delete-warning-toobig' => 'Ta strona ma bardzo długą historię edycji – ponad $1 {{PLURAL:$1|zmianę|zmiany|zmian}}.<br />
 Bądź ostrożny, ponieważ usunięcie jej może spowodować zakłócenia w pracy {{GRAMMAR:D.lp|{{SITENAME}}}}.',
 
 # Rollback
@@ -2540,7 +2542,7 @@ Ktoś inny zdążył już to zrobić lub wprowadził własne poprawki do treści
 Autorem ostatniej zmiany jest teraz [[User:$3|$3]] ([[User talk:$3|dyskusja]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Edycję opisał „''$1''”.",
 'revertpage' => 'Wycofano edycje użytkownika [[Special:Contributions/$2|$2]] ([[User talk:$2|dyskusja]]). Autor przywróconej wersji to [[User:$1|$1]].',
-'revertpage-nouser' => 'Wycofano edycje ukrytego użytkownika. Autor przywróconej wersji to [[User:$1|$1]].',
+'revertpage-nouser' => 'Wycofano edycje ukrytego użytkownika. Autor przywróconej wersji to {{GENDER:$1|[[User:$1|$1]]}}.',
 'rollback-success' => 'Wycofano edycje użytkownika $1;
 przywrócono ostatnią wersję autorstwa $2.',
 
@@ -2683,7 +2685,7 @@ $1',
 'contributions' => 'Wkład {{GENDER:$1|użytkownika|użytkowniczki}}',
 'contributions-title' => 'Wkład {{GENDER:$1|użytkownika|użytkowniczki}} $1',
 'mycontris' => 'Edycje',
-'contribsub2' => 'Dla użytkownika $1 ($2)',
+'contribsub2' => 'Dla {{GENDER:$3|użytkownika|użytkowniczki}}$1 ($2)',
 'nocontribs' => 'Brak zmian odpowiadających tym kryteriom.',
 'uctop' => '(ostatnia)',
 'month' => 'Do miesiąca (włącznie)',
@@ -4099,7 +4101,10 @@ Powinieneś otrzymać [{{SERVER}}{{SCRIPTPATH}}/COPYING kopię licencji GNU Gene
 'tags-tag' => 'Nazwa znacznika',
 'tags-display-header' => 'Wystąpienia na listach zmian',
 'tags-description-header' => 'Pełny opis znaczenia',
+'tags-active-header' => 'Aktywny?',
 'tags-hitcount-header' => 'Oznaczone zmiany',
+'tags-active-yes' => 'Tak',
+'tags-active-no' => 'Nie',
 'tags-edit' => 'edytuj',
 'tags-hitcount' => '$1 {{PLURAL:$1|zmiana|zmiany|zmian}}',
 
@@ -4265,9 +4270,9 @@ W przeciwnym wypadku można użyć prostego formularza poniżej. Komentarz zosta
 'limitreport-ppvisitednodes' => 'Liczba odwiedzonych węzłów preprocesora',
 'limitreport-ppgeneratednodes' => 'Liczba wygenerowanych węzłów preprocesora',
 'limitreport-postexpandincludesize' => 'Rozmiar dołączonych elementów po ekspansji',
-'limitreport-postexpandincludesize-value' => '$1/$2 bajtów',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bajt|bajty|bajtów}}',
 'limitreport-templateargumentsize' => 'Rozmiar argumentów szablonów',
-'limitreport-templateargumentsize-value' => '$1/$2 bajtów',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bajt|bajty|bajtów}}',
 'limitreport-expansiondepth' => 'Największa głębokość ekspansji',
 'limitreport-expensivefunctioncount' => 'Liczba wywołań kosztownych funkcji parsera',
 
index 4611e62..6426934 100644 (file)
@@ -49,12 +49,12 @@ $messages = array(
 'tog-hidepatrolled' => "Stërmé le modìfiche dzorvejà ant j'ùltime modìfiche",
 'tog-newpageshidepatrolled' => 'Stërmé le pàgine dzorvejà da la lista dle pàgine neuve',
 'tog-extendwatchlist' => "Slarghé la lista ëd ròba che as ten sot-euj an manera che a la smon-a tute le modìfiche, nen mach j'ùltime",
-'tog-usenewrc' => "Argropré le modìfiche për pàgina ant j'ùltime modìfiche e ant la lista dla ròba ch'as ten sot-euj (a-i và JavaScript)",
+'tog-usenewrc' => "Argropré le modìfiche për pàgina ant j'ùltime modìfiche e ant la lista dla ròba ch'as ten sot-euj",
 'tog-numberheadings' => 'Tìtoj ëd paràgraf<br />che as nùmero daspërlor',
-'tog-showtoolbar' => "Smon-e la bara dj'utiss ëd modìfica (a-i va Javascript)",
-'tog-editondblclick' => "Dobia sgnacà për modifiché l'artìcol (a-i va JavaScript)",
+'tog-showtoolbar' => "Smon-e la bara dj'utiss ëd modìfica",
+'tog-editondblclick' => 'Dobia sgnacà për modifiché la pàgina',
 'tog-editsection' => "Abilité le modìfiche ëd session con j'anliure [modifiché]",
-'tog-editsectiononrightclick' => 'Abilité la modìfica dle session ën sgnacand-je ansima al tìtol col tast drit dël rat (a-i va Javascript)',
+'tog-editsectiononrightclick' => 'Abilité la modìfica dle session ën sgnacand-je ansima ai tìtoj col tast drit dël rat',
 'tog-showtoc' => "Smon-e la tàula dij contnù (për le pàgine che l'han pì che 3 session)",
 'tog-rememberpassword' => "Visesse ëd mia ciav ansima a 's navigador (për al pi $1 {{PLURAL:$1|di}})",
 'tog-watchcreations' => "Gionté le pàgine che i creo mi e j'archivi che i cario mi a la lista ëd lòn che im ten-o sot-euj",
@@ -72,7 +72,7 @@ $messages = array(
 'tog-shownumberswatching' => "Smon-e ël nùmer d'utent che as ten-o la pàgina sot-euj",
 'tog-oldsig' => 'Firma esistenta:',
 'tog-fancysig' => "Traté la firma com dël test wiki (sensa n'anliura automàtica)",
-'tog-uselivepreview' => "Dovré la fonsion ''Preuva dal viv'' (a-i va JavaScript) (sperimental)",
+'tog-uselivepreview' => "Dovré la fonsion ''Preuva dal viv'' (sperimental)",
 'tog-forceeditsummary' => "Ciamé conferma se ël resumé dla modìfica a l'é veujd",
 'tog-watchlisthideown' => 'Stërmé mie modìfiche ant la ròba che im ten-o sot-euj',
 'tog-watchlisthidebots' => 'Stërmé le modìfiche fàite daj trigomiro ant la lista dle ròbe che im ten-o sot-euj',
@@ -86,6 +86,7 @@ $messages = array(
 'tog-noconvertlink' => "Disativé la conversion dij tìtoj ant j'anliure",
 'tog-norollbackdiff' => "Fé nen vëdde le diferense apress d'avèj ripristinà",
 'tog-useeditwarning' => 'Aviseme quand che i chito na pàgina ëd modìfiche con dle modìfiche nen salvà',
+'tog-prefershttps' => "Dovré sempe na conession sigura pr'ësté andrinta al sistema",
 
 'underline-always' => 'Sempe',
 'underline-never' => 'Mai',
@@ -149,6 +150,18 @@ $messages = array(
 'oct' => 'otó',
 'nov' => 'nov',
 'dec' => 'dzè',
+'january-date' => '$1 gené',
+'february-date' => '$1 fërvé',
+'march-date' => '$1 mars',
+'april-date' => '$1 avril',
+'may-date' => '$1 maj',
+'june-date' => '$1 giugn',
+'july-date' => '$1 luj',
+'august-date' => '$1 ost',
+'september-date' => '$1 stèmber',
+'october-date' => '$1 otóber',
+'november-date' => '$1 novèmber',
+'december-date' => '$1 dzèmber',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Categorìa|Categorìe}}',
@@ -174,7 +187,7 @@ $messages = array(
 'newwindow' => '(as deurb ant na fnestra neuva)',
 'cancel' => 'Anulé',
 'moredotdotdot' => 'Ëd pì...',
-'morenotlisted' => "A-i na j'é ëdcò d'àutri nen ant la lista...",
+'morenotlisted' => "Costa lista a l'é nen completa.",
 'mypage' => 'Pàgina',
 'mytalk' => 'Ciaciarade',
 'anontalk' => "Ciaciarade për st'adrëssa IP-sì",
@@ -230,6 +243,7 @@ $messages = array(
 'create-this-page' => 'Creé sta pàgina',
 'delete' => 'Scancelé',
 'deletethispage' => 'Scancelé sa pàgina',
+'undeletethispage' => 'Arcuperé sta pàgina',
 'undelete_short' => 'Arcuperé {{PLURAL:$1|na modìfica|$1 modìfiche}}',
 'viewdeleted_short' => 'Vardé {{PLURAL:$1|na modìfica scancelà|$1 modìfiche scancelà}}',
 'protect' => 'Protege',
@@ -276,7 +290,7 @@ $1",
 # 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).
 'aboutsite' => 'A propòsit ëd {{SITENAME}}',
 'aboutpage' => 'Project:A propòsit',
-'copyright' => 'Ël contnù a resta disponìbil sota a na licensa $1.',
+'copyright' => "Ël contnù a resta disponìbil sota $1 gavà ch'a sia marcà an n'àutra manera.",
 'copyrightpage' => "{{ns:project}}:Drit d'autor",
 'currentevents' => 'Neuve',
 'currentevents-url' => 'Project:Neuve',
@@ -359,6 +373,11 @@ Na lista dle pàgine speciaj bon-e a peul esse trovà ambelessì [[Special:Speci
 # General errors
 'error' => 'Eror',
 'databaseerror' => 'Eror ant la base ëd dat',
+'databaseerror-text' => "A l'é rivaje n'eror d'arcesta ëd base ëd dàit. Sòn a podrìa ven-e da 'n givo ant ël programa.",
+'databaseerror-textcl' => "A l'é rivaje n'eror d'arcesta ëd base ëd dàit.",
+'databaseerror-query' => 'Arcesta: $1',
+'databaseerror-function' => 'Fonsion: $1',
+'databaseerror-error' => 'Eror: $1',
 'laggedslavemode' => "'''Avis:''' la pàgina a podrìa ëdcò nen mostré le modìfiche pi recente.",
 'readonly' => 'Acess a la base ëd dat sërà për chèich temp.',
 'enterlockreason' => 'Che a buta na rason për ël blocagi, con andrinta data e ora ëd quand che a stima che a sarà gavà.',
@@ -392,6 +411,7 @@ Peul desse ch'a l'é già stàit ëscancelà da cheidun d'àutr.",
 'cannotdelete-title' => 'As peul pa scancelesse la pàgina «$1»',
 'delete-hook-aborted' => "Scancelassion anulà da n'estension.
 A l'ha smonù gnun-e spiegassion.",
+'no-null-revision' => 'Impossìbil creé na neuva revision veuida për la pàgina « $1 »',
 'badtitle' => 'Tìtol nen giust',
 'badtitletext' => "Ël tìtol ëd la pàgina che a l'ha ciamà a l'era nen giust, veuid, o un tìtol nen lijà ëd fasson giusta antra le lenghe o antra le wiki. A podrìa conten-e un o pi caràter ch'a peulo nen esse dovrà ant ij tìtoj.",
 '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.",
@@ -439,7 +459,6 @@ L'aministrator ch'a l'ha blocalo a l'ha lassà sta spiegassion: «$3».",
 # Login and logout pages
 'logouttext' => "'''A l'é surtì da 'nt ël sistema.'''
 
-A peul tiré anans a dovré {{SITENAME}} coma utent anònim, ò pura a peul <span class='plainlinks'>[$1 rintré torna ant ël sistema]</span> con l'istess stranòm che a dovrava prima, ò con un diferent.
 Ch'a nòta che chèiche pàgine a peulo continué a esse visualisà com s'a fussa ancor ant ël sistema, fin ch'a scancela nen la memòria local ëd sò navigador.",
 'welcomeuser' => 'Bin ëvnù, $1!',
 'welcomecreation-msg' => "Sò cont a l'é stàit creà.
@@ -596,33 +615,36 @@ Peul desse ch'a l'ha già cambià la ciav o a l'ha ciamà na neuva ciav provisò
 'resetpass-abort-generic' => "La modìfica ëd la ciav a l'é stàita anulà da n'estension.",
 
 # Special:PasswordReset
-'passwordreset' => 'Cambi ëd ciav',
-'passwordreset-legend' => 'Cambié la ciav',
-'passwordreset-disabled' => 'Ij cangiament ëd ciav a son stàit disabilità su sta wiki.',
+'passwordreset' => 'Ri-inissialisassion ëd la ciav',
+'passwordreset-text-one' => "Ch'a completa 's formolari për reimposté soa ciav.",
+'passwordreset-text-many' => "{{PLURAL:$1|Ch'a compila un dij camp për riamposté soa ciav.}}",
+'passwordreset-legend' => 'Riampostassion ëd la ciav',
+'passwordreset-disabled' => "La reinissialisassion ëd le ciav a l'é stàita disabilità su sta wiki.",
+'passwordreset-emaildisabled' => 'Le fonsionalità ëd pòsta eletrònica a son ëstàite disativà su sta wiki.',
 'passwordreset-username' => 'Stranòm:',
 'passwordreset-domain' => 'Domini:',
-'passwordreset-capture' => 'Vardé ël mëssagi arzultant?',
-'passwordreset-capture-help' => "S'a marca costa casela, ël mëssagi ëd pòsta eletrònica (con la ciav temporania) a-j sarà smonù e ant l'istess temp a sarà mandà a l'utent.",
+'passwordreset-capture' => 'Vëdde ël mëssagi arzultant?',
+'passwordreset-capture-help' => "S'a marca costa casela, ël mëssagi ëd pòsta eletrònica (con la ciav provisòria) a-j sarà smonù e ant l'istess temp a sarà mandà a l'utent.",
 'passwordreset-email' => 'Adrëssa ëd pòsta eletrònica:',
-'passwordreset-emailtitle' => 'Detaj dël cont ansima {{SITENAME}}',
-'passwordreset-emailtext-ip' => "Quaidun (a l'é bel fé ch'a sia chiel, da l'adrëssa IP $1) a l'ha ciamà d'arcordé ij detaj ëd sò cont për {{SITENAME}} ($4). {{PLURAL:$3|Ël cont utent sì-sota a l'é|Ij cont utent sì-sota a son}} 
+'passwordreset-emailtitle' => 'Detaj dël cont ansima {{SITENAME}}',
+'passwordreset-emailtext-ip' => "Quaidun (a l'é bel fé ch'a sia chiel, da l'adrëssa IP $1) a l'ha ciamà na riampostassion ëd soa ciav për {{SITENAME}} ($4). {{PLURAL:$3|Ël cont utent sì-sota a l'é|Ij cont utent sì-sota a son}} 
 associà a st'adrëssa ëd pòsta eletrònica:
 
 $2
 
-{{PLURAL:$3|Costa ciav|Coste ciav}} a temp a scadran da sì {{PLURAL:$5|un di|$5 di}}.
+{{PLURAL:$3|Costa ciav provisòria|Coste ciav provisòrie}} a scadran da-sì {{PLURAL:$5|un di|$5 di}}.
 A dovrìa intré ant ël sistema e serne na ciav neuva adess. Se quaidun d'àutr a l'ha fàit costa arcesta, o s'a l'é arcordasse soa ciav original, e a veul pa pi cangela, a peule ignoré ës mëssagi e continué a dovré soa veja ciav.",
-'passwordreset-emailtext-user' => "L'utent $1 ansima a {{SITENAME}} a l'ha ciamà d'arcordé ij detaj ëd sò cont për {{SITENAME}} ($4). {{PLURAL:$3|Ël cont utent sì-sota a l'é|Ij cont utent sì-sota a son}} associà a st'adrëssa ëd pòsta eletrònica:
+'passwordreset-emailtext-user' => "L'utent $1 ansima a {{SITENAME}} a l'ha ciamà na riampostassion ëd soa ciav për {{SITENAME}} ($4). {{PLURAL:$3|Ël cont utent sì-sota a l'é|Ij cont utent sì-sota a son}} associà a st'adrëssa ëd pòsta eletrònica:
 
 $2
 
-{{PLURAL:$3|Costa ciav|Coste ciav}} a temp a scadran da sì {{PLURAL:$5|un di|$5 di}}.
-A dovrìa intré ant ël sistema e serne na ciav neuva adess. Se quaidun d'àutr a l'ha fàit costa arcesta, o s'a l'é arcordasse soa ciav original, e a veul pa pi cangela, a peul ignoré sto mëssagi e continué a dovré soa veja ciav.",
+{{PLURAL:$3|Costa ciav provisòria|Coste ciav provisòrie}} a scadran da-sì {{PLURAL:$5|un di|$5 di}}.
+A dovrìa intré ant ël sistema e serne na ciav neuva adess. Se quaidun d'àutr a l'ha fàit costa arcesta, o s'a l'é arcordasse soa ciav original, e a veul pa pi cangela, a peul ignoré ës mëssagi e continué a dovré soa veja ciav.",
 'passwordreset-emailelement' => 'Stranòm: $1
-Ciav a temp: $2',
-'passwordreset-emailsent' => "Un mëssagi ëd pòsta eletrònica për giuté a arcordé a l'é stàit spedì.",
-'passwordreset-emailsent-capture' => "Un mëssagi ëd pro-memòria a l'é stàit mandà, e a l'é mostrà sì-sota.",
-'passwordreset-emailerror-capture' => "Un mëssagi ëd pro-memòria a l'é stàit generà, e a l'é smonù sì-sota, ma la spedission a l'utent a l'é falìa: $1",
+Ciav provisòria: $2',
+'passwordreset-emailsent' => "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit spedì.",
+'passwordreset-emailsent-capture' => "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit mandà, e a l'é mostrà sì-sota.",
+'passwordreset-emailerror-capture' => "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit generà, e a l'é smonù sì-sota, ma la spedission a {{GENDER:$2|l'utent}} a l'é falìa: $1",
 
 # Special:ChangeEmail
 'changeemail' => "Cangé l'adrëssa ëd pòsta eletrònica",
@@ -631,10 +653,23 @@ Ciav a temp: $2',
 'changeemail-no-info' => 'A dev esse intrà ant ël sistema për andé diretament a costa pàgina.',
 'changeemail-oldemail' => 'Adrëssa ëd pòsta eletrònica atual:',
 'changeemail-newemail' => 'Adrëssa ëd pòsta eletrònica neuva:',
-'changeemail-none' => '(gnun)',
-'changeemail-password' => 'Toa ciav ëd {{SITENAME}}:',
+'changeemail-none' => '(gnun-a)',
+'changeemail-password' => 'Soa ciav su {{SITENAME}}:',
 'changeemail-submit' => "Cangé l'adrëssa ëd pòsta eletrònica",
-'changeemail-cancel' => 'Scancela',
+'changeemail-cancel' => 'Anulé',
+
+# Special:ResetTokens
+'resettokens' => 'Riamposté ij geton',
+'resettokens-text' => "Ambelessì a peul riamposté ij geton ch'a permëtto d'acede a chèich dàit privà associà a sò cont.
+
+A dovrìa felo si për asar chiel a l'ha partagiaje con cheidun o si sò cont a l'é stàit compromëttù.",
+'resettokens-no-tokens' => 'A-i é gnun geton da riamposté.',
+'resettokens-legend' => 'Riamposté ij geton.',
+'resettokens-tokens' => 'Geton:',
+'resettokens-token-label' => '$1 (valor atual: $2)',
+'resettokens-watchlist-token' => "Geton për ël fluss an sl'aragnà (Atom/RSS) ëd [[Special:Watchlist|modìfiche a le pàgine che as ten sot-euj]]",
+'resettokens-done' => 'Geton riampostà.',
+'resettokens-resetbutton' => 'Riamposté ij geton selessionà',
 
 # Edit page toolbar
 'bold_sample' => 'Test an grassèt',
@@ -645,77 +680,76 @@ Ciav a temp: $2',
 'link_tip' => 'Anliura interna',
 'extlink_sample' => "http://www.example.com tìtol dl'anliura",
 'extlink_tip' => 'Anliura esterna (che as visa dë buté ël prefiss http://)',
-'headline_sample' => "Antestassion dl'artìcol",
+'headline_sample' => 'Test dël tìtol',
 'headline_tip' => 'Antestassion dë scond livel',
-'nowiki_sample' => 'Che a buta ël test nen formatà ambelessì',
-'nowiki_tip' => 'Lassé un tòch ëd test fòra dla formatassion dla wiki',
+'nowiki_sample' => 'Che a buta ël test brut ambelessì',
+'nowiki_tip' => 'Lassé un tòch ëd test fòra dla sintassi dla wiki',
 'image_sample' => 'Esempi.jpg',
-'image_tip' => 'Figura anglobà ant ël test',
+'image_tip' => 'Archivi anglobà',
 'media_sample' => 'Esempi.ogg',
 'media_tip' => "Anliura a n'archivi multimedial",
-'sig_tip' => 'Firma butand data e ora',
+'sig_tip' => "Soa signadura con la data e l'ora",
 'hr_tip' => 'Riga orisontal (da dovresse nen tròp soèns)',
 
 # Edit pages
 'summary' => 'Resumé:',
-'subject' => 'Sogèt:',
+'subject' => 'Sogèt/antestassion:',
 'minoredit' => "Costa a l'é na modìfica cita",
-'watchthis' => "Ten sot euj st'artìcol-sì",
-'savearticle' => 'Salva sta pàgina',
-'preview' => 'Preuva',
-'showpreview' => 'Mostra na preuva',
+'watchthis' => 'Ten-e sot euj costa pàgina-sì',
+'savearticle' => 'Salvé la pàgina',
+'preview' => 'Previsualisassion',
+'showpreview' => 'Mostré na preuva',
 'showlivepreview' => "Funsion ''Preuva dal viv''",
 'showdiff' => 'Smon-me le modìfiche',
-'anoneditwarning' => "A l'é ancó nen rintrà ant ël sistema. Soa adrëssa IP a sarà registrà ant la stòria dle modìfiche dë sta pàgina-sì.",
-'anonpreviewwarning' => "''It ses pa intrà. An salvand a sarà memorisà toa adrëssa IP ant la stòria dle modìfiche dë sta pàgina-sì.''",
-'missingsummary' => "'''Nòta:''' a l'ha pa butà gnun somari dla modìfica. Se a sgnaca Salva n'àutra vira, soa modìfica a resterà salvà sensa pa ëd somari.",
-'missingcommenttext' => 'Për piasì che a buta un coment ambelessì sota.',
-'missingcommentheader' => "'''Ch'a arcòrda:''' A l'ha pa dàit soget o intestassion për sto coment-sì.
-Se a sgnaca torna \"{{int:savearticle}}\", soa modìfica a sarà salvà sensa gnun-a intestassion.",
-'summary-preview' => "Preuva dl'oget:",
-'subject-preview' => "Preuva d'oget/intestassion:",
-'blockedtitle' => "Belavans cost ëstranòm-sì a resta col ëd n'utent che a l'é stàit disabilità a fé 'd modìfiche a j'artìcoj.",
+'anoneditwarning' => "'''Atension:''' A l'é nen rintrà ant ël sistema. Soa adrëssa IP a sarà registrà ant la stòria dle modìfiche ëd sa pàgina.",
+'anonpreviewwarning' => "''A l'é nen rintrà ant ël sistema. An salvand a sarà memorisà soa adrëssa IP ant la stòria dle modìfiche ëd sa pàgina.''",
+'missingsummary' => "'''Nòta:''' a l'ha butà gnun resumé dla modìfica. Se a sgnaca «{{int:savearticle}}» n'àutra vira, soa modìfica a resterà salvà sensa resumé.",
+'missingcommenttext' => 'Për piasì, che a buta un coment sì-sota.',
+'missingcommentheader' => "'''Ch'a arcòrda:''' A l'ha pa dàit ëd soget o d'intestassion për cost coment.
+Se a sgnaca torna «{{int:savearticle}}», soa modìfica a sarà salvà sensa gnun-a intestassion.",
+'summary-preview' => 'Preuva dël resumé:',
+'subject-preview' => "Preuva dl'oget/intestassion:",
+'blockedtitle' => "L'utent a l'é blocà.",
 'blockedtext' => "'''Sò stranòm ò pura adrëssa IP a l'é stàit blocà.'''
 
-Ël blocagi a l'é stàit fàit da \$1.
-Coma rason a l'ha butà ''\$2''.
+Ël blocagi a l'é stàit fàit da $1.
+Coma rason a l'ha butà ''$2''.
 
-* Blocà a parte dal: \$8
-* Fin al: \$6
-* As veul blochesse: \$7
+* Blocà a parte dal: $8
+* Fin al: $6
+* As veul blochesse: $7
 
-A peul butesse an contat con \$1 ò pura n'àotr [[{{MediaWiki:Grouppage-sysop}}|aministrator]] për discute ëd sò blocagi.
-Ch'a ten-a present ch'a podrà dovré la fonsion \"mandeje un messagi ëd pòsta a l'utent\" mach s'a l'ha specificà n'adrëssa ëd pòsta vàlida ant [[Special:Preferences|sò gust]] e se sta fonsion a l'é nen ëstàita blocà 'cò chila.
-Soa adrëssa IP corenta a l'é \$3, e l'identificativ dël blocagi a l'é #\$5.
+A peul butesse an contat con $1 ò pura n'àotr [[{{MediaWiki:Grouppage-sysop}}|aministrator]] për discute ëd sò blocagi.
+Ch'a ten-a present ch'a podrà dovré la fonsion «mandeje un messagi ëd pòsta eletrònica a l'utent» mach s'a l'ha specificà n'adrëssa ëd vàlida ant [[Special:Preferences|sò gust]] e se sta fonsion a l'é nen ëstàita blocà 'cò chila.
+Soa adrëssa IP corenta a l'é $3, e l'identificativ dël blocagi a l'é #$5.
 Për piasì, ch'a-j buta tut e doj ant soe comunicassion ant sta question-sì.",
-'autoblockedtext' => "Soa adrëssa IP a l'è stàita blocà n'automàtich ën essend ch'a l'era dovrà da n'àutr utent, che a l'é stàit blocà da \$1.
-La rason butà për ël blocagi a l'é
+'autoblockedtext' => "Soa adrëssa IP a l'è stàita blocà n'automàtich ën essend ch'a l'era dovrà da n'àutr utent, che a l'é stàit blocà da $1.
+La rason ësmonùa a l'é
 
-:''\$2''
+:''$2''
 
-* Ël blocagi a part dël: \$8
-* A va a la fin dël: \$6
-* Antërval ëd blocagi: \$7
+* Ël blocagi a part dai: $8
+* A va a la fin ai: $6
+* As veul blochesse: $7
 
-A peul contaté \$1 ò pura n'àotr dj'[[{{MediaWiki:Grouppage-sysop}}|aministrator]] për discute d'ës blocagi.
+A peul contaté $1 ò pura n'àotr dj'[[{{MediaWiki:Grouppage-sysop}}|aministrator]] për discute d'ës blocagi.
 
-Ch'a varda mach ch'a peul nen dovré l'opsion ëd \"mandeje un messagi a l'utent\" se a l'ha nen n'adrëssa ëd pòsta eletrònica registrà e verificà ant [[Special:Preferences|sò gust]] e se chiel a l'é stàit blocà ëdcò dal dovrela.
+Ch'a varda mach ch'a peul nen dovré l'opsion ëd «mandeje un mëssagi a l'utent» se a l'ha nen n'adrëssa ëd pòsta eletrònica vàlida registrà ant [[Special:Preferences|sò gust]] o se chiel a l'é stàit blocà ëdcò dal dovrela.
 
-Soa adrëssa IP corenta a l'é \$3, e sò nùmer ëd blocagi a l'é \$5.
-Për piasì, ch'a buta sempe tùit ij detaj an tute le comunicassion andova ch'as parla ëd sò blocagi.",
-'blockednoreason' => "a l'han pa butà gnun-a rason",
-'whitelistedittext' => 'A venta $1 për podèj fé dle modìfiche.',
-'confirmedittext' => 'A dev confermé soa adrëssa ëd pòsta eletrònica, anans che modifiché dle pàgine. Për piasì, che a convàlida soa adrëssa ën dovrand la pàgina [[Special:Preferences|mè gust]].',
+Soa adrëssa IP corenta a l'é $3, e sò nùmer ëd blocagi a l'é $5.
+Për piasì, ch'a buta sempe tùit ij detaj an tute j'arceste ch'a farà.",
+'blockednoreason' => 'gnun-a rason butà',
+'whitelistedittext' => 'A dev $1 për podèj fé dle modìfiche a le pàgine.',
+'confirmedittext' => 'A dev confermé soa adrëssa ëd pòsta eletrònica, anans che modifiché dle pàgine. Për piasì, che a convàlida soa adrëssa ën dovrand la pàgina dij [[Special:Preferences|sò gust]].',
 'nosuchsectiontitle' => 'As peul pa trovesse la session',
 'nosuchsectiontext' => "A l'ha provasse a modifiché na session ch'a-i é pa.
-A peul essa stàita tramudà o scancelà an mente ch'a vëdìa la pàgina.",
-'loginreqtitle' => 'a venta rintré ant ël sistema',
+A peul essa stàita tramudà o scancelà antramentre ch'a vëdìa la pàgina.",
+'loginreqtitle' => 'A venta rintré ant ël sistema',
 'loginreqlink' => 'rintré ant ël sistema',
-'loginreqpagetext' => "Che a pòrta passiensa, ma a dev $1 për podèj vëdde dj'àutre pàgine.",
+'loginreqpagetext' => "A dev $1 për podèj vëdde j'àutre pàgine.",
 'accmailtitle' => 'Ciav spedìa.',
-'accmailtext' => "Na ciav generà a cas për [[User talk:$1|$1]] a l'é stàita mandà a $2.
-
-La ciav për cost neuv cont a peul esse cambià an duvertand la pàgina ''[[Special:ChangePassword|cambia ciav]]''",
+'accmailtext' => "Na ciav generà a l'ancàpit për [[User talk:$1|$1]] a l'é stàita mandà a $2.
+A peul esse modificà an sla pàgina ''[[Special:ChangePassword|modìfica dla ciav]]'' apress esse rintrà ant ël sistema.",
 'newarticle' => '(Neuv)',
 'newarticletext' => "It ses andàit daré a un colegament a na pàgina che a esist ancó pa.
 Për creé la pàgina, ancamin-a a scrive ant lë spassi sì-sota (varda la [[{{MediaWiki:Helppage}}|pàgina d'agiut]] për savèjne ëd pì).
@@ -792,7 +826,7 @@ Ant l'istess temp, ën mandand dël material un as pija la responsabilità dë d
 'longpageerror' => "'''EROR: Ël test che a l'ha mandà a l'é longh {{PLURAL:$1|un kilobyte|$1 kilobyte}} , che a resta pì che ël
 lìmit màssim ëd {{PLURAL:$2|un kilobyte|$2 kilobyte}}. Parèj as peul pa salvesse.",
 'readonlywarning' => "'''Avis: La base dat a l'é stàita blocà për manutension, e donca a podrà pa salvesse soe modìfiche tut sùbit.'''
-A peul esse che a-j ven-a còmod copiesse via sò test e butesslo da na part për salvelo peuj.
+A peul esse che a-j ven-a còmod copiesse via sò test e ancoless-lo an n'archivi ëd test e goernelo për pi tard.
 
 L'aministrator che a l'ha fàit ël blocagi a l'ha dàit costa spiegassion: $1",
 'protectedpagewarning' => "'''Avis: costa pàgina-sì a l'é stàita blocà an manera che mach j'utent con la qualìfica da aministrator a peulo feje dle modìfiche.'''
@@ -873,6 +907,7 @@ Costi paràmeter a son stàit lassà fòra.",
 'undo-failure' => "Sta modìfica a l'é nen podusse scancelé për via che a-i son dle contradission antra version antrames.",
 'undo-norev' => "La modìfica a peul nen esse anulà përchè a esist pa o a l'é stàita anulà.",
 'undo-summary' => 'Gavà la revision $1 fàita da [[Special:Contributions/$2|$2]] ([[User talk:$2|Ciaciarade]])',
+'undo-summary-username-hidden' => "Anulé la revision $1 ëd n'utent ëstërmà",
 
 # Account creation failure
 'cantcreateaccounttitle' => "As peul pa registresse d'utent",
@@ -1051,6 +1086,7 @@ Ch'a varda mach che a-i ven-a nen fòra un rabel ant la continuità stòrica.",
 'compareselectedversions' => 'Paragon-a le version selessionà',
 'showhideselectedversions' => 'Smon-e/stërmé le version selessionà',
 'editundo' => "buta 'me ch'a l'era",
+'diff-empty' => '(Gnun-a diferensa)',
 'diff-multi' => "({{PLURAL:$1|Na revision antërmedia|$1 revision antërmedie}} ëd {{PLURAL:$2|n'utent|$2 utent}} pa mostrà)",
 'diff-multi-manyusers' => "({{PLURAL:$1|Na revision antërmedia|$1 revision antërmedie}} da pi che $2 {{PLURAL:$2|n'utent|utent}} pa mostrà)",
 'difference-missing-revision' => "{{PLURAL:$2|Na revision|$2 revision}} dë sta diferensa ($1) a {{PLURAL:$2|l'é pa stàita|son pa stàite}} trovà.
@@ -1100,7 +1136,7 @@ Sòn a l'é normalment causà da l'andèje dapress a na veja liura stòrica a na
 'search-interwiki-default' => 'Arzultà da $1:',
 'search-interwiki-more' => '(ëd pì)',
 'search-relatedarticle' => 'Corelà',
-'mwsuggest-disable' => 'Disabilité ij sugeriment AJAX',
+'mwsuggest-disable' => "Disabilité ij sugeriment d'arserca",
 'searcheverything-enable' => 'Sërché ant tùit jë spassi nominaj',
 'searchrelated' => 'corelà',
 'searchall' => 'tuti',
@@ -1120,6 +1156,7 @@ Ch'a preuva a gionté dnans a soa arserca ël prefiss ''all:'' për sërché an
 'powersearch-togglenone' => 'Gnun',
 'search-external' => 'Arserca esterna',
 'searchdisabled' => "L'arserca anterna ëd {{SITENAME}} a l'é nen abilità; për adess a peul prové a dovré un motor d'arserca estern coma Google. (Però che a ten-a da ment che ij contnù ëd {{SITENAME}} listà ant ij motor pùblich a podrìo ëdcò esse nen d'autut agiornà)",
+'search-error' => "A l'é rivaje n'eror durant l'arserca: $1",
 
 # Preferences page
 'preferences' => 'Mè gust',
@@ -1151,7 +1188,7 @@ Ch'a preuva a gionté dnans a soa arserca ël prefiss ''all:'' për sërché an
 'prefs-rendering' => 'Sembiansa',
 'saveprefs' => 'Salvé ij sò gust',
 'resetprefs' => 'Buté torna ij "mè gust" coma a-i ero al prinsipi',
-'restoreprefs' => "Buté torna j'ampostassion dë stàndard",
+'restoreprefs' => "Buté torna j'ampostassion dë stàndard (an tute le session)",
 'prefs-editing' => 'Quàder ëd modìfica dël test',
 'rows' => 'Righe:',
 'columns' => 'Colòne:',
@@ -3681,8 +3718,7 @@ A dovrìa avèj arseivù [{{SERVER}}{{SCRIPTPATH}}/COPYING na còpia dla Licensa
 
 # Database error messages
 'dberr-header' => "Sta wiki-sì a l'ha un problema",
-'dberr-problems' => "An dëspias!
-Ës sit a l'ha dle dificoltà técniche.",
+'dberr-problems' => "An dëspias! Ës sit a l'ha dle dificoltà técniche.",
 'dberr-again' => "Ch'a speta chèiche minute e ch'a preuva torna a carié.",
 'dberr-info' => '(Conession al servent ëd base ëd dàit impossìbil: $1)',
 'dberr-usegoogle' => 'Antratant a peul prové a sërché con Google.',
index 533ce7e..fceb4c7 100644 (file)
@@ -3429,8 +3429,7 @@ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
 # Database error messages
 'dberr-header' => 'ایس وکی چ کوئی مسلہ اے۔',
-'dberr-problems' => 'معاف کرنا !
-ایس صفے تے تکنیکی مسلے آرۓ نیں۔',
+'dberr-problems' => 'معاف کرنا ! ایس صفے تے تکنیکی مسلے آرۓ نیں۔',
 'dberr-again' => 'تھو ڑے منٹ انتظار کرو تے دوبارہ لوڈ کرو۔',
 'dberr-info' => '(ڈیٹابیس سرور نال میل نئیں ہوسکیا:$1)',
 'dberr-usegoogle' => 'تسیں گوکل راہیں کھوج کر سکدے او۔',
index f324740..e790e10 100644 (file)
@@ -160,24 +160,24 @@ $magicWords = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'کرښنې تړنې:',
-'tog-justify' => 'پاراګرافونه همجوليزول',
+'tog-justify' => 'پاراگرافونه همجوليزول',
 'tog-hideminor' => 'په وروستيو بدلونو کې واړه سمونونه پټول',
 'tog-hidepatrolled' => 'په وروستيو بدلونونو کې څارل شوې سمونونه پټول',
 'tog-newpageshidepatrolled' => 'د نوؤ مخونو په لړليک کې کتل شوي مخونه پټول',
 'tog-extendwatchlist' => 'يوازې د وروستني بدلونونو د ښکاره کولو لپاره نه بلکه د ټولو بدلونونو د ښکاره کولو لپاره کتنلړ غځول',
 'tog-usenewrc' => 'په کتنلړ او وروستي بدلونو مخ باندې ډله ايز بدلونونه (جاوا سکرېپټ ته اړتيا ده)',
 'tog-numberheadings' => 'د سرليکونو خپلکاره شمېرايښودنه',
-'tog-showtoolbar' => 'د Ø³Ù\85Ù\88Ù\84Ù\88 ØªÙ\88کپټÙ\87 Ú\9aکارÙ\87 Ú©Ù\88Ù\84 (جاÙ\88اسکرÛ\90پټ)',
-'tog-editondblclick' => 'په دوه کلېک سره د مخونو سمون (د جاواسکرېپټ اړتيا ده)',
-'tog-editsection' => 'د [سÙ\85Ù\88Ù\84] ØªÚ\93Ù\86Û\90 Ù\84Ù\87 Ù\84Ù\88رÙ\8a Ø¯ Ù\8aÙ\88Û\90 Ù\84Ù\8aÚ©Ù\86Û\90 Ù\8aÙ\88Ù\87 Ø¨Ø±Ø®Ù\87 Ø¯ Ø³Ù\85Ù\88Ù\86 Ù\88Ú\93 Ú«رځول',
-'tog-editsectiononrightclick' => 'د ښي کلېک سره د سرليکونو د برخې سمون چارنول (جاواسکرېپټ ته اړتيا)',
+'tog-showtoolbar' => 'د Ø³Ù\85Ù\88Ù\86 Ø§Ù\88زارپټÙ\87 Ú\9aکارÙ\87 Ú©Ù\88Ù\84',
+'tog-editondblclick' => 'په دوه کلېک سره د مخونو سمون',
+'tog-editsection' => 'د [سÙ\85Ù\88Ù\84] ØªÚ\93Ù\86Û\90 Ù\84Ù\87 Ù\84Ù\88رÙ\8a Ø¯ Ù\8aÙ\88Û\90 Ù\84Ù\8aÚ©Ù\86Û\90 Ù\8aÙ\88Ù\87 Ø¨Ø±Ø®Ù\87 Ø¯ Ø³Ù\85Ù\88Ù\86 Ù\88Ú\93 Ú¯رځول',
+'tog-editsectiononrightclick' => 'د ليکنې د يوې برخې په سرليک ښي کلېک کول د هغې برخې سمون چارنوي',
 'tog-showtoc' => 'نيوليک ښکاره کول (د هغو مخونو لپاره چې له ۳ نه ډېر سرليکونه لري)',
 'tog-rememberpassword' => 'زما کارن-نوم په دې کتنمل (تر $1 {{PLURAL:$1|ورځې|ورځو}}) په ياد وساته!',
-'tog-watchcreations' => 'زÙ\85ا Ú©ØªÙ\86Ù\84Ú\93 Ú©Û\90 Ø¯Û\90 Ù\87غÙ\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ú\86Û\90 Ø²Ù\87 Ù\8aÛ\90 Ø¬Ù\88Ú\93Ù\88Ù\85 Ø§Ù\88 Ù\87غÙ\87 Ø¯Ù\88تÙ\86Û\90 Ú\86Û\90 Ø²Ù\87 Ù\8aÛ\90 Ù¾Ù\88رتÙ\87 Ú©Ù\88Ù\85 Ù\88رګډې شي',
-'tog-watchdefault' => 'زÙ\85ا Ú©ØªÙ\86Ù\84Ú\93 Ú©Û\90 Ø¯Û\90 Ù\87غÙ\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ø§Ù\88 Ø¯Ù\88تÙ\86Û\90 Ù\88رګډې شي چې زه يې سموم',
-'tog-watchmoves' => 'زÙ\85ا Ú©ØªÙ\86Ù\84Ú\93 Ú©Û\90 Ø¯Û\90 Ù\87غÙ\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ø§Ù\88 Ø¯Ù\88تÙ\86Û\90 Ù\88رګډې شي چې زه يې لېږدوم',
-'tog-watchdeletion' => 'زÙ\85ا Ú©ØªÙ\86Ù\84Ú\93 Ú©Û\90 Ø¯Û\90 Ù\87غÙ\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ø§Ù\88 Ø¯Ù\88تÙ\86Û\90 Ù\88رګÚ\89Û\90 Ø´Ù\8a Ú\86Û\90 Ø²Ù\87 Ù\8aÛ\90 Ú\93Ù\86Ú«وم',
-'tog-minordefault' => 'Ù¾Ù\87 ØªÙ\84Ù\88اÙ\84Ù\8aزÙ\87 ØªÙ\88Ú«ه ټول سمونونه واړه په نخښه کول',
+'tog-watchcreations' => 'زÙ\85ا Ú©ØªÙ\86Ù\84Ú\93 Ú©Û\90 Ø¯Û\90 Ù\87غÙ\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ú\86Û\90 Ø²Ù\87 Ù\8aÛ\90 Ø¬Ù\88Ú\93Ù\88Ù\85 Ø§Ù\88 Ù\87غÙ\87 Ø¯Ù\88تÙ\86Û\90 Ú\86Û\90 Ø²Ù\87 Ù\8aÛ\90 Ù¾Ù\88رتÙ\87 Ú©Ù\88Ù\85 Ù\88رگډې شي',
+'tog-watchdefault' => 'زÙ\85ا Ú©ØªÙ\86Ù\84Ú\93 Ú©Û\90 Ø¯Û\90 Ù\87غÙ\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ø§Ù\88 Ø¯Ù\88تÙ\86Û\90 Ù\88رگډې شي چې زه يې سموم',
+'tog-watchmoves' => 'زÙ\85ا Ú©ØªÙ\86Ù\84Ú\93 Ú©Û\90 Ø¯Û\90 Ù\87غÙ\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ø§Ù\88 Ø¯Ù\88تÙ\86Û\90 Ù\88رگډې شي چې زه يې لېږدوم',
+'tog-watchdeletion' => 'زÙ\85ا Ú©ØªÙ\86Ù\84Ú\93 Ú©Û\90 Ø¯Û\90 Ù\87غÙ\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ø§Ù\88 Ø¯Ù\88تÙ\86Û\90 Ù\88رگÚ\89Û\90 Ø´Ù\8a Ú\86Û\90 Ø²Ù\87 Ù\8aÛ\90 Ú\93Ù\86Ú¯وم',
+'tog-minordefault' => 'Ù¾Ù\87 ØªÙ\84Ù\88اÙ\84Ù\8aزÙ\87 ØªÙ\88Ú¯ه ټول سمونونه واړه په نخښه کول',
 'tog-previewontop' => 'د سمون بکس نه دمخه مخکتنه ښکاره کول',
 'tog-previewonfirst' => 'په لومړي سمون کې مخکتنه ښکاره کول',
 'tog-nocache' => 'د کتنمل د مخ ياده ساتنې چار ناچارندول',
@@ -187,8 +187,8 @@ $messages = array(
 'tog-enotifrevealaddr' => 'په يادښت برېښليک کې زما برېښليک پته ښکاره کول',
 'tog-shownumberswatching' => 'د کتونکو کارنانو شمېر ښکاره کول',
 'tog-oldsig' => 'اوسنی لاسليک:',
-'tog-fancysig' => 'Ù\84اسÙ\84Ù\8aÚ© Ø¯ Ù\88Ù\8aÚ©Ù\8a Ù\85تÙ\86 Ù¾Ù\87 ØªÙ\88Ú«ه په پام کې نيول (د خپلکاره تړن د تړلو پرته)',
-'tog-uselivepreview' => 'Ú\98Ù\88Ù\86دÛ\8d Ù\85Ø®Ù\84Ù\8aدÙ\86Ù\87 Ú©Ø§Ø±Ù\88Ù\84 (جاÙ\88ا Ø³Ú©Ø±Û\90پټ ØªÙ\87 Ø§Ú\93تÙ\8aا) (آزÙ\85Û\90Ú\9aتÙ\8a)',
+'tog-fancysig' => 'Ù\84اسÙ\84Ù\8aÚ© Ø¯ Ù\88Ù\8aÚ©Ù\8a Ù\85تÙ\86 Ù¾Ù\87 ØªÙ\88Ú¯ه په پام کې نيول (د خپلکاره تړن د تړلو پرته)',
+'tog-uselivepreview' => 'ژوندۍ مخليدنه کارول (آزمېښتي)',
 'tog-forceeditsummary' => 'د يوه تش سمون لنډيز په ورکولو سره دې خبر راکړل شي',
 'tog-watchlisthideown' => 'په کتنلړ کې زما سمونې پټول',
 'tog-watchlisthidebots' => 'په کتنلړ کې د روباټ سمونې پټول',
@@ -197,7 +197,7 @@ $messages = array(
 'tog-watchlisthideanons' => 'په کتنلړ کې د ورکنومو کارنانو سمونې پټول',
 'tog-watchlisthidepatrolled' => 'په کتنلړ کې څارل شوې سمونې پټول',
 'tog-ccmeonemails' => 'هغه برېښليکونه چې زه يې نورو ته لېږم، د هغو يوه کاپي دې ماته هم راشي',
-'tog-diffonly' => 'د ØªÙ\88Ù¾Ù\8aرÙ\88Ù\86Ù\88 Ù\86Ù\87 Ù\84اÙ\86دÛ\90 Ø¯ Ù\85Ø® Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«ه پټول',
+'tog-diffonly' => 'د ØªÙ\88Ù¾Ù\8aرÙ\88Ù\86Ù\88 Ù\86Ù\87 Ù\84اÙ\86دÛ\90 Ø¯ Ù\85Ø® Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯ه پټول',
 'tog-showhiddencats' => 'پټې وېشنيزې ښکاره کول',
 'tog-norollbackdiff' => 'پرشاتمبولو وروسته توپيرونه نه ښودل',
 'tog-useeditwarning' => 'کله چې يو سمون مخ څخه د بدلونونو د خوندي کولو پرته وځم خبر دې شم',
@@ -217,17 +217,17 @@ $messages = array(
 'sunday' => 'يونۍ',
 'monday' => 'دونۍ',
 'tuesday' => 'درې نۍ',
-'wednesday' => 'شورو',
-'thursday' => 'زيارت',
+'wednesday' => 'څلرنۍ',
+'thursday' => 'پينځنۍ',
 'friday' => 'جمعه',
-'saturday' => 'خاÙ\84Ù\8a',
-'sun' => 'اتوار',
-'mon' => 'ګل',
-'tue' => 'نهي',
-'wed' => 'شورو',
-'thu' => 'زيارت',
+'saturday' => 'اÙ\88Ù\86Û\8d',
+'sun' => 'يونۍ',
+'mon' => 'دونۍ',
+'tue' => 'درې نۍ',
+'wed' => 'څلرنۍ',
+'thu' => 'پينځه نۍ',
 'fri' => 'جمعه',
-'sat' => 'خاÙ\84Ù\8a',
+'sat' => 'اÙ\88Ù\86Û\8d',
 'january' => 'جنوري',
 'february' => 'فبروري',
 'march' => 'مارچ',
@@ -235,7 +235,7 @@ $messages = array(
 'may_long' => 'می',
 'june' => 'جون',
 'july' => 'جولای',
-'august' => 'اګسټ',
+'august' => 'اگسټ',
 'september' => 'سېپتمبر',
 'october' => 'اکتوبر',
 'november' => 'نومبر',
@@ -247,7 +247,7 @@ $messages = array(
 'may-gen' => 'می',
 'june-gen' => 'جون',
 'july-gen' => 'جولای',
-'august-gen' => 'اګسټ',
+'august-gen' => 'اگسټ',
 'september-gen' => 'سېپتمبر',
 'october-gen' => 'اکتوبر',
 'november-gen' => 'نومبر',
@@ -259,7 +259,7 @@ $messages = array(
 'may' => 'می',
 'jun' => 'جون',
 'jul' => 'جولای',
-'aug' => 'اګسټ',
+'aug' => 'اگسټ',
 'sep' => 'سېپتمبر',
 'oct' => 'اکتوبر',
 'nov' => 'نومبر',
@@ -271,7 +271,7 @@ $messages = array(
 'may-date' => 'مۍ $1',
 'june-date' => 'جون $1',
 'july-date' => 'جولای $1',
-'august-date' => 'اګست $1',
+'august-date' => 'اگست $1',
 'september-date' => 'سېپتمبر $1',
 'october-date' => 'اکتوبر $1',
 'november-date' => 'نومبر $1',
@@ -297,15 +297,15 @@ $messages = array(
 'broken-file-category' => 'د دوتنو د ماتو تړنو مخونه',
 
 'about' => 'په اړه',
-'article' => 'Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«يز مخ',
+'article' => 'Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯يز مخ',
 'newwindow' => '(په نوې کړکۍ کې پرانيستل کېږي)',
-'cancel' => 'Ù\86اګارل',
+'cancel' => 'Ù\86اگارل',
 'moredotdotdot' => 'نور ...',
-'morenotlisted' => 'ډېر نور نالړليک اوډلي...',
+'morenotlisted' => 'دا لړليک بشپړ نه دی',
 'mypage' => 'زما مخ',
 'mytalk' => 'خبرې اترې',
 'anontalk' => 'ددې IP خبرې اترې',
-'navigation' => 'Ú«رځښت',
+'navigation' => 'Ú¯رځښت',
 'and' => '&#32;او',
 
 # Cologne Blue skin
@@ -314,16 +314,16 @@ $messages = array(
 'qbedit' => 'سمول',
 'qbpageoptions' => 'همدا مخ',
 'qbmyoptions' => 'زما پاڼې',
-'qbspecialpages' => 'Ú\81اÙ\86Ú«ړي مخونه',
+'qbspecialpages' => 'Ú\81اÙ\86Ú¯ړي مخونه',
 'faq' => 'ډ-ځ-پ',
 'faqpage' => 'Project:ډ-ځ-پ',
 
 # Vector skin
-'vector-action-addsection' => 'سرÙ\84Ù\8aÚ©Ù\88Ù\86Ù\87 Ù\88رګډول',
-'vector-action-delete' => 'Ú\93Ù\86Ú«ول',
+'vector-action-addsection' => 'سرÙ\84Ù\8aÚ©Ù\88Ù\86Ù\87 Ù\88رگډول',
+'vector-action-delete' => 'Ú\93Ù\86Ú¯ول',
 'vector-action-move' => 'لېږدول',
 'vector-action-protect' => 'ژغورل',
-'vector-action-undelete' => 'Ù\86اÚ\93Ù\86Ú«ول',
+'vector-action-undelete' => 'Ù\86اÚ\93Ù\86Ú¯ول',
 'vector-action-unprotect' => 'ژغورنه بدلول',
 'vector-simplesearch-preference' => 'د پلټنې ساده پټه چارنول (يوازې په وېکټور پوښۍ کار کوي)',
 'vector-view-create' => 'جوړول',
@@ -335,9 +335,9 @@ $messages = array(
 'namespaces' => 'نوم-تشيالونه',
 'variants' => 'ډولونه',
 
-'navigation-heading' => 'Ú«رځښت غورنۍ',
+'navigation-heading' => 'Ú¯رځښت غورنۍ',
 'errorpagetitle' => 'تېروتنه',
-'returnto' => 'بÛ\90رتÙ\87 $1 ØªÙ\87 Ù\88Ú«رځه.',
+'returnto' => 'بÛ\90رتÙ\87 $1 ØªÙ\87 Ù\88Ú¯رځه.',
 'tagline' => 'د {{SITENAME}} لخوا',
 'help' => 'لارښود',
 'search' => 'پلټنه',
@@ -346,7 +346,7 @@ $messages = array(
 'searcharticle' => 'ورځه',
 'history' => 'د مخ پېښليک',
 'history_short' => 'پېښليک',
-'updatedmarker' => 'زÙ\85ا Ø¯ Ù\88رÙ\88ستÙ\8a Ø±Ø§ØªÚ« نه راپدېخوا اوسمهاله شوی',
+'updatedmarker' => 'زÙ\85ا Ø¯ Ù\88رÙ\88ستÙ\8a Ø±Ø§ØªÚ¯ نه راپدېخوا اوسمهاله شوی',
 'printableversion' => 'چاپي بڼه',
 'permalink' => 'تلپاتې تړنه',
 'print' => 'چاپ',
@@ -355,11 +355,11 @@ $messages = array(
 'create' => 'جوړول',
 'editthispage' => 'همدا مخ سمول',
 'create-this-page' => 'همدا مخ ليکل',
-'delete' => 'Ú\93Ù\86Ú«ول',
-'deletethispage' => 'دا Ù\85Ø® Ú\93Ù\86Ú«ول',
-'undeletethispage' => 'دا Ù\85Ø® Ù\86اÚ\93Ù\86Ú«ول',
-'undelete_short' => '{{PLURAL:$1|Ù\8aÙ\88 Ø³Ù\85Ù\88Ù\86|$1 Ø³Ù\85Ù\88Ù\86Û\90}} Ù\86اÚ\93Ù\86Ú«ول',
-'viewdeleted_short' => '{{PLURAL:$1|Ù\8aÙ\88 Ú\93Ù\86Ú« Ø´Ù\88Û\8c Ø³Ù\85Ù\88Ù\86|$1 Ú\93Ù\86Ú« شوي سمونونه}} کتل',
+'delete' => 'Ú\93Ù\86Ú¯ول',
+'deletethispage' => 'دا Ù\85Ø® Ú\93Ù\86Ú¯ول',
+'undeletethispage' => 'دا Ù\85Ø® Ù\86اÚ\93Ù\86Ú¯ول',
+'undelete_short' => '{{PLURAL:$1|Ù\8aÙ\88 Ø³Ù\85Ù\88Ù\86|$1 Ø³Ù\85Ù\88Ù\86Û\90}} Ù\86اÚ\93Ù\86Ú¯ول',
+'viewdeleted_short' => '{{PLURAL:$1|Ù\8aÙ\88 Ú\93Ù\86Ú¯ Ø´Ù\88Û\8c Ø³Ù\85Ù\88Ù\86|$1 Ú\93Ù\86Ú¯ شوي سمونونه}} کتل',
 'protect' => 'ژغورل',
 'protect_change' => 'بدلون',
 'protectthispage' => 'همدا مخ ژغورل',
@@ -368,10 +368,10 @@ $messages = array(
 'newpage' => 'نوی مخ',
 'talkpage' => 'د دې مخ په اړه خبرې اترې کول',
 'talkpagelinktext' => 'خبرې اترې',
-'specialpage' => 'Ú\81اÙ\86Ú«ړې پاڼه',
+'specialpage' => 'Ú\81اÙ\86Ú¯ړې پاڼه',
 'personaltools' => 'شخصي اوزار',
 'postcomment' => 'نوې برخه',
-'articlepage' => 'د Ù\85Ø® Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«ه ښکاره کول',
+'articlepage' => 'د Ù\85Ø® Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯ه ښکاره کول',
 'talk' => 'خبرې اترې',
 'views' => 'کتنې',
 'toolbox' => 'اوزاربکس',
@@ -384,15 +384,15 @@ $messages = array(
 'categorypage' => 'د وېشنيزې مخ کتل',
 'viewtalkpage' => 'خبرې اترې کتل',
 'otherlanguages' => 'په نورو ژبو کې',
-'redirectedfrom' => '(Ù\84Ù\87 $1 Ù\86Ù\87 Ù\85Ø® Ú«رځېدلی)',
-'redirectpagesub' => 'د Ù\85Ø® Ú«رځونې مخ',
+'redirectedfrom' => '(Ù\84Ù\87 $1 Ù\86Ù\87 Ù\85Ø® Ú¯رځېدلی)',
+'redirectpagesub' => 'د Ù\85Ø® Ú¯رځونې مخ',
 'lastmodifiedat' => 'دا مخ وروستی ځل په $2، $1 بدلون موندلی.',
 'viewcount' => 'همدا مخ {{PLURAL:$1|يو وار|$1 واره}} کتل شوی.',
 'protectedpage' => 'ژغورلی مخ',
 'jumpto' => 'ورټوپ کړه:',
-'jumptonavigation' => 'Ú«رځښت',
+'jumptonavigation' => 'Ú¯رځښت',
 'jumptosearch' => 'پلټل',
-'view-pool-error' => 'اÙ\88بخÚ\9aÛ\8dØ\8c Ø¯Ù\85 Ú«Ú\93Û\8d Ù¾Ø§Ù\84Ù\86Ú«ران د ډېر بارېدو ستونزې سره مخامخ شوي.
+'view-pool-error' => 'اÙ\88بخÚ\9aÛ\8dØ\8c Ø¯Ù\85 Ú«Ú\93Û\8d Ù¾Ø§Ù\84Ù\86Ú¯ران د ډېر بارېدو ستونزې سره مخامخ شوي.
 ډېر زيات کارنان د همدې مخ د کتلو په هڅه کې دي.
 لطفاً د دې مخ د کتلو د بيا هڅې نه دمخه يو څو شېبې صبر وکړۍ.
 
@@ -403,21 +403,21 @@ $1',
 # 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).
 'aboutsite' => 'د {{SITENAME}} په اړه',
 'aboutpage' => 'Project:په اړه',
-'copyright' => 'دا Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«Ù\87 Ø¯ $1 Ø§Ø¬Ø§Ø²ØªÙ\84Ù\8aÚ© Ù\84Ù\87 Ù\85Ø®Û\90 Ø³ØªØ§Ø³Û\90 Ù\84اسرسÙ\8a ØªÙ\87 Ù¾Ø±ØªÙ\87 Ø¯Ù\87.',
+'copyright' => 'دا Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯Ù\87 Ø¯ $1 Ù\84Ù\87 Ù\85Ø®Û\90 Ø³ØªØ§Ø³Û\90 Ù\84اسرسÙ\8a ØªÙ\87 Ù¾Ø±ØªÙ\87 Ø¯Ù\87Ø\8c Ø®Ù\88 Ù\87غÙ\87 Ú\85Ù\87 Ú\86Û\90 Ù¾Ù\87 Ø®Ù\84اÙ\81 Ù\8aÛ\90 Ù\88Ù\8aÙ\8aÙ\84 Ø´Ù\88Ù\8a.',
 'copyrightpage' => '{{ns:project}}:رښتې',
 'currentevents' => 'اوسنۍ پېښې',
 'currentevents-url' => 'Project:تازه پېښې',
 'disclaimers' => 'ردادعاليکونه',
-'disclaimerpage' => 'Project:Ù¼Ù\88Ù\84Ú«ړی ردادعاليک',
+'disclaimerpage' => 'Project:Ù¼Ù\88Ù\84Ú¯ړی ردادعاليک',
 'edithelp' => 'د لارښود سمون',
 'helppage' => 'Help:نيوليک',
 'mainpage' => 'لومړی مخ',
 'mainpage-description' => 'لومړی مخ',
-'policy-url' => 'Project:تګلاره',
+'policy-url' => 'Project:تگلاره',
 'portal' => 'د ټولنې تانبه',
 'portal-url' => 'Project:د ټولنې تانبه',
-'privacy' => 'د Ù¾Ù¼Ù\86تÙ\8aا ØªÚ«لاره',
-'privacypage' => 'Project:د Ù¾Ù¼Ù\86تÙ\8aا ØªÚ«لاره',
+'privacy' => 'د Ù¾Ù¼Ù\86تÙ\8aا ØªÚ¯لاره',
+'privacypage' => 'Project:د Ù¾Ù¼Ù\86تÙ\8aا ØªÚ¯لاره',
 
 'badaccess' => 'د لاسرسۍ تېروتنه',
 'badaccess-group0' => 'تاسې د غوښتل شوې کړنې د ترسره کولو اجازه نه لرۍ.',
@@ -425,7 +425,7 @@ $1',
 
 'versionrequired' => 'د ميډياويکي $1 بڼې ته اړتيا ده',
 'versionrequiredtext' => 'د دې مخ په ليدلو کې د مېډياويکي $1 بڼې ته اړتيا ده. 
-[[Special:Version|د Ø¨Ú¼Û\90 Ù\85Ø® Ù\88Ú«ورۍ]].',
+[[Special:Version|د Ø¨Ú¼Û\90 Ù\85Ø® Ù\88Ú¯ورۍ]].',
 
 'ok' => 'ښه',
 'retrievedfrom' => '"$1" نه اخيستل شوی',
@@ -450,7 +450,7 @@ $1',
 'collapsible-expand' => 'غځول',
 'thisisdeleted' => '$1 کتل او يا بيازېرمل؟',
 'viewdeleted' => '$1 کتل؟',
-'restorelink' => '{{PLURAL:$1|Ù\8aÙ\88 Ú\93Ù\86Ú« Ø´Ù\88Û\8c Ø³Ù\85Ù\88Ù\86|$1 Ú\93Ù\86Ú« شوي سمونونه}}',
+'restorelink' => '{{PLURAL:$1|Ù\8aÙ\88 Ú\93Ù\86Ú¯ Ø´Ù\88Û\8c Ø³Ù\85Ù\88Ù\86|$1 Ú\93Ù\86Ú¯ شوي سمونونه}}',
 'feedlinks' => 'کتنه:',
 'site-rss-feed' => '$1 د آر اس اس کتنه',
 'site-atom-feed' => '$1 د اټوم کتنه',
@@ -466,7 +466,7 @@ $1',
 'nstab-main' => 'مخ',
 'nstab-user' => 'کارن مخ',
 'nstab-media' => 'د رسنۍ مخ',
-'nstab-special' => 'Ú\81اÙ\86Ú«ړی مخ',
+'nstab-special' => 'Ú\81اÙ\86Ú¯ړی مخ',
 'nstab-project' => 'د پروژې مخ',
 'nstab-image' => 'دوتنه',
 'nstab-mediawiki' => 'پيغام',
@@ -476,23 +476,23 @@ $1',
 
 # Main script and global functions
 'nosuchaction' => 'هېڅ داسې کومه کړنه نشته',
-'nosuchactiontext' => 'Ú©Ù\88Ù\85Ù\87 Ú©Ú\93Ù\86Ù\87 Ú\86Û\90 Ø¯ URL Ù\84Ø®Ù\88ا Ú\81اÙ\86Ú«ړې شوې سمه نه ده.
+'nosuchactiontext' => 'Ú©Ù\88Ù\85Ù\87 Ú©Ú\93Ù\86Ù\87 Ú\86Û\90 Ø¯ URL Ù\84Ø®Ù\88ا Ú\81اÙ\86Ú¯ړې شوې سمه نه ده.
 کېدای شي چې URL مو سم نه وي ټايپ کړی، او يا مو يوه ناسمه تړنه څارلې وي.
 دا د دې هم ښکارندويي کوي چې کېدای شي چې د {{SITENAME}} لخوا کارېدونکې ساوترې کې يوه تېروتنه وي.',
-'nosuchspecialpage' => 'داسÛ\90 Ù\87Û\90Ú\85 Ú©Ù\88Ù\85 Ú\81اÙ\86Ú«ړی مخ نشته',
-'nospecialpagetext' => '<strong>تاسÛ\90 Ø¯ Ù\8aÙ\88 Ù\86اسÙ\85 Ú\81اÙ\86Ú«ړي مخ غوښتنه کړې.</strong>
+'nosuchspecialpage' => 'داسÛ\90 Ù\87Û\90Ú\85 Ú©Ù\88Ù\85 Ú\81اÙ\86Ú¯ړی مخ نشته',
+'nospecialpagetext' => '<strong>تاسÛ\90 Ø¯ Ù\8aÙ\88 Ù\86اسÙ\85 Ú\81اÙ\86Ú¯ړي مخ غوښتنه کړې.</strong>
 
-تاسÛ\90 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8c Ú\86Û\90 Ø¯ Ø³Ù\85Ù\88 Ú\81اÙ\86Ú«ړو مخونو لړليک په [[Special:SpecialPages|{{int:specialpages}}]] کې ومومۍ.',
+تاسÛ\90 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8c Ú\86Û\90 Ø¯ Ø³Ù\85Ù\88 Ú\81اÙ\86Ú¯ړو مخونو لړليک په [[Special:SpecialPages|{{int:specialpages}}]] کې ومومۍ.',
 
 # General errors
 'error' => 'تېروتنه',
 'databaseerror' => 'د ډاټابېز تېروتنه',
-'laggedslavemode' => "'''Ú«واښنه:''' په دې مخ کې کېدای شي تازه اوسمهالېدنې نه وي.",
+'laggedslavemode' => "'''Ú¯واښنه:''' په دې مخ کې کېدای شي تازه اوسمهالېدنې نه وي.",
 'readonly' => 'توکبنسټ تړل شوی',
-'enterlockreason' => 'د Ø¨Ù\86دÙ\8aز Ù\8aÙ\88 Ø³Ø¨Ø¨ Ù\88Ù\84Ù\8aÚ©Û\8dØ\8c Ø§Ù\88 Ù\87Ù\85داراز Ø¯ Ø¨Ù\86دÙ\8aز Ø¯ Ù\84Ù\8aرÛ\90 Ú©Û\90دÙ\84Ù\88 Ù\8aÙ\88Ù\87 Ø§Ù¼Ú©Ù\84Ù\8aزÙ\87 Ù\86Û\90Ù¼Ù\87 Ù\87Ù\85 Ú\85رګنده کړۍ',
+'enterlockreason' => 'د Ø¨Ù\86دÙ\8aز Ù\8aÙ\88 Ø³Ø¨Ø¨ Ù\88Ù\84Ù\8aÚ©Û\8dØ\8c Ø§Ù\88 Ù\87Ù\85داراز Ø¯ Ø¨Ù\86دÙ\8aز Ø¯ Ù\84Ù\8aرÛ\90 Ú©Û\90دÙ\84Ù\88 Ù\8aÙ\88Ù\87 Ø§Ù¼Ú©Ù\84Ù\8aزÙ\87 Ù\86Û\90Ù¼Ù\87 Ù\87Ù\85 Ú\85رگنده کړۍ',
 'missing-article' => 'توکبنسټ د "$1" $2 په نامه د ورکړ شوي مخ متن چې بايد موندلی يې وای، و نه موند.
 
-دا Ø³ØªÙ\88Ù\86زÙ\87 Ø§Ú©Ø«Ø±Ø§Ù\8b Ø¯ Ù\8aÙ\88Ù\87 Ú\93Ù\86Ú« شوي مخ د پېښليک يا توپير د تړنو په څارلو کې رامېنځ ته کېږي.
+دا Ø³ØªÙ\88Ù\86زÙ\87 Ø§Ú©Ø«Ø±Ø§Ù\8b Ø¯ Ù\8aÙ\88Ù\87 Ú\93Ù\86Ú¯ شوي مخ د پېښليک يا توپير د تړنو په څارلو کې رامېنځ ته کېږي.
 
 که چېرته داسې نه وي، نو بيا کېدای شي چې په ساوترې کې کومه تېروتنه رابرسېره شوې وي.
 لطفاً د دې چارې راپور د URL په نښه کولو سره يوه [[Special:ListUsers/sysop|پازوال]] ته ورکړۍ.',
@@ -504,21 +504,21 @@ $1',
 'fileappenderror' => 'د "$1" پايملون "$2" ته ترسره نه شو..',
 'filecopyerror' => 'د "$1" په نامه دوتنه مو "$2" ته و نه لمېسلای شوه.',
 'filerenameerror' => 'د "$1" په نامه د دوتنې نوم "$2" ته بدل نه شو.',
-'filedeleteerror' => 'د "$1" Ø¯Ù\88تÙ\86Ù\87 Ú\93Ù\86Ú«ه نه شوه.',
+'filedeleteerror' => 'د "$1" Ø¯Ù\88تÙ\86Ù\87 Ú\93Ù\86Ú¯ه نه شوه.',
 'directorycreateerror' => 'د "$1" په نامه ليکلړ جوړ نه شو.',
 'filenotfound' => 'د "$1" دوتنه مو و نه موندله.',
 'fileexistserror' => 'د "$1" په نامه دوتنه نه ليکل کېږي: دوتنه د پخوا نه دلته شته',
 'unexpected' => 'نا اټکله شمېره: "$1"="$2".',
 'formerror' => 'ستونزه: فورمه مو و نه سپارل شوه',
 'badarticleerror' => 'په دې مخ دا کړنه نه شي ترسره کېدلای.',
-'cannotdelete' => 'د "$1" Ù\85Ø® Ù\8aا Ø¯Ù\88تÙ\86Û\90 Ú\93Ù\86Ú«ېدنه ترسره نه شوه.
-Ú©Û\90داÛ\8c Ø´Ù\8a Ú\86Û\90 Ù\88ار Ø¯Ù\85Ø®Û\90 Ø¯Ø§ Ú©Ù\88Ù\85 Ø¨Ù\84 Ú\86ا Ú\93Ù\86Ú«ه کړې وي.',
-'cannotdelete-title' => 'د "$1" Ù\85Ø® Ù\86Ø´Ù\8a Ú\93Ù\86Ú«ېدای',
+'cannotdelete' => 'د "$1" Ù\85Ø® Ù\8aا Ø¯Ù\88تÙ\86Û\90 Ú\93Ù\86Ú¯ېدنه ترسره نه شوه.
+Ú©Û\90داÛ\8c Ø´Ù\8a Ú\86Û\90 Ù\88ار Ø¯Ù\85Ø®Û\90 Ø¯Ø§ Ú©Ù\88Ù\85 Ø¨Ù\84 Ú\86ا Ú\93Ù\86Ú¯ه کړې وي.',
+'cannotdelete-title' => 'د "$1" Ù\85Ø® Ù\86Ø´Ù\8a Ú\93Ù\86Ú¯ېدای',
 'badtitle' => 'ناسم سرليک',
-'badtitletext' => 'ستاسÛ\90 Ø¯ ØºÙ\88Ú\9aتÙ\84 Ø´Ù\88Ù\8a Ù\85Ø® Ø³Ø±Ù\84Ù\8aÚ© Ø³Ù\85 Ù\86Ù\87 Ù\88Ù\88Ø\8c Ù\8aا Ù\85Ù\88 Ø¯ Ø³Ø±Ù\84Ù\8aÚ© Ú\81اÛ\8c ØªØ´ Ù\88Ù\88 Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ Ú\98بÙ\88 Ø®Ù¾Ù\84Ù\85Ù\86Ú\81Ù\8a ØªÚ\93Ù\86Û\90 Ú\85Ø®Ù\87 Ù\8aا Ø¯ Ù\88Ù\8aÚ©Ù\8a Ú«انو خپلمنځي سرليکونو څخه يو ناسم توری مو پکې کارولی وي.
-Ú©Û\90داÛ\8c Ø´Ù\8a Ú\86Û\90 Ø³ØªØ§Ø³Û\90 Ù¾Ù\87 Ù\88رکÚ\93 Ø´Ù\88Ù\8a Ø³Ø±Ù\84Ù\8aÚ© Ú©Û\90 Ù\8aÙ\88 Ù\8aا Ú\85Ù\88 Ø¯Ø§Ø³Û\90 ØªÙ\88رÙ\8a Ù\88Ù\8a Ú\86Û\90 Ø¯ Ø³Ø±Ù\84Ù\8aÚ© Ù¾Ù\87 ØªÙ\88Ú«ه بايد و نه کارېږي.',
+'badtitletext' => 'ستاسÛ\90 Ø¯ ØºÙ\88Ú\9aتÙ\84 Ø´Ù\88Ù\8a Ù\85Ø® Ø³Ø±Ù\84Ù\8aÚ© Ø³Ù\85 Ù\86Ù\87 Ù\88Ù\88Ø\8c Ù\8aا Ù\85Ù\88 Ø¯ Ø³Ø±Ù\84Ù\8aÚ© Ú\81اÛ\8c ØªØ´ Ù\88Ù\88 Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ Ú\98بÙ\88 Ø®Ù¾Ù\84Ù\85Ù\86Ú\81Ù\8a ØªÚ\93Ù\86Û\90 Ú\85Ø®Ù\87 Ù\8aا Ø¯ Ù\88Ù\8aÚ©Ù\8a Ú¯انو خپلمنځي سرليکونو څخه يو ناسم توری مو پکې کارولی وي.
+Ú©Û\90داÛ\8c Ø´Ù\8a Ú\86Û\90 Ø³ØªØ§Ø³Û\90 Ù¾Ù\87 Ù\88رکÚ\93 Ø´Ù\88Ù\8a Ø³Ø±Ù\84Ù\8aÚ© Ú©Û\90 Ù\8aÙ\88 Ù\8aا Ú\85Ù\88 Ø¯Ø§Ø³Û\90 ØªÙ\88رÙ\8a Ù\88Ù\8a Ú\86Û\90 Ø¯ Ø³Ø±Ù\84Ù\8aÚ© Ù¾Ù\87 ØªÙ\88Ú¯ه بايد و نه کارېږي.',
 'querypage-no-updates' => 'د دې مخ اوسمهالېدنې ناچارن شوي.
-Ù¾Ù\87 Ú\9aکارÙ\87 ØªÙ\88Ú«ه د دې ځای اومتوک به نه وي تازه شوي.',
+Ù¾Ù\87 Ú\9aکارÙ\87 ØªÙ\88Ú¯ه د دې ځای اومتوک به نه وي تازه شوي.',
 'viewsource' => 'سرچينه کتل',
 'viewsource-title' => 'د $1 سرچينه کتل',
 'actionthrottled' => 'د دې کړنې مخنيوی وشو',
@@ -526,10 +526,10 @@ $1',
 'viewsourcetext' => 'تاسې د دې مخ سرچينه کتلی او لمېسلی شی:',
 'viewyourtext' => "تاسې په دې مخ کې د '''خپلو سمونونو''' سرچينه کتلی او لمېسلی شی:",
 'protectedinterface' => 'دا مخ د دې ويکي د ساوترې د ليدنمخ متن لري، او د ورانکارۍ په خاطر ژغورل شوی.
-Ù¾Ù\87 Ù¼Ù\88Ù\84Ù\88 Ù\88Ù\8aÚ©Ù\8a Ú«Ø§Ù\86Ù\88 Ú©Û\90 Ø¯ Ú\98باÚ\93Û\90 Ø¯ Ù\88رګډولو او يا هم د ژباړې د سمون او بدلون لپاره د مېډياويکي د ځايتابه پروژه [//translatewiki.net/ translatewiki.net] وکاروۍ.',
-'editinginterface' => "'''Ú«Ù\88اÚ\9aÙ\86Ù\87:''' ØªØ§Ø³Ù\88 Ù¾Ù\87 Ù\8aÙ\88Ù\87 Ø¯Ø§Ø³Û\90 Ù\85Ø® Ú©Û\90 Ø¨Ø¯Ù\84Ù\88Ù\86 Ø±Ø§Ù\88Ù\84Û\8c Ú©Ù\88Ù\85 Ú\86Û\90 Ø¯ Ù\8aÙ\88Û\90 Ù¾Ù\88ستکاÙ\84Û\8c Ø¯ Ù\84Ù\8aدÙ\86Ù\85Ø® Ù\85تÙ\86 Ù¾Ù\87 ØªÙ\88Ú«ه کارېږي.
+Ù¾Ù\87 Ù¼Ù\88Ù\84Ù\88 Ù\88Ù\8aÚ©Ù\8a Ú¯Ø§Ù\86Ù\88 Ú©Û\90 Ø¯ Ú\98باÚ\93Û\90 Ø¯ Ù\88رگډولو او يا هم د ژباړې د سمون او بدلون لپاره د مېډياويکي د ځايتابه پروژه [//translatewiki.net/ translatewiki.net] وکاروۍ.',
+'editinginterface' => "'''Ú¯Ù\88اÚ\9aÙ\86Ù\87:''' ØªØ§Ø³Ù\88 Ù¾Ù\87 Ù\8aÙ\88Ù\87 Ø¯Ø§Ø³Û\90 Ù\85Ø® Ú©Û\90 Ø¨Ø¯Ù\84Ù\88Ù\86 Ø±Ø§Ù\88Ù\84Û\8c Ú©Ù\88Ù\85 Ú\86Û\90 Ø¯ Ù\8aÙ\88Û\90 Ù¾Ù\88ستکاÙ\84Û\8c Ø¯ Ù\84Ù\8aدÙ\86Ù\85Ø® Ù\85تÙ\86 Ù¾Ù\87 ØªÙ\88Ú¯ه کارېږي.
 په همدې مخ کې بدلون راوستل به د نورو کارنانو د ليدنمخ بڼه اغېزمنه کړي.
-د Ú\98باÚ\93Û\90 Ø¯ Ù\88رګډولو او بدلون لپاره، مهرباني وکړی د [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]، وېبځي ته ولاړ شی. دا وېبځی د ميډياويکي د ځايتابه پروژه ده.",
+د Ú\98باÚ\93Û\90 Ø¯ Ù\88رگډولو او بدلون لپاره، مهرباني وکړی د [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]، وېبځي ته ولاړ شی. دا وېبځی د ميډياويکي د ځايتابه پروژه ده.",
 'namespaceprotected' => "تاسې د '''$1''' په نوم-تشيال کې د مخونو د سمولو اجازه نه لرۍ.",
 'customcssprotected' => 'تاسې د دې CSS مخ د سمولو اجازه نه لرۍ، دا ځکه چې دا مخ د بل کارن شخصي امستنې لري.',
 'customjsprotected' => 'تاسې د دې جاواسکرېپټ مخ د سمولو اجازه نه لرۍ، دا ځکه چې دا مخ د بل کارن شخصي امستنې لري.',
@@ -537,23 +537,22 @@ $1',
 'mycustomjsprotected' => 'تاسې د دې جاوا سكريپټ مخ د سمولو اجازه نلرۍ.',
 'myprivateinfoprotected' => 'تاسې د دې شخصي مالوماتو د سمولو اجازه نلرۍ.',
 'mypreferencesprotected' => 'تاسې د خپلو غوره توبونو د سمولو اجازه نلرۍ.',
-'ns-specialprotected' => 'Ú\81اÙ\86Ú«ړي مخونو کې سمون او بدلون نه شی راوستلای.',
+'ns-specialprotected' => 'Ú\81اÙ\86Ú¯ړي مخونو کې سمون او بدلون نه شی راوستلای.',
 'titleprotected' => 'د [[User:$1|$1]] لخوا د دې سرليک د جوړېدلو مخنيوی شوی.
 او د دې کړنې سبب "\'\'$2\'\'" ورکړ شوی.',
 'exception-nologin' => 'غونډال کې نه ياست ننوتي',
 
 # Virus scanner
-'virus-badscanner' => "بدÙ\87 Ø³Ø§Ø²Û\90دÙ\86Ù\87: Ø¯ Ù\88Ù\8aرÙ\88س Ù\86اÚ\85رګنده ځيرڅار: ''$1''",
+'virus-badscanner' => "بدÙ\87 Ø³Ø§Ø²Û\90دÙ\86Ù\87: Ø¯ Ù\88Ù\8aرÙ\88س Ù\86اÚ\85رگنده ځيرڅار: ''$1''",
 'virus-scanfailed' => 'ځيرڅارنه بريالۍ نه شوه (کوډ $1)',
-'virus-unknownscanner' => 'Ù\86اÚ\85رګند ضدويروس:',
+'virus-unknownscanner' => 'Ù\86اÚ\85رگند ضدويروس:',
 
 # Login and logout pages
-'logouttext' => "'''تاسÛ\90 Ø§Ù\88س Ø¯ ØºÙ\88Ù\86Ú\89اÙ\84 Ù\86Ù\87 Ù\88Ù\88تÙ\84Û\8c.'''
+'logouttext' => "'''اÙ\88س ØªØ§Ø³Û\90 Ø¯ ØºÙ\88Ù\86Ú\89اÙ\84 Ú\85Ø®Ù\87 Ù\88Ù\88تÙ\84ئ.'''
 
-تاسې کولای شی چې د کارن-نوم نه پرته په ورکنومي توګه {{SITENAME}} وکاروی، او يا هم په همدې او يا کوم بل کارن-نوم، يو ځل <span class='plainlinks'>[$1 بيا غونډال ته ورننوځۍ]</span>.
 دا په پام کې وساتۍ چې تر څو تاسې د خپل کتنمل حافظه نه وي سپينه کړې، نو ځينې مخونو کې به لا تر اوسه پورې په غونډال کې ننوتي ښکارۍ.",
 'welcomeuser' => '$1، ښه راغلې!',
-'welcomecreation-msg' => 'Ú«ڼون مو جوړ شو.
+'welcomecreation-msg' => 'Ú¯ڼون مو جوړ شو.
 د [[Special:Preferences|{{SITENAME}} غوره توبونه]] بدلول مو مه هېروۍ.',
 'yourname' => 'کارن-نوم:',
 'userlogin-yourname' => 'کارن-نوم',
@@ -572,19 +571,19 @@ $1',
 'yourdomainname' => 'ستاسې شپول:',
 'password-change-forbidden' => 'تاسې په دې ويکي باندې خپل پټنوم نه شی بدلولی.',
 'login' => 'ننوتل',
-'nav-login-createaccount' => 'Ù\86Ù\86Ù\88تÙ\84 / Ú«ڼون جوړول',
+'nav-login-createaccount' => 'Ù\86Ù\86Ù\88تÙ\84 / Ú¯ڼون جوړول',
 'loginprompt' => 'ددې لپاره چې {{SITENAME}} کې ننوځۍ نو بايد ستاسې د کمپيوټر کوکيز چارن وي.',
-'userlogin' => 'Ù\86Ù\86Ù\88تÙ\84 / Ú«ڼون جوړول',
+'userlogin' => 'Ù\86Ù\86Ù\88تÙ\84 / Ú¯ڼون جوړول',
 'userloginnocreate' => 'ننوتل',
 'logout' => 'وتل',
 'userlogout' => 'وتل',
 'notloggedin' => 'غونډال کې نه ياست ننوتي',
-'userlogin-noaccount' => 'Ú«ڼون نه لرې؟',
+'userlogin-noaccount' => 'Ú¯ڼون نه لرې؟',
 'userlogin-joinproject' => 'د {{SITENAME}} سره يوځای شه',
 'nologin' => 'کارن-نوم نه لرې؟ $1.',
-'nologinlink' => 'Ù\8aÙ\88 Ú«ڼون جوړول',
-'createaccount' => 'Ú«ڼون جوړول',
-'gotaccount' => 'Ø¢Ù\8aا Ù\88ار Ø¯Ù\85Ø®Û\90 Ù\8aÙ\88 Ú«ڼون لری؟ $1.',
+'nologinlink' => 'Ù\8aÙ\88 Ú¯ڼون جوړول',
+'createaccount' => 'Ú¯ڼون جوړول',
+'gotaccount' => 'Ø¢Ù\8aا Ù\88ار Ø¯Ù\85Ø®Û\90 Ù\8aÙ\88 Ú¯ڼون لری؟ $1.',
 'gotaccountlink' => 'ننوتل',
 'userlogin-resetlink' => 'د ننوتلو مالومات مو هېر شوي؟',
 'userlogin-resetpassword-link' => 'پټنوم مو بياپرځايول',
@@ -597,11 +596,11 @@ $1',
 'createacct-realname' => 'آر نوم (اختياري)',
 'createaccountreason' => 'سبب:',
 'createacct-reason' => 'سبب',
-'createacct-reason-ph' => 'Ù\88Ù\84Û\90 ØªØ§Ø³Û\90 Ø¨Ù\84 Ú«ڼون جوړول غوااړۍ',
+'createacct-reason-ph' => 'Ù\88Ù\84Û\90 ØªØ§Ø³Û\90 Ø¨Ù\84 Ú¯ڼون جوړول غوااړۍ',
 'createacct-captcha' => 'امنيتي تدبير',
 'createacct-imgcaptcha-ph' => 'پورته تاسې ته ښکاره شوی متن وټاپۍ',
-'createacct-submit' => 'Ú«ڼون مو جوړ کړۍ',
-'createacct-another-submit' => 'بÙ\84 Ú«ڼون جوړول',
+'createacct-submit' => 'Ú¯ڼون مو جوړ کړۍ',
+'createacct-another-submit' => 'بÙ\84 Ú¯ڼون جوړول',
 'createacct-benefit-heading' => '{{SITENAME}} ستاسې په شان خلکو لخوا جوړ شوی.',
 'createacct-benefit-body1' => '{{PLURAL:$1|سمون|سمونونه}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|مخ|مخونه}}',
@@ -610,24 +609,24 @@ $1',
 'userexists' => 'کوم کارن نوم چې تاسې ورکړی هغه بل چا کارولی.
 لطفاً يو بل نوم وټاکۍ.',
 'loginerror' => 'د ننوتنې ستونزه',
-'createacct-error' => 'د Ú«ڼون جوړېدنې ستونزه',
-'createaccounterror' => 'Ú«ڼون مو جوړ نه شو: $1',
-'nocookiesnew' => 'ستاسÛ\90 Ú«ڼون جوړ شو، خو تاسې لا غونډال ته نه ياست ورننوتلي.
+'createacct-error' => 'د Ú¯ڼون جوړېدنې ستونزه',
+'createaccounterror' => 'Ú¯ڼون مو جوړ نه شو: $1',
+'nocookiesnew' => 'ستاسÛ\90 Ú¯ڼون جوړ شو، خو تاسې لا غونډال ته نه ياست ورننوتلي.
 {{SITENAME}} کې د ننوتلو لپاره کوکيز کارېږي.
 او ستاسې د کتنمل کوکيز ناچارن دي.
 لطفاً خپل د کتنمل کوکيز چارن کړۍ او بيا د خپل کارن-نوم او پټنوم په کارولو سره غونډال ته ورننوځی.',
 'nocookieslogin' => '{{SITENAME}} کې د ننوتلو لپاره کوکيز کارېږي.
 او ستاسې د کتنمل کوکيز ناچارن دي.
 لطفاً خپل د کتنمل کوکيز چارن کړۍ او بيا د خپل کارن-نوم او پټنوم په کارولو سره غونډال ته ورننوځی.',
-'noname' => 'تاسÛ\90 ØªØ± Ø§Ù\88سÙ\87 Ù¾Ù\88رÛ\90 Ú©Ù\88Ù\85 Ú©Ø±Ù\87 Ú©Ø§Ø±Ù\86 Ù\86Ù\88Ù\85 Ù\86Ù\87 Ø¯Û\8c Ú\81اÙ\86Ú«ړی کړی.',
+'noname' => 'تاسÛ\90 ØªØ± Ø§Ù\88سÙ\87 Ù¾Ù\88رÛ\90 Ú©Ù\88Ù\85 Ú©Ø±Ù\87 Ú©Ø§Ø±Ù\86 Ù\86Ù\88Ù\85 Ù\86Ù\87 Ø¯Û\8c Ú\81اÙ\86Ú¯ړی کړی.',
 'loginsuccesstitle' => 'غونډال کې بريالی ورننوتلۍ',
 'loginsuccess' => "'''تاسې اوس {{SITENAME}} کې د \"\$1\" په نوم ننوتي ياست.'''",
 'nosuchuser' => 'د "$1" په نوم هېڅ کارن نشته.
 د کارنانو نومونه د غټو او واړو تورو سره حساس دي.
-خپÙ\84 Ø­Ø¬Ø§ Ù\88Ú\85ارÛ\8dØ\8c Ø§Ù\88 Ù\8aا Ù\87Ù\85 [[Special:UserLogin/signup|Ù\8aÙ\88 Ù\86Ù\88Û\8c Ú«ڼون جوړ کړی]].',
-'nosuchusershort' => 'د "$1" Ù¾Ù\87 Ù\86Ù\88Ù\85 Ù\87Û\90Ú\85 Ú©Ù\88Ù\85 Ú«ڼون نشته. لطفاً خپل د نوم ليکلې بڼې ته ځير شی چې پکې تېروتنه نه وي.',
-'nouserspecified' => 'تاسÛ\90 Ú\81اÙ\86 ØªÙ\87 Ú©Ù\88Ù\85 Ú©Ø§Ø±Ù\86 Ù\86Ù\88Ù\85 Ù\86Ù\87 Ø¯Û\8c Ú\81اÙ\86Ú«ړی کړی.',
-'login-userblocked' => 'Ù¾Ù\87 Ø¯Û\90 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú«ېدلی. غونډال کې ننوتلو ته پرې نه ښودلی شو.',
+خپÙ\84 Ø­Ø¬Ø§ Ù\88Ú\85ارÛ\8dØ\8c Ø§Ù\88 Ù\8aا Ù\87Ù\85 [[Special:UserLogin/signup|Ù\8aÙ\88 Ù\86Ù\88Û\8c Ú¯ڼون جوړ کړی]].',
+'nosuchusershort' => 'د "$1" Ù¾Ù\87 Ù\86Ù\88Ù\85 Ù\87Û\90Ú\85 Ú©Ù\88Ù\85 Ú¯ڼون نشته. لطفاً خپل د نوم ليکلې بڼې ته ځير شی چې پکې تېروتنه نه وي.',
+'nouserspecified' => 'تاسÛ\90 Ú\81اÙ\86 ØªÙ\87 Ú©Ù\88Ù\85 Ú©Ø§Ø±Ù\86 Ù\86Ù\88Ù\85 Ù\86Ù\87 Ø¯Û\8c Ú\81اÙ\86Ú¯ړی کړی.',
+'login-userblocked' => 'Ù¾Ù\87 Ø¯Û\90 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú¯ېدلی. غونډال کې ننوتلو ته پرې نه ښودلی شو.',
 'wrongpassword' => 'ناسم پټنوم مو ليکلی. لطفاً يو ځل بيا يې وليکۍ.',
 'wrongpasswordempty' => 'تاسې پټنوم نه دی ليکلی. لطفاً سر له نوي يې وليکۍ.',
 'passwordtooshort' => 'بايد چې پټنوم مو لږ تر لږه {{PLURAL:$1|1 توری|$1 توري}} وي.',
@@ -646,27 +645,27 @@ $1',
 'noemailcreate' => 'تاسې ته پکار ده چې يوه سمه برېښليک پته وليکۍ',
 'passwordsent' => 'د "$1" لپاره يو نوی پټنوم د اړونده کارن برېښليک پتې ته ولېږل شو.
 لطفاً کله چې پټنوم مو ترلاسه کړ نو بيا غونډال ته ننوځۍ.',
-'blocked-mailpassword' => 'ستاسÛ\90 Ù¾Ù\87 IP Ù¾ØªÛ\90 Ø¨Ù\86دÙ\8aز Ù\84Ú«Û\90دÙ\84Û\8c Ø§Ù\88 ØªØ§Ø³Û\90 Ù\86Ù\87 Ø´Û\8c Ú©Ù\88Ù\84اÛ\8c Ú\86Û\90 Ù\84Ù\8aÚ©Ù\86Û\90 Ù\88Ú©Ú\93Û\8cØ\8c Ù¾Ù\87 Ù\87Ù\85دÛ\90 ØªÙ\88Ú«ه تاسې نه شی کولای چې د پټنوم د پرځای کولو کړنې وکاروی دا ددې لپاره چې د وراني مخنيوی وشي.',
+'blocked-mailpassword' => 'ستاسÛ\90 Ù¾Ù\87 IP Ù¾ØªÛ\90 Ø¨Ù\86دÙ\8aز Ù\84Ú¯Û\90دÙ\84Û\8c Ø§Ù\88 ØªØ§Ø³Û\90 Ù\86Ù\87 Ø´Û\8c Ú©Ù\88Ù\84اÛ\8c Ú\86Û\90 Ù\84Ù\8aÚ©Ù\86Û\90 Ù\88Ú©Ú\93Û\8cØ\8c Ù¾Ù\87 Ù\87Ù\85دÛ\90 ØªÙ\88Ú¯ه تاسې نه شی کولای چې د پټنوم د پرځای کولو کړنې وکاروی دا ددې لپاره چې د وراني مخنيوی وشي.',
 'eauthentsent' => 'ستاسې ورکړ شوې برېښليک پتې ته مو يو تاييدي برېښليک درولېږه.
-تر Ø¯Û\90 Ø¯Ù\85Ø®Ù\87 Ú\86Û\90 Ø³ØªØ§Ø³Û\90 Ú«Ú¼Ù\88Ù\86 ØªÙ\87 Ú©Ù\88Ù\85 Ø¨Ù\84 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ø¯Ø±Ù\88Ù\84Û\90Ú\96Ù\88Ø\8c Ù¾Ú©Ø§Ø± Ø¯Ù\87 Ú\86Û\90 ØªØ§Ø³Û\90 Ù¾Ù\87 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ú©Û\90 Ø¯Ø±Ù\84Û\90Ú\96Ù\84 Ø´Ù\88Û\90 Ù\84ارÚ\9aÙ\88Ù\88Ù\86Û\90 Ù¾Ù\84Ù\8a Ú©Ú\93Û\8c Ø§Ù\88 Ø¯Ø¯Û\90 Ù¾Ø®Ù\84Û\8c Ù\88Ú©Ú\93Û\8c Ú\86Û\90 Ù\87Ù\85دا Ú«ڼون په رښتيا ستاسې خپل دی.',
+تر Ø¯Û\90 Ø¯Ù\85Ø®Ù\87 Ú\86Û\90 Ø³ØªØ§Ø³Û\90 Ú¯Ú¼Ù\88Ù\86 ØªÙ\87 Ú©Ù\88Ù\85 Ø¨Ù\84 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ø¯Ø±Ù\88Ù\84Û\90Ú\96Ù\88Ø\8c Ù¾Ú©Ø§Ø± Ø¯Ù\87 Ú\86Û\90 ØªØ§Ø³Û\90 Ù¾Ù\87 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ú©Û\90 Ø¯Ø±Ù\84Û\90Ú\96Ù\84 Ø´Ù\88Û\90 Ù\84ارÚ\9aÙ\88Ù\88Ù\86Û\90 Ù¾Ù\84Ù\8a Ú©Ú\93Û\8c Ø§Ù\88 Ø¯Ø¯Û\90 Ù¾Ø®Ù\84Û\8c Ù\88Ú©Ú\93Û\8c Ú\86Û\90 Ù\87Ù\85دا Ú¯ڼون په رښتيا ستاسې خپل دی.',
 'mailerror' => 'د برېښليک د لېږلو ستونزه: $1',
-'acct_creation_throttle_hit' => 'د Ù\87Ù\85دÛ\90 Ù\88Ù\8aÚ©Ù\8a Ú©Ø§Ø±Ù\86اÙ\86Ù\88 Ù¾Ù\87 Ù\88رÙ\88ستÙ\8aÙ\88 Ù\88رÚ\81Ù\88 Ú©Û\90 Ø³ØªØ§Ø³Û\90 Ø¯ IP Ù¾ØªÛ\90 Ù¾Ù\87 Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ø³Ø±Ù\87 {{PLURAL:$1|1 Ú«Ú¼Ù\88Ù\86|$1 Ú«Ú¼Ù\88Ù\86Ù\88Ù\86Ù\87}} Ø¬Ù\88Ú\93 Ú©Ú\93Ù\8aØ\8c Ú\86Û\90 Ø¯Ø§ Ù¾Ù\87 Ù\87Ù\85دÛ\90 Ù\85Ù\88دÛ\90 Ú©Û\90 Ø¯ Ú«ڼونونو د جوړولو تر ټولو ډېر شمېر دی چې اجازه يې ورکړ شوې.
\86Ù\88 Ù¾Ù\87 Ù\87Ù\85دÛ\90 Ø®Ø§Ø·Ø± Ø¯ Ø§Ù\88س Ù\84پارÙ\87 Ø¯ Ù\87Ù\85دÛ\90 IP Ù¾ØªÛ\90 Ú©Ø§Ø±Ù\86اÙ\86 Ù\86Ù\87 Ø´Ù\8a Ú©Ù\88Ù\84اÛ\8c Ú\86Û\90 Ù\86Ù\88ر Ú«ڼونونه جوړ کړي.',
+'acct_creation_throttle_hit' => 'د Ù\87Ù\85دÛ\90 Ù\88Ù\8aÚ©Ù\8a Ú©Ø§Ø±Ù\86اÙ\86Ù\88 Ù¾Ù\87 Ù\88رÙ\88ستÙ\8aÙ\88 Ù\88رÚ\81Ù\88 Ú©Û\90 Ø³ØªØ§Ø³Û\90 Ø¯ IP Ù¾ØªÛ\90 Ù¾Ù\87 Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ø³Ø±Ù\87 {{PLURAL:$1|1 Ú¯Ú¼Ù\88Ù\86|$1 Ú¯Ú¼Ù\88Ù\86Ù\88Ù\86Ù\87}} Ø¬Ù\88Ú\93 Ú©Ú\93Ù\8aØ\8c Ú\86Û\90 Ø¯Ø§ Ù¾Ù\87 Ù\87Ù\85دÛ\90 Ù\85Ù\88دÛ\90 Ú©Û\90 Ø¯ Ú¯ڼونونو د جوړولو تر ټولو ډېر شمېر دی چې اجازه يې ورکړ شوې.
\86Ù\88 Ù¾Ù\87 Ù\87Ù\85دÛ\90 Ø®Ø§Ø·Ø± Ø¯ Ø§Ù\88س Ù\84پارÙ\87 Ø¯ Ù\87Ù\85دÛ\90 IP Ù¾ØªÛ\90 Ú©Ø§Ø±Ù\86اÙ\86 Ù\86Ù\87 Ø´Ù\8a Ú©Ù\88Ù\84اÛ\8c Ú\86Û\90 Ù\86Ù\88ر Ú¯ڼونونه جوړ کړي.',
 'emailauthenticated' => 'ستاسې برېښليک پته په $2 نېټه په $3 بجو د منلو وړ وګرځېده.',
 'emailnotauthenticated' => 'لا تر اوسه ستاسې برېښليک پته د منلو وړ نه ده ګرځېدلې. د لاندې ځانګړتياو لپاره به تاسې ته هېڅ کوم برېښليک و نه لېږل شي.',
 'noemailprefs' => 'ددې لپاره چې دا کړنې کار وکړي نو تاسو يو برېښليک وټاکۍ.',
 'emailconfirmlink' => 'د خپل د برېښليک پتې پخلی وکړی',
 'invalidemailaddress' => 'دا برېښليک پته نه منل کېږي، دا ځکه چې دا پته يوه ناکره بڼه لري.
 لطفاً د يوې کره بڼې پته وليکۍ او يا هم دا ځای تش پرېږدۍ.',
-'cannotchangeemail' => 'پدÛ\90 Ù\88Ù\8aÚ©Ù\8a Ú©Û\90 Ø¯ Ú«ڼون برېښليک پتې نشي بدلېدلی.',
+'cannotchangeemail' => 'پدÛ\90 Ù\88Ù\8aÚ©Ù\8a Ú©Û\90 Ø¯ Ú¯ڼون برېښليک پتې نشي بدلېدلی.',
 'emaildisabled' => 'دا وېبځی د برېښليک لېږلو چارو څخه برخمن نه دی.',
-'accountcreated' => 'Ú«ڼون مو جوړ شو.',
-'accountcreatedtext' => 'د [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|خبرÛ\90 Ø§ØªØ±Û\90]]) Ù\84پارÙ\87 Ù\8aÙ\88 Ú«ڼون جوړ شو.',
-'createaccount-title' => 'د {{SITENAME}} Ø¯ Ú«ڼون جوړېدنه',
-'createaccount-text' => 'Ù\8aÙ\88 Ú\86ا Ø¯ {{SITENAME}} Ù¾Ù\87 Ù\88Û\90بÚ\81Ù\8a ($4) Ú©Û\90 Ø³ØªØ§Ø³Û\90 Ø¯ Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾ØªÛ\90 Ù\84پارÙ\87 Ø¯ "$2" Ù¾Ù\87 Ù\86اÙ\85Ù\87 Ù\8aÙ\88 Ú«ڼون جوړ کړی چې پټنوم يې "$3" دی.
+'accountcreated' => 'Ú¯ڼون مو جوړ شو.',
+'accountcreatedtext' => 'د [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|خبرÛ\90 Ø§ØªØ±Û\90]]) Ù\84پارÙ\87 Ù\8aÙ\88 Ú¯ڼون جوړ شو.',
+'createaccount-title' => 'د {{SITENAME}} Ø¯ Ú¯ڼون جوړېدنه',
+'createaccount-text' => 'Ù\8aÙ\88 Ú\86ا Ø¯ {{SITENAME}} Ù¾Ù\87 Ù\88Û\90بÚ\81Ù\8a ($4) Ú©Û\90 Ø³ØªØ§Ø³Û\90 Ø¯ Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾ØªÛ\90 Ù\84پارÙ\87 Ø¯ "$2" Ù¾Ù\87 Ù\86اÙ\85Ù\87 Ù\8aÙ\88 Ú¯ڼون جوړ کړی چې پټنوم يې "$3" دی.
 تاسې بايد غونډال ته ورننوځۍ او همدا اوس خپل پټنوم بدل کړی.
 
-Ú©Ù\87 Ú\86Û\90رتÙ\87 Ø¯Ø§ Ú©Ú\93Ù\86Ù\87 Ù¾Ù\87 ØªÛ\90رÙ\88تÙ\86Ù\87 Ú©Û\90 Ø´Ù\88Û\8c Ù\88Ù\8a Ù\86Ù\88 ØªØ§Ø³Û\90 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8c Ú\86Û\90 Ø¯Ø§ Ù¾Ù\8aغاÙ\85 Ø¨Ø§Ø¨Û\90زÙ\87 Ù\88Ú«ڼۍ.',
+Ú©Ù\87 Ú\86Û\90رتÙ\87 Ø¯Ø§ Ú©Ú\93Ù\86Ù\87 Ù¾Ù\87 ØªÛ\90رÙ\88تÙ\86Ù\87 Ú©Û\90 Ø´Ù\88Û\8c Ù\88Ù\8a Ù\86Ù\88 ØªØ§Ø³Û\90 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8c Ú\86Û\90 Ø¯Ø§ Ù¾Ù\8aغاÙ\85 Ø¨Ø§Ø¨Û\90زÙ\87 Ù\88Ú¯ڼۍ.',
 'usernamehasherror' => 'کارن-نوم نشي کېدلای چې کرښکې لوښې ولري',
 'login-throttled' => 'تاسې څو واره هڅه کړې چې غونډال ته ورننوځۍ.
 لطفاً د بيا هڅې نه مخکې يو څو شېبې تم شۍ.',
@@ -678,7 +677,7 @@ $1',
 
 # Change password dialog
 'resetpass' => 'پټنوم بدلول',
-'resetpass_header' => 'د Ú«ڼون پټنوم بدلول',
+'resetpass_header' => 'د Ú¯ڼون پټنوم بدلول',
 'oldpassword' => 'زوړ پټنوم:',
 'newpassword' => 'نوی پټنوم:',
 'retypenew' => 'نوی پټنوم بيا وليکه:',
@@ -688,7 +687,7 @@ $1',
 'resetpass_forbidden' => 'پټنومونه مو نه شي بدلېدلای',
 'resetpass-no-info' => 'دې مخ ته د لاسرسي لپاره بايد غونډال کې ورننوځۍ.',
 'resetpass-submit-loggedin' => 'پټنوم بدلول',
-'resetpass-submit-cancel' => 'Ù\86اګارل',
+'resetpass-submit-cancel' => 'Ù\86اگارل',
 'resetpass-wrong-oldpass' => 'لنډمهال او يا هم اوسنی پټنوم مو ناسم دی',
 'resetpass-temp-password' => 'لنډمهالی پټنوم:',
 
@@ -700,22 +699,22 @@ $1',
 'passwordreset-domain' => 'شپول:',
 'passwordreset-capture' => 'د پايلې برېښليک کتل غواړې؟',
 'passwordreset-email' => 'برېښليک پته:',
-'passwordreset-emailtitle' => 'د {{SITENAME}} Ø¯ Ú«Ú¼Ù\88Ù\86 Ú\85رګندنې',
+'passwordreset-emailtitle' => 'د {{SITENAME}} Ø¯ Ú¯Ú¼Ù\88Ù\86 Ú\85رگندنې',
 'passwordreset-emailelement' => 'کارن-نوم: $1
 لنډمهاله پټنوم: $2',
 'passwordreset-emailsent' => 'د پټنوم بيا پرځای کېدنې لپاره برېښليک درولېږل شو.',
-'passwordreset-emailsent-capture' => 'د Ù¾Ù¼Ù\86Ù\88Ù\85 Ø¨Ù\8aاپرÚ\81اÛ\8c Ú©Û\90دÙ\86Û\90 Ù\84پار Ù\85Ù\88 Ù\8aÙ\88 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ø¯Ø±Ù\88Ù\84Û\90Ú\96Ù\87Ø\8c Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾Ù\87 Ù\84اÙ\86دÛ\90 ØªÙ\88Ú«ه ښودل شوی.',
+'passwordreset-emailsent-capture' => 'د Ù¾Ù¼Ù\86Ù\88Ù\85 Ø¨Ù\8aاپرÚ\81اÛ\8c Ú©Û\90دÙ\86Û\90 Ù\84پار Ù\85Ù\88 Ù\8aÙ\88 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ø¯Ø±Ù\88Ù\84Û\90Ú\96Ù\87Ø\8c Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾Ù\87 Ù\84اÙ\86دÛ\90 ØªÙ\88Ú¯ه ښودل شوی.',
 
 # Special:ChangeEmail
 'changeemail' => 'برېښليک پته بدلول',
-'changeemail-header' => 'د Ú«ڼون برېښليک پته بدلول',
+'changeemail-header' => 'د Ú¯ڼون برېښليک پته بدلول',
 'changeemail-no-info' => 'دې مخ ته د لاسرسي لپاره بايد غونډال کې ورننوځۍ.',
 'changeemail-oldemail' => 'اوسنۍ برېښليک پته:',
 'changeemail-newemail' => 'نوې برېښليک پته:',
 'changeemail-none' => '(هېڅ)',
 'changeemail-password' => 'ستاسې د{{SITENAME}} پټنوم:',
 'changeemail-submit' => 'برېښليک بدلول',
-'changeemail-cancel' => 'Ù\86اګارل',
+'changeemail-cancel' => 'Ù\86اگارل',
 
 # Edit page toolbar
 'bold_sample' => 'زغرد متن',
@@ -729,7 +728,7 @@ $1',
 'headline_sample' => 'د سرليک متن',
 'headline_tip' => 'د ۲ کچې سرليک',
 'nowiki_sample' => 'دلته دې بې بڼې متن ځای پر ځای شي',
-'nowiki_tip' => 'د Ù\88Ù\8aÚ©Ù\8a Ø¨Ú¼Ù\87 Ù\86Ù\8aÙ\88Ù\86Ù\87 Ø¨Ø§Ø¨Û\90زÙ\87 Ú«ڼل',
+'nowiki_tip' => 'د Ù\88Ù\8aÚ©Ù\8a Ø¨Ú¼Ù\87 Ù\86Ù\8aÙ\88Ù\86Ù\87 Ø¨Ø§Ø¨Û\90زÙ\87 Ú¯ڼل',
 'image_tip' => 'خښه شوې دوتنه',
 'media_tip' => 'د دوتنې تړنه',
 'sig_tip' => 'ستاسې لاسليک د وخت د ټاپې سره',
@@ -750,7 +749,7 @@ $1',
 'missingcommenttext' => 'لطفاً تبصره لاندې وليکۍ.',
 'summary-preview' => 'د لنډيز مخليدنه:',
 'subject-preview' => 'موضوع/سرليک مخکتنه:',
-'blockedtitle' => 'پر Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú«ېدلی',
+'blockedtitle' => 'پر Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú¯ېدلی',
 'blockedtext' => "'''ستاسې د کارن-نوم يا آی پي پتې مخنيوی شوی.'''
 
 همدا بنديز د $1 له خوا پر تاسې لږېدلی. او د همدې کړنې سبب ''$2'' دی.
@@ -759,10 +758,10 @@ $1',
 * د بنديز د پای نېټه: $6
 * بنديزونه دي پر: $7
 
-تاسÛ\90 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8c Ú\86Û\90 Ø¯ $1 Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ Ù\8aÙ\88 Ø¨Ù\84 [[{{MediaWiki:Grouppage-sysop}}|پازÙ\88اÙ\84]] Ø³Ø±Ù\87 Ø§Ú\93Ù\8aÚ©Û\90 Ù¼Ù\8aÙ\86Ú«ې کړی او د بنديز ستونزې مو هوارې کړی.
-تاسÛ\90 Ù\86Ù\87 Ø´Û\8c Ú©Ù\88Ù\84اÛ\8c Ú\86Û\90 Ø¯ 'کارÙ\86 ØªÙ\87 Ø¨Ø±Û\90Ú\9aÙ\84Ú© Ù\84Û\90Ú\96Ù\84' Ú©Ú\93Ù\86Û\90 Ù\86Ù\87 Ú«Ù¼Ù\87 Ù¾Ù\88رتÙ\87 Ú©Ú\93Û\8c ØªØ± Ú\85Ù\88 Ú\86Û\90 ØªØ§Ø³Û\90 Ø¯ Ø®Ù¾Ù\84 Ú«Ú¼Ù\88Ù\86 Ù¾Ù\87 [[Special:Preferences|غÙ\88رÙ\87 ØªÙ\88بÙ\88Ù\86Ù\88]] Ú©Û\90 Ù\8aÙ\88Ù\87 Ú©Ø±Ù\87 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾ØªÙ\87 Ù\86Ù\87 Ù\88Ù\8a Ú\81اÙ\86Ú«Ú\93Û\90 Ú©Ú\93Û\90 Ø§Ù\88 ØªØ± Ø¯Û\90 Ø¨Ø±Ù\8aدÙ\87 Ú\86Û\90 Ù¾Ø± ØªØ§Ø³Û\90 Ø¯ Ù\87غÛ\90 Ø¯ Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ø¨Ù\86دÙ\8aز Ù\86Ù\87 Ù\88Ù\8a Ù\84Ú«ېدلی.
+تاسÛ\90 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8c Ú\86Û\90 Ø¯ $1 Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ Ù\8aÙ\88 Ø¨Ù\84 [[{{MediaWiki:Grouppage-sysop}}|پازÙ\88اÙ\84]] Ø³Ø±Ù\87 Ø§Ú\93Ù\8aÚ©Û\90 Ù¼Ù\8aÙ\86Ú¯ې کړی او د بنديز ستونزې مو هوارې کړی.
+تاسÛ\90 Ù\86Ù\87 Ø´Û\8c Ú©Ù\88Ù\84اÛ\8c Ú\86Û\90 Ø¯ 'کارÙ\86 ØªÙ\87 Ø¨Ø±Û\90Ú\9aÙ\84Ú© Ù\84Û\90Ú\96Ù\84' Ú©Ú\93Ù\86Û\90 Ù\86Ù\87 Ú¯Ù¼Ù\87 Ù¾Ù\88رتÙ\87 Ú©Ú\93Û\8c ØªØ± Ú\85Ù\88 Ú\86Û\90 ØªØ§Ø³Û\90 Ø¯ Ø®Ù¾Ù\84 Ú¯Ú¼Ù\88Ù\86 Ù¾Ù\87 [[Special:Preferences|غÙ\88رÙ\87 ØªÙ\88بÙ\88Ù\86Ù\88]] Ú©Û\90 Ù\8aÙ\88Ù\87 Ú©Ø±Ù\87 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾ØªÙ\87 Ù\86Ù\87 Ù\88Ù\8a Ú\81اÙ\86Ú¯Ú\93Û\90 Ú©Ú\93Û\90 Ø§Ù\88 ØªØ± Ø¯Û\90 Ø¨Ø±Ù\8aدÙ\87 Ú\86Û\90 Ù¾Ø± ØªØ§Ø³Û\90 Ø¯ Ù\87غÛ\90 Ø¯ Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ø¨Ù\86دÙ\8aز Ù\86Ù\87 Ù\88Ù\8a Ù\84Ú¯ېدلی.
 ستاسې د دم مهال آی پي پته $3 ده، او ستاسې د بنديز پېژند #$5 دی. مهرباني وکړۍ د خپلې يادونې پر مهال د دغو دوو څخه د يوه او يا هم د دواړو ورکول مه هېروۍ.",
-'autoblockedtext' => 'Ù¾Ù\87 Ø®Ù¾Ù\84کارÙ\8aزÙ\87 ØªÙ\88Ú«Ù\87 Ø³ØªØ§Ø³Û\90 Ù¾Ø± IP Ù¾ØªÛ\90 Ø¨Ù\86دÙ\8aز Ù\84Ú«Û\90دÙ\84Û\8cØ\8c Ø¯Ø§ Ø¯ Ø¯Û\90 Ù¾Ù\87 Ø®Ø§Ø·Ø± Ú\86Û\90 Ø³ØªØ§Ø³Û\90 Ù¾ØªÙ\87 Ø¯ Ø¨Ù\84 Ú\86ا Ù\84Ù\87 Ø®Ù\88ا Ú\86Û\90 $1 Ù¾Ø±Û\90 Ø¨Ù\86دÙ\8aز Ù\84Ú«ولی، کارېدلې.
+'autoblockedtext' => 'Ù¾Ù\87 Ø®Ù¾Ù\84کارÙ\8aزÙ\87 ØªÙ\88Ú¯Ù\87 Ø³ØªØ§Ø³Û\90 Ù¾Ø± IP Ù¾ØªÛ\90 Ø¨Ù\86دÙ\8aز Ù\84Ú¯Û\90دÙ\84Û\8cØ\8c Ø¯Ø§ Ø¯ Ø¯Û\90 Ù¾Ù\87 Ø®Ø§Ø·Ø± Ú\86Û\90 Ø³ØªØ§Ø³Û\90 Ù¾ØªÙ\87 Ø¯ Ø¨Ù\84 Ú\86ا Ù\84Ù\87 Ø®Ù\88ا Ú\86Û\90 $1 Ù¾Ø±Û\90 Ø¨Ù\86دÙ\8aز Ù\84Ú¯ولی، کارېدلې.
 او د بنديز سبب يې دا دی:
 
 :\'\'$2\'\'
@@ -771,9 +770,9 @@ $1',
 * د بنديز د پای نېټه: $6
 * د بنديز د موخې سړی: $7
 
-تاسÛ\90 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8c Ú\86Û\90 Ø¯ $1 Ø³Ø±Ù\87 Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ [[{{MediaWiki:Grouppage-sysop}}|پازÙ\88اÙ\84اÙ\86Ù\88]]  Ù\84Ù\87 Ú\89Ù\84Û\90 Ù\86Ù\87 Ù\8aÙ\88 Ú\86ا Ø³Ø±Ù\87 Ø§Ú\93Ù\8aÚ©Û\90 Ù¼Ù\8aÙ\86Ú«ې کړی او د بنديز په اړه مو ورسره خبرې وکړۍ.
+تاسÛ\90 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8c Ú\86Û\90 Ø¯ $1 Ø³Ø±Ù\87 Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ [[{{MediaWiki:Grouppage-sysop}}|پازÙ\88اÙ\84اÙ\86Ù\88]]  Ù\84Ù\87 Ú\89Ù\84Û\90 Ù\86Ù\87 Ù\8aÙ\88 Ú\86ا Ø³Ø±Ù\87 Ø§Ú\93Ù\8aÚ©Û\90 Ù¼Ù\8aÙ\86Ú¯ې کړی او د بنديز په اړه مو ورسره خبرې وکړۍ.
 
-دا Ù\85Ù\87 Ù\87Û\90رÙ\88Û\8d Ú\86Û\90 ØªØ§Ø³Û\90 Ø¯ "کارÙ\86 ØªÙ\87 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù\84Û\90Ú\96Ù\84" Ù\84Ù\87 Ø§Ø³Ø§Ù\86تÙ\8aاÙ\88ؤ Ù\86Ù\87 Ú«Ù¼Ù\87 Ù\86Ù\87 Ø´Û\8c Ø§Ø®Ù\8aستÙ\84اÛ\8c ØªØ± Ú\85Ù\88 Ú\86Û\90 Ø³ØªØ§Ø³Û\90 Ø¯ Ù\86Ù\88Ù\85Ù\84Ù\8aÚ©Ù\86Û\90 Ù¾Ù\87 Ù\88خت Ú©Û\90 Ù\8aا [[Special:Preferences|ستاسÛ\90 Ø¯ ØºÙ\88رÙ\87 ØªÙ\88بÙ\88Ù\86Ù\88 Ù¾Ù\87 Ø§Ù\85ستÙ\86Ù\88]] Ú©Û\90 Ù\8aÙ\88Ù\87 Ú©Ø±Ù\87 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾ØªÙ\87 Ù\86Ù\87 Ù\88Ù\8a Ú\81اÙ\86Ú«Ú\93Û\90 Ø´Ù\88Û\90Ø\8c Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù\84Û\90Ú\96Ù\84Ù\88 Ø¯ Ú\86ارÙ\88 Ù¾Ù\87 Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ù\85Ù\88 Ø¨Ù\86دÙ\8aز Ù\86Ù\87 Ù\88Ù\8a Ù\84Ú«ېدلی.
+دا Ù\85Ù\87 Ù\87Û\90رÙ\88Û\8d Ú\86Û\90 ØªØ§Ø³Û\90 Ø¯ "کارÙ\86 ØªÙ\87 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù\84Û\90Ú\96Ù\84" Ù\84Ù\87 Ø§Ø³Ø§Ù\86تÙ\8aاÙ\88ؤ Ù\86Ù\87 Ú«Ù¼Ù\87 Ù\86Ù\87 Ø´Û\8c Ø§Ø®Ù\8aستÙ\84اÛ\8c ØªØ± Ú\85Ù\88 Ú\86Û\90 Ø³ØªØ§Ø³Û\90 Ø¯ Ù\86Ù\88Ù\85Ù\84Ù\8aÚ©Ù\86Û\90 Ù¾Ù\87 Ù\88خت Ú©Û\90 Ù\8aا [[Special:Preferences|ستاسÛ\90 Ø¯ ØºÙ\88رÙ\87 ØªÙ\88بÙ\88Ù\86Ù\88 Ù¾Ù\87 Ø§Ù\85ستÙ\86Ù\88]] Ú©Û\90 Ù\8aÙ\88Ù\87 Ú©Ø±Ù\87 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾ØªÙ\87 Ù\86Ù\87 Ù\88Ù\8a Ú\81اÙ\86Ú¯Ú\93Û\90 Ø´Ù\88Û\90Ø\8c Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù\84Û\90Ú\96Ù\84Ù\88 Ø¯ Ú\86ارÙ\88 Ù¾Ù\87 Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ù\85Ù\88 Ø¨Ù\86دÙ\8aز Ù\86Ù\87 Ù\88Ù\8a Ù\84Ú¯ېدلی.
 
 ستاسې IP پته $3 ده او ستاسې د بنديز پېژند #$5 دی.
 د بنديز اړونده د اړيکو نيولو په وخت کې لطفاً د پورتني مالوماتو يادونه وکړۍ.',
@@ -788,25 +787,25 @@ $1',
 'accmailtitle' => 'پټنوم ولېږل شو.',
 'newarticle' => '(نوی)',
 'newarticletext' => "تاسې د يوې داسې تړنې څارنه کړې چې لا تر اوسه پورې نه شته.
-Ú©Ù\87 Ù\87Ù\85دا Ù\85Ø® Ù\84Ù\8aÚ©Ù\84 ØºÙ\88اÚ\93Û\8dØ\8c Ù\86Ù\88 Ù¾Ù\87 Ù\84اÙ\86دÙ\8aÙ\86Ù\8a Ú\86Ù\88کاټ Ú©Û\90 Ø®Ù¾Ù\84 Ù\85تÙ\86 Ù\88ټاپÛ\8d (د Ù\84ا Ù\86Ù\88رÙ\88 Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87 Ø¯ [[{{MediaWiki:Helppage}}|Ù\84ارÚ\9aÙ\88د Ù\85Ø®]] Ù\88Ú«ورۍ).
+Ú©Ù\87 Ù\87Ù\85دا Ù\85Ø® Ù\84Ù\8aÚ©Ù\84 ØºÙ\88اÚ\93Û\8dØ\8c Ù\86Ù\88 Ù¾Ù\87 Ù\84اÙ\86دÙ\8aÙ\86Ù\8a Ú\86Ù\88کاټ Ú©Û\90 Ø®Ù¾Ù\84 Ù\85تÙ\86 Ù\88ټاپÛ\8d (د Ù\84ا Ù\86Ù\88رÙ\88 Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87 Ø¯ [[{{MediaWiki:Helppage}}|Ù\84ارÚ\9aÙ\88د Ù\85Ø®]] Ù\88Ú¯ورۍ).
 که چېرته تاسې دلته په تېروتنه راغلي ياست، نو يواځې د خپل د کتنمل '''مخ پر شا''' تڼۍ مو وټوکۍ.",
-'anontalkpagetext' => "----''دا Ø¯ Ù\8aÙ\88Ù\87 Ù\88رکÙ\86Ù\88Ù\85Ù\8a Ú©Ø§Ø±Ù\86 Ú\86Û\90 Ú©Ø§Ø±Ù\86\86Ù\88Ù\85 Ù\86Ù\87 Ù\84رÙ\8a Ø§Ù\88 Ù\8aا Ø®Ù¾Ù\84 Ú©Ø§Ø±Ù\86\86Ù\88Ù\85 Ù\86Ù\87 Ú©Ø§Ø±Ù\88Ù\8aØ\8c Ø¯ Ø³Ú©Ø§Ù\84Ù\88 Ù\8aÙ\88Ù\87 Ù¾Ø§Ú¼Ù\87 Ø¯Ù\87. Ù\86Ù\88 Ø¯ Ù\8aÙ\88Ù\87 Ú©Ø³ Ø¯ Ù¾Û\90Ú\98Ù\86دÙ\84Ù\88 Ù¾Ø®Ø§Ø·Ø± Ù\85Ù\88Ú\96 Ø¯ Ù\87Ù\85اغÙ\87 Ú©Ø§Ø±Ù\86 Ø¯ Ø§Ù\86ټرÙ\86Û\90Ù¼ Ø´Ù\85Û\90رÙ\87 Ù\8aا IP Ù¾ØªÙ\87 Ø¯Ù\84تÙ\87 Ø«Ø¨ØªÙ\88ؤ. Ø¯Ø§Ø³Û\90 Ù\8aÙ\88Ù\87 IP Ù¾ØªÙ\87 Ø¯ Ú\89Û\90رÙ\88 Ú©Ø§Ø±Ù\86اÙ\86Ù\88 Ù\84Ø®Ù\88ا Ù\87Ù\85 Ú©Ø§Ø±Û\90دÙ\84Û\8c Ø´Ù\8a. Ú©Ù\87 ØªØ§Ø³Û\90 Ù\8aÙ\88 Ù\88رکÙ\86Ù\88Ù\85Û\8c Ú©Ø§Ø±Ù\86 Ù\8aاست Ø§Ù\88 ØªØ§Ø³Û\90 ØªÙ\87 Ø¯Ø§ Ú\85رګÙ\86دÛ\90Ú\96Ù\8a Ú\86Û\90 ØªØ§Ø³Û\90 ØªÙ\87 Ù\86ااÚ\93Ù\88Ù\86دÙ\87 Ù¾Û\90غاÙ\85Ù\88Ù\86Ù\87 Ø§Ù\88 ØªØ¨ØµØ±Û\90 Ø§Ø´Ø§Ø±Ù\87 Ø´Ù\88Ù\8aØ\8c Ù\86Ù\88 Ø¯ Ù\86Ù\88رÙ\88 Ø¨Û\90 Ù\86Ù\88Ù\85Ù\88 Ú©Ø§Ø±Ù\86اÙ\86Ù\88 Ø§Ù\88 Ø³ØªØ§Ø³Û\90 ØªØ±Ù\85Û\90Ù\86Ú\81 Ø¯ Ù¼Ú©Ù\86تÙ\88ب Ø¯ Ù\85Ø® Ù\86Ù\8aÙ\88Ù\86Û\90 Ù\84پارÙ\87 Ù\84Ø·Ù\81اÙ\8b [[Special:UserLogin/signup|Ù\8aÙ\88 Ú«ڼون جوړ کړۍ]] او يا هم [[Special:UserLogin|غونډال ته ورننوځۍ]].''",
+'anontalkpagetext' => "----''دا Ø¯ Ù\8aÙ\88Ù\87 Ù\88رکÙ\86Ù\88Ù\85Ù\8a Ú©Ø§Ø±Ù\86 Ú\86Û\90 Ú©Ø§Ø±Ù\86\86Ù\88Ù\85 Ù\86Ù\87 Ù\84رÙ\8a Ø§Ù\88 Ù\8aا Ø®Ù¾Ù\84 Ú©Ø§Ø±Ù\86\86Ù\88Ù\85 Ù\86Ù\87 Ú©Ø§Ø±Ù\88Ù\8aØ\8c Ø¯ Ø³Ú©Ø§Ù\84Ù\88 Ù\8aÙ\88Ù\87 Ù¾Ø§Ú¼Ù\87 Ø¯Ù\87. Ù\86Ù\88 Ø¯ Ù\8aÙ\88Ù\87 Ú©Ø³ Ø¯ Ù¾Û\90Ú\98Ù\86دÙ\84Ù\88 Ù¾Ø®Ø§Ø·Ø± Ù\85Ù\88Ú\96 Ø¯ Ù\87Ù\85اغÙ\87 Ú©Ø§Ø±Ù\86 Ø¯ Ø§Ù\86ټرÙ\86Û\90Ù¼ Ø´Ù\85Û\90رÙ\87 Ù\8aا IP Ù¾ØªÙ\87 Ø¯Ù\84تÙ\87 Ø«Ø¨ØªÙ\88ؤ. Ø¯Ø§Ø³Û\90 Ù\8aÙ\88Ù\87 IP Ù¾ØªÙ\87 Ø¯ Ú\89Û\90رÙ\88 Ú©Ø§Ø±Ù\86اÙ\86Ù\88 Ù\84Ø®Ù\88ا Ù\87Ù\85 Ú©Ø§Ø±Û\90دÙ\84Û\8c Ø´Ù\8a. Ú©Ù\87 ØªØ§Ø³Û\90 Ù\8aÙ\88 Ù\88رکÙ\86Ù\88Ù\85Û\8c Ú©Ø§Ø±Ù\86 Ù\8aاست Ø§Ù\88 ØªØ§Ø³Û\90 ØªÙ\87 Ø¯Ø§ Ú\85رگÙ\86دÛ\90Ú\96Ù\8a Ú\86Û\90 ØªØ§Ø³Û\90 ØªÙ\87 Ù\86ااÚ\93Ù\88Ù\86دÙ\87 Ù¾Û\90غاÙ\85Ù\88Ù\86Ù\87 Ø§Ù\88 ØªØ¨ØµØ±Û\90 Ø§Ø´Ø§Ø±Ù\87 Ø´Ù\88Ù\8aØ\8c Ù\86Ù\88 Ø¯ Ù\86Ù\88رÙ\88 Ø¨Û\90 Ù\86Ù\88Ù\85Ù\88 Ú©Ø§Ø±Ù\86اÙ\86Ù\88 Ø§Ù\88 Ø³ØªØ§Ø³Û\90 ØªØ±Ù\85Û\90Ù\86Ú\81 Ø¯ Ù¼Ú©Ù\86تÙ\88ب Ø¯ Ù\85Ø® Ù\86Ù\8aÙ\88Ù\86Û\90 Ù\84پارÙ\87 Ù\84Ø·Ù\81اÙ\8b [[Special:UserLogin/signup|Ù\8aÙ\88 Ú¯ڼون جوړ کړۍ]] او يا هم [[Special:UserLogin|غونډال ته ورننوځۍ]].''",
 'noarticletext' => 'دم مهال په دې مخ کې څه نشته.
 تاسې کولای شی چې په نورو مخونو کې [[Special:Search/{{PAGENAME}}|د دې مخ د سرليک پلټنه]] يا
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د اړوندو يادښتونو پلټنه] وکړی.
 او يا [{{fullurl:{{FULLPAGENAME}}|action=edit}} همدا مخ سم کړی]</span>.',
 'noarticletext-nopermission' => 'دم مهال په دې مخ کې متن نشته.
 تاسې کولای شی چې [[Special:Search/{{PAGENAME}}|همدا سرليک په نورو مخونو کې وپلټۍ]], يا هم <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} اړونده يادښتونه وپلټۍ]</span>، خو تاسې د دې مخ د جوړولو اجازه نه لرۍ.',
-'userpage-userdoesnotexist' => 'د "<nowiki>$1</nowiki>" Ú«ڼون نه دی ثبت شوی.
+'userpage-userdoesnotexist' => 'د "<nowiki>$1</nowiki>" Ú¯ڼون نه دی ثبت شوی.
 لطفاً ځان ډاډه کړۍ چې آيا تاسې په رښتيا همدا مخ جوړول که سمول غواړۍ.',
-'userpage-userdoesnotexist-view' => 'د "$1" Ú«ڼون نه دی ثبت شوی.',
-'blocked-notice-logextract' => 'دÙ\85 Ù\85Ù\87اÙ\84 Ù¾Ù\87 Ø¯Û\90 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú«ېدلی.
لته لاندې د بنديز تازه يادښت د سرچينې په توګه ورکړ شوی:',
+'userpage-userdoesnotexist-view' => 'د "$1" Ú¯ڼون نه دی ثبت شوی.',
+'blocked-notice-logextract' => 'دÙ\85 Ù\85Ù\87اÙ\84 Ù¾Ù\87 Ø¯Û\90 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú¯ېدلی.
 بنديز يادښت تازه مالومات په لاندې توگه دي:',
 'clearyourcache' => "'''يادښت:''' د غوره توبونو د خوندي کولو وروسته، خپل د کتنمل (بروزر) ساتل شوې حافظه تازه کړی.
 * '''فايرفاکس/ سفري:''' په دې کتنمل کې د ''Reload'' د ټکوهلو په وخت د ''Shift'' تڼۍ نيولې وساتی، او يا هم ''Ctrl-F5'' يا ''Ctrl-R''تڼۍ کېښکاږۍ (په Apple Mac کمپيوټر باندې ''⌘-R'' کېښکاږۍ)
-* '''Ú«Ù\88Ù\88Ú«ل کروم:''' په دې کتنمل کې د ''Ctrl-Shift-R'' تڼۍ کېښکاږۍ (د مک لپاره ''⌘-Shift-R'')
+* '''Ú¯Ù\88Ù\88Ú¯ل کروم:''' په دې کتنمل کې د ''Ctrl-Shift-R'' تڼۍ کېښکاږۍ (د مک لپاره ''⌘-Shift-R'')
 * '''انټرنټ اېکسپلورر:''' په دې کتنمل کې د ''Refresh'' د ټکوهلو په وخت کې د ''Ctrl'' تڼۍ کېښکاږلې ونيسۍ، او يا هم د ''Ctrl-F5'' تڼۍ کېښکاږۍ
-* '''اÙ\88پرا''': Ù¾Ù\87 Ø¯Û\90 Ú©ØªÙ\86Ù\85Ù\84 Ú©Û\90 Ø¯ Ø®Ù¾Ù\84 Ø¨Ø±Ø§Ù\88زر Ø³Ø§ØªÙ\84 Ø´Ù\88Û\90 Ø­Ø§Ù\81ظÙ\87 Ù¾Ø¯Û\90 ØªÙ\88Ú«ه سپينولی شی ''Tools→Preferences''",
+* '''اÙ\88پرا''': Ù¾Ù\87 Ø¯Û\90 Ú©ØªÙ\86Ù\85Ù\84 Ú©Û\90 Ø¯ Ø®Ù¾Ù\84 Ø¨Ø±Ø§Ù\88زر Ø³Ø§ØªÙ\84 Ø´Ù\88Û\90 Ø­Ø§Ù\81ظÙ\87 Ù¾Ø¯Û\90 ØªÙ\88Ú¯ه سپينولی شی ''Tools→Preferences''",
 'usercsspreview' => "'''هېر مو نشي چې دا يوازې ستاسې د کارن CSS مخليدنه ده.'''
 '''تر اوسه پورې لا ستاسې بدلونونه نه دي خوندي شوي!'''",
 'userjspreview' => "'''هېر مو نشي چې دا يوازې ستاسې د کارن د جاوا سکرېپټ آزمېيل/مخليدنه ده.'''
@@ -828,17 +827,17 @@ $1',
 'yourtext' => 'ستاسې متن',
 'storedversion' => 'زېرمه شوې مخکتنه',
 'yourdiff' => 'توپيرونه',
-'copyrightwarning' => "Ù\84Ø·Ù\81اÙ\8b Ù¾Ù\87 Ù¾Ø§Ù\85 Ú©Û\90 Ù\88ساتÛ\8d Ú\86Û\90 Ù¼Ù\88Ù\84Û\90 Ù\87غÙ\87 Ù\88Ù\86Ú\89Û\90 Ú\86Û\90 ØªØ§Ø³Û\90 Ù\8aÛ\90 {{SITENAME}} Ú©Û\90 ØªØ±Ø³Ø±Ù\87 Ú©Ù\88Û\8c Ù\87غÙ\87 Ø¯ $2 Ù\84Ù\87 Ù\85Ø®Û\90 Ø¯ Ø®Ù¾Ø±Ù\88Ù\84Ù\88 Ù\84پارÙ\87 Ú«Ú¼Ù\84 Ú©Û\90Ú\96Ù\8a (د Ù\84اÙ\86Ù\88رÙ\88 ØªÙ\81صÙ\8aÙ\84اتÙ\88 Ù\84پارÙ\87 $1 Ù\88Ú«Ù\88رÛ\8d). Ú©Ù\87 ØªØ§Ø³Û\90 Ù\86Ù\87 ØºÙ\88اÚ\93Û\8d Ú\86Û\90 Ù¾Ù\87 Ù\84Ù\8aÚ©Ù\86Ù\88 Ú©Û\90 Ù\85Ù\88 Ù¾Ù\87 Ø¨Û\90 Ø±Ø­Ù\85Û\8d Ø³Ø±Ù\87 Ù\84اسÙ\88Ù\87Ù\86Û\90 (سÙ\85Ù\88Ù\86Û\90) Ù\88Ø´Ù\8a Ø§Ù\88 Ø¯ Ù\86Ù\88رÙ\88 Ù¾Ù\87 ØºÙ\88Ú\9aتÙ\86Ù\87 Ù¾Ø³Û\90 Ù\84اÙ\86Ù\88رÛ\90 هم خپرې شي، نو دلته يې مه ځای پر ځای کوی..<br />
-تاسې زمونږ سره دا ژمنه هم کوی چې تاسې پخپله دا ليکنه کښلې، او يا مو د ټولګړو پاڼو او يا ورته وړيا سرچينو نه کاپي کړې ده '''لطفاً د ليکوال د اجازې نه پرته د خوندي رښتو ليکنې مه خپروی!'''",
+'copyrightwarning' => "Ù\84Ø·Ù\81اÙ\8b Ù¾Ù\87 Ù¾Ø§Ù\85 Ú©Û\90 Ù\88ساتÛ\8d Ú\86Û\90 Ù¼Ù\88Ù\84Û\90 Ù\87غÙ\87 Ù\88Ù\86Ú\89Û\90 Ú\86Û\90 ØªØ§Ø³Û\90 Ù\8aÛ\90 {{SITENAME}} Ú©Û\90 ØªØ±Ø³Ø±Ù\87 Ú©Ù\88Û\8c Ù\87غÙ\87 Ø¯ $2 Ù\84Ù\87 Ù\85Ø®Û\90 Ø¯ Ø®Ù¾Ø±Ù\88Ù\84Ù\88 Ù\84پارÙ\87 Ú¯Ú¼Ù\84 Ú©Û\90Ú\96Ù\8a (د Ù\84اÙ\86Ù\88رÙ\88 ØªÙ\81صÙ\8aÙ\84اتÙ\88 Ù\84پارÙ\87 $1 Ù\88Ú¯Ù\88رÛ\8d). Ú©Ù\87 ØªØ§Ø³Û\90 Ù\86Ù\87 ØºÙ\88اÚ\93Û\8d Ú\86Û\90 Ù¾Ù\87 Ù\84Ù\8aÚ©Ù\86Ù\88 Ú©Û\90 Ù\85Ù\88 Ù¾Ù\87 Ø¨Û\90 Ø±Ø­Ù\85Û\8d Ø³Ø±Ù\87 Ù\84اسÙ\88Ù\87Ù\86Û\90 (سÙ\85Ù\88Ù\86Û\90) Ù\88Ø´Ù\8a Ø§Ù\88 Ø¯ Ù\86Ù\88رÙ\88 Ù¾Ù\87 ØºÙ\88Ú\9aتÙ\86Ù\87 Ù¾Ø³Û\90 Ù\84اÙ\86Ù\88رÛ\90 Ù\88غÚ\81Û\90Ú\96Ù\8a Ø§Ù\88 Ù\8aا هم خپرې شي، نو دلته يې مه ځای پر ځای کوی..<br />
+تاسې زموږ سره دا ژمنه هم کوئ چې تاسې پخپله دا ليکنه کښلې، او يا مو د ټولگړو پاڼو او يا ورته وړيا سرچينو څخه لمېسلې ده '''لطفاً د ليکوال د اجازې څخه پرته د خوندي رښتو ليکنې مه خپروی!'''",
 'longpageerror' => "'''تېروتنه: کوم متن چې مو ليکلی {{PLURAL:$1|يو کيلوبايټه|$1 کيلوبايټه}} اوږد دی، چې دا پخپله د حد اکثر نه {{PLURAL:$2|يو کيلوبايټه|$2 کيلوبايټه}} اوږد دی.'''
 ستاسې متن نه شي خوندي کېدلای.",
-'protectedpagewarning' => "'''Ú«واښنه: همدا مخ تړل شوی او يوازې هغه کارنان په دې مخ کې بدلونونه راوستلای شي چې د پازوالۍ د آسانتياوو نه برخمن دي.'''
-ستاسÛ\90 Ø¯ Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87 Ø¯ Ù\88رÙ\88ستÙ\86Ù\8a Ù\8aادÚ\9aت Ù\85تÙ\86 Ø¯Ù\84تÙ\87 Ù¾Ù\87 Ø¯Û\90 ØªÙ\88Ú«ه راوړل شوی:",
+'protectedpagewarning' => "'''Ú¯واښنه: همدا مخ تړل شوی او يوازې هغه کارنان په دې مخ کې بدلونونه راوستلای شي چې د پازوالۍ د آسانتياوو نه برخمن دي.'''
+ستاسÛ\90 Ø¯ Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87 Ø¯ Ù\88رÙ\88ستÙ\86Ù\8a Ù\8aادÚ\9aت Ù\85تÙ\86 Ø¯Ù\84تÙ\87 Ù¾Ù\87 Ø¯Û\90 ØªÙ\88Ú¯ه راوړل شوی:",
 'semiprotectedpagewarning' => "'''پاملرنه:''' دا مخ تړل شوی او يواځې ثبت شوي کارنان کولای شي چې په دې مخ کې بدلونونه راولي.
-ستاسÛ\90 Ø¯ Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87 Ø¯ Ù\88رÙ\88ستÙ\86Ù\8a Ù\8aادÚ\9aت Ù\85تÙ\86 Ø¯Ù\84تÙ\87 Ù¾Ù\87 Ø¯Û\90 ØªÙ\88Ú«ه راوړل شوی:",
-'cascadeprotectedwarning' => "'''Ú«Ù\88اÚ\9aÙ\86Ù\87:''' Ù\87Ù\85دا Ù\85Ø® ØªÚ\93Ù\84 Ø´Ù\88Û\8c Ø¯Û\8c Ø§Ù\88 Ù\8aÙ\88ازÛ\90 Ù\87غÙ\87 Ú©Ø§Ø±Ù\86اÙ\86 Ù¾Ù\87 Ø¯Û\90 Ù\85Ø® Ú©Û\90 Ø¨Ø¯Ù\84Ù\88Ù\86Ù\88Ù\86Ù\87 Ø±Ø§Ù\88ستÙ\84اÛ\8c Ø´Ù\8a Ú\86Û\90 Ø¯ Ù¾Ø§Ø²Ù\88اÙ\84Û\8d Ø¯ Ø¢Ø³Ø§Ù\86تÙ\8aاÙ\88Ù\88 Ù\86Ù\87 Ø¨Ø±Ø®Ù\85Ù\86 Ø¯Ù\8aØ\8c Ø¯Ø§ Ù¾Ù\87 Ø¯Û\90 Ø®Ø§Ø·Ø± Ú\86Û\90 Ù\87Ù\85دا Ù\85Ø® Ø¯ {{PLURAL:$1|Ù\84اÙ\86دÙ\8aÙ\86Ù\8a Ù\85Ø®|Ù\84اÙ\86دÙ\8aÙ\86Ù\8aÙ\88 Ù\85Ø®Ù\88Ù\86Ù\88}} Ù¾Ù\87 Ú\81Ù\88Ú\93اÙ\88بÙ\8aزÛ\90 Ú\98غÙ\88رÙ\86Û\90 Ú©Û\90 Ù\88رګډ دی:",
-'titleprotectedwarning' => "'''Ú«Ù\88اÚ\9aÙ\86Ù\87: Ù\87Ù\85دا Ù\85Ø® ØªÚ\93Ù\84 Ø´Ù\88Û\8c Ø¯Û\8c Ø§Ù\88 Ø¯ Ø¯Û\90 Ø¯ Ø¬Ù\88Ú\93Ù\88Ù\84Ù\88 Ù\84پارÙ\87 ØªØ§Ø³Û\90 ØªÙ\87 Ø¯ [[Special:ListGroupRights|Ú\81اÙ\86Ú«ړو رښتو]] د ترلاسه کولو اړتيا ده.'''
-ستاسÛ\90 Ø¯ Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87 Ø¯ Ù\88رÙ\88ستÙ\86Ù\8a Ù\8aادÚ\9aت Ù\85تÙ\86 Ø¯Ù\84تÙ\87 Ù¾Ù\87 Ø¯Û\90 ØªÙ\88Ú«ه راوړل شوی:",
+ستاسÛ\90 Ø¯ Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87 Ø¯ Ù\88رÙ\88ستÙ\86Ù\8a Ù\8aادÚ\9aت Ù\85تÙ\86 Ø¯Ù\84تÙ\87 Ù¾Ù\87 Ø¯Û\90 ØªÙ\88Ú¯ه راوړل شوی:",
+'cascadeprotectedwarning' => "'''Ú¯Ù\88اÚ\9aÙ\86Ù\87:''' Ù\87Ù\85دا Ù\85Ø® ØªÚ\93Ù\84 Ø´Ù\88Û\8c Ø¯Û\8c Ø§Ù\88 Ù\8aÙ\88ازÛ\90 Ù\87غÙ\87 Ú©Ø§Ø±Ù\86اÙ\86 Ù¾Ù\87 Ø¯Û\90 Ù\85Ø® Ú©Û\90 Ø¨Ø¯Ù\84Ù\88Ù\86Ù\88Ù\86Ù\87 Ø±Ø§Ù\88ستÙ\84اÛ\8c Ø´Ù\8a Ú\86Û\90 Ø¯ Ù¾Ø§Ø²Ù\88اÙ\84Û\8d Ø¯ Ø¢Ø³Ø§Ù\86تÙ\8aاÙ\88Ù\88 Ù\86Ù\87 Ø¨Ø±Ø®Ù\85Ù\86 Ø¯Ù\8aØ\8c Ø¯Ø§ Ù¾Ù\87 Ø¯Û\90 Ø®Ø§Ø·Ø± Ú\86Û\90 Ù\87Ù\85دا Ù\85Ø® Ø¯ {{PLURAL:$1|Ù\84اÙ\86دÙ\8aÙ\86Ù\8a Ù\85Ø®|Ù\84اÙ\86دÙ\8aÙ\86Ù\8aÙ\88 Ù\85Ø®Ù\88Ù\86Ù\88}} Ù¾Ù\87 Ú\81Ù\88Ú\93اÙ\88بÙ\8aزÛ\90 Ú\98غÙ\88رÙ\86Û\90 Ú©Û\90 Ù\88رگډ دی:",
+'titleprotectedwarning' => "'''Ú¯Ù\88اÚ\9aÙ\86Ù\87: Ù\87Ù\85دا Ù\85Ø® ØªÚ\93Ù\84 Ø´Ù\88Û\8c Ø¯Û\8c Ø§Ù\88 Ø¯ Ø¯Û\90 Ø¯ Ø¬Ù\88Ú\93Ù\88Ù\84Ù\88 Ù\84پارÙ\87 ØªØ§Ø³Û\90 ØªÙ\87 Ø¯ [[Special:ListGroupRights|Ú\81اÙ\86Ú¯ړو رښتو]] د ترلاسه کولو اړتيا ده.'''
+ستاسÛ\90 Ø¯ Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87 Ø¯ Ù\88رÙ\88ستÙ\86Ù\8a Ù\8aادÚ\9aت Ù\85تÙ\86 Ø¯Ù\84تÙ\87 Ù¾Ù\87 Ø¯Û\90 ØªÙ\88Ú¯ه راوړل شوی:",
 'templatesused' => 'په دې مخ کارېدلې {{PLURAL:$1|کينډۍ|کينډۍ}}:',
 'templatesusedpreview' => 'يه دې مخليدنه کارېدلې {{PLURAL:$1|کينډۍ|کينډۍ}}:',
 'templatesusedsection' => 'په دې برخه کې کارېدلي {{PLURAL:$1|کينډۍ|کينډۍ}}:',
@@ -846,22 +845,22 @@ $1',
 'template-semiprotected' => '(نيم-ژغورلی)',
 'hiddencategories' => 'دا مخ د {{PLURAL:$1|1 پټې وېشنيزې|$1 پټو وېشنيزو}} يو غړی دی:',
 'nocreatetext' => '{{SITENAME}} د نوو مخونو د جوړولو وړتيا محدوده کړې.
-تاسÙ\88 Ø¨Û\90رتÙ\87 Ù¾Ø± Ø´Ø§ ØªÙ\84Ù\84اÛ\8c Ø´Û\8c Ø§Ù\88 Ù¾Ù\87 Ø´ØªÙ\87 Ù\85Ø®Ù\88Ù\86Ù\88 Ú©Û\90 Ø³Ù\85Ù\88Ù\86Û\90 ØªØ±Ø³Ø±Ù\87 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8cØ\8c Ø§Ù\88 Ù\8aا Ù\87Ù\85 [[Special:UserLogin|غÙ\88Ù\86Ú\89اÙ\84 ØªÙ\87 Ù\86Ù\86Ù\88تÙ\84اÛ\8c Ø§Ù\88 Ù\8aÙ\88 Ú«ڼون جوړولای شی]].',
+تاسÙ\88 Ø¨Û\90رتÙ\87 Ù¾Ø± Ø´Ø§ ØªÙ\84Ù\84اÛ\8c Ø´Û\8c Ø§Ù\88 Ù¾Ù\87 Ø´ØªÙ\87 Ù\85Ø®Ù\88Ù\86Ù\88 Ú©Û\90 Ø³Ù\85Ù\88Ù\86Û\90 ØªØ±Ø³Ø±Ù\87 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8cØ\8c Ø§Ù\88 Ù\8aا Ù\87Ù\85 [[Special:UserLogin|غÙ\88Ù\86Ú\89اÙ\84 ØªÙ\87 Ù\86Ù\86Ù\88تÙ\84اÛ\8c Ø§Ù\88 Ù\8aÙ\88 Ú¯ڼون جوړولای شی]].',
 'nocreate-loggedin' => 'تاسې د نوو مخونو د جوړولو پرېښله نلرۍ.',
 'sectioneditnotsupported-title' => 'د برخې د سمون ملاتړ نه کېږي',
 'sectioneditnotsupported-text' => 'په دې مخ د برخې د سمون ملاتړ نه کېږي.',
 'permissionserrors' => 'د پرېښې تېروتنه',
 'permissionserrorstext' => 'تاسې د لاندې {{PLURAL:$1|سبب|سببونو}} پخاطر د دې کړنې اجازه نه لرۍ:',
 'permissionserrorstext-withaction' => 'تاسې د $2 اجازه نه لری، دا د {{PLURAL:$1|دغه سبب|دغو سببونو}} پخاطر:',
-'recreate-moveddeleted-warn' => "'''Ú«Ù\88اÚ\9aÙ\86Ù\87: ØªØ§Ø³Û\90 Ø¯ Ù\8aÙ\88Ù\87 Ø¯Ø§Ø³Û\90 Ù\85Ø® Ø¨Ù\8aاجÙ\88Ú\93Ù\88Ù\86Ù\87 Ú©Ù\88Û\8d Ú©Ù\88Ù\85 Ú\86Û\90 Ù\8aÙ\88 Ú\81Ù\84 Ù¾Ø®Ù\88ا Ú\93Ù\86Ú« شوی وو.'''
+'recreate-moveddeleted-warn' => "'''Ú¯Ù\88اÚ\9aÙ\86Ù\87: ØªØ§Ø³Û\90 Ø¯ Ù\8aÙ\88Ù\87 Ø¯Ø§Ø³Û\90 Ù\85Ø® Ø¨Ù\8aاجÙ\88Ú\93Ù\88Ù\86Ù\87 Ú©Ù\88Û\8d Ú©Ù\88Ù\85 Ú\86Û\90 Ù\8aÙ\88 Ú\81Ù\84 Ù¾Ø®Ù\88ا Ú\93Ù\86Ú¯ شوی وو.'''
 
-پکار Ø¯Ù\87 Ú\86Û\90 ØªØ§Ø³Û\90 Ù¾Ù\87 Ø¯Û\90 Ú\81اÙ\86 Ù¾Ù\88Ù\87 Ú©Ú\93Û\8d Ú\86Û\90 Ø§Ù\8aا Ø¯Ø§ ØªØ§Ø³Û\90 ØªÙ\87 Ù\88Ú\93 Ø¯Ù\87 Ú\86Û\90 Ø¯ Ù\87Ù\85دÛ\90 Ù\85Ø® Ø¬Ù\88Ú\93Ù\88Ù\84 Ù¾Ù\87 Ù¾Ø±Ù\84Ù\87 Ù¾Ø³Û\90 ØªÙ\88Ú«ه وکړۍ.
-ستاسÛ\90 Ø¯ Ø§Ø³Ø§Ù\86تÙ\8aاÙ\88Ù\88 Ù\84پارÙ\87 Ø¯ Ù\87Ù\85دÛ\90 Ù\85Ø® Ø¯ Ú\93Ù\86Ú«ېدلو يادښت هم ورکړ شوی:",
-'moveddeleted-notice' => 'دا Ù\85Ø® Ú\93Ù\86Ú« شوی.
-دÙ\84تÙ\87 Ù\84اÙ\86دÛ\90 Ø¯ Ø¯Û\90 Ù\85Ø® Ø¯ Ú\93Ù\86Ú«Û\90دÙ\86Û\90 Ø§Ù\88 Ù\84Û\90Ú\96دÛ\90دÙ\86Û\90 Ù\8aادÚ\9aت Ø¯ Ø³Ø±Ú\86Ù\8aÙ\86Û\90 Ù¾Ù\87 ØªÙ\88Ú«ه ورکړ شوی.',
+پکار Ø¯Ù\87 Ú\86Û\90 ØªØ§Ø³Û\90 Ù¾Ù\87 Ø¯Û\90 Ú\81اÙ\86 Ù¾Ù\88Ù\87 Ú©Ú\93Û\8d Ú\86Û\90 Ø§Ù\8aا Ø¯Ø§ ØªØ§Ø³Û\90 ØªÙ\87 Ù\88Ú\93 Ø¯Ù\87 Ú\86Û\90 Ø¯ Ù\87Ù\85دÛ\90 Ù\85Ø® Ø¬Ù\88Ú\93Ù\88Ù\84 Ù¾Ù\87 Ù¾Ø±Ù\84Ù\87 Ù¾Ø³Û\90 ØªÙ\88Ú¯ه وکړۍ.
+ستاسÛ\90 Ø¯ Ø§Ø³Ø§Ù\86تÙ\8aاÙ\88Ù\88 Ù\84پارÙ\87 Ø¯ Ù\87Ù\85دÛ\90 Ù\85Ø® Ø¯ Ú\93Ù\86Ú¯ېدلو يادښت هم ورکړ شوی:",
+'moveddeleted-notice' => 'دا Ù\85Ø® Ú\93Ù\86Ú¯ شوی.
+دÙ\84تÙ\87 Ù\84اÙ\86دÛ\90 Ø¯ Ø¯Û\90 Ù\85Ø® Ø¯ Ú\93Ù\86Ú¯Û\90دÙ\86Û\90 Ø§Ù\88 Ù\84Û\90Ú\96دÛ\90دÙ\86Û\90 Ù\8aادÚ\9aت Ø¯ Ø³Ø±Ú\86Ù\8aÙ\86Û\90 Ù¾Ù\87 ØªÙ\88Ú¯ه ورکړ شوی.',
 'log-fulllog' => 'بشپړ يادښت کتل',
 'edit-gone-missing' => 'د دې مخ اوسمهالول و نه کړای شول.
-داسÛ\90 Ú\9aکارÙ\8a Ú\86Û\90 Ø¯Ø§ Ù\85Ø® Ú\93Ù\86Ú« شوی.',
+داسÛ\90 Ú\9aکارÙ\8a Ú\86Û\90 Ø¯Ø§ Ù\85Ø® Ú\93Ù\86Ú¯ شوی.',
 'edit-conflict' => 'د سمولو خنډ',
 'edit-no-change' => 'ستاسې سمون بابېزه وګڼل شو، دا ځکه چې تاسې په متن کې کوم بدلون نه دی راوستلی.',
 'postedit-confirmation' => 'ستاسې سمون خوندي شو.',
@@ -876,18 +875,18 @@ $1',
 'content-model-css' => 'CSS',
 
 # Parser/template warnings
-'post-expand-template-inclusion-warning' => "'''Ú«واښنه:''' دا کينډۍ د خپل ټاکلي بريد نه ډېره لويه ده.
\81Ù\8aÙ\86Û\90 Ú©Ù\8aÙ\86Ú\89Û\8d Ø¨Ù\87 Ù¾Ù\87 Ú©Û\90 Ú«ډې نه شي.",
+'post-expand-template-inclusion-warning' => "'''Ú¯واښنه:''' دا کينډۍ د خپل ټاکلي بريد نه ډېره لويه ده.
\81Ù\8aÙ\86Û\90 Ú©Ù\8aÙ\86Ú\89Û\8d Ø¨Ù\87 Ù¾Ù\87 Ú©Û\90 Ú¯ډې نه شي.",
 'post-expand-template-inclusion-category' => 'هغه مخونه چې په کې د کارېدلو کينډيو شمېر له ټاکلې کچې ډېر دی',
-'post-expand-template-argument-warning' => "'''Ú«واښنه:''' دا مخ لږ تر لږه د يوې کينډۍ عاملين لري چې بې حده لوی دی.
-دا Ø¹Ø§Ù\85Ù\84Ù\8aÙ\86 Ú\93Ù\86Ú« شول.",
-'post-expand-template-argument-category' => 'Ù\87غÙ\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ú\86Û\90 Ø¯ Ú©Ù\8aÙ\86Ú\89Û\8d Ú\93Ù\86Ú« شوي عاملين لري.',
+'post-expand-template-argument-warning' => "'''Ú¯واښنه:''' دا مخ لږ تر لږه د يوې کينډۍ عاملين لري چې بې حده لوی دی.
+دا Ø¹Ø§Ù\85Ù\84Ù\8aÙ\86 Ú\93Ù\86Ú¯ شول.",
+'post-expand-template-argument-category' => 'Ù\87غÙ\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ú\86Û\90 Ø¯ Ú©Ù\8aÙ\86Ú\89Û\8d Ú\93Ù\86Ú¯ شوي عاملين لري.',
 
 # "Undo" feature
-'undo-norev' => 'دا سمون ناکړ کېدلای نه شي دا ځکه چې دا سمون نشته او يا هم ړنګ شوی.',
+'undo-norev' => 'دا سمون ناکړل کېدای نه شي دا ځکه چې دا سمون نشته او يا هم ړنگ شوی.',
 
 # Account creation failure
-'cantcreateaccounttitle' => 'Ú«ڼون نه شي جوړېدای',
+'cantcreateaccounttitle' => 'Ú¯ڼون نه شي جوړېدای',
 
 # History pages
 'viewpagelogs' => 'د دې مخ يادښتونه کتل',
@@ -908,7 +907,7 @@ $1',
 لنډيز: (اوس) = د اوسنۍ بڼې سره توپير،
 (وروست) = د وروستۍ بڼې سره توپير، و = وړه سمونه.',
 'history-fieldset-title' => 'پېښليک سپړل',
-'history-show-deleted' => 'Ù\8aÙ\88اÚ\81Û\90 Ú\93Ù\86Ú« شوي',
+'history-show-deleted' => 'Ù\8aÙ\88اÚ\81Û\90 Ú\93Ù\86Ú¯ شوي',
 'histfirst' => 'تر ټولو زاړه',
 'histlast' => 'تر ټولو نوي',
 'historysize' => '({{PLURAL:$1|1 بايټ|$1 بايټونه}})',
@@ -918,7 +917,7 @@ $1',
 'history-feed-title' => 'د مخکتنو پېښليک',
 'history-feed-item-nocomment' => '$1 په $2',
 'history-feed-empty' => 'ستاسې غوښتلی مخ نه شته.
-Ú©Û\90داÛ\8c Ø´Ù\8a Ú\86Û\90 Ø¯Ø§ Ù\84Ù\87 Ù\88Ù\8aÚ©Ù\8a Ù\86Ù\87 Ú\93Ù\86Ú« شوی وي، او يا هم په بل نوم بدل شوی وي.
+Ú©Û\90داÛ\8c Ø´Ù\8a Ú\86Û\90 Ø¯Ø§ Ù\84Ù\87 Ù\88Ù\8aÚ©Ù\8a Ù\86Ù\87 Ú\93Ù\86Ú¯ شوی وي، او يا هم په بل نوم بدل شوی وي.
 تاسې په دې ويکي د اړوندو نوؤ مخونو لپاره [[Special:Search|د پلټنې هڅه وکړۍ]].',
 
 # Revision deletion
@@ -926,17 +925,17 @@ $1',
 'rev-deleted-user' => '(کارن-نوم ليري شوی)',
 'rev-delundel' => 'ښکاره کول/ پټول',
 'rev-showdeleted' => 'ښکاره کول',
-'revisiondelete' => 'د Ú\93Ù\86Ú«Ù\88Ù\84Ù\88\86اÚ\93Ù\86Ú«ولو مخکتنې',
-'revdelete-nologtype-title' => 'د Ù\8aادÚ\9aت Ú\89Ù\88Ù\84 Ù\86Ù\87 Ø¯Û\8c Ú\81اÙ\86Ú«ړی شوی',
-'revdelete-no-file' => 'Ú\81اÙ\86Ú«ړې شوې دوتنه نشته.',
+'revisiondelete' => 'د Ú\93Ù\86Ú¯Ù\88Ù\84Ù\88\86اÚ\93Ù\86Ú¯ولو مخکتنې',
+'revdelete-nologtype-title' => 'د Ù\8aادÚ\9aت Ú\89Ù\88Ù\84 Ù\86Ù\87 Ø¯Û\8c Ú\81اÙ\86Ú¯ړی شوی',
+'revdelete-no-file' => 'Ú\81اÙ\86Ú¯ړې شوې دوتنه نشته.',
 'revdelete-show-file-submit' => 'هو',
 'revdelete-selected' => "'''د [[:$1]] {{PLURAL:$2|ټاکلې بڼه|ټاکلې بڼې}}:'''",
 'revdelete-legend' => 'د ښکارېدنې محدوديتونه ټاکل',
 'revdelete-hide-text' => 'د مخکتنې متن پټول',
-'revdelete-hide-image' => 'د Ø¯Ù\88تÙ\86Û\90 Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«ه پټول',
+'revdelete-hide-image' => 'د Ø¯Ù\88تÙ\86Û\90 Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯ه پټول',
 'revdelete-hide-name' => 'کړنه او موخه پټول',
 'revdelete-hide-comment' => 'د سمون لنډيز پټول',
-'revdelete-hide-user' => 'د Ø³Ù\85Ù\88Ù\86Ú«ر کارن-نوم/آی پي پته پټول',
+'revdelete-hide-user' => 'د Ø³Ù\85Ù\88Ù\86Ú¯ر کارن-نوم/آی پي پته پټول',
 'revdelete-radio-same' => '(مه بدلوه)',
 'revdelete-radio-set' => 'هو',
 'revdelete-radio-unset' => 'نه',
@@ -945,14 +944,14 @@ $1',
 'revdel-restore-deleted' => 'ړنګې شوې بڼې',
 'revdel-restore-visible' => 'ښکاره بڼې',
 'pagehist' => 'د مخ پېښليک',
-'deletedhist' => 'د Ú\93Ù\86Ú«ولو پېښليک',
-'revdelete-reason-dropdown' => '*د Ú\93Ù\86Ú«Ù\88Ù\84Ù\88 Ù¼Ù\88Ù\84Ú«ړي سببونه
+'deletedhist' => 'د Ú\93Ù\86Ú¯ولو پېښليک',
+'revdelete-reason-dropdown' => '*د Ú\93Ù\86Ú¯Ù\88Ù\84Ù\88 Ù¼Ù\88Ù\84Ú¯ړي سببونه
 ** د خپرېدو د رښتو سرغړونه
 ** ناسم شخصي مالومات
-** Ù¾Ø§Ø±Ù\88Ù\86Ú©Ù\8a Ø§Ù\88 Ø¨Ù\84Ù\88اګر مالومات',
+** Ù¾Ø§Ø±Ù\88Ù\86Ú©Ù\8a Ø§Ù\88 Ø¨Ù\84Ù\88اگر مالومات',
 'revdelete-otherreason' => 'بل/اضافي سبب:',
 'revdelete-reasonotherlist' => 'بل سبب',
-'revdelete-edit-reasonlist' => 'د Ú\93Ù\86Ú«ولو سببونه سمول',
+'revdelete-edit-reasonlist' => 'د Ú\93Ù\86Ú¯ولو سببونه سمول',
 'revdelete-offender' => 'د مخکتنې ليکوال:',
 
 # History merging
@@ -971,6 +970,7 @@ $1',
 
 # Diffs
 'history-title' => 'د "$1" د مخليدنې پېښليک',
+'difference-title' => 'د "$1" د بڼو تر مېنځ توپير',
 'difference-multipage' => '(د مخونو تر مېنځ توپير)',
 'lineno' => '$1 کرښه:',
 'compareselectedversions' => 'ټاکلې بڼې سره پرتلل',
@@ -981,7 +981,7 @@ $1',
 # Search results
 'searchresults' => 'د پلټنې پايلې',
 'searchresults-title' => 'د "$1" د پلټنې پايلې',
-'searchresulttext' => 'Ù¾Ù\87 {{SITENAME}} Ú©Û\90 Ø¯ Ù\84Ù¼Ù\88Ù\86 Ø¯ Ù\86Ù\88رÙ\88 Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87Ø\8c [[{{MediaWiki:Helppage}}|{{int:Ù\84ارÚ\9aÙ\88د}}]] Ù\88Ú«ورۍ.',
+'searchresulttext' => 'Ù¾Ù\87 {{SITENAME}} Ú©Û\90 Ø¯ Ù\84Ù¼Ù\88Ù\86 Ø¯ Ù\86Ù\88رÙ\88 Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87Ø\8c [[{{MediaWiki:Helppage}}|{{int:Ù\84ارÚ\9aÙ\88د}}]] Ù\88Ú¯ورۍ.',
 'searchsubtitle' => 'تاسې د \'\'\'[[:$1]]\'\'\' لپاره پلټنه کړې ([[Special:Prefixindex/$1|ټول هغه مخونه چې په "$1" پېلېږي]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|ټول هغه مخونه چې "$1" سره تړنې لري]])',
 'searchsubtitleinvalid' => "تاسې د '''$1''' لټون کړی",
 'titlematches' => 'د مخ سرليک ورسره ورته دی',
@@ -997,15 +997,15 @@ $1',
 'searchmenu-legend' => 'د پلټلو خوښنې',
 'searchmenu-exists' => "'''په دې ويکي يو مخ د \"[[:\$1]]\" په نامه دی'''",
 'searchmenu-new' => "'''په دې ويکي د \"[[:\$1]]\" مخ جوړول!'''",
-'searchprofile-articles' => 'Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«يز مخونه',
+'searchprofile-articles' => 'Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯يز مخونه',
 'searchprofile-project' => 'د لارښود او پروژې مخونه',
-'searchprofile-images' => 'Ú«ڼرسنۍ',
+'searchprofile-images' => 'Ú¯ڼرسنۍ',
 'searchprofile-everything' => 'هرڅه',
 'searchprofile-advanced' => 'پرمختللی',
 'searchprofile-articles-tooltip' => 'په $1 کې پلټل',
 'searchprofile-project-tooltip' => 'په $1 کې پلټل',
 'searchprofile-images-tooltip' => 'د دوتنو پلټنه',
-'searchprofile-everything-tooltip' => 'د Ù¼Ù\88Ù\84Û\90 Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«ې پلټنه (د خبرو اترو مخونو سره)',
+'searchprofile-everything-tooltip' => 'د Ù¼Ù\88Ù\84Û\90 Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯ې پلټنه (د خبرو اترو مخونو سره)',
 '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 دوتنې}})',
@@ -1023,13 +1023,13 @@ $1',
 'searchall' => 'ټول',
 'showingresults' => "دلته لاندې تر {{PLURAL:$1|'''1''' پايله|'''$1''' پايلې}} ښکاره شوي پيل له #'''$2''' شوی.",
 'showingresultsheader' => "د «'''$4'''» لپاره {{PLURAL:$5|له '''$1''' نه تر '''$3''' پايله|له '''$1 نه تر $2''' پايلې، ټولې پايلې '''$3''' }}",
-'nonefound' => "'''Ù\8aادÚ\9aت''': Ù\8aÙ\88ازÛ\90 Ù\8aÙ\88 Ú\85Ù\88 Ù\86Ù\88Ù\85-تشÙ\8aاÙ\84Ù\88Ù\86Ù\88 Ù¾Ù\87 ØªÙ\84Ù\88اÙ\84Ù\8aزÙ\87 ØªÙ\88Ú«ه پلټل کېږي.
-د ''Ù¼Ù\88Ù\84:'' Ù\85ختاÚ\93Ù\8a Ù¾Ù\87 Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ø³Ø±Ù\87 Ø¨Ù\87 Ø³ØªØ§Ø³Û\90 Ø¯ Ù¾Ù\84Ù¼Ù\86Û\90 Ù\84پارÙ\87Ø\8c Ù¾Ù\87 Ù¼Ù\88Ù\84Ù\87 Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«Ù\87 Ú©Û\90 Ù¾Ù\84Ù¼Ù\86Ù\87 Ù\88Ø´Ù\8a (د Ø®Ø¨Ø±Ù\88اترÙ\88Ø\8c Ú©Ù\8aÙ\86Ú\89Û\8d Ø§Ù\88 Ù\86Ù\88رÙ\88 Ù\85Ø®Ù\88Ù\86Ù\88 Ù¾Ù\87 Ú«Ú\89Ù\88Ù\86), Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ Ø®Ù¾Ù\84Û\90 Ø®Ù\88Ú\9aÛ\90 Ù\86Ù\88Ù\85-تشÙ\8aاÙ\84 Ø¯ Ù\85ختاÚ\93Ù\8a Ù¾Ù\87 ØªÙ\88Ú«ه وکاروۍ.",
+'nonefound' => "'''Ù\8aادÚ\9aت''': Ù\8aÙ\88ازÛ\90 Ù\8aÙ\88 Ú\85Ù\88 Ù\86Ù\88Ù\85-تشÙ\8aاÙ\84Ù\88Ù\86Ù\88 Ù¾Ù\87 ØªÙ\84Ù\88اÙ\84Ù\8aزÙ\87 ØªÙ\88Ú¯ه پلټل کېږي.
+د ''Ù¼Ù\88Ù\84:'' Ù\85ختاÚ\93Ù\8a Ù¾Ù\87 Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ø³Ø±Ù\87 Ø¨Ù\87 Ø³ØªØ§Ø³Û\90 Ø¯ Ù¾Ù\84Ù¼Ù\86Û\90 Ù\84پارÙ\87Ø\8c Ù¾Ù\87 Ù¼Ù\88Ù\84Ù\87 Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯Ù\87 Ú©Û\90 Ù¾Ù\84Ù¼Ù\86Ù\87 Ù\88Ø´Ù\8a (د Ø®Ø¨Ø±Ù\88اترÙ\88Ø\8c Ú©Ù\8aÙ\86Ú\89Û\8d Ø§Ù\88 Ù\86Ù\88رÙ\88 Ù\85Ø®Ù\88Ù\86Ù\88 Ù¾Ù\87 Ú¯Ú\89Ù\88Ù\86), Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ Ø®Ù¾Ù\84Û\90 Ø®Ù\88Ú\9aÛ\90 Ù\86Ù\88Ù\85-تشÙ\8aاÙ\84 Ø¯ Ù\85ختاÚ\93Ù\8a Ù¾Ù\87 ØªÙ\88Ú¯ه وکاروۍ.",
 'search-nonefound' => 'ستاسې دغوښتنې اړونده پايلې و نه موندل شوې.',
 'powersearch' => 'ژوره پلټنه',
 'powersearch-legend' => 'ژوره پلټنه',
 'powersearch-ns' => 'په نوم-تشيالونو کې پلټنه:',
-'powersearch-redir' => 'Ù\85Ø® Ú«رځونې په لړليک کې اوډل',
+'powersearch-redir' => 'Ù\85Ø® Ú¯رځونې په لړليک کې اوډل',
 'powersearch-field' => 'پلټنه د',
 'powersearch-togglelabel' => 'نښه کول:',
 'powersearch-toggleall' => 'ټول',
@@ -1046,9 +1046,9 @@ $1',
 'prefs-skin' => 'پوښۍ',
 'skin-preview' => 'مخکتنه',
 'datedefault' => 'هېڅ نه ټاکل',
-'prefs-beta' => 'د Ø¢Ø²Ù\85Û\90Ú\9aتÙ\8a Ø¨Ú¼Û\90 Ú\81اÙ\86Ú«ړنې',
+'prefs-beta' => 'د Ø¢Ø²Ù\85Û\90Ú\9aتÙ\8a Ø¨Ú¼Û\90 Ú\81اÙ\86Ú¯ړنې',
 'prefs-datetime' => 'نېټه او وخت',
-'prefs-labs' => 'د آزمېنتون ځانګړنې',
+'prefs-labs' => 'د آزمېښتون ځانگړنې',
 'prefs-user-pages' => 'کارن مخونه',
 'prefs-personal' => 'د کارن پېژنليک',
 'prefs-rc' => 'وروستي بدلونونه',
@@ -1079,9 +1079,9 @@ $1',
 'timezonelegend' => 'د وخت سيمه:',
 'localtime' => 'سيمه ايز وخت:',
 'timezoneuseserverdefault' => 'د ويکي تلواليزه بڼه کارول ($1)',
-'timezoneuseoffset' => 'بÙ\84 (تÙ\88Ù¾Ù\8aر Ú\81اÙ\86Ú«ړی کړی)',
+'timezoneuseoffset' => 'بÙ\84 (تÙ\88Ù¾Ù\8aر Ú\81اÙ\86Ú¯ړی کړی)',
 'timezoneoffset' => 'توپير¹:',
-'servertime' => 'د Ù¾Ø§Ù\84Ù\86Ú«ر وخت:',
+'servertime' => 'د Ù¾Ø§Ù\84Ù\86Ú¯ر وخت:',
 'guesstimezone' => 'له کتنمل نه ډکول',
 'timezoneregion-africa' => 'افريقا',
 'timezoneregion-america' => 'امريکا',
@@ -1114,22 +1114,22 @@ $1',
 'badsiglength' => 'ستاسو لاسليک ډېر اوږد دی.
 بايد چې لاسليک مو له $1 {{PLURAL:$1|توري|تورو}} نه لږ وي.',
 'yourgender' => 'جنس:',
-'gender-unknown' => 'Ù\86اÚ\85رګنده',
+'gender-unknown' => 'Ù\86اÚ\85رگنده',
 'gender-male' => 'نارينه',
-'gender-female' => 'ښځه',
+'gender-female' => 'Ú\9aÚ\81Ù\8aÙ\86Ù\87',
 'email' => 'برېښليک',
 'prefs-help-realname' => 'د آر نوم ليکل ستاسې په خوښه دی خو که تاسې خپل آر نوم وټاکۍ پدې سره به ستاسې ټول کارونه او ونډې ستاسې د نوم په اړوندولو کې وکارېږي.',
 'prefs-help-email' => 'د برېښليک ورکړه ستاسې په خوښه ده، خو په ورکړې سره به يې د يوه نوي پټنوم د لېږلو چار آسانه کړي هغه هم کله چې تاسې نه خپل پټنوم هېر شوی وي.',
-'prefs-help-email-others' => 'تاسې دا هم کولای شی چې وټاکۍ چې نور کارنان ستاسې د خبرو اترو او يا کارن مخ د يوې تړنې له لارې تاسې سره برېښليکي اړيکه ونيسي.
-د Ø§Ú\93Ù\8aÚ©Ù\88 Ù¼Ù\8aÙ\86Ú«ولو په وخت کې به ستاسې برېښليک پته نورو کارنانو ته نه ښکاري.',
+'prefs-help-email-others' => 'تاسې دا هم ټاکلی شی چې نور کارنان ستاسې د خبرو اترو او يا د کارن مخ يوې تړنې له لارې له تاسې سره برېښليکي اړيکه ونيسي.
+د Ø§Ú\93Ù\8aÚ©Ù\88 Ù¼Ù\8aÙ\86Ú¯ولو په وخت کې به ستاسې برېښليک پته نورو کارنانو ته نه ښکاري.',
 'prefs-help-email-required' => 'ستاسو د برېښليک پته پکار ده.',
 'prefs-info' => 'بنسټيز مالومات',
 'prefs-i18n' => 'نړېوالتوب',
 'prefs-signature' => 'لاسليک',
 'prefs-dateformat' => 'د نېټې بڼه',
 'prefs-timeoffset' => 'د وخت واټن',
-'prefs-advancedediting' => 'Ù¼Ù\88Ù\84Ú«ړی',
-'prefs-editor' => 'سÙ\85Ù\88Ù\86Ú«ر',
+'prefs-advancedediting' => 'Ù¼Ù\88Ù\84Ú¯ړی',
+'prefs-editor' => 'سÙ\85Ù\88Ù\86Ú¯ر',
 'prefs-preview' => 'مخليدنه',
 'prefs-advancedrc' => 'پرمختللې خوښنې',
 'prefs-advancedrendering' => 'پرمختللې خوښنې',
@@ -1198,14 +1198,14 @@ $1',
 'right-upload' => 'دوتنې پورته کول',
 'right-upload_by_url' => 'د يو URL نه دوتنې پورته کول',
 'right-writeapi' => 'د API کښنې کارېدنه',
-'right-delete' => 'Ù\85Ø®Ù\88Ù\86Ù\87 Ú\93Ù\86Ú«ول',
-'right-bigdelete' => 'د Ø§Ù\88Ú\96دÙ\88 Ù¾Û\90Ú\9aÙ\84Ù\8aÚ©Ù\88Ù\86Ù\88 Ù\85Ø®Ù\88Ù\86Ù\87 Ú\93Ù\86Ú«ول',
-'right-browsearchive' => 'Ú\93Ù\86Ú« شوي مخونه پلټل',
+'right-delete' => 'Ù\85Ø®Ù\88Ù\86Ù\87 Ú\93Ù\86Ú¯ول',
+'right-bigdelete' => 'د Ø§Ù\88Ú\96دÙ\88 Ù¾Û\90Ú\9aÙ\84Ù\8aÚ©Ù\88Ù\86Ù\88 Ù\85Ø®Ù\88Ù\86Ù\87 Ú\93Ù\86Ú¯ول',
+'right-browsearchive' => 'Ú\93Ù\86Ú¯ شوي مخونه پلټل',
 'right-undelete' => 'يو مخ ناړنګول',
 'right-suppressionlog' => 'شخصي يادښتونه کتل',
-'right-block' => 'پر Ù\86Ù\88رÙ\88 Ú©Ø§Ø±Ù\86اÙ\86Ù\88 Ø¯ Ø³Ù\85Ù\88Ù\86 Ø¯ Ø¢Ø³Ø§Ù\86تÙ\8aاÙ\88ؤ Ø¨Ù\86دÙ\8aز Ù\84Ú«ول',
-'right-blockemail' => 'پر Ù\8aÙ\88Ù\87 Ú©Ø§Ø±Ù\86 Ø¯ Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù\84Û\90Ú\96Ù\84Ù\88 Ø¨Ù\86دÙ\8aز Ù\84Ú«ول',
-'right-hideuser' => 'پر Ù\8aÙ\88Ù\87 Ú©Ø§Ø±Ù\86\86Ù\88Ù\85 Ø¨Ù\86دÙ\8aز Ù\84Ú«ول او له خلکو نه يې پټول',
+'right-block' => 'پر Ù\86Ù\88رÙ\88 Ú©Ø§Ø±Ù\86اÙ\86Ù\88 Ø¯ Ø³Ù\85Ù\88Ù\86 Ø¯ Ø¢Ø³Ø§Ù\86تÙ\8aاÙ\88ؤ Ø¨Ù\86دÙ\8aز Ù\84Ú¯ول',
+'right-blockemail' => 'پر Ù\8aÙ\88Ù\87 Ú©Ø§Ø±Ù\86 Ø¯ Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù\84Û\90Ú\96Ù\84Ù\88 Ø¨Ù\86دÙ\8aز Ù\84Ú¯ول',
+'right-hideuser' => 'پر Ù\8aÙ\88Ù\87 Ú©Ø§Ø±Ù\86\86Ù\88Ù\85 Ø¨Ù\86دÙ\8aز Ù\84Ú¯ول او له خلکو نه يې پټول',
 'right-protect' => 'د ژغورنې کچه بدلول او ژغورلي مخونه سمول',
 'right-editinterface' => 'د کارن ليدنمخ سمول',
 'right-editusercssjs' => 'د نورو کارنانو د CSS او JS (جاوا سکرېپټ) دوتنې سمول',
@@ -1213,7 +1213,7 @@ $1',
 'right-edituserjs' => 'د نورو کارنانو د JS (جاوا سکرېپټ) دوتنې سمول',
 'right-unwatchedpages' => 'د ناکتلو مخونو يو لړليک کتل',
 'right-userrights' => 'د کارن ټولې رښتې سمول',
-'right-userrights-interwiki' => 'Ù¾Ù\87 Ù\86Ù\88رÙ\88 Ù\88Ù\8aÚ©Ù\8a Ú«انو د نورو کارنانو  کارن-رښتې سمول',
+'right-userrights-interwiki' => 'Ù¾Ù\87 Ù\86Ù\88رÙ\88 Ù\88Ù\8aÚ©Ù\8a Ú¯انو د نورو کارنانو  کارن-رښتې سمول',
 'right-sendemail' => 'نورو کارنانو ته برېښليک لېږل',
 
 # Special:Log/newusers
@@ -1229,25 +1229,25 @@ $1',
 'action-edit' => 'دا مخ سمول',
 'action-createpage' => 'مخونه جوړول',
 'action-createtalk' => 'د خبرو اترو مخونه جوړول',
-'action-createaccount' => 'دا Ú«ڼون جوړول',
+'action-createaccount' => 'دا Ú¯ڼون جوړول',
 'action-minoredit' => 'دا سمون وړوکی په نخښه کول',
 'action-move' => 'همدا مخ لېږدول',
 'action-movefile' => 'همدا دوتنه لېږدول',
 'action-upload' => 'همدا دوتنه پورته کول',
 'action-upload_by_url' => 'دا دوتنه له يوه URL نه پورته کول',
 'action-writeapi' => 'د API کښنه کارول',
-'action-delete' => 'Ù\87Ù\85دا Ù\85Ø® Ú\93Ù\86Ú«ول',
-'action-deleterevision' => 'دا Ù\85خکتÙ\86Ù\87 Ú\93Ù\86Ú«ول',
-'action-deletedhistory' => 'د Ø¯Û\90 Ù\85Ø® Ú\93Ù\86Ú« شوی پېښليک کتل',
-'action-browsearchive' => 'Ú\93Ù\86Ú« مخونه پلټل',
+'action-delete' => 'Ù\87Ù\85دا Ù\85Ø® Ú\93Ù\86Ú¯ول',
+'action-deleterevision' => 'دا Ù\85خکتÙ\86Ù\87 Ú\93Ù\86Ú¯ول',
+'action-deletedhistory' => 'د Ø¯Û\90 Ù\85Ø® Ú\93Ù\86Ú¯ شوی پېښليک کتل',
+'action-browsearchive' => 'Ú\93Ù\86Ú¯ مخونه پلټل',
 'action-undelete' => 'همدا مخ ناړنګول',
 'action-suppressionlog' => 'دا شخصي يادښت کتل',
-'action-block' => 'پر Ø¯Û\90 Ú©Ø§Ø±Ù\86 Ø¯ Ø³Ù\85Ù\88Ù\86 Ø¯ Ø¢Ø³Ø§Ù\86تÙ\8aاÙ\88ؤ Ø¨Ù\86دÙ\8aز Ù\84Ú«ول',
+'action-block' => 'پر Ø¯Û\90 Ú©Ø§Ø±Ù\86 Ø¯ Ø³Ù\85Ù\88Ù\86 Ø¯ Ø¢Ø³Ø§Ù\86تÙ\8aاÙ\88ؤ Ø¨Ù\86دÙ\8aز Ù\84Ú¯ول',
 'action-protect' => 'د دې مخ د ژغورنې کچه بدلول',
 'action-unwatchedpages' => 'د ناکتلو مخونو لړليک کتل',
 'action-mergehistory' => 'د دې مخ پېښليک سره اخږل',
 'action-userrights' => 'د کارن ټولې رښتې سمول',
-'action-userrights-interwiki' => 'Ù¾Ù\87 Ù\86Ù\88رÙ\88 Ù\88Ù\8aÚ©Ù\8a Ú«انو د کارنانو رښتې سمول',
+'action-userrights-interwiki' => 'Ù¾Ù\87 Ù\86Ù\88رÙ\88 Ù\88Ù\8aÚ©Ù\8a Ú¯انو د کارنانو رښتې سمول',
 'action-siteadmin' => 'توکبنسټ کولپول يا نه کولپول',
 'action-sendemail' => 'برېښليکونه لېږل',
 
@@ -1256,7 +1256,7 @@ $1',
 'recentchanges' => 'وروستي بدلونونه',
 'recentchanges-legend' => 'د ورستي بدلونو خوښنې',
 'recentchanges-summary' => 'په دې مخ د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ.',
-'recentchanges-feed-description' => 'Ù\87Ù\85دÙ\84تÙ\87 Ø¯ Ù\88Ù\8aÚ©Ù\8a ØªØ±Ù¼Ù\88Ù\84Ù\88 ØªØ§Ø²Ù\87 Ù\88رÙ\88ستÙ\8a Ø¨Ø¯Ù\84Ù\88Ù\86Ù\88Ù\86Ù\87 Ù\88Ú\85ارÛ\8d Ø§Ù\88 Ù\88Ú«ورۍ چې څه پېښ شوي.',
+'recentchanges-feed-description' => 'Ù\87Ù\85دÙ\84تÙ\87 Ø¯ Ù\88Ù\8aÚ©Ù\8a ØªØ±Ù¼Ù\88Ù\84Ù\88 ØªØ§Ø²Ù\87 Ù\88رÙ\88ستÙ\8a Ø¨Ø¯Ù\84Ù\88Ù\86Ù\88Ù\86Ù\87 Ù\88Ú\85ارÛ\8d Ø§Ù\88 Ù\88Ú¯ورۍ چې څه پېښ شوي.',
 'recentchanges-label-newpage' => 'دغه سمون يو نوی مخ جوړ کړی',
 'recentchanges-label-minor' => 'دا يوه وړه سمونه ده',
 'recentchanges-label-bot' => 'دغه سمون د يو روباټ لخوا ترسره شوی',
@@ -1282,16 +1282,16 @@ $1',
 'rc_categories_any' => 'هر يو',
 'rc-change-size-new' => '$1 {{PLURAL:$1|بايټ|بايټونه}} د بدلون وروسته',
 'newsectionsummary' => '/* $1 */ نوې برخه',
-'rc-enhanced-expand' => 'تفصيل ښکاره کول (د دې لپاره د JavaScript اړتيا ده)',
+'rc-enhanced-expand' => 'تفصيل ښکاره کول',
 'rc-enhanced-hide' => 'تفصيل پټول',
-'rc-old-title' => 'اصÙ\84اÙ\8b Ø¯ "$1" Ù¾Ù\87 ØªÙ\88Ú«ه جوړ شو',
+'rc-old-title' => 'اصÙ\84اÙ\8b Ø¯ "$1" Ù¾Ù\87 ØªÙ\88Ú¯ه جوړ شو',
 
 # Recent changes linked
 'recentchangeslinked' => 'اړونده بدلونونه',
 'recentchangeslinked-feed' => 'اړونده بدلونونه',
 'recentchangeslinked-toolbox' => 'اړونده بدلونونه',
 'recentchangeslinked-title' => '"$1" ته اړونده بدلونونه',
-'recentchangeslinked-summary' => "دا Ø¯ Ù\87غÙ\87 Ø¨Ø¯Ù\84Ù\88Ù\86Ù\88Ù\86Ù\88 Ù\84Ú\93Ù\84Ù\8aÚ© Ø¯Û\8c Ú\86Û\90 Ù\88رÙ\88ستÛ\8d Ú\81Ù\84 Ù¾Ù\87 ØªÚ\93Ù\86 Ù\84رÙ\88Ù\86Ú©Ù\8aÙ\88 Ù\85Ø®Ù\88Ù\86Ù\88 Ú©Û\90 Ø¯ Ù\8aÙ\88Ù\87 Ú\81اÙ\86Ú«Ú\93Ù\8a Ù\85Ø® (اÙ\88 Ù\8aا Ù\87Ù\85 Ø¯ Ù\8aÙ\88Û\90 Ú\81اÙ\86Ú«ړې وېشنيزې غړو) نه رامېنځ ته شوي.
+'recentchangeslinked-summary' => "دا Ø¯ Ù\87غÙ\87 Ø¨Ø¯Ù\84Ù\88Ù\86Ù\88Ù\86Ù\88 Ù\84Ú\93Ù\84Ù\8aÚ© Ø¯Û\8c Ú\86Û\90 Ù\88رÙ\88ستÛ\8d Ú\81Ù\84 Ù¾Ù\87 ØªÚ\93Ù\86 Ù\84رÙ\88Ù\86Ú©Ù\8aÙ\88 Ù\85Ø®Ù\88Ù\86Ù\88 Ú©Û\90 Ø¯ Ù\8aÙ\88Ù\87 Ú\81اÙ\86Ú¯Ú\93Ù\8a Ù\85Ø® (اÙ\88 Ù\8aا Ù\87Ù\85 Ø¯ Ù\8aÙ\88Û\90 Ú\81اÙ\86Ú¯ړې وېشنيزې غړو) نه رامېنځ ته شوي.
 [[Special:Watchlist|ستاسې د کتنلړ]] مخونه په '''زغرد ليک''' کې ښکاري.",
 'recentchangeslinked-page' => 'د مخ نوم:',
 'recentchangeslinked-to' => 'د ورکړل شوي مخ پر ځای د اړونده تړلي مخونو بدلونونه ښکاره کول',
@@ -1299,17 +1299,17 @@ $1',
 # Upload
 'upload' => 'دوتنه پورته کول',
 'uploadbtn' => 'دوتنه پورته کول',
-'reuploaddesc' => 'Ù¾Ù\88رتÙ\87 Ú©Û\90دÙ\86Ù\87 Ù\86اګارÙ\84 Ø§Ù\88 Ø¨Û\90رتÙ\87 Ø¯ Ù¾Ù\88رتÙ\87 Ú©Û\90دÙ\86Û\90 Ù\81Ù\88رÙ\85Û\90 ØªÙ\87 Ù\88رګرځېدل',
-'upload-tryagain' => 'د Ø¨Ø¯Ù\84Ù\88Ù\86 Ù\85Ù\88Ù\86دÙ\84Û\90 Ø¯Ù\88تÙ\86Û\90 Ú\85رګندونې سپارل',
+'reuploaddesc' => 'Ù¾Ù\88رتÙ\87 Ú©Û\90دÙ\86Ù\87 Ù\86اگارÙ\84 Ø§Ù\88 Ø¨Û\90رتÙ\87 Ø¯ Ù¾Ù\88رتÙ\87 Ú©Û\90دÙ\86Û\90 Ù\81Ù\88رÙ\85Û\90 ØªÙ\87 Ù\88رگرځېدل',
+'upload-tryagain' => 'د Ø¨Ø¯Ù\84Ù\88Ù\86 Ù\85Ù\88Ù\86دÙ\84Û\90 Ø¯Ù\88تÙ\86Û\90 Ú\85رگندونې سپارل',
 'uploadnologin' => 'غونډال کې نه ياست ننوتي',
 'uploadnologintext' => 'د دوتنې پورته کولو لپاره بايد $1',
 'uploaderror' => 'د پورته کولو ستونزه',
 'uploadtext' => "د دوتنې د پورته کېدو لپاره لاندينی چوکاټ وکاروۍ.
-Ú©Ù\87 Ú\86Û\90رتÙ\87 Ø¯ Ù¾Ø®Ù\88Ù\86Ù\8aÙ\88 Ù¾Ù\88رتÙ\87 Ø´Ù\88Ù\8aÙ\88 Ø¯Ù\88تÙ\86Ù\88 Ú©ØªÙ\84 Ø§Ù\88 Ù¾Ù\84Ù¼Ù\84 ØºÙ\88اÚ\93Û\8d Ù\86Ù\88 [[Special:FileList|د Ù¾Ù\88رتÙ\87 Ø´Ù\88Ù\8aÙ\88 Ø¯Ù\88تÙ\86Ù\88 Ù\84Ú\93Ù\84Ù\8aÚ©]] ØªÙ\87 Ù\88رشÛ\8dØ\8c [[Special:Log/upload|د (بÙ\8aا) Ù¾Ù\88رتÙ\87 Ø´Ù\88Ù\8aÙ\88 Ø¯Ù\88تÙ\86Ù\88 Ù\8aادÚ\9aتÙ\88Ù\86Ù\87]] Ø§Ù\88 [[Special:Log/delete|د Ú\93Ù\86Ú«ېدو يادښتونه]] هم کتلای شی.
+Ú©Ù\87 Ú\86Û\90رتÙ\87 Ø¯ Ù¾Ø®Ù\88Ù\86Ù\8aÙ\88 Ù¾Ù\88رتÙ\87 Ø´Ù\88Ù\8aÙ\88 Ø¯Ù\88تÙ\86Ù\88 Ú©ØªÙ\84 Ø§Ù\88 Ù¾Ù\84Ù¼Ù\84 ØºÙ\88اÚ\93Û\8d Ù\86Ù\88 [[Special:FileList|د Ù¾Ù\88رتÙ\87 Ø´Ù\88Ù\8aÙ\88 Ø¯Ù\88تÙ\86Ù\88 Ù\84Ú\93Ù\84Ù\8aÚ©]] ØªÙ\87 Ù\88رشÛ\8dØ\8c [[Special:Log/upload|د (بÙ\8aا) Ù¾Ù\88رتÙ\87 Ø´Ù\88Ù\8aÙ\88 Ø¯Ù\88تÙ\86Ù\88 Ù\8aادÚ\9aتÙ\88Ù\86Ù\87]] Ø§Ù\88 [[Special:Log/delete|د Ú\93Ù\86Ú¯ېدو يادښتونه]] هم کتلای شی.
 
 ددې لپاره چې يوه مخ ته انځور ورواچوی، نو بيا پدې ډول تړنې (لېنک) وکاروی
 * د يوې دوتنې د بشپړې بڼې د کارولو په موخه د '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' کوډ وکاروۍ.
-* Ø¯ 'Û²Û°Û° Ù¾Û\90کسÙ\84' Ù¾Ù\87 Ú©Ú\86Ù\87 Ø¯ 'بټÙ\86Ù\88Ú©' Ù¾Ù\87 ØªÙ\88Ú«Ù\87 Ø¯ Ù\8aÙ\88Û\90 Ø¯Ù\88تÙ\86Û\90 Ú©Ø§Ø±Ù\88Ù\84 Ú\86Û\90 Ø¯ Ù\85Ø® Ú©Ù\8aÚ¼Û\90 Ú\85Ù\86Ú\89Û\90 Ú©Û\90 Ø§Ù\88 ØªØ±Ù\84اÙ\86دÛ\90 'د Ø§Ù\86Ú\81Ù\88ر Ú\85رګÙ\86دÙ\88Ù\86Û\90' Ù\88Ù\84رÙ\8aØ\8c Ù\86Ù\88 Ø¯ Ø¯Û\90 Ù\85Ù\88Ø®Û\90 Ù\84پارÙ\87 Ø¯ '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|بټÙ\86Ù\88Ú©|Ú©Ù\8aÚ¼|د Ø§Ù\86Ú\81Ù\88ر Ú\85رګندونې]]</nowiki></code>''' کوډ وکاروۍ.
+* Ø¯ 'Û²Û°Û° Ù¾Û\90کسÙ\84' Ù¾Ù\87 Ú©Ú\86Ù\87 Ø¯ 'بټÙ\86Ù\88Ú©' Ù¾Ù\87 ØªÙ\88Ú¯Ù\87 Ø¯ Ù\8aÙ\88Û\90 Ø¯Ù\88تÙ\86Û\90 Ú©Ø§Ø±Ù\88Ù\84 Ú\86Û\90 Ø¯ Ù\85Ø® Ú©Ù\8aÚ¼Û\90 Ú\85Ù\86Ú\89Û\90 Ú©Û\90 Ø§Ù\88 ØªØ±Ù\84اÙ\86دÛ\90 'د Ø§Ù\86Ú\81Ù\88ر Ú\85رگÙ\86دÙ\88Ù\86Û\90' Ù\88Ù\84رÙ\8aØ\8c Ù\86Ù\88 Ø¯ Ø¯Û\90 Ù\85Ù\88Ø®Û\90 Ù\84پارÙ\87 Ø¯ '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|بټÙ\86Ù\88Ú©|Ú©Ù\8aÚ¼|د Ø§Ù\86Ú\81Ù\88ر Ú\85رگندونې]]</nowiki></code>''' کوډ وکاروۍ.
 * د انځور د ښودلو نه پرته، د دوتنې سره د سيخې تړنې لپاره د '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' کوډ وکاروۍ.",
 'upload-permitted' => 'د پرېښودلو دوتنو ډولونه: $1.',
 'upload-preferred' => 'د غوره دوتنو ډولونه: $1.',
@@ -1324,10 +1324,10 @@ $1',
 'filestatus' => 'د رښتو دريځ:',
 'filesource' => 'سرچينه:',
 'uploadedfiles' => 'پورته شوې دوتنې',
-'ignorewarning' => 'Ú«Ù\88اÚ\9aÙ\86Ù\87 Ø¨Û\90 Ù¾Ø§Ù\85Ù\87 Ú«ڼل او دوتنه خوندي کول',
+'ignorewarning' => 'Ú¯Ù\88اÚ\9aÙ\86Ù\87 Ø¨Û\90 Ù¾Ø§Ù\85Ù\87 Ú¯ڼل او دوتنه خوندي کول',
 'ignorewarnings' => 'هر ډول ګواښونه له پامه غورځول',
 'minlength1' => 'پکار ده چې د دوتنو نومونه لږ تر لږه يو حرف ولري.',
-'illegalfilename' => 'د Ø¯Ù\88تÙ\86Û\90 Ù\86Ù\88Ù\85 "$1" Ù¾Ù\87 Ø¯Ø§Ø³Û\90 ØªÙ\88رÙ\88 Ù\84Ù\8aÚ©Ù\84Û\8c Ø¯Û\8c Ú\86Û\90 Ø¯ Û\8cÙ\88 Ù\85Ø® Ø¯ Ø³Ø±Ù\84Ù\8aÚ© Ù¾Ù\87 ØªÙ\88Ú«ه يې پرېښه نه ده شوې.
+'illegalfilename' => 'د Ø¯Ù\88تÙ\86Û\90 Ù\86Ù\88Ù\85 "$1" Ù¾Ù\87 Ø¯Ø§Ø³Û\90 ØªÙ\88رÙ\88 Ù\84Ù\8aÚ©Ù\84Û\8c Ø¯Û\8c Ú\86Û\90 Ø¯ Û\8cÙ\88 Ù\85Ø® Ø¯ Ø³Ø±Ù\84Ù\8aÚ© Ù¾Ù\87 ØªÙ\88Ú¯ه يې پرېښه نه ده شوې.
 مهرباني وکړۍ د دوتنې نوم مو بدل کړۍ او بيا مو د دوتنې د پورته کولو هڅه وکړۍ.',
 'badfilename' => 'ددغې دوتنې نوم "$1" ته واوړېده.',
 'filetype-badmime' => 'د MIME بڼې "$1" د دوتنو د پورته کولو اجازه نشته.',
@@ -1338,8 +1338,8 @@ $1',
 'illegal-filename' => 'د دوتنې نوم نه دی پرېښل شوی.',
 'unknown-error' => 'يوه ناڅرګنده تېروتنه رامېنځته شوه.',
 'tmp-create-error' => 'لنډمهاله دوتنه جوړېدای نه شي',
-'fileexists' => 'د Ù¾Ø®Ù\88ا Ù\86Ù\87 Ù¾Ø¯Û\90 Ù\86Ù\88Ù\85 Ù\8aÙ\88Ù\87 Ø¯Ù\88تÙ\86Ù\87 Ø´ØªÙ\87Ø\8c Ú©Ù\87 ØªØ§Ø³Ù\88 Ú\89اÚ\89Ù\87 Ù\86Ù\87 Ù\8aاست Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ú©Ù\87 ØªØ§Ø³Ù\88 ØºÙ\88اÚ\93Û\8d Ú\86Û\90 Ø¨Ø¯Ù\84Ù\88Ù\86 Ù¾Ú©Û\90 Ø±Ø§Ù\88Ù\84Û\8dØ\8c Ù\84Ø·Ù\81اÙ\8b <strong>[[:$1]]</strong> Ù\88Ú«ورۍ.
-[[$1|thumb]]',
+'fileexists' => 'د Ù¾Ø®Ù\88ا Ù\86Ù\87 Ù¾Ø¯Û\90 Ù\86Ù\88Ù\85 Ù\8aÙ\88Ù\87 Ø¯Ù\88تÙ\86Ù\87 Ø´ØªÙ\87Ø\8c Ú©Ù\87 ØªØ§Ø³Ù\88 Ú\89اÚ\89Ù\87 Ù\86Ù\87 Ù\8aاست Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ú©Ù\87 ØªØ§Ø³Ù\88 ØºÙ\88اÚ\93Û\8d Ú\86Û\90 Ø¨Ø¯Ù\84Ù\88Ù\86 Ù¾Ú©Û\90 Ø±Ø§Ù\88Ù\84Û\8dØ\8c Ù\84Ø·Ù\81اÙ\8b <strong>[[:$1]]</strong> Ù\88Ú¯ورۍ.
+[[$1|بټنوک]]',
 'fileexists-extension' => 'په همدې نوم يوه بله دوتنه د پخوا نه شته: [[$2|thumb]]
 * د پورته کېدونکې دوتنې نوم: <strong>[[:$1]]</strong>
 * د پخوا نه شته دوتنه: <strong>[[:$2]]</strong>
@@ -1359,7 +1359,7 @@ $1',
 'sourceurl' => 'د URL سرچينه:',
 'destfilename' => 'د موخيزې دوتنې نوم:',
 'upload-maxfilesize' => 'د دوتنې تر ټولو لويه کچه: $1',
-'upload-description' => 'د Ø¯Ù\88تÙ\86Û\90 Ú\85رګندونې',
+'upload-description' => 'د Ø¯Ù\88تÙ\86Û\90 Ú\85رگندونې',
 'upload-options' => 'د پورته کولو خوښنې',
 'watchthisupload' => 'همدا دوتنه کتل',
 'upload-success-subj' => 'دوتنه پورته کېدل په برياليتوب سره ترسره شو',
@@ -1379,7 +1379,7 @@ $1',
 'backend-fail-create' => 'د "$1" په دوتنه کې نور څه و نه ليکل شول.',
 
 # ZipDirectoryReader
-'zip-wrong-format' => 'Ú\81اÙ\86Ú«ړې شوې دوتنه يوه ZIP دوتنه نه وه.',
+'zip-wrong-format' => 'Ú\81اÙ\86Ú¯ړې شوې دوتنه يوه ZIP دوتنه نه وه.',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'لاسرسی رد شو',
@@ -1409,16 +1409,16 @@ $1',
 'listfiles_name' => 'نوم',
 'listfiles_user' => 'کارن',
 'listfiles_size' => 'کچه (بايټونه)',
-'listfiles_description' => 'Ú\85رګندونه',
+'listfiles_description' => 'Ú\85رگندونه',
 'listfiles_count' => 'بڼې',
 
 # File description page
 'file-anchor-link' => 'دوتنه',
 'filehist' => 'د دوتنې پېښليک',
-'filehist-help' => 'په يوې نېټې/يوه وخت وټوکۍ چې د هماغه وخت او نېټې دوتنه چې په هماغه وخت کې څنګه ښکارېده هماغسې درښکاره شي.',
-'filehist-deleteall' => 'Ù¼Ù\88Ù\84 Ú\93Ù\86Ú«ول',
-'filehist-deleteone' => 'Ú\93Ù\86Ú«ول',
-'filehist-revert' => 'Ù¾Ù\87 Ú\85Ù¼ Ú«رځول',
+'filehist-help' => 'په يوې نېټې/يوه وخت وټوکۍ چې د هماغه وخت او نېټې دوتنه چې څنگه ښکارېده هماغسې درښکاره شي.',
+'filehist-deleteall' => 'Ù¼Ù\88Ù\84 Ú\93Ù\86Ú¯ول',
+'filehist-deleteone' => 'Ú\93Ù\86Ú¯ول',
+'filehist-revert' => 'Ù¾Ù\87 Ú\85Ù¼ Ú¯رځول',
 'filehist-current' => 'اوسنی',
 'filehist-datetime' => 'نېټه/وخت',
 'filehist-thumb' => 'بټنوک',
@@ -1435,7 +1435,7 @@ $1',
 'duplicatesoffile' => 'دا لاندينۍ {{PLURAL:$1| دوتنه د همدې دوتنې غبرګونې لمېسه ده|$1 دوتنې د همدې دوتنې غبرګونې لمېسې دي}} ([[Special:FileDuplicateSearch/$2|نور تفصيل]]):',
 'sharedupload' => 'دا دوتنه د $1 لخوا نه ده او کېدای شي چې نورې پروژې به يې هم کاروي.',
 'sharedupload-desc-here' => 'دا دوتنه د $1 لخوا خپرېږې او کېدای شي چې دا په نورو پروژو هم کارېدلې وي.
-د Ø¯Ù\88تÙ\86Û\90 Ø¯ Ú©Ø§Ø±Û\90دÙ\86Û\90 Ù\84ا Ù\86Ù\88ر Ù\85اÙ\84Ù\88Ù\85ات Ø¯ [$2 Ø¯Ù\88تÙ\86Û\90 Ø¯ Ú\85رګÙ\86دÙ\86Ù\88 Ù¾Ù\87 Ù\85Ø®] لاندې ښودل شوی.',
+د Ø¯Ù\88تÙ\86Û\90 Ø¯ Ú©Ø§Ø±Û\90دÙ\86Û\90 Ù\84ا Ù\86Ù\88ر Ù\85اÙ\84Ù\88Ù\85ات Ø¯ [$2 Ø¯Ù\88تÙ\86Û\90 Ø¯ Ú\85رگÙ\86دÙ\86Ù\88 Ù¾Ù\87 Ù\85Ø®] Ú©Û\90 لاندې ښودل شوی.',
 'filepage-nofile' => 'په دې نوم کومه دوتنه نشته.',
 'filepage-nofile-link' => 'په دې نوم کومه دوتنه نشته، خو تاسې يې [$1 پورته کولی شی].',
 'uploadnewversion-linktext' => 'د همدغې دوتنې نوې بڼه پورته کول',
@@ -1444,22 +1444,22 @@ $1',
 
 # File reversion
 'filerevert-comment' => 'سبب:',
-'filerevert-submit' => 'Ù¾Ù\87 Ú\85Ù¼ Ú«رځول',
+'filerevert-submit' => 'Ù¾Ù\87 Ú\85Ù¼ Ú¯رځول',
 
 # File deletion
-'filedelete' => '$1 Ú\93Ù\86Ú«ول',
-'filedelete-legend' => 'دÙ\88تÙ\86Ù\87 Ú\93Ù\86Ú«ول',
-'filedelete-intro' => "تاسÛ\90 Ø¯ '''[[Media:$1|$1]]''' Ø¯Ù\88تÙ\86Û\90 Ø§Ù\88 Ø¯ Ù\88رسرÙ\87 Ù¼Ù\88Ù\84 Ù¾Û\90Ú\9aÙ\84Ù\8aÚ© Ø¯ Ú\93Ù\86Ú«ولو په حال کې ياست.",
+'filedelete' => '$1 Ú\93Ù\86Ú¯ول',
+'filedelete-legend' => 'دÙ\88تÙ\86Ù\87 Ú\93Ù\86Ú¯ول',
+'filedelete-intro' => "تاسÛ\90 Ø¯ '''[[Media:$1|$1]]''' Ø¯Ù\88تÙ\86Û\90 Ø§Ù\88 Ø¯ Ù\88رسرÙ\87 Ù¼Ù\88Ù\84 Ù¾Û\90Ú\9aÙ\84Ù\8aÚ© Ø¯ Ú\93Ù\86Ú¯ولو په حال کې ياست.",
 'filedelete-comment' => 'سبب:',
-'filedelete-submit' => 'Ú\93Ù\86Ú«ول',
-'filedelete-success' => "'''$1''' Ú\93Ù\86Ú« شو.",
+'filedelete-submit' => 'Ú\93Ù\86Ú¯ول',
+'filedelete-success' => "'''$1''' Ú\93Ù\86Ú¯ شو.",
 'filedelete-nofile' => "'''$1''' نشته.",
 'filedelete-otherreason' => 'بل/اضافه سبب:',
 'filedelete-reason-otherlist' => 'بل سبب',
-'filedelete-reason-dropdown' => '*د Ú\93Ù\86Ú«Ù\88Ù\84Ù\88 Ù¼Ù\88Ù\84Ú«ړی سبب
+'filedelete-reason-dropdown' => '*د Ú\93Ù\86Ú¯Ù\88Ù\84Ù\88 Ù¼Ù\88Ù\84Ú¯ړی سبب
 ** د رښتو نه غاړه غړونه
-** Ú©Ù¼ Ù\85Ù¼ Ø¯Ù\88Ù\87 Ú«ونې دوتنه',
-'filedelete-edit-reasonlist' => 'د Ú\93Ù\86Ú«ولو سببونه سمول',
+** Ú©Ù¼ Ù\85Ù¼ Ø¯Ù\88Ù\87 Ú¯ونې دوتنه',
+'filedelete-edit-reasonlist' => 'د Ú\93Ù\86Ú¯ولو سببونه سمول',
 'filedelete-maintenance-title' => 'دوتنه نه شي ړنګېدی',
 
 # MIME search
@@ -1471,7 +1471,7 @@ $1',
 'unwatchedpages' => 'ناکتلي مخونه',
 
 # List redirects
-'listredirects' => 'د Ù\88رګرځېدنو لړليک',
+'listredirects' => 'د Ù\88رگرځېدنو لړليک',
 
 # Unused templates
 'unusedtemplates' => 'ناکارېدلې کينډۍ',
@@ -1482,7 +1482,7 @@ $1',
 'randompage-nopages' => 'په لانديني {{PLURAL:$2|نوم-تشيال|نوم-تشيالونو}} کې هېڅ کوم مخ نشته: $1.',
 
 # Random redirect
-'randomredirect' => 'Ù\86اټاکÙ\84Û\8c Ù\88رګرځېدنه',
+'randomredirect' => 'Ù\86اټاکÙ\84Û\8c Ù\88رگرځېدنه',
 
 # Statistics
 'statistics' => 'شمار',
@@ -1491,9 +1491,9 @@ $1',
 'statistics-header-views' => 'د کتنو شمار',
 'statistics-header-users' => 'د کارنانو شمار',
 'statistics-header-hooks' => 'بل شمار',
-'statistics-articles' => 'Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«يز مخونه',
+'statistics-articles' => 'Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯يز مخونه',
 'statistics-pages' => 'مخونه',
-'statistics-pages-desc' => 'د Ù\88Ù\8aÚ©Ù\8a Ù¼Ù\88Ù\84 Ù\85Ø®Ù\88Ù\86Ù\87Ø\8c Ø¯ Ø®Ø¨Ø±Ù\88 Ø§ØªØ±Ù\88Ø\8c Ù\85Ø® Ú«Ø±Ú\81Û\90دÙ\86Ù\88Ø\8c Ø§Ù\88 Ù\84ا Ù\86Ù\88رÙ\88 Ù\85Ø®Ù\88Ù\86Ù\88 Ù¾Ù\87 Ú«ډون.',
+'statistics-pages-desc' => 'د Ù\88Ù\8aÚ©Ù\8a Ù¼Ù\88Ù\84 Ù\85Ø®Ù\88Ù\86Ù\87Ø\8c Ø¯ Ø®Ø¨Ø±Ù\88 Ø§ØªØ±Ù\88Ø\8c Ù\85Ø® Ú¯Ø±Ú\81Û\90دÙ\86Ù\88Ø\8c Ø§Ù\88 Ù\84ا Ù\86Ù\88رÙ\88 Ù\85Ø®Ù\88Ù\86Ù\88 Ù¾Ù\87 Ú¯ډون.',
 'statistics-files' => 'پورته شوې دوتنې',
 'statistics-edits' => 'د {{SITENAME}} د جوړېدو راهيسې د مخونو سمون',
 'statistics-edits-average' => 'پر يوه مخ د سمون منځوۍ کچه',
@@ -1506,11 +1506,11 @@ $1',
 
 'pageswithprop-submit' => 'ورځه',
 
-'doubleredirects' => 'دÙ\88Ù\87 Ú\81Ù\84Ù\8a Ù\88رګرځېدنې',
+'doubleredirects' => 'دÙ\88Ù\87 Ú\81Ù\84Ù\8a Ù\88رگرځېدنې',
 
-'brokenredirects' => 'Ù\85اتÛ\90 Ù\88رګرځېدنې',
+'brokenredirects' => 'Ù\85اتÛ\90 Ù\88رگرځېدنې',
 'brokenredirects-edit' => 'سمول',
-'brokenredirects-delete' => 'Ú\93Ù\86Ú«ول',
+'brokenredirects-delete' => 'Ú\93Ù\86Ú¯ول',
 
 'withoutinterwiki' => 'د ژبې د تړنو بې برخې مخونه',
 'withoutinterwiki-summary' => 'لانديني مخونه د نورو ژبو بڼو سره تړنې نه لري.',
@@ -1542,9 +1542,9 @@ $1',
 'wantedfiles' => 'غوښتلې دوتنې',
 'wantedtemplates' => 'غوښتلې کينډۍ',
 'mostlinked' => 'د ډېرو تړنو مخونه',
-'mostlinkedcategories' => 'د Ú«ڼو تړنو وېشنيزې',
+'mostlinkedcategories' => 'د Ú¯ڼو تړنو وېشنيزې',
 'mostlinkedtemplates' => 'د ډېرو تړنو کينډۍ',
-'mostcategories' => 'د Ú«ڼو وېشنيزو مخونه',
+'mostcategories' => 'د Ú¯ڼو وېشنيزو مخونه',
 'mostimages' => 'د ډېرو تړنو انځورونه',
 'mostinterwikis' => 'د ډېرو خپلمنځي تړنو مخونه',
 'mostrevisions' => 'ډېر کتلي مخونه',
@@ -1585,7 +1585,9 @@ $1',
 'speciallogtitlelabel' => 'موخه (سرليک يا کارن):',
 'log' => 'يادښتونه',
 'all-logs-page' => 'ټول عام يادښتونه',
+'logempty' => 'په يادښت کې ورته څه نشته.',
 'log-title-wildcard' => 'هغه سرليکونه پلټل چې په دې متن پيلېږي',
+'showhideselectedlogentries' => 'د ټاکلو يادښتونو ښکارېدنه بدلول',
 
 # Special:AllPages
 'allpages' => 'ټول مخونه',
@@ -1601,9 +1603,9 @@ $1',
 'allpagesnext' => 'راتلونکي',
 'allpagessubmit' => 'ورځه',
 'allpagesprefix' => 'هغه مخونه ښکاره کړه چې مختاړی يې وي:',
-'allpagesbadtitle' => 'Ù\88رکÚ\93 Ø´Ù\88Û\8c Ø³Ø±Ù\84Ù\8aÚ© Ø³Ù\85 Ù\86Ù\87 Ø¯Û\8c Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ Ú\98بÙ\88 Ø§Ù\88 Ù\8aا Ø¯ Ø¨Û\90Ù\84ابÛ\90Ù\84Ù\88 Ù\88Ù\8aÚ©Ù\8a Ú«انو مختاړی لري. ستاسو په سرليک کې يو يا څو داسې ابېڅې دي کوم چې په سرليک کې نه شي کارېدلی.',
+'allpagesbadtitle' => 'Ù\88رکÚ\93 Ø´Ù\88Û\8c Ø³Ø±Ù\84Ù\8aÚ© Ø³Ù\85 Ù\86Ù\87 Ø¯Û\8c Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ Ú\98بÙ\88 Ø§Ù\88 Ù\8aا Ø¯ Ø¨Û\90Ù\84ابÛ\90Ù\84Ù\88 Ù\88Ù\8aÚ©Ù\8a Ú¯انو مختاړی لري. ستاسو په سرليک کې يو يا څو داسې ابېڅې دي کوم چې په سرليک کې نه شي کارېدلی.',
 'allpages-bad-ns' => '{{SITENAME}} د "$1" په نامه هېڅ کوم نوم-تشيال نه لري.',
-'allpages-hide-redirects' => 'Ù\85Ø® Ú«رځونې پټول',
+'allpages-hide-redirects' => 'Ù\85Ø® Ú¯رځونې پټول',
 
 # SpecialCachedPage
 'cachedspecial-refresh-now' => 'تر ټولو تازه کتل.',
@@ -1612,7 +1614,7 @@ $1',
 'categories' => 'وېشنيزې',
 'categoriespagetext' => 'دا لاندينۍ {{PLURAL:$1|وېشنيزه|وېشنيزې}} مخونه يا رسنيزې دوتنې لري.
 دلته [[Special:UnusedCategories|ناکارېدلې وېشنيزې]] نه دي ښکاره شوي.
-[[Special:WantedCategories|غÙ\88Ú\9aتÙ\84Û\90 Ù\88Û\90Ø´Ù\86Ù\8aزÛ\90]] Ù\87Ù\85 Ù\88Ú«ورۍ.',
+[[Special:WantedCategories|غÙ\88Ú\9aتÙ\84Û\90 Ù\88Û\90Ø´Ù\86Ù\8aزÛ\90]] Ù\87Ù\85 Ù\88Ú¯ورۍ.',
 'categoriesfrom' => 'هغه وېشنيزې کتل چې پېلېږي په:',
 'special-categories-sort-count' => 'د شمېر له مخې اوډل',
 'special-categories-sort-abc' => 'د ابېڅو له مخې اوډل',
@@ -1633,7 +1635,7 @@ $1',
 'listusersfrom' => 'هغه کارنان کتل چې نومونه يې پېلېږي په:',
 'listusers-submit' => 'ښکاره کول',
 'listusers-noresult' => 'هېڅ کوم کارن و نه موندل شو.',
-'listusers-blocked' => '(بÙ\86دÙ\8aز Ù\84Ú«ېدلی)',
+'listusers-blocked' => '(بÙ\86دÙ\8aز Ù\84Ú¯ېدلی)',
 
 # Special:ActiveUsers
 'activeusers' => 'د فعالو کارنانو لړليک',
@@ -1650,14 +1652,14 @@ $1',
 'listgrouprights-rights' => 'رښتې',
 'listgrouprights-helppage' => 'Help:د ډلې رښتې',
 'listgrouprights-members' => '(د غړو لړليک)',
-'listgrouprights-addgroup' => '{{PLURAL:$2|Ú\89Ù\84Ù\87\89Ù\84Û\90}} Ù\88رګډول: $1',
+'listgrouprights-addgroup' => '{{PLURAL:$2|Ú\89Ù\84Ù\87\89Ù\84Û\90}} Ù\88رگډول: $1',
 'listgrouprights-removegroup' => '{{PLURAL:$2|ډله|ډلې}} ليري کول: $1',
-'listgrouprights-addgroup-all' => 'Ù¼Ù\88Ù\84Û\90 Ú\89Ù\84Û\90 Ù\88رګډول',
+'listgrouprights-addgroup-all' => 'Ù¼Ù\88Ù\84Û\90 Ú\89Ù\84Û\90 Ù\88رگډول',
 'listgrouprights-removegroup-all' => 'ټولې ډلې ليري کول',
-'listgrouprights-addgroup-self' => 'خپÙ\84 Ú«Ú¼Ù\88Ù\86 Ú©Û\90 Ø¯ {{PLURAL:$2|Ú\89Ù\84Ù\87\89Ù\84Û\90}} Ù\88رګډول: $1',
-'listgrouprights-removegroup-self' => 'خپÙ\84 Ú«ڼون نه د {{PLURAL:$2|ډله|ډلې}} ليري کول: $1',
-'listgrouprights-addgroup-self-all' => 'خپÙ\84 Ú«Ú¼Ù\88Ù\86 Ú©Û\90 Ù¼Ù\88Ù\84Û\90 Ú\89Ù\84Û\90 Ù\88رګډول',
-'listgrouprights-removegroup-self-all' => 'خپÙ\84 Ú«ڼون نه ټولې ډلې ليري کول',
+'listgrouprights-addgroup-self' => 'خپÙ\84 Ú¯Ú¼Ù\88Ù\86 Ú©Û\90 Ø¯ {{PLURAL:$2|Ú\89Ù\84Ù\87\89Ù\84Û\90}} Ù\88رگډول: $1',
+'listgrouprights-removegroup-self' => 'خپÙ\84 Ú¯ڼون نه د {{PLURAL:$2|ډله|ډلې}} ليري کول: $1',
+'listgrouprights-addgroup-self-all' => 'خپÙ\84 Ú¯Ú¼Ù\88Ù\86 Ú©Û\90 Ù¼Ù\88Ù\84Û\90 Ú\89Ù\84Û\90 Ù\88رگډول',
+'listgrouprights-removegroup-self-all' => 'خپÙ\84 Ú¯ڼون نه ټولې ډلې ليري کول',
 
 # Email user
 'mailnologin' => 'هېڅ کومه لېږل شوې پته نشته',
@@ -1698,8 +1700,8 @@ $1',
 'watchlistanontext' => 'د خپل کتنلړ د توکو د سمولو او کتلو لپاره $1 ترسره کړۍ.',
 'watchnologin' => 'غونډال کې نه ياست ننوتي.',
 'watchnologintext' => 'ددې لپاره چې خپل کتنلړ کې بدلون راولی نو تاسو ته پکار ده چې لومړی غونډال کې [[Special:UserLogin|ورننوځۍ]].',
-'addwatch' => 'کتÙ\86Ù\84Ú\93 Ú©Û\90 Ù\88رګډول',
-'addedwatchtext' => 'د "[[:$1]]" Ù¾Ù\87 Ù\86Ù\88Ù\85 Ù\8aÙ\88 Ù\85Ø® Ø³ØªØ§Ø³Û\90 [[Special:Watchlist|کتÙ\86Ù\84Ú\93]] Ú©Û\90 Ù\88رګډ شو.
+'addwatch' => 'کتÙ\86Ù\84Ú\93 Ú©Û\90 Ù\88رگډول',
+'addedwatchtext' => 'د "[[:$1]]" Ù¾Ù\87 Ù\86Ù\88Ù\85 Ù\8aÙ\88 Ù\85Ø® Ø³ØªØ§Ø³Û\90 [[Special:Watchlist|کتÙ\86Ù\84Ú\93]] Ú©Û\90 Ù\88رگډ شو.
 په راتلونکې کې چې په دغه مخ او د دې د خبرواترو مخ کې کوم بدلونونه راځي نو هغه به ستاسې کتنلړ کې ښکاري.',
 'removewatch' => 'له کتنلړ نه غورځول',
 'removedwatchtext' => 'د "[[:$1]]" مخ [[Special:Watchlist|ستاسې کتنلړ]] نه لرې شو.',
@@ -1724,27 +1726,27 @@ $1',
 'enotif_mailer' => 'د {{SITENAME}} خبرتيايي برېښليک',
 'enotif_reset' => 'ټول مخونه کتل شوي نخښه کول',
 'enotif_impersonal_salutation' => '{{SITENAME}} کارن',
-'enotif_subject_deleted' => 'د {{SITENAME}} Ù\85Ø® $1 Ø¯ {{gender:$2|$2}} Ù\84Ø®Ù\88ا Ú\93Ù\86Ú« شوی',
+'enotif_subject_deleted' => 'د {{SITENAME}} Ù\85Ø® $1 Ø¯ {{gender:$2|$2}} Ù\84Ø®Ù\88ا Ú\93Ù\86Ú¯ شوی',
 'enotif_subject_created' => 'د {{SITENAME}} مخ $1 د {{gender:$2|$2}} لخوا جوړ شوی',
 'enotif_subject_moved' => 'د {{SITENAME}} مخ $1 د {{gender:$2|$2}} لخوا لېږدول شوی',
 'enotif_subject_restored' => 'د {{SITENAME}} مخ $1 د {{gender:$2|$2}} لخوا بيازېرمل شوی',
 'enotif_subject_changed' => 'د {{SITENAME}} مخ $1 د {{gender:$2|$2}} لخوا بدل شوی',
-'enotif_body_intro_deleted' => 'د {{SITENAME}} Ù\85Ø® $1 Ù¾Ù\87 $ Ø¯ {{gender:$2|$2}} Ù\84Ø®Ù\88ا Ú\93Ù\86Ú« Ø´Ù\88Û\8cØ\8c $3 Ù\88Ú«ورۍ.',
-'enotif_body_intro_created' => 'د {{SITENAME}} Ù\85Ø® $1 Ù¾Ù\87 $PAGEEDITDATE Ø¯ {{gender:$2|$2}} Ù\84Ø®Ù\88ا Ø¬Ù\88Ú\93 Ø´Ù\88Û\8cØ\8c Ø¯ Ø§Ù\88سÙ\86Û\8d Ø¨Ú¼Û\90 Ú©ØªÙ\84Ù\88 Ù\84پارÙ\87 $3 Ù\88Ú«ورۍ.',
-'enotif_body_intro_moved' => 'د {{SITENAME}} Ù\85Ø® $1 Ù¾Ù\87 $PAGEEDITDATE Ø¯ {{gender:$2|$2}} Ù\84Ø®Ù\88ا Ù\84Û\90Ú\96دÙ\88Ù\84 Ø´Ù\88Û\8cØ\8c Ø¯ Ø§Ù\88سÙ\86Û\8d Ø¨Ú¼Û\90 Ú©ØªÙ\84Ù\88 Ù\84پارÙ\87 $3 Ù\88Ú«ورۍ.',
-'enotif_body_intro_restored' => 'د {{SITENAME}} Ù\85Ø® $1 Ù¾Ù\87 $PAGEEDITDATE Ø¯ {{gender:$2|$2}} Ù\84Ø®Ù\88ا Ø¨Ù\8aازÛ\90رÙ\85Ù\84 Ø´Ù\88Û\8cØ\8c Ø¯ Ø§Ù\88سÙ\86Û\8d Ø¨Ú¼Û\90 Ú©ØªÙ\84Ù\88 Ù\84پارÙ\87 $3 Ù\88Ú«ورۍ.',
-'enotif_body_intro_changed' => 'د {{SITENAME}} Ù\85Ø® $1 Ù¾Ù\87 $PAGEEDITDATE Ø¯ {{gender:$2|$2}} Ù\84Ø®Ù\88ا Ø¨Ø¯Ù\84 Ø´Ù\88Û\8cØ\8c Ø¯ Ø§Ù\88سÙ\86Û\8d Ø¨Ú¼Û\90 Ú©ØªÙ\84Ù\88 Ù\84پارÙ\87 $3 Ù\88Ú«ورۍ.',
-'enotif_lastvisited' => 'د ټولو هغو بدلونونو د کتلو لپاره چې ستاسو د وروستي ځل راتګ نه وروسته پېښې شوي، $1 وګورۍ.',
-'enotif_lastdiff' => 'د Ù\87Ù\85دغÙ\87 Ø¨Ø¯Ù\84Ù\88Ù\86 Ø¯ Ú©ØªÙ\84Ù\88 Ù\84پارÙ\87 $1 Ù\88Ú«ورۍ.',
+'enotif_body_intro_deleted' => 'د {{SITENAME}} Ù\85Ø® $1 Ù¾Ù\87 $ Ø¯ {{gender:$2|$2}} Ù\84Ø®Ù\88ا Ú\93Ù\86Ú¯ Ø´Ù\88Û\8cØ\8c $3 Ù\88Ú¯ورۍ.',
+'enotif_body_intro_created' => 'د {{SITENAME}} Ù\85Ø® $1 Ù¾Ù\87 $PAGEEDITDATE Ø¯ {{gender:$2|$2}} Ù\84Ø®Ù\88ا Ø¬Ù\88Ú\93 Ø´Ù\88Û\8cØ\8c Ø¯ Ø§Ù\88سÙ\86Û\8d Ø¨Ú¼Û\90 Ú©ØªÙ\84Ù\88 Ù\84پارÙ\87 $3 Ù\88Ú¯ورۍ.',
+'enotif_body_intro_moved' => 'د {{SITENAME}} Ù\85Ø® $1 Ù¾Ù\87 $PAGEEDITDATE Ø¯ {{gender:$2|$2}} Ù\84Ø®Ù\88ا Ù\84Û\90Ú\96دÙ\88Ù\84 Ø´Ù\88Û\8cØ\8c Ø¯ Ø§Ù\88سÙ\86Û\8d Ø¨Ú¼Û\90 Ú©ØªÙ\84Ù\88 Ù\84پارÙ\87 $3 Ù\88Ú¯ورۍ.',
+'enotif_body_intro_restored' => 'د {{SITENAME}} Ù\85Ø® $1 Ù¾Ù\87 $PAGEEDITDATE Ø¯ {{gender:$2|$2}} Ù\84Ø®Ù\88ا Ø¨Ù\8aازÛ\90رÙ\85Ù\84 Ø´Ù\88Û\8cØ\8c Ø¯ Ø§Ù\88سÙ\86Û\8d Ø¨Ú¼Û\90 Ú©ØªÙ\84Ù\88 Ù\84پارÙ\87 $3 Ù\88Ú¯ورۍ.',
+'enotif_body_intro_changed' => 'د {{SITENAME}} Ù\85Ø® $1 Ù¾Ù\87 $PAGEEDITDATE Ø¯ {{gender:$2|$2}} Ù\84Ø®Ù\88ا Ø¨Ø¯Ù\84 Ø´Ù\88Û\8cØ\8c Ø¯ Ø§Ù\88سÙ\86Û\8d Ø¨Ú¼Û\90 Ú©ØªÙ\84Ù\88 Ù\84پارÙ\87 $3 Ù\88Ú¯ورۍ.',
+'enotif_lastvisited' => 'د ټولو هغو بدلونونو د کتلو لپاره چې ستاسې د وروستي ځل راتگ نه وروسته پېښې شوي، $1 وگورۍ.',
+'enotif_lastdiff' => 'د Ù\87Ù\85دغÙ\87 Ø¨Ø¯Ù\84Ù\88Ù\86 Ø¯ Ú©ØªÙ\84Ù\88 Ù\84پارÙ\87 $1 Ù\88Ú¯ورۍ.',
 'enotif_anon_editor' => 'ورکنومی کارن $1',
 'enotif_body' => 'قدرمن/قدرمنې $WATCHINGUSERNAME,
 
 
-Ù¾Ù\87 $PAGEEDITDATE Ù\86Û\90Ù¼Ù\87Ø\8c Ø¯  $PAGEEDITOR Ù\84Ø®Ù\88ا Ø¯ {{SITENAME}} Ù\85Ø® $PAGETITLE ØªÙ\87 $CHANGEDORCREATEDØ\8c Ø¯ Ø§Ù\88سÙ\86Û\8d Ø¨Ú¼Û\90 Ù\84پارÙ\87 $PAGETITLE_URL Ù\88Ú«ورۍ.
+Ù¾Ù\87 $PAGEEDITDATE Ù\86Û\90Ù¼Ù\87Ø\8c Ø¯  $PAGEEDITOR Ù\84Ø®Ù\88ا Ø¯ {{SITENAME}} Ù\85Ø® $PAGETITLE ØªÙ\87 $CHANGEDORCREATEDØ\8c Ø¯ Ø§Ù\88سÙ\86Û\8d Ø¨Ú¼Û\90 Ù\84پارÙ\87 $PAGETITLE_URL Ù\88Ú¯ورۍ.
 
 $NEWPAGE
 
-د Ø³Ù\85Ù\88Ù\86Ú«ر لنډيز: $PAGESUMMARY $PAGEMINOREDIT
+د Ø³Ù\85Ù\88Ù\86Ú¯ر لنډيز: $PAGESUMMARY $PAGEMINOREDIT
 
 Contact the editor:
 برېښليک: $PAGEEDITOR_EMAIL
@@ -1753,7 +1755,7 @@ Contact the editor:
 د لا نورو بدلونونو په پېښېدو سره به تاسې ته د خبراوي بل برېښليک نه درلېږل کېږي، تر څو چې تاسې د همدې مخ نه کتنه و نه کړۍ.
 تاسې دا هم کولای شی چې په خپل کتنلړ کې د ټولو کتل شويو مخونو د خبراوي بيرغونه بيا له سره پرځای کړۍ.
 
-             Ø³ØªØ§Ø³Û\90 Ù\85Ù\84Ú«ری
+             Ø³ØªØ§Ø³Û\90 Ù\85Ù\84Ú¯ری
 
 د {{SITENAME}} د خبرولو غونډال
 
@@ -1761,39 +1763,39 @@ Contact the editor:
 د خپل کتنلړ د امستنو د بدلون لپاره،
 {{canonicalurl:{{#special:EditWatchlist}}}} نه ليدنه وکړۍ
 
-د Ø®Ù¾Ù\84 Ú©ØªÙ\86Ù\84Ú\93 Ø¯ Ù\85Ø®Ù\88Ù\86Ù\88 Ø¯ Ú\93Ù\86Ú«ولو لپاره،
+د Ø®Ù¾Ù\84 Ú©ØªÙ\86Ù\84Ú\93 Ø¯ Ù\85Ø®Ù\88Ù\86Ù\88 Ø¯ Ú\93Ù\86Ú¯ولو لپاره،
 $UNWATCHURL  نه ليدنه وکړۍ
 
-اÙ\86Ú«ېرنې او نورې مرستې:
+اÙ\86Ú¯ېرنې او نورې مرستې:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
 'created' => 'جوړ شو',
 'changed' => 'بدلېدلی',
 
 # Delete
-'deletepage' => 'Ù\85Ø® Ú\93Ù\86Ú«ول',
+'deletepage' => 'Ù\85Ø® Ú\93Ù\86Ú¯ول',
 'confirm' => 'تاييد',
-'excontent' => 'د Ù\85Ø® Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«ه دا وه: "$1"',
-'excontentauthor' => 'د Ù\85Ø® Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«ه دا وه: "$1" (او يواځينی ونډه وال "[[Special:Contributions/$2|$2]]" وه)',
+'excontent' => 'د Ù\85Ø® Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯ه دا وه: "$1"',
+'excontentauthor' => 'د Ù\85Ø® Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯ه دا وه: "$1" (او يواځينی ونډه وال "[[Special:Contributions/$2|$2]]" وه)',
 'exblank' => 'مخ تش وه',
-'delete-confirm' => '"$1" Ú\93Ù\86Ú«Ù\88ول',
-'delete-legend' => 'Ú\93Ù\86Ú«ول',
-'historywarning' => "Ú«Ù\88اÚ\9aÙ\86Ù\87:''' ØªØ§Ø³Û\90 Ú\86Û\90 Ø¯ Ú©Ù\88Ù\85 Ù\85Ø® Ø¯ Ú\93Ù\86Ú«Û\90دÙ\88 ØªÚ©Ù\84 Ù\84رÛ\8cØ\8c Ù\87غÙ\87 Ø¯ Ù\86Ú\98دÛ\90 $1 {{PLURAL:$1|بڼÛ\90|بڼÙ\88}} Ù\8aÙ\88 پېښليک لري:",
-'confirmdeletetext' => 'تاسÛ\90 Ø¯ ØªÙ\84 Ù\84پار Ù\8aÙ\88 Ù\85Ø® Ù\8aا Ø§Ù\86Ú\81Ù\88ر Ø¯ Ù\87غÙ\87 Ù¼Ù\88Ù\84 Ù¾Û\90Ú\9aÙ\84Ù\8aÚ© Ø³Ø±Ù\87 Ø¯ Ø¯ØºÙ\87 ØªÙ\88کبÙ\86سټ Ù\86Ù\87 Ú\93Ù\86Ú«Ù\88Û\8d. Ú©Ù\87 Ú\86Û\90رتÙ\87 ØªØ§Ø³Û\90 Ø¯Ø¯Û\90 Ú©Ú\93Ù\86Û\90 Ù¾Ù\87 Ù¾Ø§Ù\8aÙ\84Ù\87 Ù¾Ù\88Ù\87 Ù\8aاست Ø§Ù\88 Ù\8aا Ø³ØªØ§Ø³Ù\88 Ù\87Ù\85دا Ú©Ú\93Ù\86Ù\87 Ø¯ Ø¯Û\90 Ù¾Ø§Ú¼Û\90 Ø¯ [[{{MediaWiki:Policy-url}}|تګلارې]] سره سمون خوري نو لطفاً د دې تاييد وکړی.',
+'delete-confirm' => '"$1" Ú\93Ù\86Ú¯ول',
+'delete-legend' => 'Ú\93Ù\86Ú¯ول',
+'historywarning' => "Ú¯Ù\88اÚ\9aÙ\86Ù\87:''' Ø¯Ø§ Ù\85Ø® Ú\86Û\90 ØªØ§Ø³Û\90 Ù\8aÛ\90 Ø¯ Ú\93Ù\86Ú¯Û\90دÙ\88 ØªÚ©Ù\84 Ù\84رئ Ù\86Ú\98دÛ\90 $1 {{PLURAL:$1|بڼÙ\87|بڼÛ\90}} پېښليک لري:",
+'confirmdeletetext' => 'تاسÛ\90 Ø¯ ØªÙ\84 Ù\84پار Ù\8aÙ\88 Ù\85Ø® Ù\8aا Ø§Ù\86Ú\81Ù\88ر Ø¯ Ù\87غÙ\87 Ù¼Ù\88Ù\84 Ù¾Û\90Ú\9aÙ\84Ù\8aÚ© Ø³Ø±Ù\87 Ø¯ Ø¯ØºÙ\87 ØªÙ\88کبÙ\86سټ Ù\86Ù\87 Ú\93Ù\86Ú¯Ù\88ئ. Ú©Ù\87 Ú\86Û\90رتÙ\87 ØªØ§Ø³Û\90 Ø¯Ø¯Û\90 Ú©Ú\93Ù\86Û\90 Ù¾Ù\87 Ù¾Ø§Ù\8aÙ\84Ù\87 Ù¾Ù\88Ù\87 Ù\8aاست Ø§Ù\88 Ù\8aا Ø³ØªØ§Ø³Û\90 Ù\87Ù\85دا Ú©Ú\93Ù\86Ù\87 Ø¯ Ø¯Û\90 Ù¾Ø§Ú¼Û\90 Ø¯ [[{{MediaWiki:Policy-url}}|تگلارې]] سره سمون خوري نو لطفاً د دې تاييد وکړی.',
 'actioncomplete' => 'بشپړه کړنه',
 'actionfailed' => 'کړنه نابريالۍ شوه',
-'deletedtext' => '"$1" Ú\93Ù\86Ú« شوی.
-د Ù\86Ù\88Ù\88 Ú\93Ù\86Ú« Ø´Ù\88Ù\88 Ø³Ù\88اÙ\86Ø­Ù\88 Ù\84پارÙ\87 $2 Ù\88Ú«ورۍ.',
-'dellogpage' => 'د Ú\93Ù\86Ú«ولو يادښت',
-'dellogpagetext' => 'دا Ù\84اÙ\86دÛ\90 Ø¯ Ù\86Ù\88Ù\88 Ú\93Ù\86Ú« شوو کړنو لړليک دی.',
-'deletionlog' => 'د Ú\93Ù\86Ú«ولو يادښت',
+'deletedtext' => '"$1" Ú\93Ù\86Ú¯ شوی.
+د Ù\86Ù\88Ù\88 Ú\93Ù\86Ú¯ Ø´Ù\88Ù\88 Ø³Ù\88اÙ\86Ø­Ù\88 Ù\84پارÙ\87 $2 Ù\88Ú¯ورۍ.',
+'dellogpage' => 'د Ú\93Ù\86Ú¯ولو يادښت',
+'dellogpagetext' => 'دا Ù\84اÙ\86دÛ\90 Ø¯ Ù\86Ù\88Ù\88 Ú\93Ù\86Ú¯ شوو کړنو لړليک دی.',
+'deletionlog' => 'د Ú\93Ù\86Ú¯ولو يادښت',
 'deletecomment' => 'سبب:',
 'deleteotherreason' => 'بل/اضافه سبب:',
 'deletereasonotherlist' => 'بل سبب',
-'deletereason-dropdown' => '*د Ú\93Ù\86Ú«Ù\88Ù\84Ù\88 Ù¼Ù\88Ù\84Ú«ړی سبب
+'deletereason-dropdown' => '*د Ú\93Ù\86Ú¯Ù\88Ù\84Ù\88 Ù¼Ù\88Ù\84Ú¯ړی سبب
 ** د ليکوال غوښتنه
 ** د رښتو تېری
 ** د پوهې سره دښمني',
-'delete-edit-reasonlist' => 'د Ú\93Ù\86Ú«ولو سببونه سمول',
+'delete-edit-reasonlist' => 'د Ú\93Ù\86Ú¯ولو سببونه سمول',
 
 # Rollback
 'rollback_short' => 'په شابېول',
@@ -1803,6 +1805,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'protectlogpage' => 'د ژغورنې يادښت',
 'protectedarticle' => '"[[$1]]" وژغورل شو',
 'modifiedarticleprotection' => 'د "[[$1]]" لپاره د ژغورنې کچه بدله شوه',
+'movedarticleprotection' => 'د ژغورنې امستنې له "[[$2]]" څخه "[[$1]]" ته ولېږدېدې',
 'protect-title' => 'د "$1" لپاره د ژغورنې کچه بدلول',
 'prot_1movedto2' => '[[$1]]، [[$2]] ته ولېږدېده',
 'protect-legend' => 'د ژغورلو پخلی کول',
@@ -1811,11 +1814,11 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'protect_expiry_invalid' => 'د پای وخت ناسم دی.',
 'protect_expiry_old' => 'د پای وخت په تېرمهال کې دی.',
 'protect-unchain-permissions' => 'د لا ژغورلو خوښنې پرانيستل',
-'protect-text' => "تاسÛ\90 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8c Ú\86Û\90 Ø¯ '''$1''' Ù\85Ø® Ù\84پارÙ\87 Ø¯ Ú\98غÙ\88رÙ\84Ù\88 Ú©Ú\86Ù\87 Ù\87Ù\85دÙ\84تÙ\87 Ù\88Ú«ورۍ او بدلون پکې راولی.",
-'protect-locked-access' => "ستاسÛ\90 Ú«ڼون دا اجازه نه لري چې د پاڼو د ژغورنې په کچه کې بدلون راولي.
+'protect-text' => "تاسÛ\90 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8c Ú\86Û\90 Ø¯ '''$1''' Ù\85Ø® Ù\84پارÙ\87 Ø¯ Ú\98غÙ\88رÙ\84Ù\88 Ú©Ú\86Ù\87 Ù\87Ù\85دÙ\84تÙ\87 Ù\88Ú¯ورۍ او بدلون پکې راولی.",
+'protect-locked-access' => "ستاسÛ\90 Ú¯ڼون دا اجازه نه لري چې د پاڼو د ژغورنې په کچه کې بدلون راولي.
 دلته د '''$1''' مخ لپاره اوسني شته امستنې دي:",
-'protect-cascadeon' => 'د Ø§Ù\88سÙ\85Ù\87اÙ\84 Ù\84پارÙ\87 Ù\87Ù\85دا Ù\85Ø® Ú\98غÙ\88رÙ\84 Ø´Ù\88Û\8c Ø¯Ø§ Ú\81Ú©Ù\87 Ú\86Û\90 Ù\87Ù\85دا Ù\85Ø® Ù¾Ù\87 {{PLURAL:$1|Ù\84اÙ\86دÙ\8aÙ\86Ù\8a Ù\85Ø®|Ù\84اÙ\86دÙ\8aÙ\86Ù\8a Ù\85Ø®Ù\88Ù\86Ù\88}} Ú©Û\90 Ù\88رګډ دی چې {{PLURAL:$1|ځوړاوبيزه ژغورنه يې چارنه ده|ځوړاوبيزې ژغورنې يې چارنې دي}}.
-تاسې د همدې مخ د ژغورنې په کچه کې بدلون راوستلای شی، خو دا به په ځوړاوبيزه ژغورنه اغېزمنه نه کړي.',
+'protect-cascadeon' => 'د Ø§Ù\88سÙ\85Ù\87اÙ\84 Ù\84پارÙ\87 Ù\87Ù\85دا Ù\85Ø® Ú\98غÙ\88رÙ\84 Ø´Ù\88Û\8c Ø¯Ø§ Ú\81Ú©Ù\87 Ú\86Û\90 Ù\87Ù\85دا Ù\85Ø® Ù¾Ù\87 {{PLURAL:$1|Ù\84اÙ\86دÙ\8aÙ\86Ù\8a Ù\85Ø®|Ù\84اÙ\86دÙ\8aÙ\86Ù\8a Ù\85Ø®Ù\88Ù\86Ù\88}} Ú©Û\90 Ù\88رگډ دی چې {{PLURAL:$1|ځوړاوبيزه ژغورنه يې چارنه ده|ځوړاوبيزې ژغورنې يې چارنې دي}}.
+تاسې د همدې مخ د ژغورنې په کچه کې بدلون راوستلای شی، خو دا به ځوړاوبيزه ژغورنه اغېزمنه نه کړي.',
 'protect-default' => 'ټول کارنان پرېښودل',
 'protect-fallback' => 'يوازې د "$1" اجازې لرونکي کارنان پرېښودل',
 'protect-level-autoconfirmed' => 'يوازې تاييد شوي کارنان',
@@ -1824,7 +1827,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'protect-expiring' => 'په $1 (UTC) پای ته رسېږي',
 'protect-expiring-local' => 'پای نېټه $1',
 'protect-expiry-indefinite' => 'لامحدوده',
-'protect-cascade' => 'Ù¾Ù\87 Ù\87Ù\85دÛ\90 Ù\85Ø® Ú©Û\90 Ø¯ Ù¼Ù\88Ù\84Ù\88 Ú«Ú\89Ù\88 Ù\85Ø®Ù\88Ù\86Ù\88 Ù\86ه ژغورنه کېږي (ځوړاوبيزه ژغورنه)',
+'protect-cascade' => 'Ù¾Ù\87 Ù\87Ù\85دÛ\90 Ù\85Ø® Ú©Û\90 Ø¯ Ù¼Ù\88Ù\84Ù\88 Ú¯Ú\89Ù\88 Ù\85Ø®Ù\88Ù\86Ù\88 Ú\85Ø®ه ژغورنه کېږي (ځوړاوبيزه ژغورنه)',
 'protect-cantedit' => 'تاسې نه شی کولای چې د دې مخ د ژغورنې په کچه کې بدلون راولی، دا ځکه چې تاسې د دې مخ د سمولو اجازه نه لری.',
 'protect-othertime' => 'بل وخت:',
 'protect-othertime-op' => 'بل وخت',
@@ -1833,7 +1836,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'protect-dropdown' => '*د ژغورلو عام سببونه
 ** ډېره زياته ورانکاري
 ** ډېره زياته سپام خپرونه
-** Ø¨Û\90 Ú«ټې سمونې او خپرونې
+** Ø¨Û\90 Ú¯ټې سمونې او خپرونې
 ** ډېر لوستونکی مخ',
 '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',
@@ -1855,9 +1858,9 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'restriction-level-all' => 'هر يو پوړ',
 
 # Undelete
-'undelete' => 'Ú\93Ù\86Ú« شوي مخونه کتل',
-'undeletepage' => 'Ú\93Ù\86Ú« Ø´Ù\88Ù\8a Ù\85Ø®Ù\88Ù\86Ù\87 Ú©ØªÙ\84 Ø§Ù\88 Ø¨Û\90رتÙ\87 پرځای کول',
-'viewdeletedpage' => 'Ú\93Ù\86Ú« شوي مخونه کتل',
+'undelete' => 'Ú\93Ù\86Ú¯ شوي مخونه کتل',
+'undeletepage' => 'Ú\93Ù\86Ú¯ Ø´Ù\88Ù\8a Ù\85Ø®Ù\88Ù\86Ù\87 Ú©ØªÙ\84 Ø§Ù\88 Ø¨Ù\8aا پرځای کول',
+'viewdeletedpage' => 'Ú\93Ù\86Ú¯ شوي مخونه کتل',
 'undeletebtn' => 'بيازېرمل',
 'undeletelink' => 'کتل/بيازېرمل',
 'undeleteviewlink' => 'کتل',
@@ -1865,8 +1868,8 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'undeleteinvert' => 'ټاکنې سرچپه کول',
 'undeletecomment' => 'سبب:',
 'undeletedfiles' => '{{PLURAL:$1|1 دوتنه بيازېرمه شوه|$1 دوتنې بيازېرمه شوې}}',
-'undelete-header' => 'د Ù\88رÙ\88ستÙ\8aÙ\88 Ú\93Ù\86Ú«Ù\88 Ø´Ù\88Ù\88 Ù\85Ø®Ù\88Ù\86Ù\88 Ù\84پارÙ\87 [[Special:Log/delete|د Ú\93Ù\86Ú«Ù\88Ù\84Ù\88 Ù\8aادÚ\9aت]] Ù\88Ú«ورۍ.',
-'undelete-search-box' => 'Ú\93Ù\86Ú« شوي مخونه لټول',
+'undelete-header' => 'د Ù\88رÙ\88ستÙ\8aÙ\88 Ú\93Ù\86Ú¯Ù\88 Ø´Ù\88Ù\88 Ù\85Ø®Ù\88Ù\86Ù\88 Ù\84پارÙ\87 [[Special:Log/delete|د Ú\93Ù\86Ú¯Ù\88Ù\84Ù\88 Ù\8aادÚ\9aت]] Ù\88Ú¯ورۍ.',
+'undelete-search-box' => 'Ú\93Ù\86Ú¯ شوي مخونه لټول',
 'undelete-search-prefix' => 'هغه مخونه ښکاره کړه چې پېلېږي په:',
 'undelete-search-submit' => 'پلټل',
 'undelete-show-file-submit' => 'هو',
@@ -1882,6 +1885,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'contributions-title' => 'د $1 کارن ونډې',
 'mycontris' => 'ونډې',
 'contribsub2' => 'د $1 لپاره ($2)',
+'nocontribs' => 'دې شرطونو سره سم بدلونونه و نه موندل شول.',
 'uctop' => '(اوسنی)',
 'month' => 'له مياشتې د (او پخواني):',
 'year' => 'له کال د (او پخواني):',
@@ -1893,6 +1897,8 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'sp-contributions-uploads' => 'پورته کېدنې',
 'sp-contributions-logs' => 'يادښتونه',
 'sp-contributions-talk' => 'خبرې اترې',
+'sp-contributions-blocked-notice' => 'دم مهال په دې کارن بنديز لگېدلی.
+د بنديز يادښت تازه مالومات په لاندې توگه دي:',
 'sp-contributions-search' => 'د ونډو پلټنه',
 'sp-contributions-username' => 'IP پته يا کارن-نوم:',
 'sp-contributions-toponly' => 'يوازې هغه سمونونه چې تر ټولو تازه بڼې لري ښکاره کول',
@@ -1904,38 +1910,38 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'whatlinkshere-page' => 'مخ:',
 'linkshere' => "دغه لانديني مخونه د '''[[:$1]]''' سره تړنې لري:",
 'nolinkshere' => "د '''[[:$1]]''' سره هېڅ يو مخ هم تړنې نه لري .",
-'isredirect' => 'د Ù\85Ø® Ú«رځونې مخ',
+'isredirect' => 'د Ù\85Ø® Ú¯رځونې مخ',
 'istemplate' => 'ورګډېدنه',
 'isimage' => 'د دوتنې تړنه',
 'whatlinkshere-prev' => '{{PLURAL:$1|پخوانی|پخواني $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|راتلونکی|راتلونکي $1}}',
 'whatlinkshere-links' => '← تړنې',
-'whatlinkshere-hideredirs' => 'Ù\85Ø® Ú«رځونې $1',
+'whatlinkshere-hideredirs' => 'Ù\85Ø® Ú¯رځونې $1',
 'whatlinkshere-hidetrans' => 'پايلې $1',
 'whatlinkshere-hidelinks' => 'تړنې $1',
 'whatlinkshere-hideimages' => 'د دوتنې تړنې $1',
-'whatlinkshere-filters' => 'Ú\86اڼګرونه',
+'whatlinkshere-filters' => 'Ú\86اڼگرونه',
 
 # Block/unblock
-'block' => 'Ù¾Ù\87 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú«ول',
+'block' => 'Ù¾Ù\87 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú¯ول',
 'unblock' => 'کارن له بنديزه وېستل',
-'blockip' => 'Ù¾Ù\87 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú«ول',
-'blockip-title' => 'Ù¾Ù\87 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú«ول',
-'blockip-legend' => 'Ù¾Ù\87 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú«ول',
+'blockip' => 'Ù¾Ù\87 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú¯ول',
+'blockip-title' => 'Ù¾Ù\87 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú¯ول',
+'blockip-legend' => 'Ù¾Ù\87 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú¯ول',
 'ipadressorusername' => 'IP پته يا کارن نوم',
 'ipbexpiry' => 'د پای نېټه:',
 'ipbreason' => 'سبب:',
 'ipbreasonotherlist' => 'بل لامل',
-'ipbreason-dropdown' => '*د Ø¨Ù\86دÙ\8aز Ù¼Ù\88Ù\84Ú«ړي سببونه
+'ipbreason-dropdown' => '*د Ø¨Ù\86دÙ\8aز Ù¼Ù\88Ù\84Ú¯ړي سببونه
 ** د ناسمو مالوماتو خپرول
-** Ø¯ Ù\85Ø®Ù\88Ù\86Ù\88 Ø¯ Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«Û\90 Ú\93Ù\86Ú«ول
+** Ø¯ Ù\85Ø®Ù\88Ù\86Ù\88 Ø¯ Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯Û\90 Ú\93Ù\86Ú¯ول
 ** په مخونو کې د باندنيو وېبځايونو بېکاره سپام تړنې ځايول
 ** په مخونو کې بې مانا/چټياټ ځايول
 ** په مخونو کې ناندرۍ راپارېدنې/د تاوتريخوالي خپرېدو ته هڅول
-** Ø¯ Ú«Ú¼ Ø´Ù\85Û\90ر Ú«Ú¼Ù\88Ù\86Ù\88Ù\86Ù\88 Ù\86Ù\87 Ù\86اÙ\88Ú\93Ù\87 Ú«ټه اخيستل
+** Ø¯ Ú¯Ú¼ Ø´Ù\85Û\90ر Ú¯Ú¼Ù\88Ù\86Ù\88Ù\86Ù\88 Ù\86Ù\87 Ù\86اÙ\88Ú\93Ù\87 Ú¯ټه اخيستل
 ** نه مننونکی کارن-نوم کارول',
-'ipbcreateaccount' => 'د Ú«ڼون جوړولو مخنيول',
-'ipbsubmit' => 'Ù¾Ù\87 Ø¯Û\90 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú«ول',
+'ipbcreateaccount' => 'د Ú¯ڼون جوړولو مخنيول',
+'ipbsubmit' => 'Ù¾Ù\87 Ø¯Û\90 Ú©Ø§Ø±Ù\86 Ø¨Ù\86دÙ\8aز Ù\84Ú¯ول',
 'ipbother' => 'بل وخت:',
 'ipboptions' => '2 ساعتونه:2 hours,1 ورځ:1 day,3 ورځې:3 days,1 اوونۍ:1 week,2 اوونۍ:2 weeks,1 مياشت:1 month,3 مياشتې:3 months,6 مياشتې:6 months,1 کال:1 year,لامحدوده:infinite',
 'ipbotheroption' => 'نور',
@@ -1943,9 +1949,9 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'ipbhidename' => 'کارن-نوم له سمون او لړليکونو پټول',
 'ipb-confirm' => 'د بنديز تاييد',
 'badipaddress' => 'ناسمه IP پته',
-'blockipsuccesssub' => 'بÙ\86دÙ\8aز Ù¾Ù\87 Ø¨Ø±Ù\8aاÙ\84Ù\8aتÙ\88ب Ø³Ø±Ù\87 Ù\88Ù\84Ú«ېده',
-'blockipsuccesstext' => 'Ù¾Ù\87 [[Special:Contributions/$1|$1]] Ø¨Ù\86دÙ\8aز Ù\84Ú«ېدلی.<br />
-د Ø¨Ù\86دÙ\8aزÙ\88Ù\86Ù\88 Ø¯ Ú\85ارÙ\84Ù\88 Ù\84پارÙ\87 [[Special:BlockList|بÙ\86دÙ\8aز Ù\84Ú\93Ù\84Ù\8aÚ©]] Ù\88Ú«ورۍ.',
+'blockipsuccesssub' => 'بÙ\86دÙ\8aز Ù¾Ù\87 Ø¨Ø±Ù\8aاÙ\84Ù\8aتÙ\88ب Ø³Ø±Ù\87 Ù\88Ù\84Ú¯ېده',
+'blockipsuccesstext' => 'Ù¾Ù\87 [[Special:Contributions/$1|$1]] Ø¨Ù\86دÙ\8aز Ù\84Ú¯ېدلی.<br />
+د Ø¨Ù\86دÙ\8aزÙ\88Ù\86Ù\88 Ø¯ Ú\85ارÙ\84Ù\88 Ù\84پارÙ\87 [[Special:BlockList|بÙ\86دÙ\8aز Ù\84Ú\93Ù\84Ù\8aÚ©]] Ù\88Ú¯ورۍ.',
 'ipb-edit-dropdown' => 'د بنديز سببونه سمول',
 'ipb-unblock-addr' => 'له $1 بنديز ليرې کول',
 'ipb-unblock' => 'له يوه کارن-نوم يا IP پتې بنديز ليري کول',
@@ -1955,16 +1961,16 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'ipusubmit' => 'دا بنديز ليرې کول',
 'unblocked' => 'له [[User:$1|$1]] بنديز ليري شو',
 'unblocked-range' => 'له $1 بنديز ليرې شو',
-'blocklist' => 'بÙ\86دÙ\8aز Ù\84Ú«ېدلي کارنان',
-'ipblocklist' => 'بÙ\86دÙ\8aز Ù\84Ú«ېدلي کارنان',
+'blocklist' => 'بÙ\86دÙ\8aز Ù\84Ú¯ېدلي کارنان',
+'ipblocklist' => 'بÙ\86دÙ\8aز Ù\84Ú¯ېدلي کارنان',
 'ipblocklist-legend' => 'يو بنديز شوی کارن موندل',
-'blocklist-userblocks' => 'Ú«ڼون بنديزونه پټول',
+'blocklist-userblocks' => 'Ú¯ڼون بنديزونه پټول',
 'blocklist-tempblocks' => 'لنډمهاله بنديزونه پټول',
 'blocklist-addressblocks' => 'يواځې آی پي بنديزونه پټول',
 'blocklist-timestamp' => 'وخت ټاپه',
 'blocklist-target' => 'موخه',
 'blocklist-expiry' => 'پای نېټه',
-'blocklist-by' => 'بÙ\86دÙ\8aز Ù\84Ú«ونکی پازوال',
+'blocklist-by' => 'بÙ\86دÙ\8aز Ù\84Ú¯ونکی پازوال',
 'blocklist-reason' => 'سبب',
 'ipblocklist-submit' => 'پلټل',
 'ipblocklist-localblock' => 'سيمه ايز بنديز',
@@ -1972,28 +1978,29 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'infiniteblock' => 'نامحدوده',
 'expiringblock' => 'په $1 نېټه، $2 بجو پای ته رسېږي',
 'anononlyblock' => 'يواځې ورکنومی',
-'createaccountblock' => 'Ù¾Ù\87 Ú«Ú¼Ù\88Ù\86 Ø¬Ù\88Ú\93Ù\88Ù\84Ù\88 Ø¨Ù\86دÙ\8aز Ù\84Ú«ېدلی',
+'createaccountblock' => 'Ù¾Ù\87 Ú¯Ú¼Ù\88Ù\86 Ø¬Ù\88Ú\93Ù\88Ù\84Ù\88 Ø¨Ù\86دÙ\8aز Ù\84Ú¯ېدلی',
 'emailblock' => 'پر برېښليک بنديز ولګېد',
 'blocklist-nousertalk' => 'د خبرواترو خپل مخ نه شی سمولای',
 'ipblocklist-empty' => 'د بنديز لړليک تش دی',
-'blocklink' => 'بÙ\86دÙ\8aز Ù\84Ú«ول',
+'blocklink' => 'بÙ\86دÙ\8aز Ù\84Ú¯ول',
 'unblocklink' => 'بنديز لرې کول',
 'change-blocklink' => 'د بنديز بدلون',
 'contribslink' => 'ونډې',
 'emaillink' => 'برېښليک لېږل',
 'autoblocker' => 'په اتوماتيک ډول ستاسو مخنيوی شوی دا ځکه چې ستاسو IP پته وروستی ځل د "[[User:$1|$1]]" له خوا کارېدلې. او د $1 د مخنيوي سبب دا دی: "$2"',
 'blocklogpage' => 'د بنديز يادښت',
-'blocklogentry' => 'Ù¾Ù\87 [[$1]] Ø¨Ù\86دÙ\8aز Ù\84Ú«ېدلی چې د بنديز د پای وخت يې $2 $3 دی',
+'blocklogentry' => 'Ù¾Ù\87 [[$1]] Ø¨Ù\86دÙ\8aز Ù\84Ú¯ېدلی چې د بنديز د پای وخت يې $2 $3 دی',
 'unblocklogentry' => 'بنديز ليرې شو $1',
 'block-log-flags-anononly' => 'يواځې ورکنومي کارنان',
-'block-log-flags-nocreate' => 'د Ú«ڼون جوړول ناچارن شوی',
+'block-log-flags-nocreate' => 'د Ú¯ڼون جوړول ناچارن شوی',
 'block-log-flags-noemail' => 'ددې برېښليک مخه نيول شوی',
+'block-log-flags-nousertalk' => 'خپل د خبرو اترو مخ نه شي سمولای',
 'block-log-flags-hiddenname' => 'پټ کارن-نوم',
 'ipb_already_blocked' => 'پر "$1" د پخوا نه بنديز دی',
-'ipb-needreblock' => 'پر $1 Ø¯ Ù¾Ø®Ù\88ا Ù\86Ù\87 Ø¨Ù\86دÙ\8aز Ù\84Ú«ېدلی.
+'ipb-needreblock' => 'پر $1 Ø¯ Ù¾Ø®Ù\88ا Ù\86Ù\87 Ø¨Ù\86دÙ\8aز Ù\84Ú¯ېدلی.
 آيا تاسې د امستنو بدلول غواړۍ؟',
 'ipb-otherblocks-header' => '{{PLURAL:$1|بل بنديز|نور بنديزونه}}',
-'blockme' => 'پر Ù\85ا Ø¨Ù\86دÙ\8aز Ù\84Ú«ول',
+'blockme' => 'پر Ù\85ا Ø¨Ù\86دÙ\8aز Ù\84Ú¯ول',
 'proxyblocksuccess' => 'ترسره شو.',
 
 # Developer tools
@@ -2008,34 +2015,34 @@ $UNWATCHURL  نه ليدنه وکړۍ
 # Move page
 'move-page' => '$1 لېږدول',
 'move-page-legend' => 'مخ لېږدول',
-'movepagetext' => "د Ù\84اÙ\86دÙ\8aÙ\86Û\8d Ù\81Ù\88رÙ\85Û\90 Ù¾Ù\87 Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ø³Ø±Ù\87 ØªØ§Ø³Û\90 Ø¯ Ù\8aÙ\88Ù\87 Ù\85Ø® Ù\86Ù\88Ù\85 Ø¨Ø¯Ù\84Ù\88Ù\84Û\8c Ø´Û\8cØ\8c Ú\86Û\90 Ù¾Ù\87 Ù\87Ù\85دÛ\90 ØªÙ\88Ú«ه به د يوه مخ ټول پېښليک د هغه د نوي نوم سرليک ته ولېږدېږي.
-د Ù\8aÙ\88Ù\87 Ù\85Ø®Ø\8c Ù¾Ø®Ù\88اÙ\86Û\8c Ù\86Ù\88Ù\85 Ø¨Ù\87 Ø¯ Ù\86Ù\88Ù\8a Ù\86Ù\88Ù\85 Ù\88رګرÚ\81Ù\88Ù\86Ú©Û\8c Ù\85Ø® Ù\88ګرÚ\81Ù\8a Ø§Ù\88 Ù\86Ù\88Ù\8a Ø³Ø±Ù\84Ù\8aÚ© ØªÙ\87 Ø¨Ù\87 Ù\88Ú«رځولی شي.
+'movepagetext' => "د Ù\84اÙ\86دÙ\8aÙ\86Û\8d Ù\81Ù\88رÙ\85Û\90 Ù¾Ù\87 Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ø³Ø±Ù\87 ØªØ§Ø³Û\90 Ø¯ Ù\8aÙ\88Ù\87 Ù\85Ø® Ù\86Ù\88Ù\85 Ø¨Ø¯Ù\84Ù\88Ù\84Û\8c Ø´Û\8cØ\8c Ú\86Û\90 Ù¾Ù\87 Ù\87Ù\85دÛ\90 ØªÙ\88Ú¯ه به د يوه مخ ټول پېښليک د هغه د نوي نوم سرليک ته ولېږدېږي.
+د Ù\8aÙ\88Ù\87 Ù\85Ø®Ø\8c Ù¾Ø®Ù\88اÙ\86Û\8c Ù\86Ù\88Ù\85 Ø¨Ù\87 Ø¯ Ù\86Ù\88Ù\8a Ù\86Ù\88Ù\85 Ù\88رگرÚ\81Ù\88Ù\86Ú©Û\8c Ù\85Ø® Ù\88گرÚ\81Ù\8a Ø§Ù\88 Ù\86Ù\88Ù\8a Ø³Ø±Ù\84Ù\8aÚ© ØªÙ\87 Ø¨Ù\87 Ù\88Ú¯رځولی شي.
 هغه تړنې چې په زاړه مخ کې دي په هغو کې به هېڅ کوم بدلون را نه شي;
-[[Special:BrokenRedirects|د Ù\85اتÙ\88 Ù\85Ø® Ú«Ø±Ú\81Ù\88Ù\86Ù\88]] Ù\8aا [[Special:DoubleRedirects|دÙ\88Ù\87 Ú\81Ù\84Ù\8a Ù\85Ø® Ú«Ø±Ú\81Ù\88Ù\86Ù\88]] Ø¯ Ø³ØªÙ\88Ù\86زÙ\88 Ø¯ Ù¾Û\90Ú\9aÛ\90دÙ\88 Ù¾Ù\87 Ø®Ø§Ø·Ø± Ú\81اÙ\86 Ú\89اÚ\89Ù\87 Ú©Ú\93Û\8c Ú\86Û\90 Ø³ØªØ§Ø³Û\90 Ù\85Ø® Ú«رځونې ماتې يا دوه ځله نه وي.
-دا Ø³ØªØ§Ø³Û\90 Ù¾Ø§Ø²Ù\87 Ø¯Ù\87 Ú\86Û\90 Ú\81اÙ\86 Ù¾Ù\87 Ø¯Û\90 Ù\87Ù\85 Ú\89اÚ\89Ù\85Ù\86 Ú©Ú\93Û\8c Ú\86Û\90 Ø¢Ù\8aا Ù\87غÙ\87 ØªÚ\93Ù\86Û\90 Ú©Ù\88Ù\85 Ú\86Û\90 Ø¯ Ù\8aÙ\88 Ù\85Ø® Ø³Ø±Ù\87 Ù¾Ú©Ø§Ø± Ø¯Ù\8a Ú\86Û\90 Ù\88Ù\8aØ\8c Ù\87Ù\85داسÛ\90 Ù¾Ù\87 Ù¾Ø±Ù\84Ù\87 Ù¾Ø³Û\90 ØªÙ\88Ú«ه پېيلي او خپل موخن ځايونو سره اړونده دي.
+[[Special:BrokenRedirects|د Ù\85اتÙ\88 Ù\85Ø® Ú¯Ø±Ú\81Ù\88Ù\86Ù\88]] Ù\8aا [[Special:DoubleRedirects|دÙ\88Ù\87 Ú\81Ù\84Ù\8a Ù\85Ø® Ú¯Ø±Ú\81Ù\88Ù\86Ù\88]] Ø¯ Ø³ØªÙ\88Ù\86زÙ\88 Ø¯ Ù¾Û\90Ú\9aÛ\90دÙ\88 Ù¾Ù\87 Ø®Ø§Ø·Ø± Ú\81اÙ\86 Ú\89اÚ\89Ù\87 Ú©Ú\93Û\8c Ú\86Û\90 Ø³ØªØ§Ø³Û\90 Ù\85Ø® Ú¯رځونې ماتې يا دوه ځله نه وي.
+دا Ø³ØªØ§Ø³Û\90 Ù¾Ø§Ø²Ù\87 Ø¯Ù\87 Ú\86Û\90 Ú\81اÙ\86 Ù¾Ù\87 Ø¯Û\90 Ù\87Ù\85 Ú\89اÚ\89Ù\85Ù\86 Ú©Ú\93Û\8c Ú\86Û\90 Ø¢Ù\8aا Ù\87غÙ\87 ØªÚ\93Ù\86Û\90 Ú©Ù\88Ù\85 Ú\86Û\90 Ø¯ Ù\8aÙ\88 Ù\85Ø® Ø³Ø±Ù\87 Ù¾Ú©Ø§Ø± Ø¯Ù\8a Ú\86Û\90 Ù\88Ù\8aØ\8c Ù\87Ù\85داسÛ\90 Ù¾Ù\87 Ù¾Ø±Ù\84Ù\87 Ù¾Ø³Û\90 ØªÙ\88Ú¯ه پېيلي او خپل موخن ځايونو سره اړونده دي.
 
-Ù¾Ù\87 Ù\8aاد Ù\85Ù\88 Ø§Ù\88سÙ\87 Ú\86Û\90 Ù\8aÙ\88 Ù\85Ø® Ø¨Ù\87 '''Ù\87Û\90Ú\85Ú©Ù\84Ù\87''' Ù\88 Ù\86Ù\87 Ù\84Û\90Ú\96دÛ\90Ú\96Ù\8a Ú©Ù\87 Ú\86Û\90رتÙ\87 Ø¯ Ù¾Ø®Ù\88ا Ù\86Ù\87 Ù¾Ù\87 Ù\87Ù\85اغÙ\87 Ù\86Ù\88Ù\85 Ù\8aÙ\88 Ù\85Ø® Ø´ØªÙ\88Ù\86 Ù\88Ù\84رÙ\8aØ\8c Ø®Ù\88 Ú©Ù\87 Ú\86Û\90رتÙ\87 Ù\8aÙ\88 Ù\85Ø® ØªØ´ Ù\88Ù\87 Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ù\8aÙ\88Ù\87 Ù\85Ø® Ú«رځونه چې پېښليک کې يې بدلون نه وي راغلی. نو دا په دې مانا ده چې تاسې کولای شی چې د يو مخ نوم بېرته هماغه پخواني نوم ته بدل کړی چې د پخوا نه يې درلوده، که چېرته تاسې تېرووځۍ نو په داسې حال کې تاسې نه شی کولای چې د يوه مخ پر سر يو څه وليکۍ.
+Ù¾Ù\87 Ù\8aاد Ù\85Ù\88 Ø§Ù\88سÙ\87 Ú\86Û\90 Ù\8aÙ\88 Ù\85Ø® Ø¨Ù\87 '''Ù\87Û\90Ú\85Ú©Ù\84Ù\87''' Ù\88 Ù\86Ù\87 Ù\84Û\90Ú\96دÛ\90Ú\96Ù\8a Ú©Ù\87 Ú\86Û\90رتÙ\87 Ø¯ Ù¾Ø®Ù\88ا Ù\86Ù\87 Ù¾Ù\87 Ù\87Ù\85اغÙ\87 Ù\86Ù\88Ù\85 Ù\8aÙ\88 Ù\85Ø® Ø´ØªÙ\88Ù\86 Ù\88Ù\84رÙ\8aØ\8c Ø®Ù\88 Ú©Ù\87 Ú\86Û\90رتÙ\87 Ù\8aÙ\88 Ù\85Ø® ØªØ´ Ù\88Ù\87 Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ù\8aÙ\88Ù\87 Ù\85Ø® Ú¯رځونه چې پېښليک کې يې بدلون نه وي راغلی. نو دا په دې مانا ده چې تاسې کولای شی چې د يو مخ نوم بېرته هماغه پخواني نوم ته بدل کړی چې د پخوا نه يې درلوده، که چېرته تاسې تېرووځۍ نو په داسې حال کې تاسې نه شی کولای چې د يوه مخ پر سر يو څه وليکۍ.
 
-'''Ú«واښنه!'''
+'''Ú¯واښنه!'''
 يوه نوي نوم ته د مخونو د نوم بدلون کېدای شي چې په نامتو مخونو کې بنسټيزه او نه اټکل کېدونکی بدلونونه رامېنځ ته کړي;
 مخکې له دې نه چې پرمخ ولاړ شی، لطفاُ لومړی خپل ځان په دې ډاډه کړی چې تاسې ددغې کړنې په پايلو ښه پوهېږۍ.",
-'movepagetext-noredirectfixer' => "د Ù\84اÙ\86دÙ\8aÙ\86Û\8d Ù\81Ù\88رÙ\85Û\90 Ù¾Ù\87 Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ø³Ø±Ù\87 ØªØ§Ø³Û\90 Ø¯ Ù\8aÙ\88Ù\87 Ù\85Ø® Ù\86Ù\88Ù\85 Ø¨Ø¯Ù\84Ù\88Ù\84Û\8c Ø´Û\8cØ\8c Ú\86Û\90 Ù¾Ù\87 Ù\87Ù\85دÛ\90 ØªÙ\88Ú«ه به د يوه مخ ټول پېښليک د هغه د نوي نوم سرليک ته ولېږدېږي.
-د Ù\8aÙ\88Ù\87 Ù\85Ø®Ø\8c Ù¾Ø®Ù\88اÙ\86Û\8c Ù\86Ù\88Ù\85 Ø¨Ù\87 Ø¯ Ù\86Ù\88Ù\8a Ù\86Ù\88Ù\85 Ù\88رګرÚ\81Ù\88Ù\86Ú©Û\8c Ù\85Ø® Ù\88ګرÚ\81Ù\8a Ø§Ù\88 Ù\86Ù\88Ù\8a Ø³Ø±Ù\84Ù\8aÚ© ØªÙ\87 Ø¨Ù\87 Ù\88Ú«رځولی شي.
+'movepagetext-noredirectfixer' => "د Ù\84اÙ\86دÙ\8aÙ\86Û\8d Ù\81Ù\88رÙ\85Û\90 Ù¾Ù\87 Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ø³Ø±Ù\87 ØªØ§Ø³Û\90 Ø¯ Ù\8aÙ\88Ù\87 Ù\85Ø® Ù\86Ù\88Ù\85 Ø¨Ø¯Ù\84Ù\88Ù\84Û\8c Ø´Û\8cØ\8c Ú\86Û\90 Ù¾Ù\87 Ù\87Ù\85دÛ\90 ØªÙ\88Ú¯ه به د يوه مخ ټول پېښليک د هغه د نوي نوم سرليک ته ولېږدېږي.
+د Ù\8aÙ\88Ù\87 Ù\85Ø®Ø\8c Ù¾Ø®Ù\88اÙ\86Û\8c Ù\86Ù\88Ù\85 Ø¨Ù\87 Ø¯ Ù\86Ù\88Ù\8a Ù\86Ù\88Ù\85 Ù\88رگرÚ\81Ù\88Ù\86Ú©Û\8c Ù\85Ø® Ù\88گرÚ\81Ù\8a Ø§Ù\88 Ù\86Ù\88Ù\8a Ø³Ø±Ù\84Ù\8aÚ© ØªÙ\87 Ø¨Ù\87 Ù\88Ú¯رځولی شي.
 
-[[Special:BrokenRedirects|د Ù\85اتÙ\88 Ù\85Ø® Ú«Ø±Ú\81Ù\88Ù\86Ù\88]] Ù\8aا [[Special:DoubleRedirects|دÙ\88Ù\87 Ú\81Ù\84Ù\8a Ù\85Ø® Ú«Ø±Ú\81Ù\88Ù\86Ù\88]] Ø¯ Ø³ØªÙ\88Ù\86زÙ\88 Ø¯ Ù¾Û\90Ú\9aÛ\90دÙ\88 Ù¾Ù\87 Ø®Ø§Ø·Ø± Ú\81اÙ\86 Ú\89اÚ\89Ù\87 Ú©Ú\93Û\8c Ú\86Û\90 Ø³ØªØ§Ø³Û\90 Ù\85Ø® Ú«رځونې ماتې يا دوه ځله نه وي.
-دا Ø³ØªØ§Ø³Û\90 Ù¾Ø§Ø²Ù\87 Ø¯Ù\87 Ú\86Û\90 Ú\81اÙ\86 Ù¾Ù\87 Ø¯Û\90 Ù\87Ù\85 Ú\89اÚ\89Ù\85Ù\86 Ú©Ú\93Û\8c Ú\86Û\90 Ø¢Ù\8aا Ù\87غÙ\87 ØªÚ\93Ù\86Û\90 Ú©Ù\88Ù\85 Ú\86Û\90 Ø¯ Ù\8aÙ\88 Ù\85Ø® Ø³Ø±Ù\87 Ù¾Ú©Ø§Ø± Ø¯Ù\8a Ú\86Û\90 Ù\88Ù\8aØ\8c Ù\87Ù\85داسÛ\90 Ù¾Ù\87 Ù¾Ø±Ù\84Ù\87 Ù¾Ø³Û\90 ØªÙ\88Ú«ه پېيلي او خپل د موخې ځايونو سره اړونده دي که نه.
+[[Special:BrokenRedirects|د Ù\85اتÙ\88 Ù\85Ø® Ú¯Ø±Ú\81Ù\88Ù\86Ù\88]] Ù\8aا [[Special:DoubleRedirects|دÙ\88Ù\87 Ú\81Ù\84Ù\8a Ù\85Ø® Ú¯Ø±Ú\81Ù\88Ù\86Ù\88]] Ø¯ Ø³ØªÙ\88Ù\86زÙ\88 Ø¯ Ù¾Û\90Ú\9aÛ\90دÙ\88 Ù¾Ù\87 Ø®Ø§Ø·Ø± Ú\81اÙ\86 Ú\89اÚ\89Ù\87 Ú©Ú\93Û\8c Ú\86Û\90 Ø³ØªØ§Ø³Û\90 Ù\85Ø® Ú¯رځونې ماتې يا دوه ځله نه وي.
+دا Ø³ØªØ§Ø³Û\90 Ù¾Ø§Ø²Ù\87 Ø¯Ù\87 Ú\86Û\90 Ú\81اÙ\86 Ù¾Ù\87 Ø¯Û\90 Ù\87Ù\85 Ú\89اÚ\89Ù\85Ù\86 Ú©Ú\93Û\8c Ú\86Û\90 Ø¢Ù\8aا Ù\87غÙ\87 ØªÚ\93Ù\86Û\90 Ú©Ù\88Ù\85 Ú\86Û\90 Ø¯ Ù\8aÙ\88 Ù\85Ø® Ø³Ø±Ù\87 Ù¾Ú©Ø§Ø± Ø¯Ù\8a Ú\86Û\90 Ù\88Ù\8aØ\8c Ù\87Ù\85داسÛ\90 Ù¾Ù\87 Ù¾Ø±Ù\84Ù\87 Ù¾Ø³Û\90 ØªÙ\88Ú¯ه پېيلي او خپل د موخې ځايونو سره اړونده دي که نه.
 
-Ù¾Ù\87 Ù\8aاد Ù\85Ù\88 Ø§Ù\88سÙ\87 Ú\86Û\90 Ù\8aÙ\88 Ù\85Ø® Ø¨Ù\87 '''Ù\87Û\90Ú\85Ú©Ù\84Ù\87''' Ù\88 Ù\86Ù\87 Ù\84Û\90Ú\96دÛ\90Ú\96Ù\8a Ú©Ù\87 Ú\86Û\90رتÙ\87 Ø¯ Ù¾Ø®Ù\88ا Ù\86Ù\87 Ù¾Ù\87 Ù\87Ù\85اغÙ\87 Ù\86Ù\88Ù\85 Ù\8aÙ\88 Ø¨Ù\84 Ù\85Ø® Ø´ØªÙ\88Ù\86 Ù\88Ù\84رÙ\8aØ\8c Ø®Ù\88 Ú©Ù\87 Ú\86Û\90رتÙ\87 Ù\8aÙ\88 Ù\85Ø® ØªØ´ Ù\88Ù\87 Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ù\8aÙ\88Ù\87 Ù\85Ø® Ú«رځونه چې پېښليک کې يې بدلون نه وي راغلی. نو دا په دې مانا ده چې تاسې کولای شی چې د يو مخ نوم بېرته هماغه پخواني نوم ته بدل کړی چې د پخوا نه يې درلوده، که چېرته تاسې تېرووځۍ نو په داسې حال کې تاسې نه شی کولای چې د يوه مخ پر سر يو څه وليکۍ.
+Ù¾Ù\87 Ù\8aاد Ù\85Ù\88 Ø§Ù\88سÙ\87 Ú\86Û\90 Ù\8aÙ\88 Ù\85Ø® Ø¨Ù\87 '''Ù\87Û\90Ú\85Ú©Ù\84Ù\87''' Ù\88 Ù\86Ù\87 Ù\84Û\90Ú\96دÛ\90Ú\96Ù\8a Ú©Ù\87 Ú\86Û\90رتÙ\87 Ø¯ Ù¾Ø®Ù\88ا Ù\86Ù\87 Ù¾Ù\87 Ù\87Ù\85اغÙ\87 Ù\86Ù\88Ù\85 Ù\8aÙ\88 Ø¨Ù\84 Ù\85Ø® Ø´ØªÙ\88Ù\86 Ù\88Ù\84رÙ\8aØ\8c Ø®Ù\88 Ú©Ù\87 Ú\86Û\90رتÙ\87 Ù\8aÙ\88 Ù\85Ø® ØªØ´ Ù\88Ù\87 Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ù\8aÙ\88Ù\87 Ù\85Ø® Ú¯رځونه چې پېښليک کې يې بدلون نه وي راغلی. نو دا په دې مانا ده چې تاسې کولای شی چې د يو مخ نوم بېرته هماغه پخواني نوم ته بدل کړی چې د پخوا نه يې درلوده، که چېرته تاسې تېرووځۍ نو په داسې حال کې تاسې نه شی کولای چې د يوه مخ پر سر يو څه وليکۍ.
 
-'''Ú«واښنه!'''
+'''Ú¯واښنه!'''
 يوه نوي نوم ته د مخونو د نوم بدلون کېدای شي چې په نامتو مخونو کې بنسټيزه او نه اټکل کېدونکي بدلونونه رامېنځ ته کړي; مخکې له دې نه چې پرمخ ولاړ شی، لطفاُ لومړی خپل ځان په دې ډاډه کړی چې تاسې ددغې کړنې په پايلو ښه پوهېږۍ.",
 'movepagetalktext' => "همدې مخ ته اړونده د خبرواترو مخ هم په اتوماتيک ډول لېږدول کېږي '''خو که چېرته:'''
 *په نوي نوم د پخوا نه د خبرواترو يو مخ شتون ولري، او يا هم
 *تاسې ته لاندې ورکړ شوی څلورڅنډی په نښه شوی وي.
 
\86Ù\88 Ù¾Ù\87 Ù\87غÙ\87 Ù\88خت Ú©Û\90 Ù¾Ú©Ø§Ø± Ø¯Ù\87 Ú\86Û\90 Ø¯ Ø®Ø¨Ø±Ù\88اترÙ\88 Ø¯ Ù\85Ø® Ù\84Û\90Ú\96دÙ\88Ù\86Ù\87 Ø§Ù\88 Ø¯ Ù\86Ù\88Ù\8a Ù\85Ø® Ø³Ø±Ù\87 Ø¯ Ù\8aÙ\88Ú\81اÛ\8c Ú©Ù\88Ù\84Ù\88 Ú©Ú\93Ù\86Ù\87 Ù¾Ù\87 Ù\84اسÙ\8a ØªÙ\88Ú«ه ترسره کړی.",
\86Ù\88 Ù¾Ù\87 Ù\87غÙ\87 Ù\88خت Ú©Û\90 Ù¾Ú©Ø§Ø± Ø¯Ù\87 Ú\86Û\90 Ø¯ Ø®Ø¨Ø±Ù\88اترÙ\88 Ø¯ Ù\85Ø® Ù\84Û\90Ú\96دÙ\88Ù\86Ù\87 Ø§Ù\88 Ø¯ Ù\86Ù\88Ù\8a Ù\85Ø® Ø³Ø±Ù\87 Ø¯ Ù\8aÙ\88Ú\81اÛ\8c Ú©Ù\88Ù\84Ù\88 Ú©Ú\93Ù\86Ù\87 Ù¾Ù\87 Ù\84اسÙ\8a ØªÙ\88Ú¯ه ترسره کړی.",
 'movearticle' => 'مخ لېږدول',
-'moveuserpage-warning' => "'''Ú«واښنه:''' تاسې د يو کارن مخ د لېږدولو په حال کې ياست. لطفاً دا مه هېروۍ چې يوازې همدا مخ به ولېږدول شي او د کارن نوم به ''نه'' بدلېږي.",
+'moveuserpage-warning' => "'''Ú¯واښنه:''' تاسې د يو کارن مخ د لېږدولو په حال کې ياست. لطفاً دا مه هېروۍ چې يوازې همدا مخ به ولېږدول شي او د کارن نوم به ''نه'' بدلېږي.",
 'movenologin' => 'غونډال کې نه ياست ننوتي',
 'movenologintext' => 'ددې لپاره چې يو مخ ولېږدوی، نو تاسې بايد يو ثبت شوی کارن او غونډال کې [[Special:UserLogin|ننوتي]] اوسۍ.',
 'movenotallowed' => 'تاسې د مخونو د لېږدولو پرېښله نلرۍ.',
@@ -2047,9 +2054,10 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'movepagebtn' => 'مخ لېږدول',
 'pagemovedsub' => 'لېږدول په برياليتوب سره ترسره شوه',
 'movepage-moved' => '\'\'\'د "$1" په نامه دوتنه، "$2" ته ولېږدېده\'\'\'',
+'movepage-moved-redirect' => 'يو مخ گرځونی جوړ شو.',
 'articleexists' => 'په همدې نوم يوه بله پاڼه د پخوا نه شته او يا خو دا نوم چې تاسې ټاکلی سم نه دی. لطفاً يو بل نوم وټاکۍ.',
 'talkexists' => "'''همدا مخ په برياليتوب سره نوي سرليک ته ولېږدېده، خو د خبرواترو مخ يې و نه لېږدول شو دا ځکه چې نوی سرليک له پخوا نه ځانته د خبرواترو يو مخ لري.
\84Ø·Ù\81اÙ\8f Ø¯ Ø®Ø¨Ø±Ù\88اترÙ\88 Ø¯Ø§ Ø¯Ù\88اÚ\93Ù\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ù¾Ù\87 Ù\84اسÙ\8a ØªÙ\88Ú«ه سره يو ځای کړی.'''",
\84Ø·Ù\81اÙ\8b Ø¯ Ø®Ø¨Ø±Ù\88اترÙ\88 Ø¯Ø§ Ø¯Ù\88اÚ\93Ù\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ù¾Ù\87 Ù\84اسÙ\8a ØªÙ\88Ú¯ه سره يو ځای کړی.'''",
 'movedto' => 'ته ولېږدول شو',
 'movetalk' => 'د خبرو اترو اړونده مخ ورسره لېږدول',
 'movelogpage' => 'د لېږدولو يادښت',
@@ -2058,23 +2066,23 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'movesubpagetext' => 'همدا مخ $1 {{PLURAL:$1|څېرمه مخ لري چې لاندې ښودل شوی|څېرمه مخونه لري چې لاندې ښودل شوي}}.',
 'movenosubpage' => 'دا مخ کوم څېرمه مخونه نه لري.',
 'movereason' => 'سبب:',
-'revertmove' => 'Ù¾Ù\87 Ú\85Ù¼ Ú«رځول',
-'delete_and_move' => 'Ú\93Ù\86Ú«ول او لېږدول',
-'delete_and_move_confirm' => 'Ù\87Ù\88, Ø¯Ø§ Ù\85Ø® Ú\93Ù\86Ú« کړه',
+'revertmove' => 'Ù¾Ù\87 Ú\85Ù¼ Ú¯رځول',
+'delete_and_move' => 'Ú\93Ù\86Ú¯ول او لېږدول',
+'delete_and_move_confirm' => 'Ù\87Ù\88, Ø¯Ø§ Ù\85Ø® Ú\93Ù\86Ú¯ کړه',
 'immobile-source-page' => 'دا مخ نه لېږدېدنونکی دی',
 'imageinvalidfilename' => 'د موخنې دوتنې نوم سم نه دی',
-'move-leave-redirect' => 'Ù\8aÙ\88 Ù\88رګرځونکی مخ پر ځای پرېښودل',
+'move-leave-redirect' => 'Ù\8aÙ\88 Ù\88رگرځونکی مخ پر ځای پرېښودل',
 'move-over-sharedrepo' => '== دوتنه شته ==
-د [[:$1]] دوتنه په يوه ګډ زېرمتون کې شته. دې نوم ته د يوې دوتنې لېږدون به د ګډې دوتنې د باطلېدلو سبب شي.',
+د [[:$1]] دوتنه په يو گډ زېرمتون کې شته. دې نوم ته د يوې دوتنې لېږدون به د گډې دوتنې د باطلېدلو سبب شي.',
 
 # Export
 'export' => 'مخونه صادرول',
 'exportall' => 'ټول مخونه صادرول',
 'export-submit' => 'صادرول',
-'export-addcattext' => 'Ù\85Ø®Ù\88Ù\86Ù\88 Ø¯ Ù\88رګډولو وېشنيزه:',
-'export-addcat' => 'Ù\88رګډول',
-'export-addnstext' => 'د Ù\86Ù\88Ù\85-تشÙ\8aاÙ\84 Ù\86Ù\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ù\88رګډول:',
-'export-addns' => 'Ù\88رګډول',
+'export-addcattext' => 'Ù\85Ø®Ù\88Ù\86Ù\88 Ø¯ Ù\88رگډولو وېشنيزه:',
+'export-addcat' => 'Ù\88رگډول',
+'export-addnstext' => 'د Ù\86Ù\88Ù\85-تشÙ\8aاÙ\84 Ù\86Ù\87 Ù\85Ø®Ù\88Ù\86Ù\87 Ù\88رگډول:',
+'export-addns' => 'Ù\88رگډول',
 'export-download' => 'د دوتنې په بڼه خوندي کول',
 'export-templates' => 'کينډۍ نغاړل',
 
@@ -2084,13 +2092,13 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'allmessagesdefault' => 'تلواليزه پيغام متن',
 'allmessagescurrent' => 'اوسنی پيغام متن',
 'allmessagestext' => 'دا د مېډياويکي په نوم-تشيال کې د غونډال د پيغامونو لړليک دی.
-Ú©Ù\87 Ú\86Û\90رتÙ\87 ØªØ§Ø³Û\90 Ø¯ Ù\85Ù\8aÚ\89Ù\8aاÙ\88Ù\8aÚ©Ù\8a Ù¾Ù\87 Ú\81اÙ\8aتابÙ\87 Ú©Û\90 Ù\88Ù\86Ú\89Û\90 ØªØ±Ø³Ø±Ù\87 Ú©Ù\88Ù\84 ØºÙ\88اÚ\93Û\8d Ù\86Ù\88 Ù\84Ø·Ù\81اÙ\8b [//www.mediawiki.org/wiki/Localisation Ø¯ Ù\88Ù\8aÚ\89Ù\8aاÙ\88Ù\8aÚ©Ù\8a Ú\81اÙ\8aتابÙ\87] Ø§Ù\88 [//translatewiki.net translatewiki.net] Ù\86ه ليدنه وکړۍ.',
+Ú©Ù\87 Ú\86Û\90رتÙ\87 ØªØ§Ø³Û\90 Ø¯ Ù\85Ù\8aÚ\89Ù\8aاÙ\88Ù\8aÚ©Ù\8a Ù¾Ù\87 Ú\81اÙ\8aتابÙ\87 Ú©Û\90 Ù\88Ù\86Ú\89Û\90 ØªØ±Ø³Ø±Ù\87 Ú©Ù\88Ù\84 ØºÙ\88اÚ\93Û\8d Ù\86Ù\88 Ù\84Ø·Ù\81اÙ\8b [//www.mediawiki.org/wiki/Localisation Ø¯ Ù\85Ù\8aÚ\89Ù\8aاÙ\88Ù\8aÚ©Ù\8a Ú\81اÙ\8aتابÙ\87] Ø§Ù\88 [//translatewiki.net translatewiki.net] Ú\85Ø®ه ليدنه وکړۍ.',
 'allmessagesnotsupportedDB' => "'''Special:Allmessages''' ترېنه کار نه اخيستل کېږي ځکه چې '''\$wgUseDatabaseMessages''' مړ دی.",
-'allmessages-filter-legend' => 'Ú\86اڼګر',
+'allmessages-filter-legend' => 'Ú\86اڼگر',
 'allmessages-filter-unmodified' => 'نابدلېدلي',
 'allmessages-filter-all' => 'ټول',
 'allmessages-filter-modified' => 'بدلېدلي',
-'allmessages-prefix' => 'د Ù\85ختاÚ\93Ù\8a Ù¾Ø± Ø¨Ù\86سټ Ø§Ú\93Ù\88Ù\86دÙ\87 Ú\86اڼګر:',
+'allmessages-prefix' => 'د Ù\85ختاÚ\93Ù\8a Ù¾Ø± Ø¨Ù\86سټ Ø§Ú\93Ù\88Ù\86دÙ\87 Ú\86اڼگر:',
 'allmessages-language' => 'ژبه:',
 'allmessages-filter-submit' => 'ورځه',
 
@@ -2124,16 +2132,16 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'tooltip-pt-login' => 'تاسې ته په غونډال کې د ننوتلو سپارښتنه کوو، که څه هم چې دا يو اړين کار نه دی.',
 'tooltip-pt-anonlogin' => 'تاسو ته په غونډال کې د ننوتلو سپارښتنه کوو، که څه هم چې دا يو اړين کار نه دی.',
 'tooltip-pt-logout' => 'وتل',
-'tooltip-ca-talk' => 'د Ù\85Ø® Ø¯ Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«ې په اړه خبرې اترې',
-'tooltip-ca-edit' => 'تاسÛ\90 Ù\87Ù\85دا Ù\85Ø® Ø³Ù\85Ù\88Ù\84اÛ\8c Ø´Û\8c. Ù\84Ø·Ù\81اÙ\8b Ø¯ Ù\84Ù\8aÚ©Ù\86Û\90 Ø¯ Ø®Ù\88Ù\86دÙ\8a Ú©Ù\88Ù\84Ù\88 Ø¯Ù\85Ø®Ù\87Ø\8c Ø¯ Ù\87Ù\85دÛ\90 Ù\84Ù\8aÚ©Ù\86Û\90 Ù\85Ø®Ù\84Ù\8aدÙ\86Ù\87 Ù\88Ú«ورۍ.',
+'tooltip-ca-talk' => 'د Ù\85Ø® Ø¯ Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯ې په اړه خبرې اترې',
+'tooltip-ca-edit' => 'تاسÛ\90 Ù\87Ù\85دا Ù\85Ø® Ø³Ù\85Ù\88Ù\84اÛ\8c Ø´Û\8c. Ù\84Ø·Ù\81اÙ\8b Ø¯ Ù\84Ù\8aÚ©Ù\86Û\90 Ø¯ Ø®Ù\88Ù\86دÙ\8a Ú©Ù\88Ù\84Ù\88 Ø¯Ù\85Ø®Ù\87Ø\8c Ø¯ Ù\87Ù\85دÛ\90 Ù\84Ù\8aÚ©Ù\86Û\90 Ù\85Ø®Ù\84Ù\8aدÙ\86Ù\87 Ù\88Ú¯ورۍ.',
 'tooltip-ca-addsection' => 'يوه نوې برخه پيلول',
-'tooltip-ca-viewsource' => 'دا Ù\85Ø® Ú\98غÙ\88رÙ\84 Ø´Ù\88Û\8c. ØªØ§Ø³Û\90 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8c Ú\86Û\90 Ø¯ Ø¯Û\90 Ù\85Ø® Ø³Ø±Ø¬Ù\8aÙ\86Ù\87 Ù\88Ú«ورۍ.',
+'tooltip-ca-viewsource' => 'دا Ù\85Ø® Ú\98غÙ\88رÙ\84 Ø´Ù\88Û\8c. ØªØ§Ø³Û\90 Ú©Ù\88Ù\84اÛ\8c Ø´Û\8c Ú\86Û\90 Ø¯ Ø¯Û\90 Ù\85Ø® Ø³Ø±Ø¬Ù\8aÙ\86Ù\87 Ù\88Ú¯ورۍ.',
 'tooltip-ca-history' => 'د دې مخ پخوانۍ بڼې',
 'tooltip-ca-protect' => 'دا مخ ژغورل',
 'tooltip-ca-unprotect' => 'د دې مخ ژغورنه بدلول',
-'tooltip-ca-delete' => 'دا Ù\85Ø® Ú\93Ù\86Ú«ول',
+'tooltip-ca-delete' => 'دا Ù\85Ø® Ú\93Ù\86Ú¯ول',
 'tooltip-ca-move' => 'همدا مخ لېږدول',
-'tooltip-ca-watch' => 'دا Ù\85Ø® Ù¾Ù\87 Ø®Ù¾Ù\84 Ú©ØªÙ\86Ù\84Ú\93Ú©Û\90 Ú«ډول',
+'tooltip-ca-watch' => 'دا Ù\85Ø® Ù¾Ù\87 Ø®Ù¾Ù\84 Ú©ØªÙ\86Ù\84Ú\93Ú©Û\90 Ú¯ډول',
 'tooltip-ca-unwatch' => 'همدا مخ خپل کتنلړ نه لرې کول',
 'tooltip-search' => '{{SITENAME}} پلټل',
 'tooltip-search-go' => 'په دې نوم د کټ مټ ورته مخ شتون په صورت کې، هماغه مخ ته ورځه',
@@ -2153,13 +2161,13 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'tooltip-t-contributions' => 'د دې کارن د ونډو لړليک کتل',
 'tooltip-t-emailuser' => 'دې کارن ته يو برېښليک لېږل',
 'tooltip-t-upload' => 'دوتنې پورته کول',
-'tooltip-t-specialpages' => 'د Ù¼Ù\88Ù\84Ù\88 Ú\81اÙ\86Ú«ړو پاڼو لړليک',
+'tooltip-t-specialpages' => 'د Ù¼Ù\88Ù\84Ù\88 Ú\81اÙ\86Ú¯ړو پاڼو لړليک',
 'tooltip-t-print' => 'د دې مخ چاپي بڼه',
 'tooltip-t-permalink' => 'د دې مخ د همدې بڼې تلپاتې تړنه',
-'tooltip-ca-nstab-main' => 'د Ù\85Ø® Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«ه کتل',
+'tooltip-ca-nstab-main' => 'د Ù\85Ø® Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯ه کتل',
 'tooltip-ca-nstab-user' => 'د کارن پاڼه کتل',
 'tooltip-ca-nstab-media' => 'د رسنۍ مخ کتل',
-'tooltip-ca-nstab-special' => 'دا Ù\8aÙ\88 Ú\81اÙ\86Ú«ړی مخ دی، تاسې په دې مخ کې سمون نه شی کولای.',
+'tooltip-ca-nstab-special' => 'دا Ù\8aÙ\88 Ú\81اÙ\86Ú¯ړی مخ دی، تاسې په دې مخ کې سمون نه شی کولای.',
 'tooltip-ca-nstab-project' => 'د پروژې مخ کتل',
 'tooltip-ca-nstab-image' => 'د دوتنې مخ کتل',
 'tooltip-ca-nstab-mediawiki' => 'د غونډال پيغامونه کتل',
@@ -2170,12 +2178,12 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'tooltip-save' => 'ستاسې بدلونونه خوندي کوي',
 'tooltip-preview' => 'ستاسې بدلونونه ښکاره کوي, لطفاً دا کړنه د خوندي کولو دمخه وکاروۍ! [alt-p]',
 'tooltip-diff' => 'دا هغه بدلونونه چې تاسې په متن کې ترسره کړي، ښکاره کوي. [alt-v]',
-'tooltip-compareselectedversions' => 'د Ù\87Ù\85دÛ\90 Ù\85Ø® Ø¯ Ø¯Ù\88Ù\88 Ù¼Ø§Ú©Ù\84 Ø´Ù\88Ù\8aÙ\88 Ø¨Ú¼Ù\88 ØªØ± Ù\85Û\90Ù\86Ú\81 ØªÙ\88Ù¾Ù\8aرÙ\88Ù\86Ù\87 Ù\88Ú«ورۍ.',
-'tooltip-watch' => 'دا Ù\85Ø® Ø³ØªØ§Ø³Û\90 Ú©ØªÙ\86Ù\84Ú\93 Ú©Û\90 Ù\88رګډوي [alt-w]',
+'tooltip-compareselectedversions' => 'د Ù\87Ù\85دÛ\90 Ù\85Ø® Ø¯ Ø¯Ù\88Ù\88 Ù¼Ø§Ú©Ù\84 Ø´Ù\88Ù\8aÙ\88 Ø¨Ú¼Ù\88 ØªØ± Ù\85Û\90Ù\86Ú\81 ØªÙ\88Ù¾Ù\8aرÙ\88Ù\86Ù\87 Ù\88Ú¯ورۍ.',
+'tooltip-watch' => 'دا Ù\85Ø® Ø³ØªØ§Ø³Û\90 Ú©ØªÙ\86Ù\84Ú\93 Ú©Û\90 Ù\88رگډوي [alt-w]',
 'tooltip-upload' => 'د پورته کولو پيل',
 'tooltip-rollback' => 'په همدې مخ کې "په شابېول" د وروستني ونډوال سمون (سمونونه) په يوه کلېک په څټ ورګرځوي.',
-'tooltip-undo' => '"Ù\86اکÚ\93" Ù\87Ù\85دا Ø³Ù\85Ù\88Ù\86 Ù¾Ø± Ø´Ø§ Ú«رځوي او د سمون کړکۍ د مخکتنې په بڼه پرانيزي.
-دا Ú©Ú\93Ù\86Ù\87 Ø¯ Ù\84Ù\86Ú\89Ù\8aز Ù¾Ù\87 Ø¨Ø±Ø®Ù\87 Ú©Û\90 Ø¯ Ø³Ù\85Ù\88Ù\86Ù\88Ù\86Ù\88 Ø¯ Ø³Ø¨Ø¨Ù\88Ù\86Ù\88 Ø¯ Ù\88رګډولو آسانتيا برابروي.',
+'tooltip-undo' => '"Ù\86اکÚ\93" Ù\87Ù\85دا Ø³Ù\85Ù\88Ù\86 Ù¾Ø± Ø´Ø§ Ú¯رځوي او د سمون کړکۍ د مخکتنې په بڼه پرانيزي.
+دا Ú©Ú\93Ù\86Ù\87 Ø¯ Ù\84Ù\86Ú\89Ù\8aز Ù¾Ù\87 Ø¨Ø±Ø®Ù\87 Ú©Û\90 Ø¯ Ø³Ù\85Ù\88Ù\86Ù\88Ù\86Ù\88 Ø¯ Ø³Ø¨Ø¨Ù\88Ù\86Ù\88 Ø¯ Ù\88رگډولو آسانتيا برابروي.',
 'tooltip-preferences-save' => 'غوره توبونه خوندي کول',
 'tooltip-summary' => 'يو لنډ لنډيز کښل',
 
@@ -2204,21 +2212,21 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'pageinfo-display-title' => 'ښکارېدونکی سرليک',
 'pageinfo-length' => 'مخ اوږدوالی (په بايټونو)',
 'pageinfo-article-id' => 'د مخ پېژند',
-'pageinfo-language' => 'د Ù\85Ø® Ø¯ Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«ې ژبه',
+'pageinfo-language' => 'د Ù\85Ø® Ø¯ Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯ې ژبه',
 'pageinfo-robot-policy' => 'د پلټن ماشين دريځ',
 'pageinfo-robot-index' => 'ليکلړوړ',
 'pageinfo-robot-noindex' => 'ليکلړوړ نه',
 'pageinfo-views' => 'د کتنو شمېر',
 'pageinfo-watchers' => 'د مخ د کتونکو شمېر',
-'pageinfo-redirects-name' => 'دې مخ ته ورګرځونې',
+'pageinfo-redirects-name' => 'دې مخ ته د ورگرځونو شمېر',
 'pageinfo-subpages-name' => 'دې مخ ته څېرمه مخونه',
 'pageinfo-firstuser' => 'مخ جوړونکی',
 'pageinfo-firsttime' => 'د مخ جوړېدنې نېټه',
-'pageinfo-lastuser' => 'Ù\88رÙ\88ستÙ\86Û\8c Ø³Ù\85Ù\88Ù\86Ú«ر',
+'pageinfo-lastuser' => 'Ù\88رÙ\88ستÙ\86Û\8c Ø³Ù\85Ù\88Ù\86Ú¯ر',
 'pageinfo-edits' => 'د ټولو سمونونو شمېر',
 'pageinfo-toolboxlink' => 'د مخ مالومات',
 'pageinfo-redirectsto-info' => 'مالومات',
-'pageinfo-contentpage' => 'Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«يز مخ کې شمېرل شوی',
+'pageinfo-contentpage' => 'Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯يز مخ کې شمېرل شوی',
 'pageinfo-contentpage-yes' => 'هو',
 'pageinfo-protect-cascading-yes' => 'هو',
 'pageinfo-category-files' => 'د دوتنو شمېر',
@@ -2235,8 +2243,8 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'markedaspatrolled' => 'دا مخ څارل شوی په نخښه کول',
 
 # Image deletion
-'filedeleteerror-short' => 'د Ø¯Ù\88تÙ\86Û\90 Ø¯ Ú\93Ù\86Ú«ولو ستونزه: $1',
-'filedeleteerror-long' => 'د Ø¯Ù\88تÙ\86Û\90 Ù¾Ù\87 Ú\93Ù\86Ú«ولو کې تېروتنې پېښې شوې:
+'filedeleteerror-short' => 'د Ø¯Ù\88تÙ\86Û\90 Ø¯ Ú\93Ù\86Ú¯ولو ستونزه: $1',
+'filedeleteerror-long' => 'د Ø¯Ù\88تÙ\86Û\90 Ù¾Ù\87 Ú\93Ù\86Ú¯ولو کې تېروتنې پېښې شوې:
 
 $1',
 
@@ -2258,8 +2266,8 @@ $1',
 # Special:NewFiles
 'newimages' => 'د نوو دوتنو انځورتون',
 'imagelisttext' => "دلته لاندې د '''$1''' {{PLURAL:$1|دوتنه|دوتنې}} يو لړليک دی چې اوډل شوي $2.",
-'newimages-summary' => 'Ù\87Ù\85دا Ú\81اÙ\86Ú«ړی مخ، وروستنۍ پورته شوې دوتنې ښکاره کوي.',
-'newimages-legend' => 'Ú\86اڼګر',
+'newimages-summary' => 'Ù\87Ù\85دا Ú\81اÙ\86Ú¯ړی مخ، وروستنۍ پورته شوې دوتنې ښکاره کوي.',
+'newimages-legend' => 'Ú\86اڼگر',
 'newimages-label' => 'د دوتنې نوم (يا د دې برخه):',
 'showhidebots' => '($1 روباټ)',
 'noimages' => 'د کتلو لپاره څه نشته.',
@@ -2279,20 +2287,20 @@ $1',
 'just-now' => 'همدا اوس',
 
 # Bad image list
-'bad_image_list' => 'بڼÙ\87 Ù\8aÛ\90 Ù¾Ù\87 Ù\84اÙ\86دÛ\90 ØªÙ\88Ú«ه ده:
+'bad_image_list' => 'بڼÙ\87 Ù\8aÛ\90 Ù¾Ù\87 Ù\84اÙ\86دÛ\90 ØªÙ\88Ú¯ه ده:
 
 يواځې د لړليک توکي (هغه کرښې چې پېلېږي پر *) په پام کې نيول شوي.
 بايد چې په يوه کرښه کې لومړنۍ تړنه د يوې خرابې دوتنې سره وي.
-Ù¾Ù\87 Ù\8aÙ\88Û\90 Ú©Ø±Ú\9aÛ\90 Ø¨Ø§Ù\86دÛ\90 Ù\87ر Ú\89Ù\88Ù\84 Ù\88رÙ\88ستÛ\8d ØªÚ\93Ù\86Û\90 Ø¨Ù\87 Ø¯ Ø§Ø³ØªØ«Ù\86ا Ù¾Ù\87 ØªÙ\88Ú«Ù\87 Ù\88Ú«Ú¼Ù\84اÛ\8c Ø´Ù\8aØ\8c Ø¯ Ø³Ø§Ø±Ù\8a Ù¾Ù\87 ØªÙ\88Ú«ه هغه مخونو کې چې يوه دوتنه پر کرښه پرته وي.',
+Ù¾Ù\87 Ù\8aÙ\88Û\90 Ú©Ø±Ú\9aÛ\90 Ø¨Ø§Ù\86دÛ\90 Ù\87ر Ú\89Ù\88Ù\84 Ù\88رÙ\88ستÛ\8d ØªÚ\93Ù\86Û\90 Ø¨Ù\87 Ø¯ Ø§Ø³ØªØ«Ù\86ا Ù¾Ù\87 ØªÙ\88Ú¯Ù\87 Ù\88Ú¯Ú¼Ù\84اÛ\8c Ø´Ù\8aØ\8c Ø¯ Ø³Ø§Ø±Ù\8a Ù¾Ù\87 ØªÙ\88Ú¯ه هغه مخونو کې چې يوه دوتنه پر کرښه پرته وي.',
 
 # Metadata
 'metadata' => 'مېټاډاټا',
-'metadata-help' => 'Ù\87Ù\85دا Ø¯Ù\88تÙ\86Ù\87 Ù\86Ù\88ر Ø§Ø¶Ø§Ù\81Ù\87 Ù\85اÙ\84Ù\88Ù\85ات Ù\87Ù\85 Ù\84رÙ\8aØ\8c Ú\86Û\90 Ú©Û\90داÛ\8c Ø´Ù\8a Ø³ØªØ§Ø³Û\90 Ø¯ Ú«Ú¼Ù\8aاÙ\84Ù\8aزÛ\90 Ú©Ø§Ù\85رÛ\90 Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ Ú\81Ù\8aرÚ\85ار Ù¾Ù\87 Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ø³Ø±Ù\87 Ø¯ Ú«ڼيالېدنې په وخت کې ورسره مل شوي.
-Ú©Ù\87 Ù\87Ù\85دا Ø¯Ù\88تÙ\86Ù\87 Ø¯ Ø®Ù¾Ù\84 Ø¢Ø±Ù\86Ù\8a Ø¯Ø±Ù\8aÚ\81 Ú\85Ø®Ù\87 Ø¨Ø¯Ù\84Ù\87 Ø´Ù\88Û\90 Ù\88Ù\8a Ù\86Ù\88 Ú\81Ù\8aÙ\86Û\90 ØªÙ\81صÙ\8aÙ\84Ù\88Ù\86Ù\87 Ø¨Ù\87 Ù¾Ù\87 Ø¨Ø¯Ù\84 Ø´Ù\88Ù\8a Ø¯Ù\88تÙ\86Ù\87 Ú©Û\90 Ù¾Ù\87 Ø¨Ø´Ù¾Ú\93Ù\87 ØªÙ\88Ú«ه نه وي.',
+'metadata-help' => 'Ù\87Ù\85دا Ø¯Ù\88تÙ\86Ù\87 Ù\86Ù\88ر Ø§Ø¶Ø§Ù\81Ù\87 Ù\85اÙ\84Ù\88Ù\85ات Ù\87Ù\85 Ù\84رÙ\8aØ\8c Ú\86Û\90 Ú©Û\90داÛ\8c Ø´Ù\8a Ø³ØªØ§Ø³Û\90 Ø¯ Ú¯Ú¼Ù\8aاÙ\84Ù\8aزÛ\90 Ú©Ø§Ù\85رÛ\90 Ø§Ù\88 Ù\8aا Ù\87Ù\85 Ø¯ Ú\81Ù\8aرÚ\85ار Ù¾Ù\87 Ú©Ø§Ø±Ù\88Ù\84Ù\88 Ø³Ø±Ù\87 Ø¯ Ú¯ڼيالېدنې په وخت کې ورسره مل شوي.
+Ú©Ù\87 Ù\87Ù\85دا Ø¯Ù\88تÙ\86Ù\87 Ø¯ Ø®Ù¾Ù\84 Ø¢Ø±Ù\86Ù\8a Ø¯Ø±Ù\8aÚ\81 Ú\85Ø®Ù\87 Ø¨Ø¯Ù\84Ù\87 Ø´Ù\88Û\90 Ù\88Ù\8a Ù\86Ù\88 Ú\81Ù\8aÙ\86Û\90 ØªÙ\81صÙ\8aÙ\84Ù\88Ù\86Ù\87 Ø¨Ù\87 Ù¾Ù\87 Ø¨Ø¯Ù\84 Ø´Ù\88Ù\8a Ø¯Ù\88تÙ\86Ù\87 Ú©Û\90 Ù¾Ù\87 Ø¨Ø´Ù¾Ú\93Ù\87 ØªÙ\88Ú¯ه نه وي.',
 'metadata-expand' => 'غځېدلی تفصيل ښکاره کړی',
 'metadata-collapse' => 'غځېدلی تفصيل پټ کړی',
-'metadata-fields' => 'د Ø§Ù\86Ú\81Ù\88ر Ù\85Û\90ټاÚ\89اټا Ú\89ګرÙ\88Ù\86Ù\87 Ú\86Û\90 Ù\84Ú\93Ù\84Ù\8aÚ© Ù\8aÛ\90 Ù¾Ù\87 Ù\87Ù\85دÛ\90 Ù¾Ù\8aغاÙ\85 Ú©Û\90 Ù¾Ù\87 Ù\84اÙ\86دÛ\90 ØªÙ\88Ú«Ù\87 Ø±Ø§ØºÙ\84Û\8c Ø¯ Ø§Ù\86Ú\81Ù\88ر Ù\85Ø® Ù¾Ù\87 Ú\9aکارÛ\90دÙ\86Ù\87 Ú©Û\90 Ø¨Ù\87 Ù\87غÙ\87 Ù\88خت Ù\88رګډ شي کله چې د مېټاډاټا لښتيال غځېږي.
\86Ù\88ر Ú\85Ù\87 Ø¨Ù\87 Ù¾Ù\87 ØªÙ\84Ù\88اÙ\84Ù\8aزÙ\87 ØªÙ\88Ú«ه پټ پاتې وي.
+'metadata-fields' => 'د Ø§Ù\86Ú\81Ù\88ر Ù\85Û\90ټاÚ\89اټا Ú\89گرÙ\88Ù\86Ù\87 Ú\86Û\90 Ù\84Ú\93Ù\84Ù\8aÚ© Ù\8aÛ\90 Ù¾Ù\87 Ù\87Ù\85دÛ\90 Ù¾Ù\8aغاÙ\85 Ú©Û\90 Ù¾Ù\87 Ù\84اÙ\86دÛ\90 ØªÙ\88Ú¯Ù\87 Ø±Ø§ØºÙ\84Û\8c Ø¯ Ø§Ù\86Ú\81Ù\88ر Ù\85Ø® Ù¾Ù\87 Ú\9aکارÛ\90دÙ\86Ù\87 Ú©Û\90 Ø¨Ù\87 Ù\87غÙ\87 Ù\88خت Ù\88رگډ شي کله چې د مېټاډاټا لښتيال غځېږي.
\86Ù\88ر Ú\85Ù\87 Ø¨Ù\87 Ù¾Ù\87 ØªÙ\84Ù\88اÙ\84Ù\8aزÙ\87 ØªÙ\88Ú¯ه پټ پاتې وي.
 * make
 * model
 * datetimeoriginal
@@ -2317,7 +2325,7 @@ $1',
 'exif-software' => 'کارېدلې ساوترۍ',
 'exif-artist' => 'ليکوال',
 'exif-copyright' => 'د رښتو خاوند',
-'exif-colorspace' => 'رÙ\86Ú« تشيال',
+'exif-colorspace' => 'رÙ\86Ú¯ تشيال',
 'exif-pixelydimension' => 'د انځور سور',
 'exif-pixelxdimension' => 'د انځور جګوالی',
 'exif-usercomment' => 'د کارن تبصرې',
@@ -2329,7 +2337,7 @@ $1',
 'exif-focallength' => 'د عدسيې کانوني واټن',
 'exif-flashenergy' => 'د فلش انرژي',
 'exif-filesource' => 'د دوتنې سرچينه',
-'exif-whitebalance' => 'د Ø³Ù¾Ù\8aÙ\86 Ø±Ù\86Ú« توازن',
+'exif-whitebalance' => 'د Ø³Ù¾Ù\8aÙ\86 Ø±Ù\86Ú¯ توازن',
 'exif-gpsaltituderef' => 'د لوړوالي سرچينه',
 'exif-gpsaltitude' => 'لوړوالی',
 'exif-gpsspeedref' => 'د سرعت يوون',
@@ -2365,7 +2373,7 @@ $1',
 'exif-giffilecomment' => 'د GIF دوتنې تبصره',
 
 'exif-copyrighted-true' => 'په رښتو سمبال',
-'exif-copyrighted-false' => 'ټولګړی شپول',
+'exif-copyrighted-false' => 'د خپراوي د رښتو دريځ نه دی ټاکل شوی',
 
 'exif-unknowndate' => 'نامالومه نېټه',
 
@@ -2476,7 +2484,7 @@ $1',
 
 # External editor support
 'edit-externally' => 'د باندنيو پروګرامونو په کارولو سره دا دوتنه سمول',
-'edit-externally-help' => 'د Ù\86Ù\88رÙ\88 Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87 [//www.mediawiki.org/wiki/Manual:External_editors Ø¯ Ø§Ù\85ستÙ\86Ù\88 Ù\84ارÚ\9aÙ\88Ù\88Ù\86Û\90] Ù\88Ú«ورۍ.',
+'edit-externally-help' => 'د Ù\86Ù\88رÙ\88 Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87 [//www.mediawiki.org/wiki/Manual:External_editors Ø¯ Ø§Ù\85ستÙ\86Ù\88 Ù\84ارÚ\9aÙ\88Ù\88Ù\86Û\90] Ù\88Ú¯ورۍ.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ټول',
@@ -2496,13 +2504,13 @@ $1',
 'confirmemail_error' => 'ستاسې د برېښليک پتې د تاييد په خوندي کولو کې يوه ستونزه رامېنڅ ته شوه.',
 'confirmemail_subject' => 'د {{SITENAME}} د برېښليک پتې تاييد',
 'confirmemail_body' => 'يو چا او يا هم کيدای شي چې تاسې پخپله، د $1 IP پتې نه،
-د "$2" Ù¾Ù\87 Ù\86اÙ\85Ù\87 Ù\8aÙ\88 Ú«ڼون په همدې بريښليک پتې د {{SITENAME}} په وېبځي کې ثبت کړی.
+د "$2" Ù¾Ù\87 Ù\86اÙ\85Ù\87 Ù\8aÙ\88 Ú¯ڼون په همدې بريښليک پتې د {{SITENAME}} په وېبځي کې ثبت کړی.
 
-دا Ú\86Û\90 Ù\85Ù\88Ú\96 Ø¯ Ø¯Û\90 Ù¾Ø®Ù\84Û\8c Ù\88Ú©Ú\93Ù\88 Ú\86Û\90 Ø¢Ù\8aا Ù\87Ù\85دا Ú«ڼون په رښتيا ستاسې دی او د دې لپاره چې د همدې برېښليک لپاره په {{SITENAME}} وېبځي کې کړنې فعاله کړو، نو پخپل کتنمل کې لاندينۍ تړنه پرانيزۍ:
+دا Ú\86Û\90 Ù\85Ù\88Ú\96 Ø¯ Ø¯Û\90 Ù¾Ø®Ù\84Û\8c Ù\88Ú©Ú\93Ù\88 Ú\86Û\90 Ø¢Ù\8aا Ù\87Ù\85دا Ú¯ڼون په رښتيا ستاسې دی او د دې لپاره چې د همدې برېښليک لپاره په {{SITENAME}} وېبځي کې کړنې فعاله کړو، نو پخپل کتنمل کې لاندينۍ تړنه پرانيزۍ:
 
 $3
 
-Ú©Ù\87 Ú\86Û\90رتÙ\87 ØªØ§Ø³Û\90 Ù\87Ù\85دا Ú«Ú¼Ù\88Ù\86 *Ù\86Ù\87 Ù\88Ù\8a Ø«Ø¨Øª Ú©Ú\93Û\8c\8c Ù\86Ù\88 Ø¯ Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾ØªÛ\90 Ø¯ Ù¾Ø®Ù\84Ù\8a Ø¯ Ù\84غÙ\88Ù\87 Ú©Ù\88لو لپاره همدا لاندې تړنه وڅارۍ:
+Ú©Ù\87 Ú\86Û\90رتÙ\87 ØªØ§Ø³Û\90 Ù\87Ù\85دا Ú¯Ú¼Ù\88Ù\86 *Ù\86Ù\87 Ù\88Ù\8a Ø«Ø¨Øª Ú©Ú\93Û\8c\8c Ù\86Ù\88 Ø¯ Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾ØªÛ\90 Ø¯ Ù¾Ø®Ù\84Ù\8a Ø¯ Ù\86اگارلو لپاره همدا لاندې تړنه وڅارۍ:
 
 $5
 
@@ -2546,7 +2554,7 @@ $5
 'table_pager_empty' => 'بې پايلو',
 
 # Auto-summaries
-'autosumm-blank' => 'د مخ مېنځپانګه ليرې شوه',
+'autosumm-blank' => 'مخ تش شو',
 'autosumm-replace' => "دا مخ د '$1' پرځای راوستل",
 'autoredircomment' => '[[$1]] ته وګرځولی شو',
 'autosumm-new' => 'د "$1" تورو مخ جوړ شو',
@@ -2577,7 +2585,7 @@ $5
 'watchlistedit-raw-titles' => 'سرليکونه:',
 'watchlistedit-raw-submit' => 'کتنلړ اوسمهاله کول',
 'watchlistedit-raw-done' => 'ستاسې کتنلړ اوسمهاله شو.',
-'watchlistedit-raw-added' => '{{PLURAL:$1|1 Ø³Ø±Ù\84Ù\8aÚ© Ù\88رګÚ\89 Ø´Ù\88|$1 Ø³Ø±Ù\84Ù\8aÚ©Ù\88Ù\86Ù\87 Ù\88رګډ شوه}}:',
+'watchlistedit-raw-added' => '{{PLURAL:$1|1 Ø³Ø±Ù\84Ù\8aÚ© Ù\88رگÚ\89 Ø´Ù\88|$1 Ø³Ø±Ù\84Ù\8aÚ©Ù\88Ù\86Ù\87 Ù\88رگډ شوه}}:',
 'watchlistedit-raw-removed' => '{{PLURAL:$1|1 سرليک ليرې شو|$1 سرليکونه ليري شوه}}:',
 
 # Watchlist editing tools
@@ -2625,30 +2633,30 @@ $5
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|خبرې اترې]])',
 
 # Core parser functions
-'duplicate-defaultsort' => '\'\'\'Ú«واښنه:\'\'\'د "$2" تلواليزه اوډون تڼۍ تر دې پخوا ټاکلې تلواليزه اوډون تڼۍ "$1" پر ځای چارنه کېږي.',
+'duplicate-defaultsort' => '\'\'\'Ú¯واښنه:\'\'\'د "$2" تلواليزه اوډون تڼۍ تر دې پخوا ټاکلې تلواليزه اوډون تڼۍ "$1" پر ځای چارنه کېږي.',
 
 # Special:Version
 'version' => 'بڼه',
-'version-extensions' => 'Ù\84Ú«ېدلي شاتاړي',
-'version-specialpages' => 'Ú\81اÙ\86Ú«ړي مخونه',
+'version-extensions' => 'Ù\84Ú¯ېدلي شاتاړي',
+'version-specialpages' => 'Ú\81اÙ\86Ú¯ړي مخونه',
 'version-skins' => 'پوښۍ',
 'version-other' => 'بل',
 'version-version' => '(بڼه $1)',
 'version-license' => 'منښتليک',
 'version-poweredby-credits' => "دا ويکي د '''[//www.mediawiki.org/ مېډياويکي]''' په سېک چلېږي، ټولې رښتې خوندي دي © 2001-$1 $2.",
 'version-poweredby-others' => 'نور',
-'version-license-info' => 'Ù\85Û\90Ú\89Ù\8aاÙ\88Ù\8aÚ©Ù\8a Ù\8aÙ\88 Ù\88Ú\93Ù\8aا Ø³Ø§Ù\88ترÛ\8c Ø¯Û\8cØ\9b ØªØ§Ø³Û\90 Ù\8aÛ\90 Ù¾Ù\87 Ú\89اÚ\89Ù\87 Ø²Ú\93Ù\87 Ø¯ GNU Ø¯ Ù¼Ù\88Ù\84Ú«ړو کارېدنو د منښتليک چې د وړيا ساوتريو د بنسټ له مخې خپور شوی، خپرولی او/يا بدلولی شی؛ د منښتليک ۲ بڼه او يا (ستاسې د خوښې) هر يوه وروستۍ بڼه.
+'version-license-info' => 'Ù\85Û\90Ú\89Ù\8aاÙ\88Ù\8aÚ©Ù\8a Ù\8aÙ\88 Ù\88Ú\93Ù\8aا Ø³Ø§Ù\88ترÛ\8c Ø¯Û\8cØ\9b ØªØ§Ø³Û\90 Ù\8aÛ\90 Ù¾Ù\87 Ú\89اÚ\89Ù\87 Ø²Ú\93Ù\87 Ø¯ GNU Ø¯ Ù¼Ù\88Ù\84Ú¯ړو کارېدنو د منښتليک چې د وړيا ساوتريو د بنسټ له مخې خپور شوی، خپرولی او/يا بدلولی شی؛ د منښتليک ۲ بڼه او يا (ستاسې د خوښې) هر يوه وروستۍ بڼه.
 
\85Û\90Ú\89Ù\8aاÙ\88Ù\8aÚ©Ù\8a Ø¯ Ú\9aÙ\87 Ú©Ø§Ø±Û\90دÙ\86Û\90 Ù¾Ù\87 Ù\86Ù\8aت Ø®Ù¾Ù\88ر Ø´Ù\88Û\8cØ\8c Ø®Ù\88 Ø¯ Ø¶Ù\85Ù\86Ù\8a Ø³Ù\88داګرÙ\8aز Ø§Ù\88 Ù\8aا Ø¯ Ú©Ù\88Ù\85 Ú\81اÙ\86Ú«Ú\93Ù\8a Ú©Ø§Ø± Ø¯ Ø¶Ù\85اÙ\86ت Ù\86Ù\87 Ù¾Ø±ØªÙ\87. Ø¯ Ù\86Ù\88رÙ\88 Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87 Ø¯ GNU Ø¯ Ù¼Ù\88Ù\84Ú«Ú\93Ù\88 Ú©Ø§Ø±Û\90دÙ\86Ù\88 Ù\85Ù\86Ú\9aتÙ\84Ù\8aÚ© Ù\88Ú«ورۍ.
\85Û\90Ú\89Ù\8aاÙ\88Ù\8aÚ©Ù\8a Ø¯ Ú\9aÙ\87 Ú©Ø§Ø±Û\90دÙ\86Û\90 Ù¾Ù\87 Ù\86Ù\8aت Ø®Ù¾Ù\88ر Ø´Ù\88Û\8cØ\8c Ø®Ù\88 Ø¯ Ø¶Ù\85Ù\86Ù\8a Ø³Ù\88داگرÙ\8aز Ø§Ù\88 Ù\8aا Ø¯ Ú©Ù\88Ù\85 Ú\81اÙ\86Ú¯Ú\93Ù\8a Ú©Ø§Ø± Ø¯ Ø¶Ù\85اÙ\86ت Ù\86Ù\87 Ù¾Ø±ØªÙ\87. Ø¯ Ù\86Ù\88رÙ\88 Ù\85اÙ\84Ù\88Ù\85اتÙ\88 Ù\84پارÙ\87 Ø¯ GNU Ø¯ Ù¼Ù\88Ù\84Ú¯Ú\93Ù\88 Ú©Ø§Ø±Û\90دÙ\86Ù\88 Ù\85Ù\86Ú\9aتÙ\84Ù\8aÚ© Ù\88Ú¯ورۍ.
 
-تاسÛ\90 Ø¨Ø§Ù\8aد Ø¯ Ø¯Û\90 Ù¾Ø±Ù\88Ú«رام سره يو [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License] ترلاسه کړی وي؛ که داسې نه وي، نو د وړيا ساوتريو بنسټ، Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ته يو ليک وليکۍ، او يا يې [//www.gnu.org/licenses/old-licenses/gpl-2.0.html پرليکه ولولۍ].',
+تاسÛ\90 Ø¨Ø§Ù\8aد Ø¯ Ø¯Û\90 Ù¾Ø±Ù\88Ú¯رام سره يو [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License] ترلاسه کړی وي؛ که داسې نه وي، نو د وړيا ساوتريو بنسټ، 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' => 'بڼه',
 
 # Special:FileDuplicateSearch
-'fileduplicatesearch' => 'د Ø¯Ù\88Ù\87 Ú«ونو دوتنو پلټنه',
-'fileduplicatesearch-legend' => 'د Ø¯Ù\88Ù\87 Ú«ونو دوتنو پلټنه',
+'fileduplicatesearch' => 'د Ø¯Ù\88Ù\87 Ú¯ونو دوتنو پلټنه',
+'fileduplicatesearch-legend' => 'د Ø¯Ù\88Ù\87 Ú¯ونو دوتنو پلټنه',
 'fileduplicatesearch-filename' => 'د دوتنې نوم:',
 'fileduplicatesearch-submit' => 'پلټل',
 'fileduplicatesearch-info' => '<span dir="ltr">$1 × $2</span> پېکسل<br />د دوتنې کچه: $3<br />ډول MIME: $4',
@@ -2656,14 +2664,14 @@ $5
 'fileduplicatesearch-noresults' => 'د "$1" په نوم دوتنه و نه موندل شوه.',
 
 # Special:SpecialPages
-'specialpages' => 'Ú\81اÙ\86Ú«ړي مخونه',
+'specialpages' => 'Ú\81اÙ\86Ú¯ړي مخونه',
 'specialpages-note' => '----
-* Ù\86Ù\88رÙ\85اÙ\84Ù\87 Ú\81اÙ\86Ú«ړي مخونه.
-* <strong class="mw-specialpagerestricted">Ù\85حدÙ\88دÙ\87 Ú\81اÙ\86Ú«ړي مخونه.</strong>
-* <span class="mw-specialpagecached">راÙ\86Ù\8aÙ\88Ù\84Ù\8a Ú\81اÙ\86Ú«ړي مخونه (کېدای شي منسوخ شوی وي).</span>',
+* Ù\86Ù\88رÙ\85اÙ\84Ù\87 Ú\81اÙ\86Ú¯ړي مخونه.
+* <strong class="mw-specialpagerestricted">Ù\85حدÙ\88دÙ\87 Ú\81اÙ\86Ú¯ړي مخونه.</strong>
+* <span class="mw-specialpagecached">راÙ\86Ù\8aÙ\88Ù\84Ù\8a Ú\81اÙ\86Ú¯ړي مخونه (کېدای شي منسوخ شوی وي).</span>',
 'specialpages-group-maintenance' => 'د څارنې راپورونه',
-'specialpages-group-other' => 'Ù\86Ù\88ر Ú\81اÙ\86Ú«ړي مخونه',
-'specialpages-group-login' => 'Ù\86Ù\86Ù\88تÙ\84 / Ú«ڼون جوړول',
+'specialpages-group-other' => 'Ù\86Ù\88ر Ú\81اÙ\86Ú¯ړي مخونه',
+'specialpages-group-login' => 'Ù\86Ù\86Ù\88تÙ\84 / Ú¯ڼون جوړول',
 'specialpages-group-changes' => 'وروستي بدلونونه او يادښتونه',
 'specialpages-group-media' => 'د رسنۍ راپورونه او پورته کېدنې',
 'specialpages-group-users' => 'کارنان او رښتې',
@@ -2677,20 +2685,23 @@ $5
 'intentionallyblankpage' => 'همدا مخ په لوی لاس تش پرېښودل شوی دی',
 
 # External image whitelist
-'external_image_whitelist' => ' #دا Ú©Ø±Ú\9aÙ\87 Ú\86Û\90 Ú\85Ù\86Ú«ه ده، همداسې پرېږدۍ<pre>
-#Ù\84اÙ\86دÛ\90 Ø¯ Ù\85Ù\86ظÙ\85Ù\88 Ø§ØµØ·Ù\84احګانو ټوټې (يوازې هغه برخه چې د // په مېنځ کې ليکلې) ځای پر ځای کړی
+'external_image_whitelist' => ' #دا Ú©Ø±Ú\9aÙ\87 Ú\86Û\90 Ú\85Ù\86Ú¯ه ده، همداسې پرېږدۍ<pre>
+#Ù\84اÙ\86دÛ\90 Ø¯ Ù\85Ù\86ظÙ\85Ù\88 Ø§ØµØ·Ù\84احگانو ټوټې (يوازې هغه برخه چې د // په مېنځ کې ليکلې) ځای پر ځای کړی
 #دا به د باندنيو انځورونو د يو آر اېل (hotlinked) سره مطابقه شي 
-#Ù\87غÙ\87 Ú\85Ù\87 Ú\86Û\90 Ù\85طابÙ\82ت Ù\84رÙ\8a Ù\87غÙ\87 Ø¨Ù\87 Ø¯ Ø§Ù\86Ú\81Ù\88رÙ\88Ù\86Ù\88 Ù¾Ù\87 ØªÙ\88Ú«ه ښکاره شي، کوم چې مطابقت نلري نو يوازې د انځور تړنه به ښکاره کېږي
-#Ù\87غÙ\87 Ú©Ø±Ú\9aÛ\90 Ú\86Û\90 Ù¾Ù\87 # Ù¾Ù\8aÙ\84 Ú©Û\90Ú\96Ù\8a Ø¯ ØªØ¨ØµØ±Ù\88 Ù¾Ù\87 ØªÙ\88Ú«ه په نظر کې نيول کېږي
+#Ù\87غÙ\87 Ú\85Ù\87 Ú\86Û\90 Ù\85طابÙ\82ت Ù\84رÙ\8a Ù\87غÙ\87 Ø¨Ù\87 Ø¯ Ø§Ù\86Ú\81Ù\88رÙ\88Ù\86Ù\88 Ù¾Ù\87 ØªÙ\88Ú¯ه ښکاره شي، کوم چې مطابقت نلري نو يوازې د انځور تړنه به ښکاره کېږي
+#Ù\87غÙ\87 Ú©Ø±Ú\9aÛ\90 Ú\86Û\90 Ù¾Ù\87 # Ù¾Ù\8aÙ\84 Ú©Û\90Ú\96Ù\8a Ø¯ ØªØ¨ØµØ±Ù\88 Ù¾Ù\87 ØªÙ\88Ú¯ه په نظر کې نيول کېږي
 #دا کرښې د غټو تورو او وړو تورو سره حساسې نه دي
 
-#Ù¼Ù\88Ù\84Û\90 regex Ù¼Ù\88Ù¼Û\90 Ø¯ Ø¯ØºÛ\90 Ú©Ø±Ú\9aÛ\90 Ù\86Ù\87 Ù¾Ù\88رتÙ\87 Ú\81اÛ\8c Ù¾Ø± Ú\81اÛ\8c Ú©Ú\93Û\8c. Ø¯Ø§ Ú©Ø±Ú\9aÙ\87 Ú\86Û\90 Ú\85Ù\86Ú«ه ده، همداسې يې پرېږدۍ</pre>',
+#Ù¼Ù\88Ù\84Û\90 regex Ù¼Ù\88Ù¼Û\90 Ø¯ Ø¯ØºÛ\90 Ú©Ø±Ú\9aÛ\90 Ù\86Ù\87 Ù¾Ù\88رتÙ\87 Ú\81اÛ\8c Ù¾Ø± Ú\81اÛ\8c Ú©Ú\93Û\8c. Ø¯Ø§ Ú©Ø±Ú\9aÙ\87 Ú\86Û\90 Ú\85Ù\86Ú¯ه ده، همداسې يې پرېږدۍ</pre>',
 
 # Special:Tags
-'tag-filter' => '[[Special:Tags|Ù\86Ú\9aÙ\84Ù\86]] Ú\86اڼګر:',
-'tag-filter-submit' => 'Ú\86اڼګر',
+'tag-filter' => '[[Special:Tags|Ù\86Ú\9aÙ\84Ù\86]] Ú\86اڼگر:',
+'tag-filter-submit' => 'Ú\86اڼگر',
 'tags-display-header' => 'د بدلون په لړليکونو کې ښکارېدنه',
-'tags-description-header' => 'د مانا بشپړه څرګندونه',
+'tags-description-header' => 'د مانا بشپړه څرگندونه',
+'tags-active-header' => 'فعال؟',
+'tags-active-yes' => 'هو',
+'tags-active-no' => 'نه',
 'tags-edit' => 'سمول',
 'tags-hitcount' => '$1 {{PLURAL:$1|بدلون|بدلونونه}}',
 
@@ -2705,17 +2716,16 @@ $5
 
 # Database error messages
 'dberr-header' => 'دا ويکي يوه ستونزه لري',
-'dberr-problems' => 'اوبخښۍ!
-دم مهال دا وېبپاڼه د تخنيکي ستونزو سره مخامخ شوې.',
-'dberr-usegoogle' => 'تاسې کولای شی چې هم مهاله د ګووګل له لخوا هم د پلټنې هڅه وکړۍ.',
+'dberr-problems' => 'اوبخښۍ! دم مهال دا وېبپاڼه د تخنيکي ستونزو سره مخامخ شوې.',
+'dberr-usegoogle' => 'تاسې کولای شی چې هم مهاله د گووگل له لخوا هم د پلټنې هڅه وکړۍ.',
 
 # HTML forms
 'htmlform-invalid-input' => 'ستاسې ځينې ورکړېينې ستونزې لري',
-'htmlform-select-badoption' => 'Ú\85Ù\87 Ú\86Û\90 ØªØ§Ø³Û\90 Ú\81اÙ\86Ú«ړي کړل هغه د منلو وړ خوښنه نه ده.',
-'htmlform-int-invalid' => 'Ú©Ù\88Ù\85 Ú\85Ù\87 Ú\86Û\90 ØªØ§Ø³Ù\88 Ú\81اÙ\86Ú«ړي کړي هغه يوه سمه شمېره نه ده.',
-'htmlform-float-invalid' => 'Ú©Ù\88Ù\85 Ú\85Ù\87 Ú\86Û\90 ØªØ§Ø³Ù\88 Ú\81اÙ\86Ú«ړي کړي هغه يوه شمېره نه ده.',
-'htmlform-int-toolow' => 'Ú©Ù\88Ù\85 Ø§Ø±Ø²Ú\9aت Ú\86Û\90 ØªØ§Ø³Û\90 Ú\81اÙ\86Ú«ړی کړی هغه تر $1 لږ دی',
-'htmlform-int-toohigh' => 'Ú©Ù\88Ù\85 Ø§Ø±Ø²Ú\9aت Ú\86Û\90 ØªØ§Ø³Û\90 Ú\81اÙ\86Ú«ړی کړی هغه تر $1 ډېر  دی',
+'htmlform-select-badoption' => 'Ú\85Ù\87 Ú\86Û\90 ØªØ§Ø³Û\90 Ú\81اÙ\86Ú¯ړي کړل هغه د منلو وړ خوښنه نه ده.',
+'htmlform-int-invalid' => 'Ú©Ù\88Ù\85 Ú\85Ù\87 Ú\86Û\90 ØªØ§Ø³Ù\88 Ú\81اÙ\86Ú¯ړي کړي هغه يوه سمه شمېره نه ده.',
+'htmlform-float-invalid' => 'Ú©Ù\88Ù\85 Ú\85Ù\87 Ú\86Û\90 ØªØ§Ø³Ù\88 Ú\81اÙ\86Ú¯ړي کړي هغه يوه شمېره نه ده.',
+'htmlform-int-toolow' => 'Ú©Ù\88Ù\85 Ø§Ø±Ø²Ú\9aت Ú\86Û\90 ØªØ§Ø³Û\90 Ú\81اÙ\86Ú¯ړی کړی هغه تر $1 لږ دی',
+'htmlform-int-toohigh' => 'Ú©Ù\88Ù\85 Ø§Ø±Ø²Ú\9aت Ú\86Û\90 ØªØ§Ø³Û\90 Ú\81اÙ\86Ú¯ړی کړی هغه تر $1 ډېر  دی',
 'htmlform-required' => 'دې ارزښت ته اړتيا ده',
 'htmlform-submit' => 'سپارل',
 'htmlform-reset' => 'بدلونونه ناکړل',
@@ -2724,21 +2734,23 @@ $5
 'htmlform-yes' => 'هو',
 
 # New logging system
-'logentry-delete-delete' => '$1 Ø¯ $3 Ù\85Ø® {{GENDER:$2|Ú\93Ù\86Ú« کړ}}',
-'revdelete-content-hid' => 'Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«ه پټېدلې',
+'logentry-delete-delete' => '$1 Ø¯ $3 Ù\85Ø® {{GENDER:$2|Ú\93Ù\86Ú¯ کړ}}',
+'revdelete-content-hid' => 'Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯ه پټېدلې',
 'revdelete-uname-hid' => 'کارن نوم پټ شوی',
-'revdelete-content-unhid' => 'Ù\85Û\90Ù\86Ú\81پاÙ\86Ú«ه ښکاره شوی',
+'revdelete-content-unhid' => 'Ù\85Û\90Ù\86Ú\81پاÙ\86Ú¯ه ښکاره شوی',
 'revdelete-uname-unhid' => 'ښکاره کارن-نوم',
 'logentry-move-move' => '$1 د $3 مخ $4 ته {{GENDER:$2|ولېږداوه}}',
-'logentry-newusers-newusers' => 'د $1 کارن ګڼون {{GENDER:$2|جوړ شو}}',
-'logentry-newusers-create' => 'د $1 کارن ګڼون {{GENDER:$2|جوړ شو}}',
-'logentry-newusers-autocreate' => 'د $1 ګڼون په اتوماتيک ډول {{GENDER:$2|جوړ شو}}',
+'logentry-move-move-noredirect' => '$1 پرته له دې چې يو مخ گرځونی پرېږدي له $3 څخه $4 ته مخ {{GENDER:$2|ولېږداوه}}',
+'logentry-move-move_redir-noredirect' => '$1 پرته له دې چې يو مخ گرځونی پرېږدي له $3 څخه $4 ته مخ {{GENDER:$2|ولېږداوه}}',
+'logentry-newusers-newusers' => 'د $1 کارن گڼون {{GENDER:$2|جوړ شو}}',
+'logentry-newusers-create' => 'د $1 کارن گڼون {{GENDER:$2|جوړ شو}}',
+'logentry-newusers-autocreate' => 'د $1 گڼون په اتوماتيک ډول {{GENDER:$2|جوړ شو}}',
 'rightsnone' => '(هېڅ)',
 
 # Feedback
 'feedback-subject' => 'سکالو:',
 'feedback-message' => 'پيغام:',
-'feedback-cancel' => 'Ù\86اګارل',
+'feedback-cancel' => 'Ù\86اگارل',
 'feedback-close' => 'ترسره شو',
 
 # Search suggestions
@@ -2754,7 +2766,7 @@ $5
 'api-error-mustbeloggedin' => 'د دوتنو د پورته کولو لپاره بايد تاسې غونډال کې ننوتلی اوسۍ.',
 'api-error-unclassified' => 'يوه ناڅرګنده تېروتنه رامېنځته شوه.',
 'api-error-unknown-code' => 'ناڅرګنده تېروتنه: "$1"',
-'api-error-unknown-warning' => 'Ù\86اÚ\85رګÙ\86دÙ\87 Ú«واښنه: "$1".',
+'api-error-unknown-warning' => 'Ù\86اÚ\85رگÙ\86دÙ\87 Ú¯واښنه: "$1".',
 'api-error-unknownerror' => 'ناڅرګنده تېروتنه: "$1".',
 
 # Durations
index 2043e04..98598f3 100644 (file)
@@ -326,7 +326,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Esconder edições patrulhadas nas mudanças recentes',
 'tog-newpageshidepatrolled' => 'Esconder páginas patrulhadas na lista de páginas novas',
 'tog-extendwatchlist' => 'Listagem expandida de todas as mudanças às páginas vigiadas, não apenas das mais recentes',
-'tog-usenewrc' => 'Agrupar alterações por página nas mudanças recentes e páginas vigiadas (requer JavaScript)',
+'tog-usenewrc' => 'Agrupar alterações por página nas mudanças recentes e páginas vigiadas',
 'tog-numberheadings' => 'Auto-numerar cabeçalhos',
 'tog-showtoolbar' => 'Mostrar barra de edição (JavaScript)',
 'tog-editondblclick' => 'Editar páginas quando houver um clique duplo (JavaScript)',
@@ -367,7 +367,7 @@ $messages = array(
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Nunca',
-'underline-default' => 'Aspeto ou padrão do browser',
+'underline-default' => 'Usar opção padrão do tema ou do browser',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Fonte de edição:',
@@ -1758,7 +1758,7 @@ Esta informação será pública.',
 'rc_categories_any' => 'Qualquer',
 'rc-change-size-new' => '$1 {{PLURAL:$1|byte|bytes}} após mudança',
 'newsectionsummary' => '/* $1 */ nova seção',
-'rc-enhanced-expand' => 'Mostrar detalhes (requer JavaScript)',
+'rc-enhanced-expand' => 'Mostrar detalhes',
 'rc-enhanced-hide' => 'Esconder detalhes',
 'rc-old-title' => 'originalmente criado como "$1"',
 
@@ -2532,7 +2532,7 @@ alguém editou ou já reverteu a página.
 A última edição foi de [[User:$3|$3]] ([[User talk:$3|discussão]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "O resumo da edição era: \"''\$1''\".",
 'revertpage' => 'Foram revertidas as edições de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc]]) para a última versão por [[User:$1|$1]]',
-'revertpage-nouser' => 'Revertidas as edições de um usuário ocultado para a última revisão por [[User:$1|$1]]',
+'revertpage-nouser' => 'Revertidas as edições de um usuário ocultado para a última revisão {{GENDER:$1|pelo|pela|por}} [[User:$1|$1]]',
 'rollback-success' => 'Foram revertidas as edições de $1, com o conteúdo passando a estar como na última edição de $2.',
 
 # Edit tokens
index 07c6ef5..1a72451 100644 (file)
@@ -45,6 +45,7 @@
  * @author Luckas Blade
  * @author Malafaya
  * @author ManoDbo
+ * @author Matheus Sousa L.T
  * @author McDutchie
  * @author MetalBrasil
  * @author MisterSanderson
@@ -536,7 +537,7 @@ $messages = array(
 'unprotectthispage' => 'Alterar a proteção desta página',
 'newpage' => 'Página nova',
 'talkpage' => 'Dialogar sobre esta página',
-'talkpagelinktext' => 'disc',
+'talkpagelinktext' => 'Discussão',
 'specialpage' => 'Página especial',
 'personaltools' => 'Ferramentas pessoais',
 'postcomment' => 'Nova seção',
@@ -573,7 +574,7 @@ $1',
 # 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).
 'aboutsite' => 'Sobre {{SITENAME}}',
 'aboutpage' => 'Project:Sobre',
-'copyright' => 'Conteúdo disponível sob $1.',
+'copyright' => 'Conteúdo disponível sob $1, salvo indicação em contrário.',
 'copyrightpage' => '{{ns:project}}:Direitos_de_autor',
 'currentevents' => 'Eventos atuais',
 'currentevents-url' => 'Project:Eventos atuais',
@@ -657,6 +658,10 @@ Uma lista de páginas especiais válidas poderá ser encontrada em [[Special:Spe
 # General errors
 'error' => 'Erro',
 'databaseerror' => 'Erro no banco de dados',
+'databaseerror-text' => 'Houve um erro na consulta ao banco de dados.
+Isto pode indicar um bug no software.',
+'databaseerror-textcl' => 'Houve um erro na consulta ao banco de dados.',
+'databaseerror-query' => 'Consulta: $1',
 'databaseerror-function' => 'Função: $1',
 'databaseerror-error' => 'Erro: $1',
 'laggedslavemode' => 'Aviso: a página poderá não conter atualizações recentes.',
@@ -1566,6 +1571,7 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'prefs-displayrc' => 'Opções de exibição',
 'prefs-displaysearchoptions' => 'Opções de exibição',
 'prefs-displaywatchlist' => 'Opções de exibição',
+'prefs-tokenwatchlist' => 'Senha',
 'prefs-diffs' => 'Diferenças',
 'prefs-help-prefershttps' => 'Esta preferência terá efeito no seu próximo início de sessão.',
 
@@ -1725,8 +1731,8 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'action-block' => 'impedir que este usuário edite',
 'action-protect' => 'alterar os níveis de proteção desta página',
 'action-rollback' => 'reverter rapidamente as edições do último usuário que editou uma página em particular',
-'action-import' => 'importar esta página a partir de outro wiki',
-'action-importupload' => 'importar esta página através do carregamento de um arquivo',
+'action-import' => 'importar páginas a partir de outra wiki',
+'action-importupload' => 'importar páginas de um arquivo carregado',
 'action-patrol' => 'marcar as edições de outros usuários como patrulhadas',
 'action-autopatrol' => 'ter suas edições marcadas como patrulhadas',
 'action-unwatchedpages' => 'ver a lista de páginas não-vigiadas',
@@ -2271,6 +2277,7 @@ Entradas <del>riscadas</del> foram resolvidas.',
 'listusers' => 'Lista de usuários',
 'listusers-editsonly' => 'Mostrar apenas usuários com edições',
 'listusers-creationsort' => 'Ordenar por data de criação',
+'listusers-desc' => 'Listar em ordem decrescente',
 'usereditcount' => '$1 {{PLURAL:$1|edição|edições}}',
 'usercreated' => '{{GENDER:$3|Criado|Criada}} em $1 às $2',
 'newpages' => 'Páginas novas',
@@ -2557,7 +2564,7 @@ alguém já editou ou reverteu a página.
 A última edição da página foi feita por [[User:$3|$3]] ([[User talk:$3|discussão]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "O sumário de edição era: \"''\$1''\".",
 'revertpage' => 'Foram revertidas as edições de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc]]) para a última versão por [[User:$1|$1]]',
-'revertpage-nouser' => 'Revertidas as edições por um usuário oculto para a última revisão por [[User:$1|$1]]',
+'revertpage-nouser' => 'Revertidas as edições de um usuário oculto para a última revisão de {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Foram revertidas as edições de $1, com o conteúdo passando a estar como na última edição de $2.',
 
 # Edit tokens
@@ -4061,6 +4068,7 @@ Em conjunto com este programa deve ter recebido [{{SERVER}}{{SCRIPTPATH}}/COPYIN
 'dberr-problems' => 'Desculpe! Este sítio está passando por dificuldades técnicas.',
 'dberr-again' => 'Experimente esperar alguns minutos e atualizar.',
 'dberr-info' => '(Não foi possível contactar o servidor de base de dados: $1)',
+'dberr-info-hidden' => '(Não foi possível contatar o banco de dados do servidor)',
 'dberr-usegoogle' => 'Você pode tentar pesquisar no Google entretanto.',
 'dberr-outofdate' => 'Note que os seus índices relativos ao nosso conteúdo podem estar desatualizados.',
 'dberr-cachederror' => 'A seguinte página é uma cópia em cache da página pedida e pode não ser atual.',
@@ -4202,6 +4210,10 @@ Caso contrário, você poderá usar o formulário simplificado a seguir. Seu com
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|segundo|segundos}}',
 'limitreport-walltime' => 'Tempo de uso real',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|segundo|segundos}}',
-'limitreport-postexpandincludesize-value' => '$1/$2 bytes',
+'limitreport-ppvisitednodes' => 'Número de nós visitados pelo pré-processador',
+'limitreport-ppgeneratednodes' => 'Número de nós gerados pelo pré-processador',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
+'limitreport-expansiondepth' => 'Máxima profundidade de expansão',
 
 );
index c2637e9..0563b82 100644 (file)
@@ -483,9 +483,10 @@ This can also appear in the credits page if the credits feature is enabled,for e
 {{Identical|My pages}}',
 'qbspecialpages' => '{{Identical|Special page}}',
 'faq' => "FAQ is short for ''frequently asked questions''.",
-'faqpage' => "FAQ is short for ''frequently asked questions''. This page is only linked in CologneBlue (an old skin), not in Monobook or Vector.
+'faqpage' => '{{doc-important|Do not translate <code>Project:</code> part.}}
+"FAQ" is short for "frequently asked questions".
 
-{{doc-important|Do not translate <tt>Project:</tt> part.}}",
+This page is only linked in CologneBlue (an old skin), not in Monobook or Vector.',
 
 # Vector skin
 'vector-action-addsection' => 'Used in the Vector skin. See for example {{canonicalurl:Talk:Main_Page|useskin=vector}}',
@@ -585,7 +586,8 @@ See also:
 {{Identical|Create}}',
 'editthispage' => 'This is the "edit" link as used in the Cologne Blue skin, at the bottom of the page.
 
-See {{msg-mw|Create-this-page}} for when the page does not exist.',
+See {{msg-mw|Create-this-page}} for when the page does not exist.
+{{Identical|Edit this page}}',
 'create-this-page' => 'In the Cologne Blue skin this is the text for the link leading to the edit form on pages that have not yet been created, at the bottom of the page. See {{msg-mw|editthispage}} for when the page already exists.
 {{Identical|Createpage}}',
 'delete' => 'Name of the Delete tab shown for admins. Should be in the infinitive mood.
@@ -658,7 +660,7 @@ See also:
 'viewhelppage' => 'Used as link text in Talk page of help page.',
 'categorypage' => 'Used as link text in Talk page of category page.',
 'viewtalkpage' => 'Used in Standard (a.k.a. Classic) skin as a link to talk page for all namespaces, in edit or history mode.',
-'otherlanguages' => 'This message is shown under the toolbox. It is used if there are interwiki links added to the page, like <tt><nowiki>[[</nowiki>en:Interwiki article]]</tt>.
+'otherlanguages' => 'This message is shown under the toolbox. It is used if there are interwiki links added to the page, like <code><nowiki>[[</nowiki>en:Interwiki article]]</code>.
 {{Identical|Otherlanguages}}',
 'redirectedfrom' => 'The text displayed when a certain page is redirected to another page. Parameters:
 * $1 - the name of the page user came from',
@@ -707,8 +709,10 @@ For explanation of 'lock' see [[w:Lock_(computer_science)|wikipedia]].",
 'aboutpage' => 'Used as the target of the link that appears at the footer of every page on the wiki (in most of  the skins) and leads to the page that contains the site description. Therefore the content should be the same with the page name of the site description page. Only the message in the [[mw:Manual:$wgLanguageCode|site language]]  ([[MediaWiki:Aboutpage]]) is used. The link label is {{msg-mw|aboutsite}}.
 
 {{doc-important|Do not translate "Project:" part, for this is the namespace prefix.}}',
-'copyright' => 'Parameters:
-* $1 - license name',
+'copyright' => "Parameters:
+* $1 - license name
+'''See also'''
+* {{msg-mw|Mobile-frontend-copyright}}",
 'copyrightpage' => '{{doc-important|Do not change <nowiki>{{ns:project}}</nowiki>}}
 
 {{Identical|Copyright}}',
@@ -720,15 +724,18 @@ See also:
 * {{msg-mw|Currentevents}}
 * {{msg-mw|Accesskey-n-currentevents}}
 * {{msg-mw|Tooltip-n-currentevents}}',
-'currentevents-url' => "Target page of ''CurrentEvents'' in the sidebar. See also {{msg-mw|currentevents}}.
-{{doc-important|Do not translate the \"<tt>Project:</tt>\" part.}}",
+'currentevents-url' => '{{doc-important|Do not translate the <code>Project:</code> part.}}
+Target page of "CurrentEvents" in the sidebar.
+
+See also:
+* {{msg-mw|Currentevents}}',
 'disclaimers' => 'Used as display name for the link to [[{{MediaWiki:Disclaimerpage}}]] shown at the bottom of every page on the wiki. Example [[{{MediaWiki:Disclaimerpage}}|{{MediaWiki:Disclaimers}}]].
 {{Identical|Disclaimer}}',
-'disclaimerpage' => 'Used as page for that contains the site disclaimer. Used at the bottom of every page on the wiki. Example: [[{{MediaWiki:Disclaimerpage}}|{{MediaWiki:Disclaimers}}]].
-{{doc-important|Do not change the "<tt>Project:</tt>" part.}}',
+'disclaimerpage' => '{{doc-important|Do not change the <code>Project:</code> part.}}
+Used as page for that contains the site disclaimer. Used at the bottom of every page on the wiki. Example: [[{{MediaWiki:Disclaimerpage}}|{{MediaWiki:Disclaimers}}]].',
 'edithelp' => 'This is the text that appears on the editing help link that is near the bottom of the editing page',
-'helppage' => 'The link destination used by default in the sidebar, and in {{msg-mw|noarticletext}}.
-{{doc-important|Do not change the "<tt>Help:</tt>" part.}}
+'helppage' => '{{doc-important|Do not change the <code>Help:</code> part.}}
+The link destination used by default in the sidebar, and in {{msg-mw|Noarticletext}}.
 {{Identical|HelpContent}}',
 'mainpage' => 'Defines the link and display name of the main page of the wiki. Shown as the top link in the navigation part of the interface. Please do not change it too often, that could break things!
 
@@ -746,8 +753,10 @@ See also:
 * {{msg-mw|Accesskey-n-mainpage-description}}
 * {{msg-mw|Tooltip-n-mainpage-description}}
 {{Identical|Main page}}',
-'policy-url' => 'Description: The URL of the project page describing the policies of the wiki. This is shown below every page (the left link).
-{{doc-important|Do not change the "<tt>Project:</tt>" part.}}',
+'policy-url' => '{{doc-important|Do not change the <code>Project:</code> part.}}
+The URL of the project page describing the policies of the wiki.
+
+This is shown below every page (the left link).',
 'portal' => "Display name for the 'Community portal', shown in the sidebar menu of all pages. The target page is meant to be a portal for users where useful links are to be found about the wiki's operation.
 
 See also:
@@ -755,8 +764,8 @@ See also:
 * {{msg-mw|Portal-url}}
 * {{msg-mw|Accesskey-n-portal}}
 * {{msg-mw|Tooltip-n-portal}}",
-'portal-url' => 'Description: The URL of the community portal. This is shown in the sidebar by default (removed on translatewiki.net).
-{{doc-important|Do not change the "<tt>Project:</tt>" part.}}
+'portal-url' => '{{doc-important|Do not change the <code>Project:</code> part.}}
+Description: The URL of the community portal. This is shown in the sidebar by default (removed on translatewiki.net).
 
 See also:
 * {{msg-mw|Portal}}
@@ -765,8 +774,10 @@ See also:
 * {{msg-mw|Tooltip-n-portal}}',
 'privacy' => 'Used as page name and link at the bottom of each wiki page. The page contains a legal notice providing information about the use of personal information by the website owner.of the site. Example: [[Privacy policy]].
 {{Identical|Privacy policy}}',
-'privacypage' => 'Used as page for that contains the privacy policy. Used at the bottom of every page on the wiki. Example: [[{{MediaWiki:Privacypage}}|{{MediaWiki:Privacy}}]].
-{{doc-important|Do not change the "<tt>Project:</tt>" part.}}',
+'privacypage' => '{{doc-important|Do not change the <code>Project:</code> part.}}
+Used as page for that contains the privacy policy. Used at the bottom of every page on the wiki.
+
+Example: [[{{MediaWiki:Privacypage}}|{{MediaWiki:Privacy}}]].',
 
 'badaccess' => 'Title shown within page indicating unauthorized access.
 {{Identical|Permission error}}',
@@ -1030,9 +1041,12 @@ See example [{{canonicalurl:Main_page|action=x}} action=x].',
 'nosuchactiontext' => 'This error is shown when trying to open a page with invalid "action" parameter, e.g. [{{canonicalurl:Main_page|action=x}} action=x].
 * The title of this error is the message {{msg-mw|nosuchaction}}.',
 'nosuchspecialpage' => 'The title of the error you get when trying to open a special page which does not exist. The text of the warning is the message {{msg-mw|nospecialpagetext}}. Example: [[Special:Nosuchpage]]',
-'nospecialpagetext' => '{{doc-important|Link <code><nowiki>[[Special:SpecialPages|{{int:specialpages}}]]</nowiki></code> should remain untranslated.}}
+'nospecialpagetext' => '{{doc-important|Do not translate <code><nowiki>[[Special:SpecialPages|{{int:specialpages}}]]</nowiki></code>.}}
 This error is shown when trying to open a special page which does not exist, e.g. [[Special:Nosuchpage]].
-* The title of this error is the message {{msg-mw|nosuchspecialpage}}.',
+
+Refers to {{msg-mw|Specialpages}}.
+
+The title of this error is the message {{msg-mw|Nosuchspecialpage}}.',
 
 # General errors
 'error' => '{{Identical|Error}}',
@@ -1339,6 +1353,16 @@ See example: [[Special:UserLogin]]
 
 See also:
 * {{msg-mw|Helplogin-url}}',
+'userlogin-loggedin' => 'Used as warning on [[Special:UserLogin]] when the current user is already logged in.
+
+Followed by the Login form.
+
+See example: [[Special:UserLogin]].
+
+Parameters:
+* $1 - user name (used for display and for gender support)',
+'userlogin-createanother' => 'Used as label for the button on [[Special:UserLogin]] shown when the current user is already logged in.
+{{Identical|Create another account}}',
 'createacct-join' => 'Subheading of vertical-layout create account form encouraging user to join the wiki.
 
 See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]',
@@ -1379,7 +1403,8 @@ See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?t
 See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]',
 'createacct-another-submit' => 'Submit button of  [[Special:UserLogin/signup]] ([[Special:CreateAccount]]) when accessed by a registered user.
 
-The original means "create an account in addition to the one you already have"; sometimes, but not always, it means you are going to "Create the account on behalf of somebody else" or "Create account for another".',
+The original means "create an account in addition to the one you already have"; sometimes, but not always, it means you are going to "Create the account on behalf of somebody else" or "Create account for another".
+{{Identical|Create another account}}',
 'createacct-benefit-heading' => 'In vertical-layout create account form, the heading for the section describing the benefits of creating an account. See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]
 
 If in your language you need to know the gender of the name for the wiki (which is the subject of the English sentence), please adapt the sentence as much as you need for your translation to fit.',
@@ -1422,7 +1447,8 @@ Parameters:
 'nocookiesforlogin' => "{{optional}}
 This message is displayed when someone tried to login and the CSRF failed (most likely, the browser doesn't accept cookies).
 
-Defaults to '''nocookieslogin''' ({{int:nocookieslogin}})",
+Default:
+* {{msg-mw|Nocookieslogin}}",
 'noname' => 'Error message.',
 'loginsuccesstitle' => 'The title of the page saying that you are logged in. The content of the page is the message {{msg-mw|Loginsuccess}}.
 {{Identical|Login successful}}',
@@ -1597,7 +1623,7 @@ Parameters:
 'passwordreset-emaildisabled' => "Used as error message in changing password when site's email feature is disabled.",
 'passwordreset-username' => '{{Identical|Username}}',
 'passwordreset-domain' => 'A domain like used in Domain Name System (DNS) or more specifically like a domain component in the Lightweight Directory Access Protocol (LDAP)',
-'passwordreset-capture' => 'Label for checkbox asking the user whether they want to see the contents of the password reset email (only shown if they have the <tt>passwordreset</tt> permission',
+'passwordreset-capture' => 'Label for checkbox asking the user whether they want to see the contents of the password reset email (only shown if they have the <code>passwordreset</code> permission).',
 'passwordreset-capture-help' => 'Longer explanatory message for the capture checkbox label.',
 'passwordreset-email' => '{{Identical|E-mail address}}',
 'passwordreset-emailtitle' => 'Used as subject (title) of email.',
@@ -1764,38 +1790,55 @@ See also:
 * {{msg-mw|Anonpreviewwarning}}',
 'anonpreviewwarning' => 'See also:
 * {{msg-mw|Anoneditwarning}}',
-'missingsummary' => 'The text "edit summary" is in {{msg-mw|summary}}.
-The text "Save" is in {{msg-mw|savearticle}}.',
+'missingsummary' => 'The text "edit summary" is in {{msg-mw|Summary}}.
+
+See also:
+* {{msg-mw|Missingcommentheader}}
+* {{msg-mw|Savearticle}}',
 'missingcommenttext' => 'This message is shown, when the textbox by a new-section is empty.',
-'missingcommentheader' => 'Edit summary that is shown if you enable "Prompt me when entering a blank summary" and add a new section without headline to a talk page.',
+'missingcommentheader' => 'Edit summary that is shown if you enable "Prompt me when entering a blank summary" and add a new section without headline to a talk page.
+
+See also:
+* {{msg-mw|Missingsummary}}
+* {{msg-mw|Savearticle}}',
 'summary-preview' => 'Preview of the edit summary, shown under the edit summary itself.
 Should match: {{msg-mw|summary}}.',
 'subject-preview' => 'Should match {{msg-mw|subject}}',
 'blockedtitle' => 'Used as title displayed for blocked users. The corresponding message body is one of the following messages:
 * {{msg-mw|Blockedtext|notext=1}}
 * {{msg-mw|Autoblockedtext|notext=1}}',
-'blockedtext' => "Text displayed to blocked users. Parameters:
+'blockedtext' => 'Text displayed to blocked users.
+
+"email this user" should be consistent with {{msg-mw|Emailuser}}.
+
+Parameters:
 * $1 - the blocking sysop (with a link to his/her userpage)
 * $2 - the reason for the block
 * $3 - the current IP address of the blocked user
-* $4 - (Unused) the blocking sysop's username (plain text, without the link)
+* $4 - (Unused) the blocking sysop\'s username (plain text, without the link)
 * $5 - the unique numeric identifier of the applied autoblock
 * $6 - the expiry of the block
 * $7 - the intended target of the block (what the blocking user specified in the blocking form)
 * $8 - the timestamp when the block started
 See also:
-* {{msg-mw|Autoblockedtext}}",
-'autoblockedtext' => "Text displayed to automatically blocked users. Parameters:
+* {{msg-mw|Grouppage-sysop}}
+* {{msg-mw|Autoblockedtext}}',
+'autoblockedtext' => 'Text displayed to automatically blocked users.
+
+"email this user" should be consistent with {{msg-mw|Emailuser}}.
+
+Parameters:
 * $1 - the blocking sysop (with a link to his/her userpage)
 * $2 - the reason for the block (in case of autoblocks: {{msg-mw|autoblocker}})
 * $3 - the current IP address of the blocked user
-* $4 - (Unused) the blocking sysop's username (plain text, without the link). Use it for GENDER.
+* $4 - (Unused) the blocking sysop\'s username (plain text, without the link). Use it for GENDER.
 * $5 - the unique numeric identifier of the applied autoblock
 * $6 - the expiry of the block
 * $7 - the intended target of the block (what the blocking user specified in the blocking form)
 * $8 - the timestamp when the block started
 See also:
-* {{msg-mw|Blockedtext}}",
+* {{msg-mw|Grouppage-sysop}}
+* {{msg-mw|Blockedtext}}',
 'blockednoreason' => 'Substituted with <code>$2</code> in the following message if the reason is not given:
 * {{msg-mw|cantcreateaccount-text}}.
 {{Identical|No reason given}}',
@@ -1829,18 +1872,22 @@ See also:
 * {{msg-mw|Nocreatetext}}
 * {{msg-mw|Uploadnologintext}}',
 'accmailtitle' => 'Page title when temporary password was sent to a user via email.',
-'accmailtext' => '{{doc-important|Do not translate "<nowiki>[[User talk:$1|$1]]</nowiki>" and \'\'Special:ChangePassword\'\'.}}
-The message shown when a temporary password has been sent to the user\'s email address.
+'accmailtext' => "{{doc-important|Do not translate <code><nowiki>[[User talk:$1|$1]]</nowiki></code> and <code>Special:ChangePassword</code>.}}
+The message shown when a temporary password has been sent to the user's email address.
 
 Parameters:
 * $1 - username
-* $2 - email address',
+* $2 - email address",
 'newarticle' => '{{Identical|New}}',
-'newarticletext' => "Text displayed above the edit box in editor when trying to create a new page.<br />'''Very important:''' leave <tt><nowiki>{{MediaWiki:Helppage}}</nowiki></tt> exactly as it is!",
+'newarticletext' => '{{doc-important|Do not translate <code><nowiki>{{MediaWiki:Helppage}}</nowiki></code>.}}
+Text displayed above the edit box in editor when trying to create a new page.
+
+Refers to {{msg-mw|Helppage}}.',
 'anontalkpagetext' => 'Displayed at the bottom of talk pages of anonymous users.',
 'noarticletext' => 'This is the message that you get if you search for a term that has not yet got any entries on the wiki.
 
-See also {{msg-mw|Noarticletext-nopermission}}.',
+See also:
+* {{msg-mw|Noarticletext-nopermission}}',
 'noarticletext-nopermission' => 'See also {{msg-mw|Noarticletext}}.',
 'missing-revision' => 'Text displayed when the requested revision does not exist using a permalink.
 
@@ -1858,11 +1905,25 @@ Parameters:
 Parameters:
 * $1 - (Optional) the name of the blocked user. Can be used for GENDER.',
 'clearyourcache' => 'Text at the top of .js/.css pages',
-'usercssyoucanpreview' => "Text displayed on every css page. The 'Show preview' part should be the same as {{msg-mw|showpreview}} (or you can use <nowiki>{{int:showpreview}}</nowiki>).",
-'userjsyoucanpreview' => 'Text displayed on every js page.',
-'usercsspreview' => 'Text displayed on preview of every user .css subpage',
+'usercssyoucanpreview' => 'Text displayed on every CSS page.
+
+See also:
+* {{msg-mw|Userjsyoucanpreview}}
+* {{msg-mw|Showpreview}}',
+'userjsyoucanpreview' => 'Text displayed on every JavaScript page.
+
+See also:
+* {{msg-mw|Usercssyoucanpreview}}
+* {{msg-mw|Showpreview}}',
+'usercsspreview' => 'Text displayed on preview of every user .css subpage.
+
+See also:
+* {{msg-mw|Sitecsspreview}}',
 'userjspreview' => 'Text displayed on preview of every user .js subpage',
-'sitecsspreview' => 'Text displayed on preview of .css pages in MediaWiki namespace',
+'sitecsspreview' => 'Text displayed on preview of .css pages in MediaWiki namespace.
+
+See also:
+* {{msg-mw|Usercsspreview}}',
 'sitejspreview' => 'Text displayed on preview of .js pages in MediaWiki namespace',
 'userinvalidcssjstitle' => 'Parameters:
 * $1 - skin name',
@@ -1893,21 +1954,24 @@ See also:
 * {{msg-mw|Token suffix mismatch}}
 * {{msg-mw|Session fail preview}}
 * {{msg-mw|Edit form incomplete}}',
-'editing' => "Shown as page title when editing a page. Parameters:
-* \$1 - the name of the page that is being edited. e.g. \"''Editing Main Page''\"",
-'creating' => "Shown as page title when creating a page. Parameters:
-* \$1 is the name of the page that is being created. Example: \"''Creating Main Page''\".",
+'editing' => 'Shown as page title when editing a page. Parameters:
+* $1 - the name of the page that is being edited. e.g. "Editing Main Page"
+{{Related|Editing}}',
+'creating' => 'Shown as page title when creating a page. Parameters:
+* $1 - the name of the page that is being created. Example: "Creating Main Page".
+{{Related|Editing}}',
 'editingsection' => 'This message displays at the top of the page when a user is editing a page section. Parameters:
 * $1 - page name
-See also:
-* {{msg-mw|Editingcomment}}',
+{{Related|Editing}}',
 'editingcomment' => 'This message displays at the top of the page when a user is creating a new section. Parameters:
 * $1 - page name
-See also:
-* {{msg-mw|Editingsection}}',
+{{Related|Editing}}',
 'editconflict' => 'Used as title of error message. Parameters:
 * $1 - page title',
-'explainconflict' => 'Appears at the top of a page when there is an edit conflict.',
+'explainconflict' => 'Appears at the top of a page when there is an edit conflict.
+
+See also:
+* {{msg-mw|Savearticle}}',
 'yourtext' => 'Used in Diff Preview page. The diff is between {{msg-mw|currentrev}} and {{msg-mw|yourtext}}.
 
 Also used in Edit Conflict page; the diff between {{msg-mw|yourtext}} and {{msg-mw|storedversion}}.',
@@ -2035,9 +2099,15 @@ See also:
 * {{msg-mw|edit-no-change}}',
 'defaultmessagetext' => 'Caption above the default message text shown on the left-hand side of a diff displayed after clicking "Show changes" when creating a new page in the MediaWiki: namespace',
 'content-failed-to-parse' => "Error message indicating that the page's content can not be saved because it is syntactically invalid. This may occurr for content types using serialization or a strict markup syntax.
-*$1 – content model ({{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}})
-*$2 – content format as MIME type (e.g. <tt>text/css</tt>)
-*$3 – specific error message",
+
+Parameters:
+* $1 – content model, any one of the following messages:
+** {{msg-mw|Content-model-wikitext}}
+** {{msg-mw|Content-model-javascript}}
+** {{msg-mw|Content-model-css}}
+** {{msg-mw|Content-model-text}}
+* $2 – content format as MIME type (e.g. <code>text/css</code>)
+* $3 – specific error message",
 'invalid-content-data' => "Error message indicating that the page's content can not be saved because it is invalid. This may occurr for content types with internal consistency constraints.",
 'content-not-allowed-here' => 'Error message indicating that the desired content model is not supported in given localtion.
 * $1 - the human readable name of the content model: {{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}
@@ -2124,21 +2194,21 @@ Parameters:
 * $2 - (Unused) the value of the max depth limit
 See also:
 * {{msg-mw|Expansion-depth-exceeded-category}}',
-'parser-unstrip-loop-warning' => '{{Doc-important|Do not translate function name "<code>unstrip</code>".}}
-This error is shown when a parser extension tag such as &lt;pre> includes a reference to itself in its own output.
+'parser-unstrip-loop-warning' => '{{Doc-important|Do not translate function name <code>unstrip</code>.}}
+This error is shown when a parser extension tag such as <code><nowiki><pre></nowiki></code> includes a reference to itself in its own output.
 
-The reference must be to the exact same invocation of the tag at the same location in the source, merely writing &lt;pre>&lt;pre>&lt;/pre>&lt;/pre> will not do it.
+The reference must be to the exact same invocation of the tag at the same location in the source, merely writing <code><nowiki><pre><pre></pre></pre></nowiki></code> will not do it.
 
 This is usually impossible and unlikely to happen by accident, so translation is not essential.
 
-"Unstrip" refers to the internal function of the parser, called \'unstrip\', which recursively puts the output of parser functions in the place of the parser function call and which would enter an infinite loop in the situation above.
+"Unstrip" refers to the internal function of the parser, called "unstrip", which recursively puts the output of parser functions in the place of the parser function call and which would enter an infinite loop in the situation above.
 
 See also:
 *{{msg-mw|Parser-unstrip-recursion-limit}}',
-'parser-unstrip-recursion-limit' => '{{doc-important|Do not translate function name "<code>unstrip</code>".}}
+'parser-unstrip-recursion-limit' => '{{doc-important|Do not translate function name <code>unstrip</code>.}}
 This message is shown when the recursion limit for nested parser extension tags is exceeded.
 
-This warning may be encountered due to input text like &lt;ref>&lt;ref>&lt;ref>...&lt;/ref>&lt;/ref>&lt;/ref>.
+This warning may be encountered due to input text like <code><nowiki><ref><ref><ref>...</ref></ref></ref></nowiki></code>.
 
 Parameters:
 * $1 - the depth limit
@@ -2147,9 +2217,7 @@ Parameters:
 
 See also:
 * {{msg-mw|Parser-unstrip-loop-warning}}',
-'converter-manual-rule-error' => "Used as error message when a manual conversion rule for the language converter has errors.
-
-For example it's not using the correct syntax, or not supplying text in all variants.",
+'converter-manual-rule-error' => "Used as error message when a manual conversion rule for the [[mw:Language_converter|language converter]] has errors. For example it's not using the correct syntax, or not supplying text in all variants.",
 
 # "Undo" feature
 'undo-success' => 'Text on special page to confirm edit revert. You arrive on this page by clicking on the "undo" link on a revision history special page.
@@ -2227,7 +2295,12 @@ Parameters:
 'page_last' => "This is part of the navigation message on the top and bottom of Special pages which are lists of things in alphabetical order, e.g. the '[[Special:Categories|Categories]]' special page. It is followed by the message {{msg-mw|Viewprevnext}}.
 
 {{Identical|Last}}",
-'histlegend' => 'Text in history page. Refers to {{msg-mw|cur}}, {{msg-mw|last}}, and {{msg-mw|minoreditletter}}.',
+'histlegend' => 'Text in history page.
+
+See also:
+* {{msg-mw|Cur}}
+* {{msg-mw|Last}}
+* {{msg-mw|Minoreditletter}}',
 'history-fieldset-title' => 'Fieldset label in the edit history pages.',
 'history-show-deleted' => 'CheckBox to show only per [[mw:Manual:RevisionDelete|RevisonDelete]] deleted versions.
 
@@ -2330,11 +2403,13 @@ See also:
 'revdelete-text' => '{{RevisionDelete}}
 This is the introduction explaining the feature.',
 'revdelete-confirm' => 'This message is a part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
+
+Refers to {{msg-mw|Policy-url}}.
 
 See also:
 * {{msg-mw|Revdelete-suppress}}
-* {{msg-mw|Revdelete-suppress-text}}',
+* {{msg-mw|Revdelete-suppress-text}}
+[[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]',
 'revdelete-suppress-text' => 'Used as usage text in [[Special:RevisionDelete]].
 
 See also:
@@ -2680,7 +2755,13 @@ Example: [{{canonicalurl:Project:News|diff=426850&oldid=99999999}} Diff with inv
 
 Parameters:
 * $1 - the search term',
-'searchsubtitle' => 'Parameters:
+'searchresulttext' => '{{doc-important|Do not translate <code><nowiki>[[{{MediaWiki:Helppage}}|{{int:help}}]]</nowiki></code>.}}
+See also:
+* {{msg-mw|Helppage}}
+* {{msg-mw|Help}}',
+'searchsubtitle' => 'Refers to {{msg-mw|Pipe-separator}}.
+
+Parameters:
 * $1 - search term
 See also:
 * {{msg-mw|Searchsubtitleinvalid}}',
@@ -2726,7 +2807,9 @@ It is also used by [[Special:WhatLinksHere|Whatlinkshere]] pages, where ($1) and
 ($3) is made up in all cases of the various proposed numbers of results per page, e.g. "(20 | 50 | 100 | 250 | 500)".
 For Special pages, the navigation bar is prefixed by "({{msg-mw|Page first}} | {{msg-mw|Page last}})" (alphabetical order) or "({{msg-mw|Histfirst}} | {{msg-mw|Histlast}})" (date order).
 
-Viewprevnext is sometimes preceded by the {{msg-mw|Showingresults}} or {{msg-mw|Showingresultsnum}} message (for Special pages) or by the {{msg-mw|Linkshere}} message (for Whatlinkshere pages).',
+Viewprevnext is sometimes preceded by the {{msg-mw|Showingresults}} or {{msg-mw|Showingresultsnum}} message (for Special pages) or by the {{msg-mw|Linkshere}} message (for Whatlinkshere pages).
+
+Refers to {{msg-mw|Pipe-separator}}.',
 'searchmenu-legend' => '{{Identical|Search options}}',
 'searchmenu-exists' => 'An option shown in a menu beside search form offering a link to the existing page having the specified title (when using the default MediaWiki search engine).
 
@@ -2895,7 +2978,8 @@ This message indicates {{msg-mw|prefs-dateformat}} is default (= not specified).
 'prefs-datetime' => '{{Identical|Date}}',
 'prefs-labs' => "Header of a subsection at [[Special:Preferences]], tab ''{{int:prefs-editing}}'', listing features that are experimental",
 'prefs-user-pages' => "Header of a subsection at [[Special:Preferences]], tab ''{{int:prefs-misc}}'', listing features that are related to user pages",
-'prefs-personal' => 'Title of a tab in [[Special:Preferences]].',
+'prefs-personal' => 'Title of a tab in [[Special:Preferences]].
+{{Identical|User profile}}',
 'prefs-rc' => 'Used in user preferences.
 
 {{Identical|Recent changes}}',
@@ -3046,7 +3130,10 @@ Used in [[Special:Preferences]]. Parameters are:
 {{Identical|Signature}}',
 'prefs-help-signature' => 'Used in [[Special:Preferences]], tab User profile.',
 'badsig' => 'Error message displayed when entering invalid signature in user preferences',
-'badsiglength' => 'Warning message that is displayed on [[Special:Preferences]] when trying to save a signature that is too long. Parameter $1 is the maximum number of characters that is allowed in a signature (multi-byte characters are counted as one character).',
+'badsiglength' => 'Warning message that is displayed on [[Special:Preferences]] when trying to save a signature that is too long.
+
+Parameters
+* $1 - the maximum number of characters that is allowed in a signature (multi-byte characters are counted as one character)',
 'yourgender' => 'Used in [[Special:Preferences]], first tab, in the Internationalisation section.
 This may be customized for other languages. This should sound like a question, the answer to which can be selected in one of these:
 * {{msg-mw|gender-unknown}}
@@ -3293,7 +3380,7 @@ Related messages:
 * {{msg-mw|right-reupload}}',
 'right-upload_by_url' => '{{doc-right|upload by url}}',
 'right-purge' => '{{doc-right|purge}}
-The right to use <tt>&action=purge</tt> in the URL, without needing to confirm it (by default, anonymous users need to confirm it).',
+The right to use <code>&action=purge</code> in the URL, without needing to confirm it (by default, anonymous users need to confirm it).',
 'right-autoconfirmed' => "{{doc-right|autoconfirmed}}
 If your account is older than [[mw:Manual:\$wgAutoConfirmAge|wgAutoConfirmAge]] and if you have at least [[mw:Manual:\$wgAutoConfirmCount|\$wgAutoConfirmCount]] edits, you are in the '''group \"autoconfirmed\"''' (note that you can't see this group at [[Special:ListUsers]]).
 If you are in that group, you have (by default) the '''right \"autoconfirmed\"''', which exempts you from certain rate limits (those based on your IP address or otherwise intended solely for new users). Other rate limits may still apply; see {{msg-mw|right-noratelimit}}.",
@@ -3362,9 +3449,13 @@ This user automatically bypasses IP blocks, auto-blocks and range blocks - so I
 'right-unblockself' => '{{doc-right|unblockself}}',
 'right-protect' => '{{doc-right|protect}}',
 'right-editprotected' => '{{doc-right|editprotected}}
+Refers to {{msg-mw|Protect-level-sysop}}.
+
 See also:
 * {{msg-mw|Right-editsemiprotected}}',
 'right-editsemiprotected' => '{{doc-right|editsemiprotected}}
+Refers to {{msg-mw|Protect-level-autoconfirmed}}.
+
 See also:
 * {{msg-mw|Right-editprotected}}',
 'right-editinterface' => '{{doc-right|editinterface}}',
@@ -3389,7 +3480,7 @@ See also:
 'right-rollback' => '{{doc-right|rollback}}
 {{Identical|Rollback}}',
 'right-markbotedits' => '{{doc-right|markbotedits}}
-A user with this right can mark a roll-back edit as a bot edit by adding <tt>&bot=1</tt> to the URL (not by default).',
+A user with this right can mark a roll-back edit as a bot edit by adding <code>&bot=1</code> to the URL (not by default).',
 'right-noratelimit' => '{{doc-right|noratelimit}}
 The rate limits have no effect on the groups that have this right. Rate limits is a restriction that you can only do X actions (edits, moves, etc.) in Y number of seconds (set by [[mw:Manual:$wgRateLimits|$wgRateLimits]]).',
 'right-import' => '{{doc-right|import}}',
@@ -3420,7 +3511,8 @@ In [[Special:Log]]',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '{{Doc-action|read}}',
-'action-edit' => '{{Doc-action|edit}}',
+'action-edit' => '{{Doc-action|edit}}
+{{Identical|Edit this page}}',
 'action-createpage' => '{{Doc-action|createpage}}
 {{Identical|Create page}}',
 'action-createtalk' => '{{Doc-action|createtalk}}',
@@ -3547,10 +3639,10 @@ The corresponding message is {{msg-mw|Rcnotefrom}}.',
 'rcshowhidemine' => "Option text in [[Special:RecentChanges]]. Parameters:
 * $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.",
 'rclinks' => "Used on [[Special:RecentChanges]].
-* '''\$1''' is a list of different choices with number of pages to be shown.<br />&nbsp;Example: \"''50{{int:pipe-separator}}100{{int:pipe-separator}}250{{int:pipe-separator}}500\".
-* '''\$2''' is a list of clickable links with a number of days for which recent changes are to be displayed.<br />&nbsp;Example: \"''1{{int:pipe-separator}}3{{int:pipe-separator}}7{{int:pipe-separator}}14{{int:pipe-separator}}30''\".
-* '''\$3''' is a block of text that consists of other messages.<br />&nbsp;Example: \"''Hide minor edits{{int:pipe-separator}}Show bots{{int:pipe-separator}}Hide anonymous users{{int:pipe-separator}}Hide logged-in users{{int:pipe-separator}}Hide patrolled edits{{int:pipe-separator}}Hide my edits''\"
-List elements are separated by {{msg-mw|pipe-separator}} each. Each list element is, or contains, a link.",
+* \$1 - a list of different choices with number of pages to be shown.<br />&nbsp;Example: \"''50{{int:pipe-separator}}100{{int:pipe-separator}}250{{int:pipe-separator}}500\".
+* \$2 - a list of clickable links with a number of days for which recent changes are to be displayed.<br />&nbsp;Example: \"''1{{int:pipe-separator}}3{{int:pipe-separator}}7{{int:pipe-separator}}14{{int:pipe-separator}}30''\".
+* \$3 - a block of text that consists of other messages.<br />&nbsp;Example: \"''Hide minor edits{{int:pipe-separator}}Show bots{{int:pipe-separator}}Hide anonymous users{{int:pipe-separator}}Hide logged-in users{{int:pipe-separator}}Hide patrolled edits{{int:pipe-separator}}Hide my edits''\"
+List elements are separated by {{msg-mw|Pipe-separator}} each. Each list element is, or contains, a link.",
 'diff' => 'Short form of "differences". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...',
 'hist' => 'Short form of "history". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...',
 'hide' => '{{doc-actionlink}}
@@ -3666,8 +3758,8 @@ See also:
 See also:
 * {{msg-mw|upload-tryagain|Submit text}}',
 'upload-recreate-warning' => 'Used as warning in [[Special:Upload]].',
-'uploadtext' => "{{doc-important|''thumb'' and ''left'' are magic words. Leave them untranslated!}}
-Text displayed when uploading a file using [[Special:Upload]].",
+'uploadtext' => '{{doc-important|<code>thumb</code> and <code>left</code> are magic words. Leave them untranslated!}}
+Text displayed when uploading a file using [[Special:Upload]].',
 'upload-permitted' => 'Used in [[Special:Upload]]. Parameters:
 * $1 - list of file types, defined in the variable [[mw:Special:MyLanguage/Manual:$wgFileExtensions|$wgFileExtensions]]
 See also:
@@ -4845,6 +4937,7 @@ See the following search results:
 'listusers' => '{{doc-special|ListUsers}}',
 'listusers-editsonly' => 'Option in [[Special:ListUsers]].',
 'listusers-creationsort' => 'Option in [[Special:ListUsers]].',
+'listusers-desc' => 'Used as label for the checkbox.',
 'usereditcount' => 'Shown behind every username on [[Special:ListUsers]]. Parameters:
 * $1 - number of edits',
 'usercreated' => 'Used in [[Special:ListUsers]]. Parameters:
@@ -5090,7 +5183,9 @@ See also:
 
 # Special:ListGroupRights
 'listgrouprights' => 'The name of the special page [[Special:ListGroupRights]].',
-'listgrouprights-summary' => 'The description used on [[Special:ListGroupRights]].',
+'listgrouprights-summary' => 'The description used on [[Special:ListGroupRights]].
+
+Refers to {{msg-mw|Listgrouprights-helppage}}.',
 'listgrouprights-key' => 'Footer note for the [[Special:ListGroupRights]] page',
 'listgrouprights-group' => "The title of the column in the table, about user groups (like you are in the ''translator'' group).
 
@@ -5099,12 +5194,14 @@ See also:
 {{Identical|Right}}",
 'listgrouprights-helppage' => "The link used on [[Special:ListGroupRights]]. Just translate \"Group rights\", and '''leave the \"Help:\" namespace exactly as it is'''.",
 'listgrouprights-members' => 'Used on [[Special:ListGroupRights]] and [[Special:Statistics]] as a link to [[Special:ListUsers|Special:ListUsers/"group"]], a list of members in that group.',
-'listgrouprights-right-display' => "{{optional}}
-* $1 is the text from the 'right-...' messages, i.e. {{msg-mw|right-edit}}
-* $2 is the codename of this right",
-'listgrouprights-right-revoked' => "{{optional}}
-* $1 is the text from the 'right-...' messages, i.e. {{msg-mw|right-edit}}
-* $2 is the codename of this right",
+'listgrouprights-right-display' => '{{optional}}
+Parameters:
+* $1 - the text from the "right-..." messages, i.e. {{msg-mw|Right-edit}}
+* $2 - the codename of this right',
+'listgrouprights-right-revoked' => '{{optional}}
+Parameters:
+* $1 - the text from the "right-..." messages, i.e. {{msg-mw|Right-edit}}
+* $2 - the codename of this right',
 'listgrouprights-addgroup' => 'This is an individual right for groups, used on [[Special:ListGroupRights]].
 * $1 - an enumeration of group names
 * $2 - the number of group names in $1
@@ -5394,32 +5491,36 @@ See also:
 * $1 - a link which points to a diff, shown as a plain link
 See also:
 * {{msg-mw|Enotif lastvisited}}',
-'enotif_anon_editor' => 'User name in an e-mail notification when referring to an anonymous user. Parameters:
-* $1 is the anonymous user name (i.e. an IP address).',
-'enotif_body' => 'Text of a notification e-mail sent when a watched page has been edited or deleted.[[File:Screenshot_MediaWiki_e-mail_notifier.PNG|150px|right]]
+'enotif_anon_editor' => 'User name in an email notification when referring to an anonymous user. Parameters:
+* $1 - the anonymous user name (i.e. an IP address).',
+'enotif_body' => 'Text of a notification email sent when a watched page has been edited or deleted.
+[[File:Screenshot_MediaWiki_e-mail_notifier.PNG|150px|right]]
+
+Refers to {{msg-mw|Helppage}}.
 
+Parameters:
 *$WATCHINGUSERNAME is the username of the user receiving the notification.
 *$PAGEINTRO is the first line of the message, saying what happened. It currently can be either of:
-**{{msg-mw|enotif body intro deleted}}
-**{{msg-mw|enotif body intro created}}
-**{{msg-mw|enotif body intro moved}}
-**{{msg-mw|enotif body intro restored}}
-**{{msg-mw|enotif body intro changed}} (for all the other cases).
+**{{msg-mw|Enotif body intro deleted}}
+**{{msg-mw|Enotif body intro created}}
+**{{msg-mw|Enotif body intro moved}}
+**{{msg-mw|Enotif body intro restored}}
+**{{msg-mw|Enotif body intro changed}} (for all the other cases).
 *$NEWPAGE consists of either
-**if the page is new (in older releases), {{msg-mw|enotif newpagetext}}
+**if the page is new (in older releases), {{msg-mw|Enotif newpagetext}}
 **if the page has a previous revision,
-***{{msg-mw|enotif lastdiff}}
+***{{msg-mw|Enotif lastdiff}}
 ***a newline
-***{{msg-mw|enotif lastvisited}}
-*$PAGEEDITOR_EMAIL and $PAGEEDITOR_WIKI are links respectively to the e-mail user special page and user page for the user who performed the action.
+***{{msg-mw|Enotif lastvisited}}
+*$PAGEEDITOR_EMAIL and $PAGEEDITOR_WIKI are links respectively to the email user special page and user page for the user who performed the action.
 *$PAGEEDITOR is the username of the user who performed the action.
 
-The subject of the e-mail is one of the following messages:
-*{{msg-mw|enotif subject deleted}}
-*{{msg-mw|enotif subject created}}
-*{{msg-mw|enotif subject moved}}
-*{{msg-mw|enotif subject restored}}
-*{{msg-mw|enotif subject changed}}',
+The subject of the email is one of the following messages:
+*{{msg-mw|Enotif subject deleted}}
+*{{msg-mw|Enotif subject created}}
+*{{msg-mw|Enotif subject moved}}
+*{{msg-mw|Enotif subject restored}}
+*{{msg-mw|Enotif subject changed}}',
 'created' => '{{Optional}}
 Possible value for $CHANGEDORCREATED in the following messages:
 * {{msg-mw|enotif_subject}}
@@ -5456,7 +5557,9 @@ Followed by a link which points to the history page.
 
 Parameters:
 * $1 - the <b>approximate</b> number of revisions that the page has, the message should not claim to give an exact count',
-'confirmdeletetext' => 'Introduction shown when deleting a page.',
+'confirmdeletetext' => 'Introduction shown when deleting a page.
+
+Refers to {{msg-mw|Policy-url}}.',
 'actioncomplete' => 'Used in several situations, for example when a page has been deleted.
 
 See also:
@@ -5529,7 +5632,12 @@ See also:
 * {{msg-mw|Notvisiblerev}}
 {{Identical|Revert}}
 {{Identical|Rollback}}',
-'alreadyrolled' => "Appear when there's rollback and/or edit collision. Parameters:
+'alreadyrolled' => "Appear when there's rollback and/or edit collision.
+
+Refers to:
+* {{msg-mw|Pipe-separator}}
+* {{msg-mw|Contribslink}}
+Parameters:
 * $1 - the page to be rolled back
 * $2 - the editor to be rolled-back of that page
 * $3 - the editor that cause collision
@@ -5551,7 +5659,7 @@ See also:
 In other cases the message {{msg-mw|Revertpage}} is used.
 
 Parameters:
-* $1 - username 1
+* $1 - username 1, can be used for GENDER
 * $2 - (Optional) username 2
 * $3 - (Optional) revision ID of the revision reverted to
 * $4 - (Optional) timestamp of the revision reverted to
@@ -5691,8 +5799,8 @@ Parameters:
 {{Identical|Other reason}}',
 'protect-dropdown' => 'Shown on the page protection form as drop down menu for protection reasons.
 
-<tt><nowiki>* Groupname</nowiki></tt> - defines a new group<br />
-<tt><nowiki>** Reason</nowiki></tt> - defines a reason in this group',
+* <code><nowiki>* Groupname</nowiki></code> - defines a new group
+* <code><nowiki>** Reason</nowiki></code> - defines a reason in this group',
 'protect-edit-reasonlist' => 'Shown beneath the page protection form on the right side. It is a link to {{msg-mw|Protect-dropdown|notext=1}}.
 
 See also:
@@ -5754,9 +5862,12 @@ See also:
 See also:
 * {{msg-mw|Undelete-no-results}} - if no results',
 'undelete-fieldset-title' => 'Used as the title of the fieldset.',
-'undeleteextrahelp' => "Help message displayed when restoring history of a page.
+'undeleteextrahelp' => 'Help message displayed when restoring history of a page.
+
+Refers to {{msg-mw|Undeletebtn}}.
 
-In your language, ''Restore'' is called {{msg-mw|Undeletebtn}}, the ''Reset'' button is called {{msg-mw|Undeletereset}}.",
+See also:
+* {{msg-mw|Undeletereset}}',
 'undeleterevisions' => 'Enclosed in parentheses and preceded by item name.
 
 Parameters:
@@ -5780,11 +5891,11 @@ See also:
 Parameters:
 * $1 - deleted page name
 * $2 - (unused)
-* $3 - user name (author of revision, not who deleted it)
-* $4 - date of the revision
-* $5 - time of the revision
-Example:
-* Deleted revision of [[Main Page]] (as of {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, at {{CURRENTTIME}}) by [[User:Username|Username]]:',
+* $3 - username (author of revision, not who deleted it)
+* $4 - date of the revision (localized)
+* $5 - time of the revision (localized)
+Example (in English):
+* Deleted revision of [[Main Page]] (as of 14 September 2013, at 08:17) by [[User:Username|Username]]:',
 'undeleterevision-missing' => 'Used as warning when undeleting the revision.',
 'undelete-nodiff' => 'Used in [[Special:Undelete]].',
 'undeletebtn' => 'Shown on [[Special:Undelete]] as button caption and on [[Special:Log/delete|deletion log]] after each entry (for sysops).
@@ -5934,10 +6045,9 @@ See also:
 * {{msg-mw|Tooltip-pt-mycontris}}
 {{Identical|Contribution}}',
 'contribsub2' => 'Contributions for "user" (links). Parameters:
-* $1 - any one of the following:
-** IP address (if anonymous user)
-** username, with a link which points to the user page (if registered user)
-* $2 - list of tool links. The list contains a link which has text {{msg-mw|Sp-contributions-talk}}
+* $1 is an IP address or a username, with a link which points to the user page (if registered user).
+* $2 is list of tool links. The list contains a link which has text {{msg-mw|Sp-contributions-talk}}.
+* $3 is a plain text username used for GENDER.
 {{Identical|For $1}}',
 'nocontribs' => 'Used in [[Special:Contributions]] and [[Special:DeletedContributions]].
 
@@ -6136,6 +6246,8 @@ See also:
 {{Identical|Block user}}',
 'blockiptext' => 'Used in the {{msg-mw|Blockip}} form in [[Special:Block]].
 
+Refers to {{msg-mw|Policy-url}}.
+
 This message may follow the message {{msg-mw|Ipb-otherblocks-header}} and other block messages.
 
 See also:
@@ -6543,7 +6655,7 @@ See also:
 * $1 is the original block reason for the IP address matched in the X-Forwarded-For header",
 'cant-see-hidden-user' => 'Used as (red) error message on [[Special:Block]] when you try to change (as sysop without the hideuser right) the block of a hidden user.',
 'ipbblocked' => 'Error message shown when a user tries to alter block settings when they are themselves blocked.',
-'ipbnounblockself' => 'Error message shown when a user without the <tt>unblockself</tt> right tries to unblock themself.',
+'ipbnounblockself' => 'Error message shown when a user without the <code>unblockself</code> right tries to unblock themself.',
 
 # Developer tools
 'lockdb' => 'The title of the special page [[Special:LockDB]].
@@ -6639,7 +6751,12 @@ See also:
 * $3 is the time at which the lock was made',
 
 # Move page
-'move-page' => 'Header of the special page to move pages. $1 is the name of the page to be moved.',
+'move-page' => 'Used as page title of [[Special:MovePage]] to move pages.
+
+See example: [[Special:MovePage/Portal:En]].
+
+Parameters:
+* $1 - the name of the page to be moved (without link)',
 'move-page-legend' => 'Legend of the fieldset around the input form of [[Special:MovePage/testpage]].
 
 See also:
@@ -6811,11 +6928,19 @@ See also:
 'movepage-page-exists' => 'Used as error message when moving page.
 * $1 - page title',
 'movepage-page-moved' => 'Used as success message when moving page.
-* $1 - old page title
-* $2 - new page title',
-'movepage-page-unmoved' => 'Used as error message when moving page.
-* $1 - old page title
-* $2 - new page title',
+
+Can be followed by {{msg-mw|Movepage-max-pages}}.
+
+Parameters:
+* $1 - old page title (with link)
+* $2 - new page title (with link)
+See also:
+* {{msg-mw|Movepage-page-unmoved}}',
+'movepage-page-unmoved' => 'Used as error message when moving page. Parameters:
+* $1 - old page title (with link)
+* $2 - new page title (with link)
+See also:
+* {{msg-mw|Movepage-page-moved}}',
 'movepage-max-pages' => 'PROBABLY (A GUESS): when moving a page, you can select an option of moving its subpages, but there is a maximum that can be moved automatically.
 
 Parameters:
@@ -6967,7 +7092,9 @@ Parameters:
 # Export
 'export' => 'Page title of [[Special:Export]], a page where a user can export pages from a wiki to a file.',
 'exporttext' => '{{doc-important|Leave the line <code><nowiki>[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]</nowiki></code> exactly as it is!}}
-Main text on [[Special:Export]].',
+Main text on [[Special:Export]].
+
+Refers to {{msg-mw|Mainpage}}.',
 'exportall' => 'A label of checkbox option in [[Special:Export]]',
 'exportcuronly' => 'A label of checkbox option in [[Special:Export]]',
 'exportnohistory' => 'Used in [[Special:Export]].',
@@ -7405,7 +7532,7 @@ See also:
 * {{msg-mw|Tooltip-ca-viewsource}}',
 'tooltip-ca-history' => 'Used as tooltip for {{msg-mw|Vector-view-history}}.
 
-See for example [{{canonicalurl:Main_Page|useskin=vector}}]
+See for example [{{canonicalurl:Main Page|useskin=vector}} Main Page]
 
 See also:
 * {{msg-mw|Vector-view-history}}
@@ -7725,6 +7852,9 @@ See also:
 * {{msg-mw|Summary}}
 * {{msg-mw|Accesskey-summary}}
 * {{msg-mw|Tooltip-summary}}',
+'tooltip-iwiki' => 'Format of a sidebar interwiki link tooltip. Parameters:
+* $1 - page name in the target wiki
+* $2 - target wiki language autonym',
 
 # Stylesheets
 'common.css' => '{{optional}}
@@ -8149,7 +8279,12 @@ Parameters:
 The variable $1 is the number of individual frames in an animated gif file.
 
 For example of message in use see [[:File:Mouse10.gif]].',
-'file-no-thumb-animation' => 'We cannot animate thumbnails of this file. This notice is shown on the image description page on animated svg files just below {{msg-mw|file-info-size}}. This message may be overridden by a more specific message of the form file-no-thumb-animation-&lt;extension&gt; like {{msg-mw|file-no-thumb-animation-gif}}',
+'file-no-thumb-animation' => 'We cannot animate thumbnails of this file.
+
+This notice is shown on the image description page on animated svg files just below {{msg-mw|File-info-size}}.
+
+This message may be overridden by a more specific message:
+* {{msg-mw|File-no-thumb-animation-gif}}.',
 'file-no-thumb-animation-gif' => 'Cannot animate thumbnails of this gif file, because it has too big a resolution. The cut off resolution can vary between wikis ([[mw:manual:$wgMaxAnimatedGifArea|$wgMaxAnimatedGifArea]]). Note that resolution is calculated as width times height times number of frames. See {{msg-mw|file-no-thumb-animation}}.',
 
 # Special:NewFiles
@@ -8223,7 +8358,7 @@ Parameters:
 * $1 - the number of years',
 'ago' => 'Phrase for indicating how long ago something happened. Parameters:
 * $1 - some kind of timestamp
-{{Identical|$1 ago}}',
+{{Identical|Ago}}',
 'just-now' => 'Phrase for indicating something happened just now.',
 
 # Human-readable timestamps
@@ -9361,19 +9496,9 @@ Parameters:
 
 # Scary transclusion
 'scarytranscludedisabled' => 'Shown when scary transclusion is disabled.',
-'scarytranscludefailed' => 'Shown when the HTTP request for the template failed.
-
-Identical to {{msg-mw|Scarytranscludefailed-httpstatus}}, but does not show the HTTP error which was received.
-
-This will not be parsed as wikitext and will appear as is.
-
-Parameters:
+'scarytranscludefailed' => 'Shown when the HTTP request for the template failed. Identical to {{msg-mw|Scarytranscludefailed-httpstatus}}, but does not show the HTTP error which was received. This will not be parsed as wikitext and will appear as is. Parameters:
 * $1 - URL which points to interwiki template',
-'scarytranscludefailed-httpstatus' => 'Identical to {{msg-mw|Scarytranscludefailed}}, but shows the HTTP error which was received.
-
-This will not be parsed as wikitext and will appear as is.
-
-Parameters:
+'scarytranscludefailed-httpstatus' => 'Identical to {{msg-mw|Scarytranscludefailed}}, but shows the HTTP error which was received. This will not be parsed as wikitext and will appear as is. Parameters:
 * $1 - URL which points to interwiki template
 * $2 - HTTP status, integer (other than 200)',
 'scarytranscludetoolong' => 'The URL was too long.',
@@ -9551,7 +9676,8 @@ See also:
 'watchlistedit-normal-title' => 'Title of [[Special:Watchlist/edit|special page]].',
 'watchlistedit-normal-legend' => 'Heading of dialogue box on [[Special:Watchlist/edit]]',
 'watchlistedit-normal-explain' => 'An introduction/explanation about the [[Special:Watchlist/edit|normal edit watchlist function]].
-Hint: the text "Remove Titles" is in {{msg-mw|watchlistedit-normal-submit}}',
+
+Refers to {{msg-mw|Watchlistedit-normal-submit}}.',
 'watchlistedit-normal-submit' => 'Text of submit button on [[Special:Watchlist/edit]].
 
 See also:
@@ -9573,7 +9699,10 @@ See also:
 'watchlistedit-raw-legend' => 'Heading of dialogue box on [[Special:Watchlist/raw]].
 
 {{Identical|Edit raw watchlist}}',
-'watchlistedit-raw-explain' => 'An introduction/explanation about the [[Special:Watchlist/raw|raw edit watchlist function]].',
+'watchlistedit-raw-explain' => '{{doc-important|Do not translate <code><nowiki>{{int:Watchlistedit-raw-submit}}</nowiki></code> and <code>Special:EditWatchlist</code>.}}
+An introduction/explanation about the [[Special:Watchlist/raw|raw edit watchlist function]].
+
+Refers to {{msg-mw|Watchlistedit-raw-submit}}.',
 'watchlistedit-raw-titles' => 'Text above edit box containing items being watched on [[Special:Watchlist/raw]].
 {{Identical|Title}}',
 'watchlistedit-raw-submit' => 'Text of submit button on [[Special:Watchlist/raw]].
@@ -9785,13 +9914,10 @@ Preceded by the MediaWiki extension name.
 Parameters:
 * $1 - version number of the extension
 {{Identical|Version}}',
-'version-svn-revision' => '{{optional}}
-Used in [[Special:Version]], preceeding the subversion revision numbers of the extensions loaded inside brackets, like this: "({{int:version-revision}} r012345").
-
-Parameters:
+'version-svn-revision' => '{{Identical|Revision}}{{optional}}
+Used in [[Special:Version]], preceeding the Subversion revision numbers of the extensions loaded inside brackets, like this: "({{int:version-revision}} r012345"). Parameters:
 * $1 - (Unused) directory revision number or empty string
-* $2 - checkout revision number
-{{Identical|Revision}}',
+* $2 - checkout revision number',
 'version-license' => '{{Identical|License}}',
 'version-poweredby-credits' => 'Message shown on [[Special:Version]]. Parameters:
 * $1 - the current year
@@ -9926,7 +10052,23 @@ Parameters:
 'tags-tag' => 'Caption of a column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].',
 'tags-display-header' => 'Caption of a column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].',
 'tags-description-header' => 'Caption of a column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].',
+'tags-active-header' => 'Caption of a column in [[Special:Tags]]. Values are "Yes" or "No" to indicate if a tag that was ever used is current still registered.
+
+See example: [[mw:Special:Tags]].
+
+For more information on tags see [[mw:Manual:Tags|MediaWiki]].
+{{Identical|Active}}',
 'tags-hitcount-header' => 'Caption of a column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].',
+'tags-active-yes' => 'Table cell contents if given tag is "active".
+
+See also:
+* {{msg-mw|Tags-active-no}}
+{{Identical|Yes}}',
+'tags-active-no' => 'Table cell contents if given tag is not "active".
+
+See also:
+* {{msg-mw|Tags-active-yes}}
+{{Identical|No}}',
 'tags-edit' => 'Used on [[Special:Tags]]. Verb. Used as display text on a link to create/edit a description.
 {{Identical|Edit}}',
 'tags-hitcount' => 'Shown in the "{{msg-mw|Tags-hitcount-header}}" column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].
@@ -10057,7 +10199,7 @@ Parameters:
 * $3 - the name of the log page inside parenthesis',
 'logentry-delete-revision' => '{{Logentry|[[Special:Log/delete]]}}
 {{Logentryparam}}
-* $5 - the number of affected revisions of the page $3.',
+* $5 - the number of affected revisions of the page $3',
 'logentry-delete-event-legacy' => '{{Logentry|[[Special:Log/delete]]}}
 * $3 - the name of the log page inside parenthesis',
 'logentry-delete-revision-legacy' => '{{Logentry|[[Special:Log/delete]]}}',
@@ -10344,9 +10486,7 @@ Parameters:
 * $1 - the usage
 * $2 - the maximum',
 'limitreport-postexpandincludesize' => 'Label for the "Post-expand include size" row in the limit report table',
-'limitreport-postexpandincludesize-value' => 'Format for the "Post-expand include size" row in the limit report table.
-
-Parameters:
+'limitreport-postexpandincludesize-value' => 'Format for the "Post-expand include size" row in the limit report table. Parameters:
 * $1 - the usage (in bytes)
 * $2 - the maximum (in bytes)',
 'limitreport-templateargumentsize' => 'Label for the "Template argument size" row in the limit report table',
index 8e311a0..a83bdc3 100644 (file)
@@ -3619,8 +3619,7 @@ Ti duessas avair retschavì [{{SERVER}}{{SCRIPTPATH}}/COPYING ina copia da la GN
 
 # Database error messages
 'dberr-header' => 'Questa wiki ha in problem',
-'dberr-problems' => 'Stgisa!
-Questa pagina ha actualmain difficultads tecnicas.',
+'dberr-problems' => 'Stgisa! Questa pagina ha actualmain difficultads tecnicas.',
 'dberr-again' => 'Spetga in per minutas ed emprova alura da chargiar danovamain.',
 'dberr-info' => '(Betg pussaivel da contactar il server da la banca da datas: $1)',
 'dberr-usegoogle' => 'Ti pos empruvar da tschertgar cun Google en il fratemp.',
index fe21489..3e89a41 100644 (file)
@@ -548,7 +548,7 @@ $1',
 # 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).
 'aboutsite' => 'Despre {{SITENAME}}',
 'aboutpage' => 'Project:Despre',
-'copyright' => 'Conținutul este disponibil sub $1.',
+'copyright' => 'Conținutul este disponibil sub $1, exceptând cazurile în care se specifică altfel.',
 'copyrightpage' => '{{ns:project}}:Drepturi de autor',
 'currentevents' => 'Discută la cafenea',
 'currentevents-url' => 'Project:Cafenea',
@@ -1700,8 +1700,8 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'action-block' => 'blocați permisiunea de modificare a acestui utilizator',
 'action-protect' => 'modificați nivelurile de protecție pentru această pagină',
 'action-rollback' => 'faceți revocarea rapidă a modificărilor ultimului utilizator care a modificat o pagină particulară',
-'action-import' => 'importați această pagină din alt wiki',
-'action-importupload' => 'importați această pagină prin încărcarea unui fișier',
+'action-import' => 'importați pagini din alt wiki',
+'action-importupload' => 'importați pagini prin încărcarea unui fișier',
 'action-patrol' => 'marcați modificările celorlalți ca patrulate',
 'action-autopatrol' => 'marcați modificarea drept patrulată',
 'action-unwatchedpages' => 'vizualizați lista de pagini neurmărite',
@@ -2239,6 +2239,7 @@ Intrările <del>tăiate</del> au fost rezolvate.',
 'listusers' => 'Listă utilizatori',
 'listusers-editsonly' => 'Arată doar utilizatorii cu modificări',
 'listusers-creationsort' => 'Sortează după data creării',
+'listusers-desc' => 'Sortează descrescător',
 'usereditcount' => '$1 {{PLURAL:$1|editare|editări}}',
 'usercreated' => '{{GENDER:$3|Creat}} în $1 la $2',
 'newpages' => 'Pagini noi',
@@ -2521,7 +2522,7 @@ acționați cu precauție.',
 Ultima editare a fost făcută de către [[User:$3|$3]] ([[User talk:$3|discuție]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Descrierea modificărilor a fost: „''$1''”.",
 'revertpage' => 'Anularea modificărilor efectuate de către [[Special:Contributions/$2|$2]] ([[User talk:$2|discuție]]) și revenire la ultima versiune de către [[User:$1|$1]]',
-'revertpage-nouser' => 'Anularea modificărilor efectuate de un utilizator ascuns și revenirea la ultima modificare de către [[User:$1|$1]]',
+'revertpage-nouser' => 'Anularea modificărilor efectuate de un utilizator ascuns și revenirea la ultima modificare de către {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Anularea modificărilor făcute de $1;
 revenire la ultima versiune de $2.',
 
@@ -2661,7 +2662,7 @@ $1',
 'contributions' => 'Contribuții {{GENDER:$1|utilizator}}',
 'contributions-title' => 'Contribuțiile utilizatorului $1',
 'mycontris' => 'Contribuții',
-'contribsub2' => 'Pentru $1 ($2)',
+'contribsub2' => 'Pentru {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Nu a fost găsită nici o modificare care să satisfacă acest criteriu.',
 'uctop' => '(actuală)',
 'month' => 'Din luna (și dinainte):',
@@ -3145,6 +3146,7 @@ Un dosar temporar lipsește.',
 Permite adăugarea unui motiv în descrierea modificărilor',
 'tooltip-preferences-save' => 'Salvează preferințele',
 'tooltip-summary' => 'Descrieți pe scurt modificarea',
+'tooltip-iwiki' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/** CSS plasate aici vor fi aplicate tuturor aparițiilor */',
@@ -4006,7 +4008,10 @@ MediaWiki este distribuit în speranța că va fi folositor, dar FĂRĂ VREO GAR
 'tags-tag' => 'Numele etichetei',
 'tags-display-header' => 'Apariția în listele cu schimbări',
 'tags-description-header' => 'Descrierea completă a sensului',
+'tags-active-header' => 'Activă?',
 'tags-hitcount-header' => 'Modificări etichetate',
+'tags-active-yes' => 'Da',
+'tags-active-no' => 'Nu',
 'tags-edit' => 'modificare',
 'tags-hitcount' => '$1 {{PLURAL:$1|modificare|modificări}}',
 
@@ -4172,9 +4177,9 @@ MediaWiki este distribuit în speranța că va fi folositor, dar FĂRĂ VREO GAR
 'limitreport-ppvisitednodes' => 'Număr de noduri de preprocesor vizitate',
 'limitreport-ppgeneratednodes' => 'Număr de noduri de preprocesor generate',
 'limitreport-postexpandincludesize' => 'Mărimea includerii post-expansiune',
-'limitreport-postexpandincludesize-value' => '$1/$2 octeți',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|octet|octeți|de octeți}}',
 'limitreport-templateargumentsize' => 'Mărimea argumentului formatului',
-'limitreport-templateargumentsize-value' => '$1/$2 octeți',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|octet|octeți|de octeți}}',
 'limitreport-expansiondepth' => 'Cea mai mare profunzime a expansiunii',
 'limitreport-expensivefunctioncount' => 'Număr de funcții de analiză costisitoare',
 
index 50a1a1a..393d036 100644 (file)
@@ -4191,9 +4191,9 @@ Ce nò, tu puè ausà 'u module facile aqquà sotte. 'U commende tune avène agg
 'limitreport-ppvisitednodes' => "Preprocessore d'u cunde de le node 'ndrucate",
 'limitreport-ppgeneratednodes' => "Preprocessore d'u cunde de le node generate",
 'limitreport-postexpandincludesize' => "Espanzione de apprisse ca 'nglude 'a dimenzione",
-'limitreport-postexpandincludesize-value' => '$1/$2 byte',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|byte}}',
 'limitreport-templateargumentsize' => "Dimenzione de le argomende d'u template",
-'limitreport-templateargumentsize-value' => '$1/$2 byte',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte}}',
 'limitreport-expansiondepth' => 'Espanzione massime de profonnetà',
 'limitreport-expensivefunctioncount' => "Analizzatore d'u cunde d'a funzione ca coste assaije",
 
index 83f1655..f328768 100644 (file)
@@ -71,6 +71,7 @@
  * @author MaxSem
  * @author NBS
  * @author Nemo bis
+ * @author Okras
  * @author Ola
  * @author Ole Yves
  * @author Putnik
@@ -81,6 +82,7 @@
  * @author Sk
  * @author Soul Train
  * @author Spider
+ * @author Sunpriat
  * @author TarzanASG
  * @author Temuri rajavi
  * @author Vago
@@ -436,7 +438,7 @@ $linkTrail = '/^([a-zабвгдеёжзийклмнопрстуфхцчшщъы
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'Подчёркивать ссылки:',
+'tog-underline' => 'Подчёркивание ссылок:',
 'tog-justify' => 'Выравнивать текст по ширине страницы',
 'tog-hideminor' => 'Скрывать малые правки в списке свежих правок',
 'tog-hidepatrolled' => 'Скрывать патрулированные правки в списке свежих правок',
@@ -479,7 +481,7 @@ $messages = array(
 'tog-noconvertlink' => 'Отключить ссылку на преобразование заголовка',
 'tog-norollbackdiff' => 'Не показывать разницу версий после выполнения отката',
 'tog-useeditwarning' => 'Предупреждать, когда я покидаю страницу с несохранёнными изменениями',
-'tog-prefershttps' => 'Всегда использовать защищенное соединение при входе в',
+'tog-prefershttps' => 'Всегда использовать защищённое соединение после представления системе',
 
 'underline-always' => 'Всегда',
 'underline-never' => 'Никогда',
@@ -683,7 +685,7 @@ $1',
 # 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).
 'aboutsite' => 'Описание {{grammar:genitive|{{SITENAME}}}}',
 'aboutpage' => 'Project:Описание',
-'copyright' => 'СодеÑ\80жимое Ð´Ð¾Ñ\81Ñ\82Ñ\83пно Ð² Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вии Ñ\81 $1.',
+'copyright' => 'СодеÑ\80жимое Ð´Ð¾Ñ\81Ñ\82Ñ\83пно Ð¿Ð¾ Ð»Ð¸Ñ\86ензии $1 (еÑ\81ли Ð½Ðµ Ñ\83казано Ð¸Ð½Ð¾Ðµ).',
 'copyrightpage' => '{{ns:project}}:Авторские права',
 'currentevents' => 'Текущие события',
 'currentevents-url' => 'Project:Текущие события',
@@ -805,6 +807,7 @@ $1',
 'cannotdelete-title' => 'Нельзя удалить страницу «$1»',
 'delete-hook-aborted' => 'Правка отменена процедурой-перехватчиком.
 Дополнительных пояснений не приведено.',
+'no-null-revision' => 'Не удалось создать новую нулевую правку для страницы «$1»',
 'badtitle' => 'Недопустимое название',
 'badtitletext' => 'Запрашиваемое название страницы неправильно, пусто, либо неверно указано межъязыковое или интервики название. Возможно, в названии используются недопустимые символы.',
 'perfcached' => 'Следующие данные взяты из кэша и могут не учитывать последних изменений. В кэше хранится не более $1 {{PLURAL:$1|записи|записей|записей}}.',
@@ -864,7 +867,7 @@ $2',
 'createacct-another-username-ph' => 'Введите имя вашей учётной записи',
 'yourpassword' => 'Пароль:',
 'userlogin-yourpassword' => 'Пароль',
-'userlogin-yourpassword-ph' => 'Введите ваш пароль',
+'userlogin-yourpassword-ph' => 'Введите свой пароль',
 'createacct-yourpassword-ph' => 'Введите пароль',
 'yourpasswordagain' => 'Повторный набор пароля:',
 'createacct-yourpasswordagain' => 'Подтвердите пароль',
@@ -894,6 +897,9 @@ $2',
 'userlogin-resetpassword-link' => 'Сброс пароля',
 'helplogin-url' => 'Help:Представление системе',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Помощь со входом в систему]]',
+'userlogin-loggedin' => 'Вы уже вошли как {{GENDER:$1|$1}}.
+Используйте форму ниже, чтобы войти под другим пользователем.',
+'userlogin-createanother' => 'Создать другую учётную запись',
 'createacct-join' => 'Введите свои данные ниже.',
 'createacct-another-join' => 'Введите данные новой учётной записи ниже.',
 'createacct-emailrequired' => 'Адрес электронной почты',
@@ -1061,6 +1067,16 @@ $2
 
 # Special:ResetTokens
 'resettokens' => 'Сбросить токены',
+'resettokens-text' => 'Вы можете сбросить токены, которые позволяют иметь доступ к некоторым личным данным, которые связаны с вашей учётной записью. 
+
+Вам необходимо сделать это, если вы случайно поделился ими с кем-то, или если ваш аккаунт был взломан.',
+'resettokens-no-tokens' => 'Нет токенов для сброса.',
+'resettokens-legend' => 'Сбросить токены',
+'resettokens-tokens' => 'Токены:',
+'resettokens-token-label' => '$1 (текущее значение: $2)',
+'resettokens-watchlist-token' => 'Токен для веб-канала (Atom/RSS)  [[Special:Watchlist|изменений страниц в вашем списке наблюдения]]',
+'resettokens-done' => 'Токены сброшены.',
+'resettokens-resetbutton' => 'Сбросить выбранные токены',
 
 # Edit page toolbar
 'bold_sample' => 'Полужирное начертание',
@@ -1597,6 +1613,8 @@ $1",
 'recentchangesdays-max' => '(не более $1 {{PLURAL:$1|дня|дней|дней}})',
 'recentchangescount' => 'Количество правок, отображаемое по умолчанию:',
 'prefs-help-recentchangescount' => 'Включает свежие правки, истории страниц, журналы.',
+'prefs-help-watchlist-token2' => 'Это секретный ключ для веб-канала вашего списка наблюдений.
+Любой, кто знает его, сможет читать ваш список наблюдения, поэтому не сообщайте его другим. [[Special:ResetTokens|Нажмите здесь, если вам нужно сбросить его]].',
 'savedprefs' => 'Ваши настройки сохранены.',
 'timezonelegend' => 'Часовой пояс:',
 'localtime' => 'Местное время:',
@@ -1671,7 +1689,7 @@ $1",
 'prefs-displaywatchlist' => 'Настройки отображения',
 'prefs-tokenwatchlist' => 'Токен',
 'prefs-diffs' => 'Разница версий',
-'prefs-help-prefershttps' => 'ЭÑ\82а Ð½Ð°Ñ\81Ñ\82Ñ\80ойка Ð±Ñ\83деÑ\82 Ð²Ð²ÐµÐ´ÐµÐ½Ð° Ð² Ñ\81ледÑ\83Ñ\8eÑ\89ий Ñ\80аз ÐºÐ¾Ð³Ð´Ð° Ð²Ñ\8b Ð¿Ñ\80едÑ\81Ñ\82авиÑ\82еÑ\81Ñ\8c системе.',
+'prefs-help-prefershttps' => 'ЭÑ\82а Ð½Ð°Ñ\81Ñ\82Ñ\80ойка Ð±Ñ\83деÑ\82 Ð¿Ñ\80именена Ð¿Ð¾Ñ\81ле Ñ\81ледÑ\83Ñ\8eÑ\89его Ð¿Ñ\80едÑ\81Ñ\82авлениÑ\8f системе.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'Выглядит корректно',
@@ -1829,8 +1847,8 @@ $1",
 'action-block' => 'ограничивать возможность редактирования для этого участника',
 'action-protect' => 'изменение уровня защиты этой страницы',
 'action-rollback' => 'быстрый откат изменений участника, который последним редактировал страницу',
-'action-import' => 'импоÑ\80Ñ\82 Ñ\8dÑ\82ой Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b из другой вики',
-'action-importupload' => 'импоÑ\80Ñ\82 Ñ\8dÑ\82ой Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b из загруженного файла',
+'action-import' => 'импоÑ\80Ñ\82 Ñ\81Ñ\82Ñ\80аниÑ\86 из другой вики',
+'action-importupload' => 'импоÑ\80Ñ\82 Ñ\81Ñ\82Ñ\80аниÑ\86 из загруженного файла',
 'action-patrol' => 'отметка чужих правок как отпатрулированных',
 'action-autopatrol' => 'отметка своих правок как отпатрулированных',
 'action-unwatchedpages' => 'просмотр списка страниц, за которыми не следят',
@@ -1846,7 +1864,7 @@ $1",
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|изменение|изменения|изменений}}',
-'enhancedrc-since-last-visit' => '$1 с последнего посещения',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|с последнего посещения}}',
 'enhancedrc-history' => 'история',
 'recentchanges' => 'Свежие правки',
 'recentchanges-legend' => 'Настройки свежих правок',
@@ -1880,7 +1898,7 @@ $1",
 'rc_categories_any' => 'Любой',
 'rc-change-size-new' => 'Размер после изменения: $1 {{PLURAL:$1|байт|байта|байт}}',
 'newsectionsummary' => '/* $1 */ новая тема',
-'rc-enhanced-expand' => 'Показать подробности (используется JavaScript)',
+'rc-enhanced-expand' => 'Показать подробности',
 'rc-enhanced-hide' => 'Скрыть подробности',
 'rc-old-title' => 'первоначально созданная как «$1»',
 
@@ -2152,6 +2170,10 @@ $1',
 'listfiles_size' => 'Размер',
 'listfiles_description' => 'Описание',
 'listfiles_count' => 'Версий',
+'listfiles-show-all' => 'Включить старые версии изображений',
+'listfiles-latestversion' => 'Текущая версия',
+'listfiles-latestversion-yes' => 'Да',
+'listfiles-latestversion-no' => 'Нет',
 
 # File description page
 'file-anchor-link' => 'Файл',
@@ -2285,8 +2307,8 @@ $1',
 'pageswithprop-text' => 'Здесь перечислены страницы, у которых были вручную переопределены отдельные свойства.',
 'pageswithprop-prop' => 'Название свойства:',
 'pageswithprop-submit' => 'Найти',
-'pageswithprop-prophidden-long' => 'длинное значение текстового свойства скрыто ($1 килобайт)',
-'pageswithprop-prophidden-binary' => 'значение двоичного свойства скрыто ($1 килобайт)',
+'pageswithprop-prophidden-long' => 'длинное значение текстового свойства скрыто ($1)',
+'pageswithprop-prophidden-binary' => 'значение двоичного свойства скрыто ($1)',
 
 'doubleredirects' => 'Двойные перенаправления',
 'doubleredirectstext' => 'На этой странице представлен список перенаправлений на другие перенаправления.
@@ -2360,6 +2382,7 @@ $1',
 'listusers' => 'Список участников',
 'listusers-editsonly' => 'Показать только тех участников, кто сделал хотя бы одну правку',
 'listusers-creationsort' => 'Упорядочить по дате создания',
+'listusers-desc' => 'Сортировать по убыванию',
 'usereditcount' => '$1 {{PLURAL:$1|правка|правки|правок}}',
 'usercreated' => '{{GENDER:$3|зарегистрировался|зарегистрировалась}} $1 в $2',
 'newpages' => 'Новые страницы',
@@ -2647,7 +2670,7 @@ $UNWATCHURL
 Последние изменения {{GENDER:$3|внёс|внесла}} [[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]]',
+'revertpage-nouser' => 'Правки (имя участника скрыто) откачены к версии {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Откачены правки $1; возврат к версии $2.',
 
 # Edit tokens
@@ -2786,7 +2809,7 @@ $1',
 'contributions' => 'Вклад {{GENDER:$1|участника|участницы}}',
 'contributions-title' => 'Вклад {{GENDER:$1|участника|участницы}} $1',
 'mycontris' => 'Вклад',
-'contribsub2' => 'Вклад $1 ($2)',
+'contribsub2' => 'Вклад {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Изменений, соответствующих заданным условиям, найдено не было.',
 'uctop' => '(текущая)',
 'month' => 'С месяца (и ранее):',
@@ -3261,6 +3284,7 @@ $2',
 'tooltip-undo' => 'Убрать внесённую правку и показать предпросмотр, с возможностью указать причину отмены',
 'tooltip-preferences-save' => 'Сохранить настройки',
 'tooltip-summary' => 'Введите краткое описание',
+'tooltip-iwiki' => '$1 — $2',
 
 # Stylesheets
 'common.css' => '/* Размещённый здесь CSS будет применяться ко всем темам оформления */',
@@ -3324,13 +3348,13 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-length' => 'Длина страницы (в байтах)',
 'pageinfo-article-id' => 'Идентификатор страницы',
 'pageinfo-language' => 'Язык страницы',
-'pageinfo-robot-policy' => 'Ð\98ндекÑ\81аÑ\86иÑ\8f Ð¿Ð¾Ð¸Ñ\81ковÑ\8bми Ñ\81лÑ\83жбами',
-'pageinfo-robot-index' => 'Ð\98ндекÑ\81иÑ\80Ñ\83еÑ\82Ñ\81Ñ\8f',
-'pageinfo-robot-noindex' => 'Не индексируется',
+'pageinfo-robot-policy' => 'Ð\98ндекÑ\81аÑ\86иÑ\8f Ð¿Ð¾Ð¸Ñ\81ковÑ\8bми Ñ\80обоÑ\82ами',
+'pageinfo-robot-index' => 'РазÑ\80еÑ\88ено',
+'pageinfo-robot-noindex' => 'Не разрешено',
 'pageinfo-views' => 'Количество просмотров',
 'pageinfo-watchers' => 'Число наблюдающих',
 'pageinfo-few-watchers' => 'Менее $1 {{PLURAL:$1|следящего|следящих}}',
-'pageinfo-redirects-name' => 'Ð\9fеÑ\80енапÑ\80авлениÑ\8f на эту страницу',
+'pageinfo-redirects-name' => 'Ð\9aолиÑ\87еÑ\81Ñ\82во Ð¿ÐµÑ\80енапÑ\80авлений на эту страницу',
 'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'Подстраницы данной страницы',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|перенаправление|перенаправления|перенаправлений}}; $3 {{PLURAL:$3|обычная|обычные|обычных}})',
@@ -3992,6 +4016,8 @@ $5
 'confirm-unwatch-top' => 'Удалить эту страницу из вашего списка наблюдения?',
 
 # Separators for various lists, etc.
+'pipe-separator' => '&#32;|&#32;',
+'word-separator' => '&#32;',
 'ellipsis' => '…',
 'parentheses' => '($1)',
 
@@ -4234,7 +4260,10 @@ MediaWiki распространяется в надежде, что она бу
 'tags-tag' => 'Имя метки',
 'tags-display-header' => 'Отображение в списках изменений',
 'tags-description-header' => 'Полное описание значения',
+'tags-active-header' => 'Активна?',
 'tags-hitcount-header' => 'Отмеченные правки',
+'tags-active-yes' => 'Да',
+'tags-active-no' => 'Нет',
 'tags-edit' => 'править',
 'tags-hitcount' => '$1 {{PLURAL:$1|изменение|изменения|изменений}}',
 
@@ -4255,6 +4284,7 @@ MediaWiki распространяется в надежде, что она бу
 'dberr-problems' => 'Извините! На данном сайте возникли технические трудности.',
 'dberr-again' => 'Попробуйте обновить страницу через несколько минут.',
 'dberr-info' => '(невозможно соединиться с сервером баз данных: $1)',
+'dberr-info-hidden' => '(Невозможно соединиться с сервером баз данных)',
 'dberr-usegoogle' => 'Пока вы можете попробовать поискать с помощью Google.',
 'dberr-outofdate' => 'Но имейте в виду, что его индекс может оказаться устаревшим.',
 'dberr-cachederror' => 'Ниже представлена закэшированная версия запрашиваемой страницы, возможно, она не отражает последних изменений.',
@@ -4390,4 +4420,19 @@ MediaWiki распространяется в надежде, что она бу
 # Image rotation
 'rotate-comment' => 'Изображение повёрнуто на $1 градус{{PLURAL:$1||а|ов}} по часовой стрелке',
 
+# Limit report
+'limitreport-title' => 'Данные анализатора:',
+'limitreport-cputime' => 'Использование времени процессора',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|секунда|секунды|секунд}}',
+'limitreport-walltime' => 'Использование в режиме реального времени',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|секунда|секунды|секунд}}',
+'limitreport-ppvisitednodes' => 'Количество узлов, посещённых препроцессором',
+'limitreport-ppgeneratednodes' => 'Количество сгенерированных препроцессором узлов',
+'limitreport-postexpandincludesize' => 'Размер раскрытых включений',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|байт|байта|байтов}}',
+'limitreport-templateargumentsize' => 'Размер аргумента шаблона',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|байт|байта|байтов}}',
+'limitreport-expansiondepth' => 'Наибольшая глубина расширения',
+'limitreport-expensivefunctioncount' => 'Количество «дорогих» функций анализатора',
+
 );
index f6df0ca..a525e96 100644 (file)
@@ -51,12 +51,12 @@ $messages = array(
 'tog-hidepatrolled' => 'Ботурууллааччы көрбүт көннөрүүтүн саҥа көннөрүүлэр тиһиктэригэр көрдөрүмэ',
 'tog-newpageshidepatrolled' => 'Ботуруулламмыт сирэйдэри саҥа сирэйдэр тиһиктэригэр көрдөрүмэ',
 'tog-extendwatchlist' => 'Кэтээһин тупсарыллыбыт испииһэгэ. Бары уларытыылар көстөллөр (бүтэһиктэр эрэ буолбатах)',
-'tog-usenewrc' => 'Саҥа уларытыылар уонна кэтэбил тиһиктэригэр уларыйыылары бөлөхтүүргэ (JavaScript баар буолуохтаах)',
+'tog-usenewrc' => 'Саҥа уларытыы уонна кэтэбил тиһиктэригэр уларыйыылары бөлөхтүүргэ',
 'tog-numberheadings' => 'Бас тыллары нүөмэрдээ',
-'tog-showtoolbar' => 'Көннөрүү үстүрүмүөннэрин көрдөр (JavaScript)',
-'tog-editondblclick' => 'Хоһулатан иккитэ баттаан сирэйи уларытыы (JavaScript)',
+'tog-showtoolbar' => 'Көннөрүү үстүрүмүөннэрин көрдөр',
+'tog-editondblclick' => 'Хоһулатан иккитэ баттаан сирэйи уларытыы',
 'tog-editsection' => '[Көннөрүү] диэн ыйынньыгынан сиэксийэны көннөрүү',
-'tog-editsectiononrightclick' => 'Сиэксийэ баһыгар уҥа тимэҕинэн<br />баттаан сиэксийэни көннөрүү (JavaScript)',
+'tog-editsectiononrightclick' => 'Сиэксийэ баһыгар уҥа тимэҕинэн баттаан сиэксийэни көннөрүү',
 'tog-showtoc' => 'Иһинээҕитин көрдөр (ыстатыйа үстэн ордук бас тыллаах буоллаҕына)',
 'tog-rememberpassword' => 'Миигин бу браузерга сигээ ($1 {{PLURAL:$1|күн|күнтэн ордуга суох}})',
 'tog-watchcreations' => 'Суруйбут ыстатыйаларбын уонна укпут билэлэрбин кэтээн көрүүгэ киллэрэн ис',
@@ -74,7 +74,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Сирэйи кэтээн көрөр дьон ахсаанын көрдөр',
 'tog-oldsig' => 'Баар илии баттааһын:',
 'tog-fancysig' => 'Бэйэ илии баттааһына (ыйынньыга суох)',
-'tog-uselivepreview' => 'ТÑ\83Ñ\82аÑ\82Ñ\8bна Ñ\85айдаÑ\85 Ð±Ñ\83олаÑ\80Ñ\8bн ÐºÓ©Ñ\80Ò¯Ò¯ (JavaScript, тургутуу быһыытынан)',
+'tog-uselivepreview' => 'ХайдаÑ\85 Ð±Ñ\83олÑ\83оÑ\85Ñ\82ааÒ\95Ñ\8bн Ñ\82Ñ\83Ñ\82аÑ\82Ñ\8bна Ñ\8dÑ\80дÑ\8d ÐºÓ©Ñ\80Ò¯Ò¯ (тургутуу быһыытынан)',
 'tog-forceeditsummary' => 'Тугу уларыппытым туһунан суруйбатахпына сэрэт',
 'tog-watchlisthideown' => 'Кэтээн көрүү испииһэгэр бэйэм уларытыыларбын көрдөрүмэ',
 'tog-watchlisthidebots' => 'Кэтээн көрүү испииһэгэр робот уларытыытын көрдөрүмэ',
@@ -87,6 +87,7 @@ $messages = array(
 'tog-showhiddencats' => 'Кистэммит категориялары көрдөр',
 'tog-norollbackdiff' => 'Төннөрүү кэнниттэн барыллар уратыларын көрдөрүмэ',
 'tog-useeditwarning' => 'Эрэдээксийэлиир сирэйтэн уларытыыларбын бигэргэппэккэ тахсаары гыннахпына сэрэтээр',
+'tog-prefershttps' => 'Манна киирэргэ куруук көмүскэллээх холбонууну туттарга',
 
 'underline-always' => 'Куруук',
 'underline-never' => 'Аннынан тардыма',
@@ -187,7 +188,7 @@ $messages = array(
 'newwindow' => '(атын түннүккэ арыллар)',
 'cancel' => 'Алҕас',
 'moredotdotdot' => 'Өссө...',
-'morenotlisted' => 'Ð\90Ñ\82Ñ\8bн Ñ\81Ñ\83оÑ\85...',
+'morenotlisted' => 'Ð\91Ñ\83 Ñ\82иһик Ñ\82олоÑ\80Ñ\83Ñ\82а Ñ\81Ñ\83оÑ\85.',
 'mypage' => 'Сирэй',
 'mytalk' => 'Кэпсэтэр сирим',
 'anontalk' => 'Бу IP-га ырытыы',
@@ -371,6 +372,11 @@ $1',
 # General errors
 'error' => 'Алҕас',
 'databaseerror' => 'Билии олоҕор сыыһа',
+'databaseerror-text' => 'Билии олоҕор алҕас таҕыста.
+Бырагыраамма алҕаһа буолуон сөп.',
+'databaseerror-textcl' => 'Билии олоҕор алҕас таҕыста.',
+'databaseerror-query' => 'Ыйытык: $1',
+'databaseerror-error' => 'Алҕас: $1',
 'laggedslavemode' => 'Болҕой: Бу сирэй бүтэһик уларытыылара суох буолуон сөп',
 'readonly' => 'Билии олоҕун уларытар бобуллубут',
 'enterlockreason' => 'Уларытыыны бобуу төрүөтүн уонна төһө өр бобулларын ый.',
@@ -451,8 +457,6 @@ $2',
 # Login and logout pages
 'logouttext' => "'''Эн тиһиликтэн таҕыстыҥ.'''
 
-{{SITENAME}} ситим-сиргэ билигин урукку ааккынан буолбакка IP-аадырыһынан эрэ көстөҕүн.
-Салгыы ааккын ааттаабакка үлэлиэххин сөп, эбэтэр саҥаттан урукку ааккынан дуу, атын аатынан дуу <span class='plainlinks'>[$1 киириэххин]</span> сөп.
 Сорох сирэйдэр өссө даҕаны эйигин урукку ааккынан көрдөрүөхтэрин сөп, ону суох гыныаххын баҕардаххына интэриниэт көрдөрөөччүҥ кээһин ыраастаа.",
 'welcomeuser' => 'Нөрүөн нөргүй, $1!',
 'welcomecreation-msg' => 'Аатыҥ бэлиэтэннэ.
@@ -499,7 +503,7 @@ $2',
 'createacct-emailoptional' => 'Email аадырыс (булгуччута суох)',
 'createacct-email-ph' => 'Эл аадырыскын суруй',
 'createacct-another-email-ph' => 'Эл. почтаҕын киллэр',
-'createaccountmail' => 'Быстах киирии тылы туһаныы уонна ону email-ынан ыытыы',
+'createaccountmail' => 'Быстах киирии тылы туһаныы уонна ону ыйыллыбыт аадырыска ыытыы',
 'createacct-realname' => 'Дьиҥнээх аатыҥ (булгуччута суох)',
 'createaccountreason' => 'Төрүөтэ:',
 'createacct-reason' => 'Төрүөтэ',
@@ -576,11 +580,13 @@ $2',
 
 Саҥа аат сыыһа оҥоһуллубут буоллаҕына тугу да гыныа суоххун сөп.',
 'usernamehasherror' => 'Аакка эрэһиэккэ бэлиэтин туттар сатаммат',
-'login-throttled' => 'Ð\9dаһаа Ñ\8dлбÑ\8dÑ\85Ñ\82ик Ð±Ñ\8dйÑ\8dÒ¥ Ð°Ð°ÐºÐºÑ\8bн билиһиннэрэ сатаатыҥ.
-Бука диэн кыратык тохтуу түһэн баран өссө боруобалаа.',
+'login-throttled' => 'Ð\90аккÑ\8bн Ð°Ò»Ð°Ñ\80а Ñ\8dлбÑ\8dÑ\85Ñ\82ик билиһиннэрэ сатаатыҥ.
+Бука диэн $1 буолан баран өссө киирэн көрөөр.',
 'login-abort-generic' => 'Бу аатынан сатаан киирбэтиҥ - быстан хаалла',
 'loginlanguagelabel' => 'Омугун тыла: $1',
 'suspicious-userlogout' => 'Сеансы түмүктүүр ыйытыгыҥ ылыныллыбата, тоҕо диэтэххэ браузер эбэтэр кээштыыр прокси алҕас ыыппыт ыйытыктарыгар майгынныыр.',
+'createacct-another-realname-tip' => 'Дьиҥнээх аатыҥ булгуччута суох.
+Ыйдаххына уларыппыт сирэйиҥ устуоруйатыгар көстөр буолуоҕа.',
 
 # Email sending
 'php-mail-error-unknown' => 'mail() PHP-функциятыгар туох эрэ алҕас тахсыбыт',
@@ -596,8 +602,7 @@ $2',
 'newpassword' => 'Саҥа киирии тыл:',
 'retypenew' => 'Саҥа киирии тылы хатылаа:',
 'resetpass_submit' => 'Киирии тылы уларыт уонна киир',
-'changepassword-success' => 'Your password has been changed successfully! Now logging you in...
-Киирии тылыҥ этэҥҥэ уларыйда. Сотору кэминэн киириэҥ...',
+'changepassword-success' => 'Киирии тылыҥ этэҥҥэ уларыйда!',
 'resetpass_forbidden' => 'Киирии тылы уларытар сатаммат',
 'resetpass-no-info' => 'Ааккын билиһиннэрдэххинэ эрэ бу сирэйгэ быһа тиийиэххин сөп.',
 'resetpass-submit-loggedin' => 'Киирии тылы уларытыы',
@@ -658,6 +663,11 @@ $2
 'changeemail-submit' => 'Аадырыһы уларыт',
 'changeemail-cancel' => 'Тохтот',
 
+# Special:ResetTokens
+'resettokens' => 'Токеннары бырах',
+'resettokens-legend' => 'Токеннары бырах',
+'resettokens-tokens' => 'Токеннар:',
+
 # Edit page toolbar
 'bold_sample' => 'Модьу бичик',
 'bold_tip' => 'Модьу бичик',
@@ -735,7 +745,6 @@ IP-аадырыһыҥ $3, бобуу нүөмэрэ — #$5.
 'loginreqpagetext' => 'Атын сирэйдэри көрөргө маны оҥоруохтааххын: $1.',
 'accmailtitle' => 'Киирии тыл ыытылынна.',
 'accmailtext' => "[[User talk:$1|$1]] кыттааччыга түбэспиччэ бэлиэлэртэн оҥоһуллубут киирии тыл бу аадырыска $2 ыытылынна.
-
 Тиһиккэ бэлиэтэнэн баран киирии тылгын ''[[Special:ChangePassword|уларытыаххын]]'' сөп.",
 'newarticle' => '(Саҥа ыстатыйа)',
 'newarticletext' => 'Эн суох сирэйгэ киирэ сатаатыҥ.
@@ -1179,7 +1188,7 @@ $1",
 'prefs-rendering' => 'Тас көрүҥэ',
 'saveprefs' => 'Бигэргэт',
 'resetprefs' => 'Бигэргэтиллибэтэх уларыйыылары сот',
-'restoreprefs' => 'Туруоруулары саҥаттан',
+'restoreprefs' => 'Туруоруулары саҥаттан (салааларга барыларыгар)',
 'prefs-editing' => 'Уларытыы',
 'rows' => 'Строкаалара:',
 'columns' => 'Колонкалара:',
@@ -1236,9 +1245,9 @@ $1",
 'badsig' => 'Сыыһа илии баттааһын; HTML тиэгтэрин көр.',
 'badsiglength' => 'Наһаа уһун илии баттааһын.
 $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}} ордук буолуо суохтаах.',
-'yourgender' => 'ЭÑ\80 ÐºÐ¸Ò»Ð¸Ñ\82Ñ\8d/дÑ\8cаÑ\85Ñ\82аÑ\80а:',
-'gender-unknown' => 'Ыйыллыбатах',
-'gender-male' => 'ЭÑ\80 ÐºÐ¸Ò»Ð¸',
+'yourgender' => 'ХайаÑ\82а Ð­Ð¹Ð¸Ñ\8dÑ\85Ñ\8d Ñ\81өп Ñ\82үбÑ\8dÒ»Ñ\8dÑ\80ий?',
+'gender-unknown' => 'Ыйбат инибин',
+'gender-male' => 'Ð\9aини Ð±Ð¸Ð¸ÐºÐ¸ Ñ\81иÑ\80Ñ\8dйдÑ\8dÑ\80и Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80',
 'gender-female' => 'Дьахтар',
 'prefs-help-gender' => 'Булгуччута суох. Бырагыраамма сорох дьоҥҥо туһаайыллыбыт биллэриилэригэр эбэтэр кинилэргэ сыһыаннаах этиилэригэр кытааччы дьахтарыттан эр киһититтэн көрөн этии тутулун уларытан биэриэн сөп. Туора дьоҥҥо көстөр бэлиэтээһин.',
 'email' => 'Почта',
@@ -1251,7 +1260,7 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}}
 'prefs-signature' => 'Илии баттааһына',
 'prefs-dateformat' => 'Күн-дьыл көрүҥэ (формаата)',
 'prefs-timeoffset' => 'Кэм уратыта',
-'prefs-advancedediting' => 'Сүрүн (барытыгар сыһыаннаах)',
+'prefs-advancedediting' => 'Сүрүн туруоруулар',
 'prefs-editor' => 'Эрэдээктэр',
 'prefs-preview' => 'Инники көрүү',
 'prefs-advancedrc' => 'Дириҥэтиллибит туруоруулар',
@@ -1262,6 +1271,7 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}}
 'prefs-displaysearchoptions' => 'Көстүүтүн туруоруулара',
 'prefs-displaywatchlist' => 'Көстүүтүн туруоруулара',
 'prefs-diffs' => 'Уратылара',
+'prefs-help-prefershttps' => 'Аныгыскы киириигэр үлэлиир буолуо.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'Сөп курдук көстөр',
@@ -1285,7 +1295,7 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}}
 'userrights-no-interwiki' => 'Атын биикилэргэ кыттааччылар бырааптарын уларытар быраабыҥ суох.',
 'userrights-nodatabase' => '$1 билэ тиһигэ (олоҕо, база данных) суох эбэтэр локальнай буолбатах.',
 'userrights-nologin' => 'Эн дьон бырааптарын уларытаргар администратор быһыытынан [[Special:UserLogin|бэлиэтэниэхтээххин]].',
-'userrights-notallowed' => 'Ð\91Ñ\8dлиÑ\8dÑ\82Ñ\8dммиÑ\82 Ð°Ð°ÐºÐºÑ\8bнан Ð°Ñ\82Ñ\8bн ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b Ð±Ñ\8bÑ\80аабÑ\8bн уларытар кыаҕыҥ суох эбит.',
+'userrights-notallowed' => 'Ð\90Ñ\82Ñ\8bн ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b Ð±Ñ\8bÑ\80аабÑ\8bн Ñ\8dбÑ\8dÑ\80 Ñ\83онна уларытар кыаҕыҥ суох эбит.',
 'userrights-changeable-col' => 'Эн уларытар кыахтаах бөлөхтөрүҥ',
 'userrights-unchangeable-col' => 'Бу бөлөхтөрү уларытар кыаҕыҥ суох',
 'userrights-conflict' => 'Кыттааччы быраабын быһаарарга алҕас таҕыста! Хатылаан көр.',
@@ -1353,7 +1363,7 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}}
 'right-hideuser' => 'Кыттааччы аатын бобуу уонна кистээһин',
 'right-ipblock-exempt' => 'IP хааччахтааһынын, аптамаатынан уонна диапазоннары хааччахтааһыны тумнуу',
 'right-proxyunbannable' => 'Прокси аптааматынан хааччахтааһынын тумнуу',
-'right-unblockself' => 'хааччаҕы бэйэ устуута',
+'right-unblockself' => 'Хааччаҕы бэйэ устуута',
 'right-protect' => 'Сирэйдэр көмүскэллэрин таһымын уонна каскаадынан көмүскэммит сирэйдэри уларытыы',
 'right-editprotected' => 'Уларытыллар сирэйдэр "{{int:protect-level-sysop}}" таһымынан көмүскэммиттэр',
 'right-editsemiprotected' => 'Уларытыллар сирэйдэр "{{int:protect-level-autoconfirmed}}" таһымынан көмүскэммиттэр',
@@ -1436,6 +1446,7 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}}
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|уларытыы|уларытыылар}}',
+'enhancedrc-history' => 'устуоруйата',
 'recentchanges' => 'Кэнники уларытыылар',
 'recentchanges-legend' => 'Кэлиҥҥи уларытыылар хайдах көстөллөрүн туруоруу',
 'recentchanges-summary' => 'Манна хаһан оҥоһуллубуттарынан сааһыланан {{SITENAME}} кэнники уларыытыылара көстөллөр.',
@@ -1467,7 +1478,7 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}}
 'rc_categories_any' => 'Ханнык баҕарар',
 'rc-change-size-new' => 'Уларытыы кээмэйэ: $1 баайт',
 'newsectionsummary' => '/* $1 */ саҥа сиэксийэ',
-'rc-enhanced-expand' => 'Сиһилии көрдөр (JavaScript туһаныллар)',
+'rc-enhanced-expand' => 'Сиһилии көрдөр',
 'rc-enhanced-hide' => 'Сиһилиитин көрдөрүмэ',
 'rc-old-title' => 'бастаан бу аатынан суруллубут "$1"',
 
@@ -1730,8 +1741,7 @@ $1',
 'upload_source_file' => ' (билэ көмпүүтэргэр баар)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Бу анал сирэй киллэриллибит билэлэри барытын көрдөрөр.
-Киллэрээччинэн наардаатахха киллэрээччи бүтэһик көннөрүүтэ эрэ көстүөҕэ.',
+'listfiles-summary' => 'Бу анал сирэй киллэриллибит билэлэри барытын көрдөрөр.',
 'listfiles_search_for' => 'Миэдьийэни (ойууну) аатынан көрдөтүү:',
 'imgfile' => 'билэ',
 'listfiles' => 'Билэлэр',
@@ -1742,6 +1752,9 @@ $1',
 'listfiles_size' => 'Кээмэйэ',
 'listfiles_description' => 'Быһаарыыта',
 'listfiles_count' => 'Барыллар',
+'listfiles-latestversion' => 'Билиҥҥи барыла',
+'listfiles-latestversion-yes' => 'Сөп',
+'listfiles-latestversion-no' => 'Суох',
 
 # File description page
 'file-anchor-link' => 'Билэ',
@@ -1874,8 +1887,8 @@ $1',
 'pageswithprop-text' => 'Манна сорох туруоруулара уларытыллыбыт сирэйдэр көстүбүттэр.',
 'pageswithprop-prop' => 'Туруоруу аата:',
 'pageswithprop-submit' => 'Толор',
-'pageswithprop-prophidden-long' => 'уһун тиэкис кистэммит ($1 килобайт)',
-'pageswithprop-prophidden-binary' => 'бинаар суолта кистэммит ($1 килобайт)',
+'pageswithprop-prophidden-long' => 'уһун тиэкис кистэммит ($1)',
+'pageswithprop-prophidden-binary' => 'бинаар суолта кистэммит ($1)',
 
 'doubleredirects' => 'Хос көһөрөөһүн',
 'doubleredirectstext' => 'Бу сирэйгэ атын сиргэ утаарар хос утаарыылар тиһиктэрэ көстөр.
@@ -2030,7 +2043,7 @@ $1',
 'linksearch-ok' => 'Бул',
 'linksearch-text' => 'Туруоран биэрэр бэлиэлэри туһаныахха сөп, холобур,  <code>*.wikipedia.org</code>.
 Үрдүкү таһымнаах домен буолуохтаах, холобур <code>*.org</code>.<br />
-Өйөнөр боротокуоллар: <code>$1</code> (көрдүүргэр ханнык да боротокуолу талбатаххына http:// туруоруллуо)',
+Өйөнөр {{PLURAL:$2|боротокуол|боротокуоллар}}: <code>$1</code> (көрдүүргэр ханнык да боротокуолу талбатаххына http:// туруоруллуо)',
 'linksearch-line' => 'Мантан $2 манна $1 ыйынньык',
 'linksearch-error' => 'Туруоран биэрэр бэлиэлэри аадырыс/hostname саҕаланыытыгар эрэ туттуохха сөп.',
 
@@ -2157,30 +2170,31 @@ $1',
 'enotif_lastvisited' => 'Бутэһик киирииҥ кэнниттэн оҥоһуллубут уларыйыылары барытын көрөргө манна киир: $1.',
 'enotif_lastdiff' => 'Уларытыыны манна көрүҥ: $1.',
 'enotif_anon_editor' => 'ааттамматах кыттааччы $1',
-'enotif_body' => 'Ð\9aүндү $WATCHINGUSERNAME,
+'enotif_body' => 'Ð\90лама ÐºÒ¯Ð½ Ñ\81Ñ\8bÑ\80дÑ\8bгÑ\8bнан, $WATCHINGUSERNAME!
 
-«{{SITENAME}}» $PAGETITLE кыттаачыга сыһыаннаах сирэйи $PAGEEDITDATE $PAGEEDITOR кыттааччы $CHANGEDORCREATED. Сирэй билиҥҥи туругун манна көр: $PAGETITLE_URL.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Уларытыы кылгас ис хоһооно: $PAGESUMMARY $PAGEMINOREDIT
 
-Уларыппыт киһи:
\8dл. Ð°Ð°Ð´Ñ\8bÑ\80Ñ\8bÒ»а: $PAGEEDITOR_EMAIL
\91иикигÑ\8d Ñ\81иÑ\80Ñ\8dйÑ\8d: $PAGEEDITOR_WIKI
+Уларыппыт киһиэхэ суруйуоххун сөп:
\8dл. Ð¿Ð¾Ñ\87Ñ\82а: $PAGEEDITOR_EMAIL
±Ð¸Ð¸ÐºÐ¸: $PAGEEDITOR_WIKI
 
-Бу сирэйи көрө иликкинэ хос биллэрии кэлиэ суоҕа. Арай кэтэбили туруорар сиргэ "уларытыыны биллэрэргэ" диэни иккистээн туруордаххына кэлиэн сөп.
+Бу сирэйи көрбөтөххүнэ биллэриилэр уонна кэлиэхтэрэ суоҕа. Биллэриилэри аналлаах сирэйгэ арааран кэбиһиэххин эмиэ сөп.
 
-         Бары үтүөнү кытта, {{SITENAME}} биллэрэр систиэмэтэ
+             Бары үтүөнү кытта, {{SITENAME}} биллэрэр тиһигэ
 
 --
-Кэтиир сирэйдэриҥ тиһигин уларытарга маны көр:
+Биллэрии кэлэрин салайыы
+{{canonicalurl:{{#special:Preferences}}}}
+
+Кэтиир тиһиги уларытыы
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
\91Ñ\83 Ñ\81иÑ\80Ñ\8dйи ÐºÑ\8dÑ\82Ñ\8dбил Ñ\82иһигиÑ\82Ñ\82Ñ\8dн Ñ\81оÑ\82оÑ\80го Ð¼Ð°Ð½Ð½Ð° ÐºÐ¸Ð¸Ñ\80:
\9aÑ\8dÑ\82ииÑ\80 Ñ\82иһикÑ\82Ñ\8dн Ñ\81иÑ\80Ñ\8dйдÑ\8dÑ\80и Ñ\81оÑ\82Ñ\83Ñ\83
 $UNWATCHURL
 
-Көмөлөһүннэрэр уонна быһаартарар сир:
+Көмө
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
 'created' => 'айыллыбыт',
 'changed' => 'уларыппыт (уларытыллыбыт)',
index 209b90c..51ba6e0 100644 (file)
@@ -195,10 +195,11 @@ $messages = array(
 'tog-showhiddencats' => 'Ammustra li catigurìi ammucciati.',
 'tog-norollbackdiff' => "Umettiri li ''diff'' doppu aviri fattu nu ''rollback''",
 'tog-useeditwarning' => 'Avvisa quannu si lasaa na paggina di canci cu canci nu sarbati',
+'tog-prefershttps' => 'Usa sempri na cunnissioni sicura quannu trasi',
 
 'underline-always' => 'sempri',
 'underline-never' => 'mai',
-'underline-default' => 'manteni li mpustazzioni dû browser',
+'underline-default' => 'manteni li mpustazzioni dû browser o dû tema',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Stili da casedda di canciamentu:',
@@ -295,7 +296,7 @@ $messages = array(
 'newwindow' => '(grapi na finestra nova)',
 'cancel' => 'annulla',
 'moredotdotdot' => 'Àutru...',
-'morenotlisted' => 'cchiossai non ntâ lista',
+'morenotlisted' => 'Sta lista è ncumpreta',
 'mypage' => 'Pàggina',
 'mytalk' => 'la mè pàggina di discussioni',
 'anontalk' => 'Discussione pi stu IP',
index 1f90791..adcee78 100644 (file)
@@ -201,8 +201,8 @@ $messages = array(
 'tog-extendwatchlist' => 'මෑත වෙනස්වීම් පමණක් නොව, අදාළ සියළු වෙනස්වීම් දක්වා පෙන්වන අයුරින් මුර-ලැයිස්තුව පුළුල් කරන්න',
 'tog-usenewrc' => 'මෑත වෙනස්වීම් සහ මුර ලැයිස්තුව හී පිටුව අනුව සමූහ වෙනස්වීම් (ජාවාස්ක්‍රිප්ට් ඇවැසිය)',
 'tog-numberheadings' => 'ශීර්ෂ-නාම ස්වයංක්‍රීයව අංකනය කරන්න',
-'tog-showtoolbar' => 'සංස්කරණ මෙවලම්තීරුව පෙන්වන්න (ජාවාස්ක්‍රිප්ට්)',
-'tog-editondblclick' => 'ද්විත්ව-ක්ලික් කිරීම මගින් පිටු සංස්කරණය අරඹන්න (ජාවාස්ක්‍රිප්ට්)',
+'tog-showtoolbar' => 'සංස්කරණ මෙවලම්තීරුව පෙන්වන්න',
+'tog-editondblclick' => 'ද්විත්ව-ක්ලික් කිරීම මගින් පිටු සංස්කරණය අරඹන්න',
 'tog-editsection' => '[සංස්කරණ] සබැඳියාවන් මගින් ඡේද සංස්කරණය සක්‍රීය කරන්න',
 'tog-editsectiononrightclick' => 'ඡේද ශීර්ෂ මත දකුණු-ක්ලික් කිරීමෙන් ඡේද සංස්කරණය සක්‍රීය කරන්න (ජාවාස්ක්‍රිප්ට්)',
 'tog-showtoc' => 'පටුන පෙන්වන්න ( තුනකට වඩා වැඩියෙන් ශීර්ෂ-නාම අඩංගු පිටු සඳහා)',
@@ -272,7 +272,7 @@ $messages = array(
 'july' => 'ජූලි',
 'august' => 'අගෝස්තු',
 'september' => 'සැප්තැම්බර්',
-'october' => 'à¶\94à¶\9aà·\8aතà·\9dබර්',
+'october' => 'à¶\94à¶\9aà·\8aතà·\9cමà·\8aබර්',
 'november' => 'නොවැම්බර්',
 'december' => 'දෙසැම්බර්',
 'january-gen' => 'ජනවාරි',
@@ -376,7 +376,7 @@ $messages = array(
 'errorpagetitle' => 'දෝෂය',
 'returnto' => '$1 වෙත නැවත යන්න.',
 'tagline' => '{{SITENAME}} වෙතින්',
-'help' => 'à¶\8bදà·\80à·\8a',
+'help' => 'à¶\8bදà·\80à·\94',
 'search' => 'සොයන්න',
 'searchbutton' => 'සොයන්න',
 'go' => 'යන්න',
@@ -410,7 +410,7 @@ $messages = array(
 'postcomment' => 'නව ඡේදයක්',
 'articlepage' => 'අන්තර්ගත පිටුව නරඹන්න',
 'talk' => 'සාකච්ඡාව',
-'views' => 'à¶\85දà·\84à·\83à·\8a à¶\8bදà·\84à·\83à·\8a',
+'views' => 'දà·\98à·\82à·\8aටà·\92',
 'toolbox' => 'මෙවලම් ගොන්න',
 'userpage' => 'පරිශීලක පිටුව නරඹන්න',
 'projectpage' => 'ව්‍යාපෘති පිටුව නරඹන්න',
@@ -466,7 +466,7 @@ $1",
 [[Special:Version|අනුවාද පිටුව]] බලන්න.',
 
 'ok' => 'හරි',
-'retrievedfrom' => '"$1" à·\80à·\99තà·\92නà·\8a à¶±à·\90à·\80ත à¶½à¶¶à·\8fà¶\9cනà·\8aනà·\8f à¶½à¶¯ි',
+'retrievedfrom' => '"$1" à·\80à·\99තà·\92නà·\8a à·\83මà·\8aපà·\8aâ\80\8dරà·\80à·\9aà·\81නය à¶\9aà·\99රà·\92ණි',
 'youhavenewmessages' => 'ඔබ හට $1 ($2)',
 'newmessageslink' => 'නව පණිවුඩ',
 'newmessagesdifflink' => 'අවසාන වෙනස',
@@ -971,7 +971,7 @@ $2
 'nocreate-loggedin' => '{{SITENAME}} හි නව පිටු තැනීමට අවසරයක් ඔබ හට ප්‍රදානය කොට නොමැත.',
 'sectioneditnotsupported-title' => 'කොටසක් සංස්කරණය කිරීම සඳහා සහාය නොදක්වයි',
 'sectioneditnotsupported-text' => 'මෙම පිටුවේදී කොටසක් සංස්කරණය කිරීම සඳහා සහාය නොදක්වයි',
-'permissionserrors' => 'à¶\85à·\80à·\83රයනà·\8a à¶´à·\92à·\85à·\92බඳ à¶¯à·\9dà·\82යනà·\8a à¶´à·\80තà·\93',
+'permissionserrors' => 'à¶\85à·\80à·\83රදà·\93මà·\9a à¶¯à·\9dà·\82යà¶\9aà·\92',
 'permissionserrorstext' => 'පහත දැක්වෙන {{PLURAL:$1|හේතුව|හේතූන්}} නිසා, ඔබ හට එය සිදුකිරීමට අවසර ලබා දීමට නොහැක:',
 'permissionserrorstext-withaction' => 'පහත {{PLURAL:$1|හේතුව|හේතු}} නිසා, ඔබ හට $2 සඳහා අවසර නොමැත:',
 'recreate-moveddeleted-warn' => "'''අවවාදයයි: පෙරදී මකාදැමුණු පිටුවක් ඔබ විසින් යළි-තනමින් පවතියි.'''
@@ -1206,7 +1206,7 @@ $1",
 
 # Search results
 'searchresults' => 'ගවේෂණ ප්‍රතිඵල',
-'searchresults-title' => '"$1" à·\83ඳà·\84à·\8f à·\83à·\99à·\80à·\94මà·\8a ප්‍රතිඵල',
+'searchresults-title' => '"$1" à·\83ඳà·\84à·\8f à\9cà·\80à·\9aà·\82ණ ප්‍රතිඵල',
 'searchresulttext' => '{{SITENAME}} ගවේෂණය පිළිබඳ වැඩි විස්තර සඳහා , [[{{MediaWiki:Helppage}}|{{int:help}}]] බලන්න.',
 'searchsubtitle' => 'ඔබගේ ගවේෂණය වූයේ  \'\'\'[[:$1]]\'\'\'  සඳහාය ([[Special:Prefixindex/$1| "$1" යෙන් ඇරඹෙන සියළු පිටු]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1| "$1" වෙත සබැ‍ඳෙන සියළු පිටු]])',
 'searchsubtitleinvalid' => "ඔබගේ ගවේෂණය වූයේ  '''$1''' සඳහාය",
@@ -1219,7 +1219,7 @@ $1",
 'nextn' => 'ඊළඟ {{PLURAL:$1|$1}}',
 'prevn-title' => 'පූර්ව {{PLURAL:$1|ප්‍රතිඵලය|ප්‍රතිඵලයන් $1}}',
 'nextn-title' => 'මීලඟ {{PLURAL:$1|ප්‍රතිඵලය|ප්‍රතිඵල $1}}',
-'shown-title' => 'එක් පිටුවක {{PLURAL:$1|ප්‍රතිඵලයක්|ප්‍රතිඵල $1 ක්}} බැගින් පෙන්වන්න',
+'shown-title' => 'එක් පිටුවක {{PLURAL:$1|ප්‍රතිඵලයක්|ප්‍රතිඵල $1 ක්}} බැගින් පෙන්වන්න',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) නරඹන්න',
 'searchmenu-legend' => 'ගවේෂණ තෝරාගැනීම්',
 'searchmenu-exists' => "'''මෙම විකියෙහි \"[[:\$1]]\" ලෙස නම් කර ඇති පිටුවක් ඇත.'''",
@@ -1372,7 +1372,7 @@ HTML ටැගයන් පිරික්සන්න.',
 'prefs-signature' => 'අත්සන',
 'prefs-dateformat' => 'දින ආකෘතිය',
 'prefs-timeoffset' => 'වේලා හිලව්ව',
-'prefs-advancedediting' => 'à·\83à·\8fමà·\8fනà·\8aâ\80\8dය',
+'prefs-advancedediting' => 'පà·\8aâ\80\8dරධà·\8fන à·\80à·\92à¶\9aලà·\8aපයනà·\8a',
 'prefs-advancedrc' => 'වැඩිදුර සැකසුම් තෝරාගැනීම',
 'prefs-advancedrendering' => 'වැඩිදුර සැකසුම් තෝරාගැනීම',
 'prefs-advancedsearchoptions' => 'ප්‍රගත විකල්පයන්',
@@ -1570,7 +1570,7 @@ HTML ටැගයන් පිරික්සන්න.',
 'rc_categories_any' => 'ඕනෑම',
 'rc-change-size' => '$1',
 'newsectionsummary' => '/* $1 */ නව ඡේදය',
-'rc-enhanced-expand' => 'විස්තර පෙන්වන්න (ජාවාස්ක්‍රිප්ට් අවශ්‍යයි)',
+'rc-enhanced-expand' => 'විස්තර පෙන්වන්න',
 'rc-enhanced-hide' => 'විස්තර සඟවන්න',
 
 # Recent changes linked
@@ -1978,7 +1978,7 @@ When filtered by user, only files where that user uploaded the most recent versi
 'fewestrevisions' => 'ස්වල්පතම සංශෝධන සහිත පිටු',
 
 # Miscellaneous special pages
-'nbytes' => '{{PLURAL:$1|බයà·\92ටà·\92|බයà·\92ටà·\8a}} $1 à¶\9aà·\8a',
+'nbytes' => '{{PLURAL:$1|à¶\91à¶\9aà·\8a à¶¶à¶ºà·\92ටයà¶\9aà·\8a|බයà·\92ට $1 à¶\9aà·\8a}}',
 'ncategories' => '{{PLURAL:$1|එක් ප්‍රවර්ගයකි|ප්‍රවර්ගයන් $1 කි}}',
 'ninterwikis' => '{{PLURAL:$1|අන්තර්විකි}} $1 ක්',
 'nlinks' => '{{PLURAL:$1|එක් සබැඳියකි|සබැඳියන් $1 කි}}',
@@ -2854,7 +2854,7 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'tooltip-pt-preferences' => 'මගේ අභිරුචි',
 'tooltip-pt-watchlist' => 'වෙනස්වීම් සිදුවී තිබේදැයි යන්න පිලිබඳව ඔබගේ විමසුමට ලක්ව ඇති පිටු ලැයිස්තුව',
 'tooltip-pt-mycontris' => 'ඔබගේ දායකත්වයන් ලැයිස්තුව‍',
-'tooltip-pt-login' => 'පà·\92à·\80à·\92à·\83à·\93ම à·\80ඩà·\8f à¶ºà·\9dà¶\9cà·\8aâ\80\8dය à·\80à·\9a. à¶±à¶¸à·\94ත්, එය අනිවාර්ය නැත',
+'tooltip-pt-login' => 'පà·\92à·\80à·\92à·\83à·\93ම à\9aà·\99රà·\99à·\84à·\92 à¶\94බ à¶\8bදà·\8aâ\80\8dයà·\9dà¶\9cà·\92මතà·\8a à¶\9aà·\99රà·\99යà·\92. à¶\91à·\84à·\99ත්, එය අනිවාර්ය නැත',
 'tooltip-pt-anonlogin' => 'එය අවශ්‍ය‍යෙන් කල යුත්තක් ‍නොවුනද, ප්‍රවිෂ්ට වීම සඳහා ඔබ ධෛර්යමත් කරනු ලැබේ.',
 'tooltip-pt-logout' => 'නික්මීම',
 'tooltip-ca-talk' => 'අන්තර්ගත පිටුව පිළිබඳ සාකච්ඡාව',
@@ -2872,23 +2872,23 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'tooltip-ca-unwatch' => 'මෙම පිටුව ඔබගේ මුර-ලැයිස්තුවෙන් ඉවත් කරන්න',
 'tooltip-search' => '{{SITENAME}} ගවේෂණය',
 'tooltip-search-go' => 'මෙම නාමය එලෙසම ඇති පිටුවක් ඇත්නම් එය වෙත යන්න',
-'tooltip-search-fulltext' => 'මà·\99ම à¶´à·\8fඨය සඳහා පිටු ගවේෂණය කරන්න',
+'tooltip-search-fulltext' => 'මà·\99ම à¶´à·\99à·\85 සඳහා පිටු ගවේෂණය කරන්න',
 'tooltip-p-logo' => 'මුල් පිටුව‍ට පිවිසෙන්න',
 'tooltip-n-mainpage' => 'මුල් පිටුව‍ට පිවිසෙන්න',
 'tooltip-n-mainpage-description' => 'මුල් පිටුව‍ට පිවිසෙන්න',
-'tooltip-n-portal' => 'ව්‍යාපෘතිය පිළිබඳ, ඔබට කල හැක්කේ කුමක්ද, තොරතුරු සොයාගත හැක්කේ කොතැනද',
+'tooltip-n-portal' => 'ව්‍යාපෘතිය පිළිබඳ විස්තර, ඔබට කල හැකි දේ, තොරතුරු සොයාගත හැකි තැන්',
 'tooltip-n-currentevents' => 'කාලීන සිදුවීම් පිළිබඳ පසුබිම් තොරතුරු සොයා දැනගන්න',
 'tooltip-n-recentchanges' => 'විකියෙහි මෑත වෙනස්කිරීම් ලැයිස්තුවක්',
-'tooltip-n-randompage' => 'à¶\85à·\84ඹà·\94 à¶´à·\92ටà·\94à·\80à¶\9aà·\8a à¶´à·\96රණය කරන්න',
+'tooltip-n-randompage' => 'à¶\85à·\84ඹà·\94 à¶´à·\92ටà·\94à·\80à¶\9aà·\8a à¶¶à·\8f à¶\9cත කරන්න',
 'tooltip-n-help' => 'සොයා දැනගත හැකි තැන',
-'tooltip-t-whatlinkshere' => 'මෙය හා සබැ‍ඳෙන සියළු විකි පිටු ලැයිස්තුව',
+'tooltip-t-whatlinkshere' => 'මෙය හා සබැ‍ඳෙන සියළු විකි පිටු ලැයිස්තුවක්',
 'tooltip-t-recentchangeslinked' => 'මෙම පිටුව හා සබැඳි පිටුවල ‍නව වෙනස්වීම්',
 'tooltip-feed-rss' => 'මෙම පිටුව සඳහා RSS පෝෂකය',
 'tooltip-feed-atom' => 'මෙම පිටුව සඳහා අටෝම් පෝෂකය',
 'tooltip-t-contributions' => 'මෙම පරිශීලකයාගේ දායකත්ව ලැයිස්තුව නරඹන්න',
 'tooltip-t-emailuser' => 'මෙම පරිශීලකයාට විද්‍යුත්-තැපෑලක් යවන්න',
 'tooltip-t-upload' => 'ගොනු උඩුගත කරන්න',
-'tooltip-t-specialpages' => 'සියලු විශේෂ පිටු ලැයිස්තුව',
+'tooltip-t-specialpages' => 'සියලු විශේෂ පිටු ලැයිස්තුවක්',
 'tooltip-t-print' => 'මෙම පිටුවෙහි මුද්‍රිත අනුවාදය',
 'tooltip-t-permalink' => 'පිටුවෙහි මෙම අනුවාදයට ස්ථාවර සබැඳිය',
 'tooltip-ca-nstab-main' => 'අන්තර්ගත පිටුව නරඹන්න',
@@ -3070,7 +3070,7 @@ $1',
 'bad_image_list' => 'ආකෘතිය පහත පරිදි වේ:
 
 ලැයිස්තු අයිතම පමණක් (* යන්නෙන් ආරම්භ වන පේළි) සළකා බලනු ලැබේ.
-පේළිය මත ඇති පළමු සබැඳිය අයහපත් ගොනුවකට යොමු වන සබැඳියක් විය යුතුය.
+පේළියක් මත ඇති පළමු සබැඳිය අයහපත් ගොනුවකට යොමු වන සබැඳියක් විය යුතුය.
 එම පේළියෙහිම ඉනික්බිති හමුවන ඕනෑම සබැඳියක් සලකනු ලබන්නේ ව්‍යහිවාරයක් ලෙසටය, එනම්, ගොනු එක පේළියට පැවතිය හැකි පිටු.',
 
 /*
index 797b070..703abf7 100644 (file)
@@ -1696,7 +1696,7 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'rc_categories_any' => 'akékoľvek',
 'rc-change-size-new' => '$1 {{PLURAL:$1|bajt|bajty|bajtov}} po zmene',
 'newsectionsummary' => '/* $1 */ nová sekcia',
-'rc-enhanced-expand' => 'Zobraziť podrobnosti (vyžaduje JavaScript)',
+'rc-enhanced-expand' => 'Zobraziť podrobnosti',
 'rc-enhanced-hide' => 'Skryť podrobnosti',
 'rc-old-title' => 'pôvodne vytvorené ako "$1"',
 
index 168f14e..e33787d 100644 (file)
@@ -216,7 +216,7 @@ $messages = array(
 '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:',
+'tog-oldsig' => 'Trenutni podpis:',
 'tog-fancysig' => 'Obravnavaj podpis kot wikibesedilo (brez samodejne povezave)',
 'tog-uselivepreview' => 'Uporabi hitri predogled (preizkusno)',
 'tog-forceeditsummary' => 'Ob vpisu praznega povzetka urejanja me opozori',
@@ -435,7 +435,7 @@ $1',
 # 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).
 'aboutsite' => 'O {{GRAMMAR:dajalnik|{{SITENAME}}}}',
 'aboutpage' => 'Project:O {{GRAMMAR:dajalnik|{{SITENAME}}}}',
-'copyright' => 'Besedilo je na razpolago pod pogoji $1.',
+'copyright' => 'Razen, kjer je navedeno drugače, je besedilo na razpolago pod pogoji licence $1.',
 'copyrightpage' => '{{ns:project}}:Avtorske pravice',
 'currentevents' => 'Trenutni dogodki',
 'currentevents-url' => 'Project:Trenutni dogodki',
@@ -584,7 +584,7 @@ Spremembe te strani bodo vplivale na podobo uporabniškega vmesnika ostalih upor
 Za dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
 'cascadeprotected' => 'Ta stran je bila zaščitena pred urejanji, ker je vključena na {{PLURAL:$1|sledečo stran, ki je bila zaščitena|sledeči strani, ki sta bili zaščiteni|sledeče strani, ki so bile zaščitene}} z vključeno kaskadno možnostjo:
 $2',
-'namespaceprotected' => "Nimate dovoljenja urejati strani v imenskem prostoru '''$1'''.",
+'namespaceprotected' => "Za urejanje strani v imenskem prostoru '''$1''' nimate dovoljenja.",
 'customcssprotected' => 'Nimate pravice urejati te strani CSS, ker vsebuje osebne nastavitve drugega uporabnika.',
 'customjsprotected' => 'Nimate pravice urejati te strani JavaScript, ker vsebuje osebne nastavitve drugega uporabnika.',
 'mycustomcssprotected' => 'Nimate pravic za urejanje te strani s CSS.',
@@ -610,7 +610,7 @@ Administrator, ki ga je zaklenil, je podal naslednje pojasnilo: »$3«.',
 # Login and logout pages
 'logouttext' => "'''Odjavili ste se.'''
 
-Pomnite, da bodo nekatere strani morda še naprej prikazane, kot da ste prijavljeni, dokler ne boste izpraznili predpomnilnika brskalnika.",
+Nekatere strani bodo morda še naprej prikazane, kot da ste prijavljeni, dokler ne boste izpraznili predpomnilnika brskalnika.",
 'welcomeuser' => '$1, dobrodošli!',
 'welcomecreation-msg' => 'Ustvarili ste račun.
 Ne pozabite si prilagoditi vaših [[Special:Preferences|nastavitev {{GRAMMAR:rodilnik|{{SITENAME}}}}]].',
@@ -643,7 +643,7 @@ Ne pozabite si prilagoditi vaših [[Special:Preferences|nastavitev {{GRAMMAR:rod
 'userlogin-joinproject' => 'Pridružite se {{GRAMMAR:dajalnik|{{SITENAME}}}}',
 'nologin' => 'Še nimate uporabniškega računa? $1!',
 'nologinlink' => 'Registrirajte se',
-'createaccount' => 'Ustvari račun',
+'createaccount' => 'Registracija',
 'gotaccount' => 'Račun že imate? $1.',
 'gotaccountlink' => 'Prijavite se',
 'userlogin-resetlink' => 'Ste pozabili svoje prijavne podatke?',
@@ -762,7 +762,7 @@ Za zaključitev prijave, morate tukaj nastaviti novo geslo:',
 'newpassword' => 'Novo geslo:',
 'retypenew' => 'Ponovno vpišite geslo:',
 'resetpass_submit' => 'Nastavi geslo in se prijavi',
-'changepassword-success' => 'Vaše geslo smo uspešno spremenili!',
+'changepassword-success' => 'Vaše geslo je bilo uspešno spremenjeno!',
 'resetpass_forbidden' => 'Gesla ne morete spremeniti',
 'resetpass-no-info' => 'Za neposreden dostop do te strani morate biti prijavljeni.',
 'resetpass-submit-loggedin' => 'Spremenite geslo',
@@ -820,7 +820,7 @@ Začasno geslo: $2',
 'changeemail-oldemail' => 'Trenutni e-poštni naslov:',
 'changeemail-newemail' => 'Novi e-poštni naslov:',
 'changeemail-none' => '(noben)',
-'changeemail-password' => 'Vaše geslo na {{GRAMMAR:orodnik|{{SITENAME}}}}:',
+'changeemail-password' => 'Vaše geslo za {{GRAMMAR:tožilnik|{{SITENAME}}}}:',
 'changeemail-submit' => 'Spremeni e-naslov',
 'changeemail-cancel' => 'Prekliči',
 
@@ -890,17 +890,17 @@ Vedite, da lahko ukaz »Pošlji uporabniku e-pismo« uporabite le, če ste v [[S
 Vaš IP-naslov je $3, številka blokade pa #$5.
 Prosimo, vključite ju v vse morebitne poizvedbe.",
 'autoblockedtext' => "Vaš IP-naslov je bil samodejno blokiran, saj je bil uporabljen s strani drugega uporabnika, ki ga je blokiral $1.
-Podan razlog je:
+Razlog za to je bil naslednji:
 
 :''$2''
 
 * Začetek blokade: $8
-* Prenehanje blokade: $6
-* Predvidena blokada: $7
+* Konec blokade: $6
+* Blokirani uporabnik: $7
 
 Kontaktirate lahko $1 ali katerega od drugih [[{{MediaWiki:Grouppage-sysop}}|administratorjev]], da razpravljate o blokadi.
 
-Pomnite, da ne morete uporabljati funkcije »{{:MediaWiki:Emailuser}}«, dokler ne vnesete veljavnega e-poštnega naslova v vaše [[Special:Preferences|uporabniške nastavitve]] in vam njihova uporaba ni bila preprečena.
+Vedite, da lahko funkcijo »{{:MediaWiki:Emailuser/sl}}« uporabljate le, če ste v svoje [[Special:Preferences|uporabniške nastavitve]] vnesli veljaven e-poštni naslov, in vam njena uporaba ni bila preprečena.
 
 Vaš trenutni IP-naslov je $3, ID blokiranja pa #$5. Prosimo, vključite ta ID v vsako zastavljeno vprašanje.",
 'blockednoreason' => 'razlog ni podan',
@@ -952,7 +952,7 @@ Najnovejši vnos v dnevniku blokad je prikazan spodaj:',
 Vedite, da .css in .js strani po meri uporabljajo naslov z malo začetnico, npr. {{ns:user}}:Blabla/vector.css namesto {{ns:user}}:Blabla/Vector.css.",
 'updated' => '(Posodobljeno)',
 'note' => "'''Opomba:'''",
-'previewnote' => "'''Pomnite, da stran le predogledujete.'''
+'previewnote' => "'''Vedite, da stran le predogledujete.'''
 Vaših sprememb še nismo shranili!",
 'continue-editing' => 'Pojdi na urejevalno območje',
 'previewconflict' => 'V prikazanem predogledu je v zgornjem predelu urejanja navedeno besedilo, kakor se bo prikazalo, če ga boste shranili.',
@@ -988,10 +988,10 @@ Za obhod te težave se bodo ne-ASCII-znaki v urejevalnem polju spodaj pojavili k
 'copyrightwarning' => "Vsi prispevki k {{GRAMMAR:dajalnik|{{SITENAME}}}} se obravnavajo kot objave pod pogoji $2 (za podrobnosti glej $1). Če niste pripravljeni na neusmiljeno urejanje in prosto razširjanje vašega gradiva, ga ne prispevajte.<br />
 Poleg tega zagotavljate, da ste prispevke napisali oziroma ustvarili sami ali pa prepisali iz javno dostopnega ali podobnega prostega vira.
 '''Ne dodajajte avtorsko zaščitenega dela brez dovoljenja!'''",
-'copyrightwarning2' => "Prosimo, upoštevajte, da se vsi prispevki k {{GRAMMAR:dajalnik|{{SITENAME}}}} lahko urejajo, spreminjajo ali odstranijo s strani drugih uporabnikov
-Če niste pripravljeni na neusmiljeno urejanje in prosto razširjanje vašega gradiva, ga ne prispevajte.<br />
-Poleg tega zagotavljate, da ste prispevke napisali oziroma ustvarili sami ali pa prepisali iz javno dostopnega ali podobnega prostega vira (za podrobnosti glej $1).
-'''Ne dodajajte avtorsko zaščitenega dela brez dovoljenja!'''",
+'copyrightwarning2' => "Vedite, da lahko drugi urejevalci urejajo, spremenijo ali odstranijo kateri koli prispevek k {{GRAMMAR:dajalnik|{{SITENAME}}}}.
+Če niste pripravljeni na neusmiljeno urejanje svojega gradiva, ga ne objavljajte tukaj.<br />
+Poleg tega jamčite, da ste prispevke napisali oziroma ustvarili sami ali pa prepisali iz vira v javni lasti ali podobnega prostega vira (za podrobnosti glej $1).
+'''Ne objavljajte avtorsko zaščitenega gradiva brez dovoljenja!'''",
 'longpageerror' => "'''Napaka: Predloženo besedilo je dolgo $1 {{PLURAL:$1|kilobajt|kilobajta|kilobajte|kilobajtov}}, s čimer presega največjo dovoljeno dolžino $2 {{PLURAL:$2|kilobajta|kilobajtov|kilobajtov|kilobajtov}}.'''
 Zato ga ni mogoče shraniti.",
 'readonlywarning' => "'''Opozorilo: Zbirka podatkov je zaradi vzdrževanja začasno zaklenjena, kar pomeni, da sprememb trenutno ne morete shraniti. Prosimo, prenesite besedilo v urejevalnik in ga dodajte pozneje.'''
@@ -1013,12 +1013,12 @@ Za sklic je priskrbljen spodnji dnevnik vnosov:",
 'edittools' => '<!-- To besedilo bo prikazano pod urejevalnim poljem in poljem za nalaganje. -->',
 'nocreatetext' => '{{SITENAME}} ima omejeno zmožnost za ustvarjanje novih strani.
 Lahko se vrnete nazaj in urejate že obstoječe strani, ali pa se [[Special:UserLogin|prijavite ali ustvarite račun]].',
-'nocreate-loggedin' => 'Nimate pravic, da bi ustvarjali nove strani.',
+'nocreate-loggedin' => 'Za ustvarjanje novih strani nimate dovoljenja.',
 'sectioneditnotsupported-title' => 'Urejanje razdelkov ni podprto',
 'sectioneditnotsupported-text' => 'Urejanje razdelkov ni podprto na tej strani.',
 'permissionserrors' => 'Napaka dovoljenja',
-'permissionserrorstext' => 'Nimate dovoljenja za izvedbo dejanja zaradi {{PLURAL:$1|naslednjega razloga|naslednjih razlogov|naslednjih razlogov|naslednjih razlogov|naslednjih razlogov}}:',
-'permissionserrorstext-withaction' => 'Nimate dovoljenja za $2 zaradi {{PLURAL:$1|naslednjega razloga|naslednjih $1 razlogov|naslednjih $1 razlogov|naslednjih $1 razlogov}}:',
+'permissionserrorstext' => 'Za izvedbo dejanja nimate dovoljenja zaradi {{PLURAL:$1|naslednjega razloga|naslednjih razlogov|naslednjih razlogov|naslednjih razlogov|naslednjih razlogov}}:',
+'permissionserrorstext-withaction' => 'Za $2 zaradi {{PLURAL:$1|naslednjega razloga|naslednjih razlogov}} nimate dovoljenja:',
 'recreate-moveddeleted-warn' => "'''Opozorilo: Pišete stran, ki je bila nekoč že izbrisana.'''
 
 Premislite preden nadaljujete s pisanjem, morda bo stran zaradi istih razlogov ponovno odstranjena.
@@ -1410,17 +1410,17 @@ Tega ni mogoče razveljaviti.',
 'yourlanguage' => 'Jezik:',
 'yourvariant' => 'Jezikovna različica vsebine:',
 'prefs-help-variant' => 'Vaša prednostna različica ali pravopis, v katerem naj bo prikazana vsebina strani tega wikija.',
-'yournick' => 'Nov podpis:',
+'yournick' => 'Novi podpis:',
 'prefs-help-signature' => 'Komentarje na pogovornih straneh je treba podpisati s »<nowiki>~~~~</nowiki>«, kar bo pretvorjeno v vaš podpis s časovnim žigom.',
 'badsig' => 'Neveljaven surovi podpis; preverite oznake HTML.',
 'badsiglength' => 'Vaš podpis je preobsežen.
 Ne sme biti daljši od $1 {{PLURAL:$1|znaka|znakov}}.',
 'yourgender' => 'Kako vam je ljubše, da vas opišemo?',
-'gender-unknown' => 'Ne želim navesti',
-'gender-male' => 'On ureja wikistrani',
-'gender-female' => 'Ona ureja wikistrani',
+'gender-unknown' => 'ne želim navesti',
+'gender-male' => 'On ureja wikistrani.',
+'gender-female' => 'Ona ureja wikistrani.',
 'prefs-help-gender' => 'Nastavitev ni obvezna.
-Programje uporablja njeno vrednost za naslavljanje vas in omenjanje vas drugim v primernem slovničnem spolu.
+Programje uporablja njeno vrednost za vaše naslavljanje in omenjanje v ustreznem slovničnem spolu.
 Podatek bo javno prikazan.',
 'email' => 'E-pošta',
 'prefs-help-realname' => 'Pravo ime ni obvezno.
@@ -1467,10 +1467,10 @@ Ko vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo ra
 * Odkljukano polje pomeni uporabnika, ki ni v skupini
 * Zvezdica (*) kaže, da uporabnika ne boste mogli odstraniti iz skupine, ko ga vanjo dodate oz. obratno.',
 'userrights-reason' => 'Razlog:',
-'userrights-no-interwiki' => 'Nimate dovoljenja za urejanje pravic uporabnikov na drugih wikijih.',
+'userrights-no-interwiki' => 'Za urejanje pravic uporabnikov na drugih wikijih nimate dovoljenja.',
 'userrights-nodatabase' => 'Podatkovna baza $1 ne obstaja ali ni lokalna.',
 'userrights-nologin' => 'Za dodeljevanje uporabniških pravic se morate [[Special:UserLogin|prijaviti]] s skrbniškim računom.',
-'userrights-notallowed' => 'Nimate dovoljenj za dodajanje ali odstranjevanje uporabniških pravic.',
+'userrights-notallowed' => 'Za dodajanje ali odstranjevanje uporabniških pravic nimate dovoljenja.',
 'userrights-changeable-col' => 'Skupine, ki jih lahko spremenite',
 'userrights-unchangeable-col' => 'Skupine, ki jih ne morete spremeniti',
 'userrights-conflict' => 'Spor sprememb uporabniških pravic! Prosimo, da pregledate in potrdite svoje spremembe.',
@@ -1549,7 +1549,7 @@ Ko vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo ra
 'right-editmyusercss' => 'Uredite svoje uporabniške datoteke CSS',
 'right-editmyuserjs' => 'Uredite svoje uporabniške datoteke JavaScript',
 'right-viewmywatchlist' => 'Ogledovanje svojega spiska nadzorov',
-'right-editmywatchlist' => 'Urejanje svojega spiska nadzorov. Pomnite, da bodo nekatera dejanja dodala strani tudi brez te pravice.',
+'right-editmywatchlist' => 'Urejanje vašega spiska nadzorov. Vedite, da bodo nekatera dejanja dodala strani nanj tudi brez te pravice.',
 'right-viewmyprivateinfo' => 'Ogled svojih zasebnih podatkov (npr. e-poštnega naslova, pravega imena)',
 'right-editmyprivateinfo' => 'Urejanje svojih zasebnih podatkov (npr. e-poštnega naslova, pravega imena)',
 'right-editmyoptions' => 'Urejanje svojih nastavitev',
@@ -1604,7 +1604,7 @@ Ko vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo ra
 'action-block' => 'blokiranje urejanja s tega uporabniškega računa',
 'action-protect' => 'spremembo stopnje zaščite te strani',
 'action-rollback' => 'hitro vračanje urejanj zadnjega uporabnika, ki je urejal določeno stran',
-'action-import' => 'uvoz te strani iz drugega wikija',
+'action-import' => 'uvoz strani iz drugega wikija',
 'action-importupload' => 'uvoz strani iz naložene datoteke',
 'action-patrol' => 'označevanje sprememb drugih kot nadzorovane',
 'action-autopatrol' => 'označevanje svojih urejanj kot nadzorovane',
@@ -2153,6 +2153,7 @@ Sedaj je preusmeritev na [[$2]].',
 'listusers' => 'Seznam uporabnikov',
 'listusers-editsonly' => 'Pokaži samo uporabnike z urejanji',
 'listusers-creationsort' => 'Razvrsti po datumu ustvaritve',
+'listusers-desc' => 'Razvrsti padajoče',
 'usereditcount' => '$1 {{PLURAL:$1|urejanje|urejanji|urejanja|urejanj}}',
 'usercreated' => '{{GENDER:$3|Ustvarjen|Ustvarjena}} dne $1 ob $2',
 'newpages' => 'Nove strani',
@@ -2438,7 +2439,7 @@ stran je spremenil ali vrnil že nekdo drug.
 Zadnji je stran urejal uporabnik [[User:$3|$3]] ([[User talk:$3|pogovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Povzetek urejanja je bil: »''$1''«.",
 'revertpage' => 'vrnitev sprememb uporabnika [[Special:Contributions/$2|$2]] ([[User talk:$2|pogovor]]) na zadnje urejanje uporabnika [[User:$1|$1]]',
-'revertpage-nouser' => 'vrnitev sprememb skritega uporabnika na zadnjo redakcijo uporabnika [[User:$1|$1]]',
+'revertpage-nouser' => 'vrnitev sprememb skritega uporabnika na zadnjo redakcijo {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Razveljavljene spremembe uporabnika $1;
 vrnjeno na urejanje uporabnika $2.',
 
@@ -2812,7 +2813,7 @@ prosimo, pred nadaljevanjem se prepričajte, da razumete posledice tega dejanja.
 'moveuserpage-warning' => "'''Opozorilo:''' Premikate uporabniško stran. To pomeni, da bo premaknjena samo stran in uporabnik ''ne'' bo preimenovan.",
 'movenologin' => 'Niste prijavljeni',
 'movenologintext' => 'Za prestavljanje strani morate biti registrirani in [[Special:UserLogin|prijavljeni]].',
-'movenotallowed' => 'Nimate dovoljenja, da premikate strani.',
+'movenotallowed' => 'Za prestavljanje strani nimate dovoljenja.',
 'movenotallowedfile' => 'Nimate dovoljenja, da premikate datoteke.',
 'cant-move-user-page' => 'Nimate dovoljenja, da premikate uporabniške strani (razen podstrani).',
 'cant-move-to-user-page' => 'Nimate dovoljenja, da premikate strani na uporabniške strani (razen na uporabniške podstrani).',
@@ -3188,7 +3189,7 @@ Z njenim zagonom lahko ogrozite vaš sistem.",
 'svg-long-error' => 'Neveljavna datoteka SVG: $1',
 'show-big-image' => 'Slika v višji ločljivosti',
 'show-big-image-preview' => 'Velikost predogleda: $1.',
-'show-big-image-other' => '{{PLURAL:$2|Druga resolucija|Drugi resoluciji|Druge resolucije}}: $1.',
+'show-big-image-other' => '{{PLURAL:$2|Druga ločljivost|Drugi ločljivosti|Druge ločljivosti}}: $1.',
 'show-big-image-size' => '$1 × $2 točk',
 'file-info-gif-looped' => 'ponavljajoče',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|sličica|sličici|sličice|sličic}}',
@@ -3810,7 +3811,7 @@ Poskusite normalni predogled.',
 Da odstranite stran, označite kvadratek poleg nje in kliknite »{{int:Watchlistedit-normal-submit}}«.
 Lahko tudi [[Special:EditWatchlist/raw|uredite gol spisek]].',
 'watchlistedit-normal-submit' => 'Odstrani strani',
-'watchlistedit-normal-done' => 'Iz vašega spiska nadzorov {{PLURAL:$1|je bila odstranjena $1 stran|sta bili odstranjeni $1 strani|so bile odstranjene $1 strani|je bilo odstranjenih $1 strani}}:',
+'watchlistedit-normal-done' => 'Z vašega spiska nadzorov {{PLURAL:$1|je bila odstranjena $1 stran|sta bili odstranjeni $1 strani|so bile odstranjene $1 strani|je bilo odstranjenih $1 strani}}:',
 'watchlistedit-raw-title' => 'Uredi gol spisek nadzorov',
 'watchlistedit-raw-legend' => 'Uredi gol spisek nadzorov',
 'watchlistedit-raw-explain' => 'Strani na vašem spisku nadzorov so prikazane spodaj in jih lahko urejate z dodajanjem in odstranjevanjem s seznama; vsak naslov je v svoji vrstici.
@@ -3953,8 +3954,7 @@ Skupaj s programom bi morali bi prejeti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopijo
 
 # Database error messages
 'dberr-header' => 'Ta wiki ima težavo',
-'dberr-problems' => 'Oprostite!
-Ta stran se sooča s tehničnimi težavami.',
+'dberr-problems' => 'Oprostite! Ta stran se sooča s tehničnimi težavami.',
 'dberr-again' => 'Poskusite počakati nekaj minut in ponovno naložite stran.',
 'dberr-info' => '(Ne morem se povezati s strežnikom zbirke podatkov: $1)',
 'dberr-info-hidden' => '(Ne morem se povezati s strežnikom zbirke podatkov)',
@@ -4029,7 +4029,7 @@ V nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bom
 'feedback-error2' => 'Napaka: Urejanje je spodletelo',
 'feedback-error3' => 'Napaka: Ni odgovora od API',
 'feedback-thanks' => 'Havala! Vaše povratne informacije smo objavili na strani »[$2 $1]«.',
-'feedback-close' => 'Končano',
+'feedback-close' => 'Urejeno',
 'feedback-bugcheck' => 'Izvrstno! Samo preverite, da ne gre za enega od [$1 že znanih hroščev].',
 'feedback-bugnew' => 'Sem preveril. Prijavi nov hrošč',
 
@@ -4102,9 +4102,9 @@ V nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bom
 'limitreport-ppvisitednodes' => 'Število predprocesorjevih ogledanih vozlišč',
 'limitreport-ppgeneratednodes' => 'Število predprocesorjevih ustvarjenih vozlišč',
 'limitreport-postexpandincludesize' => 'Velikost vključitve po razširitvi',
-'limitreport-postexpandincludesize-value' => '$1/$2 bajtov',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bajt|bajta|bajte|bajtov}}',
 'limitreport-templateargumentsize' => 'Velikost argumentov predloge',
-'limitreport-templateargumentsize-value' => '$1/$2 bajtov',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bajt|bajta|bajte|bajtov}}',
 'limitreport-expansiondepth' => 'Največja globina razširitve',
 'limitreport-expensivefunctioncount' => 'Število dragih funkcij razčlenjevalnika',
 
index 166fe49..0ad5309 100644 (file)
@@ -892,6 +892,7 @@ E-mailkaada mala sheegaayo markii ee dadka kale kula soo xiriirayaan.',
 'recentchanges' => 'Isbedelada dhow',
 'recentchanges-legend' => 'Dooqyada isbedelada dhow',
 'recentchanges-summary' => 'Dabagal isbedelada dhow ee wikiga ee ku dhacay bogaan.',
+'recentchanges-noresult' => 'Ma jiraan wax is bedel ah xilliga aad soo koobtay ee u dhigma habkaan.',
 'recentchanges-feed-description' => 'Dabagal isbedelada dhow ee wikiga oo ku dhacay feedkaan',
 'recentchanges-label-newpage' => 'Wax bedelkaan wuxuu sameeyay bog cusub',
 'recentchanges-label-minor' => 'Kan waa bedel yar',
index 37f6310..7c2e633 100644 (file)
@@ -3700,8 +3700,7 @@ Ju duhet të keni marrë [{{SERVER}}{{SCRIPTPATH}}/COPYING një kopje të GNU Ge
 
 # Database error messages
 'dberr-header' => 'Kjo wiki ka një problem',
-'dberr-problems' => 'Na vjen keq! 
-Kjo faqe është duke përjetuar vështirësi teknike.',
+'dberr-problems' => 'Na vjen keq! Kjo faqe po has vështirësi teknike.',
 'dberr-again' => 'Pritni disa minuta dhe provoni të ringarkoni faqen.',
 'dberr-info' => '(Nuk mund të lidhet me serverin bazë e të dhënave : $1)',
 'dberr-usegoogle' => 'Ju mund të provoni të kërkoni përmes Googles në ndërkohë.',
index 26803b5..c088025 100644 (file)
@@ -403,12 +403,12 @@ $messages = array(
 'tog-hidepatrolled' => 'Сакриј прегледане измене у списку скорашњих измена',
 'tog-newpageshidepatrolled' => 'Сакриј прегледане странице са списка нових страница',
 'tog-extendwatchlist' => 'Прошири списак надгледања за приказ свих измена, не само скорашњих',
-'tog-usenewrc' => 'Промене у групи по страници у списку скорашњих измена и надгледаних страница (потребна JavaScript-а)',
+'tog-usenewrc' => 'Промене у групи по страници у списку скорашњих измена и надгледаних страница',
 'tog-numberheadings' => 'Самостално нумериши поднаслове',
-'tog-showtoolbar' => 'ТÑ\80ака Ñ\81 Ð°Ð»Ð°Ñ\82кама Ð·Ð° Ñ\83Ñ\80еÑ\92иваÑ\9aе (поÑ\82Ñ\80ебна JavaScript-а)',
-'tog-editondblclick' => 'Уређивање страница двоструким кликом (потребна JavaScript-а)',
+'tog-showtoolbar' => 'Ð\9fÑ\80икажи Ñ\82Ñ\80акÑ\83 Ñ\81 Ð°Ð»Ð°Ñ\82кама Ð·Ð° Ñ\83Ñ\80еÑ\92иваÑ\9aе',
+'tog-editondblclick' => 'Уређивање страница двоструким кликом',
 'tog-editsection' => 'Везе за уређивање појединачних одељака',
-'tog-editsectiononrightclick' => 'Уређивање одељака десним кликом на њихове наслове (потребна JavaScript-а)',
+'tog-editsectiononrightclick' => 'Уређивање одељака десним кликом на њихове наслове',
 'tog-showtoc' => 'Прикажи садржај страница које имају више од три поднаслова',
 'tog-rememberpassword' => 'Запамти ме на овом прегледачу (најдуже $1 {{PLURAL:$1|дан|дана|дана}})',
 'tog-watchcreations' => 'Додај странице које направим и датотеке које пошаљем у списак надгледања',
@@ -426,8 +426,8 @@ $messages = array(
 'tog-shownumberswatching' => 'Прикажи број корисника који надгледају',
 'tog-oldsig' => 'Текући потпис:',
 'tog-fancysig' => 'Сматрај потпис као викитекст (без самоповезивања)',
-'tog-uselivepreview' => 'Ð\9aоÑ\80иÑ\81Ñ\82и Ñ\82Ñ\80енÑ\83Ñ\82ан Ð¿Ñ\80еглед (поÑ\82Ñ\80ебна JavaScript-а, ÐµÐºÑ\81пеÑ\80именÑ\82ално)',
-'tog-forceeditsummary' => 'Ð\9eпомени Ð¼Ðµ Ð¿Ñ\80и Ñ\83ноÑ\81Ñ\83 Ð¿Ñ\80азног Ð¾Ð¿Ð¸Ñ\81а',
+'tog-uselivepreview' => 'Користи тренутан преглед (експериментално)',
+'tog-forceeditsummary' => 'УпозоÑ\80и Ð¼Ðµ ÐºÐ°Ð´Ð° Ð½Ðµ Ñ\83неÑ\81ем Ð¾Ð¿Ð¸Ñ\81 Ð¸Ð·Ð¼ÐµÐ½Ðµ',
 'tog-watchlisthideown' => 'Сакриј моје измене са списка надгледања',
 'tog-watchlisthidebots' => 'Сакриј измене ботова са списка надгледања',
 'tog-watchlisthideminor' => 'Сакриј мање измене са списка надгледања',
@@ -522,7 +522,7 @@ $messages = array(
 'category_header' => 'Странице у категорији „$1“',
 'subcategories' => 'Поткатегорије',
 'category-media-header' => 'Датотеке у категорији „$1“',
-'category-empty' => "''Ова категорија тренутно не садржи странице или датотеке.''",
+'category-empty' => "<div style=\"margin:2em 1em 0 1em; padding:0.5em; border:1px solid #AAA; text-align:center;\">''Ова категорија тренутно не садржи странице или датотеке.''</div>",
 'hidden-categories' => '{{PLURAL:$1|Сакривена категорија|Сакривене категорије}}',
 'hidden-category-category' => 'Сакривене категорије',
 'category-subcat-count' => '{{PLURAL:$2|Ова категорија садржи само следећу поткатегорију.|Ова категорија има {{PLURAL:$1|следећу поткатегорију|следеће $1 поткатегорије|следећих $1 поткатегорија}}, од укупно $2.}}',
@@ -543,7 +543,7 @@ $messages = array(
 'newwindow' => '(отвара се у новом прозору)',
 'cancel' => 'Откажи',
 'moredotdotdot' => 'Више…',
-'morenotlisted' => 'Ð\92иÑ\88е Ð½Ð¸Ñ\98е Ð¿Ñ\80иказаноâ\80¦',
+'morenotlisted' => 'Ð\9eва Ð»Ð¸Ñ\81Ñ\82а Ð½Ð¸Ñ\98е ÐºÐ¾Ð¼Ð¿Ð»ÐµÑ\82на.',
 'mypage' => 'Страница',
 'mytalk' => 'Разговор',
 'anontalk' => 'Разговор за ову ИП адресу',
@@ -1101,9 +1101,7 @@ $2
 'loginreqlink' => 'пријављени',
 'loginreqpagetext' => 'Морате бити $1 да бисте видели друге странице.',
 'accmailtitle' => 'Лозинка је послата.',
-'accmailtext' => 'Лозинка за {{GENDER:$1|корисника|корисницу|корисника}} [[User talk:$1|$1]] је послата на $2.
-
-Након пријаве, лозинка се може променити [[Special:ChangePassword|овде]].',
+'accmailtext' => 'Лозинка за {{GENDER:$1|корисника|корисницу}} [[User talk:$1|$1]] је послата на $2. Након пријаве, лозинка се може променити [[Special:ChangePassword|овде]].',
 'newarticle' => '(нови)',
 'newarticletext' => 'Дошли сте на страницу која још не постоји.
 Да бисте је направили, почните куцати у прозор испод овог текста (погледајте [[{{MediaWiki:Helppage}}|страницу за помоћ]]).
@@ -1270,7 +1268,7 @@ $2
 Проверите разлике испод, па сачувајте измене.',
 'undo-failure' => 'Не могу да вратим измену због постојања сукобљених међуизмена.',
 'undo-norev' => 'Не могу да вратим измену јер не постоји или је обрисана.',
-'undo-summary' => 'Ð\92Ñ\80аÑ\9bена Ð¸Ð·Ð¼ÐµÐ½Ð° $1 Ð¾Ð´ {{GENDER:$2|коÑ\80иÑ\81ника|коÑ\80иÑ\81ниÑ\86е|коÑ\80иÑ\81ника}} [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]])',
+'undo-summary' => 'Ð\9fониÑ\88Ñ\82ена Ð¸Ð·Ð¼ÐµÐ½Ð° $1  {{GENDER:$2|коÑ\80иÑ\81ника|коÑ\80иÑ\81ниÑ\86е}} [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]])',
 'undo-summary-username-hidden' => 'Поништи измену $1 скривеног корисника',
 
 # Account creation failure
@@ -1291,7 +1289,7 @@ $2
 'currentrevisionlink' => 'Текућа измена',
 'cur' => 'трен',
 'next' => 'след',
-'last' => 'претх',
+'last' => 'разл',
 'page_first' => 'прва',
 'page_last' => 'последња',
 'histlegend' => "Избор разлика: изаберите кутијице измена за упоређивање и притисните ентер или дугме на дну.<br />
@@ -1299,8 +1297,8 @@ $2
 '''({{int:last}})''' – разлика с претходном изменом, '''{{int:minoreditletter}}''' – мала измена",
 'history-fieldset-title' => 'Преглед историје',
 'history-show-deleted' => 'само обрисано',
-'histfirst' => 'Ð\9dајстарије',
-'histlast' => 'Ð\9dајновије',
+'histfirst' => 'најстарије',
+'histlast' => 'најновије',
 'historysize' => '({{PLURAL:$1|1 бајт|$1 бајта|$1 бајтова}})',
 'historyempty' => '(празно)',
 
@@ -1615,7 +1613,7 @@ $1",
 'badsiglength' => 'Ваш потпис је предугачак.
 Не сме бити дужи од $1 {{PLURAL:$1|знака|знака|знакова}}.',
 'yourgender' => 'Како желите да се представите?',
-'gender-unknown' => 'Ð\9dе Ð¿Ñ\80евиÑ\88е Ð´ÐµÑ\82аÑ\99но',
+'gender-unknown' => 'Ð\9dе Ð¶ÐµÐ»Ð¸Ð¼ Ð´Ð° Ñ\81е Ð¿Ñ\80едÑ\81Ñ\82авим',
 'gender-male' => 'Он уређује вики странице',
 'gender-female' => 'Она уређује вики странице',
 'prefs-help-gender' => 'Необавезно: користи се за исправно обраћање софтвера корисницима, зависно од њиховог пола.
@@ -1630,7 +1628,7 @@ $1",
 'prefs-i18n' => 'Интернационализација',
 'prefs-signature' => 'Потпис',
 'prefs-dateformat' => 'Формат датума',
-'prefs-timeoffset' => 'Ð\92Ñ\80еменÑ\81ко Ð¾Ð´Ñ\81Ñ\82Ñ\83паÑ\9aе',
+'prefs-timeoffset' => 'Ð\92Ñ\80еменÑ\81ка Ñ\80азлика',
 'prefs-advancedediting' => 'Главна подешавања',
 'prefs-editor' => 'Уређивач',
 'prefs-preview' => 'Претпреглед',
@@ -1809,6 +1807,7 @@ $1",
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|измена|измене|измена}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|измена од ваше последње посете}}',
 'enhancedrc-history' => 'историја',
 'recentchanges' => 'Скорашње измене',
 'recentchanges-legend' => 'Поставке скорашњих измена',
@@ -1952,7 +1951,7 @@ $1",
 'uploadwarning-text' => 'Измените опис датотеке и покушајте поново.',
 'savefile' => 'Сачувај датотеку',
 'uploadedimage' => '{{GENDER:|је послао|је послала|је послао}} „[[$1]]“',
-'overwroteimage' => '{{GENDER:|је послао|је послала|је послао}} ново издање „[[$1]]“',
+'overwroteimage' => '{{GENDER:|је послао|је послала}} нову верзију датотеке „[[$1]]“',
 'uploaddisabled' => 'Отпремање је онемогућено.',
 'copyuploaddisabled' => 'Слање путем URL адресе је онемогућено.',
 'uploadfromurl-queued' => 'Слање је стављено на списак чекања.',
@@ -2137,7 +2136,7 @@ $1',
 # File description page
 'file-anchor-link' => 'Датотека',
 'filehist' => 'Историја датотеке',
-'filehist-help' => 'Кликните на датум/време да видите тадашње издање датотеке.',
+'filehist-help' => 'Кликните на датум/време да видите тадашњу верзију датотеке.',
 'filehist-deleteall' => 'обриши све',
 'filehist-deleteone' => 'обриши',
 'filehist-revert' => 'врати',
@@ -2630,7 +2629,7 @@ $UNWATCHURL
 
 Последњу измену је {{GENDER:$3|направио|направила|направио}} [[User:$3|$3]] ([[User talk:$3|разговор]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Опис измене: \"''\$1''\".",
-'revertpage' => 'Враћене су измене {{GENDER:$2|корисника|кориснице|корисника}} [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]]) на последњу измену члана [[User:$1|$1]]',
+'revertpage' => 'Враћене измене [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]]) на последњу измену корисника [[User:$1|$1]]',
 'revertpage-nouser' => 'Враћене су измене скривеног корисника на последњу измену члана [[User:$1|$1]]',
 'rollback-success' => 'Враћене су измене {{GENDER:$1|корисника|кориснице|корисника}} $1
 на последњу измену {{GENDER:$2|корисника|кориснице|корисника}} $2.',
@@ -3109,7 +3108,7 @@ $1',
 
 # Thumbnails
 'thumbnail-more' => 'Повећај',
-'filemissing' => 'Ð\94аÑ\82оÑ\82ека Ð½ÐµÐ´Ð¾Ñ\81Ñ\82аÑ\98е',
+'filemissing' => 'Ð\9dедоÑ\81Ñ\82аÑ\98е Ð´Ð°Ñ\82оÑ\82ека',
 'thumbnail_error' => 'Грешка при стварању минијатуре: $1',
 'djvu_page_error' => 'DjVu страница је недоступна',
 'djvu_no_xml' => 'Не могу да преузмем XML за датотеку DjVu.',
@@ -3402,8 +3401,8 @@ $1',
 'thumbsize' => 'Величина минијатуре:',
 'widthheight' => '$1 × $2',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|страница|странице|страница}}',
-'file-info' => 'величина: $1, MIME врста: $2',
-'file-info-size' => '$1 × $2 пиксела, величина: $3, MIME врста: $4',
+'file-info' => 'величина датотеке: $1, MIME тип: $2',
+'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',
@@ -3524,7 +3523,7 @@ Variants for Chinese language
 
 # Metadata
 'metadata' => 'Метаподаци',
-'metadata-help' => 'Ова датотека садржи додатне податке који вероватно долазе од дигигалних фотоапарата или скенера.
+'metadata-help' => 'Ова датотека садржи додатне податке који вероватно долазе од дигиталног фотоапарата или скенера.
 Ако је првобитно стање датотеке промењено, могуће је да неки детаљи не описују измењену датотеку.',
 'metadata-expand' => 'Прикажи детаље',
 'metadata-collapse' => 'Сакриј детаље',
@@ -4124,7 +4123,7 @@ $5
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => 'Измене новије од $1 {{PLURAL:$1|секунде|секунде|секунди}} неће бити приказане.',
-'lag-warn-high' => 'Ð\97бог Ð¿Ñ\80еопÑ\82еÑ\80еÑ\9bеÑ\9aа Ð±Ð°Ð·Ðµ Ð¿Ð¾Ð´Ð°Ñ\82ака, Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð½Ð¾Ð²Ð¸Ñ\98е Ð¾Ð´ $1 {{PLURAL:$1|Ñ\81екÑ\83нде|Ñ\81екÑ\83нде|Ñ\81екÑ\83нди}} неће бити приказане.',
+'lag-warn-high' => 'Ð\97бог Ð¿Ñ\80еопÑ\82еÑ\80еÑ\9bеÑ\9aа Ð±Ð°Ð·Ðµ Ð¿Ð¾Ð´Ð°Ñ\82ака, Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð½Ð¾Ð²Ð¸Ñ\98е Ð¾Ð´ $1 {{PLURAL:$1|Ñ\81екÑ\83нда|Ñ\81екÑ\83нде}} неће бити приказане.',
 
 # Watchlist editor
 'watchlistedit-numitems' => 'Ваш списак надгледања садржи {{PLURAL:$1|један наслов|$1 наслова|$1 наслова}}, без страница за разговор.',
index 71277ec..c4148a1 100644 (file)
@@ -312,14 +312,14 @@ $messages = array(
 'tog-hidepatrolled' => 'Sakrij pregledane izmene u spisku skorašnjih izmena',
 'tog-newpageshidepatrolled' => 'Sakrij pregledane stranice sa spiska novih stranica',
 'tog-extendwatchlist' => 'Proširi spisak nadgledanja za prikaz svih izmena, ne samo skorašnjih',
-'tog-usenewrc' => 'Promene u grupi po stranici u spisku skorašnjih izmena i nadgledanih stranica (zahteva javaskript)',
+'tog-usenewrc' => 'Promene u grupi po stranici u spisku skorašnjih izmena i nadgledanih stranica',
 'tog-numberheadings' => 'Samostalno numeriši podnaslove',
-'tog-showtoolbar' => 'Traka s alatkama za uređivanje (javaskript)',
-'tog-editondblclick' => 'Uređivanje stranica dvostrukim klikom (potrebna JavaScript-а)',
+'tog-showtoolbar' => 'Prikaži traku s alatkama za uređivanje',
+'tog-editondblclick' => 'Uređivanje stranica dvostrukim klikom',
 'tog-editsection' => 'Veze za uređivanje pojedinačnih odeljaka',
-'tog-editsectiononrightclick' => 'Uređivanje odeljaka desnim klikom na njihove naslove (javaskript)',
+'tog-editsectiononrightclick' => 'Uređivanje odeljaka desnim klikom na njihove naslove',
 'tog-showtoc' => 'Prikaži sadržaj stranica koje imaju više od tri podnaslova',
-'tog-rememberpassword' => 'Zapamti me na ovom pregledaču (najduže $1 {{PLURAL:$1|dan|dana|dana}})',
+'tog-rememberpassword' => 'Zapamti me na ovom pregledaču (najduže $1 {{PLURAL:$1|dan|dana}})',
 'tog-watchcreations' => 'Dodaj stranice koje napravim i datoteke koje pošaljem u spisak nadgledanja',
 'tog-watchdefault' => 'Dodaj stranice i datoteke koje izmenim u spisak nadgledanja',
 'tog-watchmoves' => 'Dodaj stranice i datoteke koje premestim u spisak nadgledanja',
@@ -335,8 +335,8 @@ $messages = array(
 'tog-shownumberswatching' => 'Prikaži broj korisnika koji nadgledaju',
 'tog-oldsig' => 'Tekući potpis:',
 'tog-fancysig' => 'Smatraj potpis kao vikitekst (bez samopovezivanja)',
-'tog-uselivepreview' => 'Koristi trenutan pregled (javaskript, probna mogućnost)',
-'tog-forceeditsummary' => 'Opomeni me pri unosu praznog opisa',
+'tog-uselivepreview' => 'Koristi trenutan pregled (eksperimentalno)',
+'tog-forceeditsummary' => 'Upozori me kada ne unesem opis izmene',
 'tog-watchlisthideown' => 'Sakrij moje izmene sa spiska nadgledanja',
 'tog-watchlisthidebots' => 'Sakrij izmene botova sa spiska nadgledanja',
 'tog-watchlisthideminor' => 'Sakrij manje izmene sa spiska nadgledanja',
@@ -430,7 +430,7 @@ $messages = array(
 'category_header' => 'Stranice u kategoriji „$1“',
 'subcategories' => 'Potkategorije',
 'category-media-header' => 'Datoteke u kategoriji „$1“',
-'category-empty' => "''Ova kategorija trenutno ne sadrži stranice ili datoteke.''",
+'category-empty' => "<div style=\"margin:2em 1em 0 1em; padding:0.5em; border:1px solid #AAA; text-align:center;\">''Ova kategorija trenutno ne sadrži stranice ili datoteke.''</div>",
 'hidden-categories' => '{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}}',
 'hidden-category-category' => 'Sakrivene kategorije',
 'category-subcat-count' => '{{PLURAL:$2|Ova kategorija sadrži samo sledeću potkategoriju.|Ova kategorija ima {{PLURAL:$1|sledeću potkategoriju|sledeće $1 potkategorije|sledećih $1 potkategorija}}, od ukupno $2.}}',
@@ -451,7 +451,7 @@ $messages = array(
 'newwindow' => '(otvara u novom prozoru)',
 'cancel' => 'Otkaži',
 'moredotdotdot' => 'Više…',
-'morenotlisted' => 'Više nije prikazano...',
+'morenotlisted' => 'Ova lista nije kompletna.',
 'mypage' => 'Stranica',
 'mytalk' => 'Razgovor',
 'anontalk' => 'Razgovor za ovu IP adresu',
@@ -987,9 +987,7 @@ Možda je premešten ili obrisan dok ste pregledali stranicu.',
 'loginreqlink' => 'prijavljeni',
 'loginreqpagetext' => 'Morate biti $1 da biste videli druge stranice.',
 'accmailtitle' => 'Lozinka je poslata.',
-'accmailtext' => 'Lozinka za {{GENDER:$1|korisnika|korisnicu|korisnika}} [[User talk:$1|$1]] je poslata na $2.
-
-Nakon prijave, lozinka se može promeniti [[Special:ChangePassword|ovde]].',
+'accmailtext' => 'Lozika za {{GENDER:$1|korisnika|korisnicu}} [[User talk:$1|$1]] je poslata na $2. Nakon prijave, lozinka se može promeniti [[Special:ChangePassword|ovde]].',
 'newarticle' => '(novi)',
 'newarticletext' => 'Došli ste na stranicu koja još ne postoji.
 Da biste je napravili, počnite kucati u prozor ispod ovog teksta (pogledajte [[{{MediaWiki:Helppage}}|stranicu za pomoć]]).
@@ -1156,7 +1154,7 @@ Ovakve argumente bi trebalo izbegavati.",
 Proverite razlike ispod, pa sačuvajte izmene.',
 'undo-failure' => 'Ne mogu da vratim izmenu zbog postojanja sukobljenih međuizmena.',
 'undo-norev' => 'Ne mogu da vratim izmenu jer ne postoji ili je obrisana.',
-'undo-summary' => 'Vraćena izmena $1 od {{GENDER:$2|korisnika|korisnice|korisnika}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]])',
+'undo-summary' => 'Poništena izmena $1 {{GENDER:$2|korisnika|korisnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]])',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Ne mogu da otvorim nalog',
@@ -1176,7 +1174,7 @@ Razlog koji je naveo {{GENDER:$3|korisnik|korisnica|korisnik}} $3 je ''$2''",
 'currentrevisionlink' => 'Tekuća izmena',
 'cur' => 'tren',
 'next' => 'sled',
-'last' => 'preth',
+'last' => 'razl',
 'page_first' => 'prva',
 'page_last' => 'poslednja',
 'histlegend' => "Izbor razlika: izaberite kutijice izmena za upoređivanje i pritisnite enter ili dugme na dnu.<br />
@@ -1439,7 +1437,7 @@ Upamtite da njegovi popisi ovog vikija mogu biti zastareli.',
 'prefs-rendering' => 'Izgled',
 'saveprefs' => 'Sačuvaj',
 'resetprefs' => 'Očisti nesačuvane izmene',
-'restoreprefs' => 'Vrati sve na podrazumevano',
+'restoreprefs' => 'Vrati sve na podrazumevano (u svim odeljcima)',
 'prefs-editing' => 'Uređivanje',
 'rows' => 'Redova:',
 'columns' => 'Kolone:',
@@ -1483,7 +1481,7 @@ Ova radnja se ne može vratiti.',
 'prefs-emailconfirm-label' => 'Potvrda e-adrese:',
 'youremail' => 'E-adresa:',
 'username' => '{{GENDER:$1|Korisničko ime}}:',
-'uid' => 'Korisnički IB:',
+'uid' => '{{GENDER:$1|Korisnički}} ID:',
 'prefs-memberingroups' => '{{GENDER:$2|Korisnik|Korisnica}} je član {{PLURAL:$1|grupe|grupa}}:',
 'prefs-memberingroups-type' => '$1',
 'prefs-registration' => 'Vreme upisa:',
@@ -1498,10 +1496,10 @@ Ova radnja se ne može vratiti.',
 Proverite oznake HTML.',
 'badsiglength' => 'Vaš potpis je predugačak.
 Ne sme biti duži od $1 {{PLURAL:$1|znaka|znaka|znakova}}.',
-'yourgender' => 'Pol:',
-'gender-unknown' => 'nenaznačen',
-'gender-male' => 'muški',
-'gender-female' => 'ženski',
+'yourgender' => 'Kako želite da se predstavite?',
+'gender-unknown' => 'Ne želim da se predstavim',
+'gender-male' => 'On uređuje viki stranice',
+'gender-female' => 'Ona uređuje viki stranice',
 'prefs-help-gender' => 'Neobavezno: koristi se za ispravno obraćanje softvera korisnicima, zavisno od njihovog pola.
 Ovaj podatak će biti javan.',
 'email' => 'E-adresa',
@@ -1514,7 +1512,7 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'prefs-i18n' => 'Internacionalizacija',
 'prefs-signature' => 'Potpis',
 'prefs-dateformat' => 'Format datuma',
-'prefs-timeoffset' => 'Vremensko odstupanje',
+'prefs-timeoffset' => 'Vremenska razlika',
 'prefs-advancedediting' => 'Glavna podešavanja',
 'prefs-advancedrc' => 'Napredne postavke',
 'prefs-advancedrendering' => 'Napredne postavke',
@@ -1565,8 +1563,8 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'group-user-member' => '{{GENDER:$1|korisnik|korisnica|korisnik}}',
 'group-autoconfirmed-member' => '{{GENDER:$1|automatski potvrđen korisnik|automatski potvrđena korisnica|automatski potvrđen korisnik}}',
 'group-bot-member' => '{{GENDER:$1|bot}}',
-'group-sysop-member' => '{{GENDER:$1|administrator|administratorka|administrator}}',
-'group-bureaucrat-member' => '{{GENDER:$1|birokrata|birokratkinja|birokrata}}',
+'group-sysop-member' => '{{GENDER:$1|administrator|administratorka}}',
+'group-bureaucrat-member' => '{{GENDER:$1|birokrata|birokratkinja}}',
 'group-suppress-member' => '{{GENDER:$1|revizor|revizorka|revizor}}',
 
 'grouppage-user' => '{{ns:project}}:Korisnici',
@@ -1594,7 +1592,7 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'right-reupload-shared' => 'menjanje datoteka na deljenom skladištu multimedije',
 'right-upload_by_url' => 'otpremanje datoteka sa veb adrese',
 'right-purge' => 'čišćenje keš memorije stranice bez potvrde',
-'right-autoconfirmed' => 'uređivanje poluzaštićenih stranica',
+'right-autoconfirmed' => 'Not be affected by IP-based rate limits',
 'right-bot' => 'smatranje izmena kao automatski proces',
 'right-nominornewtalk' => 'neposedovanje malih izmena na stranicama za razgovor otvara prozor za nove poruke',
 'right-apihighlimits' => 'korišćenje viših granica za upite iz API-ja',
@@ -1737,7 +1735,7 @@ Stranice s [[Special:Watchlist|vašeg spiska nadgledanja]] su '''podebljane'''."
 'reuploaddesc' => 'Nazad na obrazac za otpremanje',
 'upload-tryagain' => 'Pošalji izmenjeni opis datoteke',
 'uploadnologin' => 'Niste prijavljeni',
-'uploadnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] da biste otpremali datoteke.',
+'uploadnologintext' => 'Morate biti $1 da biste otpremali datoteke.',
 'upload_directory_missing' => 'Fascikla za slanje ($1) nedostaje i server je ne može napraviti.',
 'upload_directory_read_only' => 'Server ne može da piše po fascikli za slanje ($1).',
 'uploaderror' => 'Greška pri otpremanju',
@@ -1827,7 +1825,7 @@ Pogledajte istoriju brisanja pre ponovnog slanja.',
 'uploadwarning-text' => 'Izmenite opis datoteke i pokušajte ponovo.',
 'savefile' => 'Sačuvaj datoteku',
 'uploadedimage' => '{{GENDER:|je poslao|je poslala|je poslao}} „[[$1]]“',
-'overwroteimage' => '{{GENDER:|je poslao|je poslala|je poslao}} novo izdanje „[[$1]]“',
+'overwroteimage' => '{{GENDER:|je poslao|je poslala}} novu verziju datoteke „[[$1]]“',
 'uploaddisabled' => 'Otpremanje je onemogućeno.',
 'copyuploaddisabled' => 'Slanje putem URL adrese je onemogućeno.',
 'uploadfromurl-queued' => 'Slanje je stavljeno na spisak čekanja.',
@@ -1994,8 +1992,7 @@ Probajte kasnije kada bude manje opterećenje.',
 'upload_source_file' => ' (datoteka na vašem računaru)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Ova posebna stranica prikazuje sve poslate datoteke.
-Kad je poređano po korisniku, popis prikazuje samo one datoteke čije je poslednje izdanje postavio taj korisnik.',
+'listfiles-summary' => 'Ova posebna stranica prikazuje sve poslate datoteke.',
 'listfiles_search_for' => 'Naziv datoteke:',
 'imgfile' => 'datoteka',
 'listfiles' => 'Spisak datoteka',
@@ -2010,7 +2007,7 @@ Kad je poređano po korisniku, popis prikazuje samo one datoteke čije je posled
 # File description page
 'file-anchor-link' => 'Datoteka',
 'filehist' => 'Istorija datoteke',
-'filehist-help' => 'Kliknite na datum/vreme da vidite tadašnje izdanje datoteke.',
+'filehist-help' => 'Kliknite na datum/vreme da vidite tadašnju verziju datoteke.',
 'filehist-deleteall' => 'obriši sve',
 'filehist-deleteone' => 'obriši',
 'filehist-revert' => 'vrati',
@@ -2376,9 +2373,7 @@ E-adresa koju ste uneli u vašim [[Special:Preferences|podešavanjima]] će se p
 'watchnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] da biste menjali spisak nadgledanja.',
 'addwatch' => 'Dodaj na spisak nadgledanja',
 'addedwatchtext' => 'Stranica „[[:$1]]“ je dodata na vaš [[Special:Watchlist|spisak nadgledanja]].
-Buduće izmene ove stranice i njene stranice za razgovor biće navedene ovde, a stranica će biti <b>podebljana</b> u [[Special:RecentChanges|spisku skorašnjih izmena]] da bi se lakše uočila.
-
-Ukoliko budete želeli da uklonite stranicu sa spiska nadgledanja, kliknite opet na zvezdicu u gornjoj paleti.',
+Buduće izmene ove stranice i njene stranice za razgovor biće navedene tamo.',
 'removewatch' => 'Ukloni sa spiska nadgledanja',
 'removedwatchtext' => 'Stranica „[[:$1]]“ je uklonjena s vašeg [[Special:Watchlist|spiska nadgledanja]].',
 'watch' => 'Nadgledaj',
@@ -2488,7 +2483,7 @@ Poslednji autor je ujedno i jedini.',
 
 Poslednju izmenu je {{GENDER:$3|napravio|napravila|napravio}} [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Opis izmene: \"''\$1''\".",
-'revertpage' => 'Vraćene su izmene {{GENDER:$2|korisnika|korisnice|korisnika}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na poslednju izmenu člana [[User:$1|$1]]',
+'revertpage' => 'Vraćene izmene [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na poslednju  izmenu korisnika [[User:$1|$1]]',
 'revertpage-nouser' => 'Vraćene su izmene skrivengo korisnika na poslednju izmenu člana [[User:$1|$1]]',
 'rollback-success' => 'Vraćene su izmene {{GENDER:$1|korisnika|korisnice|korisnika}} $1
 na poslednju izmenu {{GENDER:$2|korisnika|korisnice|korisnika}} $2.',
@@ -2631,7 +2626,7 @@ $1',
 'blanknamespace' => '(Glavno)',
 
 # Contributions
-'contributions' => 'Korisnički doprinosi',
+'contributions' => '{{GENDER:$1|Korisnički}} doprinosi',
 'contributions-title' => 'Doprinosi {{GENDER:$1|korisnika|korisnice|korisnika}} $1',
 'mycontris' => 'Doprinosi',
 'contribsub2' => 'Za $1 ($2)',
@@ -2967,7 +2962,7 @@ Posetite [//www.mediawiki.org/wiki/Localisation Medijaviki lokalizaciju] i [//tr
 
 # Thumbnails
 'thumbnail-more' => 'Povećaj',
-'filemissing' => 'Datoteka nedostaje',
+'filemissing' => 'Nedostaje datoteka',
 'thumbnail_error' => 'Greška pri stvaranju minijature: $1',
 'djvu_page_error' => 'DjVu stranica je nedostupna',
 'djvu_no_xml' => 'Ne mogu da preuzmem XML za datoteku DjVu.',
@@ -3179,13 +3174,13 @@ Ovo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj li
 'pageinfo-length' => 'Dužina stranice (u bajtovima)',
 'pageinfo-article-id' => 'ID stranice',
 'pageinfo-language' => 'Jezik sadržaja stranice',
-'pageinfo-robot-policy' => 'Status pretraživača',
+'pageinfo-robot-policy' => 'Indeksiranje od strane robota',
 'pageinfo-robot-index' => 'Dozvoljeno',
 'pageinfo-robot-noindex' => 'Nije dozvoljeno',
 'pageinfo-views' => 'Broj pregleda',
 'pageinfo-watchers' => 'Broj nadgledača stranica',
 'pageinfo-few-watchers' => 'Manje od $1 {{PLURAL:$1|pratioca|pratilaca}}',
-'pageinfo-redirects-name' => 'Preusmeravanja na stranicu',
+'pageinfo-redirects-name' => 'Broj preusmerenja na ovu stranicu',
 'pageinfo-subpages-name' => 'Podstranice ove stranice',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|preusmerenje|preusmerenja|preusmerenja}}; $3 {{PLURAL:$3|nepreusmerenje|nepreusmerenja|nepreusmerenja}})',
 'pageinfo-firstuser' => 'Autor stranice',
@@ -3258,8 +3253,8 @@ Ako ga pokrenete, vaš računar može biti ugrožen.",
 'thumbsize' => 'Veličina minijature:',
 'widthheight' => '$1 × $2',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|stranica|stranice|stranica}}',
-'file-info' => 'veličina: $1, MIME vrsta: $2',
-'file-info-size' => '$1 × $2 piksela, veličina: $3, MIME vrsta: $4',
+'file-info' => 'veličina datoteke: $1, MIME tip: $2',
+'file-info-size' => '$1 × $2 piksela, veličina datoteke: $3, MIME tip: $4',
 'file-info-size-pages' => '$1 × $2 piksela, veličina: $3, MIME vrsta: $4, $5 {{PLURAL:$5|stranica|stranice|stranica}}',
 'file-nohires' => 'Veća rezolucija nije dostupna.',
 'svg-long-desc' => 'SVG datoteka, nominalno $1 × $2 piksela, veličina: $3',
@@ -3364,7 +3359,7 @@ Variants for Chinese language
 
 # Metadata
 'metadata' => 'Metapodaci',
-'metadata-help' => 'Ova datoteka sadrži dodatne podatke koji verovatno dolaze od digigalnih fotoaparata ili skenera.
+'metadata-help' => 'Ova datoteka sadrži dodatne podatke koji verovatno dolaze od digitalnog fotoaparata ili skenera.
 Ako je prvobitno stanje datoteke promenjeno, moguće je da neki detalji ne opisuju izmenjenu datoteku.',
 'metadata-expand' => 'Prikaži detalje',
 'metadata-collapse' => 'Sakrij detalje',
@@ -3592,7 +3587,7 @@ $8',
 'exif-compression-34712' => 'JPEG2000',
 
 'exif-copyrighted-true' => 'Zaštićeno autorskim pravom',
-'exif-copyrighted-false' => 'Javno vlasništvo',
+'exif-copyrighted-false' => 'Status autorskih prava nije podešen',
 
 'exif-photometricinterpretation-2' => 'RGB',
 'exif-photometricinterpretation-6' => 'YCbCr',
index dc4d9a4..479775e 100644 (file)
@@ -23,6 +23,7 @@
  * @author Habjchen
  * @author Hangsna
  * @author Hannibal
+ * @author Haxpett
  * @author Jon Harald Søby
  * @author Jopparn
  * @author Kaganer
@@ -334,7 +335,7 @@ $messages = array(
 'tog-extendwatchlist' => 'Utöka bevakningslistan till att visa alla ändringar, inte bara den senaste',
 'tog-usenewrc' => 'Gruppera ändringar efter sida i senaste ändringar och bevakningslistan',
 'tog-numberheadings' => 'Numrerade rubriker',
-'tog-showtoolbar' => 'Visa verktygsrad',
+'tog-showtoolbar' => 'Visa redigerings-verktygsraden',
 'tog-editondblclick' => 'Redigera sidor med dubbelklick',
 'tog-editsection' => 'Aktivera redigering av avsnitt genom [redigera]-länkar',
 'tog-editsectiononrightclick' => 'Aktivera redigering av avsnitt genom högerklick på underrubriker',
@@ -783,6 +784,9 @@ Glöm inte att justera dina [[Special:Preferences|{{SITENAME}}-inställningar]].
 'userlogin-resetpassword-link' => 'Återställ ditt lösenord',
 'helplogin-url' => 'Help:Logga in',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjälp med inloggning]]',
+'userlogin-loggedin' => 'Du är redan inloggad som {{GENDER:$1|$1}}.
+Använd formuläret nedan för att logga in som en annan användare.',
+'userlogin-createanother' => 'Skapa ett annat konto',
 'createacct-join' => 'Ange din information nedan.',
 'createacct-another-join' => 'Ange information för det nya kontot nedan.',
 'createacct-emailrequired' => 'E-postadress',
@@ -1355,6 +1359,7 @@ Se till att sidhistorikens kontinuitet behålls när du sammanfogar historik.',
 'mergehistory-comment' => 'Infogade [[:$1]] i [[:$2]]: $3',
 'mergehistory-same-destination' => 'Käll- och målsidor kan inte vara samma',
 'mergehistory-reason' => 'Anledning:',
+'mergehistory-revisionrow' => '$1($2) $3 . .$4 $5 $6',
 
 # Merge log
 'mergelog' => 'Sammanfogningslogg',
@@ -1719,8 +1724,8 @@ Om du väljer att ange ditt riktiga namn, kommer det att användas för att till
 'action-block' => 'blockera denna användare från redigering',
 'action-protect' => 'ändra skyddsnivå för denna sida',
 'action-rollback' => 'snabbt rulla tillbaka ändringarna gjorda av den användare som senast redigerade en viss sida',
-'action-import' => 'importera denna sida från en annan wiki',
-'action-importupload' => 'importera denna sida från en uppladdad fil',
+'action-import' => 'importera sidor från en annan wiki',
+'action-importupload' => 'importera sidor från en filuppladdning',
 'action-patrol' => 'märka annans redigering som patrullerad',
 'action-autopatrol' => 'få din redigering märkt som patrullerad',
 'action-unwatchedpages' => 'se listan över obevakade sidor',
@@ -2256,6 +2261,7 @@ Varje rad innehåller länkar till den första och andra omdirigeringsidan, samt
 'listusers' => 'Användarlista',
 'listusers-editsonly' => 'Visa endast användare som redigerat',
 'listusers-creationsort' => 'Sortera efter datum skapat',
+'listusers-desc' => 'Sortera i fallande ordning',
 'usereditcount' => '$1 {{PLURAL:$1|redigering|redigeringar}}',
 'usercreated' => '{{GENDER:$3|Skapat}} $1 $2',
 'newpages' => 'Nya sidor',
@@ -2396,7 +2402,7 @@ Den e-postadress du har angivit i [[Special:Preferences|dina användarinställni
 'emailnotarget' => 'Icke-existerande eller ogiltigt användarnamn för mottagaren.',
 'emailtarget' => 'Ange mottagarens användarnamn',
 'emailusername' => 'Användarnamn:',
-'emailusernamesubmit' => 'Fortsätt',
+'emailusernamesubmit' => 'Skicka in',
 'email-legend' => 'Skicka ett mail till en annan användare på {{SITENAME}}',
 'emailfrom' => 'Från:',
 'emailto' => 'Till:',
@@ -2538,7 +2544,7 @@ Se $2 för noteringar om de senaste raderingarna.',
 Sidan ändrades senast av [[User:$3|$3]] ([[User talk:$3|diskussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]).',
 'editcomment' => "Redigeringskommentaren var: \"''\$1''\".",
 'revertpage' => 'Återställde redigeringar av  [[Special:Contributions/$2|$2]] ([[User talk:$2|användardiskussion]]) till senaste versionen av [[User:$1|$1]]',
-'revertpage-nouser' => 'Återställde redigeringar av en dold användare till den senaste versionen av [[User:$1|$1]]',
+'revertpage-nouser' => 'Återställde redigeringar av en dold användare till den senaste versionen av {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Återställde ändringar av $1;
 ändrade tillbaka till senaste version av $2.',
 
@@ -2678,7 +2684,7 @@ $1',
 'contributions' => '{{GENDER:$1|Användarbidrag}}',
 'contributions-title' => 'Bidrag av $1',
 'mycontris' => 'Bidrag',
-'contribsub2' => 'För $1 ($2)',
+'contribsub2' => 'För {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Inga ändringar som motsvarar dessa kriterier hittades.',
 'uctop' => '(senaste)',
 'month' => 'Från månad (och tidigare):',
@@ -3156,6 +3162,7 @@ Vänligen använd förhandsgranskningsknappen innan du sparar.',
 Ger möjlighet att skriva en motivering i redigeringssammanfattningen',
 'tooltip-preferences-save' => 'Spara inställningar',
 'tooltip-summary' => 'Skriv en kort sammanfattning',
+'tooltip-iwiki' => '$1 - $2',
 
 # Stylesheets
 'common.css' => '/* CSS som skrivs här påverkar alla skal */',
@@ -3309,7 +3316,7 @@ Om du kör den kan din dator skadas.",
 'show-big-image-other' => '{{PLURAL:$2|Annan upplösning|Andra upplösningar}}: $1.',
 'show-big-image-size' => '$1 × $2 pixlar',
 'file-info-gif-looped' => 'upprepad',
-'file-info-gif-frames' => '$1 {{PLURAL:$1|ram|ramar}}',
+'file-info-gif-frames' => '$1 {{PLURAL:$1|bildruta|bildrutor}}',
 'file-info-png-looped' => 'upprepad',
 'file-info-png-repeat' => 'spelad $1 {{PLURAL:$1|gång|gånger}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|bild|bilder}}',
@@ -4040,7 +4047,10 @@ Du bör ha fått [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopia av GNU General Publi
 'tags-tag' => 'Märkesnamn',
 'tags-display-header' => 'Utseende på listor över ändringar',
 'tags-description-header' => 'Full beskrivning av betydelse',
+'tags-active-header' => 'Aktiv?',
 'tags-hitcount-header' => 'Märkta ändringar',
+'tags-active-yes' => 'Ja',
+'tags-active-no' => 'Nej',
 'tags-edit' => 'redigera',
 'tags-hitcount' => '$1 {{PLURAL:$1|ändring|ändringar}}',
 
@@ -4205,11 +4215,11 @@ Annars kan du använda det enkla formuläret nedan. Din kommentar kommer att lä
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekund|sekunder}}',
 'limitreport-ppvisitednodes' => 'Antal nodbesök för preprocessor',
 'limitreport-ppgeneratednodes' => 'Antal noder genererade av preprocessor',
-'limitreport-postexpandincludesize' => 'Inkludera storlek efter utvidgning',
-'limitreport-postexpandincludesize-value' => '$1/$2 byte',
+'limitreport-postexpandincludesize' => 'Inkluderad storlek efter mallutvidgning',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|byte}}',
 'limitreport-templateargumentsize' => 'Storlek på mallargument',
-'limitreport-templateargumentsize-value' => '$1/$2 byte',
-'limitreport-expansiondepth' => 'Högsta expansionsdjup',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte}}',
+'limitreport-expansiondepth' => 'Största expansionsdjup',
 'limitreport-expensivefunctioncount' => 'Antal dyra parser-funktioner',
 
 );
index 9ab7abe..499b2b0 100644 (file)
@@ -3087,8 +3087,7 @@ Huwa unapokea [{{SERVER}}{{SCRIPTPATH}}/COPYING nakala ya GNU General Public Lic
 
 # Database error messages
 'dberr-header' => 'Wiki imekuta tatizo',
-'dberr-problems' => 'Kumradhi!
-Tovuti hii inapata matatatizo wakati huu.',
+'dberr-problems' => 'Kumradhi! Tovuti hii inapata matatatizo wakati huu.',
 'dberr-again' => 'Jaribu tena baada ya kusubiri dakika chache.',
 'dberr-info' => '(Hamna mawasiliano na seva ya hifadhidata: $1)',
 'dberr-usegoogle' => 'Unaposubiri unaweza kujaribu kutafuta kwa kutumia Google.',
index 03d72bc..e112f26 100644 (file)
@@ -92,12 +92,12 @@ $messages = array(
 'tog-hidepatrolled' => 'அண்மைய மாற்றங்களில் பலமுறை பார்வையிட்ட தொகுப்புகளை மறைக்கவும்',
 'tog-newpageshidepatrolled' => 'பலமுறை பார்வையிட்ட பக்கங்களைப் புதியபக்கங்களின் பட்டியலில் காட்டவேண்டாம்.',
 'tog-extendwatchlist' => 'அனைத்து பொருத்தமான மாற்றங்களைக் காட்டுமாறு கவனிப்புப் பட்டியலை விரிவாக்கு',
-'tog-usenewrc' => 'அண்மைய மாற்றங்கள் மற்றும் கவனிப்புப் பட்டியல் பக்கத்தில் மாற்றங்களை பக்கத்தை பொறுத்து குழுவாக்கு (ஜாவாஸ்கிரிப்ட் தேவை)',
+'tog-usenewrc' => 'அண்மைய மாற்றங்கள் மற்றும் கவனிப்புப் பட்டியல் பக்கத்தில் மாற்றங்களை பக்கத்தை பொறுத்து குழுவாக்கு',
 'tog-numberheadings' => 'தலைப்புகளுக்கு தானியங்கி இலக்கமிடு',
-'tog-showtoolbar' => 'கருவிப் பட்டையைக் காட்டு (ஜாவாஸ்கிரிப்ட் தேவை)',
-'tog-editondblclick' => 'இரட்டைச் சொடுக்கில் பக்கங்களைத் தொகு (ஜாவாஸ்கிரிப்ட் தேவை)',
+'tog-showtoolbar' => 'கருவிப் பட்டையைக் காட்டு',
+'tog-editondblclick' => 'இரட்டைச் சொடுக்கில் பக்கங்களைத் தொகு',
 'tog-editsection' => '(தொகு) இணைப்புகளின் வழியாக பிரிவுத் தொகுத்தலை செயலாக்கவும்',
-'tog-editsectiononrightclick' => 'பிரிவுத் தலைப்பின் மீது வலச் சொடுக்குவதன் மூலம் பகுதித்  தொகுப்பை செயலாக்கவும் (ஜாவாஸ்கிரிப்ட் தேவை )',
+'tog-editsectiononrightclick' => 'பிரிவுத் தலைப்பின் மீது வலச் சொடுக்குவதன் மூலம் பகுதித்  தொகுப்பை செயலாக்கவும்',
 'tog-showtoc' => 'பொருளடக்க பட்டியலைக் காண்பி (மூன்றுக்கு மேற்பட்ட தலைப்புகளையுடைய கட்டுரைகளுக்கு)',
 'tog-rememberpassword' => 'எனது புகுபதிகை பற்றிய விவரங்களை இவ்வுலாவியில் (மிக அதிகமாக $1 {{PLURAL:$1|நாள்|நாட்கள்}}) வரை நினைவில் வைத்திருக்கவும்.',
 'tog-watchcreations' => 'நான் உருவாக்கும் பக்கங்கள் மற்றும் பதிவேற்றும் கோப்புகளை எனது கவனிப்புப் பட்டியலில் சேர்க்கவும்.',
@@ -115,7 +115,7 @@ $messages = array(
 'tog-shownumberswatching' => 'கவனிக்கும் பயனர்களின் எண்ணிக்கையைக் காட்டவும்',
 'tog-oldsig' => 'நடப்பு கையொப்பம்:',
 'tog-fancysig' => 'வெற்றுக் கையொப்பம் (தானியங்கி இணைப்பின்றி)',
-'tog-uselivepreview' => 'நà¯\87à®°à®\9fி à®®à¯\81னà¯\8dதà¯\8bà®±à¯\8dறதà¯\8dதà¯\88பà¯\8d à®ªà®¯à®©à¯\8dபà®\9fà¯\81தà¯\8dதà¯\81 (à®\9cாவாஸà¯\8dà®\95ிரிபà¯\8dà®\9fà¯\8d à®¤à¯\87வà¯\88) (à®\9aà¯\8bதனà¯\88யிலà¯\81ளà¯\8dளதà¯\81)',
+'tog-uselivepreview' => 'நேரடி முன்தோற்றத்தைப் பயன்படுத்து (சோதனையிலுள்ளது)',
 'tog-forceeditsummary' => 'தொகுப்புச் சுருக்கம் வெற்றாக இருக்கும் போது எனக்கு நினைவூட்டு',
 'tog-watchlisthideown' => 'எனது தொகுப்புக்களைக் கவனிப்புப் பட்டியலிலிருந்து மறை',
 'tog-watchlisthidebots' => 'தானியங்கித் தொகுப்புக்களைக் கவனிப்புப் பட்டியலிலிருந்து மறை',
@@ -128,6 +128,7 @@ $messages = array(
 'tog-showhiddencats' => 'மறைக்கப்பட்ட பகுப்புகளைக் காட்டு',
 'tog-norollbackdiff' => 'முன்பிருந்த நிலைக்குக் கொண்டுவந்தபின் வித்தியாசங்களை விட்டுவிடவும் (காட்டத்தேவையில்லை).',
 'tog-useeditwarning' => 'தொகுத்துக் கொண்டிருக்கும் பக்கத்தை சேமிக்காமல் வெளியேறினால் எனக்கு எச்சரிக்கை செய்',
+'tog-prefershttps' => 'புகுபதிகை செய்யும்போது எப்போதுமே பாதுகாப்பான இணைப்பை பயன்படுத்தவும்',
 
 'underline-always' => 'எப்பொழுதும்',
 'underline-never' => 'எப்போதுமில்லை',
@@ -228,7 +229,7 @@ $messages = array(
 'newwindow' => '(புதிய சாளரத்துள் திறக்கும்)',
 'cancel' => 'சேமிக்காமல் திரும்பு',
 'moredotdotdot' => 'மேலும்...',
-'morenotlisted' => 'à®®à¯\87லதிà®\95மானவà¯\88 à®ªà®\9fà¯\8dà®\9fியலிà®\9fபà¯\8dபà®\9fவிலà¯\8dலà¯\88',
+'morenotlisted' => 'à®\87நà¯\8dத à®ªà®\9fà¯\8dà®\9fியலà¯\8dà®\95லà¯\8d à®®à¯\81à®´à¯\81à®®à¯\88யாà®\95à¯\8dà®\95விலà¯\8dலà¯\88.',
 'mypage' => 'பக்கம்',
 'mytalk' => 'பேச்சு',
 'anontalk' => 'இந்த ஐ.பி. முகவரிக்கான பேச்சு',
@@ -2727,6 +2728,7 @@ $1',
 'tooltip-undo' => '"பின்வாங்கு" என்பது முன்பு செய்த தொகுப்புக்களை இல்லாது செய்கிறது. மேலும் தாங்கள் செய்த தொகுப்பினை முன்தோற்ற நிலைக்கு கொண்டுவந்து காட்டும். அது தங்களுக்குச் சிறுகுறிப்புப் பகுதியில் அதற்கான காரணத்தைக் கூற அனுமதிக்கிறது.',
 'tooltip-preferences-save' => 'விருப்பங்களை சேமி',
 'tooltip-summary' => 'குறுகிய சுருக்கத்தை உள்ளிடவும்.',
+'tooltip-iwiki' => '$1 - $2',
 
 # Metadata
 'notacceptable' => 'உங்களது சேவையாளர் வாசிக்க கூடிய விதத்தில் இந்த விக்கியால தரவுகளை வழங்க முடியாது.',
@@ -3536,6 +3538,8 @@ $5
 'tags-display-header' => 'கவனிப்புப் பட்டியலில் தெரியும் பெயர்',
 'tags-description-header' => 'விரிவான விளக்கம்',
 'tags-hitcount-header' => 'மாற்றங்களின் எண்ணிக்கை',
+'tags-active-yes' => 'ஆம்',
+'tags-active-no' => 'இல்லை',
 'tags-edit' => 'தொகு',
 'tags-hitcount' => '$1 {{PLURAL:$1|மாற்றம்|மாற்றங்கள்}}',
 
@@ -3553,8 +3557,7 @@ $5
 
 # Database error messages
 'dberr-header' => 'இந்த விக்கிக்குஒரு கோளாறு உள்ளது',
-'dberr-problems' => 'மன்னிக்கவும்!
-இந்த தளம், தொழில்நுட்ப பிரச்சினைகளுக்கு உள்ளாகியுள்ளது..',
+'dberr-problems' => 'மன்னிக்கவும்! இந்த தளம், தொழில்நுட்ப பிரச்சினைகளுக்கு உள்ளாகியுள்ளது..',
 'dberr-again' => 'சில நிமிடங்கள் காத்திரு மற்றும் மறுபடியும் முயற்சிக்கவும்',
 'dberr-info' => '(தரவுதள சேவகனை தொடர்பு கொள்ள முடியாது:  $1 )',
 'dberr-usegoogle' => 'இதே நேரத்தில் நீங்கள் கூகிள் வழியாக தேட முயற்சிக்கலாம்.',
index 784c10e..83bd7d2 100644 (file)
@@ -204,12 +204,12 @@ $messages = array(
 'tog-hidepatrolled' => 'ซ่อนการแก้ไขที่ตรวจแล้วในหน้าปรับปรุงล่าสุด',
 'tog-newpageshidepatrolled' => 'ซ่อนหน้าที่ตรวจแล้วจากรายการหน้าใหม่',
 'tog-extendwatchlist' => 'ขยายรายการเฝ้าดูให้แสดงการเปลี่ยนแปลงทั้งหมด ไม่เพียงการเปลี่ยนแปลงล่าสุด',
-'tog-usenewrc' => 'à¸\88ัà¸\94à¸\81ลุà¹\88มà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\82à¸\94ยหà¸\99à¹\89าà¹\83à¸\99รายà¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87ลà¹\88าสุà¸\94à¹\81ละรายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู (à¸\95à¹\89อà¸\87à¸\81ารà¸\88าวาสà¸\84ริà¸\9bà¸\95à¹\8c)',
+'tog-usenewrc' => 'à¸\88ัà¸\94à¸\81ลุà¹\88มà¸\84วามà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\81à¸\9aà¹\88à¸\87à¸\95ามหà¸\99à¹\89าà¹\83à¸\99รายà¸\81ารà¸\9bรัà¸\9aà¸\9bรุà¸\87ลà¹\88าสุà¸\94à¹\81ละรายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู',
 'tog-numberheadings' => 'ใส่เลขหัวข้อในสารบัญอัตโนมัติ',
-'tog-showtoolbar' => 'à¹\81สà¸\94à¸\87à¹\80à¸\84รืà¹\88อà¸\87มือà¹\81à¸\81à¹\89à¹\84à¸\82 (à¸\88าวาสà¸\84ริà¸\9bà¸\95à¹\8c)',
-'tog-editondblclick' => 'à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¹\82à¸\94ยà¸\81ารà¸\94ัà¸\9aà¹\80à¸\9aิลà¸\84ลิà¸\81 (à¸\88าวาสà¸\84ริà¸\9bà¸\95à¹\8c)',
+'tog-showtoolbar' => 'à¹\81สà¸\94à¸\87à¹\81à¸\96à¸\9aà¹\80à¸\84รืà¹\88อà¸\87มือà¹\81à¸\81à¹\89à¹\84à¸\82',
+'tog-editondblclick' => 'à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¹\80มืà¹\88อà¸\94ัà¸\9aà¹\80à¸\9aิลà¸\84ลิà¸\81',
 'tog-editsection' => 'เปิดการแก้ไขเฉพาะส่วนผ่านลิงก์ [แก้ไข]',
-'tog-editsectiononrightclick' => 'à¹\80à¸\9bิà¸\94à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80à¸\89à¸\9eาะสà¹\88วà¸\99à¹\82à¸\94ยà¸\84ลิà¸\81à¸\82วาà¸\97ีà¹\88หัวà¸\82à¹\89อ (à¸\88าวาสà¸\84ริà¸\9bà¸\95à¹\8c)',
+'tog-editsectiononrightclick' => 'à¹\80à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\80à¸\89à¸\9eาะสà¹\88วà¸\99à¹\82à¸\94ยà¸\84ลิà¸\81à¸\82วาà¸\97ีà¹\88หัวà¸\82à¹\89อ',
 'tog-showtoc' => 'แสดงสารบัญ (สำหรับหน้าที่มีมากกว่า 3 หัวข้อ)',
 'tog-rememberpassword' => 'จำการล็อกอินของฉันในเบราว์เซอร์นี้ (สูงสุด $1 วัน)',
 'tog-watchcreations' => 'เพิ่มหน้าที่ฉันสร้างและไฟล์ที่ฉันอัปโหลดเข้ารายการเฝ้าดู',
@@ -227,7 +227,7 @@ $messages = array(
 'tog-shownumberswatching' => 'แสดงจำนวนผู้ใช้ที่เฝ้าดู',
 'tog-oldsig' => 'ลายเซ็นที่ใช้อยู่:',
 'tog-fancysig' => 'ใช้คำสั่งวิกิที่ปรากฏในลายเซ็นนี้ (โดยไม่มีลิงก์อัตโนมัติ)',
-'tog-uselivepreview' => 'à¹\81สà¸\94à¸\87à¸\95ัวอยà¹\88าà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\81à¸\9aà¸\9aà¸\97ัà¸\99à¸\97ี (à¸\88าวาสà¸\84ริà¸\9bà¸\95à¹\8c) (à¸\97à¸\94ลอà¸\87)',
+'tog-uselivepreview' => 'แสดงตัวอย่างการแก้ไขแบบทันที (ทดลอง)',
 'tog-forceeditsummary' => 'เตือนเมื่อช่องคำอธิบายอย่างย่อว่าง',
 'tog-watchlisthideown' => 'ซ่อนการแก้ไขของฉันจากรายการเฝ้าดู',
 'tog-watchlisthidebots' => 'ซ่อนการแก้ไขของบอตจากรายการเฝ้าดู',
@@ -241,6 +241,7 @@ $messages = array(
 'tog-noconvertlink' => 'ปิดใช้งานการแปลงชื่อเรื่องของลิงก์',
 'tog-norollbackdiff' => 'ไม่แสดงการเปลี่ยนแปลงหลังดำเนินการย้อนกลับฉุกเฉิน',
 'tog-useeditwarning' => 'เตือนฉัน เมื่อฉันกำลังจะออกจากหน้าแก้ไขโดยมีข้อมูลที่ยังไม่ได้บันทึก',
+'tog-prefershttps' => 'ใช้การเชื่อมต่อปลอดภัยทุกครั้งเมื่อล็อกอิน',
 
 'underline-always' => 'เสมอ',
 'underline-never' => 'ไม่เคย',
@@ -341,7 +342,7 @@ $messages = array(
 'newwindow' => '(เปิดหน้าต่างใหม่)',
 'cancel' => 'ยกเลิก',
 'moredotdotdot' => 'ดูเพิ่ม...',
-'morenotlisted' => 'มีà¸\97ีà¹\88ยัà¸\87à¹\84มà¹\88à¹\81สà¸\94à¸\87อีà¸\81...',
+'morenotlisted' => 'รายà¸\81ารà¸\99ีà¹\89à¹\84มà¹\88สมà¸\9aูรà¸\93à¹\8c',
 'mypage' => 'หน้า',
 'mytalk' => 'พูดคุย',
 'anontalk' => 'พูดคุยกับเลขที่อยู่ไอพีนี้',
@@ -652,7 +653,7 @@ $1',
 'createacct-emailoptional' => 'ที่อยู่อีเมล (เลือกไม่ใส่ได้)',
 'createacct-email-ph' => 'กรอกที่อยู่อีเมล',
 'createacct-another-email-ph' => 'กรอกที่อยู่อีเมล',
-'createaccountmail' => 'ใช้รหัสผ่านสุ่มชั่วคราวและส่งไปยังที่อยู่อีเมลที่ระบุด้านล่าง',
+'createaccountmail' => 'ใช้รหัสผ่านสุ่มชั่วคราวและส่งไปยังที่อยู่อีเมลที่ระบุ',
 'createacct-realname' => 'ชื่อจริง (เลือกไม่ใส่ได้)',
 'createaccountreason' => 'เหตุผล:',
 'createacct-reason' => 'เหตุผล',
@@ -699,7 +700,8 @@ $1',
 กรุณาล็อกอินอีกครั้งหลังได้รับอีเมล',
 'blocked-mailpassword' => 'เลขที่อยู่ไอพีของคุณถูกบล็อกมิให้แก้ไข ฉะนั้น จึงไม่ได้รับอนุญาตให้ใช้ฟังก์ชันขอกู้รหัสผ่านเพื่อป้องกันการกระทำผิด',
 'eauthentsent' => 'อีเมลยืนยันได้ถูกส่งไปที่อยู่อีเมลที่เสนอ ก่อนที่อีเมลจะถูกส่งไปที่ชื่อบัญชีนั้น คุณต้องปฏิบัติตามคำแนะนำในอีเมลเพื่อยืนยันว่าบัญชีนั้นเป็นของคุณจริง ๆ',
-'throttled-mailpassword' => 'ตัวเตือนรหัสผ่านได้ถูกส่งไปแล้วใน $1 ชั่วโมงที่ผ่านมา ตัวเตือนรหัสผ่านนี้จะถูกส่งได้หนึ่งครั้งต่อ $1 ชั่วโมงเท่านั้น เพื่อป้องกันการกระทำผิด',
+'throttled-mailpassword' => 'อีเมลตั้งรหัสผ่านใหม่ถูกส่งไปแล้วใน $1 ชั่วโมงที่ผ่านมา 
+อีเมลตั้งรหัสผ่านใหม่จะส่งไปหนึ่งครั้งต่อ $1 ชั่วโมงเท่านั้น เพื่อป้องกันการกระทำที่ไม่ถูกต้อง',
 'mailerror' => 'ข้อผิดพลาดในการส่งเมล: $1',
 'acct_creation_throttle_hit' => 'ผู้เข้าชมวิกินี้ที่ใช้เลขที่อยู่ไอพีของคุณ ได้สร้างบัญชีแล้ว $1 บัญชีในวันที่ผ่านมา ซึ่งเป็นจำนวนสูงสุดที่อนุญาตในช่วงเวลาดังกล่าว
 จึงส่งผลให้ผู้เข้าชมที่ใช้เลขที่อยู่ไอพีนี้ ไม่สามารถสร้างบัญชีได้อีกในขณะนี้',
@@ -720,10 +722,12 @@ $1',
 คุณอาจเพิกเฉยข้อความนี้ หากการสร้างบัญชีนี้เกิดจากความผิดพลาด',
 'usernamehasherror' => 'ชื่อผู้ใช้ต้องไม่มีอักขระแฮช',
 'login-throttled' => 'ที่ผ่านมาคุณพยายามล็อกอินมากครั้งเกินไป
-กรุณารอสักครู่แล้วลองใหม่อีกครั้ง',
+กรุณารอ $1 ก่อนลองอีกครั้ง',
 'login-abort-generic' => 'การเข้าสู่ระบบของคุณไม่ประสบความสำเร็จ - ล้มเลิกแล้ว',
 'loginlanguagelabel' => 'ภาษา: $1',
 'suspicious-userlogout' => 'คำขอล็อกเอาต์ของคุณถูกปฏิเสธเพราะดูเหมือนส่งมาจากเบราว์เซอร์หรือพร็อกซีแคชที่เสีย',
+'createacct-another-realname-tip' => 'ไม่จำเป็นต้องใส่ชื่อจริง
+หากคุณเลือกใส่ชื่อจริง จะใช้เพื่อแสดงที่มาสำหรับงานของตน',
 
 # Email sending
 'php-mail-error-unknown' => 'เกิดข้อผิดพลาดไม่ทราบสาเหตุในฟังก์ชัน mail() ของพีเอชพี',
@@ -739,7 +743,7 @@ $1',
 'newpassword' => 'รหัสผ่านใหม่:',
 'retypenew' => 'พิมพ์รหัสผ่านใหม่อีกครั้ง:',
 'resetpass_submit' => 'ตั้งรหัสผ่านและล็อกอิน',
-'changepassword-success' => 'เปลี่ยนรหัสผ่านของคุณเรียบร้อย ขณะนี้กำลังล็อกอินให้คุณ...',
+'changepassword-success' => 'เปลี่ยนรหัสผ่านของคุณเรียบร้อย',
 'resetpass_forbidden' => 'ไม่สามารถเปลี่ยนรหัสผ่านได้',
 'resetpass-no-info' => 'คุณต้องล็อกอินเพื่อเข้าถึงหน้านี้โดยตรง',
 'resetpass-submit-loggedin' => 'เปลี่ยนรหัสผ่าน',
@@ -762,23 +766,23 @@ $1',
 'passwordreset-capture-help' => 'หากคุณเลือกกล่องนี้ อีเมลดังกล่าว (พร้อมรหัสผ่านชั่วคราว) จะแสดงแก่คุณ เช่นเดียวกับส่งไปยังผู้ใช้',
 'passwordreset-email' => 'ที่อยู่อีเมล:',
 'passwordreset-emailtitle' => 'รายละเอียดบัญชีบน {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'à¹\83à¸\84รà¸\9aาà¸\87à¸\84à¸\99 (à¸\8bึà¹\88à¸\87อาà¸\88à¹\80à¸\9bà¹\87à¸\99à¸\84ุà¸\93 à¸\97ีà¹\88à¹\83à¸\8aà¹\89à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี $1) à¸\82อà¸\95ัวà¹\80à¸\95ือà¸\99รายละà¹\80อียà¸\94à¸\9aัà¸\8dà¸\8aีà¸\82อà¸\87à¸\84ุà¸\93à¸\9aà¸\99 {{SITENAME}} ($4) บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:
+'passwordreset-emailtext-ip' => 'à¸\9aาà¸\87à¸\84à¸\99 (à¸\8bึà¹\88à¸\87อาà¸\88à¹\80à¸\9bà¹\87à¸\99à¸\84ุà¸\93 à¸\88าà¸\81à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eี $1) à¸£à¹\89อà¸\87à¸\82อà¸\81ารà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¹\83หมà¹\88à¸\9aà¸\99{{SITENAME}} ($4) บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:
 
 $2
 
 {{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน
-à¸\95อà¸\99à¸\99ีà¹\89à¸\84ุà¸\93à¸\84วรลà¹\87อà¸\81อิà¸\99à¹\81ละà¹\80ลือà¸\81รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88 à¸«à¸²à¸\81à¸\9aุà¸\84à¸\84ลอืà¹\88à¸\99à¸\82อà¸\95ัวà¹\80à¸\95ือà¸\99รายละà¹\80อียà¸\94à¸\9aัà¸\8dà¸\8aี à¸«à¸£à¸·à¸­à¸\84ุà¸\93à¸\88ำรหัสà¸\9cà¹\88าà¸\99à¹\80à¸\94ิมà¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\94à¹\89à¹\81ลà¹\89ว à¹\81ละà¸\84ุà¸\93à¹\84มà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99อีà¸\81à¸\95à¹\88อà¹\84à¸\9b à¸\84ุà¸\93อาà¸\88ละà¹\80ลยà¸\82à¹\89อà¸\84วามà¸\99ีà¹\89à¹\81ละà¹\83à¸\8aà¹\89รหัสà¸\9cà¹\88าà¸\99à¹\80à¸\81à¹\88าของคุณต่อไป',
-'passwordreset-emailtext-user' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89 $1 à¸\82อà¸\95ัวà¹\80à¸\95ือà¸\99รายละà¹\80อียà¸\94à¸\9aัà¸\8dà¸\8aีà¸\82อà¸\87à¸\84ุà¸\93à¸\9aà¸\99 {{SITENAME}} ($4) {{PLURAL:$3||}}บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:
+à¸\95อà¸\99à¸\99ีà¹\89à¸\84ุà¸\93à¸\84วรลà¹\87อà¸\81อิà¸\99à¹\81ละà¹\80ลือà¸\81รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88 à¸«à¸²à¸\81à¸\9aุà¸\84à¸\84ลอืà¹\88à¸\99à¸\82อà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\99ีà¹\89 à¸«à¸£à¸·à¸­à¸\84ุà¸\93à¸\88ำรหัสà¸\9cà¹\88าà¸\99à¹\80à¸\94ิมà¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\94à¹\89à¹\81ลà¹\89ว à¹\81ละà¸\84ุà¸\93à¹\84มà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99อีà¸\81 à¸\84ุà¸\93อาà¸\88ละà¹\80ลยà¸\82à¹\89อà¸\84วามà¸\99ีà¹\89à¹\81ละà¹\83à¸\8aà¹\89รหัสà¸\9cà¹\88าà¸\99à¹\80à¸\94ิมของคุณต่อไป',
+'passwordreset-emailtext-user' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89 $1 à¸\82อà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¸\82อà¸\87à¸\84ุà¸\93à¹\83หมà¹\88à¸\9aà¸\99{{SITENAME}} ($4) {{PLURAL:$3||}}บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:
 
 $2
 
 {{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน
-à¸\95อà¸\99à¸\99ีà¹\89à¸\84ุà¸\93à¸\84วรลà¹\87อà¸\81อิà¸\99à¹\81ละà¹\80ลือà¸\81รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88 à¸«à¸²à¸\81à¸\9aุà¸\84à¸\84ลอืà¹\88à¸\99à¸\82อà¸\95ัวà¹\80à¸\95ือà¸\99รายละà¹\80อียà¸\94à¸\9aัà¸\8dà¸\8aี à¸«à¸£à¸·à¸­à¸\84ุà¸\93à¸\88ำรหัสà¸\9cà¹\88าà¸\99à¹\80à¸\94ิมà¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\94à¹\89à¹\81ลà¹\89ว à¹\81ละà¸\84ุà¸\93à¹\84มà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99อีà¸\81à¸\95à¹\88อà¹\84à¸\9b à¸\84ุà¸\93อาà¸\88ละà¹\80ลยà¸\82à¹\89อà¸\84วามà¸\99ีà¹\89à¹\81ละà¹\83à¸\8aà¹\89รหัสà¸\9cà¹\88าà¸\99à¹\80à¸\81à¹\88าของคุณต่อไป',
+à¸\95อà¸\99à¸\99ีà¹\89à¸\84ุà¸\93à¸\84วรลà¹\87อà¸\81อิà¸\99à¹\81ละà¹\80ลือà¸\81รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88 à¸«à¸²à¸\81à¸\9aุà¸\84à¸\84ลอืà¹\88à¸\99à¸\82อà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\99ีà¹\89 à¸«à¸£à¸·à¸­à¸\84ุà¸\93à¸\88ำรหัสà¸\9cà¹\88าà¸\99à¹\80à¸\94ิมà¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\94à¹\89à¹\81ลà¹\89ว à¹\81ละà¸\84ุà¸\93à¹\84มà¹\88à¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99รหัสà¸\9cà¹\88าà¸\99อีà¸\81 à¸\84ุà¸\93อาà¸\88ละà¹\80ลยà¸\82à¹\89อà¸\84วามà¸\99ีà¹\89à¹\81ละà¹\83à¸\8aà¹\89รหัสà¸\9cà¹\88าà¸\99à¹\80à¸\94ิมของคุณต่อไป',
 'passwordreset-emailelement' => 'ชื่อผู้ใช้: $1
 รหัสผ่านชั่วคราว: $2',
 'passwordreset-emailsent' => 'อีเมลตั้งรหัสผ่านใหม่ถูกส่งไปแล้ว',
 'passwordreset-emailsent-capture' => 'อีเมลตั้งรหัสผ่านใหม่ถูกส่งไปแล้ว ซึ่งแสดงด้านล่าง',
-'passwordreset-emailerror-capture' => 'อีà¹\80มลà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\96ูà¸\81สรà¹\89าà¸\87à¸\82ึà¹\89à¸\99à¹\81ลà¹\89ว à¸\8bึà¹\88à¸\87à¹\81สà¸\94à¸\87à¸\82à¹\89าà¸\87ลà¹\88าà¸\87 à¹\81à¸\95à¹\88à¸\81ารสà¹\88à¸\87à¹\84à¸\9bยัà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89ลà¹\89มà¹\80หลว: $1',
+'passwordreset-emailerror-capture' => 'อีà¹\80มลà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88à¸\96ูà¸\81สรà¹\89าà¸\87à¸\82ึà¹\89à¸\99à¹\81ลà¹\89ว à¸\8bึà¹\88à¸\87à¹\81สà¸\94à¸\87à¸\94à¹\89าà¸\99ลà¹\88าà¸\87 à¹\81à¸\95à¹\88à¹\84มà¹\88สามารà¸\96สà¹\88à¸\87à¹\84à¸\9bยัà¸\87{{GENDER:$2|à¸\9cูà¹\89à¹\83à¸\8aà¹\89}}: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'เปลี่ยนที่อยู่อีเมล',
@@ -801,7 +805,7 @@ $2
 'resettokens-legend' => 'ตั้งโทเค็นใหม่',
 'resettokens-tokens' => 'โทเค็น:',
 'resettokens-token-label' => '$1 (ค่าปัจจุบัน: $2)',
-'resettokens-watchlist-token' => 'โทเค็นการป้อนเว็บรายการเฝ้าดู',
+'resettokens-watchlist-token' => 'โทเค็นการป้อนเว็บ (Atom/RSS) ของ[[Special:Watchlist|การเปลี่ยนแปลงไปยังหน้าในรายการเฝ้าดูของคุณ]]',
 'resettokens-done' => 'ตั้งโทเค็นใหม่แล้ว',
 'resettokens-resetbutton' => 'ตั้งโทเค็นที่เลือกใหม่',
 
@@ -878,9 +882,7 @@ $2
 'loginreqlink' => 'ล็อกอิน',
 'loginreqpagetext' => 'คุณต้อง$1เพื่อดูหน้าอื่น',
 'accmailtitle' => 'ส่งรหัสผ่านแล้ว',
-'accmailtext' => "มีการสร้างรหัสผ่านแบบสุ่มให้กับ [[User talk:$1|$1]] โดยจัดส่งไปที่ $2
-
-สามารถเปลี่ยนรหัสผ่านของบัญชีใหม่นี้ในหน้า''[[Special:ChangePassword|เปลี่ยนรหัสผ่าน]]'' หลังล็อกอินแล้ว",
+'accmailtext' => "รหัสผ่านแบบสุ่มของ [[User talk:$1|$1]] ถูกส่งไปยัง $2 แล้ว สามารถเปลี่ยนรหัสผ่านในหน้า''[[Special:ChangePassword|เปลี่ยนรหัสผ่าน]]'' หลังล็อกอิน",
 'newarticle' => '(ใหม่)',
 'newarticletext' => "คุณตามลิงก์ไปยังหน้าที่ยังไม่มีในขณะนี้
 ในการสร้างหน้า เริ่มพิมพ์ในกล่องด้านล่าง (ดูข้อมูลเพิ่มเติมใน[[{{MediaWiki:Helppage}}|หน้าคำอธิบาย]])
@@ -1313,7 +1315,7 @@ $1",
 'prefs-rendering' => 'รูปลักษณ์',
 'saveprefs' => 'บันทึก',
 'resetprefs' => 'ล้างการเปลี่ยนแปลงที่ยังไม่บันทึก',
-'restoreprefs' => 'คืนการตั้งค่าโดยปริยายทั้งหมด',
+'restoreprefs' => 'คืนการตั้งค่าโดยปริยายทั้งหมด (ในทุกส่วน)',
 'prefs-editing' => 'การแก้ไข',
 'rows' => 'แถว:',
 'columns' => 'คอลัมน์:',
@@ -1374,7 +1376,9 @@ $1",
 'gender-unknown' => 'ไม่ระบุ',
 'gender-male' => 'ชาย',
 'gender-female' => 'หญิง',
-'prefs-help-gender' => 'เป็นข้อมูลเสริม: ใช้เพื่อให้ซอฟต์แวร์แยกแยะเพศของผู้ใช้ได้ ข้อมูลนี้จะเปิดเผยต่อสาธารณะ',
+'prefs-help-gender' => 'เลือกตั้งค่านี้หรือไม่ก็ได้
+ซอฟต์แวร์ใช้ค่านี้เพื่อติดต่อคุณและกล่าวถึงคุณโดยใช้เพศทางไวยากรณ์ที่เหมาะสมเมื่อติดต่อผู้อื่น
+ข้อมูลนี้เปิดเผยต่อสาธารณะ',
 'email' => 'อีเมล',
 'prefs-help-realname' => 'ไม่จำเป็นต้องใช้ชื่อจริง ถ้าคุณเลือกใช้ชื่อจริง จะใช้เพื่อให้เกียรติแก่งานของคุณ',
 'prefs-help-email' => 'ไม่จำเป็นต้องใส่ที่อยู่อีเมล แต่จำเป็นสำหรับการตั้งรหัสผ่านใหม่เมื่อคุณลืมรหัสผ่าน',
@@ -1397,6 +1401,7 @@ $1",
 'prefs-displaywatchlist' => 'ตัวเลือกผลแสดง',
 'prefs-tokenwatchlist' => 'โทเค็น',
 'prefs-diffs' => 'ผลต่าง',
+'prefs-help-prefershttps' => 'การตั้งค่านี้จะมีผลเมื่อคุณล็อกอินครั้งถัดไป',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'ที่อยู่อีเมลดูถูกต้อง',
@@ -1420,7 +1425,7 @@ $1",
 'userrights-no-interwiki' => 'คุณไม่ได้รับสิทธิแก้ไขสิทธิผู้ใช้บนวิกิอื่น',
 'userrights-nodatabase' => 'ไม่มีฐานข้อมูล $1 อยู่ หรือฐานข้อมูลอยู่บนเครื่องอื่น',
 'userrights-nologin' => 'คุณต้อง[[Special:UserLogin|ล็อกอิน]]ด้วยบัญชีผู้ดูแลระบบก่อน จึงจะกำหนดสิทธิผู้ใช้ได้',
-'userrights-notallowed' => 'à¸\9aัà¸\8dà¸\8aีà¸\82อà¸\87à¸\84ุà¸\93à¹\84มà¹\88à¹\84à¸\94à¹\89รัà¸\9aอà¸\99ุà¸\8dาà¸\95à¹\83หà¹\89à¹\80à¸\9eิà¹\88มหรือลà¸\94สิà¸\97à¸\98ิà¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89',
+'userrights-notallowed' => 'บัญชีของคุณไม่ได้รับอนุญาตให้เพิ่มหรือลดสิทธิผู้ใช้',
 'userrights-changeable-col' => 'กลุ่มที่คุณสามารถเปลี่ยนได้',
 'userrights-unchangeable-col' => 'กลุ่มที่คุณไม่สามารถเปลี่ยนได้',
 
@@ -1488,7 +1493,8 @@ $1",
 'right-proxyunbannable' => 'เลี่ยงการบล็อกอัตโนมัติของพร็อกซี',
 'right-unblockself' => 'ปลดบล็อกตนเอง',
 'right-protect' => 'เปลี่ยนระดับการล็อกและแก้ไขหน้าที่ถูกล็อก',
-'right-editprotected' => 'หน้าที่ถูกล็อกเต็มที่ (ที่ไม่ล็อกแบบสืบทอด)',
+'right-editprotected' => 'แก้ไขหน้าที่ถูกล็อกซึ่ง "{{int:protect-level-sysop}}"',
+'right-editsemiprotected' => 'แก้ไขหน้าที่ถูกล็อกซึ่ง "{{int:protect-level-autoconfirmed}}"',
 'right-editinterface' => 'แก้ไขอินเตอร์เฟซผู้ใช้',
 'right-editusercssjs' => 'แก้ไขไฟล์ CSS และจาวาสคริปต์ของผู้ใช้อื่น',
 'right-editusercss' => 'แก้ไขไฟล์ CSS ของผู้ใช้อื่น',
@@ -1568,6 +1574,8 @@ $1",
 
 # Recent changes
 'nchanges' => '$1 การแก้ไข',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|ตั้งแต่การเข้าชมล่าสุด}}',
+'enhancedrc-history' => 'ประวัติ',
 'recentchanges' => 'ปรับปรุงล่าสุด',
 'recentchanges-legend' => 'ตัวเลือกปรับปรุงล่าสุด',
 'recentchanges-summary' => 'ในหน้านี้เป็นรายการการปรับปรุงล่าสุดบนวิกินี้',
@@ -1600,7 +1608,7 @@ $1",
 'rc_categories_any' => 'ใด ๆ',
 'rc-change-size-new' => '$1 ไบต์หลังปรับปรุง',
 'newsectionsummary' => '/* $1 */ หัวข้อใหม่',
-'rc-enhanced-expand' => 'แสดงรายละเอียด (จาวาสคริปต์)',
+'rc-enhanced-expand' => 'แสดงรายละเอียด',
 'rc-enhanced-hide' => 'ซ่อนรายละเอียด',
 'rc-old-title' => 'เดิมถูกสร้างในชื่อ "$1"',
 
@@ -1819,8 +1827,7 @@ $1',
 'upload_source_file' => ' (ไฟล์จากคอมพิวเตอร์คุณ)',
 
 # Special:ListFiles
-'listfiles-summary' => 'หน้าพิเศษนี้แสดงไฟล์ทั้งหมดที่อัปโหลด
-เมื่อกรองตามผู้ใช้แล้ว จะแสดงเฉพาะไฟล์รุ่นล่าสุดที่ผู้ใช้นั้นอัปโหลด',
+'listfiles-summary' => 'หน้าพิเศษนี้แสดงไฟล์ทั้งหมดที่อัปโหลด',
 'listfiles_search_for' => 'ค้นหาชื่อสื่อ:',
 'imgfile' => 'ไฟล์',
 'listfiles' => 'รายการไฟล์',
@@ -1831,6 +1838,10 @@ $1',
 'listfiles_size' => 'ขนาด',
 'listfiles_description' => 'คำอธิบาย',
 'listfiles_count' => 'รุ่น',
+'listfiles-show-all' => 'รวมภาพรุ่นเก่า',
+'listfiles-latestversion' => 'รุ่นปัจจุบัน',
+'listfiles-latestversion-yes' => 'ใช่',
+'listfiles-latestversion-no' => 'ไม่',
 
 # File description page
 'file-anchor-link' => 'ไฟล์',
@@ -2023,6 +2034,7 @@ $1',
 'mostrevisions' => 'หน้าที่มีรุ่นมากที่สุด',
 'prefixindex' => 'ทุกหน้าพร้อมคำขึ้นต้น',
 'prefixindex-namespace' => 'ทุกหน้าพร้อมคำขึ้นต้น (เนมสเปซ $1)',
+'prefixindex-strip' => 'ลบคำขึ้นต้นในรายการออก',
 'shortpages' => 'หน้าสั้น',
 'longpages' => 'หน้ายาว',
 'deadendpages' => 'หน้าสุดทาง',
@@ -2117,7 +2129,7 @@ $1',
 'linksearch-ok' => 'ค้นหา',
 'linksearch-text' => 'สามารถใช้ตัวแทนเช่น "*.wikipedia.org" ได้
 ต้องการโดเมนระดับบนสุดเป็นอย่างน้อย เช่น "*.org"<br />
-โพรโทคอลที่รองรับ: <code>$1</code> (ค่าโดยปริยายเป็น http:// หากไม่ระบุโพรโทคอล)',
+{PLURAL:$2|โพรโทคอล}}ที่รองรับ: <code>$1</code> (ค่าโดยปริยายเป็น http:// หากไม่ระบุโพรโทคอล)',
 'linksearch-line' => '$1 ถูกลิงก์จาก $2',
 'linksearch-error' => 'อักขระตัวแทนอยู่ได้เฉพาะหน้าชื่อโฮสต์เท่านั้น',
 
@@ -2140,7 +2152,8 @@ $1',
 'listgrouprights' => 'สิทธิกลุ่มผู้ใช้',
 'listgrouprights-summary' => 'ด้านล่างเป็นรายการกลุ่มผู้ใช้ที่นิยามบนวิกินี้ และสิทธิการเข้าถึงที่เกี่ยวข้อง
 อาจมี[[{{MediaWiki:Listgrouprights-helppage}}|ข้อมูลเพิ่มเติม]]เกี่ยวกับสิทธิหนึ่ง ๆ',
-'listgrouprights-key' => '* <span class="listgrouprights-granted">สิทธิที่ได้รับแต่งตั้ง</span>
+'listgrouprights-key' => 'คำอธิบาย:
+* <span class="listgrouprights-granted">สิทธิที่ได้รับแต่งตั้ง</span>
 * <span class="listgrouprights-revoked">สิทธิที่ถูกเพิกถอน</span>',
 'listgrouprights-group' => 'กลุ่ม',
 'listgrouprights-rights' => 'สิทธิ',
@@ -2212,7 +2225,7 @@ $1',
 'notvisiblerev' => 'รุ่นล่าสุดโดยผู้ใช้อีกคนถูกลบแล้ว',
 'watchlist-details' => 'มี $1 หน้าในรายการเฝ้าดูของคุณ ไม่รวมหน้าอภิปราย',
 'wlheader-enotif' => 'การแจ้งเตือนผ่านอีเมลถูกเปิดใช้งาน',
-'wlheader-showupdated' => "หà¸\99à¹\89าà¸\97ีà¹\88มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\81ารà¹\80à¸\82à¹\89าà¸\8aมà¸\84รัà¹\89à¸\87ลà¹\88าสุà¸\94à¸\82อà¸\87à¸\84ุà¸\93แสดงใน'''ตัวหนา'''",
+'wlheader-showupdated' => "หà¸\99à¹\89าà¸\97ีà¹\88มีà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88à¸\84ุà¸\93à¹\80à¸\82à¹\89าà¸\8aมลà¹\88าสุà¸\94แสดงใน'''ตัวหนา'''",
 'watchmethod-recent' => 'ตรวจสอบการปรับปรุงล่าสุดกับหน้าเฝ้าดู',
 'watchmethod-list' => 'ตรวจสอบหน้าเฝ้าดูกับการแก้ไขล่าสุด',
 'watchlistcontains' => 'รายการเฝ้าดูของคุณมี $1 หน้า',
@@ -2976,7 +2989,7 @@ $1',
 'pageinfo-length' => 'ความยาวหน้า (ไบต์)',
 'pageinfo-article-id' => 'หมายเลขประจำหน้า',
 'pageinfo-language' => 'ภาษาเนื้อหาของหน้า',
-'pageinfo-robot-policy' => 'สà¸\96าà¸\99ะà¹\80สิรà¹\8cà¸\8aà¹\80อà¸\99à¸\88ิà¸\99',
+'pageinfo-robot-policy' => 'à¸\81ารà¸\97ำà¸\94ัà¸\8aà¸\99ีà¹\82à¸\94ยà¸\9aอà¸\95',
 'pageinfo-robot-index' => 'อนุญาต',
 'pageinfo-robot-noindex' => 'ไม่อนุญาต',
 'pageinfo-views' => 'จำนวนการเข้าดู',
@@ -2999,7 +3012,9 @@ $1',
 'pageinfo-redirectsto' => 'เปลี่ยนทางไปยัง',
 'pageinfo-contentpage' => 'นับเป็นหน้าเนื้อหา',
 'pageinfo-contentpage-yes' => 'ใช่',
+'pageinfo-protect-cascading' => 'การล็อกที่สืบทอดจากหน้านี้',
 'pageinfo-protect-cascading-yes' => 'ใช่',
+'pageinfo-protect-cascading-from' => 'การล็อกที่สืบทอดมายังหน้านี้',
 'pageinfo-category-info' => 'ข้อมูลหมวดหมู่',
 'pageinfo-category-pages' => 'จำนวนหน้า',
 'pageinfo-category-subcats' => 'จำนวนหมวดหมู่ย่อย',
@@ -3637,6 +3652,18 @@ $5
 'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath เส้นทางบทความ]',
 'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath เส้นทางสคริปต์]',
 
+# Special:Redirect
+'redirect' => 'การเปลี่ยนทางตามชื่อไฟล์ รหัสประจำผู้ใช้หรือรุ่น',
+'redirect-legend' => 'การเปลี่ยนทางไปยังไฟล์หรือหน้า',
+'redirect-summary' => 'หน้าพิเศษนี้เปลี่ยนทางไปยังไฟล์ (ระบุเป็นชื่อไฟล์) หน้า (ระบุเป็นรหัสรุ่น) หรือหน้าผู้ใช้ (ระบุเป็นรหัสผู้ใช้)',
+'redirect-submit' => 'ไป',
+'redirect-lookup' => 'ค้นดู:',
+'redirect-value' => 'ค่า:',
+'redirect-user' => 'รหัสผู้ใช้',
+'redirect-revision' => 'รุ่นหน้า',
+'redirect-file' => 'ชื่อไฟล์',
+'redirect-not-exists' => 'ไม่พบค่า',
+
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'ค้นหาไฟล์ที่ซ้ำซ้อน',
 'fileduplicatesearch-summary' => 'ค้นหาไฟล์ที่ซ้ำกันตามค่าแฮช',
@@ -3764,6 +3791,9 @@ $5
 'logentry-newusers-create2' => 'บัญชีผู้ใช้ $3 ถูกสร้างขึ้นโดย $1',
 'logentry-newusers-byemail' => 'บัญชีผู้ใช้ $3 ถูกสร้างขึ้นโดย $1 และส่งรหัสผ่านไปทางอีเมลแล้ว',
 'logentry-newusers-autocreate' => 'บัญชีผู้ใช้ $1 ถูกสร้างขึ้นอัตโนมัติ',
+'logentry-rights-rights' => '$1 {{GENDER:$2|เปลี่ยน}}กลุ่มสมาชิกของ $3 จาก $4 เป็น $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|เปลี่ยน}}กลุ่มสมาชิกของ $3',
+'logentry-rights-autopromote' => '$1 ได้รับการ{{GENDER:$2|เลื่อนกลุ่ม}}จาก $4 เป็น $5 อัตโนมัติ',
 'rightsnone' => '(ไม่มี)',
 
 # Feedback
index 682119e..8a0f804 100644 (file)
@@ -2550,7 +2550,7 @@ Tingnan ang [[Special:BlockList|talaan ng mga hinadlangan]] upang suriin ang mga
 'anononlyblock' => 'di kilala lamang',
 'noautoblockblock' => 'hindi gumagana ang awtomatikong pagharang',
 'createaccountblock' => 'isinalanta ang paglikha ng kuwenta',
-'emailblock' => 'Hinarang/hinadlangan ang e-liham',
+'emailblock' => 'Hinarang ang e-liham',
 'blocklist-nousertalk' => 'hindi mo mababago ang iyong pansariling pahina ng usapan',
 'ipblocklist-empty' => 'Walang laman ang talaan ng pagharang/paghadlang.',
 'ipblocklist-no-results' => 'Nakaharang ang hiniling na IP address o bansag.',
@@ -2575,7 +2575,7 @@ Tingnan ang [[Special:BlockList|talaan ng pagharang]] para sa lista ng kasalukuy
 'block-log-flags-anononly' => 'mga di-kilalang tagagamit lamang',
 'block-log-flags-nocreate' => 'isinalanta ang paglikha ng kuwenta',
 'block-log-flags-noautoblock' => 'Nakapatay ang awtomatikong pagharang',
-'block-log-flags-noemail' => 'hinadlangan/hinarang ang e-liham',
+'block-log-flags-noemail' => 'hinarang ang e-liham',
 'block-log-flags-nousertalk' => 'hindi mo mababago ang iyong pansariling pahina ng usapan',
 'block-log-flags-angry-autoblock' => 'pinaandar ang pinainam/pinagibayong kusang paghadlang o awtomatikong pagharang',
 'block-log-flags-hiddenname' => 'nakatago ang pangalan ng tagagamit',
@@ -2584,7 +2584,7 @@ Tingnan ang [[Special:BlockList|talaan ng pagharang]] para sa lista ng kasalukuy
 'ipb_expiry_temp' => 'Kinakailangang pamalagian ang mga nakatagong paghadlang ng pangalan ng tagagamit.',
 'ipb_hide_invalid' => 'Hindi maisupil ang kuwentang ito; maaaring may napakaraming pagbabago ito.',
 'ipb_already_blocked' => 'Nakaharang na ang "$1"',
-'ipb-needreblock' => 'Hinarang/hinadlangan na si $1.  Ibig mo bang baguhin ang mga pagtatakda?',
+'ipb-needreblock' => 'Hinarang na si $1.  Nais mo bang baguhin ang mga pagtatakda?',
 'ipb-otherblocks-header' => 'Ibang {{PLURAL:$1|harang|mga harang}}',
 'unblock-hideuser' => 'Hindi mo matatanggal ang paghadlang sa tagagamit na ito, dahil naitago ang kanilang pangalan ng tagagamit.',
 'ipb_cant_unblock' => 'Kamalian: Hindi natagpuan ang ID ng pagharang/paghadlang na $1.  Maaaring natanggal na ang pagkakaharang nito/paghahadlang dito.',
@@ -2677,7 +2677,7 @@ Sa mga kasong ganoon, kailangan mong ilipat o pagsamahin/pagsanibin ang pahina s
 pangalang pinili mo ay hindi tanggap.
 Pumili muli ng ibang pangalan.',
 'cantmove-titleprotected' => 'Hindi mo malilipatan ang isang pahina sa lokasyong ito, dahil nakasanggalang sa paglikha ang baong pamagat',
-'talkexists' => "'''Tagumpay na nailipat ang pahina mismo, ngunit hindi mailipat ang pahina ng usapan dahil mayroon ng ganito sa bagong pamagat. Ipagsama ito sa manwal na paraan.'''",
+'talkexists' => "'''Matagumpay na nailipat ang pahina mismo, ngunit hindi mailipat ang pahinang usapan dahil may ganito na sa bagong pamagat.  Mangyaring isanib ito nang manwal.'''",
 'movedto' => 'inilipat sa',
 'movetalk' => 'Ilipat ang kaugnay na pahinang usapan',
 'move-subpages' => 'Ilipat ang kabahaging mga pahina (hanggang sa $1)',
@@ -3605,7 +3605,7 @@ $8',
 'confirmemail_text' => "Pinagagawa ng {{SITENAME}} na patotohanan mo ang iyong adres ng e-liham bago gamitin ang mga kasangkapang-katangian ng e-liham.  Pindutin at buhayin ang pindutan sa ibaba para makapagpadala ng isang makapagpapatotoong e-liham (kompirmasyon) patungo sa iyong adres.
 Makakasama sa liham ang isang kawing na naglalaman ng kodigo;
 Ikarga ang kawing sa iyong pantingin-tingin (''browser'') para mapatotohanang katanggap-tanggap ang iyong adres ng e-liham.",
-'confirmemail_pending' => 'Naipadala na sa iyong e-liham ang kodigo ng pagpapatotoo (kumpirmasyon); kung kamakailan mo lamang nilikha ang iyong kuwenta/akawnt, maaaring ibigin mong maghintay ng ilang minuto para makarating muna ito bago subuking humiling ng isang bagong kodigo.',
+'confirmemail_pending' => 'Naipadala na sa iyong e-liham ang kodigo ng pagpapatotoo (kumpirmasyon); kung kamakailan mo lamang nilikha ang iyong kuwenta, maaaring ibigin mong maghintay ng ilang minuto para makarating muna ito bago subuking humiling ng isang bagong kodigo.',
 'confirmemail_send' => 'Magpadala ng isang kodigo ng pagpapatotoo (kumpirmasyon)',
 'confirmemail_sent' => 'Naipadala na ang magpapatotoong e-liham (kumpirmasyon).',
 'confirmemail_oncreate' => 'Nagpadala na ng isang kodigo ng pagpapatotoo (kumpirmasyon) patungo sa iyong adres ng e-liham.  Hindi kailangan ang kodigong ito para makalagda, ngunit kailangan mong ibigay muna ito bago paganahin/paandarin ang anumang pang e-liham na kasangkapang-katangiang nasa loob ng wiki.',
@@ -3619,19 +3619,19 @@ Ibinalik ng tagapagpadala ang: $1',
 'confirmemail_loggedin' => 'Natiyak na ngayon ang tirahan ng e-liham mo.',
 'confirmemail_error' => 'May nangyaring kamalian sa pagsasagip ng iyong kumpirmasyon.',
 'confirmemail_subject' => 'Kumpirmasyon/pagpapatotoong pang-adres ng e-liham ng {{SITENAME}}',
-'confirmemail_body' => 'May isa, maaaring ikaw, na mula sa adres ng IP na $1,
-ang nagtala ng isang akawnt/kuwentang "$2" na mayroong ganitong adres ng e-liham sa {{SITENAME}}.
+'confirmemail_body' => 'May isa, maaaring ikaw, na mula sa direksiyong IP na $1,
+ang nagtala ng isang kuwentang "$2" na mayroong ganitong direksiyong e-liham sa {{SITENAME}}.
 
-Para patotohanang ikaw nga ang may-ari ng kuwentang ito at para buhayin ang mga kasangkapang-katanginan ng e-liham sa {{SITENAME}}, buksan ang kawing na ito sa iyong pantingin-tingin (\'\'browser\'\'):
+Para patotohanang ikaw nga ang may-ari ng kuwentang ito at para buhayin ang mga kasangkapang-katanginan ng e-liham sa {{SITENAME}}, buksan ang kawing na ito sa iyong pambasa-basa (\'\'browser\'\'):
 
 $3
 
-Kung *hindi* mo itinala/inirehistro ang kuwenta, sundan mo ang kawing na ito
-para kanselahin o huwag nang ituloy ang pagpapatotoo (kumpirmasyon) ng adres ng e-liham:
+Kung *hindi* mo itinala ang kuwenta, sundan mo ang kawing na ito
+para kanselahin o huwag nang ituloy ang pagpapatotoo (kumpirmasyon) ng direksiyong e-liham:
 
 $5
 
-Magwawakas ang pagiging mabisa ng kodigo ng pagpapatotoong ito sa $4.',
+Magwawalang-saysay ang kodigo ng pagpapatotoong ito sa $4.',
 'confirmemail_body_changed' => 'May isa, maaaring ikaw, na mula sa adres ng IP na $1,
 ang nagbago ng adres ng e-liham ng akawnt na "$2" sa ganitong adres sa {{SITENAME}}.
 
@@ -3749,7 +3749,8 @@ Pakitiyak kung ibig mo talagang likhain muli ang pahinang ito.",
 'livepreview-loading' => 'Ikinakarga...',
 'livepreview-ready' => 'Ikinakarga… Handa na!',
 'livepreview-failed' => 'Nabigo ang umiiral na paunang tingin!  Subukan ang normal/pangkaraniwang paunang tingin.',
-'livepreview-error' => 'Hindi tagumpay ang pagkabit (connect): $1 "$2". Subukan ang karaniwang paunang tingin.',
+'livepreview-error' => 'Hindi matagumpay ang pagkonekta: $1 "$2".
+Subukan ang karaniwang paunang tingin.',
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => 'Maaaring hindi naipapakita sa talaang ito ang mga pagbabagong mas bago pa kaysa $1 {{PLURAL:$1|segundo|mga segundo}}.',
@@ -4007,12 +4008,12 @@ Dapat na nakatanggap ka ng [{{SERVER}}{{SCRIPTPATH}}/COPYING isang sipi ng Pangk
 'rightsnone' => '(wala)',
 
 # Feedback
-'feedback-bugornote' => 'Kung handa ka nang detalyadong maglarawan ng isang suliraning teknikal mangyaring [$1 iulat ang sira].
-O kaya, maaari mong gamitin ang maginhawang pormularyo sa ibaba. Ang iyong pagpuna ay idaragdag sa pahinang "[$3 $2]", kasama ang iyong pangalan na pangtagagamit at kung anong pantingin-tingin ang ginagamit mo.',
+'feedback-bugornote' => 'Kung handa ka nang detalyadong maglarawan ng isang suliraning teknikal mangyaring [$1 iulat ang kamalian].
+O kaya, maaari mo ring gamitin ang pinadaling pormularyo sa ibaba.  Madadagdagan ang komento mo sa pahinang "[$3 $2]", kasama ang iyong pangalan ng tagagamit.',
 'feedback-subject' => 'Paksa:',
 'feedback-message' => 'Mensahe:',
 'feedback-cancel' => 'Huwag ituloy',
-'feedback-submit' => 'Ipasa ang Pakaing-tugon',
+'feedback-submit' => 'Magbigay ng komento',
 'feedback-adding' => 'Idinaragdag ang pakaing-tugon sa pahina...',
 'feedback-error1' => 'Kamalian: Hindi nakikilalang kinalabasan mula sa API',
 'feedback-error2' => 'Kamalian: Nabigo ang pagpatnugot',
index ddf05f2..b0ae349 100644 (file)
@@ -359,12 +359,12 @@ $messages = array(
 'tog-hidepatrolled' => 'Son değişikliklerde gözden geçirilen düzenlemeleri gizle',
 'tog-newpageshidepatrolled' => 'Kontrol edilmiş sayfaları yeni sayfalar listesinde gizle',
 'tog-extendwatchlist' => 'İzleme listesini sadece en son değil, tüm değişiklikleri göstermek için genişlet',
-'tog-usenewrc' => 'Son değişiklikler sayfasındaki ve izleme listesindeki değişiklikleri gruplandırma (JavaScript gerektirir)',
+'tog-usenewrc' => 'Son değişiklikler sayfasındaki ve izleme listesindeki değişiklikleri gruplandırma',
 'tog-numberheadings' => 'Başlıkları otomatik numaralandır',
-'tog-showtoolbar' => 'Düzenleme yaparken araç çubuğunu göster (JavaScript gerektirir)',
-'tog-editondblclick' => 'Çift tıklayarak sayfaları düzenle (JavaScript gerektirir)',
+'tog-showtoolbar' => 'Düzenleme yaparken araç çubuğunu göster',
+'tog-editondblclick' => 'Çift tıklayarak sayfaları düzenle',
 'tog-editsection' => 'Bölümleri [{{int:Editsection}}] bağlantıları ile düzenlemeyi etkinleştir',
-'tog-editsectiononrightclick' => 'Bölüm başlığına sağ tıklayarak bölümleri düzenleyebilme olanağı ver (JavaScript gerektirir)',
+'tog-editsectiononrightclick' => 'Bölüm başlığına sağ tıklayarak bölümleri düzenleyebilme olanağı ver',
 'tog-showtoc' => 'İçindekiler tablosunu göster (3 taneden fazla başlığı olan sayfalar için)',
 'tog-rememberpassword' => 'Girişimi bu tarayıcıda hatırla (en fazla $1 {{PLURAL:$1|gün|gün}} için)',
 'tog-watchcreations' => 'Açtığım sayfaları ve yüklediğim dosyaları izleme listeme ekle',
@@ -382,7 +382,7 @@ $messages = array(
 'tog-shownumberswatching' => 'İzleyen kullanıcı sayısını göster',
 'tog-oldsig' => 'Mevcut imza:',
 'tog-fancysig' => 'İmzaya vikimetin muamelesi yap (otomatik bir bağlantı olmadan)',
-'tog-uselivepreview' => 'Canlı ön izlemeyi kullan (JavaScript gerektirir ve özellik deneme aşamasındadır)',
+'tog-uselivepreview' => 'Canlı önizlemeyi kullan (deneysel)',
 'tog-forceeditsummary' => 'Özeti boş bıraktığımda beni uyar',
 'tog-watchlisthideown' => 'İzleme listemden düzenlemelerimi gizle',
 'tog-watchlisthidebots' => 'İzleme listemden bot değişikliklerini gizle',
@@ -497,7 +497,7 @@ $messages = array(
 'newwindow' => '(yeni bir pencerede açılır)',
 'cancel' => 'İptal',
 'moredotdotdot' => 'Daha...',
-'morenotlisted' => 'Listede daha fazlası yok...',
+'morenotlisted' => 'Bu liste tam değildir.',
 'mypage' => 'Sayfa',
 'mytalk' => 'Mesaj',
 'anontalk' => "Bu IP'nin iletileri",
@@ -684,6 +684,12 @@ Bu, {{SITENAME}} sitesindeki bir hatayı da belirtebilir.",
 # General errors
 'error' => 'Hata',
 'databaseerror' => 'Veritabanı hatası',
+'databaseerror-text' => 'Bir veritabanı sorgu hatası oluştu.
+Bu yazılım bir hata gösteriyor olabilir.',
+'databaseerror-textcl' => 'Bir veritabanı sorgu hatası oluştu.',
+'databaseerror-query' => 'Sorgu: $1',
+'databaseerror-function' => 'Fonksiyon: $1',
+'databaseerror-error' => 'Hata: $1',
 'laggedslavemode' => 'Uyarı: Sayfa son güncellemeleri içermeyebilir.',
 'readonly' => 'Veritabanı kilitlendi',
 'enterlockreason' => 'Koruma için bir neden belirtin. Korumanın ne zaman kaldırılacağına dair tahmini bir tarih eklemeyi unutmayın.',
@@ -698,7 +704,7 @@ Eğer neden bu değilse yazılımda bir hata ile karşılaşmış olabilirsiniz.
 Lütfen URL\'yi not ederek bunu bir [[Special:ListUsers/sysop|hizmetliye]] iletin.',
 'missingarticle-rev' => '(revizyon#: $1)',
 'missingarticle-diff' => '(Fark: $1, $2)',
-'readonly_lag' => 'Yedek sunucular ana sunucu ile güncellemeye çalışırken veritabanı otomatik olarak kilitlendi.',
+'readonly_lag' => 'Yedek sunucular ana sunucu ile güncellenmeye çalışılırken veritabanı otomatik olarak kilitlendi.',
 'internalerror' => 'Yazılım hatası',
 'internalerror_info' => 'İç hata: $1',
 'fileappenderrorread' => 'Ekleme yapılırken "$1" okunamadı.',
@@ -711,7 +717,7 @@ Lütfen URL\'yi not ederek bunu bir [[Special:ListUsers/sysop|hizmetliye]] ileti
 'fileexistserror' => '"$1" dosyasına yazılamadı: dosya zaten mevcut',
 'unexpected' => 'beklenmeyen değer: "$1"="$2".',
 'formerror' => 'Hata: Form gönderilemiyor',
-'badarticleerror' => 'Yapmak istediğiniz işlem geçersizdir.',
+'badarticleerror' => 'Bu işlem, bu sayfada yapılamaz.',
 'cannotdelete' => '"$1" sayfa ya da dosyası silinemedi.
 Başka bir kullanıcı tarafından silinmiş olabilir.',
 'cannotdelete-title' => '"$1" sayfasını silemezsiniz',
@@ -961,18 +967,18 @@ Geçici şifre: $2',
 'changeemail-cancel' => 'İptal',
 
 # Special:ResetTokens
-'resettokens' => 'Belirteçleri sıfırla',
-'resettokens-text' => 'Burada hesabınızla ilişkili bazı özel verilere erişim izin belirteçleri sıfırlayabilirsiniz.
+'resettokens' => 'Anahtarları sıfırla',
+'resettokens-text' => 'Burada hesabınızla ilişkili bazı özel verilere erişim izin anahtarları sıfırlayabilirsiniz.
 
 
 Siz yanlışlıkla bunları paylaştıysanız veya hesabınızda bir bozulma varsa bunu yapmalısınız.',
 'resettokens-no-tokens' => 'Sıfırlamak için hiç bir belirteç bulunmuyor.',
-'resettokens-legend' => 'Belirteçleri sıfırla',
+'resettokens-legend' => 'Anahtarları sıfırla',
 'resettokens-tokens' => 'Belirteçler:',
 'resettokens-token-label' => '$1 (geçerli değer: $2)',
-'resettokens-watchlist-token' => 'İzleme listesi web beslemesi belirteci',
+'resettokens-watchlist-token' => '[[Special:Watchlist|İzleme listenizdeki sayfa değişiklikleri]] için web beslemeleri (Atom/RSS) anahtarı',
 'resettokens-done' => 'Belirteçler sıfırlandı.',
-'resettokens-resetbutton' => 'Seçili belirteçleri sıfırla',
+'resettokens-resetbutton' => 'Seçili anahtarları sıfırla',
 
 # Edit page toolbar
 'bold_sample' => 'Kalın yazı',
@@ -1468,7 +1474,7 @@ Aramanızın başına '''all:''' önekini ekleyerek tüm içeriği aramayı (tar
 'datedefault' => 'Tercih yok',
 'prefs-beta' => 'Beta özellikleri',
 'prefs-datetime' => 'Tarih ve saat',
-'prefs-labs' => 'Lab özellikleri',
+'prefs-labs' => 'Deneysel özellikler',
 'prefs-user-pages' => 'Kullanıcı sayfaları',
 'prefs-personal' => 'Kullanıcı bilgileri',
 'prefs-rc' => 'Son değişiklikler',
@@ -1477,7 +1483,7 @@ Aramanızın başına '''all:''' önekini ekleyerek tüm içeriği aramayı (tar
 'prefs-watchlist-days-max' => 'en fazla $1 {{PLURAL:$1|gün|gün}}',
 'prefs-watchlist-edits' => 'Genişletilmiş izleme listesinde gösterilecek değişiklik sayısı:',
 'prefs-watchlist-edits-max' => 'En fazla sayı: 1000',
-'prefs-watchlist-token' => 'İzleme listesi nişanı:',
+'prefs-watchlist-token' => 'İzleme listesi anahtarı:',
 'prefs-misc' => 'Diğer ayarlar',
 'prefs-resetpass' => 'Parolayı değiştir',
 'prefs-changeemail' => "E-posta'yı değiştir",
@@ -1498,6 +1504,7 @@ Aramanızın başına '''all:''' önekini ekleyerek tüm içeriği aramayı (tar
 'recentchangesdays-max' => '(en fazla $1 {{PLURAL:$1|gün|gün}})',
 'recentchangescount' => 'Varsayılan olarak gösterilecek değişiklik sayısı:',
 'prefs-help-recentchangescount' => 'Bu, son değişiklikleri, sayfa geçmişlerini ve günlükleri içerir.',
+'prefs-help-watchlist-token2' => 'Bu izleme listenizin gizli anahtarıdır. Anahtarı bilen herkes izleme listenizi görebilir. Bu nedenle kimseyle paylaşmayın. [[Special:ResetTokens|Bu anahtarı sıfırlamak isterseniz buraya tıklayın]].',
 'savedprefs' => 'Tercihleriniz kaydedildi.',
 'timezonelegend' => 'Zaman dilimi:',
 'localtime' => 'Yerel saat:',
@@ -1524,7 +1531,7 @@ Aramanızın başına '''all:''' önekini ekleyerek tüm içeriği aramayı (tar
 'prefs-files' => 'Dosyalar',
 'prefs-custom-css' => 'Özel CSS',
 'prefs-custom-js' => 'Özel JS',
-'prefs-common-css-js' => 'Tüm kaplamalar için paylaşılan CSS/JS:',
+'prefs-common-css-js' => 'Tüm temalar için paylaşılan CSS/JS:',
 'prefs-reset-intro' => 'Bu sayfayı tercihlerinizi site varsayılanına döndürmek için kullanabilirsiniz. Bu geri alınamaz.',
 'prefs-emailconfirm-label' => 'E-posta doğrulaması:',
 'youremail' => 'E-posta:',
@@ -1541,11 +1548,13 @@ Aramanızın başına '''all:''' önekini ekleyerek tüm içeriği aramayı (tar
 'badsig' => 'Geçersiz ham imza; HTML etiketlerini kontrol edin.',
 'badsiglength' => 'İmzanız çok uzun.
 $1 {{PLURAL:$1|karakterin|karakterin}} altında olmalı.',
-'yourgender' => 'Cinsiyet:',
-'gender-unknown' => 'Belirtilmemiş',
-'gender-male' => 'Erkek',
+'yourgender' => 'Nasıl açıklamayı tercih edersiniz?',
+'gender-unknown' => 'Söylemek istemiyorsanız',
+'gender-male' => 'Wiki düzenlemelerinde kadın olarak',
 'gender-female' => 'Bayan',
-'prefs-help-gender' => 'İsteğe bağlı: Yazılım tarafından doğru cinsiyet adreslemesi için kullanılır. Bu bilgi umumi olacaktır.',
+'prefs-help-gender' => 'Bu tercih ayarı isteğe bağlıdır.
+Yazılımda söz değerlerinin başlarında bulunan cinsiyete uygun gramerler için kullanılır.
+Bu bilgiler herkes tarafından görülebilir.',
 'email' => 'E-posta',
 'prefs-help-realname' => '* Gerçek isim (isteğe bağlı): eğer gerçek isminizi vermeyi seçerseniz, çalışmanızı size atfederken kullanılacaktır.',
 'prefs-help-email' => 'E-posta adresi isteğe bağlıdır; ancak parolanızı unutmanız durumunda parola sıfırlamak için gerekecektir.',
@@ -1556,8 +1565,10 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'prefs-i18n' => 'Uluslararasılaştırma',
 'prefs-signature' => 'İmza',
 'prefs-dateformat' => 'Tarih biçemi',
-'prefs-timeoffset' => 'Zaman ofseti',
+'prefs-timeoffset' => 'Saat farkı',
 'prefs-advancedediting' => 'Genel seçenekler',
+'prefs-editor' => 'Editör',
+'prefs-preview' => 'Önizleme',
 'prefs-advancedrc' => 'Gelişmiş seçenekler',
 'prefs-advancedrendering' => 'Gelişmiş seçenekler',
 'prefs-advancedsearchoptions' => 'Gelişmiş seçenekler',
@@ -1565,6 +1576,7 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'prefs-displayrc' => 'Görüntü seçenekleri',
 'prefs-displaysearchoptions' => 'Görüntüleme seçenekleri',
 'prefs-displaywatchlist' => 'Görüntüleme seçenekleri',
+'prefs-tokenwatchlist' => 'Anahtar',
 'prefs-diffs' => 'Farklar',
 
 # User preference: email validation using jQuery
@@ -2095,6 +2107,10 @@ Dosya açıklamasını düzenlemek isterseniz, [$2 dosya açıklama sayfası] bu
 'randompage' => 'Rastgele sayfa',
 'randompage-nopages' => 'Şu {{PLURAL:$2|ad alanında|ad alanlarında}} hiç bir sayfa yok: $1.',
 
+# Random page in category
+'randomincategory' => 'Kategoriye göre rastgele sayfa',
+'randomincategory-selectcategory' => 'Rastgele sayfa alınacak kategori: $1 $2.',
+
 # Random redirect
 'randomredirect' => 'Rastgele yönlendirme',
 'randomredirect-nopages' => '"$1" ad alanında hiç bir yönlendirme yok.',
@@ -2120,6 +2136,8 @@ Dosya açıklamasını düzenlemek isterseniz, [$2 dosya açıklama sayfası] bu
 'statistics-users-active-desc' => 'Son {{PLURAL:$1|gün|$1 günde}} çalışma yapan kullanıcılar',
 'statistics-mostpopular' => 'En çok ziyaret edilen sayfalar',
 
+'pageswithprop' => 'Bir sayfa özelliğine sahip sayfalar',
+'pageswithprop-text' => 'Bu sayfa belirli bir sayfa özelliğini kullanan sayfaları listeler.',
 'pageswithprop-submit' => 'Git',
 
 'doubleredirects' => 'Çift yönlendirmeler',
@@ -2220,7 +2238,7 @@ Lütfen unutmayın ki, diğer web siteleri bir dosyaya doğrudan bir URL ile ba
 'specialloguserlabel' => 'Kullanıcı:',
 'speciallogtitlelabel' => 'Hedef (başlık ya da kullanıcı):',
 'log' => 'Kayıtlar',
-'all-logs-page' => 'Tüm umumi kayıtlar',
+'all-logs-page' => 'Tüm ortak günlükler',
 'alllogstext' => '{{SITENAME}} için mevcut tüm günlüklerin birleşik gösterimi.
 Günlük tipini, kullanıcı adını (büyük-küçük harf duyarlı), ya da etkilenen sayfayı (yine büyük-küçük harf duyarlı) seçerek görünümü daraltabilirsiniz.',
 'logempty' => 'Kayıtlarda eşleşen bilgi yok.',
@@ -3391,6 +3409,7 @@ Diğerleri varsayılan olarak gizlenecektir.
 'exif-headline' => 'Başlık',
 'exif-credit' => 'Sağlayıcı',
 'exif-source' => 'Kaynak',
+'exif-editstatus' => 'Görüntünün yayın durumu',
 'exif-urgency' => 'Aciliyet',
 'exif-fixtureidentifier' => 'Fikstür adı',
 'exif-locationdest' => 'Yerin konumu',
@@ -3861,10 +3880,14 @@ Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansın
 'version-entrypoints-header-url' => 'URL',
 
 # Special:Redirect
+'redirect' => 'Dosya, kullanıcı veya sayfa ID yönlendirme',
+'redirect-legend' => 'Bir dosya veya sayfaya yönlendirme',
+'redirect-summary' => "Bu özel sayfa sizi bir dosya (dosya adı verilen), bir sayfa (bir revizyon ID'si verilen) veya bir kullanıcı sayfasının (sayısal kullanıcı kimliği verilen) adresine yönlendirir.",
 'redirect-submit' => 'Git',
 'redirect-value' => 'Değer:',
 'redirect-user' => 'Kullanıcı kimliği',
 'redirect-file' => 'Dosya adı',
+'redirect-not-exists' => 'Değer bulunamadı',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'Benzer dosyaları ara',
@@ -4007,7 +4030,7 @@ Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansın
 
 # API errors
 'api-error-badaccess-groups' => 'Bu wiki için dosya yüklemenize izin verilmiyor.',
-'api-error-badtoken' => 'İç hata: Bozuk simge.',
+'api-error-badtoken' => 'İç hata: Bozuk anahtar.',
 'api-error-duplicate-popup-title' => 'Çift {{PLURAL:$1|dosya|dosya}}',
 'api-error-empty-file' => 'Gönderdiğiniz dosya boş.',
 'api-error-emptypage' => 'Yeni, boş bir sayfa oluşturmaya izin verilmez.',
index 0962373..5dd3011 100644 (file)
@@ -846,8 +846,7 @@ Others will be hidden by default.
 'compare-page2' => 'Faṭo 2',
 
 # Database error messages
-'dberr-problems' => 'Şubqono!
-iFaṭaṭe u3do kitla Qaṫre.',
+'dberr-problems' => 'Şubqono! iFaṭaṭe u3do kitla Qaṫre.',
 
 # HTML forms
 'htmlform-submit' => 'Mqayad',
index 7925185..8a1d47e 100644 (file)
@@ -233,7 +233,7 @@ $messages = array(
 'vector-action-undelete' => 'Эгидер',
 'vector-action-unprotect' => 'Камгалалды өскертири',
 'vector-view-create' => 'Чаяары',
-'vector-view-edit' => 'Эдери',
+'vector-view-edit' => 'Эдер',
 'vector-view-history' => 'Төөгүнү көөрү',
 'vector-view-view' => 'Номчуур',
 'vector-view-viewsource' => 'Дөзү бижиин көөрү',
@@ -255,7 +255,7 @@ $messages = array(
 'permalink' => 'Турум холбаа',
 'print' => 'Саазынга үндүрер',
 'view' => 'Көөрү',
-'edit' => 'Эдери',
+'edit' => 'Эдер',
 'create' => 'Чогаадыры',
 'editthispage' => 'Бо арынны өскертири',
 'create-this-page' => 'Бо арынны чогаадыры',
@@ -510,11 +510,11 @@ Please check if you want to create/edit this page.',
 'previewnote' => "'''Бо чүгле шенеп көөрү-дүр.'''
 Бижик ам-даа шыгжатынмаан!",
 'editing' => '«$1» деп арынны эдери',
-'editingsection' => '«$1» деп арынның салбырын эдери',
+'editingsection' => 'Эдилге: «$1» (үлеш)',
 'editingcomment' => '«$1» деп арынны өскертип турар (чаа салбыр)',
 'yourtext' => 'Силерниң сөзүглелиңер',
 'yourdiff' => 'Ылгалдар',
-'templatesused' => 'Бо арында {{PLURAL:$1|Майык|Майыктар}} ажыглаттырган:',
+'templatesused' => 'Бо арында ажыглаан {{PLURAL:$1|Майык|Майыктар}}:',
 'template-protected' => '(камгалаан)',
 'template-semiprotected' => '(четпес камгалаан)',
 'hiddencategories' => 'Бо арын {{PLURAL:$1|$1 чажыт бөлүкке}} хамааржыр:',
@@ -733,7 +733,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'бо арынны номчууру',
-'action-edit' => 'бо арынны эдери',
+'action-edit' => 'бо арынның эдилгези',
 'action-createpage' => 'арыннарны чогаадыры',
 'action-createtalk' => 'чугаалажырга арыннарны чогаадыры',
 'action-createaccount' => 'бо бүрүткел бижиктерин бүдүрери',
@@ -1319,7 +1319,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'table_pager_empty' => 'Түңнеллер чок',
 
 # Auto-summaries
-'autosumm-new' => 'Чаа арынны чогаадаан: «$1»',
+'autosumm-new' => 'Чаа арын чаяатынган: «$1»',
 
 # Watchlist editor
 'watchlistedit-normal-title' => 'Хайгаарал даңзыны өскертири',
index 68f9fb9..f30bce4 100644 (file)
@@ -3757,8 +3757,7 @@ MediaWiki ئىشلىتىش مەقسىتىنى ئاساس قىلىپ ئېلان 
 
 # Database error messages
 'dberr-header' => 'بۇ wiki مەسىلىگە يولۇقتى',
-'dberr-problems' => 'كەچۈرۈڭ!
-بۇ بېكەتتە تېخنىكىلىق قىيىنچىلىق كۆرۈلدى.',
+'dberr-problems' => 'كەچۈرۈڭ! بۇ بېكەتتە تېخنىكىلىق قىيىنچىلىق كۆرۈلدى.',
 'dberr-again' => 'بىر قانچە مىنۇت كۈتۈپ ئاندىن قايتا يۈكلەڭ.',
 'dberr-info' => '(ساندان مۇلازىمىتىرىغا ئۇلىنالمىدى:  $1)',
 'dberr-usegoogle' => 'بۇ ۋاقىتتا Google ئىزدىگۈچتىن ئىزدەشنى سىناپ بېقىڭ.',
index cac41e5..892124b 100644 (file)
@@ -22,6 +22,7 @@
  * @author Base
  * @author Dim Grits
  * @author DixonD
+ * @author DonDrakon
  * @author Dubyk
  * @author EugeneZelenko
  * @author Geitost
@@ -385,7 +386,7 @@ $messages = array(
 'tog-previewontop' => 'Показувати попередній перегляд перед вікном редагування, а не після',
 'tog-previewonfirst' => 'Показувати попередній перегляд під час першого редагування',
 'tog-nocache' => 'Відключити кешування сторінок браузером',
-'tog-enotifwatchlistpages' => 'Ð\9fовÑ\96домлÑ\8fÑ\82и ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\8e Ð¿Ð¾Ñ\88Ñ\82оÑ\8e Ð¿Ñ\80и Ð·Ð¼Ñ\96нÑ\96 сторінки або файлу з мого списку спостереження',
+'tog-enotifwatchlistpages' => 'Ð\9fовÑ\96домлÑ\8fÑ\82и ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\8e Ð¿Ð¾Ñ\88Ñ\82оÑ\8e Ð¿Ñ\80о Ð·Ð¼Ñ\96нÑ\83 сторінки або файлу з мого списку спостереження',
 'tog-enotifusertalkpages' => 'Повідомляти електронною поштою про зміну моєї сторінки обговорення',
 'tog-enotifminoredits' => 'Надсилати мені електронного листа навіть при незначних редагуваннях сторінок та файлів',
 'tog-enotifrevealaddr' => 'Показувати мою поштову адресу в повідомленнях',
@@ -398,7 +399,7 @@ $messages = array(
 'tog-watchlisthidebots' => 'Приховати редагування ботів у списку спостереження',
 'tog-watchlisthideminor' => 'Приховати незначні редагування у списку спостереження',
 'tog-watchlisthideliu' => 'Приховати редагування зареєстрованих дописувачів у списку спостереження',
-'tog-watchlisthideanons' => 'Приховати редагування анонімів у списку спостереження',
+'tog-watchlisthideanons' => 'Приховати редагування анонімних користувачів у списку спостереження',
 'tog-watchlisthidepatrolled' => 'Приховувати патрульовані редагування у списку спостереження',
 'tog-ccmeonemails' => 'Надсилати мені копії листів, які я надсилаю іншим користувачам',
 'tog-diffonly' => 'Не показувати вміст сторінки під різницею версій',
@@ -613,7 +614,7 @@ $1',
 # 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).
 'aboutsite' => 'Про {{grammar:accusative|{{SITENAME}}}}',
 'aboutpage' => 'Project:Про',
-'copyright' => 'Ð\92мÑ\96Ñ\81Ñ\82 Ð´Ð¾Ñ\81Ñ\82Ñ\83пний Ð·Ð³Ñ\96дно Ð· $1.',
+'copyright' => 'Ð\92мÑ\96Ñ\81Ñ\82 Ð´Ð¾Ñ\81Ñ\82Ñ\83пний Ð½Ð° Ñ\83моваÑ\85 $1, Ñ\8fкÑ\89о Ð½Ðµ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ Ñ\96нÑ\88е.',
 'copyrightpage' => '{{ns:project}}:Авторське право',
 'currentevents' => 'Поточні події',
 'currentevents-url' => 'Project:Поточні події',
@@ -824,6 +825,9 @@ $1',
 'userlogin-resetpassword-link' => 'Скинути пароль',
 'helplogin-url' => 'Help:Вхід до системи',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Допомога в реєстрації]]',
+'userlogin-loggedin' => 'Ви вже увійшли як {{GENDER:$1|$1}}.
+Використайте нижче форму для входу як інший користувач.',
+'userlogin-createanother' => 'Створити інший обліковий запис',
 'createacct-join' => 'Введіть вашу інформацію нижче.',
 'createacct-another-join' => 'Введіть нижче дані нового облікового запису.',
 'createacct-emailrequired' => 'Адреса електронної пошти',
@@ -1778,8 +1782,8 @@ $1",
 'action-block' => 'блокування цього дописувача',
 'action-protect' => 'зміну рівня захисту цієї сторінки',
 'action-rollback' => 'швидко відкотити редагування останнього користувача, що змінював певну сторінку',
-'action-import' => 'Ñ\96мпоÑ\80Ñ\82 Ñ\86Ñ\96Ñ\94Ñ\97 Ñ\81Ñ\82оÑ\80Ñ\96нки з іншої вікі',
-'action-importupload' => 'Ñ\96мпоÑ\80Ñ\82 Ñ\86Ñ\96Ñ\94Ñ\97 Ñ\81Ñ\82оÑ\80Ñ\96нки Ð· файлу',
+'action-import' => 'Ñ\96мпоÑ\80Ñ\82 Ñ\81Ñ\82оÑ\80Ñ\96нок з іншої вікі',
+'action-importupload' => 'Ñ\96мпоÑ\80Ñ\82 Ñ\81Ñ\82оÑ\80Ñ\96нок Ñ\87еÑ\80ез Ð·Ð°Ð²Ð°Ð½Ñ\82аженнÑ\8f файлу',
 'action-patrol' => 'позначення чужих редагувань патрульованими',
 'action-autopatrol' => 'позначення власних редагувань патрульованими',
 'action-unwatchedpages' => 'перегляд списку сторінок, за якими ніхто не спостерігає',
@@ -2325,6 +2329,7 @@ $1',
 'listusers' => 'Список користувачів',
 'listusers-editsonly' => 'Показати лише користувачів, які зробили принаймні одне редагування',
 'listusers-creationsort' => 'Сортувати за датою створення',
+'listusers-desc' => 'Сортувати за спадним порядком',
 'usereditcount' => '$1 {{PLURAL:$1|редагування|редагування|редагувань}}',
 'usercreated' => '{{GENDER:$3|Створено}} $1 о $2',
 'newpages' => 'Нові сторінки',
@@ -2613,7 +2618,7 @@ $UNWATCHURL
 Останні редагування зроблено [[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]]',
+'revertpage-nouser' => 'Відкинуто редагування прихованого користувача до останньої версії, зробленої {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'Відкинуті редагування користувача $1; повернення до версії користувача $2.',
 
 # Edit tokens
@@ -2751,7 +2756,7 @@ $1',
 'contributions' => 'Внесок {{GENDER:$1|користувача|користувачки}}',
 'contributions-title' => 'Внесок користувача $1',
 'mycontris' => 'Внесок',
-'contribsub2' => 'Ð\92неÑ\81ок $1 ($2)',
+'contribsub2' => 'Ð\94лÑ\8f {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Редагувань, що задовольняють заданим умовам не знайдено.',
 'uctop' => '(поточна)',
 'month' => 'До місяця (включно):',
@@ -3223,6 +3228,7 @@ $2',
 'tooltip-undo' => 'Прибрати внесені зміни і показати попередній перегляд. Дозволяє зазначити причину скасування.',
 'tooltip-preferences-save' => 'Зберегти налаштування',
 'tooltip-summary' => 'Введіть короткий опис',
+'tooltip-iwiki' => '$1 — $2',
 
 # Stylesheets
 'common.css' => '/** Розміщений тут CSS буде застосовуватися до всіх тем оформлення */',
@@ -4276,7 +4282,10 @@ MediaWiki поширюється в надії, що вона буде кори
 'tags-tag' => 'Назва мітки',
 'tags-display-header' => 'Показ у списках змін',
 'tags-description-header' => 'Повний опис значення',
+'tags-active-header' => 'Активний?',
 'tags-hitcount-header' => 'Помічені редагування',
+'tags-active-yes' => 'Так',
+'tags-active-no' => 'Ні',
 'tags-edit' => 'редагувати',
 'tags-hitcount' => '$1 {{PLURAL:$1|зміна|зміни|змін}}',
 
@@ -4442,9 +4451,9 @@ MediaWiki поширюється в надії, що вона буде кори
 'limitreport-ppvisitednodes' => 'Число вузлів відвіданих препроцесором',
 'limitreport-ppgeneratednodes' => 'Число вузлів згенерованих препроцесором',
 'limitreport-postexpandincludesize' => 'Включений розмір після розширення',
-'limitreport-postexpandincludesize-value' => '$1/$2 байтів',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|байт|байти|байтів}}',
 'limitreport-templateargumentsize' => 'Розмір аргументів шаблону',
-'limitreport-templateargumentsize-value' => '$1/$2  байтів',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|байт|байти|байтів}}',
 'limitreport-expansiondepth' => 'Найвища глибина розширення',
 'limitreport-expensivefunctioncount' => 'Число дорогої функції аналізатора',
 
index b016193..03321d2 100644 (file)
@@ -783,8 +783,8 @@ Mugomad argumentad čutihe.",
 Znamoičendad: '''({{int:cur}})''' = erod nügüdläižes versijaspäi, '''({{int:last}})''' = erod enččes vepsijaspäi, '''{{int:minoreditletter}}''' = pen' toižetuz.",
 'history-fieldset-title' => 'Lehtelta istorii',
 'history-show-deleted' => 'Vaiše čutud',
-'histfirst' => 'Kaikiš vanhembad',
-'histlast' => 'Tantoižed',
+'histfirst' => 'vanhembad',
+'histlast' => 'udembad',
 'historysize' => '({{PLURAL:$1|1 bait|$1 baitad}})',
 'historyempty' => "(pall'az)",
 
@@ -1251,7 +1251,7 @@ Ku tö kirjutat sen, nece nimi kävutadas, miše ozutada lehtpolen toižetajad.'
 'rc-change-size' => '$1',
 'rc-change-size-new' => "$1 {{PLURAL:$1|bait|baitad}} jäl'ges toižetamišt",
 'newsectionsummary' => "/* $1 */ uz' jaguz",
-'rc-enhanced-expand' => 'Ozutada detalid (JavaScript)',
+'rc-enhanced-expand' => 'Ozutada detalid',
 'rc-enhanced-hide' => 'Peitta detalid',
 'rc-old-title' => 'Om sätud ezmässai kut "$1"',
 
@@ -1937,7 +1937,7 @@ $1',
 'contributions-title' => '$1-kävutajan tond',
 'mycontris' => 'Minun tond',
 'contribsub2' => '$1-kävutajan ($2) tond',
-'uctop' => "(jäl'gmäine)",
+'uctop' => '(nügüdläine)',
 'month' => 'Ku:',
 'year' => 'Voz’:',
 
index 869a959..c4e716c 100644 (file)
@@ -572,7 +572,7 @@ $1',
 # 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).
 'aboutsite' => 'Giới thiệu {{SITENAME}}',
 'aboutpage' => 'Project:Giới thiệu',
-'copyright' => 'Bản quyền $1.',
+'copyright' => 'Nội dung được phát hành theo $1, ngoại trừ khi có ghi chú khác.',
 'copyrightpage' => '{{ns:project}}:Bản quyền',
 'currentevents' => 'Tin tức',
 'currentevents-url' => 'Project:Thời sự',
@@ -780,6 +780,9 @@ Hãy nhớ thay đổi [[Special:Preferences|tùy chọn cá nhân {{SITENAME}}]
 'userlogin-resetpassword-link' => 'Đặt lại mật khẩu của bạn',
 'helplogin-url' => 'Help:Đăng nhập',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Trợ giúp đăng nhập]]',
+'userlogin-loggedin' => 'Bạn đã đăng nhập với tên {{GENDER:$1}}$1.
+Hãy sử dụng biểu mẫu ở dưới để đăng nhập với tài khoản người dùng khác.',
+'userlogin-createanother' => 'Mở thêm tài khoản',
 'createacct-join' => 'Nhập thông tin của bạn bên dưới.',
 'createacct-another-join' => 'Nhập thông tin của tài khoản mới dưới đây.',
 'createacct-emailrequired' => 'Địa chỉ thư điện tử',
@@ -1710,8 +1713,8 @@ Nếu bạn đồng ý cung cấp, nó sẽ dùng để ghi nhận công lao c
 'action-block' => 'cấm không cho người dùng này sửa đổi',
 'action-protect' => 'thay đổi mức khóa của trang này',
 'action-rollback' => 'nhanh chóng lùi tất cả sửa đổi của người dùng cuối cùng sửa đổi trang nào đó',
-'action-import' => 'nhập trang này từ wiki khác',
-'action-importupload' => 'nhập trang này bằng cách tải lên tập tin',
+'action-import' => 'nhập trang từ wiki khác',
+'action-importupload' => 'nhập trang bằng cách tải lên tập tin',
 'action-patrol' => 'đánh dấu đã tuần tra vào sửa đổi của người khác',
 'action-autopatrol' => 'tự động đánh dấu đã tuần tra vào sửa đổi của bạn',
 'action-unwatchedpages' => 'xem danh sách các trang chưa được theo dõi',
@@ -2248,6 +2251,7 @@ Các mục <del>bị gạch bỏ</del> là các trang đã được sửa.',
 'listusers' => 'Danh sách thành viên',
 'listusers-editsonly' => 'Chỉ hiện thành viên có tham gia sửa đổi',
 'listusers-creationsort' => 'Xếp theo ngày khởi tạo',
+'listusers-desc' => 'Sắp xếp thứ tự giảm dần',
 'usereditcount' => '$1 {{PLURAL:$1|sửa đổi|sửa đổi}}',
 'usercreated' => '{{GENDER:$3}}mở $1 lúc $2',
 'newpages' => 'Trang mới',
@@ -2530,7 +2534,7 @@ người viết trang cuối cùng cũng là tác giả duy nhất của trang n
 Sửa đổi cuối cùng tại trang do [[User:$3|$3]] ([[User talk:$3|thảo luận]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) thực hiện.',
 'editcomment' => "Tóm lược sửa đổi: “''$1''”.",
 'revertpage' => 'Đã lùi lại sửa đổi của [[Special:Contributions/$2|$2]] ([[User talk:$2|Thảo luận]]) quay về phiên bản cuối của [[User:$1|$1]]',
-'revertpage-nouser' => 'Đã lùi lại sửa đổi của người dùng ẩn quay về phiên bản cuối của [[User:$1|$1]]',
+'revertpage-nouser' => 'Đã lùi lại sửa đổi của người dùng ẩn quay về phiên bản cuối của {{GENDER:$1}}[[User:$1|$1]]',
 'rollback-success' => 'Đã hủy sửa đổi của $1;
 quay về phiên bản cuối của $2.',
 
@@ -2670,7 +2674,7 @@ $1',
 'contributions' => '{{GENDER:$1}}Đóng góp của thành viên',
 'contributions-title' => 'Đóng góp của thành viên $1',
 'mycontris' => 'Đóng góp',
-'contribsub2' => 'Của $1 ($2)',
+'contribsub2' => 'Của {{GENDER:$3}}$1 ($2)',
 'nocontribs' => 'Không tìm thấy thay đổi nào khớp với yêu cầu.',
 'uctop' => '(hiện tại)',
 'month' => 'Từ tháng (trở về trước):',
@@ -3143,6 +3147,7 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'tooltip-undo' => '“Lùi lại” sẽ lùi sửa đổi này và mở trang sửa đổi ở chế độ xem trước. Cho phép thêm lý do vào tóm lược.',
 'tooltip-preferences-save' => 'Lưu tùy chọn',
 'tooltip-summary' => 'Hãy nhập câu tóm lược',
+'tooltip-iwiki' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/* Mã CSS đặt ở đây sẽ áp dụng cho mọi hình dạng */',
@@ -4142,7 +4147,10 @@ hoặc [//www.gnu.org/licenses/old-licenses/gpl-2.0.html đọc nó trực tuy
 'tags-tag' => 'Tên thẻ',
 'tags-display-header' => 'Hiển thị trên danh sách thay đổi',
 'tags-description-header' => 'Mô tả ý nghĩa đầy đủ',
+'tags-active-header' => 'Có kích hoạt?',
 'tags-hitcount-header' => 'Các thay đổi được ghi thẻ',
+'tags-active-yes' => 'Kích hoạt',
+'tags-active-no' => 'Vô hiệu',
 'tags-edit' => 'sửa',
 'tags-hitcount' => '$1 {{PLURAL:$1|thay đổi|thay đổi}}',
 
@@ -4234,7 +4242,7 @@ Nếu không thì bạn có thể điền biểu mẫu đơn giản ở dưới.
 'feedback-error1' => 'Hủy bỏ',
 'feedback-error2' => 'Lỗi: Sửa đổi thất bại',
 'feedback-error3' => 'Lỗi: API không có phản ứng',
-'feedback-thanks' => 'Cám ơn! Phản hồi của bạn đã được đăng lên trang “[$2 $1]”.',
+'feedback-thanks' => 'Cm ơn! Phản hồi của bạn đã được đăng lên trang “[$2 $1]”.',
 'feedback-close' => 'Xong',
 'feedback-bugcheck' => 'Tuyệt! Chỉ cần kiểm tra nó chưa được [$1 báo cáo trước đây].',
 'feedback-bugnew' => 'Tôi đã kiểm tra – báo cáo lỗi mới',
index a2614eb..8cad007 100644 (file)
@@ -173,6 +173,7 @@ $messages = array(
 'vector-view-history' => 'Wärsjoonsfolche',
 'vector-view-view' => 'Leesn',
 'vector-view-viewsource' => 'Gwäl-dhägsd ôôgugn',
+'actions' => 'Aggdsione',
 'namespaces' => 'Nôômsrajm',
 'variants' => 'Warjandn',
 
@@ -239,6 +240,7 @@ $1",
 'copyright' => 'Was hiir schdäd däfmâr benudsn nach $1',
 'copyrightpage' => '{{ns:project}}:Uurheewâr-rächde',
 'currentevents' => 'Was grôôd basiird is',
+'currentevents-url' => 'Project:Aggduelle Ereichnisse',
 'disclaimers' => 'Imbräsum',
 'disclaimerpage' => 'Project:Imbräsum',
 'edithelp' => 'Hilfe dsum beärbâdn',
@@ -405,6 +407,10 @@ Hirmid sagsd, das Du den dhägsd '''selbâr gschriim''' hasd, das däär dhägsd
 'hiddencategories' => 'Dii sajdn ghäärd dsu {{PLURAL:$1|aanâr fârschdegdn|$1 fârschdegde}} ghadegoriin:',
 'permissionserrorstext-withaction' => 'Du däfsd ned $2, des{{PLURAL:$1||}}dâsweechn:',
 
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => "'''Obachd:''' dii Gräiß vo dii ajbundna Vorlââng is zgrouß, ajniche Vorlââng kenna ned ajbundn wärrn.",
+'post-expand-template-inclusion-category' => 'Sajdn, ba denne vo dii ajbundna Vorlââng dii Gräiß üba da gräißdmöchlichn Gräiß iss',
+
 # History pages
 'viewpagelogs' => 'Logbicher fär dii sajdn dsajchn',
 'currentrev-asof' => 'Jedsiche wärsjoon, am $2 um $3 gmachd',
@@ -445,6 +451,10 @@ Hirmid sagsd, das Du den dhägsd '''selbâr gschriim''' hasd, das däär dhägsd
 'prevn' => '{{PLURAL:$1|foorichâr|fooriche $1}}',
 'nextn' => '{{PLURAL:$1|nägschdâr|nägschde $1}}',
 'viewprevnext' => 'Dsajch ($1 {{int:pipe-separator}} $2) ($3)',
+'searchprofile-articles' => 'Sajdn dii ann Inhald zajng',
+'searchprofile-images' => 'Muldimedjâ',
+'searchprofile-everything' => 'Âlls',
+'searchprofile-advanced' => 'Erwajderd',
 'search-result-size' => '$1 ({{PLURAL:$2|1 wôrd|$2 wärdâr}})',
 'search-result-score' => 'Âjschleechich: $1 %',
 'search-redirect' => '(Wajdalajdung fon „$1“ häa)',
@@ -603,6 +613,9 @@ S'gajd awâr aa â [[Special:WhatLinksHere/$2|lisdn mid alâ fârwajs]].",
 'sharedupload-desc-there' => 'Dii dadaj ghumd fon $1, un mr däf se fir andârâ brojägd aa nemâ. Genauârs schded uf dr [$2 beschrajwungssajdâ fon dr dadaj].',
 'uploadnewversion-linktext' => ' naje wärsjoon fo derä dadaj nauflôôdn',
 
+# Random page
+'randompage' => 'Zufälliche Sajdn',
+
 # Statistics
 'statistics' => 'Schdadisdig',
 
@@ -860,6 +873,7 @@ Bidde gug's mi´m foorschau-gnobf ôô fôrm schbajchan",
 'tooltip-upload' => 'Loos midm nauflaadn',
 'tooltip-rollback' => 'Hiir glign machd mid am môl alâs riggängich, was däär benudsâr dsledschd af där sajdn gmachd had.',
 'tooltip-undo' => 'Hiir glign machd dii aane ändärung riggängich un dsajchd dan ôô, wiis dan ausschaua dääd. Dann koosd aa no â dsamfassung wisoo un warum dâdsuuschrajm.',
+'tooltip-summary' => 'Dibb schnell a glaane Zusammafassung nei.',
 
 # Stylesheets
 'common.css' => '/* CSS hiir beâjflusd ale schelfn */',
index 05d1ea2..d2abf7e 100644 (file)
@@ -122,10 +122,10 @@ $messages = array(
 'tog-extendwatchlist' => 'Stäänükön galädalisedi ad jonön votükamis tefik valik, e no te nulikünos',
 'tog-usenewrc' => 'Grupön votükamis pado in votukäms nulik e galädalised (me JavaScript)',
 'tog-numberheadings' => 'Givön itjäfidiko nümis dilädatiädes',
-'tog-showtoolbar' => 'Jonön redakamastumemi (JavaScript)',
-'tog-editondblclick' => 'Dälön redakön padis pö drän telik mugaknopa (JavaScript)',
+'tog-showtoolbar' => 'Jonön redakamastumemi',
+'tog-editondblclick' => 'Dälön redakön padis pö drän telik mugaknopa',
 'tog-editsection' => 'Dälön redakami dilädas me yüms: [redakön]',
-'tog-editsectiononrightclick' => 'Dälön redakami diläda me klik mugaknopa detik su dilädatiäds (JavaScript)',
+'tog-editsectiononrightclick' => 'Dälön redakami diläda me klik mugaknopa detik su dilädatiäds',
 'tog-showtoc' => 'Jonön ninädalisedi (su pads labü diläds plu 3)',
 'tog-rememberpassword' => 'Dakipolös nunädamanünis obik in bevüresodatävöm at (muiko {{PLURAL:$1|del|dels}} $1)',
 'tog-watchcreations' => 'Läükön padis fa ob pejafölis e ragivis fa ob pelöpükölis lä galädalised obik',
@@ -143,7 +143,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Jonön numi gebanas galädöl',
 'tog-oldsig' => 'Dispenäd dabinöl:',
 'tog-fancysig' => 'Dispenäd balugik (nen yüms lü gebanapad)',
-'tog-uselivepreview' => 'Gebön büologedi itjäfidik (JavaScript) (Sperimäntik)',
+'tog-uselivepreview' => 'Gebön büologedi itjäfidik (sperimäntik)',
 'tog-forceeditsummary' => 'Sagön obe, ven redakaplän brefik vagon',
 'tog-watchlisthideown' => 'Klänedön redakamis obik se galädalised',
 'tog-watchlisthidebots' => 'Klänedön redakamis mäikamenas se galädalised',
@@ -419,6 +419,7 @@ Mögos i, das atos sinifon, das dabinon säkädil pö program fa {{SITENAME}} pa
 # General errors
 'error' => 'Pöl',
 'databaseerror' => 'Pöl in nünodem',
+'databaseerror-error' => 'Pöl: $1',
 'laggedslavemode' => 'Nuned: pad ba labon votükamis brefabüik',
 'readonly' => 'Vük pefärmükon',
 'enterlockreason' => 'Penolös kodi löka, keninükamü täxet dula onik e dela, kü pomoükon',
@@ -584,7 +585,7 @@ Stebedolös büä osteifülol nogna.',
 'newpassword' => 'Letavöd nulik:',
 'retypenew' => 'Klavolöd dönu letavödi nulik:',
 'resetpass_submit' => 'Välön letavödi e nunädön omi',
-'changepassword-success' => 'Letavöd olik pevotükon benosekiko! Anu sit nunädon oli...',
+'changepassword-success' => 'Letavöd olik pevotükon benosekiko!',
 'resetpass_forbidden' => 'Letavöds no kanons pavotükön',
 'resetpass-no-info' => 'Mutol nunädön oli ad logön padi at nemediko.',
 'resetpass-submit-loggedin' => 'Votükön letavödi',
@@ -763,7 +764,7 @@ Geban, kel efärmükon oni, egevon kodi at: $1",
 'nocreatetext' => '{{SITENAME}} emiedükon mögi ad jafön padis nulik.
 Kanol redakön padi dabinöl, u [[Special:UserLogin|nunädön oli u jafön kali]].',
 'nocreate-loggedin' => 'No dalol jafön padis nulik.',
-'permissionserrors' => 'Dälapöls',
+'permissionserrors' => 'Dälapöl',
 'permissionserrorstext' => 'No dalol dunön atosi sekü {{PLURAL:$1|kod|kods}} sököl:',
 'permissionserrorstext-withaction' => 'No dalol $2, sekü {{PLURAL:$1|kod|kods}} sököl:',
 'recreate-moveddeleted-warn' => "'''Nuned: Dönujafol padi büiko pemoüköl.'''
@@ -832,8 +833,8 @@ Plän: (anuik) = dif tefü fomam anuik,
 (lätik) = dif tefü fomam büik, p = redakam pülik.',
 'history-fieldset-title' => 'Logamajenotem',
 'history-show-deleted' => 'Te pemoüköls',
-'histfirst' => 'Balid',
-'histlast' => 'Lätik',
+'histfirst' => 'vönädikün',
+'histlast' => 'nulikün',
 'historysize' => '({{PLURAL:$1|jölät 1|jöläts $1}})',
 'historyempty' => '(vagik)',
 
@@ -852,7 +853,7 @@ Kanol [[Special:Search|sukön]] padis nulik tefik.',
 'rev-deleted-text-permission' => "Padafomam at '''pemoükon'''.
 Pats tefik ba patuvons in [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jenotalised moükamas].",
 'rev-deleted-text-view' => "Padafomam at '''pemoükon'''.
-As guvan, kanol logön oni; pats tefik ba binons in [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}  jenotalised moükamas].",
+Kanol logön oni; pats ba binons in [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}  jenotalised moükamas].",
 'rev-delundel' => 'jonön/klänedön',
 'rev-showdeleted' => 'jonön',
 'revisiondelete' => 'Moükön/sädunön moükami fomamas',
@@ -1044,7 +1045,7 @@ Kontrololös, va votükam at okipon fovöfi padajenotema.',
 'timezoneregion-indian' => 'Lindean',
 'timezoneregion-pacific' => 'Pasifean',
 'allowemail' => 'Fägükolös siti ad getön poti leäktronik de gebans votik',
-'prefs-searchoptions' => 'Sukaparamets',
+'prefs-searchoptions' => 'Suk',
 'prefs-namespaces' => 'Nemaspads',
 'defaultns' => 'Votiko sukolös in nemaspads at:',
 'default' => 'stad kösömik',
@@ -1053,7 +1054,7 @@ Kontrololös, va votükam at okipon fovöfi padajenotema.',
 'prefs-custom-js' => 'JavaScript nekösömik',
 'youremail' => 'Ladet leäktronik *:',
 'username' => '{{GENDER:$1|Gebananem}}:',
-'uid' => 'Gebanadientif:',
+'uid' => '{{GENDER:$1|Gebanadientif}}:',
 'prefs-memberingroups' => '{{GENDER:$2|Liman}} {{PLURAL:$1|grupa|grupas}}:',
 'prefs-registration' => 'Tim registarama:',
 'yourrealname' => 'Nem jenöfik *:',
@@ -1062,9 +1063,10 @@ Kontrololös, va votükam at okipon fovöfi padajenotema.',
 'badsig' => 'Dispenäd no lonöföl: dönulogolös eli HTML.',
 'badsiglength' => 'Dispenäd olik binon tu lunik.
 Muton labön {{PLURAL:$1|malati|malatis}} läs $1.',
-'yourgender' => 'Gen:',
-'gender-male' => 'Manik',
-'gender-female' => 'Vomik',
+'yourgender' => 'Lio-li buükol ad pabepenön?',
+'gender-unknown' => 'Buükob ad no sagön',
+'gender-male' => 'Redakom padis ela wiki',
+'gender-female' => 'Redakof padis ela wiki',
 'email' => 'Ladet leäktronik',
 'prefs-help-realname' => 'Nem jenöfik no binon zesüdik. If vilol givön oni, pogebon ad dasevön vobi olik.',
 'prefs-help-email' => 'Ladet leäktronik no peflagon, ab dälon sedi letavöda nulik ole üf glömol letavödi olik.',
@@ -1079,7 +1081,7 @@ Muton labön {{PLURAL:$1|malati|malatis}} läs $1.',
 'userrights-lookup-user' => 'Guvön gebanagrupis',
 'userrights-user-editname' => 'Penolös gebananemi:',
 'editusergroup' => 'Redakön gebanagrupis',
-'editinguser' => "Votükam gitätas gebana: '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+'editinguser' => "Votükam gitätas gebana: '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup' => 'Redakön gebanagrupis',
 'saveusergroups' => 'Dakipolöd gebanagrupis',
 'userrights-groupsmember' => 'Liman grupa(s):',
@@ -1091,7 +1093,7 @@ Muton labön {{PLURAL:$1|malati|malatis}} läs $1.',
 'userrights-no-interwiki' => 'No labol däli ad votükön gebanagitätis in vüks votik.',
 'userrights-nodatabase' => 'Nünodem: $1 no dabinon, u no binon topik.',
 'userrights-nologin' => 'Mutol [[Special:UserLogin|nunädön oli]] me guvanakal ad dalön gevön gitätis gebanes.',
-'userrights-notallowed' => 'Kal olik no labon däli ad votükön gebanagitätis.',
+'userrights-notallowed' => 'No labol däli ad läükön u moükön gebanagitätis.',
 'userrights-changeable-col' => 'Grups fa ol votükoviks',
 'userrights-unchangeable-col' => 'Grups fa ol nevotükoviks',
 
@@ -1250,7 +1252,7 @@ Muton labön {{PLURAL:$1|malati|malatis}} läs $1.',
 'rc_categories' => 'Te klads fovik (ditolös me el "|")',
 'rc_categories_any' => 'Alseimik',
 'newsectionsummary' => '/* $1 */ diläd nulik',
-'rc-enhanced-expand' => 'Jonön patis (el JavaScript zesüdon)',
+'rc-enhanced-expand' => 'Jonön patis',
 'rc-enhanced-hide' => 'Klänedön patis',
 
 # Recent changes linked
@@ -1763,7 +1765,7 @@ Küpets e yuf pluik:
 'exblank' => 'pad ävagon',
 'delete-confirm' => 'Moükön padi: "$1"',
 'delete-legend' => 'Moükön',
-'historywarning' => 'Nuned: pad, keli vilol moükön, labon jenotemi:',
+'historywarning' => "'''Nuned:''' Pad, keli vilol moükön, labon jenotemi  laböl za {{PLURAL:$1|revid|revids}} $1:",
 'confirmdeletetext' => 'Primikol ad moükön laidüpiko padi u magodi sa jenotem valik ona. Fümedolös, das desinol ad dunön atosi, das suemol sekis, e das dunol atosi bai [[{{MediaWiki:Policy-url}}]].',
 'actioncomplete' => 'Dunot eplöpon',
 'actionfailed' => 'Dunot eneplöpon',
@@ -1828,7 +1830,7 @@ Ekö! parametem anuik pada: '''$1''':",
 'protect-default' => 'Dälön gebanes valik',
 'protect-fallback' => 'Däl: "$1" zesüdon',
 'protect-level-autoconfirmed' => 'Blokön gebanis nulik e no peregistarölis',
-'protect-level-sysop' => 'Te guvans',
+'protect-level-sysop' => 'Dälön te guvans',
 'protect-summary-cascade' => 'as jän',
 'protect-expiring' => 'dul jü $1 (UTC)',
 'protect-expiry-indefinite' => 'nenfinik',
@@ -1871,8 +1873,8 @@ Ekö! parametem anuik pada: '''$1''':",
 'undeletepagetext' => '{{PLURAL:$1|Pad sököl pemoükon ab binon nog in registar: moükam ona|Pads sököl $1 pemoükons ab binons nog in registar: moükam onas}} kanon pasädunön.
 Registar pavagükon periodiko.',
 'undelete-fieldset-title' => 'Nätükön revidis',
-'undeleteextrahelp' => "Ad sädunön moükami pada lölik, vagükolös bügilis valik e välolös me mugaparat knopi: '''''Sädunolöd moükami'''''.
-Ad sädunön moükami no lölöfik, välolös me mugaparat bügilis revidas pavipöl, täno knopi: '''''Sädunolöd moükami'''''. Knop: '''''Vagükolöd vali''''' vagükön küpeti e bügilis valik.",
+'undeleteextrahelp' => "Ad sädunön moükami jenotema lölik pada, vagükolös bügilis valik e välolös me mugaparat knopi: '''''{{int:undeletebtn}}'''''.
+Ad sädunön moükami no lölöfik, välolös me mugaparat bügilis revidas pavipöl, täno knopi: '''''{{int:undeletebtn}}'''''.",
 'undeleterevisions' => '{{PLURAL:$1|revid 1 peregistaron|revids $1 peregistarons}}',
 'undeletehistory' => 'If osädunol moükami pada at, revids valik ogepubons in jenotem onik.
 If pad nulik labü tiäd ot pejafon pos moükam at, revids pada rigik ogepubons in jenotem ona.',
@@ -1892,7 +1894,7 @@ Ba labol yümi dädik, u ba fomam pegepübon u pemoükon se registar.',
 'undeletedrevisions' => 'Moükam {{PLURAL:$1|revida 1 pesädunon|revidas $1 pesädunons}}',
 'undeletedrevisions-files' => 'Moükam {{PLURAL:$1|revida 1|revidas $1}} e {{PLURAL:$2|ragiva 1|ragivas $2}} pesädunons',
 'undeletedfiles' => 'Moükam {{PLURAL:$1|ragiva 1|ragivas $1}} pesädunon',
-'cannotundelete' => 'Sädunam moükama no eplöpon. Ba ek ya esädunon moükami at.',
+'cannotundelete' => 'Sädunam moükama no eplöpon: $1',
 'undeletedpage' => "'''Moükam pada: $1 pesädunon'''
 
 Logolös [[Special:Log/delete|lisedi moükamas]] if vilol kontrolön moükamis e sädunamis brefabüikis.",
@@ -2031,7 +2033,8 @@ Logolös [[Special:BlockList|lisedi blokamas]] ad vestigön blokamis.',
 'blocklogpage' => 'Jenotalised blokamas',
 'blocklogentry' => '"[[$1]]" peblokon dü: $2 $3',
 'reblock-logentry' => 'blokamaparamets gebana: [[$1]] pevotükons, pro dul: $2 (kod: $3)',
-'blocklogtext' => 'Is binon lised gebanablokamas e gebanasäblokamas. Ladets-IP itjäfidiko pebloköls no pajonons. Logolös blokamis e xilis anu lonöfölis in [[Special:BlockList|lised IP-blokamas]].',
+'blocklogtext' => 'Is binon lised gebanablokamas e gebanasäblokamas. Ladets-IP itjäfidiko pebloköls no pajonons.
+Logolös blokamis e xilis anu lonöfölis in [[Special:BlockList|lised blokamas]].',
 'unblocklogentry' => '$1 pesäblokon',
 'block-log-flags-anononly' => 'te gebans nennemik',
 'block-log-flags-nocreate' => 'kalijaf penemögükon',
@@ -2136,7 +2139,7 @@ Välolös nemi votik.',
 
 Yeged nulik "[[:$1]]" ya dabinon. Vilol-li moükön oni ad jafön spadi pro topätükam?',
 'delete_and_move_confirm' => 'Si! moükolöd padi',
-'delete_and_move_reason' => 'Pemoükon ad jafön spadi pro topätükam',
+'delete_and_move_reason' => "Pemoükon ad jafön spadi pro topätükam se ''[[$1]]''",
 'selfmove' => 'Tiäds nulik e bäldik binons ots; pad no kanon patopätükön sui ok it.',
 'immobile-source-namespace' => 'Paditopätükön ini nemaspad: "$1" nemögon',
 'immobile-target-namespace' => 'Paditopätükam ini nemaspad: "$1" nemögon',
@@ -2845,7 +2848,7 @@ Kanol i [[Special:EditWatchlist|gebön redakametodi kösömik]].',
 'specialpages-group-highuse' => 'Pads suvo pegeböls',
 'specialpages-group-pages' => 'Padaliseds',
 'specialpages-group-pagetools' => 'Padastumem',
-'specialpages-group-wiki' => 'Nüns e stums vükiks',
+'specialpages-group-wiki' => 'Nüns e stums',
 'specialpages-group-redirects' => 'Lüodükam padas patik',
 'specialpages-group-spam' => 'Stums ta el spam',
 
index bc37c38..532cbdf 100644 (file)
@@ -71,12 +71,12 @@ $messages = array(
 'tog-hidepatrolled' => 'Tago-a in mga gin-patrol o binantayan nga mga pagliwat ha mga dipala naiha nga mga kabag-ohan',
 'tog-newpageshidepatrolled' => 'Tago-a an mga gin-patrol o binantayan nga mga pakli tikang han talaan hin bag-o nga pakli',
 'tog-extendwatchlist' => 'Padako-a an angay timan-an agod makita an tanan nga kabag-ohan, diri la an gibag-ohi',
-'tog-usenewrc' => 'Gamita in mga gin-enhans o gindugngan nga gibag-ohi nga mga kabag-ohan (nakinahanglan hin JavaScript)',
+'tog-usenewrc' => 'Grupo nga mga pagbag-o kada pakli ha kababag-o pala ngan mga barantayon nga talaan',
 'tog-numberheadings' => 'Auto-nga-ihap nga mga pagngaran',
-'tog-showtoolbar' => 'Igpakita an edit toolbar (nakinahanglan hin JavaScript)',
-'tog-editondblclick' => 'Igliwat in mga pakli ha doble nga klik (nakinahanglan hin JavaScript)',
+'tog-showtoolbar' => 'Igpakita an edit toolbar',
+'tog-editondblclick' => 'Igliwat in mga pakli ha doble nga klik',
 'tog-editsection' => 'Tugoti in seksyon nga pagliwat pinaagi hin [igliwat] nga mga sumpay',
-'tog-editsectiononrightclick' => 'Tugoti in pagliwat hin seksyon ha pag klik-ha-tuo dida hin mga ngaran o titulo hin seksyon (nakinahanglan hin JavaScript)',
+'tog-editsectiononrightclick' => 'Tugoti in pagliwat hin seksyon ha pag klik-ha-tuo dida hin mga ngaran o titulo hin seksyon',
 'tog-showtoc' => 'Igpakita in tabla hin sulod (para hin mga pakli nga sobra hin 3 ka titulo o pagngaran)',
 'tog-rememberpassword' => 'Hinumdomi an akon pan-sakob dinhi nga browser (para hin maximum nga $1 {{PLURAL:$1|nga adlaw|nga mga adlaw}})',
 'tog-watchcreations' => 'Igdugang in mga pakli nga akon ginhimo ngan mga paypay nga akon ginkarga ngadto han akon angay timan-an',
@@ -94,7 +94,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Igpakita an ihap han mga nangingita nga mga nagamit',
 'tog-oldsig' => 'Aada nga pirma:',
 'tog-fancysig' => 'Tratuha it pirma komo uska wikitext (nga waray automatiko nga sumpay)',
-'tog-uselivepreview' => 'Gamita an buhi nga pahiuna nga pagawas (nagkikinahanglan hin JavaScript) (eksperimental)',
+'tog-uselivepreview' => 'Gamita an buhi nga pahiuna nga pagawas (eksperimental)',
 'tog-forceeditsummary' => 'Pasabti ako kun waray ko ginsurat ha dalikyat-nga-tigaman han pagliwat (edit summary)',
 'tog-watchlisthideown' => 'Tago-a an akon mga ginliwat tikang han angay timan-an',
 'tog-watchlisthidebots' => 'Tago-a an ginliwat hin bot tikang han angay timan-an',
@@ -107,6 +107,7 @@ $messages = array(
 'tog-showhiddencats' => 'Igpakita an mga tinago nga mga kaarangay',
 'tog-norollbackdiff' => 'Iglat-ang an kaiban kahuman himoa an libot-pabalik',
 'tog-useeditwarning' => 'Pasabti ako kun nabaya ako hin ginliwat ng pakli nga waray katipig an mga pagbag-o',
+'tog-prefershttps' => 'Pirmihi paggamit hin segurado nga koneksyon kun nakalog-in',
 
 'underline-always' => 'Pirme',
 'underline-never' => 'Diri',
@@ -170,6 +171,18 @@ $messages = array(
 'oct' => 'Okt',
 'nov' => 'Nob',
 'dec' => 'Dis',
+'january-date' => 'Enero $1',
+'february-date' => 'Pebrero $1',
+'march-date' => 'Marso $1',
+'april-date' => 'Abril $1',
+'may-date' => 'Mayo $1',
+'june-date' => 'Hunyo $1',
+'july-date' => 'Hulyo $1',
+'august-date' => 'Agosto $1',
+'september-date' => 'Septyembre $1',
+'october-date' => 'Oktubre $1',
+'november-date' => 'Nobyembre $1',
+'december-date' => 'Disyembre $1',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Kaarangay|Mga kaarangay}}',
@@ -197,7 +210,7 @@ $messages = array(
 'newwindow' => '(nabuklad hin bag-o nga tamboan o bintana)',
 'cancel' => 'Pasagdi',
 'moredotdotdot' => 'Damo pa nga…',
-'morenotlisted' => 'Damo pa nga waray gintalaan...',
+'morenotlisted' => 'Diri kompleto ini nga listahan.',
 'mypage' => 'Pakli',
 'mytalk' => 'Mga akon paghingay',
 'anontalk' => 'Paghingay para hini nga IP',
@@ -253,6 +266,7 @@ $messages = array(
 'create-this-page' => 'Himo-a ini nga pakli',
 'delete' => 'Para-a',
 'deletethispage' => 'Para-a ini nga pakli',
+'undeletethispage' => 'Igbalik an ini nga pakli nga napara',
 'undelete_short' => 'Igkansela an pagpara {{PLURAL:$1|usa nga pagliwat|$1 nga mga pagliwat}}',
 'viewdeleted_short' => '{{PLURAL:$1|usa nga ginpara nga pagliwat|$1 ka ginpara nga mga pagliwat}}',
 'protect' => 'Panalipdi',
@@ -299,7 +313,7 @@ $1',
 # 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).
 'aboutsite' => 'Mahitungod han {{SITENAME}}',
 'aboutpage' => 'Project:Mahitungod han',
-'copyright' => 'In sulod mabiblingan ha ilarom han $1.',
+'copyright' => 'An sulod mabiblingan ha ilarom han $1 antes may-ada pasabot.',
 'copyrightpage' => '{{ns:project}}:Mga kopirayt',
 'currentevents' => 'Mga panhitabo',
 'currentevents-url' => 'Project:Mga panhitabo',
@@ -384,6 +398,13 @@ Listahan o talaan hin puyde nga mga pinaurog nga pakli in mabibilngan ha [[Speci
 # General errors
 'error' => 'Sayop',
 'databaseerror' => 'Sayop hin database',
+'databaseerror-text' => 'Nagkamay-ada hin database query error.
+
+Ini in indikasyon nga may-ada bug hini nga software.',
+'databaseerror-textcl' => 'Nagkamay-ada hin database query error.',
+'databaseerror-query' => 'Pakiana: $1',
+'databaseerror-function' => 'Function: $1',
+'databaseerror-error' => 'Sayop: $1',
 'laggedslavemode' => 'Pahimatngon: It pakli bangin waray mga kabag-ohan nga bag-o.',
 'readonly' => 'Gintrankahan an database',
 'enterlockreason' => 'Pagbutang hin rason para han pagtrangka, upod hin banabana kon san-o kukuha-on an pagtrangka',
@@ -416,6 +437,7 @@ Alayon la igsumat ini ha [[Special:ListUsers/sysop|administrator]], igsurat la a
 Bangin na ini ginpara hin iba.',
 'cannotdelete-title' => 'diri nakakapara han pakli "$1"',
 'delete-hook-aborted' => 'Pagpara ginpugngan han kawil.  Waray eksplenasyon an ginhatag.',
+'no-null-revision' => 'Diri nakakahimo hin bag-o nga null rebisyon para han pakli "$1"',
 'badtitle' => 'Maraot nga titulo',
 'badtitletext' => 'An ginhangyo nga pakli diri puyde, waray sulod, o sayop nga nasumpay nga inter-pinunongan o inter-wiki nga titulo.
 Bangin mayda usa o damo nga mga agi nga diri puyde magamit ha mga titulo.',
@@ -439,9 +461,15 @@ Para makadugang o makaliwat hin mga paghubad para han tanan nga mga wiki, alayon
 'editinginterface' => "'''Pahimatngon:''' Imo ginliliwat an pakli nga gingagamit paghatag hin interface text para han software.
 An mga pagbag-o hini nga pakli in makakaapekto han user interface han iba nga mga gumaramit hini nga wiki.
 Para makadugang o makabag-o han mga paghubad para han ngatanan nga mga wiki, alayon paggamit han [//translatewiki.net/ translatewiki.net], an lokalisasyon nga proyekto han MediaWiki.",
+'cascadeprotected' => 'Ini nga pakli in pinapasaliporan hin pagliwat tungod ini in nalalakip ha masunod nga {{PLURAL:$1|pakli, kun diin |mga pakli, kun diin}} pinapasaliporan hit "cascading" nga pagpili nga pinaandar:
+$2',
 'namespaceprotected' => "Diri ka gintutugutan pagliwat han mga pakli ha ngaran-lat'ang nga '''$1'''.",
 'customcssprotected' => 'Diri ka gintutugotan pagliwat hini nga CSS nga pakli, tungod nga nagsusulod ini hin kanan iba nga tawo personal nga karuyagon.',
 'customjsprotected' => 'Diri ka gintutugotan pagliwat hini nga JavaScript nga pakli, tungod nga nagsusulod ini hin kanan iba nga tawo personal nga karuyagon.',
+'mycustomcssprotected' => 'Waray nim pagtugot hin pagliwat hini nga CSS nga pakli.',
+'mycustomjsprotected' => 'Waray nim pagtugot hit pagliwat hini nga JavaScript nga pakli.',
+'myprivateinfoprotected' => 'Waray nim pagtugot hit pagliwat hit imo pribado nga impormasyon.',
+'mypreferencesprotected' => 'Waray nim pagtugot hit pagliwat hit imo mga karuyag.',
 'ns-specialprotected' => 'Diri maliliwat an mga ispisyal nga pakli.',
 'titleprotected' => 'Ini nga titulo pinasalipod ha paghimo ni [[User:$1|$1]].
 An katadungan nga ginhatag amo in "\'\'$2\'\'".',
@@ -461,13 +489,14 @@ An magdudurmara nga nagtrangka hini in naghatag hini nga eksplenasyon: "$3".',
 # Login and logout pages
 'logouttext' => "'''Nakalog-out kana.'''
 
-Puydi ka magpadayon paggamit hin {{SITENAME}} nga diri magpapakilala, o puydi ka gihapon <span class='plainlinks'>[$1 mag-log in utro]</span> ha parehas o iba nga gumaramit.",
+Ginpapasabot ka la nga an iba nga pakli in magpapadayon nga magpakita komo nga ikaw naka-log-in pa, tubtob imo ginlimpyo an imo browser cache.",
 'welcomeuser' => '¡Uswag ngan Dayon, $1!',
 'welcomecreation-msg' => 'An im akawnt in nahimo na.
 Ayaw kalimti pagbalyo han imo [[Special:Preferences|{{SITENAME}} preperensya]].',
 'yourname' => 'Agnay hit gumaramit:',
 'userlogin-yourname' => 'Ngaran han gumaramit',
 'userlogin-yourname-ph' => 'Igbutang an imo ngaran-gumaramit',
+'createacct-another-username-ph' => 'Igbutang an imo agnay-gumaramit',
 'yourpassword' => 'Tigaman-pagsulod:',
 'userlogin-yourpassword' => 'Tigaman pagsakob',
 'userlogin-yourpassword-ph' => 'Igbutang an imo tigaman-pagsakob',
@@ -500,11 +529,16 @@ Ayaw kalimti pagbalyo han imo [[Special:Preferences|{{SITENAME}} preperensya]].'
 'userlogin-resetpassword-link' => 'Ig-reset an imo tigaman-pagsakob',
 'helplogin-url' => 'Help:Pag-log-in',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Bulig han pag-log-in]]',
+'userlogin-loggedin' => 'Nakalog-in kana komo hi {{GENDER:$1|$1}}.
+Gamiti an porma ha ubos para makalog-in komo iba nga gumaramit.',
+'userlogin-createanother' => 'Paghimo hin iba nga akawnt',
 'createacct-join' => 'Igbutang an imo impormasyon ha ubos.',
+'createacct-another-join' => 'Igbutang an impormasyon han bag-o nga akwant ha ilarom.',
 'createacct-emailrequired' => 'Email address',
 'createacct-emailoptional' => 'Email address (opsyonal)',
 'createacct-email-ph' => 'Igbutang an imo email address',
-'createaccountmail' => 'Gamiti hin temporaryo nga bisan ano nag password ngan igpadangat ngada ha e-mail address nga nakasurat ha ubos',
+'createacct-another-email-ph' => 'Igbutang an email address',
+'createaccountmail' => 'Gamiti hin temporaryo nga bisan ano nag password ngan igpadangat ngada ha espesipikado nga e-mail address',
 'createacct-realname' => 'Tinuod nga ngaran (opsyonal)',
 'createaccountreason' => 'Rason:',
 'createacct-reason' => 'Rason',
@@ -512,17 +546,25 @@ Ayaw kalimti pagbalyo han imo [[Special:Preferences|{{SITENAME}} preperensya]].'
 'createacct-captcha' => 'Pagkita han seguridad',
 'createacct-imgcaptcha-ph' => 'Igbutang an sinurat nga nakikita mo ha igbaw',
 'createacct-submit' => 'Ighimo an im akawnt',
+'createacct-another-submit' => 'Paghimo hin lain nga akant',
 'createacct-benefit-heading' => '{{SITENAME}} in ginhimo hin tawo nga sugad ha imo.',
 'createacct-benefit-body1' => '{{PLURAL:$1|pagliwat|mga pagliwat}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|ka pakli|ka mga pakli}}',
+'createacct-benefit-body3' => 'bag-o pala nga {{PLURAL:$1|mag-aramot|mga mag-aramot}}',
 'badretype' => 'Diri naangay an mga tigaman-pagsulod nga im ginbutang',
 'userexists' => 'An agnay hiton gumaramit nga im ginbutang in gingamit na.
 Alayon pagpili hin lain nga ngaran.',
 'loginerror' => 'Sayop hin pagsakob',
 'createacct-error' => 'Pakyas an paghimo han akawnt',
 'createaccounterror' => 'Diri makakahimo hin akawnt: $1',
+'nocookiesnew' => 'An akawnt han gumaramit hin nahimo, pero diri ka pa nakalog-in.
+{{SITENAME}} in nagamit hin cookies para makalog-in han mga gumaramit.
+An imo cookies in diri nakaandar.
+Alayon paandara hira, kahuman paglog-in gamit han imo bag-o nga agnay-gumaramit ngan tigaman-pagsakob.',
 'nocookieslogin' => '{{SITENAME}} in nagkikinahanglan hin mga kuki para makapagpalog-in hin mga gumaramit.  An im mga kuki in diri nagana.
 Alayon paganaha hira ngan utro liwat.',
+'nocookiesfornew' => 'An imo akawnt han gumaramit in waray nahimo, kay tungod diri kami nakakakompirma han tinikangan.
+Siguradoha nga an mga cookies in nakaandar, igreload ini nga pakli ngan utroha.',
 'noname' => 'Waray ka nakahatag hin maupay nga agnay-hit-gumaramit.',
 'loginsuccesstitle' => 'Malinamposon an pagsulod',
 'loginsuccess' => "'''Ikaw in nakalog-in ha {{SITENAME}} komo \"\$1\".'''",
@@ -542,6 +584,11 @@ Alayon pagutro pagbutang.',
 'password-login-forbidden' => 'An paggamit hini nga agnay-hit-gumaramit ngan tigaman-pagsulod in diri gintutugotan.',
 'mailmypassword' => 'Ig-e-mail an bag-o nga tigaman-pagsulod',
 'passwordremindertitle' => 'Bag-o nga diri-pirmihan nga tigaman-pagsulod para han {{SITENAME}}',
+'passwordremindertext' => 'May-ada tawo (posible ikaw, tikang ha IP address nga $1) in umaro hin bag-o nga tigaman-pagsakob para han {{SITENAME}} ($4). Uska temporaryo nga tigaman-pagsakob para han gumaramit 
+"$2" in nahimo ngan ginbutang nga "$3". Kun ini an imo panuyuan, kinahanglanon nim maglog-in ngan pumili hin bag-o nga tigaman-pagsakob yana.
+An imo temporaryo nga tigaman-pagsakob in diri madulot kahuman hin {{PLURAL:$5|usa ka adlaw|$5 ka mga adlaw}}.
+
+Kun iba nga tawo an naghimo ini nga paalayon, o kun nakahinumdom ka han imo tigaman-pagsakob, ngan diri mo na karuyag nga igbal-iw ini, pabay-i nala ini nga mensahe ngan padayon paggamit han imo daan nga tigaman-pagsakob.',
 'noemail' => 'Waray e-mail nga adres nga ginrekord para han nágámit "$1".',
 'noemailcreate' => 'Kinahanglan nim maghatag hin may hinungdan nga e-mail address',
 'passwordsent' => 'Uska bag-o nga password in ginpadangat ha e-mail address nga nakarehistro kan "$1".
@@ -549,42 +596,72 @@ Alayon paglog-in utro kahuman mo makarawat ini.',
 'blocked-mailpassword' => 'An imo IP address in ginpugong ha pag-edit, ngan tungod hini in diri gintutugotan paggamit han password recovery function para malikyan an abuso.',
 'eauthentsent' => 'Uska kompirmasyon nga e-mail in ginpadangan ha gin-ngaranan nga e-mail address.
 San-o matagan pa hin iba nga e-mail para ha imo akawnt, kinahanglan mo sundon an mga surundan nga nakasurat ha e-mail, para makompirma nga imo gud ito akawnt.',
+'throttled-mailpassword' => 'Usa nga tigaman-pagnakob reset email in ginpadangat na, ha sakob han urhi nga  {{PLURAL:$1|oras|$1 ka mga oras}}.
+Basi diri ini maabuso, uusa la nga tigaman-panakob in igpapadangat kada {{PLURAL:$1|oras|$1 ka mga oras}}.',
 'mailerror' => 'Sayop han pagpadangat hin surat: $1',
+'acct_creation_throttle_hit' => 'An mga bisita hinin nga wiki nga nagamit hit imo IP address in naghimo hin {{PLURAL:$1|1 nga akawnt|$1 nga mga akawnt}} ha sulod han urhi nga adlaw, kun diin ini an pinakadamo nga gintutugotan para han sulod nga takna.
+
+An resulta, an mga bisita nga nagamit hini nga IP address in diri na makakahimo hin akawnt, ha pagkayana.',
 'emailauthenticated' => 'Ginpamatuod an imo e-mail adres han $2 ha $3.',
+'emailnotauthenticated' => 'An imo email address in diri pa otentikado.
+Waray email nga igpapadangat ha mga masunod nga higamit.',
+'noemailprefs' => 'Igbutang an imo email address ha imo preperensya para umandar ini nga mga higamit.',
 'emailconfirmlink' => 'Igkompirma an imo e-mail address',
+'invalidemailaddress' => 'Diri ginkakarawat an email address kay baga diri asya an format hini.  Alayon pagbutang hin asya nga format nga address o hawani ini.',
+'cannotchangeemail' => 'An akwant email address in diri mababal-iwan hini nga wiki.',
 'emaildisabled' => 'Ini nga sityo in diri nakakapadangat hin mga e-mail.',
 'accountcreated' => 'Nahimo an akawnt',
-'accountcreatedtext' => 'An akwant han gumaramit para kan $1 in ginhimo.',
+'accountcreatedtext' => 'An akwant han gumaramit para kan [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|Hiruhimangraw]]) in nahimo na.',
 'createaccount-title' => 'Paghimo hin akawnt para han {{SITENAME}}',
+'createaccount-text' => 'Mayda tawo nga naghimo hin akawnt nga gingamit an imo email address ha {{SITENAME}} ($4) nga ginngaranan nga "$2", nga may-ada tigaman-panakob nga "$3".
+
+Kinahanglan ka maglog-in ngan igbal-iw an imo tigaman-panakob yana dayon.
+
+Puydi nimo pabay-on ini nga mensahe, kun ini nga paghimo hin akwant in nagsayop la.',
 'usernamehasherror' => 'Agnay-hin-gumaramit in diri puydi magkamay-ada hin mga hash karakter',
+'login-throttled' => 'Damo na an imo login attempts ha pagkayana.
+Alayon paghulat hin $1 san-o ka umutro.',
 'login-abort-generic' => 'An imo paglog-in in diri malinamposon - Naundang',
 'loginlanguagelabel' => 'Pinulongan: $1',
+'suspicious-userlogout' => 'Waray ka tugoti pag-logout tungod nga baga ini ginpadangat hin usa nga broken browser o caching proxy.',
+'createacct-another-realname-tip' => 'Ada la ha imo kun karuyag mo igbutang an imo tinuod nga ngaran.
+Kun pinili mo ito ighatag, gagamiton ini paghatag hin atribusyon ha gumaramit para hit ira buhat.',
 
 # Email sending
 'php-mail-error-unknown' => 'Waray kasabti ha kanan PHP mail() function.',
+'user-mail-no-addy' => 'Nagsend hin email bisan waray email address.',
+'user-mail-no-body' => 'Nagsend hin email bisan waray o diri resonably kahalipot kaduro nga sulod.',
 
 # Change password dialog
 'resetpass' => 'Igliwat an tigaman-pagsulod',
+'resetpass_announce' => 'Nakalog-in ka hit temporaryo nga ginemail nga kodigo.
+Para mahuman paglalog-on, kinahanglan mo magbutang hin bag-o nga tigaman-panakob dinhi:',
 'resetpass_header' => 'Igliwan an akawnt nga tigaman-pagsulod',
 'oldpassword' => 'Daan nga tigaman-pagsulod:',
 'newpassword' => 'Bag-o nga tigaman-pagsulod:',
 'retypenew' => 'Utroha pagbutang an bag-o nga tigaman-pagsulod:',
 'resetpass_submit' => 'Igbutang an password ngan log in',
-'changepassword-success' => 'Malinamposon nga nasalyuan na an imo tigaman-pagsulod!
-Ikaw in naglalog-in yana...',
+'changepassword-success' => 'Malinamposon an pagbal-iw hit imo tigaman-panakob!',
 'resetpass_forbidden' => 'Diri mababalyoan an mga tigaman-pagsulod',
 'resetpass-no-info' => 'Kinahanglan mo paglog-in para direkta ka makasakob dinhi nga pakli.',
 'resetpass-submit-loggedin' => 'Igbal-iw an tigaman-pagsulod',
 'resetpass-submit-cancel' => 'Pasagdi',
+'resetpass-wrong-oldpass' => 'Diri balido an temporaryo o yana nga tigaman-panakob.
+Imo malinamposon nga ginsalyuan an imo tigaman-panakob o umaro ka na hin bag-o nga temporaryo nga tigman-panakob.',
 'resetpass-temp-password' => 'Temporaryo nga tigaman-pagsakob:',
+'resetpass-abort-generic' => 'Ginpugong an pagbal-iw hin tigaman-panakob hin uska ekstensyon.',
 
 # Special:PasswordReset
 'passwordreset' => 'igreset an tigaman-hit-pagsulod',
+'passwordreset-text-one' => 'Kompletoha ini nga porma paramakareset hin imo tigaman-panakob.',
+'passwordreset-text-many' => '{{PLURAL:$1|Butanga ha usa nga mga surodlan para mareset iton imo tigaman-panakob.}}',
 'passwordreset-legend' => 'igreset an tigaman-hit-pagsulod',
 'passwordreset-disabled' => 'Waray ginpaandar an password reset hini nga wiki.',
+'passwordreset-emaildisabled' => 'Mga mga higamit ha email in waray pinaandar hini nga wiki.',
 'passwordreset-username' => 'Agnay hiton gumaramit:',
 'passwordreset-domain' => 'Dominyo:',
 'passwordreset-capture' => 'Kikitaon mo an resulta nga e-mail?',
+'passwordreset-capture-help' => 'Kun imo igtsek ini nga kahon, an email (lakip an temporaryo nga tigaman-panakob) in igpapakita ha imo labot la han ginpadangat ha gumaramit.',
 'passwordreset-email' => 'E-mail adres:',
 'passwordreset-emailtitle' => 'Mga detalye han akawnt ha {{SITENAME}}',
 'passwordreset-emailelement' => 'Agnay han gumaramit: $1
@@ -605,6 +682,18 @@ Temporaryo nga tigaman han pagsakob: $2',
 'changeemail-submit' => 'Igbalyo an e-mail',
 'changeemail-cancel' => 'Pasagdi',
 
+# Special:ResetTokens
+'resettokens' => 'Igrest an mga token',
+'resettokens-text' => 'Puydi nimo mareset an mga token para makahatag hin pipira nga pribado nga datos nga may pakahisumpay ha imo akawnt dinhi.
+Kinahanglan mo ini buhaton kun aksidenti nim nasaro hira ha iba nga tawo o an imo akawnt in nakompromiso.',
+'resettokens-no-tokens' => 'Waray token nga marereset.',
+'resettokens-legend' => 'Igreset an mga token',
+'resettokens-tokens' => 'Mga token:',
+'resettokens-token-label' => '$1 (yana nga balor: $2)',
+'resettokens-watchlist-token' => 'Token para han web feed (Atom/RSS) han[[Special:Watchlist|mga pagbag-o ha imo pakli han talaan-barantayon]]',
+'resettokens-done' => 'Narest an mga token.',
+'resettokens-resetbutton' => 'Igreset an pinili nga mga token',
+
 # Edit page toolbar
 'bold_sample' => 'dakmola an agi',
 'bold_tip' => 'Dakmola an agi',
@@ -639,11 +728,38 @@ An imo IP address in maitatala ha kaagi hinin pakli han pagliwat.",
 'missingsummary' => "'''Pahinumdom:''' Waray ka nagbutang hin dalikyat nga sumat han pagliwat.
 Kun pidliton mo an \"{{int:savearticle}}\" utro, an imo ginliwat in matitipig bisan waray hini.",
 'missingcommenttext' => 'Alayon pagbutang hin komento ha ilarom.',
+'missingcommentheader' => "'''Pahinumdom:''' Waray ka humatag hin subject/headline para hini nga komento.  Kun pinduton mo an \"{{int:savearticle}}\" utro, an imo pagliwat in matitipig bisan waray hini.",
 'summary-preview' => 'Pahiuna nga pagawas han dalikyat nga pulong:',
 'subject-preview' => 'Pahiuna nga pagawas hit himangrawon:',
 'blockedtitle' => 'Ginpugngan ini nga gumaramit',
+'blockedtext' => '\'\'\'An imo agnay-gumaramit o IP address in ginpugngan.\'\'\'
+
+An pagpugong in ginhimo ni $1.
+An rason nga ginhatag in \'\'$2\'\'.
+
+* Pagtikang han pagpugong: $8
+* Paghuman han pagpugong: $6
+* Ginpupugngan: $7
+
+Puydi nimo bilngon hi $1 o iba liwat nga [[{{MediaWiki:Grouppage-sysop}}|magdudumara]] para makipaghimangraw hiunong hini nga pagpugong.
+Diri nimo magagamit an "ig-email ini nga gumaramit" nga feature antes may-ada balido nga email address nga nakabutang ha imo  [[Special:Preferences|mga preperensya han akawnt]] ngan waray ka pugngi paggamit hini.
+An imo IP address yana in $3, ngan an imo pagpugong nga ID in #$5.  Alayon la paglakip han ngatanan nga aada ha igbaw nga mga detalye ha bisan ano nga mga pakiana nga karuyag mo buhaton.',
+'autoblockedtext' => 'An imo IP address in automatiko nga ginpugngan mahitungod nga ini in gingamit hin iba nga gumaramit, nga ginpugngan ni $1.
+
+An rason nga ginhatag in \'\'$2\'\'.
+
+* Pagtikang han pagpugong: $8
+* Paghuman han pagpugong: $6
+* Ginpupugngan: $7
+
+Puydi nimo bilngon hi $1 o iba liwat nga [[{{MediaWiki:Grouppage-sysop}}|magdudumara]] para makipaghimangraw hiunong hini nga pagpugong.
+
+Ginpapasabot ka nga diri nimo magagamitan an "ig-email ini nga gumaramit" nga feature antes may-ada nimo balido nga email address nga nakarehistro ha imo  [[Special:Preferences|mga preperensya han gumaramit]] ngan waray ka pugngi hit paggamit hini.
+
+An imo IP address yana in $3, ngan an imo pagpugong nga ID in #$5.  Alayon la paglakip han ngatanan nga aada ha igbaw nga mga detalye ha bisan ano nga mga pakiana nga karuyag mo buhaton.',
 'blockednoreason' => 'waray katadungan nga ginhatag',
 'whitelistedittext' => 'Kinahanglan mo mag-$1 para makaliwat han mga pakli.',
+'confirmedittext' => 'Kinahanglanon mo igkompirma an imo email address san-o ka makaliwat hin mga pakli.  Alayon la pagbutang ngan pagbalidar han imo email address pinaagi han imo  [[Special:Preferences|mga preperensya han gumaramit]].',
 'nosuchsectiontitle' => 'Waray kaagi-i an bahin',
 'nosuchsectiontext' => 'Imo ginliwat an seksyon nga waray dida.
 Ini in puydi binmalhin o napara samtang ikaw in nagkikita han pakli.',
@@ -651,8 +767,14 @@ Ini in puydi binmalhin o napara samtang ikaw in nagkikita han pakli.',
 'loginreqlink' => 'Magpasabot nga masakob',
 'loginreqpagetext' => 'Kinahanglan mo mag-$1 para makakita ha iba nga mga pakli.',
 'accmailtitle' => 'Ginpadara na an tigaman-pagsulod.',
+'accmailtext' => "Uska hinimo nga random nga tigaman-panakob para kan [[User talk:$1|$1]] in ginpadangat ha $2. Puydi ini mabal-iwan ha ''[[Special:ChangePassword|liwani an tigaman-panakob]]'' nga pakli han paglog-in.",
 'newarticle' => '(Bag-o)',
 'newarticletext' => "Ginsunod mo an pakli nga waray pa kahihimo.  Para ighimo an pakli, tikanga pagmakinilya ha kahon nga aada ha ubos (kitaa an [[{{MediaWiki:Helppage}}|nabulig nga pakli]] para han kadugangan nga pananabutan).  Kun sayop an imo pagkanhi, igpidlit an imo kanan panngaykay (''browser'') '''balik''' (''back'') nga piridlitan.",
+'anontalkpagetext' => "----
+''Ini in hiruhimangraw-nga-pakli para han waray magpakilala nga gumaramit, nga waray pa hinmimo hin akawnt.''
+Magamit la kami hin IP address para makilal-an hiya.
+Sugad hini nga IP address, in puydi sinmaro hiton pipira nga mga gumaramit.
+Kun ikaw in waray magpakilala nga gumaramit, ngan pag-abat mo in may mga diri naangay nga komento an ginpapadangat ha imo, alayon nala [[Special:UserLogin/signup|paghimo hin akawnt]] o [[Special:UserLogin|pag-log in]] para malikyan an sumurunod nga mga pagkalipat nga dapat para ha iba nga waray magpakilala nga mga gumaramit.",
 'noarticletext' => 'Waray yana nahasurat hini nga pakli.
 Puyde hi ikaw [[Special:Search/{{PAGENAME}}|magbiling para han ngaran hini nga pakli]] ha iba nga mga pakli,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} binga an mga nanginginlabot nga mga log],
@@ -660,6 +782,10 @@ o [{{fullurl:{{FULLPAGENAME}}|action=edit}} igliwat ini nga pakli]</span>.',
 'noarticletext-nopermission' => 'Waray yana nahasurat hini nga pakli
 Puyde hi ikaw [[Special:Search/{{PAGENAME}}|magbiling han ngaran hini nga pakli]] ha iba nga mga pakli,
 o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mamiling han mga nanginginlabot nga mga talaan]</span>, kundi diri ka gintutugotan hin paghímò hini nga pakli.',
+'missing-revision' => 'Waray na an rebisyon #$1 han pakli nga ginngaranan nga  "{{PAGENAME}}".
+
+Ini in agsob tungod han pagsunod hin daan nga sumpay hin kaagi ha pakli nga ginpara.
+An mga detalye in mabibilngan ha [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
 'userpage-userdoesnotexist' => 'Diri nakarehistro an akawnt han gumaramit nga "$1".
 Alayon pagpamuruotbuot kun karuyag mo maghimo/mag-edit hini nga pakli.',
 'userpage-userdoesnotexist-view' => "An akawnt han gumaramit ni ''$1'' in diri nakarehistro.",
@@ -700,6 +826,7 @@ An taramdan han pagpara ngan pagbalhin para han pakli in ginhahatag ha ubos para
 'log-fulllog' => 'Kitaa an bug-os nga taramdan',
 'edit-conflict' => 'Diri pagkakauroyon han pagliwat.',
 'edit-no-change' => 'Ginpabay-an an im pagliwat, mahitungod nga waray pagbalyo nga nabuhat ha nakasurat.',
+'postedit-confirmation' => 'Natipig an imo ginliwat.',
 'edit-already-exists' => 'Diri nakakahimo hin bag-o nga pakli.
 Aada na ito.',
 'defaultmessagetext' => 'Aada-nga-daan nga teksto han mensahe',
@@ -722,7 +849,8 @@ Ini nga mga argumento in ginlaktawan.",
 
 # "Undo" feature
 'undo-norev' => 'An pagliwat in diri mapapawaray-buhat tungod waray ito dida o napara na.',
-'undo-summary' => 'Igpawaray-buhat an rebisyon nga $1 ni [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]])',
+'undo-summary' => 'Ginpawara-buhat an rebisyon nga $1 ni [[Special:Contributions/$2|$2]] ([[User talk:$2|himangrawi]])',
+'undo-summary-username-hidden' => 'Igpawara-an-ginbuhat nga rebisyon $1 han uska tago nga gumaramit',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Diri makakahimo hin akawnt',
@@ -748,7 +876,7 @@ Leyenda: '''({{int:cur}})''' = kaibhan ha giuurhii nga pag-bag-o, '''({{int:last
 'history-fieldset-title' => 'Kaagi han panngaykay',
 'history-show-deleted' => 'Ginpara la',
 'histfirst' => 'Giunhani',
-'histlast' => 'Giurhii',
+'histlast' => 'Gibag-ohi',
 'historysize' => '({{PLURAL:$1|1 nga byte|$1 ka mga byte}})',
 'historyempty' => '(waray sulod)',
 
@@ -816,17 +944,25 @@ Diri mo ini malalabtan.',
 
 # Diffs
 'history-title' => "Kaagi han pagbag-o han ''$1''",
+'difference-title' => 'An pagkakaiba han mga rebisyon han "$1"',
 'difference-multipage' => '(Kaibhan ha butnga han mga pakli)',
 'lineno' => 'Bagis $1:',
 'compareselectedversions' => 'Igkumpara an mga pinili nga pagbabag-o',
 'editundo' => 'Igpawara an ginbuhat',
+'diff-empty' => '(Waray pagkakaiba)',
 'diff-multi' => '({{PLURAL:$1|Usa nga panbutnga nga pagbag-o|$1 nga panbutnga nga pagbag-o}} ni {{PLURAL:$2|usa nga gumaramit|$2 nga mga gumaramit}} waray ginpakita)',
+'diff-multi-manyusers' => '({{PLURAL:$1|Uska sapit-nahiuna nga rebisyon|$1 nga mga sapit-nanhiuna nga rebisyon}} nga may labaw nga $2 {{PLURAL:$2|gumaramit|mga gumaramit}} in diri ginpapakita)',
 
 # Search results
 'searchresults' => 'Mga nabilingan han pagbiling',
 'searchresults-title' => 'Mga nabilngan han pagbiling para han "$1"',
+'searchresulttext' => 'Para ha kadugangan nga impormasyon bahin han pagbiling hin {{SITENAME}}, kitaa an [[{{MediaWiki:Helppage}}|{{int:help}}]].',
 'searchsubtitleinvalid' => "Imo ginpamiling an '''$1'''",
 'toomanymatches' => 'Sobra kadamo nga mga igo an ginbalik, alayon pagbuhat hin iba nga pakiana',
+'titlematches' => 'Parehas an titulo han pakli',
+'notitlematches' => 'Waray titulo nga pakli an parehas',
+'textmatches' => 'Parehas an teksto han pakli',
+'notextmatches' => 'Waray teksto han pakli an parehas',
 'prevn' => 'naha-una nga {{PLURAL:$1|$1}}',
 'nextn' => 'sunod nga {{PLURAL:$1|$1}}',
 'prevn-title' => 'Nahiuna $1 {{PLURAL:$1|resulta|mga resulta}}',
@@ -836,6 +972,7 @@ Diri mo ini malalabtan.',
 'searchmenu-legend' => 'Mga pagpipilian han pamiling',
 'searchmenu-exists' => "'''May-ada pakli nga nakangaran hin \"[[:\$1]]\" hini nga wiki.'''",
 'searchmenu-new' => "'''Himoa an pakli \"[[:\$1]]\" hini nga wiki!'''",
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Ig-browse an mga pakli gamit hini nga prefix]]',
 'searchprofile-articles' => 'Mga unod nga pakli',
 'searchprofile-project' => 'Mga Bulig ngan Proyekto nga pakli',
 'searchprofile-images' => 'Multimedia',
@@ -848,6 +985,7 @@ Diri mo ini malalabtan.',
 'searchprofile-advanced-tooltip' => "Pamilnga ha mga nabatasan nga ngaran-lat'ang",
 'search-result-size' => '$1 ({{PLURAL:$2|1 nga pulong|$2 nga mga pulong}})',
 'search-result-category-size' => '{{PLURAL:$1|1 nga api|$1 nga mga api}} ({{PLURAL:$2|1 nga ubos-nga-kaarangay|$2 nga mga ubos-nga-kaarangay}}, {{PLURAL:$3| 1 nga fayl|$3 nga mga fayl}})',
+'search-result-score' => 'Pagkaangay: $1%',
 'search-redirect' => '(redirekta $1)',
 'search-section' => '(bahin $1)',
 'search-suggest' => 'Buot sidngon mo ba: $1',
@@ -855,6 +993,8 @@ Diri mo ini malalabtan.',
 'search-interwiki-default' => '$1 nga resulta:',
 'search-interwiki-more' => '(damo pa)',
 'search-relatedarticle' => 'kasumapy',
+'mwsuggest-disable' => 'Ayaw paandari an mga suhistiyon han pamiling',
+'searcheverything-enable' => "Pamilnga ha ngatanan nga ngaran-lat'ang",
 'searchrelated' => 'kadugtong',
 'searchall' => 'ngatanan',
 'showingresultsheader' => "{{PLURAL:$5|Resulta '''$1''' han '''$3'''|Mga resulta '''$1 - $2''' han '''$3'''}} para ha '''$4'''",
@@ -871,6 +1011,7 @@ Diri mo ini malalabtan.',
 'searchdisabled' => '{{SITENAME}} nga pamiling in ginparong.
 Pamilnga la anay pinaagi ha Google ha pagkayana.
 Ginpapasabot nga an sulod han mga panudlok han {{SITENAME}} in bangin daan an.',
+'search-error' => 'May-ada sayop nga nahitabo samtang namimiling: $1',
 
 # Preferences page
 'preferences' => 'Mga karuyag',
@@ -881,32 +1022,46 @@ Ginpapasabot nga an sulod han mga panudlok han {{SITENAME}} in bangin daan an.',
 'prefs-skin' => 'Panit',
 'skin-preview' => 'Pahiuna nga pagawas',
 'datedefault' => 'Waray pinaurog nga karuyag',
+'prefs-beta' => 'Beta nga mga nahihigamitan',
 'prefs-datetime' => 'Pitsa ngan oras',
+'prefs-labs' => 'Mga labs feature',
 'prefs-user-pages' => 'Mga pakli hin gumaramit',
 'prefs-personal' => 'Pangilal-an han nagamit',
 'prefs-rc' => 'Kalalabay la nga mga pagbabag-o',
 'prefs-watchlist' => 'Listahan hit binabantayan',
 'prefs-watchlist-days' => 'Mga adlaw nga makikita ha barantayan:',
 'prefs-watchlist-days-max' => 'Pinakadamo $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}}',
+'prefs-watchlist-edits' => 'Gidadamoi nga ihap hin pagliwat it makikit-an ha pinahilawig nga talaan hin barantayon:',
 'prefs-watchlist-edits-max' => 'Pinakadako nga ihap: 1000',
+'prefs-watchlist-token' => 'Token hin talaan hin barantayon:',
+'prefs-misc' => 'Dirudilain',
 'prefs-resetpass' => 'Igliwan an tigaman-pagsulod',
 'prefs-changeemail' => 'Igliwan an e-mail address',
+'prefs-setemail' => 'Igbutang an email address',
 'prefs-email' => 'Mga pagpipilian han e-mail',
 'prefs-rendering' => 'Hitsura',
 'saveprefs' => 'Igtipig',
 'resetprefs' => 'Pabay-i an diri nakatipig nga mga pagbabag-o',
-'restoreprefs' => 'Igbalik ngatanan ngada ha kahimtang nga aada-nga-daan',
+'restoreprefs' => 'Igbalik an ngatanan ngada nga aada-nga-daan nga settings (ha ngatanan nga mga bahin)',
 'prefs-editing' => 'Ginliliwat',
 'rows' => 'Mga rumbay pahigda:',
 'columns' => 'Mga rumbay patindog:',
 'searchresultshead' => 'Bilnga',
 'resultsperpage' => 'Mga igo kada pakli:',
 'stub-threshold-disabled' => 'Waray ginpagana',
+'recentchangesdays' => 'Kadamo hin adlaw nga igpapakita an mga kabag-ohan:',
 'recentchangesdays-max' => 'Pinakadamo $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}}',
+'recentchangescount' => 'Ihap han mga pagliwat nga igpapakita nga ginpasingada:',
+'prefs-help-recentchangescount' => 'Ini in naglalakip han mga kabag-ohan nga pagliwat, mga kaagi han pakli, ngan mga talaan.',
+'prefs-help-watchlist-token2' => 'Ini in sekreto nga susi ngadto han web feed an imo talaan han binabantayan.
+Kun hin-o man it maaram hini in puyde bumasa han imo talaan han binabantayan, tungod hini ayaw ini igsaro ha iba.
+[[Special:ResetTokens|Pidlita ini kun kinahanglan mo igreset ini]].',
 'savedprefs' => 'Gintipig an im karuyag.',
 'timezonelegend' => 'Zona hin oras',
 'localtime' => 'Oras nga lokal',
 'timezoneuseserverdefault' => 'Gamita an aada-nga-daan han wiki ($1)',
+'timezoneuseoffset' => 'Iba (igbutang an offset)',
+'timezoneoffset' => 'Offset¹:',
 'servertime' => 'Oras han serbidor:',
 'guesstimezone' => 'Butanga tikang han panngaykay(browser)',
 'timezoneregion-africa' => 'Aprika',
@@ -919,10 +1074,16 @@ Ginpapasabot nga an sulod han mga panudlok han {{SITENAME}} in bangin daan an.',
 'timezoneregion-europe' => 'Europa',
 'timezoneregion-indian' => 'Kalawdan Indyana',
 'timezoneregion-pacific' => 'Kalawdan Pasipiko',
+'allowemail' => 'Igpaandar an email nga tikang ha iba nga mga gumaramit',
 'prefs-searchoptions' => 'Pamilnga',
 'prefs-namespaces' => "Ngaran-lat'ang",
+'defaultns' => "Kun diri, pamilnga hini nga mga ngaran-lat'ang:",
 'default' => 'aada-nga-daan',
 'prefs-files' => 'Mga paypay',
+'prefs-custom-css' => 'Custom CSS',
+'prefs-custom-js' => 'Custom JavaScript',
+'prefs-common-css-js' => 'Saro nga CSS/JavaScript para han ngatanan nga mga panit:',
+'prefs-reset-intro' => 'Puydi nimo ini gamiton nga pakli para makareset han imo mga preperensya nga ginbutang nga daan han sityo. Diri ini puydi mapawaray-buhat.',
 'prefs-emailconfirm-label' => 'Kompirmasyon han email:',
 'youremail' => 'E-mail:',
 'username' => '{{HENERO:$1|Agnay hit gumaramit}}:',
@@ -934,10 +1095,10 @@ Ginpapasabot nga an sulod han mga panudlok han {{SITENAME}} in bangin daan an.',
 'yournick' => 'Bag-o nga pirma:',
 'badsiglength' => 'Hilaba hin duro it im pirma.
 Dapat diri malabaw ha $1 {{PLURAL:$1|agi|mga agi}} nga kahilaba.',
-'yourgender' => 'Henero:',
-'gender-unknown' => 'Waray ginpasabot',
-'gender-male' => 'Lalaki',
-'gender-female' => 'Babaye',
+'yourgender' => 'Ano an karuyag mo nga pangilal-an?',
+'gender-unknown' => 'Karuyag ko diri la magyakan',
+'gender-male' => 'Hiya in nag-aayad hin mga wiki nga pakli',
+'gender-female' => 'Hiya in nag-aayad hin mga wiki nga pakli',
 'email' => 'E-mail',
 'prefs-help-realname' => 'Opsyonal an tinuod nga ngaran.
 Kun pilion mo nga ihatag, ini in gagamiton ha paghatag hin atribusyon ha imo mga buhat.',
@@ -950,6 +1111,7 @@ An imo e-mail address in diri makikit-an kun an iba nga mga gumaramit in makonta
 'prefs-signature' => 'Pirma',
 'prefs-dateformat' => 'Batakan han petsa',
 'prefs-advancedediting' => 'Abansado nga mga pagpipilian',
+'prefs-preview' => 'Pahiuna nga pakita',
 'prefs-advancedrc' => 'Abansado nga mga pagpipilian',
 'prefs-advancedrendering' => 'Abansado nga mga pagpipilian',
 'prefs-advancedsearchoptions' => 'Abansado nga mga pagpipilian',
@@ -957,10 +1119,13 @@ An imo e-mail address in diri makikit-an kun an iba nga mga gumaramit in makonta
 'prefs-displayrc' => 'Mga pirilion hiunong han ginpapakita',
 'prefs-displaysearchoptions' => 'Mga pirilion hiunong han ginpapakita',
 'prefs-displaywatchlist' => 'Mga pirilion hiunong han ginpapakita',
+'prefs-tokenwatchlist' => 'Token',
 'prefs-diffs' => 'Mga kaibhan',
+'prefs-help-prefershttps' => 'Ini nga preperensya in madulot ha sunod nimo nga paglog-in.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mail address in baga puydi',
+'email-address-validity-invalid' => 'Pagbutang hin balido nga email address',
 
 # User rights
 'userrights' => 'Pagdudumara hin mga katungod han gumaramit',
@@ -971,6 +1136,7 @@ An imo e-mail address in diri makikit-an kun an iba nga mga gumaramit in makonta
 'userrights-editusergroup' => 'Igliwat an mga hugpo hin gumaramit',
 'saveusergroups' => 'Igtipig an mga hugpo han gumaramit',
 'userrights-groupsmember' => 'Api han:',
+'userrights-groupsmember-auto' => 'Api nga daan han:',
 'userrights-reason' => 'Katadungan:',
 'userrights-no-interwiki' => '
 Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki.',
@@ -992,6 +1158,7 @@ Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki
 'group-bot-member' => 'bot',
 'group-sysop-member' => 'magdudumara',
 'group-bureaucrat-member' => '{{GENDER:$1|burokrata}}',
+'group-suppress-member' => '{{GENDER:$1|magmarangno}}',
 
 'grouppage-user' => '{{ns:project}}:Mga gumaramit',
 'grouppage-autoconfirmed' => '{{ns:project}}:Mga gumaramit nga naka-awtokompirmado',
@@ -1030,6 +1197,9 @@ Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki
 'right-editusercssjs' => 'Igliwat an kanan iba mga gumaramit nga mga paypay han CSS ngan JavaScript',
 'right-editusercss' => 'Igliwat an kanan iba mga gumaramit nga mga paypay han CSS',
 'right-edituserjs' => 'Iliwat an kanan iba mga gumaramit nga paypay han JavaScript',
+'right-viewmywatchlist' => 'Kitaa an imo kalugaringon nga talaan hin barantayon',
+'right-editmywatchlist' => 'Igliwat an imo talaan hin barantayon. Pasabot la nga an pipira ng abuhat in padayon nga madugang hin mga pakli bisan waray hini nga katungod.',
+'right-viewmyprivateinfo' => 'Kitaa an imo kalugaringon nga pribado nga datos (sugad han email address, tinuod nga ngaran)',
 'right-import' => 'Man-aangbit hin mga pakli tikang ha iba nga mga wiki',
 'right-importupload' => 'Man-aangbit hin mga pakli tikang ha uska paypay nga iginkarga-pasaka',
 'right-mergehistory' => 'Igtampo an kaagi han mga pakli',
@@ -1103,7 +1273,7 @@ Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki
 'boteditletter' => 'b',
 'rc_categories_any' => 'Bisan ano nga',
 'newsectionsummary' => '/* $1 */ bag-o nga bahin',
-'rc-enhanced-expand' => 'Igpakita an detalye (nagkikinahanglan hin JavaScript)',
+'rc-enhanced-expand' => 'Igpakita an detalye',
 'rc-enhanced-hide' => 'Igtago an mga detalye',
 'rc-old-title' => 'orihinal nga ginhimo komo "$1"',
 
@@ -1186,6 +1356,7 @@ $1',
 
 'upload-proto-error' => 'Sayop nga protocol',
 'upload-file-error' => 'Sayop ha sulod',
+'upload-misc-error' => 'Waray kasasabti nga sayop hin pagkarga-paigbaw',
 'upload-unknown-size' => 'Waray kasabti an kadako',
 'upload-http-error' => 'Mayda nahitabo nga sayop hin HTTP: $1',
 
@@ -1220,6 +1391,7 @@ $1',
 
 # Special:UploadStash
 'uploadstash-errclear' => 'An paghawan han mga paypay in diri malinamposon.',
+'uploadstash-refresh' => 'Igpalab-as utro an talaan hin mga paypay',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Diri gintutugutan makasulod',
@@ -1246,6 +1418,8 @@ $1',
 'listfiles_user' => 'Nagamit',
 'listfiles_size' => 'Kadako',
 'listfiles_count' => 'Mga bersyon',
+'listfiles-latestversion-yes' => 'Oo',
+'listfiles-latestversion-no' => 'Diri',
 
 # File description page
 'file-anchor-link' => 'Paypay',
@@ -1258,6 +1432,7 @@ $1',
 'filehist-datetime' => 'Pitsa/Oras',
 'filehist-thumb' => 'Thumbnail',
 'filehist-thumbtext' => 'Bersyon han thumbnail han $1',
+'filehist-nothumb' => 'Waray thumbnail',
 'filehist-user' => 'Gumaramit',
 'filehist-dimensions' => 'Mga dimensyon',
 'filehist-filesize' => 'Kadako han fayl',
@@ -1266,6 +1441,7 @@ $1',
 'imagelinks' => 'Mga gamit hin paypay',
 'linkstoimage' => 'An nasunod nga {{PLURAL:$1|pakli nasumpay|$1 mga pakli nasumpay}} hini nga paypay:',
 'nolinkstoimage' => 'Waray mga pakli nga nasumpay hini nga fayl.',
+'linkstoimage-redirect' => '$1 (redirecta an paypay) $2',
 'sharedupload' => 'Ini nga fayl tikang han $1 ngan puyde magamit ha iba nga mga proyekto.',
 'sharedupload-desc-there' => 'Ini nga fayl tikang han $1 ngan puyde magamit ha iba nga mga proyekto.
 Alayon pagkita han [$2 nga pakli hin pagpahayag mahitungod hini nga fayl] para hin dugang nga kasayuran.',
@@ -1311,6 +1487,13 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 # Random page
 'randompage' => 'Bisan ano nga pakli',
 
+# Random page in category
+'randomincategory-selectcategory-submit' => 'Pakadto',
+
+# Random redirect
+'randomredirect' => 'Bisan ano la nga redirect',
+'randomredirect-nopages' => 'Waray mga redirecta ha ngaran-lat\'ang nga "$1".',
+
 # Statistics
 'statistics' => 'Mga estadistika',
 'statistics-header-pages' => 'Mga estadistika han pakli',
@@ -1341,6 +1524,7 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'brokenredirects-delete' => 'paraa',
 
 'withoutinterwiki' => 'Mga pakli nga waray sumpay nga yinaknan',
+'withoutinterwiki-legend' => 'Prefix',
 'withoutinterwiki-submit' => 'Igpakita',
 
 'fewestrevisions' => 'Mga pakli nga may pinakagutiay nga mga rebisyon',
@@ -1348,6 +1532,7 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|nga byte|nga mga byte}}',
 'ncategories' => '$1 {{PLURAL:$1|nga kaarangay|nga mga kaarangay}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|mga interwiki}}',
 'nlinks' => '$1 {{PLURAL:$1|nga sumpay|nga mga sumpay}}',
 'nmembers' => '$1 {{PLURAL:$1|nga api|nga mga api}}',
 'nrevisions' => '$1 {{PLURAL:$1|nga pagliwat|nga mga pagliwat}}',
@@ -1356,7 +1541,11 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'ntransclusions' => 'gingamit ha $1 {{PLURAL:$1|nga pakli|nga mga pakli}}',
 'specialpage-empty' => 'Waray mga resulta para hini nga report.',
 'lonelypages' => 'Mga nahibulag nga mga pakli',
+'lonelypagestext' => 'An masunod nga pakli in diri nakasumpay tikang o nakatranscluderer ngada ha iba nga mga pakli ha {{SITENAME}}.',
 'uncategorizedpages' => 'Mga nagkikinahanglan hin pakli',
+'uncategorizedcategories' => 'Waray kaarangay nga mga kaarangay',
+'uncategorizedimages' => 'Waray kaarangay nga mga paypay',
+'uncategorizedtemplates' => 'Waray kaarangay nga mga batakan',
 'unusedcategories' => 'Waray kagamit nga mga kaarangay',
 'unusedimages' => 'Waray kagamit nga mga fayl',
 'popularpages' => 'Mga sikat nga pakli',
@@ -1452,6 +1641,11 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'activeusers-noresult' => 'Waray gumaramit nga nahiagian.',
 
 # Special:ListGroupRights
+'listgrouprights' => 'Mga katungod han grupo hin gumaramit',
+'listgrouprights-summary' => 'An masunod nga uska talaan hin mga grupo hin gumaramit sumala hinin nga wiki, ngan an ira nahisusumpay nga paggamit nga katungod.  Bangin may-ada [[{{MediaWiki:Listgrouprights-helppage}}|dugang nga impormasyon]] mahiunong han indibiduwal nga mga katungod.',
+'listgrouprights-key' => 'Leyenda:
+* <span class="listgrouprights-granted">Gintagan hin katungod</span>
+* <span class="listgrouprights-revoked">Waray ginhatag an katungod</span>',
 'listgrouprights-group' => 'Hugpo',
 'listgrouprights-rights' => 'Mga katungod',
 'listgrouprights-helppage' => 'Help:Mga katungod han hugpo',
@@ -1467,6 +1661,7 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 
 # Email user
 'mailnologin' => 'Waray kakadtoan nga address',
+'mailnologintext' => 'Kinahanglan nimo nga [[Special:UserLogin|nakalog-in]] ngan may-ada balido nga email address ha imo[[Special:Preferences|mga preperensya]] para makapadangat hin email ngadto ha iba nga mga gumaramit.',
 'emailuser' => 'Ig-e-mail ini nga gumaramit',
 'emailuser-title-target' => 'Ig-E-mail ini nga {{HENERO:$1|gumaramit}}',
 'emailuser-title-notarget' => 'Gumaramit han e-mail',
@@ -1603,8 +1798,8 @@ $1',
 'contributions' => 'Mga ámot ni {{GENDER:$1|User}}',
 'contributions-title' => 'Mga amot han gumaramit para ha $1',
 'mycontris' => 'Mga ámot nakon',
-'contribsub2' => 'Para ha $1 $2',
-'uctop' => '(bawbaw)',
+'contribsub2' => 'Para {{HENERO:$3|$1}} ($2)',
+'uctop' => '(yana)',
 'month' => 'Tikang ha bulan (ngan uruunhan):',
 'year' => 'Tikang ha tuig (ngan uruunhan):',
 
@@ -1885,6 +2080,7 @@ Makikit-an nimo an ginkuhaaan',
 'tooltip-undo' => '"Igpawara an ginbuhat (undo)" in nagbabalik hinin nga pagliwat ngan nabuklad hin pagliwat nga porma ha pahiuna-nga-paggawas nga kahimtang.  Natugot liwat pagdugang hin katadungan ha dinalikyat nga sumat.',
 'tooltip-preferences-save' => 'Tipiga an mga karuyag',
 'tooltip-summary' => 'Pagbutang hin dalikyat nga sumat',
+'tooltip-iwiki' => '$1 – $2',
 
 # Attribution
 'siteuser' => '{{SITENAME}} gumaramit $1',
@@ -2311,8 +2507,7 @@ An iba in daan nakatago.
 
 # Database error messages
 'dberr-header' => 'Ini nga wiki mayda problema',
-'dberr-problems' => 'Pasayloi!
-Ini nga sityo in nageeksperyensya hin mga pagkuri teknikal.',
+'dberr-problems' => 'Pasayloi! Ini nga sityo in nageeksperyensya hin mga pagkuri teknikal.',
 
 # HTML forms
 'htmlform-submit' => 'Isumite',
index e89bc19..db5ee18 100644 (file)
@@ -7,79 +7,83 @@
  * @ingroup Language
  * @file
  *
+ * @author Benojan
  * @author Hercule
  * @author O
  * @author Reedy
  * @author Wu-chinese.com
  * @author Yfdyh000
+ * @author 十弌
  */
 
 $fallback = 'zh-hans';
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'é\93¾æ\8e¥ä¸\8bå\88\92线:',
-'tog-justify' => '对齐段落',
-'tog-hideminor' => 'æ\9d¥è®¸è¿\91段辰å\85\89个æ\94¹å\8a¨é\87\8cå\90\91æ\8b¿ç»\86æ\94¹å\8a¨å\9b¥è\84±',
-'tog-hidepatrolled' => 'æ\9d¥æ\8b\89è¿\91段辰å\85\89个æ\94¹å\8a¨é\87\8cå\90\91å\9b¥è\84±å·¡æ\9f¥è¿\87æ­\87个æ\94¹å\8a¨',
-'tog-newpageshidepatrolled' => 'æ\9d¥æ\8b\89æ\96°é¡µé\9d¢å\88\97表é\87\8cå\90\91æ\8b¿å·²å·¡æ\9f¥æ­\87个页é\9d¢å\9b¥è\84±',
-'tog-extendwatchlist' => 'æ\89©å±\95ç\9b\91æ\8e§å\88\97表ï¼\8cæ\98¾ç¤ºæ\89\80æ\9c\89æ\94¹å\8a¨ï¼\8cè\80\8cå¼\97ä»\85ä»\85æ\98¯æ\9c\80è¿\91个',
+'tog-underline' => 'é\8f\88æ\8e¥ä¸\8bæ©«ç·\9a:',
+'tog-justify' => '段對齊',
+'tog-hideminor' => 'æ­¤å\9e¡è®\8aå\8c\96è£\8få\9b¥è\84«å°\8fç·¨',
+'tog-hidepatrolled' => 'æ­¤å\9e¡è®\8aå\8c\96è£\8få\9b¥è\84«å·¡è\84«ç·¨',
+'tog-newpageshidepatrolled' => 'æ\96°é \81表è£\8få\9b¥è\84«å·¡è\84«é \81',
+'tog-extendwatchlist' => 'æ\93´å¤§é\97\9c注表ï¼\8c顯示å\85¨é\83¨è®\8aå\8c\96ï¼\8cå¼\97å\96®æ¸\85æ­¤å\9e¡å\80\8b',
 'tog-usenewrc' => '使用强化版个近段辰光个改动(JavaScript)',
-'tog-numberheadings' => 'æ \87é¢\98è\87ªå\8a¨ç¼\96å\8f·',
-'tog-showtoolbar' => '显示编辑工具条(JavaScript)',
-'tog-editondblclick' => '双击个辰光编辑页面(JavaScript)',
-'tog-editsection' => '允许通过点击【编辑】链接来编辑段落',
-'tog-editsectiononrightclick' => '允许右击标题编辑段落(JavaScript)',
-'tog-showtoc' => '显示目录(针对超过三只标题个页面)',
-'tog-rememberpassword' => '来许箇台电脑上记牢我个密码(可维持$1{{PLURAL:$1|日|日}})',
-'tog-watchcreations' => '拿我创建个页面添加到我个监控列表里向',
-'tog-watchdefault' => '拿我编辑个页面添加到我个监控列表里向',
-'tog-watchmoves' => '拿我移动个页面添加到我个监控列表里向',
-'tog-watchdeletion' => '拿我删除个页面添加到我个监控列表里向',
-'tog-minordefault' => 'é»\98认æ\8b¿æ\89\80æ\9c\89ç¼\96è¾\91æ \87è®°æ\88\90å\8a\9fç»\86ç¼\96è¾\91',
-'tog-previewontop' => '来拉编辑框前头显示预览',
-'tog-previewonfirst' => '来拉首次编辑辰光显示预览',
-'tog-nocache' => '禁用页面缓存',
-'tog-enotifwatchlistpages' => '我个监控列表里向个页面有改动个说话发电子邮件通知我',
-'tog-enotifusertalkpages' => '我个对话更改辰光发邮件通知我',
-'tog-enotifminoredits' => '页é\9d¢æ\9c\89ç»\86微修æ\94¹ä¸ªè¾°å\85\89ä¹\9få\8f\91é\82®ä»¶通知我',
-'tog-enotifrevealaddr' => '来拉通知邮件列表里向显示我个邮件地址',
-'tog-shownumberswatching' => '显示监控此页个用户数目',
-'tog-oldsig' => '现在签名个预览:',
-'tog-fancysig' => '拿签名当成wiki文本(弗产生自动链接)',
-'tog-uselivepreview' => '使用实时预览(Javascript)(试验)',
-'tog-forceeditsummary' => 'ç¼\96è¾\91æ\91\98è¦\81为空个辰å\85\89提醒我',
-'tog-watchlisthideown' => '来许监控列表里向拿我个编辑囥脱佢',
-'tog-watchlisthidebots' => '来许监控列表里向拿机器人个编辑囥脱',
-'tog-watchlisthideminor' => '来拉监控列表里向拿细编辑囥脱',
-'tog-watchlisthideliu' => '来拉监控列表里拿登录用户个改动囥脱',
-'tog-watchlisthideanons' => '来拉监控列表里拿匿名用户个改动囥脱',
-'tog-watchlisthidepatrolled' => '来拉监控列表里拿已巡查过歇个改动囥脱',
-'tog-ccmeonemails' => 'æ\8b¿æ\88\91å\8f\91æ\8b¨å\88«ä¸ªç\94¨æ\88·ä¸ªé\82®ä»¶å\90\8cæ\97¶ä¹\9få\8f\91å\8fªå\89¯æ\9c¬æ\8b¨æ\88\91è\87ªå®¶',
-'tog-diffonly' => '垃拉比较两只修订版本个两样个辰光弗显示页面内容',
-'tog-showhiddencats' => '显示囥脱个分类',
+'tog-numberheadings' => 'æ¨\99é¡\8cè\87ªå\8b\95ç·¨è\99\9f',
+'tog-showtoolbar' => '顯示編傢伙欄',
+'tog-editondblclick' => '捺兩記編頁',
+'tog-editsection' => '用【編寫】鏈接編段',
+'tog-editsectiononrightclick' => '用右捺標題編段',
+'tog-showtoc' => '顯示目錄(為超過3個標題個頁)',
+'tog-rememberpassword' => '箇流覽器裏記牢我個登錄狀態(記$1{{PLURAL:$1|日|日}})',
+'tog-watchcreations' => '畀我建个页搭我传个文件加进我个关注表里去',
+'tog-watchdefault' => '畀我编个页搭文件加进我个关注表里去',
+'tog-watchmoves' => '畀我移个页搭文件加进我个监控列表里去',
+'tog-watchdeletion' => '畀我刪脫個頁搭文件加進我個關注表裏',
+'tog-minordefault' => 'é»\98èª\8dè¨\98å\85¨é\83¨ç·¨é\83½æ\98¯ç´°å\80\8b',
+'tog-previewontop' => '編寫框頭前顯示先望',
+'tog-previewonfirst' => '頭垡編寫顯示先望',
+'tog-nocache' => '弗用流览器页面慢存',
+'tog-enotifwatchlistpages' => '我關注表裏個頁要弗文件變脫到用電子信通知我',
+'tog-enotifusertalkpages' => '我用戶討論頁變脫到用電子信通知我',
+'tog-enotifminoredits' => 'é \81æ\90­æ\96\87件細編ä¹\9fç\94¨é\9b»å­\90ä¿¡通知我',
+'tog-enotifrevealaddr' => '電子信通知單裏顯示我個電子信地址',
+'tog-shownumberswatching' => '顯示關注人數',
+'tog-oldsig' => '能界签名先望:',
+'tog-fancysig' => '畀簽名當wiki文本(弗自動鏈接)',
+'tog-uselivepreview' => '用当场先望(试验)',
+'tog-forceeditsummary' => 'ç·¨è¦\81空ç\99½å\88°提醒我',
+'tog-watchlisthideown' => '關注表裏囥脫我所編',
+'tog-watchlisthidebots' => '關注表裏囥脫機器人所編',
+'tog-watchlisthideminor' => '關注表裏囥脫細編',
+'tog-watchlisthideliu' => '關注表裏囥脫已登用戶所編',
+'tog-watchlisthideanons' => '關注表裏囥脫隱姓埋名用戶所編',
+'tog-watchlisthidepatrolled' => '關注表裏囥脫巡脫編',
+'tog-ccmeonemails' => 'æ\88\91ç\99¼ç\95\80å\90\84許ç\94¨æ\88¶ç®\87é\9b»å­\90ä¿¡ä¹\9fç\99¼ä»½ç\95\80æ\88\91',
+'tog-diffonly' => '比較兩版弗樣到弗顯示頁內容',
+'tog-showhiddencats' => '顯示囥脫分類',
 'tog-norollbackdiff' => '执行退回之后弗显示两样',
+'tog-useeditwarning' => '離開編頁朆保存到提醒我',
+'tog-prefershttps' => '登录后老世用保险连接',
 
-'underline-always' => '总归',
-'underline-never' => '从来弗',
-'underline-default' => '浏览器默认',
+'underline-always' => '老世',
+'underline-never' => '老世弗',
+'underline-default' => '皮膚要弗流覽器默認',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'ç¼\96è¾\91å\8cºå­\97ä½\93æ ·式:',
-'editfont-default' => 'æµ\8fè§\88å\99¨é»\98认',
-'editfont-monospace' => '等宽字体',
-'editfont-sansserif' => 'Sans-serif字',
-'editfont-serif' => 'Serif字',
+'editfont-style' => '編寫å\8d\80å­\97é«\94樣式:',
+'editfont-default' => 'æµ\81覽å\99¨é»\98èª\8d',
+'editfont-monospace' => '樣闊字體',
+'editfont-sansserif' => 'Sans-serif字',
+'editfont-serif' => 'Serif字',
 
 # Dates
-'sunday' => '礼拜天',
-'monday' => '礼拜一',
-'tuesday' => '礼拜两',
-'wednesday' => '礼拜三',
-'thursday' => '礼拜四',
-'friday' => '礼拜五',
-'saturday' => '礼拜六',
-'sun' => '',
+'sunday' => '星期日',
+'monday' => '星期一',
+'tuesday' => '星期二',
+'wednesday' => '星期三',
+'thursday' => '星期四',
+'friday' => '星期五',
+'saturday' => '星期六',
+'sun' => '',
 'mon' => '一',
 'tue' => '二',
 'wed' => '三',
@@ -122,189 +126,215 @@ $messages = array(
 'oct' => '10月',
 'nov' => '11月',
 'dec' => '12月',
+'january-date' => '1月 $1',
+'february-date' => '2月 $1',
+'march-date' => '3月 $1',
+'april-date' => '4月 $1',
+'may-date' => '5月 $1',
+'june-date' => '6月 $1',
+'july-date' => '7月 $1',
+'august-date' => '8月 $1',
+'september-date' => '9月 $1',
+'october-date' => '10月 $1',
+'november-date' => '11月 $1',
+'december-date' => '12月 $1',
 
 # Categories related messages
-'pagecategories' => '$1å\8fªå\88\86ç±»',
-'category_header' => '“$1”分类里向个页面',
-'subcategories' => 'å­\90å\88\86ç±»',
-'category-media-header' => '"$1"分类中里向个媒体',
-'category-empty' => "''迭只分类里向还弗曾包含任何文章咾媒体。''",
-'hidden-categories' => '$1隐藏分类',
-'hidden-category-category' => '隐藏分类',
-'category-subcat-count' => '{{PLURAL:$2|此分类仅有下列一只子分类。|此分类包含下列$1只子分类,共计$2只子分类。}}',
-'category-subcat-count-limited' => '迭只分类包含下底$1只子分类。',
-'category-article-count' => '{{PLURAL:$2|迭只分类只有下底一只页面。|迭只分类包含下底$1只页面,共计$2只页面。}}',
-'category-article-count-limited' => 'è¿­å\8fªå\88\86ç±»å\8c\85å\90«ä¸\8båº\95$1å\8fªé¡µé\9d¢。',
-'category-file-count' => '{{PLURAL:$2|ç®\87å\8fªå\88\86ç±»å\8fªæ\9c\89ä¸\8båº\95ä¸\80å\8fªæ\96\87件ã\80\82|ç®\87å\8fªå\88\86ç±»å\8c\85å\90«ä¸\8båº\95$1å\8fªæ\96\87件ï¼\8cå\85±è®¡$2å\8fª文件。}}',
-'category-file-count-limited' => 'è¿­å\8fªå\88\86ç±»å\8c\85å\90«ä¸\8båº\95$1å\8fª文件。',
-'listingcontinuesabbrev' => '',
+'pagecategories' => '$1å\80\8bå\88\86é¡\9e',
+'category_header' => '“$1”分類裏個頁',
+'subcategories' => 'å\85\92å\88\86é¡\9e',
+'category-media-header' => '"$1"分類裏向個媒體',
+'category-empty' => "''箇分類裏頁搭媒體能界還嘸。''",
+'hidden-categories' => '$1囥脫分類',
+'hidden-category-category' => '囥脫分類',
+'category-subcat-count' => '{{PLURAL:$2|箇分類便只接落去許兒分類。|箇分類有$1個兒分類,攏共$2個兒分類。}}',
+'category-subcat-count-limited' => '箇分類有下向許$1個兒分類。',
+'category-article-count' => '{{PLURAL:$2|箇分類便只下向許頁。|箇分類裏有下底$1許頁,攏共$2張。}}',
+'category-article-count-limited' => 'è\83½ç\95\8cå\80\8bå\88\86é¡\9eè£\8fæ\9c\89ä¸\8båº\95$1é \81。',
+'category-file-count' => '{{PLURAL:$2|ç®\87å\88\86é¡\9e便å\8fªä¸\8bå\90\91å\80\8bæ\96\87件ã\80\82|ç®\87å\88\86é¡\9eè£\8fæ\9c\89ä¸\8båº\95$1許æ\96\87件ï¼\8cæ\94\8få\85±$2å\80\8b文件。}}',
+'category-file-count-limited' => 'è\83½ç\95\8cå\80\8bå\88\86é¡\9eè£\8fæ\9c\89ä¸\8båº\95$1å\80\8b文件。',
+'listingcontinuesabbrev' => '接落。',
 'index-category' => '索引拉许个页面',
 'noindex-category' => '弗曾索引拉许个页面',
-
-'about' => '关于',
-'article' => '内容页面',
-'newwindow' => '(垃拉新窗口里向开开来)',
-'cancel' => '取消',
-'moredotdotdot' => '还有...',
+'broken-file-category' => '有无用文件链接个页',
+
+'about' => '有關',
+'article' => '內容頁',
+'newwindow' => '(用新窗口開)',
+'cancel' => '消',
+'moredotdotdot' => '還多...',
+'morenotlisted' => '箇張表還朆完成。',
 'mypage' => '我个页面',
 'mytalk' => '我个讨论',
-'anontalk' => '箇只IP个言论',
-'navigation' => '导航',
-'and' => '&#32;搭',
+'anontalk' => '箇IP地址個話',
+'navigation' => 'å°\8e航',
+'and' => '&#32;搭',
 
 # Cologne Blue skin
-'qbfind' => '寻',
-'qbbrowse' => 'æµ\8fè§\88',
-'qbedit' => 'ç¼\96è¾\91',
-'qbpageoptions' => '迭只页面',
-'qbmyoptions' => '我个选项',
-'qbspecialpages' => 'ç\89¹æ®\8a页é\9d¢',
-'faq' => 'FAQs',
+'qbfind' => 'å°\8b',
+'qbbrowse' => 'æµ\81覽',
+'qbedit' => 'ç·¨',
+'qbpageoptions' => '箇頁',
+'qbmyoptions' => '我',
+'qbspecialpages' => 'ç\89¹æ®\8aé \81',
+'faq' => 'FAQ',
 'faqpage' => 'Project:FAQ',
 
 # Vector skin
-'vector-action-addsection' => '加入话题',
-'vector-action-delete' => 'å\88 é\99¤',
-'vector-action-move' => '移',
-'vector-action-protect' => '保',
-'vector-action-undelete' => 'å\8f\8då\88 é\99¤',
-'vector-action-unprotect' => '反保护',
-'vector-simplesearch-preference' => '打开高级搜索建议(仅适用于Vector皮肤)',
-'vector-view-create' => 'å\88\9b建',
-'vector-view-edit' => 'ç¼\96è¾\91',
-'vector-view-history' => '望史',
-'vector-view-view' => '阅读',
-'vector-view-viewsource' => 'æ\9f¥ç\9c\8bæº\90ç \81',
-'actions' => 'å\8a¨作',
-'namespaces' => 'å\90\8då­\97空é\97´',
-'variants' => '量',
-
-'errorpagetitle' => 'é\94\99误',
-'returnto' => '回转到$1。',
-'tagline' => '来自{{SITENAME}}',
-'help' => '帮å\8a©',
-'search' => '搜寻',
-'searchbutton' => '搜寻',
-'go' => '',
-'searcharticle' => '',
-'history' => '页é\9d¢æ¡£æ¡\88',
-'history_short' => '史',
-'updatedmarker' => '上趟访问以来个更新',
+'vector-action-addsection' => '加話題',
+'vector-action-delete' => 'å\88ª',
+'vector-action-move' => '移',
+'vector-action-protect' => '保',
+'vector-action-undelete' => 'å¼\97å\88ª',
+'vector-action-unprotect' => '换保护状态',
+'vector-simplesearch-preference' => '用简单搜寻条(只Vector皮肤好用)',
+'vector-view-create' => '建',
+'vector-view-edit' => 'ç·¨',
+'vector-view-history' => '望史',
+'vector-view-view' => '',
+'vector-view-viewsource' => 'æ\9c\9bæº\90碼',
+'actions' => 'å\8b\95作',
+'namespaces' => 'å\90\8då­\97空é\96\93',
+'variants' => '量',
+
+'errorpagetitle' => 'é\8c¯èª¤',
+'returnto' => '到$1。',
+'tagline' => '從{{SITENAME}}來',
+'help' => '幫å¿\99',
+'search' => '',
+'searchbutton' => '',
+'go' => '',
+'searcharticle' => '',
+'history' => 'é \81å\8f²',
+'history_short' => '史',
+'updatedmarker' => '從上趟訪問起個更新',
 'printableversion' => '打印版',
-'permalink' => '永久链接',
+'permalink' => '老世鏈接',
 'print' => '打印',
-'edit' => '编辑',
-'create' => '创建',
-'editthispage' => '编辑此页',
-'create-this-page' => '创建箇只页面',
-'delete' => '删除',
-'deletethispage' => '删除此页',
-'undelete_short' => '恢复拨删脱个$1项修订',
-'protect' => '保护',
-'protect_change' => '改动',
-'protectthispage' => '保护此页',
-'unprotect' => '解除保护',
-'unprotectthispage' => '解除此页保护',
-'newpage' => '新页面',
-'talkpage' => '讨论箇只页面',
-'talkpagelinktext' => '讨论',
-'specialpage' => '特殊页',
-'personaltools' => '个人工具',
-'postcomment' => '新段落',
-'articlepage' => '查看内容页面',
-'talk' => '讨论',
-'views' => '查看',
-'toolbox' => '家生',
-'userpage' => '查看用户页面',
-'projectpage' => '查看计划页面',
-'imagepage' => '望文件页',
-'mediawikipage' => '望讯息页',
-'templatepage' => '望模板页',
-'viewhelppage' => '望帮助页',
-'categorypage' => '望分类页',
-'viewtalkpage' => '望讨论页',
-'otherlanguages' => '别样闲话版本',
-'redirectedfrom' => '($1重定向来个)',
-'redirectpagesub' => '重定向页',
-'lastmodifiedat' => '箇只页面最近修订垃拉$1 $2。',
-'viewcount' => '迭只页面已经拨浏览过$1趟。',
-'protectedpage' => '保护拉许个页面',
-'jumpto' => '跳转到:',
-'jumptonavigation' => '导航',
-'jumptosearch' => '搜寻',
-'view-pool-error' => '弗好意思,服务器现在过载,请等歇再访问。
+'view' => '望',
+'edit' => '編',
+'create' => '建',
+'editthispage' => '編箇頁',
+'create-this-page' => '建箇頁',
+'delete' => '刪',
+'deletethispage' => '刪箇頁',
+'undeletethispage' => '弗删箇页',
+'undelete_short' => '復原消脫個$1個編寫',
+'viewdeleted_short' => '望̺$1个删脱编写',
+'protect' => '保',
+'protect_change' => '改',
+'protectthispage' => '保箇頁',
+'unprotect' => '變更保態',
+'unprotectthispage' => '變更箇頁保態',
+'newpage' => '新頁',
+'talkpage' => '探討箇頁',
+'talkpagelinktext' => '討論',
+'specialpage' => '特別頁',
+'personaltools' => '私人傢伙',
+'postcomment' => '新段',
+'articlepage' => '望內容頁',
+'talk' => '探討',
+'views' => '望',
+'toolbox' => '傢伙匣',
+'userpage' => '望用戶頁',
+'projectpage' => '望計劃頁',
+'imagepage' => '望文件頁',
+'mediawikipage' => '望信息頁',
+'templatepage' => '望模板頁',
+'viewhelppage' => '望幫忙頁',
+'categorypage' => '望分類頁',
+'viewtalkpage' => '望探討頁',
+'otherlanguages' => '別樣話版',
+'redirectedfrom' => '(從$1轉戳來)',
+'redirectpagesub' => '轉戳頁',
+'lastmodifiedat' => '箇頁此垡徠$1 $2轉改。',
+'viewcount' => '箇頁望過$1垡。',
+'protectedpage' => '受保頁',
+'jumpto' => '蹦到:',
+'jumptonavigation' => '導航',
+'jumptosearch' => '尋',
+'view-pool-error' => '對弗住,服務器能界超載。
+望箇頁個人忒多哉。
+相勞爾等瑲起再試試相趒箇頁來。
 
 $1',
+'pool-timeout' => '等锁过时',
+'pool-queuefull' => '池队列满哉',
+'pool-errorunknown' => '弗识个错误',
 
 # 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).
-'aboutsite' => '关于{{SITENAME}}',
-'aboutpage' => 'Project:关于',
+'aboutsite' => '有關{{SITENAME}}',
+'aboutpage' => 'Project:有關',
 'copyright' => '内容侪拉$1下底发布。',
-'copyrightpage' => '{{ns:project}}:ç\89\88æ\9d\83',
-'currentevents' => '近段辰光个事体',
-'currentevents-url' => 'Project:近段辰光个事体',
-'disclaimers' => '免责声明',
-'disclaimerpage' => 'Project:免责声明',
-'edithelp' => 'ç¼\96è¾\91帮å\8a©',
-'helppage' => 'Help:目',
+'copyrightpage' => '{{ns:project}}:ç\89\88æ¬\8a',
+'currentevents' => '此垡大事幹',
+'currentevents-url' => 'Project:此垡大事幹',
+'disclaimers' => '甮追問',
+'disclaimerpage' => 'Project:甮追問',
+'edithelp' => '編幫å¿\99',
+'helppage' => 'Help:目',
 'mainpage' => '封面',
 'mainpage-description' => '封面',
-'policy-url' => 'Project:政策',
-'portal' => '社å\8cºé\97¨è\8d¡',
-'portal-url' => 'Project:社å\8cºé\97¨è\8d¡',
-'privacy' => 'é\9a\90ç§\81æ\94¿ç­\96',
-'privacypage' => 'Project:é\9a\90ç§\81æ\94¿ç­\96',
+'policy-url' => 'Project:策略',
+'portal' => '社å\8d\80è\87ºé\96\80',
+'portal-url' => 'Project:社å\8d\80è\87ºé\96\80',
+'privacy' => 'é\9a±ç§\81ç­\96ç\95¥',
+'privacypage' => 'Project:é\9a±ç§\81ç­\96ç\95¥',
 
 'badaccess' => '权限',
-'badaccess-group0' => '箇只操作是弗允许个。',
-'badaccess-groups' => '侬刚刚只请求只有{{PLURAL:$2|迭只}}用户组个用户再好使用:$1',
+'badaccess-group0' => '弗準爾做箇操作。',
+'badaccess-groups' => '爾個請求要徠{{PLURAL:$2|箇個}}用戶組裏好用:$1。',
 
-'versionrequired' => '需要$1版本个MediaWiki',
-'versionrequiredtext' => '要$1版本个MediaWiki再好使用此页。参见[[Special:Version|版本页]]。',
+'versionrequired' => '需要$1版MediaWiki',
+'versionrequiredtext' => '要$1版個MediaWiki好用箇頁。望[[Special:Version|版本頁]]。',
 
-'ok' => '确认',
+'ok' => '',
 'retrievedfrom' => '取自“$1”',
-'youhavenewmessages' => '侬有$1($2)。',
-'newmessageslink' => '新讯息',
-'newmessagesdifflink' => '上趟更改',
-'youhavenewmessagesmulti' => '侬垃拉$1有新讯息',
-'editsection' => '编辑',
+'youhavenewmessages' => '爾有$1($2)。',
+'newmessageslink' => '新信息',
+'newmessagesdifflink' => '此垡更改',
+'newmessageslinkplural' => '{{PLURAL:$1|新消息}}',
+'newmessagesdifflinkplural' => '此垡̺{{PLURAL:$1|变化}}',
+'youhavenewmessagesmulti' => '爾徠$1裏有新信息',
+'editsection' => '編',
 'editold' => '编辑',
-'viewsourceold' => '查看源码',
-'editlink' => '编辑',
-'viewsourcelink' => '查看源码',
-'editsectionhint' => '编辑段落: $1',
-'toc' => '目录',
-'showtoc' => '显示',
-'hidetoc' => '囥脱',
-'thisisdeleted' => '查看或者恢复$1?',
-'viewdeleted' => '望望$1看?',
-'restorelink' => '$1只删脱个版本',
-'feedlinks' => '订阅:',
-'feed-invalid' => '订阅类型无效。',
-'feed-unavailable' => '暂时弗支持联合订阅',
-'site-rss-feed' => '$1个RSS订阅',
-'site-atom-feed' => '$1个Atom订阅',
-'page-rss-feed' => '“$1”个RSS订阅',
-'page-atom-feed' => '"$1" 个Atom feed',
-'red-link-title' => '$1 (还弗曾撰写)',
+'viewsourceold' => '望源碼',
+'editlink' => '編',
+'viewsourcelink' => '望源碼',
+'editsectionhint' => '編段: $1',
+'toc' => '目錄',
+'showtoc' => '顯示',
+'hidetoc' => '囥脫',
+'thisisdeleted' => '望要弗復原$1?',
+'viewdeleted' => '$1望望相?',
+'restorelink' => '$1個刪脫個版本',
+'feedlinks' => '訂閱:',
+'feed-invalid' => '訂閱類型無效。',
+'feed-unavailable' => '目前弗支持聯訂',
+'site-rss-feed' => '$1個RSS訂閱',
+'site-atom-feed' => '$1個Atom訂閱',
+'page-rss-feed' => '“$1”個RSS訂閱',
+'page-atom-feed' => '"$1" 個Atom訂閱',
+'red-link-title' => '$1 (嘸箇頁)',
+'sort-descending' => '倒排',
+'sort-ascending' => '顺排',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => '文章',
-'nstab-user' => 'ç\94¨æ\88·é¡µé\9d¢',
-'nstab-media' => '媒体页面',
-'nstab-special' => '特殊页面',
-'nstab-project' => '项ç\9b®é¡µé\9d¢',
+'nstab-main' => '',
+'nstab-user' => 'ç\94¨æ\88¶é \81',
+'nstab-media' => '媒體頁',
+'nstab-special' => '特別頁',
+'nstab-project' => 'é \85ç\9b®é \81',
 'nstab-image' => '文件',
-'nstab-mediawiki' => '息',
+'nstab-mediawiki' => '息',
 'nstab-template' => '模板',
-'nstab-help' => '帮å\8a©é¡µé\9d¢',
-'nstab-category' => '分',
+'nstab-help' => '幫å¿\99é \81',
+'nstab-category' => '分',
 
 # Main script and global functions
-'nosuchaction' => '无没箇能介个操作',
-'nosuchactiontext' => 'URL指定个命令无效。侬作兴拿URL输错脱哉,要嚜点击仔错误个链接。箇只错误亦有可能是由{{SITENAME}}所使用软件自家个错误导致个。',
-'nosuchspecialpage' => 'å\91\92没ç®\87å\8fªç\89¹æ®\8a页é\9d¢',
+'nosuchaction' => '嘸能操作',
+'nosuchactiontext' => 'URL指定個命令無效。爾嘸數畀URL打錯哉,要勿点击仔出錯個鏈接。也嘸數{{SITENAME}}用個軟件本身出錯緣故。',
+'nosuchspecialpage' => 'å\98¸è\83½å\80\8bç\89¹å\88¥é \81',
 'nospecialpagetext' => '<strong>侬请求个特殊页面无效。</strong>
 
 参考特殊页面列表[[Special:SpecialPages| {{int:specialpages}}]]。',
@@ -312,8 +342,14 @@ $1',
 # General errors
 'error' => '错误',
 'databaseerror' => '数据库错误',
+'databaseerror-text' => '數據庫討信出錯。
+嘸數說明軟件裏有一個bug。',
+'databaseerror-textcl' => '數據庫討信出錯。',
+'databaseerror-query' => '討信:$1',
+'databaseerror-function' => '功能ː $1',
+'databaseerror-error' => '出錯:$1',
 'laggedslavemode' => '警告: 页面可能弗包含最近个更新。',
-'readonly' => 'æ\95°æ\8d®åº\93é\94\81å®\9a',
+'readonly' => 'æ\95¸æ\93\9a庫é\8e\96ç\89¢',
 'enterlockreason' => '请输入锁定个原因,包括预计解锁个辰光',
 'readonlytext' => '数据库目前禁止输入新内容及更改,
 箇蛮有可能是因为数据库拉许维修,完成仔即可恢复。
@@ -342,9 +378,11 @@ $1',
 'badarticleerror' => '呒处垃拉箇只页面进行箇只操作。',
 'cannotdelete' => '无处删除页面或图像 "$1"。
 渠作兴已经拨别人家删除脱哉。',
+'cannotdelete-title' => '"$1"箇页删弗爻',
+'no-null-revision' => '"$1"页呒处建新个修改',
 'badtitle' => '该只标题弗来三',
 'badtitletext' => '所请求页面个标题是无效个、弗存在,跨语言或跨wiki链接个标题错误。渠作兴包含一只或多只弗好用拉标题里向字符。',
-'perfcached' => 'ä¸\8båº\95æ\98¯ç¼\93å­\98æ\95°æ\8d®ï¼\8cç®\87å\92¾ä½\9cå\85´å¼\97æ\98¯é¡¶æ\96°ä¸ª. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
+'perfcached' => 'ä¸\8bå\90\91æ\98¯ç¼\93å­\98æ\95°æ\8d®ï¼\8cå\91\92æ\95°å¼\97æ\98¯æ\9c\80æ\96°ä¸ªã\80\82 A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
 'perfcachedts' => '下头是缓存数据,压末一趟更新辰光是$1。 A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
 'querypage-no-updates' => '当前禁止对此页面进行更新。箇搭个数据弗好立即刷新。',
 'wrong_wfQuery_params' => '错误个参数拨传递到 wfQuery()<br />
@@ -353,15 +391,28 @@ $1',
 'viewsource' => '源码',
 'actionthrottled' => '动作已压制',
 'actionthrottledtext' => '基于反垃圾链接个考量,限制垃拉短时间内多趟重复箇只操作。请过脱几分钟再试试看。',
-'protectedpagetext' => '箇只页面已经锁定,以防编辑。',
+'protectedpagetext' => '箇页锁牢定,防编搭各许操作。',
 'viewsourcetext' => '侬可以查看搭仔复制箇只页面个源码:',
-'protectedinterface' => '箇只页面提供软件个界面文本。为著防止滥用咾已经锁定。',
-'editinginterface' => "'''警告:''' 侬垃许编辑个页面是用于提供软件个界面文本。改变此页会得影响其他用户个界面外观。假使要翻译,请考虑使用 [//translatewiki.net/wiki/Main_Page?setlang=zh-hans translatewiki.net],一个用得来为MediaWiki软件本地化个计划。",
+'viewyourtext' => "你好望也好畀'''你编个'''复制到箇页:",
+'protectedinterface' => '箇页为箇维基个软件提供界面文本,锁牢定防乱用。
+加改全部维基个译文,用[//translatewiki.net/ translatewiki.net],MediaWiki软件个本地化计划。',
+'editinginterface' => "'''警告:''' 侬来里编写个页面是畀软件用个界面文本。箇页变化会影响各许人个界面样子。假使要畀全部维基翻译,用 [//translatewiki.net/wiki/Main_Page?setlang=zh-hans translatewiki.net],MediaWiki软件个本地化计划。",
 'cascadeprotected' => '箇只页面拨保护拉许,因为箇只页面拨下底已经标注“联锁保护”个{{PLURAL:$1|一只|多只}}被保护页面包含:
 $2',
 'namespaceprotected' => "侬无没编辑'''$1'''名字空间里向页面个权限。",
+'customcssprotected' => '箇CSS页你呒处编,箇页有各许用户个私人设置。',
+'customjsprotected' => '箇JavaScript页你呒处编,箇页有各许用户个私人设置。',
+'mycustomcssprotected' => '箇CSS页你呒处编。',
+'mycustomjsprotected' => '箇JavaScript页你呒处编。',
+'myprivateinfoprotected' => '你个私人信息你呒处编。',
+'mypreferencesprotected' => '你个私人偏好你呒处编。',
 'ns-specialprotected' => '特殊页编辑是弗来三个。',
 'titleprotected' => "箇只标题已经拨[[User:$1|$1]]保护以防止创建。理由是''$2''。",
+'filereadonlyerror' => '"$1"文件呒处改,文件存勒 "$2" 是只读模式。管理员考虑畀渠锁牢个理由是:"$3"。',
+'invalidtitle-knownnamespace' => '非法个题目头,有名字空间$2搭文字$3',
+'invalidtitle-unknownnamespace' => '非法个题目头,有弗识个数字$1搭文字$2',
+'exception-nologin' => '朆登录',
+'exception-nologin-text' => '箇页要勿箇操作需要你登录到箇wiki裏来。',
 
 # Virus scanner
 'virus-badscanner' => "设置问题:未知个反病毒扫描器:''$1''",
@@ -369,15 +420,25 @@ $2',
 'virus-unknownscanner' => '未知个反病毒扫描器:',
 
 # Login and logout pages
-'logouttext' => "侬已经登出哉。'''
+'logouttext' => "'''你侬登出哉。'''
 
-侬可以继续匿名使用{{SITENAME}} ,也可以再次以相同或者两样个用户名<span class='plainlinks'>[$1 登录]</span>。
-注意,有眼页面作兴还是会搭侬登出前头一样显示,一脚到侬清除浏览器缓存。",
+部份页面呒数还会显示你侬还登勒里,到你侬畀浏览器慢存清爻止。",
+'welcomeuser' => '走来赞,$1!',
+'welcomecreation-msg' => '你个账号建起来哉。
+覅忘记哉走去改你个[[Special:Preferences|{{SITENAME}}个私人偏好]]。',
 'yourname' => '用户名:',
+'userlogin-yourname-ph' => '打进你侬个用户名',
+'createacct-another-username-ph' => '打进用户名',
 'yourpassword' => '密码:',
+'userlogin-yourpassword-ph' => '密码打进去',
+'createacct-yourpassword-ph' => '密码打进去',
 'yourpasswordagain' => '再拍一遍密码:',
+'createacct-yourpasswordagain-ph' => '密码打一遍添',
 'remembermypassword' => '垃拉箇部电脑上记牢我个密码(可维持$1{{PLURAL:$1|日|日}})',
+'userlogin-remembermypassword' => '长期徕线里',
+'userlogin-signwithsecure' => '用保险链接',
 'yourdomainname' => '侬个域名:',
+'password-change-forbidden' => '箇wiki裏呒处改你侬个密码。',
 'externaldberror' => '迭个作兴是由于验证数据库错误或者侬拨禁止更新侬个外部账号。',
 'login' => '登录',
 'nav-login-createaccount' => '登录 / 开户',
@@ -387,19 +448,47 @@ $2',
 'logout' => '登出',
 'userlogout' => '登出',
 'notloggedin' => '弗曾登录',
+'userlogin-noaccount' => '账号还呒?',
+'userlogin-joinproject' => '加进{{SITENAME}}',
 'nologin' => "侬还呒没账户?'''$1'''。",
 'nologinlink' => '新开户头',
 'createaccount' => '新开户头',
 'gotaccount' => "已经有仔帐号哉? '''$1'''。",
 'gotaccountlink' => '登录',
-'createaccountmail' => '通过 e-mail',
+'userlogin-resetlink' => '忘记登录细节?',
+'userlogin-resetpassword-link' => '转设密码',
+'helplogin-url' => '帮助ː登进',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|登进帮忙]]',
+'userlogin-loggedin' => '你侬已经以{{GENDER:$1|$1}}登进。用下向个表以别样身份登进。',
+'userlogin-createanother' => '建别样账号',
+'createacct-join' => '下向打进你侬个信息。',
+'createacct-another-join' => '下向打进新账号个信息。',
+'createacct-emailrequired' => '电子信地址',
+'createacct-emailoptional' => '电子信地址(填弗填由你)',
+'createacct-email-ph' => '畀你侬个电子信地址打进去',
+'createacct-another-email-ph' => '电子信地址打进去',
+'createaccountmail' => '用临时随便密码发到指定个电子信地址',
+'createacct-realname' => '真名字(随意)',
 'createaccountreason' => '理由:',
+'createacct-reason' => '理由:',
+'createacct-reason-ph' => '为何物建别样账号',
+'createacct-captcha' => '保险检查',
+'createacct-imgcaptcha-ph' => '畀上向望着个字打箇里',
+'createacct-submit' => '建你侬个账号',
+'createacct-another-submit' => '建别样账号',
+'createacct-benefit-heading' => '{{SITENAME}} 是搭你侬样个人建起个。',
+'createacct-benefit-body1' => '{{PLURAL:$1|编写}}',
+'createacct-benefit-body2' => '{{PLURAL:$1|页}}',
+'createacct-benefit-body3' => '此垡 {{PLURAL:$1|出力个人}}',
 'badretype' => '倷输入个密码搭倪个档案弗配。',
-'userexists' => 'ç®\87å\8fªIDå·²ç»\8fæ\8b¨æ³¨å\86\8cè\84±å\93\89ã\80\82请é\87\8dæ\96°å\86\8dæ\8b£ä¸ªç\94¨æ\88·å\90\8d。',
+'userexists' => 'ç\94¨æ\88¶å\90\8dæ\9c\89人ç\94¨å\93\89ã\80\82ç\9b¸å\8b\9eç\88¾æ\8f\80å\88¥æ¨£å\90\8då­\97。',
 'loginerror' => '登录错误',
+'createacct-error' => '建账号出错',
 'createaccounterror' => '无法建立账户:$1',
 'nocookiesnew' => '侬个账户创建成功!Cookies像煞拨侬关拉许,请开开来再登录。',
 'nocookieslogin' => '本站利用Cookies进行用户登录,侬个Cookies像煞关拉许,请开开来再登录。',
+'nocookiesfornew' => '用户账号朆建起,我里确认弗了渠个原因。
+你要准定cookies是开勒里个,刷新箇页试试凑相。',
 'noname' => '用户名无效。',
 'loginsuccesstitle' => '登录成功',
 'loginsuccess' => "'''侬现在以 \"\$1\" 个身份登录到{{SITENAME}}。 '''",
@@ -411,6 +500,7 @@ $2',
 'wrongpasswordempty' => '密码为空,请重试。',
 'passwordtooshort' => '密码起码要$1个字符。',
 'password-name-match' => '密码弗好搭户名一样。',
+'password-login-forbidden' => '用箇名字搭密码是弗准个。',
 'mailmypassword' => '拿新密码寄拨我',
 'passwordremindertitle' => '{{SITENAME}} 个临时新密码',
 'passwordremindertext' => '有人(作兴是侬,来自IP地址$1)已经请求{{SITENAME}}个新密码($4)。
@@ -426,7 +516,7 @@ $2',
 请收着仔再登录。',
 'blocked-mailpassword' => '侬个IP地址处于查封状态,弗允许编辑,为仔安全起见,密码恢复功能已经禁用。',
 'eauthentsent' => '一封确认信已经发送到指定个e-mail地址。垃拉发送其它邮件到箇只账户之前,侬必须首先按照箇封信里向个指示确认箇只电子邮箱真实有效。',
-'throttled-mailpassword' => '密码提醒已经垃拉最近$1个钟头里向发送过歇。为仔安全起见,垃拉$1个钟头里向只好发送一个密码提醒。',
+'throttled-mailpassword' => '密码转设电子信徕最近$1个钟头里发畀你侬哉。保险点,密码转设电子信$1个钟头只一垡好发。',
 'mailerror' => '发送邮件错误:$1',
 'acct_creation_throttle_hit' => '弗好意思,使用箇只IP个访客已经创建仔$1只账号,迭个是箇段辰光里向所允许个最大值。箇咾使用箇只IP个地址个访客暂时弗好再创建账户。',
 'emailauthenticated' => '侬个电子邮箱地址已经垃拉$2 $3确认有效。',
@@ -434,15 +524,18 @@ $2',
 'noemailprefs' => '指定一只电子邮箱地址以使用箇眼功能。',
 'emailconfirmlink' => '确认邮箱地址',
 'invalidemailaddress' => '邮箱地址格式弗对,请输入正确个邮箱地址或清空输入框。',
+'cannotchangeemail' => '箇wiki里账号电子信地址呒处改。',
+'emaildisabled' => '箇网站电子信呒处发。',
 'accountcreated' => '户头开好哉',
-'accountcreatedtext' => '$1 个户头已经建立哉。',
+'accountcreatedtext' => '[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]])个账号建好哉。',
 'createaccount-title' => '垃拉{{SITENAME}}里向创建新账户',
 'createaccount-text' => '有人垃拉{{SITENAME}}里向利用侬个邮箱创建仔一只叫 "$2" 个新帐户($4),密码是 "$3" 。侬应该立即登录并更改密码。
 
 如果箇个账户创建错误个说话,侬可以忽略此信息。',
 'usernamehasherror' => '用户名里向弗好包含hash字符',
-'login-throttled' => '登录尝试忒多哉。
-请等脱歇再试。',
+'login-throttled' => '你侬试登忒多次哉。
+等 $1 再试试凑相。',
+'login-abort-generic' => '登录弗成功 - 流产',
 'loginlanguagelabel' => '语言:$1',
 'suspicious-userlogout' => '侬登出个要求已经拨回头脱,因为渠可能是由已损坏个浏览器或者缓存代理传送个。',
 
@@ -454,8 +547,8 @@ $2',
 'newpassword' => '新密码:',
 'retypenew' => '再打一遍新密码:',
 'resetpass_submit' => '设置密码再登录',
-'changepassword-success' => 'å¯\86ç \81ä¿®æ\94¹æ\88\90å\8a\9f
-现在垃许登录...',
+'changepassword-success' => 'å¯\86碼æ\94¹å¥½å\93\89
+能界登錄當中...',
 'resetpass_forbidden' => '密码弗好更改',
 'resetpass-no-info' => '侬必须登录仔再好直接进入箇只页面。',
 'resetpass-submit-loggedin' => '更改密码',
@@ -464,6 +557,9 @@ $2',
 侬作兴已经成功拿密码改脱,或者已经请求一个新个临时密码。',
 'resetpass-temp-password' => '临时密码:',
 
+# Special:PasswordReset
+'passwordreset-username' => '用戶名',
+
 # Edit page toolbar
 'bold_sample' => '黑体文本',
 'bold_tip' => '黑体文本',
@@ -683,8 +779,8 @@ $3封禁个原因是''$2''",
 'histlegend' => '选择比较版本:标记要比较个两只版本,回车或者揿页面底里个揿钮。<br /> 图例:(当前) = 搭当前版本有啥两样, (上个) = 搭上个版本有啥两样,小 = 小改动。',
 'history-fieldset-title' => '浏览历史',
 'history-show-deleted' => '仅限已经删除个',
-'histfirst' => '顶早',
-'histlast' => '顶晏',
+'histfirst' => '最老',
+'histlast' => '最新',
 'historysize' => '($1字节)',
 'historyempty' => '(空)',
 
@@ -891,7 +987,7 @@ $1",
 
 # Preferences page
 'preferences' => '偏好',
-'mypreferences' => '个人设置',
+'mypreferences' => '偏好设定',
 'prefs-edits' => '编辑数量:',
 'prefsnologin' => '朆登录',
 'prefsnologintext' => '侬必须先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登录]</span>再好设置个人参数。',
@@ -914,7 +1010,7 @@ $1",
 'prefs-rendering' => '外观',
 'saveprefs' => '保存',
 'resetprefs' => '清除弗曾保存个更改',
-'restoreprefs' => '恢复所有默认设置',
+'restoreprefs' => '复原全部默认设定',
 'prefs-editing' => '编辑',
 'rows' => '行:',
 'columns' => '列:',
@@ -941,7 +1037,7 @@ $1",
 'timezoneregion-atlantic' => '大西洋',
 'timezoneregion-australia' => '澳洲',
 'allowemail' => '接受别个用户个电子邮件',
-'prefs-searchoptions' => '搜索选项',
+'prefs-searchoptions' => '搜',
 'prefs-namespaces' => '名字空间',
 'default' => '默认',
 'prefs-files' => '文件',
@@ -952,6 +1048,9 @@ $1",
 'yourlanguage' => '语言:',
 'yournick' => '绰号:',
 'badsig' => '无效原始签名;检查 HTML 标签。',
+'gender-unknown' => '我弗想講',
+'gender-male' => '佢编wiki页',
+'gender-female' => '姖编写wiki页',
 'email' => '电子邮件',
 'prefs-help-email' => '电子邮件是备选个,垃拉侬忘记密码个情况下头可以用得来重置密码。
 侬也可以让别人家通过侬个用户页或者讨论页来联系侬。',
@@ -974,6 +1073,22 @@ $1",
 'grouppage-sysop' => '{{ns:project}}:管理员',
 'grouppage-bureaucrat' => '{{ns:project}}:行政员',
 
+# Rights
+'right-read' => '閱讀頁面',
+'right-edit' => '編頁面',
+'right-createpage' => '做頁面(弗是討論頁面)',
+'right-createtalk' => '做討論頁',
+'right-createaccount' => '做新用戶帳號',
+'right-minoredit' => '標記編寫是小編寫',
+'right-move' => '移頁面',
+'right-movefile' => '移文件',
+'right-upload' => '傳文件',
+'right-reupload' => '文件以舊換新',
+'right-delete' => '刪頁面',
+'right-browsearchive' => '搜尋已刪頁',
+'right-viewmywatchlist' => '望自己個關注表',
+'right-sendemail' => '發郵件畀各許人',
+
 # Special:Log/newusers
 'newuserlogpage' => '用户创建日志',
 
@@ -981,14 +1096,40 @@ $1",
 'rightslog' => '用户权限日志',
 
 # Associated actions - in the sentence "You do not have permission to X"
+'action-read' => '讀箇頁',
 'action-edit' => '编辑箇只页面',
+'action-createpage' => '做新頁',
+'action-createtalk' => '做討論頁',
+'action-minoredit' => '標小編寫',
+'action-move' => '移箇頁',
+'action-move-subpages' => '移箇頁搭兒頁',
+'action-movefile' => '移箇文件',
+'action-upload' => '傳箇文件',
+'action-reupload' => '箇文件以舊換新',
+'action-upload_by_url' => '從URL傳文件',
+'action-delete' => '刪箇頁',
+'action-deleterevision' => '刪箇版本',
+'action-deletedhistory' => '望箇頁個刪史',
+'action-browsearchive' => '尋已刪頁',
+'action-undelete' => '弗刪箇頁',
+'action-userrights' => '編全部用戶權',
+'action-userrights-interwiki' => '編用戶徠各許維基個權',
+'action-siteadmin' => '數據庫鎖牢要勿開鎖',
+'action-sendemail' => '發郵件',
+'action-editmywatchlist' => '編關注表',
+'action-viewmywatchlist' => '望關注表',
+'action-viewmyprivateinfo' => '望私人信息',
+'action-editmyprivateinfo' => '編私人信息',
 
 # Recent changes
 'nchanges' => '$1趟更改',
+'enhancedrc-history' => '歷史',
 'recentchanges' => '近段辰光个改动',
 'recentchanges-legend' => '近段辰光个改动选项',
 'recentchanges-summary' => '登该个页面浪跟踪最近对维基百科个改动。',
 'recentchanges-feed-description' => '跟踪此订阅垃拉 wiki 高头个最近更改。',
+'recentchanges-label-newpage' => '此垡編寫開新頁',
+'recentchanges-label-minor' => '箇是小編寫',
 'rcnote' => "下底是垃拉$4 $5,最近'''$2'''日天里向个'''$1'''趟最近更改记录:",
 'rclistfrom' => '显示 $1 以来个新改动',
 'rcshowhideminor' => '$1小改动',
@@ -1005,7 +1146,7 @@ $1",
 'newpageletter' => '新',
 'boteditletter' => '机',
 'newsectionsummary' => '/* $1 */ 新段落',
-'rc-enhanced-expand' => '显示细节(需要JavaScript支持)',
+'rc-enhanced-expand' => '展示零碎',
 'rc-enhanced-hide' => '拿细节囥脱',
 
 # Recent changes linked
@@ -1021,6 +1162,7 @@ $1",
 # Upload
 'upload' => '上载文物',
 'uploadbtn' => '上载文件',
+'reuploaddesc' => '弗傳,轉到傳表單',
 'uploadnologin' => '朆登录',
 'uploadnologintext' => '倷板定要[[Special:UserLogin|登录]]仔再好上载文件。',
 'uploaderror' => '上载出错',
@@ -1040,13 +1182,52 @@ $1",
 'filesource' => '来源:',
 'uploadedfiles' => '已经上载个文件',
 'ignorewarning' => '弗管警告,随便哪亨要保存文件。',
+'ignorewarnings' => '任何警告都弗管',
+'minlength1' => '文件名至少一個字。',
+'illegalfilename' => '“$1”文件名裏有嘸處當頁題目個字。文件名轉改再傳上來試試相。',
+'filename-toolong' => '文件名嘸處比240字節長。',
+'filename-tooshort' => '文件名忒短。',
+'filetype-banned' => '弗準箇類型個文件。',
+'illegal-filename' => '弗準箇文件名。',
+'overwrite' => '弗準文件以舊換新。',
+'unknown-error' => '弗識個錯誤發生。',
+'tmp-create-error' => '臨時文件嘸處造。',
+'tmp-write-error' => '寫臨時文件出錯。',
+'large-file' => '文件名最好休要比$1長;
+箇文件有$2。',
+'largefileserver' => '箇文件比服務器配置個允許值大。',
+'windows-nonascii-filename' => '箇wiki弗支持文件名用特別個字符。',
 'uploadwarning' => '上载警告',
 'savefile' => '保存文件',
 'uploadedimage' => '上载 "[[$1]]"',
 'sourcefilename' => '源文件:',
 'destfilename' => '目标文件名:',
-'watchthisupload' => '监控该只页面',
+'watchthisupload' => '關注箇文件',
 'upload-success-subj' => '上载成功哉',
+'upload-failure-subj' => '傳個問題',
+'upload-warning-subj' => '傳個警告',
+
+'upload-misc-error' => '弗識個傳錯誤',
+'upload-unknown-size' => '弗識大細',
+
+# File backend
+'backend-fail-delete' => '文件“$1”刪弗爻。',
+'backend-fail-move' => '嘸處畀“$1”移到“$2”。',
+'backend-fail-opentemp' => '臨時文件開弗爻。',
+'backend-fail-writetemp' => '嘸處寫到臨時文件。',
+'backend-fail-closetemp' => '嘸處關臨時文件',
+'backend-fail-read' => '嘸處讀“$1”文件。',
+'backend-fail-create' => '嘸處寫“$1”文件。',
+'backend-fail-maxsize' => '嘸處寫"$1"文件,比{{PLURAL:$2|one byte|$2 bytes}}大之故。',
+
+# Lock manager
+'lockmanager-notlocked' => '“$1”朆鎖牢,嘸處開鎖。',
+
+# img_auth script messages
+'img-auth-nofile' => '“$1”文件嘸。',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6' => 'URL走弗進。',
 
 # Special:ListFiles
 'listfiles_search_for' => '寻图片名字:',
@@ -1057,6 +1238,8 @@ $1",
 'listfiles_user' => '用户',
 'listfiles_size' => '尺寸 (bytes)',
 'listfiles_description' => '描述',
+'listfiles-latestversion-yes' => '正是',
+'listfiles-latestversion-no' => '弗是',
 
 # File description page
 'file-anchor-link' => '文物',
@@ -1071,10 +1254,12 @@ $1",
 'filehist-thumbtext' => '于$1个缩图版本',
 'filehist-user' => '用户',
 'filehist-dimensions' => '维度',
+'filehist-filesize' => '文件大細',
 'filehist-comment' => '备注',
 'imagelinks' => '文件链接',
 'linkstoimage' => '下头$1只页面链接到本文件:',
 'nolinkstoimage' => '呒拨页面链接到该只文件。',
+'linkstoimage-redirect' => '$1(文件轉戳到)$2',
 'sharedupload' => '箇只文件来源于$1,渠作兴垃拉其它项目当中拨应用。',
 'uploadnewversion-linktext' => '上载该文件个新版',
 
@@ -1089,6 +1274,9 @@ $1",
 'filedelete-legend' => '删除文物',
 'filedelete-comment' => '理由:',
 'filedelete-submit' => '删除',
+'filedelete-reason-otherlist' => '別樣原因',
+'filedelete-edit-reasonlist' => '編刪個原因',
+'filedelete-maintenance-title' => '文件刪弗爻',
 
 # MIME search
 'download' => '下载',
@@ -1096,19 +1284,31 @@ $1",
 # List redirects
 'listredirects' => '重定向列表',
 
+# Unused templates
+'unusedtemplateswlh' => '別樣鏈接',
+
 # Random page
 'randompage' => '随便望望',
 
+# Random page in category
+'randomincategory' => '分類裏個隨便一頁',
+'randomincategory-selectcategory-submit' => '去',
+
 # Statistics
 'statistics' => '统计',
 'statistics-header-users' => '用户资料',
 'statistics-users-active' => '活跃用户',
 
+'pageswithprop-submit' => '去',
+
 'brokenredirects' => '坏脱个重定向',
-'brokenredirectstext' => 'ä¸\8båº\95个é\87\8då®\9aå\90\91é\93¾å\88°å¼\97å­\98å\9c¨ä¸ªé¡µé\9d¢:',
+'brokenredirectstext' => 'ä¸\8bå\90\91å\80\8bè½\89æ\88³é\8f\88æ\8e¥å\88°æ\9c\86è¦\8bå\80\8bé \81é\9d¢ï¼\9a',
 'brokenredirects-edit' => '编辑',
 'brokenredirects-delete' => '删除',
 
+'withoutinterwiki' => '嘸語言鏈接個頁面',
+'withoutinterwiki-summary' => '下向許頁面朆鏈接到別樣語言版本。',
+
 # Miscellaneous special pages
 'nbytes' => '$1字节',
 'nmembers' => '$1只成员',
@@ -1125,6 +1325,7 @@ $1",
 'protectedpages' => '已保护页面',
 'protectedtitles' => '已保护个标题',
 'listusers' => '用户列表',
+'listusers-creationsort' => '照建個日子排',
 'newpages' => '新页面',
 'newpages-username' => '用户名:',
 'ancientpages' => '顶顶老个页面',
@@ -1139,8 +1340,8 @@ $1",
 'booksources-go' => '转到',
 
 # Special:Log
-'specialloguserlabel' => 'ç\94¨æ\88·:',
-'speciallogtitlelabel' => '标题:',
+'specialloguserlabel' => 'ç\94¨æ\88¶ï¼\9a',
+'speciallogtitlelabel' => '目標(標題要弗用戶):',
 'log' => '记录',
 
 # Special:AllPages
@@ -1164,35 +1365,46 @@ $1",
 
 # Special:LinkSearch
 'linksearch' => '外部链接',
+'linksearch-ns' => '名字空間:',
+'linksearch-ok' => '搜尋',
 
 # Special:ListUsers
 'listusers-submit' => '显示',
+'listusers-noresult' => '嘸箇用戶。',
+
+# Special:ActiveUsers
+'activeusers' => '活躍用戶表',
 
 # Special:ListGroupRights
 'listgrouprights-members' => '(成员列表)',
 
 # Email user
 'emailuser' => '发E-mail拨该个用户',
-'emailfrom' => '从',
-'emailto' => '发拨',
-'emailsubject' => '主题',
+'emailuser-title-notarget' => '郵箱用戶',
+'emailpage' => '郵箱用戶',
+'emailfrom' => '從',
+'emailto' => '發畀',
+'emailsubject' => '主題',
 'emailmessage' => '信息',
 'emailsend' => '发罢',
+'emailccme' => '我個信息發份畀我',
 'emailsent' => '电子邮件发出去哉',
 'emailsenttext' => '倷个电子邮件讯息已经拨发送哉。',
 
 # Watchlist
-'watchlist' => '监控列表',
-'mywatchlist' => '我个监控列表',
+'watchlist' => '關注表',
+'mywatchlist' => '我個關注表',
 'nowatchlist' => '倷个监控列表是空个。',
 'watchnologin' => '朆登录',
-'addedwatchtext' => "该个页面 \"[[:\$1]]\" 已经加到侬个[[Special:Watchlist|监控列表]]哉。
-将来对该页面个改动搭仔搭界个讲张页个改动会列表垃该面,并且页面会垃拉[[Special:RecentChanges|近段辰光个改变列表]]里向显示成功'''黑体''',实梗好外加便当拿渠拣出来。假使侬歇仔两日又想拿箇个页面登侬个监控列表里向拿脱个说法,垃侧条里向点击“弗要监控。",
+'addedwatchtext' => '“[[:$1]]”箇頁加進爾個[[Special:Watchlist|關注表]]去哉。
+轉日箇頁搭渠討論頁個變化會排箇耷。',
+'removewatch' => '從關注表移爻',
 'removedwatchtext' => '页面[[:$1]]已经从[[Special:Watchlist|侬个监控页面]]里向拿脱。',
 'watch' => '监控',
 'watchthispage' => '监控该只页面',
 'unwatch' => '弗要监控',
 'unwatchthispage' => '停止监控',
+'notanarticle' => '弗是內容頁',
 'watchlist-details' => '弗包括讨论页,有 $1 页垃拉侬监控列表高头。',
 'watchlistcontains' => '倷个监控列表包括{{PLURAL:$1|1|$1}}只页面。',
 'wlshowlast' => '显示上个 $1 个钟头 $2 日 $3',
@@ -1241,14 +1453,19 @@ $1",
 'protect-cascadeon' => '下底个{{PLURAL:$1|一只|多只}}页面包含 本页面个同时,启动了连锁保护,因此本页面目前也拨保护拉许,弗好编辑。侬可以设置本页面个保护级别,但箇个并弗会对连锁保护有所影响。',
 'protect-default' => '允许所有用户',
 'protect-fallback' => '需要“$1”个许可',
-'protect-level-autoconfirmed' => 'å¼\97å\85\81许æ\96°ç\94¨æ\88·æ\90­ä»\94å¼\97æ\9b¾æ³¨å\86\8c个ç\94¨æ\88·',
-'protect-level-sysop' => '仅管理员',
+'protect-level-autoconfirmed' => 'å¼\97å\87\86æ\96°ç\94¨æ\88¶æ\90­é\82\84æ\9c\86註å\86\8aå\80\8bç\94¨æ\88',
+'protect-level-sysop' => '只准管理員',
 'protect-summary-cascade' => '联锁',
 'protect-expiring' => '终止于$1(UTC)',
 'protect-cascade' => '保护本页里向包含个页面(连锁保护)',
 'protect-cantedit' => '侬呒此更改迭只页面个保护等级,因为侬呒没权限编辑渠。',
+'protect-othertime' => '各許時間:',
+'protect-othertime-op' => '各許時間',
+'protect-otherreason-op' => '各許原因',
 'restriction-type' => '权限:',
 'restriction-level' => '限制级别:',
+'minimum-size' => '最小大細',
+'maximum-size' => '最大大細',
 
 # Restrictions (nouns)
 'restriction-edit' => '编辑',
@@ -1258,7 +1475,10 @@ $1",
 'undeletepage' => '查看搭仔恢复删脱个页面',
 'viewdeletedpage' => '望望删脱个页面',
 'undeletelink' => '查看/恢复',
+'undeleteviewlink' => '望',
+'undeletereset' => '轉設',
 'undeletecomment' => '理由:',
+'undelete-search-submit' => '搜尋',
 
 # Namespace form on various pages
 'namespace' => '名字空间:',
@@ -1276,7 +1496,7 @@ $1",
 
 'sp-contributions-newbies' => '仅显示新用户个贡献',
 'sp-contributions-blocklog' => '查封记录',
-'sp-contributions-talk' => '讲张',
+'sp-contributions-talk' => 'è¨\8eè«\96',
 'sp-contributions-search' => '搜索贡献记录',
 'sp-contributions-username' => 'IP地址或用户名:',
 'sp-contributions-submit' => '寻',
@@ -1289,7 +1509,7 @@ $1",
 'nolinkshere' => "呒拨页面链接到 '''[[:$1]]'''。",
 'isredirect' => '重定向页面',
 'istemplate' => '包含',
-'isimage' => '图片链接',
+'isimage' => '文件鏈接',
 'whatlinkshere-prev' => '前$1个',
 'whatlinkshere-next' => '后$1个',
 'whatlinkshere-links' => '←链入',
@@ -1307,7 +1527,7 @@ $1",
 'ipbother' => '其它时间:',
 'ipboptions' => '2个钟头:2 hours,1日天:1 day,3日天:3 days,1个礼拜:1 week,2个礼拜:2 weeks,1个号头:1 month,3个号头:3 months,6个号头:6 months,1年:1 year,永久:infinite',
 'badipaddress' => '无效 IP 地址',
-'ipblocklist' => '封禁拉许个IP地址搭仔用户名',
+'ipblocklist' => '封哉個用戶',
 'infiniteblock' => '永远',
 'blocklink' => '封禁',
 'unblocklink' => '解封',
@@ -1315,22 +1535,29 @@ $1",
 'contribslink' => '贡献',
 'blocklogpage' => '封禁日志',
 'blocklogentry' => '“[[$1]]”拨查封拉许,终止辰光为$2 $3',
-'blocklogtext' => '该个是用户封禁搭仔解禁操作个记录。自动封禁个IP地址弗会列勒该答。到[[Special:BlockList|IP 封禁列表]]去看当前生效个封禁列表。',
+'blocklogtext' => '箇是用戶封搭解封操作個記錄。自動封個IP地址弗排。到[[Special:BlockList|IP 封表]]裏望目前生效個封表。',
 'unblocklogentry' => '$1已经拨解封',
 'block-log-flags-nocreate' => '开户已经拨禁用',
 'proxyblocksuccess' => '好哉。',
 
+# Developer tools
+'lockdb' => '鎖數據庫',
+'unlockdb' => '開鎖數據庫',
+'lockbtn' => '鎖數據庫',
+'unlockbtn' => '數據庫開鎖',
+'databasenotlocked' => '數據庫朆鎖牢。',
+
 # Move page
 'move-page-legend' => '页面捅荡',
-'movepagetext' => "下底只表格会重新命名一只页面,拿俚所有个历史也侪捅到新名字下头
-旧个名字会变成到新名字个重定向页面
+'movepagetext' => "用下底個表會轉名字一張頁面,全部歷史都移到新名字裏
+老個名字會變成戳到新名字個轉戳頁
 到旧页面个连接弗会改变;注意检查双重定向或者坏脱个重定向。
 倷有实概个责任,即连接原要连到俚笃应该连到个场呵去。
 
 注意,如果新名字归面搭已经有页面个说话,老名字个页面'''弗'''会拨移动,除非归个是只空页面或者是只重定向并且呒拨编辑历史。个也就是讲,假使倷犯错误个说话,倷好拿一只重命名过个页面还原到原来个名字,但倷弗好覆盖一只已经来浪个页面。
 
 <b>警告!</b>
-个作兴会引起对一只热门页面剧烈个、想弗着个改变。
+箇嘸數會有名氣個引起对一只热门页面剧烈个、想弗着个改变。
 来操作前头请倷确定倷已经充分了解个能做法个后果。",
 'movepagetalktext' => "相关讨论页将自动搭该页面一淘移动,'''除非''':
 *新页面已经有仔一只非空个讨论页,或者
@@ -1431,6 +1658,7 @@ $1",
 'tooltip-watch' => '拿搿只页面加到倷监控列表里向去',
 'tooltip-rollback' => '揿一记“回转”就回退到上一位贡献者个编辑状态',
 'tooltip-undo' => '“撤销”可以恢复该编辑并且垃拉预览模式下头打开编辑表单。渠允许垃拉摘要里向说明原因。',
+'tooltip-iwiki' => '̩$1 - $2',
 
 # Attribution
 'anonymous' => '{{SITENAME}}浪个匿名用户',
@@ -1519,6 +1747,29 @@ Variants for Chinese language
 'confirmemail_success' => '倷个电子邮箱地址已经通过确认哉。乃么倷好登录,享受倪维基百科哉。',
 'confirmemail_loggedin' => '倷个电子邮件地址已经拨确认哉。',
 'confirmemail_subject' => '{{SITENAME}}电子邮件地址确认',
+'confirmemail_body' => '用IP地址$1嗰人(呒数是你),徕translatewiki.net里一个账号“$2”建起,用你侬个电子信箱地址。
+
+确认记箇账号是弗是你侬嘅,激活translatewiki.net里嗰电子信功能。用浏览器打开下向嗰链接:
+
+$3
+
+假使你侬*朆*注册过箇账号,揿下向嗰链接取消电子信确认:
+
+$5
+
+确认码会到$4过期。',
+'confirmemail_body_changed' => '
+用IP地址$1嗰人,(呒数是你)徕{{SITENAME}}里一个账号“$2”建起,用你侬个电子信箱地址。
+
+确认记箇账号是弗是你侬嘅,激活{{SITENAME}}里嗰电子信功能。用浏览器打开下向嗰链接:
+
+$3
+
+假使你侬*朆*注册过箇账号,揿下向嗰链接取消电子信确认:
+
+$5
+
+确认码会到$4过期。',
 
 # Scary transclusion
 'scarytranscludetoolong' => '[对呒起,URL太长了]',
@@ -1564,6 +1815,13 @@ Variants for Chinese language
 # Special:SpecialPages
 'specialpages' => '特殊页面',
 
+# Special:Tags
+'tags-active-yes' => '好',
+'tags-active-no' => '弗',
+
+# Database error messages
+'dberr-info-hidden' => '(數據庫服務器連弗上)',
+
 # New logging system
 'revdelete-restricted' => '已将限制应用到管理员',
 'revdelete-unrestricted' => '已移除对管理员个限制',
index 6f20232..448785e 100644 (file)
@@ -202,12 +202,12 @@ $messages = array(
 'tog-hidepatrolled' => 'באַהאַלטן פאַטראלירטע רעדאַקטירונגען אין לעצטע ענדערונגען',
 'tog-newpageshidepatrolled' => 'באַהאַלטן פאַטראלירטע בלעטער פון דער ליסטע פון נײַע בלעטער',
 'tog-extendwatchlist' => 'פארברייטערן די אויפפאסן ליסטע צו צייגן אלע פאסנדע ענדערונגען (אנדערשט: בלויז די לעצטע ענדערונג פון יעדן בלאט)',
-'tog-usenewrc' => '× ×\99צ×\9f ×¤Ö¿×\90ַר×\91עסער×\98×¢ ×\9cעצ×\98×¢ ×¢× ×\93ער×\95× ×\92×¢×\9f (פֿ×\90×\93ער×\98 JavaScript)',
+'tog-usenewrc' => '×\92ר×\95פ×\99ר×\9f ×¢× ×\93ער×\95× ×\92×¢×\9f ×\9c×\95×\99×\98×\9f ×\91×\9c×\90×\98 ×\90×\99×\9f "×\9cעצ×\98×¢ ×¢× ×\93ער×\95× ×\92×¢×\9f" ×\90×\95×\9f ×\90×\95×\99פֿפ×\90ס×\9f ×\9c×\99ס×\98×¢',
 'tog-numberheadings' => 'נומערירן קעפלעך אויטאמאטיש',
-'tog-showtoolbar' => '×\95×\95ײַ×\96×\9f ×\93×¢×\9d געצייג-שטאנג',
-'tog-editondblclick' => '×¢× ×\93ער×\9f ×\91×\9c×¢×\98ער ×\93×\95ר×\9a ×\98×\90פ×\9c ×§×\9c×\99ק (JavaScript)',
+'tog-showtoolbar' => '×\95×\95ײַ×\96×\9f ×¨×¢×\93×\90ק×\98×\99ר×\9f געצייג-שטאנג',
+'tog-editondblclick' => 'רע×\93×\90ק×\98×\99ר×\9f ×\91×\9c×¢×\98ער ×\93×\95ר×\9a ×\98×\90פ×\9c ×§×\9c×\99ק',
 'tog-editsection' => 'ערמעגליכט אפטייל ענדערן דורך [ענדערן] לינקס',
-'tog-editsectiononrightclick' => '×\91×\90×\9e×¢×\92×\9c×\99×\9a ×¤×\90ר×\90×\92ר×\90×£ ×¢× ×\93ער×\95× ×\92×¢×\9f ×\93×\95ר×\9b×\9f ×§×\95×\95×¢×\98ש×\9f ×\90×\95×\99פ×\9f ×¨×¢×\9b×\98×\9f<br />×\90×\95×\99×£ ×\90פ×\98×\99×\99×\9c ×§×¢×¤×\9c (JavaScript)',
+'tog-editsectiononrightclick' => '×\91×\90×\9e×¢×\92×\9c×¢×\9b×\9f ×\90פ×\98×\99×\99×\9c ×¨×¢×\93×\90ק×\98×\99ר×\9f ×\93×\95ר×\9b×\9f ×¨×¢×\9b×\98ס־ק×\9c×\99ק×\9f ×\90×\95×\99×£ ×\90פ×\98×\99×\99×\9c ×§×¢×¤×\9c×¢×\9a',
 'tog-showtoc' => 'ווייז דאס אינהאלט קעסטל<br />(פאר בלעטער מיט מער ווי 3 קעפלעך)',
 'tog-rememberpassword' => 'געדענק מיין אריינלאגירן אין דעם בלעטערער (ביז $1 {{PLURAL:$1|טאָג|טעג}})',
 'tog-watchcreations' => 'צולייגן בלעטער וואס איך באשאף און טעקעס וואס איך לאד ארויף צו מיין אכטונג ליסטע',
@@ -225,7 +225,7 @@ $messages = array(
 'tog-shownumberswatching' => 'ווייזן דעם נומער פון בלאט אויפֿפאסערס',
 'tog-oldsig' => 'איצטיגער אונטערשריפֿט:',
 'tog-fancysig' => 'באַהאַנדלן  אונטערשריפט אַלס וויקיטעקסט (אָן אויטאמאטישן לינק)',
-'tog-uselivepreview' => '×\91×\90× ×\99צ×\98 ×\96×\99×\9a ×\9e×\99×\98 ×\92×\99×\9b×¢ ×¤×\90ר×\90×\95×\99ס×\93×\99×\92×¢ ×\95×\95×\99×\99×\96×\95× ×\92 (JavaScript) (עקספערימענטאל)',
+'tog-uselivepreview' => '×\91×\90× ×\99צ×\9f ×\96×\99×\9a ×\9e×\99×\98 ×\92×\99×\9bער ×¤×\90ר×\90×\95×\99ס×\93×\99×\92ער ×\95×\95×\99×\99×\96×\95× ×\92 (עקספערימענטאל)',
 'tog-forceeditsummary' => 'ווארן מיך ווען איך לייג א ליידיג קורץ ווארט ענדערונג',
 'tog-watchlisthideown' => 'באהאלט מיינע ענדערונגען פון דער אויפפאסן ליסטע',
 'tog-watchlisthidebots' => 'באהאלט באט עדיטס פון אויפפאסן ליסטע',
@@ -443,7 +443,7 @@ $1',
 # 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).
 'aboutsite' => 'וועגן {{SITENAME}}',
 'aboutpage' => 'Project:וועגן',
-'copyright' => '×\93ער ×\90×\99× ×\94×\90Ö·×\9c×\98 ×\90×\99×\96 ×\91×\90רע×\9b×\98×\99×\92×\98 ×\90×\95× ×\98ער $1.',
+'copyright' => '×\93ער ×\90×\99× ×\94×\90Ö·×\9c×\98 ×\90×\99×\96 ×¤Ö¿×\90ַר×\90Ö·×\9f ×\90×\95× ×\98ער $1 ×\95×\95×¢×\9f × ×\99ש×\98 ×\91×\90×\95×\95×\99×\96×\9f ×\90× ×\93ערש.',
 'copyrightpage' => '{{ns:project}}:קאפירעכטן',
 'currentevents' => 'אקטועלע געשעענישן',
 'currentevents-url' => 'Project:אקטועלע געשענישען',
@@ -530,6 +530,12 @@ $1',
 # General errors
 'error' => 'פעלער',
 'databaseerror' => 'דאטנבאזע פעלער',
+'databaseerror-text' => "ס'האט פאסירט א דאטנבאזע פֿראגע פֿעלער.
+קען אפשר זיין א באַג אינעם ווייכווארג.",
+'databaseerror-textcl' => "ס'האט פאסירט א דאטנבאזע פֿראגע פֿעלער.",
+'databaseerror-query' => 'פֿראגע: $1',
+'databaseerror-function' => 'פֿונקציע: $1',
+'databaseerror-error' => 'פֿעלער: $1',
 'laggedslavemode' => 'ווארענונג: בלאט טוט מעגליך נישט אנטהאלטן לעצטיגע דערהײַנטיגונגען.',
 'readonly' => 'דאַטנבאַזע פאַרשפאַרט',
 'enterlockreason' => 'שטעלט א סיבה פארן אפשפאר, אריינגערעכנט א געשאצטער צייט אויף ווען דאס וועט זיך צוריקעפענען די פארשפארונג.',
@@ -1212,6 +1218,8 @@ $1",
 
 # Suppression log
 'suppressionlog' => 'באהאלטונגען לאג',
+'suppressionlogtext' => 'אונטן געפינט זיך א ליסטע פון אויסמעקונגען און בלאקן וואס באהאנדלען אינהאלט באהאלטן פון אדמיניסטראטארן.
+זעט די [[Special:BlockList|בלאקן ליסטע]] פאר דער ליסטע פון אקטועלע בלאקן.',
 
 # History merging
 'mergehistory' => 'צונויפֿגיסן בלאט היסטאריעס',
@@ -1532,6 +1540,7 @@ $1",
 'right-unblockself' => 'זיך אליין אויפֿשפאַרן',
 'right-protect' => 'ענדערן שוץ ניוואען און רעדאַגירן קאסקאד־געשיצטע בלעטער',
 'right-editprotected' => 'רעדאַגירן בלעטער געשיצט ווי "{{int:protect-level-sysop}}"',
+'right-editsemiprotected' => 'רעדאַגירן בלעטער געשיצט ווי "{{int:protect-level-autoconfirmed}}"',
 'right-editinterface' => 'רעדאַקטירן די באַניצער אייבערפֿלאַך',
 'right-editusercssjs' => 'רעדאַקטירן אַנדערע באַניצערס CSS און JS טעקעס',
 'right-editusercss' => 'רעדאַקטירן אַנדערע באַניצערס CSS טעקעס',
@@ -1593,8 +1602,8 @@ $1",
 'action-block' => 'בלאקירן דעם באַניצער פֿון רעדאַקטירן',
 'action-protect' => 'ענדערן שיצונג ניוואען פֿאַר דעם בלאַט',
 'action-rollback' => 'גיך צוריקדרייען די רעדאַקטירונגען פונעם לעצטן באַניצער וואס האט רעדאַקטירט א געוויסן בלאַט',
-'action-import' => '×\90×\99×\9eפ×\90ר×\98×\99ר×\9f ×\93×¢×\9d ×\91×\9c×\90Ö·×\98 פֿון אַן אַנדער וויקי',
-'action-importupload' => '×\90×\99×\9eפ×\90ר×\98×\99ר×\9f ×\93×¢×\9d ×\91×\9c×\90Ö·×\98 דורך ארויפֿלאָדן אַ טעקע',
+'action-import' => '×\90×\99×\9eפ×\90ר×\98×\99ר×\9f ×\91×\9c×¢×\98ער פֿון אַן אַנדער וויקי',
+'action-importupload' => '×\90×\99×\9eפ×\90ר×\98×\99ר×\9f ×\91×\9c×¢×\98ער דורך ארויפֿלאָדן אַ טעקע',
 'action-patrol' => "אנצייכענען אנדערס' רעדאקטירונגן אלס נאכגעקוקט",
 'action-autopatrol' => 'אנצוצייכענען אייערע רעדאקטירונגן אלס איבערגעקוקטע',
 'action-unwatchedpages' => 'זען די ליסטע פון נישט אויפֿגעפאַסטע בלעטער',
@@ -1643,7 +1652,7 @@ $1",
 'rc_categories_any' => 'אלע',
 'rc-change-size-new' => '$1 {{PLURAL:$1|בייט|בייטן}} נאך דער ענדערונג',
 'newsectionsummary' => '/* $1 */ נייע אפטיילונג',
-'rc-enhanced-expand' => 'צייג דעטאלען (פארלאנגט זיך JavaScript)',
+'rc-enhanced-expand' => 'צייגן דעטאלן',
 'rc-enhanced-hide' => 'באהאלט דעטאלן',
 'rc-old-title' => 'געשאפן לכתחילה מיטן נאמען "$1"',
 
@@ -1810,6 +1819,8 @@ $1",
 'backend-fail-read' => 'קען נישט ליינען טעקע "$1".',
 'backend-fail-create' => 'קען נישט שרייבן טעקע "$1".',
 'backend-fail-maxsize' => 'מ\'האט נישט געקענט שרייבן די טעקע "$1" ווייל זי איז גרעסער פון {{PLURAL:$2|איין בייט|$2 בייטן}}.',
+'backend-fail-connect' => 'מ\'קען נישט פארבינדן צום שפייכלער־בעקענד "$1".',
+'backend-fail-internal' => 'אן אומבאוואוסטער פֿעלער האט פאסירט אין שפייכלער־בעקענד "$1".',
 'backend-fail-contenttype' => 'מ\'קען נישט פעסטשטעלן דעם אינהאלט טיפ פון דער טעקע צו שפייכלערן ביי "$1".',
 
 # Lock manager
@@ -2364,7 +2375,7 @@ $UNWATCHURL
 די לעצטע ענדערונג צום בלאַט איז געווען פון [[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]]',
+'revertpage-nouser' => 'צוריקגעשטעלט רעדאַקטירונגען פֿון א באהאלטענעם באַניצער צו לעצטער רעוויזיע פֿון {{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'צוריקגעדרייט רעדאַקטירונגען פֿון $1 צו דער לעצטע ווערסיע פֿון $2',
 
 # Edit tokens
@@ -3955,9 +3966,9 @@ $5
 'limitreport-ppvisitednodes' => 'פאר־פראצעסאר באזוכן נאדן־צאל',
 'limitreport-ppgeneratednodes' => 'פאר־פראצעסאר גענערירט נאדן־צאל',
 'limitreport-postexpandincludesize' => 'טעקסט גרייס נאכן שפרייטן',
-'limitreport-postexpandincludesize-value' => '$1/$2 בייטן',
+'limitreport-postexpandincludesize-value' => '{{PLURAL:$2|בייט|בייטן}}$1/$2',
 'limitreport-templateargumentsize' => ' מוסטער פאראמעטער גרייס',
-'limitreport-templateargumentsize-value' => '$1/$2 בייטן',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|בייט|בייטן}}',
 'limitreport-expansiondepth' => 'גרעסטע אויסשפרייט טיף',
 'limitreport-expensivefunctioncount' => 'צאל פזרנישע פארזער־פֿונקציעס',
 
index e20e6f5..d5b9bda 100644 (file)
@@ -3530,8 +3530,7 @@ $5
 
 # Database error messages
 'dberr-header' => 'Wiki yìí ní ìsòro',
-'dberr-problems' => 'Àforìjì!
-Ibiìtakùn yìí únkojú ìsòro ìṣìṣẹ́ẹ̀rọ.',
+'dberr-problems' => 'Àforìjì! Ibiìtakùn yìí únkojú ìsòro ìṣìṣẹ́ẹ̀rọ.',
 'dberr-again' => 'Ẹ mú sùúrù fún ìṣẹ́jú díẹ̀ kí ẹ tó tún ṣe ìrùsókè.',
 'dberr-info' => '(Kò le farakan ẹ̀rọ-ìpèsè ibùdó dátà: $1)',
 'dberr-usegoogle' => 'Ẹ le ṣàwárí lórí Google báyìí ná.',
index f4c5cc6..284ecc6 100644 (file)
@@ -3278,8 +3278,7 @@ MediaWiki是基於使用目的而加以發佈,但係就唔會負上任何嘅
 
 # Database error messages
 'dberr-header' => '呢個 wiki 出咗問題',
-'dberr-problems' => '對唔住!
-呢一版出現咗一啲技術性問題。',
+'dberr-problems' => '對唔住!呢一版出現咗一啲技術性問題。',
 'dberr-again' => '試吓等多幾分種然後開試。',
 'dberr-info' => '(唔能夠連繫個資料伺服器: $1)',
 'dberr-usegoogle' => '響現階段你可以用 Google 去搵嘢。',
index e933c9e..fb97141 100644 (file)
@@ -361,56 +361,56 @@ $bookstoreList = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => '链接下划线:',
-'tog-justify' => '段落对齐',
-'tog-hideminor' => '在最近更改中隐藏小编辑',
-'tog-hidepatrolled' => '在最近更改中隐藏已巡查编辑',
-'tog-newpageshidepatrolled' => '在新页面列表中隐藏已巡查页面',
+'tog-justify' => '对齐段落',
+'tog-hideminor' => '隐藏最近更改中的小编辑',
+'tog-hidepatrolled' => '隐藏最近更改中的已巡查编辑',
+'tog-newpageshidepatrolled' => '隐藏新页面列表中的已巡查页面',
 'tog-extendwatchlist' => '扩大监视列表以显示所有更改而不仅是最近更改',
-'tog-usenewrc' => 'æ ¹æ\8d®é¡µé\9d¢å\88\86ç»\84æ\9c\80è¿\91æ\9b´æ\94¹å\92\8cç\9b\91è§\86å\88\97表',
-'tog-numberheadings' => '标题自动编号',
+'tog-usenewrc' => 'æ\8c\89页é\9d¢ç»\84å\90\88æ\9c\80è¿\91æ\9b´æ\94¹å\92\8cç\9b\91è§\86å\88\97表中ç\9a\84æ\9b´æ\94¹',
+'tog-numberheadings' => '自动编号标题',
 'tog-showtoolbar' => '显示编辑工具条',
-'tog-editondblclick' => '双击编辑页面',
+'tog-editondblclick' => '双击编辑页面',
 'tog-editsection' => '启用[编辑]链接编辑段落',
 'tog-editsectiononrightclick' => '启用右击段落标题编辑段落',
 'tog-showtoc' => '显示目录(对于有多于3个标题的页面)',
-'tog-rememberpassword' => '在该浏览器保存我的登录状态(最长$1日)',
-'tog-watchcreations' => '添加我创建的页面和上传的文件至我的监视列表',
+'tog-rememberpassword' => '在该浏览器记住我的登录状态(最长$1天)',
+'tog-watchcreations' => '添加我创建的页面和上传的文件至我的监视列表',
 'tog-watchdefault' => '添加我编辑的页面和文件至我的监视列表',
-'tog-watchmoves' => '将我移动的页面和文件添加到我的监视列表',
+'tog-watchmoves' => '添加我移动的页面和文件至我的监视列表',
 'tog-watchdeletion' => '添加我删除的页面和文件至我的监视列表',
-'tog-minordefault' => '默认标记编辑为小编辑',
+'tog-minordefault' => '默认标记所有编辑为小编辑',
 'tog-previewontop' => '在编辑框上方显示预览',
 'tog-previewonfirst' => '首次编辑时显示预览',
 'tog-nocache' => '停用浏览器页面缓存',
 'tog-enotifwatchlistpages' => '当我的监视列表中的页面或文件更改时发送电子邮件通知我',
-'tog-enotifusertalkpages' => '当我的讨论页更改时发送电子邮件通知我',
-'tog-enotifminoredits' => '当页面和文件有小编辑时发送电子邮件通知我',
+'tog-enotifusertalkpages' => '当我的用户讨论页面更改时发送电子邮件通知我',
+'tog-enotifminoredits' => '当我的监视列表中的页面和文件有小编辑时也发送电子邮件通知我',
 'tog-enotifrevealaddr' => '在通知电子邮件中显示我的电子邮件地址',
 'tog-shownumberswatching' => '显示监视用户数',
 'tog-oldsig' => '当前签名:',
-'tog-fancysig' => '将签名视为维基代码(不自动生成链接)',
-'tog-uselivepreview' => '使用实时预览(实验功能)',
+'tog-fancysig' => '将签名视为维基文本(不自动生成链接)',
+'tog-uselivepreview' => '使用实时预览(实验)',
 'tog-forceeditsummary' => '未输入编辑摘要时提醒我',
-'tog-watchlisthideown' => '在监视列表中隐藏我的编辑',
-'tog-watchlisthidebots' => '在监视列表中隐藏机器人的编辑',
-'tog-watchlisthideminor' => '在监视列表中隐藏小编辑',
-'tog-watchlisthideliu' => '在监视列表中隐藏登录用户',
-'tog-watchlisthideanons' => '在监视列表中隐藏匿名用户',
-'tog-watchlisthidepatrolled' => '在监视列表中隐藏已巡查的编辑',
-'tog-ccmeonemails' => '把我给其他用户发送的电子邮件的副本发送给我',
-'tog-diffonly' => '不在版本差异下面显示页面内容',
+'tog-watchlisthideown' => '隐藏监视列表中的我的编辑',
+'tog-watchlisthidebots' => '隐藏监视列表中的机器人编辑',
+'tog-watchlisthideminor' => '隐藏监视列表中的小编辑',
+'tog-watchlisthideliu' => '隐藏监视列表中的登录用户的编辑',
+'tog-watchlisthideanons' => '隐藏监视列表中的匿名用户的编辑',
+'tog-watchlisthidepatrolled' => '隐藏监视列表中的已巡查编辑',
+'tog-ccmeonemails' => '给我发送我发送给其他用户的电子邮件的副本',
+'tog-diffonly' => '不在差异下面显示页面内容',
 'tog-showhiddencats' => '显示隐藏分类',
 'tog-noconvertlink' => '停用链接文字转换',
 'tog-norollbackdiff' => '执行回退后不显示差异',
-'tog-useeditwarning' => 'å¦\82å\9c¨æ\9b´æ\94¹æ\9cªä¿\9då­\98æ\97¶ç¦»å¼\80页é\9d¢ï¼\8cå\88\99å\8f\91å\87ºè­¦å\91\8a',
+'tog-useeditwarning' => 'å½\93æ\88\91离å¼\80æ\9c\89æ\9cªä¿\9då­\98æ\9b´æ\94¹ç\9a\84ç¼\96è¾\91页é\9d¢æ\97¶æ\8f\90é\86\92æ\88\91',
 'tog-prefershttps' => '登录时始终使用安全连接',
 
-'underline-always' => '总是使用',
-'underline-never' => '从不使用',
+'underline-always' => '始终',
+'underline-never' => '从不',
 'underline-default' => '皮肤或浏览器默认设置',
 
 # Font style option in Special:Preferences
-'editfont-style' => '编辑区中的字体样式:',
+'editfont-style' => '编辑区字体样式:',
 'editfont-default' => '浏览器默认',
 'editfont-monospace' => '等宽字体',
 'editfont-sansserif' => '无衬线字体',
@@ -485,27 +485,27 @@ $messages = array(
 'category_header' => '分类“$1”中的页面',
 'subcategories' => '子分类',
 'category-media-header' => '分类“$1”中的媒体文件',
-'category-empty' => "''本分类尚未包含任何页面或媒体文件。''",
+'category-empty' => "''本分类目前未包含页面或媒体文件。''",
 'hidden-categories' => '$1个隐藏分类',
 'hidden-category-category' => '隐藏分类',
-'category-subcat-count' => '{{PLURAL:$2|æ\9c¬å\88\86ç±»å\8fªæ\9c\89ä¸\8bå\88\97ä¸\80个å­\90å\88\86ç±»ã\80\82\9c¬å\88\86ç±»å\8c\85å\90«ä¸\8bå\88\97$1个å­\90å\88\86ç±»ï¼\8cå\85±$2个子分类。}}',
-'category-subcat-count-limited' => '本分类包含下列{{PLURAL:$1|subcategory|$1个子分类}}。',
-'category-article-count' => '{{PLURAL:$2|本分类只有下列一个页面。|本分类包含下列$1个页面,共有$2个页面。}}',
-'category-article-count-limited' => '本分类包含下列$1个页面。',
-'category-file-count' => '{{PLURAL:$2|æ\9c¬å\88\86ç±»å\8fªå\8c\85å\90«ä»¥ä¸\8bæ\96\87件ã\80\82|以ä¸\8b{{PLURAL:$1|æ\96\87件|$1个æ\96\87件}}å\9c¨æ\9c¬å\88\86类中,共$2个文件。}}',
-'category-file-count-limited' => '本分类包含下列$1个文件。',
+'category-subcat-count' => '{{PLURAL:$2|æ\9c¬å\88\86ç±»å\8fªæ\9c\89以ä¸\8bå­\90å\88\86ç±»ã\80\82\9c¬å\88\86ç±»æ\9c\89以ä¸\8b$1个å­\90å\88\86ç±»ï¼\8cå\85±æ\9c\89$2个子分类。}}',
+'category-subcat-count-limited' => '本分类有以下{{PLURAL:$1|子分类|$1个子分类}}。',
+'category-article-count' => '{{PLURAL:$2|本分类只包含以下页面。|以下{{PLURAL:$1|页面|$1个页面}}属于本分类,共$2个页面。}}',
+'category-article-count-limited' => '以下{{PLURAL:$1|页面|$1个页面}}属于当前分类。',
+'category-file-count' => '{{PLURAL:$2|æ\9c¬å\88\86ç±»å\8fªå\8c\85å\90«ä»¥ä¸\8bæ\96\87件ã\80\82|以ä¸\8b{{PLURAL:$1|æ\96\87件|$1个æ\96\87件}}å±\9eäº\8eæ\9c¬å\88\86ç±»,共$2个文件。}}',
+'category-file-count-limited' => '以下{{PLURAL:$1|文件|$1个文件}}属于当前分类。',
 'listingcontinuesabbrev' => '续',
-'index-category' => 'å\85\81许索å¼\95ç\9a\84页面',
-'noindex-category' => '禁止索引的页面',
-'broken-file-category' => '包含损坏的文件链接的页面',
+'index-category' => 'å\8f¯ç´¢å¼\95页面',
+'noindex-category' => '不可索引页面',
+'broken-file-category' => '有受损文件链接的页面',
 'categoryviewer-pagedlinks' => '($1)($2)',
 
 'about' => '关于',
 'article' => '内容页面',
 'newwindow' => '(在新窗口中打开)',
 'cancel' => '取消',
-'moredotdotdot' => '更多',
-'morenotlisted' => 'æ­¤å\88\97表æ\9cªå®\8cæ\88\90。',
+'moredotdotdot' => '更多...',
+'morenotlisted' => 'æ\9c¬å\88\97表ä¸\8då®\8cæ\95´。',
 'mypage' => '页面',
 'mytalk' => '讨论',
 'anontalk' => '该IP地址的讨论',
@@ -516,7 +516,7 @@ $messages = array(
 'qbfind' => '查找',
 'qbbrowse' => '浏览',
 'qbedit' => '编辑',
-'qbpageoptions' => '此页',
+'qbpageoptions' => '该页面',
 'qbmyoptions' => '我的页面',
 'qbspecialpages' => '特殊页面',
 'faq' => '常见问题',
@@ -529,7 +529,7 @@ $messages = array(
 'vector-action-protect' => '保护',
 'vector-action-undelete' => '恢复',
 'vector-action-unprotect' => '更改保护',
-'vector-simplesearch-preference' => '启用简化搜索栏(仅Vector皮肤)',
+'vector-simplesearch-preference' => '启用简化搜索栏(仅Vector皮肤)',
 'vector-view-create' => '创建',
 'vector-view-edit' => '编辑',
 'vector-view-history' => '查看历史',
@@ -537,20 +537,20 @@ $messages = array(
 'vector-view-viewsource' => '查看源代码',
 'actions' => '操作',
 'namespaces' => '名字空间',
-'variants' => '变',
+'variants' => '变',
 
 'navigation-heading' => '导航菜单',
 'errorpagetitle' => '出错',
-'returnto' => '返回$1。',
+'returnto' => '返回$1。',
 'tagline' => '来自{{SITENAME}}',
 'help' => '帮助',
 'search' => '搜索',
 'searchbutton' => '搜索',
-'go' => '进入',
-'searcharticle' => '提交',
+'go' => '前往',
+'searcharticle' => '前往',
 'history' => '页面历史',
 'history_short' => '历史',
-'updatedmarker' => 'æ\88\91ä¸\8a次访é\97®ä¹\8bå\90\8eç\9a\84æ\9b´æ\96°',
+'updatedmarker' => 'æ\9b´æ\96°äº\8eæ\88\91ä¸\8a次访é\97®å\90\8e',
 'printableversion' => '打印版本',
 'permalink' => '永久链接',
 'print' => '打印',
@@ -561,14 +561,14 @@ $messages = array(
 'create-this-page' => '创建本页',
 'delete' => '删除',
 'deletethispage' => '删除本页',
-'undeletethispage' => 'æ\92¤æ¶\88å\88 é\99¤æ­¤页',
-'undelete_short' => '恢复$1个被删除的编辑',
+'undeletethispage' => 'æ\81¢å¤\8dæ\9c¬页',
+'undelete_short' => '恢复$1个编辑',
 'viewdeleted_short' => '查看$1个被删除的编辑',
 'protect' => '保护',
 'protect_change' => '更改',
 'protectthispage' => '保护本页',
 'unprotect' => '更改保护',
-'unprotectthispage' => '更改本页面保护设置',
+'unprotectthispage' => '更改本页的保护',
 'newpage' => '新页面',
 'talkpage' => '讨论本页',
 'talkpagelinktext' => '讨论',
@@ -582,7 +582,7 @@ $messages = array(
 'userpage' => '查看用户页面',
 'projectpage' => '查看项目页面',
 'imagepage' => '查看文件页面',
-'mediawikipage' => '查看息页面',
+'mediawikipage' => '查看息页面',
 'templatepage' => '查看模板页面',
 'viewhelppage' => '查看帮助页面',
 'categorypage' => '查看分类页面',
@@ -591,24 +591,22 @@ $messages = array(
 'redirectedfrom' => '(重定向自$1)',
 'redirectpagesub' => '重定向页面',
 'lastmodifiedat' => '本页面最后修改于$1 $2。',
-'viewcount' => '此页é\9d¢å·²è¢«æµ\8fè§\88过$1次。',
+'viewcount' => 'æ\9c¬é¡µé\9d¢å·²ç»\8f被访é\97®过$1次。',
 'protectedpage' => '受保护页面',
 'jumpto' => '跳转至:',
 'jumptonavigation' => '导航',
 'jumptosearch' => '搜索',
-'view-pool-error' => '抱歉,服务器目前正超负荷运转。
-过多用户正尝试查看本页面。
-请稍等片刻后再次尝试访问本页面。
+'view-pool-error' => '对不起,服务器当前正超负荷运转。过多用户正尝试查看本页面。请在再次尝试访问本页面前稍等片刻。
 
 $1',
-'pool-timeout' => '等待锁超时',
+'pool-timeout' => '等待锁超时',
 'pool-queuefull' => '请求队列已满',
 'pool-errorunknown' => '未知错误',
 
 # 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).
 'aboutsite' => '关于{{SITENAME}}',
 'aboutpage' => 'Project:关于',
-'copyright' => '本站全部文字内容使用$1授权。',
+'copyright' => '除非另有声明,本网站内容采用$1授权。',
 'copyrightpage' => '{{ns:project}}:著作权',
 'currentevents' => '新闻动态',
 'currentevents-url' => 'Project:新闻动态',
@@ -618,22 +616,22 @@ $1',
 'helppage' => 'Help:目录',
 'mainpage' => '首页',
 'mainpage-description' => '首页',
-'policy-url' => 'Project:方针与指引',
+'policy-url' => 'Project:方针',
 'portal' => '社区专页',
 'portal-url' => 'Project:社区专页',
 'privacy' => '隐私权政策',
 'privacypage' => 'Project:隐私权政策',
 
 'badaccess' => '权限错误',
-'badaccess-group0' => '你被禁止执行你请求的操作。',
-'badaccess-groups' => '您刚才请求的操作只有{{PLURAL:$2|这个用户组|以下用户组}}中的用户才能使用: $1',
+'badaccess-group0' => '你被禁止执行你刚才请求的操作。',
+'badaccess-groups' => '你刚才请求的操作只对属于{{PLURAL:$2|该用户组|这些用户组}}的用户开放:$1',
 
-'versionrequired' => '需要版本为$1的MediaWiki',
-'versionrequiredtext' => '需要版本为$1的MediaWiki才能使用本页。
-请见[[Special:Version|版本页面]]。',
+'versionrequired' => '需要$1版本的MediaWiki',
+'versionrequiredtext' => '使用本页需要$1版本的MediaWiki。请见[[Special:Version|版本页面]]。',
 
 'ok' => '确定',
-'retrievedfrom' => '来自“$1”',
+'backlinksubtitle' => '←$1',
+'retrievedfrom' => '取自“$1”',
 'youhavenewmessages' => '你有$1($2)。',
 'newmessageslink' => '新信息',
 'newmessagesdifflink' => '最后更改',
@@ -656,13 +654,13 @@ $1',
 'thisisdeleted' => '查看或恢复$1?',
 'viewdeleted' => '查看$1?',
 'restorelink' => '$1个被删除的编辑',
-'feedlinks' => '订阅:',
-'feed-invalid' => '无效的订阅类型。',
-'feed-unavailable' => '不提供联合订阅源',
-'site-rss-feed' => '$1的RSS订阅',
-'site-atom-feed' => '$1的Atom订阅',
-'page-rss-feed' => '“$1”的RSS订阅',
-'page-atom-feed' => '“$1”的Atom订阅',
+'feedlinks' => 'Feed:',
+'feed-invalid' => '无效的订阅feed类型。',
+'feed-unavailable' => '不提供联合feed',
+'site-rss-feed' => '$1的RSS feed',
+'site-atom-feed' => '$1的Atom feed',
+'page-rss-feed' => '“$1”的RSS feed',
+'page-atom-feed' => '“$1”的Atom feed',
 'red-link-title' => '$1(页面不存在)',
 'sort-descending' => '降序',
 'sort-ascending' => '升序',
@@ -670,7 +668,7 @@ $1',
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => '页面',
 'nstab-user' => '用户页面',
-'nstab-media' => '媒体页面',
+'nstab-media' => '媒体文件页面',
 'nstab-special' => '特殊页面',
 'nstab-project' => '项目页面',
 'nstab-image' => '文件',
@@ -680,29 +678,27 @@ $1',
 'nstab-category' => '分类',
 
 # Main script and global functions
-'nosuchaction' => '这个命令不存在',
-'nosuchactiontext' => 'URL指定的命令无效。你可能误输入了URL地址,或者点击了错误的链接。这一错误亦有可能是由{{SITENAME}}所使用软件自身的错误导致的。',
-'nosuchspecialpage' => 'æ­¤ç\89¹æ®\8a页é\9d¢ä¸\8då­\98å\9c¨',
-'nospecialpagetext' => '<strong>您请求的特殊页面无效。</strong>
+'nosuchaction' => '无该命令',
+'nosuchactiontext' => 'URL指定的操作无效。你可能输入了错误的URL地址,或是点击了错误的链接。这也可能表明{{SITENAME}}使用的软件的存在漏洞(bug)。',
+'nosuchspecialpage' => 'æ\97 è¯¥ç\89¹æ®\8a页é\9d¢',
+'nospecialpagetext' => '<strong>你请求了一个无效的特殊页面。</strong>
 
-[[Special:SpecialPages|{{int:specialpages}}]]中列出了所有有效的特殊页面。',
+有效的特殊页面的列表可以在[[Special:SpecialPages|{{int:specialpages}}]]找到。',
 
 # General errors
-'error' => '错误',
+'error' => '出错',
 'databaseerror' => '数据库错误',
-'databaseerror-text' => '出现了一个数据库查询错误。
-这可能表明软件中存在bug。',
-'databaseerror-textcl' => '数据库查询错误。',
+'databaseerror-text' => '数据库查询出错。这可能表明软件中存在漏洞(bug)。',
+'databaseerror-textcl' => '数据库查询出错。',
 'databaseerror-query' => '查询:$1',
-'databaseerror-function' => 'å\8a\9fè\83½:$1',
-'databaseerror-error' => '错误:$1',
-'laggedslavemode' => "'''警告''':页面可能未包含最近的更新。",
+'databaseerror-function' => 'å\87½æ\95°:$1',
+'databaseerror-error' => '出错:$1',
+'laggedslavemode' => "'''警告:'''页面可能没有包含最近的更新。",
 'readonly' => '数据库被锁定',
-'enterlockreason' => '请输入锁定的原因,包括预计重新开放的时间',
-'readonlytext' => '数据库目前禁止输入新内容及更改,
-这很可能是由于数据库正在维修,完成后即可恢复。
+'enterlockreason' => '请输入锁定的原因(包括预计解锁的时间)',
+'readonlytext' => '数据库当前被锁定,不能添加新条目或进行其他修改,锁定可能是因为例行的数据库维护,完成后即可恢复正常。
 
-管理员有如下解释:$1',
+锁定数据库的管理员提供的解释:$1',
 'missing-article' => '数据库找不到预期的页面文字:“$1”$2。
 
 这通常是由于点击了链向旧有差异或历史的链接,而原有修订已被删除导致的。
@@ -787,11 +783,11 @@ $2',
 'yourpassword' => '密码:',
 'userlogin-yourpassword' => '密码',
 'userlogin-yourpassword-ph' => '请输入你的密码',
-'createacct-yourpassword-ph' => '请输入密码',
-'yourpasswordagain' => '再次输入密码:',
-'createacct-yourpasswordagain' => '确认密码',
+'createacct-yourpassword-ph' => '请输入一个密码',
+'yourpasswordagain' => '再次输入密码:',
+'createacct-yourpasswordagain' => '确认密码',
 'createacct-yourpasswordagain-ph' => '请再次输入密码',
-'remembermypassword' => '在该浏览器保存我的登录状态(最长$1日)',
+'remembermypassword' => '在该浏览器记住我的登录状态(最长$1天)',
 'userlogin-remembermypassword' => '记住我的登录状态',
 'userlogin-signwithsecure' => '使用安全连接',
 'yourdomainname' => '您的域名:',
@@ -1138,7 +1134,7 @@ $2
 它可能刚刚被删除。',
 'edit-conflict' => '编辑冲突。',
 'edit-no-change' => '因为没有文字更改,你的编辑已被忽略。',
-'postedit-confirmation' => '的编辑已保存。',
+'postedit-confirmation' => '的编辑已保存。',
 'edit-already-exists' => '不可以建立一个新页面。
 它已经存在。',
 'defaultmessagetext' => '默认消息文本',
@@ -1497,10 +1493,10 @@ $1",
 'prefs-help-signature' => '讨论页面上的评论应该使用“<nowiki>~~~~</nowiki>”签名,它会自动转换为你的签名及时间戳。',
 'badsig' => '错误的原始签名。请检查HTML标签。',
 'badsiglength' => '签名过长。请不超过$1个字符。',
-'yourgender' => '您希望如何显示性别?',
-'gender-unknown' => 'æ\88\91ä¸\8dæ\83³æ\8c\87å®\9a',
-'gender-male' => '',
-'gender-female' => '女',
+'yourgender' => '你希望使用什么性别称呼?',
+'gender-unknown' => 'æ\88\91ä¸\8dæ\84¿æ\84\8fæ\8c\87æ\98\8eï¼\88被称为â\80\9cä»\96/她â\80\9dï¼\89',
+'gender-male' => '',
+'gender-female' => '她',
 'prefs-help-gender' => '这是选填项目。
 软件使用其以显示正确的性别称呼。
 该信息将会公开。',
@@ -1684,8 +1680,8 @@ $1",
 'action-block' => '阻止该用户编辑',
 'action-protect' => '更改本页面的保护级别',
 'action-rollback' => '快速回退最后编辑特定页面的用户的编辑',
-'action-import' => '从其他wiki导入页面',
-'action-importupload' => '从文件上传导入页面',
+'action-import' => '从其他wiki导入页面',
+'action-importupload' => '从文件上传导入页面',
 'action-patrol' => '标记他人的编辑为已巡查',
 'action-autopatrol' => '使你的编辑标记为已巡查',
 'action-unwatchedpages' => '查看未受监视页面的列表',
@@ -2187,6 +2183,7 @@ $1',
 'listusers' => '用户列表',
 'listusers-editsonly' => '只显示有编辑的用户',
 'listusers-creationsort' => '按建立日期排序',
+'listusers-desc' => '按降序排序',
 'usereditcount' => '$1次编辑',
 'usercreated' => '{{GENDER:$3|创建}}于$1 $2',
 'newpages' => '新页面',
@@ -2361,7 +2358,7 @@ $1',
 'notanarticle' => '非内容页面',
 'notvisiblerev' => '上次由不同用户所作的修订版本已经删除',
 'watchlist-details' => '不计讨论页面,你的监视列表中有$1个页面。',
-'wlheader-enotif' => '已启用电子邮件通知',
+'wlheader-enotif' => '已启用电子邮件通知',
 'wlheader-showupdated' => "你上次访问后更改的页面以'''粗体'''显示",
 'watchmethod-recent' => '检查被监视页面的最近编辑',
 'watchmethod-list' => '查看监视页中的最新修改',
@@ -2462,7 +2459,7 @@ $UNWATCHURL
 本页最后的编辑者是[[User:$3|$3]]([[User talk:$3|讨论]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])。',
 'editcomment' => '编辑摘要:"<i>$1</i>"。',
 'revertpage' => '已恢复[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])的编辑至[[User:$1|$1]]的最后一个修订版本',
-'revertpage-nouser' => '恢复由隐藏用户的编辑到[[User:$1|$1]]的最后一个修订版本',
+'revertpage-nouser' => '恢复由隐藏用户的编辑到{{GENDER:$1|[[User:$1|$1]]}}的最后一个修订版本',
 'rollback-success' => '已恢复$1的编辑,更改回$2的最后修订版本。',
 
 # Edit tokens
@@ -2596,7 +2593,7 @@ $1',
 'contributions' => '{{GENDER:$1|用户}}贡献',
 'contributions-title' => '$1的用户贡献',
 'mycontris' => '贡献',
-'contribsub2' => '$1的贡献($2)',
+'contribsub2' => '{{GENDER:$3|$1}}的贡献($2)',
 'nocontribs' => '没有找到符合特征的更改。',
 'uctop' => '(当前)',
 'month' => '截止月份:',
@@ -3002,7 +2999,7 @@ $2',
 'tooltip-pt-preferences' => '你的设置',
 'tooltip-pt-watchlist' => '你正在监视更改的页面的列表',
 'tooltip-pt-mycontris' => '你的贡献的列表',
-'tooltip-pt-login' => '我们鼓励登录,不过这不是强制的',
+'tooltip-pt-login' => '我们鼓励登录,不过这不是强制的',
 'tooltip-pt-anonlogin' => '我们鼓励你登录,不过这不是强制的',
 'tooltip-pt-logout' => '退出登录',
 'tooltip-ca-talk' => '关于内容页面的讨论',
@@ -3028,7 +3025,7 @@ $2',
 'tooltip-n-recentchanges' => '本wiki最近更改的列表',
 'tooltip-n-randompage' => '载入一个随机页面',
 'tooltip-n-help' => '查找帮助的地方',
-'tooltip-t-whatlinkshere' => '所有链至本页的wiki页面的列表',
+'tooltip-t-whatlinkshere' => '所有链至本页的维基页面的列表',
 'tooltip-t-recentchangeslinked' => '链自本页的页面的最近更改',
 'tooltip-feed-rss' => '本页面的RSS源',
 'tooltip-feed-atom' => '本页面的Atom源',
@@ -3062,6 +3059,7 @@ $2',
 'tooltip-undo' => '“撤销”可以恢复该编辑并在预览模式下打开编辑表单。它允许在摘要中加入原因。',
 'tooltip-preferences-save' => '保存系统设置',
 'tooltip-summary' => '请输入简短的摘要',
+'tooltip-iwiki' => '$1——$2',
 
 # Stylesheets
 'common.css' => '/* 此处的 CSS 将应用于所有的皮肤 */',
@@ -3966,7 +3964,10 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 'tags-tag' => '标签名称',
 'tags-display-header' => '更改列表中的表现形式',
 'tags-description-header' => '完整含义说明',
+'tags-active-header' => '是否活跃?',
 'tags-hitcount-header' => '标记的更改数',
+'tags-active-yes' => '是',
+'tags-active-no' => '否',
 'tags-edit' => '编辑',
 'tags-hitcount' => '$1个更改',
 
@@ -3984,8 +3985,7 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 
 # Database error messages
 'dberr-header' => '本wiki出现了问题',
-'dberr-problems' => '抱歉!
-本网站出现了一些技术问题。',
+'dberr-problems' => '抱歉!本网站出现了一些技术问题。',
 'dberr-again' => '请等待几分钟后重试。',
 'dberr-info' => '(无法连接到数据库服务器:$1)',
 'dberr-info-hidden' => '(无法连接到数据库服务器)',
index 3af96fd..ae384e9 100644 (file)
@@ -13,6 +13,7 @@
  * @author Bencmq
  * @author Breawycker
  * @author Ch.Andrew
+ * @author Cwlin0416
  * @author Danny0838
  * @author FireJackey
  * @author Frankou
@@ -509,7 +510,7 @@ $1',
 # 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).
 'aboutsite' => '關於 {{SITENAME}}',
 'aboutpage' => 'Project:關於',
-'copyright' => '本站內容以$1條款提供。',
+'copyright' => '除非另有說明,否則本站內容均以$1條款提供。',
 'copyrightpage' => '{{ns:project}}:版權訊息',
 'currentevents' => '新聞動態',
 'currentevents-url' => 'Project:新聞動態',
@@ -1626,8 +1627,8 @@ $1",
 'action-block' => '封鎖這位用戶的編輯',
 'action-protect' => '更改這個頁面的保護等級',
 'action-rollback' => '快速回退最後對特定頁面作出的編輯的用戶的所有編輯',
-'action-import' => 'ç\94±å\8f¦ä¸\80å\80\8bwikiå\8c¯å\85¥é\80\99å\80\8b頁面',
-'action-importupload' => '由一個檔案上載中匯入這個頁面',
+'action-import' => 'ç\94±å\85¶ä»\96 Wiki å\8c¯å\85¥頁面',
+'action-importupload' => '由檔案上傳匯入頁面',
 'action-patrol' => '標示其它的編輯為已巡查的',
 'action-autopatrol' => '將您的編輯標示為已巡查的',
 'action-unwatchedpages' => '檢視未被監視的頁面',
@@ -2090,7 +2091,7 @@ $1',
 
 # Miscellaneous special pages
 'nbytes' => '$1位元組',
-'ncategories' => '$1個分類',
+'ncategories' => '$1 個分類',
 'ninterwikis' => '$1 個跨維基',
 'nlinks' => '$1個連結',
 'nmembers' => '$1個成員',
@@ -2140,6 +2141,7 @@ $1',
 'listusers' => '用戶列表',
 'listusers-editsonly' => '只顯示有編輯的用戶',
 'listusers-creationsort' => '按建立日期排序',
+'listusers-desc' => '使用降冪排序',
 'usereditcount' => '$1 次編輯',
 'usercreated' => '$1 $2{{GENDER:$3|創建}}',
 'newpages' => '最新頁面',
@@ -2420,7 +2422,7 @@ $UNWATCHURL
 該頁最後的編輯者是[[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' => 'å\8f\96æ¶\88ç\94±é\9a±è\97\8fç\94¨æ\88¶ä½\9cå\87ºç\9a\84編輯ï¼\8c並æ\81¢å¾©å\88°[[User:$1|$1]]ç\9a\84æ\9c\80å¾\8cä¸\80å\80\8bä¿®è¨\82版本',
+'revertpage-nouser' => 'å·²ç\94±é\9a±è\97\8fç\9a\84使ç\94¨è\80\85é\82\84å\8e\9f編輯è\87³ä¸\8aå\80\8b {{GENDER:$1|[[使ç\94¨è\80\85:$1|$1]]}} ä¿®è¨\82ç\9a\84版本',
 'rollback-success' => '已恢復$1的編輯;
 更改回$2的最後修訂版本。',
 
@@ -2600,7 +2602,7 @@ $1',
 'whatlinkshere-hidetrans' => '$1包含',
 'whatlinkshere-hidelinks' => '$1連結',
 'whatlinkshere-hideimages' => '$1檔案連結',
-'whatlinkshere-filters' => '過濾器',
+'whatlinkshere-filters' => '搜尋',
 
 # Block/unblock
 'autoblockid' => '自動查封 #$1',
@@ -2874,7 +2876,7 @@ $1被封禁的理由是“$2”',
 'allmessagestext' => '這裡列出所有可定製的系統界面。
 如果想貢獻正宗的MediaWiki本地化的話,請參閱[//www.mediawiki.org/wiki/Localisation MediaWiki本地化]以及[//translatewiki.net translatewiki.net]。',
 'allmessagesnotsupportedDB' => "這個頁面無法使用,因為'''\$wgUseDatabaseMessages'''已被設定關閉。",
-'allmessages-filter-legend' => '過濾',
+'allmessages-filter-legend' => '搜尋',
 'allmessages-filter' => '以自定狀況過濾:',
 'allmessages-filter-unmodified' => '未修改',
 'allmessages-filter-all' => '所有',
@@ -3103,7 +3105,7 @@ $2',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|重定向}}; $3 {{PLURAL:$3|非重定向}})',
 'pageinfo-firstuser' => '頁面的建立者',
 'pageinfo-firsttime' => '頁面創建日期',
-'pageinfo-lastuser' => '最近編者',
+'pageinfo-lastuser' => 'æ\9c\80è¿\91編輯è\80\85',
 'pageinfo-lasttime' => '最新編輯日期',
 'pageinfo-edits' => '編輯總次數',
 'pageinfo-authors' => '作者總數',
@@ -3192,7 +3194,7 @@ $1',
 'newimages' => '新建圖片畫廊',
 'imagelisttext' => "以下是按$2排列的'''$1'''個檔案列表。",
 'newimages-summary' => '這個特殊頁面中顯示最後已上傳的檔案。',
-'newimages-legend' => '過濾',
+'newimages-legend' => '搜尋',
 'newimages-label' => '檔案名稱(或它的一部份):',
 'showhidebots' => '(機器人$1)',
 'noimages' => '無可檢視圖片。',
@@ -3924,7 +3926,7 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 # Special:Tags
 'tags' => '有效標籤',
 'tag-filter' => '[[Special:Tags|標籤]]過濾器:',
-'tag-filter-submit' => '過濾器',
+'tag-filter-submit' => '搜尋',
 'tag-list-wrapper' => '([[Special:Tags|$1個標籤]]:$2)',
 'tags-title' => '標籤',
 'tags-intro' => '這個頁面列示出在軟件中已標示的編輯,以及它們的解釋。',
@@ -3949,8 +3951,7 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 
 # Database error messages
 'dberr-header' => '這個 wiki 出現了問題',
-'dberr-problems' => '抱歉!
-這個網站出現了一些技術上的問題。',
+'dberr-problems' => '歉!這個網站出現了一些技術上的問題。',
 'dberr-again' => '嘗試等候數分鐘後,然後再試。',
 'dberr-info' => '(無法連繫到資料庫伺服器: $1)',
 'dberr-info-hidden' => '(無法與資料庫伺服器聯繫)',
index e29ffd9..30e93c9 100644 (file)
@@ -453,11 +453,11 @@ abstract class Maintenance {
         */
        public function runChild( $maintClass, $classFile = null ) {
                // Make sure the class is loaded first
-               if ( !MWInit::classExists( $maintClass ) ) {
+               if ( !class_exists( $maintClass ) ) {
                        if ( $classFile ) {
                                require_once $classFile;
                        }
-                       if ( !MWInit::classExists( $maintClass ) ) {
+                       if ( !class_exists( $maintClass ) ) {
                                $this->error( "Cannot spawn child: $maintClass" );
                        }
                }
@@ -477,15 +477,20 @@ abstract class Maintenance {
         * Do some sanity checking and basic setup
         */
        public function setup() {
-               global $wgCommandLineMode, $wgRequestTime;
+               global $IP, $wgCommandLineMode, $wgRequestTime;
 
                # Abort if called from a web server
                if ( isset( $_SERVER ) && isset( $_SERVER['REQUEST_METHOD'] ) ) {
                        $this->error( 'This script must be run from the command line', true );
                }
 
+               if ( $IP === null ) {
+                       $this->error( "\$IP not set, aborting!\n" .
+                               '(Did you forget to call parent::__construct() in your maintenance script?)', 1 );
+               }
+
                # Make sure we can handle script parameters
-               if ( !function_exists( 'hphp_thread_set_warmup_enabled' ) && !ini_get( 'register_argc_argv' ) ) {
+               if ( !defined( 'HPHP_VERSION' ) && !ini_get( 'register_argc_argv' ) ) {
                        $this->error( 'Cannot get command line arguments, register_argc_argv is set to false', true );
                }
 
@@ -1171,7 +1176,7 @@ abstract class Maintenance {
         * @return bool
         */
        public static function posix_isatty( $fd ) {
-               if ( !MWInit::functionExists( 'posix_isatty' ) ) {
+               if ( !function_exists( 'posix_isatty' ) ) {
                        return !$fd;
                } else {
                        return posix_isatty( $fd );
diff --git a/maintenance/checkLess.php b/maintenance/checkLess.php
new file mode 100644 (file)
index 0000000..d02d8a7
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Checks LESS files in known resources for errors
+ *
+ * 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 Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * @ingroup Maintenance
+ */
+class CheckLess extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = 'Checks LESS files for errors';
+       }
+
+       public function execute() {
+               $result = false;
+               $resourceLoader = new ResourceLoader();
+               foreach ( $resourceLoader->getModuleNames() as $name ) {
+                       /** @var ResourceLoaderFileModule $module */
+                       $module = $resourceLoader->getModule( $name );
+                       if ( !$module || !$module instanceof ResourceLoaderFileModule ) {
+                               continue;
+                       }
+
+                       $hadErrors = false;
+                       foreach ( $module->getAllStyleFiles() as $file ) {
+                               if ( $module->getStyleSheetLang( $file ) !== 'less' ) {
+                                       continue;
+                               }
+                               try {
+                                       $compiler = ResourceLoader::getLessCompiler();
+                                       $compiler->compileFile( $file );
+                               } catch ( Exception $e ) {
+                                       if ( !$hadErrors ) {
+                                               $this->error( "Errors checking module $name:\n" );
+                                               $hadErrors = true;
+                                       }
+                                       $this->error( $e->getMessage() . "\n" );
+                                       $result = true;
+                               }
+                       }
+               }
+               if ( !$result ) {
+                       $this->output( "No errors found\n" );
+               } else {
+                       die( 1 );
+               }
+       }
+}
+
+$maintClass = 'CheckLess';
+require_once RUN_MAINTENANCE_IF_MAIN;
index 9dd62a3..c2ba555 100644 (file)
@@ -113,7 +113,7 @@ class UploadStashCleanup extends Maintenance {
 
                // Apparently lots of stash files are not registered in the DB...
                $dir = $tempRepo->getZonePath( 'public' );
-               $iterator = $tempRepo->getBackend()->getFileList( array( 'dir' => $dir ) );
+               $iterator = $tempRepo->getBackend()->getFileList( array( 'dir' => $dir, 'adviseStat' => 1 ) );
                $this->output( "Deleting orphaned temp files...\n" );
                if ( strpos( $dir, '/local-temp' ) === false ) { // sanity check
                        $this->error( "Temp repo is not using the temp container.", 1 ); // die
index 0c1ace1..164b5b0 100644 (file)
@@ -4446,7 +4446,6 @@ wikipage
 wikipedia
 wikipedian
 wikipedias
-wikiprintable
 wikis
 wikisyntax
 wikitable
index 69b4b9c..3bd508c 100644 (file)
@@ -53,8 +53,6 @@ $maintenance->setup();
 // to $maintenance->mSelf. Keep that here for b/c
 $self = $maintenance->getName();
 
-# Get the MWInit class
-require_once "$IP/includes/Init.php";
 # Start the autoloader, so that extensions can derive classes from core files
 require_once "$IP/includes/AutoLoader.php";
 # Stub the profiler
@@ -68,7 +66,7 @@ if ( file_exists( "$IP/StartProfiler.php" ) ) {
 
 // Some other requires
 require_once "$IP/includes/Defines.php";
-require_once MWInit::compiledPath( 'includes/DefaultSettings.php' );
+require_once "$IP/includes/DefaultSettings.php";
 
 # Load composer's autoloader if present
 if ( is_readable( "$IP/vendor/autoload.php" ) ) {
@@ -86,7 +84,7 @@ if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
                # Maybe a hook?
                global $cluster;
                $cluster = 'pmtpa';
-               require MWInit::interpretedPath( '../wmf-config/wgConf.php' );
+               require "$IP/../wmf-config/wgConf.php";
        }
        // Require the configuration (probably LocalSettings.php)
        require $maintenance->loadSettings();
@@ -95,7 +93,7 @@ if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
 if ( $maintenance->getDbType() === Maintenance::DB_ADMIN &&
        is_readable( "$IP/AdminSettings.php" ) )
 {
-       require MWInit::interpretedPath( 'AdminSettings.php' );
+       require "$IP/AdminSettings.php";
 }
 
 if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
@@ -105,7 +103,7 @@ if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
 }
 $maintenance->finalSetup();
 // Some last includes
-require_once MWInit::compiledPath( 'includes/Setup.php' );
+require_once "$IP/includes/Setup.php";
 
 // Much much faster startup than creating a title object
 $wgTitle = null;
index 4f6bed5..0b21a1f 100644 (file)
@@ -378,7 +378,7 @@ class GenerateSitemap extends Maintenance {
        function open( $file, $flags ) {
                $resource = $this->compress ? gzopen( $file, $flags ) : fopen( $file, $flags );
                if ( $resource === false ) {
-                       wfDebugDieBacktrace( __METHOD__ . " error opening file $file with flags $flags. Check permissions?" );
+                       throw new MWException( __METHOD__ . " error opening file $file with flags $flags. Check permissions?" );
                }
                return $resource;
        }
@@ -388,7 +388,7 @@ class GenerateSitemap extends Maintenance {
         */
        function write( &$handle, $str ) {
                if ( $handle === true || $handle === false ) {
-                       wfDebugDieBacktrace( __METHOD__ . " was passed a boolean as a file handle.\n" );
+                       throw new MWException( __METHOD__ . " was passed a boolean as a file handle.\n" );
                }
                if ( $this->compress ) {
                        gzwrite( $handle, $str );
index ac9d8cb..381ddae 100644 (file)
@@ -52,7 +52,7 @@ Options:
        * mode:  Output format, can be either:
                * text:   Text output on the console (default)
                * wiki:   Wiki format, with * at beginning of each line
-               * php:    Output text as PHP syntax in a array $dupeMessages
+               * php:    Output text as PHP syntax in an array named \$dupeMessages
                * raw:    Raw output for duplicates
 TEXT;
 }
index 0cdc069..8676d74 100644 (file)
@@ -141,6 +141,7 @@ $wgIgnoredMessages = array(
        'statistics-footer',
        'talkpagetext',
        'uploadfooter',
+       'upload-default-description',
        'listgrouprights-link',
        'search-interwiki-custom',
        'allpages-summary',
@@ -260,6 +261,7 @@ $wgIgnoredMessages = array(
        'redirect-text',
        'edithelppage',
        'autocomment-prefix',
+       'move-redirect-text',
 );
 
 /** Optional messages, which may be translated only if changed in the target language. */
@@ -483,6 +485,7 @@ $wgOptionalMessages = array(
        'limitreport-ppgeneratednodes-value',
        'limitreport-expansiondepth-value',
        'limitreport-expensivefunctioncount-value',
+       'tooltip-iwiki',
 );
 
 /** Exif messages, which may be set as optional in several checks, but are generally mandatory */
index b2db694..ca3a4f5 100644 (file)
@@ -485,6 +485,8 @@ $wgMessageStructure = array(
                'userlogin-resetpassword-link',
                'helplogin-url',
                'userlogin-helplink',
+               'userlogin-loggedin',
+               'userlogin-createanother',
                'createacct-join',
                'createacct-another-join',
                'createacct-emailrequired',
@@ -1388,6 +1390,7 @@ $wgMessageStructure = array(
                'upload-preferred',
                'upload-prohibited',
                'uploadfooter',
+               'upload-default-description',
                'uploadlog',
                'uploadlogpage',
                'uploadlogpagetext',
@@ -1840,6 +1843,7 @@ $wgMessageStructure = array(
                'listusers-summary',
                'listusers-editsonly',
                'listusers-creationsort',
+               'listusers-desc',
                'usereditcount',
                'usercreated',
                'newpages',
@@ -2446,6 +2450,7 @@ $wgMessageStructure = array(
                'movesubpagetext',
                'movenosubpage',
                'movereason',
+               'move-redirect-text',
                'revertmove',
                'delete_and_move',
                'delete_and_move_text',
@@ -2725,6 +2730,7 @@ $wgMessageStructure = array(
                'tooltip-undo',
                'tooltip-preferences-save',
                'tooltip-summary',
+               'tooltip-iwiki',
        ),
        'stylesheets' => array(
                'common.css',
@@ -3770,7 +3776,10 @@ $wgMessageStructure = array(
                'tags-tag',
                'tags-display-header',
                'tags-description-header',
+               'tags-active-header',
                'tags-hitcount-header',
+               'tags-active-yes',
+               'tags-active-no',
                'tags-edit',
                'tags-hitcount',
        ),
index 28b041a..eda101e 100644 (file)
@@ -80,7 +80,7 @@ class mcTest extends Maintenance {
                        $get = 0;
                        $time_start = $this->microtime_float();
                        for ( $i = 1; $i <= $iterations; $i++ ) {
-                               if ( !is_null( $mcc->set( "test$i", $i ) ) ) {
+                               if ( $mcc->set( "test$i", $i ) ) {
                                        $set++;
                                }
                        }
index 75b7ef0..e918337 100644 (file)
@@ -36,10 +36,14 @@ $mmfl = false;
  * @ingroup Maintenance
  */
 class MergeMessageFileList extends Maintenance {
+       /**
+        * @var bool
+        */
+       protected $hasError;
 
        function __construct() {
                parent::__construct();
-               $this->addOption( 'list-file', 'A file containing a list of extension setup files, one per line.', true, true );
+               $this->addOption( 'list-file', 'A file containing a list of extension setup files, one per line.', false, true );
                $this->addOption( 'extensions-dir', 'Path where extensions can be found.', false, true );
                $this->addOption( 'output', 'Send output to this file (omit for stdout)', false, true );
                $this->mDescription = 'Merge $wgExtensionMessagesFiles from various extensions to produce a ' .
@@ -47,26 +51,25 @@ class MergeMessageFileList extends Maintenance {
        }
 
        public function execute() {
-               global $mmfl;
+               global $mmfl, $wgExtensionEntryPointListFiles;
 
-               # Add setup files contained in file passed to --list-file
-               $lines = file( $this->getOption( 'list-file' ) );
-               if ( $lines === false ) {
-                       $this->error( 'Unable to open list file.' );
+               if ( !count( $wgExtensionEntryPointListFiles )
+                       && !$this->hasOption( 'list-file' )
+                       && !$this->hasOption( 'extensions-dir' )
+               ) {
+                       $this->error( "Either --list-file or --extensions-dir must be provided if " .
+                               "\$wgExtensionEntryPointListFiles is not set", 1 );
                }
+
                $mmfl = array( 'setupFiles' => array() );
 
-               # Strip comments, discard empty lines, and trim leading and trailing
-               # whitespace. Comments start with '#' and extend to the end of the line.
-               foreach ( $lines as $line ) {
-                       $line = trim( preg_replace( '/#.*/', '', $line ) );
-                       if ( $line !== '' ) {
-                               $mmfl['setupFiles'][] = $line;
-                       }
+               # Add setup files contained in file passed to --list-file
+               if ( $this->hasOption( 'list-file' ) ) {
+                       $extensionPaths = $this->readFile( $this->getOption( 'list-file' ) );
+                       $mmfl['setupFiles'] = array_merge( $mmfl['setupFiles'], $extensionPaths );
                }
 
                # Now find out files in a directory
-               $hasError = false;
                if ( $this->hasOption( 'extensions-dir' ) ) {
                        $extdir = $this->getOption( 'extensions-dir' );
                        $entries = scandir( $extdir );
@@ -78,13 +81,19 @@ class MergeMessageFileList extends Maintenance {
                                if ( file_exists( $extfile ) ) {
                                        $mmfl['setupFiles'][] = $extfile;
                                } else {
-                                       $hasError = true;
+                                       $this->hasError = true;
                                        $this->error( "Extension {$extname} in {$extdir} lacks expected {$extname}.php" );
                                }
                        }
                }
 
-               if ( $hasError ) {
+               # Add setup files defined via configuration
+               foreach ( $wgExtensionEntryPointListFiles as $points ) {
+                       $extensionPaths = $this->readFile( $points );
+                       $mmfl['setupFiles'] = array_merge( $mmfl['setupFiles'], $extensionPaths );
+               }
+
+               if ( $this->hasError ) {
                        $this->error( "Some files are missing (see above). Giving up.", 1 );
                }
 
@@ -95,6 +104,38 @@ class MergeMessageFileList extends Maintenance {
                        $mmfl['quiet'] = true;
                }
        }
+
+       /**
+        * @param string $fileName
+        * @return array List of absolute extension paths
+        */
+       private function readFile( $fileName ) {
+               global $IP;
+
+               $files = array();
+               $fileLines = file( $fileName );
+               if ( $fileLines === false ) {
+                       $this->hasError = true;
+                       $this->error( "Unable to open list file $fileName." );
+                       return $files;
+               }
+               # Strip comments, discard empty lines, and trim leading and trailing
+               # whitespace. Comments start with '#' and extend to the end of the line.
+               foreach ( $fileLines as $extension ) {
+                       $extension = trim( preg_replace( '/#.*/', '', $extension ) );
+                       if ( $extension !== '' ) {
+                               # Paths may use the string $IP to be substituted by the actual value
+                               $extension = str_replace( '$IP', $IP, $extension );
+                               if ( file_exists( $extension ) ) {
+                                       $files[] = $extension;
+                               } else {
+                                       $this->hasError = true;
+                                       $this->error( "Extension {$extension} doesn't exist" );
+                               }
+                       }
+               }
+               return $files;
+       }
 }
 
 require_once RUN_MAINTENANCE_IF_MAIN;
@@ -103,11 +144,11 @@ foreach ( $mmfl['setupFiles'] as $fileName ) {
        if ( strval( $fileName ) === '' ) {
                continue;
        }
-       $fileName = str_replace( '$IP', $IP, $fileName );
        if ( empty( $mmfl['quiet'] ) ) {
                fwrite( STDERR, "Loading data from $fileName\n" );
        }
-       if ( !( include_once $fileName ) ) {
+       // Include the extension to update $wgExtensionMessagesFiles
+       if ( !( include_once( $fileName ) ) ) {
                fwrite( STDERR, "Unable to read $fileName\n" );
                exit( 1 );
        }
@@ -126,10 +167,7 @@ $dirs = array(
 );
 
 foreach ( $dirs as $dir ) {
-       $s = preg_replace(
-               "/'" . preg_quote( $dir, '/' ) . "([^']*)'/",
-               '"$IP\1"',
-               $s );
+       $s = preg_replace( "/'" . preg_quote( $dir, '/' ) . "([^']*)'/", '"$IP\1"', $s );
 }
 
 if ( isset( $mmfl['output'] ) ) {
index b76f57c..c474f00 100644 (file)
@@ -505,8 +505,6 @@ CREATE TABLE /*$wgDBprefix*/recentchanges (
    rc_this_oldid INT DEFAULT 0,
    rc_last_oldid INT DEFAULT 0,
    rc_type tinyint DEFAULT 0,
-   rc_moved_to_ns BIT DEFAULT 0,
-   rc_moved_to_title NVARCHAR(255)  DEFAULT '',
    rc_patrolled BIT DEFAULT 0,
    rc_ip NCHAR(40) DEFAULT '',
    rc_old_len INT DEFAULT 0,
index 74fb1b1..57b6e7e 100644 (file)
@@ -409,8 +409,6 @@ CREATE TABLE &mw_prefix.recentchanges (
   rc_this_oldid      NUMBER      DEFAULT 0 NOT NULL,
   rc_last_oldid      NUMBER      DEFAULT 0 NOT NULL,
   rc_type            CHAR(1)         DEFAULT '0' NOT NULL,
-  rc_moved_to_ns     NUMBER          DEFAULT 0 NOT NULL,
-  rc_moved_to_title  VARCHAR2(255),
   rc_patrolled       CHAR(1)         DEFAULT '0' NOT NULL,
   rc_ip              VARCHAR2(15),
   rc_old_len         NUMBER,
index 30a8e1b..4d44705 100644 (file)
@@ -405,8 +405,6 @@ CREATE TABLE recentchanges (
   rc_this_oldid      INTEGER      NOT NULL,
   rc_last_oldid      INTEGER      NOT NULL,
   rc_type            SMALLINT     NOT NULL  DEFAULT 0,
-  rc_moved_to_ns     SMALLINT,
-  rc_moved_to_title  TEXT,
   rc_patrolled       SMALLINT     NOT NULL  DEFAULT 0,
   rc_ip              CIDR,
   rc_old_len         INTEGER,
diff --git a/maintenance/purgeChangedPages.php b/maintenance/purgeChangedPages.php
new file mode 100644 (file)
index 0000000..e1c6ab6
--- /dev/null
@@ -0,0 +1,185 @@
+<?php
+/**
+ * Send purge requests for pages edited in date range to squid/varnish.
+ *
+ * @section LICENSE
+ * 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 Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Maintenance script that sends purge requests for pages edited in a date
+ * range to squid/varnish.
+ *
+ * Can be used to recover from an HTCP message partition or other major cache
+ * layer interruption.
+ *
+ * @ingroup Maintenance
+ */
+class PurgeChangedPages extends Maintenance {
+
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = 'Send purge requests for edits in date range to squid/varnish';
+               $this->addOption( 'starttime', 'Starting timestamp', true, true );
+               $this->addOption( 'endtime', 'Ending timestamp', true, true );
+               $this->addOption( 'htcp-dest', 'HTCP announcement destination (IP:port)', false, true );
+               $this->addOption( 'dry-run', 'Do not send purge requests' );
+               $this->addOption( 'verbose', 'Show more output', false, false, 'v' );
+               $this->setBatchSize( 100 );
+       }
+
+       public function execute() {
+               global $wgHTCPRouting;
+
+               if ( $this->hasOption( 'htcp-dest' ) ) {
+                       $parts = explode( ':', $this->getOption( 'htcp-dest' ) );
+                       if ( count( $parts ) < 2 ) {
+                               // Add default htcp port
+                               $parts[] = '4827';
+                       }
+
+                       // Route all HTCP messages to provided host:port
+                       $wgHTCPRouting = array(
+                               '' => array( 'host' => $parts[0], 'port' => $parts[1] ),
+                       );
+                       if ( $this->hasOption( 'verbose' ) ) {
+                               $this->output( "HTCP broadcasts to {$parts[0]}:{$parts[1]}\n" );
+                       }
+               }
+
+               $dbr = $this->getDB( DB_SLAVE );
+               $minTime = $dbr->timestamp( $this->getOption( 'starttime' ) );
+               $maxTime = $dbr->timestamp( $this->getOption( 'endtime' ) );
+
+               if ( $maxTime < $minTime ) {
+                       $this->error( "\nERROR: starttime after endtime\n" );
+                       $this->maybeHelp( true );
+               }
+
+               $stuckCount = 0; // loop breaker
+               while ( true ) {
+                       // Adjust bach size if we are stuck in a second that had many changes
+                       $bSize = $this->mBatchSize + ( $stuckCount * $this->mBatchSize );
+
+                       $res = $dbr->select(
+                               array( 'page', 'revision' ),
+                               array(
+                                       'rev_timestamp',
+                                       'page_namespace',
+                                       'page_title',
+                               ),
+                               array(
+                                       "rev_timestamp > " . $dbr->addQuotes( $minTime ),
+                                       "rev_timestamp <= " . $dbr->addQuotes( $maxTime ),
+                                       // Only get rows where the revision is the latest for the page.
+                                       // Other revisions would be duplicate and we don't need to purge if
+                                       // there has been an edit after the interesting time window.
+                                       "page_latest = rev_id",
+                               ),
+                               __METHOD__,
+                               array( 'ORDER BY' => 'rev_timestamp', 'LIMIT' => $bSize ),
+                               array(
+                                       'page' => array( 'INNER JOIN', 'rev_page=page_id' ),
+                               )
+                       );
+
+                       if ( !$res->numRows() ) {
+                               // nothing more found so we are done
+                               break;
+                       }
+
+                       // Kludge to not get stuck in loops for batches with the same timestamp
+                       list( $rows, $lastTime ) = $this->pageableSortedRows( $res, 'rev_timestamp', $bSize );
+                       if ( !count( $rows ) ) {
+                               ++$stuckCount;
+                               continue;
+                       }
+                       // Reset suck counter
+                       $stuckCount = 0;
+
+                       $this->output( "Processing changes from {$minTime} to {$lastTime}.\n" );
+
+                       // Advance past the last row next time
+                       $minTime = $lastTime;
+
+                       // Create list of URLs from page_namespace + page_title
+                       $urls = array();
+                       foreach ( $rows as $row ) {
+                               $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+                               $urls[] = $title->getInternalURL();
+                       }
+
+                       if ( $this->hasOption( 'dry-run' ) || $this->hasOption( 'verbose' ) ) {
+                               $this->output( implode( "\n", $urls ) . "\n" );
+                               if ( $this->hasOption( 'dry-run' ) ) {
+                                       continue;
+                               }
+                       }
+
+                       // Send batch of purge requests out to squids
+                       $squid = new SquidUpdate( $urls );
+                       $squid->doUpdate();
+               }
+
+               $this->output( "Done!\n" );
+       }
+
+       /**
+        * Remove all the rows in a result set with the highest value for column
+        * $column unless the number of rows is less $limit. This returns the new
+        * array of rows and the highest value of column $column for the rows left.
+        * The ordering of rows is maintained.
+        *
+        * This is useful for paging on mostly-unique values that may sometimes
+        * have large clumps of identical values. It should be safe to do the next
+        * query on items with a value higher than the highest of the rows returned here.
+        * If this returns an empty array for a non-empty query result, then all the rows
+        * had the same column value and the query should be repeated with a higher LIMIT.
+        *
+        * @TODO: move this elsewhere
+        *
+        * @param ResultWrapper $res Query result sorted by $column (ascending)
+        * @param string $column
+        * @return array (array of rows, string column value)
+        */
+       protected function pageableSortedRows( ResultWrapper $res, $column, $limit ) {
+               $rows = iterator_to_array( $res, false );
+               $count = count( $rows );
+               if ( !$count ) {
+                       return array( array(), null ); // nothing to do
+               } elseif ( $count < $limit ) {
+                       return array( $rows, $rows[$count - 1]->$column ); // no more rows left
+               }
+               $lastValue = $rows[$count - 1]->$column; // should be the highest
+               for ( $i = $count - 1; $i >= 0; --$i ) {
+                       if ( $rows[$i]->$column === $lastValue ) {
+                               unset( $rows[$i] );
+                       } else {
+                               break;
+                       }
+               }
+               $lastValueLeft = count( $rows ) ? $rows[count( $rows ) - 1]->$column : null;
+               return array( $rows, $lastValueLeft );
+       }
+}
+
+$maintClass = "PurgeChangedPages";
+require_once RUN_MAINTENANCE_IF_MAIN;
index 0e6725c..98ea930 100644 (file)
@@ -160,7 +160,7 @@ class RefreshLinks extends Maintenance {
                        }
 
                        if ( !$redirectsOnly ) {
-                               $this->output( "Refreshing links table.\n" );
+                               $this->output( "Refreshing links tables.\n" );
                                $this->output( "Starting from page_id $start of $end.\n" );
 
                                for ( $id = $start; $id <= $end; $id++ ) {
index e054a36..78c2e48 100644 (file)
@@ -59,7 +59,7 @@ class ShowJobs extends Maintenance {
                                $pending = $queue->getSize();
                                $claimed = $queue->getAcquiredCount();
                                $abandoned = $queue->getAbandonedCount();
-                               $active = ( $claimed - $abandoned );
+                               $active = $claimed - $abandoned;
                                if ( ( $pending + $claimed ) > 0 ) {
                                        $this->output(
                                                "{$type}: $pending queued; " .
index df1bc06..d37ca47 100644 (file)
@@ -1132,7 +1132,7 @@ CREATE TABLE /*_*/searchindex (
 
   -- Munged version of body text
   si_text mediumtext NOT NULL
-) ENGINE=MyISAM;
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
 CREATE UNIQUE INDEX /*i*/si_page ON /*_*/searchindex (si_page);
 CREATE FULLTEXT INDEX /*i*/si_title ON /*_*/searchindex (si_title);
diff --git a/maintenance/tidyUpBug37714.php b/maintenance/tidyUpBug37714.php
new file mode 100644 (file)
index 0000000..1ad9c7e
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Fixes all rows affected by https://bugzilla.wikimedia.org/show_bug.cgi?id=37714
+ */
+class TidyUpBug37714 extends Maintenance {
+       public function execute() {
+               // Search for all log entries which are about changing the visability of other log entries.
+               $result = wfGetDB( DB_SLAVE )->select(
+                       'logging',
+                       array( 'log_id', 'log_params' ),
+                       array(
+                               'log_type' => array( 'suppress', 'delete' ),
+                               'log_action' => 'event',
+                               'log_namespace' => NS_SPECIAL,
+                               'log_title' => SpecialPage::getTitleFor( 'Log' )->getText()
+                       ),
+                       __METHOD__
+               );
+
+               foreach ( $result as $row ) {
+                       $paramLines = explode( "\n", $row->log_params );
+                       $ids = explode( ',', $paramLines[0] ); // Array dereferencing is PHP >= 5.4 :(
+                       $result = wfGetDB( DB_SLAVE )->select( // Work out what log entries were changed here.
+                               'logging',
+                               'log_type',
+                               array( 'log_id' => $ids ),
+                               __METHOD__,
+                               'DISTINCT'
+                       );
+                       if ( $result->numRows() === 1 ) {
+                               // If there's only one type, the target title can be set to include it.
+                               $logTitle = SpecialPage::getTitleFor( 'Log', $result->current()->log_type )->getText();
+                               $this->output( 'Set log_title to "' . $logTitle . '" for log entry ' . $row->log_id . ".\n" );
+                               wfGetDB( DB_MASTER )->update(
+                                       'logging',
+                                       array( 'log_title' => $logTitle ),
+                                       array( 'log_id' => $row->log_id ),
+                                       __METHOD__
+                               );
+                               wfWaitForSlaves();
+                       }
+               }
+       }
+}
+
+$maintClass = 'TidyUpBug37714';
+require_once RUN_MAINTENANCE_IF_MAIN;
index 5df9f32..378217f 100644 (file)
@@ -140,10 +140,6 @@ class UpdateMediaWiki extends Maintenance {
                                $updates[] = 'noschema';
                        }
                        $updates[] = 'stats';
-
-                       if ( !$this->hasOption( 'nopurge' ) ) {
-                               $updates[] = 'purge';
-                       }
                }
 
                $updater = DatabaseUpdater::newForDb( $db, $shared, $this );
index 6fb29be..8bd80c9 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Helper class for update.php and upgrade1_5.php.
+ * Helper class for update.php.
  *
  * Copyright © 2005 Brion Vibber <brion@pobox.com>
  * http://www.mediawiki.org/
@@ -158,11 +158,7 @@ class UserDupes {
         * @access private
         */
        function lock() {
-               if ( $this->newSchema() ) {
-                       $set = array( 'user', 'revision' );
-               } else {
-                       $set = array( 'user', 'cur', 'old' );
-               }
+               $set = array( 'user', 'revision' );
                $names = array_map( array( $this, 'lockTable' ), $set );
                $tables = implode( ',', $names );
 
@@ -173,14 +169,6 @@ class UserDupes {
                return $this->db->tableName( $table ) . ' WRITE';
        }
 
-       /**
-        * @return bool
-        * @access private
-        */
-       function newSchema() {
-               return MWInit::classExists( 'Revision' );
-       }
-
        /**
         * @access private
         */
@@ -266,27 +254,10 @@ class UserDupes {
         * @access private
         */
        function editCount( $userid ) {
-               if ( $this->newSchema() ) {
-                       return $this->editCountOn( 'revision', 'rev_user', $userid );
-               } else {
-                       return $this->editCountOn( 'cur', 'cur_user', $userid ) +
-                               $this->editCountOn( 'old', 'old_user', $userid );
-               }
-       }
-
-       /**
-        * Count the number of hits on a given table for this account.
-        * @param $table string
-        * @param $field string
-        * @param $userid int
-        * @return int
-        * @access private
-        */
-       function editCountOn( $table, $field, $userid ) {
                return intval( $this->db->selectField(
-                       $table,
+                       'revision',
                        'COUNT(*)',
-                       array( $field => $userid ),
+                       array( 'rev_user' => $userid ),
                        __METHOD__ ) );
        }
 
@@ -296,26 +267,10 @@ class UserDupes {
         * @access private
         */
        function reassignEdits( $from, $to ) {
-               $set = $this->newSchema()
-                       ? array( 'revision' => 'rev_user' )
-                       : array( 'cur' => 'cur_user', 'old' => 'old_user' );
-               foreach ( $set as $table => $field ) {
-                       $this->reassignEditsOn( $table, $field, $from, $to );
-               }
-       }
-
-       /**
-        * @param $table string
-        * @param $field string
-        * @param $from int
-        * @param $to int
-        * @access private
-        */
-       function reassignEditsOn( $table, $field, $from, $to ) {
-               $this->out( "reassigning on $table... " );
-               $this->db->update( $table,
-                       array( $field => $to ),
-                       array( $field => $from ),
+               $this->out( 'reassigning... ' );
+               $this->db->update( 'revision',
+                       array( 'rev_user' => $to ),
+                       array( 'rev_user' => $from ),
                        __METHOD__ );
                $this->out( "ok. " );
        }
index eeb3ae7..880726b 100644 (file)
@@ -92,7 +92,8 @@ return array(
                        'common/commonElements.css' => array( 'media' => 'screen' ),
                        'common/commonContent.css' => array( 'media' => 'screen' ),
                        'common/commonInterface.css' => array( 'media' => 'screen' ),
-                       'vector/screen.css' => array( 'media' => 'screen' ),
+                       'vector/screen.less' => array( 'media' => 'screen' ),
+                       'vector/externalLinks.less' => array( 'media' => 'screen' ),
                        'vector/screen-hd.css' => array( 'media' => 'screen and (min-width: 982px)' ),
                ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
@@ -108,6 +109,25 @@ return array(
                'remoteBasePath' => $GLOBALS['wgStylePath'],
                'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
+       'skins.vector.collapsibleNav' => array(
+               'styles' => array(
+                       'vector/collapsibleNav.less',
+               ),
+               'scripts' => array(
+                       'vector/collapsibleNav.js',
+               ),
+               'messages' => array(
+                       'vector-collapsiblenav-more',
+               ),
+               'dependencies' => array(
+                       'jquery.client',
+                       'jquery.cookie',
+                       'jquery.tabIndex',
+               ),
+               'remoteBasePath' => $GLOBALS['wgStylePath'],
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'position' => 'bottom',
+       ),
 
        /* jQuery */
 
@@ -261,7 +281,10 @@ return array(
                'scripts' => 'resources/jquery/jquery.tablesorter.js',
                'styles' => 'resources/jquery/jquery.tablesorter.css',
                'messages' => array( 'sort-descending', 'sort-ascending' ),
-               'dependencies' => 'jquery.mwExtension',
+               'dependencies' => array(
+                       'jquery.mwExtension',
+                       'mediawiki.language.months',
+               ),
        ),
        'jquery.textSelection' => array(
                'scripts' => 'resources/jquery/jquery.textSelection.js',
@@ -687,7 +710,10 @@ return array(
        ),
        'mediawiki.Title' => array(
                'scripts' => 'resources/mediawiki/mediawiki.Title.js',
-               'dependencies' => 'mediawiki.util',
+               'dependencies' => array(
+                       'jquery.byteLength',
+                       'mediawiki.util',
+               ),
        ),
        'mediawiki.Uri' => array(
                'scripts' => 'resources/mediawiki/mediawiki.Uri.js',
@@ -1120,11 +1146,6 @@ return array(
                ),
                'position' => 'top',
        ),
-       'mediawiki.legacy.wikiprintable' => array(
-               'styles' => array( 'common/wikiprintable.css' => array( 'media' => 'print' ) ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
-       ),
        'mediawiki.ui' => array(
                'skinStyles' => array(
                        'default' => 'resources/mediawiki.ui/mediawiki.ui.default.css',
index ffe4d7d..bd61d96 100644 (file)
Binary files a/resources/jquery.chosen/chosen-sprite@2x.png and b/resources/jquery.chosen/chosen-sprite@2x.png differ
index dbbbfc7..ef17cc3 100644 (file)
Binary files a/resources/jquery.tipsy/images/tipsy.png and b/resources/jquery.tipsy/images/tipsy.png differ
index 26b9da5..e425e6e 100644 (file)
Binary files a/resources/jquery.ui/themes/default/images/ui-bg_flat_0_aaaaaa_40x100.png and b/resources/jquery.ui/themes/default/images/ui-bg_flat_0_aaaaaa_40x100.png differ
index b4b148d..72d4757 100644 (file)
Binary files a/resources/jquery.ui/themes/default/images/ui-bg_flat_75_ffffff_40x100.png and b/resources/jquery.ui/themes/default/images/ui-bg_flat_75_ffffff_40x100.png differ
index ad3d634..3b2914a 100644 (file)
Binary files a/resources/jquery.ui/themes/default/images/ui-bg_glass_55_fbf9ee_1x400.png and b/resources/jquery.ui/themes/default/images/ui-bg_glass_55_fbf9ee_1x400.png differ
index 42ccba2..8569c1b 100644 (file)
Binary files a/resources/jquery.ui/themes/default/images/ui-bg_glass_65_ffffff_1x400.png and b/resources/jquery.ui/themes/default/images/ui-bg_glass_65_ffffff_1x400.png differ
index 5a46b47..d6cc3c5 100644 (file)
Binary files a/resources/jquery.ui/themes/default/images/ui-bg_glass_75_dadada_1x400.png and b/resources/jquery.ui/themes/default/images/ui-bg_glass_75_dadada_1x400.png differ
index 7c9fa6c..3cd467e 100644 (file)
Binary files a/resources/jquery.ui/themes/default/images/ui-bg_highlight-soft_75_cccccc_1x100.png and b/resources/jquery.ui/themes/default/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ
index f9fde8b..12a80c8 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/titlebar-fade.png and b/resources/jquery.ui/themes/vector/images/titlebar-fade.png differ
index 83d6ff8..84ed2a2 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 529d7b8..7cfbfeb 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 3289617..eb07028 100644 (file)
Binary files a/resources/jquery/images/jquery.arrowSteps.head-ltr.png and b/resources/jquery/images/jquery.arrowSteps.head-ltr.png differ
index 3d9f70c..7ea2fdb 100644 (file)
Binary files a/resources/jquery/images/jquery.arrowSteps.head-rtl.png and b/resources/jquery/images/jquery.arrowSteps.head-rtl.png differ
index 92b872b..3ad990b 100644 (file)
Binary files a/resources/jquery/images/jquery.arrowSteps.tail-ltr.png and b/resources/jquery/images/jquery.arrowSteps.tail-ltr.png differ
index 3929bbb..19efb6c 100644 (file)
Binary files a/resources/jquery/images/marker.png and b/resources/jquery/images/marker.png differ
index b0a4d40..fe08de0 100644 (file)
Binary files a/resources/jquery/images/mask.png and b/resources/jquery/images/mask.png differ
index 27c4c6c..0cd6417 100644 (file)
                                        $containers.hide();
                                        hookCallback();
                                } else {
-                                       $.when( $containers.stop( true, true ).fadeOut() ).then( hookCallback );
+                                       $containers.stop( true, true ).fadeOut().promise().done( hookCallback );
                                }
                        } else {
-                               $.when( $containers.stop( true, true ).fadeIn() ).then( hookCallback );
+                               $containers.stop( true, true ).fadeIn().promise().done( hookCallback );
                        }
 
                } else if ( !options.plainMode && ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) ) {
                                        $containers.hide();
                                        hookCallback();
                                } else {
-                                       $.when( $containers.stop( true, true ).slideUp() ).then( hookCallback );
+                                       $containers.stop( true, true ).slideUp().promise().done( hookCallback );
                                }
                        } else {
-                               $.when( $containers.stop( true, true ).slideDown() ).then( hookCallback );
+                               $containers.stop( true, true ).slideDown().promise().done( hookCallback );
                        }
 
                } else {
                                                $collapsibleContent.hide();
                                                hookCallback();
                                        } else {
-                                               $.when( $collapsibleContent.slideUp() ).then( hookCallback );
+                                               $collapsibleContent.slideUp().promise().done( hookCallback );
                                        }
                                } else {
-                                       $.when( $collapsibleContent.slideDown() ).then( hookCallback );
+                                       $collapsibleContent.slideDown().promise().done( hookCallback );
                                }
 
                        // Otherwise assume this is a customcollapse with a remote toggle
                                                hookCallback();
                                        } else {
                                                if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
-                                                       $.when( $collapsible.fadeOut() ).then( hookCallback );
+                                                       $collapsible.fadeOut().promise().done( hookCallback );
                                                } else {
-                                                       $.when( $collapsible.slideUp() ).then( hookCallback );
+                                                       $collapsible.slideUp().promise().done( hookCallback );
                                                }
                                        }
                                } else {
                                        if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
-                                               $.when( $collapsible.fadeIn() ).then( hookCallback );
+                                               $collapsible.fadeIn().promise().done( hookCallback );
                                        } else {
-                                               $.when( $collapsible.slideDown() ).then( hookCallback );
+                                               $collapsible.slideDown().promise().done( hookCallback );
                                        }
                                }
                        }
index 4a77528..a9e06db 100644 (file)
@@ -33,7 +33,7 @@
 .mw-spinner-inline {
        display: inline-block;
        vertical-align: middle;
-       
+
        /* IE < 8 */
        zoom: 1;
        *display: inline;
index bf38769..28e2afc 100644 (file)
@@ -379,7 +379,8 @@ $.suggestions = {
                        preventDefault = false;
 
                switch ( key ) {
-                       case 40: // Arrow down
+                       // Arrow down
+                       case 40:
                                if ( wasVisible ) {
                                        $.suggestions.highlight( context, 'next', true );
                                        context.data.selectedWithMouse = false;
@@ -388,21 +389,24 @@ $.suggestions = {
                                }
                                preventDefault = true;
                                break;
-                       case 38: // Arrow up
+                       // Arrow up
+                       case 38:
                                if ( wasVisible ) {
                                        $.suggestions.highlight( context, 'prev', true );
                                        context.data.selectedWithMouse = false;
                                }
                                preventDefault = wasVisible;
                                break;
-                       case 27: // Escape
+                       // Escape
+                       case 27:
                                context.data.$container.hide();
                                $.suggestions.restore( context );
                                $.suggestions.cancel( context );
                                context.data.$textbox.trigger( 'change' );
                                preventDefault = wasVisible;
                                break;
-                       case 13: // Enter
+                       // Enter
+                       case 13:
                                context.data.$container.hide();
                                preventDefault = wasVisible;
                                selected = context.data.$container.find( '.suggestions-result-current' );
@@ -581,13 +585,15 @@ $.fn.suggestions = function () {
                                        switch ( context.data.keypressed ) {
                                                // This preventDefault logic is duplicated from
                                                // $.suggestions.keypress(), which sucks
-                                               case 40: // Arrow down
+                                               // Arrow down
+                                               case 40:
                                                        e.preventDefault();
                                                        e.stopImmediatePropagation();
                                                        break;
-                                               case 38: // Arrow up
-                                               case 27: // Escape
-                                               case 13: // Enter
+                                               // Arrow up, Escape and Enter
+                                               case 38:
+                                               case 27:
+                                               case 13:
                                                        if ( context.data.$container.is( ':visible' ) ) {
                                                                e.preventDefault();
                                                                e.stopImmediatePropagation();
index b71ef83..bdc6675 100644 (file)
@@ -8,8 +8,9 @@
  * http://www.opensource.org/licenses/mit-license.php
  * http://www.gnu.org/licenses/gpl.html
  *
- * Depends on mw.config (wgDigitTransformTable, wgMonthNames, wgMonthNamesShort,
- * wgDefaultDateFormat, wgContentLanguage)
+ * Depends on mw.config (wgDigitTransformTable, wgDefaultDateFormat, wgContentLanguage)
+ * and mw.language.months.
+ *
  * Uses 'tableSorterCollation' in mw.config (if available)
  */
 /**
                var regex = [];
                ts.monthNames = {};
 
-               for ( var i = 1; i < 13; i++ ) {
-                       var name = mw.config.get( 'wgMonthNames' )[i].toLowerCase();
-                       ts.monthNames[name] = i;
+               for ( var i = 0; i < 12; i++ ) {
+                       var name = mw.language.months.names[i].toLowerCase();
+                       ts.monthNames[name] = i + 1;
+                       regex.push( $.escapeRE( name ) );
+                       name = mw.language.months.genitive[i].toLowerCase().replace( '.', '' );
+                       ts.monthNames[name] = i + 1;
                        regex.push( $.escapeRE( name ) );
-                       name = mw.config.get( 'wgMonthNamesShort' )[i].toLowerCase().replace( '.', '' );
-                       ts.monthNames[name] = i;
+                       name = mw.language.months.abbrev[i].toLowerCase();
+                       ts.monthNames[name] = i + 1;
                        regex.push( $.escapeRE( name ) );
                }
 
index c44816b..2b5a440 100644 (file)
                                                postFinished = false;
                                                periRange = document.selection.createRange().duplicate();
 
-                                               preRange = rangeForElementIE( e ),
+                                               preRange = rangeForElementIE( e );
                                                // Move the end where we need it
                                                preRange.setEndPoint( 'EndToStart', periRange );
 
index 2b97b87..d9ab979 100644 (file)
@@ -7,7 +7,7 @@
         * @param {jQuery.Event} e
         */
        function doLivePreview( e ) {
-               var $wikiPreview, copySelectors, removeSelectors, $copyElements, $spinner,
+               var $wikiPreview, $editform, copySelectors, $copyElements, $spinner,
                        targetUrl, postData, $previewDataHolder;
 
                e.preventDefault();
@@ -16,6 +16,7 @@
                $( mw ).trigger( 'LivePreviewPrepare' );
 
                $wikiPreview = $( '#wikiPreview' );
+               $editform = $( '#editform' );
 
                // Show #wikiPreview if it's hidden to be able to scroll to it
                // (if it is hidden, it's also empty, so nothing changes in the rendering)
                $copyElements = $( copySelectors.join( ',' ) );
 
                // Not shown during normal preview, to be removed if present
-               removeSelectors = [
-                       '.mw-newarticletext'
-               ];
-
-               $( removeSelectors.join( ',' ) ).remove();
+               $( '.mw-newarticletext' ).remove();
 
                $spinner = $.createSpinner( {
                        size: 'large',
                });
                $wikiPreview.before( $spinner );
                $spinner.css( {
-                       position: 'absolute',
                        marginTop: $spinner.height()
                } );
-               // Make sure preview area is at least as tall as 2x the height of the spinner.
-               // 1x because if its smaller, it will spin behind the edit toolbar.
-               // (this happens on the first preview when editPreview is still empty)
-               // 2x because the spinner has 1x margin top breathing room.
-               $wikiPreview.css( 'minHeight', $spinner.height() * 2 );
 
                // Can't use fadeTo because it calls show(), and we might want to keep some elements hidden
                // (e.g. empty #catlinks)
-               $copyElements.animate( {
-                       opacity: 0.4
-               }, 'fast' );
+               $copyElements.animate( { opacity: 0.4 }, 'fast' );
 
                $previewDataHolder = $( '<div>' );
-               targetUrl = $( '#editform' ).attr( 'action' );
+               targetUrl = $editform.attr( 'action' );
 
                // Gather all the data from the form
-               postData = $( '#editform' ).formToArray();
+               postData = $editform.formToArray();
                postData.push( {
                        name: e.target.name,
                        value: ''
@@ -83,6 +72,7 @@
                // although that requires figuring out how to convert that raw data into proper HTML.
                $previewDataHolder.load( targetUrl + ' ' + copySelectors.join( ',' ), postData, function () {
                        var i, $from;
+
                        // Copy the contents of the specified elements from the loaded page to the real page.
                        // Also copy their class attributes.
                        for ( i = 0; i < copySelectors.length; i++ ) {
 
                if ( !document.getElementById( 'wikiDiff' ) && document.getElementById( 'wikiPreview' ) ) {
                        $( '#wikiPreview' ).after(
-                               $( '<div>' ).attr( 'id', 'wikiDiff')
+                               $( '<div>' ).attr( 'id', 'wikiDiff' )
                        );
                }
 
-               $( document.body ).on( 'click', '#wpPreview, #wpDiff', doLivePreview );
+               $( '#editform' ).on( 'click', '#wpPreview, #wpDiff', doLivePreview );
        } );
 
 }( mediaWiki, jQuery ) );
index 8e67ea9..6e4df9f 100644 (file)
@@ -1,6 +1,23 @@
 ( function ( mw, $ ) {
        'use strict';
 
+       /**
+        * @event postEdit
+        * @member mw.hook
+        * @param {Object} [data] Optional data
+        * @param {string|jQuery|Array} [data.message] Message that listeners
+        *  should use when displaying notifications. String for plain text,
+        *  use array or jQuery object to pass actual nodes.
+        * @param {string|mw.user} [data.user=mw.user] User that made the edit.
+        */
+
+       /**
+        * After the listener for #postEdit removes the notification.
+        *
+        * @event postEdit_afterRemoval
+        * @member mw.hook
+        */
+
        var config = mw.config.get( [ 'wgAction', 'wgCookiePrefix', 'wgCurRevisionId' ] ),
                // This should match EditPage::POST_EDIT_COOKIE_KEY_PREFIX:
                cookieKey = config.wgCookiePrefix + 'PostEditRevision' + config.wgCurRevisionId,
                $.cookie( cookieKey, null, { path: '/' } );
                mw.config.set( 'wgPostEdit', true );
 
-               /**
-                * @event postEdit
-                * @member mw.hook
-                * @param {Object} [data]
-                * @param {string|jQuery|Array} [data.message] Message that listeners
-                *  should use when displaying notifications. String for plain text,
-                *  use array or jQuery object to pass actual nodes.
-                * @param {string|mw.user} [data.user=mw.user] User that made the edit.
-                */
                mw.hook( 'postEdit' ).fire();
        }
 
index 8bba1fc..98a9c54 100644 (file)
@@ -16,9 +16,9 @@
                isCategory: function ( title, ok, err ) {
                        var d = $.Deferred(),
                                apiPromise;
+
                        // Backwards compatibility (< MW 1.20)
-                       d.done( ok );
-                       d.fail( err );
+                       d.done( ok ).fail( err );
 
                        apiPromise = this.get( {
                                        prop: 'categoryinfo',
@@ -53,9 +53,9 @@
                getCategoriesByPrefix: function ( prefix, ok, err ) {
                        var d = $.Deferred(),
                                apiPromise;
+
                        // Backwards compatibility (< MW 1.20)
-                       d.done( ok );
-                       d.fail( err );
+                       d.done( ok ).fail( err );
 
                        // Fetch with allpages to only get categories that have a corresponding description page.
                        apiPromise = this.get( {
@@ -92,9 +92,9 @@
                getCategories: function ( title, ok, err, async ) {
                        var d = $.Deferred(),
                                apiPromise;
+
                        // Backwards compatibility (< MW 1.20)
-                       d.done( ok );
-                       d.fail( err );
+                       d.done( ok ).fail( err );
 
                        apiPromise = this.get( {
                                        prop: 'categories',
index 96947cc..381e172 100644 (file)
@@ -59,9 +59,9 @@
                getEditToken: function ( ok, err ) {
                        var d = $.Deferred(),
                                apiPromise;
+
                        // Backwards compatibility (< MW 1.20)
-                       d.done( ok );
-                       d.fail( err );
+                       d.done( ok ).fail( err );
 
                        apiPromise = this.get( {
                                        action: 'tokens',
index 08bb171..c4d23b8 100644 (file)
@@ -17,9 +17,9 @@
                parse: function ( wikitext, ok, err ) {
                        var d = $.Deferred(),
                                apiPromise;
+
                        // Backwards compatibility (< MW 1.20)
-                       d.done( ok );
-                       d.fail( err );
+                       d.done( ok ).fail( err );
 
                        apiPromise = this.get( {
                                        action: 'parse',
index e2be5c7..49a4c62 100644 (file)
@@ -22,9 +22,9 @@
                var params,
                        d = $.Deferred(),
                        apiPromise;
+
                // Backwards compatibility (< MW 1.20)
-               d.done( ok );
-               d.fail( err );
+               d.done( ok ).fail( err );
 
                params = {
                        action: 'watch',
diff --git a/resources/mediawiki.less/mediawiki.mixins.less b/resources/mediawiki.less/mediawiki.mixins.less
new file mode 100644 (file)
index 0000000..19a715b
--- /dev/null
@@ -0,0 +1,46 @@
+/**
+ * Common LESS mixin library for MediaWiki
+ *
+ * By default the folder containing this file is included in $wgResourceLoaderLESSImportPaths,
+ * which makes this file importable by all less files via '@import "mediawiki.mixins";'.
+ *
+ * The mixins included below are considered a public interface for MediaWiki extensions.
+ * The signatures of parametrized mixins should be kept as stable as possible.
+ *
+ * See <http://lesscss.org/#-mixins> for more information about how to write mixins.
+ */
+
+.background-image(@url) when (embeddable(@url)) {
+       background-image: embed(@url);
+       background-image: url(@url)!ie;
+}
+
+.background-image(@url) when not (embeddable(@url)) {
+       background-image: url(@url);
+}
+
+/* Note gzip compression means that it is okay to embed twice */
+.background-image-svg(@svg, @fallback) {
+       background-image: url(@fallback);
+       /* SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG) */
+       /* @embed */ background-image: -webkit-linear-gradient(transparent, transparent), url(@svg);
+       /* @embed */ background-image: linear-gradient(transparent, transparent), url(@svg);
+}
+
+/* Caution: Does not support localisable images */
+.list-style-image(@url) when (embeddable(@url)) {
+       list-style-image: embed(@url);
+       list-style-image: url(@url)!ie;
+}
+
+.list-style-image(@url) when not (embeddable(@url)) {
+       list-style-image: url(@url);
+}
+
+.transition(@string) {
+       -webkit-transition: @string;
+       -moz-transition: @string;
+       -o-transition: @string;
+       transition: @string;
+}
index f43505e..0578be0 100644 (file)
Binary files a/resources/mediawiki.special/images/glyph-people-large.png and b/resources/mediawiki.special/images/glyph-people-large.png differ
index e9b8874..f933aa6 100644 (file)
Binary files a/resources/mediawiki.special/images/icon-contributors.png and b/resources/mediawiki.special/images/icon-contributors.png differ
index f4ec247..39f4f2d 100644 (file)
Binary files a/resources/mediawiki.special/images/icon-edits.png and b/resources/mediawiki.special/images/icon-edits.png differ
index 4b3d4ee..03f0eec 100644 (file)
Binary files a/resources/mediawiki.special/images/icon-lock.png and b/resources/mediawiki.special/images/icon-lock.png differ
index a406ce7..59513db 100644 (file)
Binary files a/resources/mediawiki.special/images/icon-pages.png and b/resources/mediawiki.special/images/icon-pages.png differ
index 312f811..24c8d77 100644 (file)
 #mw-createaccount-cta {
        width: 20em;
        height: 10em;
-       text-align: center;
        /* @embed */
        background: url(images/glyph-people-large.png) no-repeat 50%;
        margin: 0 auto;
 }
 
-#mw-createaccount-cta h3 {
+#mw-createaccount-cta h3,
+#mw-createaccount-another h3 {
        font-size: 0.9em;
        font-weight: normal;
        text-align: center;
+}
+
+#mw-createaccount-cta h3 {
        padding-top: 4em;
 }
 
index 2d948ea..9ffe11c 100644 (file)
@@ -22,9 +22,7 @@ section.mw-form-header {
 }
 
 /*
- * Besides errorbox there could be warningbox, successbox, msgbox, though
- * spage has never seen these in practice.
- * Vector has styles coloring warningbox cream and successbox green.
+ * Styles for information boxes.
  */
 .mw-ui-vform .errorbox,
 .mw-ui-vform .warningbox,
@@ -35,11 +33,26 @@ section.mw-form-header {
        font-size: 0.9em;
        margin: 0 0 1em 0;
        padding: 0.5em;
+       border: 1px solid;
+       word-wrap: break-word;
+}
+
+.mw-ui-vform .errorbox {
        color: #cc0000;
-       border: 1px solid #fac5c5;
+       border-color: #fac5c5;
        background-color: #fae3e3;
-       text-shadow: 0 1px #fae3e3;
-       word-wrap: break-word;
+}
+
+.mw-ui-vform .warningbox {
+       color: #705000;
+       border-color: #fde29b;
+       background-color: #fdf1d1;
+}
+
+.mw-ui-vform .successbox {
+       color: #009000;
+       border-color: #b7fdb5;
+       background-color: #e1fddf;
 }
 
 /*
index 89ca25a..498d134 100644 (file)
@@ -159,19 +159,22 @@ a.mw-ui-button {
 }
 /* line 36, sourcefiles/scss/components/default/_forms.scss */
 .mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]) {
-  outline: 0;
   border-style: solid;
   border-width: 1px;
   border-color: #c9c9c9;
   color: #252525;
   padding: 0.35em 0 0.35em 0.5em;
 }
-/* line 12, sourcefiles/scss/mixins/_forms.scss */
+/* line 11, sourcefiles/scss/mixins/_forms.scss */
 .mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]):focus {
   box-shadow: #4091ed 0px 0px 5px;
   border-color: #4091ed;
 }
-/* line 38, sourcefiles/scss/components/default/_forms.scss */
+/* line 13, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]):focus:not([type=checkbox]):not([type=radio]) {
+  outline: 0;
+}
+/* line 40, sourcefiles/scss/components/default/_forms.scss */
 .mw-ui-vform > div label {
   display: block;
   -webkit-box-sizing: border-box;
@@ -183,11 +186,11 @@ a.mw-ui-button {
   margin: 0 0 0.2em 0;
   padding: 0;
 }
-/* line 34, sourcefiles/scss/mixins/_forms.scss */
+/* line 38, sourcefiles/scss/mixins/_forms.scss */
 .mw-ui-vform > div label * {
   font-weight: normal;
 }
-/* line 49, sourcefiles/scss/components/default/_forms.scss */
+/* line 51, sourcefiles/scss/components/default/_forms.scss */
 .mw-ui-vform > div input[type="checkbox"],
 .mw-ui-vform > div input[type="radio"] {
   display: inline;
@@ -197,32 +200,35 @@ a.mw-ui-button {
   width: auto;
 }
 
-/* line 65, sourcefiles/scss/components/default/_forms.scss */
+/* line 67, sourcefiles/scss/components/default/_forms.scss */
 .mw-ui-input {
-  outline: 0;
   border-style: solid;
   border-width: 1px;
   border-color: #c9c9c9;
   color: #252525;
   padding: 0.35em 0 0.35em 0.5em;
 }
-/* line 12, sourcefiles/scss/mixins/_forms.scss */
+/* line 11, sourcefiles/scss/mixins/_forms.scss */
 .mw-ui-input:focus {
   box-shadow: #4091ed 0px 0px 5px;
   border-color: #4091ed;
 }
+/* line 13, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-input:focus:not([type=checkbox]):not([type=radio]) {
+  outline: 0;
+}
 
-/* line 72, sourcefiles/scss/components/default/_forms.scss */
+/* line 74, sourcefiles/scss/components/default/_forms.scss */
 .mw-ui-label {
   font-size: 0.9em;
   color: #4a4a4a;
 }
-/* line 34, sourcefiles/scss/mixins/_forms.scss */
+/* line 38, sourcefiles/scss/mixins/_forms.scss */
 .mw-ui-label * {
   font-weight: normal;
 }
 
-/* line 81, sourcefiles/scss/components/default/_forms.scss */
+/* line 83, sourcefiles/scss/components/default/_forms.scss */
 .mw-ui-checkbox-label, .mw-ui-radio-label {
   margin-bottom: 0.5em;
   cursor: pointer;
@@ -230,7 +236,7 @@ a.mw-ui-button {
   line-height: normal;
   font-weight: normal;
 }
-/* line 50, sourcefiles/scss/mixins/_forms.scss */
+/* line 54, sourcefiles/scss/mixins/_forms.scss */
 .mw-ui-checkbox-label > input[type="checkbox"], .mw-ui-checkbox-label > input[type="radio"], .mw-ui-radio-label > input[type="checkbox"], .mw-ui-radio-label > input[type="radio"] {
   width: auto;
   height: auto;
index d55ddc5..6aa7f89 100644 (file)
@@ -287,19 +287,22 @@ a.mw-ui-button {
 }
 /* line 36, sourcefiles/scss/components/default/_forms.scss */
 .mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]) {
-  outline: 0;
   border-style: solid;
   border-width: 1px;
   border-color: #c9c9c9;
   color: #252525;
   padding: 0.35em 0 0.35em 0.5em;
 }
-/* line 12, sourcefiles/scss/mixins/_forms.scss */
+/* line 11, sourcefiles/scss/mixins/_forms.scss */
 .mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]):focus {
   box-shadow: #4091ed 0px 0px 5px;
   border-color: #4091ed;
 }
-/* line 38, sourcefiles/scss/components/default/_forms.scss */
+/* line 13, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-vform > div input:not([type=button]):not([type=submit]):not([type=file]):focus:not([type=checkbox]):not([type=radio]) {
+  outline: 0;
+}
+/* line 40, sourcefiles/scss/components/default/_forms.scss */
 .mw-ui-vform > div label {
   display: block;
   -webkit-box-sizing: border-box;
@@ -311,11 +314,11 @@ a.mw-ui-button {
   margin: 0 0 0.2em 0;
   padding: 0;
 }
-/* line 34, sourcefiles/scss/mixins/_forms.scss */
+/* line 38, sourcefiles/scss/mixins/_forms.scss */
 .mw-ui-vform > div label * {
   font-weight: normal;
 }
-/* line 49, sourcefiles/scss/components/default/_forms.scss */
+/* line 51, sourcefiles/scss/components/default/_forms.scss */
 .mw-ui-vform > div input[type="checkbox"],
 .mw-ui-vform > div input[type="radio"] {
   display: inline;
@@ -325,32 +328,35 @@ a.mw-ui-button {
   width: auto;
 }
 
-/* line 65, sourcefiles/scss/components/default/_forms.scss */
+/* line 67, sourcefiles/scss/components/default/_forms.scss */
 .mw-ui-input {
-  outline: 0;
   border-style: solid;
   border-width: 1px;
   border-color: #c9c9c9;
   color: #252525;
   padding: 0.35em 0 0.35em 0.5em;
 }
-/* line 12, sourcefiles/scss/mixins/_forms.scss */
+/* line 11, sourcefiles/scss/mixins/_forms.scss */
 .mw-ui-input:focus {
   box-shadow: #4091ed 0px 0px 5px;
   border-color: #4091ed;
 }
+/* line 13, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-input:focus:not([type=checkbox]):not([type=radio]) {
+  outline: 0;
+}
 
-/* line 72, sourcefiles/scss/components/default/_forms.scss */
+/* line 74, sourcefiles/scss/components/default/_forms.scss */
 .mw-ui-label {
   font-size: 0.9em;
   color: #4a4a4a;
 }
-/* line 34, sourcefiles/scss/mixins/_forms.scss */
+/* line 38, sourcefiles/scss/mixins/_forms.scss */
 .mw-ui-label * {
   font-weight: normal;
 }
 
-/* line 81, sourcefiles/scss/components/default/_forms.scss */
+/* line 83, sourcefiles/scss/components/default/_forms.scss */
 .mw-ui-checkbox-label, .mw-ui-radio-label {
   margin-bottom: 0.5em;
   cursor: pointer;
@@ -358,7 +364,7 @@ a.mw-ui-button {
   line-height: normal;
   font-weight: normal;
 }
-/* line 50, sourcefiles/scss/mixins/_forms.scss */
+/* line 54, sourcefiles/scss/mixins/_forms.scss */
 .mw-ui-checkbox-label > input[type="checkbox"], .mw-ui-checkbox-label > input[type="radio"], .mw-ui-radio-label > input[type="checkbox"], .mw-ui-radio-label > input[type="radio"] {
   width: auto;
   height: auto;
index 5db857a..0f3f6ad 100644 (file)
@@ -1,62 +1,66 @@
 // Font is not included.
 // For Vector, that should be layered on top with vector-type
 @mixin agora-field-styling() {
-    @include reset-focus;  // Removes OS field focus
-
-    border: {
-        style: solid;
-        width: 1px;
-        color: $agoraGray;
-    };
-
-    &:focus {
-        // @include box-shadow generates unneeded prefixes
-        // https://github.com/chriseppstein/compass/issues/1054 , so specify
-        // directly.
-        box-shadow: $agoraBlueShadow 0px 0px 5px;
-
-        border: {
-            color: $agoraBlueShadow;
-        };
-    }
-
-    color: $agoraTextColor;
-    padding: 0.35em 0 0.35em 0.5em;
+
+       border: {
+               style: solid;
+               width: 1px;
+               color: $agoraGray;
+       };
+
+       &:focus {
+               // Styling focus of native checkboxes etc on Mac is almost impossible.
+               &:not([type=checkbox]):not([type=radio]) {
+                       @include reset-focus;  // Removes OS field focus
+               };
+
+               // @include box-shadow generates unneeded prefixes
+               // https://github.com/chriseppstein/compass/issues/1054 , so specify
+               // directly.
+               box-shadow: $agoraBlueShadow 0px 0px 5px;
+
+               border: {
+                       color: $agoraBlueShadow;
+               };
+       }
+
+       color: $agoraTextColor;
+       padding: 0.35em 0 0.35em 0.5em;
 }
 
 @mixin agora-label-styling() {
-    font: {
-        //weight: bold;
-        size: 0.9em;
-    };
-    color: darken($agoraGray, 50%);
-
-    & * {
-        font-weight: normal;
-    }
+       font: {
+               //weight: bold;
+               size: 0.9em;
+       };
+       color: darken($agoraGray, 50%);
+
+       & * {
+               font-weight: normal;
+       }
 }
 
 @mixin agora-inline-label-styling() {
-    margin-bottom: 0.5em;
-    cursor: pointer;
-    vertical-align: bottom;
-    line-height: normal;
-
-    font: {
-        weight: normal;
-    };
-
-    & > input[type="checkbox"],
-    & > input[type="radio"] {
-        width: auto;
-        height: auto;
-        margin: 0 0.1em 0em 0;
-        padding: 0;
-        border: {
-            style: solid;
-            width: 1px;
-            color: $agoraGray;
-        }
-        cursor: pointer;
-    }
+       margin-bottom: 0.5em;
+       cursor: pointer;
+       vertical-align: bottom;
+       line-height: normal;
+
+       font: {
+               weight: normal;
+       };
+
+       & > input[type="checkbox"],
+       & > input[type="radio"] {
+               width: auto;
+               height: auto;
+               margin: 0 0.1em 0em 0;
+               padding: 0;
+               border: {
+                       style: solid;
+                       width: 1px;
+                       color: $agoraGray;
+               }
+               cursor: pointer;
+       }
 }
index ea9c67a..b17e578 100644 (file)
Binary files a/resources/mediawiki/images/arrow-collapsed-ltr.png and b/resources/mediawiki/images/arrow-collapsed-ltr.png differ
index 081d3a8..a834548 100644 (file)
Binary files a/resources/mediawiki/images/arrow-collapsed-rtl.png and b/resources/mediawiki/images/arrow-collapsed-rtl.png differ
index fa4bf26..2bec798 100644 (file)
Binary files a/resources/mediawiki/images/arrow-expanded.png and b/resources/mediawiki/images/arrow-expanded.png differ
index b86a14b..4240f08 100644 (file)
 /*!
  * @author Neil Kandalgaonkar, 2010
- * @author Timo Tijhof, 2011
+ * @author Timo Tijhof, 2011-2013
  * @since 1.18
- *
- * Relies on: mw.config (wgFormattedNamespaces, wgNamespaceIds, wgCaseSensitiveNamespaces), mw.util.wikiGetlink
  */
 ( function ( mw, $ ) {
 
-       /* Local space */
-
        /**
         * @class mw.Title
         *
+        * Parse titles into an object struture. Note that when using the constructor
+        * directly, passing invalid titles will result in an exception. Use #newFromText to use the
+        * logic directly and get null for invalid titles which is easier to work with.
+        *
         * @constructor
         * @param {string} title Title of the page. If no second argument given,
-        * this will be searched for a namespace.
-        * @param {number} [namespace] Namespace id. If given, title will be taken as-is.
+        *  this will be searched for a namespace
+        * @param {number} [namespace=NS_MAIN] If given, will used as default namespace for the given title
+        * @throws {Error} When the title is invalid
         */
        function Title( title, namespace ) {
-               this.ns = 0; // integer namespace id
-               this.name = null; // name in canonical 'database' form
-               this.ext = null; // extension
-
-               if ( arguments.length === 2 ) {
-                       setNameAndExtension( this, title );
-                       this.ns = fixNsId( namespace );
-               } else if ( arguments.length === 1 ) {
-                       setAll( this, title );
+               var parsed = parse( title, namespace );
+               if ( !parsed ) {
+                       throw new Error( 'Unable to parse title' );
                }
+
+               this.namespace = parsed.namespace;
+               this.title = parsed.title;
+               this.ext = parsed.ext;
+               this.fragment = parsed.fragment;
+
                return this;
        }
 
-var
-       /* Public methods (defined later) */
-       fn,
+       /* Private members */
+
+       var
 
        /**
-        * Strip some illegal chars: control chars, colon, less than, greater than,
-        * brackets, braces, pipe, whitespace and normal spaces. This still leaves some insanity
-        * intact, like unicode bidi chars, but it's a good start..
-        * @ignore
-        * @param {string} s
-        * @return {string}
+        * @private
+        * @static
+        * @property NS_MAIN
         */
-       clean = function ( s ) {
-               if ( s !== undefined ) {
-                       return s.replace( /[\x00-\x1f\x23\x3c\x3e\x5b\x5d\x7b\x7c\x7d\x7f\s]+/g, '_' );
-               }
-       },
+       NS_MAIN = 0,
 
        /**
-        * Convert db-key to readable text.
-        * @ignore
-        * @param {string} s
-        * @return {string}
+        * @private
+        * @static
+        * @property NS_TALK
         */
-       text = function ( s ) {
-               if ( s !== null && s !== undefined ) {
-                       return s.replace( /_/g, ' ' );
-               } else {
-                       return '';
-               }
-       },
+       NS_TALK = 1,
 
        /**
-        * Sanitize name.
-        * @ignore
+        * @private
+        * @static
+        * @property NS_SPECIAL
         */
-       fixName = function ( s ) {
-               return clean( $.trim( s ) );
-       },
+       NS_SPECIAL = -1,
 
        /**
-        * Sanitize extension.
-        * @ignore
+        * Get the namespace id from a namespace name (either from the localized, canonical or alias
+        * name).
+        *
+        * Example: On a German wiki this would return 6 for any of 'File', 'Datei', 'Image' or
+        * even 'Bild'.
+        *
+        * @private
+        * @static
+        * @method getNsIdByName
+        * @param {string} ns Namespace name (case insensitive, leading/trailing space ignored)
+        * @return {number|boolean} Namespace id or boolean false
         */
-       fixExt = function ( s ) {
-               return clean( s );
+       getNsIdByName = function ( ns ) {
+               var id;
+
+               // Don't cast non-strings to strings, because null or undefined should not result in
+               // returning the id of a potential namespace called "Null:" (e.g. on null.example.org/wiki)
+               // Also, toLowerCase throws exception on null/undefined, because it is a String method.
+               if ( typeof ns !== 'string' ) {
+                       return false;
+               }
+               ns = ns.toLowerCase();
+               id = mw.config.get( 'wgNamespaceIds' )[ns];
+               if ( id === undefined ) {
+                       return false;
+               }
+               return id;
        },
 
+       rUnderscoreTrim = /^_+|_+$/g,
+
+       rSplit = /^(.+?)_*:_*(.*)$/,
+
+       // See Title.php#getTitleInvalidRegex
+       rInvalid = new RegExp(
+               '[^' + mw.config.get( 'wgLegalTitleChars' ) + ']' +
+               // URL percent encoding sequences interfere with the ability
+               // to round-trip titles -- you can't link to them consistently.
+               '|%[0-9A-Fa-f]{2}' +
+               // XML/HTML character references produce similar issues.
+               '|&[A-Za-z0-9\u0080-\uFFFF]+;' +
+               '|&#[0-9]+;' +
+               '|&#x[0-9A-Fa-f]+;'
+       ),
+
        /**
-        * Sanitize namespace id.
-        * @ignore
-        * @param id {Number} Namespace id.
-        * @return {Number|Boolean} The id as-is or boolean false if invalid.
+        * Internal helper for #constructor and #newFromtext.
+        *
+        * Based on Title.php#secureAndSplit
+        *
+        * @private
+        * @static
+        * @method parse
+        * @param {string} title
+        * @param {number} [defaultNamespace=NS_MAIN]
+        * @return {Object|boolean}
         */
-       fixNsId = function ( id ) {
-               // wgFormattedNamespaces is an object of *string* key-vals (ie. arr["0"] not arr[0] )
-               var ns = mw.config.get( 'wgFormattedNamespaces' )[id.toString()];
+       parse = function ( title, defaultNamespace ) {
+               var namespace, m, id, i, fragment, ext;
+
+               namespace = defaultNamespace === undefined ? NS_MAIN : defaultNamespace;
+
+               title = title
+                       // Normalise whitespace to underscores and remove duplicates
+                       .replace( /[ _\s]+/g, '_' )
+                       // Trim underscores
+                       .replace( rUnderscoreTrim, '' );
 
-               // Check only undefined (may be false-y, such as '' (main namespace) ).
-               if ( ns === undefined ) {
+               if ( title === '' ) {
                        return false;
+               }
+
+               // Process initial colon
+               if ( title.charAt( 0 ) === ':' ) {
+                       // Initial colon means main namespace instead of specified default
+                       namespace = NS_MAIN;
+                       title = title
+                               // Strip colon
+                               .substr( 1 )
+                               // Trim underscores
+                               .replace( rUnderscoreTrim, '' );
+               }
+
+               // Process namespace prefix (if any)
+               m = title.match( rSplit );
+               if ( m ) {
+                       id = getNsIdByName( m[1] );
+                       if ( id !== false ) {
+                               // Ordinary namespace
+                               namespace = id;
+                               title = m[2];
+
+                               // For Talk:X pages, make sure X has no "namespace" prefix
+                               if ( namespace === NS_TALK && ( m = title.match( rSplit ) ) ) {
+                                       // Disallow titles like Talk:File:x (subject should roundtrip: talk:file:x -> file:x -> file_talk:x)
+                                       if ( getNsIdByName( m[1] ) !== false ) {
+                                               return false;
+                                       }
+                               }
+                       }
+               }
+
+               // Process fragment
+               i = title.indexOf( '#' );
+               if ( i === -1 ) {
+                       fragment = null;
                } else {
-                       return Number( id );
+                       fragment = title
+                               // Get segment starting after the hash
+                               .substr( i + 1 )
+                               // Convert to text
+                               // NB: Must not be trimmed ("Example#_foo" is not the same as "Example#foo")
+                               .replace( /_/g, ' ' );
+
+                       title = title
+                               // Strip hash
+                               .substr( 0, i )
+                               // Trim underscores, again (strips "_" from "bar" in "Foo_bar_#quux")
+                               .replace( rUnderscoreTrim, '' );
                }
-       },
 
-       /**
-        * Get namespace id from namespace name by any known namespace/id pair (localized, canonical or alias).
-        * Example: On a German wiki this would return 6 for any of 'File', 'Datei', 'Image' or even 'Bild'.
-        * @ignore
-        * @param ns {String} Namespace name (case insensitive, leading/trailing space ignored).
-        * @return {Number|Boolean} Namespace id or boolean false if unrecognized.
-        */
-       getNsIdByName = function ( ns ) {
-               // Don't cast non-strings to strings, because null or undefined
-               // should not result in returning the id of a potential namespace
-               // called "Null:" (e.g. on nullwiki.example.org)
-               // Also, toLowerCase throws exception on null/undefined, because
-               // it is a String.prototype method.
-               if ( typeof ns !== 'string' ) {
+
+               // Reject illegal characters
+               if ( title.match( rInvalid ) ) {
                        return false;
                }
-               ns = clean( $.trim( ns.toLowerCase() ) ); // Normalize
-               var id = mw.config.get( 'wgNamespaceIds' )[ns];
-               if ( id === undefined ) {
-                       mw.log( 'mw.Title: Unrecognized namespace: ' + ns );
+
+               // Disallow titles that browsers or servers might resolve as directory navigation
+               if (
+                       title.indexOf( '.' ) !== -1 && (
+                               title === '.' || title === '..' ||
+                               title.indexOf( './' ) === 0 ||
+                               title.indexOf( '../' ) === 0 ||
+                               title.indexOf( '/./' ) !== -1 ||
+                               title.indexOf( '/../' ) !== -1 ||
+                               title.substr( -2 ) === '/.' ||
+                               title.substr( -3 ) === '/..'
+                       )
+               ) {
                        return false;
                }
-               return fixNsId( id );
+
+               // Disallow magic tilde sequence
+               if ( title.indexOf( '~~~' ) !== -1 ) {
+                       return false;
+               }
+
+               // Disallow titles exceeding the 255 byte size limit (size of underlying database field)
+               // Except for special pages, e.g. [[Special:Block/Long name]]
+               // Note: The PHP implementation also asserts that even in NS_SPECIAL, the title should
+               // be less than 512 bytes.
+               if ( namespace !== NS_SPECIAL && $.byteLength( title ) > 255 ) {
+                       return false;
+               }
+
+               // Can't make a link to a namespace alone.
+               if ( title === '' && namespace !== NS_MAIN ) {
+                       return false;
+               }
+
+               // Any remaining initial :s are illegal.
+               if ( title.charAt( 0 ) === ':' ) {
+                       return false;
+               }
+
+               // For backwards-compatibility with old mw.Title, we separate the extension from the
+               // rest of the title.
+               i = title.lastIndexOf( '.' );
+               if ( i === -1 || title.length <= i + 1 ) {
+                       // Extensions are the non-empty segment after the last dot
+                       ext = null;
+               } else {
+                       ext = title.substr( i + 1 );
+                       title = title.substr( 0, i );
+               }
+
+               return {
+                       namespace: namespace,
+                       title: title,
+                       ext: ext,
+                       fragment: fragment
+               };
        },
 
        /**
-        * Helper to extract namespace, name and extension from a string.
+        * Convert db-key to readable text.
         *
-        * @ignore
-        * @param {mw.Title} title
-        * @param {string} raw
-        * @return {mw.Title}
+        * @private
+        * @static
+        * @method text
+        * @param {string} s
+        * @return {string}
         */
-       setAll = function ( title, s ) {
-               // In normal browsers the match-array contains null/undefined if there's no match,
-               // IE returns an empty string.
-               var matches = s.match( /^(?:([^:]+):)?(.*?)(?:\.(\w+))?$/ ),
-                       nsMatch = getNsIdByName( matches[1] );
-
-               // Namespace must be valid, and title must be a non-empty string.
-               if ( nsMatch && typeof matches[2] === 'string' && matches[2] !== '' ) {
-                       title.ns = nsMatch;
-                       title.name = fixName( matches[2] );
-                       if ( typeof matches[3] === 'string' && matches[3] !== '' ) {
-                               title.ext = fixExt( matches[3] );
-                       }
+       text = function ( s ) {
+               if ( s !== null && s !== undefined ) {
+                       return s.replace( /_/g, ' ' );
                } else {
-                       // Consistency with MediaWiki PHP: Unknown namespace -> fallback to main namespace.
-                       title.ns = 0;
-                       setNameAndExtension( title, s );
+                       return '';
                }
-               return title;
        },
 
+       // Polyfill for ES5 Object.create
+       createObject = Object.create || ( function () {
+               return function ( o ) {
+                       function Title() {}
+                       if ( o !== Object( o ) ) {
+                               throw new Error( 'Cannot inherit from a non-object' );
+                       }
+                       Title.prototype = o;
+                       return new Title();
+               };
+       }() );
+
+
+       /* Static members */
+
        /**
-        * Helper to extract name and extension from a string.
+        * Constructor for Title objects with a null return instead of an exception for invalid titles.
         *
-        * @ignore
-        * @param {mw.Title} title
-        * @param {string} raw
-        * @return {mw.Title}
+        * @static
+        * @method
+        * @param {string} title
+        * @param {number} [namespace=NS_MAIN] Default namespace
+        * @return {mw.Title|null} A valid Title object or null if the title is invalid
         */
-       setNameAndExtension = function ( title, raw ) {
-               // In normal browsers the match-array contains null/undefined if there's no match,
-               // IE returns an empty string.
-               var matches = raw.match( /^(?:)?(.*?)(?:\.(\w+))?$/ );
-
-               // Title must be a non-empty string.
-               if ( typeof matches[1] === 'string' && matches[1] !== '' ) {
-                       title.name = fixName( matches[1] );
-                       if ( typeof matches[2] === 'string' && matches[2] !== '' ) {
-                               title.ext = fixExt( matches[2] );
-                       }
-               } else {
-                       throw new Error( 'mw.Title: Could not parse title "' + raw + '"' );
+       Title.newFromText = function ( title, namespace ) {
+               var t, parsed = parse( title, namespace );
+               if ( !parsed ) {
+                       return null;
                }
-               return title;
-       };
 
+               t = createObject( Title.prototype );
+               t.namespace = parsed.namespace;
+               t.title = parsed.title;
+               t.ext = parsed.ext;
+               t.fragment = parsed.fragment;
 
-       /* Static space */
+               return t;
+       };
 
        /**
         * Whether this title exists on the wiki.
+        *
         * @static
-        * @param {Mixed} title prefixed db-key name (string) or instance of Title
-        * @return {Mixed} Boolean true/false if the information is available. Otherwise null.
+        * @param {string|mw.Title} title prefixed db-key name (string) or instance of Title
+        * @return {boolean|null} Boolean if the information is available, otherwise null
         */
        Title.exists = function ( title ) {
-               var type = $.type( title ), obj = Title.exist.pages, match;
+               var match,
+                       type = $.type( title ),
+                       obj = Title.exist.pages;
+
                if ( type === 'string' ) {
                        match = obj[title];
                } else if ( type === 'object' && title instanceof Title ) {
@@ -194,23 +317,23 @@ var
                } else {
                        throw new Error( 'mw.Title.exists: title must be a string or an instance of Title' );
                }
+
                if ( typeof match === 'boolean' ) {
                        return match;
                }
+
                return null;
        };
 
-       /**
-        * @static
-        * @property
-        */
        Title.exist = {
                /**
+                * Boolean true value indicates page does exist.
+                *
                 * @static
                 * @property {Object} exist.pages Keyed by PrefixedDb title.
-                * Boolean true value indicates page does exist.
                 */
                pages: {},
+
                /**
                 * Example to declare existing titles:
                 *     Title.exist.set(['User:John_Doe', ...]);
@@ -219,8 +342,8 @@ var
                 *
                 * @static
                 * @property exist.set
-                * @param {string|Array} titles Title(s) in strict prefixedDb title form.
-                * @param {boolean} [state] State of the given titles. Defaults to true.
+                * @param {string|Array} titles Title(s) in strict prefixedDb title form
+                * @param {boolean} [state=true] State of the given titles
                 * @return {boolean}
                 */
                set: function ( titles, state ) {
@@ -234,42 +357,60 @@ var
                }
        };
 
-       /* Public methods */
+       /* Public members */
 
-       fn = {
+       Title.prototype = {
                constructor: Title,
 
                /**
-                * Get the namespace number.
+                * Get the namespace number
+                *
+                * Example: 6 for "File:Example_image.svg".
+                *
                 * @return {number}
                 */
-               getNamespaceId: function (){
-                       return this.ns;
+               getNamespaceId: function () {
+                       return this.namespace;
                },
 
                /**
-                * Get the namespace prefix (in the content-language).
-                * In NS_MAIN this is '', otherwise namespace name plus ':'
+                * Get the namespace prefix (in the content language)
+                *
+                * Example: "File:" for "File:Example_image.svg".
+                * In #NS_MAIN this is '', otherwise namespace name plus ':'
+                *
                 * @return {string}
                 */
-               getNamespacePrefix: function (){
-                       return mw.config.get( 'wgFormattedNamespaces' )[this.ns].replace( / /g, '_' ) + (this.ns === 0 ? '' : ':');
+               getNamespacePrefix: function () {
+                       return this.namespace === NS_MAIN ?
+                               '' :
+                               ( mw.config.get( 'wgFormattedNamespaces' )[ this.namespace ].replace( / /g, '_' ) + ':' );
                },
 
                /**
-                * The name, like "Foo_bar"
+                * Get the page name without extension or namespace prefix
+                *
+                * Example: "Example_image" for "File:Example_image.svg".
+                *
+                * For the page title (full page name without namespace prefix), see #getMain.
+                *
                 * @return {string}
                 */
                getName: function () {
-                       if ( $.inArray( this.ns, mw.config.get( 'wgCaseSensitiveNamespaces' ) ) !== -1 ) {
-                               return this.name;
+                       if ( $.inArray( this.namespace, mw.config.get( 'wgCaseSensitiveNamespaces' ) ) !== -1 ) {
+                               return this.title;
                        } else {
-                               return $.ucFirst( this.name );
+                               return $.ucFirst( this.title );
                        }
                },
 
                /**
-                * The name, like "Foo bar"
+                * Get the page name (transformed by #text)
+                *
+                * Example: "Example image" for "File:Example_image.svg".
+                *
+                * For the page title (full page name without namespace prefix), see #getMainText.
+                *
                 * @return {string}
                 */
                getNameText: function () {
@@ -277,24 +418,30 @@ var
                },
 
                /**
-                * Get full name in prefixed DB form, like File:Foo_bar.jpg,
-                * most useful for API calls, anything that must identify the "title".
-                * @return {string}
+                * Get the extension of the page name (if any)
+                *
+                * @return {string|null} Name extension or null if there is none
                 */
-               getPrefixedDb: function () {
-                       return this.getNamespacePrefix() + this.getMain();
+               getExtension: function () {
+                       return this.ext;
                },
 
                /**
-                * Get full name in text form, like "File:Foo bar.jpg".
+                * Shortcut for appendable string to form the main page name.
+                *
+                * Returns a string like ".json", or "" if no extension.
+                *
                 * @return {string}
                 */
-               getPrefixedText: function () {
-                       return text( this.getPrefixedDb() );
+               getDotExtension: function () {
+                       return this.ext === null ? '' : '.' + this.ext;
                },
 
                /**
-                * The main title (without namespace), like "Foo_bar.jpg"
+                * Get the main page name (transformed by #text)
+                *
+                * Example: "Example_image.svg" for "File:Example_image.svg".
+                *
                 * @return {string}
                 */
                getMain: function () {
@@ -302,7 +449,10 @@ var
                },
 
                /**
-                * The "text" form, like "Foo bar.jpg"
+                * Get the main page name (transformed by #text)
+                *
+                * Example: "Example image.svg" for "File:Example_image.svg".
+                *
                 * @return {string}
                 */
                getMainText: function () {
@@ -310,23 +460,43 @@ var
                },
 
                /**
-                * Get the extension (returns null if there was none)
-                * @return {string|null}
+                * Get the full page name
+                *
+                * Eaxample: "File:Example_image.svg".
+                * Most useful for API calls, anything that must identify the "title".
+                *
+                * @return {string}
                 */
-               getExtension: function () {
-                       return this.ext;
+               getPrefixedDb: function () {
+                       return this.getNamespacePrefix() + this.getMain();
                },
 
                /**
-                * Convenience method: return string like ".jpg", or "" if no extension
+                * Get the full page name (transformed by #text)
+                *
+                * Example: "File:Example image.svg" for "File:Example_image.svg".
+                *
                 * @return {string}
                 */
-               getDotExtension: function () {
-                       return this.ext === null ? '' : '.' + this.ext;
+               getPrefixedText: function () {
+                       return text( this.getPrefixedDb() );
                },
 
                /**
-                * Return the URL to this title
+                * Get the fragment (if any).
+                *
+                * Note that this method (by design) does not include the hash character and
+                * the value is not url encoded.
+                *
+                * @return {string|null}
+                */
+               getFragment: function () {
+                       return this.fragment;
+               },
+
+               /**
+                * Get the URL to this title
+                *
                 * @see mw.util#wikiGetlink
                 * @return {string}
                 */
@@ -336,20 +506,27 @@ var
 
                /**
                 * Whether this title exists on the wiki.
+                *
                 * @see #static-method-exists
-                * @return {boolean|null} If the information is available. Otherwise null.
+                * @return {boolean|null} Boolean if the information is available, otherwise null
                 */
                exists: function () {
                        return Title.exists( this );
                }
        };
 
-       // Alias
-       fn.toString = fn.getPrefixedDb;
-       fn.toText = fn.getPrefixedText;
+       /**
+        * @alias #getPrefixedDb
+        * @method
+        */
+       Title.prototype.toString = Title.prototype.getPrefixedDb;
+
 
-       // Assign
-       Title.prototype = fn;
+       /**
+        * @alias #getPrefixedText
+        * @method
+        */
+       Title.prototype.toText = Title.prototype.getPrefixedText;
 
        // Expose
        mw.Title = Title;
index 741e231..39093e3 100644 (file)
@@ -1026,30 +1026,37 @@ var mw = ( function ( $, undefined ) {
                                        mw.messages.set( registry[module].messages );
                                }
 
-                               // Make sure we don't run the scripts until all (potentially asynchronous)
-                               // stylesheet insertions have completed.
-                               ( function () {
-                                       var pending = 0;
-                                       checkCssHandles = function () {
-                                               // cssHandlesRegistered ensures we don't take off too soon, e.g. when
-                                               // one of the cssHandles is fired while we're still creating more handles.
-                                               if ( cssHandlesRegistered && pending === 0 && runScript ) {
-                                                       runScript();
-                                                       runScript = undefined; // Revoke
-                                               }
-                                       };
-                                       cssHandle = function () {
-                                               var check = checkCssHandles;
-                                               pending++;
-                                               return function () {
-                                                       if (check) {
-                                                               pending--;
-                                                               check();
-                                                               check = undefined; // Revoke
+                               if ( $.isReady || registry[module].async ) {
+                                       // Make sure we don't run the scripts until all (potentially asynchronous)
+                                       // stylesheet insertions have completed.
+                                       ( function () {
+                                               var pending = 0;
+                                               checkCssHandles = function () {
+                                                       // cssHandlesRegistered ensures we don't take off too soon, e.g. when
+                                                       // one of the cssHandles is fired while we're still creating more handles.
+                                                       if ( cssHandlesRegistered && pending === 0 && runScript ) {
+                                                               runScript();
+                                                               runScript = undefined; // Revoke
                                                        }
                                                };
-                                       };
-                               }() );
+                                               cssHandle = function () {
+                                                       var check = checkCssHandles;
+                                                       pending++;
+                                                       return function () {
+                                                               if (check) {
+                                                                       pending--;
+                                                                       check();
+                                                                       check = undefined; // Revoke
+                                                               }
+                                                       };
+                                               };
+                                       }() );
+                               } else {
+                                       // We are in blocking mode, and so we can't afford to wait for CSS
+                                       cssHandle = function () {};
+                                       // Run immediately
+                                       checkCssHandles = runScript;
+                               }
 
                                // Process styles (see also mw.loader.implement)
                                // * back-compat: { <media>: css }
@@ -1190,7 +1197,7 @@ var mw = ( function ( $, undefined ) {
                         * @param {Object} moduleMap Module map, see #buildModulesString
                         * @param {Object} currReqBase Object with other parameters (other than 'modules') to use in the request
                         * @param {string} sourceLoadScript URL of load.php
-                        * @param {boolean} async If true, use an asynchrounous request even if document ready has not yet occurred
+                        * @param {boolean} async If true, use an asynchronous request even if document ready has not yet occurred
                         */
                        function doRequest( moduleMap, currReqBase, sourceLoadScript, async ) {
                                var request = $.extend(
@@ -1205,6 +1212,16 @@ var mw = ( function ( $, undefined ) {
 
                        /* Public Methods */
                        return {
+                               /**
+                                * The module registry is exposed as an aid for debugging and inspecting page
+                                * state; it is not a public interface for modifying the registry.
+                                *
+                                * @see #registry
+                                * @property
+                                * @private
+                                */
+                               moduleRegistry: registry,
+
                                /**
                                 * @inheritdoc #newStyleTag
                                 * @method
index 7cf9d8f..3e375fb 100644 (file)
@@ -3,10 +3,15 @@
  * @singleton
  */
 ( function ( mw, $ ) {
-       var callbacks, options, tokens, user;
+       var user,
+               callbacks = {},
+               // Extend the skeleton mw.user from mediawiki.js
+               // This is kind of ugly but we're stuck with this for b/c reasons
+               options = mw.user.options || new mw.Map(),
+               tokens = mw.user.tokens || new mw.Map();
 
        /**
-        * Gets the current user's groups or rights.
+        * Get the current user's groups or rights
         *
         * @private
         * @param {string} info One of 'groups' or 'rights'
                } );
        }
 
-       callbacks = {};
-
-       // Extend the skeleton mw.user from mediawiki.js
-       // This is kind of ugly but we're stuck with this for b/c reasons
-       options = mw.user.options || new mw.Map();
-       tokens = mw.user.tokens || new mw.Map();
-
        mw.user = user = {
                options: options,
                tokens: tokens,
 
                /**
-                * Generates a random user session ID (32 alpha-numeric characters).
+                * Generate 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. Its uniqueness should not be depended on.
@@ -68,9 +66,9 @@
                },
 
                /**
-                * Gets the current user's database id.
+                * Get the current user's database id
                 *
-                * Not to be confused with #id
+                * Not to be confused with #id.
                 *
                 * @return {number} Current user's id, or 0 if user is anonymous
                 */
@@ -79,7 +77,7 @@
                },
 
                /**
-                * Gets the current user's name.
+                * Get the current user's name
                 *
                 * @return {string|null} User name string or null if user is anonymous
                 */
@@ -96,7 +94,7 @@
                },
 
                /**
-                * Get date user registered, if available.
+                * Get date user registered, if available
                 *
                 * @return {Date|boolean|null} Date user registered, or false for anonymous users, or
                 *  null when data is not available
                },
 
                /**
-                * Checks if the current user is anonymous.
+                * Whether the current user is anonymous
                 *
                 * @return {boolean}
                 */
                },
 
                /**
-                * Gets a random ID automatically generated and stored in a session cookie.
+                * Get an automatically generated random ID (stored in a session cookie)
                 *
                 * This ID is ephemeral for everyone, staying in their browser only until they close
                 * their browser.
                 */
                sessionId: function () {
                        var sessionId = $.cookie( 'mediaWiki.user.sessionId' );
-                       if ( typeof sessionId === 'undefined' || sessionId === null ) {
+                       if ( sessionId === undefined || sessionId === null ) {
                                sessionId = user.generateRandomSessionId();
-                               $.cookie( 'mediaWiki.user.sessionId', sessionId, { 'expires': null, 'path': '/' } );
+                               $.cookie( 'mediaWiki.user.sessionId', sessionId, { expires: null, path: '/' } );
                        }
                        return sessionId;
                },
 
                /**
-                * Gets the current user's name or the session ID
+                * Get the current user's name or the session ID
                 *
-                * Not to be confused with #getId
+                * Not to be confused with #getId.
                 *
                 * @return {string} User name or random session ID
                 */
                id: function () {
-                       var name = user.getName();
-                       if ( name ) {
-                               return name;
-                       }
-                       return user.sessionId();
+                       return user.getName() || user.sessionId();
                },
 
                /**
-                * Gets the user's bucket, placing them in one at random based on set odds if needed.
+                * Get the user's bucket (place them in one if not done already)
                 *
                 *     mw.user.bucket( 'test', {
-                *         'buckets': { 'ignored': 50, 'control': 25, 'test': 25 },
-                *         'version': 1,
-                *         'expires': 7
+                *         buckets: { ignored: 50, control: 25, test: 25 },
+                *         version: 1,
+                *         expires: 7
                 *     } );
                 *
                 * @param {string} key Name of bucket
                 * @param {Object} options Bucket configuration options
                 * @param {Object} options.buckets List of bucket-name/relative-probability pairs (required,
                 *  must have at least one pair)
-                * @param {number} options.version Version of bucket test, changing this forces rebucketing
-                *  (optional, default: 0)
-                * @param {number} options.expires Length of time (in days) until the user gets rebucketed
-                *  (optional, default: 30)
-                * @return {string} Bucket name - the randomly chosen key of the options.buckets object
+                * @param {number} [options.version=0] Version of bucket test, changing this forces
+                *  rebucketing
+                * @param {number} [options.expires=30] Length of time (in days) until the user gets
+                *  rebucketed
+                * @return {string} Bucket name - the randomly chosen key of the `options.buckets` object
                 */
                bucket: function ( key, options ) {
                        var cookie, parts, version, bucket,
                        cookie = $.cookie( 'mediaWiki.user.bucket:' + key );
 
                        // Bucket information is stored as 2 integers, together as version:bucket like: "1:2"
-                       if ( typeof cookie === 'string' && cookie.length > 2 && cookie.indexOf( ':' ) > 0 ) {
+                       if ( typeof cookie === 'string' && cookie.length > 2 && cookie.indexOf( ':' ) !== -1 ) {
                                parts = cookie.split( ':' );
                                if ( parts.length > 1 && Number( parts[0] ) === options.version ) {
                                        version = Number( parts[0] );
                                        bucket = String( parts[1] );
                                }
                        }
+
                        if ( bucket === undefined ) {
                                if ( !$.isPlainObject( options.buckets ) ) {
-                                       throw 'Invalid buckets error. Object expected for options.buckets.';
+                                       throw new Error( 'Invalid bucket. Object expected for options.buckets.' );
                                }
+
                                version = Number( options.version );
+
                                // Find range
                                range = 0;
                                for ( k in options.buckets ) {
                                        range += options.buckets[k];
                                }
+
                                // Select random value within range
                                rand = Math.random() * range;
+
                                // Determine which bucket the value landed in
                                total = 0;
                                for ( k in options.buckets ) {
                                                break;
                                        }
                                }
+
                                $.cookie(
                                        'mediaWiki.user.bucket:' + key,
                                        version + ':' + bucket,
-                                       { 'path': '/', 'expires': Number( options.expires ) }
+                                       { path: '/', expires: Number( options.expires ) }
                                );
                        }
+
                        return bucket;
                },
 
                /**
-                * Gets the current user's groups.
+                * Get the current user's groups
                 *
                 * @param {Function} callback
                 */
                },
 
                /**
-                * Gets the current user's rights.
+                * Get the current user's rights
                 *
                 * @param {Function} callback
                 */
index 071a52b..9c3a8b3 100644 (file)
@@ -53,8 +53,9 @@
                                                        || profile.name === 'konqueror' ) ) {
                                util.tooltipAccessKeyPrefix = 'ctrl-';
 
-                       // Firefox 2.x and later
-                       } else if ( profile.name === 'firefox' && profile.versionBase > '1' ) {
+                       // Firefox/Iceweasel 2.x and later
+                       } else if ( ( profile.name === 'firefox' || profile.name === 'iceweasel' )
+                               && profile.versionBase > '1' ) {
                                util.tooltipAccessKeyPrefix = 'alt-shift-';
                        }
 
                 * Get the link to a page name (relative to `wgServer`),
                 *
                 * @param {string} str Page name to get the link for.
+                * @param {Object} params A mapping of query parameter names to values,
+                *     e.g. { action: 'edit' }. Optional.
                 * @return {string} Location for a page with name of `str` or boolean false on error.
                 */
-               wikiGetlink: function ( str ) {
-                       return mw.config.get( 'wgArticlePath' ).replace( '$1',
+               wikiGetlink: function ( str, params ) {
+                       var url = mw.config.get( 'wgArticlePath' ).replace( '$1',
                                util.wikiUrlencode( typeof str === 'string' ? str : mw.config.get( 'wgPageName' ) ) );
+                       if ( params && !$.isEmptyObject( params ) ) {
+                               url += url.indexOf( '?' ) !== -1 ? '&' : '?';
+                               url += $.param( params );
+                       }
+                       return url;
                },
 
                /**
index 97b28ed..c07a593 100644 (file)
@@ -57,7 +57,7 @@ class SkinVector extends SkinTemplate {
                                "/{$this->stylename}/csshover{$min}.htc\")}</style><![endif]-->"
                );
 
-               $out->addModules( 'skins.vector.js' );
+               $out->addModules( array( 'skins.vector.js', 'skins.vector.collapsibleNav' ) );
        }
 
        /**
index dd999ed..09f0910 100644 (file)
@@ -1,10 +1,14 @@
 // IE fixes javascript
+( function ( mw, $ ) {
 
-window.isMSIE55 = ( window.showModalDialog && window.clipboardData && window.createPopup );
-window.doneIETransform = undefined;
-window.doneIEAlphaFix = undefined;
+var doneIEAlphaFix, doneIETransform, expandedURLs, fixalpha, isMSIE55,
+       relativeforfloats, setrelative;
 
-window.hookit = function() {
+isMSIE55 = window.isMSIE55 = ( window.showModalDialog && window.clipboardData && window.createPopup );
+doneIETransform = window.doneIETransform = undefined;
+doneIEAlphaFix = window.doneIEAlphaFix = undefined;
+
+window.hookit = function () {
        if ( !doneIETransform && document.getElementById && document.getElementById( 'bodyContent' ) ) {
                doneIETransform = true;
                relativeforfloats();
@@ -17,26 +21,27 @@ if ( document.attachEvent ) {
 }
 
 // png alpha transparency fixes
-window.fixalpha = function( logoId ) {
+fixalpha = window.fixalpha = function ( logoId ) {
        // bg
        if ( isMSIE55 && !doneIEAlphaFix ) {
-               var plogo = document.getElementById( logoId || 'p-logo' );
+               var bg, imageUrl, linkFix, logoa, logospan, plogo;
+               plogo = document.getElementById( logoId || 'p-logo' );
                if ( !plogo ) {
                        return;
                }
 
-               var logoa = plogo.getElementsByTagName('a')[0];
+               logoa = plogo.getElementsByTagName('a')[0];
                if ( !logoa ) {
                        return;
                }
 
-               var bg = logoa.currentStyle.backgroundImage;
-               var imageUrl = bg.substring( 5, bg.length - 2 );
+               bg = logoa.currentStyle.backgroundImage;
+               imageUrl = bg.substring( 5, bg.length - 2 );
 
                doneIEAlphaFix = true;
 
-               if ( imageUrl.substr( imageUrl.length - 4 ).toLowerCase() == '.png' ) {
-                       var logospan = logoa.appendChild( document.createElement( 'span' ) );
+               if ( imageUrl.substr( imageUrl.length - 4 ).toLowerCase() === '.png' ) {
+                       logospan = logoa.appendChild( document.createElement( 'span' ) );
 
                        logoa.style.backgroundImage = 'none';
                        logospan.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + imageUrl + ')';
@@ -45,7 +50,7 @@ window.fixalpha = function( logoId ) {
                        logospan.style.width = logoa.currentStyle.width;
                        logospan.style.cursor = 'hand';
                        // Center image with hack for IE5.5
-                       if ( document.documentElement.dir == 'rtl' ) {
+                       if ( document.documentElement.dir === 'rtl' ) {
                                logospan.style.right = '50%';
                                logospan.style.setExpression( 'marginRight', '"-" + (this.offsetWidth / 2) + "px"' );
                        } else {
@@ -55,7 +60,7 @@ window.fixalpha = function( logoId ) {
                        logospan.style.top = '50%';
                        logospan.style.setExpression( 'marginTop', '"-" + (this.offsetHeight / 2) + "px"' );
 
-                       var linkFix = logoa.appendChild( logoa.cloneNode() );
+                       linkFix = logoa.appendChild( logoa.cloneNode() );
                        linkFix.style.position = 'absolute';
                        linkFix.style.height = '100%';
                        linkFix.style.width = '100%';
@@ -69,22 +74,23 @@ if ( isMSIE55 ) {
 }
 
 // fix ie6 disappering float bug
-window.relativeforfloats = function() {
-       var bc = document.getElementById( 'bodyContent' );
+relativeforfloats = window.relativeforfloats = function () {
+       var bc, tables, divs;
+       bc = document.getElementById( 'bodyContent' );
        if ( bc ) {
-               var tables = bc.getElementsByTagName( 'table' );
-               var divs = bc.getElementsByTagName( 'div' );
+               tables = bc.getElementsByTagName( 'table' );
+               divs = bc.getElementsByTagName( 'div' );
                setrelative( tables );
                setrelative( divs );
        }
 };
 
-window.setrelative = function( nodes ) {
+setrelative = window.setrelative = function ( nodes ) {
        var i = 0;
        while ( i < nodes.length ) {
-               if( ( ( nodes[i].style.float && nodes[i].style.float != ( 'none' ) ||
-                       ( nodes[i].align && nodes[i].align != ( 'none' ) ) ) &&
-                       ( !nodes[i].style.position || nodes[i].style.position != 'relative' ) ) )
+               if( ( ( nodes[i].style.float && nodes[i].style.float !== ( 'none' ) ||
+                       ( nodes[i].align && nodes[i].align !== ( 'none' ) ) ) &&
+                       ( !nodes[i].style.position || nodes[i].style.position !== 'relative' ) ) )
                {
                        nodes[i].style.position = 'relative';
                }
@@ -93,30 +99,31 @@ window.setrelative = function( nodes ) {
 };
 
 // Expand links for printing
-String.prototype.hasClass = function( classWanted ) {
-       var classArr = this.split(/\s/);
-       for ( var i = 0; i < classArr.length; i++ ) {
-               if ( classArr[i].toLowerCase() == classWanted.toLowerCase() ) {
+String.prototype.hasClass = function ( classWanted ) {
+       var i = 0, classArr = this.split(/\s/);
+       for ( i = 0; i < classArr.length; i++ ) {
+               if ( classArr[i].toLowerCase() === classWanted.toLowerCase() ) {
                        return true;
                }
        }
        return false;
 };
 
-window.expandedURLs = undefined;
+expandedURLs = window.expandedURLs = undefined;
 
-window.onbeforeprint = function() {
-       expandedURLs = [];
+window.onbeforeprint = function () {
+       var allLinks, contentEl, expandedLink, expandedText, i;
 
-       var contentEl = document.getElementById( 'content' );
+       expandedURLs = [];
+       contentEl = document.getElementById( 'content' );
 
        if ( contentEl ) {
-               var allLinks = contentEl.getElementsByTagName( 'a' );
+               allLinks = contentEl.getElementsByTagName( 'a' );
 
-               for ( var i = 0; i < allLinks.length; i++ ) {
+               for ( i = 0; i < allLinks.length; i++ ) {
                        if ( allLinks[i].className.hasClass( 'external' ) && !allLinks[i].className.hasClass( 'free' ) ) {
-                               var expandedLink = document.createElement( 'span' );
-                               var expandedText = document.createTextNode( ' (' + allLinks[i].href + ')' );
+                               expandedLink = document.createElement( 'span' );
+                               expandedText = document.createTextNode( ' (' + allLinks[i].href + ')' );
                                expandedLink.appendChild( expandedText );
                                allLinks[i].parentNode.insertBefore( expandedLink, allLinks[i].nextSibling );
                                expandedURLs[i] = expandedLink;
@@ -132,3 +139,5 @@ window.onafterprint = function() {
                }
        }
 };
+
+}( mediaWiki, jQuery ) );
index 540eaf9..fb8edc1 100644 (file)
@@ -97,7 +97,7 @@
 
                // Show/Hide memcached servers when needed
                $( 'input[name$="config_wgMainCacheType"]' ).change( function () {
-                       var $memc = $( "#config-memcachewrapper" );
+                       var $memc = $( '#config-memcachewrapper' );
                        if( $( 'input[name$="config_wgMainCacheType"]:checked' ).val() === 'memcached' ) {
                                $memc.show( 'slow' );
                        } else {
index 6132836..1aa543a 100644 (file)
Binary files a/skins/common/images/Arr_u.png and b/skins/common/images/Arr_u.png differ
index 04fb8f1..398e561 100644 (file)
Binary files a/skins/common/images/ar/button_headline.png and b/skins/common/images/ar/button_headline.png differ
index 12b986b..743ea61 100644 (file)
Binary files a/skins/common/images/ar/button_nowiki.png and b/skins/common/images/ar/button_nowiki.png differ
index 8f979aa..83df068 100644 (file)
Binary files a/skins/common/images/arrow_disabled_left_25.png and b/skins/common/images/arrow_disabled_left_25.png differ
index 11022f6..aa4fbf8 100644 (file)
Binary files a/skins/common/images/arrow_disabled_right_25.png and b/skins/common/images/arrow_disabled_right_25.png differ
index 9e1b550..3f8fee3 100644 (file)
Binary files a/skins/common/images/arrow_right_25.png and b/skins/common/images/arrow_right_25.png differ
index 19e4ad4..47e1ca4 100644 (file)
Binary files a/skins/common/images/button_hr.png and b/skins/common/images/button_hr.png differ
index c647de2..2ba818d 100644 (file)
Binary files a/skins/common/images/button_nowiki.png and b/skins/common/images/button_nowiki.png differ
index ff7348a..fe34b3f 100644 (file)
Binary files a/skins/common/images/button_sig.png and b/skins/common/images/button_sig.png differ
index 53b6f92..94d9d0b 100644 (file)
Binary files a/skins/common/images/button_template.png and b/skins/common/images/button_template.png differ
index dce5667..9b38e6a 100644 (file)
Binary files a/skins/common/images/critical-32.png and b/skins/common/images/critical-32.png differ
index 12b986b..743ea61 100644 (file)
Binary files a/skins/common/images/fa/button_nowiki.png and b/skins/common/images/fa/button_nowiki.png differ
index 7188fa2..00f49f6 100644 (file)
Binary files a/skins/common/images/feed-icon.png and b/skins/common/images/feed-icon.png differ
index cfddc27..ff85c07 100644 (file)
Binary files a/skins/common/images/magnify-clip-rtl.png and b/skins/common/images/magnify-clip-rtl.png differ
index 590f0cb..f7405d2 100644 (file)
Binary files a/skins/common/images/question-small.png and b/skins/common/images/question-small.png differ
index dfde170..34cfa9c 100644 (file)
Binary files a/skins/common/images/tick-32.png and b/skins/common/images/tick-32.png differ
index b14a831..0400734 100644 (file)
Binary files a/skins/common/images/warning-32.png and b/skins/common/images/warning-32.png differ
index 8df4894..462fa9c 100644 (file)
@@ -1,6 +1,7 @@
+( function ( mw, $ ) {
 
-window.ProtectionForm = {
-       'existingMatch': false,
+var ProtectionForm = window.ProtectionForm = {
+       existingMatch: false,
 
        /**
         * Set up the protection chaining interface (i.e. "unlock move permissions" checkbox)
@@ -12,32 +13,38 @@ window.ProtectionForm = {
         *     numTypes             The number of protection types
         *     existingMatch        True if all the existing expiry times match
         */
-       'init': function( opts ) {
-               if( !( document.createTextNode && document.getElementById && document.getElementsByTagName ) )
+       init: function ( opts ) {
+               var box, boxbody, row, cell, check, label;
+
+               if ( !( document.createTextNode && document.getElementById && document.getElementsByTagName ) ) {
                        return false;
+               }
 
-               var box = document.getElementById( opts.tableId );
-               if( !box )
+               box = document.getElementById( opts.tableId );
+               if ( !box ) {
                        return false;
+               }
 
-               var boxbody = box.getElementsByTagName('tbody')[0];
-               var row = document.createElement( 'tr' );
+               boxbody = box.getElementsByTagName( 'tbody' )[0];
+               row = document.createElement( 'tr' );
                boxbody.insertBefore( row, boxbody.firstChild.nextSibling );
 
                this.existingMatch = opts.existingMatch;
 
-               var cell = document.createElement( 'td' );
+               cell = document.createElement( 'td' );
                row.appendChild( cell );
                // If there is only one protection type, there is nothing to chain
-               if( opts.numTypes > 1 ) {
-                       var check = document.createElement( 'input' );
+               if ( opts.numTypes > 1 ) {
+                       check = document.createElement( 'input' );
                        check.id = 'mwProtectUnchained';
                        check.type = 'checkbox';
                        cell.appendChild( check );
-                       addClickHandler( check, function() { ProtectionForm.onChainClick(); } );
+                       window.addClickHandler( check, function () {
+                               ProtectionForm.onChainClick();
+                       } );
 
                        cell.appendChild( document.createTextNode( ' ' ) );
-                       var label = document.createElement( 'label' );
+                       label = document.createElement( 'label' );
                        label.htmlFor = 'mwProtectUnchained';
                        label.appendChild( document.createTextNode( opts.labelText ) );
                        cell.appendChild( label );
@@ -56,17 +63,19 @@ window.ProtectionForm = {
        /**
         * Sets the disabled attribute on the cascade checkbox depending on the current selected levels
         */
-       'updateCascadeCheckbox': function() {
+       updateCascadeCheckbox: function () {
+               var i, lists, items, selected;
+
                // For non-existent titles, there is no cascade option
-               if( !document.getElementById( 'mwProtect-cascade' ) ) {
+               if ( !document.getElementById( 'mwProtect-cascade' ) ) {
                        return;
                }
-               var lists = this.getLevelSelectors();
-               for( var i = 0; i < lists.length; i++ ) {
-                       if( lists[i].selectedIndex > -1 ) {
-                               var items = lists[i].getElementsByTagName( 'option' );
-                               var selected = items[ lists[i].selectedIndex ].value;
-                               if( !this.isCascadeableLevel(selected) ) {
+               lists = this.getLevelSelectors();
+               for ( i = 0; i < lists.length; i++ ) {
+                       if ( lists[i].selectedIndex > -1 ) {
+                               items = lists[i].getElementsByTagName( 'option' );
+                               selected = items[ lists[i].selectedIndex ].value;
+                               if ( !this.isCascadeableLevel( selected ) ) {
                                        document.getElementById( 'mwProtect-cascade' ).checked = false;
                                        document.getElementById( 'mwProtect-cascade' ).disabled = true;
                                        return;
@@ -81,7 +90,7 @@ window.ProtectionForm = {
         * @param level {String}
         * @return {Boolean}
         */
-       'isCascadeableLevel': function( level ) {
+       isCascadeableLevel: function (  level ) {
                var cascadeLevels, len, i;
 
                cascadeLevels = mw.config.get( 'wgCascadeableLevels' );
@@ -102,9 +111,10 @@ window.ProtectionForm = {
         *
         * @param source Element Level selector that changed
         */
-       'updateLevels': function(source) {
-               if( !this.isUnchained() )
+       updateLevels: function ( source ) {
+               if ( !this.isUnchained() ) {
                        this.setAllSelectors( source.selectedIndex );
+               }
                this.updateCascadeCheckbox();
        },
 
@@ -115,22 +125,24 @@ window.ProtectionForm = {
         * @param source Element expiry input that changed
         */
 
-       'updateExpiry': function(source) {
-               if( !this.isUnchained() ) {
-                       var expiry = source.value;
-                       this.forEachExpiryInput(function(element) {
+       updateExpiry: function ( source ) {
+               var expiry, listId, list;
+
+               if ( !this.isUnchained() ) {
+                       expiry = source.value;
+                       this.forEachExpiryInput( function ( element ) {
                                element.value = expiry;
-                       });
+                       } );
                }
-               var listId = source.id.replace( /^mwProtect-(\w+)-expires$/, 'mwProtectExpirySelection-$1' );
-               var list = document.getElementById( listId );
-               if (list && list.value != 'othertime' ) {
+               listId = source.id.replace( /^mwProtect-(\w+)-expires$/, 'mwProtectExpirySelection-$1' );
+               list = document.getElementById( listId );
+               if ( list && list.value !== 'othertime' ) {
                        if ( this.isUnchained() ) {
                                list.value = 'othertime';
                        } else {
-                               this.forEachExpirySelector(function(element) {
+                               this.forEachExpirySelector( function ( element ) {
                                        element.value = 'othertime';
-                               });
+                               } );
                        }
                }
        },
@@ -141,15 +153,16 @@ window.ProtectionForm = {
         *
         * @param source Element expiry selector that changed
         */
-       'updateExpiryList': function(source) {
-               if( !this.isUnchained() ) {
-                       var expiry = source.value;
-                       this.forEachExpirySelector(function(element) {
+       updateExpiryList: function ( source ) {
+               var expiry;
+               if ( !this.isUnchained() ) {
+                       expiry = source.value;
+                       this.forEachExpirySelector( function ( element ) {
                                element.value = expiry;
-                       });
-                       this.forEachExpiryInput(function(element) {
+                       } );
+                       this.forEachExpiryInput( function ( element ) {
                                element.value = '';
-                       });
+                       } );
                }
        },
 
@@ -157,8 +170,8 @@ window.ProtectionForm = {
         * Update chain status and enable/disable various bits of the UI
         * when the user changes the "unlock move permissions" checkbox
         */
-       'onChainClick': function() {
-               if( this.isUnchained() ) {
+       onChainClick: function () {
+               if ( this.isUnchained() ) {
                        this.enableUnchainedInputs( true );
                } else {
                        this.setAllSelectors( this.getMaxLevel() );
@@ -170,16 +183,17 @@ window.ProtectionForm = {
        /**
         * Returns true if the named attribute in all objects in the given array are matching
         */
-       'matchAttribute' : function( objects, attrName ) {
-               var value = null;
+       matchAttribute: function ( objects, attrName ) {
+               var i, element, value;
 
                // Check levels
-               for ( var i = 0; i < objects.length; i++ ) {
-                       var element = objects[i];
-                       if ( value == null ) {
+               value = null;
+               for ( i = 0; i < objects.length; i++ ) {
+                       element = objects[i];
+                       if ( value === null ) {
                                value = element[attrName];
                        } else {
-                               if ( value != element[attrName] ) {
+                               if ( value !== element[attrName] ) {
                                        return false;
                                }
                        }
@@ -192,7 +206,7 @@ window.ProtectionForm = {
         *
         * @return boolean
         */
-       'areAllTypesMatching': function() {
+       areAllTypesMatching: function () {
                return this.existingMatch
                        && this.matchAttribute( this.getLevelSelectors(), 'selectedIndex' )
                        && this.matchAttribute( this.getExpirySelectors(), 'selectedIndex' )
@@ -204,7 +218,7 @@ window.ProtectionForm = {
         *
         * @return bool
         */
-       'isUnchained': function() {
+       isUnchained: function () {
                var element = document.getElementById( 'mwProtectUnchained' );
                return element
                        ? element.checked
@@ -214,13 +228,13 @@ window.ProtectionForm = {
        /**
         * Find the highest protection level in any selector
         */
-       'getMaxLevel': function() {
+       getMaxLevel: function () {
                var maxIndex = -1;
-               this.forEachLevelSelector(function(element) {
-                       if (element.selectedIndex > maxIndex) {
+               this.forEachLevelSelector( function ( element ) {
+                       if ( element.selectedIndex > maxIndex ) {
                                maxIndex = element.selectedIndex;
                        }
-               });
+               } );
                return maxIndex;
        },
 
@@ -229,12 +243,12 @@ window.ProtectionForm = {
         *
         * @param index int Protection level
         */
-       'setAllSelectors': function(index) {
-               this.forEachLevelSelector(function(element) {
-                       if (element.selectedIndex != index) {
+       setAllSelectors: function ( index ) {
+               this.forEachLevelSelector( function ( element ) {
+                       if ( element.selectedIndex !== index ) {
                                element.selectedIndex = index;
                        }
-               });
+               } );
        },
 
        /**
@@ -242,10 +256,12 @@ window.ProtectionForm = {
         *
         * @param func callable Callback function
         */
-       'forEachLevelSelector': function(func) {
-               var selectors = this.getLevelSelectors();
-               for (var i = 0; i < selectors.length; i++) {
-                       func(selectors[i]);
+       forEachLevelSelector: function ( func ) {
+               var i, selectors;
+
+               selectors = this.getLevelSelectors();
+               for ( i = 0; i < selectors.length; i++ ) {
+                       func( selectors[i] );
                }
        },
 
@@ -254,12 +270,14 @@ window.ProtectionForm = {
         *
         * @return Array
         */
-       'getLevelSelectors': function() {
-               var all = document.getElementsByTagName("select");
-               var ours = [];
-               for (var i = 0; i < all.length; i++) {
-                       var element = all[i];
-                       if (element.id.match(/^mwProtect-level-/)) {
+       getLevelSelectors: function () {
+               var i, ours, all, element;
+
+               all = document.getElementsByTagName( 'select' );
+               ours = [];
+               for ( i = 0; i < all.length; i++ ) {
+                       element = all[i];
+                       if ( element.id.match( /^mwProtect-level-/ ) ) {
                                ours[ours.length] = element;
                        }
                }
@@ -271,10 +289,12 @@ window.ProtectionForm = {
         *
         * @param func callable Callback function
         */
-       'forEachExpiryInput': function(func) {
-               var inputs = this.getExpiryInputs();
-               for (var i = 0; i < inputs.length; i++) {
-                       func(inputs[i]);
+       forEachExpiryInput: function ( func ) {
+               var i, inputs;
+
+               inputs = this.getExpiryInputs();
+               for ( i = 0; i < inputs.length; i++ ) {
+                       func( inputs[i] );
                }
        },
 
@@ -283,12 +303,14 @@ window.ProtectionForm = {
         *
         * @return Array
         */
-       'getExpiryInputs': function() {
-               var all = document.getElementsByTagName("input");
-               var ours = [];
-               for (var i = 0; i < all.length; i++) {
-                       var element = all[i];
-                       if (element.name.match(/^mwProtect-expiry-/)) {
+       getExpiryInputs: function () {
+               var i, all, element, ours;
+
+               all = document.getElementsByTagName( 'input' );
+               ours = [];
+               for ( i = 0; i < all.length; i++ ) {
+                       element = all[i];
+                       if ( element.name.match( /^mwProtect-expiry-/ ) ) {
                                ours[ours.length] = element;
                        }
                }
@@ -299,10 +321,12 @@ window.ProtectionForm = {
         * Apply a callback to each expiry selector list
         * @param func callable Callback function
         */
-       'forEachExpirySelector': function(func) {
-               var inputs = this.getExpirySelectors();
-               for (var i = 0; i < inputs.length; i++) {
-                       func(inputs[i]);
+       forEachExpirySelector: function ( func ) {
+               var i, inputs;
+
+               inputs = this.getExpirySelectors();
+               for ( i = 0; i < inputs.length; i++ ) {
+                       func( inputs[i] );
                }
        },
 
@@ -311,12 +335,14 @@ window.ProtectionForm = {
         *
         * @return Array
         */
-       'getExpirySelectors': function() {
-               var all = document.getElementsByTagName("select");
-               var ours = [];
-               for (var i = 0; i < all.length; i++) {
-                       var element = all[i];
-                       if (element.id.match(/^mwProtectExpirySelection-/)) {
+       getExpirySelectors: function () {
+               var i, all, ours, element;
+
+               all = document.getElementsByTagName( 'select' );
+               ours = [];
+               for ( i = 0; i < all.length; i++ ) {
+                       element = all[i];
+                       if ( element.id.match( /^mwProtectExpirySelection-/ ) ) {
                                ours[ours.length] = element;
                        }
                }
@@ -328,30 +354,33 @@ window.ProtectionForm = {
         *
         * @param val boolean Enable?
         */
-       'enableUnchainedInputs': function(val) {
+       enableUnchainedInputs: function ( val ) {
                var first = true;
-               this.forEachLevelSelector(function(element) {
-                       if (first) {
+
+               this.forEachLevelSelector( function ( element ) {
+                       if ( first ) {
                                first = false;
                        } else {
                                element.disabled = !val;
                        }
-               });
+               } );
                first = true;
-               this.forEachExpiryInput(function(element) {
-                       if (first) {
+               this.forEachExpiryInput( function ( element ) {
+                       if ( first ) {
                                first = false;
                        } else {
                                element.disabled = !val;
                        }
-               });
+               } );
                first = true;
-               this.forEachExpirySelector(function(element) {
-                       if (first) {
+               this.forEachExpirySelector( function ( element ) {
+                       if ( first ) {
                                first = false;
                        } else {
                                element.disabled = !val;
                        }
-               });
+               } );
        }
 };
+
+}( mediaWiki, jQuery ) );
index 0118d20..7cc58e3 100644 (file)
@@ -59,9 +59,8 @@ input[dir="rtl"] {
 }
 
 /* Default style for semantic tags */
-abbr,
-acronym,
-.explain {
+abbr[title],
+.explain[title] {
        border-bottom: 1px dotted;
        cursor: help;
 }
index 160de86..580cf25 100644 (file)
@@ -1,12 +1,14 @@
+/*jshint camelcase:false */
 ( function ( mw, $ ) {
-var    ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
+var    licenseSelectorCheck, wgUploadWarningObj, wgUploadLicenseObj, fillDestFilename,
+       ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
        fileExtensions = mw.config.get( 'wgFileExtensions' );
 
-window.licenseSelectorCheck = function() {
-       var selector = document.getElementById( "wpLicense" );
-       var selection = selector.options[selector.selectedIndex].value;
-       if( selector.selectedIndex > 0 ) {
-               if( selection == "" ) {
+licenseSelectorCheck = window.licenseSelectorCheck = function () {
+       var selector = document.getElementById( 'wpLicense' ),
+               selection = selector.options[selector.selectedIndex].value;
+       if ( selector.selectedIndex > 0 ) {
+               if ( !selection ) {
                        // Option disabled, but browser is broken and doesn't respect this
                        selector.selectedIndex = 0;
                }
@@ -17,23 +19,29 @@ window.licenseSelectorCheck = function() {
 
 function uploadSetup() {
        // Disable URL box if the URL copy upload source type is not selected
-       var e = document.getElementById( 'wpSourceTypeurl' );
-       if( e ) {
-               if( !e.checked ) {
-                       var ein = document.getElementById( 'wpUploadFileURL' );
-                       if(ein)
-                               ein.setAttribute( 'disabled', 'disabled' );
+       var ein,
+               selector, ua, isMacIe, i,
+               optionsTable, row, td,
+               wpLicense, wpLicenseRow, wpLicenseTbody,
+               uploadSourceIds, len, onchange,
+               e = document.getElementById( 'wpSourceTypeurl' );
+       if ( e ) {
+               if ( !e.checked ) {
+                       ein = document.getElementById( 'wpUploadFileURL' );
+                       if ( ein ) {
+                               ein.disabled = true;
+                       }
                }
        }
 
        // For MSIE/Mac: non-breaking spaces cause the <option> not to render.
        // But for some reason, setting the text to itself works
-       var selector = document.getElementById("wpLicense");
-       if (selector) {
-               var ua = navigator.userAgent;
-               var isMacIe = (ua.indexOf("MSIE") != -1) && (ua.indexOf("Mac") != -1);
-               if (isMacIe) {
-                       for (var i = 0; i < selector.options.length; i++) {
+       selector = document.getElementById( 'wpLicense' );
+       if ( selector ) {
+               ua = navigator.userAgent;
+               isMacIe = ua.indexOf( 'MSIE' ) !== -1 && ua.indexOf( 'Mac' ) !== -1;
+               if ( isMacIe ) {
+                       for ( i = 0; i < selector.options.length; i++ ) {
                                selector.options[i].text = selector.options[i].text;
                        }
                }
@@ -43,31 +51,31 @@ function uploadSetup() {
        if ( ajaxUploadDestCheck ) {
                // Insert an event handler that fetches upload warnings when wpDestFile
                // has been changed
-               document.getElementById( 'wpDestFile' ).onchange = function ( e ) {
-                       wgUploadWarningObj.checkNow(this.value);
+               document.getElementById( 'wpDestFile' ).onchange = function () {
+                       wgUploadWarningObj.checkNow( this.value );
                };
                // Insert a row where the warnings will be displayed just below the
                // wpDestFile row
-               var optionsTable = document.getElementById( 'mw-htmlform-description' ).tBodies[0];
-               var row = optionsTable.insertRow( 1 );
-               var td = document.createElement( 'td' );
+               optionsTable = document.getElementById( 'mw-htmlform-description' ).tBodies[0];
+               row = optionsTable.insertRow( 1 );
+               td = document.createElement( 'td' );
                td.id = 'wpDestFile-warning';
                td.colSpan = 2;
 
                row.appendChild( td );
        }
 
-       var wpLicense = document.getElementById( 'wpLicense' );
+       wpLicense = document.getElementById( 'wpLicense' );
        if ( mw.config.get( 'wgAjaxLicensePreview' ) && wpLicense ) {
                // License selector check
                wpLicense.onchange = licenseSelectorCheck;
 
                // License selector table row
-               var wpLicenseRow = wpLicense.parentNode.parentNode;
-               var wpLicenseTbody = wpLicenseRow.parentNode;
+               wpLicenseRow = wpLicense.parentNode.parentNode;
+               wpLicenseTbody = wpLicenseRow.parentNode;
 
-               var row = document.createElement( 'tr' );
-               var td = document.createElement( 'td' );
+               row = document.createElement( 'tr' );
+               td = document.createElement( 'td' );
                row.appendChild( td );
                td = document.createElement( 'td' );
                td.id = 'mw-license-preview';
@@ -78,63 +86,75 @@ function uploadSetup() {
 
 
        // fillDestFile setup
-       var     i,
-               uploadSourceIds = mw.config.get( 'wgUploadSourceIds' ),
-               len = uploadSourceIds.length;
-       for ( i = 0; i < len; i += 1 )
-               document.getElementById( uploadSourceIds[i] ).onchange = function (e) {
-                       fillDestFilename( this.id );
-               };
-};
+       uploadSourceIds = mw.config.get( 'wgUploadSourceIds' );
+       len = uploadSourceIds.length;
+       onchange = function () {
+               fillDestFilename( this.id );
+       };
+       for ( i = 0; i < len; i += 1 ) {
+               document.getElementById( uploadSourceIds[i] ).onchange = onchange;
+       }
+}
 
+wgUploadWarningObj = window.wgUploadWarningObj = {
+       responseCache: { '' : '&nbsp;' },
+       nameToCheck: '',
+       typing: false,
+       delay: 500, // ms
+       timeoutID: false,
 
-window.wgUploadWarningObj = {
-       'responseCache' : { '' : '&nbsp;' },
-       'nameToCheck' : '',
-       'typing': false,
-       'delay': 500, // ms
-       'timeoutID': false,
+       keypress: function () {
+               var cached, destFile, warningElt;
 
-       'keypress': function () {
-               if ( !ajaxUploadDestCheck ) return;
+               if ( !ajaxUploadDestCheck ) {
+                       return;
+               }
 
                // Find file to upload
-               var destFile = document.getElementById('wpDestFile');
-               var warningElt = document.getElementById( 'wpDestFile-warning' );
-               if ( !destFile || !warningElt ) return ;
+               destFile = document.getElementById( 'wpDestFile' );
+               warningElt = document.getElementById( 'wpDestFile-warning' );
+               if ( !destFile || !warningElt ) {
+                       return;
+               }
 
-               this.nameToCheck = destFile.value ;
+               this.nameToCheck = destFile.value;
 
                // Clear timer
                if ( this.timeoutID ) {
-                       window.clearTimeout( this.timeoutID );
+                       clearTimeout( this.timeoutID );
                }
                // Check response cache
-               for (cached in this.responseCache) {
-                       if (this.nameToCheck == cached) {
+               for ( cached in this.responseCache ) {
+                       if ( this.nameToCheck === cached ) {
                                this.setWarning(this.responseCache[this.nameToCheck]);
                                return;
                        }
                }
 
-               this.timeoutID = window.setTimeout( 'wgUploadWarningObj.timeout()', this.delay );
+               this.timeoutID = setTimeout( function () {
+                       wgUploadWarningObj.timeout();
+               }, this.delay );
        },
 
-       'checkNow': function (fname) {
-               if ( !ajaxUploadDestCheck ) return;
+       checkNow: function ( fname ) {
+               if ( !ajaxUploadDestCheck ) {
+                       return;
+               }
                if ( this.timeoutID ) {
-                       window.clearTimeout( this.timeoutID );
+                       clearTimeout( this.timeoutID );
                }
                this.nameToCheck = fname;
                this.timeout();
        },
 
-       'timeout' : function() {
-               if ( !ajaxUploadDestCheck || this.nameToCheck === '' ) return;
-               injectSpinner( document.getElementById( 'wpDestFile' ), 'destcheck' );
+       timeout: function () {
+               if ( !ajaxUploadDestCheck || this.nameToCheck === '' ) {
+                       return;
+               }
+               window.injectSpinner( document.getElementById( 'wpDestFile' ), 'destcheck' );
 
                var uploadWarningObj = this;
-               ( new mw.Api ).get( {
+               ( new mw.Api() ).get( {
                        action: 'query',
                        titles: ( new mw.Title( this.nameToCheck, mw.config.get( 'wgNamespaceIds' ).file ) ).getPrefixedText(),
                        prop: 'imageinfo',
@@ -149,89 +169,101 @@ window.wgUploadWarningObj = {
                } );
        },
 
-       'processResult' : function ( result, fileName ) {
-               removeSpinner( 'destcheck' );
+       processResult: function ( result, fileName ) {
+               window.removeSpinner( 'destcheck' );
                this.setWarning( result.html );
                this.responseCache[fileName] = result.html;
        },
 
-       'setWarning' : function (warning) {
-               var warningElt = document.getElementById( 'wpDestFile-warning' );
-               var ackElt = document.getElementsByName( 'wpDestFileWarningAck' );
+       setWarning: function ( warning ) {
+               var warningElt = document.getElementById( 'wpDestFile-warning' ),
+                       ackElt = document.getElementsByName( 'wpDestFileWarningAck' );
 
                this.setInnerHTML(warningElt, warning);
 
                // Set a value in the form indicating that the warning is acknowledged and
                // doesn't need to be redisplayed post-upload
-               if ( warning == '' ) {
+               if ( !warning ) {
                        ackElt[0].value = '';
                } else {
                        ackElt[0].value = '1';
                }
 
        },
-       'setInnerHTML' : function (element, text) {
+       setInnerHTML: function ( element, text ) {
                // Check for no change to avoid flicker in IE 7
-               if (element.innerHTML != text) {
+               if ( element.innerHTML !== text ) {
                        element.innerHTML = text;
                }
        }
 };
 
-window.fillDestFilename = function(id) {
+fillDestFilename = window.fillDestFilename = function ( id ) {
+       var e, path, slash, backslash, fname,
+               found, ext, i,
+               destFile;
        if ( !mw.config.get( 'wgUploadAutoFill' ) ) {
                return;
        }
-       if (!document.getElementById) {
+       if ( !document.getElementById ) {
                return;
        }
        // Remove any previously flagged errors
-       var e = document.getElementById( 'mw-upload-permitted' );
-       if( e ) e.className = '';
+       e = document.getElementById( 'mw-upload-permitted' );
+       if ( e ) {
+               e.className = '';
+       }
 
-       var e = document.getElementById( 'mw-upload-prohibited' );
-       if( e ) e.className = '';
+       e = document.getElementById( 'mw-upload-prohibited' );
+       if ( e ) {
+               e.className = '';
+       }
 
-       var path = document.getElementById(id).value;
+       path = document.getElementById( id ).value;
        // Find trailing part
-       var slash = path.lastIndexOf('/');
-       var backslash = path.lastIndexOf('\\');
-       var fname;
-       if (slash == -1 && backslash == -1) {
+       slash = path.lastIndexOf( '/' );
+       backslash = path.lastIndexOf( '\\' );
+       if ( slash === -1 && backslash === -1 ) {
                fname = path;
-       } else if (slash > backslash) {
-               fname = path.substring(slash+1, 10000);
+       } else if ( slash > backslash ) {
+               fname = path.substring( slash + 1, 10000 );
        } else {
-               fname = path.substring(backslash+1, 10000);
+               fname = path.substring( backslash + 1, 10000 );
        }
 
        // Clear the filename if it does not have a valid extension.
        // URLs are less likely to have a useful extension, so don't include them in the
        // extension check.
        if ( mw.config.get( 'wgStrictFileExtensions' ) && fileExtensions && id !== 'wpUploadFileURL' ) {
-               var found = false;
+               found = false;
                if ( fname.lastIndexOf( '.' ) !== -1 ) {
-                       var ext = fname.substr( fname.lastIndexOf( '.' ) + 1 );
-                       for ( var i = 0; i < fileExtensions.length; i += 1 ) {
+                       ext = fname.substr( fname.lastIndexOf( '.' ) + 1 );
+                       for ( i = 0; i < fileExtensions.length; i += 1 ) {
                                if ( fileExtensions[i].toLowerCase() === ext.toLowerCase() ) {
                                        found = true;
                                        break;
                                }
                        }
                }
-               if( !found ) {
+               if ( !found ) {
                        // Not a valid extension
                        // Clear the upload and set mw-upload-permitted to error
-                       document.getElementById(id).value = '';
-                       var e = document.getElementById( 'mw-upload-permitted' );
-                       if( e ) e.className = 'error';
+                       document.getElementById( id ).value = '';
+                       e = document.getElementById( 'mw-upload-permitted' );
+                       if ( e ) {
+                               e.className = 'error';
+                       }
 
-                       var e = document.getElementById( 'mw-upload-prohibited' );
-                       if( e ) e.className = 'error';
+                       e = document.getElementById( 'mw-upload-prohibited' );
+                       if ( e ) {
+                               e.className = 'error';
+                       }
 
                        // Clear wpDestFile as well
-                       var e = document.getElementById( 'wpDestFile' );
-                       if( e ) e.value = '';
+                       e = document.getElementById( 'wpDestFile' );
+                       if ( e ) {
+                               e.value = '';
+                       }
 
                        return false;
                }
@@ -245,45 +277,51 @@ window.fillDestFilename = function(id) {
        }
 
        // Output result
-       var destFile = document.getElementById( 'wpDestFile' );
+       destFile = document.getElementById( 'wpDestFile' );
        if ( destFile ) {
                // Call decodeURIComponent function to remove possible URL-encoded characters
                // from the file name (bug 30390). Especially likely with upload-form-url.
                // decodeURIComponent can throw an exception in input is invalid utf-8
                try {
                        destFile.value = decodeURIComponent( fname );
-               } catch ( e ) {
+               } catch ( err ) {
                        destFile.value = fname;
                }
                wgUploadWarningObj.checkNow( fname );
        }
 };
 
-window.toggleFilenameFiller = function() {
-       if(!document.getElementById) return;
-       var upfield = document.getElementById('wpUploadFile');
-       var destName = document.getElementById('wpDestFile').value;
-       wgUploadAutoFill = ( destName == '' || destName == ' ' );
+window.toggleFilenameFiller = function () {
+       if ( !document.getElementById ) {
+               return;
+       }
+       var destName = document.getElementById( 'wpDestFile' ).value;
+       mw.config.set( 'wgUploadAutoFill', !destName );
 };
 
-window.wgUploadLicenseObj = {
+wgUploadLicenseObj = window.wgUploadLicenseObj = {
 
-       'responseCache' : { '' : '' },
+       responseCache: { '' : '' },
 
-       'fetchPreview': function( license ) {
-               if ( !mw.config.get( 'wgAjaxLicensePreview' ) ) return;
-               for (cached in this.responseCache) {
-                       if (cached == license) {
+       fetchPreview: function ( license ) {
+               var cached, title;
+               if ( !mw.config.get( 'wgAjaxLicensePreview' ) ) {
+                       return;
+               }
+               for ( cached in this.responseCache ) {
+                       if ( cached === license ) {
                                this.showPreview( this.responseCache[license] );
                                return;
                        }
                }
-               injectSpinner( document.getElementById( 'wpLicense' ), 'license' );
+               window.injectSpinner( document.getElementById( 'wpLicense' ), 'license' );
 
-               var title = document.getElementById('wpDestFile').value;
-               if ( !title ) title = 'File:Sample.jpg';
+               title = document.getElementById( 'wpDestFile' ).value;
+               if ( !title ) {
+                       title = 'File:Sample.jpg';
+               }
 
-               ( new mw.Api ).get( {
+               ( new mw.Api() ).get( {
                        action: 'parse',
                        text: '{{' + license + '}}',
                        title: title,
@@ -294,16 +332,17 @@ window.wgUploadLicenseObj = {
                } );
        },
 
-       'processResult' : function( result, license ) {
-               removeSpinner( 'license' );
-               this.responseCache[license] = result['parse']['text']['*'];
+       processResult: function ( result, license ) {
+               window.removeSpinner( 'license' );
+               this.responseCache[license] = result.parse.text['*'];
                this.showPreview( this.responseCache[license] );
        },
 
-       'showPreview' : function( preview ) {
+       showPreview: function ( preview ) {
                var previewPanel = document.getElementById( 'mw-license-preview' );
-               if( previewPanel.innerHTML != preview )
+               if ( previewPanel.innerHTML !== preview ) {
                        previewPanel.innerHTML = preview;
+               }
        }
 
 };
diff --git a/skins/common/wikiprintable.css b/skins/common/wikiprintable.css
deleted file mode 100644 (file)
index dc236ea..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/* MediaWiki print stylesheet */
-
-body {
-       color: #000000;
-       background: #ffffff;
-}
-
-/* MSIE/Win doesn't understand 'inherit' */
-a,
-a.external,
-a.new,
-a.stub {
-       color: black !important;
-       text-decoration: none !important;
-}
-#article {
-       margin: 0 !important;
-}
-
-/* Continue ... */
-a,
-a.external,
-a.new,
-a.stub {
-       color: inherit !important;
-       text-decoration: inherit !important;
-}
-
-/* Hide UI stuff */
-#quickbar,
-#topbar,
-#logo,
-#footer,
-#siteNotice,
-.mw-editsection,
-.toctoggle {
-       display: none;
-}
-
-/* */
-#article {
-       position: relative;
-       margin: inherit !important;
-}
-
-.printfooter {
-       border-top: solid 1px black;
-       display: block !important;
-}
-
-/* Old stuff. @todo FIXME:
-a.CBlink { color: #0000AA; text-decoration: none; font-size: 12pt; }
-a.interwiki,
-a.external { color: #3333BB; text-decoration: none; }
-h1.pagetitle { padding-bottom: 0; margin-bottom: 0; }
-i.link,
-u.link { color: #000066; }
-p.subtitle { padding-top: 0; margin-top: 0; }
-*/
index acf260f..6308383 100644 (file)
Binary files a/skins/modern/external.png and b/skins/modern/external.png differ
index 47c320b..40fbfd7 100644 (file)
@@ -405,8 +405,7 @@ h1, h2, h3, h4, h5, h6 {
        text-decoration: none;
        color: white;
 }
-#mw_content a.external,
-#mw_content a.external[href ^="gopher://"] {
+#mw_content a.external {
        /* @embed */
        background: url(external.png) center right no-repeat;
        padding-right: 13px;
index ec1ce43..534d333 100644 (file)
@@ -70,15 +70,6 @@ div#footer {
 #portal-personaltools {
        padding-bottom: 0.1em;
 }
-#bodyContent a.external {
-       background: url(external.png) center right no-repeat;
-       padding-right: 13px;
-}
-
-.rtl #bodyContent a.external {
-       background-image: url(external-rtl.png);
-       padding-right: 13px;
-}
 
 .rtl a.feedlink {
        background-position: right;
index acf260f..6308383 100644 (file)
Binary files a/skins/monobook/external-ltr.png and b/skins/monobook/external-ltr.png differ
index 7d5ee37..5313234 100644 (file)
Binary files a/skins/monobook/external-rtl.png and b/skins/monobook/external-rtl.png differ
index 50b9e09..d8f25eb 100644 (file)
@@ -142,8 +142,7 @@ table.rimage {
 ** keep the whitespace in front of the ^=, hides rule from konqueror
 ** this is css3, the validator doesn't like it when validating as css2
 */
-#bodyContent a.external,
-#bodyContent a.external[href ^="gopher://"] {
+#bodyContent a.external {
        /* @embed */
        background: url(external-ltr.png) center right no-repeat;
        padding-right: 13px;
diff --git a/skins/vector/collapsibleNav.js b/skins/vector/collapsibleNav.js
new file mode 100644 (file)
index 0000000..67313c9
--- /dev/null
@@ -0,0 +1,121 @@
+/**
+ * Collapsible navigation for Vector
+ */
+( function ( mw, $ ) {
+       'use strict';
+       var map;
+
+       // Use the same function for all navigation headings - don't repeat
+       function toggle( $element ) {
+               $.cookie(
+                       'vector-nav-' + $element.parent().attr( 'id' ),
+                       $element.parent().is( '.collapsed' ),
+                       { 'expires': 30, 'path': '/' }
+               );
+               $element
+                       .parent()
+                       .toggleClass( 'expanded' )
+                       .toggleClass( 'collapsed' )
+                       .find( '.body' )
+                       .slideToggle( 'fast' );
+       }
+
+       /* Browser Support */
+
+       map = {
+               // Left-to-right languages
+               ltr: {
+                       // Collapsible Nav is broken in Opera < 9.6 and Konqueror < 4
+                       opera: [['>=', 9.6]],
+                       konqueror: [['>=', 4.0]],
+                       blackberry: false,
+                       ipod: false,
+                       iphone: false,
+                       ps3: false
+               },
+               // Right-to-left languages
+               rtl: {
+                       opera: [['>=', 9.6]],
+                       konqueror: [['>=', 4.0]],
+                       blackberry: false,
+                       ipod: false,
+                       iphone: false,
+                       ps3: false
+               }
+       };
+       if ( !$.client.test( map ) ) {
+               return true;
+       }
+
+       $( function ( $ ) {
+               var $headings, tabIndex;
+
+               /* General Portal Modification */
+
+               // Always show the first portal
+               $( '#mw-panel > .portal:first' ).addClass( 'first persistent' );
+               // Apply a class to the entire panel to activate styles
+               $( '#mw-panel' ).addClass( 'collapsible-nav' );
+               // Use cookie data to restore preferences of what to show and hide
+               $( '#mw-panel > .portal:not(.persistent)' )
+                       .each( function ( i ) {
+                               var id = $(this).attr( 'id' ),
+                                       state = $.cookie( 'vector-nav-' + id );
+                               // Add anchor tag to heading for better accessibility
+                               $( this ).find( 'h3' ).wrapInner( $( '<a href="#"></a>' ).click( false ) );
+                               // In the case that we are not showing the new version, let's show the languages by default
+                               if (
+                                       state === 'true' ||
+                                       ( state === null && i < 1 ) ||
+                                       ( state === null && id === 'p-lang' )
+                               ) {
+                                       $(this)
+                                               .addClass( 'expanded' )
+                                               .removeClass( 'collapsed' )
+                                               .find( '.body' )
+                                               .hide() // bug 34450
+                                               .show();
+                               } else {
+                                       $(this)
+                                               .addClass( 'collapsed' )
+                                               .removeClass( 'expanded' );
+                               }
+                               // Re-save cookie
+                               if ( state !== null ) {
+                                       $.cookie( 'vector-nav-' + $(this).attr( 'id' ), state, { 'expires': 30, 'path': '/' } );
+                               }
+                       } );
+
+               /* Tab Indexing */
+
+               $headings = $( '#mw-panel > .portal:not(.persistent) > h3' );
+
+               // Get the highest tab index
+               tabIndex = $( document ).lastTabIndex() + 1;
+
+               // Fix the search not having a tabindex
+               $( '#searchInput' ).attr( 'tabindex', tabIndex++ );
+
+               // Make it keyboard accessible
+               $headings.attr( 'tabindex', function () {
+                       return tabIndex++;
+               });
+
+               // Toggle the selected menu's class and expand or collapse the menu
+               $( '#mw-panel' )
+                       .delegate( '.portal:not(.persistent) > h3', 'keydown', function ( e ) {
+                               // Make the space and enter keys act as a click
+                               if ( e.which === 13 /* Enter */ || e.which === 32 /* Space */ ) {
+                                       toggle( $(this) );
+                               }
+                       } )
+                       .delegate( '.portal:not(.persistent) > h3', 'mousedown', function ( e ) {
+                               if ( e.which !== 3 ) { // Right mouse click
+                                       toggle( $(this) );
+                                       $(this).blur();
+                               }
+                               return false;
+                       } );
+       });
+
+}( mediaWiki, jQuery ) );
diff --git a/skins/vector/collapsibleNav.less b/skins/vector/collapsibleNav.less
new file mode 100644 (file)
index 0000000..25ebec7
--- /dev/null
@@ -0,0 +1,89 @@
+/**
+ * LESS Stylesheet for collapsible nav
+ */
+@import "mediawiki.mixins.less";
+
+#mw-panel.collapsible-nav {
+       .portal {
+               background-position: left top;
+               background-repeat: no-repeat;
+               .background-image('images/portal-break.png');
+               padding: 0.25em 0 !important;
+               margin: -11px 9px 10px 11px;
+
+               h3 {
+                       color: #4D4D4D;
+                       font-weight: normal;
+                       background-position: left center;
+                       background-repeat: no-repeat;
+                       .background-image-svg('images/arrow-expanded.svg', 'images/arrow-expanded.png');
+                       padding: 4px 0 3px 1.5em;
+                       margin-bottom: 0;
+
+                       &:hover {
+                               cursor: pointer;
+                               text-decoration: none;
+                       }
+
+                       a {
+                               color: #4D4D4D;
+                               text-decoration: none;
+                       }
+               }
+
+               .body {
+                       background-image: none !important;
+                       padding-top: 0;
+                       display: none;
+
+                       ul {
+                               li {
+                                       padding: 0.25em 0;
+                               }
+                       }
+               }
+
+
+               /* First */
+               &.first {
+                       background-image: none;
+                       margin-top: 0;
+                       h3 {
+                               display: none;
+                       }
+               }
+
+               /* Persistent */
+               &.persistent {
+                       .body {
+                               display: block;
+                               margin-left: 0.5em;
+                       }
+
+                       h3 {
+                               background-image: none !important;
+                               padding-left: 0.7em;
+                               cursor: default;
+                       }
+               }
+
+               /* Collapsed */
+               &.collapsed {
+                       h3 {
+                               color: #0645AD;
+                               background-position: left center;
+                               background-repeat: no-repeat;
+                               .background-image-svg('images/arrow-collapsed-ltr.svg', 'images/arrow-collapsed-ltr.png');
+                               margin-bottom: 0;
+
+                               &:hover {
+                                       text-decoration: underline;
+                               }
+
+                               a {
+                                       color: #0645AD;
+                               }
+                       }
+               }
+       }
+}
diff --git a/skins/vector/externalLinks.less b/skins/vector/externalLinks.less
new file mode 100644 (file)
index 0000000..5b02abb
--- /dev/null
@@ -0,0 +1,75 @@
+// FIXME: This size of this CSS is ridiculous. Please refactor (see bug 54604)
+@import "mediawiki.mixins.less";
+
+div#content a.external {
+       background-position: center right;
+       background-repeat: no-repeat;
+       .background-image('images/external-link-ltr-icon.png');
+       padding-right: 13px;
+}
+div#content a.external[href ^="https://"],
+.link-https {
+       background-position: center right;
+       background-repeat: no-repeat;
+       .background-image('images/lock-icon.png');
+       padding-right: 13px;
+}
+div#content a.external[href ^="mailto:"],
+.link-mailto {
+       background-position: center right;
+       background-repeat: no-repeat;
+       .background-image('images/mail-icon.png');
+       padding-right: 13px;
+}
+div#content a.external[href ^="news:"] {
+       background-position: center right;
+       background-repeat: no-repeat;
+       .background-image('images/news-icon.png');
+       padding-right: 13px;
+}
+div#content a.external[href ^="ftp://"],
+.link-ftp {
+       background-position: center right;
+       background-repeat: no-repeat;
+       .background-image('images/file-icon.png');
+       padding-right: 13px;
+}
+div#content a.external[href ^="irc://"],
+div#content a.external[href ^="ircs://"],
+.link-irc {
+       background-position: center right;
+       background-repeat: no-repeat;
+       .background-image('images/talk-icon.png');
+       padding-right: 13px;
+}
+div#content a.external[href $=".ogg"], div#content a.external[href $=".OGG"],
+div#content a.external[href $=".mid"], div#content a.external[href $=".MID"],
+div#content a.external[href $=".midi"], div#content a.external[href $=".MIDI"],
+div#content a.external[href $=".mp3"], div#content a.external[href $=".MP3"],
+div#content a.external[href $=".wav"], div#content a.external[href $=".WAV"],
+div#content a.external[href $=".wma"], div#content a.external[href $=".WMA"],
+.link-audio {
+       background-position: center right;
+       background-repeat: no-repeat;
+       .background-image('images/audio-icon.png');
+       padding-right: 13px;
+}
+div#content a.external[href $=".ogm"], div#content a.external[href $=".OGM"],
+div#content a.external[href $=".avi"], div#content a.external[href $=".AVI"],
+div#content a.external[href $=".mpeg"], div#content a.external[href $=".MPEG"],
+div#content a.external[href $=".mpg"], div#content a.external[href $=".MPG"],
+.link-video {
+       background-position: center right;
+       background-repeat: no-repeat;
+       .background-image('images/video-icon.png');
+       padding-right: 13px;
+}
+div#content a.external[href $=".pdf"], div#content a.external[href $=".PDF"],
+div#content a.external[href *=".pdf#"], div#content a.external[href *=".PDF#"],
+div#content a.external[href *=".pdf?"], div#content a.external[href *=".PDF?"],
+.link-document {
+       background-position: center right;
+       background-repeat: no-repeat;
+       .background-image('images/document-icon.png');
+       padding-right: 13px;
+}
diff --git a/skins/vector/images/arrow-collapsed-ltr.png b/skins/vector/images/arrow-collapsed-ltr.png
new file mode 100644 (file)
index 0000000..063ac6f
Binary files /dev/null and b/skins/vector/images/arrow-collapsed-ltr.png differ
diff --git a/skins/vector/images/arrow-collapsed-ltr.svg b/skins/vector/images/arrow-collapsed-ltr.svg
new file mode 100644 (file)
index 0000000..d0c4729
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   width="16"
+   height="16"
+   id="svg2">
+  <defs
+     id="defs4" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(0,-1036.0288)"
+     id="layer1">
+    <path
+       d="M 10.028624,3.7729932 8.1976442,6.9443424 6.3666649,3.7729932 z"
+       transform="matrix(0,-2.7307791,1.576616,0,0.05143855,1066.4148)"
+       id="path2985"
+       style="fill:#797979;fill-opacity:1;stroke:none" />
+  </g>
+</svg>
diff --git a/skins/vector/images/arrow-collapsed-rtl.png b/skins/vector/images/arrow-collapsed-rtl.png
new file mode 100644 (file)
index 0000000..c346218
Binary files /dev/null and b/skins/vector/images/arrow-collapsed-rtl.png differ
diff --git a/skins/vector/images/arrow-collapsed-rtl.svg b/skins/vector/images/arrow-collapsed-rtl.svg
new file mode 100644 (file)
index 0000000..8c5e04b
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   width="16"
+   height="16"
+   id="svg2">
+  <defs
+     id="defs4" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(0,-1036.0288)"
+     id="layer1">
+    <path
+       d="M 10.028624,3.7729932 8.1976442,6.9443424 6.3666649,3.7729932 z"
+       transform="matrix(0,2.7307791,-1.576616,0,15.948561,1021.6428)"
+       id="path2985"
+       style="fill:#797979;fill-opacity:1;stroke:none" />
+  </g>
+</svg>
diff --git a/skins/vector/images/arrow-expanded.png b/skins/vector/images/arrow-expanded.png
new file mode 100644 (file)
index 0000000..0221028
Binary files /dev/null and b/skins/vector/images/arrow-expanded.png differ
diff --git a/skins/vector/images/arrow-expanded.svg b/skins/vector/images/arrow-expanded.svg
new file mode 100644 (file)
index 0000000..60704d2
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   width="16"
+   height="16"
+   id="svg2">
+  <defs
+     id="defs4" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(0,-1036.3622)"
+     id="layer1">
+    <path
+       d="M 10.028624,3.7729932 8.1976442,6.9443424 6.3666649,3.7729932 z"
+       transform="matrix(2.7307791,0,0,1.576616,-14.385956,1036.4136)"
+       id="path2985"
+       style="fill:#797979;fill-opacity:1;stroke:none" />
+  </g>
+</svg>
index 462ca64..43e4691 100644 (file)
Binary files a/skins/vector/images/edit-icon.png and b/skins/vector/images/edit-icon.png differ
index acf260f..6308383 100644 (file)
Binary files a/skins/vector/images/external-link-ltr-icon.png and b/skins/vector/images/external-link-ltr-icon.png differ
index 7d5ee37..5313234 100644 (file)
Binary files a/skins/vector/images/external-link-rtl-icon.png and b/skins/vector/images/external-link-rtl-icon.png differ
index 9823d72..0d93a2f 100644 (file)
Binary files a/skins/vector/images/mail-icon.png and b/skins/vector/images/mail-icon.png differ
index ade1a37..6f27054 100644 (file)
Binary files a/skins/vector/images/news-icon.png and b/skins/vector/images/news-icon.png differ
index 1436cda..b4a6034 100644 (file)
Binary files a/skins/vector/images/page-fade.png and b/skins/vector/images/page-fade.png differ
index cec17ea..20bf366 100644 (file)
Binary files a/skins/vector/images/portal-break-ltr.png and b/skins/vector/images/portal-break-ltr.png differ
index e59f578..b529308 100644 (file)
Binary files a/skins/vector/images/preferences-break.png and b/skins/vector/images/preferences-break.png differ
index c03c72e..6d37af5 100644 (file)
Binary files a/skins/vector/images/tab-break.png and b/skins/vector/images/tab-break.png differ
index c443435..0332054 100644 (file)
Binary files a/skins/vector/images/talk-icon.png and b/skins/vector/images/talk-icon.png differ
index e934a0f..ed85232 100644 (file)
Binary files a/skins/vector/images/video-icon.png and b/skins/vector/images/video-icon.png differ
diff --git a/skins/vector/screen.css b/skins/vector/screen.css
deleted file mode 100644 (file)
index 8a69f84..0000000
+++ /dev/null
@@ -1,912 +0,0 @@
-/*
- * Any rules which should not be flipped automatically in right-to-left situations should be
- * prepended with @noflip in a comment block. Images that should be embedded as base64 data-URLs
- * should be prepended with @embed in a comment block.
- *
- * This style-sheet employs a few CSS trick to accomplish compatibility with a wide range of web
- * browsers. The most common trick is to use some styles in IE6 only. This is accomplished by using
- * a rule that makes things work in IE6, and then following it with a rule that begins with
- * "html > body" or use a child selector ">", which is ignored by IE6 because it does not support
- * the child selector. You can spot this by looking for the "OVERRIDDEN BY COMPLIANT BROWSERS" and
- * "IGNORED BY IE6" comments.
- */
-
-/* Framework */
-html,
-body {
-       height: 100%;
-       margin: 0;
-       padding: 0;
-       font-family: sans-serif;
-       font-size: 1em;
-}
-body {
-       background-color: #f6f6f6;
-}
-/* Content */
-div#content {
-       margin-left: 10em;
-       padding: 1em;
-       /* Border on top, left, and bottom side */
-       border: 1px solid #a7d7f9;
-       border-right-width: 0;
-       /* Merge the border with tabs' one (in their background image) */
-       margin-top: -1px;
-       background-color: white;
-       color: black;
-       direction: ltr;
-}
-/* Hide, but keep accessible for screen-readers */
-#mw-navigation h2 {
-       position: absolute;
-       top: -9999px;
-}
-/* Head */
-#mw-page-base {
-       height: 5em;
-       background-color: white;
-       /* @embed */
-       background-image: url(images/page-fade.png);
-       background-position: bottom left;
-       background-repeat: repeat-x;
-}
-#mw-head-base {
-       margin-top: -5em;
-       margin-left: 10em;
-       height: 5em;
-}
-div#mw-head {
-       position: absolute;
-       top: 0;
-       right: 0;
-       width: 100%;
-}
-div#mw-head h3 {
-       margin: 0;
-       padding: 0;
-}
-/* Hide empty portlets */
-div.emptyPortlet {
-               display: none;
-}
-/* Personal */
-#p-personal {
-       position: absolute;
-       top: 0.33em;
-       right: 0.75em;
-       /* Display on top of page tabs - bugs 37158, 48078 */
-       z-index: 100;
-}
-#p-personal h3 {
-       display: none;
-}
-#p-personal ul {
-       list-style-type: none;
-       list-style-image: none;
-       margin: 0;
-       padding-left: 10em; /* Keep from overlapping logo */
-}
-/* @noflip */
-#p-personal li {
-       line-height: 1.125em;
-       float: left;
-}
-/* This one flips! */
-#p-personal li {
-       margin-left: 0.75em;
-       margin-top: 0.5em;
-       font-size: 0.75em;
-       white-space: nowrap;
-}
-/* Navigation Containers */
-#left-navigation {
-       float: left;
-       margin-left: 10em;
-       margin-top: 2.5em;
-       /* When right nav would overlap left nav, it's placed below it
-          (normal CSS floats behavior). This rule ensures that no empty space
-          is shown between them due to right nav's margin-top. Page layout
-          is still broken, but at least the nav overlaps only the page title
-          instead of half the content. */
-       margin-bottom: -2.5em;
-       /* IE 6 double-margin bug fix */
-       display: inline;
-}
-#right-navigation {
-       float: right;
-       margin-top: 2.5em;
-}
-/* Navigation Labels */
-div.vectorTabs h3,
-div.vectorMenu h3 span {
-       display: none;
-}
-/* Namespaces and Views */
-/* @noflip */
-div.vectorTabs {
-       float: left;
-       height: 2.5em;
-}
-div.vectorTabs {
-       /* @embed */
-       background-image: url(images/tab-break.png);
-       background-position: bottom left;
-       background-repeat: no-repeat;
-       padding-left: 1px;
-}
-/* @noflip */
-div.vectorTabs ul {
-       float: left;
-}
-div.vectorTabs ul {
-       height: 100%;
-       list-style-type: none;
-       list-style-image: none;
-       margin: 0;
-       padding: 0;
-}
-/* @noflip */
-div.vectorTabs ul li {
-       float: left;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-div.vectorTabs ul li {
-       line-height: 1.125em;
-       display: inline-block;
-       height: 100%;
-       margin: 0;
-       padding: 0;
-       background-color: #f3f3f3;
-       /* @embed */
-       background-image: url(images/tab-normal-fade.png);
-       background-position: bottom left;
-       background-repeat: repeat-x;
-       white-space: nowrap;
-}
-/* IGNORED BY IE6 */
-div.vectorTabs ul > li {
-       display: block;
-}
-div.vectorTabs li.selected {
-       /* @embed */
-       background-image: url(images/tab-current-fade.png);
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-div.vectorTabs li a {
-       display: inline-block;
-       height: 1.9em;
-       padding-left: 0.5em;
-       padding-right: 0.5em;
-       color: #0645ad;
-       cursor: pointer;
-       font-size: 0.8em;
-}
-/* IGNORED BY IE6 */
-div.vectorTabs li > a {
-       display: block;
-}
-div.vectorTabs li.icon a {
-       background-position: bottom right;
-       background-repeat: no-repeat;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-div.vectorTabs span a  {
-       display: inline-block;
-       padding-top: 1.25em;
-}
-/* IGNORED BY IE6 */
-/* @noflip */
-div.vectorTabs span > a {
-       float: left;
-       display: block;
-}
-div.vectorTabs span {
-       display: inline-block;
-       /* @embed */
-       background-image: url(images/tab-break.png);
-       background-position: bottom right;
-       background-repeat: no-repeat;
-}
-div.vectorTabs li.selected a,
-div.vectorTabs li.selected a:visited{
-       color: #333;
-       text-decoration: none;
-}
-div.vectorTabs li.new a,
-div.vectorTabs li.new a:visited{
-       color: #a55858;
-}
-/* Variants and Actions */
-/* @noflip */
-div.vectorMenu {
-       direction: ltr;
-       float: left;
-       /* @embed */
-       background-image: url(images/arrow-down-icon.png);
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG) */
-       /* @embed */
-       background-image: -webkit-linear-gradient(transparent, transparent), url(images/arrow-down-icon.svg);
-       /* @embed */
-       background-image: linear-gradient(transparent, transparent), url(images/arrow-down-icon.svg);
-       background-position: 100% 60%;
-       background-repeat: no-repeat;
-       cursor: pointer;
-}
-div.vectorMenuFocus {
-       /* @embed */
-       background-image: url(images/arrow-down-focus-icon.png);
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG) */
-       /* @embed */
-       background-image: -webkit-linear-gradient(transparent, transparent), url(images/arrow-down-focus-icon.svg);
-       /* @embed */
-       background-image: linear-gradient(transparent, transparent), url(images/arrow-down-focus-icon.svg);
-       background-position: 100% 60%;
-}
-/* @noflip */
-body.rtl div.vectorMenu {
-       direction: rtl;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-/* @noflip */
-div#mw-head div.vectorMenu h3 {
-       float: left;
-       /* @embed */
-       background-image: url(images/tab-break.png);
-       background-repeat: no-repeat;
-}
-/* This will be flipped - unlike the one above it */
-div#mw-head div.vectorMenu h3 {
-       background-position: bottom left;
-       margin-left: -1px;
-}
-/* IGNORED BY IE6 */
-div#mw-head div.vectorMenu > h3 {
-       background-image: none;
-}
-div#mw-head div.vectorMenu h4,
-div.vectorMenu#p-variants #mw-vector-current-variant {
-       display: inline-block;
-       float: left;
-       font-size: 0.8em;
-       padding-left: 0.5em;
-       padding-top: 1.375em;
-       font-weight: normal;
-       border: none;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-/* @noflip */
-div.vectorMenu h3 a {
-       display: inline-block;
-       width: 24px;
-       height: 1.9em;
-       text-decoration: none;
-       /* @embed */
-       background-image: url(images/tab-break.png);
-       background-repeat: no-repeat;
-}
-/* This will be flipped - unlike the one above it */
-div.vectorMenu h3 a {
-       background-position: bottom right;
-}
-/* IGNORED BY IE6 */
-div.vectorMenu h3 > a {
-       display: block;
-}
-div.vectorMenu div.menu {
-       position: relative;
-       display: none;
-       clear: both;
-       text-align: left;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-/* @noflip */
-body.rtl div.vectorMenu div.menu {
-       margin-left: 24px;
-}
-/* IGNORED BY IE6 */
-/* @noflip */
-body.rtl div.vectorMenu > div.menu {
-       margin-left: auto;
-}
-/* IGNORED BY IE6 */
-/* Also fixes old versions of FireFox */
-/* @noflip */
-body.rtl div.vectorMenu > div.menu,
-x:-moz-any-link {
-       margin-left: 23px;
-}
-/* Enable forcing showing of the menu for accessibility */
-div.vectorMenu:hover div.menu,
-div.vectorMenu div.menuForceShow {
-       display: block;
-}
-div.vectorMenu ul {
-       position: absolute;
-       background-color: white;
-       border: solid 1px silver;
-       border-top-width: 0;
-       list-style-type: none;
-       list-style-image: none;
-       padding: 0;
-       margin: 0;
-       margin-left: -1px;
-       text-align: left;
-}
-/* Fixes old versions of FireFox */
-div.vectorMenu ul,
-x:-moz-any-link {
-       min-width: 5em;
-}
-/* Returns things back to normal in modern versions of FireFox */
-div.vectorMenu ul,
-x:-moz-any-link,
-x:default {
-       min-width: 0;
-}
-div.vectorMenu li {
-       padding: 0;
-       margin: 0;
-       text-align: left;
-       line-height: 1em;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-div.vectorMenu li a {
-       display: inline-block;
-       padding: 0.5em;
-       white-space: nowrap;
-       color: #0645ad;
-       cursor: pointer;
-       font-size: 0.8em;
-}
-/* IGNORED BY IE6 */
-div.vectorMenu li > a {
-       display: block;
-}
-div.vectorMenu li.selected a,
-div.vectorMenu li.selected a:visited {
-       color: #333;
-       text-decoration: none;
-}
-/* Search */
-#p-search h3 {
-       display: none;
-}
-/* @noflip */
-#p-search {
-       float: left;
-}
-#p-search {
-       margin-right: 0.5em;
-       margin-left: 0.5em;
-}
-#p-search form,
-#p-search input {
-       margin: 0;
-       margin-top: 0.4em;
-}
-div#simpleSearch {
-       display: block;
-       width: 14em;
-       height: 1.4em;
-       margin-top: 0.65em;
-       position: relative;
-       min-height: 1px; /* Gotta trigger hasLayout for IE7 */
-       border: solid 1px #aaa;
-       color: black;
-       background-color: white;
-       /* @embed */
-       background-image: url(images/search-fade.png);
-       background-position: top left;
-       background-repeat: repeat-x;
-}
-div#simpleSearch input:focus {
-       outline: none;
-}
-div#simpleSearch input.placeholder {
-       color: #999;
-}
-div#simpleSearch input::-webkit-input-placeholder {
-       color: #999;
-}
-div#simpleSearch input:-moz-placeholder {
-       color: #999;
-}
-div#simpleSearch input:-ms-input-placeholder {
-       color: #999;
-}
-div#simpleSearch input#searchInput {
-       position: absolute;
-       top: 0;
-       left: 0;
-       width: 90%;
-       margin: 0;
-       padding: 0;
-       padding-left: 0.2em;
-       padding-top: 0.2em;
-       padding-bottom: 0.2em;
-       outline: none;
-       border: none;
-       /*
-        * DON'T PANIC! Browsers that won't scale this properly are the same browsers that have JS issues that prevent
-        * this from ever being shown anyways.
-       */
-       font-size: 13px;
-       color: black;
-       background-color: transparent;
-       direction: ltr;
-}
-div#simpleSearch button#searchButton {
-       position: absolute;
-       width: 10%;
-       right: 0;
-       top: 0;
-       padding: 0;
-       padding-top: 0.3em;
-       padding-bottom: 0.2em;
-       padding-right: 0.4em;
-       margin: 0;
-       border: none;
-       cursor: pointer;
-       background-color: transparent;
-       background-image: none;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-div#simpleSearch button#searchButton img {
-       border: none;
-       margin: 0;
-       margin-top: -3px;
-       padding: 0;
-}
-/* IGNORED BY IE6 */
-div#simpleSearch button#searchButton > img {
-       margin: 0;
-}
-/* Panel */
-div#mw-panel {
-       position: absolute;
-       top: 160px;
-       padding-top: 1em;
-       width: 10em;
-       left: 0;
-}
-div#mw-panel div.portal {
-       padding-bottom: 1.5em;
-       direction: ltr;
-}
-div#mw-panel div.portal h3 {
-       font-weight: normal;
-       color: #444;
-       padding: 0.25em;
-       padding-top: 0;
-       padding-left: 1.75em;
-       cursor: default;
-       border: none;
-       font-size: 0.75em;
-}
-div#mw-panel div.portal div.body {
-       margin: 0;
-       padding-top: 0.5em;
-       margin-left: 1.25em;
-       /* @embed */
-       background-image: url(images/portal-break.png);
-       background-repeat: no-repeat;
-       background-position: top left;
-}
-div#mw-panel div.portal div.body ul {
-       list-style-type: none;
-       list-style-image: none;
-       padding: 0;
-       margin: 0;
-}
-div#mw-panel div.portal div.body ul li {
-       line-height: 1.125em;
-       padding: 0;
-       padding-bottom: 0.5em;
-       margin: 0;
-       font-size: 0.75em;
-       word-wrap: break-word;
-}
-div#mw-panel div.portal div.body ul li a {
-       color: #0645ad;
-}
-div#mw-panel div.portal div.body ul li a:visited {
-       color: #0b0080;
-}
-/* Footer */
-div#footer {
-       margin-left: 10em;
-       margin-top: 0;
-       padding: 0.75em;
-       direction: ltr;
-}
-div#footer ul {
-       list-style-type: none;
-       list-style-image: none;
-       margin: 0;
-       padding: 0;
-}
-div#footer ul li {
-       margin: 0;
-       padding: 0;
-       padding-top: 0.5em;
-       padding-bottom: 0.5em;
-       color: #333;
-       font-size: 0.7em;
-}
-div#footer #footer-icons {
-       float: right;
-}
-/* @noflip */
-body.ltr div#footer #footer-places {
-       float: left;
-}
-div#footer #footer-info li {
-       line-height: 1.4em;
-}
-div#footer #footer-icons li {
-       float: left;
-       margin-left: 0.5em;
-       line-height: 2em;
-       text-align: right;
-}
-div#footer #footer-places li {
-       float: left;
-       margin-right: 1em;
-       line-height: 2em;
-}
-/* Logo */
-#p-logo {
-       position: absolute;
-       top: -160px;
-       left: 0;
-       width: 10em;
-       height: 160px;
-}
-#p-logo a {
-       display: block;
-       width: 10em;
-       height: 160px;
-       background-repeat: no-repeat;
-       background-position: center center;
-       text-decoration: none;
-}
-
-/*
- *
- * The following code is highly modified from monobook. It would be nice if the
- * preftoc id was more human readable like preferences-toc for instance,
- * howerver this would require backporting the other skins.
- */
-
-/* Preferences */
-#preftoc {
-       /* Tabs */
-       width: 100%;
-       float: left;
-       clear: both;
-       margin: 0 !important;
-       padding: 0 !important;
-       /* @embed */
-       background-image: url(images/preferences-break.png);
-       background-position: bottom left;
-       background-repeat: no-repeat;
-}
-       #preftoc li {
-               /* Tab */
-               float: left;
-               margin: 0;
-               padding: 0;
-               padding-right: 1px;
-               height: 2.25em;
-               white-space: nowrap;
-               list-style-type: none;
-               list-style-image: none;
-               /* @embed */
-               background-image: url(images/preferences-break.png);
-               background-position: bottom right;
-               background-repeat: no-repeat;
-       }
-       /* Sadly, IE6 won't understand this */
-       #preftoc li:first-child {
-               margin-left: 1px;
-       }
-       #preftoc a,
-       #preftoc a:active {
-               display: inline-block;
-               position: relative;
-               color: #0645ad;
-               padding: 0.5em;
-               text-decoration: none;
-               background-image: none;
-               font-size: 0.9em;
-       }
-       #preftoc a:hover,
-       #preftoc a:focus {
-               text-decoration: underline;
-       }
-       #preftoc li.selected a {
-               /* @embed */
-               background-image: url(images/preferences-fade.png);
-               background-position: bottom;
-               background-repeat: repeat-x;
-               color: #333;
-               text-decoration: none;
-       }
-#preferences {
-       float: left;
-       width: 100%;
-       margin: 0;
-       margin-top: -2px;
-       clear: both;
-       border: solid 1px #ccc;
-       background-color: #fafafa;
-}
-#preferences fieldset {
-       border: none;
-       border-top: solid 1px #ccc;
-}
-#preferences fieldset.prefsection {
-       border: none;
-       padding: 0;
-       margin: 1em;
-}
-#preferences legend {
-       color: #666;
-}
-#preferences fieldset.prefsection legend.mainLegend {
-       display: none;
-}
-#preferences td {
-       padding-left: 0.5em;
-       padding-right: 0.5em;
-}
-.htmlform-tip {
-       font-size: x-small;
-       padding: .2em 2em;
-       color: #666;
-}
-#preferences div.mw-prefs-buttons {
-       padding: 1em;
-}
-#preferences div.mw-prefs-buttons input {
-       margin-right: 0.25em;
-}
-
-/**
- * The following code is slightly modified from monobook
- */
-div#content {
-       line-height: 1.5em;
-}
-#bodyContent {
-       font-size: 0.8em;
-}
-
-ul {
-       list-style-type: disc;
-       /* @embed */
-       list-style-image: url(images/bullet-icon.png);
-}
-
-pre, .mw-code {
-       line-height: 1.3em;
-}
-
-/* Site Notice (includes notices from CentralNotice extension) */
-#siteNotice {
-       font-size: 0.8em;
-}
-#firstHeading {
-       padding-top: 0;
-       margin-top: 0;
-       font-size: 1.6em;
-}
-div#content a.external,
-div#content a.external[href ^="gopher://"] {
-       /* @embed */
-       background: url(images/external-link-ltr-icon.png) center right no-repeat;
-       padding-right: 13px;
-}
-div#content a.external[href ^="https://"],
-.link-https {
-       /* @embed */
-       background: url(images/lock-icon.png) center right no-repeat;
-       padding-right: 13px;
-}
-div#content a.external[href ^="mailto:"],
-.link-mailto {
-       /* @embed */
-       background: url(images/mail-icon.png) center right no-repeat;
-       padding-right: 13px;
-}
-div#content a.external[href ^="news:"] {
-       /* @embed */
-       background: url(images/news-icon.png) center right no-repeat;
-       padding-right: 13px;
-}
-div#content a.external[href ^="ftp://"],
-.link-ftp {
-       /* @embed */
-       background: url(images/file-icon.png) center right no-repeat;
-       padding-right: 13px;
-}
-div#content a.external[href ^="irc://"],
-div#content a.external[href ^="ircs://"],
-.link-irc {
-       /* @embed */
-       background: url(images/talk-icon.png) center right no-repeat;
-       padding-right: 13px;
-}
-div#content a.external[href $=".ogg"], div#content a.external[href $=".OGG"],
-div#content a.external[href $=".mid"], div#content a.external[href $=".MID"],
-div#content a.external[href $=".midi"], div#content a.external[href $=".MIDI"],
-div#content a.external[href $=".mp3"], div#content a.external[href $=".MP3"],
-div#content a.external[href $=".wav"], div#content a.external[href $=".WAV"],
-div#content a.external[href $=".wma"], div#content a.external[href $=".WMA"],
-.link-audio {
-       /* @embed */
-       background: url(images/audio-icon.png) center right no-repeat;
-       padding-right: 13px;
-}
-div#content a.external[href $=".ogm"], div#content a.external[href $=".OGM"],
-div#content a.external[href $=".avi"], div#content a.external[href $=".AVI"],
-div#content a.external[href $=".mpeg"], div#content a.external[href $=".MPEG"],
-div#content a.external[href $=".mpg"], div#content a.external[href $=".MPG"],
-.link-video {
-       /* @embed */
-       background: url(images/video-icon.png) center right no-repeat;
-       padding-right: 13px;
-}
-div#content a.external[href $=".pdf"], div#content a.external[href $=".PDF"],
-div#content a.external[href *=".pdf#"], div#content a.external[href *=".PDF#"],
-div#content a.external[href *=".pdf?"], div#content a.external[href *=".PDF?"],
-.link-document {
-       /* @embed */
-       background: url(images/document-icon.png) center right no-repeat;
-       padding-right: 13px;
-}
-
-/* Icon for Usernames */
-#pt-userpage,
-#pt-anonuserpage,
-#pt-login {
-       /* @embed */
-       background: url(images/user-icon.png) left top no-repeat;
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG) */
-       /* @embed */
-       background-image: -webkit-linear-gradient(transparent, transparent), url(images/user-icon.svg);
-       /* @embed */
-       background-image: linear-gradient(transparent, transparent), url(images/user-icon.svg);
-       padding-left: 15px !important;
-}
-
-.redirectText {
-       font-size: 140%;
-}
-
-.redirectMsg img {
-       vertical-align: text-bottom;
-}
-
-#bodyContent {
-       position: relative;
-       width: 100%;
-}
-div#bodyContent {
-       line-height: 1.5em;
-}
-
-/* mediawiki.notification */
-.skin-vector .mw-notification-area {
-       font-size: 0.8em;
-}
-.skin-vector .mw-notification-area-layout {
-       top: 7em;
-}
-.skin-vector .mw-notification {
-       background-color: #fff;
-       background-color: rgba(255, 255, 255, 0.93);
-       padding: 0.75em 1.5em;
-       border: solid 1px #a7d7f9;
-       border-radius: 0.75em;
-       -webkit-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.125);
-       box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.125);
-}
-
-/* Watch/Unwatch Icon Styling */
-#ca-unwatch.icon a,
-#ca-watch.icon a {
-       margin: 0;
-       padding: 0;
-       outline: none;
-       display: block;
-       width: 26px;
-       /* This hides the text but shows the background image */
-       padding-top: 3.1em;
-       margin-top: 0;
-       /* Only applied in IE6 */
-       margin-top: -0.8em !ie;
-       height: 0;
-       overflow: hidden;
-       /* @embed */
-       background-image: url(images/watch-icons.png);
-}
-#ca-unwatch.icon a {
-       background-position: -43px 60%;
-}
-#ca-watch.icon a {
-       background-position: 5px 60%;
-}
-#ca-unwatch.icon a:hover,
-#ca-unwatch.icon a:focus {
-       background-position: -67px 60%;
-}
-#ca-watch.icon a:hover,
-#ca-watch.icon a:focus {
-       background-position: -19px 60%;
-}
-#ca-unwatch.icon a.loading,
-#ca-watch.icon a.loading {
-       /* @embed */
-       background-image: url(images/watch-icon-loading.gif);
-       background-position: 5px 60%;
-}
-#ca-unwatch.icon a span,
-#ca-watch.icon a span {
-       display: none;
-}
-div.vectorTabs ul {
-       /* @embed */
-       background-image: url(images/tab-break.png);
-       background-position: right bottom;
-       background-repeat: no-repeat;
-}
-
-/* Tooltips are outside of the normal body code, so this helps make the size of the text sensible */
-.tipsy {
-       font-size: 0.8em;
-}
-
-/* Animate between standard and high definition layouts */
-
-body.vector-animateLayout div#content,
-body.vector-animateLayout div#footer,
-body.vector-animateLayout #left-navigation {
-       -moz-transition: margin-left 250ms, padding 250ms;
-       -webkit-transition: margin-left 250ms, padding 250ms;
-       -o-transition: margin-left 250ms, padding 250ms;
-       transition: margin-left 250ms, padding 250ms;
-}
-body.vector-animateLayout #p-logo {
-       -moz-transition: left 250ms;
-       -webkit-transition: left 250ms;
-       -o-transition: left 250ms;
-       transition: left 250ms;
-}
-body.vector-animateLayout #mw-panel {
-       -moz-transition: padding-left 250ms;
-       -webkit-transition: padding-left 250ms;
-       -o-transition: padding-left 250ms;
-       transition: padding-left 250ms;
-}
-body.vector-animateLayout #p-search {
-       -moz-transition: margin-right 250ms;
-       -webkit-transition: margin-right 250ms;
-       -o-transition: margin-right 250ms;
-       transition: margin-right 250ms;
-}
-body.vector-animateLayout #p-personal {
-       -moz-transition: right 250ms;
-       -webkit-transition: right 250ms;
-       -o-transition: right 250ms;
-       transition: right 250ms;
-}
-body.vector-animateLayout #mw-head-base {
-       -moz-transition: margin-left 250ms;
-       -webkit-transition: margin-left 250ms;
-       -o-transition: margin-left 250ms;
-       transition: margin-left 250ms;
-}
diff --git a/skins/vector/screen.less b/skins/vector/screen.less
new file mode 100644 (file)
index 0000000..0b65627
--- /dev/null
@@ -0,0 +1,803 @@
+/*
+ * Any rules which should not be flipped automatically in right-to-left situations should be
+ * prepended with @noflip in a comment block. Images that should be embedded as base64 data-URLs
+ * should be prepended with @embed in a comment block.
+ *
+ * This style-sheet employs a few CSS trick to accomplish compatibility with a wide range of web
+ * browsers. The most common trick is to use some styles in IE6 only. This is accomplished by using
+ * a rule that makes things work in IE6, and then following it with a rule that begins with
+ * "html > body" or use a child selector ">", which is ignored by IE6 because it does not support
+ * the child selector. You can spot this by looking for the "OVERRIDDEN BY COMPLIANT BROWSERS" and
+ * "IGNORED BY IE6" comments.
+ */
+@import "mediawiki.mixins.less";
+
+/* Framework */
+html,
+body {
+       height: 100%;
+       margin: 0;
+       padding: 0;
+       font-family: sans-serif;
+       font-size: 1em;
+}
+body {
+       background-color: #f6f6f6;
+}
+/* Content */
+div#content {
+       margin-left: 10em;
+       padding: 1em;
+       /* Border on top, left, and bottom side */
+       border: 1px solid #a7d7f9;
+       border-right-width: 0;
+       /* Merge the border with tabs' one (in their background image) */
+       margin-top: -1px;
+       background-color: white;
+       color: black;
+       direction: ltr;
+}
+/* Hide, but keep accessible for screen-readers */
+#mw-navigation h2 {
+       position: absolute;
+       top: -9999px;
+}
+/* Head */
+#mw-page-base {
+       height: 5em;
+       background-color: white;
+       .background-image('images/page-fade.png');
+       background-position: bottom left;
+       background-repeat: repeat-x;
+}
+#mw-head-base {
+       margin-top: -5em;
+       margin-left: 10em;
+       height: 5em;
+}
+div#mw-head {
+       position: absolute;
+       top: 0;
+       right: 0;
+       width: 100%;
+}
+div#mw-head h3 {
+       margin: 0;
+       padding: 0;
+}
+/* Hide empty portlets */
+div.emptyPortlet {
+               display: none;
+}
+/* Personal */
+#p-personal {
+       position: absolute;
+       top: 0.33em;
+       right: 0.75em;
+       /* Display on top of page tabs - bugs 37158, 48078 */
+       z-index: 100;
+}
+#p-personal h3 {
+       display: none;
+}
+#p-personal ul {
+       list-style-type: none;
+       list-style-image: none;
+       margin: 0;
+       padding-left: 10em; /* Keep from overlapping logo */
+}
+/* @noflip */
+#p-personal li {
+       line-height: 1.125em;
+       float: left;
+}
+/* This one flips! */
+#p-personal li {
+       margin-left: 0.75em;
+       margin-top: 0.5em;
+       font-size: 0.75em;
+       white-space: nowrap;
+}
+/* Navigation Containers */
+#left-navigation {
+       float: left;
+       margin-left: 10em;
+       margin-top: 2.5em;
+       /* When right nav would overlap left nav, it's placed below it
+          (normal CSS floats behavior). This rule ensures that no empty space
+          is shown between them due to right nav's margin-top. Page layout
+          is still broken, but at least the nav overlaps only the page title
+          instead of half the content. */
+       margin-bottom: -2.5em;
+       /* IE 6 double-margin bug fix */
+       display: inline;
+}
+#right-navigation {
+       float: right;
+       margin-top: 2.5em;
+}
+/* Navigation Labels */
+div.vectorTabs h3,
+div.vectorMenu h3 span {
+       display: none;
+}
+/* Namespaces and Views */
+/* @noflip */
+div.vectorTabs {
+       float: left;
+       height: 2.5em;
+}
+div.vectorTabs {
+       .background-image('images/tab-break.png');
+       background-position: bottom left;
+       background-repeat: no-repeat;
+       padding-left: 1px;
+}
+/* @noflip */
+div.vectorTabs ul {
+       float: left;
+}
+div.vectorTabs ul {
+       height: 100%;
+       list-style-type: none;
+       list-style-image: none;
+       margin: 0;
+       padding: 0;
+}
+/* @noflip */
+div.vectorTabs ul li {
+       float: left;
+}
+/* OVERRIDDEN BY COMPLIANT BROWSERS */
+div.vectorTabs ul li {
+       line-height: 1.125em;
+       display: inline-block;
+       height: 100%;
+       margin: 0;
+       padding: 0;
+       background-color: #f3f3f3;
+       .background-image('images/tab-normal-fade.png');
+       background-position: bottom left;
+       background-repeat: repeat-x;
+       white-space: nowrap;
+}
+/* IGNORED BY IE6 */
+div.vectorTabs ul > li {
+       display: block;
+}
+div.vectorTabs li.selected {
+       .background-image('images/tab-current-fade.png');
+}
+/* OVERRIDDEN BY COMPLIANT BROWSERS */
+div.vectorTabs li a {
+       display: inline-block;
+       height: 1.9em;
+       padding-left: 0.5em;
+       padding-right: 0.5em;
+       color: #0645ad;
+       cursor: pointer;
+       font-size: 0.8em;
+}
+/* IGNORED BY IE6 */
+div.vectorTabs li > a {
+       display: block;
+}
+div.vectorTabs li.icon a {
+       background-position: bottom right;
+       background-repeat: no-repeat;
+}
+/* OVERRIDDEN BY COMPLIANT BROWSERS */
+div.vectorTabs span a  {
+       display: inline-block;
+       padding-top: 1.25em;
+}
+/* IGNORED BY IE6 */
+/* @noflip */
+div.vectorTabs span > a {
+       float: left;
+       display: block;
+}
+div.vectorTabs span {
+       display: inline-block;
+       .background-image('images/tab-break.png');
+       background-position: bottom right;
+       background-repeat: no-repeat;
+}
+div.vectorTabs li.selected a,
+div.vectorTabs li.selected a:visited{
+       color: #333;
+       text-decoration: none;
+}
+div.vectorTabs li.new a,
+div.vectorTabs li.new a:visited{
+       color: #a55858;
+}
+/* Variants and Actions */
+/* @noflip */
+div.vectorMenu {
+       direction: ltr;
+       float: left;
+       /* SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG) */
+       .background-image-svg('images/arrow-down-icon.svg', 'images/arrow-down-icon.png');
+       background-position: 100% 60%;
+       background-repeat: no-repeat;
+       cursor: pointer;
+}
+div.vectorMenuFocus {
+       /* SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG) */
+       .background-image-svg('images/arrow-down-focus-icon.svg', 'images/arrow-down-focus-icon.png');
+       background-position: 100% 60%;
+}
+/* @noflip */
+body.rtl div.vectorMenu {
+       direction: rtl;
+}
+/* OVERRIDDEN BY COMPLIANT BROWSERS */
+/* @noflip */
+div#mw-head div.vectorMenu h3 {
+       float: left;
+       .background-image('images/tab-break.png');
+       background-repeat: no-repeat;
+}
+/* This will be flipped - unlike the one above it */
+div#mw-head div.vectorMenu h3 {
+       background-position: bottom left;
+       margin-left: -1px;
+}
+/* IGNORED BY IE6 */
+div#mw-head div.vectorMenu > h3 {
+       background-image: none;
+}
+div#mw-head div.vectorMenu h4,
+div.vectorMenu#p-variants #mw-vector-current-variant {
+       display: inline-block;
+       float: left;
+       font-size: 0.8em;
+       padding-left: 0.5em;
+       padding-top: 1.375em;
+       font-weight: normal;
+       border: none;
+}
+/* OVERRIDDEN BY COMPLIANT BROWSERS */
+/* @noflip */
+div.vectorMenu h3 a {
+       display: inline-block;
+       width: 24px;
+       height: 1.9em;
+       text-decoration: none;
+       .background-image('images/tab-break.png');
+       background-repeat: no-repeat;
+}
+/* This will be flipped - unlike the one above it */
+div.vectorMenu h3 a {
+       background-position: bottom right;
+}
+/* IGNORED BY IE6 */
+div.vectorMenu h3 > a {
+       display: block;
+}
+div.vectorMenu div.menu {
+       position: relative;
+       display: none;
+       clear: both;
+       text-align: left;
+}
+/* OVERRIDDEN BY COMPLIANT BROWSERS */
+/* @noflip */
+body.rtl div.vectorMenu div.menu {
+       margin-left: 24px;
+}
+/* IGNORED BY IE6 */
+/* @noflip */
+body.rtl div.vectorMenu > div.menu {
+       margin-left: auto;
+}
+/* IGNORED BY IE6 */
+/* Also fixes old versions of FireFox */
+/* @noflip */
+body.rtl div.vectorMenu > div.menu,
+x:-moz-any-link {
+       margin-left: 23px;
+}
+/* Enable forcing showing of the menu for accessibility */
+div.vectorMenu:hover div.menu,
+div.vectorMenu div.menuForceShow {
+       display: block;
+}
+div.vectorMenu ul {
+       position: absolute;
+       background-color: white;
+       border: solid 1px silver;
+       border-top-width: 0;
+       list-style-type: none;
+       list-style-image: none;
+       padding: 0;
+       margin: 0;
+       margin-left: -1px;
+       text-align: left;
+}
+/* Fixes old versions of FireFox */
+div.vectorMenu ul,
+x:-moz-any-link {
+       min-width: 5em;
+}
+/* Returns things back to normal in modern versions of FireFox */
+div.vectorMenu ul,
+x:-moz-any-link,
+x:default {
+       min-width: 0;
+}
+div.vectorMenu li {
+       padding: 0;
+       margin: 0;
+       text-align: left;
+       line-height: 1em;
+}
+/* OVERRIDDEN BY COMPLIANT BROWSERS */
+div.vectorMenu li a {
+       display: inline-block;
+       padding: 0.5em;
+       white-space: nowrap;
+       color: #0645ad;
+       cursor: pointer;
+       font-size: 0.8em;
+}
+/* IGNORED BY IE6 */
+div.vectorMenu li > a {
+       display: block;
+}
+div.vectorMenu li.selected a,
+div.vectorMenu li.selected a:visited {
+       color: #333;
+       text-decoration: none;
+}
+/* Search */
+#p-search h3 {
+       display: none;
+}
+/* @noflip */
+#p-search {
+       float: left;
+}
+#p-search {
+       margin-right: 0.5em;
+       margin-left: 0.5em;
+}
+#p-search form,
+#p-search input {
+       margin: 0;
+       margin-top: 0.4em;
+}
+div#simpleSearch {
+       display: block;
+       width: 14em;
+       height: 1.4em;
+       margin-top: 0.65em;
+       position: relative;
+       min-height: 1px; /* Gotta trigger hasLayout for IE7 */
+       border: solid 1px #aaa;
+       color: black;
+       background-color: white;
+       .background-image('images/search-fade.png');
+       background-position: top left;
+       background-repeat: repeat-x;
+}
+div#simpleSearch input:focus {
+       outline: none;
+}
+div#simpleSearch input.placeholder {
+       color: #999;
+}
+div#simpleSearch input::-webkit-input-placeholder {
+       color: #999;
+}
+div#simpleSearch input:-moz-placeholder {
+       color: #999;
+}
+div#simpleSearch input:-ms-input-placeholder {
+       color: #999;
+}
+div#simpleSearch input#searchInput {
+       position: absolute;
+       top: 0;
+       left: 0;
+       width: 90%;
+       margin: 0;
+       padding: 0;
+       padding-left: 0.2em;
+       padding-top: 0.2em;
+       padding-bottom: 0.2em;
+       outline: none;
+       border: none;
+       /*
+        * DON'T PANIC! Browsers that won't scale this properly are the same browsers that have JS issues that prevent
+        * this from ever being shown anyways.
+       */
+       font-size: 13px;
+       color: black;
+       background-color: transparent;
+       direction: ltr;
+}
+div#simpleSearch button#searchButton {
+       position: absolute;
+       width: 10%;
+       right: 0;
+       top: 0;
+       padding: 0;
+       padding-top: 0.3em;
+       padding-bottom: 0.2em;
+       padding-right: 0.4em;
+       margin: 0;
+       border: none;
+       cursor: pointer;
+       background-color: transparent;
+       background-image: none;
+}
+/* OVERRIDDEN BY COMPLIANT BROWSERS */
+div#simpleSearch button#searchButton img {
+       border: none;
+       margin: 0;
+       margin-top: -3px;
+       padding: 0;
+}
+/* IGNORED BY IE6 */
+div#simpleSearch button#searchButton > img {
+       margin: 0;
+}
+/* Panel */
+div#mw-panel {
+       position: absolute;
+       top: 160px;
+       padding-top: 1em;
+       width: 10em;
+       left: 0;
+}
+div#mw-panel div.portal {
+       padding-bottom: 1.5em;
+       direction: ltr;
+}
+div#mw-panel div.portal h3 {
+       font-weight: normal;
+       color: #444;
+       padding: 0.25em;
+       padding-top: 0;
+       padding-left: 1.75em;
+       cursor: default;
+       border: none;
+       font-size: 0.75em;
+}
+div#mw-panel div.portal div.body {
+       margin: 0;
+       padding-top: 0.5em;
+       margin-left: 1.25em;
+       .background-image('images/portal-break.png');
+       background-repeat: no-repeat;
+       background-position: top left;
+}
+div#mw-panel div.portal div.body ul {
+       list-style-type: none;
+       list-style-image: none;
+       padding: 0;
+       margin: 0;
+}
+div#mw-panel div.portal div.body ul li {
+       line-height: 1.125em;
+       padding: 0;
+       padding-bottom: 0.5em;
+       margin: 0;
+       font-size: 0.75em;
+       word-wrap: break-word;
+}
+div#mw-panel div.portal div.body ul li a {
+       color: #0645ad;
+}
+div#mw-panel div.portal div.body ul li a:visited {
+       color: #0b0080;
+}
+/* Footer */
+div#footer {
+       margin-left: 10em;
+       margin-top: 0;
+       padding: 0.75em;
+       direction: ltr;
+}
+div#footer ul {
+       list-style-type: none;
+       list-style-image: none;
+       margin: 0;
+       padding: 0;
+}
+div#footer ul li {
+       margin: 0;
+       padding: 0;
+       padding-top: 0.5em;
+       padding-bottom: 0.5em;
+       color: #333;
+       font-size: 0.7em;
+}
+div#footer #footer-icons {
+       float: right;
+}
+/* @noflip */
+body.ltr div#footer #footer-places {
+       float: left;
+}
+div#footer #footer-info li {
+       line-height: 1.4em;
+}
+div#footer #footer-icons li {
+       float: left;
+       margin-left: 0.5em;
+       line-height: 2em;
+       text-align: right;
+}
+div#footer #footer-places li {
+       float: left;
+       margin-right: 1em;
+       line-height: 2em;
+}
+/* Logo */
+#p-logo {
+       position: absolute;
+       top: -160px;
+       left: 0;
+       width: 10em;
+       height: 160px;
+}
+#p-logo a {
+       display: block;
+       width: 10em;
+       height: 160px;
+       background-repeat: no-repeat;
+       background-position: center center;
+       text-decoration: none;
+}
+
+/*
+ *
+ * The following code is highly modified from monobook. It would be nice if the
+ * preftoc id was more human readable like preferences-toc for instance,
+ * howerver this would require backporting the other skins.
+ */
+
+/* Preferences */
+#preftoc {
+       /* Tabs */
+       width: 100%;
+       float: left;
+       clear: both;
+       margin: 0 !important;
+       padding: 0 !important;
+       .background-image('images/preferences-break.png');
+       background-position: bottom left;
+       background-repeat: no-repeat;
+}
+       #preftoc li {
+               /* Tab */
+               float: left;
+               margin: 0;
+               padding: 0;
+               padding-right: 1px;
+               height: 2.25em;
+               white-space: nowrap;
+               list-style-type: none;
+               list-style-image: none;
+               .background-image('images/preferences-break.png');
+               background-position: bottom right;
+               background-repeat: no-repeat;
+       }
+       /* Sadly, IE6 won't understand this */
+       #preftoc li:first-child {
+               margin-left: 1px;
+       }
+       #preftoc a,
+       #preftoc a:active {
+               display: inline-block;
+               position: relative;
+               color: #0645ad;
+               padding: 0.5em;
+               text-decoration: none;
+               background-image: none;
+               font-size: 0.9em;
+       }
+       #preftoc a:hover,
+       #preftoc a:focus {
+               text-decoration: underline;
+       }
+       #preftoc li.selected a {
+               .background-image('images/preferences-fade.png');
+               background-position: bottom;
+               background-repeat: repeat-x;
+               color: #333;
+               text-decoration: none;
+       }
+#preferences {
+       float: left;
+       width: 100%;
+       margin: 0;
+       margin-top: -2px;
+       clear: both;
+       border: solid 1px #ccc;
+       background-color: #fafafa;
+}
+#preferences fieldset {
+       border: none;
+       border-top: solid 1px #ccc;
+}
+#preferences fieldset.prefsection {
+       border: none;
+       padding: 0;
+       margin: 1em;
+}
+#preferences legend {
+       color: #666;
+}
+#preferences fieldset.prefsection legend.mainLegend {
+       display: none;
+}
+#preferences td {
+       padding-left: 0.5em;
+       padding-right: 0.5em;
+}
+.htmlform-tip {
+       font-size: x-small;
+       padding: .2em 2em;
+       color: #666;
+}
+#preferences div.mw-prefs-buttons {
+       padding: 1em;
+}
+#preferences div.mw-prefs-buttons input {
+       margin-right: 0.25em;
+}
+
+/**
+ * The following code is slightly modified from monobook
+ */
+div#content {
+       line-height: 1.5em;
+}
+#bodyContent {
+       font-size: 0.8em;
+}
+
+ul {
+       list-style-type: disc;
+       .list-style-image('images/bullet-icon.png');
+}
+
+pre, .mw-code {
+       line-height: 1.3em;
+}
+
+/* Site Notice (includes notices from CentralNotice extension) */
+#siteNotice {
+       font-size: 0.8em;
+}
+#firstHeading {
+       padding-top: 0;
+       margin-top: 0;
+       font-size: 1.6em;
+}
+
+/* Icon for Usernames */
+#pt-userpage,
+#pt-anonuserpage,
+#pt-login {
+       background-position: left top;
+       background-repeat: no-repeat;
+       /* SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG) */
+       .background-image-svg('images/user-icon.svg', 'images/user-icon.png');
+       padding-left: 15px !important;
+}
+
+.redirectText {
+       font-size: 140%;
+}
+
+.redirectMsg img {
+       vertical-align: text-bottom;
+}
+
+#bodyContent {
+       position: relative;
+       width: 100%;
+}
+div#bodyContent {
+       line-height: 1.5em;
+}
+
+/* mediawiki.notification */
+.skin-vector .mw-notification-area {
+       font-size: 0.8em;
+}
+.skin-vector .mw-notification-area-layout {
+       top: 7em;
+}
+.skin-vector .mw-notification {
+       background-color: #fff;
+       background-color: rgba(255, 255, 255, 0.93);
+       padding: 0.75em 1.5em;
+       border: solid 1px #a7d7f9;
+       border-radius: 0.75em;
+       -webkit-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.125);
+       box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.125);
+}
+
+/* Watch/Unwatch Icon Styling */
+#ca-unwatch.icon a,
+#ca-watch.icon a {
+       margin: 0;
+       padding: 0;
+       outline: none;
+       display: block;
+       width: 26px;
+       /* This hides the text but shows the background image */
+       padding-top: 3.1em;
+       margin-top: 0;
+       /* Only applied in IE6 */
+       margin-top: -0.8em !ie;
+       height: 0;
+       overflow: hidden;
+       .background-image('images/watch-icons.png');
+}
+#ca-unwatch.icon a {
+       background-position: -43px 60%;
+}
+#ca-watch.icon a {
+       background-position: 5px 60%;
+}
+#ca-unwatch.icon a:hover,
+#ca-unwatch.icon a:focus {
+       background-position: -67px 60%;
+}
+#ca-watch.icon a:hover,
+#ca-watch.icon a:focus {
+       background-position: -19px 60%;
+}
+#ca-unwatch.icon a.loading,
+#ca-watch.icon a.loading {
+       .background-image('images/watch-icon-loading.gif');
+       background-position: 5px 60%;
+}
+#ca-unwatch.icon a span,
+#ca-watch.icon a span {
+       display: none;
+}
+div.vectorTabs ul {
+       .background-image('images/tab-break.png');
+       background-position: right bottom;
+       background-repeat: no-repeat;
+}
+
+/* Tooltips are outside of the normal body code, so this helps make the size of the text sensible */
+.tipsy {
+       font-size: 0.8em;
+}
+
+/* Animate between standard and high definition layouts */
+body.vector-animateLayout {
+       div#content,
+       div#footer,
+       #left-navigation {
+               .transition( margin-left 250ms, padding 250ms; );
+       }
+       #p-logo {
+               .transition( left 250ms );
+       }
+       #mw-panel {
+               .transition( padding-right 250ms );
+       }
+       #p-search {
+               .transition( margin-right 250ms );
+       }
+       #p-personal {
+               .transition( right 250ms );
+       }
+       #mw-head-base {
+               .transition( margin-left 250ms );
+       }
+}
index f08e995..3f8d7f9 100644 (file)
@@ -143,7 +143,7 @@ class ParserTest {
        static function setUp() {
                global $wgParser, $wgParserConf, $IP, $messageMemc, $wgMemc,
                        $wgUser, $wgLang, $wgOut, $wgRequest, $wgStyleDirectory, $wgEnableParserCache,
-                       $wgNamespaceAliases, $wgNamespaceProtection, $wgLocalFileRepo,
+                       $wgExtraNamespaces, $wgNamespaceAliases, $wgNamespaceProtection, $wgLocalFileRepo,
                        $parserMemc, $wgThumbnailScriptPath, $wgScriptPath,
                        $wgArticlePath, $wgScript, $wgStylePath, $wgExtensionAssetsPath,
                        $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType, $wgLockManagers;
@@ -182,6 +182,9 @@ class ParserTest {
                $wgNamespaceProtection[NS_MEDIAWIKI] = 'editinterface';
                $wgNamespaceAliases['Image'] = NS_FILE;
                $wgNamespaceAliases['Image_talk'] = NS_FILE_TALK;
+               # add a namespace shadowing a interwiki link, to test
+               # proper precedence when resolving links. (bug 51680)
+               $wgExtraNamespaces[100] = 'MemoryAlpha';
 
                // XXX: tests won't run without this (for CACHE_DB)
                if ( $wgMainCacheType === CACHE_DB ) {
@@ -239,6 +242,11 @@ class ParserTest {
                                        'iw_api' => '',
                                        'iw_wikiid' => '',
                                        'iw_local' => 0 ),
+                               'memoryalpha' => array(
+                                       'iw_url' => 'http://www.memory-alpha.org/en/index.php/$1',
+                                       'iw_api' => '',
+                                       'iw_wikiid' => '',
+                                       'iw_local' => 0 ),
                                'zh' => array(
                                        'iw_url' => 'http://zh.wikipedia.org/wiki/$1',
                                        'iw_api' => '',
index 146f867..3266b16 100644 (file)
@@ -586,7 +586,7 @@ parsoid
 !! input
 '''foo'''''
 !! result
-<p><b>foo<i></i></b>
+<p><b>foo</b><i></i>
 </p>
 !!end
 
@@ -643,7 +643,7 @@ parsoid
 !! input
 ''''foo'''''
 !! result
-<p>'<b>foo<i></i></b>
+<p>'<b>foo</b><i></i>
 </p>
 !!end
 
@@ -653,26 +653,14 @@ parsoid
 ###
 
 !! test
-Italics and bold: 5-quote opening sequence: (5,2) (php)
+Italics and bold: 5-quote opening sequence: (5,2)
 !! options
-php
 !! input
 '''''foo''
 !! result
 <p><b><i>foo</i></b>
 </p>
 !!end
-# Parsoid reverses the nesting order, compared to the PHP parser
-!! test
-Italics and bold: 5-quote opening sequence: (5,2) (parsoid)
-!! options
-parsoid
-!! input
-'''''foo''
-!! result
-<p><i><b>foo</b></i>
-</p>
-!!end
 
 
 !! test
@@ -815,32 +803,15 @@ Italics and bold: other quote tests: (3,2,3,2)
 !!end
 
 
-# The Parsoid team believes the PHP parser's output on this test is wrong.
-# It only checks for convert-to-bold-on-single-character-word when the word
-# matches with a bold tag ("'''") that is *odd* in the list of quote tokens.
-# This means that the bold token in position 2 (0-indexed) gets converted by
-# parsoid, but doesn't get changed by the PHP parser.
 !! test
-Italics and bold: other quote tests: (3,2,3,3) (php)
+Italics and bold: other quote tests: (3,2,3,3)
 !! options
-php
 !! input
 '''this is about ''foo'''s family'''
 !! result
 <p>'<i>this is about </i>foo<b>s family</b>
 </p>
 !!end
-# This is the output the Parsoid team believes to be correct.
-!! test
-Italics and bold: other quote tests: (3,2,3,3) (parsoid)
-!! options
-parsoid
-!! input
-'''this is about ''foo'''s family'''
-!! result
-<p><b>this is about <i>foo'</i>s family</b>
-</p>
-!!end
 
 
 !! test
@@ -1042,7 +1013,7 @@ parsoid
 !! input
 {{echo|&ndash;}}
 !! result
-<p><span typeof="mw:Transclusion mw:Entity" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&amp;ndash;"}},"i":0}'>&ndash;</span>
+<p><span typeof="mw:Transclusion mw:Entity" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&amp;ndash;"}},"i":0}}]}'>&ndash;</span>
 </p>
 !! end
 
@@ -1239,8 +1210,9 @@ b
 </p><p>b
 </p>
 !! end
+
 !! test
-Block tag on one line
+Block tag on one line (<div>)
 !! input
 a <div>foo</div>
 
@@ -1252,7 +1224,19 @@ a <div>foo</div>
 !! end
 
 !! test
-Block tag on both lines
+Block tag on one line (<blockquote>)
+!! input
+a <blockquote>foo</blockquote>
+
+b
+!! result
+a <blockquote>foo</blockquote>
+<p>b
+</p>
+!! end
+
+!! test
+Block tag on both lines (<div>)
 !! input
 a <div>foo</div>
 
@@ -1263,6 +1247,18 @@ b <div>foo</div>
 
 !! end
 
+!! test
+Block tag on both lines (<blockquote>)
+!! input
+a <blockquote>foo</blockquote>
+
+b <blockquote>foo</blockquote>
+!! result
+a <blockquote>foo</blockquote>
+b <blockquote>foo</blockquote>
+
+!! end
+
 !! test
 Multiple lines without block tags
 !! input
@@ -1389,17 +1385,61 @@ Regression with preformatted in <center>
 
 !! end
 
-# Expected output in the following test is not really expected (there should be
-# <pre> in the output) -- it's only testing for well-formedness.
 !! test
-Bug 6200: Preformatted in <blockquote>
+Bug 52763: Preformatted in <blockquote>
 !! input
 <blockquote>
  Blah
 </blockquote>
 !! result
 <blockquote>
- Blah
+<p> Blah
+</p>
+</blockquote>
+
+!! end
+
+!! test
+Bug 51086: Double newlines in blockquotes should be turned into paragraphs
+!! input
+<blockquote>
+Foo
+
+Bar
+</blockquote>
+!! result
+<blockquote>
+<p>Foo
+</p><p>Bar
+</p>
+</blockquote>
+
+!! end
+
+!! test
+Bug 15491: <ins>/<del> in blockquote
+!! input
+<blockquote>
+Foo <del>bar</del> <ins>baz</ins> quux
+</blockquote>
+!! result
+<blockquote>
+<p>Foo <del>bar</del> <ins>baz</ins> quux
+</p>
+</blockquote>
+
+!! end
+
+# Note that the p-wrapping is newline sensitive, which could be
+# considered a bug: tidy will wrap only the 'Foo' in the example
+# below in a <p> tag. (see comment 23-25 of bug #6200)
+!! test
+Bug 15491: <ins>/<del> in blockquote (2)
+!! input
+<blockquote>Foo <del>bar</del> <ins>baz</ins> quux
+</blockquote>
+!! result
+<blockquote>Foo <del>bar</del> <ins>baz</ins> quux
 </blockquote>
 
 !! end
@@ -1629,6 +1669,62 @@ Templates: Indent-Pre: 1f: Wrapping should be based on expanded content
 </pre>
 !!end
 
+# TODO / maybe: fix wt2wt for this
+!! test
+Parsoid: Don't paragraph-wrap fosterable content
+!! options
+parsoid=wt2html
+!! input
+{|
+<td></td>
+<td></td>
+
+
+
+|}
+!! result
+<table>
+
+<tbody>
+<tr>
+<td></td>
+
+<td></td></tr>
+
+
+
+</tbody></table>
+!! end
+
+!! test
+Parsoid: Don't paragraph-wrap fosterable content even if table syntax is unbalanced
+!! options
+parsoid=wt2html
+!! input
+{|
+<td>
+<td>
+</td>
+
+
+
+|}
+!! result
+<table>
+
+<tbody>
+<tr>
+<td></td>
+
+<td>
+</td></tr>
+
+
+
+</tbody></table>
+!! end
+
+
 #--------------------------------------------------------------------
 # Transclusion parameter whitespace stripping tests
 # Behavior is different for positional and named parameters
@@ -1658,7 +1754,6 @@ Templates: Strip leading and trailing whitespace from named-param values
 
 !! test
 Templates: Don't strip whitespace from positional-param values
-!! options
 !! input
 {{echo|a }}
 
@@ -1702,6 +1797,19 @@ Templates: Don't strip whitespace from positional-param values
 </pre>
 !! end
 
+!! test
+Templates: Handle empty comment-and-ws-only lines correctly
+!! input
+{{echo|foo
+<!--should be ignored-->
+ <!--should be ignored as well-->
+bar}}
+!! result
+<p>foo
+bar
+</p>
+!! end
+
 #--------------------------------------------------------------------
 # Transclusion parameter escaping tests
 #--------------------------------------------------------------------
@@ -1713,7 +1821,7 @@ parsoid
 {{echo|[foo]|{{echo|[bar]}}}}
 !! result
 <p about="#mwt1" typeof="mw:Transclusion"
-data-mw="{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;[foo]&quot;},&quot;2&quot;:{&quot;wt&quot;:&quot;{{echo|[bar]}}&quot;}},&quot;i&quot;:0}">[foo]</p>
+data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[foo]"},"2":{"wt":"{{echo|[bar]}}"}},"i":0}}]}'>[foo]</p>
 !! end
 
 !! test
@@ -1723,7 +1831,7 @@ parsoid
 !! input
 {{echo|[{{echo|http://example.com}} link]}}
 !! result
-<p><a rel="mw:ExtLink" href="http://example.com" about="#mwt31" typeof="mw:Transclusion" data-mw="{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;[{{echo|http://example.com}} link]&quot;}},&quot;i&quot;:0}">link</a></p>
+<p><a rel="mw:ExtLink" href="http://example.com" about="#mwt31" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[{{echo|http://example.com}} link]"}},"i":0}}]}'>link</a></p>
 !! end
 
 !! test
@@ -1735,7 +1843,7 @@ parsoid
 !! result
 <p><a rel="mw:ExtLink" href="http://foo.com/a|b" about="#mwt1"
 typeof="mw:Transclusion"
-data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://foo.com/a|b"}},"i":0}'>http://foo.com/a|b</a></p>
+data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://foo.com/a&amp;#124;b"}},"i":0}}]}'>http://foo.com/a|b</a></p>
 !! end
 
 !! test
@@ -1747,8 +1855,8 @@ parsoid=html2wt,wt2wt
 !! result
 <p><a rel="mw:ExtLink" href="http://foo.com/a|b" about="#mwt1"
 typeof="mw:Transclusion"
-data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},
-"params":{"1":{"wt":"[http://foo.com/a|b a|b]"}},"i":0}'>a|b</a></p>
+data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},
+"params":{"1":{"wt":"[http://foo.com/a|b a|b]"}},"i":0}}]}'>a|b</a></p>
 !! end
 
 !! test
@@ -1760,12 +1868,23 @@ parsoid=html2wt,wt2wt
 {{echo|<nowiki>&lt;div&gt;</nowiki>}}
 {{echo|<nowiki></nowiki>}}
 !! result
-<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo<nowiki>|</nowiki>bar"}},"i":0}'}'>foo</span><span typeof="mw:Nowiki" about="#mwt1">|</span><span about="#mwt1">bar</span>
-<span typeof="mw:Transclusion mw:Nowiki" about="#mwt2" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<nowiki>&amp;lt;div&amp;gt;</nowiki>"}},"i":0}'><span typeof="mw:Entity">&lt;</span>div<span typeof="mw:Entity">&gt;</span></span>
-<span typeof="mw:Transclusion mw:Nowiki" about="#mwt3" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<nowiki></nowiki>"}},"i":0}'></span>
+<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo<nowiki>|</nowiki>bar"}},"i":0}}]}'}'>foo</span><span typeof="mw:Nowiki" about="#mwt1">|</span><span about="#mwt1">bar</span>
+<span typeof="mw:Transclusion mw:Nowiki" about="#mwt2" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<nowiki>&amp;lt;div&amp;gt;</nowiki>"}},"i":0}}]}'><span typeof="mw:Entity">&lt;</span>div<span typeof="mw:Entity">&gt;</span></span>
+<span typeof="mw:Transclusion mw:Nowiki" about="#mwt3" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<nowiki></nowiki>"}},"i":0}}]}'></span>
 </p>
 !! end
 
+## Bug 52824
+!! test
+Templates: '=' char in nested transclusions should not trigger nowiki escapes or conversion to named param
+!! options
+parsoid=html2wt,wt2wt
+!! input
+{{echo|{{echo|1=bar}}}}
+!! result
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{echo|1=bar}}"}},"i":0}}]}'>bar</p>
+!! end
+
 ###
 ### Parsoid-centric tests for testing RT edge cases for pre
 ###
 !!input
  <p> foo </p>
  <div> foo </div>
+ <blockquote> foo </blockquote>
  <span> foo </span>
 !!result
  <p> foo </p>
  <div> foo </div>
+ <blockquote> foo </blockquote>
 <pre><span> foo </span>
 </pre>
 !!end
@@ -1909,6 +2030,12 @@ c
  foo
 </blockquote>
 
+<blockquote>
+<pre>
+foo
+</pre>
+</blockquote>
+
 <table><tr><td>
  foo
 </td></tr></table>
@@ -1930,7 +2057,13 @@ c
 </pre>
 </center>
 <blockquote>
- foo
+<p> foo
+</p>
+</blockquote>
+<blockquote>
+<pre>
+foo
+</pre>
 </blockquote>
 <table><tr><td>
 <pre>foo
@@ -2006,7 +2139,9 @@ parsoid=wt2html,wt2wt
  [[Category:foo]] <!-- No pre-wrapping -->
 {{echo| [[Category:foo]]}} <!-- No pre-wrapping -->
 !! result
-  <span typeof="mw:Transclusion"> </span> 
+ <link rel="mw:WikiLink/Category" href="./Category:Foo"> <!-- No pre-wrapping -->
+<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":" [[Category:foo]]"}},"i":0}}]}'> </span>
+<link rel="mw:WikiLink/Category" href="./Category:Foo" about="#mwt1"> <!-- No pre-wrapping -->
 !! end
 
 !! test
@@ -2017,8 +2152,10 @@ parsoid=wt2html,wt2wt
  [[Category:foo]] a
  [[Category:foo]] {{echo|b}}
 !! result
-<pre> a <span typeof="mw:Transclusion">b</span>
-</pre>
+<pre>
+<link rel="mw:WikiLink/Category" href="./Category:Foo"> a
+
+<link rel="mw:WikiLink/Category" href="./Category:Foo"> <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b"}},"i":0}}]}'>b</span></pre>
 !! end
 
 ###
@@ -3574,8 +3711,7 @@ Plain ''italic'''s plain
 !! end
 # Parsoid inserts an empty bold tag pair at the end of the line, that the PHP
 # parser strips. The wikitext contains just the first half of the bold
-# quote pair. (There's also a case where Parsoid nests <b> and <i>
-# differently than the PHP parser.)
+# quote pair.
 !! test
 Unclosed and unmatched quotes (parsoid)
 !! options
@@ -3603,7 +3739,7 @@ Normal text.
 Plain ''italic'''s plain
 !! result
 <p><i><b>Bold italic text </b>with bold deactivated<b> in between.</b></i>
-</p><p><i><b>Bold italic text </b></i><b>with italic deactivated<i> in between.</i></b>
+</p><p><b><i>Bold italic text </i>with italic deactivated<i> in between.</i></b>
 </p><p><b>Bold text..</b>
 </p><p>..spanning two paragraphs (should not work).<b></b>
 </p><p><b>Bold tag left open</b>
@@ -4067,11 +4203,14 @@ Template-generated table cell attributes and cell content
 !! input
 {|
 |{{table_attribs}}
+| {{table_attribs}}
 |}
 !! result
 <table>
 <tr>
 <td style="color: red"> Foo
+</td>
+<td style="color: red"> Foo
 </td></tr></table>
 
 !! end
@@ -4321,22 +4460,18 @@ Parsoid: Default to a newline after tables in new content (bug 51219)
 parsoid=html2wt
 !! input
 {|
-|-
 |foo
 |}
 <nowiki> </nowiki>bar
 {|
-|-
 |baz
 |}
 '''quux'''
 !! result
 <table><tbody>
-<tr>
-<td>foo</td></tr></tbody></table> bar
+<tr><td>foo</td></tr></tbody></table> bar
 <table><tbody>
-<tr>
-<td>baz</td></tr></tbody></table><b>quux</b>
+<tr><td>baz</td></tr></tbody></table><b>quux</b>
 !! end
 
 ###
@@ -4499,6 +4634,22 @@ Link to namespaces
 </p>
 !! end
 
+!! article
+MemoryAlpha:AlphaTest
+!! text
+This is an article in the MemoryAlpha namespace
+(which shadows the memoryalpha interwiki link).
+!! endarticle
+
+!! test
+Namespace takes precedence over interwiki link (bug 51680)
+!! input
+[[MemoryAlpha:AlphaTest]]
+!! result
+<p><a href="/wiki/MemoryAlpha:AlphaTest" title="MemoryAlpha:AlphaTest">MemoryAlpha:AlphaTest</a>
+</p>
+!! end
+
 !! test
 Piped link to namespace
 !! input
@@ -4975,6 +5126,12 @@ Interwiki link with fragment (bug 2130)
 </p>
 !! end
 
+
+###
+### Interlanguage links
+### Language links (so that searching for '### language' matches..)
+###
+
 !! test
 Interlanguage link
 !! input
@@ -5032,6 +5189,19 @@ language=ln
 </p>
 !! end
 
+!! test
+Parsoid bug 53221: Wikilinks should be properly entity-escaped
+!! options
+parsoid=html2wt
+!! input
+He&amp;nbsp;llo [[Foo|He&amp;nbsp;llo]]
+
+He&amp;nbsp;llo [[He&amp;nbsp;llo]]
+!!result
+<p>He&amp;nbsp;llo <a href="Foo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
+<p>He&amp;nbsp;llo <a href="He&amp;nbsp;llo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
+!! end
+
 !! test
 Parsoid: handle constructor well
 !! options
@@ -5047,9 +5217,30 @@ parsoid
 <p data-parsoid="{&quot;dsr&quot;:[17,36,0,0]}"><a rel="mw:WikiLink" href="./Foo" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Foo&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor:foo&quot;},&quot;dsr&quot;:[17,36,2,2]}">constructor:foo</a></p>
 !! end
 
-##
-## Redirects, Parsoid-only
-##
+!! test
+Parsoid: recognize interlanguage links without a target page
+!! options
+parsoid
+!! input
+[[ko:]]
+!! result
+<p>
+<link rel="mw:WikiLink/Language" href="http://ko.wikipedia.org/wiki/"></p>
+!! end
+
+!! test
+Parsoid: recognize interwiki links without a target page
+!! options
+parsoid
+!! input
+[[:ko:]]
+!! result
+<p><a rel="mw:WikiLink/Interwiki" href="http://ko.wikipedia.org/wiki/">ko:</a></p>
+!! end
+
+###
+### Redirects, Parsoid-only
+###
 !! test
 Simple redirect to page
 !! options
@@ -5692,7 +5883,7 @@ parsoid=wt2html,wt2wt
 !!result
 <ul><li> foo</li>
 <li>li-hack</li>
-<li about="#mwt1" typeof="mw:Transclusion" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<li>templated li-hack"}}}'>templated li-hack</li>
+<li about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<li>templated li-hack"}}}}]}'>templated li-hack</li>
 <li> <!--foo--> </li><li> li-hack with preceding comments</li></ul>
 
 <ul>
@@ -5724,7 +5915,7 @@ parsoid
 * {{bullet}}
 !! result
 <ul>
-<li> </li><li about="#mwt1" typeof="mw:Transclusion" data-mw='{"target":{"wt":"bullet","href":"./Template:Bullet"},"params":{},"i":0}'> Bar</li>
+<li> </li><li about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"bullet","href":"./Template:Bullet"},"params":{},"i":0}}]}'> Bar</li>
 </ul>
 !! end
 
@@ -5800,6 +5991,23 @@ parsoid
 <p><small></small></p>
 !!end
 
+!! test
+Table with missing opening <tr> tag
+!! options
+parsoid=wt2html,wt2wt
+!! input
+<table>
+<td>foo</td>
+</tr>
+</table>
+!! result
+<table>
+<tr>
+<td>foo</td>
+</tr>
+</table>
+!! end
+
 ###
 ### Magic Words
 ###
@@ -7182,14 +7390,57 @@ c}}d
 
 b}}
 !! result
-a<span typeof="mw:Transclusion">b</span>
-<table></table><span>c</span>d
-<p typeof="mw:Transclusion">ab</p>
-<table></table>
-<p>cd</p>
-<p typeof="mw:Transclusion">a</p>
-<table></table>
-<p>b</p>
+a<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b
+<table></table>c"}},"i":0}}]}'>b</span>
+<table about="#mwt1"></table><span about="#mwt1">c</span>d
+
+
+<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b\n<table></table>\nc"}},"i":0}},"d"]}'>ab</p><span about="#mwt2">
+</span>
+<table about="#mwt2"></table><span about="#mwt2">
+</span>
+<p about="#mwt2">cd</p>
+
+
+<p about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n\n<table></table>\n\nb"}},"i":0}}]}'>a</p><span about="#mwt3">
+
+</span>
+<table about="#mwt3"></table><span about="#mwt3">
+
+</span>
+<p about="#mwt3">b</p>
+!! end
+
+!! test
+Parsoid: Merge double tds (bug 50603)
+!! options
+parsoid
+!! input
+{|
+|{{echo|{{!}} foo}}
+|}
+!! result
+<table><tbody>
+<tr><td about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{!}} foo"}},"i":0}}]}'> foo</td></tr>
+</tbody></table>
+!! end
+
+!! test
+Parsoid: Merge double tds in nested transclusion content (bug 50603)
+!! options
+parsoid
+!! input
+{{echo|<div>}}
+{|
+|{{echo|{{!}} foo}}
+|}
+{{echo|</div>}}
+!! result
+<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<div>"}},"i":0}},"\n{|\n|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{!}} foo"}},"i":1}},"\n|}\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"</div>"}},"i":2}}]}'>
+<table><tbody>
+<tr><td data-mw='{"parts":["|"]}'> foo</td></tr>
+</tbody></table>
+</div>
 !! end
 
 ###
@@ -7288,8 +7539,10 @@ Templates: 1. Simple use
 Templates: 2. Inside a block tag
 !!input
 <div>{{echo|Foo}}</div>
+<blockquote>{{echo|Foo}}</blockquote>
 !!result
 <div>Foo</div>
+<blockquote>Foo</blockquote>
 
 !!end
 
@@ -7333,14 +7586,14 @@ bar <div>baz</div>
 !!test
 Templates: P-wrapping: 1d. Template preceded by comment-only line
 !!options
-parsoid=wt2html,wt2wt
+parsoid
 !!input
 <!-- foo -->
 {{echo|Bar}}
 !!result
 <!-- foo -->
-<p typeof="mw:Transclusion">Bar
-</p>
+
+<p about="#mwt223" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Bar"}},"i":0}}]}'>Bar</p>
 !!end
 
 !!test
@@ -7741,24 +7994,24 @@ Templates: Ugly nesting: 1. Quotes opened/closed across templates (echo)
 Templates: Ugly nesting: 2. Quotes opened/closed across templates (echo_with_span)
 (PHP parser generates misnested html)
 !! options
-parsoid=wt2html,wt2wt
+parsoid
 !!input
 {{echo_with_span|''a}}{{echo_with_span|b''c''d}}{{echo_with_span|''e}}
 !!result
-<p><span typeof="mw:Transclusion"><i>a</i></span><i typeof="mw:Transclusion"><span>b</span></i><span>c</span><i>d</i><span>e</span></p>
+<p><span about="#mwt1" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_span&quot;,&quot;href&quot;:&quot;./Template:Echo_with_span&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;''a&quot;}},&quot;i&quot;:0}}]}"><i>a</i></span><i about="#mwt2" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_span&quot;,&quot;href&quot;:&quot;./Template:Echo_with_span&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;b''c''d&quot;}},&quot;i&quot;:0}},{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_span&quot;,&quot;href&quot;:&quot;./Template:Echo_with_span&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;''e&quot;}},&quot;i&quot;:1}}]}"><span>b</span></i><span about="#mwt2">c</span><i about="#mwt2">d<span></span></i><span about="#mwt2">e</span></p>
 !!end
 
 !!test
 Templates: Ugly nesting: 3. Quotes opened/closed across templates (echo_with_div)
-(PHP parser generates misnested html)
+(PHP parser generates misnested html; Parsoid html2wt mode adds newlines between {{echo}}s)
 !! options
 parsoid=wt2html,wt2wt
 !!input
 {{echo_with_div|''a}}{{echo_with_div|b''c''d}}{{echo_with_div|''e}}
 !!result
-<div typeof="mw:Transclusion"><i>a</i></div>
-<div typeof="mw:Transclusion"><i>b</i>c<i>d</i></div>
-<div typeof="mw:Transclusion">e</div>
+<div about="#mwt1" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_div&quot;,&quot;href&quot;:&quot;./Template:Echo_with_div&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;''a&quot;}},&quot;i&quot;:0}}]}"><i>a</i></div>
+<div about="#mwt2" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_div&quot;,&quot;href&quot;:&quot;./Template:Echo_with_div&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;b''c''d&quot;}},&quot;i&quot;:0}}]}"><i>b</i>c<i>d</i></div>
+<div about="#mwt3" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo_with_div&quot;,&quot;href&quot;:&quot;./Template:Echo_with_div&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;''e&quot;}},&quot;i&quot;:0}}]}">e</div>
 !!end
 
 !!test
@@ -7781,10 +8034,13 @@ parsoid
 |bar
 |}
 !!result
-<table typeof="mw:Transclusion">
+<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["{|\n|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo</table>"}},"i":0}},"\n|bar\n|}"]}'>
+
 <tbody>
 <tr>
-<td>foo</td></tr></tbody></table><span>bar</span>
+<td>foo</td></tr></tbody></table><span about="#mwt1">
+</span><span about="#mwt1">bar</span><span about="#mwt1">
+</span>
 !!end
 
 !!test
@@ -7813,24 +8069,24 @@ parsoid
   </tr>
 </table>
 !!result
-<table  about="#mwt1" typeof="mw:Transclusion">
-  <tbody><tr >
-    <td >
-    <table >
-      <tbody><tr >
-        <td >1. foo </td></tr></tbody></table></td>
-        <td > bar </td>
-        <td >2. baz </td></tr></tbody></table><span about="#mwt1">
-      </span><span about="#mwt1">
-      
-        abc</span><span about="#mwt1">
-      </span><span about="#mwt1">
-    </span><span about="#mwt1">
-    </span><span about="#mwt1">
-  </span><span about="#mwt1">
-  
-    xyz</span><span about="#mwt1">
-  </span><span about="#mwt1">
+<table about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["<table>\n  <tr>\n    <td>\n    <table>\n      <tr>\n        <td>1. ",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo </table>"}},"i":0}},"</td>\n        <td> bar </td>\n        <td>2. ",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"baz </table>"}},"i":1}},"</td>\n      </tr>\n      <tr>\n        <td>abc</td>\n      </tr>\n    </table>\n    </td>\n  </tr>\n  <tr>\n    <td>xyz</td>\n  </tr>\n</table>"]}'>
+  <tbody><tr>
+    <td>
+    <table>
+      <tbody><tr>
+        <td>1. foo </td></tr></tbody></table></td>
+        <td> bar </td>
+        <td>2. baz </td></tr></tbody></table><span about="#mwt2">
+      </span><span about="#mwt2">
+      </span><span about="#mwt2">
+        </span><span about="#mwt2">abc</span><span about="#mwt2">
+      </span><span about="#mwt2">
+    </span><span about="#mwt2">
+    </span><span about="#mwt2">
+  </span><span about="#mwt2">
+  </span><span about="#mwt2">
+    </span><span about="#mwt2">xyz</span><span about="#mwt2">
+  </span><span about="#mwt2">
 </span>
 !!end
 
@@ -12797,7 +13053,7 @@ parsoid
 !! input
 '''''
 !! result
-<p><i><b></b></i></p>
+<p><b><i></i></b></p>
 !! end
 
 !! test
@@ -13610,9 +13866,6 @@ __NOEDITSECTION__
 </p>
 !! end
 
-# Expected output in the following test is not necessarily expected (there
-# should probably be <p> tags inside the <blockquote> in the output) -- it's
-# only testing for well-formedness.
 !! test
 Bug 6200: blockquotes and paragraph formatting
 !! input
@@ -13625,7 +13878,8 @@ bar
  baz
 !! result
 <blockquote>
-foo
+<p>foo
+</p>
 </blockquote>
 <p>bar
 </p>
@@ -14305,8 +14559,6 @@ B</strong>
 # Bug 6200: <blockquote> should behave like <div> with respect to line breaks
 !! test
 Bug 6200: paragraphs inside blockquotes (no extra line breaks)
-!! options
-disabled
 !! input
 <blockquote>Line one
 
@@ -14319,8 +14571,6 @@ Line two</blockquote>
 
 !! test
 Bug 6200: paragraphs inside blockquotes (extra line break on open)
-!! options
-disabled
 !! input
 <blockquote>
 Line one
@@ -14336,8 +14586,6 @@ Line two</blockquote>
 
 !! test
 Bug 6200: paragraphs inside blockquotes (extra line break on close)
-!! options
-disabled
 !! input
 <blockquote>Line one
 
@@ -14353,8 +14601,6 @@ Line two
 
 !! test
 Bug 6200: paragraphs inside blockquotes (extra line break on open and close)
-!! options
-disabled
 !! input
 <blockquote>
 Line one
@@ -15585,10 +15831,10 @@ A <ref>
 
 <references />
 !!result
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"This is a <b data-parsoid=\"{&amp;quot;dsr&amp;quot;:[19,40,3,3]}\"><a rel=\"mw:WikiLink\" href=\"./Bolded_link\" data-parsoid=\"{&amp;quot;a&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;./Bolded_link&amp;quot;},&amp;quot;sa&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;bolded link&amp;quot;},&amp;quot;stx&amp;quot;:&amp;quot;simple&amp;quot;,&amp;quot;dsr&amp;quot;:[22,37,2,2]}\">bolded link</a></b> and this is a <span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;transclusion&amp;quot;}}}\" data-parsoid=\"{&amp;quot;src&amp;quot;:&amp;quot;{{echo|transclusion}}&amp;quot;,&amp;quot;dsr&amp;quot;:[55,76,null,null]}\">transclusion</span>\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"This is a <b data-parsoid=\"{&amp;quot;dsr&amp;quot;:[19,40,3,3]}\"><a rel=\"mw:WikiLink\" href=\"./Bolded_link\" data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;simple&amp;quot;,&amp;quot;a&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;./Bolded_link&amp;quot;},&amp;quot;sa&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;bolded link&amp;quot;},&amp;quot;dsr&amp;quot;:[22,37,2,2]}\">bolded link</a></b> and this is a <span about=\"#mwt5\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;transclusion&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[55,76,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\">transclusion</span>\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
 
-<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references">
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> This is a <b><a rel="mw:WikiLink" href="./Bolded_link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}}}'>transclusion</span>
+<ol class="references" typeof="mw:Extension/references" about="#mwt2" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> This is a <b><a rel="mw:WikiLink" href="./Bolded_link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
 </li></ol>
 !!end
 
@@ -15607,7 +15853,7 @@ A <ref>
 !!result
 <p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo\n bar\n baz\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
 
-<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references">
+<ol class="references" typeof="mw:Extension/references" about="#mwt3" data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo
  bar
  baz
@@ -15615,7 +15861,7 @@ A <ref>
 !!end
 
 !!test
-Ref: 6. No p-wrapping in ref-body
+Ref: 7. No p-wrapping in ref-body
 !!options
 parsoid
 !!input
@@ -15636,7 +15882,7 @@ booz
 !!result
 <p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo\n\nbar\n\n\nbaz\n\n\n\nbooz\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
 
-<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references">
+<ol about="#mwt2" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo
 
 bar
@@ -15659,9 +15905,9 @@ A <ref> foo {{echo|</ref> B C}}
 
 <references />
 !!result
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo <span typeof=\"mw:Nowiki\" data-parsoid=\"{&amp;quot;src&amp;quot;:&amp;quot;{{&amp;quot;,&amp;quot;dsr&amp;quot;:[12,14,2,null]}\">{{</span>echo|"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C<span typeof="mw:Nowiki">}}</span></p>
+<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo <span typeof=\"mw:Nowiki\" data-parsoid=\"{&amp;quot;src&amp;quot;:&amp;quot;{{&amp;quot;,&amp;quot;dsr&amp;quot;:[12,14,0,0]}\">{{</span>echo|"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C<span typeof="mw:Nowiki">}}</span></p>
 
-<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references">
+<ol about="#mwt2" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo <span typeof="mw:Nowiki">{{</span>echo|</li></ol>
 !!end
 
@@ -15676,7 +15922,7 @@ A <ref> foo <!--</ref> B C
 !!result
 <p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo <!---->"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C</p>
 
-<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references">
+<ol about="#mwt2" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo <!----></li></ol>
 !!end
 
@@ -15691,7 +15937,7 @@ A <ref> <b> foo </ref> B C
 !!result
 <p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"<b data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;html&amp;quot;,&amp;quot;autoInsertedEnd&amp;quot;:true,&amp;quot;dsr&amp;quot;:[8,16,3,0]}\"> foo </b>"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C</p>
 
-<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references">
+<ol about="#mwt2" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> <b> foo </b></li></ol>
 !!end
 
@@ -15770,7 +16016,7 @@ B1 <ref name="b" /> B2 <ref name="b">bar</ref>
 <p>A1 <span about="#mwt3" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"a"}}' id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span> A2 <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"name":"a"}}' id="cite_ref-a-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span>
 B1 <span about="#mwt7" class="reference" data-mw='{"name":"ref","attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span> B2 <span about="#mwt8" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}' id="cite_ref-b-2-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span></p>
 
-<ol about="#mwt10" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references"><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-a-1-0">1.0</a> <a href="#cite_ref-a-1-1">1.1</a></span> foo</li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy">↑ <a href="#cite_ref-b-2-0">2.0</a> <a href="#cite_ref-b-2-1">2.1</a></span> bar</li></ol>
+<ol about="#mwt10" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-a-1-0">1.0</a> <a href="#cite_ref-a-1-1">1.1</a></span> foo</li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy">↑ <a href="#cite_ref-b-2-0">2.0</a> <a href="#cite_ref-b-2-1">2.1</a></span> bar</li></ol>
 !!end
 
 !!test
@@ -15780,7 +16026,7 @@ parsoid
 !!input
 <references />
 !!result
-<ol about="#mwt2" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references"></ol>
+<ol about="#mwt2" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'></ol>
 !!end
 
 !!test
@@ -15796,7 +16042,7 @@ B <ref group="b">bar</ref>
 <p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"group":"a"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[a 1]</a></span>
 B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"group":"b"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[b 1]</a></span></p>
 
-<ol about="#mwt6" class="references" data-mw='{"name":"references","attrs":{"group":"a"}}' typeof="mw:Extension/references"><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li></ol>
+<ol about="#mwt6" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li></ol>
 !!end
 
 !!test
@@ -15814,11 +16060,11 @@ B <ref>bar</ref>
 !!result
 <p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
 
-<ol about="#mwt4" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references"><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li></ol>
+<ol about="#mwt4" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li></ol>
 
 <p>B <span about="#mwt6" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
 
-<ol about="#mwt8" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references"><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> bar</li></ol>
+<ol about="#mwt8" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> bar</li></ol>
 !!end
 
 !!test
@@ -15838,11 +16084,11 @@ C <ref>cfoo</ref>
 <p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"afoo"},"attrs":{"group":"a"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[a 1]</a></span>
 B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bfoo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"<ref>bfoo</ref>","dsr":[30,45,5,6]}'><a href="#cite_note-1">[1]</a></span></p>
 
-<ol about="#mwt6" class="references" data-mw='{"name":"references","attrs":{"group":"a"}}' typeof="mw:Extension/references"><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> afoo</li></ol>
+<ol about="#mwt6" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> afoo</li></ol>
 
 <p>C <span about="#mwt8" class="reference" data-mw='{"name":"ref","body":{"html":"cfoo"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[2]</a></span></p>
 
-<ol about="#mwt10" class="references" data-mw='{"name":"references","attrs":{}}' typeof="mw:Extension/references"><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> bfoo</li><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</a></span> cfoo</li></ol>
+<ol about="#mwt10" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> bfoo</li><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</a></span> cfoo</li></ol>
 !!end
 
 !!test
@@ -15861,7 +16107,7 @@ This should just get lost.
 <p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"a"}}' id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span>
 B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","body":{"extsrc":"<ref name=\"a\">foo</ref>\nThis should just get lost.","html":"<span about=\"#mwt8\" class=\"reference\" data-mw=\"{&amp;quot;name&amp;quot;:&amp;quot;ref&amp;quot;,&amp;quot;body&amp;quot;:{&amp;quot;html&amp;quot;:&amp;quot;foo&amp;quot;},&amp;quot;attrs&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;a&amp;quot;}}\" rel=\"dc:references\" typeof=\"mw:Extension/ref\"><a href=\"#cite_note-a-1\">[1]</a></span>"},"attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy"><a href="#cite_ref-a-1-0">↑</a></span> foo</li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b-2-0">↑</a></span> bar</li></ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","body":{"extsrc":"<ref name=\"a\">foo</ref>\nThis should just get lost.","html":"\n<span about=\"#mwt8\" class=\"reference\" data-mw=\"{&amp;quot;name&amp;quot;:&amp;quot;ref&amp;quot;,&amp;quot;body&amp;quot;:{&amp;quot;html&amp;quot;:&amp;quot;foo&amp;quot;},&amp;quot;attrs&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;a&amp;quot;}}\" rel=\"dc:references\" typeof=\"mw:Extension/ref\"><a href=\"#cite_note-a-1\">[1]</a></span>\n"},"attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy"><a href="#cite_ref-a-1-0">↑</a></span> foo</li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b-2-0">↑</a></span> bar</li></ol>
 !!end
 
 !!test
@@ -15871,7 +16117,7 @@ parsoid
 !!input
 {{echo|<references />}}
 !!result
-<ol class="references" about="#mwt2" typeof="mw:Transclusion" data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<references />"}},"i":0}'></ol>
+<ol class="references" about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<references />"}},"i":0}}]}'></ol>
 !!end
 
 !! test
@@ -15891,10 +16137,12 @@ B <ref name="b" />
 <p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo bar for a"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span>
 B <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo bar for a</li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b-2-0">↑</a></span> </li></ol>
-
-<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","body":{"extsrc":"<ref name=\"b\">foo</ref>","html":"\n<span about=\"#mwt10\" class=\"reference\" data-mw=\"{&amp;quot;name&amp;quot;:&amp;quot;ref&amp;quot;,&amp;quot;body&amp;quot;:{&amp;quot;html&amp;quot;:&amp;quot;foo&amp;quot;},&amp;quot;attrs&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;b&amp;quot;}}\" rel=\"dc:references\" typeof=\"mw:Extension/ref\"><a href=\"#cite_note-b-1\">[1]</a></span>\n"},"attrs":{}}'><li about="#cite_note-b-1" id="cite_note-b-1"><span rel="mw:referencedBy">↑</span> foo</li></ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo bar for a</li>
+<li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b-2-0">↑</a></span> </li></ol>
 
+<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","body":{"extsrc":"<ref name=\"b\">foo</ref>","html":"\n<span about=\"#mwt10\" class=\"reference\" data-mw=\"{&amp;quot;name&amp;quot;:&amp;quot;ref&amp;quot;,&amp;quot;body&amp;quot;:{&amp;quot;html&amp;quot;:&amp;quot;foo&amp;quot;},&amp;quot;attrs&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;b&amp;quot;}}\" rel=\"dc:references\" typeof=\"mw:Extension/ref\"><a href=\"#cite_note-b-1\">[1]</a></span>\n"},"attrs":{}}'>
+<li about="#cite_note-b-1" id="cite_note-b-1"><span rel="mw:referencedBy">↑</span> foo</li></ol>
 !! end
 
 #### ----------------------------------------------------------------
@@ -16481,7 +16729,6 @@ Tables: 4a. Escape -
 parsoid
 !! input
 {|
-|-
 !-bar
 |-
 |<nowiki>-bar</nowiki>
@@ -16499,7 +16746,6 @@ Tables: 4b. Escape +
 parsoid
 !! input
 {|
-|-
 !+bar
 |-
 |<nowiki>+bar</nowiki>
@@ -16517,7 +16763,6 @@ Tables: 4c. No escaping needed
 parsoid
 !! input
 {|
-|-
 |foo-bar
 |foo+bar
 |-
         b</p>
 !! end
 
+#### --------------- Behavior Switches --------------------
+!! test
+1. Valid behavior switches should be escaped
+!! options
+parsoid=html2wt
+!! input
+<nowiki>__TOC__</nowiki>
+!! result
+__TOC__
+!! end
+
+!! test
+2. Invalid behavior switches should not be escaped
+!! options
+parsoid=html2wt
+!! input
+__TOO__
+__|__
+!! result
+__TOO__
+__|__
+!! end
+
 #### --------------- HTML tags ---------------
 #### 1. a tags
 #### 2. other tags
@@ -17150,7 +17418,7 @@ Indented table with an empty td
 Empty TR followed by a template-generated TR
 (Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext)
 !!options
-parsoid=wt2html,wt2wt
+parsoid
 !!input
 {|
 |-
@@ -17160,8 +17428,9 @@ parsoid=wt2html,wt2wt
 <table>
 <tbody>
 <tr></tr>
-<tr typeof="mw:Transclusion">
-<td>foo</td></tr></tbody></table>
+<tr about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<tr><td>foo</td></tr>"}},"i":0}}]}'>
+<td>foo</td></tr>
+</tbody></table>
 !!end
 
 ## PHP and parsoid output differ for this, and since this is primarily
@@ -17180,10 +17449,10 @@ parsoid
 !!result
 <table>
 <tbody>
+<tr></tr>
+ <!--c-->
 <tr>
-<td> <!--c--></td></tr>
-<tr>
-<td><!--c--> <!--d--></td></tr>
+<!--c--> </tr><!--d-->
 </tbody></table>
 
 !!end
@@ -17240,6 +17509,189 @@ plain text</pre>
 plain text
 !!end
 
+!!test
+Ensure fostered text content is wrapped in spans
+!!options
+parsoid=wt2html
+!!input
+<table>hi</table><table>ho</table>
+!!result
+<span>hi</span>
+<table></table>
+<span>ho</span>
+<table></table>
+!!end
+
+!!test
+Encapsulation properly handles null DSR information from foster box
+!!options
+parsoid=wt2html,wt2wt
+!!input
+{{echo|<table>foo<tr><td>bar</td></tr></table>}}
+!!result
+<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;
+<table>foo
+<tr>
+<td>bar</td></tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span>
+<table>
+<tbody>
+<tr>
+<td>bar</td></tr></tbody></table>
+!!end
+
+!!test
+1. Encapsulate foster-parented transclusion content
+!!options
+parsoid=wt2wt,wt2html
+!!input
+<table>{{echo|foo<tr><td>bar</td></tr>}}</table>
+!!result
+<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
+<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo
+<tr>
+<td>bar</td></tr>&quot;}},&quot;i&quot;:0}},&quot;</table>&quot;]}">foo</span>
+<table>
+<tbody>
+<tr>
+<td>bar</td></tr></tbody></table>
+!!end
+
+!!test
+2. Encapsulate foster-parented transclusion content
+!!options
+parsoid=wt2wt,wt2html
+!!input
+<table><div>{{echo|foo}}</div><tr><td>bar</td></tr></table>
+!!result
+<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
+<table>
+<div>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo&quot;}},&quot;i&quot;:0}},&quot;</div>
+<tr>
+<td>bar</td></tr></table>&quot;]}">foo</div>
+<table>
+<tbody>
+<tr>
+<td>bar</td></tr></tbody></table>
+!!end
+
+!!test
+3. Encapsulate foster-parented transclusion content
+!!options
+parsoid=wt2wt,wt2html
+!!input
+<table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
+!!result
+<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
+<table>
+<div>
+<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div>
+<tr>
+<td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
+<p>foo</p></div>
+<table>
+<tbody>
+<tr>
+<td>bar</td></tr></tbody></table>
+!!end
+
+!!test
+4. Encapsulate foster-parented transclusion content
+!!options
+parsoid=wt2wt,wt2html
+!!input
+<table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
+!!result
+<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
+<table>
+<div>
+<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div>
+<tr>
+<td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
+<p>foo</p></div>
+<table>
+<tbody>
+<tr>
+<td>bar</td></tr></tbody></table>
+!!end
+
+!!test
+5. Encapsulate foster-parented transclusion content
+!!options
+parsoid=wt2wt,wt2html
+!!input
+<table><tr><td><div><p>{{echo|foo</p></div></td>foo}}</tr></table>
+!!result
+<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
+<table>
+<tr>
+<td>
+<div>
+<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo&quot;}},&quot;i&quot;:0}},&quot;</tr></table>&quot;]}">foo</span>
+<table>
+<tbody>
+<tr>
+<td>
+<div>
+<p>foo</p></div></td></tr></tbody></table>
+!!end
+
+!!test
+6. Encapsulate foster-parented transclusion content
+!!options
+parsoid=wt2wt,wt2html
+!!input
+<table><tr><td><div><p>{{echo|foo</p></div></td>foo</tr></table>}}<p>ok</p>
+!!result
+<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
+<table>
+<tr>
+<td>
+<div>
+<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo</tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span>
+<table>
+<tbody>
+<tr>
+<td>
+<div>
+<p>foo</p></div></td></tr></tbody></table>
+<p>ok</p>
+!!end
+
+!!test
+7. Encapsulate foster-parented transclusion content
+!!options
+parsoid=wt2wt,wt2html
+!!input
+<table>{{echo|<p>foo</p>}}<td>bar</td></table>
+!!result
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
+<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;
+<p>foo</p>&quot;}},&quot;i&quot;:0}},&quot;
+<td>bar</td></table>&quot;]}">foo</p>
+<table>
+<tbody>
+<tr>
+<td>bar</td></tr></tbody></table>
+!!end
+
+!!test
+8. Encapsulate foster-parented transclusion content
+!!options
+parsoid=wt2wt,wt2html
+!!input
+{{echo|a
+}}{|{{echo|style='color:red'}}
+|-
+|b
+|}
+!!result
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a\n&quot;}},&quot;i&quot;:0}}]}">a</p><span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;{|&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;style&quot;:{&quot;wt&quot;:&quot;'color:red'&quot;}},&quot;i&quot;:0}},&quot;\n|-\n|b\n|}&quot;]}">{{{1}}}</span>
+<table>
+<tbody>
+<tr>
+<td>b</td></tr></tbody></table>
+!!end
+
 # -----------------------------------------------------------------
 # The following section of tests are primarily to spec requirements
 # around serialization of new/edited content.
@@ -17313,10 +17765,124 @@ Parsoid: Serialize positional parameters with = in them as named parameter
 parsoid=html2wt
 !! input
 {{echo|1 = f=oo}}
+
+{{echo|1 = f=oo|2 = bar}}
+
+<!--Orig params with data-parsoid has heuristics for handling = chars-->
+<!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
+{{echo|<nowiki>f=oo</nowiki>|bar}}
 !! result
 <p about="#mwt1" typeof="mw:Transclusion"
-data-mw='{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"}},"i":0}'
->foo</p>
+data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"}},"i":0}}]}'>foo</p>
+
+<p about="#mwt1" typeof="mw:Transclusion"
+data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"}, "2":{"wt":"bar"}},"i":0}}]}'>foo</p>
+
+<!--Orig params with data-parsoid has heuristics for handling = chars-->
+<!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
+<p data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]},{"k":"2","spc":["","","",""]}]]}' about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"},"2":{"wt":"bar"}},"i":0}}]}'>foo</p>
+!! end
+
+!! test
+Parsoid: Correctly serialize block-node children when they are a combination of text and p-nodes
+!! options
+parsoid=html2wt
+!! input
+<div>a
+b
+</div>
+<div>a
+b
+</div>
+<div>
+a
+
+b
+</div>
+!! result
+<div>a<p>b</p></div>
+<div>a
+<p>b</p></div>
+<div>
+a
+<p>b</p></div>
+!! end
+
+#-----------------------------
+# I/B quote minimization tests
+#-----------------------------
+
+!! test
+1. I/B quote minimization: wikitext-only tags should be combined
+!! options
+parsoid=html2wt
+!! input
+''AB''
+
+'''AB'''
+
+''A'''B'''''
+
+'''A''B'''''
+
+'''A''BC''D'''
+
+'''''AB'''''
+
+'''''AB'''''
+
+'''''AB'''''
+!! result
+<p><i>A</i><i>B</i></p>
+<p><b>A</b><b>B</b></p>
+<p><i>A</i><b><i>B</i></b></p>
+<p><b>A</b><i><b>B</b></i></p>
+<p><b>A</b><i><b>B</b><b>C</b></i><b>D</b></p>
+<p><i><b>A</b></i><i><b>B</b></i></p>
+<p><i><b>A</b></i><b><i>B</i></b></p>
+<p><b><i>A</i></b><i><b>B</b></i></p>
+!! end
+
+!! test
+2. I/B quote minimization: wikitext and html tags should not be combined
+!! options
+parsoid=html2wt
+!! input
+''A''<i>B</i>
+
+''A'''''<i>B</i>'''
+!! result
+<p><i>A</i><i data-parsoid='{"stx":"html"}'>B</i></p>
+<p><i>A</i><b><i data-parsoid='{"stx":"html"}'>B</i></b></p>
+!! end
+
+!! test
+3. I/B quote minimization: templated content stops minimization
+!! options
+parsoid=html2wt
+!! input
+''A''{{echo|''B''}}
+
+''A''{{echo|'''''B'''''}}
+!! result
+<p><i>A</i><i about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;B&#39;&#39;"}},"i":0}}]}'>B</i>
+<p><i>A</i><b about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;&#39;&#39;&#39;B&#39;&#39;&#39;&#39;&#39;"}},"i":0}}]}'><i>B</i></b>
+!! end
+
+!! test
+4. I/B quote minimization: new content should be mimimized with adjacent old content
+!! options
+parsoid=html2wt
+!! input
+''AB''
+
+'''AB'''
+
+''A'''B'''''
+!! result
+<p><i>A</i><i data-parsoid='{}'>B</i></p>
+<p><b data-parsoid='{}'>A</b><b>B</b></p>
+<p><i>A</i><b data-parsoid='{}'><i data-parsoid='{}'>B</i></b></p>
 !! end
 
 # -----------------------------------------------------------------
index 25ba29e..349c510 100644 (file)
@@ -918,6 +918,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * the provided code.
         *
         * @since 1.21
+        * @deprecated since 1.22 Use setExpectedException
         *
         * @param callable $code
         * @param string $expected
diff --git a/tests/phpunit/data/less/common/test.common.mixins.less b/tests/phpunit/data/less/common/test.common.mixins.less
new file mode 100644 (file)
index 0000000..2fbe9b7
--- /dev/null
@@ -0,0 +1,5 @@
+.test-mixin (@value) {
+       color: @value;
+       border: @foo solid @Foo;
+       line-height: test-sum(@bar, 10, 20);
+}
diff --git a/tests/phpunit/data/less/module/dependency.less b/tests/phpunit/data/less/module/dependency.less
new file mode 100644 (file)
index 0000000..c7725a2
--- /dev/null
@@ -0,0 +1,3 @@
+@import "test.common.mixins";
+
+@unitTestColor: green;
diff --git a/tests/phpunit/data/less/module/styles.css b/tests/phpunit/data/less/module/styles.css
new file mode 100644 (file)
index 0000000..b78780a
--- /dev/null
@@ -0,0 +1,6 @@
+/* @noflip */
+.unit-tests {
+  color: green;
+  border: 2px solid #eeeeee;
+  line-height: 35;
+}
diff --git a/tests/phpunit/data/less/module/styles.less b/tests/phpunit/data/less/module/styles.less
new file mode 100644 (file)
index 0000000..ecac839
--- /dev/null
@@ -0,0 +1,6 @@
+@import "dependency";
+
+/* @noflip */
+.unit-tests {
+       .test-mixin(@unitTestColor);
+}
index 6a2a0df..244b100 100644 (file)
@@ -630,6 +630,15 @@ class GlobalTest extends MediaWikiTestCase {
                return $a;
        }
 
+       function testWfMkdirParents() {
+               // Should not return true if file exists instead of directory
+               $fname = $this->getNewTempFile();
+               wfSuppressWarnings();
+               $ok = wfMkdirParents( $fname );
+               wfRestoreWarnings();
+               $this->assertFalse( $ok );
+       }
+
        /**
         * @dataProvider provideWfShellMaintenanceCmdList
         */
diff --git a/tests/phpunit/includes/HtmlFormatterTest.php b/tests/phpunit/includes/HtmlFormatterTest.php
new file mode 100644 (file)
index 0000000..a37df74
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+
+/**
+ * @group HtmlFormatter
+ */
+class HtmlFormatterTest extends MediaWikiTestCase {
+       /**
+        * @dataProvider getHtmlData
+        */
+       public function testTransform( $input, $expected, $callback = false ) {
+               $input = self::normalize( $input );
+               $formatter = new HtmlFormatter( HtmlFormatter::wrapHTML( $input ) );
+               if ( $callback ) {
+                       $callback( $formatter );
+               }
+               $formatter->filterContent();
+               $html = $formatter->getText();
+               $this->assertEquals( self::normalize( $expected ), self::normalize( $html ) );
+       }
+
+       private static function normalize( $s ) {
+               return str_replace( "\n", '',
+                       str_replace( "\r", '', $s ) // "yay" to Windows!
+               );
+       }
+
+       public function getHtmlData() {
+               $removeImages = function( HtmlFormatter $f ) {
+                       $f->setRemoveMedia();
+               };
+               $removeTags = function( HtmlFormatter $f ) {
+                       $f->remove( array( 'table', '.foo', '#bar', 'div.baz' ) );
+               };
+               $flattenSomeStuff = function( HtmlFormatter $f ) {
+                       $f->flatten( array( 's', 'div' ) );
+               };
+               $flattenEverything = function( HtmlFormatter $f ) {
+                       $f->flattenAllTags();
+               };
+               return array(
+                       // remove images if asked
+                       array(
+                               '<img src="/foo/bar.jpg" alt="Blah"/>',
+                               '',
+                               $removeImages,
+                       ),
+                       // basic tag removal
+                       array(
+                               '<table><tr><td>foo</td></tr></table><div class="foo">foo</div><div class="foo quux">foo</div><span id="bar">bar</span>
+<strong class="foo" id="bar">foobar</strong><div class="notfoo">test</div><div class="baz"/>
+<span class="baz">baz</span>',
+
+                               '<div class="notfoo">test</div>
+<span class="baz">baz</span>',
+                               $removeTags,
+                       ),
+                       // don't flatten tags that start like chosen ones
+                       array(
+                               '<div><s>foo</s> <span>bar</span></div>',
+                               'foo <span>bar</span>',
+                               $flattenSomeStuff,
+                       ),
+                       // total flattening
+                       array(
+                               '<div style="foo">bar<sup>2</sup></div>',
+                               'bar2',
+                               $flattenEverything,
+                       ),
+                       // UTF-8 preservation and security
+                       array(
+                               '<span title="&quot; \' &amp;">&lt;Тест!&gt;</span> &amp;&lt;&#38;&#0038;&#x26;&#x026;',
+                               '<span title="&quot; \' &amp;">&lt;Тест!&gt;</span> &amp;&lt;&amp;&amp;&amp;&amp;',
+                       ),
+                       // https://bugzilla.wikimedia.org/show_bug.cgi?id=53086
+                       array(
+                               'Foo<sup id="cite_ref-1" class="reference"><a href="#cite_note-1">[1]</a></sup> <a href="/wiki/Bar" title="Bar" class="mw-redirect">Bar</a>',
+                               'Foo<sup id="cite_ref-1" class="reference"><a href="#cite_note-1">[1]</a></sup> <a href="/wiki/Bar" title="Bar" class="mw-redirect">Bar</a>',
+                       ),
+               );
+       }
+}
index fa228a6..c30c441 100644 (file)
@@ -4,6 +4,32 @@ class ResourceLoaderTest extends MediaWikiTestCase {
 
        protected static $resourceLoaderRegisterModulesHook;
 
+       protected function setUp() {
+               parent::setUp();
+
+               // $wgResourceLoaderLESSFunctions, $wgResourceLoaderLESSImportPaths; $wgResourceLoaderLESSVars;
+
+               $this->setMwGlobals( array(
+                       'wgResourceLoaderLESSFunctions' => array(
+                               'test-sum' => function ( $frame, $less ) {
+                                       $sum = 0;
+                                       foreach ( $frame[2] as $arg ) {
+                                               $sum += (int)$arg[1];
+                                       }
+                                       return $sum;
+                               },
+                       ),
+                       'wgResourceLoaderLESSImportPaths' => array(
+                               dirname( __DIR__ ) . '/data/less/common',
+                       ),
+                       'wgResourceLoaderLESSVars' => array(
+                               'foo'  => '2px',
+                               'Foo' => '#eeeeee',
+                               'bar' => 5,
+                       ),
+               ) );
+       }
+
        /* Hook Methods */
 
        /**
@@ -22,6 +48,14 @@ class ResourceLoaderTest extends MediaWikiTestCase {
                );
        }
 
+       public static function provideResourceLoaderContext() {
+               $resourceLoader = new ResourceLoader();
+               $request = new FauxRequest();
+               return array(
+                       array( new ResourceLoaderContext( $resourceLoader, $request ) ),
+               );
+       }
+
        /* Test Methods */
 
        /**
@@ -49,6 +83,20 @@ class ResourceLoaderTest extends MediaWikiTestCase {
                $this->assertEquals( $module, $resourceLoader->getModule( $name ) );
        }
 
+       /**
+        * @dataProvider provideResourceLoaderContext
+        * @covers ResourceLoaderFileModule::compileLessFile
+        */
+       public function testLessFileCompilation( $context ) {
+               $basePath = __DIR__ . '/../data/less/module';
+               $module = new ResourceLoaderFileModule( array(
+                       'localBasePath' => $basePath,
+                       'styles' => array( 'styles.less' ),
+               ) );
+               $styles = $module->getStyles( $context );
+               $this->assertStringEqualsFile( $basePath . '/styles.css', $styles['all'] );
+       }
+
        /**
         * @dataProvider providePackedModules
         */
index 842e2fc..94ba3a7 100644 (file)
@@ -67,32 +67,35 @@ class StringUtilsTest extends MediaWikiTestCase {
                        array( $PASS, 'Some ASCII' ),
                        array( $PASS, "Euro sign €" ),
 
-                       # First possible sequences
+                       // First possible sequences
                        array( $PASS, "\x00" ),
                        array( $PASS, "\xc2\x80" ),
                        array( $PASS, "\xe0\xa0\x80" ),
                        array( $PASS, "\xf0\x90\x80\x80" ),
-                       array( $PASS, "\xf8\x88\x80\x80\x80" ),
-                       array( $PASS, "\xfc\x84\x80\x80\x80\x80" ),
+                       array( $FAIL, "\xf8\x88\x80\x80\x80" ),
+                       array( $FAIL, "\xfc\x84\x80\x80\x80\x80" ),
 
-                       # Last possible sequence
+                       // Last possible sequence
                        array( $PASS, "\x7f" ),
                        array( $PASS, "\xdf\xbf" ),
                        array( $PASS, "\xef\xbf\xbf" ),
-                       array( $PASS, "\xf7\xbf\xbf\xbf" ),
-                       array( $PASS, "\xfb\xbf\xbf\xbf\xbf" ),
+                       array( $FAIL, "\xf7\xbf\xbf\xbf" ), // U+1FFFFF
+                       array( $FAIL, "\xfb\xbf\xbf\xbf\xbf" ),
                        array( $FAIL, "\xfd\xbf\xbf\xbf\xbf\xbf" ),
 
-                       # boundaries:
+                       // Boundaries
                        array( $PASS, "\xed\x9f\xbf" ),
                        array( $PASS, "\xee\x80\x80" ),
                        array( $PASS, "\xef\xbf\xbd" ),
-                       array( $PASS, "\xf4\x8f\xbf\xbf" ),
-                       array( $PASS, "\xf4\x90\x80\x80" ),
+                       array( $PASS, "\xf2\x80\x80\x80" ),
+                       array( $PASS, "\xf3\xbf\xbf\xbf" ), // U+FFFFF
+                       array( $PASS, "\xf4\x80\x80\x80" ), // U+100000
+                       array( $PASS, "\xf4\x8f\xbf\xbf" ), // U+10FFFF
+                       array( $FAIL, "\xf4\x90\x80\x80" ), // U+110000
 
-                       # Malformed
+                       // Malformed
                        array( $FAIL, "\x80" ),
-                       array( $FAIL, "\xBF" ),
+                       array( $FAIL, "\xbf" ),
                        array( $FAIL, "\x80\xbf" ),
                        array( $FAIL, "\x80\xbf\x80" ),
                        array( $FAIL, "\x80\xbf\x80\xbf" ),
@@ -100,7 +103,7 @@ class StringUtilsTest extends MediaWikiTestCase {
                        array( $FAIL, "\x80\xbf\x80\xbf\x80\xbf" ),
                        array( $FAIL, "\x80\xbf\x80\xbf\x80\xbf\x80" ),
 
-                       # last byte missing
+                       // Last byte missing
                        array( $FAIL, "\xc0" ),
                        array( $FAIL, "\xe0\x80" ),
                        array( $FAIL, "\xf0\x80\x80" ),
@@ -112,31 +115,42 @@ class StringUtilsTest extends MediaWikiTestCase {
                        array( $FAIL, "\xfb\xbf\xbf\xbf" ),
                        array( $FAIL, "\xfd\xbf\xbf\xbf\xbf" ),
 
-                       # impossible bytes
+                       // Extra continuation byte
+                       array( $FAIL, "e\xaf" ),
+                       array( $FAIL, "\xc3\x89\xaf" ),
+                       array( $FAIL, "\xef\xbc\xa5\xaf" ),
+                       array( $FAIL, "\xf0\x9d\x99\xb4\xaf" ),
+
+                       // Impossible bytes
                        array( $FAIL, "\xfe" ),
                        array( $FAIL, "\xff" ),
                        array( $FAIL, "\xfe\xfe\xff\xff" ),
 
-                       /*
-                       # The PHP implementation does not handle characters
-                       # being represented in a form which is too long :(
-
-                       # overlong sequences
+                       // Overlong sequences
                        array( $FAIL, "\xc0\xaf" ),
+                       array( $FAIL, "\xc1\xaf" ),
                        array( $FAIL, "\xe0\x80\xaf" ),
                        array( $FAIL, "\xf0\x80\x80\xaf" ),
                        array( $FAIL, "\xf8\x80\x80\x80\xaf" ),
                        array( $FAIL, "\xfc\x80\x80\x80\x80\xaf" ),
 
-                       # Maximum overlong sequences
+                       // Maximum overlong sequences
                        array( $FAIL, "\xc1\xbf" ),
                        array( $FAIL, "\xe0\x9f\xbf" ),
-                       array( $FAIL, "\xf0\x8F\xbf\xbf" ),
+                       array( $FAIL, "\xf0\x8f\xbf\xbf" ),
                        array( $FAIL, "\xf8\x87\xbf\xbf" ),
                        array( $FAIL, "\xfc\x83\xbf\xbf\xbf\xbf" ),
-                       */
 
-                       # non characters
+                       // Surrogates
+                       array( $PASS, "\xed\x9f\xbf" ), // U+D799
+                       array( $PASS, "\xee\x80\x80" ), // U+E000
+                       array( $FAIL, "\xed\xa0\x80" ), // U+D800
+                       array( $FAIL, "\xed\xaf\xbf" ), // U+DBFF
+                       array( $FAIL, "\xed\xb0\x80" ), // U+DC00
+                       array( $FAIL, "\xed\xbf\xbf" ), // U+DFFF
+                       array( $FAIL, "\xed\xa0\x80\xed\xb0\x80" ), // U+D800 U+DC00
+
+                       // Noncharacters
                        array( $PASS, "\xef\xbf\xbe" ),
                        array( $PASS, "\xef\xbf\xbf" ),
                );
index 07dcb7d..3668046 100644 (file)
@@ -200,4 +200,101 @@ class TimestampTest extends MediaWikiLangTestCase {
                        ),
                );
        }
+
+       /**
+        * @test
+        * @dataProvider provideRelativeTimestampTests
+        */
+       public function testRelativeTimestamp(
+               $tsTime, // The timestamp to format
+               $currentTime, // The time to consider "now"
+               $timeCorrection, // The time offset to use
+               $dateFormat, // The date preference to use
+               $expectedOutput, // The expected output
+               $desc // Description
+       ) {
+               $user = $this->getMock( 'User' );
+               $user->expects( $this->any() )
+                       ->method( 'getOption' )
+                       ->with( 'timecorrection' )
+                       ->will( $this->returnValue( $timeCorrection ) );
+
+               $tsTime = new MWTimestamp( $tsTime );
+               $currentTime = new MWTimestamp( $currentTime );
+
+               $this->assertEquals(
+                       $expectedOutput,
+                       $tsTime->getRelativeTimestamp( $currentTime, $user ),
+                       $desc
+               );
+       }
+
+       public static function provideRelativeTimestampTests() {
+               return array(
+                       array(
+                               '20111231170000',
+                               '20120101000000',
+                               'Offset|0',
+                               'mdy',
+                               '7 hours ago',
+                               '"Yesterday" across years',
+                       ),
+                       array(
+                               '20120717190900',
+                               '20120717190929',
+                               'Offset|0',
+                               'mdy',
+                               '29 seconds ago',
+                               '"Just now"',
+                       ),
+                       array(
+                               '20120717190900',
+                               '20120717191530',
+                               'Offset|0',
+                               'mdy',
+                               '6 minutes and 30 seconds ago',
+                               'Combination of multiple units',
+                       ),
+                       array(
+                               '20121006173100',
+                               '20121006173200',
+                               'Offset|0',
+                               'mdy',
+                               '1 minute ago',
+                               '"1 minute ago"',
+                       ),
+                       array(
+                               '19910130151500',
+                               '20120716193700',
+                               'Offset|0',
+                               'mdy',
+                               '2 decades, 1 year, 168 days, 2 hours, 8 minutes and 48 seconds ago',
+                               'A long time ago',
+                       ),
+                       array(
+                               '20120101050000',
+                               '20120101080000',
+                               'Offset|-360',
+                               'mdy',
+                               '3 hours ago',
+                               '"Yesterday" across years with time correction',
+                       ),
+                       array(
+                               '20120714184300',
+                               '20120716184300',
+                               'Offset|-420',
+                               'mdy',
+                               '2 days ago',
+                               'Recent weekday with time correction',
+                       ),
+                       array(
+                               '20120714184300',
+                               '20120715040000',
+                               'Offset|-420',
+                               'mdy',
+                               '9 hours and 17 minutes ago',
+                               'Today at another time with time correction',
+                       ),
+               );
+       }
 }
index 33bd8d6..da663c4 100644 (file)
@@ -32,6 +32,150 @@ class TitleTest extends MediaWikiTestCase {
                }
        }
 
+       /**
+        * See also mediawiki.Title.test.js
+        */
+       function testSecureAndSplit() {
+               // Valid
+               foreach ( array(
+                       'Sandbox',
+                       'A "B"',
+                       'A \'B\'',
+                       '.com',
+                       '~',
+                       '"',
+                       '\'',
+                       'Talk:Sandbox',
+                       'Talk:Foo:Sandbox',
+                       'File:Example.svg',
+                       'File_talk:Example.svg',
+                       'Foo/.../Sandbox',
+                       'Sandbox/...',
+                       'A~~',
+                       // Length is 256 total, but only title part matters
+                       'Category:' . str_repeat( 'x', 248 ),
+                       str_repeat( 'x', 252 )
+               ) as $text ) {
+                       $this->assertInstanceOf( 'Title', Title::newFromText( $text ), "Valid: $text" );
+               }
+
+               // Invalid
+               foreach ( array(
+                       '',
+                       '__  __',
+                       '  __  ',
+                       // Bad characters forbidden regardless of wgLegalTitleChars
+                       'A [ B',
+                       'A ] B',
+                       'A { B',
+                       'A } B',
+                       'A < B',
+                       'A > B',
+                       'A | B',
+                       // URL encoding
+                       'A%20B',
+                       'A%23B',
+                       'A%2523B',
+                       // XML/HTML character entity references
+                       // Note: Commented out because they are not marked invalid by the PHP test as
+                       // Title::newFromText runs Sanitizer::decodeCharReferencesAndNormalize first.
+                       //'A &eacute; B',
+                       //'A &#233; B',
+                       //'A &#x00E9; B',
+                       // Subject of NS_TALK does not roundtrip to NS_MAIN
+                       'Talk:File:Example.svg',
+                       // Directory navigation
+                       '.',
+                       '..',
+                       './Sandbox',
+                       '../Sandbox',
+                       'Foo/./Sandbox',
+                       'Foo/../Sandbox',
+                       'Sandbox/.',
+                       'Sandbox/..',
+                       // Tilde
+                       'A ~~~ Name',
+                       'A ~~~~ Signature',
+                       'A ~~~~~ Timestamp',
+                       str_repeat( 'x', 256 ),
+                       // Namespace prefix without actual title
+                       // ':', // bug 54044
+                       'Talk:',
+                       'Category: ',
+                       'Category: #bar'
+               ) as $text ) {
+                       $this->assertNull( Title::newFromText( $text ), "Invalid: $text" );
+               }
+       }
+
+       public static function provideConvertByteClassToUnicodeClass() {
+               return array(
+                       array(
+                               ' %!"$&\'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+',
+                               ' %!"$&\'()*,\\-./0-9:;=?@A-Z\\\\\\^_`a-z~+\\u0080-\\uFFFF',
+                       ),
+                       array(
+                               'QWERTYf-\\xFF+',
+                               'QWERTYf-\\x7F+\\u0080-\\uFFFF',
+                       ),
+                       array(
+                               'QWERTY\\x66-\\xFD+',
+                               'QWERTYf-\\x7F+\\u0080-\\uFFFF',
+                       ),
+                       array(
+                               'QWERTYf-y+',
+                               'QWERTYf-y+',
+                       ),
+                       array(
+                               'QWERTYf-\\x80+',
+                               'QWERTYf-\\x7F+\\u0080-\\uFFFF',
+                       ),
+                       array(
+                               'QWERTY\\x66-\\x80+\\x23',
+                               'QWERTYf-\\x7F+#\\u0080-\\uFFFF',
+                       ),
+                       array(
+                               'QWERTY\\x66-\\x80+\\xD3',
+                               'QWERTYf-\\x7F+\\u0080-\\uFFFF',
+                       ),
+                       array(
+                               '\\\\\\x99',
+                               '\\\\\\u0080-\\uFFFF',
+                       ),
+                       array(
+                               '-\\x99',
+                               '\\-\\u0080-\\uFFFF',
+                       ),
+                       array(
+                               'QWERTY\\-\\x99',
+                               'QWERTY\\-\\u0080-\\uFFFF',
+                       ),
+                       array(
+                               '\\\\x99',
+                               '\\\\x99',
+                       ),
+                       array(
+                               'A-\\x9F',
+                               'A-\\x7F\\u0080-\\uFFFF',
+                       ),
+                       array(
+                               '\\x66-\\x77QWERTY\\x88-\\x91FXZ',
+                               'f-wQWERTYFXZ\\u0080-\\uFFFF',
+                       ),
+                       array(
+                               '\\x66-\\x99QWERTY\\xAA-\\xEEFXZ',
+                               'f-\\x7FQWERTYFXZ\\u0080-\\uFFFF',
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideConvertByteClassToUnicodeClass
+        */
+       function testConvertByteClassToUnicodeClass( $byteClass, $unicodeClass ) {
+               $this->assertEquals( $unicodeClass, Title::convertByteClassToUnicodeClass( $byteClass ) );
+       }
+
        /**
         * @dataProvider provideBug31100
         */
index e680af6..b0efd19 100644 (file)
@@ -193,10 +193,6 @@ class ApiEditPageTest extends ApiTestCase {
                $this->assertEquals( $expected, $text );
        }
 
-       function testEditSection() {
-               $this->markTestIncomplete( "not yet implemented" );
-       }
-
        /**
         * Test action=edit&section=new
         * Run it twice so we test adding a new section on a
@@ -236,10 +232,6 @@ class ApiEditPageTest extends ApiTestCase {
                $this->assertEquals( $text, "== header ==\n\ntest\n\n== header ==\n\ntest" );
        }
 
-       function testUndo() {
-               $this->markTestIncomplete( "not yet implemented" );
-       }
-
        function testEditConflict() {
                static $count = 0;
                $count++;
index 78bb151..8253989 100644 (file)
@@ -145,23 +145,4 @@ class ApiWatchTest extends ApiTestCase {
                        }
                }
        }
-
-       /**
-        */
-       function testWatchDelete() {
-               $tokens = $this->getTokens();
-
-               $data = $this->doApiRequest( array(
-                       'action' => 'delete',
-                       'token' => $tokens['deletetoken'],
-                       'title' => 'Help:UTPage' ) );
-               $this->assertArrayHasKey( 'delete', $data[0] );
-               $this->assertArrayHasKey( 'title', $data[0]['delete'] );
-
-               $this->doApiRequest( array(
-                       'action' => 'query',
-                       'list' => 'watchlist' ) );
-
-               $this->markTestIncomplete( 'This test needs to verify the deleted article was added to the users watchlist' );
-       }
 }
index c9f5f5c..a3ef55a 100644 (file)
@@ -84,19 +84,29 @@ class DatabaseTest extends MediaWikiTestCase {
                        $quote = '';
                } elseif ( $this->db->getType() === 'mysql' ) {
                        $quote = '`';
+               } elseif ( $this->db->getType() === 'oracle' ) {
+                       $quote = '/*Q*/';
                } else {
                        $quote = '"';
                }
 
                if ( $database !== null ) {
-                       $database = $quote . $database . $quote . '.';
+                       if ( $this->db->getType() === 'oracle' ) {
+                               $database = $quote . $database . '.';
+                       } else {
+                               $database = $quote . $database . $quote . '.';
+                       }
                }
 
                if ( $prefix === null ) {
                        $prefix = $this->dbPrefix();
                }
 
-               return $database . $quote . $prefix . $table . $quote;
+               if ( $this->db->getType() === 'oracle' ) {
+                       return strtoupper($database . $quote . $prefix . $table);
+               } else {
+                       return $database . $quote . $prefix . $table . $quote;
+               }
        }
 
        function testTableNameLocal() {
index 342f7d5..ea87ede 100644 (file)
@@ -27,6 +27,7 @@ class InstallDocFormatterTest extends MediaWikiTestCase {
                        array( 'Install &lt;tag>', 'Install <tag>', 'Escaping <' ),
                        array( 'Install &#123;&#123;template}}', 'Install {{template}}', 'Escaping [[' ),
                        array( 'Install &#91;&#91;page]]', 'Install [[page]]', 'Escaping {{' ),
+                       array( 'Install &#95;&#95;TOC&#95;&#95;', 'Install __TOC__', 'Escaping __' ),
                        array( 'Install ', "Install \r", 'Removing \r' ),
 
                        # Transform \t{1,2} into :{1,2}
index ef263c4..eb024ab 100644 (file)
@@ -19,10 +19,8 @@ class FormatJsonTest extends MediaWikiTestCase {
                // 4 space indent, no trailing whitespace, no trailing linefeed
                $json = '{
     "emptyObject": {
-
     },
     "emptyArray": [
-
     ],
     "string": "foobar\\\\",
     "filledArray": [
@@ -35,7 +33,7 @@ class FormatJsonTest extends MediaWikiTestCase {
 }';
 
                $json = str_replace( "\r", '', $json ); // Windows compat
-               $this->assertSame( $json, FormatJson::encode( $obj, true ) );
+               $this->assertSame( $json, str_replace("\n\n", "\n", FormatJson::encode( $obj, true ) ));
        }
 
        public static function provideEncodeDefault() {
index d80a571..1c898f0 100644 (file)
@@ -196,6 +196,28 @@ class CSSJanusTest extends MediaWikiTestCase {
                                '.foo { padding: 1px; }'
                        ),
 
+                       // text-shadow and box-shadow
+                       array(
+                               '.foo { box-shadow: -6px 3px 8px 5px rgba(0, 0, 0, 0.25); }',
+                               '.foo { box-shadow: 6px 3px 8px 5px rgba(0, 0, 0, 0.25); }',
+                       ),
+                       array(
+                               '.foo { box-shadow: inset -6px 3px 8px 5px rgba(0, 0, 0, 0.25); }',
+                               '.foo { box-shadow: inset 6px 3px 8px 5px rgba(0, 0, 0, 0.25); }',
+                       ),
+                       array(
+                               '.foo { text-shadow: orange 2px 0; }',
+                               '.foo { text-shadow: orange -2px 0; }',
+                       ),
+                       array(
+                               '.foo { text-shadow: 2px 0 orange; }',
+                               '.foo { text-shadow: -2px 0 orange; }',
+                       ),
+                       array(
+                               // Don't mangle zeroes
+                               '.foo { text-shadow: orange 0 2px; }'
+                       ),
+
                        // Direction
                        // Note: This differs from the Python implementation,
                        // see also CSSJanus::fixDirection for more info.
index 73c85f0..ab8e77b 100644 (file)
@@ -37,7 +37,7 @@ class NewParserTest extends MediaWikiTestCase {
        }
 
        protected function setUp() {
-               global $wgNamespaceAliases;
+               global $wgNamespaceAliases, $wgContLang;
                global $wgHooks, $IP;
 
                parent::setUp();
@@ -132,6 +132,9 @@ class NewParserTest extends MediaWikiTestCase {
                $tmpHooks['ParserTestParser'][] = 'ParserTestParserHook::setup';
                $tmpHooks['ParserGetVariableValueTs'][] = 'ParserTest::getFakeTimestamp';
                $tmpGlobals['wgHooks'] = $tmpHooks;
+               # add a namespace shadowing a interwiki link, to test
+               # proper precedence when resolving links. (bug 51680)
+               $tmpGlobals['wgExtraNamespaces'] = array( 100 => 'MemoryAlpha' );
 
                $this->setMwGlobals( $tmpGlobals );
 
@@ -140,10 +143,13 @@ class NewParserTest extends MediaWikiTestCase {
 
                $wgNamespaceAliases['Image'] = NS_FILE;
                $wgNamespaceAliases['Image_talk'] = NS_FILE_TALK;
+
+               MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
+               $wgContLang->resetNamespaces(); # reset namespace cache
        }
 
        protected function tearDown() {
-               global $wgNamespaceAliases;
+               global $wgNamespaceAliases, $wgContLang;
 
                $wgNamespaceAliases['Image'] = $this->savedWeirdGlobals['image_alias'];
                $wgNamespaceAliases['Image_talk'] = $this->savedWeirdGlobals['image_talk_alias'];
@@ -159,6 +165,9 @@ class NewParserTest extends MediaWikiTestCase {
                MessageCache::destroyInstance();
 
                parent::tearDown();
+
+               MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
+               $wgContLang->resetNamespaces(); # reset namespace cache
        }
 
        public static function tearDownAfterClass() {
index 4274335..03bb898 100644 (file)
@@ -3,16 +3,7 @@
  * Helping class to run tests using a clean language instance.
  *
  * This is intended for the MediaWiki language class tests under
- * tests/phpunit/languages. You simply need to extends this test
- * and set it up with a language code using setUpBeforeClass:
- *
- * @par Setting up a language:
- * @code
- * class LanguageFooTest extends LanguageClassesTestCase {
- *   public static function setUpBeforeClass() {
- *     self::setLang( 'Foo' );
- *   }
- * @endcode
+ * tests/phpunit/languages.
  *
  * Before each tests, a new language object is build which you
  * can retrieve in your test using the $this->getLang() method:
  * @endcode
  */
 abstract class LanguageClassesTestCase extends MediaWikiTestCase {
-
-       /**
-        * Regex used to find out the language code out of the class name
-        * used by setUpBeforeClass
-        */
-       private static $reExtractLangFromClass = '/Language(.*)Test/';
-
-       /**
-        * Hold the language code we are going to use. This is extracted
-        * directly from the extending class.
-        */
-       private static $LanguageClassCode;
-
        /**
         * Internal language object
         *
@@ -57,9 +35,16 @@ abstract class LanguageClassesTestCase extends MediaWikiTestCase {
         */
        private $languageObject;
 
-       public static function setUpBeforeClass() {
-               $found = preg_match( self::$reExtractLangFromClass,
-                       get_called_class(), $m );
+       protected function getLang() {
+               return $this->languageObject;
+       }
+
+       /**
+        * Create a new language object before each test.
+        */
+       protected function setUp() {
+               parent::setUp();
+               $found = preg_match( '/Language(.+)Test/', get_called_class(), $m );
                if ( $found ) {
                        # Normalize language code since classes uses underscores
                        $m[1] = str_replace( '_', '-', $m[1] );
@@ -72,20 +57,7 @@ abstract class LanguageClassesTestCase extends MediaWikiTestCase {
                        );
                }
                // TODO: validate $m[1] which should be a valid language code
-               self::$LanguageClassCode = $m[1];
-       }
-
-       protected function getLang() {
-               return $this->languageObject;
-       }
-
-       /**
-        * Create a new language object before each test.
-        */
-       protected function setUp() {
-               parent::setUp();
-               $this->languageObject = Language::factory(
-                       self::$LanguageClassCode );
+               $this->languageObject = Language::factory( $m[1] );
        }
 
        /**
index 78a5153..163314e 100644 (file)
@@ -60,11 +60,14 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                if ( $gzipped_contents === false ) {
                        $this->fail( "Could not get contents of $fname" );
                }
-               // We resort to use gzinflate instead of gzdecode, as gzdecode
-               // need not be available
-               $contents = gzinflate( substr( $gzipped_contents, 10, -8 ) );
-               $this->assertEquals( strlen( $contents ),
-                       file_put_contents( $fname, $contents ), "# bytes written" );
+
+               $contents = gzdecode( $gzipped_contents );
+
+               $this->assertEquals(
+                       strlen( $contents ),
+                       file_put_contents( $fname, $contents ),
+                       '# bytes written'
+               );
        }
 
        /**
index 596c57c..22d2af1 100644 (file)
                description: 'Pass the limit and a callback as input filter',
                $input: $( '<input type="text"/>' )
                        .byteLimit( 6, function ( val ) {
-                               // Invalid title
-                               if ( val === '' ) {
-                                       return '';
-                               }
-
+                               var title = mw.Title.newFromText( String( val ) );
                                // Return without namespace prefix
-                               return new mw.Title( String( val ) ).getMain();
+                               return title ? title.getMain() : '';
                        } ),
                sample: 'User:Sample',
                expected: 'User:Sample'
                $input: $( '<input type="text"/>' )
                        .attr( 'maxlength', '6' )
                        .byteLimit( function ( val ) {
-                               // Invalid title
-                               if ( val === '' ) {
-                                       return '';
-                               }
-
+                               var title = mw.Title.newFromText( String( val ) );
                                // Return without namespace prefix
-                               return new mw.Title( String( val ) ).getMain();
+                               return title ? title.getMain() : '';
                        } ),
                sample: 'User:Sample',
                expected: 'User:Sample'
                description: 'Pass the limit and a callback as input filter',
                $input: $( '<input type="text"/>' )
                        .byteLimit( 6, function ( val ) {
-                               // Invalid title
-                               if ( val === '' ) {
-                                       return '';
-                               }
-
+                               var title = mw.Title.newFromText( String( val ) );
                                // Return without namespace prefix
-                               return new mw.Title( String( val ) ).getMain();
+                               return title ? title.getMain() : '';
                        } ),
                sample: 'User:Example',
                // The callback alters the value to be used to calculeate
index 30a31ef..e6bbe1e 100644 (file)
@@ -1,4 +1,4 @@
-( function ( mw ) {
+( function ( mw, $ ) {
        // mw.Title relies on these three config vars
        // Restore them after each test run
        var config = {
                        antarctic_waterfowl: 100
                },
                wgCaseSensitiveNamespaces: []
+       },
+       repeat = function ( input, multiplier ) {
+               return new Array( multiplier + 1 ).join( input );
+       },
+       cases = {
+               // See also TitleTest.php#testSecureAndSplit
+               valid: [
+                       'Sandbox',
+                       'A "B"',
+                       'A \'B\'',
+                       '.com',
+                       '~',
+                       '"',
+                       '\'',
+                       'Talk:Sandbox',
+                       'Talk:Foo:Sandbox',
+                       'File:Example.svg',
+                       'File_talk:Example.svg',
+                       'Foo/.../Sandbox',
+                       'Sandbox/...',
+                       'A~~',
+                       // Length is 256 total, but only title part matters
+                       'Category:' + repeat( 'x', 248 ),
+                       repeat( 'x', 252 )
+               ],
+               invalid: [
+                       '',
+                       '__  __',
+                       '  __  ',
+                       // Bad characters forbidden regardless of wgLegalTitleChars
+                       'A [ B',
+                       'A ] B',
+                       'A { B',
+                       'A } B',
+                       'A < B',
+                       'A > B',
+                       'A | B',
+                       // URL encoding
+                       'A%20B',
+                       'A%23B',
+                       'A%2523B',
+                       // XML/HTML character entity references
+                       // Note: The ones with # are commented out as those are interpreted as fragment and
+                       // as such end up being valid.
+                       'A &eacute; B',
+                       //'A &#233; B',
+                       //'A &#x00E9; B',
+                       // Subject of NS_TALK does not roundtrip to NS_MAIN
+                       'Talk:File:Example.svg',
+                       // Directory navigation
+                       '.',
+                       '..',
+                       './Sandbox',
+                       '../Sandbox',
+                       'Foo/./Sandbox',
+                       'Foo/../Sandbox',
+                       'Sandbox/.',
+                       'Sandbox/..',
+                       // Tilde
+                       'A ~~~ Name',
+                       'A ~~~~ Signature',
+                       'A ~~~~~ Timestamp',
+                       repeat( 'x', 256 ),
+                       // Extension separation is a js invention, for length
+                       // purposes it is part of the title
+                       repeat( 'x', 252 ) + '.json',
+                       // Namespace prefix without actual title
+                       // ':', // bug 54044
+                       'Talk:',
+                       'Category: ',
+                       'Category: #bar'
+               ]
        };
 
        QUnit.module( 'mediawiki.Title', QUnit.newMwEnvironment( { config: config } ) );
 
-       QUnit.test( 'Transformation', 8, function ( assert ) {
+       QUnit.test( 'constructor', cases.invalid.length, function ( assert ) {
+               var i, title;
+               for ( i = 0; i < cases.valid.length; i++ ) {
+                       title = new mw.Title( cases.valid[i] );
+               }
+               for ( i = 0; i < cases.invalid.length; i++ ) {
+                       /*jshint loopfunc:true */
+                       title = cases.invalid[i];
+                       assert.throws( function () {
+                               return new mw.Title( title );
+                       }, cases.invalid[i] );
+               }
+       } );
+
+       QUnit.test( 'newFromText', cases.valid.length + cases.invalid.length, function ( assert ) {
+               var i;
+               for ( i = 0; i < cases.valid.length; i++ ) {
+                       assert.equal(
+                               $.type( mw.Title.newFromText( cases.valid[i] ) ),
+                               'object',
+                               cases.valid[i]
+                       );
+               }
+               for ( i = 0; i < cases.invalid.length; i++ ) {
+                       assert.equal(
+                               $.type( mw.Title.newFromText( cases.invalid[i] ) ),
+                               'null',
+                               cases.invalid[i]
+                       );
+               }
+       } );
+
+       QUnit.test( 'Basic parsing', 12, function ( assert ) {
+               var title;
+               title = new mw.Title( 'File:Foo_bar.JPG' );
+
+               assert.equal( title.getNamespaceId(), 6 );
+               assert.equal( title.getNamespacePrefix(), 'File:' );
+               assert.equal( title.getName(), 'Foo_bar' );
+               assert.equal( title.getNameText(), 'Foo bar' );
+               assert.equal( title.getExtension(), 'JPG' );
+               assert.equal( title.getDotExtension(), '.JPG' );
+               assert.equal( title.getMain(), 'Foo_bar.JPG' );
+               assert.equal( title.getMainText(), 'Foo bar.JPG' );
+               assert.equal( title.getPrefixedDb(), 'File:Foo_bar.JPG' );
+               assert.equal( title.getPrefixedText(), 'File:Foo bar.JPG' );
+
+               title = new mw.Title( 'Foo#bar' );
+               assert.equal( title.getPrefixedText(), 'Foo' );
+               assert.equal( title.getFragment(), 'bar' );
+       } );
+
+       QUnit.test( 'Transformation', 11, function ( assert ) {
                var title;
 
                title = new mw.Title( 'File:quux pif.jpg' );
-               assert.equal( title.getName(), 'Quux_pif' );
+               assert.equal( title.getNameText(), 'Quux pif', 'First character of title' );
 
                title = new mw.Title( 'File:Glarg_foo_glang.jpg' );
-               assert.equal( title.getNameText(), 'Glarg foo glang' );
+               assert.equal( title.getNameText(), 'Glarg foo glang', 'Underscores' );
 
                title = new mw.Title( 'User:ABC.DEF' );
-               assert.equal( title.toText(), 'User:ABC.DEF' );
-               assert.equal( title.getNamespaceId(), 2 );
-               assert.equal( title.getNamespacePrefix(), 'User:' );
+               assert.equal( title.toText(), 'User:ABC.DEF', 'Round trip text' );
+               assert.equal( title.getNamespaceId(), 2, 'Parse canonical namespace prefix' );
+
+               title = new mw.Title( 'Image:quux pix.jpg' );
+               assert.equal( title.getNamespacePrefix(), 'File:', 'Transform alias to canonical namespace' );
 
                title = new mw.Title( 'uSEr:hAshAr' );
                assert.equal( title.toText(), 'User:HAshAr' );
-               assert.equal( title.getNamespaceId(), 2 );
+               assert.equal( title.getNamespaceId(), 2, 'Case-insensitive namespace prefix' );
 
-               title = new mw.Title( '   MediaWiki:  Foo   bar   .js   ' );
-               // Don't ask why, it's the way the backend works. One space is kept of each set
-               assert.equal( title.getName(), 'Foo_bar_.js', 'Merge multiple spaces to a single space.' );
-       } );
+               // Don't ask why, it's the way the backend works. One space is kept of each set.
+               title = new mw.Title( 'Foo  __  \t __ bar' );
+               assert.equal( title.getMain(), 'Foo_bar', 'Merge multiple types of whitespace/underscores into a single underscore' );
 
-       QUnit.test( 'Main text for filename', 8, function ( assert ) {
-               var title = new mw.Title( 'File:foo_bar.JPG' );
+               // Regression test: Previously it would only detect an extension if there is no space after it
+               title = new mw.Title( 'Example.js  ' );
+               assert.equal( title.getExtension(), 'js', 'Space after an extension is stripped' );
 
-               assert.equal( title.getNamespaceId(), 6 );
-               assert.equal( title.getNamespacePrefix(), 'File:' );
-               assert.equal( title.getName(), 'Foo_bar' );
-               assert.equal( title.getNameText(), 'Foo bar' );
-               assert.equal( title.getMain(), 'Foo_bar.JPG' );
-               assert.equal( title.getMainText(), 'Foo bar.JPG' );
-               assert.equal( title.getExtension(), 'JPG' );
-               assert.equal( title.getDotExtension(), '.JPG' );
+               title = new mw.Title( 'Example#foo' );
+               assert.equal( title.getFragment(), 'foo', 'Fragment' );
+
+               title = new mw.Title( 'Example#_foo_bar baz_' );
+               assert.equal( title.getFragment(), ' foo bar baz', 'Fragment' );
        } );
 
-       QUnit.test( 'Namespace detection and conversion', 6, function ( assert ) {
+       QUnit.test( 'Namespace detection and conversion', 10, function ( assert ) {
                var title;
 
+               title = new mw.Title( 'File:User:Example' );
+               assert.equal( title.getNamespaceId(), 6, 'Titles can contain namespace prefixes, which are otherwise ignored' );
+
+               title = new mw.Title( 'Example', 6 );
+               assert.equal( title.getNamespaceId(), 6, 'Default namespace passed is used' );
+
+               title = new mw.Title( 'User:Example', 6 );
+               assert.equal( title.getNamespaceId(), 2, 'Included namespace prefix overrides the given default' );
+
+               title = new mw.Title( ':Example', 6 );
+               assert.equal( title.getNamespaceId(), 0, 'Colon forces main namespace' );
+
                title = new mw.Title( 'something.PDF', 6 );
                assert.equal( title.toString(), 'File:Something.PDF' );
 
                assert.equal( title.getUrl(), '/wiki/User_talk:John_Doe', 'Escaping in title and namespace for urls' );
        } );
 
-}( mediaWiki ) );
+}( mediaWiki, jQuery ) );
index e867369..08adb93 100644 (file)
@@ -17,7 +17,7 @@
                assert.equal( mw.util.wikiUrlencode( 'Test:A & B/Here' ), 'Test:A_%26_B/Here' );
        } );
 
-       QUnit.test( 'wikiGetlink', 3, function ( assert ) {
+       QUnit.test( 'wikiGetlink', 4, function ( assert ) {
                // Not part of startUp module
                mw.config.set( 'wgArticlePath', '/wiki/$1' );
                mw.config.set( 'wgPageName', 'Foobar' );
 
                href = mw.util.wikiGetlink();
                assert.equal( href, '/wiki/Foobar', 'Default title; Get link for current page ("Foobar")' );
+
+               href = mw.util.wikiGetlink( 'Sandbox', { action: 'edit' } );
+               assert.equal( href, '/wiki/Sandbox?action=edit',
+                       'Simple title with query string; Get link for "Sandbox" with action=edit' );
        } );
 
        QUnit.test( 'wikiScript', 4, function ( assert ) {
@@ -91,8 +95,8 @@
                        '</div>' +
                        '<ul><li></li></ul>' +
                        '</div>';
-               $( tocHtml ).appendTo( '#qunit-fixture' ),
-                       $toggleLink = $( '#togglelink' );
+               $( tocHtml ).appendTo( '#qunit-fixture' );
+               $toggleLink = $( '#togglelink' );
 
                assert.strictEqual( $toggleLink.length, 1, 'Toggle link is appended to the page.' );
 
index 2b68927..4ffefb6 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -76,7 +76,7 @@ function wfThumbHandle404() {
                return;
        }
 
-       $params = wfExtractThumbParams( $matches['title'] ); // basic wiki URL param extracting
+       $params = wfExtractThumbRequestInfo( $matches['title'] ); // basic wiki URL param extracting
        if ( $params == null ) {
                wfThumbError( 400, 'The specified thumbnail parameters are not recognized.' );
                return;
@@ -88,7 +88,14 @@ function wfThumbHandle404() {
 /**
  * Stream a thumbnail specified by parameters
  *
- * @param $params Array
+ * @param $params Array List of thumbnailing parameters. In addition to parameters
+ *  passed to the MediaHandler, this may also includes the keys:
+ *   f (for filename), archived (if archived file), temp (if temp file),
+ *   w (alias for width), p (alias for page), r (ignored; historical),
+ *   rel404 (path for render on 404 to verify hash path correct),
+ *   thumbName (thumbnail name to potentially extract more parameters from
+ *   e.g. 'lossy-page1-120px-Foo.tiff' would add page, lossy and width
+ *   to the parameters)
  * @return void
  */
 function wfStreamThumb( array $params ) {
@@ -99,17 +106,6 @@ function wfStreamThumb( array $params ) {
        $headers = array(); // HTTP headers to send
 
        $fileName = isset( $params['f'] ) ? $params['f'] : '';
-       unset( $params['f'] );
-
-       // Backwards compatibility parameters
-       if ( isset( $params['w'] ) ) {
-               $params['width'] = $params['w'];
-               unset( $params['w'] );
-       }
-       if ( isset( $params['p'] ) ) {
-               $params['page'] = $params['p'];
-       }
-       unset( $params['r'] ); // ignore 'r' because we unconditionally pass File::RENDER
 
        // Is this a thumb of an archived file?
        $isOld = ( isset( $params['archived'] ) && $params['archived'] );
@@ -166,25 +162,32 @@ function wfStreamThumb( array $params ) {
                $varyHeader[] = 'Cookie';
        }
 
+       // Do rendering parameters extraction from thumbnail name.
+       if ( isset( $params['thumbName'] ) ) {
+               $params = wfExtractThumbParams( $img, $params );
+       }
+       if ( $params == null ) {
+               wfThumbError( 400, 'The specified thumbnail parameters are not recognized.' );
+               return;
+       }
+
+
        // Check the source file storage path
        if ( !$img->exists() ) {
                $redirectedLocation = false;
                if ( !$isTemp ) {
                        // Check for file redirect
-                       if ( $isOld ) {
-                               // Since redirects are associated with pages, not versions of files,
-                               // we look for the most current version to see if its a redirect.
-                               $possibleRedirFile = RepoGroup::singleton()->getLocalRepo()->findFile( $img->getName() );
-                       } else {
-                               $possibleRedirFile = RepoGroup::singleton()->getLocalRepo()->findFile( $fileName );
-                       }
-                       if ( $possibleRedirFile && !is_null( $possibleRedirFile->getRedirected() ) ) {
-                               $redirTarget = $possibleRedirFile->getName();
+                       // Since redirects are associated with pages, not versions of files,
+                       // we look for the most current version to see if its a redirect.
+                       $possRedirFile = RepoGroup::singleton()->getLocalRepo()->findFile( $img->getName() );
+                       if ( $possRedirFile && !is_null( $possRedirFile->getRedirected() ) ) {
+                               $redirTarget = $possRedirFile->getName();
                                $targetFile = wfLocalFile( Title::makeTitleSafe( NS_FILE, $redirTarget ) );
                                if ( $targetFile->exists() ) {
                                        $newThumbName = $targetFile->thumbName( $params );
                                        if ( $isOld ) {
-                                               $newThumbUrl = $targetFile->getArchiveThumbUrl( $bits[0] . '!' . $targetFile->getName(), $newThumbName );
+                                               $newThumbUrl = $targetFile->getArchiveThumbUrl(
+                                                       $bits[0] . '!' . $targetFile->getName(), $newThumbName );
                                        } else {
                                                $newThumbUrl = $targetFile->getThumbUrl( $newThumbName );
                                        }
@@ -232,6 +235,18 @@ function wfStreamThumb( array $params ) {
                }
        }
 
+       // Backwards compatibility parameters
+       if ( isset( $params['w'] ) ) {
+               $params['width'] = $params['w'];
+               unset( $params['w'] );
+       }
+       if ( isset( $params['p'] ) ) {
+               $params['page'] = $params['p'];
+       }
+       unset( $params['r'] ); // ignore 'r' because we unconditionally pass File::RENDER
+       unset( $params['f'] ); // We're done with 'f' parameter.
+
+
        // Get the normalized thumbnail name from the parameters...
        try {
                $thumbName = $img->thumbName( $params );
@@ -320,13 +335,25 @@ function wfStreamThumb( array $params ) {
 }
 
 /**
- * Extract the required params for thumb.php from the thumbnail request URI.
- * At least 'width' and 'f' should be set if the result is an array.
+ * Convert pathinfo type parameter, into normal request parameters
+ *
+ * So for example, if the request was redirected from
+ * /w/images/thumb/a/ab/Foo.png/120px-Foo.png. The $thumbRel parameter
+ * of this function would be set to "a/ab/Foo.png/120px-Foo.png".
+ * This method is responsible for turning that into an array
+ * with the folowing keys:
+ *  * f => the filename (Foo.png)
+ *  * rel404 => the whole thing (a/ab/Foo.png/120px-Foo.png)
+ *  * archived => 1 (If the request is for an archived thumb)
+ *  * temp => 1 (If the file is in the "temporary" zone)
+ *  * thumbName => the thumbnail name, including parameters (120px-Foo.png)
+ *
+ * Transform specific parameters are set later via wfExtractThumbParams().
  *
  * @param $thumbRel String Thumbnail path relative to the thumb zone
  * @return Array|null associative params array or null
  */
-function wfExtractThumbParams( $thumbRel ) {
+function wfExtractThumbRequestInfo( $thumbRel ) {
        $repo = RepoGroup::singleton()->getLocalRepo();
 
        $hashDirReg = $subdirReg = '';
@@ -352,12 +379,59 @@ function wfExtractThumbParams( $thumbRel ) {
                $params['temp'] = 1;
        }
 
-       // Check hooks if parameters can be extracted
-       // Hooks return false if they manage to *resolve* the parameters
+       $params['thumbName'] = $thumbname;
+       return $params;
+}
+
+/**
+ * Convert a thumbnail name (122px-foo.png) to parameters, using
+ * file handler.
+ *
+ * @param File $file File object for file in question.
+ * @param $param Array Array of parameters so far.
+ * @return Array parameters array with more parameters.
+ */
+function wfExtractThumbParams( $file, $params ) {
+       if ( !isset( $params['thumbName'] ) ) {
+               throw new MWException( "No thumbnail name passed to wfExtractThumbParams" );
+       }
+
+       $thumbname = $params['thumbName'];
+       unset( $params['thumbName'] );
+
+       // Do the hook first for older extensions that rely on it.
        if ( !wfRunHooks( 'ExtractThumbParameters', array( $thumbname, &$params ) ) ) {
+               // Check hooks if parameters can be extracted
+               // Hooks return false if they manage to *resolve* the parameters
+               // This hook should be considered deprecated
+               wfDeprecated( 'ExtractThumbParameters', '1.22' );
                return $params; // valid thumbnail URL (via extension or config)
-       // Check if the parameters can be extracted from the thumbnail name...
-       } elseif ( preg_match( '!^(page(\d*)-)*(\d*)px-[^/]*$!', $thumbname, $matches ) ) {
+       }
+
+       // FIXME: Files in the temp zone don't set a mime type, which means
+       // they don't have a handler. Which means we can't parse the param
+       // string. However, not a big issue as what good is a param string
+       // if you have no handler to make use of the param string and
+       // actually generate the thumbnail.
+       $handler = $file->getHandler();
+
+       // Based on UploadStash::parseKey
+       $fileNamePos = strrpos( $thumbname, $params['f'] );
+       if ( $fileNamePos === false ) {
+               // Maybe using a short filename? (see FileRepo::nameForThumb)
+               $fileNamePos = strrpos( $thumbname, 'thumbnail' );
+       }
+
+       if ( $handler && $fileNamePos !== false ) {
+               $paramString = substr( $thumbname, 0, $fileNamePos - 1 );
+               $extraParams = $handler->parseParamString( $paramString );
+               if ( $extraParams !== false ) {
+                       return $params + $extraParams;
+               }
+       }
+
+       // As a last ditch fallback, use the traditional common parameters
+       if ( preg_match( '!^(page(\d*)-)*(\d*)px-[^/]*$!', $thumbname, $matches ) ) {
                list( /* all */, $pagefull, $pagenum, $size ) = $matches;
                $params['width'] = $size;
                if ( $pagenum ) {
@@ -365,8 +439,7 @@ function wfExtractThumbParams( $thumbRel ) {
                }
                return $params; // valid thumbnail URL
        }
-
-       return null; // not a valid thumbnail URL
+       return null;
 }
 
 /**
@@ -390,6 +463,7 @@ function wfThumbError( $status, $msg ) {
                header( 'HTTP/1.1 500 Internal server error' );
        }
        if ( $wgShowHostnames ) {
+               header( 'X-MW-Thumbnail-Renderer: ' . wfHostname() );
                $url = htmlspecialchars( isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '' );
                $hostname = htmlspecialchars( wfHostname() );
                $debug = "<!-- $url -->\n<!-- $hostname -->\n";