Merge "Remove unused $wgDebugDBTransactions"
authorDemon <chadh@wikimedia.org>
Mon, 2 Apr 2012 15:43:21 +0000 (15:43 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 2 Apr 2012 15:43:21 +0000 (15:43 +0000)
277 files changed:
.gitignore
.gitreview [new file with mode: 0644]
CREDITS
HISTORY
README
RELEASE-NOTES-1.19
RELEASE-NOTES-1.20
api.php
docs/database.txt
docs/hooks.txt
docs/html/.gitignore [new file with mode: 0644]
extensions/.gitignore [new file with mode: 0644]
img_auth.php
includes/Article.php
includes/AutoLoader.php
includes/ChangeTags.php
includes/CryptRand.php [new file with mode: 0644]
includes/DefaultSettings.php
includes/EditPage.php
includes/Export.php
includes/FileDeleteForm.php
includes/ForkController.php
includes/GitInfo.php [new file with mode: 0644]
includes/GlobalFunctions.php
includes/HTMLForm.php
includes/HttpFunctions.php
includes/Import.php
includes/Linker.php
includes/Message.php
includes/OutputPage.php
includes/Preferences.php
includes/RecentChange.php
includes/Revision.php
includes/ScopedPHPTimeout.php [new file with mode: 0644]
includes/Setup.php
includes/Skin.php
includes/SkinLegacy.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/Status.php
includes/Title.php
includes/User.php
includes/WebRequest.php
includes/WikiPage.php
includes/actions/CreditsAction.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/PurgeAction.php
includes/actions/RawAction.php
includes/actions/RevertAction.php
includes/actions/RollbackAction.php
includes/actions/WatchAction.php
includes/api/ApiBase.php
includes/api/ApiMain.php
includes/api/ApiQueryInfo.php
includes/api/ApiQuerySiteinfo.php
includes/cache/LinkBatch.php
includes/db/Database.php
includes/db/DatabasePostgres.php
includes/debug/Debug.php
includes/diff/DairikiDiff.php
includes/diff/DifferenceEngine.php
includes/filerepo/FileRepo.php
includes/filerepo/backend/FileBackend.php
includes/filerepo/backend/FileBackendMultiWrite.php
includes/filerepo/backend/FileBackendStore.php
includes/filerepo/backend/FileOp.php
includes/filerepo/backend/filejournal/DBFileJournal.php [new file with mode: 0644]
includes/filerepo/backend/filejournal/FileJournal.php [new file with mode: 0644]
includes/filerepo/backend/lockmanager/LockManagerGroup.php
includes/filerepo/file/LocalFile.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.i18n.php
includes/installer/Installer.php
includes/installer/PostgresUpdater.php
includes/logging/LogEntry.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/objectcache/MemcachedClient.php
includes/parser/CoreParserFunctions.php
includes/parser/Parser.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/parser/Preprocessor_HipHop.hphp
includes/parser/StripState.php
includes/profiler/Profiler.php
includes/profiler/ProfilerSimple.php
includes/profiler/ProfilerSimpleTrace.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php
includes/resourceloader/ResourceLoaderUserOptionsModule.php
includes/revisiondelete/RevisionDelete.php
includes/revisiondelete/RevisionDeleteUser.php
includes/specials/SpecialAllpages.php
includes/specials/SpecialBlock.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialExport.php
includes/specials/SpecialImport.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialLonelypages.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMergeHistory.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialPrefixindex.php
includes/specials/SpecialProtectedpages.php
includes/specials/SpecialProtectedtitles.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWatchlist.php
includes/specials/SpecialWhatlinkshere.php
includes/upload/UploadBase.php
languages/Language.php
languages/Names.php
languages/classes/LanguageKaa.php
languages/messages/MessagesAr.php
languages/messages/MessagesArz.php
languages/messages/MessagesAs.php
languages/messages/MessagesAst.php
languages/messages/MessagesAz.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesCa.php
languages/messages/MessagesCdo.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCs.php
languages/messages/MessagesCy.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDe_formal.php
languages/messages/MessagesDsb.php
languages/messages/MessagesDtp.php
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrc.php
languages/messages/MessagesGan_hans.php
languages/messages/MessagesGan_hant.php
languages/messages/MessagesGl.php
languages/messages/MessagesGu.php
languages/messages/MessagesHak.php
languages/messages/MessagesHe.php
languages/messages/MessagesHr.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIt.php
languages/messages/MessagesKa.php
languages/messages/MessagesKhw.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKn.php
languages/messages/MessagesKo.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKy.php
languages/messages/MessagesLb.php
languages/messages/MessagesLez.php
languages/messages/MessagesLus.php [new file with mode: 0644]
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMr.php
languages/messages/MessagesMs.php
languages/messages/MessagesNan.php
languages/messages/MessagesNl.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesRo.php
languages/messages/MessagesRu.php
languages/messages/MessagesSa.php
languages/messages/MessagesScn.php
languages/messages/MessagesSco.php
languages/messages/MessagesSei.php
languages/messages/MessagesShi.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.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/MessagesTe.php
languages/messages/MessagesTet.php
languages/messages/MessagesTh.php
languages/messages/MessagesTo.php
languages/messages/MessagesTr.php
languages/messages/MessagesTs.php
languages/messages/MessagesTyv.php
languages/messages/MessagesUk.php
languages/messages/MessagesUz.php
languages/messages/MessagesVec.php
languages/messages/MessagesVi.php
languages/messages/MessagesWa.php
languages/messages/MessagesWar.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/Doxyfile
maintenance/archives/patch-filejournal.sql [new file with mode: 0644]
maintenance/backup.inc
maintenance/deleteDefaultMessages.php
maintenance/dev/includes/router.php
maintenance/dumpTextPass.php
maintenance/interwiki.list
maintenance/interwiki.sql
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/mwdocgen.php
maintenance/namespaceDupes.php
maintenance/storage/compressOld.php
maintenance/tables.sql
mw-config/index.php
profileinfo.php
resources/jquery/jquery.byteLimit.js
resources/jquery/jquery.client.js
resources/jquery/jquery.highlightText.js
resources/jquery/jquery.js
resources/jquery/jquery.textSelection.js
resources/mediawiki.action/mediawiki.action.watch.ajax.js
resources/mediawiki.api/mediawiki.api.watch.js
resources/mediawiki/mediawiki.debug.js
resources/mediawiki/mediawiki.js
skins/Standard.php
skins/Vector.php
skins/chick/main.css
skins/common/oldshared.css
skins/common/shared.css
skins/modern/main.css
skins/monobook/main.css
skins/simple/main.css
skins/vector/screen.css
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/phpunit/includes/EditPageTest.php
tests/phpunit/includes/IPTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/RecentChangeTest.php
tests/phpunit/includes/XmlTest.php
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiPurgeTest.php
tests/phpunit/includes/api/ApiQueryTest.php
tests/phpunit/includes/api/ApiTest.php
tests/phpunit/includes/api/ApiUploadTest.php
tests/phpunit/includes/api/ApiWatchTest.php
tests/phpunit/includes/filerepo/FileRepoTest.php
tests/phpunit/includes/upload/UploadFromUrlTest.php
tests/phpunit/languages/LanguageTest.php
tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js
tests/selenium/data/SimpleSeleniumTestDB.sql
tests/selenium/data/mediawiki118_fresh_installation.sql
tests/selenium/installer/README.txt
thumb.php

index 6688707..2ffdb88 100644 (file)
@@ -1,5 +1,7 @@
 .svn
 *~
+*.kate-swp
+.*.swp
 .classpath
 .idea
 .metadata*
@@ -19,3 +21,6 @@ cache/*.cdb
 images/[0-9a-f]
 images/temp
 images/thumb
+maintenance/dev/data/
+maintenance/.mweval_history
+maintenance/.mwsql_history
diff --git a/.gitreview b/.gitreview
new file mode 100644 (file)
index 0000000..f6438d5
--- /dev/null
@@ -0,0 +1,5 @@
+[gerrit]
+host=gerrit.wikimedia.org
+port=29418
+project=mediawiki/core.git
+defaultbranch=master
diff --git a/CREDITS b/CREDITS
index 8baea59..d0c4623 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -8,7 +8,7 @@ following names for their contribution to the product.
 * Alexandre Emsenhuber
 * Andrew Garrett
 * Aryeh Gregor
-* Antoine Musso 
+* Antoine Musso
 * Brian Wolff
 * Bertrand Grondin
 * Brad Jorsch
@@ -176,6 +176,7 @@ following names for their contribution to the product.
 * Simon Walker
 * Solitarius
 * Søren Løvborg
+* Srikanth Lakshmanan
 * Stefano Codari
 * Str4nd
 * svip
@@ -198,4 +199,4 @@ following names for their contribution to the product.
 * Meno25
 * Rotem Liss
 * Shinjiman
-* Translatewiki.net Translators http://translatewiki.net/wiki/Special:ListUsers/translator
+* Translatewiki.net Translators https://translatewiki.net/wiki/Special:ListUsers/translator
diff --git a/HISTORY b/HISTORY
index 14a80d0..408ae38 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -1,27 +1,41 @@
 Change notes from older releases. For current info see RELEASE-NOTES-1.20.
 
 == MediaWiki 1.18 ==
-=== Changes since 1.18.1 ===
+=== Changes since 1.18.2 ===
+* (bug 35446) Using "{{nse:}}" with an invalid namespace name no longer throws
+  a PHP warning.
+* (bug 35567) The whole password reminder e-mail is now sent in the same language.
+
+== MediaWiki 1.18.2 ==
+2012-03-21
+
+This is a maintenance and security release of the MediaWiki 1.18 branch.
 
+=== Changes since 1.18.1 ===
 * (bug 33686) could not get a list of contributor for an article when using
  a SQLite database.
 * (Bug 33865) Exception thrown in action=parse when attempting to use the title
   parameter without setting the text parameter.
 * UserMailer could potentially throw a fatal error when a MailAddress object had
   an empty email address.
+* (Bug 33087) Exchange server rejected mail sent by MediaWiki
 * (bug 34528) Edit section tooltips show correction section name again
 * (bug 34246) MediaWiki:Whatlinkshere-summary message is displayed again in
   Special:Whatlinkshere
-
-=== MediaWiki 1.18.1 ===
+* (bug 22555) Remove or skip strip markers from tag hooks like &lt;nowiki&gt; in
+  core parser functions which operate on strings, such as formatnum.
+* (bug 34212) ApiBlock/ApiUnblock allow action to take place without a token
+  parameter present.
+* (bug 34907) Fixed exposure of tokens through load.php that could have facilitated
+  CSRF attacks.
+* (bug 35317) CSRF in Special:Upload.
+
+== MediaWiki 1.18.1 ==
 2012-01-11
 
 This a maintenance and security release of the MediaWiki 1.18 branch.
 
-==== Security changes ====
-* (bug 33117) prop=revisions allows deleted text to be exposed through cache pollution.
-
-==== Changes since 1.18.0 ====
+=== Changes since 1.18.0 ===
 * (bug 32712) Fix for search indexing of pages with certain unicode chars following URL.
 * (bug 3901) Lang, hreflang attribs added to sidebar interlanguage links for screen readers.
 * (bug 30774) mediawiki.html: Add support for numbers and booleans in the
@@ -47,6 +61,12 @@ This a maintenance and security release of the MediaWiki 1.18 branch.
   all pages.
 * Fixed recentchanges FK violation on page delete and cache purge error in updater
   for Oracle DB.
+* (bug 33117) prop=revisions allows deleted text to be exposed through cache pollution.
+
+== MediaWiki 1.18.0 ==
+2011-11-24
+
+This is the first stable release of the MediaWiki 1.18 branch.
 
 === Summary of selected changes in 1.18 ===
 
diff --git a/README b/README
index 078f92c..48cf336 100644 (file)
--- a/README
+++ b/README
@@ -1,5 +1,3 @@
-2008-11-11
-
 For system requirements, installation and upgrade details, see the files 
 RELEASE-NOTES, INSTALL, and UPGRADE.
 
@@ -88,8 +86,8 @@ The official website for MediaWiki is located at:
 
        http://www.mediawiki.org/
 
-The code is currently maintained in a Subversion repository at
-svn.wikimedia.org. See http://www.mediawiki.org/wiki/Subversion for details.
+The code is currently maintained in a Git repository at
+gerrit.wikimedia.org. See http://www.mediawiki.org/wiki/Git for details.
 
 Please report bugs and make feature requests in our Bugzilla system:
 
index 98b3beb..94f034c 100644 (file)
@@ -11,10 +11,33 @@ This is a beta release of the MediaWiki 1.19 branch. Please test it and let us
 know what you think of it. Beta releases are not recommended for use in
 production.
 
+=== Changes since 1.19 beta 2 ===
+* Special:Watchlist no longer sets links to feed when the user is anonymous
+* (bug 35565) Special:Log/patrol doesn't indicate whether patrolling was
+  automatic
+
 === Changes since 1.19 beta 1 ===
 * (bug 35014) Including a special page no longer sets the page's title to the
-  included page
-* (bug 35019) Edit summaries are no longer transformed in notification e-mails
+  included page.
+* (bug 35019) Edit summaries are no longer transformed in notification e-mails.
+* (bug 35152) Help message for e-mail is shown again in user preferences.
+* (bug 34887) $3 and $4 parameters are now substituted correctly in message
+  "movepage-moved".
+* (bug 34841) Edit links are no longer displayed when display old page versions
+* (bug 34889) User name should be normalized on Special:Contributions.
+* (bug 35051) If heading has a trailing space after == then its name is not
+  preloaded into edit summary on section edit.
+* (bug 31417) New ID mw-content-text around the actual page text, without categories,
+  contentSub, ... The same div often also contains the class mw-content-ltr/rtl.
+* (bug 35303) Proxy and DNS blacklist blocking works again
+* (bug 35294) jquery.byteLimit shouldn't set element specific variables outside
+  the "return this.each" loop.
+* (bug 22555) Remove or skip strip markers from tag hooks like &lt;nowiki&gt; in 
+  core parser functions which operate on strings, such as padleft.
+* (bug 18295) Don't expose strip markers when a tag appears inside a link 
+  inside a heading.
+* (bug 34907) Fixed exposure of tokens through load.php that could have facilitated
+  CSRF attacks
 
 === Configuration changes in 1.19 ===
 * Removed SkinTemplateSetupPageCss hook; use BeforePageDisplay instead.
@@ -29,6 +52,7 @@ production.
 * (bug 32239) Removed $wgEnableTooltipsAndAccesskeys.
 * Removed $wgVectorShowVariantName.
 * Removed $wgExtensionAliasesFiles. Use $wgExtensionMessagesFiles.
+* Removed $wgResourceLoaderInlinePrivateModules, now always enabled.
 
 === New features in 1.19 ===
 * (bug 19838) Add ability to get all interwiki prefixes also if the interwiki
@@ -112,8 +136,8 @@ production.
   200 status code instead of 404 for nonexistent articles.
 * (bug 33447) Link to the broken image tracking category from Special:Wantedfiles.
 * (bug 27724) Add timestamp to job queue.
-* (bug 30339) Implement SpecialPage for running javascript tests. Disabled by default, due to
-  tests potentially being harmful, not to be run on a production wiki.
+* (bug 30339) Implement SpecialPage for running javascript tests. Disabled by default,
+  due to tests potentially being harmful, not to be run on a production wiki.
   Enable by setting $wgEnableJavaScriptTest to true.
 * Extensions can use the RequestContextCreateSkin hook to override what skin is
   loaded in some contexts.
@@ -130,8 +154,8 @@ production.
 * Special:MovePage now has a dropdown menu for namespaces.
 * (bug 34420) Special:Version now shows git HEAD sha1 when available.
 * (bug 33952) Refactor mw.toolbar to allow dynamic additions at any time.
-* Now possible to specify separate section title and edit summary when adding a new section to a
-  page via the edit API action.
+* Now possible to specify separate section title and edit summary when adding
+  a new section to a page via the edit API action.
 
 === Bug fixes in 1.19 ===
 * $wgUploadNavigationUrl should be used for file redlinks if.
@@ -269,6 +293,9 @@ production.
    on Windows
 * (bug 25095) Special:Categories should also include the first relevant item
    when "from" is filled.
+* (bug 12262) Indents and lists are now aligned
+* (bug 34972) An error occurred while changing your watchlist settings for 
+  [[Special:WhatLinksHere/Example]]
 
 === API changes in 1.19 ===
 * Made action=edit less likely to return "unknownerror", by returning the actual error
@@ -315,7 +342,7 @@ regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Bugzilla reports.
 
 * Canadian English (en-ca) (new).
-* Norwegian (bokmÃ\83Â¥l) (nb) (renamed from no).
+* Norwegian (bokmål) (nb) (renamed from no).
 * Uighur (Latin) (ug-latn) was incorrectly marked as right-to-left language.
 * (bug 30217) Make pt-br a fallback of pt.
 * (bug 31193) Set fallback language of Assamese from Bengali to English.
@@ -359,6 +386,7 @@ changes to languages because of Bugzilla reports.
   amount of user/site scripts that are lacking dependency information. In the short to
   medium term these user/site scripts should be fixed by adding the used modules to the
   dependencies in the module registry and/or wrapping them in a callback to mw.loader.using.
+* MediaWiki now requires MySQL 5.0.2 or later when using a MySQL database.
 
 == Compatibility ==
 
index 1172f87..b358e79 100644 (file)
@@ -17,12 +17,15 @@ production.
 * (bug 32341) Add upload by URL domain limitation.
 * &useskin=default will now always display the default skin. Useful for users with a
   preference for the non-default skin to look at something using the default skin.
-* (bug 31417) New ID mw-content-text around the actual page text, without categories,
-  contentSub, ... The same div often also contains the class mw-content-ltr/rtl.
 * (bug 27619) Remove preference option to display broken links as link?
 * (bug 34896) Update jQuery JSON plugin to v2.3 (2011-09-17)
 * (bug 34302) Add CSS classes to email fields in user preferences
 * Introduced $wgDebugDBTransactions to trace transaction status (currently PostgreSQL only)
+* (bug 23795) Add parser itself to ParserMakeImageParams hook.
+* Introduce a cryptographic random number generator source api for use when
+  generating various tokens.
+* (bug 30963) Option on Special:Prefixindex and Special:Allpages to not show redirects.
+* (bug 18062) new message when edit or create the local page of a shared file
 
 === Bug fixes in 1.20 ===
 * (bug 30245) Use the correct way to construct a log page title.
@@ -44,6 +47,14 @@ production.
 * (bug 34929) Show the correct diff when a section edit is rejected by the spam 
   filter
 * (bug 15816) Add a switch for SETting the search_path (Postgres)
+* (bug 34521) Returning to the previous page after logging in loses any array-
+  valued parameters in the query string
+* (bug 34735) Updated compressOld.php documentation to mention the different
+  usages of -s and -n parameters depending on compression type
+* (bug 13896) Rendering of devanagari numbers in automatic '#' number lists
+* (bug 18704) Add an unique CSS class or ID to the tagfilter table row at RecentChanges 
+* (bug 33689) Upgrade to 1.19 on Postgres fails due to incomplete query when
+              trying to defer foreign key for externallinks
 
 === API changes in 1.20 ===
 * (bug 34316) Add ability to retrieve maximum upload size from MediaWiki API.
@@ -57,8 +68,13 @@ regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Bugzilla reports.
 
 * (bug 34192) Namespace gender aliases for Albanian languages (sq & aln)
+* (bug 35541) Namespace gender aliases for Croatian (hr)
+* Mizo (lus) added
 
 === Other changes in 1.20 ===
+* The user_token field is now left empty until a user attempts to login and
+  cookies need to be set. It is also now possible to reset every user's
+  user_token simply by clearing the values in the user_token column.
 
 == Compatibility ==
 
diff --git a/api.php b/api.php
index a5a2579..889c5f1 100644 (file)
--- a/api.php
+++ b/api.php
@@ -45,7 +45,7 @@ if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.
 
 // Initialise common code.
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
-       require ( 'phase3/includes/WebStart.php' );
+       require ( 'core/includes/WebStart.php' );
 } else {
        require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
 }
index 70815d4..c0a2412 100644 (file)
@@ -8,7 +8,7 @@ By Tim Starling, January 2006.
 For information about the MediaWiki database layout, such as a 
 description of the tables and their contents, please see:
   http://www.mediawiki.org/wiki/Manual:Database_layout
-  http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/maintenance/tables.sql?view=markup
+  https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/core.git;a=blob_plain;f=maintenance/tables.sql;hb=HEAD
 
 
 ------------------------------------------------------------------------
index e9acbf8..eb235d6 100644 (file)
@@ -1478,6 +1478,7 @@ to modify the parameters of the image.
 $title: title object representing the file
 $file: file object that will be used to create the image
 &$params: 2-D array of parameters
+$parser: Parser object that called the hook
 
 'ParserSectionCreate': Called each time the parser creates a document section
 from wikitext.  Use this to apply per-section modifications to HTML (like
diff --git a/docs/html/.gitignore b/docs/html/.gitignore
new file mode 100644 (file)
index 0000000..f847620
--- /dev/null
@@ -0,0 +1,3 @@
+*
+!README
+!.gitignore
diff --git a/extensions/.gitignore b/extensions/.gitignore
new file mode 100644 (file)
index 0000000..f847620
--- /dev/null
@@ -0,0 +1,3 @@
+*
+!README
+!.gitignore
index 3999bf3..82afef2 100644 (file)
@@ -28,7 +28,7 @@
 
 define( 'MW_NO_OUTPUT_COMPRESSION', 1 );
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
-       require ( 'phase3/includes/WebStart.php' );
+       require ( 'core/includes/WebStart.php' );
 } else {
        require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
 }
index cdf2c1f..393f770 100644 (file)
@@ -455,7 +455,7 @@ class Article extends Page {
                if ( $wgOut->isPrintable() ) {
                        $parserOptions->setIsPrintable( true );
                        $parserOptions->setEditSection( false );
-               } elseif ( !$this->getTitle()->quickUserCan( 'edit' ) ) {
+               } elseif ( !$this->isCurrent() || !$this->getTitle()->quickUserCan( 'edit' ) ) {
                        $parserOptions->setEditSection( false );
                }
 
@@ -1089,11 +1089,16 @@ class Article extends Page {
 
                # Cascade unhide param in links for easy deletion browsing
                $extraParams = array();
-               if ( $wgRequest->getVal( 'unhide' ) ) {
+               if ( $unhide ) {
                        $extraParams['unhide'] = 1;
                }
 
-               $revision = Revision::newFromId( $oldid );
+               if ( $this->mRevision && $this->mRevision->getId() === $oldid ) {
+                       $revision = $this->mRevision;
+               } else {
+                       $revision = Revision::newFromId( $oldid );
+               }
+
                $timestamp = $revision->getTimestamp();
 
                $current = ( $oldid == $this->mPage->getLatest() );
index 91c6c2e..301c024 100644 (file)
@@ -49,6 +49,7 @@ $wgAutoloadLocalClasses = array(
        'ConfEditorToken' => 'includes/ConfEditor.php',
        'Cookie' => 'includes/Cookie.php',
        'CookieJar' => 'includes/Cookie.php',
+       'MWCryptRand' => 'includes/CryptRand.php',
        'CurlHttpRequest' => 'includes/HttpFunctions.php',
 //     'DBDataObject' => 'includes/DBDataObject.php',
 //     'DBTable' => 'includes/DBTable.php',
@@ -94,6 +95,7 @@ $wgAutoloadLocalClasses = array(
        'FormAction' => 'includes/Action.php',
        'FormOptions' => 'includes/FormOptions.php',
        'FormSpecialPage' => 'includes/SpecialPage.php',
+       'GitInfo' => 'includes/GitInfo.php',
        'HashtableReplacer' => 'includes/StringUtils.php',
        'HistoryBlob' => 'includes/HistoryBlob.php',
        'HistoryBlobCurStub' => 'includes/HistoryBlob.php',
@@ -193,6 +195,7 @@ $wgAutoloadLocalClasses = array(
        'RevisionList' => 'includes/RevisionList.php',
        'RSSFeed' => 'includes/Feed.php',
        'Sanitizer' => 'includes/Sanitizer.php',
+       'ScopedPHPTimeout' => 'includes/ScopedPHPTimeout.php',
        'SiteConfiguration' => 'includes/SiteConfiguration.php',
        'SiteStats' => 'includes/SiteStats.php',
        'SiteStatsInit' => 'includes/SiteStats.php',
@@ -507,6 +510,9 @@ $wgAutoloadLocalClasses = array(
        'FSFileBackendFileList' => 'includes/filerepo/backend/FSFileBackend.php',
        'SwiftFileBackend' => 'includes/filerepo/backend/SwiftFileBackend.php',
        'SwiftFileBackendFileList' => 'includes/filerepo/backend/SwiftFileBackend.php',
+       'FileJournal' => 'includes/filerepo/backend/filejournal/FileJournal.php',
+       'DBFileJournal' => 'includes/filerepo/backend/filejournal/DBFileJournal.php',
+       'NullFileJournal' => 'includes/filerepo/backend/filejournal/FileJournal.php',
        'LockManagerGroup' => 'includes/filerepo/backend/lockmanager/LockManagerGroup.php',
        'LockManager' => 'includes/filerepo/backend/lockmanager/LockManager.php',
        'ScopedLock' => 'includes/filerepo/backend/lockmanager/LockManager.php',
@@ -516,7 +522,6 @@ $wgAutoloadLocalClasses = array(
        'MySqlLockManager'=> 'includes/filerepo/backend/lockmanager/DBLockManager.php',
        'NullLockManager' => 'includes/filerepo/backend/lockmanager/LockManager.php',
        'FileOp' => 'includes/filerepo/backend/FileOp.php',
-       'FileOpScopedPHPTimeout' => 'includes/filerepo/backend/FileOp.php',
        'StoreFileOp' => 'includes/filerepo/backend/FileOp.php',
        'CopyFileOp' => 'includes/filerepo/backend/FileOp.php',
        'MoveFileOp' => 'includes/filerepo/backend/FileOp.php',
index 63d3732..01b93ad 100644 (file)
@@ -210,7 +210,7 @@ class ChangeTags {
                        return $fullForm ? '' : array();
 
                $data = array( Html::rawElement( 'label', array( 'for' => 'tagfilter' ), wfMsgExt( 'tag-filter', 'parseinline' ) ),
-                       Xml::input( 'tagfilter', 20, $selected ) );
+                       Xml::input( 'tagfilter', 20, $selected ), array( 'class' => 'mw-tagfilter-input' ) );
 
                if ( !$fullForm ) {
                        return $data;
@@ -219,7 +219,7 @@ class ChangeTags {
                $html = implode( '&#160;', $data );
                $html .= "\n" . Xml::element( 'input', array( 'type' => 'submit', 'value' => wfMsg( 'tag-filter-submit' ) ) );
                $html .= "\n" . Html::hidden( 'title', $title->getPrefixedText() );
-               $html = Xml::tags( 'form', array( 'action' => $title->getLocalURL(), 'method' => 'get' ), $html );
+               $html = Xml::tags( 'form', array( 'action' => $title->getLocalURL(), 'class' => 'mw-tagfilter-form', 'method' => 'get' ), $html );
 
                return $html;
        }
diff --git a/includes/CryptRand.php b/includes/CryptRand.php
new file mode 100644 (file)
index 0000000..e4be1b3
--- /dev/null
@@ -0,0 +1,468 @@
+<?php
+/**
+ * A cryptographic random generator class used for generating secret keys
+ *
+ * This is based in part on Drupal code as well as what we used in our own code
+ * prior to introduction of this class.
+ *
+ * @author Daniel Friesen
+ * @file
+ */
+
+class MWCryptRand {
+
+       /**
+        * Minimum number of iterations we want to make in our drift calculations.
+        */
+       const MIN_ITERATIONS = 1000;
+
+       /**
+        * Number of milliseconds we want to spend generating each separate byte
+        * of the final generated bytes.
+        * This is used in combination with the hash length to determine the duration
+        * we should spend doing drift calculations.
+        */
+       const MSEC_PER_BYTE = 0.5;
+
+       /**
+        * Singleton instance for public use
+        */
+       protected static $singleton = null;
+
+       /**
+        * The hash algorithm being used
+        */
+       protected $algo = null;
+
+       /**
+        * The number of bytes outputted by the hash algorithm
+        */
+       protected $hashLength = null;
+
+       /**
+        * A boolean indicating whether the previous random generation was done using
+        * cryptographically strong random number generator or not.
+        */
+       protected $strong = null;
+
+       /**
+        * Initialize an initial random state based off of whatever we can find
+        */
+       protected function initialRandomState() {
+               // $_SERVER contains a variety of unstable user and system specific information
+               // It'll vary a little with each page, and vary even more with separate users
+               // It'll also vary slightly across different machines
+               $state = serialize( $_SERVER );
+
+               // To try and vary the system information of the state a bit more
+               // by including the system's hostname into the state
+               $state .= wfHostname();
+
+               // Try to gather a little entropy from the different php rand sources
+               $state .= rand() . uniqid( mt_rand(), true );
+
+               // Include some information about the filesystem's current state in the random state
+               $files = array();
+               // We know this file is here so grab some info about ourself
+               $files[] = __FILE__;
+               // The config file is likely the most often edited file we know should be around
+               // so if the constant with it's location is defined include it's stat info into the state
+               if ( defined( 'MW_CONFIG_FILE' ) ) {
+                       $files[] = MW_CONFIG_FILE;
+               }
+               foreach ( $files as $file ) {
+                       wfSuppressWarnings();
+                       $stat = stat( $file );
+                       wfRestoreWarnings();
+                       if ( $stat ) {
+                               // stat() duplicates data into numeric and string keys so kill off all the numeric ones
+                               foreach ( $stat as $k => $v ) {
+                                       if ( is_numeric( $k ) ) {
+                                               unset( $k );
+                                       }
+                               }
+                               // The absolute filename itself will differ from install to install so don't leave it out
+                               $state .= realpath( $file );
+                               $state .= implode( '', $stat );
+                       } else {
+                               // The fact that the file isn't there is worth at least a
+                               // minuscule amount of entropy.
+                               $state .= '0';
+                       }
+               }
+
+               // Try and make this a little more unstable by including the varying process
+               // id of the php process we are running inside of if we are able to access it
+               if ( function_exists( 'getmypid' ) ) {
+                       $state .= getmypid();
+               }
+
+               // If available try to increase the instability of the data by throwing in
+               // the precise amount of memory that we happen to be using at the moment.
+               if ( function_exists( 'memory_get_usage' ) ) {
+                       $state .= memory_get_usage( true );
+               }
+
+               // It's mostly worthless but throw the wiki's id into the data for a little more variance
+               $state .= wfWikiID();
+
+               // If we have a secret key or proxy key set then throw it into the state as well
+               global $wgSecretKey, $wgProxyKey;
+               if ( $wgSecretKey ) {
+                       $state .= $wgSecretKey;
+               } elseif ( $wgProxyKey ) {
+                       $state .= $wgProxyKey;
+               }
+
+               return $state;
+       }
+
+       /**
+        * Randomly hash data while mixing in clock drift data for randomness
+        *
+        * @param $data string The data to randomly hash.
+        * @return String The hashed bytes
+        * @author Tim Starling
+        */
+       protected function driftHash( $data ) {
+               // Minimum number of iterations (to avoid slow operations causing the loop to gather little entropy)
+               $minIterations = self::MIN_ITERATIONS;
+               // Duration of time to spend doing calculations (in seconds)
+               $duration = ( self::MSEC_PER_BYTE / 1000 ) * $this->hashLength();
+               // Create a buffer to use to trigger memory operations
+               $bufLength = 10000000;
+               $buffer = str_repeat( ' ', $bufLength );
+               $bufPos = 0;
+
+               // Iterate for $duration seconds or at least $minIerations number of iterations
+               $iterations = 0;
+               $startTime = microtime( true );
+               $currentTime = $startTime;
+               while ( $iterations < $minIterations || $currentTime - $startTime < $duration ) {
+                       // Trigger some memory writing to trigger some bus activity
+                       // This may create variance in the time between iterations
+                       $bufPos = ( $bufPos + 13 ) % $bufLength;
+                       $buffer[$bufPos] = ' ';
+                       // Add the drift between this iteration and the last in as entropy
+                       $nextTime = microtime( true );
+                       $delta = (int)( ( $nextTime - $currentTime ) * 1000000 );
+                       $data .= $delta;
+                       // Every 100 iterations hash the data and entropy
+                       if ( $iterations % 100 === 0 ) {
+                               $data = sha1( $data );
+                       }
+                       $currentTime = $nextTime;
+                       $iterations++;
+               }
+               $timeTaken = $currentTime - $startTime;
+               $data = $this->hash( $data );
+
+               wfDebug( __METHOD__ . ": Clock drift calculation " .
+                       "(time-taken=" . ( $timeTaken * 1000 ) . "ms, " .
+                       "iterations=$iterations, " .
+                       "time-per-iteration=" . ( $timeTaken / $iterations * 1e6 ) . "us)\n" );
+               return $data;
+       }
+
+       /**
+        * Return a rolling random state initially build using data from unstable sources
+        * @return string A new weak random state
+        */
+       protected function randomState() {
+               static $state = null;
+               if ( is_null( $state ) ) {
+                       // Initialize the state with whatever unstable data we can find
+                       // It's important that this data is hashed right afterwards to prevent
+                       // it from being leaked into the output stream
+                       $state = $this->hash( $this->initialRandomState() );
+               }
+               // Generate a new random state based on the initial random state or previous
+               // random state by combining it with clock drift
+               $state = $this->driftHash( $state );
+               return $state;
+       }
+
+       /**
+        * Decide on the best acceptable hash algorithm we have available for hash()
+        * @throws MWException
+        * @return String A hash algorithm
+        */
+       protected function hashAlgo() {
+               if ( !is_null( $this->algo ) ) {
+                       return $this->algo;
+               }
+
+               $algos = hash_algos();
+               $preference = array( 'whirlpool', 'sha256', 'sha1', 'md5' );
+
+               foreach ( $preference as $algorithm ) {
+                       if ( in_array( $algorithm, $algos ) ) {
+                               $this->algo = $algorithm;
+                               wfDebug( __METHOD__ . ": Using the {$this->algo} hash algorithm.\n" );
+                               return $this->algo;
+                       }
+               }
+
+               // We only reach here if no acceptable hash is found in the list, this should
+               // be a technical impossibility since most of php's hash list is fixed and
+               // some of the ones we list are available as their own native functions
+               // But since we already require at least 5.2 and hash() was default in
+               // 5.1.2 we don't bother falling back to methods like sha1 and md5.
+               throw new MWException( "Could not find an acceptable hashing function in hash_algos()" );
+       }
+
+       /**
+        * Return the byte-length output of the hash algorithm we are
+        * using in self::hash and self::hmac.
+        *
+        * @return int Number of bytes the hash outputs
+        */
+       protected function hashLength() {
+               if ( is_null( $this->hashLength ) ) {
+                       $this->hashLength = strlen( $this->hash( '' ) );
+               }
+               return $this->hashLength;
+       }
+
+       /**
+        * Generate an acceptably unstable one-way-hash of some text
+        * making use of the best hash algorithm that we have available.
+        *
+        * @param $data string
+        * @return String A raw hash of the data
+        */
+       protected function hash( $data ) {
+               return hash( $this->hashAlgo(), $data, true );
+       }
+
+       /**
+        * Generate an acceptably unstable one-way-hmac of some text
+        * making use of the best hash algorithm that we have available.
+        *
+        * @param $data string
+        * @param $key string
+        * @return String A raw hash of the data
+        */
+       protected function hmac( $data, $key ) {
+               return hash_hmac( $this->hashAlgo(), $data, $key, true );
+       }
+
+       /**
+        * @see self::wasStrong()
+        */
+       public function realWasStrong() {
+               if ( is_null( $this->strong ) ) {
+                       throw new MWException( __METHOD__ . ' called before generation of random data' );
+               }
+               return $this->strong;
+       }
+
+       /**
+        * @see self::generate()
+        */
+       public function realGenerate( $bytes, $forceStrong = false ) {
+               wfProfileIn( __METHOD__ );
+
+               wfDebug( __METHOD__ . ": Generating cryptographic random bytes for " . wfGetAllCallers( 5 ) . "\n" );
+
+               $bytes = floor( $bytes );
+               static $buffer = '';
+               if ( is_null( $this->strong ) ) {
+                       // Set strength to false initially until we know what source data is coming from
+                       $this->strong = true;
+               }
+
+               if ( strlen( $buffer ) < $bytes ) {
+                       // If available make use of mcrypt_create_iv URANDOM source to generate randomness
+                       // On unix-like systems this reads from /dev/urandom but does it without any buffering
+                       // and bypasses openbasdir restrictions so it's preferable to reading directly
+                       // On Windows starting in PHP 5.3.0 Windows' native CryptGenRandom is used to generate
+                       // entropy so this is also preferable to just trying to read urandom because it may work
+                       // on Windows systems as well.
+                       if ( function_exists( 'mcrypt_create_iv' ) ) {
+                               wfProfileIn( __METHOD__ . '-mcrypt' );
+                               $rem = $bytes - strlen( $buffer );
+                               $iv = mcrypt_create_iv( $rem, MCRYPT_DEV_URANDOM );
+                               if ( $iv === false ) {
+                                       wfDebug( __METHOD__ . ": mcrypt_create_iv returned false.\n" );
+                               } else {
+                                       $buffer .= $iv;
+                                       wfDebug( __METHOD__ . ": mcrypt_create_iv generated " . strlen( $iv ) . " bytes of randomness.\n" );
+                               }
+                               wfProfileOut( __METHOD__ . '-mcrypt' );
+                       }
+               }
+
+               if ( strlen( $buffer ) < $bytes ) {
+                       // If available make use of openssl's random_pesudo_bytes method to attempt to generate randomness.
+                       // However don't do this on Windows with PHP < 5.3.4 due to a bug:
+                       // http://stackoverflow.com/questions/1940168/openssl-random-pseudo-bytes-is-slow-php
+                       if ( function_exists( 'openssl_random_pseudo_bytes' )
+                               && ( !wfIsWindows() || version_compare( PHP_VERSION, '5.3.4', '>=' ) )
+                       ) {
+                               wfProfileIn( __METHOD__ . '-openssl' );
+                               $rem = $bytes - strlen( $buffer );
+                               $openssl_bytes = openssl_random_pseudo_bytes( $rem, $openssl_strong );
+                               if ( $openssl_bytes === false ) {
+                                       wfDebug( __METHOD__ . ": openssl_random_pseudo_bytes returned false.\n" );
+                               } else {
+                                       $buffer .= $openssl_bytes;
+                                       wfDebug( __METHOD__ . ": openssl_random_pseudo_bytes generated " . strlen( $openssl_bytes ) . " bytes of " . ( $openssl_strong ? "strong" : "weak" ) . " randomness.\n" );
+                               }
+                               if ( strlen( $buffer ) >= $bytes ) {
+                                       // openssl tells us if the random source was strong, if some of our data was generated
+                                       // using it use it's say on whether the randomness is strong
+                                       $this->strong = !!$openssl_strong;
+                               }
+                               wfProfileOut( __METHOD__ . '-openssl' );
+                       }
+               }
+
+               // Only read from urandom if we can control the buffer size or were passed forceStrong
+               if ( strlen( $buffer ) < $bytes && ( function_exists( 'stream_set_read_buffer' ) || $forceStrong ) ) {
+                       wfProfileIn( __METHOD__ . '-fopen-urandom' );
+                       $rem = $bytes - strlen( $buffer );
+                       if ( !function_exists( 'stream_set_read_buffer' ) && $forceStrong ) {
+                               wfDebug( __METHOD__ . ": Was forced to read from /dev/urandom without control over the buffer size.\n" );
+                       }
+                       // /dev/urandom is generally considered the best possible commonly
+                       // available random source, and is available on most *nix systems.
+                       wfSuppressWarnings();
+                       $urandom = fopen( "/dev/urandom", "rb" );
+                       wfRestoreWarnings();
+
+                       // Attempt to read all our random data from urandom
+                       // php's fread always does buffered reads based on the stream's chunk_size
+                       // so in reality it will usually read more than the amount of data we're
+                       // asked for and not storing that risks depleting the system's random pool.
+                       // If stream_set_read_buffer is available set the chunk_size to the amount
+                       // of data we need. Otherwise read 8k, php's default chunk_size.
+                       if ( $urandom ) {
+                               // php's default chunk_size is 8k
+                               $chunk_size = 1024 * 8;
+                               if ( function_exists( 'stream_set_read_buffer' ) ) {
+                                       // If possible set the chunk_size to the amount of data we need
+                                       stream_set_read_buffer( $urandom, $rem );
+                                       $chunk_size = $rem;
+                               }
+                               $random_bytes = fread( $urandom, max( $chunk_size, $rem ) );
+                               $buffer .= $random_bytes;
+                               fclose( $urandom );
+                               wfDebug( __METHOD__ . ": /dev/urandom generated " . strlen( $random_bytes ) . " bytes of randomness.\n" );
+                               if ( strlen( $buffer ) >= $bytes ) {
+                                       // urandom is always strong, set to true if all our data was generated using it
+                                       $this->strong = true;
+                               }
+                       } else {
+                               wfDebug( __METHOD__ . ": /dev/urandom could not be opened.\n" );
+                       }
+                       wfProfileOut( __METHOD__ . '-fopen-urandom' );
+               }
+
+               // If we cannot use or generate enough data from a secure source
+               // use this loop to generate a good set of pseudo random data.
+               // This works by initializing a random state using a pile of unstable data
+               // and continually shoving it through a hash along with a variable salt.
+               // We hash the random state with more salt to avoid the state from leaking
+               // out and being used to predict the /randomness/ that follows.
+               if ( strlen( $buffer ) < $bytes ) {
+                       wfDebug( __METHOD__ . ": Falling back to using a pseudo random state to generate randomness.\n" ); 
+               }
+               while ( strlen( $buffer ) < $bytes ) {
+                       wfProfileIn( __METHOD__ . '-fallback' );
+                       $buffer .= $this->hmac( $this->randomState(), mt_rand() );
+                       // This code is never really cryptographically strong, if we use it
+                       // at all, then set strong to false.
+                       $this->strong = false;
+                       wfProfileOut( __METHOD__ . '-fallback' );
+               }
+
+               // Once the buffer has been filled up with enough random data to fulfill
+               // the request shift off enough data to handle the request and leave the
+               // unused portion left inside the buffer for the next request for random data
+               $generated = substr( $buffer, 0, $bytes );
+               $buffer = substr( $buffer, $bytes );
+
+               wfDebug( __METHOD__ . ": " . strlen( $buffer ) . " bytes of randomness leftover in the buffer.\n" );
+
+               wfProfileOut( __METHOD__ );
+               return $generated;
+       }
+
+       /**
+        * @see self::generateHex()
+        */
+       public function realGenerateHex( $chars, $forceStrong = false ) {
+               // hex strings are 2x the length of raw binary so we divide the length in half
+               // odd numbers will result in a .5 that leads the generate() being 1 character
+               // short, so we use ceil() to ensure that we always have enough bytes
+               $bytes = ceil( $chars / 2 );
+               // Generate the data and then convert it to a hex string
+               $hex = bin2hex( $this->generate( $bytes, $forceStrong ) );
+               // A bit of paranoia here, the caller asked for a specific length of string
+               // here, and it's possible (eg when given an odd number) that we may actually
+               // have at least 1 char more than they asked for. Just in case they made this
+               // call intending to insert it into a database that does truncation we don't
+               // want to give them too much and end up with their database and their live
+               // code having two different values because part of what we gave them is truncated
+               // hence, we strip out any run of characters longer than what we were asked for.
+               return substr( $hex, 0, $chars );
+       }
+
+       /** Publicly exposed static methods **/
+
+       /**
+        * Return a singleton instance of MWCryptRand
+        * @return MWCryptRand
+        */
+       protected static function singleton() {
+               if ( is_null( self::$singleton ) ) {
+                       self::$singleton = new self;
+               }
+               return self::$singleton;
+       }
+
+       /**
+        * Return a boolean indicating whether or not the source used for cryptographic
+        * random bytes generation in the previously run generate* call
+        * was cryptographically strong.
+        *
+        * @return bool Returns true if the source was strong, false if not.
+        */
+       public static function wasStrong() {
+               return self::singleton()->realWasStrong();
+       }
+
+       /**
+        * Generate a run of (ideally) cryptographically random data and return
+        * it in raw binary form.
+        * You can use MWCryptRand::wasStrong() if you wish to know if the source used
+        * was cryptographically strong.
+        *
+        * @param $bytes int the number of bytes of random data to generate
+        * @param $forceStrong bool Pass true if you want generate to prefer cryptographically
+        *                          strong sources of entropy even if reading from them may steal
+        *                          more entropy from the system than optimal.
+        * @return String Raw binary random data
+        */
+       public static function generate( $bytes, $forceStrong = false ) {
+               return self::singleton()->realGenerate( $bytes, $forceStrong );
+       }
+
+       /**
+        * Generate a run of (ideally) cryptographically random data and return
+        * it in hexadecimal string format.
+        * You can use MWCryptRand::wasStrong() if you wish to know if the source used
+        * was cryptographically strong.
+        *
+        * @param $chars int the number of hex chars of random data to generate
+        * @param $forceStrong bool Pass true if you want generate to prefer cryptographically
+        *                          strong sources of entropy even if reading from them may steal
+        *                          more entropy from the system than optimal.
+        * @return String Hexadecimal random data
+        */
+       public static function generateHex( $chars, $forceStrong = false ) {
+               return self::singleton()->realGenerateHex( $chars, $forceStrong );
+       }
+
+}
index e214b7b..1ca2aba 100644 (file)
@@ -2581,13 +2581,6 @@ $wgResourceLoaderMaxage = array(
        ),
 );
 
-/**
- * Whether to embed private modules inline with HTML output or to bypass
- * caching and check the user parameter against $wgUser to prevent
- * unauthorized access to private modules.
- */
-$wgResourceLoaderInlinePrivateModules = true;
-
 /**
  * The default debug mode (on/off) for of ResourceLoader requests. This will still
  * be overridden when the debug URL parameter is used.
index 287ed97..052a783 100644 (file)
@@ -376,7 +376,7 @@ class EditPage {
                                wfProfileOut( __METHOD__ );
                                return;
                        }
-                       if ( !$this->mTitle->getArticleId() )
+                       if ( !$this->mTitle->getArticleID() )
                                wfRunHooks( 'EditFormPreloadText', array( &$this->textbox1, &$this->mTitle ) );
                        else
                                wfRunHooks( 'EditFormInitialText', array( $this ) );
@@ -805,7 +805,7 @@ class EditPage {
                                        # Otherwise, $text will be left as-is.
                                        if ( !is_null( $undorev ) && !is_null( $oldrev ) &&
                                                $undorev->getPage() == $oldrev->getPage() &&
-                                               $undorev->getPage() == $this->mTitle->getArticleId() &&
+                                               $undorev->getPage() == $this->mTitle->getArticleID() &&
                                                !$undorev->isDeleted( Revision::DELETED_TEXT ) &&
                                                !$oldrev->isDeleted( Revision::DELETED_TEXT ) ) {
 
@@ -1478,7 +1478,7 @@ class EditPage {
                $res = $dbw->select( 'revision',
                        'rev_user',
                        array(
-                               'rev_page' => $this->mTitle->getArticleId(),
+                               'rev_page' => $this->mTitle->getArticleID(),
                                'rev_timestamp > ' . $dbw->addQuotes( $dbw->timestamp( $edittime ) )
                        ),
                        __METHOD__,
@@ -1634,6 +1634,24 @@ class EditPage {
                if ( $namespace == NS_MEDIAWIKI ) {
                        # Show a warning if editing an interface message
                        $wgOut->wrapWikiMsg( "<div class='mw-editinginterface'>\n$1\n</div>", 'editinginterface' );
+               } else if( $namespace == NS_FILE ) {
+                       # Show a hint to shared repo
+                       $file = wfFindFile( $this->mTitle );
+                       if( $file && !$file->isLocal() ) {
+                               $descUrl = $file->getDescriptionUrl();
+                               # there must be a description url to show a hint to shared repo
+                               if( $descUrl ) {
+                                       if( !$this->mTitle->exists() ) {
+                                               $wgOut->wrapWikiMsg( "<div class=\"mw-sharedupload-desc-create\">\n$1\n</div>", array (
+                                                                       'sharedupload-desc-create', $file->getRepo()->getDisplayName(), $descUrl
+                                               ) );
+                                       } else {
+                                               $wgOut->wrapWikiMsg( "<div class=\"mw-sharedupload-desc-edit\">\n$1\n</div>", array(
+                                                                       'sharedupload-desc-edit', $file->getRepo()->getDisplayName(), $descUrl
+                                               ) );
+                                       }
+                               }
+                       }
                }
 
                # Show a warning message when someone creates/edits a user (talk) page but the user does not exist
@@ -1872,7 +1890,7 @@ class EditPage {
         * @return Mixed|string or false
         */
        public static function extractSectionTitle( $text ) {
-               preg_match( "/^(=+)(.+)\\1(\n|$)/i", $text, $matches );
+               preg_match( "/^(=+)(.+)\\1\\s*(\n|$)/i", $text, $matches );
                if ( !empty( $matches[2] ) ) {
                        global $wgParser;
                        return $wgParser->stripSectionName( trim( $matches[2] ) );
@@ -3027,12 +3045,15 @@ HTML
        /**
         * Show "your edit contains spam" page with your diff and text
         *
-        * @param $match string|bool Text which triggered one or more filters
+        * @param $match string|Array|bool Text (or array of texts) which triggered one or more filters
         */
        public function spamPageWithContent( $match = false ) {
-               global $wgOut;
+               global $wgOut, $wgLang;
                $this->textbox2 = $this->textbox1;
 
+               if( is_array( $match ) ){
+                       $match = $wgLang->listToText( $match );
+               }
                $wgOut->prepareErrorPage( wfMessage( 'spamprotectiontitle' ) );
 
                $wgOut->addHTML( '<div id="spamprotected">' );
index 35a1b5b..0d1aeef 100644 (file)
@@ -308,9 +308,6 @@ class WikiExporter {
                        $wrapper = $this->db->resultObject( $result );
                        # Output dump results
                        $this->outputPageStream( $wrapper );
-                       if ( $this->list_authors ) {
-                               $this->outputPageStream( $wrapper );
-                       }
 
                        if ( $this->buffer == WikiExporter::STREAM ) {
                                $this->db->bufferResults( $prev );
@@ -487,12 +484,6 @@ class XmlDumpWriter {
                        }
                }
 
-               if ( $row->rev_sha1 ) {
-                       $out .= "      " . Xml::element('sha1', null, strval( $row->rev_sha1 ) ) . "\n";
-               } else {
-                       $out .= "      <sha1/>\n";
-               }
-
                if ( $row->page_restrictions != '' ) {
                        $out .= '    ' . Xml::element( 'restrictions', array(),
                                strval( $row->page_restrictions ) ) . "\n";
@@ -560,6 +551,12 @@ class XmlDumpWriter {
                                "" ) . "\n";
                }
 
+               if ( $row->rev_sha1 && !( $row->rev_deleted & Revision::DELETED_TEXT ) ) {
+                       $out .= "      " . Xml::element('sha1', null, strval( $row->rev_sha1 ) ) . "\n";
+               } else {
+                       $out .= "      <sha1/>\n";
+               }
+
                wfRunHooks( 'XmlDumpWriterWriteRevision', array( &$this, &$out, $row, $text ) );
 
                $out .= "    </revision>\n";
@@ -787,13 +784,21 @@ class DumpOutput {
  * @ingroup Dump
  */
 class DumpFileOutput extends DumpOutput {
-       protected $handle, $filename;
+       protected $handle = false, $filename;
 
        function __construct( $file ) {
                $this->handle = fopen( $file, "wt" );
                $this->filename = $file;
        }
 
+       function writeCloseStream( $string ) {
+               parent::writeCloseStream( $string );
+               if ( $this->handle ) {
+                       fclose( $this->handle );
+                       $this->handle = false;
+               }
+       }
+
        function write( $string ) {
                fputs( $this->handle, $string );
        }
@@ -822,7 +827,10 @@ class DumpFileOutput extends DumpOutput {
        function closeAndRename( $newname, $open = false ) {
                $newname = $this->checkRenameArgCount( $newname );
                if ( $newname ) {
-                       fclose( $this->handle );
+                       if ( $this->handle ) {
+                               fclose( $this->handle );
+                               $this->handle = false;
+                       }
                        $this->renameOrException( $newname );
                        if ( $open ) {
                                $this->handle = fopen( $this->filename, "wt" );
@@ -843,6 +851,7 @@ class DumpFileOutput extends DumpOutput {
  */
 class DumpPipeOutput extends DumpFileOutput {
        protected $command, $filename;
+       private $procOpenResource = false;
 
        function __construct( $command, $file = null ) {
                if ( !is_null( $file ) ) {
@@ -854,6 +863,14 @@ class DumpPipeOutput extends DumpFileOutput {
                $this->filename = $file;
        }
 
+       function writeCloseStream( $string ) {
+               parent::writeCloseStream( $string );
+               if ( $this->procOpenResource ) {
+                       proc_close( $this->procOpenResource );
+                       $this->procOpenResource = false;
+               }
+       }
+
        function startCommand( $command ) {
                $spec = array(
                        0 => array( "pipe", "r" ),
@@ -870,8 +887,14 @@ class DumpPipeOutput extends DumpFileOutput {
        function closeAndRename( $newname, $open = false ) {
                $newname = $this->checkRenameArgCount( $newname );
                if ( $newname ) {
-                       fclose( $this->handle );
-                       proc_close( $this->procOpenResource );
+                       if ( $this->handle ) {
+                               fclose( $this->handle );
+                               $this->handle = false;
+                       }
+                       if ( $this->procOpenResource ) {
+                               proc_close( $this->procOpenResource );
+                               $this->procOpenResource = false;
+                       }
                        $this->renameOrException( $newname );
                        if ( $open ) {
                                $command = $this->command;
index 089acd0..d86c8d8 100644 (file)
@@ -89,9 +89,7 @@ class FileDeleteForm {
 
                        if( !$status->isGood() ) {
                                $wgOut->addHTML( '<h2>' . $this->prepareMessage( 'filedeleteerror-short' ) . "</h2>\n" );
-                               $wgOut->addHTML( '<span class="error">' );
-                               $wgOut->addWikiText( $status->getWikiText( 'filedeleteerror-short', 'filedeleteerror-long' ) );
-                               $wgOut->addHTML( '</span>' );
+                               $wgOut->addWikiText( '<div class="error">' . $status->getWikiText( 'filedeleteerror-short', 'filedeleteerror-long' ) . '</div>' );
                        }
                        if( $status->ok ) {
                                $wgOut->setPageTitle( wfMessage( 'actioncomplete' ) );
index 2ada714..8649fe7 100644 (file)
@@ -117,8 +117,9 @@ class ForkController {
 
        protected function prepareEnvironment() {
                global $wgMemc;
-               // Don't share DB or memcached connections
+               // Don't share DB, storage, or memcached connections
                wfGetLBFactory()->destroyInstance();
+               FileBackendGroup::destroySingleton();
                ObjectCache::clear();
                $wgMemc = null;
        }
diff --git a/includes/GitInfo.php b/includes/GitInfo.php
new file mode 100644 (file)
index 0000000..618ae94
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+/**
+ * A class to help return information about a git repo MediaWiki may be inside
+ * This is used by Special:Version and is also useful for the LocalSettings.php
+ * of anyone working on large branches in git to setup config that show up only
+ * when specific branches are currently checked out.
+ *
+ * @file
+ */
+
+class GitInfo {
+
+       /**
+        * Singleton for the repo at $IP
+        */
+       protected static $repo = null;
+
+       /**
+        * Location of the .git directory
+        */
+       protected $basedir;
+
+       /**
+        * @param $dir The root directory of the repo where the .git dir can be found
+        */
+       public function __construct( $dir ) {
+               $this->basedir = "{$dir}/.git/";
+       }
+
+       /**
+        * Return a singleton for the repo at $IP
+        * @return GitInfo
+        */
+       public static function repo() {
+               global $IP;
+               if ( is_null( self::$repo ) ) {
+                       self::$repo = new self( $IP );
+               }
+               return self::$repo;
+       }
+
+       /**
+        * Check if a string looks like a hex encoded SHA1 hash
+        *
+        * @param $str The string to check
+        * @return bool Whether or not the string looks like a SHA1
+        */
+       public static function isSHA1( $str ) {
+               return !!preg_match( '/^[0-9A-F]{40}$/i', $str );
+       }
+
+       /**
+        * Return the HEAD of the repo (without any opening "ref: ")
+        * @return string The HEAD
+        */
+       public function getHead() {
+               $HEADfile = "{$this->basedir}/HEAD";
+
+               if ( !is_readable( $HEADfile ) ) {
+                       return false;
+               }
+
+               $HEAD = file_get_contents( $HEADfile );
+
+               if ( preg_match( "/ref: (.*)/", $HEAD, $m ) ) {
+                       return rtrim( $m[1] );
+               } else {
+                       return $HEAD;
+               }
+       }
+
+       /**
+        * Return the SHA1 for the current HEAD of the repo
+        * @return string A SHA1 or false
+        */
+       public function getHeadSHA1() {
+               $HEAD = $this->getHead();
+
+               // If detached HEAD may be a SHA1
+               if ( self::isSHA1( $HEAD ) ) {
+                       return $HEAD;
+               }
+
+               // If not a SHA1 it may be a ref:
+               $REFfile = "{$this->basedir}{$HEAD}";
+               if ( !is_readable( $REFfile ) ) {
+                       return false;
+               }
+
+               $sha1 = rtrim( file_get_contents( $REFfile ) );
+
+               return $sha1;
+       }
+
+       /**
+        * Return the name of the current branch, or HEAD if not found
+        * @return string The branch name, HEAD, or false
+        */
+       public function getCurrentBranch() {
+               $HEAD = $this->getHead();
+               if ( $HEAD && preg_match( "#^refs/heads/(.*)$#", $HEAD, $m ) ) {
+                       return $m[1];
+               } else {
+                       return $HEAD;
+               }
+       }
+
+       /**
+        * @see self::getHeadSHA1
+        */
+       public static function headSHA1() {
+               return self::repo()->getHeadSHA1();
+       }
+
+       /**
+        * @see self::getCurrentBranch
+        */
+       public static function currentBranch() {
+               return self::repo()->getCurrentBranch();
+       }
+
+}
index ce9c287..e9f22de 100644 (file)
@@ -221,7 +221,7 @@ function wfMergeErrorArrays( /*...*/ ) {
  * @param $after Mixed: The key to insert after
  * @return Array
  */
-function wfArrayInsertAfter( $array, $insert, $after ) {
+function wfArrayInsertAfter( array $array, array $insert, $after ) {
        // Find the offset of the element to insert after.
        $keys = array_keys( $array );
        $offsetByKey = array_flip( $keys );
@@ -294,6 +294,24 @@ function wfRandom() {
        return $rand;
 }
 
+/**
+ * Get a random string containing a number of pesudo-random hex
+ * characters.
+ * @note This is not secure, if you are trying to generate some sort
+ *       of token please use MWCryptRand instead.
+ *
+ * @param $length int The length of the string to generate
+ * @return String
+ * @since 1.20
+ */
+function wfRandomString( $length = 32 ) {
+       $str = '';
+       while ( strlen( $str ) < $length ) {
+               $str .= dechex( mt_rand() );
+       }
+       return substr( $str, 0, $length );
+}
+
 /**
  * We want some things to be included as literal characters in our title URLs
  * for prettiness, which urlencode encodes by default.  According to RFC 1738,
@@ -876,12 +894,16 @@ function wfDebug( $text, $logonly = false ) {
        global $wgDebugLogPrefix, $wgShowDebug;
 
        static $cache = array(); // Cache of unoutputted messages
-       $text = wfDebugTimer() . $text;
 
        if ( !$wgDebugRawPage && wfIsDebugRawPage() ) {
                return;
        }
 
+       $timer = wfDebugTimer();
+       if ( $timer !== '' ) {
+               $text = preg_replace( '/[^\n]/', $timer . '\0', $text, 1 );
+       }
+
        if ( ( $wgDebugComments || $wgShowDebug ) && !$logonly ) {
                $cache[] = $text;
 
@@ -3318,6 +3340,33 @@ function wfHttpOnlySafe() {
        return true;
 }
 
+/**
+ * Override session_id before session startup if php's built-in
+ * session generation code is not secure.
+ */
+function wfFixSessionID() {
+       // If the cookie or session id is already set we already have a session and should abort
+       if ( isset( $_COOKIE[ session_name() ] ) || session_id() ) {
+               return;
+       }
+
+       // PHP's built-in session entropy is enabled if:
+       // - entropy_file is set or you're on Windows with php 5.3.3+
+       // - AND entropy_length is > 0
+       // We treat it as disabled if it doesn't have an entropy length of at least 32
+       $entropyEnabled = (
+                       ( wfIsWindows() && version_compare( PHP_VERSION, '5.3.3', '>=' ) )
+                       || ini_get( 'session.entropy_file' )
+               )
+               && intval( ini_get( 'session.entropy_length' ) ) >= 32;
+       
+       // If built-in entropy is not enabled or not sufficient override php's built in session id generation code
+       if ( !$entropyEnabled ) {
+               wfDebug( __METHOD__ . ": PHP's built in entropy is disabled or not sufficient, overriding session id generation using our cryptrand source.\n" );
+               session_id( MWCryptRand::generateHex( 32 ) );
+       }
+}
+
 /**
  * Initialise php session
  *
@@ -3357,6 +3406,8 @@ function wfSetupSession( $sessionId = false ) {
        session_cache_limiter( 'private, must-revalidate' );
        if ( $sessionId ) {
                session_id( $sessionId );
+       } else {
+               wfFixSessionID();
        }
        wfSuppressWarnings();
        session_start();
@@ -3677,8 +3728,11 @@ function wfCountDown( $n ) {
  *              characters before hashing.
  * @return string
  * @codeCoverageIgnore
+ * @deprecated since 1.20; Please use MWCryptRand for security purposes and wfRandomString for pesudo-random strings
+ * @warning This method is NOT secure. Additionally it has many callers that use it for pesudo-random purposes.
  */
 function wfGenerateToken( $salt = '' ) {
+       wfDeprecated( __METHOD__, '1.20' );
        $salt = serialize( $salt );
        return md5( mt_rand( 0, 0x7fffffff ) . $salt );
 }
index 3b3e1b6..dccf967 100644 (file)
@@ -271,7 +271,7 @@ class HTMLForm extends ContextSource {
 
        /**
         * The here's-one-I-made-earlier option: do the submission if
-        * posted, or display the form with or without funky valiation
+        * posted, or display the form with or without funky validation
         * errors
         * @return Bool or Status whether submission was successful.
         */
@@ -279,7 +279,7 @@ class HTMLForm extends ContextSource {
                $this->prepareForm();
 
                $result = $this->tryAuthorizedSubmit();
-               if ( $result === true || ( $result instanceof Status && $result->isGood() ) ){
+               if ( $result === true || ( $result instanceof Status && $result->isGood() ) ) {
                        return $result;
                }
 
index 8dd6525..a1d2e59 100644 (file)
@@ -800,7 +800,9 @@ class PhpHttpRequest extends MWHttpRequest {
                if ( $this->method == 'POST' ) {
                        // Required for HTTP 1.0 POSTs
                        $this->reqHeaders['Content-Length'] = strlen( $this->postData );
-                       $this->reqHeaders['Content-type'] = "application/x-www-form-urlencoded";
+                       if( !isset( $this->reqHeaders['Content-Type'] ) ) {
+                               $this->reqHeaders['Content-Type'] = "application/x-www-form-urlencoded";
+                       }
                }
 
                $options = array();
index d53302b..607d878 100644 (file)
@@ -829,7 +829,7 @@ class UploadSourceAdapter {
         * @return string
         */
        static function registerSource( $source ) {
-               $id = wfGenerateToken();
+               $id = wfRandomString();
 
                self::$sourceRegistrations[$id] = $source;
 
index 917f438..918bebc 100644 (file)
@@ -1193,7 +1193,7 @@ class Linker {
                }
                if ( $pre ) {
                        # written summary $presep autocomment (summary /* section */)
-                       $auto = wfMsgExt( 'autocomment-prefix', array( 'escapenoentities', 'content' ) ) . $auto;
+                       $pre .= wfMsgExt( 'autocomment-prefix', array( 'escapenoentities', 'content' ) );
                }
                if ( $post ) {
                        # autocomment $postsep written summary (/* section */ summary)
index 73914d7..96ce7a9 100644 (file)
@@ -294,6 +294,7 @@ class Message {
        public function setContext( IContextSource $context ) {
                $this->inLanguage( $context->getLanguage() );
                $this->title( $context->getTitle() );
+               $this->interface = true;
 
                return $this;
        }
@@ -378,7 +379,15 @@ class Message {
         * @return String: HTML
         */
        public function toString() {
-               $string = $this->getMessageText();
+               $string = $this->fetchMessage();
+
+               if ( $string === false ) {
+                       $key =  htmlspecialchars( is_array( $this->key ) ? $this->key[0] : $this->key );
+                       if ( $this->format === 'plain' ) {
+                               return '<' . $key . '>';
+                       }
+                       return '&lt;' . $key . '&gt;';
+               }
 
                # Replace parameters before text parsing
                $string = $this->replaceParameters( $string, 'before' );
@@ -560,19 +569,6 @@ class Message {
                return MessageCache::singleton()->transform( $string, $this->interface, $this->language, $this->title );
        }
 
-       /**
-        * Returns the textual value for the message.
-        * @return Message contents or placeholder
-        */
-       protected function getMessageText() {
-               $message = $this->fetchMessage();
-               if ( $message === false ) {
-                       return '&lt;' . htmlspecialchars( is_array($this->key) ? $this->key[0] : $this->key ) . '&gt;';
-               } else {
-                       return $message;
-               }
-       }
-
        /**
         * Wrapper for what ever method we use to get message contents
         *
index bb02c01..beaca5f 100644 (file)
@@ -22,7 +22,7 @@ class OutputPage extends ContextSource {
        /// Should be private. Used with addMeta() which adds <meta>
        var $mMetatags = array();
 
-       /// <meta keyworkds="stuff"> most of the time the first 10 links to an article
+       /// <meta keywords="stuff"> most of the time the first 10 links to an article
        var $mKeywords = array();
 
        var $mLinktags = array();
@@ -2505,7 +2505,7 @@ $templates
         * @return string html <script> and <style> tags
         */
        protected function makeResourceLoaderLink( $modules, $only, $useESI = false, array $extraQuery = array(), $loadCall = false ) {
-               global $wgResourceLoaderUseESI, $wgResourceLoaderInlinePrivateModules;
+               global $wgResourceLoaderUseESI;
 
                if ( !count( $modules ) ) {
                        return '';
@@ -2584,10 +2584,11 @@ $templates
                                continue;
                        }
 
-                       // Support inlining of private modules if configured as such. Note that these
-                       // modules should be loaded from getHeadScripts() before the first loader call.
-                       // Otherwise other modules can't properly use them as dependencies (bug 30914)
-                       if ( $group === 'private' && $wgResourceLoaderInlinePrivateModules ) {
+                       // Inline private modules. These can't be loaded through load.php for security
+                       // reasons, see bug 34907. Note that these modules should be loaded from
+                       // getHeadScripts() before the first loader call. Otherwise other modules can't
+                       // properly use them as dependencies (bug 30914)
+                       if ( $group === 'private' ) {
                                if ( $only == ResourceLoaderModule::TYPE_STYLES ) {
                                        $links .= Html::inlineStyle(
                                                $resourceLoader->makeModuleResponse( $context, $modules )
@@ -2840,6 +2841,10 @@ $templates
                $ns = $title->getNamespace();
                $nsname = 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() );
                } elseif ( $this->canUseWikiPage() ) {
@@ -2881,6 +2886,7 @@ $templates
                        'wgPageContentLanguage' => $lang->getCode(),
                        'wgSeparatorTransformTable' => $compactSeparatorTransTable,
                        'wgDigitTransformTable' => $compactDigitTransTable,
+                       'wgRelevantPageName' => $relevantTitle->getPrefixedDBKey(),
                );
                if ( $wgContLang->hasVariants() ) {
                        $vars['wgUserVariant'] = $wgContLang->getPreferredVariant();
index c021b26..bc8e47f 100644 (file)
@@ -361,6 +361,7 @@ class Preferences {
                                'default' => $emailAddress,
                                'label-message' => 'youremail',
                                'section' => 'personal/email',
+                               'help-messages' => $helpMessages,
                                # 'cssclass' chosen below
                        );
 
@@ -915,6 +916,7 @@ class Preferences {
 
                if ( $wgEnableAPI ) {
                        # Some random gibberish as a proposed default
+                       // @fixme This should use CryptRand but we may not want to read urandom on every view
                        $hash = sha1( mt_rand() . microtime( true ) );
 
                        $defaultPreferences['watchlisttoken'] = array(
index 1ce47e1..e57efae 100644 (file)
@@ -89,9 +89,8 @@ class RecentChange {
         */
        public static function newFromId( $rcid ) {
                $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select( 'recentchanges', '*', array( 'rc_id' => $rcid ), __METHOD__ );
-               if( $res && $dbr->numRows( $res ) > 0 ) {
-                       $row = $dbr->fetchObject( $res );
+               $row = $dbr->selectRow( 'recentchanges', '*', array( 'rc_id' => $rcid ), __METHOD__ );
+               if( $row !== false ) {
                        return self::newFromRow( $row );
                } else {
                        return null;
@@ -383,12 +382,6 @@ class RecentChange {
         */
        public static function notifyEdit( $timestamp, &$title, $minor, &$user, $comment, $oldId,
                $lastTimestamp, $bot, $ip='', $oldSize=0, $newSize=0, $newId=0, $patrol=0 ) {
-               global $wgRequest;
-               if( !$ip ) {
-                       $ip = $wgRequest->getIP();
-                       if( !$ip ) $ip = '';
-               }
-
                $rc = new RecentChange;
                $rc->mAttribs = array(
                        'rc_timestamp'  => $timestamp,
@@ -406,7 +399,7 @@ class RecentChange {
                        'rc_bot'        => $bot ? 1 : 0,
                        'rc_moved_to_ns' => 0,
                        'rc_moved_to_title' => '',
-                       'rc_ip'         => $ip,
+                       'rc_ip'         => self::checkIPAddress( $ip ),
                        'rc_patrolled'  => intval($patrol),
                        'rc_new'        => 0,  # obsolete
                        'rc_old_len'    => $oldSize,
@@ -447,14 +440,6 @@ class RecentChange {
         */
        public static function notifyNew( $timestamp, &$title, $minor, &$user, $comment, $bot,
                $ip='', $size=0, $newId=0, $patrol=0 ) {
-               global $wgRequest;
-               if( !$ip ) {
-                       $ip = $wgRequest->getIP();
-                       if( !$ip ) {
-                               $ip = '';
-                       }
-               }
-
                $rc = new RecentChange;
                $rc->mAttribs = array(
                        'rc_timestamp'      => $timestamp,
@@ -472,7 +457,7 @@ class RecentChange {
                        'rc_bot'            => $bot ? 1 : 0,
                        'rc_moved_to_ns'    => 0,
                        'rc_moved_to_title' => '',
-                       'rc_ip'             => $ip,
+                       'rc_ip'             => self::checkIPAddress( $ip ),
                        'rc_patrolled'      => intval($patrol),
                        'rc_new'            => 1, # obsolete
                        'rc_old_len'        => 0,
@@ -541,12 +526,6 @@ class RecentChange {
        public static function newLogEntry( $timestamp, &$title, &$user, $actionComment, $ip,
                $type, $action, $target, $logComment, $params, $newId=0, $actionCommentIRC='' ) {
                global $wgRequest;
-               if( !$ip ) {
-                       $ip = $wgRequest->getIP();
-                       if( !$ip ) {
-                               $ip = '';
-                       }
-               }
 
                $rc = new RecentChange;
                $rc->mAttribs = array(
@@ -565,7 +544,7 @@ class RecentChange {
                        'rc_bot'        => $user->isAllowed( 'bot' ) ? $wgRequest->getBool( 'bot', true ) : 0,
                        'rc_moved_to_ns' => 0,
                        'rc_moved_to_title' => '',
-                       'rc_ip'         => $ip,
+                       'rc_ip'         => self::checkIPAddress( $ip ),
                        'rc_patrolled'  => 1,
                        'rc_new'        => 0, # obsolete
                        'rc_old_len'    => null,
@@ -576,6 +555,7 @@ class RecentChange {
                        'rc_log_action' => $action,
                        'rc_params'     => $params
                );
+
                $rc->mExtra =  array(
                        'prefixedDBkey' => $title->getPrefixedDBkey(),
                        'lastTimestamp' => 0,
@@ -770,4 +750,18 @@ class RecentChange {
                }
                return ChangesList::showCharacterDifference( $old, $new );
        }
+
+       private static function checkIPAddress( $ip ) {
+               global $wgRequest;
+               if ( $ip ) {
+                       if ( !IP::isIPAddress( $ip ) ) {
+                               throw new MWException( "Attempt to write \"" . $ip . "\" as an IP address into recent changes" );
+                       }
+               } else {
+                       $ip = $wgRequest->getIP();
+                       if( !$ip ) 
+                               $ip = '';
+               }
+               return $ip;
+       }
 }
index f155e6a..1147e6a 100644 (file)
@@ -1185,7 +1185,7 @@ class Revision {
                        $id = 0;
                }
                $conds = array( 'rev_id' => $id );
-               $conds['rev_page'] = $title->getArticleId();
+               $conds['rev_page'] = $title->getArticleID();
                $timestamp = $dbr->selectField( 'revision', 'rev_timestamp', $conds, __METHOD__ );
                if ( $timestamp === false && wfGetLB()->getServerCount() > 1 ) {
                        # Not in slave, try master
@@ -1219,7 +1219,7 @@ class Revision {
         * @return Integer
         */
        static function countByTitle( $db, $title ) {
-               $id = $title->getArticleId();
+               $id = $title->getArticleID();
                if( $id ) {
                        return Revision::countByPageId( $db, $id );
                }
diff --git a/includes/ScopedPHPTimeout.php b/includes/ScopedPHPTimeout.php
new file mode 100644 (file)
index 0000000..97c6bbf
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Class to expand PHP execution time for a function call.
+ * On construction, set_time_limit() is called and set to $seconds.
+ * When the object goes out of scope, the timer is restarted, with
+ * the original time limit minus the time the object existed.
+ */
+class ScopedPHPTimeout {
+       protected $startTime; // float; seconds
+       protected $oldTimeout; // integer; seconds
+
+       protected static $stackDepth = 0; // integer
+       protected static $totalCalls = 0; // integer
+       protected static $totalElapsed = 0; // float; seconds
+
+       /* Prevent callers in infinite loops from running forever */
+       const MAX_TOTAL_CALLS = 1000000;
+       const MAX_TOTAL_TIME = 300; // seconds
+
+       /**
+        * @param $seconds integer
+        */
+       public function __construct( $seconds ) {
+               if ( ini_get( 'max_execution_time' ) > 0 ) { // CLI uses 0
+                       if ( self::$totalCalls >= self::MAX_TOTAL_CALLS ) {
+                               trigger_error( "Maximum invocations of " . __CLASS__ . " exceeded." );
+                       } elseif ( self::$totalElapsed >= self::MAX_TOTAL_TIME ) {
+                               trigger_error( "Time limit within invocations of " . __CLASS__ . " exceeded." );
+                       } elseif ( self::$stackDepth > 0 ) { // recursion guard
+                               trigger_error( "Resursive invocation of " . __CLASS__ . " attempted." );
+                       } else {
+                               $this->oldTimeout = ini_set( 'max_execution_time', $seconds );
+                               $this->startTime = microtime( true );
+                               ++self::$stackDepth;
+                               ++self::$totalCalls; // proof against < 1us scopes
+                       }
+               }
+       }
+
+       /**
+        * Restore the original timeout.
+        * This does not account for the timer value on __construct().
+        */
+       public function __destruct() {
+               if ( $this->oldTimeout ) {
+                       $elapsed = microtime( true ) - $this->startTime;
+                       // Note: a limit of 0 is treated as "forever"
+                       set_time_limit( max( 1, $this->oldTimeout - (int)$elapsed ) );
+                       // If each scoped timeout is for less than one second, we end up
+                       // restoring the original timeout without any decrease in value.
+                       // Thus web scripts in an infinite loop can run forever unless we
+                       // take some measures to prevent this. Track total time and calls.
+                       self::$totalElapsed += $elapsed;
+                       --self::$stackDepth;
+               }
+       }
+}
index b858dba..2777f73 100644 (file)
@@ -421,16 +421,16 @@ if ( $wgCommandLineMode ) {
        # Can't stub this one, it sets up $_GET and $_REQUEST in its constructor
        $wgRequest = new WebRequest;
 
-       $debug = "Start request\n\n{$_SERVER['REQUEST_METHOD']} {$wgRequest->getRequestURL()}";
+       $debug = "\n\nStart request {$_SERVER['REQUEST_METHOD']} {$wgRequest->getRequestURL()}\n";
 
        if ( $wgDebugPrintHttpHeaders ) {
-               $debug .= "\nHTTP HEADERS:\n";
+               $debug .= "HTTP HEADERS:\n";
 
                foreach ( $wgRequest->getAllHeaders() as $name => $value ) {
                        $debug .= "$name: $value\n";
                }
        }
-       wfDebug( "$debug\n" );
+       wfDebug( $debug );
 }
 
 wfProfileOut( $fname . '-misc1' );
index 7fc4a5c..eb2b8ae 100644 (file)
@@ -662,7 +662,7 @@ abstract class Skin extends ContextSource {
                $action = $this->getRequest()->getVal( 'action', 'view' );
 
                if ( $this->getUser()->isAllowed( 'deletedhistory' ) &&
-                       ( $this->getTitle()->getArticleId() == 0 || $action == 'history' ) ) {
+                       ( $this->getTitle()->getArticleID() == 0 || $action == 'history' ) ) {
                        $n = $this->getTitle()->isDeleted();
 
 
index 4db9da4..480f3eb 100644 (file)
@@ -324,7 +324,7 @@ class LegacyTemplate extends BaseTemplate {
 
                        $s = implode( $element, $sep );
 
-                       if ( $title->getArticleId() ) {
+                       if ( $title->getArticleID() ) {
                                $s .= "\n<br />";
 
                                // Delete/protect/move links for privileged users
@@ -573,7 +573,7 @@ class LegacyTemplate extends BaseTemplate {
                $diff = $wgRequest->getVal( 'diff' );
                $title = $this->getSkin()->getTitle();
 
-               if ( $title->getArticleId() && ( !$diff ) && $wgUser->isAllowed( 'delete' ) ) {
+               if ( $title->getArticleID() && ( !$diff ) && $wgUser->isAllowed( 'delete' ) ) {
                        $t = wfMsg( 'deletethispage' );
 
                        $s = Linker::linkKnown(
@@ -595,7 +595,7 @@ class LegacyTemplate extends BaseTemplate {
                $diff = $wgRequest->getVal( 'diff' );
                $title = $this->getSkin()->getTitle();
 
-               if ( $title->getArticleId() && ( ! $diff ) && $wgUser->isAllowed( 'protect' ) ) {
+               if ( $title->getArticleID() && ( ! $diff ) && $wgUser->isAllowed( 'protect' ) ) {
                        if ( $title->isProtected() ) {
                                $text = wfMsg( 'unprotectthispage' );
                                $query = array( 'action' => 'unprotect' );
index 2d198f9..511443f 100644 (file)
@@ -216,7 +216,7 @@ class SkinTemplate extends Skin {
                $tpl->setRef( 'thispage', $this->thispage );
                $tpl->setRef( 'titleprefixeddbkey', $this->thispage );
                $tpl->set( 'titletext', $title->getText() );
-               $tpl->set( 'articleid', $title->getArticleId() );
+               $tpl->set( 'articleid', $title->getArticleID() );
 
                $tpl->set( 'isarticle', $out->isArticle() );
 
@@ -581,10 +581,12 @@ class SkinTemplate extends Skin {
                        );
 
                        # We need to do an explicit check for Special:Contributions, as we
-                       # have to match both the title, and the target (which could come
-                       # from request values or be specified in "sub page" form. The plot
+                       # have to match both the title, and the target, which could come
+                       # from request values (Special:Contributions?target=Jimbo_Wales)
+                       # or be specified in "sub page" form
+                       # (Special:Contributions/Jimbo_Wales). The plot
                        # thickens, because the Title object is altered for special pages,
-                       # so doesn't contain the original alias-with-subpage.
+                       # so it doesn't contain the original alias-with-subpage.
                        $origTitle = Title::newFromText( $request->getText( 'title' ) );
                        if( $origTitle instanceof Title && $origTitle->isSpecialPage() ) {
                                list( $spName, $spPar ) = SpecialPageFactory::resolveAlias( $origTitle->getText() );
@@ -1173,7 +1175,7 @@ class SkinTemplate extends Skin {
                        $nav_urls['whatlinkshere'] = array(
                                'href' => SpecialPage::getTitleFor( 'Whatlinkshere', $this->thispage )->getLocalUrl()
                        );
-                       if ( $this->getTitle()->getArticleId() ) {
+                       if ( $this->getTitle()->getArticleID() ) {
                                $nav_urls['recentchangeslinked'] = array(
                                        'href' => SpecialPage::getTitleFor( 'Recentchangeslinked', $this->thispage )->getLocalUrl()
                                );
index 3f8b88e..411d5e4 100644 (file)
@@ -773,8 +773,8 @@ class SpecialPage {
                // the context, but setting the language for Message class removes the
                // interface message status, which breaks for example usernameless gender
                // invokations. Restore the flag when not including special page in content.
-               if ( !$this->including() ) {
-                       $message->setInterfaceMessageFlag( true );
+               if ( $this->including() ) {
+                       $message->setInterfaceMessageFlag( false );
                }
                return $message;
        }
index 7b583b1..835b2ed 100644 (file)
@@ -357,4 +357,11 @@ class Status {
        public function getMessage() {
                return $this->getWikiText();
        }
+
+       /**
+        * @return mixed
+        */
+       public function getValue() {
+               return $this->value;
+       }
 }
index 1a8f3e8..769adb9 100644 (file)
@@ -2538,7 +2538,7 @@ class Title {
 
                if ( $oldFashionedRestrictions === null ) {
                        $oldFashionedRestrictions = $dbr->selectField( 'page', 'page_restrictions',
-                               array( 'page_id' => $this->getArticleId() ), __METHOD__ );
+                               array( 'page_id' => $this->getArticleID() ), __METHOD__ );
                }
 
                if ( $oldFashionedRestrictions != '' ) {
@@ -2609,7 +2609,7 @@ class Title {
                                $res = $dbr->select(
                                        'page_restrictions',
                                        '*',
-                                       array( 'pr_page' => $this->getArticleId() ),
+                                       array( 'pr_page' => $this->getArticleID() ),
                                        __METHOD__
                                );
 
@@ -3167,7 +3167,7 @@ class Title {
         * @return Array of Title objects linking here
         */
        public function getLinksFrom( $options = array(), $table = 'pagelinks', $prefix = 'pl' ) {
-               $id = $this->getArticleId();
+               $id = $this->getArticleID();
 
                # If the page doesn't exist; there can't be any link from this page
                if ( !$id ) {
@@ -3231,7 +3231,7 @@ class Title {
         * @return Array of Title the Title objects
         */
        public function getBrokenLinksFrom() {
-               if ( $this->getArticleId() == 0 ) {
+               if ( $this->getArticleID() == 0 ) {
                        # All links from article ID 0 are false positives
                        return array();
                }
@@ -3241,7 +3241,7 @@ class Title {
                        array( 'page', 'pagelinks' ),
                        array( 'pl_namespace', 'pl_title' ),
                        array(
-                               'pl_from' => $this->getArticleId(),
+                               'pl_from' => $this->getArticleID(),
                                'page_namespace IS NULL'
                        ),
                        __METHOD__, array(),
@@ -3714,8 +3714,8 @@ class Title {
                        // We don't know whether this function was called before
                        // or after moving the root page, so check both
                        // $this and $nt
-                       if ( $oldSubpage->getArticleId() == $this->getArticleId() ||
-                                       $oldSubpage->getArticleID() == $nt->getArticleId() )
+                       if ( $oldSubpage->getArticleID() == $this->getArticleID() ||
+                                       $oldSubpage->getArticleID() == $nt->getArticleID() )
                        {
                                // When moving a page to a subpage of itself,
                                // don't move it twice
@@ -3839,7 +3839,7 @@ class Title {
 
                $data = array();
 
-               $titleKey = $this->getArticleId();
+               $titleKey = $this->getArticleID();
 
                if ( $titleKey === 0 ) {
                        return $data;
@@ -3917,7 +3917,7 @@ class Title {
                $db = ( $flags & self::GAID_FOR_UPDATE ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_SLAVE );
                return $db->selectField( 'revision', 'rev_id',
                        array(
-                               'rev_page' => $this->getArticleId( $flags ),
+                               'rev_page' => $this->getArticleID( $flags ),
                                'rev_id < ' . intval( $revId )
                        ),
                        __METHOD__,
@@ -3936,7 +3936,7 @@ class Title {
                $db = ( $flags & self::GAID_FOR_UPDATE ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_SLAVE );
                return $db->selectField( 'revision', 'rev_id',
                        array(
-                               'rev_page' => $this->getArticleId( $flags ),
+                               'rev_page' => $this->getArticleID( $flags ),
                                'rev_id > ' . intval( $revId )
                        ),
                        __METHOD__,
@@ -3951,7 +3951,7 @@ class Title {
         * @return Revision|Null if page doesn't exist
         */
        public function getFirstRevision( $flags = 0 ) {
-               $pageId = $this->getArticleId( $flags );
+               $pageId = $this->getArticleID( $flags );
                if ( $pageId ) {
                        $db = ( $flags & self::GAID_FOR_UPDATE ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_SLAVE );
                        $row = $db->selectRow( 'revision', '*',
@@ -4016,7 +4016,7 @@ class Title {
                if ( $this->mEstimateRevisions === null ) {
                        $dbr = wfGetDB( DB_SLAVE );
                        $this->mEstimateRevisions = $dbr->estimateRowCount( 'revision', '*',
-                               array( 'rev_page' => $this->getArticleId() ), __METHOD__ );
+                               array( 'rev_page' => $this->getArticleID() ), __METHOD__ );
                }
 
                return $this->mEstimateRevisions;
@@ -4043,7 +4043,7 @@ class Title {
                $dbr = wfGetDB( DB_SLAVE );
                return (int)$dbr->selectField( 'revision', 'count(*)',
                        array(
-                               'rev_page' => $this->getArticleId(),
+                               'rev_page' => $this->getArticleID(),
                                'rev_timestamp > ' . $dbr->addQuotes( $dbr->timestamp( $old->getTimestamp() ) ),
                                'rev_timestamp < ' . $dbr->addQuotes( $dbr->timestamp( $new->getTimestamp() ) )
                        ),
@@ -4117,7 +4117,7 @@ class Title {
         * @return Bool
         */
        public function exists() {
-               return $this->getArticleId() != 0;
+               return $this->getArticleID() != 0;
        }
 
        /**
index b44bd60..105e011 100644 (file)
@@ -165,8 +165,8 @@ class User {
        //@{
        var $mId, $mName, $mRealName, $mPassword, $mNewpassword, $mNewpassTime,
                $mEmail, $mTouched, $mToken, $mEmailAuthenticated,
-               $mEmailToken, $mEmailTokenExpires, $mRegistration, $mGroups, $mOptionOverrides,
-               $mCookiePassword, $mEditCount, $mAllowUsertalk;
+               $mEmailToken, $mEmailTokenExpires, $mRegistration, $mEditCount,
+               $mGroups, $mOptionOverrides;
        //@}
 
        /**
@@ -209,6 +209,11 @@ class User {
         */
        var $mBlock;
 
+       /**
+        * @var bool
+        */
+       var $mAllowUsertalk;
+
        /**
         * @var Block
         */
@@ -475,11 +480,6 @@ class User {
                        return null;
                }
 
-               if ( User::isIP( $name ) ) {
-                       # Cannot exist
-                       return null;
-               }
-
                if ( isset( self::$idCacheByName[$name] ) ) {
                        return self::$idCacheByName[$name];
                }
@@ -836,23 +836,20 @@ class User {
        }
 
        /**
-        * Return a random password. Sourced from mt_rand, so it's not particularly secure.
-        * @todo hash random numbers to improve security, like generateToken()
+        * Return a random password.
         *
         * @return String new random password
         */
        public static function randomPassword() {
                global $wgMinimalPasswordLength;
-               $pwchars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz';
-               $l = strlen( $pwchars ) - 1;
-
-               $pwlength = max( 7, $wgMinimalPasswordLength );
-               $digit = mt_rand( 0, $pwlength - 1 );
-               $np = '';
-               for ( $i = 0; $i < $pwlength; $i++ ) {
-                       $np .= $i == $digit ? chr( mt_rand( 48, 57 ) ) : $pwchars[ mt_rand( 0, $l ) ];
-               }
-               return $np;
+               // Decide the final password length based on our min password length, stopping at a minimum of 10 chars
+               $length = max( 10, $wgMinimalPasswordLength );
+               // Multiply by 1.25 to get the number of hex characters we need
+               $length = $length * 1.25;
+               // Generate random hex chars
+               $hex = MWCryptRand::generateHex( $length );
+               // Convert from base 16 to base 32 to get a proper password like string
+               return wfBaseConvert( $hex, 16, 32 );
        }
 
        /**
@@ -882,7 +879,7 @@ class User {
                        $this->mTouched = '0'; # Allow any pages to be cached
                }
 
-               $this->setToken(); # Random
+               $this->mToken = null; // Don't run cryptographic functions till we need a token
                $this->mEmailAuthenticated = null;
                $this->mEmailToken = '';
                $this->mEmailTokenExpires = null;
@@ -989,11 +986,11 @@ class User {
                        return false;
                }
 
-               if ( $request->getSessionData( 'wsToken' ) !== null ) {
-                       $passwordCorrect = $proposedUser->getToken() === $request->getSessionData( 'wsToken' );
+               if ( $request->getSessionData( 'wsToken' ) ) {
+                       $passwordCorrect = $proposedUser->getToken( false ) === $request->getSessionData( 'wsToken' );
                        $from = 'session';
-               } elseif ( $request->getCookie( 'Token' ) !== null ) {
-                       $passwordCorrect = $proposedUser->getToken() === $request->getCookie( 'Token' );
+               } elseif ( $request->getCookie( 'Token' ) ) {
+                       $passwordCorrect = $proposedUser->getToken( false ) === $request->getCookie( 'Token' );
                        $from = 'cookie';
                } else {
                        # No session or persistent login cookie
@@ -1098,6 +1095,9 @@ class User {
                        }
                        $this->mTouched = wfTimestamp( TS_MW, $row->user_touched );
                        $this->mToken = $row->user_token;
+                       if ( $this->mToken == '' ) {
+                               $this->mToken = null;
+                       }
                        $this->mEmailAuthenticated = wfTimestampOrNull( TS_MW, $row->user_email_authenticated );
                        $this->mEmailToken = $row->user_email_token;
                        $this->mEmailTokenExpires = wfTimestampOrNull( TS_MW, $row->user_email_token_expires );
@@ -1273,10 +1273,6 @@ class User {
                // overwriting mBlockedby, surely?
                $this->load();
 
-               $this->mBlockedby = 0;
-               $this->mHideName = 0;
-               $this->mAllowUsertalk = 0;
-
                # We only need to worry about passing the IP address to the Block generator if the
                # user is not immune to autoblocks/hardblocks, and they are the current user so we
                # know which IP address they're actually coming from
@@ -1287,30 +1283,37 @@ class User {
                }
 
                # User/IP blocking
-               $this->mBlock = Block::newFromTarget( $this->getName(), $ip, !$bFromSlave );
-               if ( $this->mBlock instanceof Block ) {
-                       wfDebug( __METHOD__ . ": Found block.\n" );
-                       $this->mBlockedby = $this->mBlock->getByName();
-                       $this->mBlockreason = $this->mBlock->mReason;
-                       $this->mHideName = $this->mBlock->mHideName;
-                       $this->mAllowUsertalk = !$this->mBlock->prevents( 'editownusertalk' );
-               }
+               $block = Block::newFromTarget( $this->getName(), $ip, !$bFromSlave );
 
                # Proxy blocking
-               if ( $ip !== null && !$this->isAllowed( 'proxyunbannable' ) && !in_array( $ip, $wgProxyWhitelist ) ) {
+               if ( !$block instanceof Block && $ip !== null && !$this->isAllowed( 'proxyunbannable' )
+                       && !in_array( $ip, $wgProxyWhitelist ) ) 
+               {
                        # Local list
                        if ( self::isLocallyBlockedProxy( $ip ) ) {
-                               $this->mBlockedby = wfMsg( 'proxyblocker' );
-                               $this->mBlockreason = wfMsg( 'proxyblockreason' );
+                               $block = new Block;
+                               $block->setBlocker( wfMsg( 'proxyblocker' ) );
+                               $block->mReason = wfMsg( 'proxyblockreason' );
+                               $block->setTarget( $ip );
+                       } elseif ( $this->isAnon() && $this->isDnsBlacklisted( $ip ) ) {
+                               $block = new Block;
+                               $block->setBlocker( wfMsg( 'sorbs' ) );
+                               $block->mReason = wfMsg( 'sorbsreason' );
+                               $block->setTarget( $ip );
                        }
+               }
 
-                       # DNSBL
-                       if ( !$this->mBlockedby && !$this->getID() ) {
-                               if ( $this->isDnsBlacklisted( $ip ) ) {
-                                       $this->mBlockedby = wfMsg( 'sorbs' );
-                                       $this->mBlockreason = wfMsg( 'sorbsreason' );
-                               }
-                       }
+               if ( $block instanceof Block ) {
+                       wfDebug( __METHOD__ . ": Found block.\n" );
+                       $this->mBlock = $block;
+                       $this->mBlockedby = $block->getByName();
+                       $this->mBlockreason = $block->mReason;
+                       $this->mHideName = $block->mHideName;
+                       $this->mAllowUsertalk = !$block->prevents( 'editownusertalk' );
+               } else {
+                       $this->mBlockedby = '';
+                       $this->mHideName = 0;
+                       $this->mAllowUsertalk = false;
                }
 
                # Extensions
@@ -1514,7 +1517,7 @@ class User {
                        $count = $wgMemc->get( $key );
                        // Already pinged?
                        if( $count ) {
-                               if( $count > $max ) {
+                               if( $count >= $max ) {
                                        wfDebug( __METHOD__ . ": tripped! $key at $count $summary\n" );
                                        if( $wgRateLimitLog ) {
                                                wfSuppressWarnings();
@@ -2020,10 +2023,14 @@ class User {
 
        /**
         * Get the user's current token.
+        * @param $forceCreation Force the generation of a new token if the user doesn't have one (default=true for backwards compatibility)
         * @return String Token
         */
-       public function getToken() {
+       public function getToken( $forceCreation = true ) {
                $this->load();
+               if ( !$this->mToken && $forceCreation ) {
+                       $this->setToken();
+               }
                return $this->mToken;
        }
 
@@ -2034,32 +2041,14 @@ class User {
         * @param $token String|bool If specified, set the token to this value
         */
        public function setToken( $token = false ) {
-               global $wgSecretKey, $wgProxyKey;
                $this->load();
                if ( !$token ) {
-                       if ( $wgSecretKey ) {
-                               $key = $wgSecretKey;
-                       } elseif ( $wgProxyKey ) {
-                               $key = $wgProxyKey;
-                       } else {
-                               $key = microtime();
-                       }
-                       $this->mToken = md5( $key . mt_rand( 0, 0x7fffffff ) . wfWikiID() . $this->mId );
+                       $this->mToken = MWCryptRand::generateHex( USER_TOKEN_LENGTH );
                } else {
                        $this->mToken = $token;
                }
        }
 
-       /**
-        * Set the cookie password
-        *
-        * @param $str String New cookie password
-        */
-       private function setCookiePassword( $str ) {
-               $this->load();
-               $this->mCookiePassword = md5( $str );
-       }
-
        /**
         * Set the password for a password reminder or new account email
         *
@@ -2821,7 +2810,7 @@ class User {
                                'user_email' => $this->mEmail,
                                'user_email_authenticated' => $dbw->timestampOrNull( $this->mEmailAuthenticated ),
                                'user_touched' => $dbw->timestamp( $this->mTouched ),
-                               'user_token' => $this->mToken,
+                               'user_token' => strval( $this->mToken ),
                                'user_email_token' => $this->mEmailToken,
                                'user_email_token_expires' => $dbw->timestampOrNull( $this->mEmailTokenExpires ),
                        ), array( /* WHERE */
@@ -2887,9 +2876,10 @@ class User {
                        'user_email' => $user->mEmail,
                        'user_email_authenticated' => $dbw->timestampOrNull( $user->mEmailAuthenticated ),
                        'user_real_name' => $user->mRealName,
-                       'user_token' => $user->mToken,
+                       'user_token' => strval( $user->mToken ),
                        'user_registration' => $dbw->timestamp( $user->mRegistration ),
                        'user_editcount' => 0,
+                       'user_touched' => $dbw->timestamp( self::newTouchedTimestamp() ),
                );
                foreach ( $params as $name => $value ) {
                        $fields["user_$name"] = $value;
@@ -2908,6 +2898,9 @@ class User {
         */
        public function addToDatabase() {
                $this->load();
+
+               $this->mTouched = self::newTouchedTimestamp();
+
                $dbw = wfGetDB( DB_MASTER );
                $seqVal = $dbw->nextSequenceValue( 'user_user_id_seq' );
                $dbw->insert( 'user',
@@ -2920,9 +2913,10 @@ class User {
                                'user_email' => $this->mEmail,
                                'user_email_authenticated' => $dbw->timestampOrNull( $this->mEmailAuthenticated ),
                                'user_real_name' => $this->mRealName,
-                               'user_token' => $this->mToken,
+                               'user_token' => strval( $this->mToken ),
                                'user_registration' => $dbw->timestamp( $this->mRegistration ),
                                'user_editcount' => 0,
+                               'user_touched' => $dbw->timestamp( $this->mTouched ),
                        ), __METHOD__
                );
                $this->mId = $dbw->insertId();
@@ -3184,7 +3178,7 @@ class User {
                } else {
                        $token = $request->getSessionData( 'wsEditToken' );
                        if ( $token === null ) {
-                               $token = self::generateToken();
+                               $token = MWCryptRand::generateHex( 32 );
                                $request->setSessionData( 'wsEditToken', $token );
                        }
                        if( is_array( $salt ) ) {
@@ -3199,10 +3193,10 @@ class User {
         *
         * @param $salt String Optional salt value
         * @return String The new random token
+        * @deprecated since 1.20; Use MWCryptRand for secure purposes or wfRandomString for pesudo-randomness
         */
        public static function generateToken( $salt = '' ) {
-               $token = dechex( mt_rand() ) . dechex( mt_rand() );
-               return md5( $token . $salt );
+               return MWCryptRand::generateHex( 32 );
        }
 
        /**
@@ -3309,9 +3303,9 @@ class User {
                $now = time();
                $expires = $now + $wgUserEmailConfirmationTokenExpiry;
                $expiration = wfTimestamp( TS_MW, $expires );
-               $token = self::generateToken( $this->mId . $this->mEmail . $expires );
-               $hash = md5( $token );
                $this->load();
+               $token = MWCryptRand::generateHex( 32 );
+               $hash = md5( $token );
                $this->mEmailToken = $hash;
                $this->mEmailTokenExpires = $expiration;
                return $token;
@@ -3862,7 +3856,7 @@ class User {
 
                if( $wgPasswordSalt ) {
                        if ( $salt === false ) {
-                               $salt = substr( wfGenerateToken(), 0, 8 );
+                               $salt = MWCryptRand::generateHex( 8 );
                        }
                        return ':B:' . $salt . ':' . md5( $salt . '-' . md5( $password ) );
                } else {
@@ -3949,7 +3943,7 @@ class User {
                        return true; // disabled
                }
                $log = new LogPage( 'newusers', false );
-               $log->addEntry( 'autocreate', $this->getUserPage(), '', array( $this->getId() ) );
+               $log->addEntry( 'autocreate', $this->getUserPage(), '', array( $this->getId() ), $this );
                return true;
        }
 
index 33376cf..9b66d7d 100644 (file)
@@ -535,7 +535,7 @@ class WebRequest {
 
                $retVal = array();
                foreach ( $names as $name ) {
-                       $value = $this->getVal( $name );
+                       $value = $this->getGPCVal( $this->data, $name, null );
                        if ( !is_null( $value ) ) {
                                $retVal[$name] = $value;
                        }
index 04af1f1..6cad466 100644 (file)
@@ -2022,7 +2022,7 @@ class WikiPage extends Page {
 
                # Now that it's safely backed up, delete it
                $dbw->delete( 'page', array( 'page_id' => $id ), __METHOD__ );
-               $ok = ( $dbw->affectedRows() > 0 ); // getArticleId() uses slave, could be laggy
+               $ok = ( $dbw->affectedRows() > 0 ); // getArticleID() uses slave, could be laggy
 
                if ( !$ok ) {
                        $dbw->rollback( __METHOD__ );
index cd083c3..f715229 100644 (file)
@@ -30,7 +30,7 @@ class CreditsAction extends FormlessAction {
        }
 
        protected function getDescription() {
-               return wfMsgHtml( 'creditspage' );
+               return $this->msg( 'creditspage' )->escaped();
        }
 
        /**
index c5b8652..dbc1ac0 100644 (file)
@@ -316,6 +316,10 @@ class HistoryPager extends ReverseChronologicalPager {
        public $lastRow = false, $counter, $historyPage, $buttons, $conds;
        protected $oldIdChecked;
        protected $preventClickjacking = false;
+       /**
+        * @var array
+        */
+       protected $parentLens;
 
        function __construct( $historyPage, $year = '', $month = '', $tagFilter = '', $conds = array() ) {
                parent::__construct( $historyPage->getContext() );
@@ -384,7 +388,11 @@ class HistoryPager extends ReverseChronologicalPager {
                # Do a link batch query
                $this->mResult->seek( 0 );
                $batch = new LinkBatch();
+               $revIds = array();
                foreach ( $this->mResult as $row ) {
+                       if( $row->rev_parent_id ) {
+                               $revIds[] = $row->rev_parent_id;
+                       }
                        if( !is_null( $row->user_name ) ) {
                                $batch->add( NS_USER, $row->user_name );
                                $batch->add( NS_USER_TALK, $row->user_name );
@@ -393,10 +401,34 @@ class HistoryPager extends ReverseChronologicalPager {
                                $batch->add( NS_USER_TALK, $row->rev_user_text );
                        }
                }
+               $this->parentLens = $this->getParentLengths( $revIds );
                $batch->execute();
                $this->mResult->seek( 0 );
        }
 
+       /**
+        * Do a batched query to get the parent revision lengths
+        * @param $revIds array
+        * @return array
+        * @TODO: stolen from Contributions, refactor
+        */
+       private function getParentLengths( array $revIds ) {
+               $revLens = array();
+               if ( !$revIds ) {
+                       return $revLens; // empty
+               }
+               wfProfileIn( __METHOD__ );
+               $res = $this->mDb->select( 'revision',
+                       array( 'rev_id', 'rev_len' ),
+                       array( 'rev_id' => $revIds ),
+                       __METHOD__ );
+               foreach ( $res as $row ) {
+                       $revLens[$row->rev_id] = $row->rev_len;
+               }
+               wfProfileOut( __METHOD__ );
+               return $revLens;
+       }
+
        /**
         * Creates begin of history list with a submit button
         *
@@ -574,7 +606,9 @@ class HistoryPager extends ReverseChronologicalPager {
                }
 
                # Size is always public data
-               $prevSize = $prevRev ? $prevRev->getSize() : 0;
+               $prevSize = isset( $this->parentLens[$row->rev_parent_id] )
+                       ? $this->parentLens[$row->rev_parent_id]
+                       : 0;
                $sDiff = ChangesList::showCharacterDifference( $prevSize, $rev->getSize() );
                $fSize = Linker::formatRevisionSize($rev->getSize());
                $s .= " . . $fSize $sDiff . . ";
index 70edabc..543beb7 100644 (file)
@@ -107,7 +107,7 @@ class InfoAction extends FormlessAction {
         * @return mixed array or boolean false
         */
        public static function pageCountInfo( $title ) {
-               $id = $title->getArticleId();
+               $id = $title->getArticleID();
                $dbr = wfGetDB( DB_SLAVE );
 
                $watchers = (int)$dbr->selectField(
index 21a6d90..cd58889 100644 (file)
@@ -79,15 +79,15 @@ class PurgeAction extends FormAction {
        }
 
        protected function alterForm( HTMLForm $form ) {
-               $form->setSubmitText( wfMsg( 'confirm_purge_button' ) );
+               $form->setSubmitTextMsg( 'confirm_purge_button' );
        }
 
        protected function preText() {
-               return wfMessage( 'confirm-purge-top' )->parse();
+               return $this->msg( 'confirm-purge-top' )->parse();
        }
 
        protected function postText() {
-               return wfMessage( 'confirm-purge-bottom' )->parse();
+               return $this->msg( 'confirm-purge-bottom' )->parse();
        }
 
        public function onSuccess() {
index e4c6b3e..5615ad5 100644 (file)
@@ -120,10 +120,13 @@ class RawAction extends FormlessAction {
 
                // If it's a MediaWiki message we can just hit the message cache
                if ( $request->getBool( 'usemsgcache' ) && $title->getNamespace() == NS_MEDIAWIKI ) {
-                       $key = $title->getDBkey();
-                       $msg = wfMessage( $key )->inContentLanguage();
-                       # If the message doesn't exist, return a blank
-                       $text = !$msg->exists() ? '' : $msg->plain();
+                       // The first "true" is to use the database, the second is to use the content langue
+                       // and the last one is to specify the message key already contains the language in it ("/de", etc.)
+                       $text = MessageCache::singleton()->get( $title->getDBkey(), true, true, true );
+                       // If the message doesn't exist, return a blank
+                       if ( $text === false ) {
+                               $text = '';
+                       }
                } else {
                        // Get it from the DB
                        $rev = Revision::newFromTitle( $title, $this->getOldId() );
index f9497f4..7743438 100644 (file)
@@ -75,8 +75,8 @@ class RevertFileAction extends FormAction {
        }
 
        protected function alterForm( HTMLForm $form ) {
-               $form->setWrapperLegend( wfMsgHtml( 'filerevert-legend' ) );
-               $form->setSubmitText( wfMsg( 'filerevert-submit' ) );
+               $form->setWrapperLegendMsg( 'filerevert-legend' );
+               $form->setSubmitTextMsg( 'filerevert-submit' );
                $form->addHiddenField( 'oldimage', $this->getRequest()->getText( 'oldimage' ) );
        }
 
@@ -85,22 +85,28 @@ class RevertFileAction extends FormAction {
 
                $timestamp = $this->oldFile->getTimestamp();
 
+               $user = $this->getUser();
+               $lang = $this->getLanguage();
+               $userDate = $lang->userDate( $timestamp, $user );
+               $userTime = $lang->userTime( $timestamp, $user );
+               $siteDate = $wgContLang->date( $timestamp, false, false );
+               $siteTime = $wgContLang->time( $timestamp, false, false );
+
                return array(
                        'intro' => array(
                                'type' => 'info',
                                'vertical-label' => true,
                                'raw' => true,
-                               'default' => wfMsgExt( 'filerevert-intro', 'parse', $this->getTitle()->getText(),
-                                       $this->getLanguage()->date( $timestamp, true ), $this->getLanguage()->time( $timestamp, true ),
+                               'default' => $this->msg( 'filerevert-intro',
+                                       $this->getTitle()->getText(), $userDate, $userTime,
                                        wfExpandUrl( $this->page->getFile()->getArchiveUrl( $this->getRequest()->getText( 'oldimage' ) ),
-                                               PROTO_CURRENT
-                               ) )
+                                               PROTO_CURRENT ) )->parseAsBlock()
                        ),
                        'comment' => array(
                                'type' => 'text',
                                'label-message' => 'filerevert-comment',
-                               'default' => wfMsgForContent( 'filerevert-defaultcomment',
-                                       $wgContLang->date( $timestamp, false, false ), $wgContLang->time( $timestamp, false, false ) ),
+                               'default' => $this->msg( 'filerevert-defaultcomment', $siteDate, $siteTime
+                                       )->inContentLanguage()->text()
                        )
                );
        }
@@ -114,17 +120,21 @@ class RevertFileAction extends FormAction {
 
        public function onSuccess() {
                $timestamp = $this->oldFile->getTimestamp();
-               $this->getOutput()->addHTML( wfMsgExt( 'filerevert-success', 'parse', $this->getTitle()->getText(),
-                       $this->getLanguage()->date( $timestamp, true ),
-                       $this->getLanguage()->time( $timestamp, true ),
+               $user = $this->getUser();
+               $lang = $this->getLanguage();
+               $userDate = $lang->userDate( $timestamp, $user );
+               $userTime = $lang->userTime( $timestamp, $user );
+       
+               $this->getOutput()->addWikiMsg( 'filerevert-success', $this->getTitle()->getText(),
+                       $userDate, $userTime,
                        wfExpandUrl( $this->page->getFile()->getArchiveUrl( $this->getRequest()->getText( 'oldimage' ) ),
                                PROTO_CURRENT
-               ) ) );
+               ) );
                $this->getOutput()->returnToMain( false, $this->getTitle() );
        }
 
        protected function getPageTitle() {
-               return wfMsg( 'filerevert', $this->getTitle()->getText() );
+               return $this->msg( 'filerevert', $this->getTitle()->getText() );
        }
        
        protected function getDescription() {
index ebb34c7..0d9a902 100644 (file)
@@ -63,7 +63,7 @@ class RollbackAction extends FormlessAction {
                                $current = $details['current'];
 
                                if ( $current->getComment() != '' ) {
-                                       $this->getOutput()->addHTML( wfMessage( 'editcomment' )->rawParams(
+                                       $this->getOutput()->addHTML( $this->msg( 'editcomment' )->rawParams(
                                                Linker::formatComment( $current->getComment() ) )->parse() );
                                }
                        }
@@ -97,7 +97,7 @@ class RollbackAction extends FormlessAction {
                $this->getOutput()->setRobotPolicy( 'noindex,nofollow' );
 
                if ( $current->getUserText() === '' ) {
-                       $old = wfMsg( 'rev-deleted-user' );
+                       $old = $this->msg( 'rev-deleted-user' )->escaped();
                } else {
                        $old = Linker::userLink( $current->getUser(), $current->getUserText() )
                                . Linker::userToolLinks( $current->getUser(), $current->getUserText() );
@@ -105,7 +105,7 @@ class RollbackAction extends FormlessAction {
 
                $new = Linker::userLink( $target->getUser(), $target->getUserText() )
                        . Linker::userToolLinks( $target->getUser(), $target->getUserText() );
-               $this->getOutput()->addHTML( wfMsgExt( 'rollback-success', array( 'parse', 'replaceafter' ), $old, $new ) );
+               $this->getOutput()->addHTML( $this->msg( 'rollback-success' )->rawParams( $old, $new )->parseAsBlock() );
                $this->getOutput()->returnToMain( false, $this->getTitle() );
 
                if ( !$request->getBool( 'hidediff', false ) && !$this->getUser()->getBoolOption( 'norollbackdiff', false ) ) {
index 63d9b15..e263645 100644 (file)
@@ -31,7 +31,7 @@ class WatchAction extends FormAction {
        }
 
        protected function getDescription() {
-               return wfMsgHtml( 'addwatch' );
+               return $this->msg( 'addwatch' )->escaped();
        }
 
        /**
@@ -136,11 +136,11 @@ class WatchAction extends FormAction {
        }
 
        protected function alterForm( HTMLForm $form ) {
-               $form->setSubmitText( wfMsg( 'confirm-watch-button' ) );
+               $form->setSubmitTextMsg( 'confirm-watch-button' );
        }
 
        protected function preText() {
-               return wfMessage( 'confirm-watch-top' )->parse();
+               return $this->msg( 'confirm-watch-top' )->parse();
        }
 
        public function onSuccess() {
@@ -155,7 +155,7 @@ class UnwatchAction extends WatchAction {
        }
 
        protected function getDescription() {
-               return wfMsg( 'removewatch' );
+               return $this->msg( 'removewatch' )->escaped();
        }
 
        public function onSubmit( $data ) {
@@ -166,11 +166,11 @@ class UnwatchAction extends WatchAction {
        }
 
        protected function alterForm( HTMLForm $form ) {
-               $form->setSubmitText( wfMsg( 'confirm-unwatch-button' ) );
+               $form->setSubmitTextMsg( 'confirm-unwatch-button' );
        }
 
        protected function preText() {
-               return wfMessage( 'confirm-unwatch-top' )->parse();
+               return $this->msg( 'confirm-unwatch-top' )->parse();
        }
 
        public function onSuccess() {
index a8c3cc7..607c47a 100644 (file)
@@ -282,12 +282,12 @@ abstract class ApiBase extends ContextSource {
                                        if ( is_numeric( $k ) ) {
                                                $msg .= "  $v\n";
                                        } else {
-                                               $v .= ":";
                                                if ( is_array( $v ) ) {
                                                        $msgExample = implode( "\n", array_map( array( $this, 'indentExampleText' ), $v ) );
                                                } else {
                                                        $msgExample = "  $v";
                                                }
+                                               $msgExample .= ":";
                                                $msg .= wordwrap( $msgExample, 100, "\n" ) . "\n    $k\n";
                                        }
                                }
index 5fedf8d..15b0861 100644 (file)
@@ -595,7 +595,7 @@ class ApiMain extends ApiBase {
 
                // Die if token required, but not provided (unless there is a gettoken parameter)
                $salt = $module->getTokenSalt();
-               if ( $salt !== false && !isset( $moduleParams['gettoken'] ) ) {
+               if ( $salt !== false && !$moduleParams['gettoken'] ) {
                        if ( !isset( $moduleParams['token'] ) ) {
                                $this->dieUsageMsg( array( 'missingparam', 'token' ) );
                        } else {
@@ -1055,7 +1055,7 @@ class ApiMain extends ApiBase {
  *
  * @ingroup API
  */
-class UsageException extends Exception {
+class UsageException extends MWException {
 
        private $mCodestr;
        private $mExtraData;
index f0d0faa..d28642a 100644 (file)
@@ -394,8 +394,8 @@ class ApiQueryInfo extends ApiQueryBase {
                }
 
                if ( $this->fld_displaytitle ) {
-                       if ( isset( $this->displaytitles[$title->getArticleId()] ) ) {
-                               $pageInfo['displaytitle'] = $this->displaytitles[$title->getArticleId()];
+                       if ( isset( $this->displaytitles[$title->getArticleID()] ) ) {
+                               $pageInfo['displaytitle'] = $this->displaytitles[$title->getArticleID()];
                        } else {
                                $pageInfo['displaytitle'] = $title->getPrefixedText();
                        }
index c83be79..e11d110 100644 (file)
@@ -474,7 +474,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        public function appendLanguages( $property ) {
                $params = $this->extractRequestParams();
                $langCode = isset( $params['inlanguagecode'] ) ? $params['inlanguagecode'] : '';
-               $langNames = Language::getLanguageNames( $langCode );
+               $langNames = Language::fetchLanguageNames( $langCode );
 
                $data = array();
 
index 17e8739..29fde03 100644 (file)
@@ -45,6 +45,11 @@ class LinkBatch {
                }
        }
 
+       /**
+        * @param $ns int
+        * @param $dbkey string
+        * @return mixed
+        */
        public function add( $ns, $dbkey ) {
                if ( $ns < 0 ) {
                        return;
index 47eb596..5c03617 100644 (file)
@@ -680,7 +680,7 @@ abstract class DatabaseBase implements DatabaseType {
                $dbType = strtolower( $dbType );
                $class = 'Database' . ucfirst( $dbType );
 
-               if( in_array( $dbType, $canonicalDBTypes ) ) {
+               if( in_array( $dbType, $canonicalDBTypes ) || ( class_exists( $class ) && is_subclass_of( $class, 'DatabaseBase' ) ) ) {
                        return new $class(
                                isset( $p['host'] ) ? $p['host'] : false,
                                isset( $p['user'] ) ? $p['user'] : false,
@@ -689,8 +689,6 @@ abstract class DatabaseBase implements DatabaseType {
                                isset( $p['flags'] ) ? $p['flags'] : 0,
                                isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global'
                        );
-               } elseif ( class_exists( $class ) && is_subclass_of( $class, 'DatabaseBase' ) ) {
-                       return new $class( $p );
                } else {
                        return null;
                }
index ed59e46..6e0a145 100644 (file)
@@ -18,7 +18,7 @@ class PostgresField implements Field {
        static function fromText( $db, $table, $field ) {
                $q = <<<SQL
 SELECT
- attnotnull, attlen, COALESCE(conname, '') AS conname,
+ attnotnull, attlen, conname AS conname,
  COALESCE(condeferred, 'f') AS deferred,
  COALESCE(condeferrable, 'f') AS deferrable,
  CASE WHEN typname = 'int2' THEN 'smallint'
@@ -213,7 +213,7 @@ class DatabasePostgres extends DatabaseBase {
 
        function hasConstraint( $name ) {
                $SQL = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n WHERE c.connamespace = n.oid AND conname = '" .
-                               pg_escape_string( $this->mConn, $name ) . "' AND n.nspname = '" . pg_escape_string( $this->mConn, $this->mConn->getCoreSchema() ) ."'";
+                               pg_escape_string( $this->mConn, $name ) . "' AND n.nspname = '" . pg_escape_string( $this->mConn, $this->getCoreSchema() ) ."'";
                $res = $this->doQuery( $SQL );
                return $this->numRows( $res );
        }
@@ -707,14 +707,19 @@ class DatabasePostgres extends DatabaseBase {
                # Replace reserved words with better ones
                switch( $name ) {
                        case 'user':
-                               return 'mwuser';
+                               return $this->realTableName( 'mwuser', $format );
                        case 'text':
-                               return 'pagecontent';
+                               return $this->realTableName( 'pagecontent', $format );
                        default:
-                               return parent::tableName( $name, $format );
+                               return $this->realTableName( $name, $format );
                }
        }
 
+       /* Don't cheat on installer */
+       function realTableName( $name, $format = 'quoted' ) {
+               return parent::tableName( $name, $format );
+       }
+
        /**
         * Return the next in a sequence, save the value for retrieval via insertId()
         * @return null
@@ -790,32 +795,32 @@ class DatabasePostgres extends DatabaseBase {
                return wfTimestamp( TS_POSTGRES, $ts );
        }
 
-
        /* 
         * Posted by cc[plus]php[at]c2se[dot]com on 25-Mar-2009 09:12
         * to http://www.php.net/manual/en/ref.pgsql.php
-         *
-         * Parsing a postgres array can be a tricky problem, he's my
-         * take on this, it handles multi-dimensional arrays plus
-         * escaping using a nasty regexp to determine the limits of each
-         * data-item.
+        *
+        * Parsing a postgres array can be a tricky problem, he's my
+        * take on this, it handles multi-dimensional arrays plus
+        * escaping using a nasty regexp to determine the limits of each
+        * data-item.
         *
         * This should really be handled by PHP PostgreSQL module
         *
         * @since 1.20
-        * @param  text   string: postgreql array returned in a text form like {a,b}
-        * @param  output string
-        * @param  limit  int
-        * @param  offset int
+        * @param $text   string: postgreql array returned in a text form like {a,b}
+        * @param $output string
+        * @param $limit  int
+        * @param $offset int
         * @return string
         */
-
        function pg_array_parse( $text, &$output, $limit = false, $offset = 1 ) {
                if( false === $limit ) {
                        $limit = strlen( $text )-1;
                        $output = array();
                }
-               if( '{}' != $text )
+               if( '{}' == $text ) {
+                       return $output;
+               }
                do {
                        if ( '{' != $text{$offset} ) {
                                preg_match( "/(\\{?\"([^\"\\\\]|\\\\.)*\"|[^,{}]+)+([,}]+)/",
@@ -824,10 +829,12 @@ class DatabasePostgres extends DatabaseBase {
                                $output[] = ( '"' != $match[1]{0} 
                                                ? $match[1] 
                                                : stripcslashes( substr( $match[1], 1, -1 ) ) );
-                               if ( '},' == $match[3] )
+                               if ( '},' == $match[3] ) {
                                        return $output;
-                       } else  
-                               $offset = $this->pg_array_parse( $text, $output[], $limit, $offset+1 );
+                               }
+                       } else {
+                               $offset = $this->pg_array_parse( $text, $output, $limit, $offset+1 );
+                       }
                } while ( $limit > $offset );
                return $output;
        }
@@ -894,14 +901,14 @@ class DatabasePostgres extends DatabaseBase {
                return explode(",", $row[0]);
        }
 
-       function setSearchPath( $search_path ) {
        /**
         * Update search_path, values should already be sanitized
         * Values may contain magic keywords like "$user"
         * @since 1.20
         *
-        * @param array list of schemas to be searched by default
+        * @param $search_path array list of schemas to be searched by default
         */
+       function setSearchPath( $search_path ) {
                $this->query( "SET search_path = " . implode(", ", $search_path) );
        }
 
@@ -926,7 +933,7 @@ class DatabasePostgres extends DatabaseBase {
                                wfDebug("Schema \"" . $desired_schema . "\" already in the search path\n");
                        } else {
                                /**
-                                * Apped our schema (e.g. 'mediawiki') in front
+                                * Append our schema (e.g. 'mediawiki') in front
                                 * of the search path
                                 * Fixes bug 15816 
                                 */
@@ -934,6 +941,7 @@ class DatabasePostgres extends DatabaseBase {
                                array_unshift( $search_path, 
                                        $this->addIdentifierQuotes( $desired_schema ));
                                $this->setSearchPath( $search_path );   
+                               $this->mCoreSchema = $desired_schema;
                                wfDebug("Schema \"" . $desired_schema . "\" added to the search path\n");
                        }
                } else {
@@ -986,7 +994,7 @@ class DatabasePostgres extends DatabaseBase {
                if ( !$schema ) {
                        $schema = $this->getCoreSchema();
                }
-               $table = $this->tableName( $table, 'raw' );
+               $table = $this->realTableName( $table, 'raw' );
                $etable = $this->addQuotes( $table );
                $eschema = $this->addQuotes( $schema );
                $SQL = "SELECT 1 FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n "
index e8ad526..418eede 100644 (file)
@@ -258,6 +258,8 @@ class MWDebug {
                $debugInfo = array(
                        'mwVersion' => $wgVersion,
                        'phpVersion' => PHP_VERSION,
+                       'gitRevision' => GitInfo::headSHA1(),
+                       'gitBranch' => GitInfo::currentBranch(),
                        'time' => microtime( true ) - $wgRequestTime,
                        'log' => self::$log,
                        'debugLog' => self::$debug,
index e7c4393..72eb5d3 100644 (file)
@@ -185,8 +185,8 @@ class _DiffEngine {
                $edits = array();
                $xi = $yi = 0;
                while ( $xi < $n_from || $yi < $n_to ) {
-                       assert( $yi < $n_to || $this->xchanged[$xi] );
-                       assert( $xi < $n_from || $this->ychanged[$yi] );
+                       assert( '$yi < $n_to || $this->xchanged[$xi]' );
+                       assert( '$xi < $n_from || $this->ychanged[$yi]' );
 
                        // Skip matching "snake".
                        $copy = array();
@@ -374,14 +374,14 @@ class _DiffEngine {
                                while ( list( , $y ) = each( $matches ) ) {
                                        if ( empty( $this->in_seq[$y] ) ) {
                                                $k = $this->_lcs_pos( $y );
-                                               assert( $k > 0 );
+                                               assert( '$k > 0' );
                                                $ymids[$k] = $ymids[$k -1];
                                                break;
                                        }
                                }
                                while ( list ( , $y ) = each( $matches ) ) {
                                        if ( $y > $this->seq[$k -1] ) {
-                                               assert( $y < $this->seq[$k] );
+                                               assert( '$y < $this->seq[$k]' );
                                                // Optimization: this is a common case:
                                                //      next match is just replacing previous match.
                                                $this->in_seq[$this->seq[$k]] = false;
@@ -389,7 +389,7 @@ class _DiffEngine {
                                                $this->in_seq[$y] = 1;
                                        } elseif ( empty( $this->in_seq[$y] ) ) {
                                                $k = $this->_lcs_pos( $y );
-                                               assert( $k > 0 );
+                                               assert( '$k > 0' );
                                                $ymids[$k] = $ymids[$k -1];
                                        }
                                }
@@ -430,7 +430,7 @@ class _DiffEngine {
                        }
                }
 
-               assert( $ypos != $this->seq[$end] );
+               assert( '$ypos != $this->seq[$end]' );
 
                $this->in_seq[$this->seq[$end]] = false;
                $this->seq[$end] = $ypos;
@@ -814,8 +814,8 @@ class MappedDiff extends Diff {
                $mapped_from_lines, $mapped_to_lines ) {
                wfProfileIn( __METHOD__ );
 
-               assert( sizeof( $from_lines ) == sizeof( $mapped_from_lines ) );
-               assert( sizeof( $to_lines ) == sizeof( $mapped_to_lines ) );
+               assert( 'sizeof( $from_lines ) == sizeof( $mapped_from_lines )' );
+               assert( 'sizeof( $to_lines ) == sizeof( $mapped_to_lines )' );
 
                parent::__construct( $mapped_from_lines, $mapped_to_lines );
 
@@ -1205,7 +1205,7 @@ class _HWLDF_WordAccumulator {
                                $this->_flushLine( $tag );
                                $word = substr( $word, 1 );
                        }
-                       assert( !strstr( $word, "\n" ) );
+                       assert( '!strstr( $word, "\n" )' );
                        $this->_group .= $word;
                }
        }
index a4d0c65..e8f35f0 100644 (file)
@@ -261,7 +261,7 @@ class DifferenceEngine extends ContextSource {
                                $samePage = false;
                        }
 
-                       if ( $samePage && $this->mNewPage->userCan( 'edit', $user ) ) {
+                       if ( $samePage && $this->mNewPage->quickUserCan( 'edit', $user ) ) {
                                if ( $this->mNewRev->isCurrent() && $this->mNewPage->userCan( 'rollback', $user ) ) {
                                        $out->preventClickjacking();
                                        $rollback = '&#160;&#160;&#160;' . Linker::generateRollback( $this->mNewRev );
@@ -403,7 +403,7 @@ class DifferenceEngine extends ContextSource {
 
                if ( $this->mMarkPatrolledLink === null ) {
                        // Prepare a change patrol link, if applicable
-                       if ( $wgUseRCPatrol && $this->mNewPage->userCan( 'patrol', $this->getUser() ) ) {
+                       if ( $wgUseRCPatrol && $this->mNewPage->quickUserCan( 'patrol', $this->getUser() ) ) {
                                // If we've been given an explicit change identifier, use it; saves time
                                if ( $this->mRcidMarkPatrolled ) {
                                        $rcid = $this->mRcidMarkPatrolled;
@@ -867,7 +867,7 @@ class DifferenceEngine extends ContextSource {
                                $editQuery['oldid'] = $rev->getID();
                        }
 
-                       $msg = $this->msg( $title->userCan( 'edit', $user ) ? 'editold' : 'viewsourceold' )->escaped();
+                       $msg = $this->msg( $title->quickUserCan( 'edit', $user ) ? 'editold' : 'viewsourceold' )->escaped();
                        $header .= ' (' . Linker::linkKnown( $title, $msg, array(), $editQuery ) . ')';
                        if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
                                $header = Html::rawElement( 'span', array( 'class' => 'history-deleted' ), $header );
index 0dd5466..db0dbcc 100644 (file)
@@ -119,10 +119,19 @@ class FileRepo {
                return $this->backend;
        }
 
+       /**
+        * Get an explanatory message if this repo is read-only
+        *
+        * @return string|bool Returns false if the repo is not read-only
+        */
+       public function getReadOnlyReason() {
+               return $this->backend->getReadOnlyReason();
+       }
+
        /**
         * Prepare a single zone or list of zones for usage.
         * See initDeletedDir() for additional setup needed for the 'deleted' zone.
-        * 
+        *
         * @param $doZones Array Only do a particular zones
         * @return Status
         */
index 7371cc9..9d82b5e 100644 (file)
@@ -45,6 +45,8 @@ abstract class FileBackend {
        protected $readOnly; // string; read-only explanation message
        /** @var LockManager */
        protected $lockManager;
+       /** @var FileJournal */
+       protected $fileJournal;
 
        /**
         * Create a new backend instance from configuration.
@@ -55,8 +57,10 @@ abstract class FileBackend {
         *                     This should consist of alphanumberic, '-', and '_' characters.
         *                     This name should not be changed after use.
         *     'wikiId'      : Prefix to container names that is unique to this wiki.
-        *                     This should consist of alphanumberic, '-', and '_' characters.
+        *                     It should only consist of alphanumberic, '-', and '_' characters.
         *     'lockManager' : Registered name of a file lock manager to use.
+        *     'fileJournal' : File journal configuration; see FileJournal::factory().
+        *                     Journals simply log changes to files stored in the backend.
         *     'readOnly'    : Write operations are disallowed if this is a non-empty string.
         *                     It should be an explanation for the backend being read-only.
         * 
@@ -73,6 +77,9 @@ abstract class FileBackend {
                $this->lockManager = ( $config['lockManager'] instanceof LockManager )
                        ? $config['lockManager']
                        : LockManagerGroup::singleton()->get( $config['lockManager'] );
+               $this->fileJournal = isset( $config['fileJournal'] )
+                       ? FileJournal::factory( $config['fileJournal'], $this->name )
+                       : FileJournal::factory( array( 'class' => 'NullFileJournal' ), $this->name );
                $this->readOnly = isset( $config['readOnly'] )
                        ? (string)$config['readOnly']
                        : '';
@@ -101,7 +108,7 @@ abstract class FileBackend {
        /**
         * Get an explanatory message if this backend is read-only
         * 
-        * @return string|bool Returns falls if the backend is not read-only
+        * @return string|bool Returns false if the backend is not read-only
         */
        final public function getReadOnlyReason() {
                return ( $this->readOnly != '' ) ? $this->readOnly : false;
@@ -177,6 +184,8 @@ abstract class FileBackend {
         * 'allowStale'          : Don't require the latest available data.
         *                         This can increase performance for non-critical writes.
         *                         This has no effect unless the 'force' flag is set.
+        * 'nonJournaled'        : Don't log this operation batch in the file journal.
+        *                         This limits the ability of recovery scripts.
         * 
         * Remarks on locking:
         * File system paths given to operations should refer to files that are
index 52c71d6..9c3cf5b 100644 (file)
@@ -133,7 +133,7 @@ class FileBackendMultiWrite extends FileBackend {
                }
 
                // Actually attempt the operation batch...
-               $subStatus = FileOp::attemptBatch( $performOps, $opts );
+               $subStatus = FileOp::attemptBatch( $performOps, $opts, $this->fileJournal );
 
                $success = array();
                $failCount = 0;
index e96f257..268ccb8 100644 (file)
@@ -66,6 +66,7 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function createInternal( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                if ( strlen( $params['content'] ) > $this->maxFileSizeInternal() ) {
                        $status = Status::newFatal( 'backend-fail-maxsize',
                                $params['dst'], $this->maxFileSizeInternal() );
@@ -73,6 +74,7 @@ abstract class FileBackendStore extends FileBackend {
                        $status = $this->doCreateInternal( $params );
                        $this->clearCache( array( $params['dst'] ) );
                }
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
        }
@@ -96,12 +98,14 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function storeInternal( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                if ( filesize( $params['src'] ) > $this->maxFileSizeInternal() ) {
                        $status = Status::newFatal( 'backend-fail-store', $params['dst'] );
                } else {
                        $status = $this->doStoreInternal( $params );
                        $this->clearCache( array( $params['dst'] ) );
                }
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
        }
@@ -125,8 +129,10 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function copyInternal( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = $this->doCopyInternal( $params );
                $this->clearCache( array( $params['dst'] ) );
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
        }
@@ -149,8 +155,10 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function deleteInternal( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = $this->doDeleteInternal( $params );
                $this->clearCache( array( $params['src'] ) );
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
        }
@@ -174,8 +182,10 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function moveInternal( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = $this->doMoveInternal( $params );
                $this->clearCache( array( $params['src'], $params['dst'] ) );
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
        }
@@ -201,6 +211,7 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function concatenate( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = Status::newGood();
 
                // Try to lock the source files for the scope of this function
@@ -210,6 +221,7 @@ abstract class FileBackendStore extends FileBackend {
                        $status->merge( $this->doConcatenate( $params ) );
                }
 
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
        }
@@ -276,11 +288,13 @@ abstract class FileBackendStore extends FileBackend {
         */
        final protected function doPrepare( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
 
                $status = Status::newGood();
                list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
                if ( $dir === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+                       wfProfileOut( __METHOD__ . '-' . $this->name );
                        wfProfileOut( __METHOD__ );
                        return $status; // invalid storage path
                }
@@ -295,6 +309,7 @@ abstract class FileBackendStore extends FileBackend {
                        }
                }
 
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
        }
@@ -313,11 +328,13 @@ abstract class FileBackendStore extends FileBackend {
         */
        final protected function doSecure( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = Status::newGood();
 
                list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
                if ( $dir === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+                       wfProfileOut( __METHOD__ . '-' . $this->name );
                        wfProfileOut( __METHOD__ );
                        return $status; // invalid storage path
                }
@@ -332,6 +349,7 @@ abstract class FileBackendStore extends FileBackend {
                        }
                }
 
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
        }
@@ -350,11 +368,13 @@ abstract class FileBackendStore extends FileBackend {
         */
        final protected function doClean( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = Status::newGood();
 
                list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
                if ( $dir === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+                       wfProfileOut( __METHOD__ . '-' . $this->name );
                        wfProfileOut( __METHOD__ );
                        return $status; // invalid storage path
                }
@@ -363,6 +383,7 @@ abstract class FileBackendStore extends FileBackend {
                $filesLockEx = array( $params['dir'] );
                $scopedLockE = $this->getScopedFileLocks( $filesLockEx, LockManager::LOCK_EX, $status );
                if ( !$status->isOK() ) {
+                       wfProfileOut( __METHOD__ . '-' . $this->name );
                        wfProfileOut( __METHOD__ );
                        return $status; // abort
                }
@@ -377,6 +398,7 @@ abstract class FileBackendStore extends FileBackend {
                        }
                }
 
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
        }
@@ -395,7 +417,9 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function fileExists( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $stat = $this->getFileStat( $params );
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return ( $stat === null ) ? null : (bool)$stat; // null => failure
        }
@@ -406,7 +430,9 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function getFileTimestamp( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $stat = $this->getFileStat( $params );
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $stat ? $stat['mtime'] : false;
        }
@@ -417,7 +443,9 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function getFileSize( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $stat = $this->getFileStat( $params );
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $stat ? $stat['size'] : false;
        }
@@ -428,8 +456,10 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function getFileStat( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $path = self::normalizeStoragePath( $params['src'] );
                if ( $path === null ) {
+                       wfProfileOut( __METHOD__ . '-' . $this->name );
                        wfProfileOut( __METHOD__ );
                        return false; // invalid storage path
                }
@@ -438,18 +468,22 @@ abstract class FileBackendStore extends FileBackend {
                        // If we want the latest data, check that this cached
                        // value was in fact fetched with the latest available data.
                        if ( !$latest || $this->cache[$path]['stat']['latest'] ) {
+                               wfProfileOut( __METHOD__ . '-' . $this->name );
                                wfProfileOut( __METHOD__ );
                                return $this->cache[$path]['stat'];
                        }
                }
                wfProfileIn( __METHOD__ . '-miss' );
+               wfProfileIn( __METHOD__ . '-miss-' . $this->name );
                $stat = $this->doGetFileStat( $params );
+               wfProfileOut( __METHOD__ . '-miss-' . $this->name );
                wfProfileOut( __METHOD__ . '-miss' );
                if ( is_array( $stat ) ) { // don't cache negatives
                        $this->trimCache(); // limit memory
                        $this->cache[$path]['stat'] = $stat;
                        $this->cache[$path]['stat']['latest'] = $latest;
                }
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $stat;
        }
@@ -465,14 +499,17 @@ abstract class FileBackendStore extends FileBackend {
         */
        public function getFileContents( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $tmpFile = $this->getLocalReference( $params );
                if ( !$tmpFile ) {
+                       wfProfileOut( __METHOD__ . '-' . $this->name );
                        wfProfileOut( __METHOD__ );
                        return false;
                }
                wfSuppressWarnings();
                $data = file_get_contents( $tmpFile->getPath() );
                wfRestoreWarnings();
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $data;
        }
@@ -483,18 +520,23 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function getFileSha1Base36( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $path = $params['src'];
                if ( isset( $this->cache[$path]['sha1'] ) ) {
+                       wfProfileOut( __METHOD__ . '-' . $this->name );
                        wfProfileOut( __METHOD__ );
                        return $this->cache[$path]['sha1'];
                }
                wfProfileIn( __METHOD__ . '-miss' );
+               wfProfileIn( __METHOD__ . '-miss-' . $this->name );
                $hash = $this->doGetFileSha1Base36( $params );
+               wfProfileOut( __METHOD__ . '-miss-' . $this->name );
                wfProfileOut( __METHOD__ . '-miss' );
                if ( $hash ) { // don't cache negatives
                        $this->trimCache(); // limit memory
                        $this->cache[$path]['sha1'] = $hash;
                }
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $hash;
        }
@@ -518,8 +560,10 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function getFileProps( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $fsFile = $this->getLocalReference( $params );
                $props = $fsFile ? $fsFile->getProps() : FSFile::placeholderProps();
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $props;
        }
@@ -530,8 +574,10 @@ abstract class FileBackendStore extends FileBackend {
         */
        public function getLocalReference( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $path = $params['src'];
                if ( isset( $this->expensiveCache[$path]['localRef'] ) ) {
+                       wfProfileOut( __METHOD__ . '-' . $this->name );
                        wfProfileOut( __METHOD__ );
                        return $this->expensiveCache[$path]['localRef'];
                }
@@ -540,6 +586,7 @@ abstract class FileBackendStore extends FileBackend {
                        $this->trimExpensiveCache(); // limit memory
                        $this->expensiveCache[$path]['localRef'] = $tmpFile;
                }
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $tmpFile;
        }
@@ -550,6 +597,7 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function streamFile( array $params ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = Status::newGood();
 
                $info = $this->getFileStat( $params );
@@ -564,12 +612,15 @@ abstract class FileBackendStore extends FileBackend {
                        // do nothing; client cache is up to date
                } elseif ( $res == StreamFile::READY_STREAM ) {
                        wfProfileIn( __METHOD__ . '-send' );
+                       wfProfileIn( __METHOD__ . '-send-' . $this->name );
                        $status = $this->doStreamFile( $params );
+                       wfProfileOut( __METHOD__ . '-send-' . $this->name );
                        wfProfileOut( __METHOD__ . '-send' );
                } else {
                        $status->fatal( 'backend-fail-stream', $params['src'] );
                }
 
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
        }
@@ -678,6 +729,7 @@ abstract class FileBackendStore extends FileBackend {
         */
        protected function doOperationsInternal( array $ops, array $opts ) {
                wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = Status::newGood();
 
                // Build up a list of FileOps...
@@ -699,6 +751,7 @@ abstract class FileBackendStore extends FileBackend {
                        $scopeLockS = $this->getScopedFileLocks( $filesLockSh, LockManager::LOCK_UW, $status );
                        $scopeLockE = $this->getScopedFileLocks( $filesLockEx, LockManager::LOCK_EX, $status );
                        if ( !$status->isOK() ) {
+                               wfProfileOut( __METHOD__ . '-' . $this->name );
                                wfProfileOut( __METHOD__ );
                                return $status; // abort
                        }
@@ -708,12 +761,13 @@ abstract class FileBackendStore extends FileBackend {
                $this->clearCache();
 
                // Actually attempt the operation batch...
-               $subStatus = FileOp::attemptBatch( $performOps, $opts );
+               $subStatus = FileOp::attemptBatch( $performOps, $opts, $this->fileJournal );
 
                // Merge errors into status fields
                $status->merge( $subStatus );
                $status->success = $subStatus->success; // not done in merge()
 
+               wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
        }
index 312a531..ebc6b4c 100644 (file)
@@ -24,6 +24,7 @@ abstract class FileOp {
        protected $state = self::STATE_NEW; // integer
        protected $failed = false; // boolean
        protected $useLatest = true; // boolean
+       protected $batchId; // string
 
        protected $sourceSha1; // string
        protected $destSameAsSource; // boolean
@@ -63,54 +64,77 @@ abstract class FileOp {
        }
 
        /**
-        * Allow stale data for file reads and existence checks
+        * Set the batch UUID this operation belongs to
         *
+        * @param $batchId string
         * @return void
         */
-       final protected function allowStaleReads() {
-               $this->useLatest = false;
+       final protected function setBatchId( $batchId ) {
+               $this->batchId = $batchId;
        }
 
        /**
-        * Attempt a series of file operations.
+        * Whether to allow stale data for file reads and stat checks
+        *
+        * @param $allowStale bool
+        * @return void
+        */
+       final protected function allowStaleReads( $allowStale ) {
+               $this->useLatest = !$allowStale;
+       }
+
+       /**
+        * Attempt to perform a series of file operations.
         * Callers are responsible for handling file locking.
         * 
         * $opts is an array of options, including:
-        * 'force'      : Errors that would normally cause a rollback do not.
-        *                The remaining operations are still attempted if any fail.
-        * 'allowStale' : Don't require the latest available data.
-        *                This can increase performance for non-critical writes.
-        *                This has no effect unless the 'force' flag is set.
-        *
+        * 'force'        : Errors that would normally cause a rollback do not.
+        *                  The remaining operations are still attempted if any fail.
+        * 'allowStale'   : Don't require the latest available data.
+        *                  This can increase performance for non-critical writes.
+        *                  This has no effect unless the 'force' flag is set.
+        * 'nonJournaled' : Don't log this operation batch in the file journal.
+        * 
         * The resulting Status will be "OK" unless:
         *     a) unexpected operation errors occurred (network partitions, disk full...)
         *     b) significant operation errors occured and 'force' was not set
         * 
         * @param $performOps Array List of FileOp operations
         * @param $opts Array Batch operation options
+        * @param $journal FileJournal Journal to log operations to
         * @return Status 
         */
-       final public static function attemptBatch( array $performOps, array $opts ) {
+       final public static function attemptBatch(
+               array $performOps, array $opts, FileJournal $journal
+       ) {
                $status = Status::newGood();
 
-               $allowStale = !empty( $opts['allowStale'] );
-               $ignoreErrors = !empty( $opts['force'] );
-
                $n = count( $performOps );
                if ( $n > self::MAX_BATCH_SIZE ) {
                        $status->fatal( 'backend-fail-batchsize', $n, self::MAX_BATCH_SIZE );
                        return $status;
                }
 
+               $batchId = $journal->getTimestampedUUID();
+               $allowStale = !empty( $opts['allowStale'] );
+               $ignoreErrors = !empty( $opts['force'] );
+               $journaled = empty( $opts['nonJournaled'] );
+
+               $entries = array(); // file journal entries
                $predicates = FileOp::newPredicates(); // account for previous op in prechecks
                // Do pre-checks for each operation; abort on failure...
                foreach ( $performOps as $index => $fileOp ) {
-                       if ( $allowStale ) {
-                               $fileOp->allowStaleReads(); // allow potentially stale reads
-                       }
-                       $subStatus = $fileOp->precheck( $predicates );
+                       $fileOp->setBatchId( $batchId );
+                       $fileOp->allowStaleReads( $allowStale );
+                       $oldPredicates = $predicates;
+                       $subStatus = $fileOp->precheck( $predicates ); // updates $predicates
                        $status->merge( $subStatus );
-                       if ( !$subStatus->isOK() ) { // operation failed?
+                       if ( $subStatus->isOK() ) {
+                               if ( $journaled ) { // journal log entry
+                                       $entries = array_merge( $entries,
+                                               self::getJournalEntries( $fileOp, $oldPredicates, $predicates ) );
+                               }
+                       } else { // operation failed?
                                $status->success[$index] = false;
                                ++$status->failCount;
                                if ( !$ignoreErrors ) {
@@ -119,16 +143,17 @@ abstract class FileOp {
                        }
                }
 
-               if ( $ignoreErrors ) {
-                       # Treat all precheck() fatals as merely warnings
-                       $status->setResult( true, $status->value );
+               // Log the operations in file journal...
+               if ( count( $entries ) ) {
+                       $subStatus = $journal->logChangeBatch( $entries, $batchId );
+                       if ( !$subStatus->isOK() ) {
+                               return $subStatus; // abort
+                       }
                }
 
-               // Restart PHP's execution timer and set the timeout to safe amount.
-               // This handles cases where the operations take a long time or where we are
-               // already running low on time left. The old timeout is restored afterwards.
-               # @TODO: re-enable this for when the number of batches is high.
-               #$scopedTimeLimit = new FileOpScopedPHPTimeout( self::TIME_LIMIT_SEC );
+               if ( $ignoreErrors ) { // treat precheck() fatals as mere warnings
+                       $status->setResult( true, $status->value );
+               }
 
                // Attempt each operation...
                foreach ( $performOps as $index => $fileOp ) {
@@ -155,6 +180,46 @@ abstract class FileOp {
                return $status;
        }
 
+       /**
+        * Get the file journal entries for a single file operation
+        * 
+        * @param $fileOp FileOp
+        * @param $oPredicates Array Pre-op information about files
+        * @param $nPredicates Array Post-op information about files
+        * @return Array
+        */
+       final protected static function getJournalEntries(
+               FileOp $fileOp, array $oPredicates, array $nPredicates
+       ) {
+               $nullEntries = array();
+               $updateEntries = array();
+               $deleteEntries = array();
+               $pathsUsed = array_merge( $fileOp->storagePathsRead(), $fileOp->storagePathsChanged() );
+               foreach ( $pathsUsed as $path ) {
+                       $nullEntries[] = array( // assertion for recovery
+                               'op'      => 'null',
+                               'path'    => $path,
+                               'newSha1' => $fileOp->fileSha1( $path, $oPredicates )
+                       );
+               }
+               foreach ( $fileOp->storagePathsChanged() as $path ) {
+                       if ( $nPredicates['sha1'][$path] === false ) { // deleted
+                               $deleteEntries[] = array(
+                                       'op'      => 'delete',
+                                       'path'    => $path,
+                                       'newSha1' => ''
+                               );
+                       } else { // created/updated
+                               $updateEntries[] = array(
+                                       'op'      => $fileOp->fileExists( $path, $oPredicates ) ? 'update' : 'create',
+                                       'path'    => $path,
+                                       'newSha1' => $nPredicates['sha1'][$path]
+                               );
+                       }
+               }
+               return array_merge( $nullEntries, $updateEntries, $deleteEntries );
+       }
+
        /**
         * Get the value of the parameter with the given name
         * 
@@ -353,71 +418,14 @@ abstract class FileOp {
                $params = $this->params;
                $params['failedAction'] = $action;
                try {
-                       wfDebugLog( 'FileOperation',
-                               get_class( $this ) . ' failed: ' . FormatJson::encode( $params ) );
+                       wfDebugLog( 'FileOperation', get_class( $this ) .
+                               " failed (batch #{$this->batchId}): " . FormatJson::encode( $params ) );
                } catch ( Exception $e ) {
                        // bad config? debug log error?
                }
        }
 }
 
-/**
- * FileOp helper class to expand PHP execution time for a function.
- * On construction, set_time_limit() is called and set to $seconds.
- * When the object goes out of scope, the timer is restarted, with
- * the original time limit minus the time the object existed.
- */
-class FileOpScopedPHPTimeout {
-       protected $startTime; // float; seconds
-       protected $oldTimeout; // integer; seconds
-
-       protected static $stackDepth = 0; // integer
-       protected static $totalCalls = 0; // integer
-       protected static $totalElapsed = 0; // float; seconds
-
-       /* Prevent callers in infinite loops from running forever */
-       const MAX_TOTAL_CALLS = 1000000;
-       const MAX_TOTAL_TIME = 300; // seconds
-
-       /**
-        * @param $seconds integer
-        */
-       public function __construct( $seconds ) {
-               if ( ini_get( 'max_execution_time' ) > 0 ) { // CLI uses 0
-                       if ( self::$totalCalls >= self::MAX_TOTAL_CALLS ) {
-                               trigger_error( "Maximum invocations of " . __CLASS__ . " exceeded." );
-                       } elseif ( self::$totalElapsed >= self::MAX_TOTAL_TIME ) {
-                               trigger_error( "Time limit within invocations of " . __CLASS__ . " exceeded." );
-                       } elseif ( self::$stackDepth > 0 ) { // recursion guard
-                               trigger_error( "Resursive invocation of " . __CLASS__ . " attempted." );
-                       } else {
-                               $this->oldTimeout = ini_set( 'max_execution_time', $seconds );
-                               $this->startTime = microtime( true );
-                               ++self::$stackDepth;
-                               ++self::$totalCalls; // proof against < 1us scopes
-                       }
-               }
-       }
-
-       /**
-        * Restore the original timeout.
-        * This does not account for the timer value on __construct().
-        */
-       public function __destruct() {
-               if ( $this->oldTimeout ) {
-                       $elapsed = microtime( true ) - $this->startTime;
-                       // Note: a limit of 0 is treated as "forever"
-                       set_time_limit( max( 1, $this->oldTimeout - (int)$elapsed ) );
-                       // If each scoped timeout is for less than one second, we end up
-                       // restoring the original timeout without any decrease in value.
-                       // Thus web scripts in an infinite loop can run forever unless we 
-                       // take some measures to prevent this. Track total time and calls.
-                       self::$totalElapsed += $elapsed;
-                       --self::$stackDepth;
-               }
-       }
-}
-
 /**
  * Store a file into the backend from a file on the file system.
  * Parameters similar to FileBackendStore::storeInternal(), which include:
diff --git a/includes/filerepo/backend/filejournal/DBFileJournal.php b/includes/filerepo/backend/filejournal/DBFileJournal.php
new file mode 100644 (file)
index 0000000..1eb9eca
--- /dev/null
@@ -0,0 +1,112 @@
+<?php
+/**
+ * @file
+ * @ingroup FileJournal
+ * @author Aaron Schulz
+ */
+
+/**
+ * Version of FileJournal that logs to a DB table
+ * @since 1.20
+ */
+class DBFileJournal extends FileJournal {
+       protected $wiki = false; // string; wiki DB name
+
+       /**
+        * Construct a new instance from configuration.
+        * $config includes:
+        *     'wiki' : wiki name to use for LoadBalancer
+        * 
+        * @param $config Array
+        */
+       protected function __construct( array $config ) {
+               parent::__construct( $config );
+
+               $this->wiki = $config['wiki'];
+       }
+
+       /**
+        * @see FileJournal::logChangeBatch()
+        * @return Status 
+        */
+       protected function doLogChangeBatch( array $entries, $batchId ) {
+               $status = Status::newGood();
+
+               $dbw = $this->getMasterDB();
+               if ( !$dbw ) {
+                       $status->fatal( 'filejournal-fail-dbconnect', $this->backend );
+                       return $status;
+               }
+               $now = wfTimestamp( TS_UNIX );
+
+               $data = array();
+               foreach ( $entries as $entry ) {
+                       $data[] = array(
+                               'fj_batch_uuid' => $batchId,
+                               'fj_backend'    => $this->backend,
+                               'fj_op'         => $entry['op'],
+                               'fj_path'       => $entry['path'],
+                               'fj_path_sha1'  => wfBaseConvert( sha1( $entry['path'] ), 16, 36, 31 ),
+                               'fj_new_sha1'   => $entry['newSha1'],
+                               'fj_timestamp'  => $dbw->timestamp( $now )
+                       );
+               }
+
+               try {
+                       $dbw->begin();
+                       $dbw->insert( 'filejournal', $data, __METHOD__ );
+                       $dbw->commit();
+               } catch ( DBError $e ) {
+                       $status->fatal( 'filejournal-fail-dbquery', $this->backend );
+                       return $status;
+               }
+
+               return $status;
+       }
+
+       /**
+        * @see FileJournal::purgeOldLogs()
+        * @return Status
+        */
+       protected function doPurgeOldLogs() {
+               $status = Status::newGood();
+               if ( $this->ttlDays <= 0 ) {
+                       return $status; // nothing to do
+               }
+
+               $dbw = $this->getMasterDB();
+               if ( !$dbw ) {
+                       $status->fatal( 'filejournal-fail-dbconnect', $this->backend );
+                       return $status;
+               }
+               $dbCutoff = $dbw->timestamp( time() - 86400 * $this->ttlDays );
+
+               try {
+                       $dbw->begin();
+                       $dbw->delete( 'filejournal',
+                               array( 'fj_timestamp < ' . $dbw->addQuotes( $dbCutoff ) ),
+                               __METHOD__
+                       );
+                       $dbw->commit();
+               } catch ( DBError $e ) {
+                       $status->fatal( 'filejournal-fail-dbquery', $this->backend );
+                       return $status;
+               }
+
+               return $status;
+       }
+
+       /**
+        * Get a master connection to the logging DB
+        * 
+        * @return DatabaseBase|null 
+        */
+       protected function getMasterDB() {
+               try {
+                       $lb = wfGetLBFactory()->newMainLB();
+                       return $lb->getConnection( DB_MASTER, array(), $this->wiki );
+               } catch ( DBConnectionError $e ) {
+                       return null;
+               }
+       }
+}
diff --git a/includes/filerepo/backend/filejournal/FileJournal.php b/includes/filerepo/backend/filejournal/FileJournal.php
new file mode 100644 (file)
index 0000000..f60b7f9
--- /dev/null
@@ -0,0 +1,131 @@
+<?php
+/**
+ * @defgroup FileJournal File journal
+ * @ingroup FileBackend
+ */
+
+/**
+ * @file
+ * @ingroup FileJournal
+ * @author Aaron Schulz
+ */
+
+/**
+ * @brief Class for handling file operation journaling.
+ *
+ * Subclasses should avoid throwing exceptions at all costs.
+ *
+ * @ingroup FileJournal
+ * @since 1.20
+ */
+abstract class FileJournal {
+       protected $backend; // string
+       protected $ttlDays; // integer
+
+       /**
+        * Construct a new instance from configuration.
+        * $config includes:
+        *     'ttlDays' : days to keep log entries around (false means "forever")
+        * 
+        * @param $config Array
+        */
+       protected function __construct( array $config ) {
+               $this->ttlDays = isset( $config['ttlDays'] ) ? $config['ttlDays'] : false;
+       }
+
+       /**
+        * Create an appropriate FileJournal object from config
+        * 
+        * @param $config Array
+        * @param $backend string A registered file backend name
+        * @return FileJournal
+        */
+       final public static function factory( array $config, $backend ) {
+               $class = $config['class'];
+               $jrn = new $class( $config );
+               if ( !$jrn instanceof self ) {
+                       throw new MWException( "Class given is not an instance of FileJournal." );
+               }
+               $jrn->backend = $backend;
+               return $jrn;
+       }
+
+       /**
+        * Get a statistically unique ID string
+        * 
+        * @return string <9 char TS_MW timestamp in base 36><22 random base 36 chars>
+        */
+       final public function getTimestampedUUID() {
+               $s = '';
+               for ( $i = 0; $i < 5; $i++ ) {
+                       $s .= mt_rand( 0, 2147483647 );
+               }
+               $s = wfBaseConvert( sha1( $s ), 16, 36, 31 );
+               return substr( wfBaseConvert( wfTimestamp( TS_MW ), 10, 36, 9 ) . $s, 0, 31 );
+       }
+
+       /**
+        * Log changes made by a batch file operation.
+        * $entries is an array of log entries, each of which contains:
+        *     op      : Basic operation name (create, store, copy, delete)
+        *     path    : The storage path of the file
+        *     newSha1 : The final base 36 SHA-1 of the file
+        * Note that 'false' should be used as the SHA-1 for non-existing files.
+        * 
+        * @param $entries Array List of file operations (each an array of parameters)
+        * @param $batchId string UUID string that identifies the operation batch
+        * @return Status
+        */
+       final public function logChangeBatch( array $entries, $batchId ) {
+               if ( !count( $entries ) ) {
+                       return Status::newGood();
+               }
+               return $this->doLogChangeBatch( $entries, $batchId );
+       }
+
+       /**
+        * @see FileJournal::logChangeBatch()
+        * 
+        * @param $entries Array List of file operations (each an array of parameters)
+        * @param $batchId string UUID string that identifies the operation batch
+        * @return Status
+        */
+       abstract protected function doLogChangeBatch( array $entries, $batchId );
+
+       /**
+        * Purge any old log entries
+        * 
+        * @return Status 
+        */
+       final public function purgeOldLogs() {
+               return $this->doPurgeOldLogs();
+       }
+
+       /**
+        * @see FileJournal::purgeOldLogs()
+        * @return Status
+        */
+       abstract protected function doPurgeOldLogs();
+}
+
+/**
+ * Simple version of FileJournal that does nothing
+ * @since 1.20
+ */
+class NullFileJournal extends FileJournal {
+       /**
+        * @see FileJournal::logChangeBatch()
+        * @return Status 
+        */
+       protected function doLogChangeBatch( array $entries, $batchId ) {
+               return Status::newGood();
+       }
+
+       /**
+        * @see FileJournal::purgeOldLogs()
+        * @return Status
+        */
+       protected function doPurgeOldLogs() {
+               return Status::newGood();
+       }
+}
index 11e7797..5e53366 100644 (file)
@@ -30,6 +30,14 @@ class LockManagerGroup {
                return self::$instance;
        }
 
+       /**
+        * Destroy the singleton instance, so that a new one will be created next
+        * time singleton() is called.
+        */
+       public static function destroySingleton() {
+               self::$instance = null;
+       }
+
        /**
         * Register lock managers from the global variables
         * 
index f1a2974..7be554d 100644 (file)
@@ -908,9 +908,13 @@ class LocalFile extends File {
         */
        function upload( $srcPath, $comment, $pageText, $flags = 0, $props = false, $timestamp = false, $user = null ) {
                global $wgContLang;
+
+               if ( $this->getRepo()->getReadOnlyReason() !== false ) {
+                       return $this->readOnlyFatalStatus();
+               }
+
                // truncate nicely or the DB will do it for us
-               // non-nicely (dangling multi-byte chars, non-truncated
-               // version in cache).
+               // non-nicely (dangling multi-byte chars, non-truncated version in cache).
                $comment = $wgContLang->truncate( $comment, 255 );
                $this->lock(); // begin
                $status = $this->publish( $srcPath, $flags );
@@ -1094,7 +1098,7 @@ class LocalFile extends File {
                        $latest = $descTitle->getLatestRevID();
                        $nullRevision = Revision::newNullRevision(
                                $dbw,
-                               $descTitle->getArticleId(),
+                               $descTitle->getArticleID(),
                                $log->getRcComment(),
                                false
                        );
@@ -1175,6 +1179,10 @@ class LocalFile extends File {
         *     archive name, or an empty string if it was a new file.
         */
        function publishTo( $srcPath, $dstRel, $flags = 0 ) {
+               if ( $this->getRepo()->getReadOnlyReason() !== false ) {
+                       return $this->readOnlyFatalStatus();
+               }
+
                $this->lock(); // begin
 
                $archiveName = wfTimestamp( TS_MW ) . '!'. $this->getName();
@@ -1211,6 +1219,10 @@ class LocalFile extends File {
         * @return FileRepoStatus object.
         */
        function move( $target ) {
+               if ( $this->getRepo()->getReadOnlyReason() !== false ) {
+                       return $this->readOnlyFatalStatus();
+               }
+
                wfDebugLog( 'imagemove', "Got request to move {$this->name} to " . $target->getText() );
                $this->lock(); // begin
 
@@ -1250,6 +1262,10 @@ class LocalFile extends File {
         * @return FileRepoStatus object.
         */
        function delete( $reason, $suppress = false ) {
+               if ( $this->getRepo()->getReadOnlyReason() !== false ) {
+                       return $this->readOnlyFatalStatus();
+               }
+
                $this->lock(); // begin
 
                $batch = new LocalFileDeleteBatch( $this, $reason, $suppress );
@@ -1266,7 +1282,7 @@ class LocalFile extends File {
                }
                $status = $batch->execute();
 
-               if ( $status->ok ) {
+               if ( $status->isOK() ) {
                        // Update site_stats
                        $site_stats = $dbw->tableName( 'site_stats' );
                        $dbw->query( "UPDATE $site_stats SET ss_images=ss_images-1", __METHOD__ );
@@ -1293,6 +1309,10 @@ class LocalFile extends File {
         * @return FileRepoStatus object.
         */
        function deleteOld( $archiveName, $reason, $suppress = false ) {
+               if ( $this->getRepo()->getReadOnlyReason() !== false ) {
+                       return $this->readOnlyFatalStatus();
+               }
+
                $this->lock(); // begin
 
                $batch = new LocalFileDeleteBatch( $this, $reason, $suppress );
@@ -1302,7 +1322,7 @@ class LocalFile extends File {
 
                $this->unlock(); // done
 
-               if ( $status->ok ) {
+               if ( $status->isOK() ) {
                        $this->purgeDescription();
                        $this->purgeHistory();
                }
@@ -1322,6 +1342,12 @@ class LocalFile extends File {
         * @return FileRepoStatus
         */
        function restore( $versions = array(), $unsuppress = false ) {
+               if ( $this->getRepo()->getReadOnlyReason() !== false ) {
+                       return $this->readOnlyFatalStatus();
+               }
+
+               $this->lock(); // begin
+
                $batch = new LocalFileRestoreBatch( $this, $unsuppress );
 
                if ( !$versions ) {
@@ -1332,14 +1358,14 @@ class LocalFile extends File {
 
                $status = $batch->execute();
 
-               if ( !$status->isGood() ) {
-                       return $status;
+               if ( $status->isGood() ) {
+                       $cleanupStatus = $batch->cleanup();
+                       $cleanupStatus->successCount = 0;
+                       $cleanupStatus->failCount = 0;
+                       $status->merge( $cleanupStatus );
                }
 
-               $cleanupStatus = $batch->cleanup();
-               $cleanupStatus->successCount = 0;
-               $cleanupStatus->failCount = 0;
-               $status->merge( $cleanupStatus );
+               $this->unlock(); // done
 
                return $status;
        }
@@ -1418,7 +1444,8 @@ class LocalFile extends File {
                        $this->locked++;
                }
 
-               return $dbw->selectField( 'image', '1', array( 'img_name' => $this->getName() ), __METHOD__ );
+               return $dbw->selectField( 'image', '1',
+                       array( 'img_name' => $this->getName() ), __METHOD__, array( 'FOR UPDATE' ) );
        }
 
        /**
@@ -1443,6 +1470,14 @@ class LocalFile extends File {
                $dbw = $this->repo->getMasterDB();
                $dbw->rollback( __METHOD__ );
        }
+
+       /**
+        * @return Status
+        */
+       protected function readOnlyFatalStatus() {
+               return $this->getRepo()->newFatal( 'filereadonlyerror', $this->getName(),
+                       $this->getRepo()->getName(), $this->getRepo()->getReadOnlyReason() );
+       }
 } // LocalFile class
 
 # ------------------------------------------------------------------------------
@@ -1710,7 +1745,7 @@ class LocalFileDeleteBatch {
                        $this->status->merge( $status );
                }
 
-               if ( !$this->status->ok ) {
+               if ( !$this->status->isOK() ) {
                        // Critical file deletion error
                        // Roll back inserts, release lock and abort
                        // TODO: delete the defunct filearchive rows if we are using a non-transactional DB
index 14604c1..046fa16 100644 (file)
@@ -158,7 +158,7 @@ abstract class DatabaseInstaller {
                }
                $this->db->selectDB( $this->getVar( 'wgDBname' ) );
 
-               if( $this->db->tableExists( 'user', __METHOD__ ) ) {
+               if( $this->db->tableExists( 'archive', __METHOD__ ) ) {
                        $status->warning( 'config-install-tables-exist' );
                        $this->enableLB();
                        return $status;
index f2e36ae..6ff0af9 100644 (file)
@@ -202,6 +202,39 @@ abstract class DatabaseUpdater {
                $this->extensionUpdates[] = array( 'addField', $tableName, $columnName, $sqlPath, true );
        }
 
+       /**
+        *
+        * @since 1.20
+        *
+        * @param $tableName string
+        * @param $columnName string
+        * @param $sqlPath string
+        */
+       public function dropExtensionField( $tableName, $columnName, $sqlPath ) {
+               $this->extensionUpdates[] = array( 'dropField', $tableName, $columnName, $sqlPath, true );
+       }
+
+       /**
+        *
+        * @since 1.20
+        *
+        * @param $tableName string
+        * @param $sqlPath string
+        */
+       public function dropExtensionTable( $tableName, $sqlPath ) {
+               $this->extensionUpdates[] = array( 'dropTable', $tableName, $sqlPath, true );
+       }
+
+       /**
+        *
+        * @since 1.20
+        *
+        * @param $tableName string
+        */
+       public function tableExists( $tableName ) {
+               return ( $this->db->tableExists( $tableName, __METHOD__ ) );
+       }
+
        /**
         * Add a maintenance script to be run after the database updates are complete.
         * 
index ab2cdeb..f9892c4 100644 (file)
@@ -3623,10 +3623,10 @@ Dieser kann durch Anhebung des Parameters <code>session.gc_maxlifetime</code> in
 Den Installationsvorgang erneut starten.',
        'config-no-session' => 'Die Sitzungsdaten sind verloren gegangen!
 Die Datei <code>php.ini</code> muss geprüft und es muss dabei sichergestellt werden, dass der Parameter <code>session.save_path</code> auf das richtige Verzeichnis verweist.',
-       'config-your-language' => 'Sprache:',
+       'config-your-language' => 'Sprache während des Installierens:',
        'config-your-language-help' => 'Bitte die Sprache auswählen, die während des Installationsvorgangs verwendet werden soll.',
        'config-wiki-language' => 'Sprache des Wikis:',
-       'config-wiki-language-help' => 'Bitte die Hauptbearbeitungssprache des Wikis auswählen.',
+       'config-wiki-language-help' => 'Bitte die Sprache auswählen, die überwiegend beim Erstellen der Inhalte verwendet werden soll.',
        'config-back' => '← Zurück',
        'config-continue' => 'Weiter →',
        'config-page-language' => 'Sprache',
@@ -13120,6 +13120,7 @@ $messages['pdc'] = array(
 /** Polish (Polski)
  * @author BeginaFelicysym
  * @author Holek
+ * @author Saper
  * @author Sp5uhe
  * @author Woytecr
  */
@@ -13167,13 +13168,13 @@ Sprawdź plik php.ini i upewnij się, że <code>session.save_path</code> wskazuj
        'config-page-options' => 'Opcje',
        'config-page-install' => 'Instaluj',
        'config-page-complete' => 'Zakończono!',
-       'config-page-restart' => 'Ponowne uruchomienie instalacji',
+       'config-page-restart' => 'Rozpoczęcie instalacji od nowa',
        'config-page-readme' => 'Podstawowe informacje',
        'config-page-releasenotes' => 'Informacje o wersji',
        'config-page-copying' => 'Kopiowanie',
        'config-page-upgradedoc' => 'Uaktualnienie',
        'config-page-existingwiki' => 'Istniejąca wiki',
-       'config-help-restart' => 'Czy chcesz usunąć wszystkie zapisane dane, które podałeś i uruchomić ponownie proces instalacji?',
+       '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.
@@ -13250,22 +13251,18 @@ Instalacja może się nie udać!",
        'config-xcache' => '[Http://trac.lighttpd.net/xcache/ XCache] jest zainstalowany',
        'config-apc' => '[Http://www.php.net/apc APC] jest zainstalowany',
        'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] jest zainstalowany',
-       'config-no-cache' => "'''Uwaga:''' Nie można odnaleźć [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] lub [http://www.iis.net/download/WinCacheForPhp WinCache].
-Buforowanie obiektów nie będzie możliwe.",
+       'config-no-cache' => "'''Uwaga:''' Pamięć podręczna dla kodu MediaWiki nie będzie uruchomiona., gdyż nie ma żadnego z następujących narzędzi: [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] lub [http://www.iis.net/download/WinCacheForPhp WinCache].",
        'config-mod-security' => "''' Ostrzeżenie ''': Serwer sieci web ma włączone [http://modsecurity.org/ mod_security]. Jeśli niepoprawnie skonfigurowane, może być przyczyną problemów MediaWiki lub innego oprogramowania, które pozwala użytkownikom na wysyłanie dowolnej zawartości.
 Sprawdź w [http://modsecurity.org/documentation/ dokumentacji mod_security] lub skontaktuj się z obsługa hosta, jeśli wystąpią losowe błędy.",
        'config-diff3-bad' => 'Nie znaleziono GNU diff3.',
-       'config-imagemagick' => 'Odnaleziono ImageMagick <code>$1</code>.
-Miniatury grafik będą generowane jeśli włączysz przesyłanie plików.',
-       'config-gd' => 'Odnaleziono wbudowaną bibliotekę graficzną GD.
-Miniatury grafik będą generowane jeśli włączysz przesyłanie plików.',
-       'config-no-scaling' => 'Nie można odnaleźć biblioteki GD lub ImageMagick.
-Tworzenie miniatur grafik będzie wyłączone.',
+       'config-imagemagick' => 'Mamy zainstalowany ImageMagick <code>$1</code>, dzięki czemu będzie można pomniejszać załadowane grafiki.',
+       'config-gd' => 'Mamy wbudowaną bibliotekę graficzną GD, dzięki ceymu będzie można pomniejszać załadowane grafiki.',
+       'config-no-scaling' => 'Nie można odnaleźć biblioteki GD lub ImageMagick. Nie będzie działać pomniejszanie załadowane grafiki.',
        'config-no-uri' => "'''Błąd.''' Nie można określić aktualnego URI.
 Instalacja została przerwana.",
        'config-no-cli-uri' => "''' Ostrzeżenie ''': nie wskazano --scriptpath,  użycie wartości domyślnej: <code>$1</code> .",
-       'config-using-server' => 'Przy użyciu nazwy serwera „<nowiki>$1</nowiki>“.',
-       'config-using-uri' => 'Użycie adresu URL serwera "<nowiki>$1$2</nowiki>".',
+       'config-using-server' => '„<nowiki>$1</nowiki>“ jest adresem serwera, na którym instalowana jest wiki.',
+       'config-using-uri' => 'Wiki będzie zainstalowana pod adresem "<nowiki>$1$2</nowiki>".',
        'config-uploads-not-safe' => "'''Uwaga''' – domyślny katalog do którego zapisywane są przesyłane pliki <code>$1</code> jest podatny na wykonanie dowolnego skryptu.
 Chociaż MediaWiki sprawdza wszystkie przesłane pliki pod kątem bezpieczeństwa, zaleca się jednak, aby [//www.mediawiki.org/wiki/Manual:Security#Upload_security zamknąć tę lukę w zabezpieczeniach] przed włączeniem przesyłania plików.",
        'config-no-cli-uploads-check' => "'''Ostrzeżenie:''' Katalog domyślny przesyłanych plików ( <code>$1</code> ) nie jest sprawdzona względem luki
@@ -13286,7 +13283,7 @@ Jeśli korzystasz ze współdzielonego hostingu, operator serwera powinien poda
 Jeśli instalujesz oprogramowanie na serwerze Windowsowym i korzystasz z MySQL, użycie „localhost” może nie zadziałać jako nazwa hosta. Jeśli wystąpi ten problem użyj „127.0.0.1” jako lokalnego adresu IP.
 
 Jeżeli korzystasz z PostgreSQL, pozostaw to pole puste, aby połączyć się poprzez gniazdo Unix‐a.',
-       'config-db-host-oracle' => 'TNS bazy danych',
+       'config-db-host-oracle' => 'Nazwa instancji bazy danych (TNS):',
        'config-db-host-oracle-help' => 'Wprowadź prawidłową [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nazwę połączenia lokalnego]. Plik „tnsnames.ora” musi być widoczny dla instalatora.<br />Jeśli używasz biblioteki klienckiej 10g lub nowszej możesz również skorzystać z metody nazw [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm łatwego łączenia].',
        'config-db-wiki-settings' => 'Zidentyfikuj tę wiki',
        'config-db-name' => 'Nazwa bazy danych',
@@ -13294,12 +13291,14 @@ Jeżeli korzystasz z PostgreSQL, pozostaw to pole puste, aby połączyć się po
 Nie może ona zawierać spacji.
 
 Jeśli korzystasz ze współdzielonego hostingu, dostawca usługi hostingowej może wymagać użycia konkretnej nazwy bazy danych lub pozwalać na tworzenie baz danych za pośrednictwem panelu użytkownika.',
-       'config-db-name-oracle' => 'Schemat bazy danych',
-       'config-db-account-oracle-warn' => 'Istnieją trzy obsługiwane scenariusze instalacji Oracle jako wewnętrznej bazy danych:
+       'config-db-name-oracle' => 'Nazwa schematu bazy danych:',
+       'config-db-account-oracle-warn' => 'Bazę danych Oracle można przygotować do pracy z MediaWIki na trzy sposoby:
 
-Jeśli chcesz utworzyć konto bazy danych jako część procesu instalacji, proszę dostarczyć konta z rolą SYSDBA jako konto bazy danych dla instalacji i określić żądane poświadczenia dla konta dostępu do sieci web, w przeciwnym razie można ręcznie utworzyć konta dostępu do sieci web i dostarczać tylko to konto (jeśli ma wymagane uprawnienia do tworzenia obiektów schematu) lub dostarczyć dwa różne konta - jedno z uprawnieniami do tworzenia i drugie ograniczone dla dostępu do sieci.
+Możesz utworzyć konto użytkownika bazy danych podczas instalacji MediaWiki. Wówczas należy podać nazwę i hasło użytkownika z rolą SYSDBA w celu użycia go przez instalator do utworzenia nowe konta użytkownika, z którego korzystać będzie MediaWiki.
 
-Skrypt do tworzenia konta z uprawnieniami wymagane można znaleźć w folderze "maintenance/oracle/" tej instalacji. Należy pamiętać, że użycie konta z ograniczeniami spowoduje wyłączenie wszystkich możliwości konserwacji przy użyciu domyślnego konta.',
+Możesz również skorzystać z konta użytkownika bazy danych utworzonego bezpośrednio w Oracle i wówczas wystarczy podać tylko nazwę i hasło tego użytkownika. Konto z rolą SYSDBA nie będzie potrzebne, jednak konto użytkownika powinno mieć uprawnienia do utworzenia obiektów w schemacie bazy danych. Możesz też podać dwa konta - konto dla instalatora, z pomocą którego zostaną obiekty w schemacie bazy danych i drugie konto, z którego będzie MediaWiki korzystać będzie do pracy. 
+
+W podkatalogu "maintenance/oracle" znajduje się skrypt do tworzenia konta użytkownika. Korzystanie z konta użytkownika z ograniczonymi uprawnieniami spowoduje wyłączenie funkcji związanych z aktualizacją oprogramowania MediaWiki.',
        'config-db-install-account' => 'Konto użytkownika dla instalatora',
        'config-db-username' => 'Nazwa użytkownika bazy danych',
        'config-db-password' => 'Hasło bazy danych',
@@ -13323,16 +13322,15 @@ To pole zwykle pozostawiane jest puste.',
        'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binarny',
        'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
        'config-charset-mysql4' => 'MySQL 4.0 kompatybilny wstecz UTF-8',
-       'config-charset-help' => "'''Ostrzeżenie:''' użycie '''UTF-8 zgodnego ze starszymi wersjami''' na MySQL 4.1 +, a następnie wykonanie kopii zapasowej bazy danych przy użyciu <code>mysqldump</code>, może zniszczyć wszystkie znaki inne niż ASCII, nieodwracalnie uszkkadzając kopię zapasową!
+       'config-charset-help' => "'''Ostrzeżenie:''' W przypadku użycia opcji '''UTF-8 zgodnego ze starszymi wersjami''' podczas korzystania z wersji MySQL nowszych niż 4.1 kopie zapasowe wykonane przy użyciu programu <code>mysqldump</code> będą bezużyteczne - wszystkie znaki inne niż ASCII zostaną zapisane nieprawidłowo.
 
 W '''trybie binarnym''', MediaWiki zapisuje tekst UTF-8 do bazy danych w polach binarnych.
 To jest bardziej wydajne niż tryb UTF-8 w MySQL i pozwala na używanie pełnego zakresu znaków Unicode.
 W ''' trybie UTF-8''', MySQL będzie wiedzieć, w jakim zestawie znaków są dane i umożliwia ich prezentowanie i odpowiednią konwersję, ale nie pozwoli Ci przechowywać znaków spoza [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes podstawowej płaszczyzny wielojęzyczności].",
        'config-mysql-old' => 'Wymagany jest MySQL $1 lub nowszy; korzystasz z $2.',
-       'config-db-port' => 'Port bazy danych',
-       'config-db-schema' => 'Schemat dla MediaWiki',
-       'config-db-schema-help' => 'Ten schemat jest zazwyczaj właściwy.
-Zmień go wyłącznie jeśli jesteś pewien, że powinieneś.',
+       'config-db-port' => 'Numer portu TCP dla połączeń do bazy danych',
+       'config-db-schema' => 'Nazwa schematu bazy danych, z którego ma korzystać MediaWiki',
+       'config-db-schema-help' => 'Zaproponowana nazwa schematu jest odpowiednia dla większości sytuacji i przeważnie nie trzeba jej zmieniać.',
        'config-pg-test-error' => "Nie można połączyć się z bazą danych''' $1 ''': $2",
        'config-sqlite-dir' => 'Katalog danych SQLite',
        'config-sqlite-dir-help' => "SQLite przechowuje wszystkie dane w pojedynczym pliku.
@@ -13352,10 +13350,10 @@ Warto rozważyć umieszczenie w bazie danych zupełnie gdzie indziej, na przykł
 
 $1
 
-Jeśli system baz danych, z którego chcesz skorzystać nie jest wymieniony, postępuj zgodnie z instrukcjami aby móc z niego skorzystać.',
-       'config-support-mysql' => '* $1 jest domyślną bazą danych dla MediaWiki i jest najlepiej wspierane ([http://www.php.net/manual/en/mysql.installation.php jak skompilować PHP ze wsparciem dla MySQL])',
-       'config-support-postgres' => '* $1 jest popularnym systemem baz danych z otwartym kodem alternatywnym dla MySQL ([http://www.php.net/manual/en/pgsql.installation.php jak skompilować PHP ze wsparciem dla PostgreSQL]). Z powodu możliwości wystąpienia drobnych błędów, nie jest zalecane użycie go w środowisku produkcyjnym.',
-       'config-support-sqlite' => '* $1 jest lekkim systemem bazy danych, który jest bardzo dobrze wspierany. ([http://www.php.net/manual/en/pdo.installation.php Jak skompilować PHP ze wsparciem dla SQLite], korzystając z PDO)',
+Poniżej wyświetlone są systemy baz danych gotowe do użycia. Jeżeli poniżej brakuje bazy danych, z której chcesz skorzystać, oznacza to, że brakuje odpowiedniego oprogramowania lub zostało ono niepoprawnie skonfigurowane. Powyżej znajdziesz odnośniki do dokumentacji, która pomoże w konfiguracji odpowiednich komponentów.',
+       'config-support-mysql' => '* $1 jest bazą danych, na której rozwijane jest oprogramowanie MediaWiki. Ewentualne błędy w współpracy z bazą danych są odnajdowane i naprawiane dość szybko. ([http://www.php.net/manual/en/mysql.installation.php zobacz, jak skompilować PHP ze wsparciem dla MySQL])',
+       'config-support-postgres' => '* $1 jest popularnym systemem baz danych, często stosowanym zamiast MySQL  ([http://www.php.net/manual/en/pgsql.installation.php Zobacz, jak skompilować PHP ze wsparciem dla PostgreSQL]). Z powodu możliwości wystąpienia drobnych błędów, nie jest zalecana do wymagających wdrożeń.',
+       'config-support-sqlite' => '* $1 jest niewielkim systemem bazy danych, z którym MediaWiki bardzo dobrze współpracuje. ([http://www.php.net/manual/en/pdo.installation.php Jak skompilować PHP ze wsparciem dla SQLite], korzystając z PDO)',
        'config-support-oracle' => '* $1 jest komercyjną profesjonalną bazą danych. ([http://www.php.net/manual/en/oci8.installation.php Jak skompilować PHP ze wsparciem dla OCI8])',
        'config-support-ibm_db2' => '* $1 jest komercyjną zaawansowaną bazą danych.',
        'config-header-mysql' => 'Ustawienia MySQL',
@@ -13366,9 +13364,9 @@ Jeśli system baz danych, z którego chcesz skorzystać nie jest wymieniony, pos
        'config-invalid-db-type' => 'Nieprawidłowy typ bazy danych',
        'config-missing-db-name' => 'Należy wpisać wartość w polu „Nazwa bazy danych”',
        'config-missing-db-host' => 'Musisz wpisać wartość w polu „Serwer bazy danych”',
-       'config-missing-db-server-oracle' => 'Należy wpisać wartość w polu „Baza danych TNS”',
-       'config-invalid-db-server-oracle' => 'Nieprawidłowa baza danych TNS „$1”.
-Używaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) i kropek (.).',
+       'config-missing-db-server-oracle' => 'Należy wpisać wartość w polu „Nazwa instancji bazy danych (TNS)”',
+       'config-invalid-db-server-oracle' => 'Nieprawidłowa nazwa instancji bazy danych (TNS) „$1”.
+W nazwie można użyć wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) i kropek (.).',
        'config-invalid-db-name' => 'Nieprawidłowa nazwa bazy danych „$1”.
 Używaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) lub znaku odejmowania (-).',
        'config-invalid-db-prefix' => 'Nieprawidłowy prefiks bazy danych „$1”.
@@ -13376,11 +13374,11 @@ Używaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) lub zn
        'config-connection-error' => '$1.
 
 Sprawdź adres serwera, nazwę użytkownika i hasło, a następnie spróbuj ponownie.',
-       'config-invalid-schema' => 'Nieprawidłowy schemat dla MediaWiki „$1”.
-Używaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9) i podkreślenia (_).',
+       'config-invalid-schema' => 'Nieprawidłowa nazwa schematu dla MediaWiki „$1”.
+Nazwa może zawierać wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9) i podkreślenia (_).',
        'config-db-sys-create-oracle' => 'Instalator może wykorzystać wyłącznie konto SYSDBA do tworzenia nowych kont użytkowników.',
        'config-db-sys-user-exists-oracle' => 'Konto użytkownika „$1“ już istnieje. SYSDBA można użyć tylko do utworzenia nowego konta!',
-       'config-postgres-old' => 'Wymagany jest PostgreSQL $1 lub nowszy; korzystasz z $2.',
+       'config-postgres-old' => 'Korzystasz z wersji $2 oprogramowania PostgreSQL, a potrzebna jest wersja co najmniej $1.',
        'config-sqlite-name-help' => 'Wybierz nazwę, która będzie identyfikować Twoją wiki.
 Nie wolno używać spacji ani myślników.
 Zostanie ona użyta jako nazwa pliku danych SQLite.',
@@ -13613,7 +13611,7 @@ Upewnij się, że użytkownik „$1” może zapisywać do schematu „$2”.',
        'config-pg-not-in-role' => 'Konto określone dla użytkownika sieci już istnieje.
 Konto określone dla instalacji nie ma uprawnień administratora ani nie jest przynależy do roli użytkownika sieci web, więc nie można utworzyć obiektów stanowiących własność użytkownika sieci.
 
-MediaWiki wymaga obecnie, by tabele należały do użytkownika sieci web. Podaj inną nazwę konta sieciOWEGO, lub kliknij przycisk "Wstecz" i określ użytkownika instalacji posiadającegoodpowiednie uprawnienia.',
+MediaWiki wymaga obecnie, by tabele były własnością konta zwykłego użytkownika. Podaj inną nazwę konta użytkownika, lub kliknij przycisk "Wstecz" i podaj nazwę konta użytkownika instalatora, które posiada odpowiednie uprawnienia.',
        'config-install-user' => 'Tworzenie użytkownika bazy danych',
        'config-install-user-alreadyexists' => 'Konto użytkownika „$1“ już istnieje',
        'config-install-user-create-failed' => 'Tworzenie użytkownika "$1" nie powiodło się: $2',
@@ -13631,18 +13629,17 @@ Pomijam tworzenie tabel.",
 Tworzenie domyślnej listy pominięto.",
        'config-install-stats' => 'Inicjowanie statystyki',
        'config-install-keys' => 'Generowanie tajnych kluczy',
-       'config-insecure-keys' => "'''Ostrzaeżenie:''' {{PLURAL:$2|Klucz bezpieczeństwa|Klucze bezpieczeństwa|Klucze bezpieczeństwa}} ($1) utworzone podczas instalacji {{PLURAL:$2|utworzony podczas instalacji nie jest|utworzone podczas instalacji nie są|utworzone podczas instalacji nie są}} w pełni bezpieczne. Rozważ {{PLURAL:$2|jego|ich|ich}} ręczną zmianę.",
+       'config-insecure-keys' => "'''Ostrzeżenie:''' {{PLURAL:$2|Klucz bezpieczeństwa|Klucze bezpieczeństwa|Klucze bezpieczeństwa}} ($1) utworzone podczas instalacji {{PLURAL:$2|utworzony podczas instalacji nie jest|utworzone podczas instalacji nie są|utworzone podczas instalacji nie są}} w pełni bezpieczne. Być może warto wygenerować {{PLURAL:$2|własny klucz|własne klucze|własne klucze}}.",
        'config-install-sysop' => 'Tworzenie konta administratora',
        'config-install-subscribe-fail' => 'Nie można zapisać na listę „mediawiki-announce“ – $1',
        'config-install-subscribe-notpossible' => 'cURL nie jest zainstalowany, więc allow_url_fopen nie jest dostępne.',
        'config-install-mainpage' => 'Tworzenie strony głównej z domyślną zawartością',
        'config-install-extension-tables' => 'Tworzenie tabel dla aktywnych rozszerzeń',
        'config-install-mainpage-failed' => 'Nie udało się wstawić strony głównej – $1',
-       'config-install-done' => "''' Gratulacje!'' '
-Udałi ci się zainstalować MediaWiki.
+       'config-install-done' => "'''Gratulacje!'''
+Udało ci się zainstalować MediaWiki.
 
-Instalator wygenerował plik <code>LocalSettings.php</code>.
-Zawiera on całość konfiguracji.
+Instalator wygenerował plik konfiguracyjny <code>LocalSettings.php</code>.
 
 Musisz go pobrać i umieścić go w korzeniu twojej instalacji wiki (tym samym katalogu co index.php). Pobieranie powinno zacząć się automatycznie.
 
@@ -13650,9 +13647,9 @@ Jeżeli pobieranie nie zostało zaproponowane, lub jeśli użytkownik anulował
 
 $3
 
-'''Uwaga''': Jeśli tego nie zrobisz tego teraz, wygenerowany plik konfiguracyjny nie będzie dostępny po zakończeniu instalacji bez pobierania go.
+'''Uwaga''': Jeśli tego nie zrobisz tego teraz, wygenerowany plik konfiguracyjny nie będzie już dostępny po zakończeniu instalacji.
 
-Gdy już to zrobisz, możesz '''[ $2  wejść na wiki]'''.",
+Po załadowaniu pliku konfiguracyjnego możesz '''[ $2  wejść na wiki]'''.",
        'config-download-localsettings' => 'Pobierz LocalSettings.php',
        'config-help' => 'pomoc',
        'config-nofile' => 'Nie udało się odnaleźć pliku "$1". Czy nie został usunięty?',
index 67e167d..b380787 100644 (file)
@@ -1094,12 +1094,16 @@ abstract class Installer {
                if( $utf8 ) {
                        $useNormalizer = 'utf8';
                        $utf8 = utf8_normalize( $not_normal_c, UtfNormal::UNORM_NFC );
-                       if ( $utf8 !== $normal_c ) $needsUpdate = true;
+                       if ( $utf8 !== $normal_c ) {
+                               $needsUpdate = true;
+                       }
                }
                if( $intl ) {
                        $useNormalizer = 'intl';
                        $intl = normalizer_normalize( $not_normal_c, Normalizer::FORM_C );
-                       if ( $intl !== $normal_c ) $needsUpdate = true;
+                       if ( $intl !== $normal_c ) {
+                               $needsUpdate = true;
+                       }
                }
 
                // Uses messages 'config-unicode-using-php', 'config-unicode-using-utf8', 'config-unicode-using-intl'
@@ -1442,8 +1446,7 @@ abstract class Installer {
        }
 
        /**
-        * Generate $wgSecretKey. Will warn if we had to use mt_rand() instead of
-        * /dev/urandom
+        * Generate $wgSecretKey. Will warn if we had to use an insecure random source.
         *
         * @return Status
         */
@@ -1456,8 +1459,8 @@ abstract class Installer {
        }
 
        /**
-        * Generate a secret value for variables using either
-        * /dev/urandom or mt_rand(). Produce a warning in the later case.
+        * Generate a secret value for variables using our CryptRand generator.
+        * Produce a warning if the random source was insecure.
         *
         * @param $keys Array
         * @return Status
@@ -1465,28 +1468,18 @@ abstract class Installer {
        protected function doGenerateKeys( $keys ) {
                $status = Status::newGood();
 
-               wfSuppressWarnings();
-               $file = fopen( "/dev/urandom", "r" );
-               wfRestoreWarnings();
-
+               $strong = true;
                foreach ( $keys as $name => $length ) {
-                       if ( $file ) {
-                                       $secretKey = bin2hex( fread( $file, $length / 2 ) );
-                       } else {
-                               $secretKey = '';
-
-                               for ( $i = 0; $i < $length / 8; $i++ ) {
-                                       $secretKey .= dechex( mt_rand( 0, 0x7fffffff ) );
-                               }
+                       $secretKey = MWCryptRand::generateHex( $length, true );
+                       if ( !MWCryptRand::wasStrong() ) {
+                               $strong = false;
                        }
 
                        $this->setVar( $name, $secretKey );
                }
 
-               if ( $file ) {
-                       fclose( $file );
-               } else {
-                       $names = array_keys ( $keys );
+               if ( !$strong ) {
+                       $names = array_keys( $keys );
                        $names = preg_replace( '/^(.*)$/', '\$$1', $names );
                        global $wgLang;
                        $status->warning( 'config-insecure-keys', $wgLang->listToText( $names ), count( $names ) );
index 5cee04a..9a982f9 100644 (file)
@@ -27,6 +27,11 @@ class PostgresUpdater extends DatabaseUpdater {
         */
        protected function getCoreUpdateList() {
                return array(
+                       # rename tables 1.7.3
+                       # r15791 Change reserved word table names "user" and "text"
+                       array( 'renameTable', 'user', 'mwuser'),
+                       array( 'renameTable', 'text', 'pagecontent'),
+
                        # new sequences
                        array( 'addSequence', 'logging_log_id_seq'          ),
                        array( 'addSequence', 'page_restrictions_pr_id_seq' ),
@@ -306,7 +311,7 @@ END;
                $res = $this->db->query(
                        sprintf(
                                $q,
-                               $this->db->addQuotes( $this->db->getCoreSchea() ),
+                               $this->db->addQuotes( $this->db->getCoreSchema() ),
                                $this->db->addQuotes( $idx )
                        )
                );
@@ -394,7 +399,7 @@ END;
 
        protected function renameSequence( $old, $new ) {
                if ( $this->db->sequenceExists( $new ) ) {
-                       $this->output( "WARNING sequence $new already exists\n" );
+                       $this->output( "...sequence $new already exists.\n" );
                        return;
                }
                if ( $this->db->sequenceExists( $old ) ) {
@@ -406,7 +411,8 @@ END;
        protected function renameTable( $old, $new ) {
                if ( $this->db->tableExists( $old ) ) {
                        $this->output( "Renaming table $old to $new\n" );
-                       $old = $this->db->addQuotes( $old );
+                       $old = $this->db->realTableName( $old, "quoted" );
+                       $new = $this->db->realTableName( $new, "quoted" );
                        $this->db->query( "ALTER TABLE $old RENAME TO $new" );
                }
        }
@@ -414,7 +420,7 @@ END;
        protected function addPgField( $table, $field, $type ) {
                $fi = $this->db->fieldInfo( $table, $field );
                if ( !is_null( $fi ) ) {
-                       $this->output( "... column '$table.$field' already exists\n" );
+                       $this->output( "...column '$table.$field' already exists\n" );
                        return;
                } else {
                        $this->output( "Adding column '$table.$field'\n" );
@@ -425,12 +431,12 @@ END;
        protected function changeField( $table, $field, $newtype, $default ) {
                $fi = $this->db->fieldInfo( $table, $field );
                if ( is_null( $fi ) ) {
-                       $this->output( "... error: expected column $table.$field to exist\n" );
+                       $this->output( "...ERROR: expected column $table.$field to exist\n" );
                        exit( 1 );
                }
 
                if ( $fi->type() === $newtype )
-                       $this->output( "... column '$table.$field' is already of type '$newtype'\n" );
+                       $this->output( "...column '$table.$field' is already of type '$newtype'\n" );
                else {
                        $this->output( "Changing column type of '$table.$field' from '{$fi->type()}' to '$newtype'\n" );
                        $sql = "ALTER TABLE $table ALTER $field TYPE $newtype";
@@ -452,7 +458,7 @@ END;
        protected function changeNullableField( $table, $field, $null ) {
                $fi = $this->db->fieldInfo( $table, $field );
                if ( is_null( $fi ) ) {
-                       $this->output( "... error: expected column $table.$field to exist\n" );
+                       $this->output( "...ERROR: expected column $table.$field to exist\n" );
                        exit( 1 );
                }
                if ( $fi->isNullable() ) {
@@ -461,7 +467,7 @@ END;
                                $this->output( "Changing '$table.$field' to not allow NULLs\n" );
                                $this->db->query( "ALTER TABLE $table ALTER $field SET NOT NULL" );
                        } else {
-                               $this->output( "... column '$table.$field' is already set as NULL\n" );
+                               $this->output( "...column '$table.$field' is already set as NULL\n" );
                        }
                } else {
                        # # It's NOT NULL - does it need to be NULL?
@@ -470,14 +476,14 @@ END;
                                $this->db->query( "ALTER TABLE $table ALTER $field DROP NOT NULL" );
                        }
                        else {
-                               $this->output( "... column '$table.$field' is already set as NOT NULL\n" );
+                               $this->output( "...column '$table.$field' is already set as NOT NULL\n" );
                        }
                }
        }
 
        public function addPgIndex( $table, $index, $type ) {
                if ( $this->db->indexExists( $table, $index ) ) {
-                       $this->output( "... index '$index' on table '$table' already exists\n" );
+                       $this->output( "...index '$index' on table '$table' already exists\n" );
                } else {
                        $this->output( "Creating index '$index' on table '$table' $type\n" );
                        $this->db->query( "CREATE INDEX $index ON $table $type" );
@@ -486,7 +492,7 @@ END;
 
        public function addPgExtIndex( $table, $index, $type ) {
                if ( $this->db->indexExists( $table, $index ) ) {
-                       $this->output( "... index '$index' on table '$table' already exists\n" );
+                       $this->output( "...index '$index' on table '$table' already exists\n" );
                } else {
                        $this->output( "Creating index '$index' on table '$table'\n" );
                        if ( preg_match( '/^\(/', $type ) ) {
@@ -508,9 +514,15 @@ END;
                }
                $this->output( "Altering column '$table.$field' to be DEFERRABLE INITIALLY DEFERRED\n" );
                $conname = $fi->conname();
-               $command = "ALTER TABLE $table DROP CONSTRAINT $conname";
-               $this->db->query( $command );
-               $command = "ALTER TABLE $table ADD CONSTRAINT $conname FOREIGN KEY ($field) REFERENCES $clause DEFERRABLE INITIALLY DEFERRED";
+               if ( $fi->conname() ) {
+                       $conclause = "CONSTRAINT \"$conname\"";
+                       $command = "ALTER TABLE $table DROP CONSTRAINT $conname";
+                       $this->db->query( $command );
+               } else {
+                       $this->output( "Column '$table.$field' does not have a foreign key constraint, will be added\n" );
+                       $conclause = "";
+               }
+               $command = "ALTER TABLE $table ADD $conclause FOREIGN KEY ($field) REFERENCES $clause DEFERRABLE INITIALLY DEFERRED";
                $this->db->query( $command );
        }
 
@@ -527,7 +539,7 @@ END;
                        }
                        $this->applyPatch( 'patch-remove-archive2.sql' );
                } else {
-                       $this->output( "... obsolete table 'archive2' does not exist\n" );
+                       $this->output( "...obsolete table 'archive2' does not exist\n" );
                }
        }
 
@@ -538,13 +550,13 @@ END;
                        $this->db->query( "ALTER TABLE oldimage ALTER oi_deleted TYPE SMALLINT USING (oi_deleted::smallint)" );
                        $this->db->query( "ALTER TABLE oldimage ALTER oi_deleted SET DEFAULT 0" );
                } else {
-                       $this->output( "... column 'oldimage.oi_deleted' is already of type 'smallint'\n" );
+                       $this->output( "...column 'oldimage.oi_deleted' is already of type 'smallint'\n" );
                }
        }
 
        protected function checkOiNameConstraint() {
                if ( $this->db->hasConstraint( "oldimage_oi_name_fkey_cascaded" ) ) {
-                       $this->output( "... table 'oldimage' has correct cascading delete/update foreign key to image\n" );
+                       $this->output( "...table 'oldimage' has correct cascading delete/update foreign key to image\n" );
                } else {
                        if ( $this->db->hasConstraint( "oldimage_oi_name_fkey" ) ) {
                                $this->db->query( "ALTER TABLE oldimage DROP CONSTRAINT oldimage_oi_name_fkey" );
@@ -563,7 +575,7 @@ END;
                        $this->output( "Adding function and trigger 'page_deleted' to table 'page'\n" );
                        $this->applyPatch( 'patch-page_deleted.sql' );
                } else {
-                       $this->output( "... table 'page' has 'page_deleted' trigger\n" );
+                       $this->output( "...table 'page' has 'page_deleted' trigger\n" );
                }
        }
 
@@ -573,7 +585,7 @@ END;
                        $this->output( "Removing NOT NULL constraint from 'recentchanges.rc_cur_id'\n" );
                        $this->applyPatch( 'patch-rc_cur_id-not-null.sql' );
                } else {
-                       $this->output( "... column 'recentchanges.rc_cur_id' has a NOT NULL constraint\n" );
+                       $this->output( "...column 'recentchanges.rc_cur_id' has a NOT NULL constraint\n" );
                }
        }
 
@@ -584,20 +596,20 @@ END;
                        $this->db->query( 'DROP INDEX pagelink_unique' );
                        $pu = null;
                } else {
-                       $this->output( "... obsolete version of index 'pagelink_unique index' does not exist\n" );
+                       $this->output( "...obsolete version of index 'pagelink_unique index' does not exist\n" );
                }
 
                if ( is_null( $pu ) ) {
                        $this->output( "Creating index 'pagelink_unique index'\n" );
                        $this->db->query( 'CREATE UNIQUE INDEX pagelink_unique ON pagelinks (pl_from,pl_namespace,pl_title)' );
                } else {
-                       $this->output( "... index 'pagelink_unique_index' already exists\n" );
+                       $this->output( "...index 'pagelink_unique_index' already exists\n" );
                }
        }
 
        protected function checkRevUserFkey() {
                if ( $this->fkeyDeltype( 'revision_rev_user_fkey' ) == 'r' ) {
-                       $this->output( "... constraint 'revision_rev_user_fkey' is ON DELETE RESTRICT\n" );
+                       $this->output( "...constraint 'revision_rev_user_fkey' is ON DELETE RESTRICT\n" );
                } else {
                        $this->output( "Changing constraint 'revision_rev_user_fkey' to ON DELETE RESTRICT\n" );
                        $this->applyPatch( 'patch-revision_rev_user_fkey.sql' );
@@ -610,7 +622,7 @@ END;
                        $this->db->query( 'DROP INDEX ipb_address' );
                }
                if ( $this->db->indexExists( 'ipblocks', 'ipb_address_unique' ) ) {
-                       $this->output( "... have ipb_address_unique\n" );
+                       $this->output( "...have ipb_address_unique\n" );
                } else {
                        $this->output( "Adding ipb_address_unique index\n" );
                        $this->applyPatch( 'patch-ipb_address_unique.sql' );
index 5883216..0be0740 100644 (file)
@@ -432,7 +432,7 @@ class ManualLogEntry extends LogEntryBase {
                        'log_user_text' => $this->getPerformer()->getName(),
                        'log_namespace' => $this->getTarget()->getNamespace(),
                        'log_title' => $this->getTarget()->getDBkey(),
-                       'log_page' => $this->getTarget()->getArticleId(),
+                       'log_page' => $this->getTarget()->getArticleID(),
                        'log_comment' => $comment,
                        'log_params' => serialize( (array) $this->getParameters() ),
                );
@@ -458,12 +458,22 @@ class ManualLogEntry extends LogEntryBase {
 
                $logpage = SpecialPage::getTitleFor( 'Log', $this->getType() );
                $user = $this->getPerformer();
+               $ip = "";
+               if ( $user->isAnon() ) {
+                       /*
+                        * "MediaWiki default" and friends may have
+                        * no IP address in their name
+                        */
+                       if ( IP::isIPAddress( $user->getName() ) ) {
+                               $ip = $user->getName();
+                       }
+               }
                $rc = RecentChange::newLogEntry(
                        $this->getTimestamp(),
                        $logpage,
                        $user,
                        $formatter->getPlainActionText(),
-                       $user->isAnon() ? $user->getName() : '',
+                       $ip,
                        $this->getType(),
                        $this->getSubtype(),
                        $this->getTarget(),
@@ -503,6 +513,9 @@ class ManualLogEntry extends LogEntryBase {
                return $this->performer;
        }
 
+       /**
+        * @return Title
+        */
        public function getTarget() {
                return $this->target;
        }
index d3354f5..e463c45 100644 (file)
@@ -662,7 +662,6 @@ class PatrolLogFormatter extends LogFormatter {
 
        protected function getMessageParameters() {
                $params = parent::getMessageParameters();
-               $newParams = array_slice( $params, 0, 3 );
 
                $target = $this->entry->getTarget();
                $oldid = $params[3];
@@ -680,8 +679,8 @@ class PatrolLogFormatter extends LogFormatter {
                        $revlink = htmlspecialchars( $revision );
                }
 
-               $newParams[3] = Message::rawParam( $revlink );
-               return $newParams;
+               $params[3] = Message::rawParam( $revlink );
+               return $params;
        }
 }
 
index 51e2684..88f3484 100644 (file)
@@ -86,7 +86,7 @@ class LogPage {
                        'log_user_text' => $this->doer->getName(),
                        'log_namespace' => $this->target->getNamespace(),
                        'log_title' => $this->target->getDBkey(),
-                       'log_page' => $this->target->getArticleId(),
+                       'log_page' => $this->target->getArticleID(),
                        'log_comment' => $this->comment,
                        'log_params' => $this->params
                );
index f8208f6..4f49f7d 100644 (file)
@@ -344,11 +344,20 @@ class MWMemcached {
                return false;
        }
 
+       /**
+        * @param $key
+        * @param $timeout int
+        * @return bool
+        */
        public function lock( $key, $timeout = 0 ) {
                /* stub */
                return true;
        }
 
+       /**
+        * @param $key
+        * @return bool
+        */
        public function unlock( $key ) {
                /* stub */
                return true;
@@ -471,7 +480,7 @@ class MWMemcached {
                        $this->stats['get_multi'] = 1;
                }
                $sock_keys = array();
-
+               $socks = array();
                foreach ( $keys as $key ) {
                        $sock = $this->get_sock( $key );
                        if ( !is_resource( $sock ) ) {
@@ -485,6 +494,7 @@ class MWMemcached {
                        $sock_keys[$sock][] = $key;
                }
 
+               $gather = array();
                // Send out the requests
                foreach ( $socks as $sock ) {
                        $cmd = 'get';
@@ -579,6 +589,7 @@ class MWMemcached {
                        return array();
                }
 
+               $ret = array();
                while ( true ) {
                        $res = fgets( $sock );
                        $ret[] = $res;
@@ -744,6 +755,9 @@ class MWMemcached {
                $this->_dead_host( $host );
        }
 
+       /**
+        * @param $host
+        */
        function _dead_host( $host ) {
                $parts = explode( ':', $host );
                $ip = $parts[0];
@@ -774,8 +788,8 @@ class MWMemcached {
                }
 
                $hv = is_array( $key ) ? intval( $key[0] ) : $this->_hashfunc( $key );
-
                if ( $this->_buckets === null ) {
+                       $bu = array();
                        foreach ( $this->_servers as $v ) {
                                if ( is_array( $v ) ) {
                                        for( $i = 0; $i < $v[1]; $i++ ) {
@@ -851,7 +865,8 @@ class MWMemcached {
                        $this->stats[$cmd] = 1;
                }
                if ( !$this->_safe_fwrite( $sock, "$cmd $key $amt\r\n" ) ) {
-                       return $this->_dead_sock( $sock );
+                       $this->_dead_sock( $sock );
+                       return null;
                }
 
                $line = fgets( $sock );
@@ -998,7 +1013,8 @@ class MWMemcached {
                        }
                }
                if ( !$this->_safe_fwrite( $sock, "$cmd $key $flags $exp $len\r\n$val\r\n" ) ) {
-                       return $this->_dead_sock( $sock );
+                       $this->_dead_sock( $sock );
+                       return false;
                }
 
                $line = trim( fgets( $sock ) );
@@ -1038,7 +1054,8 @@ class MWMemcached {
                }
 
                if ( !$this->_connect_sock( $sock, $host ) ) {
-                       return $this->_dead_host( $host );
+                       $this->_dead_host( $host );
+                       return null;
                }
 
                // Do not buffer writes
@@ -1049,6 +1066,9 @@ class MWMemcached {
                return $this->_cache_sock[$host];
        }
 
+       /**
+        * @param $str string
+        */
        function _debugprint( $str ) {
                print( $str );
        }
@@ -1080,6 +1100,9 @@ class MWMemcached {
 
        /**
         * Original behaviour
+        * @param $f
+        * @param $buf
+        * @param $len bool
         * @return int
         */
        function _safe_fwrite( $f, $buf, $len = false ) {
@@ -1093,6 +1116,7 @@ class MWMemcached {
 
        /**
         * Flush the read buffer of a stream
+        * @param $f Resource
         */
        function _flush_read_buffer( $f ) {
                if ( !is_resource( $f ) ) {
index 91dab0e..7614bf5 100644 (file)
@@ -141,7 +141,11 @@ class CoreParserFunctions {
        }
 
        static function nse( $parser, $part1 = '' ) {
-               return wfUrlencode( str_replace( ' ', '_', self::ns( $parser, $part1 ) ) );
+               $ret = self::ns( $parser, $part1 );
+               if ( is_string( $ret ) ) {
+                       $ret = wfUrlencode( str_replace( ' ', '_', $ret ) );
+               }
+               return $ret;
        }
 
        /**
@@ -165,17 +169,21 @@ class CoreParserFunctions {
 
                        // Encode as though it's a wiki page, '_' for ' '.
                        case 'url_wiki':
-                               return wfUrlencode( str_replace( ' ', '_', $s ) );
+                               $func = 'wfUrlencode';
+                               $s = str_replace( ' ', '_', $s );
+                               break;
 
                        // Encode for an HTTP Path, '%20' for ' '.
                        case 'url_path':
-                               return rawurlencode( $s );
+                               $func = 'rawurlencode';
+                               break;
 
                        // Encode for HTTP query, '+' for ' '.
                        case 'url_query':
                        default:
-                               return urlencode( $s );
+                               $func = 'urlencode';
                }
+               return $parser->markerSkipCallback( $s, $func );
        }
 
        static function lcfirst( $parser, $s = '' ) {
@@ -195,11 +203,7 @@ class CoreParserFunctions {
         */
        static function lc( $parser, $s = '' ) {
                global $wgContLang;
-               if ( is_callable( array( $parser, 'markerSkipCallback' ) ) ) {
-                       return $parser->markerSkipCallback( $s, array( $wgContLang, 'lc' ) );
-               } else {
-                       return $wgContLang->lc( $s );
-               }
+               return $parser->markerSkipCallback( $s, array( $wgContLang, 'lc' ) );
        }
 
        /**
@@ -209,11 +213,7 @@ class CoreParserFunctions {
         */
        static function uc( $parser, $s = '' ) {
                global $wgContLang;
-               if ( is_callable( array( $parser, 'markerSkipCallback' ) ) ) {
-                       return $parser->markerSkipCallback( $s, array( $wgContLang, 'uc' ) );
-               } else {
-                       return $wgContLang->uc( $s );
-               }
+               return $parser->markerSkipCallback( $s, array( $wgContLang, 'uc' ) );
        }
 
        static function localurl( $parser, $s = '', $arg = null ) { return self::urlFunction( 'getLocalURL', $s, $arg ); }
@@ -253,12 +253,13 @@ class CoreParserFunctions {
         * @param null $raw
         * @return
         */
-       static function formatNum( $parser, $num = '', $raw = null) {
-               if ( self::israw( $raw ) ) {
-                       return $parser->getFunctionLang()->parseFormattedNumber( $num );
+       static function formatnum( $parser, $num = '', $raw = null) {
+               if ( self::isRaw( $raw ) ) {
+                       $func = array( $parser->getFunctionLang(), 'parseFormattedNumber' );
                } else {
-                       return $parser->getFunctionLang()->formatNum( $num );
+                       $func = array( $parser->getFunctionLang(), 'formatNum' );
                }
+               return $parser->markerSkipCallback( $num, $func );
        }
 
        /**
@@ -268,6 +269,7 @@ class CoreParserFunctions {
         * @return
         */
        static function grammar( $parser, $case = '', $word = '' ) {
+               $word = $parser->killMarkers( $word );
                return $parser->getFunctionLang()->convertGrammar( $word, $case );
        }
 
@@ -637,7 +639,8 @@ class CoreParserFunctions {
         * Unicode-safe str_pad with the restriction that $length is forced to be <= 500
         * @return string
         */
-       static function pad( $string, $length, $padding = '0', $direction = STR_PAD_RIGHT ) {
+       static function pad( $parser, $string, $length, $padding = '0', $direction = STR_PAD_RIGHT ) {
+               $padding = $parser->killMarkers( $padding );
                $lengthOfPadding = mb_strlen( $padding );
                if ( $lengthOfPadding == 0 ) return $string;
 
@@ -661,11 +664,11 @@ class CoreParserFunctions {
        }
 
        static function padleft( $parser, $string = '', $length = 0, $padding = '0' ) {
-               return self::pad( $string, $length, $padding, STR_PAD_LEFT );
+               return self::pad( $parser, $string, $length, $padding, STR_PAD_LEFT );
        }
 
        static function padright( $parser, $string = '', $length = 0, $padding = '0' ) {
-               return self::pad( $string, $length, $padding );
+               return self::pad( $parser, $string, $length, $padding );
        }
 
        /**
@@ -674,6 +677,7 @@ class CoreParserFunctions {
         * @return string
         */
        static function anchorencode( $parser, $text ) {
+               $text = $parser->killMarkers( $text );
                return substr( $parser->guessSectionNameFromWikiText( $text ), 1);
        }
 
index 1be509c..99a283d 100644 (file)
@@ -273,8 +273,6 @@ class Parser {
                 * Must not consist of all title characters, or else it will change
                 * the behaviour of <nowiki> in a link.
                 */
-               # $this->mUniqPrefix = "\x07UNIQ" . Parser::getRandomString();
-               # Changed to \x7f to allow XML double-parsing -- TS
                $this->mUniqPrefix = "\x7fUNIQ" . self::getRandomString();
                $this->mStripState = new StripState( $this->mUniqPrefix );
 
@@ -328,6 +326,11 @@ class Parser {
 
                $this->startParse( $title, $options, self::OT_HTML, $clearState );
 
+               # Remove the strip marker tag prefix from the input, if present.
+               if ( $clearState ) {
+                       $text = str_replace( $this->mUniqPrefix, '', $text );
+               }
+
                $oldRevisionId = $this->mRevisionId;
                $oldRevisionObject = $this->mRevisionObject;
                $oldRevisionTimestamp = $this->mRevisionTimestamp;
@@ -558,7 +561,7 @@ class Parser {
         * @return string
         */
        static public function getRandomString() {
-               return dechex( mt_rand( 0, 0x7fffffff ) ) . dechex( mt_rand( 0, 0x7fffffff ) );
+               return wfRandomString( 16 );
        }
 
        /**
@@ -1697,7 +1700,7 @@ class Parser {
 
                $holders = new LinkHolderArray( $this );
 
-               # split the entire text string on occurences of [[
+               # split the entire text string on occurrences of [[
                $a = StringUtils::explode( '[[', ' ' . $s );
                # get the first element (all text up to first [[), and remove the space we added
                $s = $a->current();
@@ -2381,7 +2384,7 @@ class Parser {
        }
 
        /**
-        * Split up a string on ':', ignoring any occurences inside tags
+        * Split up a string on ':', ignoring any occurrences inside tags
         * to prevent illegal overlapping.
         *
         * @param $str String the string to split
@@ -4066,14 +4069,16 @@ class Parser {
                        }
 
                        # The safe header is a version of the header text safe to use for links
-                       # Avoid insertion of weird stuff like <math> by expanding the relevant sections
-                       $safeHeadline = $this->mStripState->unstripBoth( $headline );
 
                        # Remove link placeholders by the link text.
                        #     <!--LINK number-->
                        # turns into
                        #     link text with suffix
-                       $safeHeadline = $this->replaceLinkHoldersText( $safeHeadline );
+                       # Do this before unstrip since link text can contain strip markers
+                       $safeHeadline = $this->replaceLinkHoldersText( $headline );
+
+                       # Avoid insertion of weird stuff like <math> by expanding the relevant sections
+                       $safeHeadline = $this->mStripState->unstripBoth( $safeHeadline );
 
                        # Strip out HTML (first regex removes any tag not allowed)
                        # Allowed tags are <sup> and <sub> (bug 8393), <i> (bug 26375) and <b> (r105284)
@@ -5117,7 +5122,7 @@ class Parser {
                        $params['frame']['title'] = $this->stripAltText( $caption, $holders );
                }
 
-               wfRunHooks( 'ParserMakeImageParams', array( $title, $file, &$params ) );
+               wfRunHooks( 'ParserMakeImageParams', array( $title, $file, &$params, $this ) );
 
                # Linker does the rest
                $time = isset( $options['time'] ) ? $options['time'] : false;
@@ -5643,6 +5648,16 @@ class Parser {
                return $out;
        }
 
+       /**
+        * Remove any strip markers found in the given text.
+        *
+        * @param $text Input string
+        * @return string
+        */
+       function killMarkers( $text ) {
+               return $this->mStripState->killMarkers( $text );
+       }
+
        /**
         * Save the parser state required to convert the given half-parsed text to
         * HTML. "Half-parsed" in this context means the output of
index 54079ac..f129f73 100644 (file)
@@ -479,7 +479,7 @@ class Preprocessor_DOM implements Preprocessor {
                        } elseif ( $found == 'line-end' ) {
                                $piece = $stack->top;
                                // A heading must be open, otherwise \n wouldn't have been in the search list
-                               assert( $piece->open == "\n" );
+                               assert( '$piece->open == "\n"' );
                                $part = $piece->getCurrentPart();
                                // Search back through the input to see if it has a proper close
                                // Do this using the reversed string since the other solutions (end anchor, etc.) are inefficient
index 9453b90..28283c7 100644 (file)
@@ -428,7 +428,7 @@ class Preprocessor_Hash implements Preprocessor {
                        } elseif ( $found == 'line-end' ) {
                                $piece = $stack->top;
                                // A heading must be open, otherwise \n wouldn't have been in the search list
-                               assert( $piece->open == "\n" );
+                               assert( '$piece->open == "\n"' );
                                $part = $piece->getCurrentPart();
                                // Search back through the input to see if it has a proper close
                                // Do this using the reversed string since the other solutions (end anchor, etc.) are inefficient
index f5af015..aedcac2 100644 (file)
@@ -444,7 +444,8 @@ class Preprocessor_HipHop implements Preprocessor {
                        } elseif ( $found === 'line-end' ) {
                                $piece = $stack->getTop();
                                // A heading must be open, otherwise \n wouldn't have been in the search list
-                               assert( $piece->open === "\n" );
+                               assert( $piece->open === "\n" ); // Passing the assert condition directly instead of string, as
+                                                                // HPHP /compiler/ chokes on strings when ASSERT_ACTIVE != 0.
                                $part = $piece->getCurrentPart();
                                // Search back through the input to see if it has a proper close
                                // Do this using the reversed string since the other solutions (end anchor, etc.) are inefficient
index aac2257..7ad80fa 100644 (file)
@@ -181,5 +181,15 @@ class StripState {
                $key = $m[1];
                return "{$this->prefix}{$this->tempMergePrefix}-$key" . Parser::MARKER_SUFFIX;
        }
+
+       /**
+        * Remove any strip markers found in the given text.
+        *
+        * @param $text Input string
+        * @return string
+        */
+       function killMarkers( $text ) {
+               return preg_replace( $this->regex, '', $text );
+       }
 }
 
index b1ed9b6..f884063 100644 (file)
@@ -48,14 +48,7 @@ class Profiler {
                        $this->mProfileID = $params['profileID'];
                }
 
-               // Push an entry for the pre-profile setup time onto the stack
-               $initial = $this->getInitialTime();
-               if ( $initial !== null ) {
-                       $this->mWorkStack[] = array( '-total', 0, $initial, 0 );
-                       $this->mStack[] = array( '-setup', 1, $initial, 0, $this->getTime(), 0 );
-               } else {
-                       $this->profileIn( '-total' );
-               }
+               $this->addInitialStack();
        }
 
        /**
@@ -114,6 +107,20 @@ class Profiler {
                }
        }
 
+       /**
+        * Add the inital item in the stack.
+        */
+       protected function addInitialStack() {
+               // Push an entry for the pre-profile setup time onto the stack
+               $initial = $this->getInitialTime();
+               if ( $initial !== null ) {
+                       $this->mWorkStack[] = array( '-total', 0, $initial, 0 );
+                       $this->mStack[] = array( '-setup', 1, $initial, 0, $this->getTime(), 0 );
+               } else {
+                       $this->profileIn( '-total' );
+               }
+       }
+
        /**
         * Called by wfProfieIn()
         *
@@ -265,28 +272,69 @@ class Profiler {
                return sprintf( "%10s %s %s\n", trim( sprintf( "%7.3f", $delta * 1000.0 ) ), $space, $fname );
        }
 
-       function getTime() {
-               if ( $this->mTimeMetric === 'user' ) {
-                       return $this->getUserTime();
+       /**
+        * Get the initial time of the request, based either on $wgRequestTime or
+        * $wgRUstart. Will return null if not able to find data.
+        *
+        * @param $metric string|false: metric to use, with the following possibilities:
+        *   - user: User CPU time (without system calls)
+        *   - cpu: Total CPU time (user and system calls)
+        *   - wall (or any other string): elapsed time
+        *   - false (default): will fall back to default metric
+        * @return float|null
+        */
+       function getTime( $metric = false ) {
+               if ( $metric === false ) {
+                       $metric = $this->mTimeMetric;
+               }
+
+               if ( $metric === 'cpu' || $this->mTimeMetric === 'user' ) {
+                       if ( !function_exists( 'getrusage' ) ) {
+                               return 0;
+                       }
+                       $ru = getrusage();
+                       $time = $ru['ru_utime.tv_sec'] + $ru['ru_utime.tv_usec'] / 1e6;
+                       if ( $metric === 'cpu' ) {
+                               # This is the time of system calls, added to the user time
+                               # it gives the total CPU time
+                               $time += $ru['ru_stime.tv_sec'] + $ru['ru_stime.tv_usec'] / 1e6;
+                       }
+                       return $time;
                } else {
                        return microtime( true );
                }
        }
 
-       function getUserTime() {
-               $ru = getrusage();
-               return $ru['ru_utime.tv_sec'] + $ru['ru_utime.tv_usec'] / 1e6;
-       }
-
-       private function getInitialTime() {
+       /**
+        * Get the initial time of the request, based either on $wgRequestTime or
+        * $wgRUstart. Will return null if not able to find data.
+        *
+        * @param $metric string|false: metric to use, with the following possibilities:
+        *   - user: User CPU time (without system calls)
+        *   - cpu: Total CPU time (user and system calls)
+        *   - wall (or any other string): elapsed time
+        *   - false (default): will fall back to default metric
+        * @return float|null
+        */
+       protected function getInitialTime( $metric = false ) {
                global $wgRequestTime, $wgRUstart;
 
-               if ( $this->mTimeMetric === 'user' ) {
-                       if ( count( $wgRUstart ) ) {
-                               return $wgRUstart['ru_utime.tv_sec'] + $wgRUstart['ru_utime.tv_usec'] / 1e6;
-                       } else {
+               if ( $metric === false ) {
+                       $metric = $this->mTimeMetric;
+               }
+
+               if ( $metric === 'cpu' || $this->mTimeMetric === 'user' ) {
+                       if ( !count( $wgRUstart ) ) {
                                return null;
                        }
+
+                       $time = $wgRUstart['ru_utime.tv_sec'] + $wgRUstart['ru_utime.tv_usec'] / 1e6;
+                       if ( $metric === 'cpu' ) {
+                               # This is the time of system calls, added to the user time
+                               # it gives the total CPU time
+                               $time += $wgRUstart['ru_stime.tv_sec'] + $wgRUstart['ru_stime.tv_usec'] / 1e6;
+                       }
+                       return $time;
                } else {
                        if ( empty( $wgRequestTime ) ) {
                                return null;
index 055a0ea..1091495 100644 (file)
@@ -15,32 +15,19 @@ class ProfilerSimple extends Profiler {
        var $zeroEntry = array('cpu'=> 0.0, 'cpu_sq' => 0.0, 'real' => 0.0, 'real_sq' => 0.0, 'count' => 0);
        var $errorEntry;
 
-       function __construct( $params ) {
-               global $wgRequestTime, $wgRUstart;
-               parent::__construct( $params );
-
+       protected function addInitialStack() {
                $this->errorEntry = $this->zeroEntry;
                $this->errorEntry['count'] = 1;
 
-               if (!empty($wgRequestTime) && !empty($wgRUstart)) {
-                       # Remove the -total entry from parent::__construct
-                       $this->mWorkStack = array();
-
-                       $this->mWorkStack[] = array( '-total', 0, $wgRequestTime,$this->getCpuTime($wgRUstart));
+               $initialTime = $this->getInitialTime();
+               $initialCpu = $this->getInitialTime( 'cpu' );
+               if ( $initialTime !== null && $initialCpu !== null ) {
+                       $this->mWorkStack[] = array( '-total', 0, $initialTime, $initialCpu );
+                       $this->mWorkStack[] = array( '-setup', 1, $initialTime, $initialCpu );
 
-                       $elapsedcpu = $this->getCpuTime() - $this->getCpuTime($wgRUstart);
-                       $elapsedreal = microtime(true) - $wgRequestTime;
-
-                       $entry =& $this->mCollated["-setup"];
-                       if (!is_array($entry)) {
-                               $entry = $this->zeroEntry;
-                               $this->mCollated["-setup"] =& $entry;
-                       }
-                       $entry['cpu'] += $elapsedcpu;
-                       $entry['cpu_sq'] += $elapsedcpu*$elapsedcpu;
-                       $entry['real'] += $elapsedreal;
-                       $entry['real_sq'] += $elapsedreal*$elapsedreal;
-                       $entry['count']++;
+                       $this->profileOut( '-setup' );
+               } else {
+                       $this->profileIn( '-total' );
                }
        }
 
@@ -53,7 +40,7 @@ class ProfilerSimple extends Profiler {
                if ($wgDebugFunctionEntry) {
                        $this->debug(str_repeat(' ', count($this->mWorkStack)).'Entering '.$functionname."\n");
                }
-               $this->mWorkStack[] = array($functionname, count( $this->mWorkStack ), microtime(true), $this->getCpuTime());
+               $this->mWorkStack[] = array( $functionname, count( $this->mWorkStack ), $this->getTime(), $this->getTime( 'cpu' ) );
        }
 
        function profileOut($functionname) {
@@ -80,8 +67,8 @@ class ProfilerSimple extends Profiler {
                                $this->mCollated[$message] = $this->errorEntry;
                        }
                        $entry =& $this->mCollated[$functionname];
-                       $elapsedcpu = $this->getCpuTime() - $octime;
-                       $elapsedreal = microtime(true) - $ortime;
+                       $elapsedcpu = $this->getTime( 'cpu' ) - $octime;
+                       $elapsedreal = $this->getTime() - $ortime;
                        if (!is_array($entry)) {
                                $entry = $this->zeroEntry;
                                $this->mCollated[$functionname] =& $entry;
@@ -104,15 +91,20 @@ class ProfilerSimple extends Profiler {
                /* Implement in subclasses */
        }
 
-       function getCpuTime($ru=null) {
-               if ( function_exists( 'getrusage' ) ) {
-                       if ( $ru == null ) {
-                               $ru = getrusage();
-                       }
-                       return ($ru['ru_utime.tv_sec'] + $ru['ru_stime.tv_sec'] + ($ru['ru_utime.tv_usec'] +
-                               $ru['ru_stime.tv_usec']) * 1e-6);
+       /**
+        * Get the actual CPU time or the initial one if $ru is set.
+        *
+        * @deprecated in 1.20
+        * @return float|null
+        */
+       function getCpuTime( $ru = null ) {
+               wfDeprecated( __METHOD__, '1.20' );
+
+               if ( $ru === null ) {
+                       return $this->getTime( 'cpu' );
                } else {
-                       return 0;
+                       # It theory we should use $ru here, but it always $wgRUstart that is passed here
+                       return $this->getInitialTime( 'cpu' );
                }
        }
 }
index 784609f..57fbb6f 100644 (file)
@@ -13,17 +13,17 @@ class ProfilerSimpleTrace extends ProfilerSimple {
        var $trace = "";
        var $memory = 0;
 
-       function __construct( $params ) {
-               global $wgRequestTime, $wgRUstart;
-               parent::__construct( $params );
-               if ( !empty( $wgRequestTime ) && !empty( $wgRUstart ) ) {
-                       $this->mWorkStack[] = array( '-total', 0, $wgRequestTime, $this->getCpuTime( $wgRUstart ) );
+       function addInitialStack() {
+               $initialTime = $this->getInitialTime();
+               $initialCpu = $this->getInitialTime( 'cpu' );
+               if ( $initialTime !== null && $initialCpu !== null ) {
+                       $this->mWorkStack[] = array( '-total', 0, $initialTime, $initialCpu );
                }
                $this->trace .= "Beginning trace: \n";
        }
 
        function profileIn($functionname) {
-               $this->mWorkStack[] = array($functionname, count( $this->mWorkStack ), microtime(true), $this->getCpuTime());
+               $this->mWorkStack[] = array( $functionname, count( $this->mWorkStack ), $this->getTime(), $this->getTime( 'cpu' ) );
                $this->trace .= "         " . sprintf("%6.1f",$this->memoryDiff()) .
                                str_repeat( " ", count($this->mWorkStack)) . " > " . $functionname . "\n";
        }
@@ -48,7 +48,7 @@ class ProfilerSimpleTrace extends ProfilerSimple {
                        elseif ( $ofname != $functionname ) {
                                $this->trace .= "Profiling error: in({$ofname}), out($functionname)";
                        }
-                       $elapsedreal = microtime( true ) - $ortime;
+                       $elapsedreal = $this->getTime() - $ortime;
                        $this->trace .= sprintf( "%03.6f %6.1f", $elapsedreal, $this->memoryDiff() ) .
                                        str_repeat(" ", count( $this->mWorkStack ) + 1 ) . " < " . $functionname . "\n";
                }
index ffb418a..7a036b8 100644 (file)
@@ -173,7 +173,7 @@ class ResourceLoader {
                        $cache->set( $key, $result );
                } catch ( Exception $exception ) {
                        // Return exception as a comment
-                       $result = "/*\n{$exception->__toString()}\n*/\n";
+                       $result = $this->makeComment( $exception->__toString() );
                }
 
                wfProfileOut( __METHOD__ );
@@ -431,13 +431,20 @@ class ResourceLoader {
                ob_start();
 
                wfProfileIn( __METHOD__ );
-               $exceptions = '';
+               $errors = '';
 
                // Split requested modules into two groups, modules and missing
                $modules = array();
                $missing = array();
                foreach ( $context->getModules() as $name ) {
                        if ( isset( $this->moduleInfos[$name] ) ) {
+                               $module = $this->getModule( $name );
+                               // Do not allow private modules to be loaded from the web.
+                               // This is a security issue, see bug 34907.
+                               if ( $module->getGroup() === 'private' ) {
+                                       $errors .= $this->makeComment( "Cannot show private module \"$name\"" );
+                                       continue;
+                               }
                                $modules[$name] = $this->getModule( $name );
                        } else {
                                $missing[] = $name;
@@ -449,12 +456,11 @@ class ResourceLoader {
                        $this->preloadModuleInfo( array_keys( $modules ), $context );
                } catch( Exception $e ) {
                        // Add exception to the output as a comment
-                       $exceptions .= "/*\n{$e->__toString()}\n*/\n";
+                       $errors .= $this->makeComment( $e->__toString() );
                }
 
                wfProfileIn( __METHOD__.'-getModifiedTime' );
 
-               $private = false;
                // To send Last-Modified and support If-Modified-Since, we need to detect
                // the last modified time
                $mtime = wfTimestamp( TS_UNIX, $wgCacheEpoch );
@@ -463,22 +469,18 @@ class ResourceLoader {
                         * @var $module ResourceLoaderModule
                         */
                        try {
-                               // Bypass Squid and other shared caches if the request includes any private modules
-                               if ( $module->getGroup() === 'private' ) {
-                                       $private = true;
-                               }
                                // Calculate maximum modified time
                                $mtime = max( $mtime, $module->getModifiedTime( $context ) );
                        } catch ( Exception $e ) {
                                // Add exception to the output as a comment
-                               $exceptions .= "/*\n{$e->__toString()}\n*/\n";
+                               $errors .= $this->makeComment( $e->__toString() );
                        }
                }
 
                wfProfileOut( __METHOD__.'-getModifiedTime' );
 
                // Send content type and cache related headers
-               $this->sendResponseHeaders( $context, $mtime, $private );
+               $this->sendResponseHeaders( $context, $mtime );
 
                // If there's an If-Modified-Since header, respond with a 304 appropriately
                if ( $this->tryRespondLastModified( $context, $mtime ) ) {
@@ -490,20 +492,20 @@ class ResourceLoader {
                $response = $this->makeModuleResponse( $context, $modules, $missing );
 
                // Prepend comments indicating exceptions
-               $response = $exceptions . $response;
+               $response = $errors . $response;
 
                // Capture any PHP warnings from the output buffer and append them to the
                // response in a comment if we're in debug mode.
                if ( $context->getDebug() && strlen( $warnings = ob_get_contents() ) ) {
-                       $response = "/*\n$warnings\n*/\n" . $response;
+                       $response = $this->makeComment( $warnings ) . $response;
                }
 
                // Remove the output buffer and output the response
                ob_end_clean();
                echo $response;
 
-               // Save response to file cache unless there are private modules or errors
-               if ( isset( $fileCache ) && !$private && !$exceptions && !$missing ) {
+               // Save response to file cache unless there are errors
+               if ( isset( $fileCache ) && !$errors && !$missing ) {
                        // Cache single modules...and other requests if there are enough hits
                        if ( ResourceFileCache::useFileCache( $context ) ) {
                                if ( $fileCache->isCacheWorthy() ) {
@@ -521,10 +523,9 @@ class ResourceLoader {
         * Send content type and last modified headers to the client.
         * @param $context ResourceLoaderContext
         * @param $mtime string TS_MW timestamp to use for last-modified
-        * @param $private bool True iff response contains any private modules
         * @return void
         */
-       protected function sendResponseHeaders( ResourceLoaderContext $context, $mtime, $private ) {
+       protected function sendResponseHeaders( ResourceLoaderContext $context, $mtime ) {
                global $wgResourceLoaderMaxage;
                // If a version wasn't specified we need a shorter expiry time for updates
                // to propagate to clients quickly
@@ -548,13 +549,8 @@ class ResourceLoader {
                        header( 'Cache-Control: private, no-cache, must-revalidate' );
                        header( 'Pragma: no-cache' );
                } else {
-                       if ( $private ) {
-                               header( "Cache-Control: private, max-age=$maxage" );
-                               $exp = $maxage;
-                       } else {
-                               header( "Cache-Control: public, max-age=$maxage, s-maxage=$smaxage" );
-                               $exp = min( $maxage, $smaxage );
-                       }
+                       header( "Cache-Control: public, max-age=$maxage, s-maxage=$smaxage" );
+                       $exp = min( $maxage, $smaxage );
                        header( 'Expires: ' . wfTimestamp( TS_RFC2822, $exp + time() ) );
                }
        }
@@ -651,6 +647,11 @@ class ResourceLoader {
                return false; // cache miss
        }
 
+       protected function makeComment( $text ) {
+               $encText = str_replace( '*/', '* /', $text );
+               return "/*\n$encText\n*/\n";
+       }
+
        /**
         * Generates code for a response
         *
@@ -675,7 +676,7 @@ class ResourceLoader {
                                $blobs = MessageBlobStore::get( $this, $modules, $context->getLanguage() );
                        } catch ( Exception $e ) {
                                // Add exception to the output as a comment
-                               $exceptions .= "/*\n{$e->__toString()}\n*/\n";
+                               $exceptions .= $this->makeComment( $e->__toString() );
                        }
                } else {
                        $blobs = array();
@@ -754,7 +755,7 @@ class ResourceLoader {
                                }
                        } catch ( Exception $e ) {
                                // Add exception to the output as a comment
-                               $exceptions .= "/*\n{$e->__toString()}\n*/\n";
+                               $exceptions .= $this->makeComment( $e->__toString() );
 
                                // Register module as missing
                                $missing[] = $name;
index 80b767b..ccfc378 100644 (file)
@@ -44,30 +44,7 @@ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
                }
 
                global $wgUser;
-
-               if ( $context->getUser() === $wgUser->getName() ) {
-                       return $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $wgUser->getTouched() );
-               } else {
-                       return 1;
-               }
-       }
-
-       /**
-        * Fetch the context's user options, or if it doesn't match current user,
-        * the default options.
-        *
-        * @param $context ResourceLoaderContext: Context object
-        * @return Array: List of user options keyed by option name
-        */
-       protected function contextUserOptions( ResourceLoaderContext $context ) {
-               global $wgUser;
-
-               // Verify identity -- this is a private module
-               if ( $context->getUser() === $wgUser->getName() ) {
-                       return $wgUser->getOptions();
-               } else {
-                       return User::getDefaultOptions();
-               }
+               return $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $wgUser->getTouched() );
        }
        
        /**
@@ -75,10 +52,10 @@ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
         * @return array
         */
        public function getStyles( ResourceLoaderContext $context ) {
-               global $wgAllowUserCssPrefs;
+               global $wgAllowUserCssPrefs, $wgUser;
 
                if ( $wgAllowUserCssPrefs ) {
-                       $options = $this->contextUserOptions( $context );
+                       $options = $wgUser->getOptions();
 
                        // Build CSS rules
                        $rules = array();
index 96b791e..933c55e 100644 (file)
@@ -44,30 +44,7 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
                }
 
                global $wgUser;
-
-               if ( $context->getUser() === $wgUser->getName() ) {
-                       return $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $wgUser->getTouched() );
-               } else {
-                       return 1;
-               }
-       }
-
-       /**
-        * Fetch the context's user options, or if it doesn't match current user,
-        * the default options.
-        *
-        * @param $context ResourceLoaderContext: Context object
-        * @return Array: List of user options keyed by option name
-        */
-       protected function contextUserOptions( ResourceLoaderContext $context ) {
-               global $wgUser;
-
-               // Verify identity -- this is a private module
-               if ( $context->getUser() === $wgUser->getName() ) {
-                       return $wgUser->getOptions();
-               } else {
-                       return User::getDefaultOptions();
-               }
+               return $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $wgUser->getTouched() );
        }
 
        /**
@@ -75,8 +52,9 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
         * @return string
         */
        public function getScript( ResourceLoaderContext $context ) {
+               global $wgUser;
                return Xml::encodeJsCall( 'mw.user.options.set',
-                       array( $this->contextUserOptions( $context ) ) );
+                       array( $wgUser->getOptions() ) );
        }
 
        /**
index 072aef1..9ca98e5 100644 (file)
@@ -300,7 +300,7 @@ class RevDel_ArchiveItem extends RevDel_RevisionItem {
        public function __construct( $list, $row ) {
                RevDel_Item::__construct( $list, $row );
                $this->revision = Revision::newFromArchiveRow( $row,
-                       array( 'page' => $this->list->title->getArticleId() ) );
+                       array( 'page' => $this->list->title->getArticleID() ) );
        }
 
        public function getIdField() {
@@ -377,7 +377,7 @@ class RevDel_ArchivedRevisionItem extends RevDel_ArchiveItem {
                RevDel_Item::__construct( $list, $row );
 
                $this->revision = Revision::newFromArchiveRow( $row,
-                       array( 'page' => $this->list->title->getArticleId() ) );
+                       array( 'page' => $this->list->title->getArticleID() ) );
        }
 
        public function getIdField() {
index fe424ef..0e965c8 100644 (file)
@@ -34,10 +34,10 @@ class RevisionDeleteUser {
         * @return bool
         */
        private static function setUsernameBitfields( $name, $userId, $op, $dbw ) {
-               if( $op !== '|' && $op !== '&' ){
+               if ( !$userId || ( $op !== '|' && $op !== '&' ) ) {
                        return false; // sanity check
                }
-               if( !$dbw instanceof DatabaseBase ){
+               if ( !$dbw instanceof DatabaseBase ) {
                        $dbw = wfGetDB( DB_MASTER );
                }
 
index 619f23d..bf30dc8 100644 (file)
@@ -30,24 +30,37 @@ class SpecialAllpages extends IncludableSpecialPage {
 
        /**
         * Maximum number of pages to show on single subpage.
+        *
+        * @var int $maxPerPage
         */
        protected $maxPerPage = 345;
 
        /**
         * Maximum number of pages to show on single index subpage.
+        *
+        * @var int $maxLineCount
         */
        protected $maxLineCount = 100;
 
        /**
         * Maximum number of chars to show for an entry.
+        *
+        * @var int $maxPageLength
         */
        protected $maxPageLength = 70;
 
        /**
         * Determines, which message describes the input field 'nsfrom'.
+        *
+        * @var string $nsfromMsg
         */
        protected $nsfromMsg = 'allpagesfrom';
 
+       /**
+        * Constructor
+        *
+        * @param $name string: name of the special page, as seen in links and URLs (default: 'Allpages')
+        */
        function __construct( $name = 'Allpages' ){
                parent::__construct( $name );
        }
@@ -70,6 +83,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                $from = $request->getVal( 'from', null );
                $to = $request->getVal( 'to', null );
                $namespace = $request->getInt( 'namespace' );
+               $hideredirects = $request->getBool( 'hideredirects', false );
 
                $namespaces = $wgContLang->getNamespaces();
 
@@ -81,11 +95,11 @@ class SpecialAllpages extends IncludableSpecialPage {
                $out->addModuleStyles( 'mediawiki.special' );
 
                if( $par !== null ) {
-                       $this->showChunk( $namespace, $par, $to );
+                       $this->showChunk( $namespace, $par, $to, $hideredirects );
                } elseif( $from !== null && $to === null ) {
-                       $this->showChunk( $namespace, $from, $to );
+                       $this->showChunk( $namespace, $from, $to, $hideredirects );
                } else {
-                       $this->showToplevel( $namespace, $from, $to );
+                       $this->showToplevel( $namespace, $from, $to, $hideredirects );
                }
        }
 
@@ -95,9 +109,10 @@ class SpecialAllpages extends IncludableSpecialPage {
         * @param $namespace Integer: a namespace constant (default NS_MAIN).
         * @param $from String: dbKey we are starting listing at.
         * @param $to String: dbKey we are ending listing at.
+        * @param $hideredirects Bool: dont show redirects  (default FALSE)
         * @return string
         */
-       function namespaceForm( $namespace = NS_MAIN, $from = '', $to = '' ) {
+       function namespaceForm( $namespace = NS_MAIN, $from = '', $to = '', $hideredirects = false ) {
                global $wgScript;
                $t = $this->getTitle();
 
@@ -132,6 +147,12 @@ class SpecialAllpages extends IncludableSpecialPage {
                                array( 'selected' => $namespace ),
                                array( 'name' => 'namespace', 'id' => 'namespace' )
                        ) . ' ' .
+                       Xml::checkLabel(
+                               wfMsg( 'allpages-hide-redirects' ),
+                               'hideredirects',
+                               'hideredirects',
+                               $hideredirects
+                       ) . ' ' .
                        Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) .
                        "       </td>
 </tr>";
@@ -146,8 +167,9 @@ class SpecialAllpages extends IncludableSpecialPage {
         * @param $namespace Integer (default NS_MAIN)
         * @param $from String: list all pages from this name
         * @param $to String: list all pages to this name
+        * @param $hideredirects Bool: dont show redirects (default FALSE)
         */
-       function showToplevel( $namespace = NS_MAIN, $from = '', $to = '' ) {
+       function showToplevel( $namespace = NS_MAIN, $from = '', $to = '', $hideredirects = false ) {
                $output = $this->getOutput();
 
                # TODO: Either make this *much* faster or cache the title index points
@@ -157,6 +179,10 @@ class SpecialAllpages extends IncludableSpecialPage {
                $out = "";
                $where = array( 'page_namespace' => $namespace );
 
+               if ( $hideredirects ) {
+                       $where[ 'page_is_redirect' ] = 0;
+               }
+
                $from = Title::makeTitleSafe( $namespace, $from );
                $to = Title::makeTitleSafe( $namespace, $to );
                $from = ( $from && $from->isLocal() ) ? $from->getDBkey() : null;
@@ -225,9 +251,9 @@ class SpecialAllpages extends IncludableSpecialPage {
                // Instead, display the first section directly.
                if( count( $lines ) <= 2 ) {
                        if( !empty($lines) ) {
-                               $this->showChunk( $namespace, $from, $to );
+                               $this->showChunk( $namespace, $from, $to, $hideredirects );
                        } else {
-                               $output->addHTML( $this->namespaceForm( $namespace, $from, $to ) );
+                               $output->addHTML( $this->namespaceForm( $namespace, $from, $to, $hideredirects ) );
                        }
                        return;
                }
@@ -237,10 +263,10 @@ class SpecialAllpages extends IncludableSpecialPage {
                while( count ( $lines ) > 0 ) {
                        $inpoint = array_shift( $lines );
                        $outpoint = array_shift( $lines );
-                       $out .= $this->showline( $inpoint, $outpoint, $namespace );
+                       $out .= $this->showline( $inpoint, $outpoint, $namespace, $hideredirects );
                }
                $out .= Xml::closeElement( 'table' );
-               $nsForm = $this->namespaceForm( $namespace, $from, $to );
+               $nsForm = $this->namespaceForm( $namespace, $from, $to, $hideredirects );
 
                # Is there more?
                if( $this->including() ) {
@@ -271,9 +297,10 @@ class SpecialAllpages extends IncludableSpecialPage {
         * @param $inpoint String: lower limit of pagenames
         * @param $outpoint String: upper limit of pagenames
         * @param $namespace Integer (Default NS_MAIN)
+        * @param $hideredirects Bool: dont show redirects (default FALSE)
         * @return string
         */
-       function showline( $inpoint, $outpoint, $namespace = NS_MAIN ) {
+       function showline( $inpoint, $outpoint, $namespace = NS_MAIN, $hideredirects ) {
                global $wgContLang;
                $inpointf = htmlspecialchars( str_replace( '_', ' ', $inpoint ) );
                $outpointf = htmlspecialchars( str_replace( '_', ' ', $outpoint ) );
@@ -282,8 +309,14 @@ class SpecialAllpages extends IncludableSpecialPage {
                $outpointf = $wgContLang->truncate( $outpointf, $this->maxPageLength );
 
                $queryparams = $namespace ? "namespace=$namespace&" : '';
+
+               $queryhideredirects = array();
+               if ($hideredirects) {
+                       $queryhideredirects[ 'hideredirects' ] = 1;
+               }
+
                $special = $this->getTitle();
-               $link = htmlspecialchars( $special->getLocalUrl( $queryparams . 'from=' . urlencode($inpoint) . '&to=' . urlencode($outpoint) ) );
+               $link = htmlspecialchars( $special->getLocalUrl( $queryparams . 'from=' . urlencode($inpoint) . '&to=' . urlencode($outpoint), $queryhideredirects ) );
 
                $out = $this->msg( 'alphaindexline' )->rawParams(
                        "<a href=\"$link\">$inpointf</a></td><td>",
@@ -296,8 +329,9 @@ class SpecialAllpages extends IncludableSpecialPage {
         * @param $namespace Integer (Default NS_MAIN)
         * @param $from String: list all pages from this name (default FALSE)
         * @param $to String: list all pages to this name (default FALSE)
+        * @param $hideredirects Bool: dont show redirects (default FALSE)
         */
-       function showChunk( $namespace = NS_MAIN, $from = false, $to = false ) {
+       function showChunk( $namespace = NS_MAIN, $from = false, $to = false, $hideredirects = false ) {
                global $wgContLang;
                $output = $this->getOutput();
 
@@ -321,6 +355,11 @@ class SpecialAllpages extends IncludableSpecialPage {
                                'page_namespace' => $namespace,
                                'page_title >= ' . $dbr->addQuotes( $fromKey )
                        );
+
+                       if ( $hideredirects ) {
+                               $conds[ 'page_is_redirect' ] = 0;
+                       }
+
                        if( $toKey !== "" ) {
                                $conds[] = 'page_title <= ' . $dbr->addQuotes( $toKey );
                        }
@@ -408,7 +447,7 @@ class SpecialAllpages extends IncludableSpecialPage {
 
                        $self = $this->getTitle();
 
-                       $nsForm = $this->namespaceForm( $namespace, $from, $to );
+                       $nsForm = $this->namespaceForm( $namespace, $from, $to, $hideredirects );
                        $out2 = Xml::openElement( 'table', array( 'class' => 'mw-allpages-table-form' ) ).
                                                '<tr>
                                                        <td>' .
@@ -424,6 +463,9 @@ class SpecialAllpages extends IncludableSpecialPage {
                                if( $namespace )
                                        $query['namespace'] = $namespace;
 
+                               if( $hideredirects )
+                                       $query['hideredirects'] = $hideredirects;
+
                                $prevLink = Linker::linkKnown(
                                        $self,
                                        $this->msg( 'prevpage', $pt )->escaped(),
@@ -441,6 +483,9 @@ class SpecialAllpages extends IncludableSpecialPage {
                                if( $namespace )
                                        $query['namespace'] = $namespace;
 
+                               if( $hideredirects )
+                                       $query['hideredirects'] = $hideredirects;
+
                                $nextLink = Linker::linkKnown(
                                        $self,
                                        $this->msg( 'nextpage', $t->getText() )->escaped(),
index 5b5b356..a58e62e 100644 (file)
@@ -381,19 +381,19 @@ class SpecialBlock extends FormSpecialPage {
                        $this->getLanguage()->pipeList( $links )
                );
 
-               if( $this->target instanceof User ){
+               $userTitle = self::getTargetUserTitle( $this->target );
+               if( $userTitle ){
                        # Get relevant extracts from the block and suppression logs, if possible
-                       $userpage = $this->target->getUserPage();
                        $out = '';
 
                        LogEventsList::showLogExtract(
                                $out,
                                'block',
-                               $userpage,
+                               $userTitle,
                                '',
                                array(
                                        'lim' => 10,
-                                       'msgKey' => array( 'blocklog-showlog', $userpage->getText() ),
+                                       'msgKey' => array( 'blocklog-showlog', $userTitle->getText() ),
                                        'showIfEmpty' => false
                                )
                        );
@@ -404,12 +404,12 @@ class SpecialBlock extends FormSpecialPage {
                                LogEventsList::showLogExtract(
                                        $out,
                                        'suppress',
-                                       $userpage,
+                                       $userTitle,
                                        '',
                                        array(
                                                'lim' => 10,
                                                'conds' => array( 'log_action' => array( 'block', 'reblock', 'unblock' ) ),
-                                               'msgKey' => array( 'blocklog-showsuppresslog', $userpage->getText() ),
+                                               'msgKey' => array( 'blocklog-showsuppresslog', $userTitle->getText() ),
                                                'showIfEmpty' => false
                                        )
                                );
@@ -421,6 +421,21 @@ class SpecialBlock extends FormSpecialPage {
                return $text;
        }
 
+       /**
+        * Get a user page target for things like logs.
+        * This handles account and IP range targets.
+        * @param $target User|string
+        * @return Title|null
+        */
+       protected static function getTargetUserTitle( $target ) {
+               if( $target instanceof User ) {
+                       return $target->getUserPage();
+               } elseif ( IP::isIPAddress( $target ) ) {
+                       return Title::makeTitleSafe( NS_USER, $target );
+               }
+               return null;
+       }
+
        /**
         * Determine the target of the block, and the type of target
         * TODO: should be in Block.php?
index 501ccee..03dd522 100644 (file)
@@ -71,12 +71,16 @@ class SpecialContributions extends SpecialPage {
                $this->opts['target'] = $target;
                $this->opts['topOnly'] = $request->getBool( 'topOnly' );
 
-               $userObj = User::newFromName( $target, false );
+               $nt = Title::makeTitleSafe( NS_USER, $target );
+               if ( !$nt ) {
+                       $out->addHTML( $this->getForm() );
+                       return;
+               }
+               $userObj = User::newFromName( $nt->getText(), false );
                if ( !$userObj ) {
                        $out->addHTML( $this->getForm() );
                        return;
                }
-               $nt = $userObj->getUserPage();
                $id = $userObj->getID();
 
                if ( $this->opts['contribs'] != 'newbie' ) {
@@ -185,18 +189,20 @@ class SpecialContributions extends SpecialPage {
                        }
                        $out->preventClickjacking( $pager->getPreventClickjacking() );
 
+
                        # Show the appropriate "footer" message - WHOIS tools, etc.
-                       if ( $this->opts['contribs'] != 'newbie' ) {
+                       if ( $this->opts['contribs'] == 'newbie' ) {
+                               $message = 'sp-contributions-footer-newbies';
+                       } elseif( IP::isIPAddress( $target ) ) {
+                               $message = 'sp-contributions-footer-anon';
+                       } elseif( $userObj->isAnon() ) {
+                               // No message for non-existing users
+                               $message = '';
+                       } else {
                                $message = 'sp-contributions-footer';
-                               if ( IP::isIPAddress( $target ) ) {
-                                       $message = 'sp-contributions-footer-anon';
-                               } else {
-                                       if ( $userObj->isAnon() ) {
-                                               // No message for non-existing users
-                                               return;
-                                       }
-                               }
+                       }
 
+                       if( $message ) {
                                if ( !$this->msg( $message, $target )->isDisabled() ) {
                                        $out->wrapWikiMsg(
                                                "<div class='mw-contributions-footer'>\n$1\n</div>",
@@ -220,6 +226,7 @@ class SpecialContributions extends SpecialPage {
                }
                $nt = $userObj->getUserPage();
                $talk = $userObj->getTalkPage();
+               $links = '';
                if ( $talk ) {
                        $tools = $this->getUserLinks( $nt, $talk, $userObj );
                        $links = $this->getLanguage()->pipeList( $tools );
@@ -545,6 +552,11 @@ class ContribsPager extends ReverseChronologicalPager {
        var $namespace = '', $mDb;
        var $preventClickjacking = false;
 
+       /**
+        * @var array
+        */
+       protected $mParentLens;
+
        function __construct( IContextSource $context, array $options ) {
                parent::__construct( $context );
 
@@ -709,6 +721,7 @@ class ContribsPager extends ReverseChronologicalPager {
 
        /**
         * Do a batched query to get the parent revision lengths
+        * @param $revIds array
         * @return array
         */
        private function getParentLengths( array $revIds ) {
@@ -751,6 +764,7 @@ class ContribsPager extends ReverseChronologicalPager {
         * was not written by the target user.
         *
         * @todo This would probably look a lot nicer in a table.
+        * @param $row
         * @return string
         */
        function formatRow( $row ) {
@@ -902,6 +916,9 @@ class ContribsPager extends ReverseChronologicalPager {
                $this->preventClickjacking = true;
        }
 
+       /**
+        * @return bool
+        */
        public function getPreventClickjacking() {
                return $this->preventClickjacking;
        }
index a097d90..64455d4 100644 (file)
@@ -260,6 +260,7 @@ class DeletedContributionsPage extends SpecialPage {
        function execute( $par ) {
                global $wgQueryPageDefaultLimit;
                $this->setHeaders();
+               $this->outputHeader();
 
                $user = $this->getUser();
 
@@ -491,8 +492,17 @@ class DeletedContributionsPage extends SpecialPage {
                                'size' => '20',
                                'required' => ''
                        ) + ( $options['target'] ? array() : array( 'autofocus' ) ) ) . ' '.
-                       Xml::label( $this->msg( 'namespace' )->text(), 'namespace' ) . ' ' .
-                       Xml::namespaceSelector( $options['namespace'], '' ) . ' ' .
+                       Html::namespaceSelector(
+                               array(
+                                       'selected' => $options['namespace'],
+                                       'all' => '',
+                                       'label' => $this->msg( 'namespace' )->text()
+                               ), array(
+                                       'name'  => 'namespace',
+                                       'id'    => 'namespace',
+                                       'class' => 'namespaceselector',
+                               )
+                       ) . ' ' .
                        Xml::submitButton( $this->msg( 'sp-contributions-submit' )->text() ) .
                        Xml::closeElement( 'fieldset' ) .
                        Xml::closeElement( 'form' );
index 3951f06..b00eec8 100644 (file)
@@ -93,6 +93,13 @@ class SpecialExport extends SpecialPage {
                elseif( $request->getCheck( 'exportall' ) && $wgExportAllowAll ) {
                        $this->doExport = true;
                        $exportall = true;
+
+                       /* Although $page and $history are not used later on, we
+                       nevertheless set them to avoid that PHP notices about using
+                       undefined variables foul up our XML output (see call to
+                       doExport(...) further down) */
+                       $page = '';
+                       $history = '';
                }
                elseif( $request->wasPosted() && $par == '' ) {
                        $page = $request->getText( 'pages' );
@@ -185,7 +192,16 @@ class SpecialExport extends SpecialPage {
                $form .= Xml::submitButton( $this->msg( 'export-addcat' )->text(), array( 'name' => 'addcat' ) ) . '<br />';
 
                if ( $wgExportFromNamespaces ) {
-                       $form .= Xml::namespaceSelector( $nsindex, null, 'nsindex', $this->msg( 'export-addnstext' )->text() ) . '&#160;';
+                       $form .= Html::namespaceSelector(
+                               array(
+                                       'selected' => $nsindex,
+                                       'label' => $this->msg( 'export-addnstext' )->text()
+                               ), array(
+                                       'name'  => 'nsindex',
+                                       'id'    => 'namespace',
+                                       'class' => 'namespaceselector',
+                               )
+                       ) . '&#160;';
                        $form .= Xml::submitButton( $this->msg( 'export-addns' )->text(), array( 'name' => 'addns' ) ) . '<br />';
                }
 
index dea2bac..2ea030e 100644 (file)
@@ -279,7 +279,16 @@ class SpecialImport extends SpecialPage {
                                                Xml::label( $this->msg( 'import-interwiki-namespace' )->text(), 'namespace' ) .
                                        "</td>
                                        <td class='mw-input'>" .
-                                               Xml::namespaceSelector( $this->namespace, '' ) .
+                                               Html::namespaceSelector(
+                                                       array(
+                                                               'selected' => $this->namespace,
+                                                               'all' => '',
+                                                       ), array(
+                                                               'name'  => 'namespace',
+                                                               'id'    => 'namespace',
+                                                               'class' => 'namespaceselector',
+                                                       )
+                                               ) .
                                        "</td>
                                </tr>
                                <tr>
@@ -390,7 +399,7 @@ class ImportReporter extends ContextSource {
                        $comment = $detail; // quick
                        $dbw = wfGetDB( DB_MASTER );
                        $latest = $title->getLatestRevID();
-                       $nullRevision = Revision::newNullRevision( $dbw, $title->getArticleId(), $comment, true );
+                       $nullRevision = Revision::newNullRevision( $dbw, $title->getArticleID(), $comment, true );
                        if (!is_null($nullRevision)) {
                                $nullRevision->insertOn( $dbw );
                                $page = WikiPage::factory( $title );
index f28f37d..0628269 100644 (file)
@@ -91,8 +91,17 @@ class LinkSearchPage extends QueryPage {
                        Xml::element( 'legend', array(), $this->msg( 'linksearch' )->text() ) .
                        Xml::inputLabel( $this->msg( 'linksearch-pat' )->text(), 'target', 'target', 50, $target ) . ' ';
                if ( !$wgMiserMode ) {
-                       $s .= Xml::label( $this->msg( 'linksearch-ns' )->text(), 'namespace' ) . ' ' .
-                               Xml::namespaceSelector( $namespace, '' );
+                       $s .= Html::namespaceSelector(
+                               array(
+                                       'selected' => $namespace,
+                                       'all' => '',
+                                       'label' => $this->msg( 'linksearch-ns' )->text()
+                               ), array(
+                                       'name'  => 'namespace',
+                                       'id'    => 'namespace',
+                                       'class' => 'namespaceselector',
+                               )
+                       );
                }
                $s .=   Xml::submitButton( $this->msg( 'linksearch-ok' )->text() ) .
                        '</fieldset>' .
index 0800e43..0c86163 100644 (file)
@@ -34,7 +34,7 @@ class LonelyPagesPage extends PageQueryPage {
        }
 
        function getPageHeader() {
-               return wfMsgExt( 'lonelypagestext', array( 'parse' ) );
+               return $this->msg( 'lonelypagestext' )->parseAsBlock();
        }
 
        function sortDescending() {
index 2213ffa..b193a1c 100644 (file)
@@ -59,17 +59,19 @@ class MIMEsearchPage extends QueryPage {
        }
 
        function execute( $par ) {
+               global $wgScript;
+
                $mime = $par ? $par : $this->getRequest()->getText( 'mime' );
 
                $this->setHeaders();
                $this->outputHeader();
                $this->getOutput()->addHTML(
-                       Xml::openElement( 'form', array( 'id' => 'specialmimesearch', 'method' => 'get', 'action' => SpecialPage::getTitleFor( 'MIMEsearch' )->getLocalUrl() ) ) .
+                       Xml::openElement( 'form', array( 'id' => 'specialmimesearch', 'method' => 'get', 'action' => $wgScript ) ) .
                        Xml::openElement( 'fieldset' ) .
-                       Html::hidden( 'title', SpecialPage::getTitleFor( 'MIMEsearch' )->getPrefixedText() ) .
-                       Xml::element( 'legend', null, wfMsg( 'mimesearch' ) ) .
-                       Xml::inputLabel( wfMsg( 'mimetype' ), 'mime', 'mime', 20, $mime ) . ' ' .
-                       Xml::submitButton( wfMsg( 'ilsubmit' ) ) .
+                       Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
+                       Xml::element( 'legend', null, $this->msg( 'mimesearch' )->text() ) .
+                       Xml::inputLabel( $this->msg( 'mimetype' )->text(), 'mime', 'mime', 20, $mime ) . ' ' .
+                       Xml::submitButton( $this->msg( 'ilsubmit' )->text() ) .
                        Xml::closeElement( 'fieldset' ) .
                        Xml::closeElement( 'form' )
                );
@@ -93,15 +95,13 @@ class MIMEsearchPage extends QueryPage {
                        htmlspecialchars( $text )
                );
 
-               $download = Linker::makeMediaLinkObj( $nt, wfMsgHtml( 'download' ) );
+               $download = Linker::makeMediaLinkObj( $nt, $this->msg( 'download' )->escaped() );
                $lang = $this->getLanguage();
                $bytes = htmlspecialchars( $lang->formatSize( $result->img_size ) );
-               $dimensions = htmlspecialchars( wfMsg( 'widthheight',
-                       $lang->formatNum( $result->img_width ),
-                       $lang->formatNum( $result->img_height )
-               ) );
+               $dimensions = $this->msg( 'widthheight' )->numParams( $result->img_width,
+                       $result->img_height )->escaped();
                $user = Linker::link( Title::makeTitle( NS_USER, $result->img_user_text ), htmlspecialchars( $result->img_user_text ) );
-               $time = htmlspecialchars( $lang->timeanddate( $result->img_timestamp ) );
+               $time = htmlspecialchars( $lang->userTimeAndDate( $result->img_timestamp, $this->getUser() ) );
 
                return "($download) $plink . . $dimensions . . $bytes . . $user . . $time";
        }
index 19650da..fc75b2b 100644 (file)
@@ -296,7 +296,7 @@ class SpecialMergeHistory extends SpecialPage {
                if( is_null( $targetTitle ) || is_null( $destTitle ) ) {
                        return false; // validate these
                }
-               if( $targetTitle->getArticleId() == $destTitle->getArticleId() ) {
+               if( $targetTitle->getArticleID() == $destTitle->getArticleID() ) {
                        return false;
                }
                # Verify that this timestamp is valid
index af49815..393cf7e 100644 (file)
@@ -472,7 +472,8 @@ class MovePageForm extends UnlistedSpecialPage {
                $newText = $nt->getPrefixedText();
 
                $msgName = $createRedirect ? 'movepage-moved-redirect' : 'movepage-moved-noredirect';
-               $out->addHTML( wfMessage( 'movepage-moved' )->rawParams( $oldLink, $newLink, $oldText, $newText )->parseAsBlock() );
+               $out->addHTML( wfMessage( 'movepage-moved' )->rawParams( $oldLink,
+                       $newLink )->params( $oldText, $newText )->parseAsBlock() );
                $out->addWikiMsg( $msgName );
 
                # Now we move extra pages we've been asked to move: subpages and talk
index b88123d..45dbd36 100644 (file)
@@ -123,7 +123,7 @@ class NewFilesPager extends ReverseChronologicalPager {
                $this->gallery->add(
                        $title,
                        "$ul<br />\n<i>"
-                               . htmlspecialchars( $this->getLanguage()->timeanddate( $row->img_timestamp, true ) )
+                               . htmlspecialchars( $this->getLanguage()->userTimeAndDate( $row->img_timestamp, $this->getUser() ) )
                                . "</i><br />\n"
                );
        }
@@ -139,7 +139,7 @@ class NewFilesPager extends ReverseChronologicalPager {
                        ),
                        'showbots' => array(
                                'type' => 'check',
-                               'label' => wfMessage( 'showhidebots', wfMsg( 'show' ) ),
+                               'label' => $this->msg( 'showhidebots', $this->msg( 'show' )->plain() )->escaped(),
                                'name' => 'showbots',
                        #       'default' => $this->getRequest()->getBool( 'showbots', 0 ),
                        ),
@@ -161,9 +161,9 @@ class NewFilesPager extends ReverseChronologicalPager {
 
                $form = new HTMLForm( $fields, $this->getContext() );
                $form->setTitle( $this->getTitle() );
-               $form->setSubmitText( wfMsg( 'ilsubmit' ) );
+               $form->setSubmitTextMsg( 'ilsubmit' );
                $form->setMethod( 'get' );
-               $form->setWrapperLegend( wfMsg( 'newimages-legend' ) );
+               $form->setWrapperLegendMsg( 'newimages-legend' );
 
                return $form;
        }
index 6256b08..3c31ca0 100644 (file)
@@ -237,7 +237,16 @@ class SpecialNewpages extends IncludableSpecialPage {
                                        Xml::label( wfMsg( 'namespace' ), 'namespace' ) .
                                '</td>
                                <td class="mw-input">' .
-                                       Xml::namespaceSelector( $namespace, 'all' ) .
+                                       Html::namespaceSelector(
+                                               array(
+                                                       'selected' => $namespace,
+                                                       'all' => 'all',
+                                               ), array(
+                                                       'name'  => 'namespace',
+                                                       'id'    => 'namespace',
+                                                       'class' => 'namespaceselector',
+                                               )
+                                       ) .
                                '</td>
                        </tr>' . ( $tagFilter ? (
                        '<tr>
index 5e58841..f140546 100644 (file)
@@ -98,7 +98,7 @@ class SpecialPasswordReset extends FormSpecialPage {
        }
 
        public function alterForm( HTMLForm $form ) {
-               $form->setSubmitText( wfMessage( "mailmypassword" ) );
+               $form->setSubmitTextMsg( 'mailmypassword' );
        }
 
        protected function preText() {
@@ -113,7 +113,7 @@ class SpecialPasswordReset extends FormSpecialPage {
                if ( isset( $wgPasswordResetRoutes['domain'] ) && $wgPasswordResetRoutes['domain'] ) {
                        $i++;
                }
-               return wfMessage( 'passwordreset-pretext', $i )->parseAsBlock();
+               return $this->msg( 'passwordreset-pretext', $i )->parseAsBlock();
        }
 
        /**
@@ -229,19 +229,20 @@ class SpecialPasswordReset extends FormSpecialPage {
                        ? 'passwordreset-emailtext-ip'
                        : 'passwordreset-emailtext-user';
 
+               // Send in the user's language; which should hopefully be the same
+               $userLanguage = $firstUser->getOption( 'language' );
+
                $passwords = array();
                foreach ( $users as $user ) {
                        $password = $user->randomPassword();
                        $user->setNewpassword( $password );
                        $user->saveSettings();
-                       $passwords[] = wfMessage( 'passwordreset-emailelement', $user->getName(), $password )->plain(); // We'll escape the whole thing later
+                       $passwords[] = $this->msg( 'passwordreset-emailelement', $user->getName(), $password
+                               )->inLanguage( $userLanguage )->plain(); // We'll escape the whole thing later
                }
                $passwordBlock = implode( "\n\n", $passwords );
 
-               // Send in the user's language; which should hopefully be the same
-               $userLanguage = $firstUser->getOption( 'language' );
-
-               $this->email = wfMessage( $msg )->inLanguage( $userLanguage );
+               $this->email = $this->msg( $msg )->inLanguage( $userLanguage );
                $this->email->params(
                        $username,
                        $passwordBlock,
@@ -250,7 +251,7 @@ class SpecialPasswordReset extends FormSpecialPage {
                        round( $wgNewPasswordExpiry / 86400 )
                );
 
-               $title = wfMessage( 'passwordreset-emailtitle' );
+               $title = $this->msg( 'passwordreset-emailtitle' );
 
                $this->result = $firstUser->sendMail( $title->escaped(), $this->email->escaped() );
 
index 946112b..b69354c 100644 (file)
@@ -69,7 +69,7 @@ class SpecialPreferences extends SpecialPage {
 
                $htmlForm = new HTMLForm( array(), $this->getContext(), 'prefs-restore' );
 
-               $htmlForm->setSubmitText( wfMsg( 'restoreprefs' ) );
+               $htmlForm->setSubmitTextMsg( 'restoreprefs' );
                $htmlForm->setTitle( $this->getTitle( 'reset' ) );
                $htmlForm->setSubmitCallback( array( $this, 'submitReset' ) );
                $htmlForm->suppressReset();
@@ -82,7 +82,7 @@ class SpecialPreferences extends SpecialPage {
                $user->resetOptions();
                $user->saveSettings();
 
-               $url = SpecialPage::getTitleFor( 'Preferences' )->getFullURL( 'success' );
+               $url = $this->getTitle()->getFullURL( 'success' );
 
                $this->getOutput()->redirect( $url );
 
index 3202c00..fca1748 100644 (file)
@@ -52,6 +52,7 @@ class SpecialPrefixindex extends SpecialAllpages {
                $prefix = $request->getVal( 'prefix', '' );
                $ns = $request->getIntOrNull( 'namespace' );
                $namespace = (int)$ns; // if no namespace given, use 0 (NS_MAIN).
+               $hideredirects = $request->getBool( 'hideredirects', false );
 
                $namespaces = $wgContLang->getNamespaces();
                $out->setPageTitle(
@@ -73,19 +74,20 @@ class SpecialPrefixindex extends SpecialAllpages {
 
                // Bug 27864: if transcluded, show all pages instead of the form.
                if ( $this->including() || $showme != '' || $ns !== null ) {
-                       $this->showPrefixChunk( $namespace, $showme, $from );
+                       $this->showPrefixChunk( $namespace, $showme, $from, $hideredirects );
                } else {
-                       $out->addHTML( $this->namespacePrefixForm( $namespace, null ) );
+                       $out->addHTML( $this->namespacePrefixForm( $namespace, null, $hideredirects ) );
                }
        }
 
        /**
-       * HTML for the top form
-       * @param $namespace Integer: a namespace constant (default NS_MAIN).
-       * @param $from String: dbKey we are starting listing at.
+        * HTML for the top form
+        * @param $namespace Integer: a namespace constant (default NS_MAIN).
+        * @param $from String: dbKey we are starting listing at.
+        * @param $hideredirects Bool: hide redirects (default FALSE)
         * @return string
         */
-       function namespacePrefixForm( $namespace = NS_MAIN, $from = '' ) {
+       function namespacePrefixForm( $namespace = NS_MAIN, $from = '', $hideredirects = false ) {
                global $wgScript;
 
                $out  = Xml::openElement( 'div', array( 'class' => 'namespaceoptions' ) );
@@ -107,16 +109,22 @@ class SpecialPrefixindex extends SpecialAllpages {
                                        Xml::label( wfMsg( 'namespace' ), 'namespace' ) .
                                "</td>
                                <td class='mw-input'>" .
-                                       Html::namespaceSelector( array(
+                               Html::namespaceSelector( array(
                                                'selected' => $namespace,
                                        ), array(
                                                'name'  => 'namespace',
                                                'id'    => 'namespace',
                                                'class' => 'namespaceselector',
-                                       ) ) .
-                                       Xml::submitButton( wfMsg( 'allpagessubmit' ) ) .
+                               ) ) .
+                               Xml::checkLabel(
+                                       wfMsg( 'allpages-hide-redirects' ),
+                                       'hideredirects',
+                                       'hideredirects',
+                                       $hideredirects
+                               ) . ' ' .
+                               Xml::submitButton( wfMsg( 'allpagessubmit' ) ) .
                                "</td>
-                               </tr>";
+                       </tr>";
                $out .= Xml::closeElement( 'table' );
                $out .= Xml::closeElement( 'fieldset' );
                $out .= Xml::closeElement( 'form' );
@@ -128,8 +136,9 @@ class SpecialPrefixindex extends SpecialAllpages {
         * @param $namespace Integer, default NS_MAIN
         * @param $prefix String
         * @param $from String: list all pages from this name (default FALSE)
+        * @param $hideredirects Bool: hide redirects (default FALSE)
         */
-       function showPrefixChunk( $namespace = NS_MAIN, $prefix, $from = null ) {
+       function showPrefixChunk( $namespace = NS_MAIN, $prefix, $from = null, $hideredirects = false ) {
                global $wgContLang;
 
                if ( $from === null ) {
@@ -154,13 +163,19 @@ class SpecialPrefixindex extends SpecialAllpages {
 
                        $dbr = wfGetDB( DB_SLAVE );
 
+                       $conds = array(
+                               'page_namespace' => $namespace,
+                               'page_title' . $dbr->buildLike( $prefixKey, $dbr->anyString() ),
+                               'page_title >= ' . $dbr->addQuotes( $fromKey ),
+                       );
+
+                       if ( $hideredirects ) {
+                               $conds['page_is_redirect'] = 0;
+                       }
+
                        $res = $dbr->select( 'page',
                                array( 'page_namespace', 'page_title', 'page_is_redirect' ),
-                               array(
-                                       'page_namespace' => $namespace,
-                                       'page_title' . $dbr->buildLike( $prefixKey, $dbr->anyString() ),
-                                       'page_title >= ' . $dbr->addQuotes( $fromKey ),
-                               ),
+                               $conds,
                                __METHOD__,
                                array(
                                        'ORDER BY'  => 'page_title',
@@ -209,7 +224,7 @@ class SpecialPrefixindex extends SpecialAllpages {
                if ( $this->including() ) {
                        $out2 = '';
                } else {
-                       $nsForm = $this->namespacePrefixForm( $namespace, $prefix );
+                       $nsForm = $this->namespacePrefixForm( $namespace, $prefix, $hideredirects );
                        $self = $this->getTitle();
                        $out2 = Xml::openElement( 'table', array( 'border' => '0', 'id' => 'mw-prefixindex-nav-table' ) )  .
                                '<tr>
@@ -221,7 +236,8 @@ class SpecialPrefixindex extends SpecialAllpages {
                        if( isset( $res ) && $res && ( $n == $this->maxPerPage ) && ( $s = $res->fetchObject() ) ) {
                                $query = array(
                                        'from' => $s->page_title,
-                                       'prefix' => $prefix
+                                       'prefix' => $prefix,
+                                       'hideredirects' => $hideredirects,
                                );
 
                                if( $namespace || ($prefix == '')) {
index c358dee..30c57eb 100644 (file)
@@ -186,9 +186,19 @@ class SpecialProtectedpages extends SpecialPage {
         * @return String
         */
        protected function getNamespaceMenu( $namespace = null ) {
-               return "<span style='white-space: nowrap'>" .
-                       Xml::label( wfMsg( 'namespace' ), 'namespace' ) . '&#160;'
-                       . Xml::namespaceSelector( $namespace, '' ) . "</span>";
+               return Html::rawElement( 'span', array( 'style' => 'white-space: nowrap;' ),
+                       Html::namespaceSelector(
+                               array(
+                                       'selected' => $namespace,
+                                       'all' => '',
+                                       'label' => $this->msg( 'namespace' )->text()
+                               ), array(
+                                       'name'  => 'namespace',
+                                       'id'    => 'namespace',
+                                       'class' => 'namespaceselector',
+                               )
+                       )
+               );
        }
 
        /**
index f4232cc..ad5f3f3 100644 (file)
@@ -138,9 +138,17 @@ class SpecialProtectedtitles extends SpecialPage {
         * @return string
         */
        function getNamespaceMenu( $namespace = null ) {
-               return Xml::label( wfMsg( 'namespace' ), 'namespace' )
-                       . '&#160;'
-                       . Xml::namespaceSelector( $namespace, '' );
+               return Html::namespaceSelector(
+                       array(
+                               'selected' => $namespace,
+                               'all' => '',
+                               'label' => $this->msg( 'namespace' )->text()
+                       ), array(
+                               'name'  => 'namespace',
+                               'id'    => 'namespace',
+                               'class' => 'namespaceselector',
+                       )
+               );
        }
 
        /**
index bfc5248..c05aaad 100644 (file)
@@ -568,14 +568,14 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                $submit = ' ' . Xml::submitbutton( wfMsg( 'allpagessubmit' ) );
 
                $out = Xml::openElement( 'table', array( 'class' => 'mw-recentchanges-table' ) );
-               foreach( $extraOpts as $optionRow ) {
+               foreach( $extraOpts as $name => $optionRow ) {
                        # Add submit button to the last row only
                        ++$count;
-                       $addSubmit = $count === $extraOptsCount ? $submit : '';
+                       $addSubmit = ( $count === $extraOptsCount ) ? $submit : '';
 
                        $out .= Xml::openElement( 'tr' );
                        if( is_array( $optionRow ) ) {
-                               $out .= Xml::tags( 'td', array( 'class' => 'mw-label' ), $optionRow[0] );
+                               $out .= Xml::tags( 'td', array( 'class' => 'mw-label mw-' . $name . '-label' ), $optionRow[0] );
                                $out .= Xml::tags( 'td', array( 'class' => 'mw-input' ), $optionRow[1] . $addSubmit );
                        } else {
                                $out .= Xml::tags( 'td', array( 'class' => 'mw-input', 'colspan' => 2 ), $optionRow . $addSubmit );
index 1f556f8..238e181 100644 (file)
@@ -88,7 +88,7 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                 */
 
                $dbr = wfGetDB( DB_SLAVE, 'recentchangeslinked' );
-               $id = $title->getArticleId();
+               $id = $title->getArticleID();
                $ns = $title->getNamespace();
                $dbkey = $title->getDBkey();
 
index 17d4c4b..e8f3df7 100644 (file)
@@ -195,7 +195,7 @@ class PageArchive {
                                        'ar_timestamp' => $dbr->timestamp( $timestamp ) ),
                        __METHOD__ );
                if( $row ) {
-                       return Revision::newFromArchiveRow( $row, array( 'page' => $this->title->getArticleId() ) );
+                       return Revision::newFromArchiveRow( $row, array( 'page' => $this->title->getArticleID() ) );
                } else {
                        return null;
                }
@@ -405,13 +405,12 @@ class PageArchive {
                $article->loadPageData( 'fromdbmaster' );
                $oldcountable = $article->isCountable();
 
-               $options = 'FOR UPDATE'; // lock page
                $page = $dbw->selectRow( 'page',
                        array( 'page_id', 'page_latest' ),
                        array( 'page_namespace' => $this->title->getNamespace(),
                                   'page_title'     => $this->title->getDBkey() ),
                        __METHOD__,
-                       $options
+                       array( 'FOR UPDATE' ) // lock page
                );
                if( $page ) {
                        $makepage = false;
@@ -1160,7 +1159,7 @@ class SpecialUndelete extends SpecialPage {
 
        private function formatRevisionRow( $row, $earliestLiveTime, $remaining ) {
                $rev = Revision::newFromArchiveRow( $row,
-                       array( 'page' => $this->mTargetObj->getArticleId() ) );
+                       array( 'page' => $this->mTargetObj->getArticleID() ) );
                $stxt = '';
                $ts = wfTimestamp( TS_MW, $row->ar_timestamp );
                // Build checkboxen...
@@ -1400,7 +1399,7 @@ class SpecialUndelete extends SpecialPage {
                // Show file deletion warnings and errors
                $status = $archive->getFileStatus();
                if( $status && !$status->isGood() ) {
-                       $out->addWikiText( $status->getWikiText( 'undelete-error-short', 'undelete-error-long' ) );
+                       $out->addWikiText( '<div class="error">' . $status->getWikiText( 'undelete-error-short', 'undelete-error-long' ) . '</div>' );
                }
        }
 }
index de8ed7e..fabe4c4 100644 (file)
@@ -111,14 +111,7 @@ class SpecialUpload extends SpecialPage {
 
                // If it was posted check for the token (no remote POST'ing with user credentials)
                $token = $request->getVal( 'wpEditToken' );
-               if( $this->mSourceType == 'file' && $token == null ) {
-                       // Skip token check for file uploads as that can't be faked via JS...
-                       // Some client-side tools don't expect to need to send wpEditToken
-                       // with their submissions, as that's new in 1.16.
-                       $this->mTokenOk = true;
-               } else {
-                       $this->mTokenOk = $this->getUser()->matchEditToken( $token );
-               }
+               $this->mTokenOk = $this->getUser()->matchEditToken( $token );
 
                $this->uploadFormTextTop = '';
                $this->uploadFormTextAfterSummary = '';
index 761f1a7..3837e27 100644 (file)
@@ -1150,9 +1150,9 @@ class LoginForm extends SpecialPage {
         */
        public static function setLoginToken() {
                global $wgRequest;
-               // Use User::generateToken() instead of $user->editToken()
+               // Generate a token directly instead of using $user->editToken()
                // because the latter reuses $_SESSION['wsEditToken']
-               $wgRequest->setSessionData( 'wsLoginToken', User::generateToken() );
+               $wgRequest->setSessionData( 'wsLoginToken', MWCryptRand::generateHex( 32 ) );
        }
 
        /**
@@ -1177,7 +1177,7 @@ class LoginForm extends SpecialPage {
         */
        public static function setCreateaccountToken() {
                global $wgRequest;
-               $wgRequest->setSessionData( 'wsCreateaccountToken', User::generateToken() );
+               $wgRequest->setSessionData( 'wsCreateaccountToken', MWCryptRand::generateHex( 32 ) );
        }
 
        /**
index 597863b..9181de0 100644 (file)
@@ -160,10 +160,14 @@ class SpecialVersion extends SpecialPage {
                global $wgVersion, $IP;
                wfProfileIn( __METHOD__ );
 
-               $info = self::getSvnInfo( $IP );
-               if ( !$info ) {
+               $gitInfo = self::getGitHeadSha1( $IP );
+               $svnInfo = self::getSvnInfo( $IP );
+               if ( !$svnInfo && !$gitInfo ) {
                        $version = $wgVersion;
-               } elseif( $flags === 'nodb' ) {
+               } elseif ( $gitInfo ) {
+                       $shortSha1 = substr( $gitInfo, 0, 7 );
+                       $version = "$wgVersion ($shortSha1)";
+               } elseif ( $flags === 'nodb' ) {
                        $version = "$wgVersion (r{$info['checkout-rev']})";
                } else {
                        $version = $wgVersion . ' ' .
@@ -717,24 +721,8 @@ class SpecialVersion extends SpecialPage {
         * @return bool|String sha1 of commit HEAD points to
         */
        public static function getGitHeadSha1( $dir ) {
-               $BASEDIR  = "{$dir}/.git/";
-               $HEADfile = "{$BASEDIR}/HEAD";
-
-               if( !file_exists( $HEADfile ) ) {
-                       return false;
-               }
-
-               preg_match( "/ref: (.*)/",
-                       file_get_contents( $HEADfile), $m );
-
-               $REFfile = "{$BASEDIR}{$m[1]}";
-               if( !file_exists( $REFfile ) ) {
-                       return false;
-               }
-
-               $sha1 = rtrim( file_get_contents( $REFfile ) );
-
-               return $sha1;
+               $repo = new GitInfo( $dir );
+               return $repo->getHeadSHA1();
        }
 
        function showEasterEgg() {
index 9eb6bdf..0c5f11c 100644 (file)
@@ -40,22 +40,10 @@ class SpecialWatchlist extends SpecialPage {
                $user = $this->getUser();
                $output = $this->getOutput();
 
-               // Add feed links
-               $wlToken = $user->getOption( 'watchlisttoken' );
-               if ( !$wlToken ) {
-                       $wlToken = sha1( mt_rand() . microtime( true ) );
-                       $user->setOption( 'watchlisttoken', $wlToken );
-                       $user->saveSettings();
-               }
-
-               $this->addFeedLinks( array( 'action' => 'feedwatchlist', 'allrev' => 'allrev',
-                                                       'wlowner' => $user->getName(), 'wltoken' => $wlToken ) );
-
-               $output->setRobotPolicy( 'noindex,nofollow' );
-
                # Anons don't get a watchlist
                if( $user->isAnon() ) {
                        $output->setPageTitle( $this->msg( 'watchnologin' ) );
+                       $output->setRobotPolicy( 'noindex,nofollow' );
                        $llink = Linker::linkKnown(
                                SpecialPage::getTitleFor( 'Userlogin' ),
                                $this->msg( 'loginreqlink' )->escaped(),
@@ -66,6 +54,17 @@ class SpecialWatchlist extends SpecialPage {
                        return;
                }
 
+               // Add feed links
+               $wlToken = $user->getOption( 'watchlisttoken' );
+               if ( !$wlToken ) {
+                       $wlToken = MWCryptRand::generateHex( 40 );
+                       $user->setOption( 'watchlisttoken', $wlToken );
+                       $user->saveSettings();
+               }
+
+               $this->addFeedLinks( array( 'action' => 'feedwatchlist', 'allrev' => 'allrev',
+                                                       'wlowner' => $user->getName(), 'wltoken' => $wlToken ) );
+
                $this->setHeaders();
                $this->outputHeader();
 
@@ -328,8 +327,17 @@ class SpecialWatchlist extends SpecialPage {
                $form .= $lang->pipeList( $links );
                $form .= Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalUrl(), 'id' => 'mw-watchlist-form-namespaceselector' ) );
                $form .= '<hr /><p>';
-               $form .= Xml::label( $this->msg( 'namespace' )->text(), 'namespace' ) . '&#160;';
-               $form .= Xml::namespaceSelector( $nameSpace, '' ) . '&#160;';
+               $form .= Html::namespaceSelector(
+                       array(
+                               'selected' => $nameSpace,
+                               'all' => '',
+                               'label' => $this->msg( 'namespace' )->text()
+                       ), array(
+                               'name'  => 'namespace',
+                               'id'    => 'namespace',
+                               'class' => 'namespaceselector',
+                       )
+               ) . '&#160;';
                $form .= Xml::checkLabel( $this->msg( 'invert' )->text(), 'invert', 'nsinvert', $invert ) . '&#160;';
                $form .= Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) . '</p>';
                $form .= Html::hidden( 'days', $values['days'] );
index 7d4768a..5d6a112 100644 (file)
@@ -413,8 +413,17 @@ class SpecialWhatLinksHere extends SpecialPage {
                $f .= ' ';
 
                # Namespace selector
-               $f .= Xml::label( $this->msg( 'namespace' )->text(), 'namespace' ) . '&#160;' .
-                       Xml::namespaceSelector( $namespace, '' );
+               $f .= Html::namespaceSelector(
+                       array(
+                               'selected' => $namespace,
+                               'all' => '',
+                               'label' => $this->msg( 'namespace' )->text()
+                       ), array(
+                               'name'  => 'namespace',
+                               'id'    => 'namespace',
+                               'class' => 'namespaceselector',
+                       )
+               );
 
                $f .= ' ';
 
index 81143d2..f6078dc 100644 (file)
@@ -714,26 +714,6 @@ abstract class UploadBase {
                return $this->mLocalFile;
        }
 
-       /**
-        * NOTE: Probably should be deprecated in favor of UploadStash, but this is sometimes
-        * called outside that context.
-        *
-        * Stash a file in a temporary directory for later processing
-        * after the user has confirmed it.
-        *
-        * If the user doesn't explicitly cancel or accept, these files
-        * can accumulate in the temp directory.
-        *
-        * @param $saveName String: the destination filename
-        * @param $tempSrc String: the source temporary file to save
-        * @return String: full path the stashed file, or false on failure
-        */
-       protected function saveTempUploadedFile( $saveName, $tempSrc ) {
-               $repo = RepoGroup::singleton()->getLocalRepo();
-               $status = $repo->storeTemp( $saveName, $tempSrc );
-               return $status;
-       }
-
        /**
         * If the user does not supply all necessary information in the first upload form submission (either by accident or
         * by design) then we may want to stash the file temporarily, get more information, and publish the file later.
index 854a9f1..1ef5a74 100644 (file)
@@ -2597,16 +2597,35 @@ class Language {
        }
 
        /**
-        * A hidden direction mark (LRM or RLM), depending on the language direction
+        * A hidden direction mark (LRM or RLM), depending on the language direction.
+        * Unlike getDirMark(), this function returns the character as an HTML entity.
+        * This function should be used when the output is guaranteed to be HTML,
+        * because it makes the output HTML source code more readable. When
+        * the output is plain text or can be escaped, getDirMark() should be used.
+        *
+        * @param $opposite Boolean Get the direction mark opposite to your language
+        * @return string
+        */
+       function getDirMarkEntity( $opposite = false ) {
+               if ( $opposite ) { return $this->isRTL() ? '&lrm;' : '&rlm;'; }
+               return $this->isRTL() ? '&rlm;' : '&lrm;';
+       }
+
+       /**
+        * A hidden direction mark (LRM or RLM), depending on the language direction.
+        * This function produces them as invisible Unicode characters and
+        * the output may be hard to read and debug, so it should only be used
+        * when the output is plain text or can be escaped. When the output is
+        * HTML, use getDirMarkEntity() instead.
         *
         * @param $opposite Boolean Get the direction mark opposite to your language
         * @return string
         */
        function getDirMark( $opposite = false ) {
-               $rtl = "\xE2\x80\x8F";
-               $ltr = "\xE2\x80\x8E";
-               if ( $opposite ) { return $this->isRTL() ? $ltr : $rtl; }
-               return $this->isRTL() ? $rtl : $ltr;
+               $lrm = "\xE2\x80\x8E"; # LEFT-TO-RIGHT MARK, commonly abbreviated LRM
+               $rlm = "\xE2\x80\x8F"; # RIGHT-TO-LEFT MARK, commonly abbreviated RLM
+               if ( $opposite ) { return $this->isRTL() ? $lrm : $rlm; }
+               return $this->isRTL() ? $rlm : $lrm;
        }
 
        /**
@@ -3758,7 +3777,7 @@ class Language {
 
        /**
         * Decode an expiry (block, protection, etc) which has come from the DB
-        * 
+        *
         * @FIXME: why are we returnings DBMS-dependent strings???
         *
         * @param $expiry String: Database expiry String
index e9e0e15..1f69cbf 100644 (file)
@@ -7,7 +7,7 @@
   */
 /* private */ $coreLanguageNames = array(
        'aa' => 'Qafár af',    # Afar
-       'ab' => 'Ð\90Ò§Ñ\81Ñ\83а',   # Abkhaz, should possibly add ' Ð±Ñ\8bÑ\81жѡа'
+       'ab' => 'Ð\90Ò§Ñ\81Ñ\88Ó\99а', # Abkhaz
        'ace' => 'Acèh',       # Aceh
        'af' => 'Afrikaans',    # Afrikaans
        'ak' => 'Akan',         # Akan
@@ -37,7 +37,7 @@
        'be-tarask' => "\xE2\x80\xAAБеларуская (тарашкевіца)\xE2\x80\xAC", # Belarusian in Taraskievica orthography
        'be-x-old' => "\xE2\x80\xAAБеларуская (тарашкевіца)\xE2\x80\xAC",  # Belarusian in Taraskievica orthography; compat link
        'bg' => 'Български',   # Bulgarian
-       'bh' => 'भोजपुरी',        # Bihari marco language. Falls back to Bhojpuri (bho).
+       'bh' => 'भोजपुरी',        # Bihari macro language. Falls back to Bhojpuri (bho). The name actually says "Bhojpuri".
        'bho' => 'भोजपुरी',       # Bhojpuri
        'bi' => 'Bislama',              # Bislama
        'bjn' => 'Bahasa Banjar',       # Banjarese
@@ -49,7 +49,7 @@
        'br' => 'Brezhoneg',    # Breton
        'brh' => 'Bráhuí',    # Brahui
        'bs' => 'Bosanski',             # Bosnian
-       'bug' => 'ᨅᨔ ᨕᨘᨁᨗ', # Bugis
+       'bug' => 'ᨅᨔ ᨕᨘᨁᨗ', # Buginese
        'bxr' => 'Буряад',        # Buryat (Russia)
        'ca' => 'Català',      # Catalan
        'cbk-zam' => 'Chavacano de Zamboanga',  # Zamboanga Chavacano
@@ -60,7 +60,7 @@
        'cho' => 'Choctaw',             # Choctaw
        'chr' => 'ᏣᎳᎩ', # Cherokee
        'chy' => 'Tsetsêhestâhese',   # Cheyenne
-       'ckb' => 'کوردی',  # Sorani
+       'ckb' => 'کوردی',  # Sorani. The name actually says "Kurdi" (Kurdish).
        'co' => 'Corsu',                # Corsican
        'cps' => 'Capiceño', # Capiznon
        'cr' => 'Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ',                # Cree
@@ -81,7 +81,7 @@
        'dsb' => 'Dolnoserbski', # Lower Sorbian
        'dtp' => 'Dusun Bundu-liwan', # Central Dusun
        'dv' => 'ދިވެހިބަސް',         # Dhivehi
-       'dz' => 'ཇོང་ཁ',              # Bhutani
+       'dz' => 'ཇོང་ཁ',              # Dzongkha (Bhutan)
        'ee' => 'Eʋegbe',      # Éwé
        'el' => 'Ελληνικά',     # Greek
        'eml' => 'Emiliàn e rumagnòl',        # Emiliano-Romagnolo / Sammarinese
        'ii' => 'ꆇꉙ',       # Sichuan Yi
        'ik' => 'Iñupiak',     # Inupiak (Inupiatun, Northwest Alaska / Inupiatun, North Alaskan)
        'ike-cans' => 'ᐃᓄᒃᑎᑐᑦ',     # Inuktitut, Eastern Canadian/Eastern Canadian "Eskimo"/"Eastern Arctic Eskimo"/Inuit (Unified Canadian Aboriginal Syllabics)
-       'ike-latn' => 'inuktitut',      # Inuktitut, Eastern Canadian (Latin script)
+       'ike-latn' => 'Inuktitut',      # Inuktitut, Eastern Canadian (Latin script)
        'ilo' => 'Ilokano',     # Ilokano
-       'inh' => 'ГІалгІай Ğalğaj',    # Ingush
+       'inh' => 'ГӀалгӀай',    # Ingush
        'io' => 'Ido',                  # Ido
        'is' => 'Íslenska',    # Icelandic
        'it' => 'Italiano',             # Italian
        'krc' => 'Къарачай-Малкъар', # Karachay-Balkar
        'kri' => 'Krio', # Krio
        'krj' => 'Kinaray-a', # Kinaray-a
-       'ks' => 'कॉशुर - کٲشُر', # Kashmiri (multiple scripts - defaults to Perso-Arabic)
+       'ks' => 'कॉशुर / کٲشُر', # Kashmiri (multiple scripts - defaults to Perso-Arabic)
        'ks-arab' => 'کٲشُر',      # Kashmiri (Perso-Arabic script)
        'ks-deva' => 'कॉशुर', # Kashmiri (Devanagari script)
        'ksh' => 'Ripoarisch',  # Ripuarian
        'loz' => 'Silozi', # Lozi
        'lt' => 'Lietuvių',    # Lithuanian
        'ltg' => 'Latgaļu',    # Latgalian
+       'lus' => 'Mizo ţawng', # Mizo/Lushai
        'lv' => 'Latviešu',    # Latvian
        'lzh' => '文言',      # Literary Chinese -- (bug 8217) lzh instead of zh-classical, http://www.sil.org/iso639-3/codes.asp?order=639_3&letter=l
        'lzz' => 'Lazuri',      # Laz
        'mk' => 'Македонски', # Macedonian
        'ml' => 'മലയാളം',   # Malayalam
        'mn' => 'Монгол', # Halh Mongolian (Cyrillic) (ISO 639-3: khk)
-       'mo' => 'Молдовеняскэ',     # Moldovan
+       'mo' => 'Молдовеняскэ',     # Moldovan, deprecated
        'mr' => 'मराठी',      # Marathi
        'mrj' => 'Кырык мары', # Hill Mari
        'ms' => 'Bahasa Melayu',        # Malay
        'nds' => 'Plattdüütsch',      # Low German ''or'' Low Saxon
        'nds-nl' => 'Nedersaksisch',    # Dutch Low Saxon
        'ne' => 'नेपाली',   # Nepali
-       'new' => 'नेपाल भाषा',                # Newar / Nepal Bhasa
+       'new' => 'नेपाल भाषा',                # Newar / Nepal Bhasha
        'ng' => 'Oshiwambo',            # Ndonga
        'niu' => 'Niuē',       # Niuean
        'nl' => 'Nederlands',   # Dutch
        'pdc' => 'Deitsch',     # Pennsylvania German
        'pdt' => 'Plautdietsch',        # Plautdietsch/Mennonite Low German
        'pfl' => 'Pälzisch',   # Palatinate German
-       'pi' => 'पािऴ', # Pali
+       'pi' => 'पाळि', # Pali
        'pih' => 'Norfuk / Pitkern', # Norfuk/Pitcairn/Norfolk
        'pl' => 'Polski',               # Polish
        'pms' => 'Piemontèis', # Piedmontese
        'tet' => 'Tetun',       # Tetun
        'tg' => 'Тоҷикӣ', # Tajiki (falls back to tg-cyrl)
        'tg-cyrl' => 'Тоҷикӣ',    # Tajiki (Cyrllic script) (default)
-       'tg-latn' => 'tojikī', # Tajiki (Latin script)
+       'tg-latn' => 'Tojikī', # Tajiki (Latin script)
        'th' => 'ไทย',    # Thai
        'ti' => 'ትግርኛ',         # Tigrinya
        'tk' => 'Türkmençe',  # Turkmen
        'tl' => 'Tagalog',              # Tagalog
-       'tly' => 'толышә зывон',     # Talysh
+       'tly' => 'Толышә зывон',     # Talysh
        'tn' => 'Setswana',             # Setswana
        'to' => 'lea faka-Tonga',               # Tonga (Tonga Islands)
        'tokipona' => 'Toki Pona',      # Toki Pona
        'ty' => 'Reo Mā`ohi',  # Tahitian
        'tyv' => 'Тыва дыл',     # Tyvan
        'udm' => 'Удмурт',        # Udmurt
-       'ug' => 'ئۇيغۇرچە / Uyghurche‎',      # Uyghur (multiple scripts - defaults to Arabic)
+       'ug' => 'ئۇيغۇرچە / Uyghurche', # Uyghur (multiple scripts - defaults to Arabic)
        'ug-arab' => 'ئۇيغۇرچە', # Uyghur (Arabic script) (default)
-       'ug-latn' => 'Uyghurche', # Uyghur (Latin script)
+       'ug-latn' => 'Uyghurche', # Uyghur (Latin script)
        'uk' => 'Українська', # Ukrainian
        'ur' => 'اردو',     # Urdu
-       'uz' => 'O\'zbek',      # Uzbek
+       'uz' => 'Oʻzbek',      # Uzbek
        've' => 'Tshivenda',            # Venda
        'vec' => 'Vèneto',     # Venetian
-       'vep' => 'Vepsän kel\'',       # Veps
+       'vep' => 'Vepsän kel’',      # Veps
        'vi' => 'Tiếng Việt',       # Vietnamese
        'vls' => 'West-Vlams', # West Flemish
        'vmf' => 'Mainfränkisch', # Upper Franconian, Main-Franconian
index a40fb7a..22e8946 100644 (file)
@@ -41,11 +41,11 @@ class LanguageKaa extends Language {
        }
 
        /**
-        * It fixes issue with  lcfirst for transforming 'I' to 'ı'
+        * It fixes issue with lcfirst for transforming 'I' to 'ı'
         *
         * @param $string string
         *
-        * @return string
+        * @return mixed|string
         */
        function lcfirst ( $string ) {
                if ( substr( $string, 0, 1 ) === 'I' ) {
index 24f8135..3adce55 100644 (file)
@@ -1973,6 +1973,7 @@ $1',
 
 # File backend
 'backend-fail-notexists' => 'الملف $1 غير موجود.',
+'backend-fail-copy'      => 'لا يمكن نسخ الملف  $1  إلى  $2 .',
 'backend-fail-opentemp'  => 'تعذّر فتح ملف مؤقت.',
 'backend-fail-writetemp' => 'تعذّرت كتابة ملف مؤقت.',
 'backend-fail-closetemp' => 'تعذّر إغلاق ملف مؤقت.',
@@ -3047,7 +3048,8 @@ $1',
 'import-logentry-interwiki-detail' => '{{PLURAL:$1||مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}} من $2',
 
 # JavaScriptTest
-'javascripttest' => 'اختبار جافاسكربت',
+'javascripttest'          => 'اختبار جافاسكربت',
+'javascripttest-disabled' => 'هذه الخاصية معطلة.',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage'                 => 'صفحة المستخدم الخاصة بك',
@@ -4176,6 +4178,7 @@ $5
 'api-error-unknown-code'                  => 'خطأ غير معروف : " $1 "',
 'api-error-unknown-error'                 => 'خطأ داخلي: قد حدث خطأ عند محاولة تحميل الملف الخاص بك.',
 'api-error-unknown-warning'               => 'تحذير غير معروف:$1',
+'api-error-unknownerror'                  => 'خطأ غير معروف : " $1 "',
 'api-error-uploaddisabled'                => 'تم تعطيل تحميل على هذا الويكي.',
 'api-error-verification-error'            => 'هذا الملف قد يكون معطوباً أو يحتوي على ملحق غير صحيح.',
 
index 51f20b7..cffbd3c 100644 (file)
@@ -1109,6 +1109,8 @@ $1",
 'logdelete-failure'           => "'''مانفعش اعادة ظبط عرض السجل:'''
 $1",
 'revdel-restore'              => 'تغيير الشوف',
+'revdel-restore-deleted'      => 'مراجعات ممسوحه',
+'revdel-restore-visible'      => 'مراجعات ممكن تتشاف',
 'pagehist'                    => 'تاريخ الصفحة',
 'deletedhist'                 => 'التاريخ الممسوح',
 'revdelete-hide-current'      => 'حصل غلط فى تخبية البند اللى بتاريخ $2, الساعه$1: دى هى النسخه بتاعة دلوقتى.
@@ -1754,7 +1756,7 @@ PICT # misc.
 'filehist-filesize'                 => 'حجم الفايل',
 'filehist-comment'                  => 'تعليق',
 'filehist-missing'                  => 'ملف مش  موجود',
-'imagelinks'                        => 'لينكات الفايل',
+'imagelinks'                        => 'استخدام الفايل',
 'linkstoimage'                      => '{{PLURAL:$1|الصفحة|ال$1 صفحة}} دى فيها وصله للفايل ده:',
 'linkstoimage-more'                 => 'أكتر من $1 {{PLURAL:$1|صفحة تصل|صفحة تصل}} للملف ده .
 القائمة التالية تعرض {{PLURAL:$1|أول وصلة صفحة|أول $1 وصلة صفحة}} للملف ده بس.
@@ -1922,7 +1924,7 @@ PICT # misc.
 'listusers-editsonly'     => 'عرض اليوزرز اللى قاموا بتعديلات فقط',
 'listusers-creationsort'  => 'رتب على حسب تاريخ الإنشاء',
 'usereditcount'           => '$1 {{PLURAL:$1|تعديل|تعديل}}',
-'usercreated'             => 'اتعملت فى $1 الساعه $2',
+'usercreated'             => '{{GENDER:$3|إتعملت|إتعملت}}  يوم $1 الساعه $2',
 'newpages'                => 'صفحات جديده',
 'newpages-username'       => 'اسم اليوزر:',
 'ancientpages'            => 'اقدم الصفحات',
@@ -2343,7 +2345,7 @@ $1',
 'nolinkshere-ns'           => "مافيش صفحات بتوصل لـ '''[[:$1]]''' فى النطاق اللى انت اختارته.",
 'isredirect'               => 'صفحة تحويل',
 'istemplate'               => 'متضمن',
-'isimage'                  => 'Ù\84Ù\8aÙ\86Ù\83 ØµÙ\88رة',
+'isimage'                  => 'Ù\88صÙ\84Ø© Ù\85Ù\84Ù\81',
 'whatlinkshere-prev'       => '{{PLURAL:$1|اللى قبل كده|الـ $1 اللى قبل كده}}',
 'whatlinkshere-next'       => '{{PLURAL:$1|اللى بعد كده|الـ $1 اللى بعد كده}}',
 'whatlinkshere-links'      => '← وصلات',
@@ -2398,7 +2400,7 @@ $1',
 'ipusubmit'                       => 'ارفع المنع دا',
 'unblocked'                       => 'المنع اترفع عن [[User:$1|$1]]',
 'unblocked-id'                    => 'منع $1 اترفع',
-'ipblocklist'                     => 'Ù\84ستة Ø¹Ù\86اÙ\88Ù\8aÙ\86 Ø§Ù\84ااÙ\89 Ø¨Ù\89 Ù\88اساÙ\85Ù\89 Ø§Ù\84Ù\8aÙ\88زر Ø§Ù\84Ù\85Ù\85Ù\86Ù\88عÙ\87',
+'ipblocklist'                     => 'Ù\8aÙ\88زرات Ù\85Ù\85Ù\86Ù\88عÙ\8aÙ\86',
 'ipblocklist-legend'              => 'دور على يوزر ممنوع',
 'ipblocklist-submit'              => 'تدوير',
 'ipblocklist-localblock'          => 'منع محلى',
index 74de69d..f897925 100644 (file)
@@ -147,13 +147,13 @@ $messages = array(
 'tog-uselivepreview'          => 'সম্পাদনাৰ লগে লগে খচৰা দেখুৱাওক (জাভাস্ক্ৰিপ্টৰ প্ৰয়োজন) (পৰীক্ষামূলক)',
 'tog-forceeditsummary'        => 'সম্পাদনাৰ সাৰাংশ নিদিলে মোক জনাব',
 'tog-watchlisthideown'        => 'মোৰ লক্ষ্য-তালিকাত মোৰ সম্পাদনা নেদেখুৱাব',
-'tog-watchlisthidebots'       => 'মোৰ লক্ষ্য-তালিকাত বটে কৰা সম্পাদনা নেদেখুৱাব',
+'tog-watchlisthidebots'       => "মোৰ লক্ষ্য-তালিকাত ব'টে কৰা সম্পাদনা নেদেখুৱাব",
 'tog-watchlisthideminor'      => 'মোৰ লক্ষ্য-তালিকাত অগুৰুত্বপূৰ্ণ সম্পাদনা নেদেখুৱাব',
 'tog-watchlisthideliu'        => 'প্ৰবেশ কৰা সদস্যৰ সম্পাদনাসমূহ আঁতৰাই অনুসৰণ-তালিকা দেখুৱাওক',
 'tog-watchlisthideanons'      => 'বেনামী সদস্যৰ সম্পাদনাসমূহ আঁতৰাই অনুসৰণ-তালিকা দেখুৱাওক',
 'tog-watchlisthidepatrolled'  => 'পৰীক্ষিত সম্পাদনাসমূহ লক্ষ্য-তালিকাৰ পৰা লুকুৱাই ৰাখক',
 'tog-ccmeonemails'            => 'মই অন্য সদস্যলৈ পঠোৱা ই-মেইলৰ প্ৰতিলিপি এটা মোলৈও পঠাব',
-'tog-diffonly'                => 'তফাà§\8eৰ à¦¤à¦²à¦¤ à¦ªà§\83ষà§\8dঠাৰ à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à¦¸à§\8dতà§\81 à¦¨à§\87দà§\87à¦\96à§\8bৱাব',
+'tog-diffonly'                => 'পারà§\8dথà¦\95à§\8dযৰ à¦¤à¦²à¦¤ à¦ªà§\83ষà§\8dঠাৰ à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à¦¸à§\8dতà§\81 à¦¨à§\87দà§\87à¦\96à§\81ৱাব',
 'tog-showhiddencats'          => 'নিহিত শ্ৰেণী সমূহ দেখুৱাওক',
 'tog-norollbackdiff'          => 'ৰোলবেক্ কৰা পাচত পাৰ্থক্য নেদেখুৱাব',
 
@@ -191,7 +191,7 @@ $messages = array(
 'june'          => 'জুন',
 'july'          => 'জুলাই',
 'august'        => 'আগষ্ট',
-'september'     => 'à¦\9aà§\87পà§\8dতেম্বৰ',
+'september'     => 'à¦\9aà§\87পà§\8dà¦\9fেম্বৰ',
 'october'       => 'অক্টোবৰ',
 'november'      => 'নৱেম্বৰ',
 'december'      => 'ডিচেম্বৰ',
@@ -203,7 +203,7 @@ $messages = array(
 'june-gen'      => 'জুন',
 'july-gen'      => 'জুলাই',
 'august-gen'    => 'আগষ্ট',
-'september-gen' => 'à¦\9aà§\87পà§\8dতেম্বৰ',
+'september-gen' => 'à¦\9aà§\87পà§\8dà¦\9fেম্বৰ',
 'october-gen'   => 'অক্টোবৰ',
 'november-gen'  => 'নৱেম্বৰ',
 'december-gen'  => 'ডিচেম্বৰ',
@@ -215,7 +215,7 @@ $messages = array(
 'jun'           => 'জুন',
 'jul'           => 'জুলাই',
 'aug'           => 'আগষ্ট',
-'sep'           => 'à¦\9aà§\87পà§\8dত:',
+'sep'           => 'à¦\9aà§\87পà§\8dà¦\9f:',
 'oct'           => 'অক্টো:',
 'nov'           => 'নৱে:',
 'dec'           => 'ডিচে:',
@@ -291,7 +291,7 @@ $messages = array(
 'updatedmarker'     => 'মোৰ শেহতীয়া আগমনৰ পাছৰ পৰিৱৰ্তনবিলাক',
 'printableversion'  => 'প্ৰিণ্ট কৰাৰ উপযোগী',
 'permalink'         => 'স্থায়ী সূত্ৰ (লিংক)',
-'print'             => 'পà§\8dৰিন্ট কৰিবলৈ',
+'print'             => 'পà§\8dৰিণ্ট কৰিবলৈ',
 'view'              => 'দেখুৱাওক',
 'edit'              => 'সম্পাদনা',
 'create'            => 'সৃষ্টি কৰক',
@@ -312,7 +312,7 @@ $messages = array(
 'specialpage'       => 'বিশেষ পৃষ্ঠা',
 'personaltools'     => 'ব্যক্তিগত সৰঞ্জাম',
 'postcomment'       => 'নতুন অনুচ্ছেদ',
-'articlepage'       => 'বিষয়বসà§\8dতà§\81 পৃষ্ঠা চাওক',
+'articlepage'       => 'সমল পৃষ্ঠা চাওক',
 'talk'              => 'আলোচনা',
 'views'             => 'দৰ্শন',
 'toolbox'           => 'সাজ-সৰঞ্জাম',
@@ -353,11 +353,11 @@ $1',
 'disclaimerpage'       => 'Project:সাধাৰণ দায়লুপ্তি',
 'edithelp'             => 'সম্পাদনাৰ বাবে সহায়',
 'edithelppage'         => 'Help:সম্পাদনা',
-'helppage'             => 'Help:সà§\82à¦\9aà§\80',
+'helppage'             => 'Help:সমল',
 'mainpage'             => 'বেটুপাত',
 'mainpage-description' => 'বেটুপাত',
 'policy-url'           => 'Project:নীতি',
-'portal'               => "বাটচ'ৰা",
+'portal'               => "সমাà¦\9cৰ à¦¬à¦¾à¦\9fà¦\9a'ৰা",
 'portal-url'           => 'Project:সমজুৱা পৃষ্ঠা',
 'privacy'              => 'গোপনীয়তা নীতি',
 'privacypage'          => 'Project:গোপনীয়তা নীতি',
@@ -374,7 +374,7 @@ $1',
 'youhavenewmessages'      => 'আপোনাৰ কাৰণে $1 আছে। ($2)',
 'newmessageslink'         => 'নতুন বাৰ্তা',
 'newmessagesdifflink'     => 'শেহতীয়া সাল-সলনি',
-'youhavenewmessagesmulti' => '$1 ত আপোনাৰ কাৰণে নতুন বাৰ্তা আছে',
+'youhavenewmessagesmulti' => '$1ত আপোনাৰ কাৰণে নতুন বাৰ্তা আছে',
 'editsection'             => 'সম্পাদনা কৰক',
 'editold'                 => 'সম্পাদনা',
 'viewsourceold'           => 'উৎস চাওক',
@@ -540,7 +540,7 @@ $2',
 আপুনি কুকি নিষ্ক্ৰিয় কৰি থৈছে।
 অনুগ্ৰহ কৰি কুকি সক্ৰিয় কৰক, আৰু তাৰ পাছত আপোনাৰ সদস্যনামেৰে প্ৰৱেশ কৰক।',
 'nocookieslogin'             => '{{SITENAME}} ত প্ৰৱেশ কৰিবলৈ কুকি সক্ৰিয় থাকিব লাগিব।
-à¦\86পà§\81নি à¦\95à§\81à¦\95ি à¦¨à¦¿à¦¸্ক্ৰিয় কৰি থৈছে।
+à¦\86পà§\81নি à¦\95à§\81à¦\95ি à¦¨à¦¿à¦·্ক্ৰিয় কৰি থৈছে।
 অনুগ্ৰহ কৰি কুকি সক্ৰিয় কৰক, আৰু তাৰ পাছত চেষ্টা কৰক।',
 'nocookiesfornew'            => 'সদস্য একাউন্ট সৃষ্টি কৰা নহল, কাৰণ তাৰ উৎস অনিশ্চিত ।
 আপোনাৰ কুকি সক্ৰিয় ৰাখক, এই পৃষ্ঠা ৰি-লোড কৰি পুনৰ চেষ্টা কৰক ।',
@@ -594,9 +594,9 @@ $2',
 
 যদি এইয়া ভুলতে হৈছে, তেনেহলে আপুনি এই বাৰ্তাটো অবজ্ঞা কৰিব পাৰে ।',
 'usernamehasherror'          => 'সদস্যনামত হেচ্‌ আখৰ থাকিব নোৱাৰে',
-'login-throttled'            => 'à¦\86পà§\81নি à¦¸â\80\8dমà§\8dপà§\8dৰতি à¦\85à¦\9cসà§\8dৰবাৰ à¦²à¦\97à§\8dâ\80\8c-à¦\87নà§\8dâ\80\8cৰ à¦ªà§\8dৰয়াস à¦\95ৰিà¦\9bà§\87 à¥¤
+'login-throttled'            => 'আপুনি স‍ম্প্ৰতি অজস্ৰবাৰ লগ্‌-ইনৰ প্ৰয়াস কৰিছে ।
 অনুগ্ৰহ কৰি কিছু সময় অপেক্ষা কৰি আকৌ প্ৰয়াস কৰক ।',
-'login-abort-generic'        => 'আপোনাৰ প্ৰৱেশ অসফল-বাতিল কৰা হ’ল',
+'login-abort-generic'        => 'আপোনাৰ প্ৰৱেশ অসফল হৈছে- বাতিল কৰা হ’ল',
 'loginlanguagelabel'         => 'ভাষা: $1',
 'suspicious-userlogout'      => 'আপোনাৰ প্ৰস্থানৰ অনুৰোধ বাতিল কৰা হৈছে কাৰণ হয়তো আপোনাৰ ব্ৰাউজাৰ অসম্পূৰ্ণ নতুবা পূবৰ্বতী তথ্য পঠাইছে ।',
 
@@ -646,7 +646,7 @@ $2
 {{PLURAL:$3|এই অস্থায়ী গুপ্তশব্দ|এই অস্থায়ী গুপ্তশব্দবোৰ}} {{PLURAL:$5|এদিনত|$5 দিনত }} নাইকীয়া হ’ব । আপুনি লগ-ইন কৰি এটা নতুন গুপ্তশব্দ দিয়া উচিত । যদি আন কোনোবাই এই অনুৰোধ কৰিছিল, বা আপুনি নিজৰ পূৰ্বৰ গুপ্তশব্দ মনত পেলাইছে আৰু ইয়াক সলাব খোজা নাই, তেন্তে আপুনি এই বাৰ্তাক অগ্ৰাহ্য কৰি নিজৰ পূৰ্বৰ গুপ্তশব্দ ব্যৱহাৰ কৰি থাকিব পাৰে ।',
 'passwordreset-emailelement'       => 'সদস্যনাম: $1
 অস্থায়ী গুপ্তশব্দ: $2',
-'passwordreset-emailsent'          => 'à¦\8fà¦\96ন à¦¸à§\8dমৰণà¦\95াৰà¦\95 à¦\87-মà§\87à¦\87ল à¦ªà¦ à§\8bৱা à¦¹à§\88à¦\9bà§\87 ।',
+'passwordreset-emailsent'          => 'à¦\8fà¦\96ন à¦¸à§\8dমাৰà¦\95 à¦\87-মà§\87à¦\87ল à¦ªà¦ à§\8bৱা à¦¹à§\88à¦\9bà§\87।',
 'passwordreset-emailsent-capture'  => 'এখন স্মাৰক ই-মেইল পঠোৱা হৈছে, এইখন তলত দেখা পাব।',
 'passwordreset-emailerror-capture' => "এখন স্মাৰক ই-মেইল সৃষ্টি কৰা হ'ল কিন্তু সদস্যজনলৈ পঠিয়াব পৰা নগ'ল, এইখন তলত দেখুওৱা হৈছে: $1",
 
@@ -682,7 +682,7 @@ $2
 # Edit pages
 'summary'                          => 'সাৰাংশ:',
 'subject'                          => 'বিষয় / শীৰ্ষক:',
-'minoredit'                        => 'এইটো অগুৰুত্বপূৰ্ণ সম্পাদনা',
+'minoredit'                        => 'à¦\8fà¦\87à¦\9fà§\8b à¦\8fà¦\9fা à¦\85à¦\97à§\81ৰà§\81তà§\8dবপà§\82ৰà§\8dণ à¦¸à¦®à§\8dপাদনা',
 'watchthis'                        => 'এই পৃষ্ঠাটো লক্ষ্য কৰক',
 'savearticle'                      => 'পৃষ্ঠা সাঁচক',
 'preview'                          => 'খচৰা',
@@ -691,9 +691,9 @@ $2
 'showdiff'                         => 'সালসলনিবোৰ দেখুৱাওক',
 'anoneditwarning'                  => "<span style=\"color:red;\">'''সাৱধান:''' আপুনি প্ৰৱেশ কৰা নাই ।</span> 
 এই পৃষ্ঠাৰ ইতিহাসত আপোনাৰ আই পি ঠিকনা সংৰক্ষিত কৰা হ'ব।",
-'anonpreviewwarning'               => "''আপুনি প্ৰৱেশ কৰা নাই । আপোনাৰ সম্পাদনা সাঁচিলে আপোনাৰ আই-পি ঠিকনা এই পৃষ্ঠাৰ ইতিহাসত সংৰক্ষিত কৰা হব।\"",
+'anonpreviewwarning'               => "''আপুনি প্ৰৱেশ কৰা নাই। আপোনাৰ সম্পাদনা সাঁচিলে আপোনাৰ আই-পি ঠিকনা এই পৃষ্ঠাৰ ইতিহাসত সংৰক্ষিত হ'ব।\"",
 'missingsummary'                   => "'''স্মাৰক:''' আপুনি সম্পাদনা সাৰাংশ দিয়া নাই।
-à¦\86পà§\81নি à¦\86ৰà§\81 à¦\8fবাৰ à¦¸à¦\82ৰà¦\95à§\8dষণৰ à¦¬à¦¾à¦¬à§\87 à¦\95à§\8dলà§\80ক কৰিলে সাৰাংশৰ অবিহনে সংৰক্ষিত হব।",
+à¦\86পà§\81নি à¦\86ৰà§\81 à¦\8fবাৰ à¦¸à¦\82ৰà¦\95à§\8dষণৰ à¦¬à¦¾à¦¬à§\87 à¦\95à§\8dলিক কৰিলে সাৰাংশৰ অবিহনে সংৰক্ষিত হব।",
 'missingcommenttext'               => 'অনুগ্ৰহ কৰি তলত মন্তব্য এটা দিয়ক।',
 'missingcommentheader'             => "'''স্মাৰক:''' আপুনি এই মন্তব্যটোত শিৰোনামা দিয়া নাই।
 যদি আকৌ এবাৰ যদি \"{{int:savearticle}}\" টিপে, তেনেহলে সম্পাদনা শিৰোনামা অবিহনে সংৰক্ষিত হব।",
@@ -740,11 +740,11 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 'accmailtext'                      => "[[User talk:$1|$1]]-ৰ কাৰণে যাদৃচ্ছিক ভাৱে উৎপন্ন কৰা গুপ্তশব্দ $2-লৈ পঠোৱা হ'ল । 
 এই নতুন একাউন্টত প্ৰৱেশ কৰি ''[[Special:ChangePassword|change password]]'' পৃষ্ঠাখনত গুপ্তশব্দতো সলনি কৰি ল’ব পাৰিব ।",
 'newarticle'                       => '(নতুন)',
-'newarticletext'                   => 'আপুনি বিচৰা প্ৰবন্ধটো বিচাৰি পোৱা নগল।
+'newarticletext'                   => "আপুনি বিচৰা প্ৰবন্ধটো বিচাৰি পোৱা নগ'ল।
 
 ইচ্ছা কৰিলে আপুনিয়েই এই প্ৰবন্ধটো লিখা আৰম্ভ কৰিব পাৰে। [[{{MediaWiki:Helppage}}|ইয়াত]] সহায় পাব।
 
-à¦\86পà§\81নি à¦¯à¦¦à¦¿ à¦\87য়ালà§\88 à¦­à§\81লতà§\87 à¦\86হিà¦\9bà§\87, à¦¤à§\87নà§\87হলà§\87 à¦\86পà§\8bনাৰ à¦¬à§\8dৰাà¦\93à¦\9cাৰত (BACK) à¦¬à§\81তামত à¦\9fিপা à¦®à¦¾à§°à¦\95।',
+à¦\86পà§\81নি à¦¯à¦¦à¦¿ à¦\87য়ালà§\88 à¦­à§\81লতà§\87 à¦\86হিà¦\9bà§\87, à¦¤à§\87নà§\87হলà§\87 à¦\86পà§\8bনাৰ à¦¬à§\8dৰাà¦\93à¦\9cাৰৰ '''BACK''' à¦¬à§\81à¦\9fামত à¦\9fিপা à¦®à¦¾à§°à¦\95।",
 'anontalkpagetext'                 => "----''এইখন আলোচনা পৃষ্ঠা বেনামী সদস্যৰ বাবে, যিয়ে নিজা একাউন্ট  সৃষ্টি কৰা নাই বা যিয়ে সেই একাউন্ট ব্যৱহাৰ নকৰে ।
 এতেকে আমি তেখেতসকলক আই-পি ঠিকনাৰে চিনাক্ত কৰিবলৈ বাধ্য ।
 সেই একেই আই-পি ঠিকনা অনেকেই ব্যৱহাৰ কৰিব পাৰে ।
@@ -762,7 +762,7 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 'userpage-userdoesnotexist-view'   => "সদস্য একাউন্ট ''$1'' পঞ্জীভূত নহয়",
 'blocked-notice-logextract'        => "বৰ্তমানে এই সদস্যক বাৰণ কৰা হৈছে ।
 প্ৰসংগক্ৰমে সাম্প্ৰতিক বাৰণ সূচী তলত দিয়া হ'ল ।",
-'clearyourcache'                   => "'''à¦\9fà§\8bà¦\95া:''' à¦¸à¦¾à¦\81à¦\9aি à§°à¦\96াৰ à¦ªà¦¿à¦\9bত à¦ªà§°à¦¿à§±à§°à§\8dতনà¦\96িনি à¦\9aাবৰ à¦¬à¦¾à¦¬à§\87 à¦\86পà§\81নি à¦\86পà§\8bনাৰ à¦¬à§\8dৰাà¦\89à¦\9cাৰৰ à¦\95à§\8dযাশ অগ্ৰাহ্য কৰিব লগা হ’ব পাৰে।
+'clearyourcache'                   => "'''à¦\9fà§\8bà¦\95া:''' à¦¸à¦¾à¦\81à¦\9aি à§°à¦\96াৰ à¦ªà¦¿à¦\9bত à¦ªà§°à¦¿à§±à§°à§\8dতনà¦\96িনি à¦\9aাবৰ à¦¬à¦¾à¦¬à§\87 à¦\86পà§\81নি à¦\86পà§\8bনাৰ à¦¬à§\8dৰাà¦\89à¦\9cাৰৰ à¦\95à§\87à¦\9aà§\8dâ\80\8c (cache) অগ্ৰাহ্য কৰিব লগা হ’ব পাৰে।
 * '''Firefox / Safari: ''' ''Shift'' ধৰি ৰাখি ''Reload'' ক্লিক কৰক, নাইবা ''Ctrl-F5'' বা ''Ctrl-R'' টিপক (এপল মেকৰ বাবে ''⌘-R'')
 * '''Google Chrome:''' ''Ctrl-Shift-R'' টিপক (এপল মেকৰ বাবে ''⌘-Shift-R'' )
 * '''Internet Explorer:''' ''Ctrl'' ধৰি ৰাখি ''Refresh'' ক্লিক কৰক, অথবা ''Ctrl-F5'' টিপক
@@ -800,10 +800,10 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 'editingsection'                   => '$1 (বিভাগ) সম্পাদনা কৰি থকা হৈছে',
 'editingcomment'                   => '$1 (নতুন বিভাগ) সম্পাদনা কৰি থকা হৈছে',
 'editconflict'                     => 'সম্পাদনা দ্বন্দ: $1',
-'explainconflict'                  => "আপুনি সম্পাদনা আৰম্ভ কৰাৰ পাছত আন কোনোবাই এই পৃষ্ঠাখন সলনি কৰিলে 
-পাঠ্য-স্থানৰ উপৰ ভাগত এই পৃষ্ঠাৰ প্ৰচলিত পাঠ্য দিয়া হৈছে 
-à¦\86পà§\8bনাৰ à¦¸à¦²à¦¨à¦¿à¦¸à¦®à§\82হ à¦ªà¦¾à¦ à§\8dয-সà§\8dথানৰ à¦¤à¦²à§° à¦­à¦¾à¦\97ত à¦¦à§\87à¦\96à§\87ৱা à¦¹à§\88à¦\9bà§\87 
-আপুনি আপোনাৰ সালসলনিসমূহ প্ৰচলিত পাঠ্যত অন্তৰ্ভুক্ত কৰিব পাৰে 
+'explainconflict'                  => "আপুনি সম্পাদনা আৰম্ভ কৰাৰ পাছত আন কোনোবাই এই পৃষ্ঠাখন সলনি কৰিলে।
+পাঠ্য-স্থানৰ উপৰ ভাগত এই পৃষ্ঠাৰ প্ৰচলিত পাঠ্য দিয়া হৈছে।
+à¦\86পà§\8bনাৰ à¦¸à¦²à¦¨à¦¿à¦¸à¦®à§\82হ à¦ªà¦¾à¦ à§\8dয-সà§\8dথানৰ à¦¤à¦²à§° à¦­à¦¾à¦\97ত à¦¦à§\87à¦\96à§\81à¦\93ৱা à¦¹à§\88à¦\9bà§\87
+আপুনি আপোনাৰ সালসলনিসমূহ প্ৰচলিত পাঠ্যত অন্তৰ্ভুক্ত কৰিব পাৰে।
 আপুনি \"{{int:savearticle}}\" টিপিলে '''কেৱল''' পাঠ্য-স্থানৰ উপৰ ভাগৰ অংশখিনিহে সংৰক্ষিত হ'ব ।",
 'yourtext'                         => 'আপুনি লিখা পাঠ',
 'storedversion'                    => 'জমা সংস্কৰণ',
@@ -812,10 +812,10 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 'editingold'                       => "'''সাৱধান: আপুনি এই পৃষ্ঠাৰ এটি পুৰণি সংস্কৰণ সম্পাদনা কৰি আছে ।
 যদি আপুনি আপোনাৰ সম্পাদনাসমূহ জমা কৰে, সেই পৰৱৰ্তী সংস্কৰণসমূহ হেৰাই যাব ‌‌।'''",
 'yourdiff'                         => 'তফাৎ',
-'copyrightwarning'                 => "অনুগ্ৰহ কৰি মন কৰক যে {{SITENAME}}লৈ কৰা সকলো বৰঙণি $2 ৰ চৰ্তাৱলীৰ মতে প্ৰদান কৰা বুলি ধৰি লোৱা হব (আৰু অধিক জানিবলৈ $1 চাওক)। যদি আপুনি আপোনাৰ লিখনি নিৰ্দয়ভাৱে সম্পাদনা কৰা আৰু ইচ্ছামতে পুনৰ্বিতৰণ কৰা ভাল নাপায়, তেনেহ'লে নিজৰ লিখনি ইয়াত নিদিব।
+'copyrightwarning'                 => "অনুগ্ৰহ কৰি মন কৰক যে {{SITENAME}}লৈ কৰা সকলো বৰঙণি $2 ৰ চৰ্তাৱলীৰ মতে প্ৰদান কৰা বুলি ধৰি লোৱা হ'ব (আৰু অধিক জানিবলৈ $1 চাওক)। যদি আপুনি আপোনাৰ লিখনি নিৰ্দয়ভাৱে সম্পাদনা কৰা আৰু ইচ্ছামতে পুনৰ্বিতৰণ কৰা ভাল নাপায়, তেনেহ'লে নিজৰ লিখনি ইয়াত নিদিব।
 <br />
 
-à¦\87য়াত à¦\86পà§\8bনাৰ à¦²à¦¿à¦\96নি à¦¦à¦¿à¦¯à¦¼à¦¾à§° à¦²à¦\97à§\87 à¦²à¦\97à§\87 à¦\86পà§\81নি à¦\86পà§\8bনা-à¦\86পà§\81নি à¦ªà§\8dৰতিশà§\8dৰà§\81তি à¦¦à¦¿ছে যে এই লিখনিটো আপোনাৰ মৌলিক লিখনি, বা কোনো স্বত্বাধিকাৰ নথকা বা কোনো ৰাজহুৱা ৱেবছাইট বা তেনে কোনো মুকলি উৎসৰ পৰা আহৰণ কৰা।
+à¦\87য়াত à¦\86পà§\8bনাৰ à¦²à¦¿à¦\96নি à¦¦à¦¿à¦¯à¦¼à¦¾à§° à¦²à¦\97à§\87 à¦²à¦\97à§\87 à¦\86পà§\8bনা-à¦\86পà§\81নি à¦ªà§\8dৰতিশà§\8dৰà§\81তি à¦¦à¦¿à¦¯à¦¼à¦¾ à¦¹à§\88ছে যে এই লিখনিটো আপোনাৰ মৌলিক লিখনি, বা কোনো স্বত্বাধিকাৰ নথকা বা কোনো ৰাজহুৱা ৱেবছাইট বা তেনে কোনো মুকলি উৎসৰ পৰা আহৰণ কৰা।
 '''স্বত্বাধিকাৰযুক্ত কোনো সমল অনুমতি অবিহনে দাখিল নকৰে যেন!'''",
 'copyrightwarning2'                => "অনুগ্ৰহ কৰি মন কৰক যে {{SITENAME}}লৈ কৰা সকলো বৰঙণি আন সদস্যই সম্পাদনা কৰিব, সলনি কৰিব অথবা মচি পেলাব পাৰে ।
 আপুনি যদি আপোনাৰ লিখনি নিৰ্দয়ভাৱে সম্পাদনা কৰা ভাল নাপায়, তেনেহলে নিজৰ লিখনি ইয়াত নিদিব ।<br />
@@ -832,7 +832,7 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 আপোনাৰ সুবিধাৰ বাবে পৃষ্ঠাৰ সাম্প্ৰতিক ল'গ সংৰক্ষণ তলত দিয়া হ'ল ।",
 'semiprotectedpagewarning'         => "টোকা: এই পৃষ্ঠা বন্ধ ৰখা হৈছে; কেৱল পঞ্জীভূত সদস্যই হে সম্পাদনা কৰিব পাৰিব ।
 আপোনাৰ সুবিধাৰ বাবে পৃষ্ঠাৰ সাম্প্ৰতিক ল'গ সংৰক্ষণ তলত দিয়া হ'ল ।",
-'cascadeprotectedwarning'          => "'''সতৰà§\8dà¦\95বানà§\80:''' à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন à¦¸à§\81ৰà¦\95à§\8dষিত à¦\95ৰি à§°à¦\96া à¦¹à§\88à¦\9bà§\87 à¦¯à¦¾à¦¤à§\87 à¦\95à§\87ৱল à¦ªà§\8dৰশাসনà§\80য় ক্ষমতা থকা সদস্যই ইয়াক সম্পাদনা কৰিব পাৰে, কাৰণ ই প্ৰপাতাকাৰ-সুৰক্ষিত  {{PLURAL:$1|পৃষ্ঠাখনৰ|পৃষ্ঠাবোৰৰ}} অন্তৰ্ভুক্ত:",
+'cascadeprotectedwarning'          => "'''সতৰà§\8dà¦\95বাণà§\80:''' à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন à¦¸à§\81ৰà¦\95à§\8dষিত à¦\95ৰি à§°à¦\96া à¦¹à§\88à¦\9bà§\87 à¦¯à¦¾à¦¤à§\87 à¦\95à§\87ৱল à¦ªà§\8dৰশাসনিà¦\95 ক্ষমতা থকা সদস্যই ইয়াক সম্পাদনা কৰিব পাৰে, কাৰণ ই প্ৰপাতাকাৰ-সুৰক্ষিত  {{PLURAL:$1|পৃষ্ঠাখনৰ|পৃষ্ঠাবোৰৰ}} অন্তৰ্ভুক্ত:",
 'titleprotectedwarning'            => "'''সতৰ্কবাণী: এই পৃষ্ঠাখন সুৰক্ষিত কৰা হৈছে যাতে কেৱল [[Special:ListGroupRights|specific rights]] সদস্যই ইয়াক তৈয়াৰ কৰিব পাৰে ।'''
 আপোনাৰ সুবিধাৰ্থে লগৰ শেহতীয়া ভৰ্তি তলত দিয়া হ’ল ।",
 'templatesused'                    => 'এই পৃষ্ঠাত ব্যৱহৃত {{PLURAL:$1|সাঁচ|সাঁচ সমূহ}}:',
@@ -909,9 +909,9 @@ $3 এ আগবঢ়োৱা ইয়াৰ কাৰণ হ’ল ''$2''",
 'last'                   => 'পূৰ্ববৰ্তী',
 'page_first'             => 'প্ৰথম',
 'page_last'              => 'অন্তিম',
-'histlegend'             => "পাৰà§\8dথà¦\95à§\8dয à¦¬à¦¾à¦\9aনà§\80: à¦ªà¦¾à§°à§\8dথà¦\95à§\8dয à¦\9aাবলà§\88 à¦¸à¦\82à¦\95লনবà§\8bৰৰ à¦¸à¦®à§\8dমà§\81à¦\96ত à¦¥à¦\95া à§°à§\87ডিà¦\93 à¦¬à§\81à¦\9fামবà§\8bৰ à¦¬à¦¾à¦\9aনà§\80 à¦\95ৰি à¦\8fণà§\8dà¦\9fাৰ à¦\9fিপà¦\95 à¦\85থবা à¦\8fà¦\95à§\87বাৰà§\87 à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ à¦¬à§\81à¦\9fামতà§\8b à¦\95à§\8dলà§\80ক কৰক <br />
+'histlegend'             => "পাৰà§\8dথà¦\95à§\8dয à¦¬à¦¾à¦\9bনি: à¦ªà¦¾à§°à§\8dথà¦\95à§\8dয à¦\9aাবলà§\88 à¦¸à¦\82à¦\95লনবà§\8bৰৰ à¦¸à¦®à§\8dমà§\81à¦\96ত à¦¥à¦\95া à§°à§\87ডিà¦\85' à¦¬à§\81à¦\9fামবà§\8bৰ à¦¬à¦¾à¦\9aনà§\80 à¦\95ৰি à¦\8fণà§\8dà¦\9fাৰ à¦\9fিপà¦\95 à¦\85থবা à¦\8fà¦\95à§\87বাৰà§\87 à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ à¦¬à§\81à¦\9fামতà§\8b à¦\95à§\8dলিক কৰক <br />
 লিজেণ্ড: '''({{int:cur}})''' = বৰ্তমানৰ সংকলনৰ লগত পাৰ্থক্য,
-'''({{int:last}})''' = à¦\86à¦\97ৰ à¦¸à¦\82à¦\95লনৰ à¦²à¦\97ত à¦ªà¦¾à§°à§\8dথà¦\95à§\8dয, '''{{int:minoreditletter}}'' = à¦\85à¦\97à§\81ৰà§\81তà§\8dবপà§\81ৰ্ণ সম্পাদনা।",
+'''({{int:last}})''' = à¦\86à¦\97ৰ à¦¸à¦\82à¦\95লনৰ à¦²à¦\97ত à¦ªà¦¾à§°à§\8dথà¦\95à§\8dয, '''{{int:minoreditletter}}'' = à¦\85à¦\97à§\81ৰà§\81তà§\8dবপà§\82ৰ্ণ সম্পাদনা।",
 'history-fieldset-title' => 'ইতিহাসত অনুসন্ধান কৰক',
 'history-show-deleted'   => 'মাথোঁ মচি পেলোৱা',
 'histfirst'              => 'আটাইতকৈ পুৰণি',
@@ -1077,27 +1077,27 @@ $1",
 'searchsubtitle'                   => 'আপুনি অনুসন্ধান কৰিছে \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|"$1" দি আৰম্ভ হোৱা পৃষ্ঠাসমূহ]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" লগত সংযুক্ত পৃষ্ঠাসমূহ]])',
 'searchsubtitleinvalid'            => "আপোনাৰ অনুসন্ধান হ'ল '''$1'''",
 'toomanymatches'                   => "বহুত বেছি মিল পোৱা গৈছে, সন্ধান-শব্দ সলনি কৰিবলৈ অনুৰোধ কৰা হ'ল",
-'titlematches'                     => 'পà§\83ষà§\8dঠাৰ à¦¶à¦¿à§°à§\8bণামা মিলিছে',
+'titlematches'                     => 'পà§\83ষà§\8dঠাৰ à¦¶à¦¿à§°à§\8bনামা মিলিছে',
 'notitlematches'                   => 'এটাও পৃষ্ঠাৰ শিৰোনামা মিলা নাই',
 'textmatches'                      => 'পৃষ্ঠাৰ পাঠ মিলিছে',
 'notextmatches'                    => 'কোনো পৃষ্ঠাৰ পাঠ মিলা নাই',
-'prevn'                            => 'পà§\82ৰà§\8dববৰà§\8dত্তী {{PLURAL:$1|$1}}টা',
-'nextn'                            => 'পৰবৰà§\8dত্তী {{PLURAL:$1|$1}}টা',
+'prevn'                            => 'পà§\82ৰà§\8dবৱৰ্তী {{PLURAL:$1|$1}}টা',
+'nextn'                            => 'পৰৱৰ্তী {{PLURAL:$1|$1}}টা',
 'prevn-title'                      => 'আগৰ $1 {{PLURAL:$1|ফলাফল|ফলাফলবোৰ}}',
 'nextn-title'                      => 'পিছৰ $1 {{PLURAL:$1|ফলাফল|ফলাফলবোৰ}}',
-'shown-title'                      => 'পà§\83ষà§\8dঠাà¦\87 à¦ªà§\8dৰতি $1 {{PLURAL:$1|ফলাফল|ফলাফল}} দেখুৱাওক',
+'shown-title'                      => 'পà§\83ষà§\8dঠাà¦\87 à¦ªà§\8dৰতি $1 {{PLURAL:$1|à¦\9fা à¦«à¦²à¦¾à¦«à¦²|à¦\9fা ফলাফল}} দেখুৱাওক',
 'viewprevnext'                     => '($1 {{int:pipe-separator}} $2) ($3) চাওক।',
 'searchmenu-legend'                => 'সন্ধান বিকল্পসমূহ',
 'searchmenu-exists'                => 'এই ৱিকিত "[[:$1]]" নামৰ পৃষ্ঠা এখন আছে ।',
 'searchmenu-new'                   => "'''এই ৱিকিত \"[[:\$1]]\" পৃষ্ঠাখন সৃষ্টি কৰক!'''",
-'searchhelp-url'                   => 'Help:বিষয়বসà§\8dতà§\81',
+'searchhelp-url'                   => 'Help:সমল',
 'searchmenu-prefix'                => '[[Special:PrefixIndex/$1|এই উপসৰ্গ থকা পৃষ্ঠাসমূহ ব্ৰাউজ কৰক]]',
 'searchprofile-articles'           => 'বিষয়বস্তুৰ পৃষ্ঠা',
 'searchprofile-project'            => 'সহায় আৰু প্ৰকল্প পৃষ্ঠাসমূহ',
 'searchprofile-images'             => 'মাল্টিমিডিয়া',
 'searchprofile-everything'         => 'সকলো',
 'searchprofile-advanced'           => 'উচ্চতৰ',
-'searchprofile-articles-tooltip'   => '$1-à¦\9f অনুসন্ধান কৰক',
+'searchprofile-articles-tooltip'   => '$1-ত অনুসন্ধান কৰক',
 'searchprofile-project-tooltip'    => '$1-ত অনুসন্ধান',
 'searchprofile-images-tooltip'     => 'ফাইলৰ বাবে অনুসন্ধান',
 'searchprofile-everything-tooltip' => 'সকলো বিষয়বস্তু অনুসন্ধান কৰক (কথা-বতৰা পৃষ্ঠা সহ)',
@@ -1177,20 +1177,20 @@ $1",
 'resetprefs'                    => 'অসঞ্চিত সাল-সলনি বাতিল কৰক',
 'restoreprefs'                  => 'সকলো পূৰ্বনিৰ্ধাৰিত ছেটিং ঘূৰাই আনক',
 'prefs-editing'                 => 'সম্পাদন',
-'prefs-edit-boxsize'            => 'সম্পাদনা ৱিন্ডোৰ আকাৰ',
+'prefs-edit-boxsize'            => "সম্পাদনা ৱিণ্ড'ৰ আকাৰ",
 'rows'                          => 'পথালী শাৰী:',
 'columns'                       => 'ঠিয় শাৰী:',
 'searchresultshead'             => 'অনুসন্ধান',
 'resultsperpage'                => 'প্ৰতি পৃষ্ঠা দৰ্শন:',
 'stub-threshold'                => '<a href="#" class="stub">আধাৰ সংযোগ</a> ৰ সৰ্বোচ্চ আকাৰ (বাইটত):',
-'stub-threshold-disabled'       => 'নিস্ক্ৰিয়',
+'stub-threshold-disabled'       => 'নিষ্ক্ৰিয়',
 'recentchangesdays'             => 'শেহতীয়া সাল-সলনিত দেখুৱাব লগা দিন:',
 'recentchangesdays-max'         => 'সৰ্বোচ্চ $1 {{PLURAL:$1|দিন|দিন}}',
 'recentchangescount'            => 'শেহতীয়া সাল-সলনি, ইতিহাস আৰু লগ পৃষ্ঠাত দেখুৱাব লগা সম্পাদনাৰ সংখ্যা:',
 'prefs-help-recentchangescount' => 'ইয়াত শেহতীয়া সাল-সলনি, পৃষ্ঠাৰ ইতিহাস আৰু লগ অন্তৰ্ভুক্ত ।',
 'prefs-help-watchlist-token'    => 'এই ঘৰটো এটা গোপন শব্দ চাবিৰে পূৰণ কৰিলে আপোনাৰ লক্ষ্য-তালিকাৰ বাবে এটা আৰ.এচ.এচ. ফিড তৈয়াৰ হ’ব । এই শব্দচাবি জনা সদস্যই আপোনাৰ লক্ষ্য-তালিকা চাব পাৰিব, সেয়ে এটা সুৰক্ষিত মান ব্যৱহাৰ কৰক ।
 আপুনি ব্যৱহাৰ কৰিব পৰাকৈ এটা যাদৃচ্ছিক মান দিয়া হ’ল: $1',
-'savedprefs'                    => 'à¦\86পà§\8bনাৰ à¦ªà¦\9aন্দসমূহ সাঁচি ৰখা হ’ল।',
+'savedprefs'                    => 'à¦\86পà§\8bনাৰ à¦ªà¦\9bন্দসমূহ সাঁচি ৰখা হ’ল।',
 'timezonelegend'                => 'সময় স্থান:',
 'localtime'                     => 'স্থানীয় সময়:',
 'timezoneuseserverdefault'      => 'ডিফ’ল্ট ৱিকি ($1) ব্যৱহাৰ কৰক',
@@ -1220,7 +1220,7 @@ $1",
 'prefs-reset-intro'             => 'আপুনি এই পৃষ্ঠা ব্যৱহাৰ কৰি আপোনাৰ পছন্দসমূহক চাইটৰ পূৰ্বনিৰ্ধাৰিত ছেটঙলৈ ঘূৰাই নিব পাৰে ।
 এই পৰিৱৰ্তন পিছত সলাব পৰা নাযাব ।',
 'prefs-emailconfirm-label'      => 'ইমেইল নিশ্চিতকৰণ:',
-'prefs-textboxsize'             => 'সমà§\8dপাদনা à§±à¦¿à¦¨্ড’ৰ আকাৰ',
+'prefs-textboxsize'             => 'সমà§\8dপাদনা à§±à¦¿à¦£্ড’ৰ আকাৰ',
 'youremail'                     => 'আপোনাৰ ই-মেইল *',
 'username'                      => 'সদস্যনাম:',
 'uid'                           => 'সদস্য চিহ্ন:',
@@ -1431,7 +1431,7 @@ $1",
 'rcnotefrom'                        => "তলত '''$2''' ৰ পৰা হোৱা ('''$1''' লৈকে) পৰিৱৰ্তন দেখুৱা হৈছে ।",
 'rclistfrom'                        => '$1ৰ পৰা নতুন সালসলনি দেখুৱাওক',
 'rcshowhideminor'                   => '$1 -সংখ্যক নগণ্য সম্পাদনা',
-'rcshowhidebots'                    => 'বট $1',
+'rcshowhidebots'                    => "ব'ট $1",
 'rcshowhideliu'                     => 'প্ৰবিষ্ট সভ্যৰ সাল-সলনি $1',
 'rcshowhideanons'                   => 'বেনামী সদস্য $1',
 'rcshowhidepatr'                    => '$1 নিৰীক্ষিত সম্পাদনা',
@@ -1625,11 +1625,16 @@ URL টোৰ বৈধতা বিচাৰ কৰি পুনৰ চেষ
 'backend-fail-closetemp'     => "অস্থায়ী ফাইল বন্ধ কৰিব পৰা নগ'ল।",
 'backend-fail-read'          => "$1 ফাইলটো পঢ়িব পৰা নগ'ল",
 'backend-fail-create'        => "$1 ফাইলটো সৃষ্টি কৰিব পৰা নগ'ল",
+'backend-fail-maxsize'       => "$1 ফাইলটো সৃষ্টি কৰিব পৰা নগ'ল কিয়নো ইয়াৰ আকাৰ {{PLURAL:$2|$2 বাইটতকৈ|$2 বাইটতকৈ}} বেছি।",
 'backend-fail-readonly'      => 'ষ্ট\'ৰেজ বেক্‌এণ্ড "$1"ক কেৱল পঢ়িব পৰা যায়। ইয়াৰ কাৰণ হ\'ল: "$2"',
 'backend-fail-synced'        => '"$1" ফাইলটো আভ্যন্তৰীণ ষ্ট\'ৰেজ বেক্‌এণ্ডৰ লগত অসঙ্গত অৱস্থাত আছে',
 'backend-fail-connect'       => '"$1" ষ্ট\'ৰেজ বেক্‌এণ্ডৰ লগত সম্পৰ্ক স্থাপন কৰিব পৰা নগ\'ল।',
 'backend-fail-internal'      => 'ষ্ট\'ৰেজ বেক্‌এণ্ড "$1"ত এক অজ্ঞাত ত্ৰুটী ঘটিছে।',
 'backend-fail-contenttype'   => '"$1"ত সাঁচি থ\'বলৈ ফাইলটোৰ সমল প্ৰকাৰ স্থিৰ কৰিব পৰা নগ\'ল।',
+'backend-fail-batchsize'     => "$1টা ফাইল {{PLURAL:$1|কাৰ্যৰ|কাৰ্যৰ}} ষ্ট'ৰেজ বেকএ'ণ্ড দিয়া হৈছে; সীমা হৈছে $2টা {{PLURAL:$2|কাৰ্য|কাৰ্য}}।",
+
+'filejournal-fail-dbconnect' => 'ষ্ট\'ৰেজ বেকএ\'ণ্ড "$1"ৰ বাবে জাৰ্ণাল তথ্যকোষৰ লগত সংযোগ স্থাপন নহ\'ল।',
+'filejournal-fail-dbquery'   => 'ষ্ট\'ৰেজ বেকএ\'ণ্ড "$1"ৰ বাবে জাৰ্ণাল তথ্যকোষ আপডেট কৰিব পৰা নগ\'ল।',
 
 # Lock manager
 'lockmanager-notlocked'        => '"$1" খুলিব পৰা নগ\'ল; ইয়াক বন্ধ কৰা হোৱা নাই।',
@@ -1885,10 +1890,12 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'wantedpages'             => 'কাম্য পৃষ্ঠাসমূহ',
 'wantedpages-badtitle'    => 'ফলাফল তালিকাত অবৈধ শিৰোনামা: $1',
 'wantedfiles'             => 'কাম্য ফাইলসমূহ',
+'wantedfiletext-cat'      => "তলৰ ব্যৱহৃত ফাইলসমূহৰ অস্ত্বিত্ব নাই। বাহিৰা ভঁৰালত থকা অস্তিত্ব থকা ফাইলো তালিকাভুক্ত হৈ থাকিব পাৰে। তেনেকুৱা ফাইল <del>আঁতৰ কৰা হ'ব</del>। তাৰ উপৰিও পৃষ্ঠাত সংলগ্ন থকা অস্তিত্বহীন ফাইলৰ তালিকা [[:$1]]ত দিয়া হৈছে।",
+'wantedfiletext-nocat'    => "তলৰ ব্যৱহৃত ফাইলসমূহৰ অস্ত্বিত্ব নাই। বাহিৰা ভঁৰালত থকা অস্তিত্ব থকা ফাইলো তালিকাভুক্ত হৈ থাকিব পাৰে। তেনেকুৱা ফাইল <del>আঁতৰ কৰা হ'ব</del>।",
 'wantedtemplates'         => 'বিচৰা সাঁচসমূহ',
 'mostlinked'              => 'সৰ্বোচ্চ সংযোজিত পৃষ্ঠাসমূহ',
 'mostlinkedcategories'    => 'সৰ্বোচ্চ সংযোজিত শ্ৰেণীসমূহ',
-'mostlinkedtemplates'     => 'সৰà§\8dবà§\8bà¦\9aà§\8dà¦\9a à¦¸à¦\82যà§\8bà¦\9cিত à¦\9aানà§\87à¦\95à§\80সমূহ',
+'mostlinkedtemplates'     => 'সৰà§\8dবà§\8bà¦\9aà§\8dà¦\9a à¦¸à¦\82যà§\8bà¦\9cিত à¦¸à¦¾à¦\81à¦\9aসমূহ',
 'mostcategories'          => 'সৰ্বোচ্চ শ্ৰেণীসমৃদ্ধ প্ৰবন্ধসমূহ',
 'mostimages'              => 'সৰ্বোচ্চ সংযোজিত ফাইলসমূহ',
 'mostrevisions'           => 'অধিকবাৰ সম্পাদনা কৰা পৃষ্ঠাসমূহ',
@@ -1896,7 +1903,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'prefixindex-namespace'   => 'উপসৰ্গ ($1 namespace) -ৰ সৈতে সকলো পৃষ্ঠা',
 'shortpages'              => 'চুটি পৃষ্ঠাসমূহ',
 'longpages'               => 'দীঘলীয়া পৃষ্ঠাসমূহ',
-'deadendpages'            => 'ডà§\87ড à¦\8fণà§\8dড পৃষ্ঠাসমূহ',
+'deadendpages'            => 'সà¦\82যà§\8bà¦\97বিহà§\80ন পৃষ্ঠাসমূহ',
 'deadendpagestext'        => 'তলৰ পৃষ্ঠাসমূহৰ {{SITENAME}}ৰ কোনো পৃষ্ঠাৰ লগত সংযোগ নাই ।',
 'protectedpages'          => 'সুৰক্ষিত পৃষ্ঠাসমূহ',
 'protectedpages-indef'    => 'কেৱল অনিৰ্দিষ্ট সুৰক্ষা',
@@ -1914,7 +1921,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'newpages'                => 'নতুন পৃষ্ঠা',
 'newpages-username'       => 'সদস্যনাম:',
 'ancientpages'            => 'আটাইতকৈ পুৰণি পৃষ্ঠাসমূহ',
-'move'                    => 'স্থানান্তৰ',
+'move'                    => 'স্থানান্তৰ কৰক',
 'movethispage'            => 'এই পৃষ্ঠাটো স্থানান্তৰিত কৰক',
 'unusedimagestext'        => 'তলৰ ফাইলসমূহ আছে কিন্তু কোনো পৃষ্ঠাৰ অন্তৰ্গত নহয় ।
 অনুগ্ৰহ কৰি মন কৰিব যে প্ৰত্যক্ষ URL থকা কোনো পৃষ্ঠা আন ৱেবচাইটৰ লগত সংযোগ হৈ থাকিব পাৰে, সেয়ে সক্ৰিয়ভাৱে ব্যৱহাৰ হৈ থকা সত্ত্বেও ইয়াত তালিকাভুক্ত হ’ব পাৰে ।',
@@ -1956,7 +1963,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'allinnamespace'    => 'সকলোবোৰ পৃষ্ঠা ($1 নামস্থান)',
 'allnotinnamespace' => 'সকলোবোৰ পৃষ্ঠা ($1 নামস্থানত নথকা)',
 'allpagesprev'      => 'আগৰ',
-'allpagesnext'      => 'পৰবৰ্তী',
+'allpagesnext'      => 'পৰৱৰ্তী',
 'allpagessubmit'    => 'যাওক',
 'allpagesprefix'    => 'এই উপশব্দৰে আৰম্ভ হোৱা পৃষ্ঠা দেখুৱাওক:',
 'allpagesbadtitle'  => 'আপুনি দিয়া পৃষ্ঠাটোৰ শিৰোণামা অবৈধ বা তাত এটা আন্তৰ্ভাষিক বা আন্তৰ্ৱিকি উপসৰ্গ আছে । ইয়াত এক বা ততোধিক বৰ্ণ থাকিব পাৰে যাক শিৰোণামাত ব্যৱহাৰ কৰিব নোৱাৰি ।',
@@ -2000,11 +2007,11 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'activeusers-from'       => 'ইয়াৰে আৰম্ভ হোৱা ব্যৱহাৰকাৰী সকল দেখুৱাওক:',
 'activeusers-hidebots'   => 'বট নেদেখুৱাব',
 'activeusers-hidesysops' => 'প্ৰশাসক নেদেখুৱাব',
-'activeusers-noresult'   => "কোনো সদস্য পোৱা নগ'ল ।",
+'activeusers-noresult'   => "কোনো সদস্য পোৱা নগ'ল।",
 
 # Special:Log/newusers
 'newuserlogpage'     => 'সদস্যৰ সৃষ্টি অভিলেখ',
-'newuserlogpagetext' => 'এইখন এখন সদস্য সৃষ্টিৰ ল’গ ।',
+'newuserlogpagetext' => 'এইখন এখন সদস্য সৃষ্টিৰ ল’গ।',
 
 # Special:ListGroupRights
 'listgrouprights'                      => 'ব্যৱহাৰকাৰী গোটৰ অধিকাৰ',
@@ -2069,8 +2076,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'watchnologin'         => 'প্ৰৱেশ কৰা নাই',
 'watchnologintext'     => 'নিৰীক্ষণ তালিকা পৰিৱৰ্তন কৰিবলৈ আপুনি আগতে [[Special:UserLogin|লগ-ইন]] কৰিব লাগিব ।',
 'addwatch'             => 'লক্ষ্য-তালিকাত অন্তৰ্ভুক্ত কৰক',
-'addedwatchtext'       => 'আপোনাৰ [[Special:Watchlist|লক্ষ্য তালিকাত ]] "[[:$1]]" অন্তৰ্ভুক্তি কৰা হ\'ল 
-ভৱিষà§\8dযতà§\87 à¦\87য়াত à¦¹à§\8bৱা à¦¸à¦¾à¦²-সলনি à¦\86পà§\81নি à¦\86পà§\8bনাৰ à¦²à¦\95à§\8dষà§\8dয à¦¤à¦¾à¦²à¦¿à¦\95াত à¦¦à§\87à¦\96িব, à¦²à¦\97তà§\87 [[Special:RecentChanges|সামà§\8dপà§\8dৰতিà¦\95 à¦¸à¦¾à¦²-সলনিৰ à¦¤à¦¾à¦²à¦¿à¦\95াত]] à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b à¦¶à¦\95à¦\9f à¦\86à¦\96ৰত à¦¦à§\87à¦\96িব à¦¯à¦¾à¦¤à§\87 à¦\86পà§\81নি à¦¸à¦¹à¦\9cà§\87 à¦§à§°à¦¿à¦¬ à¦ªà¦¾à§°à§\87 à¥¤',
+'addedwatchtext'       => "আপোনাৰ [[Special:Watchlist|লক্ষ্য তালিকাত ]] \"[[:\$1]]\" অন্তৰ্ভুক্ত কৰা হ'ল
+ভৱিষà§\8dযতà§\87 à¦\87য়াত à¦¹à§\8bৱা à¦¸à¦¾à¦²-সলনি à¦\86পà§\81নি à¦\86পà§\8bনাৰ à¦²à¦\95à§\8dষà§\8dয à¦¤à¦¾à¦²à¦¿à¦\95াত à¦¦à§\87à¦\96িব, à¦²à¦\97তà§\87 [[Special:RecentChanges|সামà§\8dপà§\8dৰতিà¦\95 à¦¸à¦¾à¦²-সলনিৰ à¦¤à¦¾à¦²à¦¿à¦\95াত]] à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন '''à¦\97াঢ়''' à¦\86à¦\96ৰত à¦¦à§\87à¦\96িব à¦¯à¦¾à¦¤à§\87 à¦\86পà§\81নি à¦¸à¦¹à¦\9cà§\87 à¦§à§°à¦¿à¦¬ à¦ªà¦¾à§°à§\87।",
 'removewatch'          => 'লক্ষ্য-তালিকাৰ পৰা আঁতৰাওক',
 'removedwatchtext'     => '"[[:$1]]" পৃষ্ঠাখন [[Special:Watchlist|আপোনাৰ লক্ষ্য-তালিকা]]ৰ পৰা আতৰোৱা হৈছে ।',
 'watch'                => 'চকু ৰাখক',
@@ -2098,18 +2105,18 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 
 'enotif_mailer'                => '{{SITENAME}} জাননী ই-পত্ৰ প্ৰেৰক',
 'enotif_reset'                 => 'সকলো পৃষ্ঠা পৰিদৰ্শিত বুলি চিহ্নিত কৰক',
-'enotif_newpagetext'           => 'à¦\8fà¦\87à¦\9fà§\8b à¦\8fà¦\95 à¦¨à¦¤à§\81ন à¦ªà§\83ষà§\8dঠা',
+'enotif_newpagetext'           => 'à¦\8fà¦\87à¦\96ন à¦\8fà¦\96ন à¦¨à¦¤à§\81ন à¦ªà§\83ষà§\8dঠা।',
 'enotif_impersonal_salutation' => '{{SITENAME}} সদস্য',
 'changed'                      => 'সলোৱা হ’ল',
 'created'                      => 'সৃষ্টি কৰা হ’ল',
-'enotif_subject'               => '{{SITENAME}} ৰ $PAGETITLE পৃষ্ঠাখন $PAGEEDITOR ৰ দ্বাৰা $CHANGEDORCREATED কৰা হৈছে',
+'enotif_subject'               => '{{SITENAME}}ৰ $PAGETITLE পৃষ্ঠাখন $PAGEEDITORৰ দ্বাৰা $CHANGEDORCREATED',
 'enotif_lastvisited'           => 'আপোনাৰ শেষ পৰিদৰ্শনৰ পিছত হোৱা সকলো সালসলনিৰ বাবে $1 চাওক ।',
 'enotif_lastdiff'              => 'এই পৰিৱৰ্তনটো চাবৰ বাবে $1 চাওক ।',
 'enotif_anon_editor'           => 'বেনামী সদস্য $1',
 'enotif_body'                  => 'প্ৰিয় $WATCHINGUSERNAME,
 
 
-{{SITENAME}}ৰ $PAGETITLE à¦¶à¦¿à§°à§\8bনামাৰ à¦ªà§\83ষà§\8dঠাà¦\9fি $PAGEEDITDATE à¦¤à¦¾à§°à¦¿à¦\96ত $PAGEEDITORà¦\8f $CHANGEDORCREATED à¦\95ৰিà¦\9bà§\87, à¦¸à¦¾à¦®à§\8dপà§\8dৰতিà¦\95 à¦¸à¦\82শà§\8bধনৰ à¦¬à¦¾à¦¬à§\87 $PAGETITLE_URL à¦\9aাà¦\93à¦\95 
+{{SITENAME}}ৰ $PAGETITLE à¦¶à¦¿à§°à§\8bনামাৰ à¦ªà§\83ষà§\8dঠাà¦\96ন $PAGEEDITDATE à¦¤à¦¾à§°à¦¿à¦\96à§\87 $PAGEEDITORৰ à¦¦à§\8dবাৰা $CHANGEDORCREATED। à¦¸à¦¾à¦®à§\8dপà§\8dৰতিà¦\95 à¦¸à¦\82শà§\8bধনৰ à¦¬à¦¾à¦¬à§\87 $PAGETITLE_URL à¦\9aাà¦\93à¦\95
 
 $NEWPAGE
 
@@ -2146,7 +2153,7 @@ $UNWATCHURL
 'exblank'                => 'পৃষ্ঠা খালী আছিল',
 'delete-confirm'         => '"$1" বিলোপ কৰক',
 'delete-legend'          => 'বিলোপ কৰক',
-'historywarning'         => "'''সাবধান:''' à¦\86পà§\81নি à¦¬à¦¿à¦²à§\8bপ à¦\95ৰিব à¦¬à¦¿à¦\9bৰা পৃষ্ঠাখনৰ ইতিহাসত প্ৰায় {{PLURAL:$1|সংস্কৰণ|সংস্কৰণ}} আছে:",
+'historywarning'         => "'''সাৱধান:''' à¦\86পà§\81নি à¦¬à¦¿à¦²à§\8bপ à¦\95ৰিব à¦¬à¦¿à¦\9aৰা পৃষ্ঠাখনৰ ইতিহাসত প্ৰায় {{PLURAL:$1|সংস্কৰণ|সংস্কৰণ}} আছে:",
 'confirmdeletetext'      => 'আপুনি পৃষ্ঠা এটা তাৰ ইতিহাসৰ সৈতে বিলোপ কৰিব ওলাইছে।
 অনুগ্ৰহ কৰি নিশ্চিত কৰক যে এয়া [[{{MediaWiki:Policy-url}}|নীতিসম্মত]]। লগতে আপুনি ইয়াৰ পৰিণাম জানে আৰু আপুনি এয়া কৰিব বিচাৰিছে।',
 'actioncomplete'         => 'কাৰ্য্য সম্পূৰ্ণ',
@@ -2386,7 +2393,7 @@ $1',
 'ipbreason-dropdown'              => '*প্ৰতিবন্ধকৰ সাধাৰণ কাৰণসমূহ
 ** ভুল তথ্য দিয়া
 ** পৃষ্ঠাৰ বিষয়বস্তু আঁতৰাই পেলোৱা
-** à¦\95à§\8bনà§\8b à¦¬à¦¾à¦¹à¦¿à§°à¦¾ à¦\9aাà¦\87তলৈ স্পাম সংযোগ দিয়া
+** à¦\95à§\8bনà§\8b à¦¬à¦¾à¦¹à¦¿à§°à¦¾ à¦\9aাà¦\87à¦\9fলৈ স্পাম সংযোগ দিয়া
 ** পৃষ্ঠাত অৰ্থহীন বিষয়বস্তু প্ৰৱেশ কৰোৱা
 ** ভীতি উদ্ৰেককাৰী আচৰণ/হাৰাশাস্তি
 ** একাধিক একাউণ্টৰ অপব্যৱহাৰ
@@ -2625,6 +2632,7 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 
 পিছৰ ক্ষেত্ৰত আপুনি সংযোগ এটাও ব্যৱহাৰ কৰিব পাৰে, যেনে
 "[[{{MediaWiki:Mainpage}}]]" পৃষ্ঠাৰ কাৰণে [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]',
+'exportall'         => 'সকলো পৃষ্ঠা ৰপ্তানি কৰক',
 'exportcuronly'     => 'কেৱল সাম্প্ৰতিক সংশোধনটোহে অন্তৰ্ভুক্ত কৰক, সম্পূৰ্ণ ইতিহাস নহয় ।',
 'exportnohistory'   => "----
 '''টোকা:''' কৰ্মদক্ষতা-সম্পৰ্কীয় কাৰণত এই প্ৰপত্ৰৰ মাধ্যমেৰে কোনো পৃষ্ঠাৰ সম্পূৰ্ণ ইতিহাস ৰপ্তানি কৰাটো নিষ্ক্ৰিয় কৰা হৈছে।",
@@ -2713,6 +2721,9 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 'import-invalid-interwiki'   => 'নিৰ্ধাৰিত ৱিকিৰ পৰা আমদানি কৰিব নোৱাৰি ।',
 'import-error-edit'          => '"$1" পৃষ্ঠাখন আমদানি কৰা নহ\'ল কাৰণ ইয়াক সম্পাদনা কৰিবলৈ আপোনাৰ অনুমতি নাই।',
 'import-error-create'        => '"$1" পৃষ্ঠাখন আমদানি কৰা নহ\'ল কাৰণ ইয়াক সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই।',
+'import-error-interwiki'     => '"$1" পৃষ্ঠাখন আমদানি কৰা নহ\'ল কাৰণ ইয়াৰ নামটো বাহিৰা সংযোগৰ (আন্তঃৱিকি) বাবে সংৰক্ষিত।',
+'import-error-special'       => '"$1" পৃষ্ঠাখন আমদানি কৰা নহ\'ল কাৰণ ই পৃষ্ঠা অনুমোদন নকৰা এটা বিশেষ নামস্থানৰ অন্তৰ্গত।',
+'import-error-invalid'       => '"$1" পৃষ্ঠাখন আমদানি কৰা নহ\'ল কাৰণ ইয়াৰ নামটো অবৈধ।',
 
 # Import log
 'importlogpage'                    => "আমদানি ল'গ",
@@ -2724,12 +2735,14 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 
 # JavaScriptTest
 'javascripttest'                           => 'জাভাস্ক্ৰিপ্ট পৰীক্ষা।',
+'javascripttest-disabled'                  => 'এই ৱিকিত এই কাৰ্যটো সক্ৰিয় কৰা হোৱা নাই।',
 'javascripttest-title'                     => '$1 পৰীক্ষাসমূহ চলোৱা হৈছে',
 'javascripttest-pagetext-noframework'      => 'এই পৃষ্ঠাখন জাভালিপি পৰীক্ষা চলোৱাৰ বাবে সংৰক্ষিত।',
 'javascripttest-pagetext-unknownframework' => 'অজ্ঞাত সম্পৰীক্ষা ফ্ৰেমৱৰ্ক "$1"।',
 'javascripttest-pagetext-frameworks'       => 'অনুগ্ৰহ কৰি তলৰ যিকোনো এটা সম্পৰীক্ষা ফ্ৰেমৱৰ্ক বাছনি কৰক: $1',
 'javascripttest-pagetext-skins'            => 'পৰীক্ষা কৰিবলৈ আৱৰণ এখন বাছনি কৰক:',
 'javascripttest-qunit-intro'               => 'mediawiki.org-ত [$1 পৰীক্ষা নথিকৰণ] চাওক।',
+'javascripttest-qunit-heading'             => 'মিডিয়াৱিকি জাভাস্ক্ৰিপ্ট QUnit পৰীক্ষা চুট',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage'                 => 'আপোনাৰ সদস্য পৃষ্ঠা',
@@ -3406,7 +3419,7 @@ $5
 'invalidateemail'           => 'ই-মেইল নিশ্চিতকৰণ বাতিল কৰক',
 
 # Scary transclusion
-'scarytranscludedisabled' => '[à¦\86নà§\8dতà¦\83ৱিà¦\95ি à¦\86নà§\8dতà¦\83ভà§\81à¦\95à§\8dতি à¦\85সামৰà§\8dথবান কৰা আছে]',
+'scarytranscludedisabled' => '[à¦\86নà§\8dতà¦\83ৱিà¦\95ি à¦\86নà§\8dতà¦\83ভà§\81à¦\95à§\8dতি à¦¨à¦¿à¦·à§\8dà¦\95à§\8dৰিয় কৰা আছে]',
 'scarytranscludefailed'   => '[$1ৰ বাবে সাঁচ অনা অসফল হৈছে]',
 'scarytranscludetoolong'  => '[URL অত্যাধিক দীঘল]',
 
@@ -3430,8 +3443,8 @@ $5
 'confirm-unwatch-top'    => 'এই পৃষ্ঠাখন আপোনাৰ লক্ষ্য-তালিকাৰ পৰা আঁতৰ কৰা হওক ?',
 
 # Multipage image navigation
-'imgmultipageprev' => 'â\86\90 à¦ªà§\82ৰà§\8dববৰ্তী পৃষ্ঠা',
-'imgmultipagenext' => 'পৰবৰ্তী পৃষ্ঠা →',
+'imgmultipageprev' => 'â\86\90 à¦ªà§\82ৰà§\8dবৱৰ্তী পৃষ্ঠা',
+'imgmultipagenext' => 'পৰৱৰ্তী পৃষ্ঠা →',
 'imgmultigo'       => 'যাওক',
 'imgmultigoto'     => '$1 পৃষ্ঠালৈ যাওক',
 
@@ -3565,7 +3578,7 @@ You can also [[Special:EditWatchlist/raw|edit the raw list]].',
 'specialpages-group-pagetools'   => 'পৃষ্ঠা সা-সঁজুলি',
 'specialpages-group-wiki'        => 'ৱিকি তথ্য আৰু সা-সঁজুলি',
 'specialpages-group-redirects'   => 'পুনৰ্নিৰ্দেশ কৰা বিশেষ পৃষ্ঠাসমূহ',
-'specialpages-group-spam'        => 'সà§\8dপà§\87ম সা-সঁজুলি',
+'specialpages-group-spam'        => 'সà§\8dপাম সা-সঁজুলি',
 
 # Special:BlankPage
 'blankpage'              => 'খালী পৃষ্ঠা',
@@ -3599,8 +3612,8 @@ You can also [[Special:EditWatchlist/raw|edit the raw list]].',
 'compare-selector'            => 'পৃষ্ঠা পুনৰীক্ষন তুলনা কৰক',
 'compare-page1'               => 'পৃষ্ঠা ১',
 'compare-page2'               => 'পৃষ্ঠা ২',
-'compare-rev1'                => 'পà§\81নৰà§\80à¦\95à§\8dষন ১',
-'compare-rev2'                => 'পà§\81নৰà§\80à¦\95à§\8dষন ২',
+'compare-rev1'                => 'পà§\81নৰà§\80à¦\95à§\8dষণ ১',
+'compare-rev2'                => 'পà§\81নৰà§\80à¦\95à§\8dষণ ২',
 'compare-submit'              => 'তুলনা কৰক',
 'compare-invalid-title'       => 'আপুনি নিৰ্ধাৰণ কৰা শিৰোনামাটো অবৈধ ।',
 'compare-title-not-exists'    => 'আপুনি নিৰ্ধাৰণ কৰা ফাইলটোৰ অস্বিত্ব নাই ।',
@@ -3618,11 +3631,11 @@ You can also [[Special:EditWatchlist/raw|edit the raw list]].',
 
 # HTML forms
 'htmlform-invalid-input'       => 'আপোনাৰ কিছুমান ইনপুটৰ লগত সমস্যা হৈছে',
-'htmlform-select-badoption'    => 'à¦\86পà§\81নি à¦§à¦¾à¦¯à§\8dয à¦\95ৰা à¦®à¦¾à¦¨ à¦\89পযà§\81à¦\95à§\8dত à¦¬à¦¿à¦\95লà§\8dপ à¦¨à¦¹à¦¯à¦¼',
-'htmlform-int-invalid'         => 'à¦\85পà§\81নি à¦§à¦¾à¦¯à§\8dয à¦\95ৰা à¦®à¦¾à¦¨ à¦\87নà§\8dà¦\9fà§\87à¦\9cাৰ (integer) à¦¨à¦¹à¦¯à¦¼',
-'htmlform-float-invalid'       => 'à¦\85পà§\81নি à¦§à¦¾à¦¯à§\8dয à¦\95ৰা à¦®à¦¾à¦¨ à¦¸à¦\82à¦\96à§\8dযা à¦¨à¦¹à¦¯à¦¼',
-'htmlform-int-toolow'          => 'à¦\86পà§\81নি à¦§à¦¾à¦¯্য কৰা মান ন্যূনতম $1 তকৈ তলত',
-'htmlform-int-toohigh'         => 'à¦\86পà§\81নি à¦§à¦¾à¦¯্য কৰা মান অধিকতম $1 তকৈ ওপৰত',
+'htmlform-select-badoption'    => 'à¦\86পà§\81নি à¦§à¦¾à§°à§\8dয à¦\95ৰা à¦®à¦¾à¦¨ à¦\89পযà§\81à¦\95à§\8dত à¦¬à¦¿à¦\95লà§\8dপ à¦¨à¦¹à¦¯à¦¼à¥¤',
+'htmlform-int-invalid'         => 'à¦\85পà§\81নি à¦§à¦¾à§°à§\8dয à¦\95ৰা à¦®à¦¾à¦¨ à¦\87নà§\8dà¦\9fà§\87à¦\9cাৰ (integer) à¦¨à¦¹à¦¯à¦¼à¥¤',
+'htmlform-float-invalid'       => 'à¦\85পà§\81নি à¦§à¦¾à§°à§\8dয à¦\95ৰা à¦®à¦¾à¦¨ à¦¸à¦\82à¦\96à§\8dযা à¦¨à¦¹à¦¯à¦¼à¥¤',
+'htmlform-int-toolow'          => 'à¦\86পà§\81নি à¦§à¦¾à§°্য কৰা মান ন্যূনতম $1 তকৈ তলত',
+'htmlform-int-toohigh'         => 'à¦\86পà§\81নি à¦§à¦¾à§°্য কৰা মান অধিকতম $1 তকৈ ওপৰত',
 'htmlform-required'            => 'এই মান আৱশ্যক',
 'htmlform-submit'              => 'দাখিল কৰক',
 'htmlform-reset'               => 'সাল-সলনি বাতিল কৰক',
@@ -3658,15 +3671,15 @@ You can also [[Special:EditWatchlist/raw|edit the raw list]].',
 'logentry-move-move_redir-noredirect' => 'পুনৰ্নিৰ্দেশ নেৰাকৈ এটা পুনৰ্নিৰ্দেশৰ ওপৰেৰে পৃষ্ঠা $3 -ৰ পৰা $4 $1 স্থানান্তৰ কৰা হল',
 'logentry-patrol-patrol'              => "পৃষ্ঠা $3 -ৰ $1 চিহ্নিত সংশোধন $4 নিৰীক্ষণ কৰা হ'ল",
 'logentry-patrol-patrol-auto'         => "পৃষ্ঠা $3 -ৰ $1 চিহ্নিত সংশোধন $4 স্বচালিতভাৱে নিৰীক্ষণ কৰা হ'ল",
-'logentry-newusers-newusers'          => '$1  -এ সৃষ্টি কৰিলে এটা ব্যৱহাৰকাৰী একাউন্ট',
-'logentry-newusers-create'            => '$1 -এ সৃষ্টি কৰিলে এটা ব্যৱহাৰকাৰী একাউন্ট',
-'logentry-newusers-create2'           => '$1 সৃষ্টি কৰিলে এটা ব্যৱহাৰকাৰী একাউন্ট $3',
-'logentry-newusers-autocreate'        => 'à¦\8fà¦\95াà¦\89নà§\8dà¦\9f $1 -à¦\95 à¦¸à§\8dবà¦\9aালিতভাৱে সৃষ্টি কৰা হৈছিল',
+'logentry-newusers-newusers'          => '$1-এ এটা ব্যৱহাৰকাৰী একাউণ্ট সৃষ্টি কৰিলে',
+'logentry-newusers-create'            => '$1-এ এটা ব্যৱহাৰকাৰী একাউণ্ট সৃষ্টি কৰিলে',
+'logentry-newusers-create2'           => '$1-এ এটা ব্যৱহাৰকাৰী একাউণ্ট $3 সৃষ্টি কৰিলে',
+'logentry-newusers-autocreate'        => 'à¦\8fà¦\95াà¦\89ণà§\8dà¦\9f $1-à¦\95 à¦¸à§\8dবয়à¦\82à¦\95à§\8dৰিয়ভাৱে সৃষ্টি কৰা হৈছিল',
 'newuserlog-byemail'                  => 'গুপ্তশব্দ ই-মেইল কৰি পঠোৱা হৈছে',
 
 # Feedback
-'feedback-bugornote' => 'যদি à¦\86পà§\81নি à¦\8fà¦\9fা à¦\95াৰিà¦\95ৰà§\80 à¦¸à¦®à¦¸à§\8dযাৰ à¦¬à¦¿à§±à§°à¦£ à¦¦à¦¿à¦¬à¦²à§\87 à¦ªà§\8dৰসà§\8dতà§\81ত à¦\85নà§\81à¦\97à§\8dৰহ à¦\95ৰি [$1 à¦\8fà¦\9fা à¦¬à¦¾à¦\97 à¦¸à¦\82বাদন কৰক]।
-নহলে, আপুনি তলৰ সহজ ফৰ্ম ব্যৱহাৰ কৰিব পাৰিব। আপোনাৰ মন্তব্য পৃষ্ঠা "[$3 $2]" -লে যোগ কৰা হব, আপোনাৰ ব্যৱহাৰকাৰীনাম আৰু আপুনি ব্যৱহাৰ কৰা ব্ৰাউছাৰৰ সৈতে।',
+'feedback-bugornote' => 'যদি à¦\86পà§\81নি à¦\8fà¦\9fা à¦\95াৰিà¦\95ৰà§\80 à¦¸à¦®à¦¸à§\8dযাৰ à¦¬à¦¿à§±à§°à¦£ à¦¦à¦¿à¦¬à¦²à§\88 à¦ªà§\8dৰসà§\8dতà§\81ত, à¦\85নà§\81à¦\97à§\8dৰহ à¦\95ৰি [$1 à¦\8fà¦\9fা à¦¬à¦¾à¦\97 à§°à¦¿à¦ª\'ৰà§\8dà¦\9f কৰক]।
+নহ\'লে আপুনি তলৰ সহজ ফৰ্ম ব্যৱহাৰ কৰিব পাৰিব। আপোনাৰ মন্তব্য আপোনাৰ সদস্যনাম আৰু আপুনি ব্যৱহাৰ কৰা ব্ৰাউজাৰৰ সৈতে "[$3 $2]" -পৃষ্ঠাত যোগ কৰা হ\'ব, ।',
 'feedback-subject'   => 'বিষয়:',
 'feedback-message'   => 'বাৰ্তা:',
 'feedback-cancel'    => 'বাতিল কৰক',
@@ -3682,6 +3695,10 @@ You can also [[Special:EditWatchlist/raw|edit the raw list]].',
 
 # API errors
 'api-error-badaccess-groups'              => "এই ৱিকিত ফাইল আপল'ড কৰিবলৈ আপোনাৰ অনুমতি নাই।",
+'api-error-badtoken'                      => 'আভ্যন্তৰীণ ত্ৰুটি: বেয়া টোকেন।',
+'api-error-copyuploaddisabled'            => "ইউ আৰ এল-ৰ মাধ্যমেৰে আপল'ড কৰাটো এই চাৰ্ভাৰত নিষ্ক্ৰিয় কৰা হৈছে।",
+'api-error-duplicate'                     => 'এই চাইটত একে বিষয়বস্তুৰ {{PLURAL:$1|[$2 আন এটা ফাইল]|[$2 আন কিছুমান ফাইল]}} ইতিমধ্যেই আছে।',
+'api-error-duplicate-archive'             => 'এই চাইটত একে বিষয়বস্তুৰ {{PLURAL:$1|[$2 আন এটা ফাইল]|[$2 আন কিছুমান ফাইল]}} ইতিমধ্যেই আছিল, কিন্তু {{PLURAL:$1|সেইটো|সেইবোৰ}} বিলোপ কৰা হৈছে।',
 'api-error-duplicate-archive-popup-title' => 'প্ৰতিলিপি {{PLURAL:$1|ফাইল|ফাইল}} যোনকেইটা ইতিমধ্যে মচা হৈছে।',
 'api-error-duplicate-popup-title'         => 'প্ৰতিলিপি {{PLURAL:$1|ফাইল|ফাইল}}।',
 'api-error-empty-file'                    => 'আপুনি দাখিল কৰা ফাইলখন খালী ।',
@@ -3691,8 +3708,21 @@ You can also [[Special:EditWatchlist/raw|edit the raw list]].',
 'api-error-filename-tooshort'             => 'ফাইলৰ নামটো অতি চুটি।',
 'api-error-filetype-banned'               => 'এই ধৰণৰ ফাইল নিষেধ ।',
 'api-error-filetype-missing'              => 'ফাইলনামটোত এক্সটেন্‌ছন নাই।',
+'api-error-hookaborted'                   => 'আপুনি কৰিব বিচৰা সালসলনি এটা এক্সটেনচনৰ দ্বাৰা বাতিল কৰা হৈছে।',
+'api-error-http'                          => "আভ্যন্তৰীণ ত্ৰুটি: চাৰ্ভাৰৰ লগত সংযোগ স্থাপন নহ'ল।",
 'api-error-illegal-filename'              => 'ফাইলৰ এই নামটো গ্ৰহণযোগ্য নহয় ।',
+'api-error-internal-error'                => "আভ্যন্তৰীণ ত্ৰুটি: এই ৱিকিত আপোনাৰ আপল'ড প্ৰক্ৰিয়া সমাপনত কিবা সমস্যা হৈছে।",
+'api-error-invalid-file-key'              => "আভ্যন্তৰীণ ত্ৰুটি: অস্থায়ী ভঁৰালত ফাইলটো পোৱা নগ'ল।",
+'api-error-missingparam'                  => 'আভ্যন্তৰীণ ত্ৰুটি: অনুৰোধত পেৰামিটাৰৰ কিবা সমস্যা ৰৈছে।',
+'api-error-missingresult'                 => "আভ্যন্তৰীণ ত্ৰুটি: অনুলিপি সফল হৈছেনে নাই তাক নিশ্চিত কৰিব পৰা নগ'ল।",
 'api-error-mustbeloggedin'                => "ফাইল আপল'ড কৰিবলৈ আপুনি লগ্‌ ইন্‌ কৰিব লাগিব।",
+'api-error-mustbeposted'                  => 'আভ্যন্তৰীণ ত্ৰুটি: এই অনুৰোধত HTTP POST প্ৰয়োজন।',
+'api-error-noimageinfo'                   => "আপল'ড সফল হৈছে, কিন্তু চাৰ্ভাৰে ফাইলটোৰ সম্পৰ্কে কোনো তথ্য প্ৰদান কৰা নাই।",
+'api-error-nomodule'                      => "আভ্যন্তৰীণ ত্ৰুটি: কোনো আপল'ড মডিউল ঠিক কৰা হোৱা নাই।",
+'api-error-ok-but-empty'                  => 'আভ্যন্তৰীণ ত্ৰুটি: চাৰ্ভাৰে কোনো সঁহাৰি জনোৱা নাই।',
+'api-error-overwrite'                     => 'এতিয়া থকা ফাইলৰ ওপৰত লিখা নিষেধ।',
+'api-error-stashfailed'                   => 'আভ্যন্তৰীণ ত্ৰুটি: অস্থায়ী ফাইল সাঁচি ৰখাত চাৰ্ভাৰ অসমৰ্থ হৈছে।',
+'api-error-timeout'                       => 'অশা কৰা সময়ৰ ভিতৰত চাৰ্ভাৰটোৱে সঁহাৰি নজনালে।',
 'api-error-unclassified'                  => 'এক অজ্ঞাত সমস্যাই দেখা দিছে।',
 'api-error-unknown-code'                  => 'অজ্ঞাত সমস্যা: "$1"।',
 'api-error-unknown-error'                 => "আভ্যন্তৰীণ ত্ৰুটি: আপোনাৰ ফাইলটো আপল'ড কৰাত কিবা সমস্যা হৈছে।",
index cf3d105..5be3e98 100644 (file)
@@ -446,6 +446,9 @@ $2',
 'ns-specialprotected'  => 'Les páxines especiales nun se puen editar.',
 'titleprotected'       => "Esti títulu foi protexíu de la so creación por [[User:$1|$1]].
 El motivu conseñáu ye ''$2''.",
+'filereadonlyerror'    => "Nun se pudo camudar el ficheru «$1» porque l'almacén de ficheros «$2» ta en mou de sólo llectura.
+
+El motivu dau ye «''$3''».",
 
 # Virus scanner
 'virus-badscanner'     => "Error de configuración: escáner de virus desconocíu: ''$1''",
@@ -1589,6 +1592,7 @@ Si'l problema persiste, contauta con un [[Special:ListUsers/sysop|alministrador]
 'backend-fail-closetemp'     => 'Nun se pudo zarrar el ficheru temporal.',
 'backend-fail-read'          => 'Nun se pudo lleer el ficheru $1.',
 'backend-fail-create'        => 'Nun se pudo crear el ficheru $1.',
+'backend-fail-maxsize'       => 'Nun se pudo crear el ficheru  $1  porque ye mayor de {{PLURAL:$2|$2 byte|$2 bytes}}.',
 'backend-fail-readonly'      => 'Nesti momentu el motor d\'almacenamientu "$1" ta en mou de sólo llectura. El motivu dau foi: "$2"',
 'backend-fail-synced'        => 'El ficheru "$1" ta nún estáu inconsistente colos motores d\'almacenamientu internos',
 'backend-fail-connect'       => 'Nun se pudo coneutar col motor d\'almacenamientu "$1".',
@@ -1596,6 +1600,9 @@ Si'l problema persiste, contauta con un [[Special:ListUsers/sysop|alministrador]
 'backend-fail-contenttype'   => 'Non se pudo determinar la triba de conteníu de ficheru a guardar en "$1".',
 'backend-fail-batchsize'     => "El motor d'almacenamientu dio un llote de $1 {{PLURAL:$1|operación|operaciones}} en ficheros; el llímite ye de $2 {{PLURAL:$2|operación|operaciones}}.",
 
+'filejournal-fail-dbconnect' => 'Nun se pudo coneutar cola base de datos del diariu pal sofitu d\'almacenamientu "$1".',
+'filejournal-fail-dbquery'   => 'Nun se pudo anovar la base de datos del diariu pal sofitu d\'almacenamientu "$1".',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Nun se pudo desbloquiar "$1"; nun ta bloquiáu.',
 'lockmanager-fail-closelock'   => 'Nun se pudo zarrar el ficheru de bloquéu pa "$1".',
@@ -1922,6 +1929,11 @@ Pues filtrar la visualización seleicionando una mena de rexistru, el nome d'usu
 'allpagesbadtitle'  => "El títulu dau a esta páxina nun yera válidu o tenía un prefixu d'enllaz interllingua o interwiki. Pue contener ún o más carauteres que nun se puen usar nos títulos.",
 'allpages-bad-ns'   => '{{SITENAME}} nun tien l\'espaciu de nomes "$1".',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => "Tas viendo una versión en caché d'esta páxina, que pue llegar a tener $1 d'antigüedá.",
+'cachedspecial-viewing-cached-ts'  => "Tas viendo una versión en caché d'esta páxina, que pue nun tar anovada dafechu.",
+'cachedspecial-refresh-now'        => 'Ver la más nueva.',
+
 # Special:Categories
 'categories'                    => 'Categoríes',
 'categoriespagetext'            => "{{PLURAL:$1|La categoría darréu contién|Les categoríes darréu contienen}} páxines o ficheros multimedia.
@@ -3713,4 +3725,14 @@ D\'otra miente, pues usar el formulariu cenciellu d\'abaxo. El to comentariu apa
 'api-error-uploaddisabled'                => 'Les xubíes tan desactivaes nesta wiki.',
 'api-error-verification-error'            => 'Esti ficheru pudiera tar corrompíu, o tien una estensión incorreuta.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL: $1|segundu|segundos}}',
+'duration-minutes'   => '$1 {{PLURAL: $1|minutu|minutos}}',
+'duration-hours'     => '$1 {{PLURAL: $1|hora|hores}}',
+'duration-days'      => '$1 {{PLURAL: $1|día|díes}}',
+'duration-weeks'     => '$1 {{PLURAL: $1|selmana|selmanes}}',
+'duration-years'     => '$1 {{PLURAL: $1|añu|años}}',
+'duration-decades'   => '$1 {{PLURAL:$1|década|décades}}',
+'duration-centuries' => '$1 {{PLURAL:$1|sieglu|sieglos}}',
+
 );
index a088fde..64f0fd3 100644 (file)
@@ -1370,16 +1370,19 @@ $1',
 'uploadstash-refresh' => 'Fayl siyahısını yenilə',
 
 # img_auth script messages
-'img-auth-accessdenied' => 'Giriş qadağandır',
-'img-auth-nofile'       => 'Fayl "$1" mövcud deyil.',
-'img-auth-streaming'    => '"$1" axını.',
-'img-auth-noread'       => 'İstifadəçinin "$1"i oxumaq hüququ yoxdur.',
+'img-auth-accessdenied'     => 'Giriş qadağandır',
+'img-auth-nofile'           => 'Fayl "$1" mövcud deyil.',
+'img-auth-streaming'        => '"$1" axını.',
+'img-auth-noread'           => 'İstifadəçinin "$1"i oxumaq hüququ yoxdur.',
+'img-auth-bad-query-string' => 'URL ünvanda yanlış axtarış sətri var.',
 
 # HTTP errors
 'http-invalid-url'      => 'Səhv URL: $1',
 'http-read-error'       => 'HTTP oxuma xətası',
 'http-timed-out'        => 'HTTP istəyinin vaxtı bitdi.',
+'http-curl-error'       => 'URL-ə yanlış müraciət: $1',
 'http-host-unreachable' => 'URL-ə çatmaq olmadı.',
+'http-bad-status'       => 'HTTP müraciətin yoxlanması zamanı problem aşkarlanmışdır: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6'  => 'URL-ə çatmaq olmadı',
@@ -1427,6 +1430,7 @@ $1',
 'sharedupload'                      => 'Bu fayl $1-dandır və ola bilsin ki, başqa layihələrdə də istifadə edilir.',
 'uploadnewversion-linktext'         => 'Bu faylın yeni versiyasını yüklə',
 'shared-repo-from'                  => '$1-dən',
+'shared-repo'                       => 'ümumi anbar',
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
 
 # File reversion
index 0e0d10b..3a8d002 100644 (file)
@@ -415,7 +415,9 @@ Hapót: $2',
 'protectedpagetext'    => 'An pahinang ini pigsará tangarig pogolon an paghirá.',
 'viewsourcetext'       => 'Pwede mong hilingón asin arógon an ginikanan kan pahinang ini:',
 'protectedinterface'   => 'An pahinang ini nagtatao nin interface para sa software, asin sarado tangarig mapondo an pag-abuso.',
-'editinginterface'     => "'''Patanid:''' An pighihira mong pahina piggagamit para sa tekstong interface kan software. An mga pagbabàgo sa pahinang ini makakaapektar sa hitsura kan interface nin parágamit kan mga ibang parágamit.",
+'editinginterface'     => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
+Changes to this page will affect the appearance of the user interface for other users.
+For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
 'sqlhidden'            => '(nakatagô an hapót nin SQL)',
 'cascadeprotected'     => 'Pinoprotehirán ining páhina sa mga paghirá, ta sarô ini sa mga minasunod na {{PLURAL:$1|páhina|mga páhina}} na pinoprotehiran kan opsyón na "katarata" na nakabuká:
 $2',
index 02671da..13c03a3 100644 (file)
@@ -383,7 +383,7 @@ $messages = array(
 'noindex-category'               => 'Неіндэксаваныя старонкі',
 'broken-file-category'           => 'Старонкі зь няслушнымі спасылкамі на файлы',
 
-'about'         => 'Ð\9fÑ\80а',
+'about'         => 'Ð\90пÑ\96Ñ\81анÑ\8cне',
 'article'       => 'Старонка зьместу',
 'newwindow'     => '(адкрываецца ў новым акне)',
 'cancel'        => 'Скасаваць',
@@ -639,6 +639,9 @@ $2',
 'ns-specialprotected'  => 'Немагчыма рэдагаваць спэцыяльныя старонкі.',
 'titleprotected'       => "Стварэньне старонкі з такой назвай было забароненае ўдзельнікам [[User:$1|$1]].
 Прычына забароны: ''$2''.",
+'filereadonlyerror'    => 'Немагчыма зьмяніць файл «$1», бо файлавае сховішча «$2» знаходзіцца ў рэжыме толькі для чытаньня
+
+Пазначаная прычына: «$3».',
 
 # Virus scanner
 'virus-badscanner'     => "Няслушная канфігурацыя: невядомы антывірусны сканэр: ''$1''",
@@ -1745,6 +1748,7 @@ $1',
 'backend-fail-closetemp'     => 'Немагчыма закрыць часовы файл.',
 'backend-fail-read'          => 'Немагчыма прачытаць файл $1.',
 'backend-fail-create'        => 'Немагчыма стварыць файл $1.',
+'backend-fail-maxsize'       => 'Не атрымалася стварыць файл $1, бо яго памер перавышае {{PLURAL:$2|$2 байт|$2 байта|$2 байтаў}}',
 'backend-fail-readonly'      => 'Сэрвэр сховішча «$1» у рэжыме толькі чытаньня. Прычына: «$2»',
 'backend-fail-synced'        => 'Стан файла «$1» адрозьніваецца ад стану на ўнутраным сэрвэры сховішча',
 'backend-fail-connect'       => 'Немагчыма далучыцца да сэрвэра сховішча «$1».',
@@ -1752,6 +1756,9 @@ $1',
 'backend-fail-contenttype'   => 'Немагчыма вызначыць тып зьместу файла, які мусіць быць захаваны ў «$1».',
 'backend-fail-batchsize'     => 'Cховішча атрымала блёк з $1 {{PLURAL:$1|файлавай апэрацыі|файлавых апэрацыяў|файлавых апэрацыяў}}; абмежаваньне складае $2 {{PLURAL:$2|апэрацыю|апэрацыі|апэрацыяў}}.',
 
+'filejournal-fail-dbconnect' => 'Не атрымалася злучыцца з базай зьвестак журнала для сховішча «$1».',
+'filejournal-fail-dbquery'   => 'Не атрымалася абнавіць базу зьвестак журнала для сховішча «$1».',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Немагчыма разблякаваць «$1», які не заблякаваны.',
 'lockmanager-fail-closelock'   => 'Немагчыма закрыць файл блякаваньня для «$1».',
@@ -2084,6 +2091,11 @@ $1',
 'allpagesbadtitle'  => 'Пададзеная назва старонкі была няслушная ці пачыналася зь міжмоўнай ці міжвікі спасылкі. Яна яшчэ можа ўтрымліваць сымбалі, якія ня могуць ужывацца ў назвах.',
 'allpages-bad-ns'   => '{{SITENAME}} ня мае прасторы назваў «$1».',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Вы праглядаеце закэшаваную вэрсію старонкі, якая магла быць абноўленая $1 таму.',
+'cachedspecial-viewing-cached-ts'  => 'Вы праглядаеце закэшаваную вэрсію старонкі, якая можа быць неактуальнай.',
+'cachedspecial-refresh-now'        => 'Пабачыць апошнюю вэрсію.',
+
 # Special:Categories
 'categories'                    => 'Катэгорыі',
 'categoriespagetext'            => '{{PLURAL:$1|Наступная катэгорыя зьмяшчае|Наступныя катэгорыі зьмяшчаюць}} старонкі і/альбо мэдыяфайлы.
@@ -2331,7 +2343,7 @@ $UNWATCHURL
 'protectexpiry'               => 'Тэрмін:',
 'protect_expiry_invalid'      => 'Няслушны час сканчэньня абароны.',
 'protect_expiry_old'          => 'Тэрмін абароны прайшоў.',
-'protect-unchain-permissions' => 'Ð\94азволÑ\96ць дадатковыя налады абароны',
+'protect-unchain-permissions' => 'Ð\92Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82оÑ\9eваць дадатковыя налады абароны',
 'protect-text'                => "Тут можна паглядзець і зьмяніць узровень абароны старонкі '''$1'''.",
 'protect-locked-blocked'      => "Вы ня можаце зьмяняць узровень абароны, пакуль Вы заблякаваны.
 Цяперашнія налады для старонкі '''$1''':",
@@ -3842,4 +3854,15 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'api-error-uploaddisabled'                => 'Загрузка ў гэтую вікі адключаная.',
 'api-error-verification-error'            => 'Гэты файл можа быць пашкоджаны, ці мае няслушнае пашырэньне.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|сэкунда|сэкунды|сэкундаў}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|хвіліна|хвіліны|хвілінаў}}',
+'duration-hours'     => '$1 {{PLURAL:$1|гадзіна|гадзіны|гадзінаў}}',
+'duration-days'      => '$1 {{PLURAL:$1|дзень|дні|дзён}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|тыдзень|тыдні|тыдняў}}',
+'duration-years'     => '$1 {{PLURAL:$1|год|гады|гадоў}}',
+'duration-decades'   => '$1 {{PLURAL:$1|дзесяцігодзьдзе|дзесяцігодзьдзі|дзесяцігодзьдзяў}}',
+'duration-centuries' => '$1 {{PLURAL:$1|стагодзьдзе|стагодзьдзі|стагодзьдзяў}}',
+'duration-millennia' => '$1 {{PLURAL:$1|тысячагодзьдзе|тысячагодзьдзі|тысячагодзьдзяў}}',
+
 );
index b860859..99d6b22 100644 (file)
@@ -3590,6 +3590,7 @@ MediaWiki се разпространява с надеждата, че ще б
 'logentry-suppress-revision-legacy' => '$1 тайно промени видимостта на версиите на страница $3',
 'revdelete-restricted'              => 'добавени ограничения за администраторите',
 'revdelete-unrestricted'            => 'премахнати ограничения за администраторите',
+'logentry-move-move_redir'          => '$1 премести страницата $3 като $4 (върху пренасочване)',
 'logentry-patrol-patrol'            => '$1 отбеляза като патрулирана версия $4 на страницата „$3“',
 'logentry-patrol-patrol-auto'       => '$1 автоматично отбеляза като патрулирана версия $4 на страницата $3',
 'logentry-newusers-newusers'        => '$1 създаде потребителска сметка',
index ee2e7b9..8013195 100644 (file)
@@ -80,7 +80,7 @@ $messages = array(
 'tog-enotifusertalkpages'     => 'Surili ulun amun tungkaran pamandiran ulun baubah',
 'tog-enotifminoredits'        => 'Kirimi ulun sur-él jua amun ada babakan sapalih matan tungkaran-tungkaran',
 'tog-enotifrevealaddr'        => 'Tampaiakan alamat sur-él ulun pada sur-él pamadahan',
-'tog-shownumberswatching'     => 'Tampaiakan barapa papamuruk nang maitihi',
+'tog-shownumberswatching'     => 'Tampaiakan barapa pamakai nang maitihi',
 'tog-oldsig'                  => 'Tandateken nang sudah ada:',
 'tog-fancysig'                => 'Tapsirakan tandatangan sawagai naskah wiki (kada batautan utumatis)',
 'tog-externaleditor'          => 'Puruk pambabak luar sawagai default (hagan nang harat haja, musti ada setélan istimiwa pada komputer Pian.[//www.mediawiki.org/wiki/Manual:External_editors More information.])',
@@ -91,10 +91,10 @@ $messages = array(
 'tog-watchlisthideown'        => 'Sungkupakan babakan ulun di daptar itihan',
 'tog-watchlisthidebots'       => 'Sungkupakan babakan bot di daptar itihan',
 'tog-watchlisthideminor'      => 'Sungkupakan babakan sapalih di daptar itihan',
-'tog-watchlisthideliu'        => 'Sungkupakan babakan pamuruk babuat log di daptar itihan',
-'tog-watchlisthideanons'      => 'Sungkupakan babakan pamuruk kada bangaran di daptar itihan',
+'tog-watchlisthideliu'        => 'Sungkupakan babakan pamakai babuat log di daptar itihan',
+'tog-watchlisthideanons'      => 'Sungkupakan babakan pamakai kada bangaran di daptar itihan',
 'tog-watchlisthidepatrolled'  => 'Sungkupakan babakan taawasi di daptar itihan',
-'tog-ccmeonemails'            => 'Surili ulun salinan susuril nang ulun kirim ka pamuruk lain',
+'tog-ccmeonemails'            => 'Surili ulun salinan suril nang ulun kirim ka pamakai lain',
 'tog-diffonly'                => 'Kada usah manampaiakan isi tungkaran di bawah balain',
 'tog-showhiddencats'          => 'Tampaiakan tutumbung tasungkup',
 'tog-norollbackdiff'          => 'Kada usah manampaiakan lainan imbah mambulikakan',
@@ -127,7 +127,7 @@ $messages = array(
 'sat'           => 'Sap',
 'january'       => 'Januari',
 'february'      => 'Pibuari',
-'march'         => 'Marat',
+'march'         => 'Marit',
 'april'         => 'April',
 'may_long'      => 'Mai',
 'june'          => 'Juni',
@@ -258,7 +258,7 @@ $messages = array(
 'talk'              => 'Pamandiran',
 'views'             => 'Titiringan',
 'toolbox'           => 'Wadah pakakas',
-'userpage'          => 'Tiringi tungkaran pamuruk',
+'userpage'          => 'Tiringi tungkaran pamakai',
 'projectpage'       => 'Tiringi tungkaran rangka gawian',
 'imagepage'         => 'Tiringi tungkaran barakas',
 'mediawikipage'     => 'Tiringi tungkaran pasan sistim',
@@ -275,11 +275,11 @@ $messages = array(
 'jumpto'            => 'Malacung ka',
 'jumptonavigation'  => 'napigasi',
 'jumptosearch'      => 'gagai',
-'view-pool-error'   => 'Ampuni, server lagi limpuar kabaratan wayah ini.
-Kabanyakan pamuruk nang handak maniringi tungkaran ini.
-Muhun hadangi ha sapandang sabalum Pian cubai pulang maungkai tungkaran ini.
+'view-pool-error'   => "Ampuni, server lagi limpuar kabaratan wayah ini.
+Kabanyakan pamakai nang handak maniringi tungkaran ini.
+Muhun hadangi ha' sapandang sabalum Pian cubai pulang maungkai tungkaran ini.
 
-$1',
+$1",
 'pool-timeout'      => 'Habis waktu mahadangi gasan tasunduk',
 'pool-queuefull'    => 'Antrian hibak',
 'pool-errorunknown' => 'Kada tahu napa nang salah',
@@ -306,7 +306,7 @@ $1',
 
 'badaccess'        => 'Parijinan tasalah',
 'badaccess-group0' => 'Pian kadada ijin hagan malakuakan nang Pian mintai.',
-'badaccess-groups' => 'Tindakan nang Pian mintai dibatasi hagan pamuruk dalam {{PLURAL:$2|galambang|salah asa matan galambang}}: $1.',
+'badaccess-groups' => 'Tindakan nang Pian mintai diwatasi hagan pamakai dalam {{PLURAL:$2|galambang|salah asa matan galambang}}: $1.',
 
 'versionrequired'     => 'Parlu MediaWiki mudil $1',
 'versionrequiredtext' => 'MediaWiki mudil $1 diparluakan hagan mamuruk tungkaran ini.
@@ -345,7 +345,7 @@ Lihati [[Special:Version|Tungkaran mudil]]',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main'      => 'Tungkaran',
-'nstab-user'      => 'Pamuruk',
+'nstab-user'      => 'Pamakai',
 'nstab-media'     => 'Média',
 'nstab-special'   => 'Tungkaran istimiwa',
 'nstab-project'   => 'Tungkaran rangka gawian',
@@ -427,115 +427,115 @@ Muhun cubai pulang dalam babarapa minit.',
 'viewyourtext'         => "Pian kawa maniringi wan salain asalmula matan '''babakan pian''' ka tungkaran ngini:",
 'protectedinterface'   => 'Tungkaran ini manyadiakan naskah antarmuha gasan parangkat lunak, wan dilindungi hagan mancagah tasalah puruk.',
 'editinginterface'     => "'''Paringatan:''' Pian mambabak sabuah tungkaran nang dipuruk hagan manyadiakan naskah antarmuha gasan parangkat lunak.
-Parubahan ka tungkaran ini akan bapangaruh matan tampaian antarmuha gasan pamuruk lain.
+Parubahan ka tungkaran ini akan bapangaruh matan tampaian antarmuha gasan pamakai lain.
 Gasan tarjamahan, muhun puruk [//translatewiki.net/wiki/Main_Page?setlang=bjn translatewiki.net], rangka gawian palokalan MediaWiki.",
 'sqlhidden'            => '(Parmintaan SQL disungkupakan)',
 'cascadeprotected'     => 'Tungkaran ini sudah dilindungi matan pambabakan, marga nangini tamasuk dalam {{PLURAL:$1|tungkaran|tutungkaran}} dudi nang dilindungi "barénténg": $2',
 'namespaceprotected'   => "Pian kada baisi ijin hagan mambabak tutungkaran dalam ngaran kamar '''$1'''.",
-'customcssprotected'   => 'Pian kada baisi ijin mambabak tungkaran CSS ngini, karana ngini baisi setelan paribadi pamuruk lain.',
-'customjsprotected'    => 'Pian kada baisi ijin mambabak tungkaran JavaScript ngini, karana ngini baisi setelan paribadi pamuruk lain.',
-'ns-specialprotected'  => 'Tungkaran istimiwa kada kawa dibabak',
+'customcssprotected'   => 'Pian kada baisi ijin mambabak tungkaran CSS ngini, karana ngini baisi setelan paribadi pamakai lain.',
+'customjsprotected'    => 'Pian kada baisi ijin mambabak tungkaran JavaScript ngini, karana ngini baisi setelan paribadi pamakai lain.',
+'ns-specialprotected'  => 'Tungkaran istimiwa kada kawa dibabak.',
 'titleprotected'       => "Judul ini dilindungi matan paulahan ulih [[User:$1|$1]].
 Alasan nang dibariakan adalah ''$2''.",
 
 # Virus scanner
 'virus-badscanner'     => "Konpigurasi buruk: pamindai virus kada dipinandui: ''$1''",
-'virus-scanfailed'     => 'Pamindaian kada bakulihan (kudi $1)',
+'virus-scanfailed'     => 'Pamindaian gagal (kudi $1)',
 'virus-unknownscanner' => 'Antivirus kada dipinandui:',
 
 # Login and logout pages
 'logouttext'                 => "'''Pian parhatan ini sudah kaluar log.'''
 
-Pian kawa manyambung hagan mamuruk {{SITENAME}} kada bangaran, atawa Pian kawa [[Special:UserLogin|babuat log pulang]] sawagai pamuruk nang sama atawa sawagai pamuruk balain.
+Pian kawa manyambung hagan mangguna'akan {{SITENAME}} kada bangaran, atawa Pian kawa [[Special:UserLogin|babuat log pulang]] sawagai pamakai nang sama atawa sawagai pamakai balain.
 Catatan bahwasa babarapa tungkaran pinanya masih ha tarus manampaiakan Pian masih babuat log, sampai Pian mahabisakan timbuluk panjalajah web Pian.",
 'welcomecreation'            => '==Salamat datang, $1!==
 Akun Pian sudah diulah.
-Jangan kada ingat hagan maubah [[Special:Preferences|preferensi {{SITENAME}}]] Pian.',
-'yourname'                   => 'Ngaran pamuruk',
+Jangan kada ingat hagan maubah [[Special:Preferences|kakatujuan {{SITENAME}}]] Pian.',
+'yourname'                   => 'Ngaran pamakai:',
 'yourpassword'               => 'Katasunduk:',
 'yourpasswordagain'          => 'Katik pulang katasunduk:',
-'remembermypassword'         => 'Ingatakan log babuat ulun dalam komputer ini (salawas $1 {{PLURAL:$1|hari|hari}})',
-'securelogin-stick-https'    => 'Bagana tasambung awan HTTPS imbah babuat-log',
-'yourdomainname'             => 'Dumain Pian:',
+'remembermypassword'         => 'Ingatakan log babuat ulun dalam komputer naya (salawas $1 {{PLURAL:$1|hari|hari}})',
+'securelogin-stick-https'    => 'Tatap tasambung awan HTTPS imbah babuat-log',
+'yourdomainname'             => 'Domain Pian:',
 'externaldberror'            => 'Ada kasalahan apakah kacucukan basis data atawa Pian kada bulih mamutakhirakan akun luar.',
 'login'                      => 'Babuat',
 'nav-login-createaccount'    => 'Babuat log / ulah akun',
-'loginprompt'                => "Pian harus mengaktipakan ''cookies'' hagan kawa babuat log ka {{SITENAME}}.",
+'loginprompt'                => "Pian harus mangaktipakan ''cookies'' hagan kawa babuat log ka {{SITENAME}}.",
 'userlogin'                  => 'Babuat log / ulah akun',
 'userloginnocreate'          => 'Babuat log',
 'logout'                     => 'Kaluar',
 'userlogout'                 => 'Kaluar',
 'notloggedin'                => 'Balum babuat log',
 'nologin'                    => 'Kada baisi sabuah akun? $1.',
-'nologinlink'                => 'Daptarkan akun hanyar',
+'nologinlink'                => 'Ulah sabuting akun',
 'createaccount'              => 'Ulah akun',
-'gotaccount'                 => 'Sudah baisi sabuah akun? $1.',
+'gotaccount'                 => 'Hudah baisi sabuting akun? $1.',
 'gotaccountlink'             => 'Babuat log',
 'userlogin-resetlink'        => 'Kada ingat rarincian babuat log Pian?',
-'createaccountmail'          => 'Lung suril',
+'createaccountmail'          => 'Malalui suril',
 'createaccountreason'        => 'Alasan:',
 'badretype'                  => 'Katasunduk nang Pian buati kada pas.',
-'userexists'                 => 'Ngaran pamuruk nang dibuati sudah dipuruk.
-Muhun pilih sabuah ngaran lain.',
+'userexists'                 => 'Ngaran pamakai nang dibuati hudah dipuruk urang lain.
+Muhun pilih sabuting ngaran lain.',
 'loginerror'                 => 'Kasalahan babuat log',
 'createaccounterror'         => 'Kada kawa maulah akun: $1',
-'nocookiesnew'               => "Akun pamuruk sudah diulah, tagal Pian kada babuat log lagi.
-{{SITENAME}} mamuruk ''cookies'' hagan pamuruk babuat log.
+'nocookiesnew'               => "Akun pamakai hudah diulah, tagal Pian kada babuat log.
+{{SITENAME}} mamakai ''cookies'' hagan pamakai babuat log.
 ''Cookies'' Pian lagi kada kawa.
-Muhun kawa'akan nangitu, hanyar babuat log awan ngaran pamuruk hanyar wan katasunduk Pian.",
-'nocookieslogin'             => "{{SITENAME}} mamuruk ''cookies'' hagan pamuruk babuat log.
+Muhun kawa'akan nangitu, hanyar babuat log awan ngaran pamakai hanyar wan katasunduk Pian.",
+'nocookieslogin'             => "{{SITENAME}} mangguna'akan ''cookies'' hagan pamakai babuat log.
 ''Cookies'' Pian lagi kada kawa.
 Muhun kawa'akan nang itu wan cubai pulang.",
-'nocookiesfornew'            => 'Akun pamuruk kada taulah, sualnya kami kada kawa mamastiakan asal mula.
-Yakinakan Pian sudah mangkawa-akan cookies (wawadai), muat pulang tungkaran ini wan cubai ja lagi.',
-'noname'                     => 'Ngaran pamuruk nang Pian ajuakan kada sah.',
+'nocookiesfornew'            => "Akun pamakai kada ta'ulah, sualnya kami kada kawa mamastiakan asal mula.
+Yakinakan Pian hudah mangkawa-akan cookies, muat pulang tungkaran naya wan cubai ja lagi.",
+'noname'                     => 'Ngaran pamakai nang Pian ajuakan kada sah.',
 'loginsuccesstitle'          => 'Kulihan babuat log',
 'loginsuccess'               => "'''Pian parhatan ini babuat log dalam {{SITENAME}} sawagai \"\$1\".'''",
-'nosuchuser'                 => 'Kadada pamuruk bangaran "$1".
-Ngaran pamuruk adalah kasus marinci.
-Lihati pulang ijaan, atawa [[Special:UserLogin/signup|ulah sabuah akun hanyar]]',
-'nosuchusershort'            => 'Kadada pamuruk bangaran "$1".
-Lihati pulang hijaan Pian.',
-'nouserspecified'            => "Pian harus ma'ajuakan sabuah ngaran pamuruk.",
-'login-userblocked'          => 'Pamuruk ini diblukir. Babuat log kada dibulihakan.',
+'nosuchuser'                 => 'Kadada pamakai bangaran "$1".
+Ngaran pamakai adalah kasus marinci.
+Lihati pulang ijaan Pian, atawa [[Special:UserLogin/signup|ulah sabuting akun hanyar]]',
+'nosuchusershort'            => 'Kadada pamakai bangaran "$1".
+Lihati pulang ijaan Pian.',
+'nouserspecified'            => "Pian harus ma'ajuakan sabuting ngaran pamakai.",
+'login-userblocked'          => 'Pamakai naya diblukir. Babuat log kada dibulihakan.',
 'wrongpassword'              => 'Kada sunduk kada bujur nang dibuati.
 Muhun cubai pulang.',
-'wrongpasswordempty'         => 'Kata sunduk nang dibuati kusung.
+'wrongpasswordempty'         => 'Kata sunduk nang dibuati puang.
 Muhun cubai pulang.',
 'passwordtooshort'           => 'Kata sunduk musti paling sadikit {{PLURAL:$1|1 karaktir|$1 karaktir}}.',
-'password-name-match'        => 'Kata sunduk Pian musri aabida lawan ngaran pamuruk Pian.',
-'password-login-forbidden'   => 'Mamuruk ngaran wan katasunduk nangini sudah dtangati.',
+'password-name-match'        => 'Kata sunduk Pian musti babida lawan ngaran pamakai Pian.',
+'password-login-forbidden'   => 'Mamakai ngaran wan katasunduk nangini hudah ditangati.',
 'mailmypassword'             => 'Kirimi kata sunduk hanyar',
-'passwordremindertitle'      => 'Kata sunduk samantara gasan {{SITENAME}}',
-'passwordremindertext'       => 'Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuah katasunduk hanyar gasan {{SITENAME}} ($4). sabuah katasunduk samantara gasan pamuruk "$2" sudah diulah wan disetel ka "$3". Amun bujur Pian nang maminta, Pian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Katasunduk samantara Pian akan kadaluarsa dalam {{PLURAL:$5|satu hari|$5 hahari}}.
+'passwordremindertitle'      => 'Kata sunduk pahadangan gasan {{SITENAME}}',
+'passwordremindertext'       => 'Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting katasunduk hanyar gasan {{SITENAME}} ($4). Sabuting katasunduk pahadangan gasan pamakai "$2" hudah diulah wan disetel ka "$3". Amun bujur Pian nang maminta, Pian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Katasunduk pahadangan Pian akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.
 
-Amun urang lain nang maminta ini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ini wan manyambung mamuruk katasunduk lawas Pian.',
-'noemail'                    => 'Kadada alamat suril tarakam gasan pamuruk "$1".',
+Amun urang lain nang maminta ini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ini wan manyambung mamakai katasunduk lawas Pian.',
+'noemail'                    => 'Kadada alamat suril tarakam gasan pamakai "$1".',
 'noemailcreate'              => 'Pian parlu manyadiakan sabuah alamat suril nang sah',
-'passwordsent'               => 'Sabuah kata sunduk hanyar sudah dikirim ka suril tadaptar gasan "$1".
-muhun babuat log pulang habis Pian manarima nangini.',
-'blocked-mailpassword'       => 'Alamat IP Pian diblukir hagan mambabak, wan kada dibulihakan mamuruk pungsi pamulihan kata sunduk hagan mancagah salah puruk.',
-'eauthentsent'               => 'Sabuah suril peyakinan sudah dikirim ka alamat suril.
+'passwordsent'               => 'Sabuting kata sunduk hanyar sudah dikirim ka suril tadaptar gasan "$1".
+Muhun babuat log pulang habis Pian manarima nangini.',
+'blocked-mailpassword'       => 'Alamat IP Pian diblukir hagan mambabak, wan kada dibulihakan mamakai pungsi pamulihan kata sunduk hagan mancagah salah puruk.',
+'eauthentsent'               => 'Sabuting suril payakinan hudah dikirim ka alamat suril.
 Sabalum ada suril lain nang takirim ka akun, Pian akan parlu maumpati anjuran dalam suril nangitu, hagan mayakinakan bahwasanya akun nangitu bujur-bujur ampun Pian.',
-'throttled-mailpassword'     => 'Sabuah pangingat kata sunduk sudah takirim, dalam {{PLURAL:$1|jam|$1 jam}} tauncit. Hagan mancagah salah puruk, asa pangingat kata sunduk haja nang dikirim satiap {{PLURAL:$1|jam|$1 jam}}.',
+'throttled-mailpassword'     => 'Sabuting pangingat kata sunduk hudah takirim, dalam {{PLURAL:$1|jam|$1 jam}} tauncit. Hagan mancagah salah puruk, asa pangingat kata sunduk haja nang dikirim saban {{PLURAL:$1|jam|$1 jam}}.',
 'mailerror'                  => 'Kasalahan pangiriman suril: $1',
-'acct_creation_throttle_hit' => 'Pailang wiki nangini mamuruk alamat IP Pian sudah maulah {{PLURAL:$1|1 akun|$1 akun}} dalam asa harian ini, dimana nangitu jumlah paling banyak nang diijinakan. Sawagai kulihan, pailang awan alamat IP nangini kada kawa maulah akun pulang samantara.',
-'emailauthenticated'         => 'Alamat suril Pian cucuk pada  $2, $3',
-'emailnotauthenticated'      => 'Alamat suril Pian baluman dicucukan.
+'acct_creation_throttle_hit' => "Pa'ilang wiki nangini mamuruk alamat IP Pian hudah maulah {{PLURAL:$1|1 akun|$1 akun}} dalam asa harian ini, dimana nangitu jumlah paling banyak nang diijinakan. Sawagai hasilnya, pa'ilang awan alamat IP nangini kada kawa maulah akun pulang gasan pahadangan.",
+'emailauthenticated'         => 'Alamat suril Pian rasuk pada  $2, $3',
+'emailnotauthenticated'      => 'Alamat suril Pian baluman dirasukakan.
 Kadada suril nang akan dikirim maumpati pitur.',
-'noemailprefs'               => 'Ajuakan sabuah alamat suril dalam kakatujuan Pian gasan pitur-pitur ini bagawi.',
+'noemailprefs'               => 'Ajuakan sabuting alamat suril dalam kakatujuan Pian gasan pitur-pitur ini bagawi.',
 'emailconfirmlink'           => 'Yakinakan alamat suril Pian',
 'invalidemailaddress'        => 'Alamat suril ini kada kawa ditarima karana pormat kada sah.
-Muhun buati sabuah alamat suril nang bujur pormatnya atawa kusungakan haja isian itu.',
+Muhun buati sabuting alamat suril nang bujur pormatnya atawa puangkan haja isian itu.',
 'cannotchangeemail'          => 'Akun alamat suril kada kawa diganti pada wiki ngini.',
 'accountcreated'             => 'Akun diulah',
-'accountcreatedtext'         => 'Akun pamuruk gasan $1 sudah diulah.',
+'accountcreatedtext'         => 'Akun pamakai gasan $1 sudah diulah.',
 'createaccount-title'        => 'Paulahan akun gasan {{SITENAME}}',
 'createaccount-text'         => 'Ada urang nang maulah akun gasan alam suril Pian pada {{SITENAME}} ($4) bangaran "$2", awan kata sunduk "$3".
 Pian dianjurakan babuat log wan maubah kata sunduk Pian parhatan ini.
 
 Pian kawa kada mahual pasan ini, amun paulahan akun ini adalah kasalahan.',
-'usernamehasherror'          => 'Ngaran pamuruk kada kawa mangandung tanda kurung',
+'usernamehasherror'          => 'Ngaran pamakai kada kawa mangandung tanda kurung',
 'login-throttled'            => 'Pian sudah kabanyakan mancuba babuat log.
 Muhun hadangi dahulu sapandang hanyar cubai pulang.',
 'login-abort-generic'        => 'Pian kada ruhui babuat  log - Diwalangi',
@@ -571,31 +571,31 @@ Pian pinanya sudah bahasil maubah katasunduk Pian atawa maminta sabuah katasundu
 'passwordreset-legend'             => 'Bulikakan setelan katasunduk',
 'passwordreset-disabled'           => 'Mambulikakan setelan katasunduk dipajahakan hagan wiki ini.',
 'passwordreset-pretext'            => '{{PLURAL:$1||Buati asa data di bawah ngini}}',
-'passwordreset-username'           => 'Ngaran pamuruk:',
+'passwordreset-username'           => 'Ngaran pamakai:',
 'passwordreset-domain'             => 'Dumain:',
 'passwordreset-capture'            => 'Tiringikah kulihan suril?',
-'passwordreset-capture-help'       => 'Amun Pian cintang kutak ngini, suril (awan katasunduk samantara) akan ditampaiakan ka Pian bahwasa lagi dikirim ka pamuruk.',
+'passwordreset-capture-help'       => 'Amun Pian cintang kutak ngini, suril (awan katasunduk pahadangan) akan ditampaiakan ka Pian bahwasa lagi dikirim ka pamakai.',
 'passwordreset-email'              => 'Alamat suril:',
 'passwordreset-emailtitle'         => 'Rarincian akun pada {{SITENAME}}',
-'passwordreset-emailtext-ip'       => 'Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuah pangingat hagan rarincian akun Pian gasan {{SITENAME}} ($4). Pamuruk barikut {{PLURAL:$3|akun|aakun}}
+'passwordreset-emailtext-ip'       => 'Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuah pangingat hagan rarincian akun Pian gasan {{SITENAME}} ($4). pPamakai barikut {{PLURAL:$3|akun|akun}}
 tarait awan suril:
 
 $2
 
-{{PLURAL:$3|katasunduk samantara ngini|kakatasunduk samantara ngini}} akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hahari}}.
+{{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.
 Pian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ini wan manyambung mamuruk katasunduk lawas Pian.',
-'passwordreset-emailtext-user'     => 'Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuah pangingat hagan rarincian akun Pian gasan {{SITENAME}} ($4). Pamuruk barikut {{PLURAL:$3|akun|aakun}}
+'passwordreset-emailtext-user'     => 'Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting pangingat hagan rarincian akun Pian gasan {{SITENAME}} ($4). Pamakai barikut {{PLURAL:$3|akun|akun}}
 tarait awan suril:
 
 $2
 
-{{PLURAL:$3|katasunduk samantara ngini|kakatasunduk samantara ngini}} akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hahari}}.
+{{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.
 Pian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ini wan manyambung mamuruk katasunduk lawas Pian.',
-'passwordreset-emailelement'       => 'Ngaran pamuruk: $1
-Katasunduk samantara: $2',
+'passwordreset-emailelement'       => 'Ngaran pamakai: $1
+Katasunduk pahadangan: $2',
 'passwordreset-emailsent'          => 'Sabuah suril pangingat sudah takirim.',
 'passwordreset-emailsent-capture'  => 'Sabuah suril pangingat sudah dikirim, nangkaya ditampaiakan di bawah.',
-'passwordreset-emailerror-capture' => 'Sabuah sril pangingat digenerasiakan, nangkaya ditampaiakan di bawah, tagal pangiriman ngini ka pamuruk gagal: $1',
+'passwordreset-emailerror-capture' => 'Suril paugingat, nang ditampaikan di bawah, hudah dihasilakan, tagal gagal mangirimakannya ka pamakai: $1',
 
 # Special:ChangeEmail
 'changeemail'          => 'Ganti alamat suril',
@@ -646,8 +646,8 @@ Amun Pian klik \"{{int:savearticle}}\" pulang, babakan Pian tasimpan kada bakasi
 Amun Pian klik \"{{int:savearticle}}\" pulang, babakan Pian tasimpan kada basubjek/bajudul.",
 'summary-preview'                  => 'Tilikan kasimpulan:',
 'subject-preview'                  => 'Titilikan subyek/judul:',
-'blockedtitle'                     => 'Pamuruk diblukir',
-'blockedtext'                      => "'''Ngaran pamuruk Pian atawa alamat IP sudah diblukir.'''
+'blockedtitle'                     => 'Pamakai diblukir',
+'blockedtext'                      => "'''Ngaran pamakai Pian atawa alamat IP sudah diblukir.'''
 
 Pamblukiran diulah ulih $1.
 Alasannya ''$2''.
@@ -656,11 +656,11 @@ Alasannya ''$2''.
 * Kadaluarsa blukir: $6
 * Tujuan pamblukiran: $7
 
-Pian kawa mangiwau $1 atawa nang lain [[{{MediaWiki:Grouppage-sysop}}|pambakal]] hagan mamandirakan pamblukiran nangini.
-Pian kada kawa mamuruk pitur 'surili pamuruk ini' amun kadada sabuah alamat suril nang sah nang diajukan dalam [[Special:Preferences|kakatujuan akun]] Pian wan  Pian kada lagi diblukir mamuruk nangini. 
+Pian kawa mangiyau $1 atawa [[{{MediaWiki:Grouppage-sysop}}|pambakal lainnya]] hagan mamandirakan pamblukiran nangini.
+Pian kada kawa mamakai pitur 'surili pamakai naya' amun kadada sabuting alamat suril nang sah nang diajukan dalam [[Special:Preferences|kakatujuan akun]] Pian wan Pian kada lagi diblukir mamakai nangini. 
 Alamat IP Pian parhatan ini $3, wan ID nang diblukir adalah $5.
-Muhun sampaiakan samunyaan rarinci di atas dalam parmintaan nag Pian ulah.",
-'autoblockedtext'                  => "Alamat IP Pian sudah utumatis diblukir karana dipuruk ulih pamuruk lain, nang diblukir ulih $1.
+Muhun sampaiakan samunyaan rarinci di atas dalam parmintaan nang Pian ulah.",
+'autoblockedtext'                  => "Alamat IP Pian sudah utumatis diblukir karana dipuruk ulih pamakai lain, nang diblukir ulih $1.
 Alasannya: ''$2''.
 
 * Mulai diblukir: $8
@@ -669,13 +669,13 @@ Alasannya: ''$2''.
 
 Pian kawa mangiwau $1 atawa nang lain [[{{MediaWiki:Grouppage-sysop}}|pambakal]] hagan mamandirakan pamblukiran nangini.
 
-Catatan Pian kada kawa mamuruk pitur 'surili pamuruk ini' amun kadada sabuah alamat suril nang sah nang tadaptar dalam [[Special:Preferences|kakatujuan akun]] Pian wan  Pian kada lagi diblukir mamuruk nangini. 
+Catatan Pian kada kawa mamuruk pitur 'surili pamakai naya' amun kadada sabuah alamat suril nang sah nang tadaptar dalam [[Special:Preferences|kakatujuan akun]] Pian wan  Pian kada lagi diblukir mamuruk nangini. 
 
 Alamat IP Pian parhatan ini $3, wan ID nang diblukir adalah $5.
 Muhun sampaiakan samunyaan rarinci di atas dalam parmintaan nag Pian ulah.",
 'blockednoreason'                  => 'kadada alasan nang diunjukakan',
 'whitelistedittext'                => 'Pian harus $1 hagan mambabak tungkaran.',
-'confirmedittext'                  => 'Pian musti mayakinakan alamat suril Pian sabalum mambabak tungkaran-tungkaran. Muhun disetel wan disakakan alamat suril Pian tumatan [[Special:Preferences|kakatujuan pamuruk]] Pian.',
+'confirmedittext'                  => 'Pian musti mayakinakan alamat suril Pian sabalum mambabak tungkaran-tungkaran. Muhun disetel wan disakakan alamat suril Pian tumatan [[Special:Preferences|kakatujuan pamakai]] Pian.',
 'nosuchsectiontitle'               => 'Hagian kada tadapat',
 'nosuchsectiontext'                => 'Pian habis mancuba mambabak sabuting hagian nang kadada.
 Pinanya ini sudah diugahakan atawa dihapus parhatan Pian maniringi tungkaran nangitu.',
@@ -685,7 +685,7 @@ Pinanya ini sudah diugahakan atawa dihapus parhatan Pian maniringi tungkaran nan
 'accmailtitle'                     => 'Katasunduk takirim.',
 'accmailtext'                      => "Sabuah katasunduk babarang gasan [[User talk:$1|$1]] sudah dikirim ka $2.
 
-Katasunduk gasan pamuruk hanyar nangini kawa diubah pintang tungkaran ''[[Special:ChangePassword|ubah katasunduk]]'' wayah babuat log.",
+Katasunduk gasan pamakai hanyar nangini kawa diubah pintang tungkaran ''[[Special:ChangePassword|ubah katasunduk]]'' wayah babuat log.",
 'newarticle'                       => '(Hanyar)',
 'newarticletext'                   => "Pian maumpati sabuah tautan ka tungkaran nang baluman ada lagi. Gasan maulah tungkaran, mulai ja mangatik pada kutak di bawah (lihati [[{{MediaWiki:Helppage}}|tungkaran patulung]] gasan panjalasan labih). Amun Pian ka sia cagaran tasalah, klik picikan '''back''' di panjalajah web Pian.",
 'anontalkpagetext'                 => "----''Ini adalah tungkaran pamandiran gasan pamuruk kada bangaran nang baluman maulah akun pulang, atawa  kada mamuruknya. Kami tapaksa mamuruk numurik alamat IP hagan maminanduinya.
@@ -711,9 +711,9 @@ Log blukir pahabisannya tasadia di bawah ini gasan rujukan:',
 *'''Opera:''' barasihakan cache pada ''Tools → Preferences''",
 'usercssyoucanpreview'             => "'''Tip:''' Puruk picikan \"{{int:showpreview}}\" hagan tis CSS hanyar Pian sabalum manyimpan.",
 'userjsyoucanpreview'              => "'''Tip:''' Puruk picikan \"{{int:showpreview}}\" hagan tis JavaScript hanyar Pian sabalum manyimpan.",
-'usercsspreview'                   => "'''Ingatakan bahwasa Pian manilik pamuruk CSS Pian haja.'''
+'usercsspreview'                   => "'''Ingatakan bahwasa Pian manilik pamakai CSS Pian haja.'''
 '''Nangini baluman tasimpan pulang!'''",
-'userjspreview'                    => "'''Ingatakan bahwasa Pian tis/manilik pamuruk JavaScript Pian.'''
+'userjspreview'                    => "'''Ingatakan bahwasa Pian tis/manilik pamakai JavaScript Pian.'''
 '''Nangini baluman tasimpan pulang!'''",
 'sitecsspreview'                   => "'''Ingatakan bahwasa Pian manilik CSS ini haja.'''
 '''Nangini lagi baluman tasimpan!'''",
@@ -1098,7 +1098,7 @@ Catatan nang dihaharnya matan isi {{SITENAME}} kawa-ai sudah kadaluarsa.',
 'prefs-rc'                      => 'Parubahan tahanyar',
 'prefs-watchlist'               => 'Paitihan',
 'prefs-watchlist-days'          => 'Rikinan hari-hari ditampaiakan di daptar itihan:',
-'prefs-watchlist-days-max'      => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max'      => 'Maksimum $1 {{PLURAL:$1|hari|hahari}}',
 'prefs-watchlist-edits'         => 'Rikinan paningginya matan parubahan hagan ditampaiakan pada singkaian daptar itihan:',
 'prefs-watchlist-edits-max'     => 'Rikinan paningginya:1000',
 'prefs-watchlist-token'         => 'Token itihan:',
@@ -1143,7 +1143,7 @@ Barikut ngini adalah nilai acak nang kawa Pian puruk: $1',
 'timezoneregion-europe'         => 'Irupa',
 'timezoneregion-indian'         => 'Lalautan Hindia',
 'timezoneregion-pacific'        => 'Lalautan Pasipik',
-'allowemail'                    => "Kawa'akan pamuruk lain mangirim suril",
+'allowemail'                    => "Kawa'akan pamakai lain mangirim suril",
 'prefs-searchoptions'           => 'Papilihan manggagai',
 'prefs-namespaces'              => 'Ngaran kamar',
 'defaultns'                     => 'Atawa-lah manggagai dalam ngaran kakamar nangini:',
@@ -1224,16 +1224,16 @@ Amun Pian mamilih manyadiakan ini, ini akan dipuruk gasan paminanduan kulihan ga
 
 # Groups
 'group'               => 'Galambang:',
-'group-user'          => 'Pamuruk',
-'group-autoconfirmed' => 'Pamuruk utumatis diyakinakan',
+'group-user'          => 'Pamakai',
+'group-autoconfirmed' => 'Pamakai utumatis diyakinakan',
 'group-bot'           => 'Bot',
 'group-sysop'         => 'Pambakal',
 'group-bureaucrat'    => 'Birukrat',
 'group-suppress'      => 'Pangawas',
 'group-all'           => '(samunyaan)',
 
-'group-user-member'          => '{{GENDER:$1|pamuruk}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|pamuruk utumatis diyakinakan}}',
+'group-user-member'          => '{{GENDER:$1|pamakai}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|pamakai utumatis diyakinakan}}',
 'group-bot-member'           => '{{GENDER:$1|bot}}',
 'group-sysop-member'         => '{{GENDER:$1|pambakal}}',
 'group-bureaucrat-member'    => '{{GENDER:$1|birukrat}}',
@@ -1381,9 +1381,11 @@ Amun Pian mamilih manyadiakan ini, ini akan dipuruk gasan paminanduan kulihan ga
 'number_of_watching_users_pageview' => "[$1 {{PLURAL:$1|pa'itihi|papa'itihi}}]",
 'rc_categories'                     => 'Watasi tutumbung (pisahakan lawan "|")',
 'rc_categories_any'                 => 'Napa gin',
+'rc-change-size-new'                => '$1 {{PLURAL:$1|bita|bita}} limbah paubahan',
 'newsectionsummary'                 => '/* $1 */ hagian hanyar',
 'rc-enhanced-expand'                => 'Tampaiakan rincian (parlu ada JavaScript)',
 'rc-enhanced-hide'                  => 'Sungkupakan ririncian',
+'rc-old-title'                      => 'aslinya diulah sawagai "$1"',
 
 # Recent changes linked
 'recentchangeslinked'          => 'Parubahan tarait',
@@ -1524,18 +1526,19 @@ $1',
 'upload-warning-subj'         => 'Paringatan mahunggah',
 'upload-warning-msg'          => 'Ada masalah lawan hunggahan Pian matan [$2]. Pian bulih babulik ka [[Special:Upload/stash/$1|purmulir hunggah]] hagan mambujuri masalah ngini.',
 
-'upload-proto-error'        => 'Protokol kada bujur',
-'upload-proto-error-text'   => 'Hunggahan rimut parlu URL bamula lawan <code>http://</code> atawa <code>ftp://</code>.',
-'upload-file-error'         => 'Kasalahan di dalam',
-'upload-file-error-text'    => 'Sabuah kasalahan dalam tajadi wayah mancubai maulah sabuah barakas samantara dalam server.
+'upload-proto-error'                => 'Protokol kada bujur',
+'upload-proto-error-text'           => 'Hunggahan rimut parlu URL bamula lawan <code>http://</code> atawa <code>ftp://</code>.',
+'upload-file-error'                 => 'Kasalahan di dalam',
+'upload-file-error-text'            => 'Sabuah kasalahan dalam tajadi wayah mancubai maulah sabuah barakas samantara dalam server.
 Muhun kiau saurang [[Special:ListUsers/sysop|pambakal]].',
-'upload-misc-error'         => 'Tasalah buat nang kada dipinandui',
-'upload-misc-error-text'    => 'Nyunyuk kada dikatahui tajadi pas mahunggah.
+'upload-misc-error'                 => 'Tasalah buat nang kada dipinandui',
+'upload-misc-error-text'            => 'Nyunyuk kada dikatahui tajadi pas mahunggah.
 Muhun pastiakan URL sah wan kawa diuangkai wan cubai pulang.
 Amun masih haja bamasalah, kiau saurang [[Special:ListUsers/sysop|pambakal]].',
-'upload-too-many-redirects' => 'URL mangandung kabanyakan paugahan.',
-'upload-unknown-size'       => 'Ukuran kada dikatahui',
-'upload-http-error'         => 'Sabuah kasalahan HTTP tajadi: $1',
+'upload-too-many-redirects'         => 'URL mangandung kabanyakan paugahan.',
+'upload-unknown-size'               => 'Ukuran kada dikatahui',
+'upload-http-error'                 => 'Sabuah kasalahan HTTP tajadi: $1',
+'upload-copy-upload-invalid-domain' => 'Unggahan salinan kada tasadia matan domain naya.',
 
 # File backend
 'backend-fail-stream'        => 'Kada kawa manyalarasakan barakas $1.',
@@ -1554,6 +1557,7 @@ Amun masih haja bamasalah, kiau saurang [[Special:ListUsers/sysop|pambakal]].',
 'backend-fail-closetemp'     => 'Kada kawa manungkup barakas samantara.',
 'backend-fail-read'          => 'Kada kawa mambaca barakas $1.',
 'backend-fail-create'        => 'Kada kawa maulah barakas $1.',
+'backend-fail-maxsize'       => 'Kada kawa maulah barakas $1 marga ukurannya labih ganal matan {{PLURAL:$2|$2 bita|$2 bita}}.',
 
 # Lock manager
 'lockmanager-notlocked'        => 'Kada kawa mambuka-sunduk "$1"; ngini kada basunduk.',
@@ -1759,7 +1763,7 @@ Pariksa 'hulu tautan lain ka citakan itu sabalum mahapusnya.",
 'statistics-users-active-desc' => 'Pamuruk nang sudah malakukan suatu aksi dalam {{PLURAL:$1|sahari|$1 hari}} tauncit.',
 'statistics-mostpopular'       => 'Tungkaran nang paling banyak ditampaiakan',
 
-'disambiguations'      => 'Tutungkaran disambigu',
+'disambiguations'      => 'Tungkaran nang tahubung ka tungkaran disambiguasi',
 'disambiguationspage'  => 'Template:Disambigu',
 'disambiguations-text' => "Tutungkaran barikut bataut ka sabuah '''tungkaran disambigu'''.
 Tutungkaran ngitu harusnya ka tupik nang sasuai.<br />
@@ -1860,8 +1864,8 @@ Muhun catat bahwasa situs web lain pina-ai bataut ka sabuah barakas awan sabuah
 'booksources-invalid-isbn'  => 'ISBN nang dibari mancungul kada sah; pariksa kalua-ai tasalah marekap matan asal-mula aslinya.',
 
 # Special:Log
-'specialloguserlabel'  => 'Pamuruk:',
-'speciallogtitlelabel' => 'Judul:',
+'specialloguserlabel'  => 'Pamakai:',
+'speciallogtitlelabel' => 'Tujuan (judul atawa pamakai):',
 'log'                  => 'Log',
 'all-logs-page'        => 'Samunyaan log umum',
 'alllogstext'          => 'Tampaian baimbai matan sabataan log nang ada matan {{SITENAME}}.
@@ -1906,8 +1910,9 @@ Janaki jua [[Special:WantedCategories|tutumbung nang dihandaki]].',
 'linksearch-pat'   => 'Gagai bapola:',
 'linksearch-ns'    => 'Ngaran-kamar:',
 'linksearch-ok'    => 'Gagai',
-'linksearch-text'  => 'Kartu-liar nangkaya "*.wikipedia.org" kawa dipuruk. <br />
-Disukung protokol: <tt>$1</tt>',
+'linksearch-text'  => 'Kartu liar nangkaya "*.wikipedia.org" hingkat diguna\'akan.
+Mamarlukan sadikitnya asa ranah tingkat atas, misalnya "*.org".<br />
+Protokol nang didukung: <tt>$1</tt> (jangan tambahakan dalam panggagaian Pian)',
 'linksearch-line'  => '$1 ditautakan matan $2',
 'linksearch-error' => 'Kartu-liar mancungul pintang awalan matan ngaranhost.',
 
@@ -1952,8 +1957,8 @@ Ada di [[{{MediaWiki:Listgrouprights-helppage}}|tambahan panjalasan]] pasal hak
 # E-mail user
 'mailnologin'          => 'Kadada alamat kirim',
 'mailnologintext'      => 'Pian musti [[Special:UserLogin|babuat log]] wan baisi sabuah alamat suril sah di [[Special:Preferences|kakatujuan]] Pian hagan mangirim suril ka papamuruk lain.',
-'emailuser'            => 'Surel pamuruk',
-'emailpage'            => 'Surili pamuruk',
+'emailuser'            => 'Suril pamakai',
+'emailpage'            => 'Surili pamakai',
 'emailpagetext'        => 'Pian kawa mamuruk purmulir di bawah hagan mangirim sabuah suril ka pamuruk ngini.
 Alamat sril Pian pintang [[Special:Preferences|kakatujuan pamuruk Pian]] akan cungul  sawagai "Matan" alamat suril, lalu-ai panarima akan kawa langsung mambalas ka Pian.',
 'usermailererror'      => 'Objek surat ada kasalahan dibulikakan:',
@@ -2011,7 +2016,7 @@ Parubahan-parubahan salanjutnya pada tungkaran ini dan tungkaran pamandiran tara
 'watchmethod-list'     => 'pariksa tutungkaran nang diitihi gasan bababakan tahanyar',
 'watchlistcontains'    => 'Paitihan Pian mangandung $1 {{PLURAL:$1|tungkaran|tutungkaran}}.',
 'iteminvalidname'      => "Masalah awan barang '$1', bangaran kada sah...",
-'wlnote'               => "Di bawah ni {{PLURAL:$1|adalah parubahan tauncit|adalah '''$1''' paparubahan tauncit}} dalam {{PLURAL:$2|jam|'''$2''' jam}} tauncit.",
+'wlnote'               => "Di bawah naya adalah {{PLURAL:$1|paubahan|'''$1''' paubahan}} tauncit dalam '''$2''' jam tauncit, par $3, $4.",
 'wlshowlast'           => 'Tampaiakan $1 jam $2 hari pahabisan $3',
 'watchlist-options'    => 'Pilihan daptar itihan',
 
@@ -2504,7 +2509,7 @@ muhun mamastiakan Pian paham akibatnya sabalum manarusakan.",
 Tungkaran tatuju"[[:$1]]" sadauh tasadia.
 Pian handakkah hagan mahapus ngini maulah jalan gasan pamindahan?',
 'delete_and_move_confirm'      => "I'ih, hapus tungkaran ngini",
-'delete_and_move_reason'       => 'Dihapus hagan maulah jalan gasan pamindahan',
+'delete_and_move_reason'       => 'Dihapus hagan mangantisipasiakan pamindahan tungkaran matan "[[$1]]"',
 'selfmove'                     => 'Asal mula wan tujuan bajudul sama;
 kada kawa mamindah sabuah tungkaran ka tungkaran ngitu jua.',
 'immobile-source-namespace'    => 'Kada kawa mamindahakan tutungkaran pada ngarankamar "$1"',
@@ -2535,6 +2540,7 @@ Ngini kawa di-impur dalam wiki lain mamuruk MediaWiki lung [[Special:Import|tung
 Hagan ma-ikspur tutungkaran, buati judul dalam kutak naskah di bawah, asa judul par garis, wan pilihi nang mana Pian handak ralatan tadamini nangkaitu jua samunyaan raralatan lawas, awan garis tungkaran halam, atawa ralatan tadamini awan panjalasan pasal babakan ta-uncit.
 
 Dalam kasus tahanyar Pian kawa jua mamuruk sabuah tautanm gasan cuntuh [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] gasan tungkaran "[[{{MediaWiki:Mainpage}}]]".',
+'exportall'         => 'Ekspor samunyaan tungkaran.',
 'exportcuronly'     => 'Tamasuk ralatan tadamini haja, kada sahibakan halam',
 'exportnohistory'   => "----
 ''Catatan:''' Ma-ikspur sahibakan halam matan tutungkaran lung purmulir ngini sudah dipajahakan lawan alasan ginawi.",
@@ -3548,7 +3554,7 @@ Situs ngini mangalami kangalihan teknik.',
 'revdelete-uname-unhid'               => 'ngaran-pamuruk kada tasungkup',
 'revdelete-restricted'                => 'Talamar pambatasan hagan pambakal-pambakal',
 'revdelete-unrestricted'              => 'Buang pambatasan gasan pambakal-pambakal',
-'logentry-move-move'                  => '$1 diugah ptungkaran $3 ka $4',
+'logentry-move-move'                  => '$1 mamindahakan tungkaran $3 ka $4',
 'logentry-move-move-noredirect'       => '$1 diugah tungkaran $3 ka $4 awan-kada maninggalakan sabuah paugahan',
 'logentry-move-move_redir'            => '$1 diugah tungkaran $3 ka $4 lung paugahan',
 'logentry-move-move_redir-noredirect' => '$1 diugah tungkaran $3 ka $4 lung sabuah paugahan awan-kada maninggalakan sabuah paugahan',
index 434e61e..56c2251 100644 (file)
@@ -2748,7 +2748,7 @@ Enrollit ar bajenn war hoc'h urzhiataer ha kargit anezhi amañ.",
 
 # JavaScriptTest
 'javascripttest'                           => 'Amprouadenn JavaScript',
-'javascripttest-disabled'                  => "Diweredekaet eo an arc'hwel-mañ.",
+'javascripttest-disabled'                  => "N'eo ket bet gweredekaet an arc'hwel-mañ war ar wiki.",
 'javascripttest-title'                     => 'Emeur o seveniñ $1 amprouadenn',
 'javascripttest-pagetext-noframework'      => 'Miret eo ar bajenn-mañ evit amprouiñ JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Framm amprouiñ "$1" dianav.',
index cdf3b0d..a6f1bb1 100644 (file)
@@ -486,7 +486,7 @@ $messages = array(
 'views'             => 'Pregledi',
 'toolbox'           => 'Traka sa alatima',
 'userpage'          => 'Pogledaj korisničku stranicu',
-'projectpage'       => 'Pogledaj stranu o ovoj strani',
+'projectpage'       => 'Pogledaj stranicu projekta',
 'imagepage'         => 'Pogledajte stranicu datoteke',
 'mediawikipage'     => 'Pogledaj stranicu sa porukama',
 'templatepage'      => 'Pogledajte stranicu za šablone',
@@ -941,11 +941,12 @@ Molimo provjerite da li želite napraviti/izmijeniti ovu stranicu.',
 'userpage-userdoesnotexist-view'   => 'Korisnički račun "$1" nije registrovan.',
 'blocked-notice-logextract'        => 'Ovaj korisnik je trenutno blokiran.
 Posljednje stavke zapisnika blokiranja možete pogledati ispod:',
-'clearyourcache'                   => "'''Pažnja: Nakon što sačuvate izmjene, morate \"osvježiti\" keš memoriju vašeg pretraživača da bi ste vidjeli nova podešenja.'''
-'''Mozilla / Firefox / Safari:''' držite ''Shift'' tipku i kliknite na ''Reload'' dugme ili ''Ctrl-R'' ili ''Ctrl-F5'' (''Command-R'' na Macu);
-'''Konqueror:''' klikni na ''Reload'' ili pritisnite dugme ''F5'';
-'''Opera:''' očistite \"keš\" preko izbornika ''Tools → Preferences'';
-'''Internet Explorer:''' držite tipku ''Ctrl'' i kliknite na ''Refresh'' ili pritisnite ''Ctrl-F5''.",
+'clearyourcache'                   => "'''Pažnja:''' Nakon što sačuvate izmjene, morate \"osvježiti\" keš memoriju vašeg pretraživača da bi ste vidjeli nova podešenja.'''
+*'''Firefox / Safari:''' držite ''Shift'' tipku i kliknite na ''Reload'' dugme ili pritisnite ''Ctrl-F5'' ili ''Ctrl-R'' (''⌘-R'' na Macu)
+*'''Google Chrome:''' pritisnite ''Ctrl-Shift-R'' (''⌘-Shift-R'' na Macu)
+*'''Internet Explorer:''' držite tipku ''Ctrl'' i kliknite na ''Refresh'' ili pritisnite ''Ctrl-F5''
+*'''Konqueror:''' klikni na ''Reload'' ili pritisnite dugme ''F5''
+*'''Opera:''' očistite \"keš\" preko izbornika ''Tools → Preferences''",
 'usercssyoucanpreview'             => "'''Pažnja:''' Koristite dugme \"{{int:showpreview}}\" da testirate svoj novi CSS prije nego što sačuvate.",
 'userjsyoucanpreview'              => "'''Pažnja:''' Koristite dugme \"{{int:showpreview}}\" da testirate svoj novi JavaScript prije nego što sačuvate.",
 'usercsspreview'                   => "'''Zapamtite ovo je samo izgled Vašeg CSS-a.'''
@@ -998,8 +999,8 @@ nemojte ih slati ovdje. Takođe, slanje članka podrazumijeva i vašu izjavu da
 'copyrightwarning2'                => "Zapamtite da svi doprinosi na stranici {{SITENAME}} može biti izmijenjen, promijenjen ili uklonjen od strane ostalih korisnika. Ako ne želite da ovo desi sa Vašim tekstom, onda ga nemojte slati ovdje.<br />
 Također nam garantujete da ste ovo Vi napisali, ili da ste ga kopirali iz javne domene ili sličnog slobodnog izvora informacija (pogledajte $1 za više detalja).
 '''NE ŠALJITE AUTORSKIM PRAVOM ZAŠTIĆENE TEKSTOVE BEZ DOZVOLE!'''",
-'longpageerror'                    => "'''Greška: Tekst, koji ste poslali, je dug $1 kilobajta, što je veće od maksimuma, koji iznosi $2 kilobajta.
-Stranica ne može biti spremljena.'''",
+'longpageerror'                    => "'''Greška: Tekst, koji ste poslali, je dug {{PLURAL:$1|jedan kilobajt|$1 kilobajta}}, što je veće od maksimuma, koji iznosi {{PLURAL:$2|jedan kilobajt|$2 kilobajta}}.'''
+Stranica ne može biti sačuvana.",
 'readonlywarning'                  => "'''PAŽNJA: Baza je zaključana zbog održavanja, tako da nećete moći da sačuvate svoje izmjene za sada.
 Možda želite da kopirate i nalijepite tekst u tekst editor i sačuvate ga za kasnije.'''
 
@@ -1112,28 +1113,28 @@ Pokušajte [[Special:Search|pretražiti wiki]] za slične stranice.',
 'rev-deleted-text-permission' => "Revizija ove stranice je '''obrisana'''.
 Detalje možete vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisu brisanja].",
 'rev-deleted-text-unhide'     => "Revizija ove stranice je '''obrisana'''.
-Detalje o tome možer vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisniku brisanja].
-Kao administrator još je uvijek možete [$1 vidjeti ovu reviziju] ako želite.",
+Detalje o tome može se vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisniku brisanja].
+Vi je i dalje možete [$1 vidjeti ovu reviziju] ako želite da nastavite.",
 'rev-suppressed-text-unhide'  => "Ova revizija stranice je '''uklonjena'''.
 Možete pogledati detalje u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} zapisu uklanjanja].
 Vi je i dalje možete [$1 vidjeti ovu reviziju] ako želite.",
 'rev-deleted-text-view'       => "Revizija ove stranice je '''obrisana'''.
-Kao administrator, Vi je možete vidjeti; detalji o tome se mogu vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisu brisanja].",
+Vi je možete vidjeti; detalji o tome se mogu vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisu brisanja].",
 'rev-suppressed-text-view'    => "Ova revizija stranice je '''uklonjena'''.
-Kao administrator Vi je možete vidjeti; možete pogledati detalje u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} zapisu uklanjanja].",
+Vi je možete vidjeti; možete pogledati detalje u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} zapisu uklanjanja].",
 'rev-deleted-no-diff'         => "Ne možete vidjeti ove razlike jer je jedna od revizija '''obrisana'''.
 Možete pregledati detalje u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisima brisanja].",
 'rev-suppressed-no-diff'      => "Ne možete vidjeti ove razlike jer je jedna od revizija '''obrisana'''.",
 'rev-deleted-unhide-diff'     => "Jedna od revizija u ovom pregledu razlika je '''obrisana'''.
 Možete pregledati detalje u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisniku brisanja].
-Kao administrator Vi još uvijek možete [$1 vidjeti ove razlike] ako želite da nastavite.",
-'rev-suppressed-unhide-diff'  => "Jedna od revizija ove razlike je '''uklonjena'''.
-Postoji mnogo detalja u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} zapisniku uklanjanja].
-Kao administrator i dalje možete [$1 vidjeti ove razlike] ako želite da nastavite.",
+Vi još uvijek možete [$1 vidjeti ove razlike] ako želite da nastavite.",
+'rev-suppressed-unhide-diff'  => "edna od revizija ove razlike je '''uklonjena'''.
+Možete pogledati detalje u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} zapisniku uklanjanja].
+Vi i dalje možete [$1 vidjeti ove razlike] ako želite da nastavite.",
 'rev-deleted-diff-view'       => "Jedna od revizija u ovoj razlici je '''obrisana'''.
-Kao administrator možete vidjeti ovu razliku, možda ima još detalja u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisniku brisanja].",
+Vi možete vidjeti ovu razliku; detalji o tome se mogu vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisniku brisanja].",
 'rev-suppressed-diff-view'    => "Jedna od revizija u ovoj razlici je '''sakrivena'''.
-Kao administrator možete vidjeti ovu razliku, možda ima još detalja u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisniku sakrivanja].",
+Vi možete vidjeti ovu razliku; detalji se mogu vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisniku sakrivanja].",
 'rev-delundel'                => 'pokaži/sakrij',
 'rev-showdeleted'             => 'Pokaži',
 'revisiondelete'              => 'Obriši/vrati revizije',
@@ -1200,7 +1201,8 @@ Molimo provjerite zapise.',
 
 # Suppression log
 'suppressionlog'     => 'Zapisi sakrivanja',
-'suppressionlogtext' => 'Ispod je spisak brisanja i blokiranja koja su povezana sa sadržajem koji je sakriven od administratora. Vidi [[Special:IPBlockList|spisak IP blokiranja]] za pregled trenutno važećih blokada.',
+'suppressionlogtext' => 'Ispod je spisak brisanja i blokiranja koja su povezana sa sadržajem koji je sakriven od administratora. 
+Vidi [[Special:BlockList|spisak IP blokiranja]] za pregled trenutno važećih blokada.',
 
 # History merging
 'mergehistory'                     => 'Spoji historije stranice',
@@ -1442,7 +1444,7 @@ Ako izaberete da date ime, biće korišteno za pripisivanje za vaš rad.',
 'userrights-lookup-user'       => 'Menadžment korisničkih grupa',
 'userrights-user-editname'     => 'Unesi korisničko ime:',
 'editusergroup'                => 'Uredi korisničke grupe',
-'editinguser'                  => "Mijenjate korisnička prava korisnika '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+'editinguser'                  => "Mijenjate korisnička prava korisnika '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup'     => 'Uredi korisničke grupe',
 'saveusergroups'               => 'Sačuvaj korisničke grupe',
 'userrights-groupsmember'      => 'Član:',
@@ -1811,7 +1813,7 @@ Ne može se dobro provjeriti u vezi sigurnosti.',
 'img-auth-accessdenied'     => 'Pristup onemogućen',
 'img-auth-nopathinfo'       => 'Nedostaje PATH_INFO.
 Vaš server nije postavljen da daje ovu informaciju.
-On je zasnovan na CGI i ne može podržavati img_auth.
+Možda je zasnovan na CGI koji ne podržava img_auth.
 Pogledajte https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-notindir'         => 'Zahtjevana putanje nije u direktorijumu podešenom za postavljanje.',
 'img-auth-badtitle'         => 'Ne mogu napraviti valjani naslov iz "$1".',
@@ -2182,7 +2184,7 @@ da biste slali e-poštu drugim korisnicima.',
 'emailpagetext'        => 'Možete korisiti formu ispod za slanje e-mail poruka ovom korisniku.
 E-mail adresa koju ste unijeli u [[Special:Preferences|Vašim korisničkim postavkama]] će biti prikazana kao adresa pošiljaoca, tako da će primaoc poruke moći da Vam odgovori.',
 'usermailererror'      => 'Objekat pošte je vratio grešku:',
-'defemailsubject'      => '{{SITENAME}} e-pošta',
+'defemailsubject'      => '{{SITENAME}} e-pošta od {{GENDER:$1|korisnika|korisnice|korisnika}} $1',
 'usermaildisabled'     => 'Korisnički e-mail onemogućen',
 'usermaildisabledtext' => 'Ne možete poslati e-mail drugim korisnicima na ovoj wiki',
 'noemailtitle'         => 'Nema adrese e-pošte',
@@ -3879,16 +3881,18 @@ Slike su prikazane u punoj veličini, ostale vrste datoteka su prikazane direktn
 'newuserlog-byemail'            => 'šifra je poslana putem e-maila',
 
 # Feedback
-'feedback-subject' => 'Tema:',
-'feedback-message' => 'Poruka:',
-'feedback-cancel'  => 'Odustani',
-'feedback-submit'  => 'Pošalji povratnu informaciju',
-'feedback-adding'  => 'Dodajem povratne informacije na stranicu...',
-'feedback-error1'  => 'Greška: Neprepoznati rezultat od API',
-'feedback-error2'  => 'Greška: Uređivanje nije uspjelo',
-'feedback-error3'  => 'Greška: Nema odgovora od API',
-'feedback-close'   => 'Završeno',
-'feedback-bugnew'  => 'Provjereno. Prijavi novu grešku',
+'feedback-subject'  => 'Tema:',
+'feedback-message'  => 'Poruka:',
+'feedback-cancel'   => 'Odustani',
+'feedback-submit'   => 'Pošalji povratnu informaciju',
+'feedback-adding'   => 'Dodajem povratne informacije na stranicu...',
+'feedback-error1'   => 'Greška: Neprepoznati rezultat od API',
+'feedback-error2'   => 'Greška: Uređivanje nije uspjelo',
+'feedback-error3'   => 'Greška: Nema odgovora od API',
+'feedback-thanks'   => 'Hvala! Vaša povratna informacija je postavljena na stranicu „[$2 $1]“.',
+'feedback-close'    => 'Završeno',
+'feedback-bugcheck' => 'Odlično! Molimo provjerite da se ne radi o nekom [$1 poznatom "bugu"].',
+'feedback-bugnew'   => 'Provjereno. Prijavi novu grešku',
 
 # API errors
 'api-error-badaccess-groups'              => 'Nemate ovlasti da postavljate datoteke na ovoj wiki.',
@@ -3913,7 +3917,7 @@ Slike su prikazane u punoj veličini, ostale vrste datoteka su prikazane direktn
 'api-error-missingparam'                  => 'Unutrašnja greška: nedostaju parametri u zahtjevu.',
 'api-error-missingresult'                 => 'Unutrašnja greška: ne može se otkriti da li je kopiranje uspjelo.',
 'api-error-mustbeloggedin'                => 'Morate biti prijavljeni da biste postavljali datoteke.',
-'api-error-mustbeposted'                  => 'Postoji greška u ovom softverz; ne koristi pravilan HTTP metod.',
+'api-error-mustbeposted'                  => 'Postoji greška u ovom softveru; ne koristi pravilan HTTP metod.',
 'api-error-noimageinfo'                   => 'Postavljanje je uspjelo, ali server nam nije dao nikakvu informaciju o datoteci.',
 'api-error-nomodule'                      => 'Unutrašnja greška: nije postavljen modul za postavljanje.',
 'api-error-ok-but-empty'                  => 'Unutrašnja greška: nema odgovora od servera.',
index 5cba1c0..cfc7e0c 100644 (file)
@@ -570,6 +570,8 @@ $2",
 'ns-specialprotected'  => 'No es poden modificar les pàgines especials.',
 'titleprotected'       => "La creació d'aquesta pàgina està protegida per [[User:$1|$1]].
 Els seus motius han estat: «''$2''».",
+'filereadonlyerror'    => "No s'ha pogut modificar el fitxer «$1» perquè el repositori de fitxers «$2» està en mode només de lectura.
+El motiu donat és «''$3''».",
 
 # Virus scanner
 'virus-badscanner'     => "Mala configuració: antivirus desconegut: ''$1''",
@@ -1659,6 +1661,7 @@ $1',
 'backend-fail-closetemp'     => "No s'ha pogut tancar el fitxer temporal.",
 'backend-fail-read'          => "No s'ha pogut llegir el fitxer $1.",
 'backend-fail-create'        => "No s'ha pogut crear el fitxer $1.",
+'backend-fail-maxsize'       => "No s'ha pogut crear el fitxer $1 perquè és més gran que {{PLURAL:$2|un byte|$2 bytes}}.",
 'backend-fail-readonly'      => "El rerefons d'emmagatzemament «$1» actualment només és de lectura. Es va donar el motiu: «$2»",
 'backend-fail-synced'        => "El fitxer «$1» es troba en un estat inconsistent amb els rerefons d'emmagatzemament interns.",
 'backend-fail-connect'       => "No s'ha pogut connectar al fitxer de rerefons d'emmagatzemament «$1».",
@@ -2742,7 +2745,7 @@ Deseu-lo al vostre ordinador i carregueu-ne una còpia ací.",
 
 # JavaScriptTest
 'javascripttest'                           => 'Proves de JavaScript',
-'javascripttest-disabled'                  => 'La funció està inhabilitada.',
+'javascripttest-disabled'                  => "No s'ha inhabilitat la funció en el wiki.",
 'javascripttest-title'                     => "S'estan executant $1 proves",
 'javascripttest-pagetext-noframework'      => "Es reserva la pàgina per a l'execució de tests amb JavaScript.",
 'javascripttest-pagetext-unknownframework' => "L'entorn de proves «$1» és desconegut.",
index 266c417..f4b36b9 100644 (file)
@@ -207,7 +207,9 @@ Sō̤ kī só-gé̤ṳ-kó gì guāng-lī-uòng cūng-kuāng gāi-sék: $1',
 'viewsource'           => 'Káng nguòng-dâi-mā',
 'protectedpagetext'    => 'Cī hiĕk ī-gĭng ké̤ṳk sō̤ kī lāu, mâ̤-sāi siŭ-gāi.',
 'viewsourcetext'       => 'Nṳ̄ â̤-sāi káng gâe̤ng hók-cié ciā hiĕk gì nguòng-dâi-mā:',
-'editinginterface'     => "'''Gīng-gó̤:''' Nṳ̄ hiêng-câi lā̤ siŭ-gāi hiê-tūng gái-miêng gì hiĕk. Dó̤i ciā hiĕk gì gāi-biéng â̤ īng-hiōng gì-tă ê̤ṳng-hô gì gái-miêng.",
+'editinginterface'     => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
+Changes to this page will affect the appearance of the user interface for other users.
+For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
 
 # Login and logout pages
 'logouttext'                 => "'''Nṳ̄ hiêng-câi láuk-chók lāu.'''
index 1704fde..368189f 100644 (file)
@@ -332,6 +332,7 @@ $messages = array(
 'delete'            => 'سڕینەوە',
 'deletethispage'    => 'سڕینه‌وه‌ی ئه‌م په‌ڕه‌یه‌',
 'undelete_short'    => '{{PLURAL:$1|یەک گۆڕانکاریی|$1 گۆڕانکاریی}} سڕاوە بەجێبھێنەرەوە',
+'viewdeleted_short' => '{{PLURAL:$1|یەک گۆڕانکاریی سڕاو|$1 گۆڕانکاریی سڕاو}} ببینە',
 'protect'           => 'پاراستن',
 'protect_change'    => 'گۆڕین',
 'protectthispage'   => 'ئه‌م په‌ڕه‌یه‌ بپارێزه‌',
@@ -364,11 +365,12 @@ $messages = array(
 'jumpto'            => 'باز بدە بۆ:',
 'jumptonavigation'  => 'ڕێدۆزی',
 'jumptosearch'      => 'گەڕان',
-'view-pool-error'   => 'ببÙ\88رÛ\95Ø\8c Ù\84Û\95Ù\85 Ú©Ø§ØªÛ\95دا Ú\95اÚ\98Û\95کارÛ\95کاÙ\86 Ø²Û\8cابارÛ\8cاÙ\86 Ù\84Û\95 Ø³Û\95رÛ\95.<br />
-ژمارەیەکی زۆر لە بەکارهێنەران هاوکات هەوڵی دیتنی ئەم لاپەرەیان داوە.<br />
-تکایە پێش هەوڵی دووبارە بۆ دیتنی ئەم لاپەڕە، نەختێک بوەستە.<br /><br />
+'view-pool-error'   => 'ببÙ\88رÛ\95Ø\8c Ù\84Û\95Ù\85 Ú©Ø§ØªÛ\95دا Ú\95اÚ\98Û\95کارÛ\95کاÙ\86 Ø²Û\8cادÛ\95بارÛ\8cاÙ\86 Ù\84Û\95 Ø³Û\95رÛ\95.
+ژمارەیەکی زۆر لە بەکارھێنەران ھاوکات ھەوڵی دیتنی ئەم پەڕەیان داوە.
+تکایە پێش ھەوڵی دووبارە بۆ دیتنی ئەم پەڕە، نەختێک بوەستە.
 
 $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).
 'aboutsite'            => 'سەبارەت بە {{SITENAME}}',
@@ -414,9 +416,11 @@ $1',
 'toc'                     => 'ناوەرۆک',
 'showtoc'                 => 'نیشاندان',
 'hidetoc'                 => 'بیشارەوە',
+'collapsible-collapse'    => 'کۆیبکەوە',
+'collapsible-expand'      => 'بڵاویبکەوە',
 'thisisdeleted'           => 'نیشاندان یا گەڕاندنەوەی $1؟',
 'viewdeleted'             => '$1 نیشان بده‌؟',
-'restorelink'             => '{{PLURAL:$1|گۆڕانکاریی سڕاو|$1 یەک گۆڕانکاریی سڕاو}}',
+'restorelink'             => '{{PLURAL:$1|یەک گۆڕانکاریی سڕاو|$1 گۆڕانکاریی سڕاو}}',
 'feedlinks'               => 'خۆراک:',
 'feed-invalid'            => 'ئەندام بوونی ئەو جۆرە خۆراکە نەناسراوە.',
 'feed-unavailable'        => 'پەیوەندی فییدەکان ئامادەی کەڵک وەرگرتن نیە',
@@ -482,7 +486,7 @@ $1',
 'fileappenderror'      => 'نه‌تواندرا "$1" بخرێته‌سه‌ر "$2".',
 'filecopyerror'        => 'نەکرا پەڕگەی «$1» کۆپی بکرێت بۆ «$2».',
 'filerenameerror'      => 'ناوی په‌ڕگه‌ی "$1" نه‌گۆڕدرا بۆ "$2".',
-'filedeleteerror'      => 'بسڕدرێته‌وه‌"$1" نه‌توانرا په‌ڕگه‌ی',
+'filedeleteerror'      => 'نەکرا پەڕگەی «$1» بسڕدرێتەوە.',
 'directorycreateerror' => 'نەتوانرا بوخچەی "$1"دروست بکرێت.',
 'filenotfound'         => 'په‌ڕگه‌ی "$1" نه‌دۆزرایه‌وه‌',
 'fileexistserror'      => 'ناتوانی لەسەر پەڕگەی "$1" بنووسیت: ئەو پەڕگەیە هەیە.',
@@ -494,8 +498,8 @@ $1',
 'badtitle'             => 'ناونیشانی خراپ',
 'badtitletext'         => 'سەرناوی پەڕەی داواکراو بەتاڵە، واڵایە یان سەرناوێکی نێوان-زمانی یان نێوانی-ویکییە کە بە شێوەیەکی ھەڵە بەستەری بۆ دراوە.
 ڕەنگە یەک یان چەند کاراکتەری تێدا بێت کە ناکرێت لە سەرناوەکاندا بەکار بھێنرێت.',
-'perfcached'           => 'داتای خوارەوە پاشەکەوتکراوەیە و لەوانەیە بەڕۆژنەکرابێتەوە. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts'         => 'ئÛ\95Ù\85 Ø¯Ø§ØªØ§Û\8c Ø®Ù\88ارÛ\95Ù\88Û\95 Ú©Û\95Ø´ Ú©Ø±Ø§Ù\88Û\95Ø\8c Ù\88 Ø¯Ù\88اÛ\8cÛ\8cÙ\86 Ø¬Ø§Ø± Ù\84Û\95 $1 ØªØ§Ø²Û\95 Ú©Ø±Ø§Ù\88Û\95تÛ\95Ù\88Û\95 A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached'           => 'داتای خوارەوە پاشەکەوتکراوەیە و لەوانەیە بەڕۆژنەکرابێتەوە. لانی زۆر {{PLURAL:$1|یەک ئەنجام|$1 ئەنجام}} لە cacheدا لەبەردەستدایە.',
+'perfcachedts'         => 'داتاÛ\8c Ø®Ù\88ارÛ\95Ù\88Û\95 cacheکراÙ\88Û\95 Ù\88 Ø¯Ù\88اÛ\8cÛ\8cÙ\86 Ø¬Ø§Ø± Ù\84Û\95 $1 Ù\86Ù\88Û\8e Ú©Ø±Ø§Ù\88Û\95تÛ\95Ù\88Û\95. Ù\84اÙ\86Û\8c Ø²Û\86ر {{PLURAL:$1|Û\8cÛ\95Ú© Ø¦Û\95Ù\86جاÙ\85|$1 Ø¦Û\95Ù\86جاÙ\85}} Ù\84Û\95 cacheدا Ù\84Û\95بÛ\95ردÛ\95ستداÛ\8cÛ\95.',
 'querypage-no-updates' => 'تازەکردنەوەی ئەم لاپەڕە لە حاڵی ئێستا دا ناچالاک کراو.
 داتای ئەم شوێنە بەم زووانە تازە ناکرێتەوە.',
 'wrong_wfQuery_params' => 'پارامێتری ھەڵە بۆ wfQuery()<br />
@@ -634,8 +638,44 @@ $2',
 'resetpass-temp-password'   => 'تێپەڕوشەی کاتی:',
 
 # Special:PasswordReset
-'passwordreset-emailelement' => 'ناوی بەکارھێنەری: $1
+'passwordreset'                    => 'دووبارە ڕێکخستنەوەی تێپەڕوشە',
+'passwordreset-legend'             => 'دووبارە ڕێکخستنەوەی تێپەڕوشە',
+'passwordreset-username'           => 'ناوی بەکارھێنەری:',
+'passwordreset-domain'             => 'پاوان:',
+'passwordreset-capture'            => 'بینینی ئیمەیڵی ئەنجام؟',
+'passwordreset-email'              => 'ئەدرەسی ئیمەیڵ:',
+'passwordreset-emailtitle'         => 'وردەکارییەکانی ھەژمار لە {{SITENAME}}',
+'passwordreset-emailtext-ip'       => '‫کەسێک (لەوانەیەخۆت لە ئەدرەسی IP  $1) داوای بیرخەرەوەی وردەکارییەکانی ھەژمارەکەتی لە {{SITENAME}} کردووە ($4). {{PLURAL:$3|ھەژماری بەکارھێنەریی خوارەوە پەیوەندیی ھەیە|ھەژمارە بەکارھێنەرییەکانی خوارەوە پەیوەندییان ھەیە}} بەم ئەدرەسی ئیمەیڵەوە:
+
+$2
+
+{{PLURAL:$3|ئەم تێپەڕوشە کاتییە|ئەم تێپەڕوشە کاتییانە}} لە {{PLURAL:$5|ڕۆژێک|$5 ڕۆژ}}دا  بەسەردەچێت.
+دەبێ بچیتە ژوورەوە و ھەر ئێستا تێپەڕوشەیەکی نوێ ھەڵبژێریت. ئەگەر کەسێکی تر ئەم داواکارییەی کردووە،
+یان ئەگەر تێپەڕوشە سەرەتاییەکەت ھاتووەتەوە بیرت و ئیتر ناتەوێ بیگۆڕی، 
+دەتوانی گوێ بەم پەیامە نەدەیت و ھەر لە تێپەڕوشە کۆنەکەت کەڵک وەرگریت.',
+'passwordreset-emailtext-user'     => '‫بەکارھێنەر $1 لە {{SITENAME}} داوای بیرخەرەوەی وردەکارییەکانی ھەژمارەکەتی لە {{SITENAME}} کردووە
+ ($4). {{PLURAL:$3|ھەژماری بەکارھێنەریی خوارەوە پەیوەندیی ھەیە|ھەژمارە بەکارھێنەرییەکانی خوارەوە پەیوەندییان ھەیە}} بەم ئەدرەسی ئیمەیڵەوە:
+
+$2
+
+{{PLURAL:$3|ئەم تێپەڕوشە کاتییە|ئەم تێپەڕوشە کاتییانە}} لە {{PLURAL:$5|ڕۆژێک|$5 ڕۆژ}}دا  بەسەردەچێت.
+دەبێ بچیتە ژوورەوە و ھەر ئێستا تێپەڕوشەیەکی نوێ ھەڵبژێریت. ئەگەر کەسێکی تر ئەم داواکارییەی کردووە،
+یان ئەگەر تێپەڕوشە سەرەتاییەکەت ھاتووەتەوە بیرت و ئیتر ناتەوێ بیگۆڕی، 
+دەتوانی گوێ بەم پەیامە نەدەیت و ھەر لە تێپەڕوشە کۆنەکەت کەڵک وەرگریت.',
+'passwordreset-emailelement'       => 'ناوی بەکارھێنەری: $1
 تێپەڕوشەی کاتی: $2',
+'passwordreset-emailsent'          => 'ئیمەیلێکی بیرخەرەوە نێردرا.',
+'passwordreset-emailsent-capture'  => 'ئیمەیلێکی بیرخەرەوە نێردرا کە لە خوارەوە نیشاندراوە.',
+'passwordreset-emailerror-capture' => 'ئیمەیلێکی بیرخەرەوە نێردرا کە لە خوارەوە نیشاندراوە، بەڵام ناردنی بۆ بەکارھێنەر تووشی ھەڵە بووە: $1',
+
+# Special:ChangeEmail
+'changeemail'          => 'ئەدرەسی ئیمەیڵ بگۆڕە',
+'changeemail-header'   => 'ئەدرەسی ئیمەیلی ھەژمار بگۆڕە',
+'changeemail-oldemail' => 'ئەدرەسی ئیمەیڵی ئێستا:',
+'changeemail-newemail' => 'ئەدرەسی ئیمەیڵی نوێ:',
+'changeemail-none'     => '(ھیچ)',
+'changeemail-submit'   => 'ئەمەیڵ بگۆڕە',
+'changeemail-cancel'   => 'ھەڵیوەشێنەوە',
 
 # Edit page toolbar
 'bold_sample'     => 'دەقی ئەستوور',
@@ -734,9 +774,9 @@ $2',
 دەتوانی بۆ ئەم ناوە لە [[Special:Search/{{PAGENAME}}|پەڕەکانی تردا بگەڕێی]] یان <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لە لۆگە پەیوەندیدارەکاندا بگەڕێی]</span>.',
 'userpage-userdoesnotexist'        => 'هەژماری بەکارهێنەری "<nowiki>$1</nowiki>" تۆمار نەکراوە.<br />
 گەر دەتەوێ ئەم لاپەڕە درووست‌کەی یان دەستکاری بکەی تکایە تاقی‌بکەوە .',
-'clearyourcache'                   => "'''ئاگاداری:''' لە دوای پاشەکەوت کردن، لەوانەیە  بۆ بینینی گۆڕانکارییەکان پێویست بێ کاشی وێبگەڕەکەت دەور لێ‌دەیتەوە.
-* '''Firefox / Safari:''' دوگمەی ''Shift'' بگرە کاتێک لەسەر ''Reload''دا کرتە دەکەی، یان ھەرکام لە ''Ctrl-F5'' یان ''Ctrl-R'' لێبدە (''Command-R'' لەسەر Mac دا)
-* '''Google Chrome:''' دوگمەکانی ''Ctrl-Shift-R'' لێبدە  (''Command-Shift-R'' لەسەر Mac دا)
+'clearyourcache'                   => "'''ئاگاداری:''' لە دوای پاشەکەوت کردن، لەوانەیە  بۆ بینینی گۆڕانکارییەکان پێویست بێ کاشی وێبگەڕەکەت پاکبکەیتەوە.
+* '''Firefox / Safari:''' دوگمەی ''Shift'' بگرە کاتێک لەسەر ''Reload''دا کرتە دەکەی، یان ھەرکام لە ''Ctrl-F5'' یان ''Ctrl-R'' لێبدە (''-R'' لەسەر Mac دا)
+* '''Google Chrome:''' دوگمەکانی ''Ctrl-Shift-R'' لێبدە  (''-Shift-R'' لەسەر Mac دا)
 * '''Internet Explorer:''' دوگمەی ''Ctrl'' بگرە کاتێک لەسەر  ''Refresh''دا کرتە دەکەی، یان ''Ctrl-F5'' لێبدە
 * '''Konqueror:''' کرتە بکە لەسەر ''Reload'' یان دوگمەی ''F5'' لێبدە
 * '''Opera:''' کاشەکە لە ڕێگەی ''Tools → Preferences'' بسڕەوە.",
@@ -793,8 +833,8 @@ $2',
 ئەگەر ناتەوێ نووسراوەکانت بێبەزەیی دەستکاری بکرێن، ھەر مەینێرە بۆ ئێرە.<br />
 ھەروەھا تۆ بەڵێنمان پێدەدەی کە خۆت ئەمەت نووسیوە یان لە پاوانێکی گشتی (public domain) یان سەرچاوە ئازادەکانی وەک ئەو وەرتگرتووە (سەیری $1 بکە بۆ وردەکاریەکان).
 '''ئەو کارانە کە مافی لەبەرگرتنەوەیان پارێزراوەکان بە بێ وەرگرتنی ئیجازە مەنێرە!'''",
-'longpageerror'                    => "'''هەڵە:  ئەو دەقی ناردووتە $1 کیلوبایت درێژەی هەیە، کە لە زۆرینەی $2 کیلۆبایت درێژترە.'''<br />
-پاشەکەوت ناکرێت.",
+'longpageerror'                    => "'''ھەڵە: ئەو دەقە تۆ ناردووتە {{PLURAL:$1|یەک کیلۆبایت|$1 کیلۆبایت}} درێژە، کە درێژترە لە زۆرینەی {{PLURAL:$2|یەک کیلۆبایت|$2 کیلۆبایت}}.'''
+ئەمە پاشەکەوت ناکرێت.",
 'readonlywarning'                  => "'''ئاگاداری: بنکەدراوە بۆ چاکردنەوە داخراوە، بۆیە ئێستا ناتوانی دەستکاریەکانت پاشەکەوت بکەیت.'''<br />
 باشتر وایە دەقەکە cut و paste بکەیتە ناو پەڕگەیەکی دەق و پاشەکەوتی بکەی بۆ دوایی.<br /><br />
 ئەو بەڕێوبەرەی کە دایخستوە، ئەم هۆکارەی بەردەست خستووە: $1",
@@ -911,9 +951,9 @@ $3 هۆکاری "$2" خستوەتەڕوو',
 وەک بەڕێوبەر دەتوانی بیبینی؛ لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری].",
 'rev-deleted-no-diff'         => "ناتوانی ئەم جیاوازیە ببینی لەبەر ئەوەی یەکێک لە پێداچوونەوەکان '''سڕدراوەتەوه'''‌.<br />
 لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری].",
-'rev-deleted-unhide-diff'     => "Û\8cÛ\95Ú©Û\8eÚ© Ù\84Û\95 Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95کاÙ\86Û\8c Ø¦Û\95Ù\85 Ø¬Û\8cاÙ\88ازÛ\8cÛ\95 '''سÚ\95دراÙ\88Û\95تÛ\95Ù\88Ù\87'''.<br />
\84Û\95Ù\88اÙ\86Û\95Û\8cÛ\95 Ù\88ردÛ\95کارÛ\8c Ø³Û\95بارÛ\95ت Ø¨Û\95Ù\88Û\95 Ù\84Û\8eرÛ\95دا Ø¯Û\95ست Ú©Û\95Ù\88Û\8e : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\84Û\86Ú¯Û\8c Ø¨Û\95رگرÛ\8c].<br />
-وەک بەڕێوبەر هێشتا دەتوانی [$1 ئەم جیاوزیە‌] ببینی، گەر دەتەوێ پێشتر بڕۆی.",
+'rev-deleted-unhide-diff'     => "Û\8cÛ\95Ú©Û\8eÚ© Ù\84Û\95 Ù¾Û\8cاÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95کاÙ\86Û\8c Ø¦Û\95Ù\85 Ø¬Û\8cاÙ\88ازÛ\8cÛ\95 '''سÚ\95اÙ\88Û\95تÛ\95Ù\88Ù\87'''.
\88ردÛ\95کارÛ\8cÛ\8cÛ\95کاÙ\86 Ù\84Û\95 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ù\84Û\86Ú¯Û\8c Ø³Ú\95Û\8cÙ\86Û\95Ù\88Û\95]دا Ø¯Û\95دÛ\86زرÛ\8eتÛ\95Ù\88Û\95.
+ھێشتا دەتوانیت [$1 ئەم جیاوازییە ببینیت] ئەگەر بتەوێ.",
 'rev-delundel'                => 'نیشانبدە/بشارەوە',
 'rev-showdeleted'             => 'نیشان بدە',
 'revisiondelete'              => 'سڕینەوە\\هاوردنەوەی پێداچوونەوەکان',
@@ -1118,12 +1158,13 @@ $1",
 'prefs-rc'                      => 'دوایین گۆڕانکارییەکان',
 'prefs-watchlist'               => 'لیستی چاودێری',
 'prefs-watchlist-days'          => 'ژمارەی ڕۆژەکان بۆ نیشاندان لە لیستی چاودێری:',
-'prefs-watchlist-days-max'      => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max'      => 'ئەوپەڕی $1 {{PLURAL:$1|ڕۆژە|ڕۆژە}}',
 'prefs-watchlist-edits'         => 'ئەوپەڕی ژمارەی گۆڕانکارییەکان بۆ نیشاندان لە لیستی چاودێریی پەرەپێدراو:',
 'prefs-watchlist-edits-max'     => 'ئەوپەڕی ژمارە: ١٠٠٠',
 'prefs-watchlist-token'         => 'ڕەمزی لیستی چاودێری:',
 'prefs-misc'                    => 'جۆراوجۆر',
 'prefs-resetpass'               => 'تێپەڕوشە بگۆڕە',
+'prefs-changeemail'             => 'ئەدرەسی ئیمەیل بگۆڕە',
 'prefs-email'                   => 'ھەڵبژاردەکانی ئیمەیل',
 'prefs-rendering'               => 'ڕواڵەت',
 'saveprefs'                     => 'پاشەکەوت',
@@ -1136,6 +1177,7 @@ $1",
 'searchresultshead'             => 'گەڕان',
 'resultsperpage'                => 'ژمارەی ئەنجامەکان لە ھەر پەڕەیەک:',
 'stub-threshold'                => 'سنوور بۆ شێوازی <a href="#" class="stub">بەستەری کۆڵکە</a> (بایت):',
+'stub-threshold-disabled'       => 'ناچالاک',
 'recentchangesdays'             => 'ژمارە ڕۆژە نیشاندراوەکان لە دوایین گۆڕانکارییەکان:',
 'recentchangesdays-max'         => '(ئەوپەڕی $1 {{PLURAL:$1|ڕۆژە|ڕۆژە}})',
 'recentchangescount'            => 'ژمارەی گۆڕانکارییەکان کە نیشان ئەدرێن لە حاڵەتی دیفاڵت:',
@@ -1209,6 +1251,8 @@ $1",
 'prefs-advancedsearchoptions'   => 'هەڵبژاردە پێشکەوتووەکان',
 'prefs-advancedwatchlist'       => 'هەڵبژاردە پێشکەوتووەکان',
 'prefs-displayrc'               => 'هەڵبژاردەکانی نیشان‌دان',
+'prefs-displaysearchoptions'    => 'ھەڵبژاردەکانی نیشاندان',
+'prefs-displaywatchlist'        => 'ھەڵبژاردەکانی نیشاندان',
 'prefs-diffs'                   => 'جیاوازییەکان',
 
 # User rights
@@ -1216,7 +1260,7 @@ $1",
 'userrights-lookup-user'      => 'بەڕێوەبردنی گرووپەکانی بەکارهێنەران',
 'userrights-user-editname'    => 'ناوی بەکارهێنەرێک بنووسە:',
 'editusergroup'               => 'گرووپەکانی بەکارهێنەر بگۆڕە',
-'editinguser'                 => "گۆڕینی مافەکانی بەکارهێنەر بۆ '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+'editinguser'                 => "گۆڕینی مافەکانی بەکارهێنەر '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup'    => 'دەستکاری کردنی گرووپەکانی بەکارهێنەران',
 'saveusergroups'              => 'گرووپی بەکارهێنەران پاشەکەوت بکە',
 'userrights-groupsmember'     => 'ئەندامە لە:',
@@ -1353,6 +1397,7 @@ $1",
 'action-userrights'           => 'دەستکاری مافەکانی هەموو بەکارهێنەران',
 'action-userrights-interwiki' => 'دەستکاری مافەکانی بەکارهێنەریی بەکارهێنەران لە ویکی‌یەکانی دیکە‌دا',
 'action-siteadmin'            => 'داخستن یا کردنەوەی بنکەدراو',
+'action-sendemail'            => 'ناردنی ئیمەیلەکان',
 
 # Recent changes
 'nchanges'                          => '$1 {{PLURAL:$1|گۆڕانکاری|گۆڕانکاری}}',
@@ -1508,6 +1553,7 @@ $2، ئەو جۆرە {{PLURAL:$3|پەڕگەیە کە ڕێگەی|پەڕگانەی
 'upload-failure-msg'          => 'کێشەیەک لەگەڵ بارکردنی [$2]دا ھەبوو:
 
 $1',
+'upload-warning-subj'         => 'ئاگاداریی بارکردن',
 
 'upload-proto-error'        => 'پرۆتۆکۆڵی هەڵە',
 'upload-proto-error-text'   => 'بۆ بارکردن لە تۆڕ، URL دەبێ بە <code>http://</code>  یان <code>ftp://</code> دەست‌پێ‌بکات.',
@@ -1522,6 +1568,12 @@ $1',
 'upload-unknown-size'       => 'قەبارەی نادیار',
 'upload-http-error'         => 'هەڵەیەکی HTTP ڕووئ داوە: $1',
 
+# File backend
+'backend-fail-delete' => 'نەکرا پەڕگەی $1 بسڕدرێتەوە.',
+'backend-fail-copy'   => 'نەکرا پەڕگەی $1 کۆپی بکرێت بۆ $2.',
+'backend-fail-move'   => 'نەکرا پەڕگەی $1 بگوازرێتەوە بۆ $2.',
+'backend-fail-create' => 'نەکرا پەڕگەی $1 دروستبکرێت.',
+
 # img_auth script messages
 'img-auth-accessdenied' => 'تێپه‌ربوون ره‌تکرایه‌وه‌',
 'img-auth-nofile'       => 'فایلی "$1" بوونی نیه‌',
@@ -1545,8 +1597,7 @@ $1',
 
 # Special:ListFiles
 'listfiles-summary'     => 'ئەم پەڕە تایبەتە هەموو پەڕگە بارکراوەکانت پێ نیشان دەدات.
-لە حاڵەتی بنەڕەتدا، دوایین بارکراوەکان لە سەرووی لیستەکەدا دەبیندرێن.
-کرتەیەک لەسەر سەرناوی ستوونەکان بەڕیزکردنەکان دەگۆڕیت.',
+لە کاتی پاڵاوتن بۆ بەکارھێنەرێکی تایبەت، تەنیا ئەو پەڕگانە کە بەکارھێنەرەکە دوایین وەشانیانی بارکردبێت نیشان دەدرێن.',
 'listfiles_search_for'  => 'بگەڕێ بۆ ناوی میدیای:',
 'imgfile'               => 'پەڕگە',
 'listfiles'             => 'لیستی پەرگەکان',
@@ -1669,7 +1720,7 @@ $1',
 'statistics-users-active-desc' => 'ئەو بەکارھێنەرانە کە لە {{PLURAL:$1|ڕۆژ|$1 ڕۆژ}}ی ڕابردوودا کارێکیان جێبەجێ کردبێت.',
 'statistics-mostpopular'       => 'زۆرترین لاپەڕە بینراوەکان',
 
-'disambiguations'      => 'پەڕەکانی ڕوونکردنەوە',
+'disambiguations'      => 'ئەو پەڕانە لینکیان ھەیە بۆ پەڕەکانی ڕوونکردنەوە',
 'disambiguationspage'  => 'Template:ڕوونکردنەوە',
 'disambiguations-text' => "ئەم پەڕانە بەستەریان ھەیە بۆ '''پەڕەی ڕوونکردنەوە'''.
 ئەوانە دەبێ لە جیاتی ئەوە بەستەریان ببێت بۆ بابەتی گونجاو.<br />
@@ -1765,8 +1816,8 @@ $1',
 'booksources-invalid-isbn'  => 'ISBN دراو لەوە ناچی بەکار بێت، سەرنج بدە لە کاتی کۆپی کردن لە سەرچاوە تووشی هەڵە نوبوبێت.',
 
 # Special:Log
-'specialloguserlabel'  => 'بەکارھێنەر:',
-'speciallogtitlelabel' => 'Ù\86اÙ\88Ù\86Û\8cشاÙ\86:',
+'specialloguserlabel'  => 'بەجێھێنەر:',
+'speciallogtitlelabel' => 'Ù\85Û\95بÛ\95ست (سÛ\95رÙ\86اÙ\88 Û\8cاÙ\86 Ø¨Û\95کارھÛ\8eÙ\86Û\95ر):',
 'log'                  => 'لۆگەکان',
 'all-logs-page'        => 'ھەموو لۆگە گشتییەکان',
 'alllogstext'          => 'نیشاندانی تێکڕای هەموو لۆگە بەردەستەکانی {{SITENAME}}.
@@ -1808,10 +1859,13 @@ $1',
 'sp-deletedcontributions-contribs' => 'بەشدارییەکان',
 
 # Special:LinkSearch
-'linksearch'      => 'بەستەرە دەرەکییەکان',
+'linksearch'      => 'گەڕان لە لینکە دەرەکییەکان',
 'linksearch-pat'  => 'گەڕان بۆ نواندن:',
 'linksearch-ns'   => 'بۆشاییی ناو:',
 'linksearch-ok'   => 'گەڕان',
+'linksearch-text' => 'Wildcardی وەک "*.wikipedia.org" بەکاردێت.
+لانی کەم پێویستی بە پاوانێکی ئاست-بان ھەیە، بۆ نموونە «*.org» .<br />
+پرۆتۆکۆلە پشتیوانی لێکراوەکان: <tt>$1</tt> (ھیچ کام لەمانە بە گەڕانەکەت زێدە مەکە).',
 'linksearch-line' => '$1 بەستەرپێ‌دراو لە $2',
 
 # Special:ListUsers
@@ -1857,20 +1911,21 @@ $1',
 'mailnologintext'     => 'ده‌بێ له‌ [[Special:UserLogin|ژووره‌وه‌]] بیت و ناونیشانێکی بڕواپێ‌کراوی ئی‌مه‌یلت له‌ ناو [[Special:Preferences|هه‌ڵبژارده‌کان]] دیاری کردبێت تا بتوانی ئی‌مه‌یل بنێریت بۆ به‌کارهێنه‌رانی دیکه‌.',
 'emailuser'           => 'ئیمەیل بنێرە بۆ ئەم بەکارھێنەرە',
 'emailpage'           => 'ئیمەیل بۆ بەکارھێنەر',
-'emailpagetext'       => 'ده‌توانی له‌م فۆرمه‌ی خواره‌وه‌ که‌ڵک وه‌رگریت بۆ ناردنی په‌یامێکی ئی‌مه‌یل بنێریت بۆ ئه‌م به‌کارهێنه‌ره‌.
-ناونیشانی ئی‌مه‌یلت وا له‌ ناو [[Special:Preferences|هه‌ڵبژارده‌کانی به‌کارهێنه‌ر‌دا]] نووسیوته‌، بۆ ئه‌دره‌سی "له‌لایه‌ن" ئی‌مه‌یل نیشان ئه‌درێت، هه‌ر بۆیه‌ وه‌گر ده‌توانێ ڕاسته‌وخۆ وه‌ڵامت بداته‌وه‌.',
-'defemailsubject'     => 'ئیمەیلی {{SITENAME}}',
+'emailpagetext'       => 'دەتوانی لەم فۆرمەی خوارەوە کەڵک وەربگریت بۆ ناردنی پەیامێکی ئیمەیل بۆ ئەم بەکارھێنەرە.
+ئەو ئەدرەسی ئیمەیلە لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەر‌یتدا]] نووسیوتە، بۆ ئەدرەسی «لەلایەن» (From) لە ئیمەیلدا نیشان دەدرێت، کە وایە بەکارھێنەری وەرگر دەتوانێ ڕاستەوخۆ وەڵامت بداتەوە.',
+'defemailsubject'     => 'ئیمەیڵی {{SITENAME}} لە بەکارھێنەر «$1»ەوە',
 'noemailtitle'        => 'هیچ ناونیشانێکی ئی‌مەیل نییە',
 'noemailtext'         => 'ئەم بەکارهێنەرە ناونێشانێکی بڕوا پێکراوی ئی‌مەیلی دانەناوە.',
 'nowikiemailtitle'    => 'ڕێگە بۆ ئی‌مەیل نەدراوە',
 'nowikiemailtext'     => 'ئەم بەکارهێنەرە تایبەتمەندیی وەرنەگرتنی ئی‌مەیل لە بەکارهێنەرانی دیکەی هەلبژاردووە.',
+'emailtarget'         => 'ناوی بەکارھێنەریی وەرگر بنووسە',
 'emailusername'       => 'ناوی به‌كارھێنه‌ر:',
 'emailusernamesubmit' => 'بینێرە',
 'email-legend'        => 'ناردنی ئیمەیلێک بۆ بەکارهێنەرێکی دیکەی {{SITENAME}}',
 'emailfrom'           => 'لە:',
 'emailto'             => 'بۆ:',
 'emailsubject'        => 'بابەت:',
-'emailmessage'        => 'Ù\86اÙ\85Û\95:',
+'emailmessage'        => 'Ù¾Û\95Û\8cاÙ\85:',
 'emailsend'           => 'بینێرە',
 'emailccme'           => 'کۆپییەک لە نامەکە بنێرە بۆ ئیمەیلەکەم.',
 'emailccsubject'      => 'کۆپیی نامەکەت بۆ $1: $2',
@@ -1889,6 +1944,7 @@ $1',
 'watchlistanontext'    => 'تکایە بۆ دیتن و دەستکاری بابەتەکانی لە ناو لیستی چاودێریەکەت‌دا $1.',
 'watchnologin'         => 'لە ژوورەوە نیت.',
 'watchnologintext'     => 'دەبی لە [[Special:UserLogin|ژوورەوە]] بیت بۆ ئەوەی بتوانی گۆڕانکاری بکەیت لە لیستی چاودێریەکەت‌دا.',
+'addwatch'             => 'بیخە سەر لیستی چاودێری',
 'addedwatchtext'       => 'پەڕەی «[[:$1]]» خرایە سەر [[Special:Watchlist|لیستی چاودێرییەکەت]].
 گۆڕانکارییەکانی داھاتووی ئەم پەڕە و پەڕەی وتووێژەکەی، لەوێدا ڕیزدەکرێ و پەڕەکە لە [[Special:RecentChanges|لیستی دوایین گۆڕانکارییەکاندا]] ئەستوورکراو دەردەکەوێت بۆ ئەوەی ئاسانتر دەستکەوێت.',
 'removedwatchtext'     => 'پەڕەی «[[:$1]]» لە [[Special:Watchlist|لیستی چاودێریەکەت]] لابرا.',
@@ -1906,7 +1962,7 @@ $1',
 'watchmethod-list'     => 'سەرنج‌دانی لاپەڕە چاودێری‌کراوەکان بۆ دوایین دەستکاریەکان',
 'watchlistcontains'    => 'لیستی چاودێڕییەکانت $1 {{PLURAL:$1|پەڕە|پەڕە}}ی تێدایە.',
 'iteminvalidname'      => "ھەڵە لەگەڵ بابەتی '$1'، ناوی نادروست...",
-'wlnote'               => "Ø®Ù\88ارÛ\95Ù\88Û\95 {{PLURAL:$1|دÙ\88اÛ\8cÛ\8cÙ\86 Ú¯Û\86Ú\95اÙ\86کارÛ\8cÛ\95|دÙ\88اÛ\8cÛ\8cÙ\86 '''$1''' Ú¯Û\86Ú\95اÙ\86کارÛ\8cÛ\8cÛ\95کاÙ\86Û\95}} Ù\84Û\95 Ø¯Ù\88اÛ\8cÛ\8cÙ\86  {{PLURAL:$2|کاتÚ\98Ù\85Û\8eر|'''$2''' Ú©Ø§ØªÚ\98Ù\85Û\8eر}}دا.",
+'wlnote'               => "Ø®Ù\88ارÛ\95Ù\88Û\95 {{PLURAL:$1|دÙ\88اÛ\8cÛ\8cÙ\86 Ú¯Û\86Ú\95اÙ\86کارÛ\8cÛ\8cÛ\95|دÙ\88اÛ\8cÛ\8cÙ\86 '''$1''' Ú¯Û\86Ú\95اÙ\86کارÛ\8cÛ\8cÛ\95}} Ù\84Û\95 Ø¯Ù\88اÛ\8cÛ\8cÙ\86 {{PLURAL:$2|کاتÚ\98Ù\85Û\8eر|'''$2''' Ú©Ø§ØªÚ\98Ù\85Û\8eر}}دا Ú¾Û\95تا $4 Ù\84Û\95 $3.",
 'wlshowlast'           => 'دوایین $1 کاتژمێر  $2 ڕۆژی $3 نیشانبدە',
 'watchlist-options'    => 'ھەڵبژاردەکانی لیستی چاودێری',
 
@@ -2013,7 +2069,7 @@ $UNWATCHURL
 بۆ دیتنی لیستی ئەو لاپەرانەی ئێستە پاراستنیان لە ئارادایە [[Special:ProtectedPages|لیستی لاپەڕە پارێزراوەکان ]] ببینە.',
 'protectedarticle'            => '«[[$1]]»ی پاراست',
 'modifiedarticleprotection'   => 'ئاستی پاراستنی «[[$1]]»ی گۆڕا',
-'unprotectedarticle'          => '"[[$1]]" لە حاڵی ئێستا دا نەپازراوە',
+'unprotectedarticle'          => 'پاراستنی لەسەر «[[$1]]» لابرد',
 'movedarticleprotection'      => 'ڕێککارییەکانی پاراستن لە  "[[$2]]" گوازرایەوە بۆ "[[$1]]"',
 'protect-title'               => 'گۆڕینی ئاستی پاراستنی "$1"',
 'prot_1movedto2'              => '[[$1]] گوازراوەتەوە بۆ [[$2]]',
@@ -2213,6 +2269,8 @@ $1',
 'unblocked-id'                    => 'بەربەستی $1 لابرا',
 'ipblocklist'                     => 'بەکارھێنەر بەربەستنکراوەکان',
 'ipblocklist-legend'              => 'دۆزینەوەی بەکارهێنەرێکی بەربەست‌کراو',
+'blocklist-target'                => 'مەبەست',
+'blocklist-reason'                => 'ھۆکار',
 'ipblocklist-submit'              => 'گەڕان',
 'infiniteblock'                   => 'بێکۆتایی',
 'expiringblock'                   => 'لە $2، $1 ماوەی بەسەر دەچێ',
@@ -2357,7 +2415,7 @@ $1',
 لاپەڕەی مەبەست "[[:$1]]" لە پێش‌دا هەیە.
 ئایا دەتەوێ ئەوە بسڕیتەوە تا ڕێگە بۆ گواستنەوەی بکەیتەوە؟',
 'delete_and_move_confirm'      => 'بەڵێ، لاپەڕەکە بسڕەوه',
-'delete_and_move_reason'       => 'بÛ\86 Ú©Ø±Ø¯Ù\86Û\95Ù\88Û\95Û\8c Ú\95Û\8cÚ¯Û\95 Ø¨Û\86 Ú¯Ù\88استÙ\86Û\95Ù\88Û\95Û\8c Ù\84اپÛ\95Ú\95Û\95Ø\8c Ø³Ú\95اÛ\8cەوە',
+'delete_and_move_reason'       => 'سÚ\95اÛ\8cÛ\95Ù\88Û\95 Ø¨Û\86 Ú©Ø±Ø¯Ù\86Û\95Ù\88Û\95Û\8c Ú\95Û\8cÚ¯Û\95 Ø¨Û\86 Ú¯Ù\88استÙ\86Û\95Ù\88Û\95 Ù\84Û\95 Â«[[$1]]»ەوە',
 'selfmove'                     => 'سەردێڕەکانی سەرچاوە و مەبەست یەکێکن؛
 ناکرێ لاپەڕەیەک بۆ سەر خۆی‌ بگوازرێتەوە.',
 'immobile-source-namespace'    => 'گواستنەوەی لاپەڕە لە بۆشایی‌ناو "$1" ناکرێت.',
@@ -2383,6 +2441,7 @@ $1',
 بۆ هەناردنی لاپەڕەکان، سەردێڕەکان لە چوارچێوەی دەقی خوارەوە بنووسە، هەر هێڵێک یەک سەردێڕ. هەروا هەڵبژێرە ئایا پێداچوونەوەی ئێستا و هەموو پێداچوونەوە کۆنەکانت دەوێ یان هەر پێداچوونەوەی ئێستا و زانیاریی سەبارەت بە دوایین دەستکاری.
 
 لە بابەتی دواتر هەروەها دەتوانی لە بەستەرێک کەڵک وەرگریت، بۆ نموونە [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] بۆ لەپەڕەی "[[{{MediaWiki:Mainpage}}]]".',
+'exportall'         => 'گشت پەڕەکان ھەناردە بکە',
 'exportcuronly'     => 'تەنها پێداچوونەوەی ئێستا لەخۆ بگرێت نەک هەموو مێژوو',
 'exportnohistory'   => "----
 '''ئاگاداربە: '''ھەناردنی ھەموو مێژووی پەڕەکان لەم فۆرمەوە لەبەر ھۆکاری ڕێخستن، داخراوە.",
@@ -2436,8 +2495,8 @@ $1',
 'import-interwiki-namespace' => 'بۆشایی‌ناوی مەبەست:',
 'import-upload-filename'     => 'پەڕگە‌ناو:',
 'import-comment'             => 'بۆچوون:',
-'importtext'                 => 'تکاÛ\8cÛ\95 Ù\87Û\95Ù\86اردÙ\86Û\8c Ù¾Û\95Ú\95Ú¯Û\95 Ù\84Û\95 Ø³Û\95رÚ\86اÙ\88Û\95Û\8c Ù\88Û\8cÚ©Û\8câ\80\8cÛ\8cÛ\95Ù\88Û\95 Ø¨Û\95 Ú©Û\95ÚµÚ© Ù\88Û\95رگرتÙ\86 Ù\84Û\95 [[Special:Export|ئاÙ\85Û\8eرÛ\8c Ù\87Û\95Ù\86اردÙ\86]] بکە.
-لەسەر کۆمپیۆتەرەکەت پاشەکەوتی بکە و باری‌بكە ئێرە.',
+'importtext'                 => 'تکاÛ\8cÛ\95 Ù¾Û\95Ú\95Ú¯Û\95 Ù\84Û\95 Ø³Û\95رÚ\86اÙ\88Û\95Û\8c Ù\88Û\8cÚ©Û\8câ\80\8cÛ\8cÛ\95Ù\88Û\95 Ø¨Û\95 Ú©Û\95ÚµÚ© Ù\88Û\95رگرتÙ\86 Ù\84Û\95 [[Special:Export|ئاÙ\85Û\8eرÛ\8c Ù\87Û\95Ù\86اردÙ\86]] Ù\87Û\95Ù\86اردÛ\95 بکە.
+لەسەر کۆمپیۆتەرەکەت پاشەکەوتی بکە و لێرە باری بكە.',
 'importstart'                => 'ھاوردنی پەڕەکان...',
 'import-revision-count'      => '$1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}',
 'importnopages'              => 'هیچ پەڕەیەک نییە بۆ ھاوردن.',
@@ -2560,6 +2619,7 @@ $1',
 'spam_reverting'      => 'گەڕانەوە بۆ دوایین پێداچوونەوە کە بەستەری لەخۆگرتووە بۆ $1',
 
 # Info page
+'pageinfo-title'            => 'زانیاری بۆ «$1»',
 'pageinfo-header-edits'     => 'دەستکاریەکان',
 'pageinfo-header-watchlist' => 'لیستی چاودێری',
 'pageinfo-header-views'     => 'بینینەکان',
@@ -2607,12 +2667,15 @@ $1',
 'nextdiff'     => 'گۆڕانکاریی نوێتر ←',
 
 # Media information
-'thumbsize'      => 'قەبارەی وێنۆک:',
-'file-info'      => 'قه‌باره‌: $1, جۆر: $2',
-'file-info-size' => '$1 × $2 پیکسێل، قەبارەی پەڕگە: $3، جۆری MIME: $4',
-'file-nohires'   => 'رەزۆلوشنی سەرتر لەمە لە بەردەست دا نیە.',
-'svg-long-desc'  => 'پەڕگەی SVG، بە ناو $1 × $2 پیکسەڵ، قەبارەی پەڕگە: $3',
-'show-big-image' => 'گەورە کردنەوە',
+'imagemaxsize'        => "سنووری قەبارەی وێنە:<br />''(بۆ پەڕەکانی وەسفی پەڕگە)''",
+'thumbsize'           => 'قەبارەی وێنۆک:',
+'widthheight'         => '$1 لە $2',
+'file-info'           => 'قه‌باره‌: $1, جۆر: $2',
+'file-info-size'      => '$1 × $2 پیکسێل، قەبارەی پەڕگە: $3، جۆری MIME: $4',
+'file-nohires'        => 'رەزۆلوشنی سەرتر لەمە لە بەردەست دا نیە.',
+'svg-long-desc'       => 'پەڕگەی SVG، بە ناو $1 × $2 پیکسەڵ، قەبارەی پەڕگە: $3',
+'show-big-image'      => 'گەورە کردنەوە',
+'show-big-image-size' => '$1 لە $2 پیکسەڵ',
 
 # Special:NewFiles
 'newimages'             => 'پێشانگای پەڕگە نوێکان',
@@ -2626,6 +2689,14 @@ $1',
 'bydate'                => 'بەپێی ڕێکەوت',
 'sp-newimages-showfrom' => 'پەڕگە نوێکان نیشان بدە بە دەستپێکردن لە $2ی $1',
 
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'video-dims' => '$1، $2 لە $3',
+'seconds'    => '{{PLURAL:$1|$1 چرکە|$1 چرکە}}',
+'minutes'    => '{{PLURAL:$1|$1 خولەک|$1 خولەک}}',
+'hours'      => '{{PLURAL:$1|$1 کاتژمێر|$1 کاتژمێر}}',
+'days'       => '{{PLURAL:$1|$1 ڕۆژ|$1 ڕۆژ}}',
+'ago'        => '$1 پێش',
+
 # Bad image list
 'bad_image_list' => 'فۆرمات بەم شێوەی خوارەوەیە:
 
@@ -2873,6 +2944,8 @@ $5
 'confirm_purge_button' => 'باشە',
 
 # action=watch/unwatch
+'confirm-watch-button'   => 'باشە',
+'confirm-watch-top'      => 'زێدەکردنی ئەم پەڕە بە لیستی چاودێریت؟',
 'confirm-unwatch-button' => 'باشه‌',
 'confirm-unwatch-top'    => 'ئەم پەڕە لە لیستی چاودێریت لاببرێت؟',
 
@@ -2892,6 +2965,7 @@ $5
 'table_pager_first'        => 'پەرەی یەکەم',
 'table_pager_last'         => 'دوا پەڕە',
 'table_pager_limit'        => '$1 بابەت نیشانبدە لە هەر پەڕەیەک',
+'table_pager_limit_label'  => 'بابەت لە ھەر پەڕەیەکدا:',
 'table_pager_limit_submit' => 'بڕۆ',
 'table_pager_empty'        => 'هیچ ئەنجامێک نییە',
 
@@ -2906,6 +2980,7 @@ $5
 'size-kilobytes' => '$1 کیلۆبایت',
 'size-megabytes' => '$1 مێگابایت',
 'size-gigabytes' => '$1 گیگابایت',
+'size-terabytes' => '$1 تێرابایت',
 
 # Live preview
 'livepreview-loading' => 'باركردن‌...',
@@ -2960,6 +3035,9 @@ $5
 'hijri-calendar-m1'  => 'موحەڕەم',
 'hijri-calendar-m2'  => 'سەفەر',
 'hijri-calendar-m3'  => 'ڕەبيع ئەلئەووەڵ',
+'hijri-calendar-m4'  => 'ڕەبيع ئەسسانی',
+'hijri-calendar-m5'  => 'جومادەلئەووەل',
+'hijri-calendar-m6'  => 'جومادەسسانی',
 'hijri-calendar-m7'  => 'ڕەجەب',
 'hijri-calendar-m8'  => 'شەعبان',
 'hijri-calendar-m9'  => 'ڕەمەزان',
@@ -3012,8 +3090,7 @@ $5
 'specialpages'                   => 'پەڕە تایبەتەکان',
 'specialpages-note'              => '----
 * پەڕە تایبەتە ئاسایییەکان.
-* <span class="mw-specialpagerestricted">پەڕە تایبەتە بەرگری‌لێکراوەکان.</span>
-* <span class="mw-specialpagecached">پەڕە تایبەتە تەنیا-Cachکراوەکان .</span>',
+* <span class="mw-specialpagerestricted">پەڕە تایبەتە بەرگری‌لێکراوەکان.</span>',
 'specialpages-group-maintenance' => 'ڕاپۆرتەکانی چاکسازی',
 'specialpages-group-other'       => 'پەڕە تایبەتەکانی دیکە',
 'specialpages-group-login'       => 'چوونەژوورەوە / ناونووسین',
@@ -3057,7 +3134,7 @@ $5
 'dberr-header'      => 'ئەم ویکی‌یە کێشەی هەیە',
 'dberr-problems'    => 'ببورە! ئەم ماڵپەڕە ئێستا خەریک ئەزموونێکی کێشەی تەکنیکیە.',
 'dberr-again'       => 'چەن خولک ڕاوەستە و نوێی بکەوە.',
-'dberr-info'        => '(پەیوەندی دەگەڵ ڕاژەکاری بنکەدراو پێک‌نایەت: $1)',
+'dberr-info'        => '(پەیوەندی لەگەڵ ڕاژەکاری بنکەدراو پێکنایەت: $1)',
 'dberr-usegoogle'   => 'دەتوانی هاوکات هەوڵی گەڕان بە گووگڵ بدەیت.',
 'dberr-outofdate'   => 'لەیادت بێ لەوانەیە پێرستەکەیان سەبارەت نە ناوەڕۆک ئەم ماڵپەڕە ماوە بەسەرچوو بێت.',
 'dberr-cachederror' => 'ئەمە ڕوونووسێکی کاش‌کراوی لاپەڕەی داواکراوە و لەوانەیە بەڕۆژ نەبێت.',
@@ -3074,8 +3151,32 @@ $5
 'htmlform-selectorother-other' => 'دیکە',
 
 # New logging system
-'revdelete-restricted'   => 'ئەو سنووری بەرگریانەی خستراوەتە سەر بەڕێوبەران',
-'revdelete-unrestricted' => 'ئەو سنووری بەرگریانەی لابردراوە لە سەر بەڕێوبەران',
-'newuserlog-byemail'     => 'تێپەڕوشە بە ئیمەیل نێردرا.',
+'logentry-delete-delete'     => '$1 پەڕەی $3ی سڕییەوە',
+'logentry-delete-restore'    => '$1 پەڕەی $3ی ھێنایەوە',
+'revdelete-restricted'       => 'ئەو سنووری بەرگریانەی خستراوەتە سەر بەڕێوبەران',
+'revdelete-unrestricted'     => 'ئەو سنووری بەرگریانەی لابردراوە لە سەر بەڕێوبەران',
+'logentry-move-move'         => '$1 پەڕەی $3 گواستەوە بۆ $4',
+'logentry-newusers-newusers' => '$1 ھەژمارێکی بەکارھێنەریی دروستکرد',
+'logentry-newusers-create'   => '$1 ھەژمارێکی بەکارھێنەریی دروستکرد',
+'logentry-newusers-create2'  => '$1 ھەژمارێکی بەکارھێنەریی دروستکرد $3',
+'newuserlog-byemail'         => 'تێپەڕوشە بە ئیمەیل نێردرا.',
+
+# Feedback
+'feedback-subject' => 'بابەت:',
+'feedback-message' => 'پەیام:',
+'feedback-cancel'  => 'ھەڵیوەشێنەوە',
+
+# API errors
+'api-error-unknownerror' => 'ھەڵەی نەزانراو: «$1».',
+
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|چرکە|چرکە}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|خولەک|خولەک}}',
+'duration-hours'     => '$1 {{PLURAL:$1|کاتژمێر|کاتژمێر}}',
+'duration-days'      => '$1 {{PLURAL:$1|ڕۆژ|ڕۆژ}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|ھەفتە|ھەفتە}}',
+'duration-years'     => '$1 {{PLURAL:$1|ساڵ|ساڵ}}',
+'duration-decades'   => '$1 {{PLURAL:$1|دەیە|دەیە}}',
+'duration-centuries' => '$1 {{PLURAL:$1|سەدە|سەدە}}',
 
 );
index c1357e4..455c8d9 100644 (file)
@@ -24,6 +24,7 @@
  * @author Ragimiri
  * @author Reaperman
  * @author Spiffyk
+ * @author Tchoř
  * @author Urhixidur
  * @author Utar
  * @author לערי ריינהארט
@@ -685,7 +686,7 @@ Databáze vrátila chybu „$3: $4“',
 'enterlockreason'      => 'Udejte důvod zamčení, včetně odhadu, za jak dlouho dojde k odemčení.',
 'readonlytext'         => 'Databáze je nyní uzamčena, takže nelze ukládat nové doplňky a změny. Důvodem je pravděpodobně pravidelná údržba, po které se vše vrátí do normálního stavu.
 
-Správce, který databázi zamkl, zanechal následující zprávu: $1',
+Správce serveru, který databázi zamkl, poskytl toto zdůvodnění: $1',
 'missing-article'      => 'V databázi nebyl nalezen požadovaný text stránky „$1“ $2.
 
 Toto je obvykle způsobeno tím, že jste následovali zastaralý odkaz na rozdíl verzí nebo historickou verzi stránky, jež byla smazána.
@@ -735,6 +736,9 @@ $2',
 'customjsprotected'    => 'Nemáte povoleno editovat tuto stránku s JavaScriptem, protože obsahuje osobní nastavení jiného uživatele.',
 'ns-specialprotected'  => 'Stránky ve jmenném prostoru {{ns:special}} nelze editovat.',
 'titleprotected'       => "Stránku s tímto názvem nelze založit, protože název zamknul uživatel [[User:$1|$1]] s odůvodněním: ''$2''.",
+'filereadonlyerror'    => "Nelze změnit soubor „$1“, protože úložiště souborů „$2“ je momentálně pouze pro čtení.
+
+Udaný důvod: „''$3''“.",
 
 # Virus scanner
 'virus-badscanner'     => "Špatná konfigurace: neznámý antivirový program: ''$1''",
@@ -1669,7 +1673,7 @@ $3',
 'newsectionsummary'                 => 'Nová sekce /* $1 */',
 'rc-enhanced-expand'                => 'Zobrazit detaily (vyžaduje JavaScript)',
 'rc-enhanced-hide'                  => 'Skrýt detaily',
-'rc-old-title'                      => 'původně vytvořeno jako "$1"',
+'rc-old-title'                      => 'původně vytvořena jako „$1“',
 
 # Recent changes linked
 'recentchangeslinked'          => 'Související změny',
@@ -1838,6 +1842,7 @@ Kontaktuje prosím [[Special:ListUsers/sysop|správce]].',
 'backend-fail-closetemp'     => 'Dočasný soubor nelze zavřít.',
 'backend-fail-read'          => 'Soubor $1 nelze číst.',
 'backend-fail-create'        => 'Soubor $1 nelze vytvořit.',
+'backend-fail-maxsize'       => 'Nelze vytvořit soubor $1, protože je větší než {{PLURAL:$2|$2 bajt|$2 bajty|$2 bajtů}}.',
 'backend-fail-readonly'      => 'Koncový úložný systém „$1“ je momentálně pouze pro čtení. Udaným důvodem je: „$2“',
 'backend-fail-synced'        => 'Soubor „$1“ je v interních koncových úložných systémech v nekonzistentním stavu',
 'backend-fail-connect'       => 'Nepodařilo se připojit ke koncovému úložnému systému „$1“.',
@@ -1845,6 +1850,9 @@ Kontaktuje prosím [[Special:ListUsers/sysop|správce]].',
 'backend-fail-contenttype'   => 'Nelze určit typ obsahu souboru k uložení do „$1“.',
 'backend-fail-batchsize'     => 'Koncový úložný systém přijal dávku s $1 {{PLURAL:souborovou operací|souborovými operacemi}}; maximum je {{PLURAL:$2|$2}}.',
 
+'filejournal-fail-dbconnect' => 'Nelze se připojit k žurnálové databázi pro koncový úložný systém „$1“.',
+'filejournal-fail-dbquery'   => 'Nepodařilo se aktualizovat žurnálovou databázi pro koncový úložný systém „$1“.',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Soubor „$1“ nelze odemknout, neboť není zamčen.',
 'lockmanager-fail-closelock'   => 'Soubor se zámkem pro „$1“ nelze zavřít.',
@@ -1966,6 +1974,7 @@ Níže jsou zobrazeny informace, které obsahuje jeho [$2 tamější stránka s
 'uploadnewversion-linktext' => 'Načíst novou verzi tohoto souboru',
 'shared-repo-from'          => 'z {{grammar:2sg|$1}}',
 'shared-repo'               => 'sdíleného úložiště',
+'filepage.css'              => '/* Zde uvedené CSS se vkládá na stránky s popisem souboru, včetně cizích klientských wiki */',
 
 # File reversion
 'filerevert'                => 'Vrátit zpět $1',
@@ -2170,6 +2179,11 @@ Zobrazení můžete zúžit výběrem typu záznamu, uživatelského jména (zá
 'allpagesbadtitle'  => 'Zadaný název stránky nebyl platný nebo obsahoval předponu mezijazykového či interwiki odkazu. Možná obsahoval znaky, které v názvu nejsou dovoleny.',
 'allpages-bad-ns'   => '{{SITENAME}} nemá jmenný prostor "$1".',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Prohlížíte si cachovanou verzi této stránky, která může být až $1 stará.',
+'cachedspecial-viewing-cached-ts'  => 'Prohlížíte si cachovanou verzi této stránky, která nemusí být zcela aktuální.',
+'cachedspecial-refresh-now'        => 'Zobrazit nejnovější.',
+
 # Special:Categories
 'categories'                    => 'Kategorie',
 'categoriespagetext'            => 'Následující kategorie {{PLURAL:$1|obsahuje|obsahují}} stránky nebo soubory.
@@ -2895,7 +2909,7 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 
 # JavaScriptTest
 'javascripttest'                           => 'Testování JavaScriptu',
-'javascripttest-disabled'                  => 'Tato funkce nebyla na této wiki povolena',
+'javascripttest-disabled'                  => 'Tato funkce nebyla na této wiki povolena.',
 'javascripttest-title'                     => 'Spouštějí se testy v $1',
 'javascripttest-pagetext-noframework'      => 'Tato stránka je vyhrazena pro spouštění testů JavaScriptu.',
 'javascripttest-pagetext-unknownframework' => 'Neznámá testovací knihovna „$1“.',
@@ -2974,30 +2988,39 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'tooltip-summary'                     => 'Zadejte stručné shrnutí',
 
 # Stylesheets
-'common.css'      => '/* Zde uvedené CSS bude ovlivňovat všechny styly */',
-'standard.css'    => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Klasický“  */',
-'nostalgia.css'   => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Nostalgie“  */',
-'cologneblue.css' => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Kolínská modř“  */',
-'monobook.css'    => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Monobook“ */',
-'myskin.css'      => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Můj vzhled“ */',
-'chick.css'       => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Kuře“ */',
-'simple.css'      => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Jednoduchý“ */',
-'modern.css'      => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Moderní“ */',
-'vector.css'      => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Vektor“ */',
-'print.css'       => '/* Zde uvedené CSS bude ovlivňovat tiskový výstup */',
-'handheld.css'    => '/* Zde uvedené CSS bude ovlivňovat přenosná zařízení vycházející ze stylu nastaveného v proměnné $wgHandheldStyle */',
+'common.css'              => '/* Zde uvedené CSS bude ovlivňovat všechny styly */',
+'standard.css'            => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Klasický“  */',
+'nostalgia.css'           => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Nostalgie“  */',
+'cologneblue.css'         => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Kolínská modř“  */',
+'monobook.css'            => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Monobook“ */',
+'myskin.css'              => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Můj vzhled“ */',
+'chick.css'               => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Kuře“ */',
+'simple.css'              => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Jednoduchý“ */',
+'modern.css'              => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Moderní“ */',
+'vector.css'              => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Vektor“ */',
+'print.css'               => '/* Zde uvedené CSS bude ovlivňovat tiskový výstup */',
+'handheld.css'            => '/* Zde uvedené CSS bude ovlivňovat přenosná zařízení vycházející ze stylu nastaveného v proměnné $wgHandheldStyle */',
+'noscript.css'            => '/* Zde uvedené CSS bude ovlivňovat uživatele s vypnutým JavaScriptem */',
+'group-autoconfirmed.css' => '/* Zde uvedené CSS bude ovlivňovat pouze automaticky schválené uživatele */',
+'group-bot.css'           => '/* Zde uvedené CSS bude ovlivňovat pouze boty */',
+'group-sysop.css'         => '/* Zde uvedené CSS bude ovlivňovat pouze správce */',
+'group-bureaucrat.css'    => '/* Zde uvedené CSS bude ovlivňovat pouze byrokraty */',
 
 # Scripts
-'common.js'      => '/* Zde uvedený JavaScript bude použit pro všechny uživatele při načtení každé stránky.  */',
-'standard.js'    => '/* JavaScript pro uživatele používající vzhled „Klasický“ */',
-'nostalgia.js'   => '/* JavaScript pro uživatele používající vzhled „Nostalgie“  */',
-'cologneblue.js' => '/* JavaScript pro uživatele používající vzhled „Kolínská modř“  */',
-'monobook.js'    => '/* JavaScript pro uživatele používající vzhled MonoBook */',
-'myskin.js'      => '/* JavaScript pro uživatele používající vzhled „Můj vzhled“ */',
-'chick.js'       => '/* JavaScript pro uživatele používající vzhled „Kuře“ */',
-'simple.js'      => '/* JavaScript pro uživatele používající vzhled „Jednoduchý“ */',
-'modern.js'      => '/* JavaScript pro uživatele používající vzhled „Moderní“ */',
-'vector.js'      => '/* JavaScript pro uživatele používající vzhled „Vektor“ */',
+'common.js'              => '/* Zde uvedený JavaScript bude použit pro všechny uživatele při načtení každé stránky.  */',
+'standard.js'            => '/* JavaScript pro uživatele používající vzhled „Klasický“ */',
+'nostalgia.js'           => '/* JavaScript pro uživatele používající vzhled „Nostalgie“  */',
+'cologneblue.js'         => '/* JavaScript pro uživatele používající vzhled „Kolínská modř“  */',
+'monobook.js'            => '/* JavaScript pro uživatele používající vzhled MonoBook */',
+'myskin.js'              => '/* JavaScript pro uživatele používající vzhled „Můj vzhled“ */',
+'chick.js'               => '/* JavaScript pro uživatele používající vzhled „Kuře“ */',
+'simple.js'              => '/* JavaScript pro uživatele používající vzhled „Jednoduchý“ */',
+'modern.js'              => '/* JavaScript pro uživatele používající vzhled „Moderní“ */',
+'vector.js'              => '/* JavaScript pro uživatele používající vzhled „Vektor“ */',
+'group-autoconfirmed.js' => '/* Zde uvedený JavaScript bude použit pouze pro automaticky schválené uživatele */',
+'group-bot.js'           => '/* Zde uvedený JavaScript bude použit pouze pro boty */',
+'group-sysop.js'         => '/* Zde uvedený JavaScript bude použit pouze pro správce */',
+'group-bureaucrat.js'    => '/* Zde uvedený JavaScript bude použit pouze pro byrokraty */',
 
 # Metadata
 'notacceptable' => 'Tento wiki server není schopen poskytnout data ve formátu, který by váš klient byl schopen přečíst.',
@@ -3630,8 +3653,9 @@ Opravdu si přejete znovu tuto stránku založit?',
 'confirm-unwatch-top'    => 'Vyjmout tuto stránku ze sledovaných?',
 
 # Separators for various lists, etc.
-'ellipsis' => '…',
-'percent'  => '$1&nbsp;%',
+'autocomment-prefix' => '–&#32;',
+'ellipsis'           => '…',
+'percent'            => '$1&nbsp;%',
 
 # Multipage image navigation
 'imgmultipageprev' => '← předchozí stránka',
@@ -3658,7 +3682,7 @@ Opravdu si přejete znovu tuto stránku založit?',
 'autosumm-new'     => 'Založena nová stránka: $1',
 
 # Size units
-'size-kilobytes' => '$1 kB',
+'size-kilobytes' => '$1 KB',
 
 # Live preview
 'livepreview-loading' => 'Nahrávám…',
@@ -3974,4 +3998,15 @@ Jinak můžete využít jednoduchý formulář níže. Váš komentář bude př
 'api-error-uploaddisabled'                => 'Načítání souborů je na této wiki vypnuto.',
 'api-error-verification-error'            => 'Soubor je možná poškozen nebo má špatnou příponu.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|sekunda|sekundy|sekund}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|minuta|minuty|minut}}',
+'duration-hours'     => '$1 {{PLURAL:$1|hodina|hodiny|hodin}}',
+'duration-days'      => '$1 {{PLURAL:$1|den|dny|dní}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|týden|týdny|týdnů}}',
+'duration-years'     => '$1 {{PLURAL:$1|rok|roky|let}}',
+'duration-decades'   => '$1 {{PLURAL:$1|dekáda|dekády|dekád}}',
+'duration-centuries' => '$1 {{PLURAL:$1|století}}',
+'duration-millennia' => '$1 {{PLURAL:$1|tisíciletí}}',
+
 );
index cac18f3..311a0be 100644 (file)
@@ -2668,7 +2668,7 @@ Mae ffolder dros dro yn eisiau.',
 
 # JavaScriptTest
 'javascripttest'                           => 'Profi JavaScript',
-'javascripttest-disabled'                  => 'Analluogwyd y swyddogaeth hon.',
+'javascripttest-disabled'                  => 'Ni alluogwyd y swyddogaeth hon ar y wici hwn.',
 'javascripttest-title'                     => 'Yn cynnal profion $1',
 'javascripttest-pagetext-noframework'      => 'Neilltuwyd y dudalen hon at gynnal profion JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Ni nabyddwyd y fframwaith profi "$1".',
@@ -3618,7 +3618,7 @@ Dangosir delweddau ar eu maint llawn, dechreuir ffeiliau o fathau eraill yn unio
 'api-error-copyuploaddisabled'            => 'Nid oes modd uwchlwytho drwy URL ar y gweinydd hwn',
 'api-error-duplicate'                     => "Mae {{PLURAL:$1||[$2 ffeil arall]|[$2 ffeiliau eraill]|[$2 ffeiliau eraill]|[$2 ffeiliau eraill]|[$2 ffeiliau eraill]}} gyda'r un cynnwys {{PLURAL:$1||ynddi|ynddynt|ynddynt|ynddynt|ynddynt}} eisoes ar y wici hwn",
 'api-error-duplicate-archive'             => "Fe fu {{PLURAL:$1|[$2 ffeil arall gyda'r un cynnwys ynddi]|[$2 ffeiliau eraill gyda'r un cynnwys ynddynt]}} ar y safle, ond fe'{{PLURAL:$1|i|u}} dilëwyd.",
-'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|Ffeiliau|Ffeil|Ffeiliau|Ffeiliau|Ffeiliau|Ffeiliau}} dyblyg, sydd eisoes wedi eu dileu.',
+'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|Ffeiliau|Ffeil|Ffeiliau|Ffeiliau|Ffeiliau|Ffeiliau}} dyblyg, sydd eisoes wedi {{PLURAL:$1|eu|ei|eu|eu|eu|eu}} dileu.',
 'api-error-duplicate-popup-title'         => '{{PLURAL:$1|Ffeiliau|ffeil|ffeiliau|ffeiliau|ffeiliau|ffeiliau}} dyblyg.',
 'api-error-empty-file'                    => "Mae'r ffeil a gyflwynwyd gennych yn wag.",
 'api-error-emptypage'                     => "Ni chaniateir dechrau tudalen newydd, a honno'n wag.",
index d2fdddb..6c14813 100644 (file)
@@ -1660,6 +1660,7 @@ Informer venligst en [[Special:ListUsers/sysop|systemadministrator]].',
 'backend-fail-closetemp'     => 'Kunne ikke lukke midlertidig fil.',
 'backend-fail-read'          => 'Kunne ikke læse filen $1.',
 'backend-fail-create'        => 'Kunne ikke oprette filen $1.',
+'backend-fail-maxsize'       => 'Kunne ikke oprette filen $1, da den er større end {{PLURAL:$2|$2 byte|$2 bytes}}.',
 'backend-fail-readonly'      => 'Lagrings-backend "$1" er i øjeblikket skrivebeskyttet. Den angivne begrundelse var: " $2 "',
 'backend-fail-synced'        => 'Filen "$1" er i en inkonsistent tilstand inden for de interne lagringsbackends',
 'backend-fail-connect'       => 'Kunne ikke forbinde til lagringsbackend "$1".',
@@ -1993,6 +1994,9 @@ Du kan afgrænse visningen ved at vælge en logtype, brugernavn eller påvirket
 'allpagesbadtitle'  => 'Det indtastede sidenavn er ugyldigt: Det har enten et foranstillet sprog-, en Interwiki-forkortelse eller indeholder et eller flere tegn, som ikke må anvendes i sidenavne.',
 'allpages-bad-ns'   => 'Navnerummet $1 findes ikke på {{SITENAME}}.',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'Vis seneste.',
+
 # Special:Categories
 'categories'                    => 'Kategorier',
 'categoriespagetext'            => 'Følgende {{PLURAL:$1|kategori|kategorier}} indeholder sider eller media.
@@ -3716,4 +3720,14 @@ Ellers kan du bruge den enkle formular nedenfor. Din kommentar vil blive tilføj
 'api-error-uploaddisabled'                => 'Oplægning af filer er slået fra på denne wiki.',
 'api-error-verification-error'            => 'Denne fil kan være beskadiget, eller den har måske en forkert filendelse.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|sekund|sekunder}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|minut|minutter}}',
+'duration-hours'     => '$1 {{PLURAL:$1|time|timer}}',
+'duration-days'      => '$1 {{PLURAL:$1|dag|dage}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|uge|uger}}',
+'duration-years'     => '$1 {{PLURAL:$1|år|år}}',
+'duration-decades'   => '$1 {{PLURAL:$1|årti|årtier}}',
+'duration-centuries' => '$1 {{PLURAL:$1|århundrede|århundreder}}',
+
 );
index 4747ad7..4b87d0f 100644 (file)
@@ -383,7 +383,7 @@ $messages = array(
 'tog-justify'                 => 'Text als Blocksatz',
 'tog-hideminor'               => 'Kleine Änderungen in den „Letzten Änderungen“ ausblenden',
 'tog-hidepatrolled'           => 'Kontrollierte Änderungen in den „Letzten Änderungen“ ausblenden',
-'tog-newpageshidepatrolled'   => 'Kontrollierte Seiten in den „Neuen Seiten“ ausblenden',
+'tog-newpageshidepatrolled'   => 'Kontrollierte Seiten bei den „Neuen Seiten“ ausblenden',
 'tog-extendwatchlist'         => 'Erweiterte Beobachtungsliste zur Anzeige aller Änderungen',
 'tog-usenewrc'                => 'Erweiterte Darstellung der „Letzten Änderungen“ (benötigt JavaScript)',
 'tog-numberheadings'          => 'Überschriften automatisch nummerieren',
@@ -764,6 +764,9 @@ $2',
 'ns-specialprotected'  => 'Spezialseiten können nicht bearbeitet werden.',
 'titleprotected'       => "Eine Seite mit diesem Namen kann nicht angelegt werden.
 Die Sperre wurde durch [[User:$1|$1]] mit der Begründung ''„$2“'' eingerichtet.",
+'filereadonlyerror'    => "Die Datei „$1“ kann nicht verändert werden, da auf das Dateirepositorium „$2“ nur Lesezugriff möglich ist.
+
+Der angegebene Grund ist „''$3''“.",
 
 # Virus scanner
 'virus-badscanner'     => "Fehlerhafte Konfiguration: unbekannter Virenscanner: ''$1''",
@@ -1614,7 +1617,7 @@ Dies kann nicht mehr rückgängig gemacht werden.',
 'right-siteadmin'             => 'Datenbank sperren und entsperren',
 'right-override-export-depth' => 'Exportiere Seiten einschließlich verlinkter Seiten bis zu einer Tiefe von 5',
 'right-sendemail'             => 'E-Mails an andere Benutzer senden',
-'right-passwordreset'         => 'Passwort eines Benutzers zurücksetzen',
+'right-passwordreset'         => 'Passwort eines Benutzers zurücksetzen und die dazu verschickte E-Mail einsehen',
 
 # User rights log
 'rightslog'                  => 'Rechte-Logbuch',
@@ -1872,6 +1875,7 @@ Wenn das Problem weiter besteht, informiere einen [[Special:ListUsers/sysop|Syst
 'backend-fail-closetemp'     => 'Die temporäre Datei konnte nicht geschlossen werden.',
 'backend-fail-read'          => 'Die Datei $1 konnte nicht gelesen werden.',
 'backend-fail-create'        => 'Die Datei $1 konnte nicht erstellt werden.',
+'backend-fail-maxsize'       => 'Die Datei $1 konnte nicht erstellt werden, da sie größer als {{PLURAL:$2|ein Byte|$2 Byte}} ist.',
 'backend-fail-readonly'      => 'Das Speicher-Backend „$1“ befindet sich derzeit im Lesemodus. Der angegebene Grund lautet: „$2“',
 'backend-fail-synced'        => 'Die Datei „$1“ befindet sich, innerhalb des internen Speicher-Backends, in einem inkonsistenten Zustand.',
 'backend-fail-connect'       => 'Es konnte keine Verbindung zum Speicher-Backend „$1“ hergestellt werden.',
@@ -1879,6 +1883,9 @@ Wenn das Problem weiter besteht, informiere einen [[Special:ListUsers/sysop|Syst
 'backend-fail-contenttype'   => 'Der Inhaltstyp, der im Pfad „$1“ zu speichernden Datei, konnte nicht bestimmt werden.',
 'backend-fail-batchsize'     => 'Eine Stapelverarbeitungsdatei, die {{PLURAL:$1|eine Operation|$1 Operationen}} enthält, wurde an das Speicher-Backend gesandt. Die Begrenzung liegt allerdings bei {{PLURAL:$2|einer Operation|$2 Operationen}}.',
 
+'filejournal-fail-dbconnect' => 'Es konnte keine Verbindung zur Journaldatenbank des Speicher-Backends „$1“ hergestellt werden.',
+'filejournal-fail-dbquery'   => 'Die Journaldatenbank des Speicher-Backends „$1“ konnte nicht aktualisiert werden.',
+
 # Lock manager
 'lockmanager-notlocked'        => '„$1“ konnte nicht entsperrt werden, da keine Sperrung besteht.',
 'lockmanager-fail-closelock'   => 'Die Sperrdatei für „$1“ konnte nicht geschlossen werden.',
@@ -2206,6 +2213,11 @@ Die Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seite
 'allpagesbadtitle'  => 'Der eingegebene Seitenname ist ungültig: Er hat entweder ein vorangestelltes Sprach-, ein Interwiki-Kürzel oder enthält ein oder mehrere Zeichen, welche in Seitennamen nicht verwendet werden dürfen.',
 'allpages-bad-ns'   => 'Der Namensraum „$1“ ist in {{SITENAME}} nicht vorhanden.',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Du siehst die gecachte Version dieser Seite, die bis zu $1 alt sein kann.',
+'cachedspecial-viewing-cached-ts'  => 'Du siehst die gecachte Version dieser Seite, die möglicherweise nicht aktuell ist.',
+'cachedspecial-refresh-now'        => 'Aktuelle Version ansehen.',
+
 # Special:Categories
 'categories'                    => 'Kategorien',
 'categoriespagetext'            => 'Folgende {{PLURAL:$1|Kategorie enthält|Kategorien enthalten}} Seiten oder Dateien.
@@ -2531,7 +2543,7 @@ Im [[Special:Log/delete|Lösch-Logbuch]] findest du eine Übersicht der gelösch
 'undelete-bad-store-key'       => 'Die Dateiversion mit dem Zeitstempel $1 konnte nicht wiederhergestellt werden: Die Datei war bereits vor dem Löschen nicht mehr vorhanden.',
 'undelete-cleanup-error'       => 'Fehler beim Löschen der unbenutzten Archiv-Version $1.',
 'undelete-missing-filearchive' => 'Die Datei mit der Archiv-ID $1 kann nicht wiederhergestellt werden, da sie nicht in der Datenbank vorhanden ist. Möglicherweise wurde sie bereits wiederhergestellt.',
-'undelete-error'               => 'Es beim Wiederherstellen der Seite ein Fehler aufgetreten.',
+'undelete-error'               => 'Es ist beim Wiederherstellen der Seite ein Fehler aufgetreten.',
 'undelete-error-short'         => 'Fehler beim Wiederherstellen der Datei $1',
 'undelete-error-long'          => 'Es wurden Fehler beim Wiederherstellen einer Datei festgestellt:
 
@@ -3887,7 +3899,7 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 'dberr-cachederror' => 'Folgendes ist eine Kopie des Caches der angeforderten Seite und kann veraltet sein.',
 
 # HTML forms
-'htmlform-invalid-input'       => 'Mit einigen Eingaben gibt es Probleme',
+'htmlform-invalid-input'       => 'Mit einer oder mehreren Eingaben gibt es Probleme',
 'htmlform-select-badoption'    => 'Der angegebene Wert ist keine gültige Option.',
 'htmlform-int-invalid'         => 'Der angegebene Wert ist keine Ganzzahl.',
 'htmlform-float-invalid'       => 'Der angegebene Wert ist keine Zahl.',
@@ -3928,9 +3940,9 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 'logentry-move-move_redir-noredirect' => '$1 verschob Seite $3 nach $4 und überschrieb dabei eine Weiterleitung ohne selbst eine Weiterleitung anzulegen',
 'logentry-patrol-patrol'              => '$1 markierte Version $4 von Seite $3 als kontrolliert',
 'logentry-patrol-patrol-auto'         => '$1 markierte automatisch Version $4 von Seite $3 als kontrolliert',
-'logentry-newusers-newusers'          => '$1 erstellte ein Benutzerkonto',
-'logentry-newusers-create'            => '$1 erstellte ein Benutzerkonto',
-'logentry-newusers-create2'           => '$1 erstellte ein Benutzerkonto $3',
+'logentry-newusers-newusers'          => 'Benutzerkonto $1 wurde erstellt',
+'logentry-newusers-create'            => 'Benutzerkonto $1 wurde erstellt',
+'logentry-newusers-create2'           => 'Benutzerkonto $3 wurde von $1 erstellt',
 'logentry-newusers-autocreate'        => 'Benutzerkonto $1 wurde automatisch erstellt',
 'newuserlog-byemail'                  => 'das Passwort wurde per E-Mail versandt',
 
@@ -3988,4 +4000,14 @@ Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kom
 'api-error-uploaddisabled'                => 'Das Hochladen ist in diesem Wiki deaktiviert.',
 'api-error-verification-error'            => 'Die hochzuladende Datei ist entweder fehlerhaft oder hat keine Dateinamenserweiterung.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|Sekunde|Sekunden}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|Minute|Minuten}}',
+'duration-hours'     => '$1 {{PLURAL:$1|Stunde|Stunden}}',
+'duration-days'      => '$1 {{PLURAL:$1|Tag|Tage}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|Woche|Wochen}}',
+'duration-years'     => '$1 {{PLURAL:$1|Jahr|Jahre}}',
+'duration-decades'   => '$1 {{PLURAL:$1|Jahrzehnt|Jahrzehnte}}',
+'duration-centuries' => '$1 {{PLURAL:$1|Jahrhundert|Jahrhunderte}}',
+
 );
index c7b7c20..1c105b0 100644 (file)
@@ -400,10 +400,6 @@ Prüfen Sie die URL auf Fehler, den Online-Status der Seite und versuchem Sie er
 Wenn das Problem weiter besteht, informieren Sie einen [[Special:ListUsers/sysop|System-Administrator]].',
 
 # img_auth script messages
-'img-auth-nopathinfo' => 'PATH_INFO fehlt.
-Ihr Server ist nicht dafür eingerichtet, diese Information weiterzugeben.
-Sie könnte CGI-gestützt sein und kann daher img_auth nicht ermöglichen.
-Siehe http://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-nologinnWL' => 'Sie sind nicht angemeldet und „$1“ ist nicht in der weißen Liste.',
 'img-auth-isdir'      => 'Sie versuchen, auf ein Verzeichnis „$1“ zuzugreifen.
 Nur Dateizugriff ist erlaubt.',
@@ -437,6 +433,10 @@ Nur Dateizugriff ist erlaubt.',
 'booksources-invalid-isbn' => 'Vermutlich ist die ISBN ungültig.
 Bitte prüfen Sie, ob sie korrekt von der Quelle übertragen wurde.',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Sie sehen die gecachte Version dieser Seite, die bis zu $1 alt sein kann.',
+'cachedspecial-viewing-cached-ts'  => 'Sie sehen die gecachte Version dieser Seite, die möglicherweise nicht aktuell ist.',
+
 # E-mail user
 'mailnologintext' => 'Sie müssen [[Special:UserLogin|angemeldet sein]] und eine bestätigte E-Mail-Adresse in Ihren [[Special:Preferences|Einstellungen]] eingetragen haben, um anderen Benutzern E-Mails schicken zu können.',
 'emailpagetext'   => 'Sie könnent dem Benutzer mit dem unten stehenden Formular eine E-Mail senden.
@@ -606,15 +606,13 @@ Alle Transwiki-Import-Aktionen werden im [[Special:Log/import|Import-Logbuch]] p
 'javascripttest-pagetext-skins' => 'Wählen Sie eine Benutzeroberfläche zur Durchführung der Tests aus:',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage'            => 'Ihre Benutzerseite',
-'tooltip-pt-anonuserpage'        => 'Benutzerseite der IP-Adresse, von der aus Sie Änderungen durchführen',
-'tooltip-pt-mytalk'              => 'Ihre Diskussionsseite',
-'tooltip-pt-mycontris'           => 'Liste Ihrer Beiträge',
-'tooltip-n-mainpage'             => 'Besuchen Sie die Hauptseite',
-'tooltip-n-mainpage-description' => 'Besuchen Sie die Hauptseite',
-'tooltip-n-portal'               => 'Über das Projekt, was Sie tun können, wo was zu finden ist',
-'tooltip-watch'                  => 'Diese Seite zu Ihrer Beobachtungsliste hinzufügen',
-'tooltip-summary'                => 'Geben Sie eine kurze Zusammenfassung ein.',
+'tooltip-pt-userpage'     => 'Ihre Benutzerseite',
+'tooltip-pt-anonuserpage' => 'Benutzerseite der IP-Adresse, von der aus Sie Änderungen durchführen',
+'tooltip-pt-mytalk'       => 'Ihre Diskussionsseite',
+'tooltip-pt-mycontris'    => 'Liste Ihrer Beiträge',
+'tooltip-n-portal'        => 'Über das Projekt, was Sie tun können, wo was zu finden ist',
+'tooltip-watch'           => 'Diese Seite zu Ihrer Beobachtungsliste hinzufügen',
+'tooltip-summary'         => 'Geben Sie eine kurze Zusammenfassung ein.',
 
 # Metadata
 'notacceptable' => 'Der Wiki-Server kann die Daten nicht für Ihr Ausgabegerät aufbereiten.',
index bca9139..ba54d8a 100644 (file)
@@ -538,6 +538,9 @@ Wótpšašanje: $2',
 'customjsprotected'    => 'Njamaš pšawo, aby toś ten JavaScriptowy bok wobźěłał, dokulaž wopśimujo  wósobinske nastajenja drugego wužywarja.',
 'ns-specialprotected'  => 'Njejo móžno, boki w rumje {{ns:special}} wobźěłaś.',
 'titleprotected'       => "Bok z toś tym mjenim bu wót [[User:$1|$1]] pśeśiwo napóranjeju šćitany. Pśicyna jo ''$2''.",
+'filereadonlyerror'    => 'Njejo móžno dataju "$1" změniś, dokulaž datajowy repozitorium "$2" jo jano cytajobny.
+
+Pódana pśicyna jo "\'\'$3\'\'".',
 
 # Virus scanner
 'virus-badscanner'     => "Špatna konfiguracija: njeznaty wirusowy scanner: ''$1''",
@@ -1620,6 +1623,7 @@ $1',
 'backend-fail-closetemp'     => 'Temporerna dataja njedajo se zacyniś.',
 'backend-fail-read'          => 'Dataja $1 njedajo se cytaś.',
 'backend-fail-create'        => 'Dataja $1 njedajo se napóraś.',
+'backend-fail-maxsize'       => 'Dataja $1 njedajo se napóraś, dokulaž jo wětša ako {{PLURAL:$2|$2 bajt|$2 bajta|$2 bajty|$2 bajtow}}.',
 'backend-fail-readonly'      => 'Składowański backend "$1" dajo se tuchylu jano cytaś. Pśicyna jo była: "$2"',
 'backend-fail-synced'        => 'Dataja "$1" jo  w internem składowańskem backenźe w inkonsistentnem stawje',
 'backend-fail-connect'       => 'Zwisk z datajowym składowańskem backendom "$1" njejo móžno.',
@@ -1627,6 +1631,9 @@ $1',
 'backend-fail-contenttype'   => 'Wopśimjeśowy typ dataje, kótaraž ma se na "$1" składowaś, njedajo se zwěsćiś.',
 'backend-fail-batchsize'     => 'Štapjelowa dataja, kótaraž wopśimujo {{PLURAL:$1|jadnu operaciju|$1 operaciji|$1 operacije|$1 operacijow}},  jo se  na składowański backend pósłała; limit jo $2 {{PLURAL:$1|operaciju|operaciji|operacije|operacijow}}.',
 
+'filejournal-fail-dbconnect' => 'Njejo žeden zwisk ze žurnaloweju datoweju banku za składowański backend "$1" móžno.',
+'filejournal-fail-dbquery'   => 'Žurnalowa datowa banka za składowański backend "$1" njedajo se aktualizěrowaś.',
+
 # Lock manager
 'lockmanager-notlocked'        => '"$1" njedajo se wótwóriś; njejo zastajony.',
 'lockmanager-fail-closelock'   => 'Zastajańska dataja njedajo se za "$1" zacyniś.',
@@ -1950,6 +1957,11 @@ Pšosym glědaj na to, až druge websedła móžu k drugej dataji z direktnym UR
 'allpagesbadtitle'  => 'Zapódane mě boka njejo płaśece: Jo móžno, až ma pśedstajonu rěcnu resp. interwikijowu krotceńku abo wopśimjejo jadno abo wěcej znamuškow, kótarež njamgu se za mjenja bokow wužywaś.',
 'allpages-bad-ns'   => 'Mjenjowy rum „$1“ w {{SITENAME}} njeeksistěrujo.',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Woglědujoš se pufrowanu wersiju toś togo boka, kótaraž móžo do $1 stara byś.',
+'cachedspecial-viewing-cached-ts'  => 'Woglědujoš se pufrowanu wersiju toś togo boka, kótaraž by mógła njeaktualna byś.',
+'cachedspecial-refresh-now'        => 'Aktualnu wersiju se woglědaś.',
+
 # Special:Categories
 'categories'                    => 'Kategorije',
 'categoriespagetext'            => '{{PLURAL:$1|Slědujuca kategorija wopśimujo|Slědujucej kategoriji wopśimujotej|Slědujuce kategorije wopśimuju|Slědujuce kategorije wopśimuju}} boki abo medije.
@@ -3677,4 +3689,14 @@ Hować móžoš slědujucy jadnory formular wužywaś. Twój komentar pśidajo s
 'api-error-uploaddisabled'                => 'Nagraśa su na toś tom wikiju znjemóžnjone.',
 'api-error-verification-error'            => 'Toś ta dataja by mógła wobkškóźona byś abo wopacnu kóńcowku měś.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|sekunda|sekunźe|sekundy|sekundow}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|minuta|minuśe|minuty|minutow}}',
+'duration-hours'     => '$1 {{PLURAL:$1|góźina|góźinje|góźiny|góźinow}}',
+'duration-days'      => '$1 {{PLURAL:$1|źeń|dnja|dny|dnjow}}',
+'duration-weeks'     => '$1 {{PLURAL: $1|tyźeń|tyźenja|tyźenje|tyźenjow}}',
+'duration-years'     => '$1 {{PLURAL: $1|lěto|lěśe|lěta|lět}}',
+'duration-decades'   => '$1 {{PLURAL:$1|lětźasetk|lětźasetka|lětźasetki|lětźastkow}}',
+'duration-centuries' => '$1 {{PLURAL:$1|stolěśe|stolěśi|stolěśa|stolěśow}}',
+
 );
index cb953c8..0b626e6 100644 (file)
@@ -696,6 +696,10 @@ Milo ko do gumuli om mongidit di bolikon poinsuang, toi ko [[Special:UserLogin|s
 'permissionserrors'                => 'Nokosilap pinapasaga',
 'permissionserrorstext'            => 'Awu ko pasagaon do momonsoi miagal dilo, tu {{PLURAL:$1|sabab|sasabab no}} do:',
 'permissionserrorstext-withaction' => 'Awu ko pasagaon do $2, {{PLURAL:$1|sabab|sasabab no}} do:',
+'recreate-moveddeleted-warn'       => "'''Kapanansarahan: Koponugut koh do momudali di bolikon do nopugas.'''
+
+Pomusarahai poh koti pogulu do potilombusonnu do mongitit toi monimban.
+Log pinomugasan pinotangoi do hiti montok noh do kasanangannu.",
 'moveddeleted-notice'              => 'Nopugas no bolikon diti. Pimomugasan om log pinowolihon do bolikon pinosodia id siriba montok riporon.',
 'log-fulllog'                      => 'Intaai log poimponu',
 'edit-hook-aborted'                => 'Niditan pinaratu do kakait.
@@ -714,6 +718,8 @@ It should have less than $2 {{PLURAL:$2|call|calls}}, there {{PLURAL:$1|is now $
 'post-expand-template-inclusion-warning'  => "'''Panansarahan:''' Pomitanan pinohompit kalabai tukuran.
 Pipiro pomitanan polobuson.",
 'post-expand-template-inclusion-category' => 'Bobolikon kohompit pomitanan kolabai tukuran',
+'post-expand-template-argument-warning'   => "'''Kapanansarahan:''' Kisuang do sokukuri do iso pogibabarasan id pomitanan diti ii koponginggayo do suang. Nadaan noh pogibabarasan diti.",
+'post-expand-template-argument-category'  => 'Yadaan bolikon dii kipibarasan kokomoi do pomitanan.',
 
 # History pages
 'viewpagelogs'           => 'Intaai tongolog do bolikon diti',
@@ -950,6 +956,7 @@ Imurai no do indik suang diti {{SITENAME}} nopo nga nokolipas.',
 'recentchanges-label-bot'         => 'Niditan diti winonsoi do robot',
 'recentchanges-label-unpatrolled' => 'Niditan diti awu poh nosimak',
 'rcnote'                          => "Iti {{PLURAL:$1|noh '''1''' nalanan|nopo '''$1''' dohuri nopingalanan}} solinaid {{PLURAL:$2|tadau|'''$2''' tadau}}, ontok di $4, jaam $5.",
+'rcnotefrom'                      => "Id siriba diti pokitonon ii nopingalanan mantad '''$2''' (gisom '''$1''' ).",
 'rclistfrom'                      => 'Pokitono naalanan kawawagu tumimpuun mantad $1',
 'rcshowhideminor'                 => '$1 niditan tokoto',
 'rcshowhidebots'                  => 'Roboto $1',
@@ -1021,7 +1028,7 @@ Bobolikon id [[Special:Watchlist|lis pintangannu]] nopo nga '''pinakapal'''.",
 'filehist-filesize'         => 'Tinipongan pail',
 'filehist-comment'          => 'Kumin',
 'filehist-missing'          => 'Natagak pail',
-'imagelinks'                => 'Noputan do pail',
+'imagelinks'                => 'Pomogunaan do pail',
 'linkstoimage'              => 'Iti kiharo {{PLURAL:$1|bolikon poingoput|$1 bobolikon poingoput}} id pail diti:',
 'nolinkstoimage'            => 'Ingaa bobolikon it poingoput id pail diti.',
 'morelinkstoimage'          => 'Intaai [[Special:WhatLinksHere/$1|tongotoput]] pail diti.',
@@ -1038,11 +1045,13 @@ Kointalangan dilo [$2 kointalangan pail] okito id siriba.',
 # Statistics
 'statistics' => 'Runumboboyo',
 
+'disambiguationspage' => 'Template:patarango',
+
 # Miscellaneous special pages
 'nbytes'        => '$1 {{PLURAL:$1|bait|babait}}',
 'nmembers'      => '$1 {{PLURAL:$1|koombolutan|tongokoombolutan}}',
 'prefixindex'   => 'Oinsanan bolikan di kiponimpuunan',
-'usercreated'   => 'Winonsoi ontok $1 di jaam $2',
+'usercreated'   => '{{GENDER:$3|Created}} ontok $1 di jaam $2',
 'newpages'      => 'Bobolikon wagu',
 'move'          => 'Poundoliho',
 'movethispage'  => 'Poundoliho iti bolikon',
@@ -1177,9 +1186,11 @@ Milo ko nogi do mongolon tingkat tingolig diti, nga ingaa it kosimbanon montok t
 'sp-contributions-newbies'  => 'Pokitono pinotoluod di takaun kawawagu nopo.',
 'sp-contributions-blocklog' => 'antabai log',
 'sp-contributions-uploads'  => 'poposuang',
+'sp-contributions-logs'     => 'tongolog',
 'sp-contributions-talk'     => 'bolotok',
 'sp-contributions-search'   => 'Ihumo pinotoluod',
 'sp-contributions-username' => 'Kinoyonon IP toi momomoguno:',
+'sp-contributions-toponly'  => 'Pokitono nititan kawawagu di nobiri.',
 'sp-contributions-submit'   => 'Ihumo',
 
 # What links here
@@ -1187,6 +1198,7 @@ Milo ko nogi do mongolon tingkat tingolig diti, nga ingaa it kosimbanon montok t
 'whatlinkshere-title'      => 'Bolikon di poingoput id "$1"',
 'whatlinkshere-page'       => 'Bolikon:',
 'linkshere'                => "Bolikon diti poingoput kumaa id  '''[[:$1]]''':",
+'nolinkshere'              => "Ingaa bolikon poingoput id '''[[:$1]]'''.",
 'isredirect'               => 'bolikon pinotilombus',
 'istemplate'               => 'alanai',
 'isimage'                  => 'noputan do upa',
@@ -1390,6 +1402,16 @@ Iri suai sinandad do poinlisok.
 # Special:SpecialPages
 'specialpages' => 'Bolikon suaikowokon',
 
+# External image whitelist
+'external_image_whitelist' => ' #Pologoson baris diti<pre>
+#Suangai do boros koubasanan (guas boros id pialatan //) ponongsiriba
+#Noputan di kaagal pojodion do toput poinsuang (toput koubasanan) do tangagambar
+#Toput di kaagal no silihon do gambar, nung awu nga okito o noputan sinuratan
+#Baris di kisimbol do # nopo nga ointutunan sobaagi do bolotok
+#Tumanud do pisuaian A om a
+
+#Posurato toinsanan id sawat do garis diti. Pologoson iti garis miagal diti</pre>',
+
 # Special:Tags
 'tag-filter' => '[[Special:Tags|Pananda]] gagan:',
 
index 3c682a5..c0f63ed 100644 (file)
@@ -997,6 +997,9 @@ Please report this to an [[Special:ListUsers/sysop|administrator]], making note
 'directorycreateerror' => 'Could not create directory "$1".',
 'filenotfound'         => 'Could not find file "$1".',
 'fileexistserror'      => 'Unable to write to file "$1": File exists.',
+'filereadonlyerror'    => 'Unable to the modify the file "$1" because the file repository "$2" is in read-only mode.
+
+The administrator who locked it offered this explanation: "$3".',
 'unexpected'           => 'Unexpected value: "$1"="$2".',
 'formerror'            => 'Error: Could not submit form.',
 'badarticleerror'      => 'This action cannot be performed on this page.',
@@ -1034,6 +1037,9 @@ $2',
 'ns-specialprotected'  => 'Special pages cannot be edited.',
 'titleprotected'       => 'This title has been protected from creation by [[User:$1|$1]].
 The reason given is "\'\'$2\'\'".',
+'filereadonlyerror'    => 'Unable to modify the file "$1" because the file repository "$2" is in read-only mode.
+
+The reason given is "\'\'$3\'\'".',
 
 # Virus scanner
 'virus-badscanner'     => "Bad configuration: Unknown virus scanner: ''$1''",
@@ -1062,6 +1068,7 @@ Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
 'userloginnocreate'          => 'Log in',
 'logout'                     => 'Log out',
 'userlogout'                 => 'Log out',
+'userlogout-summary'         => '', # do not translate or duplicate this message to other languages
 'notloggedin'                => 'Not logged in',
 'nologin'                    => "Don't have an account? $1.",
 'nologinlink'                => 'Create an account',
@@ -1228,6 +1235,7 @@ Temporary password: $2',
 
 # Special:ChangeEmail
 'changeemail'          => 'Change e-mail address',
+'changeemail-summary'  => '', # do not translate or duplicate this message to other languages
 'changeemail-header'   => 'Change account e-mail address',
 'changeemail-text'     => 'Complete this form to change your e-mail address. You will need to enter your password to confirm this change.',
 'changeemail-no-info'  => 'You must be logged in to access this page directly.',
@@ -1292,7 +1300,7 @@ You cannot use the 'e-mail this user' feature unless a valid e-mail address is s
 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.
-The reason given is this:
+The reason given is:
 
 :\'\'$2\'\'
 
@@ -1364,7 +1372,7 @@ Custom .css and .js pages use a lowercase title, e.g. {{ns:user}}:Foo/vector.css
 'updated'                          => '(Updated)',
 'note'                             => "'''Note:'''",
 'previewnote'                      => "'''Remember that this is only a preview.'''
-Your changes have not yet been saved!",
+Your changes have not yet been saved! [[#editform|→ Continue editing]]",
 'previewconflict'                  => 'This preview reflects the text in the upper text editing area as it will appear if you choose to save.',
 'session_fail_preview'             => "'''Sorry! We could not process your edit due to a loss of session data.'''
 Please try again.
@@ -1764,6 +1772,7 @@ Note that their indexes of {{SITENAME}} content may be out of date.',
 'prefsnologin'                  => 'Not logged in',
 'prefsnologintext'              => 'You must be <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logged in]</span> to set user preferences.',
 'changepassword'                => 'Change password',
+'changepassword-summary'        => '', # do not translate or duplicate this message to other languages
 'prefs-skin'                    => 'Skin',
 'skin-preview'                  => 'Preview',
 'datedefault'                   => 'No preference',
@@ -2263,14 +2272,18 @@ If the problem persists, contact an [[Special:ListUsers/sysop|administrator]].',
 'backend-fail-closetemp'     => 'Could not close temporary file.',
 'backend-fail-read'          => 'Could not read file $1.',
 'backend-fail-create'        => 'Could not create file $1.',
-'backend-fail-maxsize'       => 'Could not create file $1 because it is larger than {{PLURAL:$2|$2 bytes|$2 byte}}.',
-'backend-fail-readonly'      => 'The storage backend "$1" is currently read-only. The reason given was: "$2"',
+'backend-fail-maxsize'       => 'Could not create file $1 because it is larger than {{PLURAL:$2|one byte|$2 bytes}}.',
+'backend-fail-readonly'      => 'The storage backend "$1" is currently read-only. The reason given is: "\'\'$2\'\'"',
 'backend-fail-synced'        => 'The file "$1" is in an inconsistent state within the internal storage backends',
 'backend-fail-connect'       => 'Could not connect to storage backend "$1".',
 'backend-fail-internal'      => 'An unknown error occurred in storage backend "$1".',
 'backend-fail-contenttype'   => 'Could not determine the content type of the file to store at "$1".',
 'backend-fail-batchsize'     => 'Storage backend given a batch of $1 file {{PLURAL:$1|operation|operations}}; the limit is $2 {{PLURAL:$2|operation|operations}}.',
 
+# File journal
+'filejournal-fail-dbconnect' => 'Could not connect to the journal database for storage backend "$1".',
+'filejournal-fail-dbquery'   => 'Could not update the journal database for storage backend "$1".',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Could not unlock "$1"; it is not locked.',
 'lockmanager-fail-closelock'   => 'Could not close lock file for "$1".',
@@ -2391,6 +2404,10 @@ A [[Special:WhatLinksHere/$2|full list]] is available.',
 Please see the [$2 file description page] for further information.',
 'sharedupload-desc-here'            => 'This file is from $1 and may be used by other projects.
 The description on its [$2 file description page] there is shown below.',
+'sharedupload-desc-edit'            => 'This file is from $1 and may be used by other projects.
+Maybe you want edit the description on its [$2 file description page] there.',
+'sharedupload-desc-create'          => 'This file is from $1 and may be used by other projects.
+Maybe you want edit the description on its [$2 file description page] there.',
 'shareddescriptionfollows'          => '-', # do not translate or duplicate this message to other languages
 'filepage-nofile'                   => 'No file by this name exists.',
 'filepage-nofile-link'              => 'No file by this name exists, but you can [$1 upload it].',
@@ -2537,7 +2554,9 @@ It now redirects to [[$2]].',
 'uncategorizedtemplates'          => 'Uncategorized templates',
 'uncategorizedtemplates-summary'  => '', # do not translate or duplicate this message to other languages
 'unusedcategories'                => 'Unused categories',
+'unusedcategories-summary'        => '', # do not translate or duplicate this message to other languages
 'unusedimages'                    => 'Unused files',
+'unusedimages-summary'            => '', # do not translate or duplicate this message to other languages
 'popularpages'                    => 'Popular pages',
 'popularpages-summary'            => '', # do not translate or duplicate this message to other languages
 'wantedcategories'                => 'Wanted categories',
@@ -2649,6 +2668,7 @@ You can narrow down the view by selecting a log type, the username (case-sensiti
 'allpagesbadtitle'  => 'The given page title was invalid or had an inter-language or inter-wiki prefix.
 It may contain one or more characters which cannot be used in titles.',
 'allpages-bad-ns'   => '{{SITENAME}} does not have namespace "$1".',
+'allpages-hide-redirects' => 'Hide redirects',
 
 # Special:Categories
 'categories'                    => 'Categories',
@@ -2662,19 +2682,21 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 # Special:DeletedContributions
 'deletedcontributions'             => 'Deleted user contributions',
+'deletedcontributions-summary'     => '', # do not translate or duplicate this message to other languages
 'deletedcontributions-title'       => 'Deleted user contributions',
 'sp-deletedcontributions-contribs' => 'contributions',
 
 # Special:LinkSearch
-'linksearch'       => 'External links search',
-'linksearch-pat'   => 'Search pattern:',
-'linksearch-ns'    => 'Namespace:',
-'linksearch-ok'    => 'Search',
-'linksearch-text'  => 'Wildcards such as "*.wikipedia.org" may be used.
+'linksearch'         => 'External links search',
+'linksearch-summary' => '', # do not translate or duplicate this message to other languages
+'linksearch-pat'     => 'Search pattern:',
+'linksearch-ns'      => 'Namespace:',
+'linksearch-ok'      => 'Search',
+'linksearch-text'    => 'Wildcards such as "*.wikipedia.org" may be used.
 Needs at least a top-level domain, for example "*.org".<br />
 Supported protocols: <tt>$1</tt> (do not add any of these in your search).',
-'linksearch-line'  => '$1 is linked from $2',
-'linksearch-error' => 'Wildcards may appear only at the start of the hostname.',
+'linksearch-line'    => '$1 is linked from $2',
+'linksearch-error'   => 'Wildcards may appear only at the start of the hostname.',
 
 # Special:ListUsers
 'listusersfrom'      => 'Display users starting at:',
@@ -2721,6 +2743,7 @@ There may be [[{{MediaWiki:Listgrouprights-helppage}}|additional information]] a
 'mailnologin'          => 'No send address',
 'mailnologintext'      => 'You must be [[Special:UserLogin|logged in]] and have a valid e-mail address in your [[Special:Preferences|preferences]] to send e-mail to other users.',
 'emailuser'            => 'E-mail this user',
+'emailuser-summary'    => '', # do not translate or duplicate this message to other languages
 'emailpage'            => 'E-mail user',
 'emailpagetext'        => 'You can use the form below to send an e-mail message to this user.
 The e-mail address you entered in [[Special:Preferences|your user preferences]] will appear as the "From" address of the e-mail, so the recipient will be able to reply directly to you.',
@@ -2957,6 +2980,7 @@ You can change this page's protection level, but it will not affect the cascadin
 
 # Undelete
 'undelete'                     => 'View deleted pages',
+'undelete-summary'             => '', # do not translate or duplicate this message to other languages
 'undeletepage'                 => 'View and restore deleted pages',
 'undeletepagetitle'            => "'''The following consists of deleted revisions of [[:$1|$1]]'''.",
 'viewdeletedpage'              => 'View deleted pages',
@@ -3019,14 +3043,15 @@ $1',
 'blanknamespace'                => '(Main)',
 
 # Contributions
-'contributions'       => 'User contributions',
-'contributions-title' => 'User contributions for $1',
-'mycontris'           => 'My contributions',
-'contribsub2'         => 'For $1 ($2)',
-'nocontribs'          => 'No changes were found matching these criteria.',
-'uctop'               => '(top)',
-'month'               => 'From month (and earlier):',
-'year'                => 'From year (and earlier):',
+'contributions'         => 'User contributions',
+'contributions-summary' => '', # do not translate or duplicate this message to other languages
+'contributions-title'   => 'User contributions for $1',
+'mycontris'             => 'My contributions',
+'contribsub2'           => 'For $1 ($2)',
+'nocontribs'            => 'No changes were found matching these criteria.',
+'uctop'                 => '(top)',
+'month'                 => 'From month (and earlier):',
+'year'                  => 'From year (and earlier):',
 
 'sp-contributions-newbies'             => 'Show contributions of new accounts only',
 'sp-contributions-newbies-sub'         => 'For new accounts',
@@ -3048,6 +3073,7 @@ The latest block log entry is provided below for reference:',
 'sp-contributions-explain'             => '', # only translate this message to other languages if you have to change it
 'sp-contributions-footer'              => '-', # do not translate or duplicate this message to other languages
 'sp-contributions-footer-anon'         => '-', # do not translate or duplicate this message to other languages
+'sp-contributions-footer-newbies'      => '-', # do not translate or duplicate this message to other languages
 
 # What links here
 'whatlinkshere'            => 'What links here',
@@ -3073,6 +3099,7 @@ The latest block log entry is provided below for reference:',
 'autoblockid'                     => 'Autoblock #$1',
 'block'                           => 'Block user',
 'unblock'                         => 'Unblock user',
+'unblock-summary'                 => '', # do not translate or duplicate this message to other languages
 'blockip'                         => 'Block user',
 'blockip-title'                   => 'Block user',
 'blockip-legend'                  => 'Block user',
@@ -3154,7 +3181,7 @@ See [[Special:BlockList|IP block list]] to review blocks.',
 'contribslink'                    => 'contribs',
 'emaillink'                       => 'send e-mail',
 'autoblocker'                     => 'Autoblocked because your IP address has been recently used by "[[User:$1|$1]]".
-The reason given for $1\'s block is: "$2"',
+The reason given for $1\'s block is "\'\'$2\'\'"',
 'blocklogpage'                    => 'Block log',
 'blocklog-showlog'                => 'This user has been blocked previously.
 The block log is provided below for reference:',
@@ -3226,6 +3253,7 @@ To lock or unlock the database, this needs to be writable by the web server.',
 
 # Move page
 'move-page'                    => 'Move $1',
+'movepage-summary'             => '', # do not translate or duplicate this message to other languages
 'move-page-legend'             => 'Move page',
 'movepagetext'                 => "Using the form below will rename a page, moving all of its history to the new name.
 The old title will become a redirect page to the new title.
@@ -3320,6 +3348,7 @@ Please choose another name.',
 
 # Export
 'export'            => 'Export pages',
+'export-summary'    => '', # do not translate or duplicate this message to other languages
 'exporttext'        => 'You can export the text and editing history of a particular page or set of pages wrapped in some XML.
 This can be imported into another wiki using MediaWiki via the [[Special:Import|import page]].
 
@@ -3373,6 +3402,7 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 
 # Special:Import
 'import'                     => 'Import pages',
+'import-summary'             => '', # do not translate or duplicate this message to other languages
 'importinterwiki'            => 'Transwiki import',
 'import-interwiki-text'      => "Select a wiki and page title to import.
 Revision dates and editors' names will be preserved.
@@ -4461,6 +4491,7 @@ Try normal preview.',
 'lag-warn-high'   => 'Due to high database server lag, changes newer than $1 {{PLURAL:$1|second|seconds}} may not be shown in this list.',
 
 # Watchlist editor
+'editwatchlist-summary'        => '', # do not translate or duplicate this message to other languages
 'watchlistedit-numitems'       => 'Your watchlist contains {{PLURAL:$1|1 title|$1 titles}}, excluding talk pages.',
 'watchlistedit-noitems'        => 'Your watchlist contains no titles.',
 'watchlistedit-normal-title'   => 'Edit watchlist',
@@ -4556,6 +4587,7 @@ You can also [[Special:EditWatchlist|use the standard editor]].',
 
 # Special:Version
 'version'                       => 'Version',
+'version-summary'               => '', # do not translate or duplicate this message to other languages
 'version-extensions'            => 'Installed extensions',
 'version-specialpages'          => 'Special pages',
 'version-parserhooks'           => 'Parser hooks',
@@ -4638,6 +4670,7 @@ Images are shown in full resolution, other file types are started with their ass
 
 # Special:Tags
 'tags'                    => 'Valid change tags',
+'tags-summary'            => '', # do not translate or duplicate this message to other languages
 'tag-filter'              => '[[Special:Tags|Tag]] filter:',
 'tag-filter-submit'       => 'Filter',
 'tags-title'              => 'Tags',
@@ -4651,6 +4684,7 @@ Images are shown in full resolution, other file types are started with their ass
 
 # Special:ComparePages
 'comparepages'                => 'Compare pages',
+'comparepages-summary'        => '', # do not translate or duplicate this message to other languages
 'compare-selector'            => 'Compare page revisions',
 'compare-page1'               => 'Page 1',
 'compare-page2'               => 'Page 2',
index e0e27bc..32f96a2 100644 (file)
@@ -930,11 +930,11 @@ La donita kialo estas:
 
 *Komenco de forbaro: $8
 *Limdato de la blokado: $6
-*Intencias forbari uzanton: $7
+*Intencis forbari uzanton: $7
 
-Vi povas kontakti $1 aux iun ajn el la aliaj [[{{MediaWiki:Grouppage-sysop}}|administrantojn]] por diskuti la blokon.
+Vi povas kontakti $1 aŭ iun ajn el la aliaj [[{{MediaWiki:Grouppage-sysop}}|administrantojn]] por diskuti la blokon.
 
-Notu, ke vi ne povas uzi la servon "Retpoŝtu ĉi tiu uzanton" krom se vi havas validan retpost-adreson registritan en viaj [[Special:Preferences|preferojn]], kaj vi estas ne blokita kontraŭ ĝia uzado.
+Notu, ke vi ne povas uzi la servon "Retpoŝtu ĉi tiu uzanton" krom se vi havas validan retpoŝt-adreson registritan en viaj [[Special:Preferences|preferojn]], kaj vi estas ne blokita kontraŭ ĝia uzado.
 
 Via nuna IP-adreso estas $3, kaj la forbaro-identigo estas $5.
 Bonvolu inkluzivi tiujn detalojn en iuj ajn demandoj kiun vi farus.',
@@ -1766,7 +1766,7 @@ Alŝutante Java-dosieron estas malpermesita, ĉar ili povas kaŭzi sekureco-limi
 'upload-description'          => 'Dosiera priskribo',
 'upload-options'              => 'Alŝutaj agordoj',
 'watchthisupload'             => 'Atenti ĉi tiun dosieron',
-'filewasdeleted'              => 'Dosiero de ĉi nomo estis antaŭe alŝutita kaj poste redaktita. Vi kontrolu la $1 antaux alŝutante ĝin denove.',
+'filewasdeleted'              => 'Dosiero de ĉi tiu nomo estis antaŭe alŝutita kaj poste forigita. Bonvolu kontroli en la $1 antaŭ alŝuti ĝin denove.',
 'filename-bad-prefix'         => "La nomo de la dosiero kiun vi alŝutas komencas kun '''\"\$1\"''', kiu estas nepriskriba nomo ofte aŭtomate donata de ciferecaj fotiloj. Bonvolu elekti pli priskriban nomon por via bildo.",
 'upload-success-subj'         => 'Alŝuto sukcesis!',
 'upload-success-msg'          => 'Via alŝuto el [$2] sukcesis. Ĝi disponeblas ĉi tie [[:{{ns:file}}:$1]]',
@@ -3072,7 +3072,7 @@ Sekvaj ligilo en la sama linio estas konsiderata kiel esceptoj (paĝoj kiel la b
 
 # Metadata
 'metadata'          => 'Metadatenoj',
-'metadata-help'     => 'Ĉi tiu dosiero enhavas plian informon, verŝajne aldonitan de la cifereca fotilo aŭ skanilo uzita por krei aux skani ĝin. Se la dosiero estis modifita de sia originala stato, iuj detaloj eble ne konformos al efektiva stato de la modifita bildo.',
+'metadata-help'     => 'Ĉi tiu dosiero enhavas plian informon, verŝajne aldonitan de la cifereca fotilo aŭ skanilo uzita por krei aŭ skani ĝin. Se la dosiero estis modifita de sia originala stato, iuj detaloj eble ne konformos al efektiva stato de la modifita bildo.',
 'metadata-expand'   => 'Montri etendajn detalojn',
 'metadata-collapse' => 'Kaŝi etendajn detalojn',
 'metadata-fields'   => 'Metadatumaj kampoj de ĉi tiu mesaĝo estos inkluzivita en la paĝoj de bidloj kiam la metadatuma tabelo estas disfaldigita. 
index f11df74..8f0b452 100644 (file)
@@ -63,6 +63,7 @@
  * @author Remember the dot
  * @author Richard Wolf VI
  * @author Sanbec
+ * @author Savh
  * @author Spacebirdy
  * @author Technorum
  * @author The Evil IP address
@@ -698,7 +699,7 @@ Por favor, avisa a un [[Special:ListUsers/sysop|administrador]], tomando nota de
 'badarticleerror'      => 'Esta acción no se puede llevar a cabo en esta página.',
 'cannotdelete'         => 'La página o archivo «$1» no se pudo borrar.
 Puede que ya haya sido borrado por alguien más.',
-'cannotdelete-title'   => 'No se pudede borrar la página «$1»',
+'cannotdelete-title'   => 'No se puede borrar la página «$1»',
 'badtitle'             => 'Título incorrecto',
 'badtitletext'         => 'El título de la página solicitada está vacío, no es válido, o es un enlace interidioma o interwiki incorrecto.
 Puede que contenga uno o más caracteres que no se pueden usar en los títulos.',
@@ -726,6 +727,8 @@ $2',
 'ns-specialprotected'  => 'Las páginas especiales no se pueden editar',
 'titleprotected'       => 'Esta página ha sido protegida contra creación por [[User:$1|$1]].
 El motivo dado fue: "\'\'$2\'\'".',
+'filereadonlyerror'    => 'No se puede modificar el archivo "$1" porque el repositorio de archivos "$2" está en modo de sólo lectura.
+El motivo suministrado es "$3".',
 
 # Virus scanner
 'virus-badscanner'     => "Error de configuración: Antivirus desconocido: ''$1''",
@@ -1206,10 +1209,10 @@ Aún tiene la posibilidad de verla; puede ampliar los detalles en el [{{fullurl:
 'revdelete-text'              => "Las revisiones borradas aún aparecerán en el historial de la página y en los registros, pero sus contenidos no serán accesibles al público.'''
 Otros administradores de {{SITENAME}} aún podrán acceder al contenido oculto y podrán deshacer el borrado a través de la misma interfaz, a menos que se establezcan restricciones adicionales.",
 'revdelete-confirm'           => 'Por favor confirma que deseas realizar la operación, que entiendes las consecuencias y que estás ejecutando dicha acción acorde con [[{{MediaWiki:Policy-url}}|las políticas]].',
-'revdelete-suppress-text'     => "La eliminación '''solamente''' debería usarse en los siguientes casos:
-* Información potencialmente difamatoria
-* Información personal inapropiada
-* domicilios y números de teléfono, números de seguridad social, etc.",
+'revdelete-suppress-text'     => "La herramienta de supresión '''sólo''' debería usarse en los siguientes casos:
+* Información potencialmente injuriosa o calumniante.
+* Información personal inapropiada, tal como:
+*: ''nombres, domicilios, números de teléfono, números de la seguridad social e información análoga.",
 'revdelete-legend'            => 'Establecer restricciones de revisión:',
 'revdelete-hide-text'         => 'Ocultar el texto de la revisión',
 'revdelete-hide-image'        => 'Ocultar el contenido del archivo',
@@ -1256,8 +1259,8 @@ No tiene acceso a él.',
 
 # Suppression log
 'suppressionlog'     => 'Registro de supresiones',
-'suppressionlogtext' => 'Debajo hay una lista con los borrados y bloqueos recientes, que incluyen contenido oculto de los administradores.
-Mire la [[Special:BlockList|lista de bloqueos activos]] para ver una lista de prohibiciones actualmente operativas.',
+'suppressionlogtext' => 'Debajo hay una lista con los borrados y bloqueos recientes cuyo contenido se encuentra oculto para administradores.
+Mire la [[Special:BlockList|lista de bloqueos activos]] para ver la lista de bloqueos actualmente operativos.',
 
 # History merging
 'mergehistory'                     => 'Fusionar historiales de páginas',
@@ -1839,6 +1842,7 @@ $1',
 'backend-fail-closetemp'     => 'No se pudo cerrar el archivo temporal.',
 'backend-fail-read'          => 'No se pudo leer el archivo «$1».',
 'backend-fail-create'        => 'No se pudo crear el archivo «$1».',
+'backend-fail-maxsize'       => 'No se pudo crear el archivo  $1  porque es mayor de {{PLURAL:$2|$2 bytes|$2 bytes}}.',
 'backend-fail-readonly'      => 'El servidor (back-end) de almacenamiento "$1" está actualmente en estado de sólo lectura. La razón aducida fue: "$2"',
 'backend-fail-synced'        => 'El archivo "$1" se encuentra en un estado incoherente dentro de los servidores (backends) de almacenamiento interno',
 'backend-fail-connect'       => 'No se pudo conectar al servidor (backend) de almacenamiento "$1".',
@@ -1846,6 +1850,9 @@ $1',
 'backend-fail-contenttype'   => 'No se pudo determinar el tipo de contenido del archivo a guardar en " $1 ".',
 'backend-fail-batchsize'     => 'El servidor (back-end) de almacenamiento ha suministrado un lote de $1 {{PLURAL:$1|operación|operaciones}} de archivo; el límite es de $2 {{PLURAL:$2|operación|operaciones}}.',
 
+'filejournal-fail-dbconnect' => 'No se pudo conectar a la base de datos del registro del sistema de almacenamiento "$1".',
+'filejournal-fail-dbquery'   => 'No se pudo actualizar la base de datos del registro del sistema de almacenamiento "$1".',
+
 # Lock manager
 'lockmanager-notlocked'        => 'No se pudo desbloquear "$1": no se encontraba bloqueado.',
 'lockmanager-fail-closelock'   => 'No se pudo cerrar la referencia para el archivo de bloqueo de "$1".',
@@ -2175,6 +2182,11 @@ Puedes filtrar la vista seleccionando un tipo de registro, el nombre del usuario
 'allpagesbadtitle'  => 'El título dado era inválido o tenía un prefijo de enlace inter-idioma o inter-wiki. Puede contener uno o más caracteres que no se pueden usar en títulos.',
 'allpages-bad-ns'   => '{{SITENAME}} no tiene un espacio de nombres llamado «$1».',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Usted está viendo una versión en caché de esta página, que puede tener hasta  $1 días de antigüedad.',
+'cachedspecial-viewing-cached-ts'  => 'Está viendo una versión en caché de esta página, que puede no estar completamente actualizada.',
+'cachedspecial-refresh-now'        => 'Ver lo más reciente.',
+
 # Special:Categories
 'categories'                    => 'Categorías',
 'categoriespagetext'            => 'Las siguientes {{PLURAL:$1|categoría contiene|categorías contienen}} páginas o medios.
@@ -2580,8 +2592,8 @@ A continuación se muestra la última entrada del registro de bloqueos para mayo
 'blockiptext'                     => 'Usa el siguiente formulario para bloquear el acceso de escritura desde una dirección IP específica o nombre de usuario.
 Esto debería hacerse sólo para prevenir vandalismos, y de acuerdo a las [[{{MediaWiki:Policy-url}}|políticas]].
 Explica la razón específica del bloqueo (por ejemplo, citando las páginas en particular que han sido objeto de vandalismo).',
-'ipadressorusername'              => 'Dirección IP o nombre de usuario',
-'ipbexpiry'                       => 'Caduca dentro de',
+'ipadressorusername'              => 'Dirección IP o nombre de usuario:',
+'ipbexpiry'                       => 'Caducidad:',
 'ipbreason'                       => 'Motivo:',
 'ipbreasonotherlist'              => 'Otra razón',
 'ipbreason-dropdown'              => '*Motivos comunes de bloqueo
@@ -2590,7 +2602,7 @@ Explica la razón específica del bloqueo (por ejemplo, citando las páginas en
 ** Publicitar enlaces a otras páginas web
 ** Añadir basura a las páginas
 ** Comportamiento intimidatorio u hostil
-** Abusar de múltiples cuentas
+** Abuso de múltiples cuentas
 ** Nombre de usuario inaceptable',
 'ipb-hardblock'                   => 'Impedir que los usuarios identificados editen desde esta dirección IP',
 'ipbcreateaccount'                => 'Prevenir la creación de cuentas de usuario',
@@ -2633,7 +2645,7 @@ Véase la [[Special:BlockList|lista de bloqueos]] para revisarlo.',
 'blocklist-timestamp'             => 'Marca de tiempo',
 'blocklist-target'                => 'Destino',
 'blocklist-expiry'                => 'Caduca',
-'blocklist-by'                    => 'Bloqueo de administrador',
+'blocklist-by'                    => 'Administrador bloqueante',
 'blocklist-params'                => 'Parámetros de bloqueo',
 'blocklist-reason'                => 'Motivo',
 'ipblocklist-submit'              => 'Buscar',
@@ -3669,7 +3681,7 @@ Confirma que realmente quieres volver a crear esta página.",
 'table_pager_first'        => 'Primera página',
 'table_pager_last'         => 'Última página',
 'table_pager_limit'        => 'Mostrar $1 elementos por página',
-'table_pager_limit_label'  => 'Items por página:',
+'table_pager_limit_label'  => 'Elementos por página:',
 'table_pager_limit_submit' => 'Ir',
 'table_pager_empty'        => 'No hay resultados',
 
@@ -3943,4 +3955,14 @@ En otro caso, puedes usar el siguiente formulario. Tu comentario será añadido
 'api-error-uploaddisabled'                => 'Las subidas están desactivadas en este wiki.',
 'api-error-verification-error'            => 'Este archivo puede estar dañado, o tiene una extensión incorrecta.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|segundo|segundos}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|minuto|minutos}}',
+'duration-hours'     => '$1 {{PLURAL:$1|hora|horas}}',
+'duration-days'      => '$1 {{PLURAL:$1|día|días}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|semana|semanas}}',
+'duration-years'     => '$1 {{PLURAL: $1|año|años}}',
+'duration-decades'   => '$1 {{PLURAL:$1|década|décadas}}',
+'duration-centuries' => '$1 {{PLURAL:$1|siglo|siglos}}',
+
 );
index 6cce848..3ef49dc 100644 (file)
@@ -1774,6 +1774,7 @@ Kui probleem ei kao, võta ühendust [[Special:ListUsers/sysop|administraatoriga
 'backend-fail-closetemp'     => 'Ajutist faili ei saa sulgeda.',
 'backend-fail-read'          => 'Faili $1 ei saa lugeda.',
 'backend-fail-create'        => 'Faili $1 ei saa luua.',
+'backend-fail-maxsize'       => 'Faili $1 ei saa luua, sest see on {{PLURAL:$2|ühest baidist|$2 baidist}} suurem.',
 'backend-fail-contenttype'   => 'Faili, mida soovitakse talletada asukohas "$1", sisutüüpi saanud kindlaks teha.',
 
 # Lock manager
@@ -2850,7 +2851,7 @@ Palun ürita uuesti.',
 
 # JavaScriptTest
 'javascripttest'                           => 'JavaScripti katsetamine',
-'javascripttest-disabled'                  => 'See toiming on keelatud.',
+'javascripttest-disabled'                  => 'See funktsioon pole selles vikis lubatud.',
 'javascripttest-title'                     => '$1-katse käitus',
 'javascripttest-pagetext-noframework'      => 'Seda lehekülge hoitakse JavaScripti katsete jaoks.',
 'javascripttest-pagetext-unknownframework' => 'Tundmatu katseraamistik "$1".',
@@ -3735,34 +3736,36 @@ Pilt kuvatakse algupärases suuruses, muu fail avatakse koheselt seostuva progra
 'sqlite-no-fts'  => '$1 ilma täistekstiotsingu toeta',
 
 # New logging system
-'logentry-delete-delete'            => '$1 kustutas lehekülje $3',
-'logentry-delete-restore'           => '$1 taastas lehekülje $3',
-'logentry-delete-event'             => '$1 muutis leheküljel $3 {{PLURAL:$5|ühe|$5}} logisündmuse nähtavust: $4',
-'logentry-delete-revision'          => '$1 muutis leheküljel $3 {{PLURAL:$5|ühe|$5}} redaktsiooni nähtavust: $4',
-'logentry-delete-event-legacy'      => '$1 muutis leheküljel $3 logisündmuste nähtavust',
-'logentry-delete-revision-legacy'   => '$1 muutis leheküljel $3 redaktsioonide nähtavust',
-'logentry-suppress-delete'          => '$1 varjas lehekülje $3',
-'logentry-suppress-event'           => '$1 muutis salaja leheküljel $3 {{PLURAL:$5|ühe|$5}} logisündmuse nähtavust: $4',
-'logentry-suppress-revision'        => '$1 muutis salaja leheküljel $3 {{PLURAL:$5|ühe|$5}} redaktsiooni nähtavust: $4',
-'logentry-suppress-event-legacy'    => '$1 muutis salaja leheküljel $3 logisündmuste nähtavust',
-'logentry-suppress-revision-legacy' => '$1 muutis salaja leheküljel $3 redaktsioonide nähtavust',
-'revdelete-content-hid'             => 'peideti sisu',
-'revdelete-summary-hid'             => 'peideti resümee',
-'revdelete-uname-hid'               => 'peideti kasutajanimi',
-'revdelete-content-unhid'           => 'nähtavaks tehti sisu',
-'revdelete-summary-unhid'           => 'nähtavaks tehti resümee',
-'revdelete-uname-unhid'             => 'nähtavaks tehti kasutajanimi',
-'revdelete-restricted'              => 'kehtestati piirangud administraatoritele',
-'revdelete-unrestricted'            => 'eemaldati administraatoritelt piirangud',
-'logentry-move-move'                => '$1 teisaldas lehekülje $3 pealkirja $4 alla',
-'logentry-move-move-noredirect'     => '$1 teisaldas lehekülje $3 pealkirja $4 alla ümbersuunamist maha jätmata',
-'logentry-patrol-patrol'            => '$1 märkis lehekülje $3 redaktsiooni $4 kontrollituks',
-'logentry-patrol-patrol-auto'       => '$1 märkis automaatselt lehekülje $3 redaktsiooni $4 kontrollituks',
-'logentry-newusers-newusers'        => '$1 tegi kasutajakonto',
-'logentry-newusers-create'          => '$1 tegi kasutajakonto',
-'logentry-newusers-create2'         => '$1 tegi kasutajakonto $3',
-'logentry-newusers-autocreate'      => 'Konto $1 loodi automaatselt',
-'newuserlog-byemail'                => 'parool saadetud e-postiga',
+'logentry-delete-delete'              => '$1 kustutas lehekülje $3',
+'logentry-delete-restore'             => '$1 taastas lehekülje $3',
+'logentry-delete-event'               => '$1 muutis leheküljel $3 {{PLURAL:$5|ühe|$5}} logisündmuse nähtavust: $4',
+'logentry-delete-revision'            => '$1 muutis leheküljel $3 {{PLURAL:$5|ühe|$5}} redaktsiooni nähtavust: $4',
+'logentry-delete-event-legacy'        => '$1 muutis leheküljel $3 logisündmuste nähtavust',
+'logentry-delete-revision-legacy'     => '$1 muutis leheküljel $3 redaktsioonide nähtavust',
+'logentry-suppress-delete'            => '$1 varjas lehekülje $3',
+'logentry-suppress-event'             => '$1 muutis salaja leheküljel $3 {{PLURAL:$5|ühe|$5}} logisündmuse nähtavust: $4',
+'logentry-suppress-revision'          => '$1 muutis salaja leheküljel $3 {{PLURAL:$5|ühe|$5}} redaktsiooni nähtavust: $4',
+'logentry-suppress-event-legacy'      => '$1 muutis salaja leheküljel $3 logisündmuste nähtavust',
+'logentry-suppress-revision-legacy'   => '$1 muutis salaja leheküljel $3 redaktsioonide nähtavust',
+'revdelete-content-hid'               => 'peideti sisu',
+'revdelete-summary-hid'               => 'peideti resümee',
+'revdelete-uname-hid'                 => 'peideti kasutajanimi',
+'revdelete-content-unhid'             => 'nähtavaks tehti sisu',
+'revdelete-summary-unhid'             => 'nähtavaks tehti resümee',
+'revdelete-uname-unhid'               => 'nähtavaks tehti kasutajanimi',
+'revdelete-restricted'                => 'kehtestati piirangud administraatoritele',
+'revdelete-unrestricted'              => 'eemaldati administraatoritelt piirangud',
+'logentry-move-move'                  => '$1 teisaldas lehekülje $3 pealkirja $4 alla',
+'logentry-move-move-noredirect'       => '$1 teisaldas lehekülje $3 pealkirja $4 alla ümbersuunamist maha jätmata',
+'logentry-move-move_redir'            => '$1 teisaldas lehekülje $3 ümbersuunamise $4 asemele',
+'logentry-move-move_redir-noredirect' => '$1 teisaldas lehekülje $3 ümbersuunamise $4 asemele ümbersuunamist maha jätmata',
+'logentry-patrol-patrol'              => '$1 märkis lehekülje $3 redaktsiooni $4 kontrollituks',
+'logentry-patrol-patrol-auto'         => '$1 märkis automaatselt lehekülje $3 redaktsiooni $4 kontrollituks',
+'logentry-newusers-newusers'          => '$1 tegi kasutajakonto',
+'logentry-newusers-create'            => '$1 tegi kasutajakonto',
+'logentry-newusers-create2'           => '$1 tegi kasutajakonto $3',
+'logentry-newusers-autocreate'        => 'Konto $1 loodi automaatselt',
+'newuserlog-byemail'                  => 'parool saadetud e-postiga',
 
 # Feedback
 'feedback-bugornote' => 'Kui arvad, et oskad tehnilist probleemi üksikasjalikult kirjeldada, [$1 teata veast].
index 0ca942c..be67cc4 100644 (file)
@@ -477,8 +477,8 @@ Mesedez, bidali gertakar hau administradore bati, URLaren izena jarriz.',
 Baliteke beste norbaitek ezabatu izana.',
 'badtitle'             => 'Izenburu ezegokia',
 'badtitletext'         => 'Eskatutako orrialde izenburua ez da baliozkoa, hutsik dago, edo gaizki lotutako hizkuntzen arteko lotura da. Baliteke izenburuetan erabili ezin den karaktereren bat izatea.',
-'perfcached'           => 'Hurrengo datuak katxean gordeta daude eta litekeena da guztiz eguneratuta ez egotea. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts'         => 'Hurrengo datuak katxean daude, $1 eguneratu zen azkenekoz. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached'           => 'Hurrengo datuak katxean gordeta daude eta litekeena da guztiz eguneratuta ez egotea. Gehienez {{PLURAL:$1|emaitza 1 dago|$1 emaitza daude}} eskuragarri katxean.',
+'perfcachedts'         => 'Hurrengo datuak katxean daude, $1 eguneratu zen azkenekoz. {{PLURAL:$1|emaitza 1 dago|$1 emaitza daude}} eskuragarri katxean.',
 'querypage-no-updates' => 'Orrialde honen berritzeak ez dira baimentzen. Hemen dagoen data ez da zuzenean berrituko.',
 'wrong_wfQuery_params' => 'Baliogabeko parametroak eman zaizkio wfQuery() funtzioari<br />
 Funtzioa: $1<br />
@@ -784,7 +784,8 @@ Era berean, bidaltzen ari zaren edukia zuk zeuk idatzitakoa dela edo jabetza pub
 'copyrightwarning2'                => "Mesedez, kontuan izan {{SITENAME}}(e)n egindako ekarpen guztiak besteek aldatu edo ezabatu ditzaketela. Ez baduzu besteek aldaketak egitea nahi, ez ezazu bidali.<br />
 Era berean, bidaltzen ari zaren edukia zuk zeuk idatzitakoa dela edo jabetza publikoko edo baliabide aske batetik kopiatu duzula zin egin ari zara (ikus $1 informazio gehiagorako).
 '''EZ BIDALI BAIMENIK GABEKO COPYRIGHTDUN EDUKIRIK!'''",
-'longpageerror'                    => "'''ERROREA: Bidali duzun testuak $1 kilobyteko luzera du, eta $2 kilobyteko maximoa baino luzeagoa da. Ezin da gorde.'''",
+'longpageerror'                    => "'''Errorea: Bidali duzun testuak {{PLURAL:$1|kilobyte 1eko|$1 kilobyteko}} luzera du, eta {{PLURAL:$2|kilobyte 1eko|$2 kilobyteko}} maximoa baino luzeagoa da.'''
+Ezin da gorde.",
 'readonlywarning'                  => "'''OHARRA: Datu-basea blokeatu egin da mantenu lanak burutzeko, beraz ezingo dituzu orain zure aldaketak gorde. Testua fitxategi baten kopiatu dezakezu, eta beranduago erabiltzeko gorde.
 
 Blokeatu zuen administratzaileak honako azalpena eman zuen: $1'''",
@@ -1114,7 +1115,7 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz
 'prefs-rc'                      => 'Azken aldaketak',
 'prefs-watchlist'               => 'Jarraipen zerrenda',
 'prefs-watchlist-days'          => 'Jarraipen zerrendan erakutsi beharreko egun kopurua:',
-'prefs-watchlist-days-max'      => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max'      => 'Gehienez $1 {{PLURAL:$1|egun|egun}}',
 'prefs-watchlist-edits'         => 'Jarraipen zerrendan erakutsi beharreko aldaketa kopurua:',
 'prefs-watchlist-edits-max'     => 'Gehenezko zenbakia: 1000',
 'prefs-watchlist-token'         => 'Jarraipen zerrendaren tokena:',
@@ -1241,7 +1242,7 @@ $1 {{PLURAL:$1|karakteretik|karakteretik}} behera izan behar ditu.',
 'group-all'           => '(guztiak)',
 
 'group-user-member'          => '{{GENDER:$1|lankidea}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|erabiltzaile autokonfirmatua}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|baieztatutako erabiltzailea}}',
 'group-bot-member'           => '{{GENDER:$1|bot-a}}',
 'group-sysop-member'         => '{{GENDER:$1|administratzailea}}',
 'group-bureaucrat-member'    => '{{GENDER:$1|burokrata}}',
@@ -1744,7 +1745,7 @@ Ondorengo zerrendak fitxategira dauden {{PLURAL:$1|lehen lotura|lehen $1 loturak
 'listusers-editsonly'     => 'Aldaketak egin dituzten erabiltzaileak soilik erakutsi',
 'listusers-creationsort'  => 'Sorrera dataren arabera sailkatu',
 'usereditcount'           => '{{PLURAL:$1|aldaketa $1|$1 aldaketa}}',
-'usercreated'             => '$2-(e)tan $1-(a)n sortua',
+'usercreated'             => '$2-(e)tan $1-(a)n {{GENDER:$3|sortua}},',
 'newpages'                => 'Orrialde berriak',
 'newpages-username'       => 'Erabiltzaile izena:',
 'ancientpages'            => 'Orrialde zaharrenak',
@@ -2014,7 +2015,8 @@ edukia $2 wikilariaren azken bertsiora itzuli da.',
 
 # Protect
 'protectlogpage'              => 'Babes erregistroa',
-'protectlogtext'              => 'Orrialdeen blokeo eta desblokeo zerrenda azaltzen da jarraian.',
+'protectlogtext'              => 'Orrialdeen blokeo eta desblokeo zerrenda azaltzen da jarraian.
+Ikusi [[Special:ProtectedPages|babestutako orrialdeen zerrenda]] orrialde babes informazio ikusteko.',
 'protectedarticle'            => '"[[$1]]" babestu da"',
 'modifiedarticleprotection'   => '"[[$1]]"(r)en babes maila aldatu da',
 'unprotectedarticle'          => '"[[$1]]"-(r)i babesa kendu zaio',
index ccb17a3..718b8c6 100644 (file)
@@ -4002,7 +4002,7 @@ $5
 'tag-filter'              => 'پالایش [[Special:Tags|برچسب‌ها]]:',
 'tag-filter-submit'       => 'پالایه',
 'tags-title'              => 'برچسب‌ها',
-'tags-intro'              => 'این صفحه برچسب‌هایی را که نرم‌افزار ممکن است ویرایش‌ها را توسط آن‌ها علامت گذاری کند، به همراه معنای آن‌ها فهرست می‌کند.',
+'tags-intro'              => 'این صفحه فهرستی‌است از برچسب‌هایی که نرم‌افزار با آن‌ها ویرایش‌ها را علامت‌گذری می‌کند، به همراه معانی آن‌ها.',
 'tags-tag'                => 'نام برچسب',
 'tags-display-header'     => 'نمایش در فهرست‌های تغییرات',
 'tags-description-header' => 'توضیح کامل معنی',
index 8c6a1d8..e2cc33e 100644 (file)
@@ -14,6 +14,7 @@
  * @author Harriv
  * @author Jaakonam
  * @author Jack Phoenix
+ * @author Jafeluv
  * @author Kaganer
  * @author Mobe
  * @author Nedergard
@@ -2317,11 +2318,11 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 'protect-badnamespace-text'   => 'Tämän nimiavaruuden sivuja ei voi suojata.',
 'protect-legend'              => 'Suojaukset',
 'protectcomment'              => 'Syy',
-'protectexpiry'               => 'Vanhenee',
-'protect_expiry_invalid'      => 'Vanhenemisaika ei kelpaa.',
-'protect_expiry_old'          => 'Vanhenemisaika on menneisyydessä.',
+'protectexpiry'               => 'Vanhentuu',
+'protect_expiry_invalid'      => 'Vanhentumisaika ei kelpaa.',
+'protect_expiry_old'          => 'Vanhentumisaika on menneisyydessä.',
 'protect-unchain-permissions' => 'Avaa lisäsuojausvalinnat',
-'protect-text'                => "Voit tarkastella ja muuttaa sivun '''$1''' suojauksen asetuksia.",
+'protect-text'                => "Voit tarkastella ja muuttaa sivun '''$1''' suojaustasoa.",
 'protect-locked-blocked'      => "Et voi muuttaa sivun suojauksia, koska sinut on estetty. Alla on sivun ”'''$1'''” nykyiset suojaukset:",
 'protect-locked-dblock'       => "Sivun suojauksia ei voi muuttaa, koska tietokanta on lukittu. Alla on sivun ”'''$1'''” nykyiset suojaukset:",
 'protect-locked-access'       => "Sinulla ei ole tarvittavia oikeuksia sivujen suojauksen muuttamiseen. Alla on sivun ”'''$1'''” nykyiset suojaukset:",
@@ -2331,14 +2332,14 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 'protect-level-autoconfirmed' => 'Estä uudet ja anonyymit käyttäjät',
 'protect-level-sysop'         => 'Vain ylläpitäjät',
 'protect-summary-cascade'     => 'laajennettu',
-'protect-expiring'            => 'vanhenee $1',
+'protect-expiring'            => 'vanhentuu $1 (UTC)',
 'protect-expiring-local'      => 'vanhentuu $1',
 'protect-expiry-indefinite'   => 'ikuinen',
 'protect-cascade'             => 'Laajenna suojaus koskemaan kaikkia tähän sivuun sisällytettyjä sivuja.',
 'protect-cantedit'            => 'Et voi muuttaa sivun suojaustasoa, koska sinulla ei ole oikeutta muokata sivua.',
 'protect-othertime'           => 'Muu kesto',
 'protect-othertime-op'        => 'muu kesto',
-'protect-existing-expiry'     => 'Nykyinen vanhenemisaika: $2 kello $3',
+'protect-existing-expiry'     => 'Nykyinen vanhentumisaika: $2 kello $3',
 'protect-otherreason'         => 'Muu syy tai tarkennus',
 'protect-otherreason-op'      => 'Muu syy',
 'protect-dropdown'            => '*Yleiset suojaussyyt
@@ -2455,7 +2456,7 @@ Alla on viimeisin estolokin tapahtuma:',
 'nolinkshere'              => 'Sivulle <strong>[[:$1]]</strong> ei ole linkkejä.',
 'nolinkshere-ns'           => 'Sivulle <strong>[[:$1]]</strong> ei ole linkkejä valitussa nimiavaruudessa.',
 'isredirect'               => 'ohjaussivu',
-'istemplate'               => 'sisällytetty mallineeseen',
+'istemplate'               => 'sisällytetty',
 'isimage'                  => 'tiedostolinkki',
 'whatlinkshere-prev'       => '← {{PLURAL:$1|edellinen sivu|$1 edellistä sivua}}',
 'whatlinkshere-next'       => '{{PLURAL:$1|seuraava sivu|$1 seuraavaa sivua}} →',
@@ -2526,7 +2527,7 @@ Nykyiset estot löytyvät [[Special:BlockList|estolistalta]].',
 'blocklist-rangeblocks'           => 'Piilota ryhmäestot',
 'blocklist-timestamp'             => 'Päiväys',
 'blocklist-target'                => 'Kohde',
-'blocklist-expiry'                => 'Vanhenee',
+'blocklist-expiry'                => 'Vanhentuu',
 'blocklist-by'                    => 'Estänyt ylläpitäjä',
 'blocklist-params'                => 'Estoasetukset',
 'blocklist-reason'                => 'Syy',
@@ -2534,8 +2535,8 @@ Nykyiset estot löytyvät [[Special:BlockList|estolistalta]].',
 'ipblocklist-localblock'          => 'Paikallinen esto',
 'ipblocklist-otherblocks'         => '{{PLURAL:$1|Muu esto|Muut estot}}',
 'infiniteblock'                   => 'ikuisesti',
-'expiringblock'                   => 'vanhenee $1 kello $2',
-'anononlyblock'                   => 'vain kirjautumattomat',
+'expiringblock'                   => 'vanhentuu $1 kello $2',
+'anononlyblock'                   => 'vain kirjautumattomat käyttäjät estetty',
 'noautoblockblock'                => 'ei automaattista IP-osoitteiden estoa',
 'createaccountblock'              => 'tunnusten luonti estetty',
 'emailblock'                      => 'sähköpostin lähettäminen estetty',
@@ -2557,7 +2558,7 @@ Alla on ote häivytyslokista.',
 'reblock-logentry'                => 'muutti käyttäjän tai IP-osoitteen [[$1]] eston asetuksia. Eston kesto $2 $3',
 'blocklogtext'                    => 'Tämä on loki muokkausestoista ja niiden purkamisista. Automaattisesti estettyjä IP-osoitteita ei kirjata. Tutustu [[Special:BlockList|estolistaan]] nähdäksesi listan tällä hetkellä voimassa olevista estoista.',
 'unblocklogentry'                 => 'poisti käyttäjältä $1 muokkauseston',
-'block-log-flags-anononly'        => 'vain kirjautumattomat käyttäjät',
+'block-log-flags-anononly'        => 'vain kirjautumattomat käyttäjät estetty',
 'block-log-flags-nocreate'        => 'tunnusten luonti estetty',
 'block-log-flags-noautoblock'     => 'ei automaattista IP-osoitteiden estoa',
 'block-log-flags-noemail'         => 'sähköpostin lähettäminen estetty',
@@ -2579,7 +2580,7 @@ Alla on ote häivytyslokista.',
 'blockme'                         => 'Estä minut',
 'proxyblocker'                    => 'Välityspalvelinesto',
 'proxyblocker-disabled'           => 'Tämä toiminto ei ole käytössä.',
-'proxyblockreason'                => 'IP-osoitteestasi on estetty muokkaukset, koska se on avoin välityspalvelin. Ota yhteyttä Internet-palveluntarjoajaasi tai tekniseen tukeen ja kerro heillä tästä tietoturvaongelmasta.',
+'proxyblockreason'                => 'IP-osoitteestasi on estetty muokkaukset, koska se on avoin välityspalvelin. Ota yhteyttä Internet-palveluntarjoajaasi tai tekniseen tukeen ja kerro heille tästä tietoturvaongelmasta.',
 'proxyblocksuccess'               => 'Valmis.',
 'sorbsreason'                     => 'IP-osoitteesi on listattu avoimena välityspalvelimena DNSBLin mustalla listalla.',
 'sorbs_create_account_reason'     => 'IP-osoitteesi on listattu avoimena välityspalvelimena DNSBLin mustalla listalla. Et voi luoda käyttäjätunnusta.',
index 45797f6..356e9ef 100644 (file)
@@ -745,6 +745,9 @@ $2',
 'ns-specialprotected'  => 'Les pages dans l’espace de noms « {{ns:special}} » ne peuvent pas être modifiées.',
 'titleprotected'       => "Ce titre a été protégé à la création par [[User:$1|$1]].
 Le motif avancé est « ''$2'' ».",
+'filereadonlyerror'    => 'Impossible de modifier le fichier "$1" parce que le répertoire de fichiers "$2" est en lecture seule.
+
+Le motif fourni est "\'\'$3\'\'".',
 
 # Virus scanner
 'virus-badscanner'     => "Mauvaise configuration : scanneur de virus inconnu : ''$1''",
@@ -1853,6 +1856,7 @@ Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]
 'backend-fail-closetemp'     => 'Impossible de fermer le fichier temporaire.',
 'backend-fail-read'          => 'Impossible de lire le fichier $1.',
 'backend-fail-create'        => 'Impossible de créer le fichier $1.',
+'backend-fail-maxsize'       => "Impossible de créer le fichier $1 parce qu'il est plus grand que  {{PLURAL:$2|$2 octet| $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".',
@@ -1860,6 +1864,9 @@ Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]
 '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}}.',
 
+'filejournal-fail-dbconnect' => 'Impossible de se connecter à la base de données du journal pour le terminal de stockage "$1".',
+'filejournal-fail-dbquery'   => 'Impossible de mettre à jour la base de données du journal pour le terminal de stockage "$1".',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Impossible de déverrouiller « $1 » ; elle n’est pas verrouillée.',
 'lockmanager-fail-closelock'   => 'Impossible de fermer le fichier de verrou pour « $1 ».',
@@ -2190,6 +2197,11 @@ Vous pouvez personnaliser l’affichage en sélectionnant le type de journal, le
 'allpagesbadtitle'  => 'Le titre de page indiqué est incorrect : il contient un préfixe inter-langue ou inter-wiki réservé, ou contient un ou plusieurs caractères inutilisables dans les titres.',
 'allpages-bad-ns'   => '{{SITENAME}} n’a pas d’espace de noms « $1 ».',
 
+# 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-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.',
+
 # Special:Categories
 'categories'                    => 'Liste des catégories',
 'categoriespagetext'            => '{{PLURAL:$1|La catégorie suivante est utilisée|Les catégories suivantes sont utilisées}} par des pages ou fichiers.
@@ -3991,4 +4003,15 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'api-error-uploaddisabled'                => 'Le versement est désactivé sur ce wiki.',
 'api-error-verification-error'            => 'Ce fichier peut être corrompu, ou son extension est incorrecte.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|seconde|secondes}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|minute|minutes}}',
+'duration-hours'     => '$1 {{PLURAL:$1|heure|heures}}',
+'duration-days'      => '$1 {{PLURAL:$1|jour|jours}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|semaine|semaines}}',
+'duration-years'     => '$1 {{PLURAL:$1|année|années}}',
+'duration-decades'   => '$1 {{PLURAL:$1|décennie|décennies}}',
+'duration-centuries' => '$1 {{PLURAL:$1|siècle|siècles}}',
+'duration-millennia' => '$1 {{PLURAL:$1|millénaire|millénaires}}',
+
 );
index 893070c..fb1cf20 100644 (file)
@@ -314,7 +314,9 @@ Demande: $2',
 'protectedpagetext'    => 'Cette page est barrée pour empêcher des changements.',
 'viewsourcetext'       => 'Vous pouvez voir et copier la source de cette page:',
 'protectedinterface'   => "Cette page crée le texte de l'interface pour le software, et est barrée pour empêcher l'abus.",
-'editinginterface'     => "'''Attention:'''  Vous êtes après changer une page qu'est usée pour créer le texte de l'interface pour le software.  Si vous changerait cette page, vous changerait des autres pages aussi.",
+'editinginterface'     => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
+Changes to this page will affect the appearance of the user interface for other users.
+For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
 'sqlhidden'            => '(Demande SQL cachée)',
 'cascadeprotected'     => 'Cette page est protégée parce qu’elle est incluse par {{PLURAL:$1|la page suivante, qui est protégée|les pages suivantes, qui sont protégées}} avec l’option « protection en cascade » activée :
 $2',
index cd01389..8b68719 100644 (file)
@@ -386,7 +386,9 @@ MySQL回到错误“$3: $4”。',
 'protectedpagetext'    => '个页锁到嘞,改伓正。',
 'viewsourcetext'       => '倷可以眵吖或复制个页𠮶源代码:',
 'protectedinterface'   => '个页给正嘞软件𠮶界面文本,佢拖锁到怕人乱扤。',
-'editinginterface'     => "!!糊糊涂涂!!'''警告''':倷编写𠮶页面系用来提供软件𠮶界面文本,改动个页会碍到别𠮶用户𠮶界面外观。",
+'editinginterface'     => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
+Changes to this page will affect the appearance of the user interface for other users.
+For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
 'sqlhidden'            => '(SQL 弆到𠮶查询)',
 'cascadeprotected'     => '个页已拖保护,因为佢拖“联锁保护”𠮶{{PLURAL:$1|一只|几只}}拖保护页包到:
 $2',
index df8c78a..4a625c4 100644 (file)
@@ -409,7 +409,9 @@ MySQL回到錯誤“$3: $4”。',
 'protectedpagetext'    => '箇頁鎖到嘞,改伓正。',
 'viewsourcetext'       => '倷可以眵吖或複製箇頁嗰原始碼:',
 'protectedinterface'   => '箇頁給正嘞軟件嗰界面文本,佢拕鎖到怕人亂扤。',
-'editinginterface'     => "!!糊糊涂涂!!'''警告''':倷編寫嗰頁面係用來提供軟件嗰界面文本,改動箇頁會礙到別嗰用戶嗰界面外觀。",
+'editinginterface'     => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
+Changes to this page will affect the appearance of the user interface for other users.
+For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
 'sqlhidden'            => '(SQL 弆到嗰查詢)',
 'cascadeprotected'     => '箇頁已拕保護,因為佢拕「聯鎖保護」嗰{{PLURAL:$1|一隻|幾隻}}拕保護頁包到:
 $2',
index 1f59d28..a2ecafb 100644 (file)
@@ -608,7 +608,10 @@ $2',
 'customjsprotected'    => 'Non dispón de permisos para modificar esta páxina de JavaScript, dado que contén a configuración persoal doutro usuario.',
 'ns-specialprotected'  => 'Non se poden editar as páxinas no espazo de nomes {{ns:special}}.',
 'titleprotected'       => "Este título foi protexido da creación por [[User:$1|$1]].
-A razón dada foi ''$2''.",
+O motivo achegado é ''$2''.",
+'filereadonlyerror'    => 'Non se puido modificar o ficheiro "$1" porque o repositorio "$2" está en modo de só lectura.
+
+O motivo achegado é "\'\'$3\'\'".',
 
 # Virus scanner
 'virus-badscanner'     => "Configuración errónea: escáner de virus descoñecido: ''$1''",
@@ -1755,6 +1758,7 @@ Se o problema persiste, póñase en contacto cun [[Special:ListUsers/sysop|admin
 'backend-fail-closetemp'     => 'Non se puido pechar o ficheiro temporal.',
 'backend-fail-read'          => 'Non se puido ler o ficheiro "$1".',
 'backend-fail-create'        => 'Non se puido crear o ficheiro "$1".',
+'backend-fail-maxsize'       => 'Non se puido crear o ficheiro "$1" porque {{PLURAL:$2|é de máis de $2 byte|supera os $2 bytes}}.',
 'backend-fail-readonly'      => 'Nestes intres, o sistema de almacenamento "$1" está en modo de só lectura. A razón dada é: "$2"',
 'backend-fail-synced'        => 'O ficheiro "$1" está nun estado inconsistente dentro do sistema de almacenamento interno',
 'backend-fail-connect'       => 'Non se puido conectar co sistema de almacenamento "$1".',
@@ -1762,6 +1766,9 @@ Se o problema persiste, póñase en contacto cun [[Special:ListUsers/sysop|admin
 'backend-fail-contenttype'   => 'Non se puido determinar o tipo de contido do ficheiro a almacenar en "$1".',
 'backend-fail-batchsize'     => 'O sistema de almacenamento recibiu un feixe de $1 {{PLURAL:$1|operación|operacións}} de ficheiro; o límite está en $2 {{PLURAL:$2|operación|operacións}}.',
 
+'filejournal-fail-dbconnect' => 'Non se pode conectar coa base de datos do rexistro do sistema de almacenamento "$1".',
+'filejournal-fail-dbquery'   => 'Non se pode actualizar a base de datos do rexistro do sistema de almacenamento "$1".',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Non se puido desbloquear "$1". Non está bloqueado.',
 'lockmanager-fail-closelock'   => 'Non se puido pechar o ficheiro de peche de "$1".',
@@ -2093,6 +2100,11 @@ Pode precisar máis a vista seleccionando o tipo de rexistro, o nome do usuario
 'allpagesbadtitle'  => 'O título dado á páxina non era válido ou contiña un prefixo inter-linguas ou inter-wikis. Pode que conteña un ou máis caracteres que non se poden empregar nos títulos.',
 'allpages-bad-ns'   => '{{SITENAME}} carece do espazo de nomes "$1".',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Está a ver unha versión da páxina gardada na caché, que pode ser de hai $1.',
+'cachedspecial-viewing-cached-ts'  => 'Está a ver unha versión da páxina gardada na caché, que pode non estar completamente actualizada.',
+'cachedspecial-refresh-now'        => 'Ir á versión máis recente.',
+
 # Special:Categories
 'categories'                    => 'Categorías',
 'categoriespagetext'            => '{{PLURAL:$1|A seguinte categoría contén|As seguintes categorías conteñen}} páxinas ou contidos multimedia.
@@ -3886,4 +3898,15 @@ En caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario
 'api-error-uploaddisabled'                => 'As cargas están desactivadas neste wiki.',
 'api-error-verification-error'            => 'Este ficheiro podería estar corrupto ou ter unha extensión incorrecta.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|segundo|segundos}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|minuto|minutos}}',
+'duration-hours'     => '$1 {{PLURAL:$1|hora|horas}}',
+'duration-days'      => '$1 {{PLURAL:$1|día|días}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|semana|semanas}}',
+'duration-years'     => '$1 {{PLURAL:$1|ano|anos}}',
+'duration-decades'   => '$1 {{PLURAL:$1|década|décadas}}',
+'duration-centuries' => '$1 {{PLURAL:$1|século|séculos}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milenio|milenios}}',
+
 );
index 7665464..14d2cc8 100644 (file)
@@ -2631,7 +2631,7 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'pagemovedsub'                 => 'પાનું સફળતા પૂર્વક ખસેડવામાં આવ્યું છે',
 'movepage-moved'               => '\'\'\'"$1" નું નામ બદલીને "$2" કરવામાં આવ્યું છે\'\'\'',
 'movepage-moved-redirect'      => 'દિશાનિર્દેશના રચાયું',
-'movepage-moved-noredirect'    => 'દિશા નિર્દેશનોની રચના ને સંતાડી દેવાઇ છે',
+'movepage-moved-noredirect'    => 'દિશાનિર્દેશન ટાળવામાં આવ્યું છે',
 'articleexists'                => 'આ નામનું પાનું અસ્તિત્વમાં છે, અથવાતો તમે પસંદ કરેલું નામ અસ્વિકાર્ય છો.
 કૃપા કરી અન્ય નામ પસંદ કરો.',
 'cantmove-titleprotected'      => 'આ સ્થાને તમે પાનું નહીં હટાવી શકો કેમ કે નવું શીર્ષક રચના કરવા પહેલેથી આરક્ષીત છે',
@@ -3692,7 +3692,7 @@ $5
 'sqlite-no-fts'  => '$1 પૂર્ણ શબ્દ  શોધ વિકલ્પ વગર',
 
 # New logging system
-'logentry-delete-delete'              => '$1 àª\95ાઢà«\80 àªªàª¾àª¨à«\81àª\82 $3',
+'logentry-delete-delete'              => '$1 àª¦à«\8dવારા àªªàª¾àª¨à«\81àª\82 $3 àª¦à«\82ર àª\95રવામાàª\82 àª\86વà«\8dયà«\81àª\82',
 'logentry-delete-restore'             => '$1 પુનઃસંગ્રહ પાનું $3',
 'logentry-delete-event'               => '$1 બદલાઈ ના દૃશ્યતા {{PLURAL: $5 | લોગ ઘટના | $5 લોગ}} $3 ઘટનાઓ પર $4',
 'logentry-delete-revision'            => '$1 બદલાઈ ના દૃશ્યતા {{PLURAL: $5 | સુધારણા | $5 આવૃત્તિઓ}} $3 પાનાં પર: $4',
index 9969b66..c5e1f2c 100644 (file)
@@ -316,7 +316,9 @@ Chhà-khon: $2',
 'protectedpagetext'    => 'Pún-chông yí-kîn pûn fûng-só put yún-chún phiên-cho.',
 'viewsourcetext'       => 'Ngì khó-yî chhà-khon pin fuk-chṳ pún vùn-chông ke kîn-ngièn.',
 'protectedinterface'   => 'Ke-chông thì-kiûng liáu ngiôn-thí ke kie-mien vùn-sṳ, kí yí-kîn pûn fûng-só fòng-chṳ́ sùi-yi ke siû-kói.',
-'editinginterface'     => "'''Kín-ko:''' Ngì chang-chhai phiên-siá ke vùn-chông he yung chhai-yî thì-kiûng ngiôn-thí ke kie-mien vùn-sṳ. Kói-pien chhṳ́-chông chiông-voi yáng-hióng khì-thâ yung-fu-chá ke kie-mien ngoi-kôn.",
+'editinginterface'     => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
+Changes to this page will affect the appearance of the user interface for other users.
+For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
 'sqlhidden'            => '(Yún-chhòng SQL ke chhà-chhìm)',
 'cascadeprotected'     => 'Liá-ke vùn-chông yí-kîn pûn pó-fu, yîn-vi liá-ke hong-mien pûn yî-ha phêu-chu "lièn-só pó-fu" ke {{PLURAL:$1|yit-ke|tô-ke}} pûn pó-fu vùn-chông pâu-hàm:',
 'ns-specialprotected'  => 'Chhai thi̍t-sû miàng-sṳ khúng-kiên tsûng ke vùn-thí he vù-nèn piên-sip ke.',
index ade5cfc..61decf4 100644 (file)
@@ -731,7 +731,8 @@ $1',
 'viewyourtext'         => "באפשרותכם לצפות בטקסט המקור של '''העריכות שלכם''' של הדף ולהעתיקו:",
 'protectedinterface'   => 'דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה, ומוגן כדי למנוע השחתות.',
 'editinginterface'     => "'''אזהרה:''' הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.
-שינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים.",
+שינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים.
+לתרגומים, אנא שקלו להשתמש ב־[//translatewiki.net/wiki/Main_Page?setlang=he translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
 'sqlhidden'            => '(שאילתת ה־SQL מוסתרת)',
 'cascadeprotected'     => 'דף זה מוגן מעריכה כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:
 $2',
@@ -741,6 +742,9 @@ $2',
 'ns-specialprotected'  => 'לא ניתן לערוך דפים מיוחדים.',
 'titleprotected'       => 'לא ניתן ליצור דף זה, כיוון שהמשתמש [[User:$1|$1]] הגן עליו מפני יצירה.
 הסיבה שניתנה לכך היא "$2".',
+'filereadonlyerror'    => 'לא ניתן לשנות את הקובץ "$1" כיוון שמאגר הקבצים "$2" הוא במצב קריאה בלבד.
+
+הסיבה שניתנה לכך היא "\'\'\'$3\'\'\'".',
 
 # Virus scanner
 'virus-badscanner'     => "הגדרות שגויות: סורק הווירוסים אינו ידוע: ''$1''",
@@ -1129,7 +1133,8 @@ $2
 'language-converter-depth-warning'        => 'עומק ממיר השפה עבר את המגבלה ($1)',
 
 # "Undo" feature
-'undo-success' => 'ניתן לבטל את העריכה. אנא בִדקו את השוואת הגרסאות למטה כדי לוודא שזה מה שאתם רוצים לעשות, ואז שמרו את השינויים למטה כדי לבצע את ביטול העריכה.',
+'undo-success' => 'ניתן לבטל את העריכה.
+אנא בִדקו את השוואת הגרסאות למטה כדי לוודא שזה מה שאתם רוצים לעשות, ואז שמרו את השינויים למטה כדי לבצע את ביטול העריכה.',
 'undo-failure' => 'לא ניתן היה לבטל את העריכה עקב התנגשות עם עריכות מאוחרות יותר.',
 'undo-norev'   => 'לא ניתן היה לבטל את העריכה כי היא אינה קיימת או כי היא נמחקה.',
 'undo-summary' => 'ביטול גרסה $1 של [[Special:Contributions/$2|$2]] ([[User talk:$2|שיחה]])',
@@ -1875,13 +1880,17 @@ $1',
 'backend-fail-closetemp'     => 'לא הייתה אפשרות לסגור את הקובץ הזמני.',
 'backend-fail-read'          => 'קריאת הקובץ $1 לא הצליחה',
 'backend-fail-create'        => 'יצירת הקובץ $1 לא הצליחה',
-'backend-fail-readonly'      => 'מאגר האחסון לקבצים "$1" הוא כרגע במצב קריאה בלבד. הסיבה שניתנה לכך היא: "$2"',
+'backend-fail-maxsize'       => 'יצירת הקובץ $1 לא הצליחה כיוון שהוא גדול יותר {{PLURAL:$2|מבית אחד|מ־$2 בתים}}.',
+'backend-fail-readonly'      => 'מאגר האחסון לקבצים "$1" הוא כרגע במצב קריאה בלבד. הסיבה שניתנה לכך היא: "\'\'\'$2\'\'\'"',
 'backend-fail-synced'        => 'הקובץ "$1" נמצא במצב לא עקבי בתוך מאגרי אחסון הקבצים הפנימיים',
 'backend-fail-connect'       => 'לא ניתן היה להתחבר למאגר אחסון הקבצים הפנימי "$1".',
 'backend-fail-internal'      => 'אירעה שגיאה בלתי־ידועה במאגר אחסון הקבצים הפנימי "$1".',
 'backend-fail-contenttype'   => 'לא ניתן היה לקבוע את סוג התוכן של הקובץ לאחסון ב־"$1".',
 'backend-fail-batchsize'     => 'למאגר אחסון הקבצים הפנימי הועבר אוסף של {{PLURAL:$1|פעולת קובץ אחת|$1 פעולות קובץ}}; המגבלה היא {{PLURAL:$2|פעולה אחת|$2 פעולות}}.',
 
+'filejournal-fail-dbconnect' => 'לא ניתן היה להתחבר לבסיס הנתונים של היומן עבור מאגר אחסון הקבצים הפנימי "$1".',
+'filejournal-fail-dbquery'   => 'לא ניתן היה לעדכן את בסיס הנתונים של היומן עבור מאגר אחסון הקבצים הפנימי "$1".',
+
 # Lock manager
 'lockmanager-notlocked'        => 'פתיחת הנעילה של "$1" לא הצליחה; הוא לא נעול.',
 'lockmanager-fail-closelock'   => 'לא הייתה אפשרות לסגור את קובץ הנעילה עבור "$1".',
@@ -2213,6 +2222,11 @@ $1',
 ייתכן שהיא מכילה תו אחד או יותר האסורים לשימוש בכותרות.',
 'allpages-bad-ns'   => 'אין מרחב שם בשם "$1".',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'זוהי גרסה שמורה בזיכרון המטמון של דף זה, שעשויה להיות בת $1.',
+'cachedspecial-viewing-cached-ts'  => 'זוהי גרסה שמורה בזיכרון המטמון של דף זה, שעשויה שלא להיות מעודכנת.',
+'cachedspecial-refresh-now'        => 'צפייה באחרון.',
+
 # Special:Categories
 'categories'                    => 'קטגוריות',
 'categoriespagetext'            => '{{PLURAL:$1|הקטגוריה הבאה כוללת|הקטגוריות הבאות כוללות}} דפים או קובצי מדיה.
@@ -2635,7 +2649,7 @@ $1',
 'ipb-hardblock'                   => 'ביטול האפשרות של משתמשים רשומים לערוך מכתובת IP זו',
 'ipbcreateaccount'                => 'חסימה של יצירת חשבונות',
 'ipbemailban'                     => 'חסימה של שליחת דואר אלקטרוני',
-'ipbenableautoblock'              => '×\97ס×\99×\9e×\94 ×\92×\9d ×©×\9c ×\9bת×\95×\91ת ×\94Ö¾IP ×©×\9c×\95 ×\95×\9b×\9c ×\9bת×\95×\91ת IP ×\90×\97רת ×©×\99שת×\9eש ×\91×\94',
+'ipbenableautoblock'              => '×\97ס×\99×\9e×\94 ×\90×\95×\98×\95×\9e×\98×\99ת ×\92×\9d ×©×\9c ×\9bת×\95×\91ת ×\94Ö¾IP ×\94×\90×\97ר×\95× ×\94 ×©×\94שת×\9eש ×\91×\94 ×\95ש×\9c ×\9b×\9c ×\9bת×\95×\91ת IP ×©×\99נס×\94 ×\9c×\94שת×\9eש ×\91×\94 ×\91עת×\99×\93',
 'ipbsubmit'                       => 'חסימה',
 'ipbother'                        => 'זמן אחר:',
 'ipboptions'                      => 'שעתיים:2 hours,יום:1 day,שלושה ימים:3 days,שבוע:1 week,שבועיים:2 weeks,חודש:1 month,שלושה חודשים:3 months,שישה חודשים:6 months,שנה:1 year,לזמן בלתי מוגבל:infinite',
@@ -2694,7 +2708,8 @@ $1',
 'change-blocklink'                => 'שינוי חסימה',
 'contribslink'                    => 'תרומות',
 'emaillink'                       => 'שליחת דוא"ל',
-'autoblocker'                     => 'נחסמתם באופן אוטומטי משום שאתם חולקים את כתובת ה־IP שלכם עם [[User:$1|$1]]. הנימוק לחסימה: "$2".',
+'autoblocker'                     => 'נחסמתם באופן אוטומטי משום שאתם חולקים את כתובת ה־IP שלכם עם [[User:$1|$1]].
+הסיבה שניתנה לחסימת $1 היא "\'\'\'$2\'\'\'"',
 'blocklogpage'                    => 'יומן חסימות',
 'blocklog-showlog'                => 'משתמש זה נחסם בעבר. יומן החסימות מוצג למטה:',
 'blocklog-showsuppresslog'        => 'משתמש זה נחסם והוסתר בעבר. יומן ההסתרות מוצג למטה:',
@@ -4055,4 +4070,15 @@ $5
 'api-error-uploaddisabled'                => 'ההעלאה מבוטלת באתר הוויקי הזה.',
 'api-error-verification-error'            => 'קובץ זה עשוי להיות פגום או בעל סיומת שגויה.',
 
+# Durations
+'duration-seconds'   => '{{PLURAL:$1|שנייה|$1 שניות}}',
+'duration-minutes'   => '{{PLURAL:$1|דקה|$1 דקות}}',
+'duration-hours'     => '{{PLURAL:$1|שעה|$1 שעות|שעתיים}}',
+'duration-days'      => '{{PLURAL:$1|יום|$1 ימים|יומיים}}',
+'duration-weeks'     => '{{PLURAL:$1|שבוע|$1 שבועות|שבועיים}}',
+'duration-years'     => '{{PLURAL:$1|שנה|$1 שנים|שנתיים}}',
+'duration-decades'   => '{{PLURAL:$1|עשור|$1 עשורים}}',
+'duration-centuries' => '{{PLURAL:$1|מאה שנה|$1 מאות שנים|מאתיים שנה}}',
+'duration-millennia' => '{{PLURAL:$1|אלף שנה|$1 אלפי שנים|אלפיים שנה}}',
+
 );
index 1863a63..61c3c27 100644 (file)
@@ -52,6 +52,11 @@ $namespaceAliases = array(
        'Razgovor_o_slici' => NS_FILE_TALK,
 );
 
+$namespaceGenderAliases = array(
+       NS_USER => array( 'male' => 'Suradnik', 'female' => 'Suradnica' ),
+       NS_USER_TALK => array( 'male' => 'Razgovor_sa_suradnikom', 'female' => 'Razgovor_sa_suradnicom' ),
+);
+
 $specialPageAliases = array(
        'Activeusers'               => array( 'Aktivni_suradnici' ),
        'Allmessages'               => array( 'Sve_poruke' ),
index 32b6510..06af442 100644 (file)
@@ -535,6 +535,9 @@ $2',
 'ns-specialprotected'  => 'Specialne strony njedadźa so wobdźěłać.',
 'titleprotected'       => 'Tutón titul bu přećiwo wutworjenju přez [[User:$1|$1]] škitany.
 Podata přičina je \'\'"$2"\'\'.',
+'filereadonlyerror'    => 'Njeje móžno dataju "$1" změnić, dokelž datajowy repozitorij "$2" je jenož čitajomny.
+
+Podata přičina je "\'\'$3\'\'".',
 
 # Virus scanner
 'virus-badscanner'     => "Špatna konfiguracija: Njeznaty wirusowy skener: ''$1''",
@@ -1622,6 +1625,7 @@ $1',
 'backend-fail-closetemp'     => 'Temporerna dataja njeda so začinić.',
 'backend-fail-read'          => 'Dataja $1 njeda so čitać',
 'backend-fail-create'        => 'Dataja $1 njeda so wutworić',
+'backend-fail-maxsize'       => 'Dataja $1 njeda so wutworić, dokelž je wjetša hač {{PLURAL:$2|$2 bajt|$2 bajtaj|$2 bajty|$2 bajtow}}.',
 'backend-fail-readonly'      => 'Składowanski backend "$1" da so tuchwilu jenož čitać. Přičina je była: "$2"',
 'backend-fail-synced'        => 'Dataja "$1" je znutřka interneho składowanskeho backenda w inkonsistentnym stawje',
 'backend-fail-connect'       => 'Zwisk z datajowym składowanskim backendom "$1" móžno njeje.',
@@ -1629,6 +1633,9 @@ $1',
 'backend-fail-contenttype'   => 'Wobsahowy typ dataje, kotraž ma so na "$1" składować, njeda so zwěsćić.',
 'backend-fail-batchsize'     => 'Staplowa dataja, kotraž {{PLURAL:$1|jednu operaciju|$1 operaciji|$1 operacije|$1 operacijow}} wobsahuje,  je so  na składowanski backend pósłała; limit je $2 {{PLURAL:$2|operaciju|operaciji|operacije|operacijow}} .',
 
+'filejournal-fail-dbconnect' => 'Njeje žadyn zwisk ze žurnalowej datowej banku za składowanski backend "$1" móžno.',
+'filejournal-fail-dbquery'   => 'Žurnalowa datowa banka za składowanski backend "$1" njeda so aktualizować.',
+
 # Lock manager
 'lockmanager-notlocked'        => '"$1" njeda so wotewrić; njeje zawrjeny.',
 'lockmanager-fail-closelock'   => 'Zawrjenska dataja njeda so za "$1" začinić.',
@@ -1949,6 +1956,11 @@ Prošu wobkedźbuj, zo druhe websydła móža na dataju z direktnym URL wotkazow
 'allpagesbadtitle'  => 'Mjeno strony, kotrež sy zapodał, njebě płaćiwe. Měješe pak mjezyrěčny, pak mjezywikijowy prefiks abo wobsahowaše jedne abo wjace znamješkow, kotrež w titlach dowolene njejsu.',
 'allpages-bad-ns'   => 'Mjenowy rum „$1" w {{grammar:lokatiw|{{SITENAME}}}} njeeksistuje.',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Wobhladuješ sej pufrowanu wersiju tuteje strony, kotraž móže do $1 stara być.',
+'cachedspecial-viewing-cached-ts'  => 'Wobhladuješ sej pufrowanu wersiju tuteje strony, kotraž móhła njeaktualna być.',
+'cachedspecial-refresh-now'        => 'Aktualnu wersiju sej wobhladać.',
+
 # Special:Categories
 'categories'                    => 'Kategorije',
 'categoriespagetext'            => '{{PLURAL:$1|Slědowaca kategorija wobsahuje|Slědowacej kategoriji wobsahujetej|Slědowace kategorije wobsahuja|Slědowace kategorije wobsahuja}} strony abo medije.
@@ -3664,4 +3676,14 @@ Hewak móžeš slědowacy jednory formular wužiwać. Twój komentar přida so s
 'api-error-uploaddisabled'                => 'Nahraća su na tutym wikiju znjemóžnjene.',
 'api-error-verification-error'            => 'Tuta dataja móhła wobkškodźena być abo wopačny sufiks měć.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|sekunda|sekundźe|sekundy|sekundow}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|mjeńšina|mjeńšinje|mjeńšiny|mjeńšin}}',
+'duration-hours'     => '$1 {{PLURAL:$1|hodźina|hodźinje|hodźiny|hodźin}}',
+'duration-days'      => '$1 {{PLURAL:$1|dźeń|dnjej|dny|dnjow}}',
+'duration-weeks'     => '$1 {{PLURAL: $1|tydźeń|njedźeli|njedźele|njedźel}}',
+'duration-years'     => '$1 {{PLURAL: $1|lěto|lěće|lěta|lět}}',
+'duration-decades'   => '$1 {{PLURAL:$1|lětdźesatk|lětdźesatkaj|lětdźesatki|lětdźesatkow}}',
+'duration-centuries' => '$1 {{PLURAL:$1|lětstotk|lětstotkaj|lětstotki|lětstotkow}}',
+
 );
index ffba22e..df08bb9 100644 (file)
@@ -498,6 +498,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).
 'aboutsite'            => '{{grammar:genitive|{{SITENAME}}}} մասին',
@@ -542,6 +543,8 @@ $1',
 'toc'                     => 'Բովանդակություն',
 'showtoc'                 => 'ցույց տալ',
 'hidetoc'                 => 'թաքցնել',
+'collapsible-collapse'    => 'Ծալել',
+'collapsible-expand'      => 'Բացել',
 'thisisdeleted'           => 'Դիտե՞լ կամ վերականգնե՞լ $1։',
 'viewdeleted'             => 'Դիտե՞լ $1։',
 'restorelink'             => '{{PLURAL:$1|մեկ ջնջված խմբագրում|$1 ջնջված խմբագրում}}',
@@ -553,6 +556,8 @@ $1',
 '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'      => 'Էջ',
@@ -620,6 +625,7 @@ $1',
 'badarticleerror'      => 'Տվյալ գործողությունը չի կարող կատարվել այս էջում։',
 'cannotdelete'         => 'Չհաջողվեց ջնջել «$1» էջը կամ ֆայլը։
 Հավանաբար այն արդեն ջնջվել է մեկ այլ մասնակցի կողմից։',
+'cannotdelete-title'   => 'Հնարավոր չէ ջնջել $1 էջը',
 'badtitle'             => 'Անընդունելի անվանում',
 'badtitletext'         => 'Հարցված էջի անվանումը անընդունելի է, դատարկ է կամ սխալ միջ-լեզվական կամ ինտերվիքի անվանում է։ Հնարավոր է, որ այն պարունակում է անթույլատրելի սիմվոլներ։',
 'perfcached'           => 'Հետևյալ տվյալները վերցված են քեշից և հնարավոր է չարտացոլեն վերջին փոփոխությունները։ A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
@@ -629,10 +635,12 @@ $1',
 Ֆունկցիա. $1<br />
 Հայցում. $2',
 'viewsource'           => 'Դիտել ելատեքստը',
+'viewsource-title'     => 'Դիտել $1 էջի աղբյուրը',
 'actionthrottled'      => 'Գործողությունը արգելափակվեց',
 'actionthrottledtext'  => 'Որպես հակա-սպամային միջոց, այս գործողության չափից շատ կատարումը կարճ ժամանակահատվածի ընթացքում սահմանափակված է։ Խնդրում ենք փորձել կրկին մի քանի րոպե անց։',
 'protectedpagetext'    => 'Այս էջը կողպված խմբագրման համար։',
 'viewsourcetext'       => 'Դուք կարող եք դիտել և պատճենել այս էջի ելատեքստը.',
+'viewyourtext'         => 'Դուք կարող եք դիտել «ձեր ներդրումների» աղբյուրը և պատճենել այս էջ',
 'protectedinterface'   => 'Այս էջը պարունակում է ծրագրային ապահովման ինտերֆեյսի ուզերձ և կողպված է չարաշահումների կանխարգելման նպատակով։.',
 'editinginterface'     => "'''Զգուշացում.''' Դուք խմբագրում եք ծրագրային ապահովման ինտերֆեյսի տեքստ պարունակող էջ։ Այս էջի փոփոխությունը կանդրադառնա այլ մասնակիցներին տեսանելի ինտերֆեյսի տեսքի վրա։
 Թարգմանությունների համար նախընտրելի է օգտագործել [//translatewiki.net/wiki/Main_Page?setlang=hy translatewiki.net]՝ MediaWiki ծրագրի տեղայնացման նախագիծը։",
@@ -677,6 +685,7 @@ $2',
 'gotaccountlink'             => 'Մուտք գործեք համակարգ',
 'userlogin-resetlink'        => 'Մոռացե՞լ եք Ձեր լոգին տվյալները։',
 'createaccountmail'          => 'էլ-փոստով',
+'createaccountreason'        => 'Պատճառ.',
 'badretype'                  => 'Ձեր մուտքագրած գաղտնաբառերը չեն համընկնում։',
 'userexists'                 => 'Այս մասնակցի անունը արդեն զբաղված է։ Խնդրում ենք ընտրել մեկ այլ անուն։',
 'loginerror'                 => 'Մասնակցի մուտքի սխալ',
@@ -747,7 +756,12 @@ $2',
 'resetpass-temp-password'   => 'Ժամանակավոր գաղտնաբառ.',
 
 # Special:PasswordReset
-'passwordreset-username' => 'Մասնակցի անուն.',
+'passwordreset-username'     => 'Մասնակցի անուն.',
+'passwordreset-emailelement' => 'Մասնակցային անուն. $1
+Ժամանակավոր գաղտնաբառ. $2',
+
+# Special:ChangeEmail
+'changeemail' => 'Փոխել էլ. հասցեն',
 
 # Edit page toolbar
 'bold_sample'     => 'Թավատառ տեքստ',
@@ -831,10 +845,14 @@ $2',
 Համակարգ մուտք գործելուն պես կարող եք ''[[Special:ChangePassword|փոխել գաղտնաբառը]]''։",
 'newarticle'                       => '(Նոր)',
 'newarticletext'                   => "Դուք հղվել եք դեռևս գոյություն չունեցող էջի։ Էջը ստեղծելու համար սկսեք տեքստի մուտքագրումը ներքևի արկղում (այցելեք [[{{MediaWiki:Helppage}}|օգնության էջը]]՝ մանրամասն տեղեկությունների համար)։ Եթե դուք սխալմամբ եք այստեղ հայտնվել, ապա մատնահարեք ձեր զննարկիչի '''back''' կոճակը։",
-'anontalkpagetext'                 => "----''Այս քննարկման էջը պատկանում է անանուն մասնակցին, որը դեռ չի ստեղծել մասնակցային հաշիվ կամ չի մտել համակարգ մասնակցի անունով։
-Այդ իսկ պատճառով օգտագործվում է թվային IP-հասցեն։
-Նման IP-հասցեից կարող են օգտվել մի քանի մասնակիցներ։
-Եթե դուք անանուն մասնակից եք, բայց կարծում եք, որ ուրիշներին վերաբերող դիտողությունները արվում են ձեր հասցեով, ապա խնդրում ենք պարզապես [[Special:UserLogin/signup|գրանցվել]] կամ [[Special:UserLogin|մտնել համակարգ]], որպեսզի հետագայում ձեզ չշփոթեն այլ անանուն մասնակիցների հետ։''",
+'anontalkpagetext'                 => "{| style=\"background-repeat:no-repeat; background-position:800px -20px; margin:0.5em 0 0.5em 0; clear:both;\" width=100% class=toccolours
+|- 
+| <span class=\"plainlinksneverexpand\">''Այս քննարկման էջը պատկանում է չգրանցված կամ համակարգ չմտած մասնակցի, ով խմբագրում կատարելիս օգտվել է {{BASEPAGENAME}} ԱյՓի հասցեից։''
+Քանի որ միևնույն ԱյՓի հասցեից տարբեր մարդիկ կարող են օգտվել, հնարավոր է որ այստեղ գտնեք զգուշացումներ և հաղորդագրություններ, որոնք ձեզ չեն վերաբերում։ Դրանից խուսափելու համար առաջարկում ենք [[Special:UserLogin/signup|գրանցվել]] կամ, եթե արդեն գրանցված եք, պարզապես [[Special:UserLogin|մուտք գործել համակարգ]]։''
+----
+Հավելյալ տեղեկություններ ԱյՓիի մասին. [http://toolserver.org/~overlordq/cgi-bin/whois.cgi?lookup={{BASEPAGENAME}} WHOIS] · [http://www.robtex.com/ip/{{BASEPAGENAME}}.html#ip rDNS] · [http://www.dnsstuff.com/tools/tracert/?tool_id=68&ip={{BASEPAGENAME}} Traceroute] · [http://whatismyipaddress.com/ip/{{BASEPAGENAME}} Geolocate] · [http://toolserver.org/~luxo/contributions/contributions.php?user={{BASEPAGENAME}}&blocks=true Գլոբալ ներդրումներ] · [http://hy.wikipedia.org/wiki/Սպասարկող:DeletedContributions/{{BASEPAGENAME}} Ջնջված ներդրումներ] · [http://hy.wikipedia.org/w/index.php?title=Special:BlockList&ip={{BASEPAGENAME}} Արգելափակումներ]
+</small></span>
+|}",
 'noarticletext'                    => 'Ներկայումս այս էջում որևէ տեքստ չկա։
 Դուք կարող եք [[Special:Search/{{PAGENAME}}|որոնել այս անվանումը]] այլ էջերում, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} որոնել համապատասխան տեղեկամատյանները] կամ [{{fullurl:{{FULLPAGENAME}}|action=edit}} ստեղծել նոր էջ այս անվանմամբ]</span>։',
 'noarticletext-nopermission'       => 'Ներկայումս այս էջում որևէ տեքստ չկա։
@@ -842,6 +860,8 @@ $2',
 'userpage-userdoesnotexist'        => '«<nowiki>$1</nowiki>» անվանմամբ մասնակից գոյություն չունի։
 Խնդրում ենք հավաստիանալ նրանում, թե արդյոք ուզում եք ստեղծել/խմբագրել այս էջը։',
 'userpage-userdoesnotexist-view'   => '«$1» անվանմամբ գրանցված մասնակից չկա։',
+'blocked-notice-logextract'        => 'Այս մասնակիցը ներկա պահին արգելափակված է։
+Ստորև ներկայացված է արգելափակման տեղեկամատյանի վերջին գրառումը.',
 'clearyourcache'                   => "'''Ծանուցում. Հիշելուց հետո կատարված փոփոխությունները տեսնելու համար մաքրեք ձեր զննարկիչի հիշապահեստը. '''
 '''Mozilla / Firefox / Safari'''՝ ''Ctrl+Shift+R''  (''Cmd+Shift+R'' Mac OS X-ում)
 '''Konqueror'''՝ ''F5''
@@ -912,6 +932,7 @@ $2',
 Խնդրում ենք վերանայել ձեր խմբագրման նպատակահարմարությունը։ Հարմարության համար ստորև բերված են այս էջի ջնջման և տեղափոխման տեղեկամատյանները։",
 'moveddeleted-notice'              => 'Այս էջը հեռացված է։
 Էջի մասին գրառումները տեղափոխման և ջնջման տեղեկամատյանից բերված են ստորև տեղեկության համար։',
+'log-fulllog'                      => 'Դիտել ամբողջական տեղեկամատյանը',
 'edit-conflict'                    => 'Խմբագրման ընհարում։',
 'edit-no-change'                   => 'Ձեր խմբագրումը անտեսվել է, քանի որ ոչ մի փոփոխություն չի կատարվել տեքստի մեջ։',
 
@@ -1235,7 +1256,10 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'rightsnone'     => '(ոչ մի)',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-edit' => 'խմբագրել այս էջը',
+'action-edit'           => 'խմբագրել այս էջը',
+'action-delete'         => 'Ջնջել այս էջը',
+'action-deleterevision' => 'Ջնջել այս փոփոխությունը',
+'action-deletedhistory' => 'Դիտել այս էջի ջնջված պատմությունը',
 
 # Recent changes
 'nchanges'                          => '$1 {{PLURAL:$1|փոփոխություն|փոփոխություն}}',
@@ -1635,9 +1659,11 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'watchlistanontext'    => 'Անհրաժեշտ է $1՝ հսկացանկը դիտելու կամ խմբագրելու համար։',
 'watchnologin'         => 'Չեք մտել համակարգ',
 'watchnologintext'     => 'Անհրաժեշտ է [[Special:UserLogin|մտնել համակարգ]]՝ հսկացանկը փոփոխելու համար։',
+'addwatch'             => 'Ավելացնել հսկացանկին',
 'addedwatchtext'       => '«[[:$1]]» էջը ավելացված է ձեր [[Special:Watchlist|հսկացանկին]]։ Այս էջի և նրան կապված քննարկումների էջի հետագա փոփոխությունները կգրանցվեն այդտեղ, և կցուցադրվեն թավատառ [[Special:RecentChanges|վերջին փոփոխությունների]] ցանկում։
 
 Հետագայում հսկացանկից էջը հեռացնելու ցանկության դեպքում մատնահարեք էջի վերնամասի ընտրացանկում գտնվող «հանել հսկումից» կոճակին։',
+'removewatch'          => 'Հեռացնել հսկացանկից',
 'removedwatchtext'     => '«[[:$1]]» էջը հանված է [[Special:Watchlist|ձեր հսկացանկից]]։',
 'watch'                => 'Հսկել',
 'watchthispage'        => 'Հսկել այս էջը',
@@ -1694,42 +1720,50 @@ $NEWPAGE
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
 
 # Delete
-'deletepage'            => 'Ջնջել էջը',
-'confirm'               => 'Հաստատել',
-'excontent'             => 'բովանդակությունը սա էր՝ «$1»',
-'excontentauthor'       => 'Պարունակությունն էր. «$1» (և միակ հեղինակն էր՝ [[Special:Contributions/$2|$2]])',
-'exbeforeblank'         => 'պարունակությունը մինչև մաքրումը. «$1»',
-'exblank'               => 'էջը դատարկ էր',
-'delete-confirm'        => '$1 ― ջնջում',
-'delete-legend'         => 'Ջնջում',
-'historywarning'        => 'Զգուշացում. էջը, որը դուք պատրաստվում եք ջնջել ունի փոփոխությունների պատմություն։',
-'confirmdeletetext'     => 'Դուք պատրաստվում եք ընդմիշտ ջնջել էջը կամ պատկերը տվյալների բազայից իր փոփոխությունների պատմությամբ հանդերձ։ Խնդրում ենք հաստատել, որ դուք իրոք մտադրված եք դա անել, հասկանում եք դրա հետևանքները և գործում եք [[{{MediaWiki:Policy-url}}|կանոնադրության]] սահմաններում։',
-'actioncomplete'        => 'Գործողությունը ավարտված  է',
-'deletedtext'           => '«$1» էջը ջնջված է։
+'deletepage'             => 'Ջնջել էջը',
+'confirm'                => 'Հաստատել',
+'excontent'              => 'բովանդակությունը սա էր՝ «$1»',
+'excontentauthor'        => 'Պարունակությունն էր. «$1» (և միակ հեղինակն էր՝ [[Special:Contributions/$2|$2]])',
+'exbeforeblank'          => 'պարունակությունը մինչև մաքրումը. «$1»',
+'exblank'                => 'էջը դատարկ էր',
+'delete-confirm'         => '$1 ― ջնջում',
+'delete-legend'          => 'Ջնջում',
+'historywarning'         => 'Զգուշացում. էջը, որը դուք պատրաստվում եք ջնջել ունի փոփոխությունների պատմություն։',
+'confirmdeletetext'      => 'Դուք պատրաստվում եք ընդմիշտ ջնջել էջը կամ պատկերը տվյալների բազայից իր փոփոխությունների պատմությամբ հանդերձ։ Խնդրում ենք հաստատել, որ դուք իրոք մտադրված եք դա անել, հասկանում եք դրա հետևանքները և գործում եք [[{{MediaWiki:Policy-url}}|կանոնադրության]] սահմաններում։',
+'actioncomplete'         => 'Գործողությունը ավարտված  է',
+'actionfailed'           => 'Գործողությունը չհաջողվեց',
+'deletedtext'            => '«$1» էջը ջնջված է։
 Տես $2՝ վերջին ջնջումների պատմության համար։',
-'dellogpage'            => 'Ջնջման տեղեկամատյան',
-'dellogpagetext'        => 'Ստորև բերված է ամենավերջին ջնջումների ցանկը։',
-'deletionlog'           => 'ջնջման տեղեկամատյան',
-'reverted'              => 'Հետ է շրջվել նախորդ տարբերակի',
-'deletecomment'         => 'Պատճառ.',
-'deleteotherreason'     => 'Լրացուցիչ պատճառ',
-'deletereasonotherlist' => 'Ուրիշ պատճառ',
+'dellogpage'             => 'Ջնջման տեղեկամատյան',
+'dellogpagetext'         => 'Ստորև բերված է ամենավերջին ջնջումների ցանկը։',
+'deletionlog'            => 'ջնջման տեղեկամատյան',
+'reverted'               => 'Հետ է շրջվել նախորդ տարբերակի',
+'deletecomment'          => 'Պատճառ.',
+'deleteotherreason'      => 'Լրացուցիչ պատճառ',
+'deletereasonotherlist'  => 'Ուրիշ պատճառ',
+'deletereason-dropdown'  => '*Առհասարակ ջնջման պատճառներ
+** Միակ խմբագրողի խնդրանքով
+** Հեղինակային իրավունքի խախտում
+** Վանդալություն',
+'delete-edit-reasonlist' => 'Խմբագրել ջնջման պատճառները',
 
 # Rollback
-'rollback'         => 'Հետ գլորել խմբագրումները',
-'rollback_short'   => 'Հետ գլորել',
-'rollbacklink'     => 'հետ գլորել',
-'rollbackfailed'   => 'Հետ գլորումը ձախողվեց',
-'cantrollback'     => 'Չհաջողվեց հետ շրջել խմբագրումը։ Վերջին ներդրումը կատարվել է էջի միակ հեղինակի կողմից։',
-'alreadyrolled'    => 'Չհաջողվեց հետ գլորել [[:$1]] էջի վերջին խմբագրումները՝ կատարված [[User:$2|$2]] ([[User talk:$2|Քննարկում]]) մասնակցի կողմից։ Մեկ ուրիշը արդեն խմբագրել է կամ հետ է գլորել էջը։
+'rollback'          => 'Հետ գլորել խմբագրումները',
+'rollback_short'    => 'Հետ գլորել',
+'rollbacklink'      => 'հետ գլորել',
+'rollbackfailed'    => 'Հետ գլորումը ձախողվեց',
+'cantrollback'      => 'Չհաջողվեց հետ շրջել խմբագրումը։ Վերջին ներդրումը կատարվել է էջի միակ հեղինակի կողմից։',
+'alreadyrolled'     => 'Չհաջողվեց հետ գլորել [[:$1]] էջի վերջին խմբագրումները՝ կատարված [[User:$2|$2]] ([[User talk:$2|Քննարկում]]) մասնակցի կողմից։ Մեկ ուրիշը արդեն խմբագրել է կամ հետ է գլորել էջը։
 
 Վերջին խմբագրումը կատարվել է [[User:$3|$3]] ([[User talk:$3|Քննարկում]]) մասնակցի կողմից։',
-'editcomment'      => "Խմբագրման մեկնաբանումն էր. «''$1''»։",
-'revertpage'       => '[[Special:Contributions/$2|$2]] ([[User talk:$2|քննարկում]]) մասնակցի խմբագրումները հետ են շրջվել [[User:$1|$1]] մասնակցի վերջին տարբերակին։',
-'rollback-success' => 'Հետ են շրջվել $1 մասնակցի խմբագրումները. վերադարձվել է $2 մասնակցի վերջին տարբերակին։',
+'editcomment'       => "Խմբագրման մեկնաբանումն էր. «''$1''»։",
+'revertpage'        => '[[Special:Contributions/$2|$2]] ([[User talk:$2|քննարկում]]) մասնակցի խմբագրումները հետ են շրջվել [[User:$1|$1]] մասնակցի վերջին տարբերակին։',
+'revertpage-nouser' => 'Հետ շրջվեց (անունը ջնջված է) մասնակցի խմբագրումը՝ [[User:$1|$1]] մասնակցի տարբերակին',
+'rollback-success'  => 'Հետ են շրջվել $1 մասնակցի խմբագրումները. վերադարձվել է $2 մասնակցի վերջին տարբերակին։',
 
 # Edit tokens
-'sessionfailure' => 'Կարծես խնդիր է առաջացել կապված ձեր ընթացիկ աշխատանքային սեսիայի հետ.
+'sessionfailure-title' => 'Սեսիայի խափանում',
+'sessionfailure'       => 'Կարծես խնդիր է առաջացել կապված ձեր ընթացիկ աշխատանքային սեսիայի հետ.
 այս գործողությունը բեկանվել է սեսիայի հափշտակման կանխման նպատակով։
 Խնդրում ենք սեղմել «back» կոճակը և վերբեռնել այն էջը որտեղից եկել եք ու փորձել կրկին։',
 
@@ -1738,9 +1772,13 @@ $NEWPAGE
 'protectlogtext'              => 'Ստորև բերված է պաշտպանված և պաշտպանումից հանված էջերի ցանկը։ Տես նաև [[Special:ProtectedPages|ներկայումս պաշտպանված էջերի ցանկը]]։',
 'protectedarticle'            => 'պաշտպանվեց «[[$1]]» էջը',
 'modifiedarticleprotection'   => 'փոխվեց պաշտպանման մակարդակը «[[$1]]» էջի համար',
-'unprotectedarticle'          => 'պաշտպանումը հանված է «[[$1]]» էջից',
+'unprotectedarticle'          => 'պաշտպանումից հանված է «[[$1]]» էջը',
+'movedarticleprotection'      => 'Փոխվեց պաշտպանության կարգավորումը [[$2]]-ից [[$1]]',
 'protect-title'               => '«$1» էջի պաշտպանման մակարդակի հաստատում',
+'protect-title-notallowed'    => 'Դիտել $1 էջի պաշտպանության մակարդակը',
 'prot_1movedto2'              => '«[[$1]]» վերանվանված է «[[$2]]»',
+'protect-badnamespace-title'  => 'Ոչ պաշտպանելի անվանատարածք',
+'protect-badnamespace-text'   => 'Այս անվանատարածքի էջերը չեն կարող պաշտպանվել',
 'protect-legend'              => 'Հաստատել պաշտպանումը',
 'protectcomment'              => 'Պատճառ.',
 'protectexpiry'               => 'Մարում.',
@@ -1758,8 +1796,17 @@ $NEWPAGE
 'protect-level-sysop'         => 'Միայն ադմինիստրատորներ',
 'protect-summary-cascade'     => 'կասկադային',
 'protect-expiring'            => 'մարում՝ $1 (UTC)',
+'protect-expiring-local'      => 'լրանում է՝ $1',
+'protect-expiry-indefinite'   => 'անժամկետ',
 'protect-cascade'             => 'Պաշտպանել այս էջում ընդգրկված էջերը (կասկադային պաշտպանում)',
 'protect-cantedit'            => 'Դուք չեք կարող փոխել այս էջի պաշտպանության մակարդակը, քանի որ ձեզ չի թույլատրվում խմբագրել այն։',
+'protect-othertime'           => 'Այլ ժամկետ',
+'protect-othertime-op'        => 'այլ ժամկետ',
+'protect-dropdown'            => '* Ամենահաճախ նշվող պատճառներ
+** Հաճախակի վանդալություններ
+** Հաճախակի սփամ
+** Ոչ կառուցողական խմբագրական պատերազմ
+** Հաճախելիության բարձր աստիճան',
 'protect-edit-reasonlist'     => 'Խմբագրել պաշտպանման պատճառների ցանկը',
 'protect-expiry-options'      => '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',
 'restriction-type'            => 'Իրավունքներ.',
@@ -1793,8 +1840,10 @@ $NEWPAGE
 'undeletehistorynoadmin'       => 'Էջը ջնջվել է։ Ջնջման պատճառը և էջը խմբագրած մասնակիցների անունները բերված են ստորև։ Այս ջնջված տարբերակների բուն տեքստերը կարող են դիտել միայն ադմինիստրատորները։',
 'undelete-revision'            => '«$1» էջի $3 մասնակցի կողմից ջնջված տարբերակ ($2 պահով).',
 'undeleterevision-missing'     => 'Սխալ կամ գոյություն չունեցող տարբերակ։ Հնարավոր է դուք անցել եք սխալ հղմամբ, կամ տարբերակը վերականգնվել է, կամ էլ ջնջվել արխիվից։',
+'undelete-nodiff'              => 'Ավելի հին տարբերակներ չեն գտնվել',
 'undeletebtn'                  => 'Վերականգնել',
 'undeletelink'                 => 'դիտել/վերականգնել',
+'undeleteviewlink'             => 'դիտել',
 'undeletereset'                => 'Մաքրել',
 'undeleteinvert'               => 'Շրջել ընտրությունը',
 'undeletecomment'              => 'Մեկնաբանություն.',
@@ -1806,6 +1855,7 @@ $NEWPAGE
 
 Տես [[Special:Log/delete|ջնջման տեղեկամատյանը]]` վերջին ջնջումների և վերականգնումների համար։",
 'undelete-header'              => 'Տես [[Special:Log/delete|ջնջման տեղեկամատյանը]]՝ վերջին ջնջումների և վերականգնումների համար։',
+'undelete-search-title'        => 'Որոնել ջնջված էջեր',
 'undelete-search-box'          => 'Որոնել ջնջված էջերը',
 'undelete-search-prefix'       => 'Ցուց տալ էջերը նախածանցով.',
 'undelete-search-submit'       => 'Որոնել',
@@ -1835,18 +1885,19 @@ $1',
 'month'               => 'Սկսած ամսից (և վաղ)՝',
 'year'                => 'Սկսած տարեթվից (և վաղ)՝',
 
-'sp-contributions-newbies'     => 'Ցույց տալ միայն նորաստեղծ հաշիվներից կատարված ներդրումները',
-'sp-contributions-newbies-sub' => 'Նոր մասնակցային հաշիվներից',
-'sp-contributions-blocklog'    => 'Արգելափակման տեղեկամատյան',
-'sp-contributions-deleted'     => 'Մասնակցի ջնջված ներդրում',
-'sp-contributions-uploads'     => 'Բեռնումներ',
-'sp-contributions-logs'        => 'տեղեկամատյաններ',
-'sp-contributions-talk'        => 'Քննարկում',
-'sp-contributions-userrights'  => 'Մասնակիցների իրավունքների կառավարում',
-'sp-contributions-search'      => 'Որոնել ներդրումները',
-'sp-contributions-username'    => 'IP-հասե կամ մասնակցի անուն.',
-'sp-contributions-toponly'     => 'Ցույց տալ միայն այն խմբագրումները, որոնք վերջին փոփոխություն են',
-'sp-contributions-submit'      => 'Որոնել',
+'sp-contributions-newbies'       => 'Ցույց տալ միայն նորաստեղծ հաշիվներից կատարված ներդրումները',
+'sp-contributions-newbies-sub'   => 'Նոր մասնակցային հաշիվներից',
+'sp-contributions-newbies-title' => 'Նոր մասնակիցների ներդրումներ',
+'sp-contributions-blocklog'      => 'Արգելափակման տեղեկամատյան',
+'sp-contributions-deleted'       => 'Մասնակցի ջնջված ներդրում',
+'sp-contributions-uploads'       => 'Բեռնումներ',
+'sp-contributions-logs'          => 'տեղեկամատյաններ',
+'sp-contributions-talk'          => 'Քննարկում',
+'sp-contributions-userrights'    => 'Մասնակիցների իրավունքների կառավարում',
+'sp-contributions-search'        => 'Որոնել ներդրումները',
+'sp-contributions-username'      => 'IP-հասե կամ մասնակցի անուն.',
+'sp-contributions-toponly'       => 'Ցույց տալ միայն այն խմբագրումները, որոնք վերջին փոփոխություն են',
+'sp-contributions-submit'        => 'Որոնել',
 
 # What links here
 'whatlinkshere'            => 'Այստեղ հղվող էջերը',
@@ -2179,6 +2230,19 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'spam_reverting'      => 'Հետ է շրջվում վերջին տարբերակի, որը չի պարունակում հղումներ դեպի $1',
 'spam_blanking'       => 'Բոլոր տարբերակները պարունակում են հղումներ դեպի $1, մաքրում',
 
+# Info page
+'pageinfo-title'            => 'Տեղեկություններ $1-ի վերաբերյալ',
+'pageinfo-header-edits'     => 'Խմբագրումներ',
+'pageinfo-header-watchlist' => 'Հսկացանկ',
+'pageinfo-header-views'     => 'Դիտումներ',
+'pageinfo-subjectpage'      => 'Էջ',
+'pageinfo-talkpage'         => 'Քննարկման էջ',
+'pageinfo-watchers'         => 'Դիտողների քանակ',
+'pageinfo-edits'            => 'Խմբագրումների քանակ',
+'pageinfo-authors'          => 'Տարբեր հեղինակների քանակ',
+'pageinfo-views'            => 'Դիտումների քանակ',
+'pageinfo-viewsperedit'     => 'Դիտումները ըստ խմբագրումների',
+
 # Skin names
 'skinname-standard'    => 'Դասական',
 'skinname-nostalgia'   => 'Հայրենաբաղձություն',
@@ -2192,7 +2256,7 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'markaspatrolleddiff'                 => 'Նշել որպես ստուգված',
 'markaspatrolledtext'                 => 'Նշել այս էջը որպես ստուգված',
 'markedaspatrolled'                   => 'Նշված է որպես ստուգված',
-'markedaspatrolledtext'               => 'Ընտրված տարբերակը նշված է որպես ստուգված։',
+'markedaspatrolledtext'               => '[[:$1]] ընտրված տարբերակը նշված է որպես ստուգված։',
 'rcpatroldisabled'                    => 'Վերջին Փոփոխությունների Պարեկումն անջատված է',
 'rcpatroldisabledtext'                => 'Վերջին Փոփոխությունների Պարեկման հնարավորությունը անջատված է:',
 'markedaspatrollederror'              => 'Չհաջողվեց նշել որպես ստուգված',
@@ -2242,6 +2306,11 @@ $1',
 'seconds-abbrev' => '$1 վ',
 'minutes-abbrev' => '$1 ր',
 'hours-abbrev'   => '$1 ժ',
+'seconds'        => '{{PLURAL:$1|$1 վայրկյան|$1 վայրկյան}}',
+'minutes'        => '{{PLURAL:$1|$1 րոպե|$1 րոպե}}',
+'hours'          => '{{PLURAL:$1|$1 ժամ|$1 ժամ}}',
+'days'           => '{{PLURAL:$1|$1 օր|$1 օր}}',
+'ago'            => '$1 առաջ',
 
 # Bad image list
 'bad_image_list' => 'Գրաձևը հետևյալն է.
@@ -2332,10 +2401,15 @@ $3
 'confirm_purge_button' => 'OK',
 'confirm-purge-top'    => 'Մաքրե՞լ այս էջի քեշը։',
 
+# action=watch/unwatch
+'confirm-watch-top'   => 'Ավելացնե՞լ ձեր հսկացանկին',
+'confirm-unwatch-top' => 'Հեռացնե՞լ ձեր հսկացանկից։',
+
 # Multipage image navigation
 'imgmultipageprev' => '← նախորդ էջ',
 'imgmultipagenext' => 'հաջորդ էջ →',
-'imgmultigo'       => 'Անցնե՜լ',
+'imgmultigo'       => 'Անցնե՛լ',
+'imgmultigoto'     => 'Անցնել $1 էջը',
 
 # Table pager
 'ascending_abbrev'         => 'աճմ. կարգ.',
index a0ec42b..4d509f4 100644 (file)
@@ -531,6 +531,9 @@ $2',
 'ns-specialprotected'  => 'Le paginas special non es modificabile.',
 'titleprotected'       => "Iste titulo ha essite protegite contra creation per [[User:$1|$1]].
 Le motivo specificate es ''$2''.",
+'filereadonlyerror'    => 'Impossibile modificar le file "$1" perque le deposito de files "$2" es in modo de lectura sol.
+
+Le motivo fornite es "\'\'$3\'\'".',
 
 # Virus scanner
 'virus-badscanner'     => "Configuration incorrecte: programma antivirus non cognoscite: ''$1''",
@@ -1690,6 +1693,7 @@ Si le problema persiste, contacta un [[Special:ListUsers/sysop|administrator]].'
 'backend-fail-closetemp'     => 'Non poteva clauder file temporari.',
 'backend-fail-read'          => 'Non poteva leger le file $1',
 'backend-fail-create'        => 'Non poteva crear le file $1',
+'backend-fail-maxsize'       => 'Impossibile crear le file $1 perque illo es plus grande que {{PLURAL:$2|$2 byte|$2 bytes}}.',
 'backend-fail-readonly'      => 'Le systema de immagazinage "$1" es actualmente in lectura sol. Le sequente motivo esseva specificate: "$2"',
 'backend-fail-synced'        => 'Le file "$1" es in un stato inconsistente inter le systemas interne de immagazinage',
 'backend-fail-connect'       => 'Impossibile connecter al systema de immagazinage "$1".',
@@ -1697,6 +1701,9 @@ Si le problema persiste, contacta un [[Special:ListUsers/sysop|administrator]].'
 'backend-fail-contenttype'   => 'Non poteva determinar le typo de contento del file a immagazinar in "$1".',
 'backend-fail-batchsize'     => 'Le systema de immagazinage ha recipite un lot de $1 {{PLURAL:$1|operation|operationes}} de file; le limite es $2 {{PLURAL:$2|operation|operationes}}.',
 
+'filejournal-fail-dbconnect' => 'Non poteva connecter al base de datos de jornal pro le systema de immagazinage "$1".',
+'filejournal-fail-dbquery'   => 'Non poteva actualisar le base de datos de jornal pro le systema de immagazinage "$1".',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Impossibile disblocar "$1"; illo non es blocate.',
 'lockmanager-fail-closelock'   => 'Non poteva clauder le file de serratura pro "$1".',
@@ -2030,6 +2037,11 @@ Pro restringer le presentation, selige un typo de registro, le nomine de usator
 Es possibile que illo contine un o plus characteres que non pote esser usate in titulos.',
 'allpages-bad-ns'   => '{{SITENAME}} non ha un spatio e nomines "$1".',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Tu vide un version in cache de iste pagina, que pote haber usque a $1 de etate.',
+'cachedspecial-viewing-cached-ts'  => 'Tu vide un version in cache de iste pagina, que pote non esser completemente actual.',
+'cachedspecial-refresh-now'        => 'Vider le plus recente.',
+
 # Special:Categories
 'categories'                    => 'Categorias',
 'categoriespagetext'            => 'Le sequente {{PLURAL:$1|categoria|categorias}} contine paginas o multimedia.
@@ -3833,4 +3845,14 @@ Si non, tu pote usar le formulario facile hic infra. Tu commento essera addite a
 'api-error-uploaddisabled'                => 'Le incargamento es disactivate in iste wiki.',
 'api-error-verification-error'            => 'Le file pote esser corrumpite o su nomine pote haber un extension errate.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|secunda|secundas}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|minuta|minutas}}',
+'duration-hours'     => '$1 {{PLURAL:$1|hora|horas}}',
+'duration-days'      => '$1 {{PLURAL:$1|die|dies}} retro',
+'duration-weeks'     => '$1 {{PLURAL:$1|septimana|septimanas}}',
+'duration-years'     => '$1 {{PLURAL:$1|anno|annos}}',
+'duration-decades'   => '$1 {{PLURAL:$1|decennio|decennios}}',
+'duration-centuries' => '$1 {{PLURAL:$1|seculo|seculos}}',
+
 );
index f90e117..2dd5b38 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author -iNu-
+ * @author Albertus Aditya
  * @author Aldnonymous
  * @author Anakmalaysia
  * @author ArdWar
@@ -1646,9 +1647,11 @@ Jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan
 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|pemantau|pemantau}}]',
 'rc_categories'                     => 'Batasi sampai kategori (dipisah dengan "|")',
 'rc_categories_any'                 => 'Apa pun',
+'rc-change-size-new'                => '$1 {{PLURAL:$1|bita|bita}} setelah perubahan',
 'newsectionsummary'                 => '/* $1 */ bagian baru',
 'rc-enhanced-expand'                => 'Tampilkan rincian (memerlukan JavaScript)',
 'rc-enhanced-hide'                  => 'Sembunyikan rincian',
+'rc-old-title'                      => 'awalnya dibuat sebagai "$1"',
 
 # Recent changes linked
 'recentchangeslinked'          => 'Perubahan terkait',
@@ -1776,16 +1779,17 @@ $1',
 'upload-warning-subj'         => 'Peringatan pemuatan',
 'upload-warning-msg'          => 'Terjadi masalah dengan unggahan Anda dari [$2]. Anda dapat kembali ke [[Special:Upload/stash/$1|formulir pengunggahan]] untuk memerbaiki masalah ini.',
 
-'upload-proto-error'        => 'Protokol tak tepat',
-'upload-proto-error-text'   => 'Pemuatan jarak jauh membutuhkan URL yang diawali dengan <code>http://</code> atau <code>ftp://</code>.',
-'upload-file-error'         => 'Kesalahan internal',
-'upload-file-error-text'    => 'Terjadi kesalahan internal sewaktu mencoba membuat berkas sementara di server.
+'upload-proto-error'                => 'Protokol tak tepat',
+'upload-proto-error-text'           => 'Pemuatan jarak jauh membutuhkan URL yang diawali dengan <code>http://</code> atau <code>ftp://</code>.',
+'upload-file-error'                 => 'Kesalahan internal',
+'upload-file-error-text'            => 'Terjadi kesalahan internal sewaktu mencoba membuat berkas sementara di server.
 Silakan hubungi salah seorang [[Special:ListUsers/sysop|pengurus]].',
-'upload-misc-error'         => 'Kesalahan pemuatan yang tak dikenal',
-'upload-misc-error-text'    => 'Suatu kesalahan yang tak dikenal terjadi sewaktu pemuatan. Harap pastikan bahwa URL tersebut valid dan dapat diakses dan silakan coba lagi. Jika masalah ini tetap terjadi, kontak administrator sistem.',
-'upload-too-many-redirects' => 'URL mengandung terlalu banyak pengalihan',
-'upload-unknown-size'       => 'Ukuran tidak diketahui',
-'upload-http-error'         => 'Kesalahan HTTP terjadi: $1',
+'upload-misc-error'                 => 'Kesalahan pemuatan yang tak dikenal',
+'upload-misc-error-text'            => 'Suatu kesalahan yang tak dikenal terjadi sewaktu pemuatan. Harap pastikan bahwa URL tersebut valid dan dapat diakses dan silakan coba lagi. Jika masalah ini tetap terjadi, kontak administrator sistem.',
+'upload-too-many-redirects'         => 'URL mengandung terlalu banyak pengalihan',
+'upload-unknown-size'               => 'Ukuran tidak diketahui',
+'upload-http-error'                 => 'Kesalahan HTTP terjadi: $1',
+'upload-copy-upload-invalid-domain' => 'Unggahan salinan tidak tersedia dari domain ini.',
 
 # File backend
 'backend-fail-stream'        => 'Tidak bisa mengalikan berkas $1.',
@@ -1797,6 +1801,22 @@ Silakan hubungi salah seorang [[Special:ListUsers/sysop|pengurus]].',
 'backend-fail-delete'        => 'Tidak dapat menghapus berkas $1.',
 'backend-fail-alreadyexists' => 'Berkas $1 sudah ada.',
 'backend-fail-store'         => 'Tidak dapat menyimpan berkas $1 di $2.',
+'backend-fail-copy'          => 'Tidak dapat menyalin berkas $1 ke $2.',
+'backend-fail-move'          => 'Tidak dapat memindahkan berkas $1 ke $2.',
+'backend-fail-opentemp'      => 'Tidak dapat membuka berkas sementara.',
+'backend-fail-writetemp'     => 'Tidak dapat menulis ke berkas sementara.',
+'backend-fail-closetemp'     => 'Tidak dapat menutup berkas sementara.',
+'backend-fail-read'          => 'Tidak dapat membaca berkas $1.',
+'backend-fail-create'        => 'Tidak dapat membuat berkas $1.',
+'backend-fail-maxsize'       => 'Tidak dapat membuat berkas $1 karena ukurannya lebih besar dari {{PLURAL:$2|$2 bita|$2 bita}}.',
+
+# Lock manager
+'lockmanager-fail-closelock'   => 'Tidak dapat menutup penguncian berkas untuk "$1".',
+'lockmanager-fail-deletelock'  => 'Tidak dapat menghapus penguncian berkas untuk "$1".',
+'lockmanager-fail-acquirelock' => 'Tidak dapat mendapatkan penguncian untuk "$1"',
+'lockmanager-fail-openlock'    => 'Tidak dapat membuka penguncian berkas untuk "$1".',
+'lockmanager-fail-db-release'  => 'Tidak dapat melepaskan penguncian pada basis data $1.',
+'lockmanager-fail-svr-release' => 'Tidak dapat melepaskan penguncian pada server $1.',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'Timbul galat saat membuka berkas untuk pengecekan ZIP.',
@@ -1814,13 +1834,14 @@ Berkas tersebut tidak dapat diperiksa keamanannya dengan baik.',
 'uploadstash-badtoken' => 'Pelaksanaan tindakan tersebut gagal. Mungkin karena hak penyuntingan Anda telah kedaluwarsa. Coba lagi.',
 'uploadstash-errclear' => 'Penghapusan berkas gagal.',
 'uploadstash-refresh'  => 'Segarkan daftar berkas.',
+'invalid-chunk-offset' => 'Ofset potongan tidak valid',
 
 # img_auth script messages
 'img-auth-accessdenied'     => 'Akses ditolak',
 'img-auth-nopathinfo'       => 'PATH_INFO hilang.
 Server Anda tidak diatur untuk melewatkan informasi ini.
 Server tersebut mungkin berbasis CGI dan tidak dapat mendukung img_auth.
-[https://www.mediawiki.org/wiki/Manual:Image_Authorization Lihat otorisasi gambar.]',
+Lihat https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-notindir'         => 'Alur yang diminta tidak diatur dalam direktori ungahan.',
 'img-auth-badtitle'         => 'Tidak dapat membangun judul yang sah dari "$1".',
 'img-auth-nologinnWL'       => 'Anda tidak masuk log dan "$1" tidak dalam daftar putih.',
@@ -1920,23 +1941,24 @@ Deskripsi dari [$2 halaman deskripsinya] ditunjukkan di bawah ini.',
 'filerevert-badversion'     => 'Tidak ada versi lokal terdahulu dari berkas ini dengan stempel waktu yang dimaksud.',
 
 # File deletion
-'filedelete'                  => 'Menghapus $1',
-'filedelete-legend'           => 'Menghapus berkas',
-'filedelete-intro'            => "Anda akan menghapus berkas '''[[Media:$1|$1]]''' berikut semua riwayatnya.",
-'filedelete-intro-old'        => '<span class="plainlinks">Anda menghapus versi \'\'\'[[Media:$1|$1]]\'\'\' hingga [$4 $3, $2].</span>',
-'filedelete-comment'          => 'Alasan:',
-'filedelete-submit'           => 'Hapus',
-'filedelete-success'          => "'''$1''' telah dihapus.",
-'filedelete-success-old'      => "Berkas '''[[Media:$1|$1]]''' versi $3, $2 telah dihapus.",
-'filedelete-nofile'           => "'''$1''' tak ditemukan.",
-'filedelete-nofile-old'       => "Tak ditemukan arsip versi dari '''$1''' dengan atribut yang diberikan.",
-'filedelete-otherreason'      => 'Alasan lain/tambahan:',
-'filedelete-reason-otherlist' => 'Alasan lain',
-'filedelete-reason-dropdown'  => '*Alasan penghapusan
+'filedelete'                   => 'Menghapus $1',
+'filedelete-legend'            => 'Menghapus berkas',
+'filedelete-intro'             => "Anda akan menghapus berkas '''[[Media:$1|$1]]''' berikut semua riwayatnya.",
+'filedelete-intro-old'         => '<span class="plainlinks">Anda menghapus versi \'\'\'[[Media:$1|$1]]\'\'\' hingga [$4 $3, $2].</span>',
+'filedelete-comment'           => 'Alasan:',
+'filedelete-submit'            => 'Hapus',
+'filedelete-success'           => "'''$1''' telah dihapus.",
+'filedelete-success-old'       => "Berkas '''[[Media:$1|$1]]''' versi $3, $2 telah dihapus.",
+'filedelete-nofile'            => "'''$1''' tak ditemukan.",
+'filedelete-nofile-old'        => "Tak ditemukan arsip versi dari '''$1''' dengan atribut yang diberikan.",
+'filedelete-otherreason'       => 'Alasan lain/tambahan:',
+'filedelete-reason-otherlist'  => 'Alasan lain',
+'filedelete-reason-dropdown'   => '*Alasan penghapusan
 ** Pelanggaran hak cipta
 ** Berkas duplikat',
-'filedelete-edit-reasonlist'  => 'Alasan penghapusan suntingan',
-'filedelete-maintenance'      => 'Penghapusan dan pengembalian berkas sementara dinonaktifkan selama perawatan.',
+'filedelete-edit-reasonlist'   => 'Alasan penghapusan suntingan',
+'filedelete-maintenance'       => 'Penghapusan dan pengembalian berkas sementara dinonaktifkan selama perawatan.',
+'filedelete-maintenance-title' => 'Tidak dapat menghapus berkas',
 
 # MIME search
 'mimesearch'         => 'Pencarian MIME',
@@ -2042,6 +2064,7 @@ Nama yang telah <del>dicoret</del> berarti telah dibetulkan.',
 'mostimages'              => 'Berkas yang tersering digunakan',
 'mostrevisions'           => 'Halaman dengan perubahan terbanyak',
 'prefixindex'             => 'Semua halaman dengan awalan',
+'prefixindex-namespace'   => 'Semua halaman dengan awalan (ruang nama $1)',
 'shortpages'              => 'Halaman pendek',
 'longpages'               => 'Halaman panjang',
 'deadendpages'            => 'Halaman buntu',
@@ -2234,7 +2257,7 @@ Perubahan-perubahan berikutnya pada halaman tersebut dan halaman pembicaraan ter
 'watchmethod-list'     => 'periksa halaman yang dipantau terhadap perubahan terbaru',
 'watchlistcontains'    => 'Daftar pantauan Anda berisi $1 {{PLURAL:$1|halaman|halaman}}.',
 'iteminvalidname'      => "Ada masalah dengan '$1', namanya tidak sah...",
-'wlnote'               => "Di bawah ini adalah $1 {{PLURAL:$1|perubahan|perubahan}} terakhir dalam '''$2''' jam terakhir.",
+'wlnote'               => "Di bawah ini adalah {{PLURAL:$1|perubahan|'''$1''' perubahan}} terakhir dalam '''$2''' jam terakhir, per $3, $4.",
 'wlshowlast'           => 'Tampilkan $1 jam $2 hari terakhir $3',
 'watchlist-options'    => 'Opsi daftar pantauan',
 
@@ -2344,6 +2367,7 @@ Lihat [[Special:ProtectedPages|daftar halaman terlindungi]] untuk daftar perlind
 'unprotectedarticle'          => 'menghilangkan perlindungan dari "[[$1]]"',
 'movedarticleprotection'      => 'memindahkan pengaturan proteksi dari "[[$2]]" ke "[[$1]]"',
 'protect-title'               => 'Melindungi "$1"',
+'protect-title-notallowed'    => 'Lihat tingkat perlindungan dari "$1"',
 'prot_1movedto2'              => '[[$1]] dipindahkan ke [[$2]]',
 'protect-legend'              => 'Konfirmasi pelindungan',
 'protectcomment'              => 'Alasan:',
@@ -2427,6 +2451,7 @@ Alasan penghapusan diberikan pada ringkasan di bawah ini, berikut rincian penggu
 
 Lihat [[Special:Log/delete|log penghapusan]] untuk data penghapusan dan pengembalian.",
 'undelete-header'              => 'Lihat [[Special:Log/delete|log penghapusan]] untuk daftar halaman yang baru dihapus.',
+'undelete-search-title'        => 'Cari halaman yang dihapus',
 'undelete-search-box'          => 'Cari halaman yang dihapus',
 'undelete-search-prefix'       => 'Tampilkan halaman dimulai dari:',
 'undelete-search-submit'       => 'Cari',
@@ -2435,6 +2460,7 @@ Lihat [[Special:Log/delete|log penghapusan]] untuk data penghapusan dan pengemba
 'undelete-bad-store-key'       => 'Tidak dapat membatalkan penghapusan revisi berkas dengan tanda waktu $1: berkas hilang sebelum dihapus.',
 'undelete-cleanup-error'       => 'Kesalahan sewaktu menghapus arsip berkas "$1" yang tak digunakan.',
 'undelete-missing-filearchive' => 'Tidak dapat mengembalikan arsip berkas dengan ID $1 karena tak ada di basis data. Berkas tersebut mungkin telah dihapus..',
+'undelete-error'               => 'Kesalahan mengembalikan halaman',
 'undelete-error-short'         => 'Kesalahan membatalkan penghapusan: $1',
 'undelete-error-long'          => 'Terjadi kesalahan sewaktu membatalkan penghapusan berkas:
 
@@ -2702,7 +2728,7 @@ Dalam kasus tersebut, apabila diinginkan, Anda dapat memindahkan atau menggabung
 'delete_and_move_text'         => '==Penghapusan diperlukan==
 Halaman yang dituju, "[[:$1]]", telah mempunyai isi. Apakah Anda hendak menghapusnya untuk memberikan ruang bagi pemindahan?',
 'delete_and_move_confirm'      => 'Ya, hapus halaman tersebut',
-'delete_and_move_reason'       => 'Dihapus untuk mengantisipasikan pemindahan halaman',
+'delete_and_move_reason'       => 'Dihapus untuk mengantisipasikan pemindahan halaman dari "[[$1]]"',
 'selfmove'                     => 'Pemindahan halaman tidak dapat dilakukan karena judul sumber dan judul tujuan sama.',
 'immobile-source-namespace'    => 'Tidak dapat memindahkan halaman dalam ruang nama "$1"',
 'immobile-target-namespace'    => 'Tidak dapat memindahkan halaman ke ruang nama "$1"',
@@ -2733,6 +2759,7 @@ Hasil ekspor ini selanjutnya dapat diimpor ke wiki lainnya yang menggunakan pera
 Untuk mengekspor halaman, masukkan judul dalam kotak teks di bawah ini, satu judul per baris, dan pilih apakah Anda ingin mengekspor lengkap dengan versi terdahulunya, atau hanya versi terbaru dengan catatan penyuntingan terakhir.
 
 Jika Anda hanya ingin mengimpor versi terbaru, Anda melakukannya lebih cepat dengan cara menggunakan pranala khusus, sebagai contoh: [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] untuk mengekspor halaman "[[{{MediaWiki:Mainpage}}]]".',
+'exportall'         => 'Ekspor seluruh halaman.',
 'exportcuronly'     => 'Hanya ekspor revisi sekarang, bukan seluruh versi terdahulu',
 'exportnohistory'   => "----
 '''Catatan:''' Mengekspor keseluruhan riwayat suntingan halaman melalui isian ini telah dinon-aktifkan karena alasan kinerja.",
@@ -2814,6 +2841,7 @@ Simpan ke komputer Anda dan unggah ke sini.',
 'import-invalid-interwiki'   => 'Tidak dapat mengimpor dari wiki tersebut.',
 'import-error-edit'          => 'Halaman "$1" tidak diimpor karena Anda tidak diizinkan untuk menyuntingnya.',
 'import-error-create'        => 'Halaman "$1" tidak diimpor karena Anda tidak diizinkan untuk membuatnya.',
+'import-error-invalid'       => 'Halaman "$1" tidak diimpor karena namanya tidak valid.',
 
 # Import log
 'importlogpage'                    => 'Log impor',
@@ -2823,72 +2851,84 @@ Simpan ke komputer Anda dan unggah ke sini.',
 'import-logentry-interwiki'        => 'men-transwiki $1',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|revisi}} dari $2',
 
+# JavaScriptTest
+'javascripttest'                           => 'Pengujian JavaScript',
+'javascripttest-disabled'                  => 'Fungsi ini belum diaktifkan di wiki ini.',
+'javascripttest-title'                     => '$1 pengujian sedang berjalan',
+'javascripttest-pagetext-noframework'      => 'Halaman ini disediakan untuk pengujian JavaScript yang sedang berjalan.',
+'javascripttest-pagetext-unknownframework' => 'Pengujian kerangka kerja "$1" tidak diketahui',
+'javascripttest-pagetext-frameworks'       => 'Silakan pilih satu di antara kerangka kerja pengujian berikut: $1',
+'javascripttest-pagetext-skins'            => 'Pilih kulit yang ingin Anda uji:',
+'javascripttest-qunit-intro'               => 'Lihat [$1 dokumentasi pengujian] di mediawiki.org.',
+
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'Halaman pengguna Anda',
-'tooltip-pt-anonuserpage'         => 'Halaman pengguna IP Anda',
-'tooltip-pt-mytalk'               => 'Halaman pembicaraan Anda',
-'tooltip-pt-anontalk'             => 'Pembicaraan tentang suntingan dari alamat IP ini',
-'tooltip-pt-preferences'          => 'Preferensi saya',
-'tooltip-pt-watchlist'            => 'Daftar halaman yang saya pantau.',
-'tooltip-pt-mycontris'            => 'Daftar kontribusi Anda',
-'tooltip-pt-login'                => 'Anda disarankan untuk masuk log, meskipun hal itu tidak diwajibkan.',
-'tooltip-pt-anonlogin'            => 'Anda disarankan untuk masuk log, meskipun hal itu tidak diwajibkan.',
-'tooltip-pt-logout'               => 'Keluar log',
-'tooltip-ca-talk'                 => 'Pembicaraan halaman isi',
-'tooltip-ca-edit'                 => 'Sunting halaman ini. Gunakan tombol pratayang sebelum menyimpan.',
-'tooltip-ca-addsection'           => 'Mulai bagian baru',
-'tooltip-ca-viewsource'           => 'Halaman ini dilindungi. Anda hanya dapat melihat sumbernya.',
-'tooltip-ca-history'              => 'Versi-versi sebelumnya dari halaman ini.',
-'tooltip-ca-protect'              => 'Lindungi halaman ini',
-'tooltip-ca-unprotect'            => 'Ubah perlindungan halaman ini',
-'tooltip-ca-delete'               => 'Hapus halaman ini',
-'tooltip-ca-undelete'             => 'Kembalikan suntingan ke halaman ini sebelum halaman ini dihapus',
-'tooltip-ca-move'                 => 'Pindahkan halaman ini',
-'tooltip-ca-watch'                => 'Tambahkan halaman ini ke daftar pantauan Anda',
-'tooltip-ca-unwatch'              => 'Hapus halaman ini dari daftar pantauan Anda',
-'tooltip-search'                  => 'Cari dalam wiki ini',
-'tooltip-search-go'               => 'Cari suatu halaman dengan nama yang persis seperti ini jika tersedia',
-'tooltip-search-fulltext'         => 'Cari halaman yang memiliki teks seperti ini',
-'tooltip-p-logo'                  => 'Kunjungi Halaman Utama',
-'tooltip-n-mainpage'              => 'Kunjungi Halaman Utama',
-'tooltip-n-mainpage-description'  => 'Kunjungi Halaman Utama',
-'tooltip-n-portal'                => 'Tentang proyek, apa yang dapat anda lakukan, di mana mencari sesuatu',
-'tooltip-n-currentevents'         => 'Temukan informasi tentang peristiwa terkini',
-'tooltip-n-recentchanges'         => 'Daftar perubahan terbaru dalam wiki.',
-'tooltip-n-randompage'            => 'Tampilkan sembarang halaman',
-'tooltip-n-help'                  => 'Tempat mencari bantuan.',
-'tooltip-t-whatlinkshere'         => 'Daftar semua halaman wiki yang memiliki pranala ke halaman ini',
-'tooltip-t-recentchangeslinked'   => 'Perubahan terbaru halaman-halaman yang memiliki pranala ke halaman ini',
-'tooltip-feed-rss'                => 'Umpan RSS untuk halaman ini',
-'tooltip-feed-atom'               => 'Umpan Atom untuk halaman ini',
-'tooltip-t-contributions'         => 'Lihat daftar kontribusi pengguna ini',
-'tooltip-t-emailuser'             => 'Kirimkan surel kepada pengguna ini',
-'tooltip-t-upload'                => 'Muatkan gambar atau berkas media',
-'tooltip-t-specialpages'          => 'Daftar semua halaman istimewa',
-'tooltip-t-print'                 => 'Versi cetak halaman ini',
-'tooltip-t-permalink'             => 'Pranala permanen untuk revisi halaman ini',
-'tooltip-ca-nstab-main'           => 'Lihat halaman isi',
-'tooltip-ca-nstab-user'           => 'Lihat halaman pengguna',
-'tooltip-ca-nstab-media'          => 'Lihat halaman media',
-'tooltip-ca-nstab-special'        => 'Ini adalah halaman istimewa yang tidak dapat disunting.',
-'tooltip-ca-nstab-project'        => 'Lihat halaman proyek',
-'tooltip-ca-nstab-image'          => 'Lihat halaman berkas',
-'tooltip-ca-nstab-mediawiki'      => 'Lihat pesan sistem',
-'tooltip-ca-nstab-template'       => 'Lihat templat',
-'tooltip-ca-nstab-help'           => 'Lihat halaman bantuan',
-'tooltip-ca-nstab-category'       => 'Lihat halaman kategori',
-'tooltip-minoredit'               => 'Tandai ini sebagai suntingan kecil',
-'tooltip-save'                    => 'Simpan perubahan Anda',
-'tooltip-preview'                 => 'Pratayang perubahan Anda, harap gunakan ini sebelum menyimpan!',
-'tooltip-diff'                    => 'Lihat perubahan yang telah Anda lakukan.',
-'tooltip-compareselectedversions' => 'Lihat perbedaan antara dua versi halaman yang dipilih.',
-'tooltip-watch'                   => 'Tambahkan halaman ini ke daftar pantauan Anda',
-'tooltip-recreate'                => 'Buat ulang halaman walaupun sebenarnya telah dihapus',
-'tooltip-upload'                  => 'Mulai pemuatan',
-'tooltip-rollback'                => 'Mengembalikan suntingan-suntingan di halaman ini ke kontributor terakhir dalam satu kali klik.',
-'tooltip-undo'                    => 'Mengembalikan revisi ini dan membuka kotak penyuntingan dengan mode pratayang. Alasan dapat ditambahkan di kotak ringkasan.',
-'tooltip-preferences-save'        => 'Simpan preferensi',
-'tooltip-summary'                 => 'Masukkan sebuah ringkasan pendek',
+'tooltip-pt-userpage'                 => 'Halaman pengguna Anda',
+'tooltip-pt-anonuserpage'             => 'Halaman pengguna IP Anda',
+'tooltip-pt-mytalk'                   => 'Halaman pembicaraan Anda',
+'tooltip-pt-anontalk'                 => 'Pembicaraan tentang suntingan dari alamat IP ini',
+'tooltip-pt-preferences'              => 'Preferensi saya',
+'tooltip-pt-watchlist'                => 'Daftar halaman yang saya pantau.',
+'tooltip-pt-mycontris'                => 'Daftar kontribusi Anda',
+'tooltip-pt-login'                    => 'Anda disarankan untuk masuk log, meskipun hal itu tidak diwajibkan.',
+'tooltip-pt-anonlogin'                => 'Anda disarankan untuk masuk log, meskipun hal itu tidak diwajibkan.',
+'tooltip-pt-logout'                   => 'Keluar log',
+'tooltip-ca-talk'                     => 'Pembicaraan halaman isi',
+'tooltip-ca-edit'                     => 'Sunting halaman ini. Gunakan tombol pratayang sebelum menyimpan.',
+'tooltip-ca-addsection'               => 'Mulai bagian baru',
+'tooltip-ca-viewsource'               => 'Halaman ini dilindungi. Anda hanya dapat melihat sumbernya.',
+'tooltip-ca-history'                  => 'Versi-versi sebelumnya dari halaman ini.',
+'tooltip-ca-protect'                  => 'Lindungi halaman ini',
+'tooltip-ca-unprotect'                => 'Ubah perlindungan halaman ini',
+'tooltip-ca-delete'                   => 'Hapus halaman ini',
+'tooltip-ca-undelete'                 => 'Kembalikan suntingan ke halaman ini sebelum halaman ini dihapus',
+'tooltip-ca-move'                     => 'Pindahkan halaman ini',
+'tooltip-ca-watch'                    => 'Tambahkan halaman ini ke daftar pantauan Anda',
+'tooltip-ca-unwatch'                  => 'Hapus halaman ini dari daftar pantauan Anda',
+'tooltip-search'                      => 'Cari dalam wiki ini',
+'tooltip-search-go'                   => 'Cari suatu halaman dengan nama yang persis seperti ini jika tersedia',
+'tooltip-search-fulltext'             => 'Cari halaman yang memiliki teks seperti ini',
+'tooltip-p-logo'                      => 'Kunjungi Halaman Utama',
+'tooltip-n-mainpage'                  => 'Kunjungi Halaman Utama',
+'tooltip-n-mainpage-description'      => 'Kunjungi Halaman Utama',
+'tooltip-n-portal'                    => 'Tentang proyek, apa yang dapat anda lakukan, di mana mencari sesuatu',
+'tooltip-n-currentevents'             => 'Temukan informasi tentang peristiwa terkini',
+'tooltip-n-recentchanges'             => 'Daftar perubahan terbaru dalam wiki.',
+'tooltip-n-randompage'                => 'Tampilkan sembarang halaman',
+'tooltip-n-help'                      => 'Tempat mencari bantuan.',
+'tooltip-t-whatlinkshere'             => 'Daftar semua halaman wiki yang memiliki pranala ke halaman ini',
+'tooltip-t-recentchangeslinked'       => 'Perubahan terbaru halaman-halaman yang memiliki pranala ke halaman ini',
+'tooltip-feed-rss'                    => 'Umpan RSS untuk halaman ini',
+'tooltip-feed-atom'                   => 'Umpan Atom untuk halaman ini',
+'tooltip-t-contributions'             => 'Lihat daftar kontribusi pengguna ini',
+'tooltip-t-emailuser'                 => 'Kirimkan surel kepada pengguna ini',
+'tooltip-t-upload'                    => 'Muatkan gambar atau berkas media',
+'tooltip-t-specialpages'              => 'Daftar semua halaman istimewa',
+'tooltip-t-print'                     => 'Versi cetak halaman ini',
+'tooltip-t-permalink'                 => 'Pranala permanen untuk revisi halaman ini',
+'tooltip-ca-nstab-main'               => 'Lihat halaman isi',
+'tooltip-ca-nstab-user'               => 'Lihat halaman pengguna',
+'tooltip-ca-nstab-media'              => 'Lihat halaman media',
+'tooltip-ca-nstab-special'            => 'Ini adalah halaman istimewa yang tidak dapat disunting.',
+'tooltip-ca-nstab-project'            => 'Lihat halaman proyek',
+'tooltip-ca-nstab-image'              => 'Lihat halaman berkas',
+'tooltip-ca-nstab-mediawiki'          => 'Lihat pesan sistem',
+'tooltip-ca-nstab-template'           => 'Lihat templat',
+'tooltip-ca-nstab-help'               => 'Lihat halaman bantuan',
+'tooltip-ca-nstab-category'           => 'Lihat halaman kategori',
+'tooltip-minoredit'                   => 'Tandai ini sebagai suntingan kecil',
+'tooltip-save'                        => 'Simpan perubahan Anda',
+'tooltip-preview'                     => 'Pratayang perubahan Anda, harap gunakan ini sebelum menyimpan!',
+'tooltip-diff'                        => 'Lihat perubahan yang telah Anda lakukan.',
+'tooltip-compareselectedversions'     => 'Lihat perbedaan antara dua versi halaman yang dipilih.',
+'tooltip-watch'                       => 'Tambahkan halaman ini ke daftar pantauan Anda',
+'tooltip-watchlistedit-normal-submit' => 'Hapus judul',
+'tooltip-watchlistedit-raw-submit'    => 'Perbarui daftar pantauan',
+'tooltip-recreate'                    => 'Buat ulang halaman walaupun sebenarnya telah dihapus',
+'tooltip-upload'                      => 'Mulai pemuatan',
+'tooltip-rollback'                    => 'Mengembalikan suntingan-suntingan di halaman ini ke kontributor terakhir dalam satu kali klik.',
+'tooltip-undo'                        => 'Mengembalikan revisi ini dan membuka kotak penyuntingan dengan mode pratayang. Alasan dapat ditambahkan di kotak ringkasan.',
+'tooltip-preferences-save'            => 'Simpan preferensi',
+'tooltip-summary'                     => 'Masukkan sebuah ringkasan pendek',
 
 # Stylesheets
 'common.css'      => '/* CSS yang ada di sini akan diterapkan untuk semua kulit. */',
@@ -3001,7 +3041,7 @@ Jika dijalankan, sistem Anda akan berisiko terserang.",
 'svg-long-desc'          => 'Berkas SVG, nominal $1 × $2 piksel, besar berkas: $3',
 'show-big-image'         => 'Resolusi penuh',
 'show-big-image-preview' => 'Ukuran pratayang ini: $1.',
-'show-big-image-other'   => 'Resolusi lain: $1.',
+'show-big-image-other'   => '{{PLURAL:$2|Resolusi|Resolusi}} lain: $1.',
 'show-big-image-size'    => '$1 × $2 piksel',
 'file-info-gif-looped'   => 'melingkar',
 'file-info-gif-frames'   => '$1 {{PLURAL:$1||}}frame',
@@ -3025,6 +3065,11 @@ Jika dijalankan, sistem Anda akan berisiko terserang.",
 'seconds-abbrev' => '$1d',
 'minutes-abbrev' => '$1m',
 'hours-abbrev'   => '$1j',
+'seconds'        => '{{PLURAL:$1|$1 detik|$1 detik}}',
+'minutes'        => '{{PLURAL:$1|$1 menit|$1 menit}}',
+'hours'          => '{{PLURAL:$1|$1 jam|$1 jam}}',
+'days'           => '{{PLURAL:$1|$1 hari|$1 hari}}',
+'ago'            => '$1 yang lalu',
 
 # Bad image list
 'bad_image_list' => 'Formatnya sebagai berikut:
@@ -3644,6 +3689,9 @@ Anda juga dapat [[Special:EditWatchlist|menggunakan penyunting standar Anda]].',
 'hebrew-calendar-m11-gen' => 'Ab',
 'hebrew-calendar-m12-gen' => 'Elul',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|bicara]])',
+
 # Core parser functions
 'unknown_extension_tag' => 'Tag ekstensi tidak dikenal "$1"',
 'duplicate-defaultsort' => 'Peringatan: Kunci pengurutan baku "$2" mengabaikan kunci pengurutan baku "$1" sebelumnya.',
@@ -3778,25 +3826,40 @@ Gambar ditampilkan dalam resolusi penuh dan tipe lain berkas akan dibuka langsun
 'sqlite-no-fts'  => '$1 tanpa dukungan pencarian teks lengkap',
 
 # New logging system
-'revdelete-content-hid'   => 'konten disembunyikan',
-'revdelete-summary-hid'   => 'ringkasan suntingan disembunyikan',
-'revdelete-uname-hid'     => 'nama pengguna disembunyikan',
-'revdelete-content-unhid' => 'konten tidak disembunyikan',
-'revdelete-summary-unhid' => 'ringkasan suntingan tidak disembunyikan',
-'revdelete-uname-unhid'   => 'nama pengguna tidak disembunyikan',
-'revdelete-restricted'    => 'akses telah dibatasi untuk opsis',
-'revdelete-unrestricted'  => 'pembatasan akses opsis dihapuskan',
-'newuserlog-byemail'      => 'kata sandi dikirim melalui surel',
+'logentry-delete-delete'              => '$1 menghapus halaman $3',
+'logentry-delete-restore'             => '$1 mengembalikan halaman $3',
+'revdelete-content-hid'               => 'konten disembunyikan',
+'revdelete-summary-hid'               => 'ringkasan suntingan disembunyikan',
+'revdelete-uname-hid'                 => 'nama pengguna disembunyikan',
+'revdelete-content-unhid'             => 'konten tidak disembunyikan',
+'revdelete-summary-unhid'             => 'ringkasan suntingan tidak disembunyikan',
+'revdelete-uname-unhid'               => 'nama pengguna tidak disembunyikan',
+'revdelete-restricted'                => 'akses telah dibatasi untuk opsis',
+'revdelete-unrestricted'              => 'pembatasan akses opsis dihapuskan',
+'logentry-move-move'                  => '$1 memindahkan halaman $3 ke $4',
+'logentry-move-move-noredirect'       => '$1 memindahkan halaman $3 ke $4 tanpa membuat pengalihan',
+'logentry-move-move_redir'            => '$1 memindahkan halaman $3 ke $4 melalui pengalihan',
+'logentry-move-move_redir-noredirect' => '$1 memindahkan halaman $3 ke $4 melalui pengalihan tanpa membuat pengalihan',
+'logentry-patrol-patrol'              => '$1 menandai revisi $4 dari halaman $3 terpatroli',
+'logentry-patrol-patrol-auto'         => '$1 secara otomatis menandai revisi $4 dari halaman $3 terpatroli',
+'logentry-newusers-newusers'          => '$1 membuat akun pengguna',
+'logentry-newusers-create'            => '$1 membuat akun pengguna',
+'logentry-newusers-create2'           => '$1 membuat akun pengguna $3',
+'logentry-newusers-autocreate'        => 'Akun $1 dibuat secara otomatis',
+'newuserlog-byemail'                  => 'kata sandi dikirim melalui surel',
 
 # Feedback
-'feedback-subject' => 'Perihal:',
-'feedback-message' => 'Pesan:',
-'feedback-cancel'  => 'Batal',
-'feedback-submit'  => 'Kirim Umpan Balik',
-'feedback-adding'  => 'Menambahkan umpan balik ke halaman...',
-'feedback-error1'  => 'Galat: Hasil tidak dikenal dari API',
-'feedback-error2'  => 'Galat: Penyuntingan gagal',
-'feedback-error3'  => 'Error: API tidak merespons',
+'feedback-subject'  => 'Perihal:',
+'feedback-message'  => 'Pesan:',
+'feedback-cancel'   => 'Batal',
+'feedback-submit'   => 'Kirim Umpan Balik',
+'feedback-adding'   => 'Menambahkan umpan balik ke halaman...',
+'feedback-error1'   => 'Galat: Hasil tidak dikenal dari API',
+'feedback-error2'   => 'Galat: Penyuntingan gagal',
+'feedback-error3'   => 'Error: API tidak merespons',
+'feedback-close'    => 'Selesai',
+'feedback-bugcheck' => 'Hebat! Hanya periksa bahwa itu bukan satu di antara [$1 bug yang telah dikenal].',
+'feedback-bugnew'   => 'Saya telah memeriksa. Laporkan bug baru',
 
 # API errors
 'api-error-badaccess-groups'              => 'Anda tidak diizinkan mengunggah berkas ke wiki ini.',
@@ -3807,6 +3870,7 @@ Gambar ditampilkan dalam resolusi penuh dan tipe lain berkas akan dibuka langsun
 'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|Berkas|Berkas-berkas}} duplikat yang telah dihapus',
 'api-error-duplicate-popup-title'         => '{{PLURAL:$1|Berkas|Berkas}} duplikat',
 'api-error-empty-file'                    => 'Berkas yang Anda kirim kosong.',
+'api-error-emptypage'                     => 'Pembuatan halaman baru yang kosong tidak diizinkan.',
 'api-error-fetchfileerror'                => 'Kesalahan internal: terjadi kesalahan saat memperoleh berkas ini.',
 'api-error-file-too-large'                => 'Berkas yang Anda kirim terlalu besar.',
 'api-error-filename-tooshort'             => 'Nama berkas terlalu pendek.',
@@ -3831,6 +3895,7 @@ Gambar ditampilkan dalam resolusi penuh dan tipe lain berkas akan dibuka langsun
 'api-error-unknown-code'                  => 'Kesalahan tidak dikenal: "$1"',
 'api-error-unknown-error'                 => 'Kesalahan internal: terjadi kesalahan saat mencoba mengunggah berkas Anda.',
 'api-error-unknown-warning'               => 'Peringatan tidak dikenal: $1',
+'api-error-unknownerror'                  => 'Kesalahan tidak dikenal: "$1"',
 'api-error-uploaddisabled'                => 'Pengunggahan dinonaktifkan di wiki ini.',
 'api-error-verification-error'            => 'Berkas ini mungkin rusak atau memiliki ekstensi yang salah.',
 
index 30c11ae..b9000b1 100644 (file)
@@ -643,6 +643,9 @@ $2',
 'ns-specialprotected'  => 'Non è possibile modificare le pagine speciali.',
 'titleprotected'       => "La creazione di una pagina con questo titolo è stata bloccata da [[User:$1|$1]].
 La motivazione è la seguente: ''$2''.",
+'filereadonlyerror'    => 'Non è stato possibile modificare il file "$1" poiché il repository di file "$2" è in modalità di sola lettura.
+
+La motivazione è "\'\'$3\'\'".',
 
 # Virus scanner
 'virus-badscanner'     => "Errore di configurazione: antivirus sconosciuto: ''$1''",
@@ -758,7 +761,7 @@ Riprovare più tardi.',
 'resetpass-no-info'         => "Devi aver effettuato l'accesso per accedere a questa pagina direttamente.",
 'resetpass-submit-loggedin' => 'Cambia password',
 'resetpass-submit-cancel'   => 'Annulla',
-'resetpass-wrong-oldpass'   => 'Password temporanea o corrente non valida.
+'resetpass-wrong-oldpass'   => 'Password temporanea o attuale non valida.
 La password potrebbe essere stata già cambiata, oppure potrebbe essere stata richiesta una nuova password temporanea.',
 'resetpass-temp-password'   => 'Password temporanea:',
 
@@ -1122,7 +1125,7 @@ $1",
 'revdel-restore-visible'      => 'revisioni visibili',
 'pagehist'                    => 'Cronologia della pagina',
 'deletedhist'                 => 'Cronologia cancellata',
-'revdelete-hide-current'      => "Impossibile nascondere l'oggetto con data $1 $2 in quanto è la revisione corrente.",
+'revdelete-hide-current'      => "Impossibile nascondere l'oggetto con data $1 $2 in quanto è la revisione attuale.",
 'revdelete-show-no-access'    => 'Impossibile mostrare l\'oggetto con data $1 $2 in quanto è stato identificato come "riservato" e non si dispone del relativo accesso.',
 'revdelete-modify-no-access'  => 'Impossibile modificare l\'oggetto con data $1 $2 in quanto è stato identificato come "riservato" e non si dispone del relativo accesso.',
 'revdelete-modify-missing'    => "Impossibile modificare l'oggetto con ID $1 in quanto non è presente nel database.",
@@ -1544,8 +1547,8 @@ Il tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.',
 'rclinks'                           => 'Mostra le $1 modifiche più recenti apportate negli ultimi $2 giorni<br />$3',
 'diff'                              => 'diff',
 'hist'                              => 'cron',
-'hide'                              => 'nascondi',
-'show'                              => 'mostra',
+'hide'                              => 'Nascondi',
+'show'                              => 'Mostra',
 'minoreditletter'                   => 'm',
 'newpageletter'                     => 'N',
 'boteditletter'                     => 'b',
@@ -1721,6 +1724,7 @@ $1',
 'backend-fail-closetemp'     => 'Impossibile chiudere il file temporaneo.',
 'backend-fail-read'          => 'Impossibile leggere il file  $1 .',
 'backend-fail-create'        => 'Impossibile creare il file  $1 .',
+'backend-fail-maxsize'       => 'Impossibile creare il file $1 perché è più grande di {{PLURAL:$2|un|$2}} byte.',
 'backend-fail-readonly'      => 'Il backend "$1" è attualmente di sola lettura. La ragione indicata è: "$2"',
 'backend-fail-synced'        => 'Il file "$1" è in uno stato non coerente nei backend di memoria interna.',
 'backend-fail-connect'       => 'Impossibile connettersi al backend di memoria "$1".',
@@ -1820,7 +1824,7 @@ Se vengono filtrati per utente, saranno mostrati solamente quei file per i quali
 'filehist-deleteall'        => 'cancella tutto',
 'filehist-deleteone'        => 'cancella',
 'filehist-revert'           => 'ripristina',
-'filehist-current'          => 'corrente',
+'filehist-current'          => 'attuale',
 'filehist-datetime'         => 'Data/Ora',
 'filehist-thumb'            => 'Miniatura',
 'filehist-thumbtext'        => 'Miniatura della versione delle $1',
@@ -2054,6 +2058,9 @@ Potrebbero essere presenti immagini che sono usate da altri siti con un collegam
 'allpagesbadtitle'  => 'Il titolo indicato per la pagina non è valido o contiene prefissi interlingua o interwiki. Potrebbe inoltre contenere uno o più caratteri il cui uso non è ammesso nei titoli.',
 'allpages-bad-ns'   => 'Il namespace "$1" non esiste su {{SITENAME}}.',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'Mostra la più recente.',
+
 # Special:Categories
 'categories'                    => 'Categorie',
 'categoriespagetext'            => '{{PLURAL:$1|La categoria indicata di seguito contiene|Le categorie indicate di seguito contengono}} pagine o file multimediali.
@@ -2558,7 +2565,7 @@ Il blocco dell\'utente $1 è stato imposto per il seguente motivo: "$2".',
 'ip_range_toolarge'               => 'Non è possibile bloccare range superiori al /$1',
 'blockme'                         => 'Bloccami',
 'proxyblocker'                    => 'Blocco dei proxy aperti',
-'proxyblocker-disabled'           => 'Questa funzione non è attiva.',
+'proxyblocker-disabled'           => 'Questa funzione è disabilitata.',
 'proxyblockreason'                => 'Questo indirizzo IP è stato bloccato perché risulta essere un proxy aperto. Si prega di contattare il proprio fornitore di accesso a Internet o il supporto tecnico e informarli di questo grave problema di sicurezza.',
 'proxyblocksuccess'               => 'Fatto.',
 'sorbsreason'                     => 'Questo indirizzo IP è elencato come proxy aperto nella blacklist DNSBL utilizzata da {{SITENAME}}.',
@@ -2774,7 +2781,7 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 
 # JavaScriptTest
 'javascripttest'                           => 'Sperimentazione JavaScript',
-'javascripttest-disabled'                  => 'Questa funzione è disabilitata.',
+'javascripttest-disabled'                  => 'Questa funzione non è abilitata su questo wiki.',
 'javascripttest-title'                     => 'In esecuzione test per $1',
 'javascripttest-pagetext-noframework'      => "Questa pagina è riservata all'esecuzione di test di JavaScript.",
 'javascripttest-pagetext-unknownframework' => 'Framework di test sconosciuto "$1".',
@@ -3805,4 +3812,15 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'api-error-uploaddisabled'                => 'Il caricamento è disabilitato su questa wiki.',
 'api-error-verification-error'            => "Questo file potrebbe essere danneggiato, o avere l'estensione sbagliata.",
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|secondo|secondi}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|minuto|minuti}}',
+'duration-hours'     => '$1 {{PLURAL:$1|ora|ore}}',
+'duration-days'      => '$1 {{PLURAL:$1|giorno|giorni}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|settimana|settimane}}',
+'duration-years'     => '$1 {{PLURAL:$1|anno|anni}}',
+'duration-decades'   => '$1 {{PLURAL:$1|decade|decadi}}',
+'duration-centuries' => '$1 {{PLURAL:$1|secolo|secoli}}',
+'duration-millennia' => '$1 {{PLURAL:$1|millennio|millenni}}',
+
 );
index 8840e6d..f5f3ea4 100644 (file)
@@ -181,6 +181,7 @@ $messages = array(
 'tog-watchlisthideliu'        => 'დამალეთ დარეგისტრირებულ მოხმარებელთა ცვლილებები ჩემი კონტროლის სიიდან',
 'tog-watchlisthideanons'      => 'დამალეთ ანონიმურ მომხმარებელთა შესწორებები ჩემი კონტროლის სიიდან',
 'tog-watchlisthidepatrolled'  => 'დამალეთ საკონტროლო სიიდან პატრულირებული რედაქტირებები',
+'tog-nolangconversion'        => 'წერილების სისტემის გარდაქმნის გამორთვა',
 'tog-ccmeonemails'            => 'გამომიგზავნე ელფოსტების ასლები, რომლებსაც მე სხვა მომხმარებლებს ვუგზავნი',
 'tog-diffonly'                => 'დამალე გვერდის შიგთავსი ცვლილების ქვევით',
 'tog-showhiddencats'          => 'დამალული კატეგორიების ჩვენება',
@@ -268,7 +269,7 @@ $messages = array(
 'noindex-category'               => 'არ არსებობს ინდექსირებული გვერდები',
 'broken-file-category'           => 'გვერდები ფაილების არასწორი ბმულებით',
 
-'linkprefix' => '/^(.*?)(„|«)$/sD',
+'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
 
 'about'         => 'შესახებ',
 'article'       => 'სტატია',
@@ -401,12 +402,16 @@ $1',
 'versionrequiredtext' => 'მოცემული გვერდის გამოსაყენებლად საჭიროა მედიავიკის ვერსია $1. იხილეთ [[Special:Version|სპეციალური:ვერსია]]',
 
 'ok'                      => 'კარგი',
+'pagetitle'               => '$1 - {{SITENAME}}',
+'pagetitle-view-mainpage' => '{{SITENAME}}',
+'backlinksubtitle'        => '← $1',
 'retrievedfrom'           => 'მოძიებულია „$1-დან“',
 'youhavenewmessages'      => 'თქვენ გაქვთ $1 ($2).',
 'newmessageslink'         => 'ახალი შეტყობინებები',
 'newmessagesdifflink'     => 'განსხვავება წინა ვერსიასთან',
 'youhavenewmessagesmulti' => 'თქვენ გაქვთ ახალი შეტყობინება $1-ზე',
 'editsection'             => 'რედაქტირება',
+'editsection-brackets'    => '[$1]',
 'editold'                 => 'რედაქტირება',
 'viewsourceold'           => 'წყაროს ჩვენება',
 'editlink'                => 'რედაქტირება',
@@ -427,6 +432,8 @@ $1',
 'site-atom-feed'          => '$1-ის არხი Atom',
 'page-rss-feed'           => '„$1-ის“ არხი RSS',
 'page-atom-feed'          => '„$1-ის“ არხი Atom',
+'feed-atom'               => 'Atom',
+'feed-rss'                => 'RSS',
 'red-link-title'          => '$1 (გვერდი არ არსებობს)',
 'sort-descending'         => 'კლების მიხედვით დალაგება',
 'sort-ascending'          => 'ზრდის მიხედვით დალაგება',
@@ -525,6 +532,9 @@ $2',
 'ns-specialprotected'  => 'გვერდების რედაქტირება სახელთა სივრცეში {{ns:special}} შეუძლებელია.',
 'titleprotected'       => "შემდეგი გვერდის შექმნა აკრძალულია მომხმარებელ [[User:$1|$1]]-ს მიერ.
 მოცემულია შემდეგი ახსნა: „''$2''“.",
+'filereadonlyerror'    => 'ფაილი "$1" შეცვლა ვერ ხერხდება, რადგანაც საცავი "$2" მხოლოდ კითხვის რეჟიმშია.
+
+მიზეზი მითითებულია: "\'\'$3\'\'".',
 
 # Virus scanner
 'virus-badscanner'     => "შეცდომა. ვირუსთა უცნობი სკანერი: ''$1''",
@@ -572,6 +582,7 @@ $2',
 'nocookieslogin'             => '{{SITENAME}} მომხმარებლების შესვლისთვის იყენებს "ქუქის ჩანაწერს". თქვენ იგი გათიშეთ. გთხოვთ, ჩართოთ ისინი და ხელმეორედ მოსინჯოთ.',
 'nocookiesfornew'            => 'მომხმარებლის ანგარიში არ შექმნილა, რადგან მისი წყარო ვერ დადასტურდა.
 უზრუნველყოფილი უნდა იყოს ჭდეების აქტიურობა. შემდეგ განაახლეთ გვერდი და სცადეთ ხელახლა',
+'nocookiesforlogin'          => '{{int:nocookieslogin}}',
 'noname'                     => 'თქვენს მიერ მითითებული მომხმარებლის სახელი ქმედითი არ არის.',
 'loginsuccesstitle'          => 'სისტემაში შესვლა განხორციელდა.',
 'loginsuccess'               => "'''ამჟამად შესული ხართ {{SITENAME}}-ში როგორც „$1“.'''",
@@ -639,7 +650,7 @@ $1 საათში.',
 # Change password dialog
 'resetpass'                 => 'შეცვალეთ პაროლი',
 'resetpass_announce'        => 'თქვენ შემოხვედით დროებით ელ-ფოსტის კოდით. რეგისტრაციის დასრულებისთვის, უნდა შექმნათ ახალი პაროლი აქ:',
-'resetpass_text'            => '<!-- á\83\93á\83\90á\83\9bá\83\90á\83¢á\83\94á\83\91á\83\98á\83\97á\83\98 á\83¢á\83\94á\83¥á\83¡á\83¢á\83\98 á\83\90á\83¥ -->',
+'resetpass_text'            => '<!-- á\83\90á\83¥ á\83\93á\83\90á\83\90á\83\9bá\83\90á\83¢á\83\94á\83\97 á\83¢á\83\94á\83¥á\83¡á\83¢á\83\98 -->',
 'resetpass_header'          => 'შეცვალეთ ანგარიშის პაროლი',
 'oldpassword'               => 'ძველი პაროლი:',
 'newpassword'               => 'ახალი პაროლი:',
@@ -655,20 +666,44 @@ $1 საათში.',
 'resetpass-temp-password'   => 'დროებითი პაროლი:',
 
 # Special:PasswordReset
-'passwordreset'                   => 'პაროლის აღდგენა',
-'passwordreset-text'              => 'შეავსეთ ეს ფორმა, რათა ელ.ფოსტით მიიღოთ შეხსენება თქვენი ანგარიშის პარამეტრების შესახებ.',
-'passwordreset-legend'            => 'პაროლის აღდგენა',
-'passwordreset-disabled'          => 'ამ ვიკიში პაროლის კვლავ დაყენების ფუნქცია გამორთულია.',
-'passwordreset-pretext'           => '{{PLURAL:$1||შეიყვანეთ ქვემოთ მოცემულ მონაცემთა ერთ-ერთი ნაწილი.}}',
-'passwordreset-username'          => 'მომხმარებლის სახელი:',
-'passwordreset-domain'            => 'დომენი:',
-'passwordreset-capture'           => 'გამოსული ელ-ფოსტის ხილვა?',
-'passwordreset-email'             => 'ელ. ფოსტის მისამართი:',
-'passwordreset-emailtitle'        => 'ანგარიშის მონაცემები {{SITENAME}}-თვის',
-'passwordreset-emailelement'      => 'მომხმარებლის სახელი: $1
+'passwordreset'                    => 'პაროლის აღდგენა',
+'passwordreset-text'               => 'შეავსეთ ეს ფორმა, რათა ელ.ფოსტით მიიღოთ შეხსენება თქვენი ანგარიშის პარამეტრების შესახებ.',
+'passwordreset-legend'             => 'პაროლის აღდგენა',
+'passwordreset-disabled'           => 'ამ ვიკიში პაროლის კვლავ დაყენების ფუნქცია გამორთულია.',
+'passwordreset-pretext'            => '{{PLURAL:$1||შეიყვანეთ ქვემოთ მოცემულ მონაცემთა ერთ-ერთი ნაწილი.}}',
+'passwordreset-username'           => 'მომხმარებლის სახელი:',
+'passwordreset-domain'             => 'დომენი:',
+'passwordreset-capture'            => 'გამოსული ელ-ფოსტის ხილვა?',
+'passwordreset-capture-help'       => 'თუ მონიშნავთ ამ უჯრას, მაშინ თქვენ შეგეძლებათ მომხმარებლისათვის გაგზავნილი ელ.ფოსტის ნახვა (დროებითი პაროლით).',
+'passwordreset-email'              => 'ელ. ფოსტის მისამართი:',
+'passwordreset-emailtitle'         => 'ანგარიშის მონაცემები {{SITENAME}}-თვის',
+'passwordreset-emailtext-ip'       => 'ვიღაცამ (შესაძლოა თქვენ, ამ IP-მისამართიდან $1) მოითხოვა თქვენი 
+ანგარიშის დეტალების შეხსენება {{SITENAME}}-თვის ($4).
+{{PLURAL:$3|შემდეგი ანგარიში მიბმულია|შემდეგი ანგარიშები მიბმულია}} ამ ელ.ფოსტის მისამართზე:
+
+$2
+
+{{PLURAL:$3|ეს დროებითი პაროლი|ეს დროებითი პაროლები}} იმოქმედებს {{PLURAL:$5|$5 დღე}}.
+თქვენ უნდა შეხვიდეთ სისტემაში და აირჩიოთ ახალი პაროლი.
+თუ თქვენ არ გაგიკეთებიათ აღნიშნული მოთხოვნა, ან გაიხსენეთ თქვენი პაროლი
+და აღარ გსურთ მისი შეცვლა, მაშინ შეგიძლიათ იგნორირება გაუკეთოთ ამ შეტყობინებას
+და გააგრძელოთ თქვენი ძველი პაროლის გამოყენება.',
+'passwordreset-emailtext-user'     => 'მომხმარებელმა $1 პროექტიდან {{SITENAME}} მოითხოვა თქვენი 
+ანგარიშის დეტალების შეხსენება {{SITENAME}}-თვის ($4).
+{{PLURAL:$3|შემდეგი ანგარიში მიბმულია|შემდეგი ანგარიშები მიბმულია}} ამ ელ.ფოსტის მისამართზე:
+
+$2
+
+{{PLURAL:$3|ეს დროებითი პაროლი|ეს დროებითი პაროლები}} იმოქმედებს {{PLURAL:$5|$5 დღე}}.
+თქვენ უნდა შეხვიდეთ სისტემაში და აირჩიოთ ახალი პაროლი.
+თუ თქვენ არ გაგიკეთებიათ აღნიშნული მოთხოვნა, ან გაიხსენეთ თქვენი პაროლი
+და აღარ გსურთ მისი შეცვლა, მაშინ შეგიძლიათ იგნორირება გაუკეთოთ ამ შეტყობინებას
+და გააგრძელოთ თქვენი ძველი პაროლის გამოყენება.',
+'passwordreset-emailelement'       => 'მომხმარებლის სახელი: $1
 დროებითი პაროლი: $2',
-'passwordreset-emailsent'         => 'შესახსენებელი ელ.ფოსტა გაიგზავნა.',
-'passwordreset-emailsent-capture' => 'ქვემოთ ნაჩვენები შესახსენებელი წერილი გაიგზავნა.',
+'passwordreset-emailsent'          => 'შესახსენებელი ელ.ფოსტა გაიგზავნა.',
+'passwordreset-emailsent-capture'  => 'ქვემოთ ნაჩვენები შესახსენებელი წერილი გაიგზავნა.',
+'passwordreset-emailerror-capture' => 'ქვემოთ მოცემულია შექმნილი შესახსენებელი წერილი, რომლის გაგზავნაც ვერ მოხერხდა: $1 გამო',
 
 # Special:ChangeEmail
 'changeemail'          => 'ელ-ფოსტის მისამართის შეცვლა',
@@ -852,6 +887,8 @@ $1 საათში.',
 'template-protected'               => '(დაცული)',
 'template-semiprotected'           => '(ნახევრად დაცული)',
 'hiddencategories'                 => 'ეს გვერდი გაერთიანებულია $1 დამალულ კატეგორიაში.',
+'edittools'                        => '<!-- აქ განთავსებული ტექსტი ნაჩვენები იქნება რედაქტირებისა და ატვირთვის ფორმების ქვეშ. -->',
+'edittools-upload'                 => '-',
 'nocreatetitle'                    => 'გვერდის შექმნა ლიმიტირებულია',
 'nocreatetext'                     => 'ამ გვერდზე შეუძლებელია ახალი გვერდის შექმნა არსებული აკრძალვის გამო. თქვენ შეგიძლიათ უკან დაბრუნება და არსებული გვერდის რედაქტირება ან [[სპეციალური:Userlogin|შესვლა და ანგარიშის შექმნა]]',
 'nocreate-loggedin'                => 'თქვენ არ გაქვთ ახალი გვერდების შექმნის უფლება.',
@@ -1229,10 +1266,13 @@ $1",
 'username'                      => 'მომხმარებლის სახელი:',
 'uid'                           => 'მომხმარებლის იდენტიფიკაცია:',
 'prefs-memberingroups'          => '{{PLURAL:$1|ჯგუფის|ჯგუფების}} წევრი:',
+'prefs-memberingroups-type'     => '$1',
 'prefs-registration'            => 'რეგისტრაციის თარიღი',
+'prefs-registration-date-time'  => '$1',
 'yourrealname'                  => 'ნამდვილი სახელი:',
 'yourlanguage'                  => 'ენა:',
 'yourvariant'                   => 'შინაარსის ენის ვარიანტი:',
+'prefs-help-variant'            => 'საურველი დაწერილობა ან ორთოგრაფია, რომელშიც  უნდა იყოს ნაჩვენები ვიკის გვერდები.',
 'yournick'                      => 'მეტსახელი:',
 'prefs-help-signature'          => 'კომენტარები განხილვის გვერდებზე უნდა იყვნენ ხელმოწერილნი «<nowiki>~~~~</nowiki>» სიმბოლოების მეშვეობით, რომლებიც გადაკეთდება თქვენ ხელმოწერად და ხელმოწერის დროთი.',
 'badsig'                        => 'არასწორი ნედლი ხელმოწერა; შეამოწმეთ HTML ჭდეები.',
@@ -1269,26 +1309,27 @@ $1",
 'email-address-validity-invalid' => 'მიუთითეთ სწორი ელ-ფოსტის მისამართი',
 
 # User rights
-'userrights'                   => 'მომხმარებელთა უფლებების მართვა',
-'userrights-lookup-user'       => 'მომხმარებელთა ჯგუფების მართვა',
-'userrights-user-editname'     => 'მომხმარებლის სახელის შეტანა:',
-'editusergroup'                => 'მომხმარებელთა ჯგუფების რედაქტირება',
-'editinguser'                  => "მომხმარებლის უფლებების შეცვლა მომხმარებლისთვის '''[[User:$1|$1]]''' $2",
-'userrights-editusergroup'     => 'რედაქტირება გაუკეთეთ მომხმარებელთა ჯგუფებს',
-'saveusergroups'               => 'მომხმარებელთა ჯგუფების შენახვა',
-'userrights-groupsmember'      => 'ჯგუფის წევრი:',
-'userrights-groupsmember-auto' => 'გაუგებარი წევრი:',
-'userrights-groups-help'       => 'თქვენ შეგიძლიათ შეცვალოთ ჯგუფები, რომელშიც შედის ეს მომხმარებელი.
+'userrights'                     => 'მომხმარებელთა უფლებების მართვა',
+'userrights-lookup-user'         => 'მომხმარებელთა ჯგუფების მართვა',
+'userrights-user-editname'       => 'მომხმარებლის სახელის შეტანა:',
+'editusergroup'                  => 'მომხმარებელთა ჯგუფების რედაქტირება',
+'editinguser'                    => "მომხმარებლის უფლებების შეცვლა მომხმარებლისთვის '''[[User:$1|$1]]''' $2",
+'userrights-editusergroup'       => 'რედაქტირება გაუკეთეთ მომხმარებელთა ჯგუფებს',
+'saveusergroups'                 => 'მომხმარებელთა ჯგუფების შენახვა',
+'userrights-groupsmember'        => 'ჯგუფის წევრი:',
+'userrights-groupsmember-auto'   => 'გაუგებარი წევრი:',
+'userrights-groups-help'         => 'თქვენ შეგიძლიათ შეცვალოთ ჯგუფები, რომელშიც შედის ეს მომხმარებელი.
 * თუ ჯგუფის სახელწოდებასთან გაკეთებულია ნიშნული, ე.ი მომხმარებელი შედის ამ ჯგუფში.
 * თუ ნიშნული არ არის – მომხმარებელი არ განეკუთვნება არსებულ ჯგუფს.
 * ნიშანი * ნიშნავს, რომ თქვენ არ შეგიძლიათ მომხმარებლის ჯგუფიდან წაშლა, თუ დაამატებთ მას იქ ან პირიქით.',
-'userrights-reason'            => 'მიზეზი:',
-'userrights-no-interwiki'      => 'თქვენ არ გაქვთ მომხმარებლის უფლებების რედაქტირების უფლება სხვა ვიკი-ებში.',
-'userrights-nodatabase'        => 'მონაცემთა ბაზა $1 არ არსებობს, ან არ არის ლოკალური.',
-'userrights-nologin'           => 'თქვენ უნდა [[Special:UserLogin|წარადგინოთ თავი სისტემისადმი]] ადმინისისტრატორის ანგარიშით იმისთვის, რომ გასცეთ მომხმარებელთა უფლებები.',
-'userrights-notallowed'        => 'თქვენ არ გაქვთ მომხმარებელთა უფლებების შეცვლის უფლება.',
-'userrights-changeable-col'    => 'ჯგუფები, რომლებიც შეგიძლიათ შეცვალოთ',
-'userrights-unchangeable-col'  => 'ჯგუფები, რომლებიც არ შეგიძლიათ შეცვალოთ',
+'userrights-reason'              => 'მიზეზი:',
+'userrights-no-interwiki'        => 'თქვენ არ გაქვთ მომხმარებლის უფლებების რედაქტირების უფლება სხვა ვიკი-ებში.',
+'userrights-nodatabase'          => 'მონაცემთა ბაზა $1 არ არსებობს, ან არ არის ლოკალური.',
+'userrights-nologin'             => 'თქვენ უნდა [[Special:UserLogin|წარადგინოთ თავი სისტემისადმი]] ადმინისისტრატორის ანგარიშით იმისთვის, რომ გასცეთ მომხმარებელთა უფლებები.',
+'userrights-notallowed'          => 'თქვენ არ გაქვთ მომხმარებელთა უფლებების შეცვლის უფლება.',
+'userrights-changeable-col'      => 'ჯგუფები, რომლებიც შეგიძლიათ შეცვალოთ',
+'userrights-unchangeable-col'    => 'ჯგუფები, რომლებიც არ შეგიძლიათ შეცვალოთ',
+'userrights-irreversible-marker' => '$1*',
 
 # Groups
 'group'               => 'ჯგუფი:',
@@ -1446,9 +1487,11 @@ $1",
 'minoreditletter'                   => 'მ',
 'newpageletter'                     => 'ა',
 'boteditletter'                     => 'რ',
+'unpatrolledletter'                 => '!',
 'number_of_watching_users_pageview' => '[$1 მომხმარებლის/ები კონტროლი]',
 'rc_categories'                     => 'მხოლოდ კატეგორიებიდან (განაცალკევეთ "|"-ის მიხედვით)',
 'rc_categories_any'                 => 'ნებისმიერი',
+'rc-change-size'                    => '$1',
 'rc-change-size-new'                => 'ზომა ცვლილების შემდეგ არის: {{PLURAL:$1|ბაიტი|ბაიტი}}',
 'newsectionsummary'                 => '/* $1 */ ახალი სექცია',
 'rc-enhanced-expand'                => 'დამატებითი ინფორმაციის ჩვენება (მოითხოვს ჯავასკრიპტს)',
@@ -1601,6 +1644,7 @@ $1',
 'backend-fail-stream'        => 'ფაილი $1 ტრანსლირება ვერ მოხერხდა.',
 'backend-fail-backup'        => 'ფაილი $1 სარეზერვო ასლის გაკეთება ვერ მოხერხდა.',
 'backend-fail-notexists'     => 'ფაილი $1 არ არსებობს.',
+'backend-fail-hashes'        => 'შედარებისათვის ფაილების ჰეშების მიღება ვერ მოხერხდა.',
 'backend-fail-notsame'       => 'უკვე არსებობს  ფაილი $1, რომელიც არაა იდენტური.',
 'backend-fail-invalidpath'   => '$1 არ წარმოადგენს შენახვის ხელმისაწვდომ გზას.',
 'backend-fail-delete'        => 'ფაილი $1-ის წაშლა ვერ მოხერხდა.',
@@ -1613,6 +1657,16 @@ $1',
 'backend-fail-closetemp'     => 'დროებითი ფაილის დახურვა ვერ ხერხდება.',
 'backend-fail-read'          => 'ფაილი $1-ის წაკითხვა ვერ მოხერხდა.',
 'backend-fail-create'        => 'ფაილი $1-ის შექმნა ვერ მოხერხდა.',
+'backend-fail-maxsize'       => 'ფაილი $1-ის შექმნა ვერ მოხერხდა, რადგანაც მისი ზომა აჭარბებს {{PLURAL:$2|$2 ბაიტს|$2 ბაიტს}}.',
+'backend-fail-readonly'      => 'საცავი "$1" ამჟამად ხელმისაწვდომია მხოლოდ წაკითხვის რეჟიმში. მიზეზი: "$2"',
+'backend-fail-synced'        => 'ფაილი "$1" იმყოფება შიდა საცავის შეუთანხმებელ მდგომარეობაში',
+'backend-fail-connect'       => '"$1" საცავთან დაკავშირება ვერ მოხერხდა.',
+'backend-fail-internal'      => '"$1" საცავში მოხდა დაუდგენელი შეცდომა.',
+'backend-fail-contenttype'   => 'ფაილის შემადგენლობის ტიპის დადგენა ვერ მოხერხდა, "$1"-ში შესანახად.',
+'backend-fail-batchsize'     => 'საცავმა მიიღო {{PLURAL:$1|ფაილის ოპერაციის|ფაილების ოპერაციების}} ბლოკი $1-დან, შეზღუდვა შეადგენს $2 {{PLURAL:$1|ოპერაციას}}.',
+
+'filejournal-fail-dbconnect' => 'ჟურნალის მონაცემთა ბაზებთან დაკავშირება "$1" მონაცემთა შესანახად ვერ მოხერხდა.',
+'filejournal-fail-dbquery'   => 'ჟურნალის მონაცემთა ბაზებთან დაკავშირება "$1" მონაცემთა განახლებისათვის ვერ მოხერხდა.',
 
 # Lock manager
 'lockmanager-notlocked'        => '"$1"–ის განბლოკვა ვერ მოხერხდა; ის არ არის დაბლოკილი.',
@@ -1621,6 +1675,7 @@ $1',
 'lockmanager-fail-acquirelock' => '"$1"–ის ბლოკირება ვერ მოხერხდა.',
 'lockmanager-fail-openlock'    => 'ბლოკირების ფაილის გახსნა "$1"–თვის ვერ მოხერხდა.',
 'lockmanager-fail-releaselock' => '"$1"–ის განბლოკვა ვერ მოხერხდა.',
+'lockmanager-fail-db-bucket'   => '$1 სეგმენტში ბლოკირებების ბაზების საკმარის რაოდენობასთან დაკავშირება ვერ მოხერხდა.',
 'lockmanager-fail-db-release'  => '$1 მონაცემთა ბაზაზე ბლოკის მოხსნა ვერ მოხერხდა.',
 'lockmanager-fail-svr-release' => '$1 სერვერზე ბლოკის მოხსნა ვერ მოხერხდა.',
 
@@ -1702,41 +1757,42 @@ $1',
 'listfiles_count'       => 'ვერსიები',
 
 # File description page
-'file-anchor-link'          => 'ფაილი',
-'filehist'                  => 'ფაილის ისტორია',
-'filehist-help'             => 'დააწკაპუნეთ თარიღზე/დროზე, რათა იხილოთ ფაილი, როგორც ის მაშინ გამოიყურებოდა.',
-'filehist-deleteall'        => 'წაშალე ყველა',
-'filehist-deleteone'        => 'წაშლა',
-'filehist-revert'           => 'დააბრუნე',
-'filehist-current'          => 'მიმდინარე',
-'filehist-datetime'         => 'თარიღი/დრო',
-'filehist-thumb'            => 'მინიატურა',
-'filehist-thumbtext'        => 'მინიატურა $1 ვერსიისთვის',
-'filehist-nothumb'          => 'არ არის მინიატურა',
-'filehist-user'             => 'მომხმარებელი',
-'filehist-dimensions'       => 'განზომილებები',
-'filehist-filesize'         => 'ფაილის ზომა',
-'filehist-comment'          => 'კომენტარი',
-'filehist-missing'          => 'ფაილი ვერ მოიძებნა',
-'imagelinks'                => 'ფაილის გამოყენება',
-'linkstoimage'              => 'მომდევნო {{PLURAL:$1|გვერდი|გვერდები}} ებმის ამ ფაილს:',
-'linkstoimage-more'         => '$1-ზე მეტი {{PLURAL:$1|გვერდები|ფვერდების|გვერდები}} რომლებსაც აქვთ ბმულები ამ ფაილზე.
+'file-anchor-link'                  => 'ფაილი',
+'filehist'                          => 'ფაილის ისტორია',
+'filehist-help'                     => 'დააწკაპუნეთ თარიღზე/დროზე, რათა იხილოთ ფაილი, როგორც ის მაშინ გამოიყურებოდა.',
+'filehist-deleteall'                => 'წაშალე ყველა',
+'filehist-deleteone'                => 'წაშლა',
+'filehist-revert'                   => 'დააბრუნე',
+'filehist-current'                  => 'მიმდინარე',
+'filehist-datetime'                 => 'თარიღი/დრო',
+'filehist-thumb'                    => 'მინიატურა',
+'filehist-thumbtext'                => 'მინიატურა $1 ვერსიისთვის',
+'filehist-nothumb'                  => 'არ არის მინიატურა',
+'filehist-user'                     => 'მომხმარებელი',
+'filehist-dimensions'               => 'განზომილებები',
+'filehist-filesize'                 => 'ფაილის ზომა',
+'filehist-comment'                  => 'კომენტარი',
+'filehist-missing'                  => 'ფაილი ვერ მოიძებნა',
+'imagelinks'                        => 'ფაილის გამოყენება',
+'linkstoimage'                      => 'მომდევნო {{PLURAL:$1|გვერდი|გვერდები}} ებმის ამ ფაილს:',
+'linkstoimage-more'                 => '$1-ზე მეტი {{PLURAL:$1|გვერდები|ფვერდების|გვერდები}} რომლებსაც აქვთ ბმულები ამ ფაილზე.
 В данном списке {{PLURAL:$1|წარმოდგენილია მხოლოდ $1 ბმული|წარმოდგენილია მხოლოდ $1 ბმულები|წარმოდგენილია მხოლოდ $1 ბმულების}} ამ ფაილზე
 შეგიძლიათ ნახოთ ასევე [[Special:WhatLinksHere/$2|სრული სია]].',
-'nolinkstoimage'            => 'არ არსებობს ამ ფაილთან დაკავშირებული გვერდები.',
-'morelinkstoimage'          => 'იხილეთ [[Special:WhatLinksHere/$1|სხვა ბმულები]] ამ ფაილზე.',
-'linkstoimage-redirect'     => '$1 (ფაილის გადამისამართება) $2',
-'duplicatesoffile'          => '{{PLURAL:$1|შემდეგი $1 ფაილი არის დუბლიკატი|შემდეგი $1 ფაილები არიან დუბლიკატები|შემდეგი $1 ფაილები არიან დუბლიკატები}} ამ ფაილისა ([[Special:FileDuplicateSearch/$2|დამატებითი ინფორმაცია]]):',
-'sharedupload'              => 'ეს ფაილი $1-დანაა და შეიძლება სხვა პროექტებიც იყენებდეს.',
-'sharedupload-desc-there'   => 'ეს ფაილი $1-დან შეიძლება გამოყენებული იქნას სხვა პროექტებშიც.
+'nolinkstoimage'                    => 'არ არსებობს ამ ფაილთან დაკავშირებული გვერდები.',
+'morelinkstoimage'                  => 'იხილეთ [[Special:WhatLinksHere/$1|სხვა ბმულები]] ამ ფაილზე.',
+'linkstoimage-redirect'             => '$1 (ფაილის გადამისამართება) $2',
+'duplicatesoffile'                  => '{{PLURAL:$1|შემდეგი $1 ფაილი არის დუბლიკატი|შემდეგი $1 ფაილები არიან დუბლიკატები|შემდეგი $1 ფაილები არიან დუბლიკატები}} ამ ფაილისა ([[Special:FileDuplicateSearch/$2|დამატებითი ინფორმაცია]]):',
+'sharedupload'                      => 'ეს ფაილი $1-დანაა და შეიძლება სხვა პროექტებიც იყენებდეს.',
+'sharedupload-desc-there'           => 'ეს ფაილი $1-დან შეიძლება გამოყენებული იქნას სხვა პროექტებშიც.
 დამატებითი ინფორმაციის მოპოვება შეიძლება [$2 ფაილის აღწერის გვერდზე].',
-'sharedupload-desc-here'    => 'ეს ფაილი $1-დან შეიძლება გამოყენებული იქნას სხვა პროექტებშიც.
+'sharedupload-desc-here'            => 'ეს ფაილი $1-დან შეიძლება გამოყენებული იქნას სხვა პროექტებშიც.
 მისი [$2 აღწერის გვერდიდან] ინფორმაცია წარმოდგენილია ქვევით.',
-'filepage-nofile'           => 'ამ სახელით ფაილი არ არსებობს.',
-'filepage-nofile-link'      => 'ამ სახელით ფაილი არ არსებობს, [$1 თუმცა თქვენ მისი ატვირთვა შეგიძლიათ].',
-'uploadnewversion-linktext' => 'ატვირთეთ ამ ფაილის ახალი ვერსია',
-'shared-repo-from'          => ' $1-დან',
-'shared-repo'               => 'საერთო საცავიდან',
+'filepage-nofile'                   => 'ამ სახელით ფაილი არ არსებობს.',
+'filepage-nofile-link'              => 'ამ სახელით ფაილი არ არსებობს, [$1 თუმცა თქვენ მისი ატვირთვა შეგიძლიათ].',
+'uploadnewversion-linktext'         => 'ატვირთეთ ამ ფაილის ახალი ვერსია',
+'shared-repo-from'                  => ' $1-დან',
+'shared-repo'                       => 'საერთო საცავიდან',
+'shared-repo-name-wikimediacommons' => 'ვიკისაწყობი',
 
 # File reversion
 'filerevert'                => 'დააბრუნე $1',
@@ -1865,6 +1921,8 @@ $1',
 'wantedpages'             => 'მოთხოვნილი გვერდები',
 'wantedpages-badtitle'    => 'შეცდომითი სათაური მთხოვნაში  $1.',
 'wantedfiles'             => 'მოთხოვნილი ფაილები',
+'wantedfiletext-cat'      => 'შემდეგი ფაილების გამოყენებას ცდილობენ, თუმცა ისინი არ არსებობენ. ამ სიაში შეცდომით შეიძლება მოხვდნენ ისე ფაილები, რომლებიც გარე საცავებში არიან. მსგავსი ცრუ ინფორმაცია აღნიშნული იქნება <del>გადახაზული ხაზით</del>. გარდა ამისა, გვერდები რომლებიც შეიცავენ არარსებულ ფაილებს ჩამოთვლილია აქ [[:$1]].',
+'wantedfiletext-nocat'    => 'შემდეგი ფაილების გამოყენებას ცდილობენ, თუმცა ისინი არ არსებობენ. ამ სიაში შეცდომით შეიძლება მოხვდნენ ისე ფაილები, რომლებიც გარე საცავებში არიან. მსგავსი ცრუ ინფორმაცია აღნიშნული იქნება <del>გადახაზული ხაზით</del>.',
 'wantedtemplates'         => 'მოთხოვნილი თარგები',
 'mostlinked'              => 'ყველაზე მეტი ბმულების მქონე გვერდები',
 'mostlinkedcategories'    => 'ყველაზე მეტი ბმულების მქონე კატეგორიები',
@@ -1912,6 +1970,7 @@ $1',
 # Book sources
 'booksources'               => 'წიგნის წყაროები',
 'booksources-search-legend' => 'წიგნის წყაროს ძებნა',
+'booksources-isbn'          => 'ISBN:',
 'booksources-go'            => 'გადასვლა',
 'booksources-text'          => 'ქვემოთ არის ვებ გვერდების ბმულების სია სადაც იყიდება ახალი და ნახმარი წიგნები, და შესაძლოა შეიცავდნენ დამატებით ინფორმაციას წიგნების შესახებ, რომლებსაც ეძებთ:',
 'booksources-invalid-isbn'  => 'თქვენს მიერ მითითებული ISBN, შეცდომას შეიცავს.  შეამოწმეთ, თუ თავდაპირველი წყარო სწორადაა აკრეფილი.',
@@ -1997,6 +2056,8 @@ $1',
 'listgrouprights-rights'               => 'უფლებები',
 'listgrouprights-helppage'             => 'Help:ჯგუფების უფლებები',
 'listgrouprights-members'              => '(წევრების სია)',
+'listgrouprights-right-display'        => '<span class="listgrouprights-granted">$1 <tt>($2)</tt></span>',
+'listgrouprights-right-revoked'        => '<span class="listgrouprights-revoked">$1 <tt>($2)</tt></span>',
 'listgrouprights-addgroup'             => 'შემდეგი {{PLURAL:$2|ჯგუფის|ჯგუფების}} დამატება: $1',
 'listgrouprights-removegroup'          => 'შემდეგი {{PLURAL:$2|ჯგუფის|ჯგუფების}} ამოღება: $1',
 'listgrouprights-addgroup-all'         => 'ჩაამატეთ ყველა ჯგუფი',
@@ -2090,27 +2151,29 @@ $1',
 'enotif_anon_editor'           => 'ანონიმური მომხმარებელი $1',
 'enotif_body'                  => 'პატივცემულო $WATCHINGUSERNAME,
 
-
-პროექტ "{{SITENAME}}"-ის გვერდო $PAGETITLE შეიცვალა $CHANGEDORCREATED  $PAGEEDITDATE  $PAGEEDITOR-ის მიერ. იხილეთ $PAGETITLE_URL მოქმედი ვერსიისთვის.
+პროექტ "{{SITENAME}}"-ის გვერდი $PAGETITLE შეიცვალა $CHANGEDORCREATED $PAGEEDITDATE მომხმარებელ $PAGEEDITOR-ის მიერ, მინდინარე ვერსიის სანახავად იხილეთ $PAGETITLE_URL.
 
 $NEWPAGE
 
\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\9dá\83 á\83\98á\83¡ á\83¡á\83\98á\83¢á\83§á\83\95ა: $PAGESUMMARY $PAGEMINOREDIT
\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡ á\83\9bá\83\9dá\83\99á\83\9aá\83\94 á\83\90á\83¦á\83¬á\83\94á\83 ა: $PAGESUMMARY $PAGEMINOREDIT
 
 დაუკავშირდით რედაქტორს:
-ფოსტა: $PAGEEDITOR_EMAIL
\83\94á\83\9a\83¤á\83\9dá\83¡á\83¢á\83\90: $PAGEEDITOR_EMAIL
 ვიკი: $PAGEEDITOR_WIKI
 
 შემდგომი ცვლილებების შესახებ შეტყობინებების მისაღებად ამ გვერდს კვლავ უნდა ესტუმროთ.
 აგრეთვე შეგიძლიათ აღადგინოთ შეტყობინებათა პარამეტრები თქვენს კონტროლის სიაში შეტანილი ყველა საკონტროლო გვერდისათვის.
 
-             ღრმა პატივისცემით, {{SITENAME}} შეტყობინებათა სისტემა
+             {{SITENAME}} შეტყობინებათა სისტემა
 
 --
-თქვენი კონტროლის სიის შესასწორებლად იხილეთ
+შეტყობინების პარამეტრების ცვლილება
+{{canonicalurl:{{#special:Preferences}}}}
+
+თქვენი კონტროლის სიის პარამეტრების ცვლილება
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83\99á\83\9dá\83\9cá\83¢á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83¡á\83\98á\83\98á\83\93á\83\90á\83\9c á\83\92á\83\95á\83\94á\83 á\83\93á\83\98á\83¡ á\83\90á\83\9bá\83\9dá\83¨á\83\9aá\83\90
\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83\98á\83¡ á\83\90á\83\9bá\83\9dá\83¨á\83\9aá\83\90 á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83\99á\83\9dá\83\9cá\83¢á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83¡á\83\98á\83\98á\83\93á\83\90á\83\9c
 $UNWATCHURL
 
 დამატებითი ინფორმაცია
@@ -2287,10 +2350,12 @@ $1',
 'undelete-show-file-submit'    => 'ჰო',
 
 # Namespace form on various pages
-'namespace'             => 'სახელთა სივრცე:',
-'invert'                => 'ყველა, მონიშნულის გარდა',
-'namespace_association' => 'თანმხლები სახელთა სივრცე',
-'blanknamespace'        => '(მთავარი)',
+'namespace'                     => 'სახელთა სივრცე:',
+'invert'                        => 'ყველა, მონიშნულის გარდა',
+'tooltip-invert'                => 'მონიშნეთ ეს უჯრა, რათა დამალოთ გვერდების ცვლილებები არჩეული სახელთა სივრცის ფარგლებში (და მასთან დაკავშირებულ სახელთა სივრცეში, თუ მსგავსი რამ მითითებულია)',
+'namespace_association'         => 'თანმხლები სახელთა სივრცე',
+'tooltip-namespace_association' => 'მონიშნეთ ეს უჯრა, რათა აგრეთვე ჩართოთ განხილვის სახელთა სივრცე, რომელიც დაკავშირებულია არჩეულ სახელთა სივრცესთან',
+'blanknamespace'                => '(მთავარი)',
 
 # Contributions
 'contributions'       => 'მომხმარებლის წვლილი',
@@ -2400,6 +2465,7 @@ $1',
 'blocklist-userblocks'            => 'დამალე ანგარიშის ბლოკირებები',
 'blocklist-tempblocks'            => 'დამალე დროებითი ბლოკირებები',
 'blocklist-addressblocks'         => 'დამალე გარკვეული IP მისამართის ბლოკირებები',
+'blocklist-rangeblocks'           => 'დიაპაზონების ბლოკირებების დამალვა',
 'blocklist-timestamp'             => 'ნიშნული',
 'blocklist-target'                => 'სამიზნე',
 'blocklist-expiry'                => 'ბლოკირების ხანგრძლივობა',
@@ -2457,6 +2523,7 @@ $1',
 'proxyblocker-disabled'           => 'ეს ფუნქცია გაუქმებულია.',
 'proxyblockreason'                => 'თქვენი IP მისამართი დაიბლოკა, ვინაიდან ის ღია პროქსია. გთხოვთ დაუკავშირდეთ თქვენ ინტერნეტ პროვაიდერს ან ტექ. სამსახურს და აცნობოთ მათ ამ სერიოზული უსაფრთხოების პრობლემის შესახებ.',
 'proxyblocksuccess'               => 'შესრულებულია.',
+'sorbs'                           => 'DNSBL',
 'sorbsreason'                     => 'თქვენი IP-მისამართი მიჩნევა ღია პროქსიდ DNSBL-ის თანახმად.',
 'sorbs_create_account_reason'     => 'თქვენი IP-მისამართი ითვლება ღია პროქსიდ DNSBL-ის ანახმად. თქვენ ვერ შექმნით ანგარიშს.',
 'cant-block-while-blocked'        => 'თქვენ ვერ დაბლოკავთ სხვა მომხმარებლებს, რადგანაც თავად ხართ დაბლოკილი.',
@@ -2577,6 +2644,7 @@ $1',
 'exportcuronly'     => 'მიუთითეთ მხოლოდ მიმდინარე ცვლილება, და არა სრული ისტორია',
 'exportnohistory'   => "----
 '''ყურადღება:''' გვერდის ყველა ვერსიის ექსპორტირება გათიშუკია სერვერზე დატვირტვის გამო.",
+'exportlistauthors' => 'ყველა გვერდის მთლიანი წვლილის სიის ჩართვა',
 'export-submit'     => 'ექსპორტი',
 'export-addcattext' => 'გვერდების დამატება კატეგორიიდან:',
 'export-addcat'     => 'დამატება',
@@ -2609,6 +2677,8 @@ $1',
 'thumbnail_error'          => 'ესკიზის შექმნის შეცდომა: $1',
 'djvu_page_error'          => 'DjVu გვერდის ნომერი',
 'djvu_no_xml'              => 'შეუძლებელია XML-ის მიღება DjVu-სთვის',
+'thumbnail-temp-create'    => 'დროებითი ესკიზის ფაილის შექმნა ვერ ხერხდება',
+'thumbnail-dest-create'    => 'ესკიზის დანიშნულების ადგილას შენახვა ვერ ხერხდება',
 'thumbnail_invalid_params' => 'მინიატურის არასწორი პარამეტრი',
 'thumbnail_dest_directory' => 'შეუძლებელია სამიზნე დირექტორიის შექმნა',
 'thumbnail_image-type'     => 'გამოსახულების მოცემული ტიპი არ არის მხარდაჭერილი',
@@ -2654,6 +2724,8 @@ $1',
 'import-invalid-interwiki'   => 'შეუძლებელია იმპორტირება მოცემული ვიკიდან.',
 'import-error-edit'          => 'გვერდი "$1" იმპორტირება არ მოხდა, რადგან თქვენ არ გაქვთ მისი რედაქტირების უფლება.',
 'import-error-create'        => 'გვერდი "$1" იმპორტირება არ მოხდა, რადგან თქვენ არ გაქვთ მისი შექმნის უფლება.',
+'import-error-interwiki'     => 'გვერდი "$1" არ იქნა იმპორტირებული, რადგანაც მისი სახელი დარეგისტრირებულია გარე ბმულებისათვის (interwiki).',
+'import-error-special'       => 'გვერდი "$1" არ იქნა იმპორტირებული, რადგანაც ის განეკუთვნება განსაკუთრებულ სახელთა სივრცეს, რომელიც კრძალავს გვერდების შექმნას.',
 'import-error-invalid'       => 'გვერდი "$1" იმპორტირება არ მოხდა მიუღებელი სახელის გამო.',
 
 # Import log
@@ -2665,10 +2737,15 @@ $1',
 'import-logentry-interwiki-detail' => '$1 ცვლილება $2-დან',
 
 # JavaScriptTest
-'javascripttest'             => 'JavaScript-ის ტესტირება',
-'javascripttest-disabled'    => 'ეს ფუნქცია ამ ვიკიში არ ჩართულა.',
-'javascripttest-title'       => 'მიმდინარეობს $1-ის ტესტირება',
-'javascripttest-qunit-intro' => 'იხილეთ [$1 ტესტირების დოკუმენტები] mediawiki.org-ზე.',
+'javascripttest'                           => 'JavaScript-ის ტესტირება',
+'javascripttest-disabled'                  => 'ეს ფუნქცია ამ ვიკიში არ ჩართულა.',
+'javascripttest-title'                     => 'მიმდინარეობს $1-ის ტესტირება',
+'javascripttest-pagetext-noframework'      => 'ეს გვერდი დარეგისტრირებულია JavaScript-ის ტესტების გასაშვებად.',
+'javascripttest-pagetext-unknownframework' => '"$1"-ის ტესტირების უცნობი გარემო.',
+'javascripttest-pagetext-frameworks'       => 'გთხოვთ, აირჩიეთ ტესტირების ერთ-ერთი შემდეგი გარემო: $1',
+'javascripttest-pagetext-skins'            => 'ტესტების გასაშვებად აირჩიეთ გაფორმების თემა:',
+'javascripttest-qunit-intro'               => 'იხილეთ [$1 ტესტირების დოკუმენტები] mediawiki.org-ზე.',
+'javascripttest-qunit-heading'             => 'MediaWiki JavaScript QUnit-ის ტესტების კრებული',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage'                 => 'თქვენი მომხმარებლის გვერდი',
@@ -2740,8 +2817,20 @@ $1',
 'tooltip-summary'                     => 'შეიყვანეთ მოკლე სქოლიო',
 
 # Stylesheets
-'common.css'   => '/** აქ ჩასმული CSS ყველა გარეკანზე იმოქმედებს */',
-'monobook.css' => '/* აქ ჩასმული CSS გავლენას იქონიებს Monobook ინტერფეისის მომხმარებლებზე */',
+'common.css'              => '/** აქ ჩასმული CSS გამოყენებული იქნება გაფორმების ყველა გარეკანზე */',
+'standard.css'            => '/* აქ ჩასმული CSS გამოყენებული იქნება სტანდარტული გაფორმების თემაში */',
+'nostalgia.css'           => '/* აქ ჩასმული CSS გამოყენებული იქნება ნოსტალგიური გაფორმების თემაში */',
+'cologneblue.css'         => '/* აქ ჩასმული CSS გამოყენებული იქნება კელნის ლურჯი გაფორმების თემაში */',
+'monobook.css'            => '/* აქ ჩასმული CSS გავლენას იქონიებს Monobook ინტერფეისის მომხმარებლებზე */',
+'myskin.css'              => '/* აქ ჩასმული CSS გამოყენებული იქნება ჩემი იერსახის გაფორმების თემაში */',
+'chick.css'               => '/* აქ ჩასმული CSS გამოყენებული იქნება წიწილის გაფორმების თემაში */',
+'simple.css'              => '/* აქ ჩასმული CSS გამოყენებული იქნება მარტივი გაფორმების თემაში */',
+'modern.css'              => '/* აქ ჩასმული CSS გამოყენებული იქნება თანამედროვე გაფორმების თემაში */',
+'vector.css'              => '/* აქ ჩასმული CSS გამოყენებული იქნება ვექტორული გაფორმების თემაში */',
+'group-autoconfirmed.css' => '/* აქ განთავსებული CSS გამოყენებული იქნება მხოლოდ ავტომატურად დადასტურებული მომხმარებლებისათვის */',
+'group-bot.css'           => '/* აქ განთავსებული CSS გამოყენებული იქნება მხოლოდ ბოტებისათვის */',
+'group-sysop.css'         => '/* აქ განთავსებული CSS გამოყენებული იქნება მხოლოდ ადმინისტრატორებისათვის */',
+'group-bureaucrat.css'    => '/* აქ განთავსებული CSS გამოყენებული იქნება მხოლოდ ბიუროკრატებისათვის */',
 
 # Scripts
 'common.js' => '/* აქ ნებისმიერი ჯავასკრიპტი ყველა მომხმარებლისთვის ჩაიტვირთება ყველა გვერდზე. */',
@@ -2830,6 +2919,7 @@ $1',
 მისმა ჩატვირთვამ შესაძლოა თქვენი სისტემა დააზიანოს.",
 'imagemaxsize'           => "სურათის მაქსიმალური ზომა <br />''აღწერილობის გვერდზე:''",
 'thumbsize'              => 'შემცირებული ზომა:',
+'widthheight'            => '$1 × $2',
 'widthheightpage'        => '$1 × $2, $3 გვერდი',
 'file-info'              => 'ფაილის ზომა: $1, MIME ტიპი: $2',
 'file-info-size'         => '$1 × $2 პიქსელი, ფაილის ზომა: $3, MIME ტიპი: $4',
@@ -2859,11 +2949,16 @@ $1',
 'sp-newimages-showfrom' => 'ახალი ფაილების ჩვენება დაწყებული $2, $1-იდან',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
-'seconds' => '$1 წამის',
-'minutes' => '$1 წუთის',
-'hours'   => '$1 საათის',
-'days'    => '$1 დღის',
-'ago'     => '$1 წინ',
+'video-dims'     => '$1, $2 × $3',
+'seconds-abbrev' => '$1 წმ',
+'minutes-abbrev' => '$1 წთ',
+'hours-abbrev'   => '$1 სთ',
+'days-abbrev'    => '$1 დღე',
+'seconds'        => '$1 წამის',
+'minutes'        => '$1 წუთის',
+'hours'          => '$1 საათის',
+'days'           => '$1 დღის',
+'ago'            => '$1 წინ',
 
 # Bad image list
 'bad_image_list' => 'ფორმატი შემდეგია:
@@ -2873,11 +2968,11 @@ $1',
 ნებისმიერი შემდგომი ბმული იმავე ხაზზე მიჩნეულია, როგორც გამონაკლისი, მაგ. გვერდები, სადაც ფაილი შეიძლება ხაზებს შორის იყოს ჩასმული.',
 
 # Metadata
-'metadata'          => 'მეტამონაცემები',
-'metadata-help'     => 'ეს ფაილი შეიცავს დამატებით ინფორმაციას, სავარაუდოდ ციფრული კამერიდან ან სკანერიდან, რომელიც მის შესაქმნელად გამოიყენეს. თუ ფაილის ორიგინალი შეცვლილია, ზოგიერთი დეტალი შესაძლოა სრულად არ ასახავდეს ფაილში შეტანილ ცვლილებებს.',
-'metadata-expand'   => 'დამატებითი ინფორმაციის ჩვენება',
-'metadata-collapse' => 'დამატებითი ინფორმაციის დამალვა',
-'metadata-fields'   => 'მეტამონაცემების ჩამონათვალი ამ შეტყობინებაში დამატებული იქნება სურათის გვერდზე, როცა მეტამონაცემების ცხრილი გახსნილია.
+'metadata'                  => 'მეტამონაცემები',
+'metadata-help'             => 'ეს ფაილი შეიცავს დამატებით ინფორმაციას, სავარაუდოდ ციფრული კამერიდან ან სკანერიდან, რომელიც მის შესაქმნელად გამოიყენეს. თუ ფაილის ორიგინალი შეცვლილია, ზოგიერთი დეტალი შესაძლოა სრულად არ ასახავდეს ფაილში შეტანილ ცვლილებებს.',
+'metadata-expand'           => 'დამატებითი ინფორმაციის ჩვენება',
+'metadata-collapse'         => 'დამატებითი ინფორმაციის დამალვა',
+'metadata-fields'           => 'მეტამონაცემების ჩამონათვალი ამ შეტყობინებაში დამატებული იქნება სურათის გვერდზე, როცა მეტამონაცემების ცხრილი გახსნილია.
 სხვები უპირობოდ დამალული იქნება.
 * make
 * model
@@ -2892,6 +2987,8 @@ $1',
 * gpslatitude
 * gpslongitude
 * gpsaltitude',
+'metadata-langitem'         => "'''$2:''' $1",
+'metadata-langitem-default' => '$1',
 
 # EXIF tags
 'exif-imagewidth'                  => 'სიგანე',
@@ -2939,6 +3036,7 @@ $1',
 'exif-exposuretime'                => 'ექსპოზიციის დრო',
 'exif-exposuretime-format'         => '$1 წამ ($2)',
 'exif-fnumber'                     => 'F ნომერი',
+'exif-fnumber-format'              => 'f/$1',
 'exif-exposureprogram'             => 'ექსპოზიციის პროგრამა',
 'exif-spectralsensitivity'         => 'სპექტრული გრძNობადობა',
 'exif-isospeedratings'             => 'ISO ფერისგრძნობადობა',
@@ -3007,6 +3105,7 @@ $1',
 'exif-gpsareainformation'          => 'GPS მხარის სახელწოდება',
 'exif-gpsdatestamp'                => 'GPS-ის მონაცემი',
 'exif-gpsdifferential'             => 'დიფერენციალური შესწორება',
+'exif-coordinate-format'           => '$1° $2′ $3″ $4',
 'exif-jpegfilecomment'             => 'JPEG-ფაილის კომენტარი',
 'exif-keywords'                    => 'საძიებო სიტყვები',
 'exif-worldregioncreated'          => 'მსოფლიოს რეგიონი, სადაც გადაღებულია ფოტო',
@@ -3072,14 +3171,37 @@ $1',
 'exif-originalimageheight'         => 'სურათის სიმაღლე კადრირებამდე',
 'exif-originalimagewidth'          => 'სურათის სიგანე კადრირებამდე',
 
+# Make & model, can be wikified in order to link to the camera and model name
+'exif-contact-value'         => '$1
+
+$2
+<div class="adr">
+$3
+
+$4, $5, $6 $7
+</div>
+$8',
+'exif-subjectnewscode-value' => '$2 ($1)',
+
 # EXIF attributes
-'exif-compression-1' => 'შეუკუმშავი',
-'exif-compression-3' => 'CCITT Group 3 ფაქსის კოდირება',
-'exif-compression-4' => 'CCITT Group 4 ფაქსის კოდირება',
+'exif-compression-1'     => 'შეუკუმშავი',
+'exif-compression-2'     => 'CCITT Group 3, ჰაფმანის სერიის სიგრძის კოდირების 1-განზომილებიანი მოდიფიკაცია',
+'exif-compression-3'     => 'CCITT Group 3 ფაქსის კოდირება',
+'exif-compression-4'     => 'CCITT Group 4 ფაქსის კოდირება',
+'exif-compression-5'     => 'LZW',
+'exif-compression-6'     => 'JPEG (ძველი)',
+'exif-compression-7'     => 'JPEG',
+'exif-compression-8'     => 'Deflate (Adobe)',
+'exif-compression-32773' => 'PackBits (Macintosh RLE)',
+'exif-compression-32946' => 'Deflate (PKZIP)',
+'exif-compression-34712' => 'JPEG2000',
 
 'exif-copyrighted-true'  => 'საავტორო უფლებებით დაცული',
 'exif-copyrighted-false' => 'საზოგადოებრივი დომენი',
 
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
 'exif-unknowndate' => 'უცნობი თარიღი',
 
 'exif-orientation-1' => 'ნორმალური',
@@ -3094,6 +3216,10 @@ $1',
 'exif-planarconfiguration-1' => 'ფორმატი «chunky»',
 'exif-planarconfiguration-2' => 'ფორმატი «planar»',
 
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'     => 'sRGB',
 'exif-colorspace-65535' => 'არაკალიბრირებული',
 
 'exif-componentsconfiguration-0' => 'არ არსებობს',
@@ -3260,6 +3386,8 @@ $1',
 
 'exif-isospeedratings-overflow' => '65535-ზე მეტი',
 
+'exif-maxaperturevalue-value' => '$1 APEX (f/$2)',
+
 'exif-iimcategory-ace' => 'ხელოვნება, კულტურა და გართობა',
 'exif-iimcategory-clj' => 'დანაშაული და კანონი',
 'exif-iimcategory-dis' => 'კატასტროფები და ავარიები',
@@ -3376,6 +3504,8 @@ $5
 'confirmrecreate-noreason' => 'მომხმარებელმა [[User:$1|$1]] ([[User talk:$1|განხილვა]]) წაშალა ეს გვერდი მას შემდეგ, რაც თქვენ დაიწყეთ მისი რედაქტირება. გთხოვთ, დარწმუნდით, რომ თქვენ ნამდვილად გსურთ ამ გვერდის ხელახლა შექმნა.',
 'recreate'                 => 'აღადგინე',
 
+'unit-pixel' => 'პქ',
+
 # action=purge
 'confirm_purge_button' => 'კარგი',
 'confirm-purge-top'    => 'გსურთ ამ გვერდის ქეშის წაშლა?',
@@ -3387,6 +3517,17 @@ $5
 'confirm-unwatch-button' => 'კარგი',
 'confirm-unwatch-top'    => 'მოვხსნა ეს გვერდი თქვენი კონტროლის სიიდან?',
 
+# Separators for various lists, etc.
+'semicolon-separator' => ';&#32;',
+'comma-separator'     => ',&#32;',
+'colon-separator'     => ':&#32;',
+'autocomment-prefix'  => '-&#32;',
+'pipe-separator'      => '&#32;|&#32;',
+'word-separator'      => '&#32;',
+'ellipsis'            => '...',
+'percent'             => '$1%',
+'parentheses'         => '($1)',
+
 # Multipage image navigation
 'imgmultipageprev' => '&larr; წინა გვერდი',
 'imgmultipagenext' => 'შემდეგი გვერდი &rarr;',
@@ -3417,6 +3558,17 @@ $5
 'size-megabytes' => '$1 მბ',
 'size-gigabytes' => '$1 გბ',
 
+# Bitrate units
+'bitrate-bits'      => '$1 ბ/წმ',
+'bitrate-kilobits'  => '$1 კბ/წმ',
+'bitrate-megabits'  => '$1 მბ/წმ',
+'bitrate-gigabits'  => '$1 გბ/წმ',
+'bitrate-terabits'  => '$1 ტბ/წმ',
+'bitrate-petabits'  => '$1 პბ/წმ',
+'bitrate-exabits'   => '$1 ებ/წმ',
+'bitrate-zetabits'  => '$1 ზბ/წმ',
+'bitrate-yottabits' => '$1 იბ/წმ',
+
 # Live preview
 'livepreview-loading' => 'იტვირთება…',
 'livepreview-ready'   => 'იტვირთება… მზადაა!',
@@ -3455,7 +3607,8 @@ $5
 'watchlisttools-raw'  => 'კონტროლის სიის რედაქტირება ტექსტის ფორმატში',
 
 # Signatures
-'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|განხილვა]])',
+'signature'    => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|განხილვა]])',
+'timezone-utc' => 'UTC',
 
 # Core parser functions
 'unknown_extension_tag' => 'უცნობი დამატების «$1» თეგი',
@@ -3469,6 +3622,7 @@ $5
 'version-variables'             => 'смфдуифвуиш',
 'version-antispam'              => 'სპამის პრევენცია',
 'version-skins'                 => 'იერსახე',
+'version-api'                   => 'API',
 'version-other'                 => 'სხვა',
 'version-mediahandlers'         => 'მედია დამუშავება',
 'version-hooks'                 => 'ჰუკებш',
@@ -3478,6 +3632,7 @@ $5
 'version-hook-name'             => 'ჰუკის სახელი',
 'version-hook-subscribedby'     => 'ჩაწერილია',
 'version-version'               => '(ვერსია $1)',
+'version-svn-revision'          => '(r$2)',
 'version-license'               => 'ლიცენზია',
 'version-poweredby-credits'     => "ეს ვიკი მუშაობს '''[//www.mediawiki.org/ MediaWiki]'''-ს ძრავზე, copyright © 2001-$1 $2.",
 'version-poweredby-others'      => 'სხვები',
@@ -3588,73 +3743,100 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'sqlite-no-fts'  => '$1 სრული ტექსტის ძიების მხარდაჭერის გარეშე',
 
 # New logging system
-'logentry-delete-delete'          => '$1 წაშალა გვერდი: $3',
-'logentry-delete-restore'         => '$1 აღადგინა გვერდი $3',
-'logentry-delete-event'           => '$1 შეცვალა {{PLURAL:$5|ჟურნალის ჩანაწერის|$5 ჟურნალის ჩანაწერების}} ხილვადობა $3-ზე: $4',
-'logentry-delete-revision-legacy' => '$1 შეცვალა რედაქტირების კომენტარი გვერდზე $3',
-'logentry-suppress-event'         => '$1 ფარულად შეცვალა {{PLURAL:$5|ჟურნალის ჩანაწერის|$5 ჟურნალის ჩანაწერების}} ხილვადობა $3-ზე: $4',
-'revdelete-content-hid'           => 'შინაარსი დამალულია',
-'revdelete-summary-hid'           => 'რედაქტირების აღწერა დამალულია',
-'revdelete-uname-hid'             => 'მომხმარებლის სახელი დაფარულია',
-'revdelete-content-unhid'         => 'შინაარსი გახსნილია',
-'revdelete-summary-unhid'         => 'რედაქტირების აღწერა გახსნილია',
-'revdelete-uname-unhid'           => 'მომხმარებლის სახელი გახსნილია',
-'revdelete-restricted'            => 'შეზღუდვა ადმინისტრატორთადმი',
-'revdelete-unrestricted'          => 'შეზღუდვები მოხსნილია ადმინისტრატორთადმი',
-'logentry-move-move'              => '$1 გადაიტანა გვერდი $3 → $4-ზე',
-'logentry-newusers-newusers'      => '$1 შექმნა მომხმარებლის ანგარიში',
-'logentry-newusers-create'        => '$1 შექმნა მომხმარებლის ანგარიში',
-'logentry-newusers-create2'       => '$1 შექმნა მომხმარებელ $3 ანგარიში',
-'logentry-newusers-autocreate'    => 'ანგარიში $1 ავტომატურად შეიქმნა',
-'newuserlog-byemail'              => 'პაროლი ელ-ფოსტითაა გამოგზავნილი',
+'logentry-delete-delete'              => '$1 წაშალა გვერდი: $3',
+'logentry-delete-restore'             => '$1 აღადგინა გვერდი $3',
+'logentry-delete-event'               => '$1 შეცვალა {{PLURAL:$5|ჟურნალის ჩანაწერის|$5 ჟურნალის ჩანაწერების}} ხილვადობა $3-ზე: $4',
+'logentry-delete-revision'            => '$1 შეცვალა {{PLURAL:$5|$5 ვერსიის|$5 ვერსიის}} ხილვადობა $3 გვერდზე: $4',
+'logentry-delete-event-legacy'        => '$1 შეცვალა ჩანაწერების ჟურნალის ხილვადობა $3-ზე',
+'logentry-delete-revision-legacy'     => '$1 შეცვალა რედაქტირების კომენტარი გვერდზე $3',
+'logentry-suppress-delete'            => '$1 ჩაახშო $3 გვერდი',
+'logentry-suppress-event'             => '$1 ფარულად შეცვალა {{PLURAL:$5|ჟურნალის ჩანაწერის|$5 ჟურნალის ჩანაწერების}} ხილვადობა $3-ზე: $4',
+'logentry-suppress-revision'          => '$1 ფარულად შეცვალა {{PLURAL:$5|$5 ვერსიის|$5 ვერსიის}} ხილვადობა $3 გვერდზე: $4',
+'logentry-suppress-event-legacy'      => '$1 ფარულად შეცვალა $3 ჩანაწერების ჟურნალის ხილვადობა',
+'logentry-suppress-revision-legacy'   => '$1 ფარულად შეცვალა ვერსიის ხილვადობა $3 გვერდზე',
+'revdelete-content-hid'               => 'შინაარსი დამალულია',
+'revdelete-summary-hid'               => 'რედაქტირების აღწერა დამალულია',
+'revdelete-uname-hid'                 => 'მომხმარებლის სახელი დაფარულია',
+'revdelete-content-unhid'             => 'შინაარსი გახსნილია',
+'revdelete-summary-unhid'             => 'რედაქტირების აღწერა გახსნილია',
+'revdelete-uname-unhid'               => 'მომხმარებლის სახელი გახსნილია',
+'revdelete-restricted'                => 'შეზღუდვა ადმინისტრატორთათვის',
+'revdelete-unrestricted'              => 'ადმინისტრატორთათვის შეზღუდვები მოხსნილია',
+'logentry-move-move'                  => '$1 გადაიტანა გვერდი $3 → $4-ზე',
+'logentry-move-move-noredirect'       => '$1 გადაიტანა გვერდი $3 $4-ში გადამისამართების დატოვების გარეშე',
+'logentry-move-move_redir'            => '$1 გადაიტანა გვერდი $3 $4-ში გადამისამართებაზე',
+'logentry-move-move_redir-noredirect' => '$1 გადაიტანა გვერდი $3 $4-ში გადამისამართების დატოვების გარეშე',
+'logentry-patrol-patrol'              => '$1 გააკეთა გვერდი $3-ის $4 ვერსიის პატრულირება',
+'logentry-patrol-patrol-auto'         => '$1 ავტომატურად გააკეთა გვერდი $3-ის $4 ვერსიის პატრულირება',
+'logentry-newusers-newusers'          => '$1 შექმნა მომხმარებლის ანგარიში',
+'logentry-newusers-create'            => '$1 შექმნა მომხმარებლის ანგარიში',
+'logentry-newusers-create2'           => '$1 შექმნა მომხმარებელ $3 ანგარიში',
+'logentry-newusers-autocreate'        => 'ანგარიში $1 ავტომატურად შეიქმნა',
+'newuserlog-byemail'                  => 'პაროლი ელ-ფოსტითაა გამოგზავნილი',
 
 # Feedback
-'feedback-subject'  => 'თემა:',
-'feedback-message'  => 'შეტყობინება:',
-'feedback-cancel'   => 'გაუქმება',
-'feedback-submit'   => 'შეფასების გაგზავნა',
-'feedback-adding'   => 'თქვენი შეფასების შენახვა...',
-'feedback-error1'   => 'შეცდომა. API-ს მოულოდნელი რეზულტატი.',
-'feedback-error2'   => 'შეცდომა: რედაქტირება ვერ განხორციელდა',
-'feedback-error3'   => 'შეცდომა. არ არის API-ს პასუხი .',
-'feedback-thanks'   => 'გმადლობთ! თქვენი შეფასება განთავსებულია „[$2 $1]“ გვერდზე.',
-'feedback-close'    => 'გაკეთდა',
-'feedback-bugcheck' => 'კარგია! გთხოვთ, კიდევ ერთხელ შეამოწმეთ, ხომ არ არის აქ რომელიმე უკვე [$1 ნაცნობი შეცდომა].',
-'feedback-bugnew'   => 'მე შევამოწმე. ახალი შეცდომის შეტყობინება',
+'feedback-bugornote' => 'თუ თქვენ მზად ხართ დეტალურად აღწეროთ ტექნიკური პრობლემა, გთხოვთ, [$1 შეგვატყობინეთ შეცდომის შესახებ].
+წინააღმდეგ შემთხვევაში თქვენ შეგიძლიათ ისარგებლოთ ამ მარტივი ფორმით. თქვენი კომენტარი დაემატება  „[$3 $2]“ გვერდზე თქვენი მომხმარებლის სახელთან და გამოყენებულ ბრაუზერთან ერთად.',
+'feedback-subject'   => 'თემა:',
+'feedback-message'   => 'შეტყობინება:',
+'feedback-cancel'    => 'გაუქმება',
+'feedback-submit'    => 'შეფასების გაგზავნა',
+'feedback-adding'    => 'თქვენი შეფასების შენახვა...',
+'feedback-error1'    => 'შეცდომა. API-ს მოულოდნელი რეზულტატი.',
+'feedback-error2'    => 'შეცდომა: რედაქტირება ვერ განხორციელდა',
+'feedback-error3'    => 'შეცდომა. არ არის API-ს პასუხი .',
+'feedback-thanks'    => 'გმადლობთ! თქვენი შეფასება განთავსებულია „[$2 $1]“ გვერდზე.',
+'feedback-close'     => 'გაკეთდა',
+'feedback-bugcheck'  => 'კარგია! გთხოვთ, კიდევ ერთხელ შეამოწმეთ, ხომ არ არის აქ რომელიმე უკვე [$1 ნაცნობი შეცდომა].',
+'feedback-bugnew'    => 'მე შევამოწმე. ახალი შეცდომის შეტყობინება',
 
 # API errors
-'api-error-badaccess-groups'      => 'თქვენ არ გაქვთ ამ ვიკიში ფაილების ატვირთვის უფლება.',
-'api-error-badtoken'              => 'შიდა შეცდომა: ცუდი ტოკენი.',
-'api-error-copyuploaddisabled'    => 'ამ სერვერზე URL-მისამართის საშუალებით ატვირთვა გამორთულია.',
-'api-error-duplicate'             => 'უკვე {{PLURAL:$1|არსებობს [$2 სხვა ფაილი]|არსებობს [$2 სხვა მსგავსი ფაილი]}} ანალოგიური შინაარსით.',
-'api-error-duplicate-popup-title' => '{{PLURAL:$1|ფაილის|ფაილის}} დუბლიკატი.',
-'api-error-empty-file'            => 'არჩეული ფაილი ცარიელია.',
-'api-error-emptypage'             => 'ახალი, ცარიელი გვერდების შექმნა აკრძალულია.',
-'api-error-fetchfileerror'        => 'შიდა შეცდომა: ფაილის მიღებისას მოხდა რაღაც შეცდომა.',
-'api-error-file-too-large'        => 'არჩეული ფაილი ძალიან დიდია.',
-'api-error-filename-tooshort'     => 'ფაილის სახელი ზედმეტად მოკლეა',
-'api-error-filetype-banned'       => 'ფაილის ეს ტიპი აკრძალულია',
-'api-error-filetype-missing'      => 'ფაილს აკლია გაფართოვება.',
-'api-error-hookaborted'           => 'თქვენ მიერ შემოთავაზებული ცვლილება მოინიშნა გაფართოების დოკუმენტაციაში.',
-'api-error-http'                  => 'აღმოჩენილია შეცდომა სერვერთან დაკავშირებისას.',
-'api-error-illegal-filename'      => 'ფაილის ეს სახელი აკრძალულია.',
-'api-error-internal-error'        => 'შიდა შეცდომა: ვიკიში თქვენი ატვირთვის დამუშავებისას მოხდა შეცდომა.',
-'api-error-invalid-file-key'      => 'სერვერმა ვერ იპოვა თქვენ მიერ მითითებული ფაილი',
-'api-error-missingparam'          => 'შიდა შეცდომა: მოთხოვნილი პარამეტრები დაიკარგა.',
-'api-error-missingresult'         => 'შიდა შეცდომა. ვერ მოხერხდა იმის დადგენა, იყო თუ არა კოპირება წარმატებული.',
-'api-error-mustbeloggedin'        => 'ფაილების ასატვირთად თქვენ უნდა შეხვიდეთ სისტემაში.',
-'api-error-mustbeposted'          => 'პროგრამული შეცდომა; გამოყენებულია არასწორი HTTP-მეთოდი.',
-'api-error-nomodule'              => 'შიდა შეცდომა. ატვირთვის მოდული არ არის კონფიგურირებული.',
-'api-error-ok-but-empty'          => 'შიდა შეცდომა. სერვერს არ დაუბრუნებია ინფორმაცია ატვირთვადი ფაილის შესახებ.',
-'api-error-overwrite'             => 'არსებული ფაილის შეცვლა მიუღებელია.',
-'api-error-stashfailed'           => 'შიდა შეცდომა. ვიკიმ ვერ შეძლო დროებით ფაილის შენახვა.',
-'api-error-timeout'               => 'სერვერმა არ მოახდინა რეაგირება მოსალოდნელ დროში.',
-'api-error-unclassified'          => 'აღმოჩენილია უცნობი შეცდომა.',
-'api-error-unknown-code'          => 'უცნობი შეცდომა : „$1“',
-'api-error-unknown-error'         => 'შიდა შეცდომა: ფაილის ატვირთვისას აღმოჩენილია უცნობი შეცდომა.',
-'api-error-unknown-warning'       => 'უცნობი გაფრთხილება: „$1“.',
-'api-error-unknownerror'          => 'უცნობი შეცდომა: „$1“.',
-'api-error-uploaddisabled'        => 'ატვირთვის მექანიზმი ამ ვიკიზე გამორთულია',
-'api-error-verification-error'    => 'ეს ფაილი ან რაიმე შეცდომას შეიცავს, ან არ აქვს სახელის გაფართოება.',
+'api-error-badaccess-groups'              => 'თქვენ არ გაქვთ ამ ვიკიში ფაილების ატვირთვის უფლება.',
+'api-error-badtoken'                      => 'შიდა შეცდომა: ცუდი ტოკენი.',
+'api-error-copyuploaddisabled'            => 'ამ სერვერზე URL-მისამართის საშუალებით ატვირთვა გამორთულია.',
+'api-error-duplicate'                     => 'უკვე {{PLURAL:$1|არსებობს [$2 სხვა ფაილი]|არსებობს [$2 სხვა მსგავსი ფაილი]}} ანალოგიური შინაარსით.',
+'api-error-duplicate-archive'             => 'საიტზე ადრე {{PLURAL:$1|უკვე იყო [$2 ფაილი]}} ანალოგიური შინაარსით, მაგრამ {{PLURAL:$1|ის წაიშალა|ისინი წაიშალა}}.',
+'api-error-duplicate-archive-popup-title' => 'უკვე წაშლილი {{PLURAL:$1|ფაილის|ფაილის}} დუბლიკატი.',
+'api-error-duplicate-popup-title'         => '{{PLURAL:$1|ფაილის|ფაილის}} დუბლიკატი.',
+'api-error-empty-file'                    => 'არჩეული ფაილი ცარიელია.',
+'api-error-emptypage'                     => 'ახალი, ცარიელი გვერდების შექმნა აკრძალულია.',
+'api-error-fetchfileerror'                => 'შიდა შეცდომა: ფაილის მიღებისას მოხდა რაღაც შეცდომა.',
+'api-error-file-too-large'                => 'არჩეული ფაილი ძალიან დიდია.',
+'api-error-filename-tooshort'             => 'ფაილის სახელი ზედმეტად მოკლეა',
+'api-error-filetype-banned'               => 'ფაილის ეს ტიპი აკრძალულია',
+'api-error-filetype-missing'              => 'ფაილს აკლია გაფართოვება.',
+'api-error-hookaborted'                   => 'თქვენ მიერ შემოთავაზებული ცვლილება მოინიშნა გაფართოების დოკუმენტაციაში.',
+'api-error-http'                          => 'აღმოჩენილია შეცდომა სერვერთან დაკავშირებისას.',
+'api-error-illegal-filename'              => 'ფაილის ეს სახელი აკრძალულია.',
+'api-error-internal-error'                => 'შიდა შეცდომა: ვიკიში თქვენი ატვირთვის დამუშავებისას მოხდა შეცდომა.',
+'api-error-invalid-file-key'              => 'სერვერმა ვერ იპოვა თქვენ მიერ მითითებული ფაილი',
+'api-error-missingparam'                  => 'შიდა შეცდომა: მოთხოვნილი პარამეტრები დაიკარგა.',
+'api-error-missingresult'                 => 'შიდა შეცდომა. ვერ მოხერხდა იმის დადგენა, იყო თუ არა კოპირება წარმატებული.',
+'api-error-mustbeloggedin'                => 'ფაილების ასატვირთად თქვენ უნდა შეხვიდეთ სისტემაში.',
+'api-error-mustbeposted'                  => 'პროგრამული შეცდომა; გამოყენებულია არასწორი HTTP-მეთოდი.',
+'api-error-noimageinfo'                   => 'ატვირთვა წარმატებით განხორციელდა, მაგრამ სერვერმა არ აჩვენა ფაილის შესახებ არანაირი ინფორმაცია.',
+'api-error-nomodule'                      => 'შიდა შეცდომა. ატვირთვის მოდული არ არის კონფიგურირებული.',
+'api-error-ok-but-empty'                  => 'შიდა შეცდომა. სერვერს არ დაუბრუნებია ინფორმაცია ატვირთვადი ფაილის შესახებ.',
+'api-error-overwrite'                     => 'არსებული ფაილის შეცვლა მიუღებელია.',
+'api-error-stashfailed'                   => 'შიდა შეცდომა. ვიკიმ ვერ შეძლო დროებით ფაილის შენახვა.',
+'api-error-timeout'                       => 'სერვერმა არ მოახდინა რეაგირება მოსალოდნელ დროში.',
+'api-error-unclassified'                  => 'აღმოჩენილია უცნობი შეცდომა.',
+'api-error-unknown-code'                  => 'უცნობი შეცდომა : „$1“',
+'api-error-unknown-error'                 => 'შიდა შეცდომა: ფაილის ატვირთვისას აღმოჩენილია უცნობი შეცდომა.',
+'api-error-unknown-warning'               => 'უცნობი გაფრთხილება: „$1“.',
+'api-error-unknownerror'                  => 'უცნობი შეცდომა: „$1“.',
+'api-error-uploaddisabled'                => 'ატვირთვის მექანიზმი ამ ვიკიზე გამორთულია',
+'api-error-verification-error'            => 'ეს ფაილი ან რაიმე შეცდომას შეიცავს, ან არ აქვს სახელის გაფართოება.',
+
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|წამი|წამი}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|წუთი|წუთი}}',
+'duration-hours'     => '$1 {{PLURAL:$1|საათი|საათი}}',
+'duration-days'      => '$1 {{PLURAL:$1|დღე|დღე}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|კვირა|კვირა}}',
+'duration-years'     => '$1 {{PLURAL:$1|წელი|წელი}}',
+'duration-decades'   => '$1 {{PLURAL:$1|დეკადა|დეკადა}}',
+'duration-centuries' => '$1 {{PLURAL:$1|საუკუნე|საუკუნე}}',
+'duration-millennia' => '$1 {{PLURAL:$1|ათასწლეული|ათასწლეული}}',
 
 );
index 531ea4f..2a9e657 100644 (file)
@@ -46,6 +46,8 @@ $messages = array(
 'tog-oldsig'                  => 'موجودہ دستخطو نمائش:',
 'tog-fancysig'                => '(سادہ دسخط بلا خودکار ربط)',
 'tog-externaleditor'          => 'ہمیشہ بیرونی تدوین کار استعمال کورے (صرفی ماہرینن بچے، ھمو بچے کمپیوٹرا خاص ترتیبات درکار بونیان)',
+'tog-externaldiff'            => 'ہمیشہ بیرونی تدوین کار استعمال کورے (صرفی ماہرینن بچے، ھمو بچے کمپیوٹرا خاص ترتیبات درکار بونیان)',
+'tog-showjumplinks'           => 'ھیہ ووشکی څروٹھاوے',
 'tog-uselivepreview'          => 'براہِ راست نمائش استعمال کورے (JavaScript ضرورت بوی)',
 'tog-forceeditsummary'        => 'کیاوتکی آوا ترمیمی خلاصو خالی پیڅھیتام تھے متے لو دیت',
 'tog-watchlisthideown'        => 'زیرِنظرفہرستہ مہ ترمیماتن کھوشاوے',
@@ -64,7 +66,10 @@ $messages = array(
 
 # Font style option in Special:Preferences
 'editfont-style'     => 'خانۂ تدوینو اندازِ تحریر:',
+'editfont-default'   => 'ڈیفالٹ براوزر',
 'editfont-monospace' => 'یکفضائی نویسہ',
+'editfont-sansserif' => 'بےحلیہ فونٹ',
+'editfont-serif'     => 'حلیہ فونٹ',
 
 # Dates
 'sunday'        => 'یک شمبے',
@@ -119,19 +124,23 @@ $messages = array(
 'dec'           => 'دسمبر',
 
 # Categories related messages
-'pagecategories'                => '{{PLURAL:$1|زمرہ|زمرہ جات}}',
-'category_header'               => 'زمرہ "$1" مضمون\'',
-'subcategories'                 => 'ذیلی ذمرہ جات',
-'category-media-header'         => 'زمرا "$1" میڈیا',
-'category-empty'                => '‘‘ھیہ زمرا ھنیسے کیہ صفحہ یا میڈیا موجود نیکی.’’',
-'hidden-categories'             => '{{PLURAL:$1|کھوشت زمرہ|کھوشت زمرہ جات}}',
-'hidden-category-category'      => 'کھوشت زمرہ جات',
-'category-subcat-count'         => '{{PLURAL:$2|اِس زمرہ میں صرف درج ذیل ذیلی زمرہ ہے.|اِس زمرہ میں درج ذیل {{PLURAL:$1|ذیلی زمرہ|$1 ذیلی زمرہ جات}}, کل $2 میں سے.}}',
-'category-subcat-count-limited' => 'ھیہ زمرا درج ذیل {{PLURAL:$1|ذیلی زمرہ ہے|$1 ذیلی زمرہ جات شینی}}.',
-'category-article-count'        => '{{Plural:$2|مضمون شینی|{{Plural:$1|صفحا|صفحا}} $2 ھیہ زمرا مضمون شینی}}',
-'listingcontinuesabbrev'        => 'جاری',
-'index-category'                => 'نو انڈیکس صفحات',
-'noindex-category'              => 'نو انڈیکس صفحات',
+'pagecategories'                 => '{{PLURAL:$1|زمرہ|زمرہ جات}}',
+'category_header'                => 'زمرہ "$1" مضمون\'',
+'subcategories'                  => 'ذیلی ذمرہ جات',
+'category-media-header'          => 'زمرا "$1" میڈیا',
+'category-empty'                 => '‘‘ھیہ زمرا ھنیسے کیہ صفحہ یا میڈیا موجود نیکی.’’',
+'hidden-categories'              => '{{PLURAL:$1|کھوشت زمرہ|کھوشت زمرہ جات}}',
+'hidden-category-category'       => 'کھوشت زمرہ جات',
+'category-subcat-count'          => '{{PLURAL:$2|اِس زمرہ میں صرف درج ذیل ذیلی زمرہ ہے.|اِس زمرہ میں درج ذیل {{PLURAL:$1|ذیلی زمرہ|$1 ذیلی زمرہ جات}}, کل $2 میں سے.}}',
+'category-subcat-count-limited'  => 'ھیہ زمرا درج ذیل {{PLURAL:$1|ذیلی زمرہ ہے|$1 ذیلی زمرہ جات شینی}}.',
+'category-article-count'         => '{{Plural:$2|مضمون شینی|{{Plural:$1|صفحا|صفحا}} $2 ھیہ زمرا مضمون شینی}}',
+'category-article-count-limited' => 'The following {{PLURAL:$1|صفحا|$1 صفحات}} in the current category.',
+'category-file-count'            => '{{Plural:$2|مضمون شینی|{{Plural:$1|صفحا|صفحا}} $2 ھیہ زمرا مضمون شینی}}',
+'category-file-count-limited'    => 'The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
+'listingcontinuesabbrev'         => 'جاری',
+'index-category'                 => 'نو انڈیکس صفحات',
+'noindex-category'               => 'نو انڈیکس صفحات',
+'broken-file-category'           => 'نس پھت صفحات',
 
 'about'         => 'تعارف',
 'article'       => 'صفحۂ مشمول',
@@ -160,6 +169,7 @@ $messages = array(
 'vector-action-delete'     => 'بوغاوے',
 'vector-action-move'       => 'منتقل کورے',
 'vector-action-protect'    => 'محفوظ کورے',
+'vector-action-undelete'   => 'اچی انگیے',
 'vector-action-unprotect'  => 'غیر محفوظ',
 'vector-view-create'       => 'ساوزاوے',
 'vector-view-edit'         => 'ایڈٹ کورے',
@@ -223,6 +233,11 @@ $messages = array(
 'jumpto'            => 'ھیہ ووشکی څروٹھاوے',
 'jumptonavigation'  => 'رہنمائی',
 'jumptosearch'      => 'تلاش',
+'view-pool-error'   => 'معذرت: تمام سرورا موجودہ وختہ اِضافی بوجھ شیر.
+بہت زیادہ صارفین موجودہ وختہ ھیہ صفحو لاڑینیان 
+برائے مہربانی! صفحو لوڑیکو بچے دوبارہ کوشش کوریکاری پروشٹی پھوکرو انتظار کورے.
+
+$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) and the disambiguation template definition (see disambiguations).
 'aboutsite'            => 'تعارف {{SITENAME}}',
index f9b3e45..86bee2b 100644 (file)
@@ -1566,6 +1566,7 @@ URL дұрыс екендігін және торап істеп тұрғаны
 'listfiles_user'        => 'Қатысушы',
 'listfiles_size'        => 'Мөлшері',
 'listfiles_description' => 'Сипаттамасы',
+'listfiles_count'       => 'Нұсқалары',
 
 # File description page
 'file-anchor-link'          => 'Файл беті',
index c1b7125..3d188c8 100644 (file)
@@ -187,7 +187,7 @@ $messages = array(
 'listingcontinuesabbrev'         => 'ಮುಂದು.',
 'index-category'                 => 'ಸೂಚಿನಾಮದ ಪುತಗಳು',
 'noindex-category'               => 'ಅಸುಚಿನಾಮದ ಪುತಗಳು',
-'broken-file-category'           => 'ಪà³\81ತà²\97ಲà³\8dಲಿ à²®à³\81ರà³\81ದಿರà³\81ವ à²\95ಡತ à²\95à³\8aà²\82ಡಿಗಳು',
+'broken-file-category'           => 'à²\95ಡತ à²\95à³\8aà²\82ಡಿà²\97ಳà³\81 à²®à³\81ರಿದಿರà³\81ವ à²ªà³\81à²\9fಗಳು',
 
 'about'         => 'ನಮ್ಮ ಬಗ್ಗೆ',
 'article'       => 'ಲೇಖನ ಪುಟ',
index f3cdab4..7ec21ed 100644 (file)
@@ -314,8 +314,8 @@ $messages = array(
 'tog-numberheadings'          => '머릿글 번호 매기기',
 'tog-showtoolbar'             => '편집창에 툴바 보이기 (자바스크립트)',
 'tog-editondblclick'          => '더블클릭으로 문서 편집하기 (자바스크립트)',
-'tog-editsection'             => '[편집] 링크로  편집하기',
-'tog-editsectiononrightclick' => '제목을 오른쪽 클릭해서  편집하기 (자바스크립트)',
+'tog-editsection'             => '[편집] 링크로 부분 편집하기',
+'tog-editsectiononrightclick' => '제목을 오른쪽 클릭해서 부분 편집하기 (자바스크립트)',
 'tog-showtoc'                 => '문서의 차례 보여주기 (머릿글이 4개 이상인 경우)',
 'tog-rememberpassword'        => '이 브라우저에서 로그인 상태를 저장하기 (최대 $1일)',
 'tog-watchcreations'          => '내가 처음 만드는 문서를 주시문서 목록에 추가',
@@ -682,6 +682,9 @@ $2',
 'ns-specialprotected'  => '{{ns:special}} 네임스페이스의 문서는 편집할 수 없습니다.',
 'titleprotected'       => '[[User:$1|$1]] 사용자가 문서 생성을 금지했습니다.
 이유는 다음과 같습니다. ‘$2’',
+'filereadonlyerror'    => '"$2" 파일 저장소가 읽기 전용이라서 "$1" 파일을 변경할 수 없습니다.
+
+제시된 이유는 "\'\'$3\'\'"입니다.',
 
 # Virus scanner
 'virus-badscanner'     => "잘못된 설정: 알 수 없는 바이러스 검사기: ''$1''",
@@ -960,7 +963,7 @@ $1, 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 
 'token_suffix_mismatch'            => "'''저장하려는 내용의 문장 부호가 망가져 있습니다. 문서 보호를 위해 해당 내용을 저장하지 않습니다. 버그가 있는 익명 프록시 서비스 등을 사용할 때 이런 문제가 발생할 수 있습니다.'''",
 'edit_form_incomplete'             => "'''편집의 일부 내용이 서버에 전달되지 않았습니다. 당신의 편집이 손상되지 않았는지 확인하고 다시 시도해 주십시오.'''",
 'editing'                          => '$1 편집하기',
-'editingsection'                   => '$1 편집하기 ()',
+'editingsection'                   => '$1 편집하기 (부분)',
 'editingcomment'                   => '$1 편집하기 (덧붙이기)',
 'editconflict'                     => '편집 충돌: $1',
 'explainconflict'                  => "문서를 편집하는 도중에 누군가 이 문서를 고쳤습니다.
@@ -1053,14 +1056,14 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 # History pages
 'viewpagelogs'           => '이 문서의 기록 보기',
 'nohistory'              => '이 문서는 편집 역사가 없습니다.',
-'currentrev'             => '현재 판',
+'currentrev'             => '최신판',
 'currentrev-asof'        => '$1 기준 최신판',
 'revisionasof'           => '$1 판',
 'revision-info'          => '$2 사용자의 $1 버전',
 'previousrevision'       => '← 이전 판',
 'nextrevision'           => '다음 판 →',
 'currentrevisionlink'    => '최신판',
-'cur'                    => '현재',
+'cur'                    => '최신',
 'next'                   => '다음',
 'last'                   => '이전',
 'page_first'             => '처음',
@@ -1237,8 +1240,8 @@ $1",
 'notextmatches'                    => '해당하는 문서 없음',
 'prevn'                            => '앞으로 $1개',
 'nextn'                            => '뒤로 $1개',
-'prevn-title'                      => 'ì\9d´ì \84 결과 $1개',
-'nextn-title'                      => 'ë\8b¤ì\9d\8c 결과 $1개',
+'prevn-title'                      => 'ì\95\9eì\9d\98 결과 $1개',
+'nextn-title'                      => 'ë\92¤ì\9d\98 결과 $1개',
 'shown-title'                      => '쪽마다 결과 $1 개씩 보이기',
 'viewprevnext'                     => '보기: ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-legend'                => '검색 설정',
@@ -1778,6 +1781,7 @@ $1',
 'backend-fail-closetemp'     => '임시 파일을 닫을 수 없습니다.',
 'backend-fail-read'          => '$1 파일을 읽을 수 없습니다.',
 'backend-fail-create'        => '$1 파일을 쓸 수 없습니다.',
+'backend-fail-maxsize'       => '$2{{PLURAL:$2|바이트}}보다 커서 $1 파일을 생성하지 못했습니다.',
 'backend-fail-readonly'      => '‘$1’ 저장 백엔드가 읽기 전용입니다. 자세한 이유는 다음과 같습니다: “$2”',
 'backend-fail-synced'        => '파일 "$1"은 내부 저장 백엔드에 불안정한 상태로 있습니다.',
 'backend-fail-connect'       => "'$1' 저장 백엔드에 접속하지 못했습니다.",
@@ -2073,8 +2077,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'notargettext'            => '기능을 수행할 대상 문서나 사용자를 지정하지 않았습니다.',
 'nopagetitle'             => '해당 문서 없음',
 'nopagetext'              => '당신이 찾는 문서는 존재하지 않습니다.',
-'pager-newer-n'           => '이ì \84 $1ê°\9c',
-'pager-older-n'           => '다음 $1개',
+'pager-newer-n'           => '이í\9b\84 $1ê°\9c',
+'pager-older-n'           => '이전 $1개',
 'suppress'                => '오버사이트',
 'querypage-disabled'      => '이 특수 문서는 성능상의 이유로 비활성화되었습니다.',
 
@@ -2936,10 +2940,11 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-summary'                     => '짧은 편집 요약을 적어주세요',
 
 # Stylesheets
-'common.css'   => '/** 이 CSS 설정은 모든 스킨에 적용됩니다 */',
+'common.css'   => '/** 이 CSS 설정은 모든 스킨에 동일하게 적용됩니다 */',
 'monobook.css' => '/* 이 CSS 설정은 모든 모노북 스킨에 적용됩니다 */',
 'modern.css'   => '/* 이 CSS 설정은 모든 모던 스킨에 적용됩니다 */',
 'vector.css'   => '/* 이 CSS 설정은 모든 벡터 스킨에 적용됩니다 */',
+'print.css'    => '/* 이 CSS 설정은 출력/인쇄 화면에 적용됩니다. */',
 
 # Scripts
 'common.js'   => '/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */',
@@ -3582,16 +3587,16 @@ $5
 'confirm-unwatch-top'    => '이 문서를 주시문서 목록에서 뺄까요?',
 
 # Multipage image navigation
-'imgmultipageprev' => 'â\86\90 ì\9d´ì \84 페이지',
-'imgmultipagenext' => 'ë\8b¤ì\9d\8c 페이지 →',
+'imgmultipageprev' => 'â\86\90 ì\95\9e 페이지',
+'imgmultipagenext' => 'ë\92¤ 페이지 →',
 'imgmultigo'       => '이동',
 'imgmultigoto'     => '$1 페이지로 가기',
 
 # Table pager
 'ascending_abbrev'         => '오름차순',
 'descending_abbrev'        => '내림차순',
-'table_pager_next'         => 'ë\8b¤ì\9d\8c 문서',
-'table_pager_prev'         => 'ì\9d´ì \84 문서',
+'table_pager_next'         => 'ë\92¤ì\9d\98 문서',
+'table_pager_prev'         => 'ì\95\9eì\9d\98 문서',
 'table_pager_first'        => '처음 문서',
 'table_pager_last'         => '마지막 문서',
 'table_pager_limit'        => '문서당 $1개 항목 보이기',
index cf344b8..66d6ef8 100644 (file)
@@ -68,7 +68,7 @@ $messages = array(
 'tog-enotifminoredits'        => 'E-mail бла гитче тюрлениуле огъуна болсалада бирдир',
 'tog-enotifrevealaddr'        => 'E-mail адресими билдириу письмолада кёргюз',
 'tog-shownumberswatching'     => 'Бетни, кёзде тургъан тизмелерине къошханланы санын кёргюз',
-'tog-oldsig'                  => 'Болгъан къол салыугъа ал къарау:',
+'tog-oldsig'                  => 'Бусагъатдагъы къол салыннган:',
 'tog-fancysig'                => 'Энчи вики-тексти къол салыуну (автомат джибериусюз)',
 'tog-externaleditor'          => 'Тынгылау бла тыш редакторну хайырландырыу (къуру усталагъа, компьютерни энчи джарашдырылыуу керекди; [//www.mediawiki.org/wiki/Manual:External_editors толуракъ])',
 'tog-externaldiff'            => 'Версияланы тенглешдириучу тыш программа хайырландырыу  (къуру усталагъа, компьютерни энчи джарашдырылыуу керекди; [//www.mediawiki.org/wiki/Manual:External_editors толуракъ])',
@@ -195,7 +195,7 @@ $messages = array(
 'vector-action-move'             => 'Атын ауушдур',
 'vector-action-protect'          => 'Джакъла',
 'vector-action-undelete'         => 'Къайтар',
-'vector-action-unprotect'        => 'Джакълауну кетер',
+'vector-action-unprotect'        => 'Джакълауну тюрлендир',
 'vector-simplesearch-preference' => 'Кенглешген излеуде болушлукъланы джандыр (къуру Вектор мотив ючюн)',
 'vector-view-create'             => 'Къура',
 'vector-view-edit'               => 'Тюрлендир',
@@ -232,8 +232,8 @@ $messages = array(
 'protect'           => 'Джакъла',
 'protect_change'    => 'тюрлендир',
 'protectthispage'   => 'Бу бетни джакъла',
-'unprotect'         => 'Джакълауну кетер',
-'unprotectthispage' => 'Ð\91Ñ\83 Ð±ÐµÑ\82ден Ð´Ð¶Ð°ÐºÑ\8aлаÑ\83нÑ\83 ÐºÐµÑ\82ер',
+'unprotect'         => 'Джакълауну тюрлендир',
+'unprotectthispage' => 'Ð\91Ñ\83 Ð±ÐµÑ\82ни Ð´Ð¶Ð°ÐºÑ\8aлаÑ\83Ñ\83н Ñ\82Ñ\8eÑ\80лендир',
 'newpage'           => 'Джангы бет',
 'talkpage'          => 'Бу бетни сюз',
 'talkpagelinktext'  => 'сюзюу',
@@ -1131,12 +1131,12 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'group-suppress'      => 'Ревизорла',
 'group-all'           => '(бютеу)',
 
-'group-user-member'          => 'Къошулуучу',
-'group-autoconfirmed-member' => 'Автомат бегитилген къошулуучу',
-'group-bot-member'           => 'бот',
-'group-sysop-member'         => 'администратор',
-'group-bureaucrat-member'    => 'бюрократ',
-'group-suppress-member'      => 'ревизор',
+'group-user-member'          => '{{GENDER:$1|къошулуучу}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|автомат бегитилген къошулуучу}}',
+'group-bot-member'           => '{{GENDER:$1|бот}}',
+'group-sysop-member'         => '{{GENDER:$1|администратор}}',
+'group-bureaucrat-member'    => '{{GENDER:$1|бюрократ}}',
+'group-suppress-member'      => '{{GENDER:$1|ревизор}}',
 
 'grouppage-user'          => '{{ns:project}}:Къошулуучула',
 'grouppage-autoconfirmed' => '{{ns:project}}:Автомат бегитилген къошулуучула',
index fca2308..ef56d3c 100644 (file)
@@ -9,12 +9,28 @@
  *
  * @author AidaBishkek
  * @author Aidabishkek
+ * @author Ztimur
  */
 
 $messages = array(
+# User preference toggles
+'tog-underline'      => 'Шилтемелердин алдын сызуу:',
+'tog-justify'        => 'Тексти барактын жазысы боюнча түздөө',
+'tog-hideminor'      => 'Соңку өзгөрүүлөрдө, майда өзгөрүүлөрдү жашыруу',
+'tog-usenewrc'       => 'Акыркы өзгөрүүлөрдүн жакшыртылган тизмесин колдонуу (JavaScript талап кылынат)',
+'tog-numberheadings' => 'Башсаптарды автоматтык түрдө номурлоо',
+'tog-showtoolbar'    => 'Оңдоо учурунда аспаптар тактасын көрсөтүү (JavaScript талап кылынат)',
+'tog-editondblclick' => 'Кош чертүү менен баракты оңдоо (JavaScript талап кылынат)',
+'tog-editsection'    => 'Ар бир секция үчүн «оңдоо» шилтемеси',
+
 'underline-always' => 'Ар дайым',
 'underline-never'  => 'Эч качан',
 
+# Font style option in Special:Preferences
+'editfont-style'     => 'Оңдоо талаасынын арибинин стили:',
+'editfont-default'   => 'Аралагычтын арибин клдонуу',
+'editfont-monospace' => 'Моножазы ариби',
+
 # Dates
 'sunday'        => 'Жекшемби',
 'monday'        => 'Дүйшөмбү',
@@ -68,38 +84,53 @@ $messages = array(
 'dec'           => 'Дек',
 
 # Categories related messages
-'pagecategories'         => '{{PLURAL:$1|Категория|Категориялар}}',
-'category_header'        => '"$1" категориядагы барактар',
-'subcategories'          => 'Көмөк категориялар',
-'category-media-header'  => '"$1" категориясындагы медиафайлдар',
-'category-empty'         => "''Бул категорияда азыр эч бир барак же файл жок.''",
-'hidden-categories'      => '{{PLURAL:$1|Жашырылган категория|Жашырылган категориялар}}',
-'category-subcat-count'  => '{{PLURAL:$2|Бул категория төмөнкү көмөк категорияны камтыйт.|Бул категорияда жалпы $2, {{PLURAL:$1|көмөк категория|$1 көмөк категория}} бар.}}',
-'category-article-count' => '{{PLURAL:$2|Бул категория төмөнкү баракты камтыйт.|Бул категорияда жалпы $2, төмөнкү {{PLURAL:$1|барак|$1 барак}} бар.}}',
-'category-file-count'    => '{{PLURAL:$2|Бул категория төмөнкү файлды камтыйт.|Бул категорияда жалпы $2, төмөнкү {{PLURAL:$1|файл|$1 файл}} бар.}}',
-'listingcontinuesabbrev' => 'уланд.',
-'noindex-category'       => 'Иреттелбеген барактар',
-
-'about'      => 'Тууралуу',
-'newwindow'  => '(жаңы терезеде ачылат)',
-'cancel'     => 'Жокко чыгар',
-'mypage'     => 'Барагым',
-'mytalk'     => 'Талкуум',
-'navigation' => 'Багыттоо',
-'and'        => '&#32;жана',
+'pagecategories'                 => '{{PLURAL:$1|Категория|Категориялар}}',
+'category_header'                => '"$1" категориядагы барактар',
+'subcategories'                  => 'Көмөк категориялар',
+'category-media-header'          => '"$1" категориясындагы медиафайлдар',
+'category-empty'                 => "''Бул категорияда азыр эч бир барак же файл жок.''",
+'hidden-categories'              => '{{PLURAL:$1|Жашырылган категория|Жашырылган категориялар}}',
+'hidden-category-category'       => 'Жашырылган категориялар',
+'category-subcat-count'          => '{{PLURAL:$2|Бул категория төмөнкү көмөк категорияны камтыйт.|Бул категорияда жалпы $2, {{PLURAL:$1|көмөк категория|$1 көмөк категория}} бар.}}',
+'category-subcat-count-limited'  => 'Бул категорияда {{PLURAL:$1|$1|$1|$1}} ички категория бар.',
+'category-article-count'         => '{{PLURAL:$2|Бул категория төмөнкү баракты камтыйт.|Бул категорияда жалпы $2, төмөнкү {{PLURAL:$1|барак|$1 барак}} бар.}}',
+'category-article-count-limited' => 'Бул категорияда $1 барак бар.',
+'category-file-count'            => '{{PLURAL:$2|Бул категория төмөнкү файлды камтыйт.|Бул категорияда жалпы $2, төмөнкү {{PLURAL:$1|файл|$1 файл}} бар.}}',
+'category-file-count-limited'    => 'Бул категорияда {{PLURAL:$1|$1|$1|$1}} файл бар.',
+'listingcontinuesabbrev'         => 'уланд.',
+'index-category'                 => 'Индекстелген барактар',
+'noindex-category'               => 'Иреттелбеген барактар',
+'broken-file-category'           => 'Файлдарга туура эмес шилтемелүү барактар',
+
+'about'         => 'Тууралуу',
+'article'       => 'Макала',
+'newwindow'     => '(жаңы терезеде ачылат)',
+'cancel'        => 'Жокко чыгар',
+'moredotdotdot' => 'Уландысы...',
+'mypage'        => 'Барагым',
+'mytalk'        => 'Талкуум',
+'anontalk'      => 'Бул IP дарек үчүн талкуу',
+'navigation'    => 'Багыттоо',
+'and'           => '&#32;жана',
 
 # Cologne Blue skin
-'qbedit'        => 'Оңдоо',
-'qbpageoptions' => 'Бул барак',
-'qbpageinfo'    => 'Контекст',
-'qbmyoptions'   => 'Барактарым',
-'faq'           => 'КБС',
+'qbfind'         => 'Издөө',
+'qbbrowse'       => 'Кароо',
+'qbedit'         => 'Оңдоо',
+'qbpageoptions'  => 'Бул барак',
+'qbpageinfo'     => 'Контекст',
+'qbmyoptions'    => 'Барактарым',
+'qbspecialpages' => 'Атайын барактар',
+'faq'            => 'КБС',
+'faqpage'        => 'Project:КБС',
 
 # Vector skin
 'vector-action-addsection' => 'Тема кошумчала',
 'vector-action-delete'     => 'Өчүр',
 'vector-action-move'       => 'Аталышын өзгөрт',
 'vector-action-protect'    => 'Корго',
+'vector-action-undelete'   => 'Калыбына келтирүү',
+'vector-action-unprotect'  => 'Коргоону өзгөртүү',
 'vector-view-create'       => 'Башта',
 'vector-view-edit'         => 'Оңдо',
 'vector-view-history'      => 'Тарыхын кара',
@@ -121,22 +152,42 @@ $messages = array(
 'history_short'    => 'Тарыхы',
 'printableversion' => 'Басма үлгүсү',
 'permalink'        => 'Туруктуу шилтеме',
+'print'            => 'Басып чыгаруу',
+'view'             => 'Кароо',
 'edit'             => 'Оңдоо',
 'create'           => 'Башта',
 'editthispage'     => 'Бул баракты оңдо',
+'create-this-page' => 'Бул баракты түзүү',
 'delete'           => 'Өчүрүү',
 'deletethispage'   => 'Бул баракты өчүрүп кой',
 'protect'          => 'Коргоо',
 'protect_change'   => 'өзгөрт',
+'protectthispage'  => 'Бул баракты коргоо',
+'unprotect'        => 'Коргоону өзгөртүү',
 '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'        => 'Бул барак {{PLURAL:$1|$1|$1}} жолу ачылды.',
+'protectedpage'    => 'Корголгон барак',
 'jumpto'           => 'Атта:',
 'jumptonavigation' => 'багыттоо',
 'jumptosearch'     => 'издөө',
@@ -190,17 +241,30 @@ $messages = array(
 'nstab-category'  => 'Категория',
 
 # General errors
-'error'              => 'Жаңылыш',
-'missing-article'    => 'Табылууга тийиш «$1» $2 деп аталган баракта текст маалыматтар базасында табылган жок.
+'error'                => 'Жаңылыш',
+'missing-article'      => 'Табылууга тийиш «$1» $2 деп аталган баракта текст маалыматтар базасында табылган жок.
 
 Бул сыяктуу абал өчүрүлгөн барактын өзгөрүүлөрдүн тарыхына эски шилтеме менен өткөндө учурайт.
 
 Эгерде башка себеби бар болсо, анда Сиз программалык жабдууда ката таптыңыз. Кичи пейилдикке, ушул URL көрсөтүп [[Special:ListUsers/sysop|администраторлордун]] бирине кабарлап коюңуз.',
-'missingarticle-rev' => '(версия#: $1)',
-'badtitle'           => 'Ыксыз аталыш',
-'badtitletext'       => 'Талап кылынган барак аталышы туура эмес, бош, же тилдер-аралык же уики-аралык аталышы туура эмес шилтемеленген.
+'missingarticle-rev'   => '(версия#: $1)',
+'internalerror'        => 'Ички ката',
+'internalerror_info'   => 'Ички ката: $1',
+'fileappenderrorread'  => 'Аягына кошуу үчүн «$1» файлы ачылбады.',
+'fileappenderror'      => '"$1" файлы "$2" файлынын аягына кошулбады.',
+'filecopyerror'        => '"$1" файлы "$2" файлына көчүрүлбөдү.',
+'filedeleteerror'      => '"$1" файлын өчүрүүгө болбоду.',
+'directorycreateerror' => '"$1" каталогун түзүүгө болбоду.',
+'filenotfound'         => '"$1" файлы табылбады.',
+'fileexistserror'      => '"$1" файлына жазууга болбоду: Мурдатан бар.',
+'unexpected'           => 'Күтүлбөгөн маани: "$1"="$2".',
+'formerror'            => 'Ката: Форманы жөнөтүүгө болбоду.',
+'badarticleerror'      => 'Бул аракетти бул баракта аткарууга болбой.',
+'cannotdelete-title'   => '"$1" барагын өчүрүүгө болбойт',
+'badtitle'             => 'Ыксыз аталыш',
+'badtitletext'         => 'Талап кылынган барак аталышы туура эмес, бош, же тилдер-аралык же уики-аралык аталышы туура эмес шилтемеленген.
 Балким аталышта колдонулбай турган бир же андан көп белги камтылган.',
-'viewsource'         => 'Байкоо',
+'viewsource'           => 'Байкоо',
 
 # Login and logout pages
 'welcomecreation'         => '== Кош келиңиз, $1! ==
index 8cea264..34b1f4f 100644 (file)
@@ -212,7 +212,7 @@ $messages = array(
 'tog-nolangconversion'        => 'Ëmwandlung vu Sproochvarianten ausschalten',
 'tog-ccmeonemails'            => 'Schéck mir eng Kopie vun de Mailen, déi ech anere Benotzer schécken.',
 'tog-diffonly'                => "Weis bei Versiounsvergläicher just d'Ënnerscheeder an net déi ganz Säit",
-'tog-showhiddencats'          => 'Verstoppte Kategorië weisen',
+'tog-showhiddencats'          => 'Verstoppt Kategorië weisen',
 'tog-noconvertlink'           => 'Ëmwandlung vum Titel desaktivéieren',
 'tog-norollbackdiff'          => 'Ënnerscheed nom Zrécksetzen ënnerdrécken',
 
@@ -286,7 +286,7 @@ $messages = array(
 'category-media-header'          => 'Medien an der Kategorie "$1"',
 'category-empty'                 => "''Dës Kategorie ass fir den Ament eidel''",
 'hidden-categories'              => '{{PLURAL:$1|Verstoppt Kategorie|Verstoppt Kategorien}}',
-'hidden-category-category'       => 'Verstoppte Kategorien',
+'hidden-category-category'       => 'Verstoppt Kategorien',
 'category-subcat-count'          => 'Dës Kategorie huet {{PLURAL:$2|nëmmen dës Ënnerkategorie.|dës {{PLURAL:$1|Ënnerkategorie|$1 Ënnerkategorien}}, vu(n) $2 am Ganzen.}}',
 'category-subcat-count-limited'  => 'Dës Kategorie huet dës {{PLURAL:$1|Ënnerkategorie|$1 Ënnerkategorien}}.',
 'category-article-count'         => 'An dëser Kategorie {{PLURAL:$2|ass just dës Säit.|{{PLURAL:$1|ass just dës Säit|si(nn) $1 Säiten}}, vu(n) $2 am Ganzen.}}',
@@ -530,7 +530,7 @@ Et ka sinn datt et scho vun engem Anere geläscht gouf.',
 'badtitle'             => 'Schlechten Titel',
 'badtitletext'         => 'De gewënschten Titel ass net valabel, eidel, oder een net korrekten Interwiki Link.',
 'perfcached'           => 'Dës Date kommen aus dem Tëschespäicher a si méiglecherweis net aktuell. Maximal {{PLURAL:$1|ee Resultat ass|$1 Resultater sinn}} am Tësche späicher disponibel.',
-'perfcachedts'         => "Dës Donnéeë kommen aus dem Tësche späicher, a goufe fir d'lescht den $1 aktualiséiert. Maximal {{PLURAL:$4|ee Resultat ass|$4 Resultater sinn}} am Tësche späicher disponibel.",
+'perfcachedts'         => "Dës Donnéeë kommen aus dem Tëschespäicher, a goufe fir d'lescht den $1 aktualiséiert. Maximal {{PLURAL:$4|ee Resultat ass|$4 Resultater sinn}} am Tëschespäicher disponibel.",
 'querypage-no-updates' => "D'Aktualiséierung vun dëser Säit ass zur Zäit ausgeschalt. D'Date gi bis op weideres net aktualiséiert.'''",
 'wrong_wfQuery_params' => 'Falsche Parameter fir wfQuery()<br />
 Funktioun: $1<br />
@@ -576,7 +576,7 @@ Denkt drun, Är [[Special:Preferences|{{SITENAME}}-Astellungen]] unzepassen.',
 'externaldberror'            => 'Entweder ass e Feeler bei der externer Authentifizéierung geschitt, oder Dir däerft Ären externe Benotzerkont net aktualiséieren.',
 'login'                      => 'Umellen',
 'nav-login-createaccount'    => 'Aloggen / Benotzerkont uleeën',
-'loginprompt'                => "Fir sech op {{SITENAME}} umellen ze kënnen, mussen d'Cookien aktivéiert sinn.",
+'loginprompt'                => "Fir sech op {{SITENAME}} aloggen ze kënnen, mussen d'Cookien aktivéiert sinn.",
 'userlogin'                  => 'Aloggen / Benotzerkont uleeën',
 'userloginnocreate'          => 'Umellen',
 'logout'                     => 'Ofmellen',
@@ -599,7 +599,9 @@ Sicht Iech een anere Benotzernumm.',
 {{SITENAME}} brauch fir dës Funktioun Cookien.
 Dir hutt d'Cookien desaktivéiert.
 Aktivéiert déi w.e.g. a loggt Iech da mat Ärem neie Benotzernomm a mat dem respektive Passwuert an.",
-'nocookieslogin'             => "{{SITENAME}} benotzt Cookië beim Umelle vun de Benotzer. Dir hutt Cookien ausgeschalt, w.e.g aktivéiert d'Cookien a versicht et nach eng Kéier.",
+'nocookieslogin'             => "{{SITENAME}} benotzt Cookië beim Umelle vun de Benotzer.
+Dir hutt Cookien ausgeschalt.
+Aktivéiert d'Cookien w.e.g. a versicht et nach eng Kéier.",
 'nocookiesfornew'            => 'De Benotzerkont gouf net ugeluecht, well mir seng Quell net bestëmme konnten.
 Vergewëssert Iech datt Dir Cookien zouloosst, luet dës Säit nei a probéiert nach emol.',
 'noname'                     => 'Dir hutt kee gëltege Benotzernumm uginn.',
@@ -613,7 +615,8 @@ Kuckt w.e.g. op d\'Schreifweis richteg ass.',
 'nouserspecified'            => 'Gitt w.e.g. e Benotzernumm un.',
 'login-userblocked'          => 'Dëse Benotzer ass gespaart. Aloggen ass net erlaabt.',
 'wrongpassword'              => 'Dir hutt e falscht (oder kee) Passwuert aginn. Probéiert w.e.g. nach eng Kéier.',
-'wrongpasswordempty'         => "D'Passwuert dat Dir aginn hutt war eidel. Probéiert w.e.g. nach eng Kéier.",
+'wrongpasswordempty'         => "D'Passwuert dat Dir aginn hutt war eidel.
+Probéiert w.e.g. nach eng Kéier.",
 'passwordtooshort'           => 'Passwierder musse mindestens {{PLURAL:$1|1 Zeeche|$1 Zeeche}} laang sinn.',
 'password-name-match'        => 'Äert Passwuert muss verschidde vun Ärem Benotzernumm sinn.',
 'password-login-forbidden'   => "D'Benotze vun dësem Benotzernumm a Passwuert gouf verbueden.",
@@ -670,7 +673,8 @@ Fir är Umeldung ofzeschléissen, musst Dir elo hei een neit Passwuert uginn:',
 'newpassword'               => 'Neit Passwuert:',
 'retypenew'                 => 'Neit Passwuert nach eemol antippen:',
 'resetpass_submit'          => 'Passwuert aginn an umellen',
-'resetpass_success'         => 'Äert Passwuert gouf geännert. Loggt Iech elo an ...',
+'resetpass_success'         => 'Äert Passwuert gouf geännert!
+Loggt Iech elo an ...',
 'resetpass_forbidden'       => 'Passwierder kënnen net geännert ginn.',
 'resetpass-no-info'         => 'Dir musst ageloggt sinn, fir direkt op dës Säit ze kommen.',
 'resetpass-submit-loggedin' => 'Passwuert änneren',
@@ -784,9 +788,9 @@ Gitt dës Donnéeë w.e.g bei allen Ufroen zu dëser Spär un.',
 'whitelistedittext'                => 'Dir musst Iech $1, fir Säiten änneren ze kënnen.',
 'confirmedittext'                  => 'Dir musst är E-Mail-Adress confirméieren, ier Dir Ännerunge maache kënnt.
 Gitt w.e.g. eng E-Mailadrss a validéiert se op äre [[Special:Preferences|Benotzerastellungen]].',
-'nosuchsectiontitle'               => 'Et gëtt keen esou enn Abschnitt',
-'nosuchsectiontext'                => "Dir hutt versicht een Abschnitt z'änneren den et net gëtt.
-Et ka sinn datt e geännert oder geläscht gouf iwwerdm wou Dir d'Säit gekuckt hutt.",
+'nosuchsectiontitle'               => 'Et gëtt keen esou en Abschnitt',
+'nosuchsectiontext'                => "Dir hutt versicht en Abschnitt z'änneren deen et net gëtt.
+Et ka sinn datt e geännert oder geläscht gouf iwwerdeems wou Dir d'Säit gekuckt hutt.",
 'loginreqtitle'                    => 'Umeldung néideg',
 'loginreqlink'                     => 'aloggen',
 'loginreqpagetext'                 => 'Dir musst Iech $1, fir aner Säite liesen zu kënnen.',
@@ -818,7 +822,8 @@ Déi lescht Entrée am Logbuch vun de Späre steet als Referenz hei drënner:',
 'userjsyoucanpreview'              => "'''Tipp:''' Benotzt de ''{{int:showpreview}}''-Knäppchen, fir Ären neie JavaScript virum Späicheren ze testen.",
 'usercsspreview'                   => "'''Bedenkt: Dir kuckt just är Benotzer CSS.
 Si gouf nach net gespäichert!'''",
-'userjspreview'                    => "'''Denkt drun datt Dir äre Javascript nëmmen test, nach ass näischt gespäichert!'''",
+'userjspreview'                    => "'''Denkt drun datt Dir Äre Javascript nëmmen test.'''
+'''En ass nach net gespäichert!'''",
 'sitecsspreview'                   => "'''Denkt drun datt Dir dësen CSS just kuckt.
 E gouf nach net gespäichert!'''",
 'sitejspreview'                    => "'''Denkt drun datt Dir dëse JavaScript-Code just kuckt.
@@ -900,9 +905,9 @@ Si gouf anscheinend geläscht.",
 'edit-already-exists'              => 'Déi nei Säit konnt net ugeluecht ginn, well et se scho gëtt.',
 
 # Parser/template warnings
-'expensive-parserfunction-warning'        => 'Opgepasst: Dës Säit huet zevill Ufroe vu komplexe Parserfunktiounen.
+'expensive-parserfunction-warning'        => "'''Opgepasst:'' Dës Säit huet ze vill Ufroe vu komplexe Parserfunktiounen.
 
-Et däerfen net méi wéi $2 {{PLURAL:$2|Ufro|Ufroe}} sinn, aktuell {{PLURAL:$2|ass et $1 Ufro|sinn et $1 Ufroe}}.',
+Et däerfen net méi wéi $2 {{PLURAL:$2|Ufro|Ufroe}} sinn, aktuell {{PLURAL:$2|ass et $1 Ufro|sinn et $1 Ufroe}}.",
 'expensive-parserfunction-category'       => 'Säiten, déi komplex Parserfunktiounen ze dacks opruffen',
 'post-expand-template-inclusion-warning'  => "Opgepasst: D'Gréisst vun den agebonnene Schablounen ass ze grouss, e puer Schabloune kënnen net agebonne ginn.",
 'post-expand-template-inclusion-category' => "Säiten, op denen d'maximal Gréist vun agebonnene Schablounen iwwerschratt ass",
@@ -932,7 +937,7 @@ De Benotzer $3 huet "$2" als Grond uginn.',
 'revisionasof'           => 'Versioun vum $1',
 'revision-info'          => 'Versioun vum $1 vum $2.',
 'previousrevision'       => '← Méi al Versioun',
-'nextrevision'           => 'Méi rezent Ännerung→',
+'nextrevision'           => 'Méi rezent Versioun →',
 'currentrevisionlink'    => 'Aktuell Versioun',
 'cur'                    => 'aktuell',
 'next'                   => 'nächst',
@@ -1121,7 +1126,7 @@ Denkt w.e.g drunn datt d'Navigatiounslinken d'Wiel vun de Versiounen nees zréck
 'searchmenu-legend'                => 'Sichoptiounen',
 'searchmenu-exists'                => "* Säit '''[[$1]]'''",
 'searchmenu-new'                   => "'''Opmaache vun der Säit ''[[:$1|$1]]'' op dëser Wiki!'''",
-'searchhelp-url'                   => 'Help:Hëllef',
+'searchhelp-url'                   => 'Help:Inhalter',
 'searchmenu-prefix'                => '[[Special:PrefixIndex/$1|All Säite weisen, déi mat dem Begrëff ufänken nodeem Dir sicht]]',
 'searchprofile-articles'           => 'Säite mat Inhalt',
 'searchprofile-project'            => 'Hëllef a Projetssäiten',
@@ -1355,7 +1360,7 @@ Si muss manner wéi $1 {{PLURAL:$1|Zeechen|Zeechen}} hunn.',
 'right-reupload'              => 'E Fichier iwwerschreiwen',
 'right-reupload-own'          => 'E Fichier iwwerschreiwen deen Dir selwer eropgelueden hutt',
 'right-reupload-shared'       => 'Lokalt Iwwerschreiwe vun engem Fichier deen an engem gemeinsam benotzte Repertoire steet',
-'right-upload_by_url'         => 'E Fichier vun enger URL-Adress eroplueden',
+'right-upload_by_url'         => 'Fichiere vun enger URL-Adress eroplueden',
 'right-purge'                 => 'De Säitecache eidel maachen ouni nozefroen',
 'right-autoconfirmed'         => 'Hallef-gespaarte Säiten änneren',
 'right-bot'                   => 'Als automatesche Prozess behandelen (Bot)',
@@ -1382,7 +1387,7 @@ Si muss manner wéi $1 {{PLURAL:$1|Zeechen|Zeechen}} hunn.',
 'right-editinterface'         => 'De Benotzerinterface änneren',
 'right-editusercssjs'         => 'Anere Benotzer hir CSS a JS Fichieren änneren',
 'right-editusercss'           => 'Anere Benotzer hir CSS Fichieren änneren',
-'right-edituserjs'            => 'Anere Benotzer hir JS Fichieren änneren',
+'right-edituserjs'            => 'Anere Benotzer hir JavaScript Fichieren änneren',
 'right-rollback'              => "Ännerunge vum läschte Benotzer vun enger spezieller Säit séier z'récksetzen ''(rollback)''",
 'right-markbotedits'          => 'Annuléiert Ännerungen als Botännerunge weisen',
 'right-noratelimit'           => 'Net limitéiert duerch Zäitlimitatiounen um Server',
@@ -1428,7 +1433,7 @@ Si muss manner wéi $1 {{PLURAL:$1|Zeechen|Zeechen}} hunn.',
 'action-deletedhistory'       => "d'Lëscht vun de geläschte Versiounen ze gesinn",
 'action-browsearchive'        => 'no geläschte Säiten ze sichen',
 'action-undelete'             => 'dës Säit ze restauréieren',
-'action-suppressrevision'     => 'déi verstoppte Versioun kucken a restauréieren',
+'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',
@@ -1456,7 +1461,7 @@ Si muss manner wéi $1 {{PLURAL:$1|Zeechen|Zeechen}} hunn.',
 'recentchanges-label-unpatrolled'   => 'Dës Ännerung gouf nach net nogekuckt',
 'rcnote'                            => "Hei {{PLURAL:$1|ass déi lescht Ännerung|sinn déi lescht '''$1''' Ännerungen}} {{PLURAL:$2|vum leschten Dag|vun de leschten '''$2''' Deeg}}, Stand: $4 ëm $5 Auer.",
 'rcnotefrom'                        => "Ugewise ginn d'Ännerunge vum '''$2''' un (maximal '''$1''' Ännerunge gi gewisen).",
-'rclistfrom'                        => 'Ännerunge vu(n) $1 u weisen',
+'rclistfrom'                        => 'Nei Ännerunge vu(n) $1 u weisen',
 'rcshowhideminor'                   => 'Kleng Ännerunge $1',
 'rcshowhidebots'                    => 'Botte $1',
 'rcshowhideliu'                     => 'Ugemellte Benotzer $1',
@@ -1466,7 +1471,7 @@ Si muss manner wéi $1 {{PLURAL:$1|Zeechen|Zeechen}} hunn.',
 'rclinks'                           => 'Déi lescht $1 Ännerunge vun de leschten $2 Deeg weisen.<br />$3',
 'diff'                              => 'Ënnerscheed',
 'hist'                              => 'Versiounen',
-'hide'                              => 'verstoppen',
+'hide'                              => 'Verstoppen',
 'show'                              => 'weisen',
 'minoreditletter'                   => 'k',
 'newpageletter'                     => 'N',
@@ -1479,6 +1484,7 @@ Si muss manner wéi $1 {{PLURAL:$1|Zeechen|Zeechen}} hunn.',
 'newsectionsummary'                 => 'Neien Abschnitt /* $1 */',
 'rc-enhanced-expand'                => 'Detailer weisen (erfuedert JavaScript)',
 'rc-enhanced-hide'                  => 'Detailer verstoppen',
+'rc-old-title'                      => 'original als "$1" ugeluecht',
 
 # Recent changes linked
 'recentchangeslinked'          => 'Ännerungen op verlinkte Säiten',
@@ -1885,7 +1891,7 @@ An all Rei sti Linken zur éischter an zweeter Viruleedung, souwéi d\'Zil vun d
 'unusedcategories'        => 'Onbenotzte Kategorien',
 'unusedimages'            => 'Onbenotzte Biller',
 'popularpages'            => 'Populär Säiten',
-'wantedcategories'        => 'Gewënschte Kategorien',
+'wantedcategories'        => 'Gewënscht Kategorien',
 'wantedpages'             => 'Gewënschte Säiten',
 'wantedpages-badtitle'    => 'Net valabelen Titel am Resultat: $1',
 'wantedfiles'             => 'Gewënschte Fichieren',
@@ -1917,12 +1923,12 @@ An all Rei sti Linken zur éischter an zweeter Viruleedung, souwéi d\'Zil vun d
 'usercreated'             => "{{GENDER:$3|De(n)|D'}} $1 ëm $2 Auer ugeluecht",
 'newpages'                => 'Nei Säiten',
 'newpages-username'       => 'Benotzernumm:',
-'ancientpages'            => 'Al Säiten',
+'ancientpages'            => 'Eelste Säiten',
 'move'                    => 'Réckelen',
 'movethispage'            => 'Dës Säit réckelen',
 'unusedimagestext'        => 'Dës Fichieren gëtt et, si sinn awer a kenger Säit agebonn.
 Denkt w.e.g. drunn datt aner Internetsäiten dëse Fichier mat enger direkter URL verlinke kënnen. An dem Fall gëtt de Fichier hei opgelëscht obwuel en aktiv gebraucht gëtt.',
-'unusedcategoriestext'    => 'Dës Kategoriesäiten existéieren, mee weder en Artikel nach eng Kategorie maachen dovunner Gebrauch.',
+'unusedcategoriestext'    => 'Dës Kategoriesäiten existéieren, mä weder en Artikel nach eng Kategorie maachen dovunner Gebrauch.',
 'notargettitle'           => 'Dir hutt keng Säit uginn.',
 'notargettext'            => 'Dir hutt keng Zilsäit oder keen Zilbenotzer uginn fir déi dës Funktioun ausgeféiert soll ginn.',
 'nopagetitle'             => 'Zilsäit gëtt et net',
@@ -1969,8 +1975,8 @@ Dir kënnt d'Siche limitéieren wann Dir e Log-Typ, e Benotzernumm (case-senisit
 # Special:Categories
 'categories'                    => 'Kategorien',
 'categoriespagetext'            => 'Dës {{PLURAL:$1|Kategorie huet|Kategorien hu}} Säiten oder Medien.
-[[Special:UnusedCategories|Netbenotze Kategorien]] ginn hei net gewisen.
-Kuckt och [[Special:WantedCategories|Gewënschte Kategorien]].',
+[[Special:UnusedCategories|Netbenotzt Kategorië]] ginn hei net gewisen.
+Kuckt och [[Special:WantedCategories|Gewënscht Kategorien]].',
 'categoriesfrom'                => 'Weis Kategorien ugefaang bei:',
 'special-categories-sort-count' => 'No der Zuel sortéieren',
 'special-categories-sort-abc'   => 'alphabetesch sortéieren',
@@ -2270,7 +2276,7 @@ Hei sinn déi aktuell Astellunge fir d'Säit '''$1''':",
 'undeletepage'                 => 'Geläschte Säite kucken a restauréieren',
 'undeletepagetitle'            => "'''Op dëser Lëscht sti geläschte Versioune vun [[:$1]]'''.",
 'viewdeletedpage'              => 'Geläschte Säite weisen',
-'undeletepagetext'             => "Dës {{PLURAL:$1|Säit gouf |Säite goufe}} geläscht mee sinn nach ëmmer am Archiv a kënne vun Administrateure restauréiert ginn. D'Archiv gëtt periodesch eidel gemaach.",
+'undeletepagetext'             => "Dës {{PLURAL:$1|Säit gouf |Säite goufe}} geläscht mä sinn nach ëmmer am Archiv a kënne vun Administrateure restauréiert ginn. D'Archiv gëtt periodesch eidel gemaach.",
 'undelete-fieldset-title'      => 'Versioune restauréieren',
 'undeleteextrahelp'            => "Fir d'Säit komplett mat alle Versiounen ze restauréieren, markéiert keng vun den eenzelne Casë mat engem Krop a klickt op '''''{{int:undeletebtn}}'''''.
 Fir nëmmen eng bestëmmte Versioun vun der Säit ze restauréieren, markéiert d'Case vun der gewënschter Versioun mat engem Krop, a klickt duerno op '''''{{int:undeletebtn}}'''''.",
@@ -2470,7 +2476,7 @@ Kuckt d'[[Special:BlockList|IP Spärlëscht]] fir déi aktuell Spären.",
 'block-log-flags-hiddenname'      => 'Benotzernumm verstoppt',
 'range_block_disabled'            => 'Dem Administrateur seng Fähegkeet fir ganz Adressberäicher ze spären ass ausser Kraaft.',
 'ipb_expiry_invalid'              => "D'Dauer déi Dir uginn hutt ass ongülteg.",
-'ipb_expiry_temp'                 => 'Verstoppte Späre vu Benotzernimm solle permanent sinn.',
+'ipb_expiry_temp'                 => 'Verstoppt Späre vu Benotzernimm solle permanent sinn.',
 'ipb_hide_invalid'                => 'Dëse Benotzerkont kann net geläscht ginn; et ka sinn datt zevill Ännerunge vun deem Benotzer gemaach goufen.',
 'ipb_already_blocked'             => '"$1" ass scho gespaart.',
 'ipb-needreblock'                 => "$1 ass scho gespaart. Wëllt Dir d'Parametere vun der Spär änneren?",
@@ -2584,7 +2590,9 @@ Wielt w.e.g. en aneren Numm.',
 'movereason'                   => 'Grond:',
 'revertmove'                   => 'zréck réckelen',
 'delete_and_move'              => 'Läschen a réckelen',
-'delete_and_move_text'         => '== Läsche vun der Destinatiounssäit néideg == D\'Säit "[[:$1]]" existéiert schonn. Wëll der se läsche fir d\'Réckelen ze erméiglechen?',
+'delete_and_move_text'         => '== Läsche vun der Destinatiounssäit néideg ==
+D\'Säit "[[:$1]]" existéiert schonn. 
+Wëll Dir se läsche fir d\'Réckelen ze erméiglechen?',
 'delete_and_move_confirm'      => "Jo, läsch d'Säit",
 'delete_and_move_reason'       => 'Geläscht fir Plaz ze maache fir "[[$1]]" heihin ze réckelen',
 'selfmove'                     => 'Source- an Destinatiounsnumm sinn dselwecht; eng Säit kann net op sech selwer geréckelt ginn.',
@@ -2904,7 +2912,7 @@ Duerch d'Opmaache vum Fichier kann Äre System beschiedegt ginn.",
 # Special:NewFiles
 'newimages'             => 'Gallerie vun den neie Biller',
 'imagelisttext'         => "Hei ass eng Lëscht vu(n) '''$1''' {{PLURAL:$1|Fichier|Fichieren}}, zortéiert $2.",
-'newimages-summary'     => 'Dës Spezialsäit weist eng Lëscht mat de Biller a Fichieren déi als läscht eropgeluede goufen.',
+'newimages-summary'     => 'Dës Spezialsäit weist eng Lëscht mat de Fichieren déi als lescht eropgeluede goufen.',
 'newimages-legend'      => 'Filter',
 'newimages-label'       => 'Numm vum Fichier (oder en Deel dovun):',
 'showhidebots'          => '($1 Botten)',
@@ -3327,7 +3335,7 @@ Déi aner sinn am Standard verstoppt.
 'exif-urgency-other'  => 'Benotzerdefinéiert Prioritéit ($1)',
 
 # External editor support
-'edit-externally'      => 'Dëse Fichier mat engem externe Programm veränneren',
+'edit-externally'      => 'Dëse Fichier mat engem externe Programm änneren',
 'edit-externally-help' => "(Fir gewuer ze gi wéi dat genee geet liest d'[//www.mediawiki.org/wiki/Manual:External_editors Installatiounsinstruktiounen].)",
 
 # 'all' in various places, this might be different for inflected languages
@@ -3597,7 +3605,7 @@ Den ugefrote Fichier gëtt direkt gewise respektiv mat enger verbonner Applikati
 'dberr-cachederror' => 'Dëst ass eng tëschegespäichert Kopie vun der gefroter Säit, a si kann eventuell net aktuell sinn.',
 
 # HTML forms
-'htmlform-invalid-input'       => 'Et gëtt Problemer mat de Wäerter déi dir aginn hutt.',
+'htmlform-invalid-input'       => 'Et gëtt Problemer mat de Wäerter déi Dir aginn hutt.',
 'htmlform-select-badoption'    => 'De Wäert deen Dir aginn hutt ass keng valabel Optioun.',
 'htmlform-int-invalid'         => 'De Wäert deen Dir aginn hutt ass keng ganz Zuel.',
 'htmlform-float-invalid'       => 'De Wäert deen Dir uginn hutt ass keng Zuel.',
@@ -3642,18 +3650,20 @@ Den ugefrote Fichier gëtt direkt gewise respektiv mat enger verbonner Applikati
 'newuserlog-byemail'                  => "d'Passwuert gouf per E-Mail geschéckt",
 
 # Feedback
-'feedback-subject'  => 'Sujet:',
-'feedback-message'  => 'Message:',
-'feedback-cancel'   => 'Ofbriechen',
-'feedback-submit'   => 'Feedback schécken',
-'feedback-adding'   => "Feedback gëtt bäi d'Säit derbäigesat...",
-'feedback-error1'   => 'Feeler: Resultat vum API gouf net erkannt',
-'feedback-error2'   => "Feeler: D'Ännerung gouf net gespäichert",
-'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-bugnew'   => 'Ech hunn et nogekuckt. Den neie Bug mellen',
+'feedback-bugornote' => 'Wann Dir bereet sidd fir en technesche Problem am Detail ze beschreiwen da [$1 mellt w.e.g. e Feeler (Bug)].
+Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gëtt op d\'Säit "[$3 $2]" derbäigesat, zesumme mat Ärem Benotzernumm an dem Numm vum Browser deen Dir benotzt.',
+'feedback-subject'   => 'Sujet:',
+'feedback-message'   => 'Message:',
+'feedback-cancel'    => 'Ofbriechen',
+'feedback-submit'    => 'Feedback schécken',
+'feedback-adding'    => "Feedback gëtt bäi d'Säit derbäigesat...",
+'feedback-error1'    => 'Feeler: Resultat vum API gouf net erkannt',
+'feedback-error2'    => "Feeler: D'Ännerung gouf net gespäichert",
+'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-bugnew'    => 'Ech hunn et nogekuckt. Den neie Bug mellen',
 
 # API errors
 'api-error-badaccess-groups'              => 'Et ass Iech net erlaabt fir Fichieren op dës Wiki eropzelueden.',
@@ -3692,4 +3702,15 @@ Den ugefrote Fichier gëtt direkt gewise respektiv mat enger verbonner Applikati
 'api-error-uploaddisabled'                => "D'Eroplueden ass op dëser Wiki ausgeschalt.",
 'api-error-verification-error'            => 'Dëse Fichier kéint korrupt sinn, oder en huet eng falsch Erweiderung.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|Sekonn|Sekonnen}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|Minutt|Minutten}}',
+'duration-hours'     => '$1 {{PLURAL:$1|Stonn|Stonnen}}',
+'duration-days'      => '$1 {{PLURAL:$1|Dag|Deeg}}',
+'duration-weeks'     => '$1 {{PLURAL: $1|Woch|Wochen}}',
+'duration-years'     => '$1 {{PLURAL:$1|Joer|Joer}}',
+'duration-decades'   => '$1 {{PLURAL:$1|Joerzéngt|Joerzéngten}}',
+'duration-centuries' => '$1 {{PLURAL:$1|Joerhonnert|Joerhonnerten}}',
+'duration-millennia' => '$1 {{PLURAL:$1|Millenaire|Millenairen}}',
+
 );
index 656bed3..5b5108e 100644 (file)
@@ -223,6 +223,7 @@ $messages = array(
 'helppage'             => 'Help:КЪене авайбур',
 'mainpage'             => 'КЬилин ччин',
 'mainpage-description' => 'КЬилин ччин',
+'policy-url'           => 'Project:КЪайдаяр',
 'portal'               => 'КIапIалдин портал',
 'portal-url'           => 'Project: КIапIалдин портал',
 'privacy'              => 'Чинебанвилин политика',
@@ -258,15 +259,22 @@ $messages = array(
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main'      => 'Ччин',
 'nstab-user'      => 'Иштиракчидин ччин',
+'nstab-media'     => 'Медия ччин',
 'nstab-special'   => 'Куьмекчи ччин',
 'nstab-project'   => 'Проектдин ччин',
 'nstab-image'     => 'Файл',
 'nstab-mediawiki' => 'Малумат',
 'nstab-template'  => 'Чешне',
+'nstab-help'      => 'Куьмекдин ччин',
 'nstab-category'  => 'Категория',
 
+# Main script and global functions
+'nosuchaction'      => 'Ихьтин кар авайд ттуш',
+'nosuchspecialpage' => 'Ихьтин куьмекчи ччин авайд ттуш',
+
 # General errors
 'error'              => 'Гъалатl',
+'databaseerror'      => 'Ганайбурун базадин гъалатI',
 'missing-article'    => 'Ганайбурун базади жугъуриз герек тир  "$1" $2 т!вар алай  ччиндин текст жагъанвач
 
 Ихьтин гьал адет яз алуднавай ччиндин дегишвилерин тарихдиз цlуру  рекьяй элячlайла арадал къвезва.
@@ -277,6 +285,7 @@ $messages = array(
 'badtitle'           => 'Ииже текъвер тIвар',
 'badtitletext'       => 'ТIалабзавай ччин  я вичел амал алачир я,  я  ичIи я,  ва я чIаларарадин ва я викиарадин кьилин цlарар чlурукlа къалурнава. Мумкин я, кьилин цlарара сад ва я адалай гзаф рехъ гун виже текъвер символар кардик кутунвайди я.',
 'viewsource'         => 'Килигун',
+'viewsource-title'   => '$1 патал чешмедиз килигун',
 
 # Virus scanner
 'virus-unknownscanner' => 'Малумтушир антивирус',
@@ -301,13 +310,34 @@ $messages = array(
 'userlogin-resetlink'     => 'Гьахьунин куьлуь-шуьлуьяр рикlел алатнани?',
 'createaccountmail'       => 'Э-чар галаз',
 'createaccountreason'     => 'Себеб:',
+'loginsuccesstitle'       => 'Агалкьунралди гьахьун',
 'mailmypassword'          => 'ЦIийи парол Э-мейлдиз къачун',
+'accountcreated'          => 'Аккаунт туькIуьрнава',
 'loginlanguagelabel'      => 'ЧIал: $1',
 
 # Change password dialog
-'resetpass'   => 'Куьлег дегишарун',
-'oldpassword' => 'ЦIуру куьлег:',
-'newpassword' => 'ЦIийи куьлег:',
+'resetpass'                 => 'Куьлег дегишарун',
+'resetpass_header'          => 'Аккаунтдин парол дегишун',
+'oldpassword'               => 'ЦIуру куьлег:',
+'newpassword'               => 'ЦIийи куьлег:',
+'retypenew'                 => 'Парол кхьин хъувун:',
+'resetpass_submit'          => 'Парол эцигун ва гьахьун',
+'resetpass_forbidden'       => 'Парол дегишиз мумкин ттуш',
+'resetpass-submit-loggedin' => 'Парол дегишарун',
+'resetpass-submit-cancel'   => 'Гьич авун',
+
+# Special:PasswordReset
+'passwordreset'              => 'Парол алудна гадрун',
+'passwordreset-username'     => 'Иштиракчидин тlвар',
+'passwordreset-domain'       => 'Домен:',
+'passwordreset-email'        => 'E-mail адрес',
+'passwordreset-emailelement' => 'Иштиракчидин тIвар: $1
+Вахтуналди тир пароль: $2',
+
+# Special:ChangeEmail
+'changeemail-none'   => '(садни)',
+'changeemail-submit' => 'E-адрес дегишун',
+'changeemail-cancel' => 'Гьич авун',
 
 # Edit page toolbar
 'bold_sample'     => 'КЪалин текст',
@@ -335,10 +365,14 @@ $messages = array(
 'savearticle'                      => 'Ччин хуьн',
 'preview'                          => 'Сифтедин килигун',
 'showpreview'                      => 'Сифтедин килигун къалурун',
+'showlivepreview'                  => 'Фад сифтедин килигун',
 'showdiff'                         => 'Дегишвилер къалурун',
 'anoneditwarning'                  => "'''Дикъет:''' Куьне системадиз жув вуж ятIа лагьанвач. Куь IP-адрес и ччинин дегишвилерин тарихдиз  кхьида.",
 'summary-preview'                  => 'Сифте килигун паталди:',
+'blockedtitle'                     => 'Иштиракчи блокарнава',
+'blockednoreason'                  => 'Са себебни ганвач',
 'nosuchsectiontitle'               => 'Пай жугъуриз жезвач',
+'loginreqtitle'                    => 'Логин герекзава',
 'loginreqlink'                     => 'гьахьун',
 'newarticle'                       => '(ЦIийи)',
 'newarticletext'                   => 'Куьне гьеле авачир ччиниз элячlнава.  
@@ -364,12 +398,15 @@ $messages = array(
 'template-protected'               => '(хвенвай)',
 'template-semiprotected'           => '(са кьадар хвенва)',
 'hiddencategories'                 => 'И ччин {{PLURAL: $1 | чуьнуьхай категориядиз | $1 чуьнуьхай категорийриз}} талукь я:',
+'permissionserrors'                => 'ГЬахьнин гъалатlар',
 'permissionserrorstext-withaction' => 'Квез и {{PLURAL:$1|себебдалди|себебралди}} $2 йиз ихтияр авайд туш:',
 'recreate-moveddeleted-warn'       => "'''Дикъет! Куьне виликда алуднавай ччин туьхкlуьриз алахъзава.'''
 Квевай и ччинин туьхкlуьрунин гереквилиз килигиз тIалабзава.
 Агъадихъ и ччинин алудун ва тIвар эхцигунин журнал къалурнава.",
 'moveddeleted-notice'              => 'И ччин алуднава. 
 Агъадихъ малумат патал и ччинин алудун ва тIвар эхцигунин журнал къалурнава.',
+'log-fulllog'                      => 'Вири журналдиз килигун',
+'edit-conflict'                    => 'Дуьзар хъувунрин акьунар',
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning'  => "'''Дикъет:''' Кутазвай чешнейрин кьадар гзаф чIехи я.
@@ -381,6 +418,7 @@ $messages = array(
 
 # History pages
 'viewpagelogs'           => 'И ччиниз талукь тир журналар къалура',
+'currentrev'             => 'Алай жуьре',
 'currentrev-asof'        => '$1 тарихдиз талукь тир алай жуьре',
 'revisionasof'           => '$1 жуьре',
 'revision-info'          => '$2 патал авунвай $1 тарихдин дегишун',
@@ -398,13 +436,20 @@ $messages = array(
 'history-show-deleted'   => 'Анжах алуднавайбур',
 'histfirst'              => 'Виридалайни цIуру',
 'histlast'               => 'Мукьвара хьайи',
+'historyempty'           => '(ичIи)',
 
 # Revision feed
+'history-feed-title'          => 'Дуьзар хъувунрин тарих',
 'history-feed-item-nocomment' => '$1  $2-аз',
 
 # Revision deletion
+'rev-deleted-comment'        => 'Дуьзар хъувунин тегьерар кхьин алуднава',
+'rev-deleted-user'           => '(иштиракчидин тIвар алуднава)',
+'rev-deleted-event'          => '(къейд алуднава)',
 'rev-delundel'               => 'къалурун/кIевирун',
+'rev-showdeleted'            => 'къалурун',
 'revdelete-show-file-submit' => 'Эхь',
+'revdelete-hide-text'        => 'Ччинин и  жуьредин текст чуьнуьхун',
 'revdelete-hide-image'       => 'Файлдин къенеавайбур чуьнуьхун',
 'revdelete-hide-name'        => 'Карни адан объект чуьнуьхун',
 'revdelete-radio-set'        => 'Эхь',
@@ -414,9 +459,13 @@ $messages = array(
 'revdel-restore-deleted'     => 'Алуднавай жуьреяр',
 'revdel-restore-visible'     => 'Аквадай дегишвилер',
 'pagehist'                   => 'Ччинин тарих',
+'revdelete-reasonotherlist'  => 'Муькуь себеб',
 'revdelete-edit-reasonlist'  => 'Алудунин себебар дуьзар хъувун',
 'revdelete-offender'         => 'Автордин жуьре:',
 
+# Suppression log
+'suppressionlog' => 'КIевирунин журнал',
+
 # History merging
 'mergehistory-from'   => 'Сифте кьилин ччин:',
 'mergehistory-into'   => 'Мураддин ччин',
@@ -441,7 +490,9 @@ $messages = array(
 'searchresulttext'                 => '{{SITENAME}} къекъуьнихъай гегьенш малумат патал  [[{{MediaWiki:Helppage}}|{{int:малумат гудай пай}}]]диз килига.',
 'searchsubtitle'                   => '[[Special:WhatLinksHere/$1|И тIварциз элячIзавай]]) [[:$1]] жугъуруниз талукь тир ([[Special:Prefixindex/$1| тIварцихъ галаз эгечIзавай ччинар]]',
 'searchsubtitleinvalid'            => "Жугъурзавай: '''$1'''",
+'titlematches'                     => 'Ччинрин тIварарин  ацалтунар',
 'notitlematches'                   => 'Ччинрин тIварара ацалтунар авач',
+'textmatches'                      => 'Ччинрин текстрин ацалтунар',
 'notextmatches'                    => 'Авач чарчин кьил матчар',
 'prevn'                            => 'Вилик фейи  {{PLURAL:$1|$1}}',
 'nextn'                            => 'Гуьгъуьнин {{PLURAL:$1|$1}}',
@@ -473,6 +524,7 @@ $messages = array(
 'search-interwiki-more'            => '(мадни)',
 'search-mwsuggest-enabled'         => 'меслятар галаз',
 'search-mwsuggest-disabled'        => 'меслятар галачиз',
+'search-relatedarticle'            => 'Галкlанавай',
 'searchrelated'                    => 'Галкlанавай',
 'searchall'                        => 'вири',
 'showingresultsheader'             => "'''$4'''  патал {{PLURAL:$5|'''$3''' - кай  '''$1''' нетижа|'''$3''' - кай  '''$1 - $2''' нетижаяр}}",
@@ -484,10 +536,12 @@ $messages = array(
 'powersearch-ns'                   => 'Жугъурун тlварарин генгвилера:',
 'powersearch-redir'                => 'Рахкъурунар къалура',
 'powersearch-field'                => 'Идаз жагъурун',
+'powersearch-togglelabel'          => 'Акун',
 'powersearch-toggleall'            => 'Вири',
 'powersearch-togglenone'           => 'Садни',
 
 # Quickbar
+'qbsettings'               => 'КЪекъуьнрин панел',
 'qbsettings-none'          => 'Садни',
 'qbsettings-fixedleft'     => 'Чапла патахъай юзан тийир',
 'qbsettings-fixedright'    => 'ЭрчIи патахъай юзан тийир',
@@ -505,6 +559,7 @@ $messages = array(
 'datedefault'               => 'Туькlуьрмир',
 'prefs-beta'                => 'Бета-мумкинвилер',
 'prefs-datetime'            => 'Нумра ва вахт',
+'prefs-labs'                => 'Экспериментдин мумкинвилер',
 'prefs-personal'            => 'Иштиракчидин профил',
 'prefs-rc'                  => 'Mукьвара хьайи дегишвилер',
 'prefs-watchlist'           => 'Гуьзетунин сиягь',
@@ -525,7 +580,10 @@ $messages = array(
 'columns'                   => 'Гулар:',
 'searchresultshead'         => 'Ахтармишун',
 'resultsperpage'            => 'Са ччиниз талукь тир жагъанвай нетижаяр',
+'stub-threshold-disabled'   => 'Галуднава',
 'timezonelegend'            => 'Вахтунин минзил',
+'localtime'                 => 'Чкадин вахт',
+'timezoneoffset'            => 'Вахтунин тафават',
 'timezoneregion-africa'     => 'Африка',
 'timezoneregion-america'    => 'Америка',
 'timezoneregion-antarctica' => 'Антарктида',
@@ -555,8 +613,14 @@ $messages = array(
 'userrights-reason' => 'Кар',
 
 # Groups
-'group-sysop' => 'Къавха',
-'group-all'   => '(вири)',
+'group'               => 'КIеретI',
+'group-user'          => 'Иштиракчияр',
+'group-autoconfirmed' => 'Автотестикь хьанвай иштиракчияр',
+'group-bot'           => 'Ботар',
+'group-sysop'         => 'Къавха',
+'group-bureaucrat'    => 'Бюрократар',
+'group-suppress'      => 'Ревизорар',
+'group-all'           => '(вири)',
 
 'group-user-member' => '{{GENDER:$1|иштиракчи}}',
 'group-bot-member'  => '{{GENDER:$1|бот}}',
@@ -565,13 +629,31 @@ $messages = array(
 'grouppage-sysop' => '{{ns:project}}:Къавхаяр',
 
 # Rights
-'right-edit' => 'Дегишар хъувун',
+'right-edit'          => 'Дегишар хъувун',
+'right-delete'        => 'Ччинрин алудун',
+'right-browsearchive' => 'Алуднавай ччинар жугъурун',
+'right-undelete'      => 'Алуднавай ччинар туькIуьр хъувун',
 
 # User rights log
-'rightslog' => 'Эхтияр Ишлемишчидин дафтlар',
+'rightslog'  => 'Эхтияр Ишлемишчидин дафтlар',
+'rightsnone' => '(садни)',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-edit' => 'И ччин дуьзар хъувун',
+'action-read'               => 'И ччин кIелун',
+'action-edit'               => 'И ччин дуьзар хъувун',
+'action-createpage'         => 'ччин туькIуьрун',
+'action-createtalk'         => 'веревирдрин ччин туькIуьрун',
+'action-createaccount'      => 'И иштиракчидин ччин туькIуьрун',
+'action-minoredit'          => 'и дуьзар хъувун гъвечIи хьиз лишан авун',
+'action-move'               => 'Ччинин тIвар эхцигун',
+'action-move-subpages'      => 'и ччинин адан агъаччинрин  тIварар эхцигун',
+'action-move-rootuserpages' => 'дувулдин иштиракчийрин ччинрин тIварар эхцигун',
+'action-movefile'           => 'файлдин тIвар эхцигун',
+'action-upload'             => 'и файл ппарун',
+'action-reupload'           => 'авай файл цIийикIа ппарун',
+'action-delete'             => 'и ччин алудун',
+'action-deleterevision'     => 'ччинин и жуьре алудун',
+'action-undelete'           => 'и ччин туькIуьр хъувун',
 
 # Recent changes
 'nchanges'                        => '$1 {{PLURAL:$1|дегиш|дегишунар}}',
@@ -618,14 +700,22 @@ $messages = array(
 'filedesc'      => 'Нетижа',
 'uploadedimage' => '"[[$1]]" ппарна',
 
+# img_auth script messages
+'img-auth-accessdenied' => 'Гьахьун къадагъа авунва',
+
 'license'        => 'Лицензияватун:',
 'license-header' => 'Лицинзиярун',
 
 # Special:ListFiles
-'listfiles_date' => 'Нумра',
-'listfiles_name' => 'ТIар',
-'listfiles_user' => 'Иштиракчи',
-'listfiles_size' => 'Кьадар',
+'imgfile'               => 'Файл',
+'listfiles'             => 'Файлдин сиягь',
+'listfiles_thumb'       => 'Бицlи суьрет',
+'listfiles_date'        => 'Нумра',
+'listfiles_name'        => 'ТIар',
+'listfiles_user'        => 'Иштиракчи',
+'listfiles_size'        => 'Кьадар',
+'listfiles_description' => 'Тегьерар кхьин',
+'listfiles_count'       => 'Жуьреяр',
 
 # File description page
 'file-anchor-link'          => 'Файл',
@@ -638,9 +728,12 @@ $messages = array(
 'filehist-datetime'         => 'Тарих/вахт',
 'filehist-thumb'            => 'Бицlи шикил',
 'filehist-thumbtext'        => '$1 тарих алай жьуредин бицlи акунар',
+'filehist-nothumb'          => 'БицIи суьрет авайд ттуш',
 'filehist-user'             => 'Иштиракчи',
 'filehist-dimensions'       => 'Кьадарар',
+'filehist-filesize'         => 'Файлдин кьадар',
 'filehist-comment'          => 'КЪейд',
+'filehist-missing'          => 'Файл авачиз я',
 'imagelinks'                => 'Файл кардик кутун',
 'linkstoimage'              => 'Къведай {{PLURAL: $1 | ччин | $1 ччинар}} гьа и файлдиз элячlзава',
 'nolinkstoimage'            => 'И файлдиз элячlзавай ччинар авайд туш',
@@ -654,36 +747,52 @@ $messages = array(
 'filerevert-comment' => 'Кар',
 
 # File deletion
-'filedelete-comment' => 'Кар',
-'filedelete-submit'  => 'Къакъудун',
+'filedelete'                  => '$1 алудун',
+'filedelete-legend'           => 'Файл алудун',
+'filedelete-comment'          => 'Кар',
+'filedelete-submit'           => 'Къакъудун',
+'filedelete-reason-otherlist' => 'Муькуь себеб',
 
 # MIME search
 'mimesearch' => 'MIME ахтармишун',
+'download'   => 'АцIун',
+
+# Unused templates
+'unusedtemplateswlh' => 'муькуь элячIунар',
 
 # Random page
 'randompage' => 'Дуьшуьшдин ччин',
 
 # Statistics
-'statistics' => 'Статистика',
+'statistics'              => 'Статистика',
+'statistics-header-pages' => 'Ччинрин статистика',
+'statistics-header-edits' => 'Дуьзар хъувунрин статистика',
+'statistics-header-views' => 'Статистикадиз килигун',
+'statistics-header-users' => 'Иштиракчидин статистика',
 
 'disambiguationspage' => 'Template:гзафманавал',
 
 'brokenredirects-edit'   => 'дегишарун',
 'brokenredirects-delete' => 'къакъудун',
 
+'withoutinterwiki-submit' => 'КЪалурун',
+
 # Miscellaneous special pages
-'nbytes'        => '$1 {{PLURAL:$1|байт|байтар}}',
-'nmembers'      => '$1 {{PLURAL:$1|уьзви|уьзвияр}}',
-'lonelypages'   => 'Eтим xъувун',
-'prefixindex'   => 'Префикс галай вири ччинар',
-'shortpages'    => 'Куьруь хъувун',
-'longpages'     => 'Яргъи хъувун',
-'usercreated'   => '{{GENDER:$3|Created}} идав $1 идал $2',
-'newpages'      => 'ЦIийи ччинар',
-'move'          => 'ТIвар эхцигун',
-'movethispage'  => 'Юзун и хъувун',
-'pager-newer-n' => '{{PLURAL:$1|мадни цIийи 1|мадни цIийи $1}}',
-'pager-older-n' => '{{PLURAL:$1|мадни цIуру 1|мадни цIуру $1}}',
+'nbytes'            => '$1 {{PLURAL:$1|байт|байтар}}',
+'nmembers'          => '$1 {{PLURAL:$1|уьзви|уьзвияр}}',
+'lonelypages'       => 'Eтим xъувун',
+'prefixindex'       => 'Префикс галай вири ччинар',
+'shortpages'        => 'Куьруь хъувун',
+'longpages'         => 'Яргъи хъувун',
+'usercreated'       => '{{GENDER:$3|Created}} идав $1 идал $2',
+'newpages'          => 'ЦIийи ччинар',
+'newpages-username' => 'Иштиракчидин тlвар',
+'ancientpages'      => 'виридалайни цIуру ччинар',
+'move'              => 'ТIвар эхцигун',
+'movethispage'      => 'Юзун и хъувун',
+'pager-newer-n'     => '{{PLURAL:$1|мадни цIийи 1|мадни цIийи $1}}',
+'pager-older-n'     => '{{PLURAL:$1|мадни цIуру 1|мадни цIуру $1}}',
+'suppress'          => 'Чуьнуьхун',
 
 # Book sources
 'booksources'               => 'Ктабрин чешмеяр',
@@ -707,10 +816,15 @@ $messages = array(
 'categories' => 'Категорияр',
 
 # Special:LinkSearch
-'linksearch'      => 'Къецlин алукьунар',
+'linksearch'      => 'КЪецепатан элячIунар жугъурун',
 'linksearch-ok'   => 'Ахтармишун',
 'linksearch-line' => '$2-ай $1-аз элячlун',
 
+# Special:ListUsers
+'listusers-submit'   => 'КЪалурун',
+'listusers-noresult' => 'Иштиракчияр жагъуриз хьанвач',
+'listusers-blocked'  => '(блокарнава)',
+
 # Special:Log/newusers
 'newuserlogpage' => 'Иштиракчийрин туькlуьрунин журнал',
 
@@ -751,7 +865,11 @@ $messages = array(
 'deletereasonotherlist' => 'Маса фагьум',
 
 # Rollback
-'rollbacklink' => 'КЬулухъди чIугун',
+'rollback_short' => 'КЬулухъди чIугун',
+'rollbacklink'   => 'КЬулухъди чIугун',
+
+# Edit tokens
+'sessionfailure-title' => 'Гьахьунин гъалатI',
 
 # Protect
 'protectlogpage'              => 'Хуьнин журнал',
@@ -778,6 +896,10 @@ $messages = array(
 # Restrictions (nouns)
 'restriction-edit' => 'Дегишарун',
 
+# Restriction levels
+'restriction-level-autoconfirmed' => '(са кьадар хвенва)',
+'restriction-level-all'           => 'гьар са дережа',
+
 # Undelete
 'undeletelink'              => 'Килигун/гуьнгуьна хтун',
 'undeleteviewlink'          => 'Килигун',
@@ -977,7 +1099,8 @@ $messages = array(
 * gpsaltitude',
 
 # EXIF tags
-'exif-contrast' => 'Рангар',
+'exif-contrast'     => 'Рангар',
+'exif-languagecode' => 'Чlал',
 
 'exif-contrast-1' => 'Жими',
 
diff --git a/languages/messages/MessagesLus.php b/languages/messages/MessagesLus.php
new file mode 100644 (file)
index 0000000..9f0a8a8
--- /dev/null
@@ -0,0 +1,1522 @@
+<?php
+/** Lushai (Mizo ţawng)
+ *
+ * See MessagesQqq.php for message documentation incl. usage of parameters
+ * To improve a translation please visit http://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ * @author Lpachuau
+ * @author RMizo
+ */
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Zawmna hnuairinna',
+'tog-justify'                 => 'Hlawm tinte tlang tirual rawh',
+'tog-hideminor'               => 'Siamţhatna tenau tihdanglam thar zingah tilang suh',
+'tog-hidepatrolled'           => 'Siamţhat venhim tihdanglam thar zingah tilang suh',
+'tog-newpageshidepatrolled'   => 'Phêk venhim phêk thar tlarah tilang suh',
+'tog-extendwatchlist'         => 'A thar chauh ni lo, tihdanglamna zawng zawng tilang tùrin ralvèn kapparh rawh',
+'tog-usenewrc'                => 'Tihdanglam thar belhchhan hmang rawh (JavaScript a ngai)',
+'tog-numberheadings'          => 'A thupuite amahin nambar inpêktir rawh',
+'tog-showtoolbar'             => 'Siamţhatna hmanraw-liang tilang rawh (JavaScript a ngai)',
+'tog-editondblclick'          => 'Vawihnih klikin phêk siamţha rawh (JavaScript a ngai)',
+'tog-editsection'             => 'Hlawm hrang siamţhatna [siamţhatna] zawmna hmangin awmtir rawh',
+'tog-editsectiononrightclick' => 'Hlawm thupui ding-klik hmangin hlawm siamţhat theihna awmtir rawh (JavaScript a ngai)',
+'tog-showtoc'                 => 'A chhunga thu awm te tilang rawh (thupui 3 aia tam phêk tan)',
+'tog-rememberpassword'        => 'He ka rangpuifannaah hian min hre reng rawh (a rei berah ni $1  {{PLURAL:$1}})',
+'tog-watchcreations'          => 'Ka phêk siamte ka ralvèn zing-ah telh rawh',
+'tog-watchdefault'            => 'Ka phêk siamţhatte ka ralvèn zing-ah telh rawh',
+'tog-watchmoves'              => 'Ka phêk sawnte ka ralvèn zing-ah telh rawh',
+'tog-watchdeletion'           => 'Ka phêk nuaibo apiang ka ralvèn zingah telh rawh',
+'tog-minordefault'            => "Siamţhat tawh phawt chu 'tenau'-ah dah vek rawh",
+'tog-previewontop'            => 'Siamţhatna bawm hmaah endikna dah rawh',
+'tog-previewonfirst'          => 'Siamţhat vawi khatnaah endikna tilang rawh',
+'tog-nocache'                 => 'Fanna-in phêk a cache tur veng rawh',
+'tog-enotifwatchlistpages'    => 'Ka ralvèn zinga phêk pakhat tihdanglam a nih apiangin email min thawn rawh',
+'tog-enotifusertalkpages'     => 'Ka hmangtu-sawihona phêk tihdanglam a nihin min email rawh',
+'tog-enotifminoredits'        => 'Phêk siamţhat tenauah pawh min email tho rawh',
+'tog-enotifrevealaddr'        => 'Hriattirna email zingah ka email address pho lang rawh',
+'tog-shownumberswatching'     => 'Ralvèngtu zât tilang rawh',
+'tog-oldsig'                  => 'Khàrna hming hman mék:',
+'tog-fancysig'                => 'Khàrna hming wikithu angah ngai rawh (zawmna insiam ţül lovin)',
+'tog-externaleditor'          => 'Sawi ngai lovin pawnlam siamţhatu hmang rawh (mithiam tan chauh, i khawlthluakneiah setting bîk a ngai. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
+'tog-externaldiff'            => 'Sawi ngai lovin pawnlam diff hmang rawh (mithiam tan chauh, i khawlthluakneiah setting bîk a ngai. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
+'tog-showjumplinks'           => '"Zuan kahlên rawh" tih zawmna awmtir rawh',
+'tog-uselivepreview'          => 'Endikna nung hmang rawh (JavaScript a ngai) (hei hi chhinna chauh a la ni)',
+'tog-forceeditsummary'        => 'Siamţhatna ruak ka dahluh palhin min hrilh rawh',
+'tog-watchlisthideown'        => 'Ka siamţhatho ka ralvènah telh suh',
+'tog-watchlisthidebots'       => 'Bot siamţhatho ralvèn zing-ah telh suh',
+'tog-watchlisthideminor'      => 'Siamţhat tenau ralvèn zing aţang thup rawh',
+'tog-watchlisthideliu'        => 'Ralvèn zing aţang hmangtu inziaklut siamţhat tibo rawh.',
+'tog-watchlisthideanons'      => 'Hmangtu hriat lohvina an siamţhat ralvèn zing aţang',
+'tog-watchlisthidepatrolled'  => 'Siamţhat viltu nei ralvèn zingah telh suh',
+'tog-ccmeonemails'            => 'Hmangtu dang hnena ka email thawn apiang min thawn ve zel rawh',
+'tog-diffonly'                => 'Diff hnuaiah phêk chhunga awmte tilang suh',
+'tog-showhiddencats'          => 'Pawl thuhrûkho tilang rawh',
+'tog-norollbackdiff'          => 'Lumlêt hnuah diff kalkan rawh',
+
+'underline-always'  => 'Ziah/ngei ngei',
+'underline-never'   => 'Ngai lo',
+'underline-default' => 'Browser duhdàn',
+
+# Font style option in Special:Preferences
+'editfont-style'     => 'Siamţhatna hmun hawrawp pian',
+'editfont-default'   => 'Browser duhdàn',
+'editfont-monospace' => 'Hawrawp inkar rualkhai',
+'editfont-sansserif' => 'Sans-serif hawrawp',
+'editfont-serif'     => 'Serif hawrawp',
+
+# Dates
+'sunday'        => 'Pathianni',
+'monday'        => 'Thawhţanni',
+'tuesday'       => 'Thawhlehni',
+'wednesday'     => 'Nilaini',
+'thursday'      => 'Ningani',
+'friday'        => 'Zirtawpni',
+'saturday'      => 'Inrinni',
+'sun'           => 'Ptn',
+'mon'           => 'Thţ',
+'tue'           => 'Thl',
+'wed'           => 'Nil',
+'thu'           => 'Nng',
+'fri'           => 'Zrt',
+'sat'           => 'Inr',
+'january'       => 'Pawlkut',
+'february'      => 'Ramtuk',
+'march'         => 'Vau',
+'april'         => 'Ţau',
+'may_long'      => 'Ţomir',
+'june'          => 'Nikir',
+'july'          => 'Vawkhniahzawn',
+'august'        => 'Thiţin',
+'september'     => 'Mimkut',
+'october'       => 'Khuangchawi',
+'november'      => 'Sahmulphah',
+'december'      => 'Pawltlak',
+'january-gen'   => 'Pawlkût thla',
+'february-gen'  => 'Ramtuk thla',
+'march-gen'     => 'Vau thla',
+'april-gen'     => 'Ţau thla',
+'may-gen'       => 'Ţomir thla',
+'june-gen'      => 'Nikir thla',
+'july-gen'      => 'Vawkhniahzawn thla',
+'august-gen'    => 'Thiţin thla',
+'september-gen' => 'Mimkut thla',
+'october-gen'   => 'Khuangchawi thla',
+'november-gen'  => 'Sahmulphah thla',
+'december-gen'  => 'Pawltlak thla',
+'jan'           => 'Pkt',
+'feb'           => 'Rtk',
+'mar'           => 'Vau',
+'apr'           => 'Ţau',
+'may'           => 'Ţmr',
+'jun'           => 'Nkr',
+'jul'           => 'Vhz',
+'aug'           => 'Tţn',
+'sep'           => 'Mkt',
+'oct'           => 'Kch',
+'nov'           => 'Shp',
+'dec'           => 'Ptk',
+
+# Categories related messages
+'pagecategories'                 => '{{PLURAL:$1|Pawl|Pawlte}}',
+'category_header'                => '"$1" pawla phêkte',
+'subcategories'                  => 'Pawlpengte',
+'category-media-header'          => '"$1" pawla mediate',
+'category-empty'                 => '"He pawl hian phêk leh media pakhat mah a nei hrih lo."',
+'hidden-categories'              => 'Pawl thuhrûk {{PLURAL:$1||-te}}',
+'hidden-category-category'       => 'Pawl thuhrûkte',
+'category-subcat-count'          => '{{PLURAL:$2|He pawl hian he pawlpeng chauh hi a nei. |He pawl hian heng: {{PLURAL:$1|pawlpeng|pawlpeng $1-te}} hi a nei, a vaia $2 zingah.}}',
+'category-subcat-count-limited'  => 'He pawl hian hengte hi a ni: {{PLURAL:$1|pawlpeng|$1 pawlpengte}}',
+'category-article-count'         => '{{PLURAL:$2|He pawl hian hë phêk chauh hi a nei. | Heng phek{{PLURAL:$1||$1-te}} hi he pawlah hian a awm, a vaia $2 zingah.}}',
+'category-article-count-limited' => '{{PLURAL: $1 |$1He|$1 Heng}} phekte hi hë pawl, i en mékah hian a awm.',
+'category-file-count'            => '{{PLURAL:$2|He pawl hian hë taksa (file) chauh hi a kengtel.|{{PLURAL:$1|He taksa $1 |Heng taksa $1-te}} hi he pawlah hian a awm, a vaia $2 zingah}}',
+'category-file-count-limited'    => '{{PLURAL:$1|He taksa (file)|$1Heng taksate}} hi hemi pawl, i en mékah hian a awm.',
+'listingcontinuesabbrev'         => 'chhunz.',
+'index-category'                 => 'Phêk tarlante',
+'noindex-category'               => 'Phêk tarlan lohte',
+'broken-file-category'           => 'Taksa kehchhe zawmna awm phêkte',
+
+'about'         => 'Chungchang',
+'article'       => 'A chhunga thu awm',
+'newwindow'     => '(Tukverh tharah a inhawng ang)',
+'cancel'        => 'Sûtna',
+'moredotdotdot' => 'Chhunzawmna...',
+'mypage'        => 'Ka phêk',
+'mytalk'        => 'Ka sawihona',
+'anontalk'      => 'He chenhmun-IP tana sawihona',
+'navigation'    => 'Fanzauna',
+'and'           => '&#32;leh',
+
+# Cologne Blue skin
+'qbfind'         => 'Zawng rawh',
+'qbbrowse'       => 'Fangvêl rawh',
+'qbedit'         => 'Siamţhatna',
+'qbpageoptions'  => 'He phêk hi',
+'qbpageinfo'     => 'Thukhawchang',
+'qbmyoptions'    => 'Ka phêkte',
+'qbspecialpages' => 'Phêk vohbîkte',
+'faq'            => 'Zawhzin',
+'faqpage'        => 'Project: Zawhzin',
+
+# Vector skin
+'vector-action-addsection'       => 'Thupui belhna',
+'vector-action-delete'           => 'Paihna',
+'vector-action-move'             => 'Sawnna',
+'vector-action-protect'          => 'Venhimna',
+'vector-action-undelete'         => 'Lak kir lehna',
+'vector-action-unprotect'        => 'Venhimna dinhmun tidanglam rawh',
+'vector-simplesearch-preference' => 'Sawn awlsam lehzualna rawtna awmtir rawh (Vektawr vun tan chauh)',
+'vector-view-create'             => 'Siamna',
+'vector-view-edit'               => 'Siamţhatna',
+'vector-view-history'            => 'A chanchin enna',
+'vector-view-view'               => 'Chhiarna',
+'vector-view-viewsource'         => 'A hnar enna',
+'actions'                        => 'Thiltih',
+'namespaces'                     => 'Hminghmun',
+'variants'                       => 'Zedang',
+
+'errorpagetitle'    => 'Dik lo',
+'returnto'          => '$1 phekah kir leh rawh.',
+'tagline'           => '{{SITENAME}} aţangin',
+'help'              => 'Ţanpuina',
+'search'            => 'Zawnna',
+'searchbutton'      => 'Zawng rawh le',
+'go'                => 'Kal rawh le',
+'searcharticle'     => 'Kal rawh le',
+'history'           => 'Phêk chanchin',
+'history_short'     => 'Chanchin',
+'updatedmarker'     => 'ka tlawh hnuhnun ber hnua tihdanglam',
+'printableversion'  => 'Nemkai theih',
+'permalink'         => 'Hlet hlun',
+'print'             => 'Nemkaina',
+'view'              => 'Enna',
+'edit'              => 'Siamţhatna',
+'create'            => 'Siamna',
+'editthispage'      => 'He phek hi siamţha rawh',
+'create-this-page'  => 'He phêk hi siam rawh',
+'delete'            => 'Paihna',
+'deletethispage'    => 'He phêk hi paih rawh',
+'undelete_short'    => 'Siamţhat vawi {{PLURAL:$1|khat| $1}} la kïr leh rawh.',
+'viewdeleted_short' => 'Nuaibo hnu siamţhat vawi {{PLURAL:$1|khat|$1}} thleng la kïr leh rawh.',
+'protect'           => 'Venhimna',
+'protect_change'    => 'tihdanglamna',
+'protectthispage'   => 'He phêk hi venghim rawh',
+'unprotect'         => 'Vanhimna dinhmun tidanglam rawh',
+'unprotectthispage' => 'He phêk venhimna dinhmun hi tidanglam rawh',
+'newpage'           => 'Phek thar',
+'talkpage'          => 'He phêk sawihonaah hian tel rawh',
+'talkpagelinktext'  => 'Sawihona',
+'specialpage'       => 'Vohbik phek',
+'personaltools'     => 'Mimal hmanruate',
+'postcomment'       => 'Thuhlawm thar',
+'articlepage'       => 'A chhungthu enna',
+'talk'              => 'Sawihona',
+'views'             => 'Thlirna',
+'toolbox'           => 'Hmanrawbawm',
+'userpage'          => 'Hmangtu phek enna',
+'projectpage'       => 'Beihpui phêkpui enna',
+'imagepage'         => 'Taksa phêk enna',
+'mediawikipage'     => 'Thudawn phêk enna',
+'templatepage'      => 'Siamsa phêk enna',
+'viewhelppage'      => 'Ţanpuina phêk enna',
+'categorypage'      => 'Pawl phêk enna',
+'viewtalkpage'      => 'Sawinona en rawh',
+'otherlanguages'    => 'Ţawng dangin',
+'redirectedfrom'    => '($1 aţanga hruailuh a ni)',
+'redirectpagesub'   => 'Hruailuhna phêk',
+'lastmodifiedat'    => 'Hemi phek hi ni $1,  dar $2 khan siamţhat hnuhnun ber a ni.',
+'viewcount'         => 'He phêk hi vawi {{PLURAL:$1|khat|$1}} tlawh a ni tawh.',
+'protectedpage'     => 'Phêk venhim',
+'jumpto'            => 'Tah hian kal rawh:',
+'jumptonavigation'  => 'fanzauna',
+'jumptosearch'      => 'zawnna',
+'view-pool-error'   => 'A pawi hle mai, server overload a ni.
+Hmangtu tam leh lutukin he phêk hi en an tum a. 
+En i tum leh hmain rei lo të nghâk ang che.
+
+$1',
+'pool-timeout'      => 'Khar hun a tawp ta',
+'pool-queuefull'    => 'Hnathawhna hmun awl a awm tawh lo',
+'pool-errorunknown' => 'Kan hriatthiam loh dikhlel a awm tlat',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'            => '{{SITENAME}}  chungchang',
+'aboutpage'            => 'Project:Chungchang',
+'copyright'            => 'A chhung thute hi $1 hmanga lakchhawn phal a ni.',
+'copyrightpage'        => '{{ns:project}}:Lakchhawn phalna',
+'currentevents'        => 'Chanchin thar',
+'currentevents-url'    => 'Project: Chanchin thar',
+'disclaimers'          => 'Intlawhkhalhna',
+'disclaimerpage'       => 'Project: Intlawhkhalhna Dan',
+'edithelp'             => 'Siamţhat zirna',
+'edithelppage'         => 'Help: Siamţhat dàn',
+'helppage'             => 'Help: A chhunga thu awmte',
+'mainpage'             => 'Phekpui',
+'mainpage-description' => 'Phekpui',
+'policy-url'           => 'Project: Dàn',
+'portal'               => 'Kawtchhuahpui',
+'portal-url'           => 'Project: Kawtchhuahpui',
+'privacy'              => 'Inthupna dan',
+'privacypage'          => 'Project: Inthupna dan',
+
+'badaccess'        => 'Phalna dikhlel',
+'badaccess-group0' => 'Tuna i thil tih tum kha tih phalsak i ni lo.',
+'badaccess-groups' => 'Tuna i thil tih tum kha {{PLURAL:$2|hemi chauh hi tih phalsak a ni|heng mite chauh hi tih phalsak an ni}}: $1.',
+
+'versionrequired'     => 'MediaWiki chhuah $1-na a ngai.',
+'versionrequiredtext' => 'He phêk hmang tur hian MediaWiki chhuah $1 a ngai.
+[[Special:Version|version page]] en rawh.',
+
+'ok'                      => 'Aw le',
+'retrievedfrom'           => '"$1" aţanga lâk chhuah',
+'youhavenewmessages'      => '($2) $1 i nei.',
+'newmessageslink'         => 'thudawn thar',
+'newmessagesdifflink'     => 'tihdanglam thar',
+'youhavenewmessagesmulti' => '$1-ah thu dawn thar i nei',
+'editsection'             => 'siamţhatna',
+'editold'                 => 'siamţhatna',
+'viewsourceold'           => 'A hnar enna',
+'editlink'                => 'siamţhatna',
+'viewsourcelink'          => 'a hnar enna',
+'editsectionhint'         => 'Hemi thuhlawm hi siamţha rawh le: $1',
+'toc'                     => 'A chhung thute',
+'showtoc'                 => 'tihlanna',
+'hidetoc'                 => 'tihbona',
+'collapsible-collapse'    => 'Thlehna',
+'collapsible-expand'      => 'Pharhna',
+'thisisdeleted'           => '$1 hi en emaw, dah lêt leh emaw i duh em?',
+'viewdeleted'             => '$1 i en duh em?',
+'restorelink'             => '{{PLURAL:$1| vawi khat nuaibo|vawi $1 nuaibo tawh}} siamţhatna',
+'feedlinks'               => 'Chàwmna:',
+'feed-invalid'            => 'Chawmna dik lo.',
+'feed-unavailable'        => 'Syndication chawm-letna tih theih a ni lo',
+'site-rss-feed'           => 'RSS chawmna $1',
+'site-atom-feed'          => 'Chawmna riang $1',
+'page-rss-feed'           => 'RSS chawmna "$1"',
+'page-atom-feed'          => 'Chawmna riang "$1"',
+'red-link-title'          => '$1 (Hemi phek hi a la awm lo. Hetah hian hmet la tlawmngaiin siam ţan rawh le)',
+'sort-descending'         => 'A lêt zawnga remna',
+'sort-ascending'          => 'A indawta remna',
+
+# Short words for each namespace, by default used in the namespace tab in monobook
+'nstab-main'      => 'Phek',
+'nstab-user'      => 'Hmangtu phek',
+'nstab-media'     => 'Media phek',
+'nstab-special'   => 'Vohbik phek',
+'nstab-project'   => 'Hna-hmachhawp phek',
+'nstab-image'     => 'Taksa',
+'nstab-mediawiki' => 'Thu',
+'nstab-template'  => 'Siamsa',
+'nstab-help'      => 'Ţanpuina phek',
+'nstab-category'  => 'Pawl',
+
+# Main script and global functions
+'nosuchaction'      => 'Hetiang hi a tih theih loh',
+'nosuchactiontext'  => 'URL-a tihtur lang hi a tihtheih loh.
+URL i chhu dik lo a ni mai thei, emaw zawm dik loah i kal a niang.
+{{SITENAME}} software hmanah hian dik tawk lo lai a awm a ni thei bawk.',
+'nosuchspecialpage' => 'Hetiang vohbik phek hi a awm lo',
+'nospecialpagetext' => '<strong>Vohbik phek awm lo en i tum.</strong>
+
+Vohbik phekte chu hetah hian a en theih [[Special:SpecialPages|{{int:specialpages}}]].',
+
+# General errors
+'error'                => 'Dik lo',
+'databaseerror'        => 'Database dik loh',
+'laggedslavemode'      => "'''Vaukhanna:''' He phêk hian tun hnaia siam thar a pho lang lo mai thei.",
+'readonly'             => 'Database kalh a ni',
+'enterlockreason'      => 'I kalhna chhan leh i hawn leh hun tura i rin sawi rawh',
+'missing-article'      => 'Database-in a hmuh tùr phêk "$1" $2 a hmu lo tlat mai. 
+
+Hei hi dnglm ţhing emaw phêk paih tawh zawmna hlui zui vanga awm a ni tlangpui. 
+
+Chumi a nih si loh chuan khawlthluakah hrik ţhalo i tawng tihna a ni ang. Khawngaihin [[Special:ListUsers/sysop|roreltu]] hnenah  a URL chiang taka sawiin hrilh rawh.',
+'missingarticle-rev'   => '(siamţhatna zât: $1)',
+'missingarticle-diff'  => '(Diff: $1, $2)',
+'readonly_lag'         => 'Database salin a pu a umphâk laiin database amahin inkhar behtir a ni.',
+'internalerror'        => 'Chhunglam dik loh',
+'internalerror_info'   => 'Chhunglam dik loh: $1',
+'fileappenderrorread'  => 'A hmawrbawk laiin "$1" a chhiar thei lo.',
+'fileappenderror'      => '"$1"-a "$2" hmawrbawk theih a ni lo.',
+'filecopyerror'        => 'Taksa "$1" hi "$2"-a lakchhawn theih a ni lo.',
+'filerenameerror'      => 'Taksa "$1" hi hming dang, "$2"-ah a thlâk thei lo.',
+'filedeleteerror'      => 'Taksa "$1" nuaibo thei lo tlat.',
+'directorycreateerror' => 'Bawmpui "$1" siam theih a ni lo.',
+'filenotfound'         => 'Taksa "$1" hmuh theih a ni lo.',
+'fileexistserror'      => 'Taksa "$1" ziah theih a ni lo: Taksa chu a awm si.',
+'unexpected'           => 'Hlutzawng beisei loh: "$1"="$2".',
+'formerror'            => 'Dikhlel: Lehkha thehluh theih a ni lo.',
+'badarticleerror'      => 'He phêkah hian tuna i tih tum ang kha tih theih a ni lo.',
+'cannotdelete'         => 'He taksa / phêk "$1" hi nuaibo theih a ni lo.
+Tu emawin a nuaibo tawh a ni ang.',
+'cannotdelete-title'   => '"$1" phêk hi nuaibo theih a ni lo.',
+'badtitle'             => 'Hming dikhlel',
+'badtitletext'         => 'I phêk zawn kha a hming a dik lo emaw, a ruak emaw, ţawng dang wiki hming nèn ţhui sual emaw a nih hmel. 
+Phêk hminga hman theih loh hawrawp pahnih-khat a awm a ni mai thei bawk.',
+'querypage-no-updates' => 'He phêk tihdanglamna hi khàr hrih a ni.
+Heta châk (hmanrua) reng reng thlâk thar a ni hrih mai lo vang.',
+'wrong_wfQuery_params' => 'wfQuery()<br />-ah châkkhai dik lo a awm.
+Hnathawh: $1<br />
+Thil zawn: $2',
+'viewsource'           => 'A hnar enna',
+'viewsource-title'     => '$1 hnar en rawh',
+'actionthrottled'      => 'Thiltih upbeh a ni.',
+'actionthrottledtext'  => 'Thu dukdak lo ven nan hun rei lo te chhunga vawi tam tak tih nawn phal loh a ni, i thiltih ngai i tihnawn ngun tawh lutuk avangin dan beh hrih i ni. Nakin deuhvah tum chhin leh rawh.',
+'protectedpagetext'    => 'He phêk hi khawih danglam theih loh nan venhim hrih a ni.',
+'viewsourcetext'       => 'A hnar i lachhawngin i en thei ang:',
+'viewyourtext'         => "'''I siamţhatte''' chu he phêkah hian i enin i lachhawng thei ang.",
+'protectedinterface'   => 'He phêk hian khawlthluak tan hmangtu-ţawng a phuhru a, hman khawloh a nih loh nan venhim hrih a ni.',
+'sqlhidden'            => '(SQL zawhna thuhrûk hrih a ni)',
+'cascadeprotected'     => 'He phêk hi siam danglam phal a ni hrih lo, a chhan chu {{PLURAL:$1|he phêk|hêng phêk}}, "a huhova venhim" tih hmanga ven chhunga awm a nih vang a ni: 
+$2',
+'namespaceprotected'   => "'''$1''' tih hminghmun chhunga phêkte siamţhat phalna i nei lo.",
+'customcssprotected'   => 'Hmangtu dang mimal thil a awm avangin he CSS phêk hi siam danglam phal a ni lo.',
+'customjsprotected'    => 'Hmangtu dang mimal thil a tel avangin he JavaScript phêk hi siamţhat phalsak i ni lo.',
+'ns-specialprotected'  => 'Phêk vohbîkte siam danglam theih a ni lo.',
+'titleprotected'       => 'He phêk hi hmangtu [[User:$1|$1]] siam phalsak a ni lo. A chhan hetah: "\'\'$2\'\'" hian pêk a ni.',
+
+# Virus scanner
+'virus-badscanner'     => "Inremdan dikhlel: Hrik thiantu hriat loh: ''$1''",
+'virus-scanfailed'     => 'Hrik then a hlawhchham (thutûk $1)',
+'virus-unknownscanner' => 'Hrikthiantu hriat loh:',
+
+# Login and logout pages
+'logouttext'               => "'''I chhuak fel ta.'''
+Inziaklût kher lovin {{SITENAME}} hi i hmang chhunzawm thei ang, a nih loh vëk pawhin hmangtu hming pangngai emaw, a hming dang emawin [[Special:UserLogin|lût leh]] thei ang.
+I fangtu cache i thenfai hma chu phêk ţhenkhat intar lang a awm reng mai thei, i la  chhuak lo emaw tih mai tùrin.",
+'welcomecreation'          => '==Kan lo lawm a che, $1!==
+I siangchan siam a ni ta.
+I [[Special:Preferences|{{SITENAME}}duhdàn]] siam danglam theihnghilh suh ang che.',
+'yourname'                 => 'Hmangtuhming:',
+'yourpassword'             => 'Thurûk:',
+'yourpasswordagain'        => 'Thurûk ziak nawn leh rawh le:',
+'remembermypassword'       => 'He ka rangpuifanna hman mék (browser)-ah hian ka luhna (a rei berah ni {{PLURAL:$1||}}) min vawnsak rawh, thurûk ziah nawn ngai lo tùrin.',
+'securelogin-stick-https'  => 'Luh hnuah HTTPS-ah hian chëng reng rawh.',
+'yourdomainname'           => 'I ram:',
+'externaldberror'          => 'Insawifiahna felfai lo a awm lo a nih loh vëk pawhin i pawnlam siangchan tihdanglam phalsak i ni lo a ni ang.',
+'login'                    => 'Luhna',
+'nav-login-createaccount'  => 'Luhna / siangchan siamna',
+'loginprompt'              => '{{SITENAME}}-a lût tùrin cookie i zuah zalen a ngai.',
+'userlogin'                => 'Luhna/Siangchan siamna',
+'userloginnocreate'        => 'Inziah luhna',
+'logout'                   => 'Chhuahna',
+'userlogout'               => 'Chhuahna',
+'notloggedin'              => 'I la lût lo',
+'nologin'                  => 'Siangchan i la nei lo maw? $1.',
+'nologinlink'              => 'Siangchan siam rawh',
+'createaccount'            => 'Siangchan siam rawh le',
+'gotaccount'               => 'Siangchan i nei tawh sa maw? $1.',
+'gotaccountlink'           => 'Luhna',
+'userlogin-resetlink'      => 'I inziahluhna i theihnghilh maw?',
+'createaccountmail'        => 'E-lehkhathawnin',
+'createaccountreason'      => 'Chhan:',
+'badretype'                => 'I thurûk ziahte a inmil lo.',
+'userexists'               => 'Hmangtu hming hman tawh a ni.
+Hming dang i thlan a ngai.',
+'loginerror'               => 'Inziahluh sual',
+'createaccounterror'       => 'Siangchan siam theih loh: $1',
+'noname'                   => 'Hmangtu hming dik a ziak lo.',
+'loginsuccesstitle'        => 'Hlawhtling takin i lût tâ e.',
+'loginsuccess'             => "'''{{SITENAME}}-ah \"\$1\" hming puin a i lût ta.'''",
+'nosuchuser'               => 'Hmingtuhming "$1" a awm lo.
+Hmangtuhming hi hawrawppui leh të thliar hran a ngai a ni (entirna: Thara leh thara an inang lo).
+I thilziah enfiah rawh, a nih loh pawhin [[Special:UserLogin/signup|siangchan thar siam rawh]].',
+'nosuchusershort'          => 'Hmangtu hming "$1" a awm lo.
+I thilziah enfiah rawh.',
+'nouserspecified'          => 'Hmangtuhming i ziah a ngai.',
+'wrongpassword'            => 'Thurûk dik lo.
+Khawngaihin tum nawn leh rawh.',
+'wrongpasswordempty'       => 'Thurûk i ziak lo.
+Khawngaihin tum ţha leh rawh.',
+'passwordtooshort'         => 'Thurûk {{PLURAL:$1|hawrawp 1|hawrawp $1}} tala sei a ni tùr a ni.',
+'password-name-match'      => 'I hmangtuhming leh i thurûk a inang thiang lo.',
+'password-login-forbidden' => 'He hmangtuhming leh thurûk hi hman khap a ni.',
+'mailmypassword'           => 'Thurûk thar e-thawn rawh',
+'passwordremindertitle'    => '{{SITENAME}} tana thurûk lailâwk.',
+'noemail'                  => 'Hmangtu "$1" tä e-chenhmun ziaksa kan nei lo tlat.',
+'noemailcreate'            => 'E-chenhmun dik i ziah a ngai.',
+'passwordsent'             => '"$1" tana i e-chenhmun pêkah thurûk thawn a ni ta.
+I dawn hnuah i lût dawn nia.',
+'mailerror'                => 'e-Lehkha thawn sual: $1',
+'emailauthenticated'       => 'I e-chenhmun $2, $3-ah finfiah a ni.',
+'emailnotauthenticated'    => 'I e-chenhmun finfiah a la ni lo.
+A hnuaia mi eng vang pawh hian e-lehkha thawn a ni lo vang:',
+'noemailprefs'             => 'Hengte hi tih theih tùr chuan i duhdànah i e-chenhmun telh rawh.',
+'emailconfirmlink'         => 'I e-chenhmun tichiang rawh',
+'invalidemailaddress'      => 'A awmphung a dik loh avangin he e-chenhmun hi pawm theih a ni lo.
+E-chenhmun dik tak ziaklût rawh, a nih loh leh thai reh vek rawh.',
+'cannotchangeemail'        => 'He wiki-ah hian siangchan e-chenhmun thlâk theih a ni lo.',
+'accountcreated'           => 'Siangchan siamfel a ni ta.',
+'accountcreatedtext'       => '$1 tana hmangtu siangchan siamfel a ni ta.',
+'createaccount-title'      => '{{SITENAME}} tana siangchan siam',
+'usernamehasherror'        => 'Hmangtuhmingin bawhtah lem a hmang thiang lo',
+'login-throttled'          => 'Tunhnai maiah luh i tum ngun lutuk.
+I tum leh hmain nghâk lawk ang che.',
+'login-abort-generic'      => 'I luh tumna a hlawhchham - Pamţùl a ni',
+'loginlanguagelabel'       => 'Ţawng: $1',
+
+# E-mail sending
+'user-mail-no-addy' => 'E-chenhmun awm lova e-lehkha thawn i tum.',
+
+# Change password dialog
+'resetpass'                 => 'Thurûk thlâkna',
+'resetpass_header'          => 'Siangchan thurûk thlâkna',
+'oldpassword'               => 'Thurûk hlui',
+'newpassword'               => 'Thurûk thar:',
+'retypenew'                 => 'Thurûk ziak nawn leh rawh le:',
+'resetpass_submit'          => 'Thurûk siamfel la inziaklût rawh',
+'resetpass_success'         => 'I thurûk hlawhtling taka thlâk a ni.
+Kan hruai lût mék a che...',
+'resetpass_forbidden'       => 'Thurûk thlâk theih a ni lo.',
+'resetpass-no-info'         => 'He phêk lut mai tùr chuan i inziahluh a ngai.',
+'resetpass-submit-loggedin' => 'Thurûk thlâkna',
+'resetpass-submit-cancel'   => 'Sûtna',
+'resetpass-wrong-oldpass'   => 'Thurûk dik lo emaw thi tawh.
+I thurûk i thlâk hlawhtling tawh a nih loh pawhin thurûk lailâwk i dil a ni thei.',
+'resetpass-temp-password'   => 'Thurûk lailâwk:',
+
+# Special:PasswordReset
+'passwordreset'                    => 'Thurûk ziakţha rawh',
+'passwordreset-legend'             => 'Thurûk ziakţha rawh',
+'passwordreset-username'           => 'Hmangtu hming:',
+'passwordreset-email'              => 'E-chenhmun:',
+'passwordreset-emailtitle'         => '{{SITENAME}}-a siangchan chanchin kim',
+'passwordreset-emailelement'       => 'Hmangtuhming: $1
+Thurûk lailâwk: $2',
+'passwordreset-emailsent'          => 'Hriat nawntirna e-lehkha thawn fel a ni.',
+'passwordreset-emailsent-capture'  => 'Hriat nawntirna e-lehkha thawn a ni, a hnuaia tarlan ang khuan.',
+'passwordreset-emailerror-capture' => 'Hriat nawntirna e-lehkha siam chhuah a ni a, a hnuaia tarlan ang khuan; mahsé thawn hlawhchham a ni: $1',
+
+# Special:ChangeEmail
+'changeemail'          => 'E-chenhmun thlâk rawh',
+'changeemail-header'   => 'Siangchan e-chenhmun thlâk rawh',
+'changeemail-text'     => 'I e-chenhmun thlâk tùrin hei hi dahkhat vek rawh. I tihdanglam nemngheh nan i thurûk ziahluh i ngai ang.',
+'changeemail-no-info'  => 'He phêk lut mai tùr chuan i inziahluh a ngai.',
+'changeemail-oldemail' => 'Tùna i e-chenhmun:',
+'changeemail-newemail' => 'E-chenhmun thar:',
+'changeemail-none'     => '(pakhat mah)',
+'changeemail-submit'   => 'E-chenhmun thlâk rawh',
+'changeemail-cancel'   => 'Sûtna',
+
+# Edit page toolbar
+'bold_sample'     => 'Hawrawp thau',
+'bold_tip'        => 'Hawrawp thau',
+'italic_sample'   => 'Hawrawp äwn',
+'italic_tip'      => 'Hawrawp äwn',
+'link_sample'     => 'Zawmna hming',
+'link_tip'        => 'Inzawm chhawnna',
+'extlink_sample'  => 'http://www.example.com zawmna hming',
+'extlink_tip'     => 'Pawnlam zawmna (http:// tih hmabet kha theihnghilh suh la)',
+'headline_sample' => 'Thupui',
+'headline_tip'    => 'Chhawng 2-na thupui',
+'nowiki_sample'   => 'Hetah hian thu siamrem sa ni lo dahlut rawh',
+'nowiki_tip'      => 'Wiki siamrem ngaihthah rawh',
+'image_tip'       => 'Taksa telh',
+'media_tip'       => 'Taksa zawmna',
+'sig_tip'         => 'I hmingnem leh hun',
+'hr_tip'          => 'Rin khamphei (ren deuh la)',
+
+# Edit pages
+'summary'                          => 'A thu tlangpui (laktawi):',
+'subject'                          => 'Thupui:',
+'minoredit'                        => 'Hei hi siamţhatna tenau a ni',
+'watchthis'                        => 'He phêk hi vil rawh',
+'savearticle'                      => 'Tlangzarh rawh le',
+'preview'                          => 'Enchhinna',
+'showpreview'                      => 'Tlangzarh hmaa endikna',
+'showlivepreview'                  => 'Endik thuakna',
+'showdiff'                         => 'Tihdanglam tihlanna',
+'anoneditwarning'                  => "'''Vaukhanna:''' I inziaklût lo tlat.
+I chenhmun-IP he phêk chanchinah chhinchhian a ni ang.",
+'anonpreviewwarning'               => "''I inziaklût lo. I dahţhat chuan he phêk siamţhat chanchinah i chenhmun-IP hi chhinchhian a ni ang.''",
+'missingsummary'                   => "'''Hriat reng tur:''' I siamţhat tlangpui kaihtawina i lo ziak lo tlat.
+\"{{int:savearticle}}\" i hmeh leh chuan i thuziah hi a kaihtawina tel lovin dahţhat a ni ang.",
+'missingcommenttext'               => 'Tuihnihna a hnuaiah khuan ziak rawh.',
+'missingcommentheader'             => "'''Hriat reng tur:''' I tuihnihna thupui i pe lo.
+\"{{int:savearticle}}\"-ah i hmeh leh chuan i siamţhatna hi a thupui tel lovin dahţhat a ni ang.",
+'summary-preview'                  => 'Kaihtawina endikna:',
+'subject-preview'                  => 'Thupui endikna:',
+'blockedtitle'                     => 'He hmangtu hi danbeh a ni',
+'blockednoreason'                  => 'a chhak pêk a ni lo',
+'whitelistedittext'                => 'Siamţha thei turin $1 i mamawh.',
+'confirmedittext'                  => 'Phêk i siamţhat hmain i e-chenhmun i finfiah a ngai. [[Special:Preferences|hmangtu duhthlanna]] kaltlangin i e-chenhmun siamfel rawh.',
+'nosuchsectiontitle'               => 'I zawn hlawm hi hmuh theih a ni lo',
+'nosuchsectiontext'                => 'Hlawm awm lo siamţhat i tum.
+A phêk i en chhungin sawn emaw nuaibo emaw a ni a ni ang.',
+'loginreqtitle'                    => 'Inziahluh a ngai',
+'loginreqlink'                     => 'Inziah luhna',
+'loginreqpagetext'                 => 'Phêk dang en tùrin $1 a ngai.',
+'accmailtitle'                     => 'Thurûk kan thawn fel tawh e.',
+'accmailtext'                      => '[[User talk:$1|$1]] tan a kahpaha siam thurûk $2 hnenah thawn a ni tawh.
+I siangchan thurûk hi [[Special:ChangePassword|thurûk tihdanglamna]]-ah i inziahluh hnuah i tidanglam thei ang.',
+'newarticle'                       => '(A thar)',
+'newarticletext'                   => "Phêk awm lo zawmna i rawn zui lut a ni. Phêk siam tùrin a hnuaia bawmah khuan chhu rawh (hriattirna dang [[{{MediaWiki:Helppage}}|ţanpuina phêk]]-ah a en theih).
+Tihsual palh thilthua heta lo lût i nih chuan i rangpuifanna-a '''letna''' fei zawnah hmet rawh.",
+'noarticletext'                    => 'He phêkah hian thu a la awm hrih lo.
+Phêk dangah [[Special:Search/{{PAGENAME}}| he phêk hming hi i zawng]] thei ang, a nih loh pawhin a laichin 
+<span class="plainlinks">[{{fullurl:{{#Special:Log}} | page={{FULLPAGENAMEE}}}} log dang i zawng thei ang]; a nih loh chuan [{{fullurl:{{FULLPAGENAME}}|action=edit}} he phêk hi i siamţha thei ang] </span>.',
+'noarticletext-nopermission'       => 'He phêkah hian thu a la awm hrih lo.
+He phêk hming hi hmun dangah i [[Special:Search/{{PAGENAME}}|zawng]] thei ang, a nih loh pawhin <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{GULLPAGENAMEE}}}} a laichin chanchin dang] i zawng thei bawk ang. </span>',
+'userpage-userdoesnotexist'        => 'Hmangtu siangchan "$1" hi hriat a ni lo.
+He phêk hi siam/siamţhat emaw i duh chuan enfiah rawh.',
+'userpage-userdoesnotexist-view'   => 'Hmangtu siangchan "$1" hi hriat a ni lo.',
+'blocked-notice-logextract'        => 'He hmangtu hi danbeh hrih a ni.
+I rawn atan a danbeh chhinchhiahna kan han tarlang a ni e:',
+'usercssyoucanpreview'             => "'''Rawlrûk:''' I CSS fiah tùrin i dahţhat hmain \"{{int:showpreview}}\" hmehkhep hi hmang rawh.",
+'userjsyoucanpreview'              => "'''Rawlrûk:''' I JavaScript thar fiah tùrin i dahţhat hmain \"{{int:showpreview}}\" hmehkhep hi hmang rawh.",
+'note'                             => "'''Hriat tùr:'''",
+'previewnote'                      => "'''Heihi endikna chauh a ni tih hrereng ang che.'''
+I tihdanglamna dahţhat a la ni lo!",
+'editing'                          => '$1 i siam(ţha) mék',
+'editingsection'                   => '$1 (hlawm) i siam(ţha) mék',
+'editingcomment'                   => '$1 (hlawm thar) i siam(ţha) mék',
+'editconflict'                     => 'Siamţhat inchuh: $1',
+'yourtext'                         => 'I thu tah hian:',
+'storedversion'                    => 'Ennawnna vawnţhat',
+'yourdiff'                         => 'Danglamnate',
+'semiprotectedpagewarning'         => "'''Hriat tùr:''' He phêk hi hmangtu inziaklûtte chauhvin an tihdanglam theihna tùra vènhim a ni.
+I rawn tùrin siamm-danglamna chanchin ziaka kan dahţhat thar ber a hnuaiah khuan kan chhawp e:",
+'templatesused'                    => 'He phêka {{PLURAL:$1|siamsa hman|siamsa hmante}}',
+'templatesusedpreview'             => 'He endiknaa {{PLURAL:$1|Siamsa hman|Siamsa hmante}}:',
+'templatesusedsection'             => 'Hemi hlawma  {{PLURAL:$1|Siamsa hman|Siamsa hmante}}',
+'template-protected'               => '(vènhim)',
+'template-semiprotected'           => '(hual)',
+'hiddencategories'                 => 'He phêk hi {{PLURAL:$1| pawl thuhrûk 1|pawl thuhrûk $1}}-a tel a ni.',
+'nocreatetitle'                    => 'Phêk siam theih chin bithliah',
+'nocreate-loggedin'                => 'Phêk thar siam phalna i nei lo.',
+'sectioneditnotsupported-title'    => 'Hlawm siamţhat bing theih loh',
+'sectioneditnotsupported-text'     => 'He phêkah hian hlawm siamţhat bing theih a ni lo.',
+'permissionserrors'                => 'Phalna dikhlel',
+'permissionserrorstext'            => 'He thil tih phalna hi i nei lo, a chhan{{PLURAL:$1||-te}} chu:',
+'permissionserrorstext-withaction' => '$2: he thil tih phalna hi i nei lo, a chhan{{PLURAL:$1||-te}} chu:',
+'recreate-moveddeleted-warn'       => "'''Vaukhanna: A hmaa paih tawh phêk i thar thawh leh a.'''
+He phêk buaipui chhunzawm hi a remchang nge chang lo tih inbihchiang rawh.
+Remchangah he phek paihna leh sawnna chhinchhiahna-ziak rawn chhawp chhuah a ni e:",
+'moveddeleted-notice'              => 'He phek hi paih tawh a ni.
+I rawn atan he phek paihna leh sawnna chanchin chhinchhiahna a hnuaiah khuan chhawp chhuah a ni.',
+'log-fulllog'                      => 'Chanchin chhinchhiah kimchang enna',
+'edit-conflict'                    => 'Siamţhat inchuh buaina.',
+'edit-already-exists'              => 'Phêk thar siam theih a ni lo.
+A awm tawh sa.',
+
+# Parser/template warnings
+'post-expand-template-inclusion-warning'  => "'''Vaukhanna:''' Siamsa telh a lian leh lutuk.
+Siamsa ţhenkhat hmaih a ni ang.",
+'post-expand-template-inclusion-category' => 'Siamsa telh theih lenzawng khûmna phêkte',
+'post-expand-template-argument-warning'   => "'''Vaukhanna:''' He phekah hian siamsa kawng kaihparh theih lenzawng nei lian leh lutuk pakhat tal a awm a ni.
+Heng kawngte hi hmaih mai tur.",
+'post-expand-template-argument-category'  => 'Siamsa kawng hmaih awmna phekte',
+
+# History pages
+'viewpagelogs'           => 'He phêk chanchin hi en rawh',
+'currentrev'             => 'Ennawnna hnuhnung ber',
+'currentrev-asof'        => 'Ni $1-a ennawnna hnuhnung ber',
+'revisionasof'           => '$1 -a ennawnna zawng',
+'revision-info'          => '$1-a $2 ennawnna',
+'previousrevision'       => '←Ennawnna hlui zâwk',
+'nextrevision'           => 'Ennawnna thar zâwk →',
+'currentrevisionlink'    => 'Ennawnna hnuhnung ber',
+'cur'                    => 'mék',
+'next'                   => 'dawt',
+'last'                   => 'hma',
+'page_first'             => 'hmasa ber',
+'page_last'              => 'tàwp ber',
+'histlegend'             => "Dnglmn thlanna: Ennawnna bawmte khu khaikhin tùrin klik rawh.
+Lamtawi hmante: '''({{int:cur}})'''= ennawnna thar ber nena danglamna, '''({{int:last}})'''=ennawnna hmasa nena danglamna, '''{{int:minoreditletter}}'''= siamţhatna tenau.",
+'history-fieldset-title' => 'Fanna chanchin',
+'history-show-deleted'   => 'Nuaibo tawh zawng chauh',
+'histfirst'              => 'Hmasa ber',
+'histlast'               => 'Hnuhnung ber',
+
+# Revision feed
+'history-feed-title'          => 'Ennawnna chanchin',
+'history-feed-item-nocomment' => '$1-in $2-ah',
+
+# Revision deletion
+'rev-delundel'               => 'tilang/thup',
+'rev-showdeleted'            => 'tihlanna',
+'revdelete-show-file-submit' => 'Aw',
+'revdelete-radio-set'        => 'Aw',
+'revdelete-radio-unset'      => 'Aih',
+'revdelete-log'              => 'Chhan:',
+'revdel-restore'             => 'lang chin tihdanglamna',
+'revdel-restore-deleted'     => 'ennawnna nuaibo tawhte',
+'revdel-restore-visible'     => 'ennawn hmuh theih chin',
+'pagehist'                   => 'Phêk chanchin',
+
+# Merge log
+'revertmerge' => 'Ţhenhranna',
+
+# Diffs
+'history-title'           => '"$1" ennawnna chanchin',
+'difference'              => '(Ennawnnate danglamna)',
+'lineno'                  => 'Tlar $1:',
+'compareselectedversions' => 'Ennawnna i thlan tâkte khi khaikhin rawh le',
+'editundo'                => 'tihletna',
+'diff-multi'              => '(Hmangtu {{PLURAL:$2|1-in|$2-ten}} a karlaka {{PLURAL:$2|a|an}} ennawnna {{PLURAL:$1|1|$1-te}} tihlan a ni lo)',
+
+# Search results
+'searchresults'                    => 'Zawn hmuhte',
+'searchresults-title'              => '"$1" tana zawn hmuhte',
+'prevn'                            => 'hmasa {{PLURAL:$1|$1}}',
+'nextn'                            => 'dawt {{PLURAL:$1|$1}}',
+'prevn-title'                      => '{{PLURAL:$1|Zawnchhuah|Zawnchhuah}}  hmasa $1',
+'nextn-title'                      => 'Zawnchhuah dawt leh $1 {{PLURAL:$1||}}',
+'shown-title'                      => 'Phek khatah zawnchhuah $1 {{PLURAL:$1||}} zel tilang rawh',
+'viewprevnext'                     => '($1 {{int:pipe-separator}} $2) ($3) en rawh',
+'searchmenu-exists'                => "'''He wiki-ah hian \"[[:\$1]]\" tia koh phêk a awm.'''",
+'searchmenu-new'                   => "'''[[:$1]] phek hi he wiki-ah hian siam rawh le!'''",
+'searchhelp-url'                   => 'Help:A chhunga thu awmte',
+'searchmenu-prefix'                => '[[Special:PrefixIndex/$1|He thuhmabet nei phêkte hi zawng rawh]]',
+'searchprofile-articles'           => 'A chhunga thu awm',
+'searchprofile-project'            => 'Ţanpuina leh hna-hmachhawp phekte',
+'searchprofile-images'             => 'Maltimedia',
+'searchprofile-everything'         => 'A vai',
+'searchprofile-advanced'           => 'Ràiril',
+'searchprofile-articles-tooltip'   => '$1-ah zawng rawh',
+'searchprofile-project-tooltip'    => '$1-ah zawng rawh',
+'searchprofile-images-tooltip'     => 'Taksa-ho zawnna',
+'searchprofile-everything-tooltip' => 'A chhung zawng chhuak vek rawh (sawihona tiamin)',
+'searchprofile-advanced-tooltip'   => 'Hminghmun thlansa-ah zawng rawh',
+'search-result-size'               => '$1 ({{PLURAL:$2|Thumal 1 |Thumal $2 }})',
+'search-result-category-size'      => '{{PLURAL:$1|Tel 1 |Tel $1 }} ({{PLURAL:$2|Pawlpéng 1 |Pawlpéng $2}}, {{PLURAL:$3|Taksa 1 |Taksa $3 f}})',
+'search-result-score'              => 'Intûkna: $1%',
+'search-redirect'                  => '($1 aţanga hruailuh)',
+'search-section'                   => '(hlawm $1)',
+'search-suggest'                   => '$1 i tihna a ni a ni zawk em?',
+'search-interwiki-caption'         => 'Hmachhawppuite',
+'search-interwiki-default'         => 'Chhuak $1:',
+'search-interwiki-more'            => '(tam)',
+'search-mwsuggest-enabled'         => 'rawtna telin',
+'search-mwsuggest-disabled'        => 'rawtna tel lovin',
+'search-relatedarticle'            => 'Laichin',
+'mwsuggest-disable'                => 'AJAX rawtna tithi rawh',
+'searcheverything-enable'          => 'Hminghmun zawng zawngah zawng rawh',
+'searchrelated'                    => 'laichin',
+'searchall'                        => 'a vaiin',
+'showingresultsheader'             => "'''$4''' tana {{PLURAL:$5|chhuak  '''$3''' zinga '''$1'''|chhuak '''$3''' zinga  '''$1 - $2'''  }}",
+'search-nonefound'                 => 'I zawn mil a awm lo',
+'powersearch'                      => 'Zawnna chi sang',
+'powersearch-legend'               => 'Zawnna chi sang',
+'powersearch-ns'                   => 'Hemi hminghmun chhungah hian zawng rawh:',
+'powersearch-redir'                => 'Thawnkual ngaiho',
+'powersearch-field'                => 'Hei hi zawng rawh:',
+'powersearch-togglelabel'          => 'Thai rawh:',
+'powersearch-toggleall'            => 'A vaiin',
+'powersearch-togglenone'           => 'Pakhat mah',
+'search-external'                  => 'Pawnlam zawnna',
+'searchdisabled'                   => '{{SITENAME}} zawnna tihthih a ni.
+Google hmangin i lo zawng hrih thei ang.
+{{SITENAME}} chhung zawnawlna hi a hlui lutuk tawh mai thei tih hria ang che.',
+
+# Quickbar
+'qbsettings'                => 'Hmanrawliang',
+'qbsettings-none'           => 'Pakhat mah',
+'qbsettings-fixedleft'      => 'Veilam',
+'qbsettings-fixedright'     => 'Dinglam',
+'qbsettings-floatingleft'   => 'Veilama lang',
+'qbsettings-floatingright'  => 'Dinglama lang',
+'qbsettings-directionality' => 'Bet, i ţawng inziahdàn hawzawnga zirin',
+
+# Preferences page
+'preferences'                   => 'Duhdàn',
+'mypreferences'                 => 'Ka duhdàn',
+'prefs-edits'                   => 'Siamţhat zât',
+'prefsnologin'                  => 'I la lût lo',
+'prefsnologintext'              => 'Hmangtu duhdàn siam tùrin i <span class="plainlinks"> [{{fullurl:{{#Special:UserLogin}}|returnto=$1}} inziah luh] </span> a ngai.',
+'changepassword'                => 'Thurûk thlâkna',
+'prefs-skin'                    => 'Vun',
+'skin-preview'                  => 'Enchhinna',
+'datedefault'                   => 'Duhdàn awm lo',
+'prefs-beta'                    => 'Beta hman theihnate',
+'prefs-datetime'                => 'Hun leh ni',
+'prefs-labs'                    => '"Lab" hman theihnate',
+'prefs-personal'                => 'Hmangtu chanchin tawi',
+'prefs-rc'                      => 'Tihdanglam thar',
+'prefs-watchlist'               => 'Ralvèn',
+'prefs-watchlist-days'          => 'Ralvèna ni tihlang tùr chin:',
+'prefs-watchlist-days-max'      => 'A rei berah ni $1 {{PLURAL:$1||}}',
+'prefs-watchlist-edits'         => 'Ralvèn pawhseia tihdanglam zât tihlan tùr tam ber:',
+'prefs-watchlist-edits-max'     => 'A tam ber: 1000',
+'prefs-watchlist-token'         => 'Ralvèn chhinchhiahrelh:',
+'prefs-misc'                    => 'Neuh neuh dang',
+'prefs-resetpass'               => 'Thurûk thlâkna',
+'prefs-changeemail'             => 'E-chenhmun thlâk rawh',
+'prefs-setemail'                => 'E-chenhmun ziak rawh',
+'prefs-email'                   => 'E-chenhmuh duhdàn',
+'prefs-rendering'               => 'Landàn',
+'saveprefs'                     => 'Dahţhatna',
+'resetprefs'                    => 'Tihdanglamna dahţhat loh tifai rawh',
+'restoreprefs'                  => 'A awmdàn siamsaah dah lêt vek rawh',
+'prefs-editing'                 => 'Siamţhat',
+'prefs-edit-boxsize'            => 'Siamţhatna tukverh lenzawng',
+'rows'                          => 'Tlar:',
+'columns'                       => 'Thlur:',
+'searchresultshead'             => 'Zawnna',
+'resultsperpage'                => 'Phêk khat tawh zât:',
+'stub-threshold-disabled'       => 'Tihnun a ni lo',
+'recentchangesdays'             => 'Tihdanglam thar ni tihlan tùr chin:',
+'recentchangesdays-max'         => 'A tam berah ni $1 {{PLURAL:$1||}}',
+'recentchangescount'            => 'Siamţhat tihlan ziah tùr zât:',
+'prefs-help-recentchangescount' => 'Hei hian tihdanglam thar, phêk chanchin leh tihdanglam a nihdàn a keng tel.',
+'savedprefs'                    => 'I duhdàn dahţhat a ni ta.',
+'timezonelegend'                => 'Hun-bial:',
+'localtime'                     => 'Tualchhung hun:',
+'timezoneuseserverdefault'      => 'Wiki ($1) hi hmang rawh',
+'timezoneuseoffset'             => 'A dang (sawi chiang la)',
+'timezoneoffset'                => 'Darkar inthlauhna:',
+'servertime'                    => 'Server hun:',
+'guesstimezone'                 => 'Rangpuifanna aţang dahkhat rawh',
+'timezoneregion-africa'         => 'Afrika',
+'timezoneregion-america'        => 'Amerika',
+'timezoneregion-antarctica'     => 'Antarktika',
+'timezoneregion-arctic'         => 'Arktik',
+'timezoneregion-asia'           => 'Asia',
+'timezoneregion-atlantic'       => 'Atlantik tuifinriat',
+'timezoneregion-australia'      => 'Australia',
+'timezoneregion-europe'         => 'Iurawp',
+'timezoneregion-indian'         => 'India tuifinriat',
+'timezoneregion-pacific'        => 'Tuifinriat dam',
+'allowemail'                    => 'Hmangtu dang e-lehkhathawn phal rawh',
+'prefs-searchoptions'           => 'Zawn duhthlanna',
+'prefs-namespaces'              => 'Hminghmun',
+'defaultns'                     => 'A nih loh vëk leh hêng hminghmunahte hian zawng rawh:',
+'default'                       => 'thlansa',
+'prefs-files'                   => 'Taksa',
+'prefs-custom-css'              => 'CSS hman',
+'prefs-custom-js'               => 'JavaScript hman',
+'prefs-common-css-js'           => 'CSS inţawm/vun zawng zawng tana JavaScript',
+'prefs-reset-intro'             => 'He phêk hi ränghmuna i duhthlansa tihdanglam nan i hmang thei.
+A sûtlêt theih loh.',
+'prefs-emailconfirm-label'      => 'E-chenhmun tihchianna:',
+'prefs-textboxsize'             => 'Siamţhatna tukverh lenzawng',
+'youremail'                     => 'E-chenhmun:',
+'username'                      => 'Hmangtu hming:',
+'uid'                           => 'Hmangtu ID',
+'prefs-memberingroups'          => '{{PLURAL:$1|pawl|pawlte}}-a tel.',
+'prefs-registration'            => 'Inziahluh hun:',
+'yourrealname'                  => 'Hming tak:',
+'yourlanguage'                  => 'Ţawng:',
+'yourvariant'                   => 'Ţawng hman dang:',
+'prefs-help-variant'            => 'Wiki phêk pholanna duhthlan.',
+'yournick'                      => 'Hmingtàr thar:',
+'prefs-help-signature'          => '"<nowiki>~~~~</nowiki>" tih i chhutna apiangah i hmingtàr leh hun a inziak zël ang.',
+'badsig'                        => 'Hmingtàr dik lo.
+HTML chhinchhiahna enfiah rawh.',
+'badsiglength'                  => 'I hmingtàr a sei lutuk.
+Hawrawp $1 {{PLURAL:$1||}} aiin a sei tùr a ni lo.',
+'yourgender'                    => 'Mipa/Hmeichhia:',
+'gender-unknown'                => 'Thup',
+'gender-male'                   => 'Mipa',
+'gender-female'                 => 'Hmeichhia',
+'prefs-help-gender'             => 'Hmaih awih: Khawlthluakin ka pu tih tùr nge ka pi tih tùr a hriat theih nan.
+Hei erawh hi chu tàrlan a ni ang (vantlang hmuh theihin).',
+'email'                         => 'E-chenhmun',
+'prefs-help-realname'           => 'Hming tak hi hmaih thiang.
+I hming tak ziahlan i duh chuan i hnaa chawimawina iloah hman a ni ang.',
+'prefs-help-email'              => 'E-chenhmun hi hmaih awih a ni a, mahsé i thurûk ilo i theihnghilh palhin hman a ţul ang.',
+'prefs-help-email-others'       => 'I hmangtu sawihona phêkah hmangtu dangte e-lehkha i inthawntir thei bawk ang i duh chuan.
+Hmangtuten e-lehkha an thawn chein i e-chenhmun hrilh an ni chuang lo vang.',
+'prefs-help-email-required'     => 'E-chenhmun ziah ngei ngei a ngai.',
+'prefs-info'                    => 'Chanchin tlanglawn',
+'prefs-i18n'                    => 'Khawvel-mil-a-herremna',
+'prefs-signature'               => 'Hmingtàr',
+'prefs-dateformat'              => 'Hun tarlan dan tùr',
+'prefs-timeoffset'              => 'Hun inthlauhna',
+'prefs-advancedediting'         => 'Duhthlan sang',
+'prefs-advancedrc'              => 'Duhthlan sang',
+'prefs-advancedrendering'       => 'Duhthlan sang',
+'prefs-advancedsearchoptions'   => 'Duhthlan sang',
+'prefs-advancedwatchlist'       => 'Duhthlan sang',
+'prefs-displayrc'               => 'Duhthlanna tilang rawh',
+'prefs-displaysearchoptions'    => 'Duhthlanna tilang rawh',
+'prefs-displaywatchlist'        => 'Duhthlanna tilang rawh',
+'prefs-diffs'                   => 'Danglamna',
+
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid'   => 'E-chenhmun a dik hmel',
+'email-address-validity-invalid' => 'E-chenhmun dik ziak rawh',
+
+# User rights
+'userrights'                   => 'Hmangtu dikna-chanvo enkawlna',
+'userrights-lookup-user'       => 'Hmangtu pawl enkawl rawh',
+'userrights-user-editname'     => 'Hmangtu hming ziak rawh:',
+'editusergroup'                => 'Hmangtu pawl siamţha rawh',
+'editinguser'                  => "Hmangtu '''[[User:$1|$1]]''' dikna-chanvo siamţhatna: $2",
+'userrights-editusergroup'     => 'Hmangtu pawl siamţha rawh',
+'saveusergroups'               => 'Hmangtu pawl dahţha rawh',
+'userrights-groupsmember'      => 'Telna pawl:',
+'userrights-groupsmember-auto' => 'Telsana pawl:',
+'userrights-reason'            => 'Chhan:',
+'userrights-no-interwiki'      => 'Wiki dangah hmangtute dikna-chanvo siam danglam theihna phalna i nei lo.',
+'userrights-nodatabase'        => 'Database $1 a awm lo a nih loh pawhin khawtual thil a nih loh hmel.',
+'userrights-nologin'           => 'Hmangtu dikna-chanvo bithliah thei tùr chuan roreltu siangchanin i [[Special:UserLogin| luh]] a ngai.',
+'userrights-notallowed'        => 'I siangchanin hmangtu dikna-chanvo belh leh paih theihna phalna a nei lo.',
+'userrights-changeable-col'    => 'I thlâk theih pawlte',
+'userrights-unchangeable-col'  => 'I thlâk theih loh pawlte',
+
+# Groups
+'group'               => 'Pawl:',
+'group-user'          => 'Hmangtute',
+'group-autoconfirmed' => 'Infinfiahsa hmangtute',
+'group-bot'           => 'Khawlmite',
+'group-sysop'         => 'Roreltute',
+'group-bureaucrat'    => 'Khawnbawlho',
+'group-suppress'      => 'Viltute',
+'group-all'           => '(a vaiin)',
+
+'group-user-member'          => 'Hmangtu {{GENDER:$1|}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|Infinfiahsa hmangtu}}',
+'group-bot-member'           => 'Khawlmi {{GENDER:$1|}}',
+'group-sysop-member'         => 'Roreltu {{GENDER:$1|}}',
+'group-bureaucrat-member'    => 'Khawnbawl {{GENDER:$1|}}',
+'group-suppress-member'      => 'Viltu {{GENDER:$1|}}',
+
+'grouppage-user'          => '{{ns:project}}:Hmangtute',
+'grouppage-autoconfirmed' => '{{ns:project}}:Infiahsa hmangtute',
+'grouppage-bot'           => '{{ns:project}}:Khawlmite',
+'grouppage-sysop'         => '{{ns:project}}:Roreltute',
+'grouppage-bureaucrat'    => '{{ns:project}}:Khawnbawlte',
+'grouppage-suppress'      => '{{ns:project}}:Viltute',
+
+# Rights
+'right-read'               => 'Heng phêkte hi chhiar rawh',
+'right-edit'               => 'Heng phêkte hi siamţha rawh',
+'right-createpage'         => 'Heng phêkte hi siam rawh (sawihona phêk ni lovin)',
+'right-createtalk'         => 'Sawihona phêk siam rawh',
+'right-createaccount'      => 'Hmangtu siangchan thar siam rawh',
+'right-minoredit'          => 'Siamţhat tenau angin chhinchhiah rawh',
+'right-move'               => 'Phêk sawnna',
+'right-move-subpages'      => 'Phêkte leh an phêkpéngte sawnna',
+'right-move-rootuserpages' => 'Hmangtu bulte sawnna',
+'right-movefile'           => 'Taksa sawnna',
+'right-upload'             => 'Taksa hlankaina',
+'right-reupload'           => 'Taksa awmsa ziahhnan rawh',
+'right-reupload-own'       => 'Mahni hlankai taksa awmsa ziahhnan rawh',
+'right-upload_by_url'      => 'URL hmangin taksa hlangkai rawh',
+'right-autoconfirmed'      => 'Phêk vèn-chanve-ho siamţha rawh',
+'right-bot'                => 'Khawl hnathawha ngaih ni rawh',
+'right-delete'             => 'Heng phêkte hi nuaibo/paih rawh',
+'right-bigdelete'          => 'Phêk chanchin ngah lutuk nuaibo rawh',
+'right-browsearchive'      => 'Phêk nuaibo tawh zawng lêt leh rawh',
+'right-undelete'           => 'Phêk nuaibo sût lêt rawh',
+'right-suppressionlog'     => 'Mahni chanchin tawi enna',
+'right-block'              => 'Hmangtu dangin an siam danglam tùr veng rawh',
+'right-blockemail'         => 'Hmangtu e-lehkha thawn tùr dang rawh',
+'right-hideuser'           => 'Hmangtu hming dangbet rawh, vantlang laka thupin',
+'right-unblockself'        => 'Mahnia dalna inphelh',
+
+# Associated actions - in the sentence "You do not have permission to X"
+'action-read'               => 'he phêk hi chhiar rawh',
+'action-edit'               => 'he phek hi siamţha rawh',
+'action-createpage'         => 'phêk siam tharna',
+'action-createtalk'         => 'sawihona phêk siamna',
+'action-createaccount'      => 'he hmangtu siangchan hi siam rawh',
+'action-minoredit'          => 'siamţhat tenauah chhiar rawh',
+'action-move'               => 'he phêk hi sawn rawh',
+'action-move-subpages'      => 'he phêk leh a phêkpéngte hi sawn rawh',
+'action-move-rootuserpages' => 'hmangtu bul phêk sawnna',
+'action-movefile'           => 'taksa sawnna',
+'action-upload'             => 'he taksa hi hlangkai rawh',
+'action-reupload'           => 'taksa awmsa luahlantir rawh',
+'action-upload_by_url'      => 'URL aţang he taksa hi hlangkai rawh',
+'action-writeapi'           => 'ziakna WPI hmang rawh',
+'action-delete'             => 'he phêk hi paih rawh',
+'action-deleterevision'     => 'he ennawnna hi paih rawh',
+'action-browsearchive'      => 'phêk nuaibo tawhte zawng rawh',
+'action-undelete'           => 'he phêk hi lakir leh rawh',
+'action-block'              => 'he hmangtuina a siam danglam tùr hi däl rawh',
+
+# Recent changes
+'nchanges'                        => 'Tihdanglam {{PLURAL:$1||$1-te}}',
+'recentchanges'                   => 'Tihdanglam thar',
+'recentchanges-legend'            => 'Tihdanglam thar duhdàn',
+'recentchangestext'               => 'He phek wiki-a tihdanglamna thar deuh deuhte chhui rawh.',
+'recentchanges-feed-description'  => 'He chawm-a wiki tihdanglamna thar deuh deuhte chhui rawh.',
+'recentchanges-label-newpage'     => 'He siamţhat hian phêk thar a siam',
+'recentchanges-label-minor'       => 'Hei hi siamţhatna tenau a ni',
+'recentchanges-label-bot'         => 'He siamţhat hi khawlmi tih a ni',
+'recentchanges-label-unpatrolled' => 'He siamţhat hi viltu la nei lo a ni',
+'rcnote'                          => "Ni $4, dar $5-a a landàna ni {{PLURAL:$2|khat|'''$2'''}} kaltaa tihdanglamna {{PLURAL:$1|'''1'''|thar ber ber '''$1'''}} a hnuaiah khuan kan rawn chhawp chhuak e.",
+'rcnotefrom'                      => "'''$2''' hnua tihdanglamna zawng zawng a hnuaiah khuan kan rawn tilang e ('''$1''' thleng chauh tihlan a ni).",
+'rclistfrom'                      => '$1 hnu lama tihdanglama tihlanna',
+'rcshowhideminor'                 => 'siamţhat tenau $1',
+'rcshowhidebots'                  => 'Khawlmi $1',
+'rcshowhideliu'                   => 'hmangtu inziaklut $1',
+'rcshowhideanons'                 => 'hming hriat loh $1',
+'rcshowhidepatr'                  => 'siamthat vil $1',
+'rcshowhidemine'                  => 'ka siamţhat $1',
+'rclinks'                         => 'Ni $2 kaltaa tihdanglamna hnuhnung $1 tihlanna<br /> $3.',
+'diff'                            => 'dnglmn',
+'hist'                            => 'chanchin',
+'hide'                            => 'Tihbona',
+'show'                            => 'Tihlanna',
+'minoreditletter'                 => 't',
+'newpageletter'                   => 'T',
+'boteditletter'                   => 'k',
+'rc-enhanced-expand'              => 'Tilang kim rawh (JavaScript a ngai)',
+'rc-enhanced-hide'                => 'Thup ţhenna',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Tihdanglam anpuite',
+'recentchangeslinked-toolbox'  => 'Tihdanglam anpuite',
+'recentchangeslinked-title'    => '"$1" kaihhnawih tihdanglamnate',
+'recentchangeslinked-noresult' => 'I hun thlan chhungah hian a phek zawmpui tihdanglam pakhat mah a awm lo.',
+'recentchangeslinked-summary'  => "Hei hi phek pakhat (emaw pawl pakhata telte) aţanga zawm chhuah phek-hova tihdanglam thar ziah chhuahna a ni.
+[[Special:Watchlist|I ralvèn]] phêkte chu '''hawrawp thau'''-a tihlan a ni.",
+'recentchangeslinked-page'     => 'Phek hming:',
+'recentchangeslinked-to'       => 'Phek peksaa zawm phekte tihdanglamnate tilang zawk rawh',
+
+# Upload
+'upload'                     => 'Taksa hlankaina',
+'uploadbtn'                  => 'Taksa hlankaina',
+'reuploaddesc'               => 'Hlankai ţhulh la hlankaina hmunah kir leh rawh',
+'upload-tryagain'            => 'Taksa sawifiahna siam danglam thehlut rawh',
+'uploadnologin'              => 'I la lût lo',
+'uploadnologintext'          => 'Taksa hlangkai tùrin i [[Special:UserLogin|inziahluh]] ngei ngei a ngai.',
+'upload_directory_missing'   => 'Hlankai bawmpui ($1)  a awm lo va, Rangserverin a siam thei lo bawl.',
+'upload_directory_read_only' => 'Hlankai bawmpui ($1) hi Rangserver in a ziak thei lo.',
+'uploaderror'                => 'Hlankai sual',
+'upload-permitted'           => 'Taksa phal chiho: $1.',
+'upload-preferred'           => 'Taksa duh deuh bîk: $1.',
+'upload-prohibited'          => 'Taksa khap: $1.',
+'uploadlog'                  => 'chanchin hlankaina',
+'uploadlogpage'              => 'Hlankai chhinchhiahna',
+'filename'                   => 'Taksahming',
+'filedesc'                   => 'Laktawi',
+'fileuploadsummary'          => 'Kaihtawi:',
+'filereuploadsummary'        => 'Taksa tihdanglamna:',
+'filestatus'                 => 'Copyright dinhmun:',
+'filesource'                 => 'Hnar:',
+'uploadedfiles'              => 'Taksa hlankai tawhte',
+'ignorewarning'              => 'Vaukhanna ngaihthah la taksa dahţha lui rawh',
+'ignorewarnings'             => 'Vaukhanna zawng zawng ngaihthah vek rawh',
+'minlength1'                 => 'Taksahming reng reng hawrawp pakhat tala sei a ni tur a ni.',
+'illegalfilename'            => 'Taksahming "$1"-in hawrawp phal loh a kengtel.
+A hming thlâk la bei ţha leh rawh.',
+'filename-toolong'           => 'Taksahming 240 bytes aiin a sei tùr a ni lo.',
+'badfilename'                => 'Taksahming "$1"-ah thlâk a ni.',
+'filetype-missing'           => 'Taksa in tawpna a nei lo (entirna ".jpg").',
+'empty-file'                 => 'I taksa thehluh kha a ruak.',
+'file-too-large'             => 'A lian leh lutuk.',
+'filename-tooshort'          => 'Taksahming a sawi leh lutuk.',
+'filetype-banned'            => 'Hetiang taksa hi khap a ni.',
+'verification-error'         => 'Finfiah loh.',
+'hookaborted'                => 'Tawpna-in a tikhaihlak.',
+'illegal-filename'           => 'Taksahming phal loh.',
+'overwrite'                  => 'Taksa awmsa ziah hnan khap a ni.',
+'unknown-error'              => 'Dikhlelhna hriat loh a lo thleng.',
+'uploadedimage'              => 'hlankai: "[[$1]]"',
+
+'license'        => 'Phalna:',
+'license-header' => 'Phalna:',
+
+# Special:ListFiles
+'imgfile'               => 'taksa (file)',
+'listfiles'             => 'Taksa tlarna',
+'listfiles_thumb'       => 'Kutbï',
+'listfiles_date'        => 'Ni',
+'listfiles_name'        => 'Hming',
+'listfiles_user'        => 'Hmangtu',
+'listfiles_size'        => 'Lenzawng',
+'listfiles_description' => 'Sawifiahna',
+'listfiles_count'       => 'Chhuah',
+
+# File description page
+'file-anchor-link'          => 'Taksa (file)',
+'filehist'                  => 'A chanchin enna',
+'filehist-help'             => 'A hunlaia a lan dan en tùrin a hun/ni-ah hmet rawh.',
+'filehist-deleteall'        => 'a vaiin nuaibo rawh',
+'filehist-deleteone'        => 'nuaibo rawh',
+'filehist-revert'           => 'tihlêtna',
+'filehist-current'          => 'mék',
+'filehist-datetime'         => 'Ni/Hun',
+'filehist-thumb'            => 'Kutbï',
+'filehist-thumbtext'        => '$1 chhuah kutbï',
+'filehist-nothumb'          => 'Kutbï awm lo',
+'filehist-user'             => 'Hmangtu',
+'filehist-dimensions'       => 'Lenzawng',
+'filehist-filesize'         => 'A lenzawng',
+'filehist-comment'          => 'Tuihnihna',
+'filehist-missing'          => 'Taksa a awm lo',
+'imagelinks'                => 'Bungraw hmanna',
+'linkstoimage'              => 'A hnuai  {{PLURAL:$1|phek 1|phek $1-te}} hian he taksa hi a hmang:',
+'nolinkstoimage'            => 'He taksa zawmtu/hmanna phêk pakhat mah a awm lo.',
+'sharedupload-desc-here'    => 'He taksa hi $1-a mi a ni a, hna-hmachhawp dangin an hmang ve mai thei.
+[Taksa sawifiahna phek $2]-a sawifiahna lang hetah hian kan rawh chhawp chhuak e.',
+'filepage-nofile'           => 'He hmingpu taksa a awm lo',
+'filepage-nofile-link'      => 'He hming pu taksa hi a awm lo va, mahsé i [$1 hlangkai thei] ang.',
+'uploadnewversion-linktext' => 'He taksa chhuah thar hi hlangkai rawh',
+'shared-repo-from'          => '$1 aţang',
+'shared-repo'               => 'chhêk-in inţawm',
+
+# File reversion
+'filerevert'        => '$1 tilêt rawh',
+'filerevert-legend' => 'Taksa tilêt rawh',
+
+# Random page
+'randompage' => 'Phêk kahpah',
+
+# Statistics
+'statistics'       => 'Lepsena',
+'statistics-pages' => 'Phekte',
+
+'disambiguationspage' => 'Template:thliar',
+
+'brokenredirects-edit'   => 'siamţhatna',
+'brokenredirects-delete' => 'paihna',
+
+'withoutinterwiki-legend' => 'Thuhmabet',
+'withoutinterwiki-submit' => 'Tihlanna',
+
+# Miscellaneous special pages
+'nbytes'            => 'Bait {{PLURAL:$1||}} $1',
+'nmembers'          => 'Tel (a chhunga awm) {{PLURAL:$1||$1}}',
+'popularpages'      => 'Phêk lärte',
+'prefixindex'       => 'Hmabet nei phek zawng zawng',
+'usercreated'       => '{{GENDER:$3|}}-in ni $1, dar $2 khan a siam a ni.',
+'newpages'          => 'Phek tharte',
+'newpages-username' => 'Hmangtu hming:',
+'ancientpages'      => 'Phek hluiho',
+'move'              => 'Sawnna',
+'pager-newer-n'     => '{{PLURAL:$1|thar zawk 1|thar zawk $1}}',
+'pager-older-n'     => '{{PLURAL:$1|hlui 1|hlui $1}}',
+
+# Book sources
+'booksources'               => 'Lehkhabu rawnte',
+'booksources-search-legend' => 'Lehkhabu hnar zingah zawng rawh',
+'booksources-go'            => 'Kal rawh le',
+
+# Special:Log
+'log' => 'Chanchin-ziak',
+
+# Special:AllPages
+'allpages'          => 'Phek zawng zawngte',
+'alphaindexline'    => '$1 aţanga $2',
+'nextpage'          => 'Phek dawt ($1)',
+'prevpage'          => 'Phêk hmasa ($1)',
+'allarticles'       => 'Phek zawng zawngte',
+'allinnamespace'    => 'Phêk zawng zawng (hminghmun $1-a mi)',
+'allnotinnamespace' => 'Phêk zawng zawng (hminghmun $1-a awm lo)',
+'allpagesprev'      => 'Hma',
+'allpagesnext'      => 'Dawt',
+'allpagessubmit'    => 'Kal rawh le',
+'allpagesprefix'    => 'Hemi thuhmabeta neih zawng hi pholang rawh:',
+'allpagesbadtitle'  => 'Phêk hming dik lo emaw ţawng dang/wiki dang thuhmabet a hmang palh a nih hmel.
+Phêk hminga hman awih loh hawrawp a hmang palh a ni mai thei bawk.',
+
+# Special:Categories
+'categories'                  => 'Pawlte',
+'special-categories-sort-abc' => 'a-aw-b indawtin',
+
+# Special:DeletedContributions
+'sp-deletedcontributions-contribs' => 'kutthawhnate',
+
+# Special:LinkSearch
+'linksearch-ok'   => 'Zawng rawh',
+'linksearch-line' => '$1 hi $2 aţanga thlunzawm a ni',
+
+# Special:Log/newusers
+'newuserlogpage' => 'Hmangtu siamna chanchin-ziak',
+
+# Special:ListGroupRights
+'listgrouprights-members' => '(tel zawng zawng)',
+
+# E-mail user
+'emailuser'           => 'He hmangtu hi e-lehkha thawn rawh',
+'emailusername'       => 'Hmangtu hming:',
+'emailusernamesubmit' => 'Thehlut rawh',
+'email-legend'        => 'Hmangtu dang {{SITENAME}} hnenah e-lehkha tawh rawh.',
+'emailfrom'           => 'Thawntu:',
+'emailto'             => 'Dawngtu:',
+'emailsubject'        => 'Thupui:',
+'emailmessage'        => 'Lehkha:',
+'emailsend'           => 'Thawnna',
+'emailccme'           => 'Min thawn ve nghal rawh.',
+'emailccsubject'      => '$1: $2 hnenah thawn bawk rawh',
+'emailsent'           => 'E-lehkha thawn a ni.',
+'emailsenttext'       => 'I e-lehkha thawn a ni.',
+
+# User Messenger
+'usermessage-editor' => 'Thuthawntu khawl',
+
+# Watchlist
+'watchlist'            => 'Ka ralvèn',
+'mywatchlist'          => 'Ka ralvèn',
+'watchlistfor2'        => '$1 tan $2',
+'nowatchlist'          => 'I ràlvènah engmah i nei lo.',
+'watchlistanontext'    => 'I ralvèn en tùrin emaw siamţha tùrin $1 rawh.',
+'watchnologin'         => 'I la lût lo',
+'watchnologintext'     => 'I ralvèn tidanglam tùrin i [[Special:UserLogin|inziahluh]] a ngai.',
+'addwatch'             => 'Ràlvèn zingah telh rawh',
+'removewatch'          => 'Ralvèn zing aţang paih rawh',
+'removedwatchtext'     => '"[[:$1]]" i [[Special:Watchlist|ralvèn]] zing aţanga paih a ni ta.',
+'watch'                => 'Véng rawh',
+'watchthispage'        => 'He phêk hi vil rawh',
+'unwatch'              => 'Vil tihtawpna',
+'unwatchthispage'      => 'Vil tihtawpna',
+'notanarticle'         => 'Phêk dikdawh a ni lo.',
+'watchnochange'        => 'I hun sawi chhungah khan i ralvèn khawih buai a ni lo.',
+'watchlist-details'    => 'I ralvèn zing aţanga {{PLURAL:$1| phêk $1 |phêk $1}}, sawihona phêk chhiar lohvin.',
+'wlheader-enotif'      => '*E-lehkha inhriattirna tihnun a ni.',
+'wlheader-showupdated' => "I tlawh hnuhnun ber hnua tihdanglam phêk te chu a '''thau'''va tihlan a ni.",
+'watchmethod-recent'   => 'phêk vèn tihdanglam leh danglam loh kan enfiah mek!',
+'watchmethod-list'     => 'phêk vèn tunhnaia tihdanglam a awm em kan enfiah',
+'watchlistcontains'    => '{{PLURAL:$1|phêk|}} $1 ral i veng.',
+'wlshowlast'           => 'Darkar $1 kalta-a tihdanglam tilang rawh , ni $2 kalta-a tihdanglam tilang rawh, $3 tilang rawh',
+'watchlist-options'    => 'Ralvèn duhdàn',
+
+# Delete
+'actioncomplete' => 'A zo ta',
+'actionfailed'   => 'A tlawlh',
+'dellogpage'     => 'Nuaibo chhinchhiahna',
+
+# Rollback
+'rollbacklink' => 'sûtlêtna',
+
+# Protect
+'protectlogpage'   => 'Venhim chhinchhiahna',
+'protectedarticle' => 'venhim: "[[$1]]"',
+
+# Undelete
+'undeletelink'           => 'enna/ngaiawhtirna',
+'undeleteviewlink'       => 'enna',
+'undelete-search-submit' => 'Zawnna',
+
+# Namespace form on various pages
+'namespace'      => 'Hminghmun:',
+'invert'         => 'Thlan lêtna',
+'blanknamespace' => '(Phekpui)',
+
+# Contributions
+'contributions'       => 'Hmangtu kutthawhnate',
+'contributions-title' => '$1 kutthawhnate',
+'mycontris'           => 'Ka kutthawhnate',
+'contribsub2'         => '$1 tan ($2) .',
+'uctop'               => '(chung)',
+'month'               => 'Thla (leh a hmalam):',
+'year'                => 'Kum (leh a hmalam):',
+
+'sp-contributions-newbies'  => 'Siangchan tharte kut-thawhna chauh tilang rawh',
+'sp-contributions-blocklog' => 'danbeh chhinchhiahna',
+'sp-contributions-uploads'  => 'hlankaite',
+'sp-contributions-logs'     => 'chanchin-ziak',
+'sp-contributions-talk'     => 'sawihona',
+'sp-contributions-search'   => 'Kutthawhna zawnna',
+'sp-contributions-username' => 'Chenhmun-IP emaw hmangtuhming:',
+'sp-contributions-toponly'  => 'Ka kut thawh vena chauh tilang rawh',
+'sp-contributions-submit'   => 'Zawng rawh le',
+
+# What links here
+'whatlinkshere'            => 'Hemi zawmpuite',
+'whatlinkshere-title'      => '$1-a thlunzawm phêkte',
+'whatlinkshere-page'       => 'Phêk:',
+'linkshere'                => "A hnuaia phêkte hian '''[[:$1]]''' hi an thlunzawm:",
+'nolinkshere'              => "'''[[:$1]]'''-a zawm phek pakhat mah a awm lo.",
+'isredirect'               => 'Hruailuhna phêk',
+'istemplate'               => 'ziahhnan',
+'isimage'                  => 'taksa thlunzawmna',
+'whatlinkshere-prev'       => '{{PLURAL:$1|hmasa|hmasa $1}}',
+'whatlinkshere-next'       => '{{PLURAL:$1|dawt|dawt $1}}',
+'whatlinkshere-links'      => '← thlunzawmna',
+'whatlinkshere-hideredirs' => 'hruailuhna $1',
+'whatlinkshere-hidetrans'  => 'ziahhnante $1',
+'whatlinkshere-hidelinks'  => 'zawmnate $1',
+'whatlinkshere-hideimages' => 'Thlalâk zawmna $1',
+'whatlinkshere-filters'    => 'Thlitfimna',
+
+# Block/unblock
+'blockip'                  => 'Hmangtu dangbet rawh',
+'blockip-title'            => 'Hmangtu dangbet rawh',
+'blockip-legend'           => 'Hmangtu dangbet rawh',
+'ipadressorusername'       => 'Chenhmun-IP emaw hmangtuhming:',
+'ipbexpiry'                => 'Tawphun:',
+'ipbreason'                => 'Chhan:',
+'ipbreasonotherlist'       => 'Chhan dang',
+'ipbsubmit'                => 'Hmangtu dangbet rawh',
+'ipboptions'               => 'darkar 2:2 hours, ni 1:1 day, ni 3:3 days, kar 1:1 week, kar 2:2 weeks, thla 1:1 month, thla 3:3 months, thla 6:6 months, kum 1:1 year, tiam chin awm lo:infinite',
+'ipblocklist'              => 'Hmangtu danbeh-ho',
+'ipblocklist-legend'       => 'Hmangtu danbeh zawng rawh',
+'blocklink'                => 'danbehna',
+'unblocklink'              => 'phelhna',
+'change-blocklink'         => 'danbeh tihdanglamna',
+'contribslink'             => 'thawhte',
+'blocklogpage'             => 'Danbeh chhinchhiahna',
+'blocklogentry'            => '[[$1]] hi  $2 thleng danbeh a ni $3',
+'block-log-flags-nocreate' => 'siangchan siam khap hrih a ni',
+
+# Move page
+'move-page'                    => '$1 hming thlâkna',
+'move-page-legend'             => 'Phêk hming thlâkna',
+'movepagetext-noredirectfixer' => "Hei hi phêk hming thlâkna a ni. A phêk chanchin-hlui zawng zawng pawh a sawn nghâl vek ang.
+A hming hlui kha hming thara hruailuhna phêkah chantir nghal a ni bawk dawn a ni.
+[[Special:DoubleRedirects|Hming thlâk nawn]] leh [[Special:BrokenRedirects|Hming thlâk chhumbung]] a awm loh nan fimkhur ang che.
+He phêk hlui zawmtute a hmun dik taka hruailuh a nih leh nih lohvah mawh i phur ang.
+
+I hming thar vuah ang hmingpu dang phêk a awm tawh chuan he phêk hming i thlak tum hi a thlak theih loh vang, a ruak emaw, hruailuhna phêk a ni emaw, siamţhat a la ni lo emaw te a nih ngawt loh chuan.
+Chumi awmzia chu, phêk awmsa i luahlantir thei lo va, mahsé a phêk hming hlui ngai i puttir leh thei thung tihna a ni.
+
+'''Vaukhanna!'''
+Phêk lar deuh tan chuan hei hi danglamna râpthlâk leh beisei loh tak i thlen thut thei tih hrechiang ang che;
+phêk hming thlâkina a nghawng theih thilte i hrechiang tih infiah ang che.",
+'movearticle'                  => 'Phêk hming thlâk tùr:',
+'moveuserpage-warning'         => "'''Vaukhanna:''' Hmangtu phêk i thlak dawn mek. A hmangtu phêk i thlak ringawt ang a, hmangtu hming erawh i thlâk dawn lo tih hria ang che.",
+'movenologin'                  => 'I la lût lo',
+'movenologintext'              => 'Phêk hming thlâk tùrin  [[Special:UserLogin|i (inziah)luh]] a ngai.',
+'movenotallowed'               => 'Phêk sawn phalna i nei lo.',
+'newtitle'                     => 'Hming thar:',
+'move-watch'                   => 'Phêk hnar leh phêk thar vil rawh',
+'movepagebtn'                  => 'A hming thlâk rawh le',
+'pagemovedsub'                 => 'A hming i thlâk fel ta',
+'movepage-moved'               => '\'\'\'"$1" kha "$2" tia thlâk a ni ta\'\'\'',
+'movepage-moved-redirect'      => 'Hruailuhna phêk siam nghal a ni.',
+'movelogpage'                  => 'Chanchin-ziak sawnna',
+'movenosubpage'                => 'He phêk hian phêkpéng a nei lo.',
+'movereason'                   => 'A chhan:',
+'revertmove'                   => 'tihlêtna',
+'delete_and_move'              => 'Nuaibo paha sawnna',
+'delete_and_move_text'         => '==Paih ngai a awm==
+"[[:$1]]" tih hming pu phêk a awm tawh.
+Hming thlâk thei tùra phêk awmsa paih i duh em?',
+'delete_and_move_confirm'      => 'Aw, a phêk awmsa chu paih ka duh',
+'delete_and_move_reason'       => '"[[$1]]" hming putu hmasa paih a ni ta.',
+'selfmove'                     => 'Hming hlui leh hming thar a inang reng nia;
+Amah leh amah inluahlantir a theih loh.',
+'immobile-source-namespace'    => '"$1" hminghmun chhunga phêkte sawn theih a ni lo',
+'immobile-target-namespace'    => '"$1" hminghmun chhungah phêk sawn luh theih a ni lo',
+'immobile-source-page'         => 'He phêk hming hi a thlâk theih loh.',
+
+# Export
+'export' => 'Phek thawnchhuahna',
+
+# Namespace 8 related
+'allmessagesname'           => 'Thuthawn hming',
+'allmessagesdefault'        => 'Thuthawn tùr ziahsa',
+'allmessages-language'      => 'Ţawng:',
+'allmessages-filter-submit' => 'Kal rawh le',
+
+# Thumbnails
+'thumbnail-more'  => 'Tihlenna',
+'filemissing'     => 'Taksa a awm lo',
+'thumbnail_error' => 'Zungbï siam hlawhchham: $1',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'                 => 'Nangma pual phek',
+'tooltip-pt-mytalk'                   => 'I sawihona phêk',
+'tooltip-pt-preferences'              => 'I duhthlante',
+'tooltip-pt-watchlist'                => 'Tihdanglam tùra i ruahman phêkte',
+'tooltip-pt-mycontris'                => 'I kutthawhna-ho ziahchhuahna',
+'tooltip-pt-login'                    => 'Inziak lut tura duh i ni; amaherawhchu a ţül kher lo.',
+'tooltip-pt-anonlogin'                => 'Inziak lut tura duh i ni; amaherawhchu, a ţül kher lo',
+'tooltip-pt-logout'                   => 'Chhuahna',
+'tooltip-ca-talk'                     => 'He phêk chungchang sawihona',
+'tooltip-ca-edit'                     => 'Hemi phek hi i siamţha thei.
+Khawngaihin i dahţhat/tlangzarh hmain endikna hmehkhep khu hmang ang che (hei hi hmet la a phek mawng lamah a lo lang mai ang)',
+'tooltip-ca-addsection'               => 'Hlawm thar ţanna',
+'tooltip-ca-viewsource'               => 'He phêk hi vènhim a ni
+A hnar i en thei ang.',
+'tooltip-ca-history'                  => 'Tunhmaa he phêk ennawnnate',
+'tooltip-ca-protect'                  => 'He phek hi venghim rawh',
+'tooltip-ca-delete'                   => 'He phek hi paih rawh',
+'tooltip-ca-move'                     => 'He phek hi sawn rawh',
+'tooltip-ca-watch'                    => 'I ralvèn zingah telh rawh',
+'tooltip-ca-unwatch'                  => 'He phêk hi i ralvèn aţang paih rawh',
+'tooltip-search'                      => '{{SITENAME}}-ah zawng rawh',
+'tooltip-search-go'                   => 'He hming pu chiah chiah phêk a awm chuan tah chuan kal rawh',
+'tooltip-search-fulltext'             => 'He thu hi phêk tam takah zawng rawh',
+'tooltip-p-logo'                      => 'Phekpui luhna',
+'tooltip-n-mainpage'                  => 'Phekpui luhna',
+'tooltip-n-mainpage-description'      => 'Phekpui luhna',
+'tooltip-n-portal'                    => 'He hna-hmachhawp chungchang, engnge i tih ve theih, leh thil mamawh zawnna',
+'tooltip-n-currentevents'             => 'Chanchin thar inziahna hmun dang zawng rawh',
+'tooltip-n-recentchanges'             => 'He wiki-a tihdanglam tharte',
+'tooltip-n-randompage'                => 'Phêk kahpah tilang rawh',
+'tooltip-n-help'                      => 'Tah hian kaihhruaina i zawng thei ang',
+'tooltip-t-whatlinkshere'             => 'Hemi zawmtu wiki phêk zawng zawng',
+'tooltip-t-recentchangeslinked'       => 'He phêk aţanga zawm chhuah phêk tihdanglam tharte',
+'tooltip-feed-rss'                    => 'He phêk RSS chawmna',
+'tooltip-feed-atom'                   => 'He phêk chawmna mal',
+'tooltip-t-contributions'             => 'He hmangtu kut-thawhnaho hi en rawh',
+'tooltip-t-emailuser'                 => 'He hmangtu hnenah hian e-lehkha thawn rawh',
+'tooltip-t-upload'                    => 'Taksa hlankaina',
+'tooltip-t-specialpages'              => 'Phek vohbik zawng zawng tlarna',
+'tooltip-t-print'                     => 'Nemkai theih',
+'tooltip-t-permalink'                 => 'He phêk ennawnna zawmna hlun',
+'tooltip-ca-nstab-main'               => 'A chhung thu awm ziahna en rawh',
+'tooltip-ca-nstab-user'               => 'Hmangtu phêk en rawh',
+'tooltip-ca-nstab-media'              => 'Media phêk en rawh',
+'tooltip-ca-nstab-special'            => 'Hei hi phek vohbik a ni a, i siam danglam thei lo',
+'tooltip-ca-nstab-project'            => 'Hna-hmachhawp phêk enna',
+'tooltip-ca-nstab-image'              => 'Taksa phêk en rawh',
+'tooltip-ca-nstab-mediawiki'          => 'Khawl thuthawn en rawh',
+'tooltip-ca-nstab-template'           => 'Siamsa en rawh',
+'tooltip-ca-nstab-help'               => 'Ţanpuina phêk en rawh',
+'tooltip-ca-nstab-category'           => 'Pawl phêk enna',
+'tooltip-minoredit'                   => 'Siamţhat tenauah ngai rawh',
+'tooltip-save'                        => 'I siam ang angin tlangzarh rawh le',
+'tooltip-preview'                     => 'I tihdanglamte endik rawh, i dahţhat hmain hei hi hmang ngei ang che',
+'tooltip-diff'                        => 'A thua i tihdanglamte en chianna',
+'tooltip-compareselectedversions'     => 'Ennawnna pahnihte inan lohna en rawh',
+'tooltip-watch'                       => 'I ralvèn zingah telh rawh',
+'tooltip-watchlistedit-normal-submit' => 'Thupui paihna',
+'tooltip-watchlistedit-raw-submit'    => 'Ralvèn tidanglam rawh',
+'tooltip-recreate'                    => 'Phêk paih tawh siam nawn rawh',
+'tooltip-upload'                      => 'Hlangkai ţan rawh',
+'tooltip-rollback'                    => '"Sûtlêtna" hian vawi khat hmeh (klik)-ah thawhtu hnuhnung ber siam danglamna a sût lêt a ni',
+'tooltip-undo'                        => "''Tihletna'' hian he siamţhat hi a sûtlêt a, siamţhatna phek chu endikna phek angin a hawng bawk. Thu tlangpui laktawi-ah a chhan ziahna a rawn chhawp nghal bawk.",
+'tooltip-preferences-save'            => 'I duhthlante dahţha rawh',
+'tooltip-summary'                     => 'A thu laktawi ziak rawh',
+
+# Attribution
+'siteuser'         => '{{SITENAME}} hmangtu $1.',
+'anonuser'         => '{{SITENAME}} hmangtu hriat loh $1',
+'lastmodifiedatby' => 'He phêk hi tihdanglam a nihna hnuhnüng ber chu  $2, $1 a ni a, a tidanglamtu chu $3 a ni.',
+'othercontribs'    => '$1 kutchhuak behchhana siam.',
+'others'           => 'a dangte',
+'siteusers'        => '{{SITENAME}} {{PLURAL:$2|hmangtu|hmangtute}} $1',
+'anonusers'        => '{{SITENAME}} hmangtu {{PLURAL:$2|hriat loh|hriat lohte}} $1.',
+'creditspage'      => 'Phêk siam theihna chhan',
+'nocredits'        => 'He phêk siamnaa bultumtute hriat a awm lo.',
+
+# Spam protection
+'spamprotectiontitle' => 'Thuthawn lawi lo danna',
+
+# Info page
+'pageinfo-title'            => '"$1" chungchanga hriattirna',
+'pageinfo-header-edits'     => 'Siamţhatnate',
+'pageinfo-header-watchlist' => 'Ralvèn',
+'pageinfo-header-views'     => 'En zât',
+'pageinfo-subjectpage'      => 'Phêk',
+'pageinfo-talkpage'         => 'Sawihona phêk',
+'pageinfo-watchers'         => 'Thlirtu zât',
+'pageinfo-edits'            => 'Siamţhat zât',
+'pageinfo-authors'          => 'Ziaktu hrang zât',
+'pageinfo-views'            => 'Thlir/en tawh zât',
+'pageinfo-viewsperedit'     => 'Siamţhat pakhat zel en zât',
+
+# Patrolling
+'markaspatrolleddiff'    => 'Vil angah chhiar rawh',
+'markaspatrolledtext'    => 'He phêk hi vil angin chhinchhiah rawh',
+'markedaspatrolled'      => 'Vil anga chhinchhiah a ni.',
+'markedaspatrolledtext'  => '[[:$1]] ennawnna thlansa hi vil anga chhinchhiah a ni.',
+'markedaspatrollederror' => 'Vil anga chhinchhiah theih a ni lo',
+
+# Patrol log
+'patrol-log-page'      => 'Vil chhinchhiahna',
+'log-show-hide-patrol' => 'Vil chhinchhiahna $1',
+
+# Image deletion
+'filedeleteerror-long' => 'Taksa paih tum laiin buaina a lo thleng
+
+$1',
+
+# Browsing diffs
+'previousdiff' => '←Siamţhatna hlui zâwk',
+'nextdiff'     => 'Siamţhatna thar zâwk→',
+
+# Media information
+'file-info-size'         => '$1 × $2 pixel, taksa lenzawng: $3, MIME chi: $4',
+'file-nohires'           => 'A aia fiahin kan ti thei lo',
+'svg-long-desc'          => 'SVG taksa, tihlen theihzawng $1 × $2 pixel, taksa lenzawng: $3',
+'show-big-image'         => 'Tihfiahna sang ber',
+'show-big-image-preview' => 'Endikna lenzawng: $1',
+'file-info-gif-looped'   => 'kual',
+
+# Bad image list
+'bad_image_list' => 'A ruangam chu hetiang hi a ni:
+
+Tlarchhuahna (*-a inţan tlar) chauh pawm a ni.
+Tlar pakhata zawmna hmasa ber chu taksa ţha lo zawmna a ni tùr a ni.
+Chu tlara zawmna dang awm reng reng chu bîk-thil-a ngaih a ni ang; tlar chhunga taksa awmna tùr phek kan tihna a nih chu.',
+
+# Metadata
+'metadata'        => 'Nepnawi  (metadata)',
+'metadata-help'   => 'He taksa hian hriatna dang a keng tel, thlalakna emaw ami siamna sekrek ilo aţanga lo awm a ni mai thei.
+He taksa hi a tira a nihphung tihdanglam tawh a nih chuan a chanchin ziah khuan a danglam hnu chanchin a huam tel lo mai thei.',
+'metadata-fields' => 'Thlalâk chanchin nepnawi he thuthawna tihlante hi thlalâk phek pholan huna chanchin nepnawi dawhkan thleh a nihin tihlan a ni ang.
+A bak zawng chu thuhrûk sa vek a ni ang.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* isospeedratings
+* focallength
+* artist
+* copyright
+* imagedescription
+* gpslatitude
+* gpslongitude
+* gpsaltitude',
+
+# EXIF tags
+'exif-source'       => 'Hnar:',
+'exif-writer'       => 'Ziaktu',
+'exif-languagecode' => 'Ţawng',
+'exif-iimversion'   => 'IIM chhuah',
+'exif-iimcategory'  => 'Pawl',
+
+# External editor support
+'edit-externally'      => 'Pawnlam hmanraw hmanga tihdanglamna',
+'edit-externally-help' => '(Hriat chian lehzualnan [//www.mediawiki.org/wiki/Manual:External_editors bundàn kaihhruaina phek] hi en rawh)',
+
+# 'all' in various places, this might be different for inflected languages
+'watchlistall2' => 'a vaiin',
+'namespacesall' => 'a vaiin',
+'monthsall'     => 'a vaiin',
+
+# action=watch/unwatch
+'confirm-watch-top'      => 'I ralvèn zingah i telh duh maw?',
+'confirm-unwatch-button' => 'Aw le',
+
+# Multipage image navigation
+'imgmultigo'   => 'Kal rawh le!',
+'imgmultigoto' => 'Phêk $1-ah kal rawh',
+
+# Table pager
+'ascending_abbrev'  => '<<',
+'descending_abbrev' => '>>',
+'table_pager_next'  => 'Phêk dawt',
+'table_pager_prev'  => 'Phêk hmasa',
+'table_pager_first' => 'Phêk hmasa ber',
+'table_pager_last'  => 'Phêk hnuhnung ber',
+
+# Watchlist editing tools
+'watchlisttools-view' => 'Tihdanglam hawih enna',
+'watchlisttools-edit' => 'Ralvèn enna leh siamţhatna',
+'watchlisttools-raw'  => 'Ralvèn siamţhatna',
+
+# Core parser functions
+'duplicate-defaultsort' => '\'\'\'Vaukhanna:\'\'\' Thliarfimna hmehkhep "$2" hian thliarfimna hmehkhep kamsa "$1" hi a luahlan.',
+
+# Special:FileDuplicateSearch
+'fileduplicatesearch-filename' => 'Taksahming',
+'fileduplicatesearch-submit'   => 'Zawnna',
+
+# Special:SpecialPages
+'specialpages'             => 'Phek vohbikte',
+'specialpages-group-login' => '(Inziah)luhna',
+
+# External image whitelist
+'external_image_whitelist' => '#He tlar hi a nih ang ngai ngaih hnuhchhiah tùr <pre>
+#A hnuaiah khuan thu hman zin pangngai chhumbung (tpchb) dah rawh (a hnuaia //-te inkara mi zawng khu)
+#Hei hi pawnlama zawm chhuah thlalâkte URL nen rem mil a ni ang
+#Milpui neite chu thlalâk anga pholan a ni ang a, nei lo chu thlalâk zawmna tihlan a ni thung ang
+# Bawhtah #-a inţan reng reng chu tuihnihna anga ngaih a ni ang
+#Hawrawppui leh te thliar hran a ngai
+
+#Tbchb zawng zawng hemi tlar chungah hian dah tùr. He tlar hi a nih ang ngai ngaia hnutchhiah tùr </pre>',
+
+# Special:Tags
+'tag-filter' => '[[Special:Tags|Tag]] thlitfimna:',
+
+# Feedback
+'feedback-subject' => 'Thupui:',
+'feedback-message' => 'Thu',
+'feedback-cancel'  => 'Sûtna',
+
+);
index 9a5ad14..7fcca67 100644 (file)
@@ -720,6 +720,9 @@ $2',
 'ns-specialprotected'  => 'Специјални страници не може да се уредуваат.',
 'titleprotected'       => "Овој наслов од страна на [[User:$1|$1]] е заштитен и не може да се создаде.
 Причината за тоа е: ''$2''.",
+'filereadonlyerror'    => "Не можам да ја изменам податотеката „$1“ бидејќи складиштето „$2“ е во незаписен режим.
+       
+Понуденото образложение гласи: „''$3''“.",
 
 # Virus scanner
 'virus-badscanner'     => "Лоша поставка: непознат проверувач на вируси: ''$1''",
@@ -733,7 +736,7 @@ $2',
 Да напоменеме дека некои страници може да продолжат да се прикажуваат како да сте најавени, се додека не го исчистите кешот на вашиот прелистувач.",
 'welcomecreation'            => '== Добредојдовте, $1! ==
 Вашата корисничка сметка е создадена.
-Не заборавајте да ги промените вашите [[Special:Preferences|{{SITENAME}} нагодувања]].',
+Не заборавајте да ги [[Special:Preferences|наместите вашите нагодувања]].',
 'yourname'                   => 'Корисничко име:',
 'yourpassword'               => 'Лозинка:',
 'yourpasswordagain'          => 'Повторете ја лозинката:',
@@ -1507,10 +1510,10 @@ $1",
 'saveusergroups'                 => 'Зачувај ги корисничките групи',
 'userrights-groupsmember'        => 'Член на:',
 'userrights-groupsmember-auto'   => 'Подразбран член на:',
-'userrights-groups-help'         => 'Ð\9cожеÑ\82е Ð´Ð° Ð³Ð¸ Ð¿Ñ\80омениÑ\82е Ð³Ñ\80Ñ\83пиÑ\82е Ð²Ð¾ ÐºÐ¾Ð¸ Ðµ Ð¾Ð²Ð¾Ñ\98 корисник:
-* Ð\9cаÑ\80киÑ\80ано, Ð·Ð½Ð°Ñ\87и Ð´ÐµÐºÐ° ÐºÐ¾Ñ\80иÑ\81никоÑ\82 Ðµ Ð²Ð¾ Ð³Ñ\80Ñ\83паÑ\82а.
-* Немаркирано, значи дека корисникот не е во групата.
-* Ð\85везда (*) Ð¾Ð·Ð½Ð°Ñ\87Ñ\83ва Ð´ÐµÐºÐ° Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ñ\98а Ñ\82Ñ\80гнеÑ\82е Ð³Ñ\80Ñ\83паÑ\82а Ð´Ð¾ÐºÐ¾Ð»ÐºÑ\83 Ñ\81Ñ\82е Ñ\98а Ð´Ð¾Ð´Ð°Ð»Ðµ, Ð¸ Ð¾Ð±Ñ\80аÑ\82но.',
+'userrights-groups-help'         => 'Ð\9cожеÑ\82е Ð´Ð° Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ\82е Ð½Ð° ÐºÐ¾Ð¸ Ð³Ñ\80Ñ\83пи Ð¿Ñ\80ипаÑ\93а корисник:
+* Ð¨Ñ\82иклиÑ\80ано - ÐºÐ¾Ñ\80иÑ\81никоÑ\82 Ðµ Ð²Ð¾ Ñ\82аа Ð³Ñ\80Ñ\83па.
+* Нештиклирано - корисникот не припаѓа на групата.
+* Ð\85вездиÑ\87ка (*) - Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ñ\98а Ð¾Ñ\82Ñ\81Ñ\82Ñ\80аниÑ\82е Ð³Ñ\80Ñ\83паÑ\82а Ð¾Ñ\82како Ñ\81Ñ\82е Ñ\98а Ð´Ð¾Ð´Ð°Ð»Ðµ (и Ð¾Ð±Ñ\80аÑ\82но).',
 'userrights-reason'              => 'Причина:',
 'userrights-no-interwiki'        => 'Немате дозвола за уредување на кориснички права на други викија.',
 'userrights-nodatabase'          => 'Базата на податоци $1 не постои или не е локална.',
@@ -1866,6 +1869,7 @@ $1',
 'backend-fail-closetemp'     => 'Не можев да ја затворам привремената податотека.',
 'backend-fail-read'          => 'Не можев да ја прочитам податотеката $1',
 'backend-fail-create'        => 'Не можев да ја создадам податотеката $1',
+'backend-fail-maxsize'       => 'Не можев да ја создадам податотеката $1 бидејќи е поголема од {{PLURAL:$2|$2 бајт|$2 бајти}}.',
 'backend-fail-readonly'      => 'Складишната основа „$1“ моментално не може да се запишува. Наведената причина гласи: „$2“',
 'backend-fail-synced'        => 'Податотеката „$1“ е во состојба недоследна во рамките на внатрешните складишни основи',
 'backend-fail-connect'       => 'Не можев да се поврзам со складишната основа „$1“.',
@@ -1873,6 +1877,9 @@ $1',
 'backend-fail-contenttype'   => 'Не можев да утврдам каква содржина има податотеката што треба да ја складирам во „$1“.',
 'backend-fail-batchsize'     => 'Складишната основа доби блок од $1 податочна {{PLURAL:$1|операција|операции}}, а ограничувањето е $2 {{PLURAL:$2|операција|операции}}.',
 
+'filejournal-fail-dbconnect' => 'Не можев да се поврзам со дневничката база за складишната основа „$1“.',
+'filejournal-fail-dbquery'   => 'Не можев да ја подновам дневничката база за складишната основа „$1“.',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Не можев да го отклучам „$1“ бидејќи не е заклучен.',
 'lockmanager-fail-closelock'   => 'Не можев да ја затворам податотеката-катанец за „$1“.',
@@ -2209,6 +2216,11 @@ $1',
 'allpagesbadtitle'  => 'Дадениот наслов е неважечки или има меѓујазичен или интервики префикс. Може да содржи повеќе знаци кои не смеат да се користат во наслови.',
 'allpages-bad-ns'   => 'Википедија не содржи именски простор „$1“.',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Гледате кеширана верзија на оваа страница, која може да е стара $1.',
+'cachedspecial-viewing-cached-ts'  => 'Гледате кеширана верзија на оваа страница, која може да се разликува од тековната.',
+'cachedspecial-refresh-now'        => 'Погл. најновата.',
+
 # Special:Categories
 'categories'                    => 'Категории',
 'categoriespagetext'            => '{{PLURAL:$1|Следната категорија содржи|Следните категории содржат}} страници или мултимедијални податотеки.
@@ -2349,7 +2361,7 @@ $1',
 'enotif_impersonal_salutation' => 'Википедија корисник',
 'changed'                      => 'изменета',
 'created'                      => 'создадена',
-'enotif_subject'               => '{{SITENAME}} страницата $PAGETITLE беше $CHANGEDORCREATED од $PAGEEDITOR',
+'enotif_subject'               => 'Страницата $PAGETITLE на {{SITENAME}} беше $CHANGEDORCREATED од $PAGEEDITOR',
 'enotif_lastvisited'           => 'Видете $1 за сите промени од вашата последна посета.',
 'enotif_lastdiff'              => 'Видете $1 за да ја видите оваа промена.',
 'enotif_anon_editor'           => 'анонимен корисник $1',
@@ -2362,7 +2374,7 @@ $NEWPAGE
 
 Опис од уредникот: $PAGESUMMARY $PAGEMINOREDIT
 
-Конакт на уредувачот:
+Конакт на уредникот:
 е-пошта: $PAGEEDITOR_EMAIL
 вики: $PAGEEDITOR_WIKI
 
@@ -4165,4 +4177,15 @@ $5
 'api-error-uploaddisabled'                => 'Подигањето е оневозможено на ова вики.',
 'api-error-verification-error'            => 'Податотеката е оштетена или има погрешна наставка.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|секунда|секунди}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|минута|минути}}',
+'duration-hours'     => '$1 {{PLURAL:$1|час|часа}}',
+'duration-days'      => '$1 {{PLURAL:$1|ден|дена}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|недела|недели}}',
+'duration-years'     => '{{PLURAL: $1|година|години}}',
+'duration-decades'   => '$1 {{PLURAL:$1|деценија|децении}}',
+'duration-centuries' => '$1 {{PLURAL:$1|век|века}}',
+'duration-millennia' => '$1 {{PLURAL:$1|милениум|милениуми}}',
+
 );
index a4c891e..01759e4 100644 (file)
@@ -1629,6 +1629,7 @@ $1",
 'newsectionsummary'                 => '/* $1 */ പുതിയ ഉപവിഭാഗം',
 'rc-enhanced-expand'                => 'അധികവിവരങ്ങൾ പ്രദർശിപ്പിക്കുക (ജാവാസ്ക്രിപ്റ്റ് സജ്ജമായിരിക്കണം)',
 'rc-enhanced-hide'                  => 'അധികവിവരങ്ങൾ മറയ്ക്കുക',
+'rc-old-title'                      => 'യഥാർത്ഥത്തിൽ "$1" ആയി സൃഷ്ടിക്കപ്പെട്ടു',
 
 # Recent changes linked
 'recentchangeslinked'          => 'അനുബന്ധ മാറ്റങ്ങൾ',
@@ -1696,7 +1697,7 @@ $2 {{PLURAL:$3|തരത്തിലുള്ള പ്രമാണം|തരങ
 'illegal-filename'            => 'പ്രമാണത്തിന്റെ പേര് അനുവദനീയമല്ല.',
 'overwrite'                   => 'നിലവിലുള്ള പ്രമാണത്തിന്റെ മുകളിൽ സ്ഥാപിക്കൽ അനുവദിച്ചിട്ടില്ല.',
 'unknown-error'               => 'അപരിചിതമായ പിഴവ് സംഭവിച്ചിരിക്കുന്നു.',
-'tmp-create-error'            => 'താതàµ\8dà´\95ാലിà´\95 à´ªàµ\8dരമാണà´\82 à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\95àµ\8dà´\95ാൻ à´\95à´´à´¿à´¯ില്ല.',
+'tmp-create-error'            => 'താതàµ\8dà´\95ാലിà´\95 à´ªàµ\8dരമാണà´\82 à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\95àµ\8dà´\95ാൻ à´\95à´´à´¿à´\9eàµ\8dà´\9eില്ല.',
 'tmp-write-error'             => 'താത്കാലിക പ്രമാണം സ്ഥാപിക്കാൻ ശ്രമിക്കുമ്പോൾ പിഴവുണ്ടായി.',
 'large-file'                  => 'പ്രമാണങ്ങളുടെ വലിപ്പം $1-ൽ കൂടരുതെന്നാണ്‌ നിഷ്ക്കർഷിക്കപ്പെട്ടിരിക്കുന്നത്. ഈ പ്രമാണത്തിന്റെ വലിപ്പം $2 ആണ്‌.',
 'largefileserver'             => 'സെർവറിൽ ചിട്ടപ്പെടുത്തിയതുപ്രകാരം ഈ പ്രമാണത്തിന്റെ വലിപ്പം അനുവദനീയമായതിലും കൂടുതലാണ്‌.',
@@ -1777,9 +1778,22 @@ $1',
 
 # File backend
 'backend-fail-stream'        => '$1 എന്ന പ്രമാണം സ്ട്രീം ചെയ്യാൻ കഴിഞ്ഞില്ല.',
+'backend-fail-backup'        => '$1 എന്ന പ്രമാണത്തിന്റെ ബാക്ക്അപ് എടുക്കാൻ കഴിഞ്ഞില്ല.',
 'backend-fail-notexists'     => '$1 എന്ന പ്രമാണം നിലവിലില്ല.',
+'backend-fail-hashes'        => 'ഒത്തുനോക്കാനായി പ്രമാണ ഹാഷുകൾ ലഭ്യമാക്കാൻ കഴിഞ്ഞില്ല.',
 'backend-fail-notsame'       => '$1 എന്ന് സമാനമല്ലാത്ത ഒരു പ്രമാണം നിലവിലുണ്ട്.',
+'backend-fail-invalidpath'   => '$1 എന്നത് സാധുവായ ഒരു ശേഖരണ പഥം അല്ല.',
+'backend-fail-delete'        => '$1 എന്ന പ്രമാണം മായ്ക്കാൻ കഴിഞ്ഞില്ല.',
 'backend-fail-alreadyexists' => '$1 എന്ന പ്രമാണം നിലവിലുണ്ട്.',
+'backend-fail-store'         => '$1 എന്ന പ്രമാണം $2 എന്നതിൽ ശേഖരിക്കാൻ കഴിഞ്ഞില്ല.',
+'backend-fail-copy'          => '$1 എന്ന പ്രമാണം $2 എന്നതിലേയ്ക്ക് പകർത്താൻ കഴിഞ്ഞില്ല.',
+'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'       => '{{PLURAL:$2|$2 ബൈറ്റ്സിലും|$2 ബൈറ്റിലും}} വലുതാണെന്ന കാരണത്താൽ $1 എന്ന പ്രമാണം സൃഷ്ടിക്കാൻ കഴിഞ്ഞില്ല.',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'സിപ് (ZIP) പരിശോധനകൾക്കായി പ്രമാണം തുറന്നപ്പോൾ പിഴവുണ്ടായി.',
@@ -2099,6 +2113,11 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 തലക്കെട്ടിൽ ഉപയോഗിക്കാൻ പാടില്ലാത്ത ഒന്നോ അതിലധികമോ ലിപികൾ ഇതിലുണ്ടാകാം.',
 'allpages-bad-ns'   => '{{SITENAME}} സംരംഭത്തിൽ "$1" എന്ന നാമമേഖല നിലവിലില്ല.',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'ഈ താളിന്റെ ശേഖരിച്ചുവച്ചിരിക്കുന്ന പതിപ്പാണ് നിങ്ങൾ കാണുന്നത്, ഇത് $1 വരെ പഴക്കമുള്ളതായിരിക്കാം.',
+'cachedspecial-viewing-cached-ts'  => 'ഈ താളിന്റെ ശേഖരിച്ചുവച്ചിരിക്കുന്ന പതിപ്പാണ് നിങ്ങൾ കാണുന്നത്, ഇത് യഥാർത്ഥപതിപ്പിൽനിന്നും വ്യത്യസ്തമായിരിക്കാം.',
+'cachedspecial-refresh-now'        => 'ഏറ്റവും പുതിയ പതിപ്പ് കാണുക.',
+
 # Special:Categories
 'categories'                    => 'വർഗ്ഗങ്ങൾ',
 'categoriespagetext'            => 'താഴെ കൊടുത്തിരിക്കുന്ന {{PLURAL:$1|വർഗ്ഗത്തിൽ|വർഗ്ഗങ്ങളിൽ}} താളുകളും പ്രമാണങ്ങളുമുണ്ട്.
@@ -2133,7 +2152,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 # Special:ActiveUsers
 'activeusers'            => 'സജീവ ഉപയോക്താക്കളുടെ പട്ടിക',
 'activeusers-intro'      => 'ഇത് കഴിഞ്ഞ {{PLURAL:$1|ദിവസം|$1 ദിവസങ്ങളിൽ}} ഏതെങ്കിലും വിധത്തിലുള്ള പ്രവർത്തനങ്ങൾ ചെയ്ത ഉപയോക്താക്കളുടെ പട്ടികയാണ്.',
-'activeusers-count'      => 'à´\85വസാനതàµ\8dà´¤àµ\86 {{PLURAL:$3|ഒരു ദിവസം|$3 ദിവസങ്ങളിൽ}} {{PLURAL:$1|ഒരു തിരുത്തൽ|$1 തിരുത്തലുകൾ}}',
+'activeusers-count'      => 'à´\95à´´à´¿à´\9eàµ\8dà´\9e {{PLURAL:$3|ഒരു ദിവസം|$3 ദിവസങ്ങളിൽ}} {{PLURAL:$1|ഒരു തിരുത്തൽ|$1 തിരുത്തലുകൾ}}',
 'activeusers-from'       => 'ഇങ്ങനെ തുടങ്ങുന്ന ഉപയോക്താക്കളെ കാട്ടുക:',
 'activeusers-hidebots'   => 'യന്ത്രങ്ങളെ മറയ്ക്കുക',
 'activeusers-hidesysops' => 'കാര്യനിർവാഹകരെ മറയ്ക്കുക',
@@ -2810,7 +2829,7 @@ $1',
 'imported-log-entries'       => '{{PLURAL:$1|രേഖയിലെ ഒരുൾപ്പെടുത്തൽ|രേഖയിലെ $1 ഉൾപ്പെടുത്തലുകൾ}} ഇറക്കുമതി ചെയ്തു.',
 'importfailed'               => 'ഇറക്കുമതി പരാജയപ്പെട്ടു: <nowiki>$1</nowiki>',
 'importunknownsource'        => 'അപരിചിതമായ ഇറക്കുമതി സ്രോതസ്സ് തരം',
-'importcantopen'             => 'à´\87à´±à´\95àµ\8dà´\95àµ\81മതി à´ªàµ\8dരമാണà´\82 à´¤àµ\81à´±à´\95àµ\8dà´\95ാൻ à´ªà´±àµ\8dറിയില്ല',
+'importcantopen'             => 'à´\87à´±à´\95àµ\8dà´\95àµ\81മതി à´ªàµ\8dരമാണà´\82 à´¤àµ\81à´±à´\95àµ\8dà´\95ാൻ à´\95à´´à´¿à´\9eàµ\8dà´\9eില്ല',
 'importbadinterwiki'         => 'മോശമായ അന്തർവിക്കി കണ്ണി',
 'importnotext'               => 'ശൂന്യം അല്ലെങ്കിൽ ഉള്ളടക്കം ഒന്നുമില്ല',
 'importsuccess'              => 'ഇറക്കുമതി ചെയ്തുകഴിഞ്ഞു!',
@@ -2844,7 +2863,7 @@ $1',
 
 # JavaScriptTest
 'javascripttest'                           => 'ജാവാസ്ക്രിപ്റ്റ് പരീക്ഷണം',
-'javascripttest-disabled'                  => 'ഈ പ്രക്രിയ സജ്ജമാക്കിയിട്ടില്ല.',
+'javascripttest-disabled'                  => 'à´\88 à´µà´¿à´\95àµ\8dà´\95ിയിൽ à´\88 à´ªàµ\8dà´°à´\95àµ\8dà´°à´¿à´¯ à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95ിയിà´\9fàµ\8dà´\9fà´¿à´²àµ\8dà´².',
 'javascripttest-title'                     => '$1 പരീക്ഷണങ്ങൾ നടക്കുന്നുണ്ട്',
 'javascripttest-pagetext-noframework'      => 'ഈ താൾ ജാവാസ്ക്രിപ്റ്റ് പരീക്ഷണങ്ങൾ നടത്താനായി മാറ്റിവെച്ചിരിക്കുന്നതാണ്.',
 'javascripttest-pagetext-unknownframework' => 'അപരിചിതമായ പരീക്ഷണ ചട്ടക്കൂട് "$1".',
@@ -2923,8 +2942,9 @@ $1',
 'tooltip-summary'                     => 'ചെറിയൊരു ചുരുക്കം ചേർക്കുക',
 
 # Stylesheets
-'common.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. എല്ലാ ദൃശ്യരൂപങ്ങൾക്കും ബാധകമായിരിക്കും */',
-'vector.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. വെക്റ്റർ ദൃശ്യരൂപത്തിനു ബാധകമായിരിക്കും*/',
+'common.css'   => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. എല്ലാ ദൃശ്യരൂപങ്ങൾക്കും ബാധകമായിരിക്കും */',
+'monobook.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. മോണോബുക്ക് ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
+'vector.css'   => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. വെക്റ്റർ ദൃശ്യരൂപത്തിനു ബാധകമായിരിക്കും*/',
 
 # Scripts
 'common.js' => '/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് എല്ലാ ഉപയോക്താക്കൾക്കും, എല്ലാ താളുകളിലും പ്രവർത്തിക്കുന്നതായിരിക്കും */',
index 35baad8..b92012e 100644 (file)
@@ -320,10 +320,10 @@ $messages = array(
 # User preference toggles
 'tog-underline'               => 'दुव्यांचे अधोरेखन:',
 'tog-justify'                 => 'परिच्छेद समान करा',
-'tog-hideminor'               => 'à¤\85लिकडील बदलांत छोटी संपादने दाखवू नका',
+'tog-hideminor'               => 'à¤\85लà¥\80कडील बदलांत छोटी संपादने दाखवू नका',
 'tog-hidepatrolled'           => 'पहारा दिलेली संपादने (नित्य पहाण्यात असलेली संपादने) अलीकडील बदलांमधून लपवा',
 'tog-newpageshidepatrolled'   => 'नवीन पृष्ठ यादीतून पहारा दिलेली पाने (नित्य पहाण्यात असलेली संपादने)  लपवा',
-'tog-extendwatchlist'         => 'पहारà¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80त (नित्य पहाण्यात असलेली पाने) सर्व बदल दाखवा, फक्त अलीकडील बदल नकोत',
+'tog-extendwatchlist'         => 'पहाऱà¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 (नित्य पहाण्यात असलेली पाने) सर्व बदल दाखवा, फक्त अलीकडील बदल नकोत',
 'tog-usenewrc'                => 'वाढीव अलीकडील बदल वापरा (जावास्क्रीप्टच्या उपलब्धतेची गरज)',
 'tog-numberheadings'          => 'शीर्षके स्वयंक्रमांकित करा',
 'tog-showtoolbar'             => 'संपादन चिन्हे दाखवा (जावास्क्रीप्ट)',
@@ -332,15 +332,15 @@ $messages = array(
 'tog-editsectiononrightclick' => 'विभाग शीर्षकावर उजव्या क्लीकने संपादन करा(जावास्क्रीप्ट)',
 'tog-showtoc'                 => 'पानात ३ पेक्षा जास्त शीर्षके असल्यास अनुक्रमणिका दाखवा',
 'tog-rememberpassword'        => 'माझा प्रवेश या संगणकावर लक्षात ठेवा (जास्तीत जास्त $1 {{PLURAL:$1|दिवसासाठी|दिवसांसाठी}})',
-'tog-watchcreations'          => 'मà¥\80 à¤¤à¤¯à¤¾à¤° à¤\95à¥\87लà¥\87लà¥\80 à¤ªà¤¾à¤¨à¥\87 à¤®à¤¾à¤\9dà¥\8dया à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80त (माà¤\9dà¥\80 à¤¨à¤¿à¤¤à¥\8dय à¤ªà¤¹à¤¾à¤£à¥\8dयाà¤\9aà¥\80 à¤¸à¥\82à¤\9aà¥\80त)टाका',
-'tog-watchdefault'            => 'मà¥\80 à¤¸à¤\82पादित à¤\95à¥\87लà¥\87लà¥\80 à¤ªà¤¾à¤¨à¥\87 à¤®à¤¾à¤\9dà¥\8dया à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80त टाका',
-'tog-watchmoves'              => 'मी स्थानांतरीत केलेली पाने माझ्या पहार्‍याच्या सूचीत (माझी नित्य पहाण्याची सूचीत) टाका',
-'tog-watchdeletion'           => 'मà¥\80 à¤µà¤\97ळलà¥\87लà¥\80 à¤ªà¤¾à¤¨à¥\87 à¤®à¤¾à¤\9dà¥\8dया à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80त (माà¤\9dà¥\80 à¤¨à¤¿à¤¤à¥\8dय à¤ªà¤¹à¤¾à¤£à¥\8dयाà¤\9aà¥\80 à¤¸à¥\82à¤\9aà¥\80त) टाका',
+'tog-watchcreations'          => 'मà¥\80 à¤¤à¤¯à¤¾à¤° à¤\95à¥\87लà¥\87लà¥\80 à¤ªà¤¾à¤¨à¥\87 à¤®à¤¾à¤\9dà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 (माà¤\9dà¥\80 à¤¨à¤¿à¤¤à¥\8dय à¤ªà¤¹à¤¾à¤£à¥\8dयाà¤\9aà¥\80 à¤¸à¥\82à¤\9aà¥\80)टाका',
+'tog-watchdefault'            => 'मà¥\80 à¤¸à¤\82पादित à¤\95à¥\87लà¥\87लà¥\80 à¤ªà¤¾à¤¨à¥\87 à¤®à¤¾à¤\9dà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 टाका',
+'tog-watchmoves'              => 'मी स्थानांतर केलेली पाने माझ्या पहाऱ्याच्या सूचीमध्ये (माझी नित्य पहाण्याची सूची) टाका',
+'tog-watchdeletion'           => 'मà¥\80 à¤µà¤\97ळलà¥\87लà¥\80 à¤ªà¤¾à¤¨à¥\87 à¤®à¤¾à¤\9dà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 (माà¤\9dà¥\80 à¤¨à¤¿à¤¤à¥\8dय à¤ªà¤¹à¤¾à¤£à¥\8dयाà¤\9aà¥\80 à¤¸à¥\82à¤\9aà¥\80) टाका',
 'tog-minordefault'            => "सर्व संपादने 'छोटा बदल' म्हणून आपोआप जतन करा.",
 'tog-previewontop'            => 'झलक संपादन खिडकीच्या आधी दाखवा',
 'tog-previewonfirst'          => 'पहिल्या संपादनानंतर झलक दाखवा',
 'tog-nocache'                 => 'न्याहाळकाची पान सय (कॅशिंग) अक्षम (निकमी) करा',
-'tog-enotifwatchlistpages'    => 'माà¤\9dà¥\8dया à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\80ल (नितà¥\8dय à¤ªà¤¹à¤¾à¤£à¥\8dयात à¤\85सलà¥\87लà¥\80 à¤¸à¥\82à¤\9aà¥\80) à¤ªà¤¾à¤¨ à¤¬à¤¦à¤²à¤²à¥\8dयास à¤®à¤²à¤¾ à¤µà¤¿à¤°à¥\8bप (e-mail) पाठवा',
+'tog-enotifwatchlistpages'    => 'माà¤\9dà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधà¥\80ल (नितà¥\8dय à¤ªà¤¹à¤¾à¤£à¥\8dयात à¤\85सलà¥\87लà¥\80 à¤¸à¥\82à¤\9aà¥\80) à¤ªà¤¾à¤¨ à¤¬à¤¦à¤²à¤²à¥\8dयास à¤®à¤²à¤¾ à¤\88-मà¥\87ल पाठवा',
 'tog-enotifusertalkpages'     => 'माझ्या चर्चा पानावर बदल झाल्यास मला विरोप (ई-मेल) पाठवा',
 'tog-enotifminoredits'        => 'मला छोट्या बदलांकरीता सुद्धा विरोप पाठवा',
 'tog-enotifrevealaddr'        => 'सूचना विरोपात माझा विरोपाचा (ई-मेल ) पत्ता दाखवा',
@@ -352,12 +352,12 @@ $messages = array(
 'tog-showjumplinks'           => '"कडे जा" सुगम दुवे, उपलब्ध करा.',
 'tog-uselivepreview'          => 'संपादन करता करताच झलक दाखवा (जावास्क्रीप्ट)(प्रयोगक्षम)',
 'tog-forceeditsummary'        => 'जर ’बदलांचा आढावा’ दिला नसेल तर मला सूचित करा',
-'tog-watchlisthideown'        => 'पहारà¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤®à¤¾à¤\9dà¥\87 à¤¬à¤¦à¤² à¤²à¤ªà¤µà¤¾',
-'tog-watchlisthidebots'       => 'पहारà¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤¸à¤¾à¤\82à¤\97à¤\95ामà¥\8dयाà¤\82à¤\9aà¥\87 à¤¬à¤¦à¤² à¤²à¤ªà¤µà¤¾',
-'tog-watchlisthideminor'      => 'माà¤\9dà¥\8dया à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤\9bà¥\8bà¤\9fà¥\87 à¤¬à¤¦à¤² à¤²à¤ªà¤µà¤¾',
-'tog-watchlisthideliu'        => 'पहारà¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤ªà¥\8dरवà¥\87श à¤\95à¥\87लà¥\87लà¥\8dया à¤¸à¤¦à¤¸à¥\8dयाà¤\82à¤\9aà¥\80 à¤¸à¤\82पादनà¥\87 à¤²à¤ªà¤µà¤¾',
-'tog-watchlisthideanons'      => 'पहाâ\80\8dरà¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤\85नामिà¤\95 à¤¸à¤¦à¤¸à¥\8dयाà¤\82à¤\9aà¥\80 à¤¸à¤\82पादनà¥\87 à¤²à¤ªà¤µà¤¾',
-'tog-watchlisthidepatrolled'  => 'पहारà¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤¤à¤ªà¤¾à¤¸à¤²à¥\87लà¥\80 à¤¸à¤\82पादनà¥\87 à¤²à¤ªà¤µà¤¾',
+'tog-watchlisthideown'        => 'पहाऱà¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤®à¤¾à¤\9dà¥\87 à¤¬à¤¦à¤² à¤²à¤ªà¤µà¤¾',
+'tog-watchlisthidebots'       => 'पहाऱà¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤¸à¤¾à¤\82à¤\97à¤\95ामà¥\8dयाà¤\82à¤\9aà¥\87 à¤¬à¤¦à¤² à¤²à¤ªà¤µà¤¾',
+'tog-watchlisthideminor'      => 'माà¤\9dà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤\9bà¥\8bà¤\9fà¥\87 à¤¬à¤¦à¤² à¤²à¤ªà¤µà¤¾',
+'tog-watchlisthideliu'        => 'पहाऱà¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤ªà¥\8dरवà¥\87श à¤\95à¥\87लà¥\87लà¥\8dया à¤¸à¤¦à¤¸à¥\8dयाà¤\82à¤\9aà¥\80 à¤¸à¤\82पादनà¥\87 à¤²à¤ªà¤µà¤¾',
+'tog-watchlisthideanons'      => 'पहाâ\80\8dऱà¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤\85नामिà¤\95 à¤¸à¤¦à¤¸à¥\8dयाà¤\82à¤\9aà¥\80 à¤¸à¤\82पादनà¥\87 à¤²à¤ªà¤µà¤¾',
+'tog-watchlisthidepatrolled'  => 'पहाऱà¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤¤à¤ªà¤¾à¤¸à¤²à¥\87लà¥\80 à¤¸à¤\82पादनà¥\87 à¤²à¤ªà¤µà¤¾',
 'tog-ccmeonemails'            => 'मी इतर सदस्यांना पाठविलेल्या ई-मेल च्या प्रती मलाही माझ्या ई-मेल पत्त्यावर पाठवा',
 'tog-diffonly'                => 'निवडलेल्या आवृत्त्यांमधील बदल दाखवताना जुनी आवृत्ती दाखवू नका.',
 'tog-showhiddencats'          => 'लपविलेले वर्ग दाखवा',
@@ -645,7 +645,7 @@ MySQL returned error "$3: $4".',
 'enterlockreason'      => 'विदागारास ताळे ठोकण्याचे कारण, ताळे उघडले जाण्याच्या अदमासे कालावधीसहीत द्या.',
 'readonlytext'         => 'बहुधा विदागार मेंटेनन्सकरिता नवीन भर घालण्यापासून आणि इतर बदल करण्यापासून बंद ठेवण्यात आला आहे, मेंटेनन्सनंतर तो नियमीत होईल.
 
-ताळà¥\87 à¤ à¥\8bà¤\95णारà¥\8dâ\80\8dया à¤ªà¥\8dरबà¤\82धà¤\95ाà¤\82नà¥\80 à¤\96ालà¥\80ल à¤\95ारण à¤¨à¤®à¥\81द à¤\95à¥\87लà¥\87 à¤\86हà¥\87: $1',
+ताळà¥\87 à¤ à¥\8bà¤\95णाऱà¥\8dया à¤ªà¥\8dरबà¤\82धà¤\95ाà¤\82नà¥\80 à¤\96ालà¥\80ल à¤\95ारण à¤¨à¤®à¥\81द à¤\95à¥\87लà¥\87 à¤\86हà¥\87: $1',
 'missing-article'      => 'डाटाबेसला "$1" $2 नावाचे पान मिळालेले नाही, जे मिळायला हवे होते.
 
 असे बहुदा संपुष्टात आलेल्या फरकामुळे किंवा वगळलेल्या पानाच्या इतिहास दुव्यामुळे घडते.
@@ -732,7 +732,7 @@ $2',
 'gotaccount'                 => "जुने खाते आहे? '''$1'''.",
 'gotaccountlink'             => 'प्रवेश करा',
 'userlogin-resetlink'        => 'प्रवेश तपशील विसरला आसाल तर येथे टिचकी मारा.',
-'createaccountmail'          => 'à¤\87मेल द्वारे',
+'createaccountmail'          => 'à¤\88-मेल द्वारे',
 'createaccountreason'        => 'कारण:',
 'badretype'                  => 'आपला परवलीचा शब्द चुकीचा आहे.',
 'userexists'                 => 'या नावाने सदस्याची नोंदणी झालेली आहे.
@@ -755,16 +755,16 @@ $2',
 'passwordtooshort'           => 'तुमचा परवलीचा शब्द जरूरीपेक्षा लहान आहे. यात कमीत कमी {{PLURAL:$1|१ अक्षर |$1 अक्षरे}} पाहिजेत.',
 'password-name-match'        => 'आपला परवलीचा शब्द हा आपल्या सदस्यनावापेक्षा वेगळा हवा.',
 'password-login-forbidden'   => 'या सदस्यनामाचा व परवलीच्या शब्दाचा वापर निषिद्ध आहे.',
-'mailmypassword'             => 'परवलà¥\80à¤\9aा à¤¨à¤µà¥\80न à¤¶à¤¬à¥\8dद à¤\87मेल पत्त्यावर पाठवा',
+'mailmypassword'             => 'परवलà¥\80à¤\9aा à¤¨à¤µà¥\80न à¤¶à¤¬à¥\8dद à¤\88-मेल पत्त्यावर पाठवा',
 'passwordremindertitle'      => '{{SITENAME}}करिता नवा तात्पुरता परवलीचा शब्दांक.',
 'passwordremindertext'       => 'कुणीतरी (कदाचित तुम्ही, अंकपत्ता $1 कडून) {{SITENAME}} करिता ’नवा परवलीचा शब्दांक पाठवावा’ अशी विनंती केली आहे ($4).
 "$2" सदस्याकरिता परवलीचा शब्दांक "$3" झाला आहे.
 तुम्ही आता प्रवेश करा व तुमचा परवलीचा शब्दांक बदला. तुमचा अस्थायी शब्दांक {{PLURAL:$5|एका दिवसात|$5 दिवसांत}} संपेल.
 
 जर ही विनंती इतर कुणी केली असेल किंवा तुम्हाला तुमचा परवलीचा शब्दांक आठवला असेल आणि तुम्ही तो आता बदलू इच्छित नसाल तर, तुम्ही हा संदेश दुर्लक्षित करून जुना परवलीचा शब्दांक वापरत राहू शकता.',
-'noemail'                    => '"$1" à¤¸à¤¦à¤¸à¥\8dयासाठà¥\80 à¤\95à¥\8bणताहà¥\80 à¤\87मेल पत्ता दिलेला नाही.',
+'noemail'                    => '"$1" à¤¸à¤¦à¤¸à¥\8dयासाठà¥\80 à¤\95à¥\8bणताहà¥\80 à¤\88-मेल पत्ता दिलेला नाही.',
 'noemailcreate'              => 'आपण वैध विरोप-पत्ता (ई-मेल ऍड्रेस) देणे आवश्यक आहे.',
-'passwordsent'               => '"$1" à¤¸à¤¦à¤¸à¥\8dयाà¤\9aà¥\8dया à¤\87मेल पत्त्यावर परवलीचा नवीन शब्द पाठविण्यात आलेला आहे.
+'passwordsent'               => '"$1" à¤¸à¤¦à¤¸à¥\8dयाà¤\9aà¥\8dया à¤\88-मेल पत्त्यावर परवलीचा नवीन शब्द पाठविण्यात आलेला आहे.
 तो शब्द वापरुन पुन्हा प्रवेश करा.',
 'blocked-mailpassword'       => 'संपादनापासून तुमच्या अंकपत्त्यास आडविण्यात आले आहे,आणि म्हणून दुरूपयोग टाळ्ण्याच्या दृष्टीने परवलीचाशब्द परत मिळवण्यास सुद्धा मान्यता उपलब्ध नाही.',
 'eauthentsent'               => 'नामांकित ई-मेल पत्त्यावर एक निश्चितता स्वीकारक ई-मेल पाठविला गेला आहे.
@@ -776,7 +776,7 @@ $2',
 'emailnotauthenticated'      => 'तुमचा ई-मेल पत्ता तपासलेला नाही. खालील कार्यांकरिता ई-मेल पाठविला जाणार नाही.',
 'noemailprefs'               => 'खालील सुविधा कार्यान्वित करण्यासाठी इ-मेल पत्ता पुरवा.',
 'emailconfirmlink'           => 'आपला ई-मेल पत्ता तपासून पहा.',
-'invalidemailaddress'        => 'तà¥\81मà¥\8dहà¥\80 à¤¦à¤¿à¤²à¥\87ला à¤\87मà¥\87ल à¤ªà¤¤à¥\8dता à¤\9aà¥\81à¤\95à¥\80à¤\9aा à¤\86हà¥\87, à¤\95ारण à¤¤à¥\8b à¤¯à¥\8bà¤\97à¥\8dयपà¥\8dरà¤\95ारà¥\87 à¤²à¤¿à¤¹à¤¿à¤²à¥\87ला à¤¨à¤¾à¤¹à¥\80. à¤\95à¥\83पया à¤¯à¥\8bà¤\97à¥\8dयपà¥\8dरà¤\95ारà¥\87 à¤\87मेल पत्ता लिहा अथवा ती जागा मोकळी सोडा.',
+'invalidemailaddress'        => 'तà¥\81मà¥\8dहà¥\80 à¤¦à¤¿à¤²à¥\87ला à¤\88-मà¥\87ल à¤ªà¤¤à¥\8dता à¤\9aà¥\81à¤\95à¥\80à¤\9aा à¤\86हà¥\87, à¤\95ारण à¤¤à¥\8b à¤¯à¥\8bà¤\97à¥\8dयपà¥\8dरà¤\95ारà¥\87 à¤²à¤¿à¤¹à¤¿à¤²à¥\87ला à¤¨à¤¾à¤¹à¥\80. à¤\95à¥\83पया à¤¯à¥\8bà¤\97à¥\8dयपà¥\8dरà¤\95ारà¥\87 à¤\88-मेल पत्ता लिहा अथवा ती जागा मोकळी सोडा.',
 'cannotchangeemail'          => 'या विकीवर खात्याचा ईमेल बदलता येत नाही',
 'accountcreated'             => 'खाते उघडले.',
 'accountcreatedtext'         => '$1 चे सदस्यखाते उघडले.',
@@ -797,7 +797,7 @@ $2',
 
 # Change password dialog
 'resetpass'                 => 'परवलीचा शब्द बदला',
-'resetpass_announce'        => 'तà¥\81मà¥\8dहà¥\80 à¤\87मà¥\87लमधून दिलेल्या तात्पुरत्या शब्दांकाने प्रवेश केलेला आहे. आपली सदस्य नोंदणी पूर्ण करण्यासाठी कृपया इथे नवीन परवलीचा शब्द द्या:',
+'resetpass_announce'        => 'तà¥\81मà¥\8dहà¥\80 à¤\88-मà¥\87ल मधून दिलेल्या तात्पुरत्या शब्दांकाने प्रवेश केलेला आहे. आपली सदस्य नोंदणी पूर्ण करण्यासाठी कृपया इथे नवीन परवलीचा शब्द द्या:',
 'resetpass_text'            => '<!-- मजकूर इथे लिहा -->',
 'resetpass_header'          => 'खात्याचा परवलीचा शब्द बदला',
 'oldpassword'               => 'जुना परवलीचा शब्दः',
@@ -842,7 +842,7 @@ $2',
 'passwordreset-emailerror-capture' => 'आठवणीकरता खाली दाखवल्यानुसार ईमेल तयार केला होता, पण प्रयोगकरता $1 ला पाठवता आला नाही',
 
 # Special:ChangeEmail
-'changeemail'          => 'à¤\87मेल पत्ता बदला',
+'changeemail'          => 'à¤\88-मेल पत्ता बदला',
 'changeemail-header'   => 'आपल्या खात्याचा ईमेल पत्ता बदला.',
 'changeemail-text'     => 'आपला ई-मेल पत्त बदलण्यासाठी हे आवेदनपत्र भरा. या बदलाची पुष्टी करण्यासाठी तुम्हाला तुमचा परवलीचा शब्द टाकावा लागेल.',
 'changeemail-no-info'  => 'हे पान थेट बघण्यासठी तुम्हाला प्रवेश करावा लगेल.',
@@ -898,7 +898,7 @@ $2',
 * कुणाला ब्लॉक करायचे आहे: $7
 
 तुम्ही ह्या ब्लॉक संदर्भातील चर्चेसाठी $1 अथवा [[{{MediaWiki:Grouppage-sysop}}|प्रबंधकांशी]] संपर्क करू शकता.
-तà¥\81मà¥\8dहà¥\80 à¤\9cà¥\8bवर à¤µà¥\88ध à¤\87मà¥\87ल à¤ªà¤¤à¥\8dता à¤\86पलà¥\8dया [[Special:Preferences|माà¤\9dà¥\8dया à¤ªà¤¸à¤\82तà¥\80]] à¤ªà¤¾à¤¨à¤¾à¤µà¤° à¤¦à¥\87त à¤¨à¤¾à¤¹à¥\80 à¤¤à¥\8bवर à¤¤à¥\81मà¥\8dहà¥\80 â\80\99सदसà¥\8dयाला à¤\87मेल पाठवा’ हा दुवा वापरू शकत नाही. तसेच असे करण्यापासून आपल्याला ब्लॉक केलेले नाही.
+तà¥\81मà¥\8dहà¥\80 à¤\9cà¥\8bवर à¤µà¥\88ध à¤\88-मà¥\87ल à¤ªà¤¤à¥\8dता à¤\86पलà¥\8dया [[Special:Preferences|माà¤\9dà¥\8dया à¤ªà¤¸à¤\82तà¥\80]] à¤ªà¤¾à¤¨à¤¾à¤µà¤° à¤¦à¥\87त à¤¨à¤¾à¤¹à¥\80 à¤¤à¥\8bवर à¤¤à¥\81मà¥\8dहà¥\80 â\80\99सदसà¥\8dयाला à¤\88-मेल पाठवा’ हा दुवा वापरू शकत नाही. तसेच असे करण्यापासून आपल्याला ब्लॉक केलेले नाही.
 तुमचा सध्याचा IP पत्ता $3 हा आहे, व तुमचा ब्लॉक क्रमांक #$5 हा आहे.
 कृपया या संदर्भातील चर्चेमध्ये यापैकी काहीही उद्घृत करा.",
 'autoblockedtext'                  => 'तुमचा आंतरजालीय अंकपत्ता आपोआप स्थगित केला आहे कारण तो इतर अशा सदस्याने वापरलाकी, ज्याला $1ने प्रतिबंधित केले.
@@ -929,12 +929,12 @@ $2',
 'newarticletext'                   => 'तुम्हाला अपेक्षित असलेला लेख अजून लिहिला गेलेला नाही. हा लेख लिहिण्यासाठी खालील पेटीत मजकूर लिहा. मदतीसाठी [[{{MediaWiki:Helppage}}|येथे]] टिचकी द्या.
 
 जर येथे चुकून आला असाल तर ब्राउझरच्या बॅक (back) कळीवर टिचकी द्या.',
-'anontalkpagetext'                 => "---- ''हà¥\87 à¤¬à¥\8bलपान à¤\85शा à¤\85à¤\9cà¥\8dà¤\9eात à¤¸à¤¦à¤¸à¥\8dयासाठà¥\80 à¤\86हà¥\87 à¤\9cà¥\8dयाà¤\82नà¥\80 à¤\96ातà¥\87 à¤¤à¤¯à¤¾à¤° à¤\95à¥\87लà¥\87लà¥\87 à¤¨à¤¾à¤¹à¥\80 à¤\95िà¤\82वा à¤¤à¥\8dयाà¤\9aा à¤µà¤¾à¤ªà¤° à¤\95रत à¤¨à¤¾à¤¹à¥\80त. à¤¤à¥\8dयाà¤\82à¤\9aà¥\8dया à¤\93ळà¤\96à¥\80साठà¥\80 à¤\86मà¥\8dहà¥\80 à¤\86à¤\82तरà¤\9cाल à¤\85à¤\82à¤\95पतà¥\8dता à¤µà¤¾à¤ªà¤°à¤¤à¥\8b à¤\86हà¥\8bत. à¤\85सा à¤\85à¤\82à¤\95पतà¥\8dता à¤¬à¤°à¥\8dâ\80\8dयाà¤\9a à¤²à¥\8bà¤\95ाà¤\82à¤\9aा à¤\8fà¤\95à¤\9a à¤\85सà¥\82 à¤¶à¤\95तà¥\8b à¤\9cर à¤\86पण à¤\85à¤\9cà¥\8dà¤\9eात à¤¸à¤¦à¤¸à¥\8dय à¤\85साल à¤\86णि à¤\86पलà¥\8dयाला à¤\95ाहà¥\80 à¤\85पà¥\8dरासà¤\82à¤\97िà¤\95 à¤¸à¤\82दà¥\87श à¤®à¤¿à¤³à¤¾à¤²à¤¾ à¤\85सà¥\87ल à¤¤à¤° à¤\95à¥\83पया [[Special:UserLogin| à¤\96ातà¥\87 à¤¤à¤¯à¤¾à¤° à¤\95रा]] à¤\95िà¤\82वा [[Special:UserLogin/signup|पà¥\8dरवà¥\87श à¤\95रा]] à¤\9cà¥\8dयामà¥\81ळà¥\87 à¤ªà¥\81ढà¥\87 à¤\85सà¥\87 à¤\97à¥\88रसमà¤\9c à¤¹à¥\8bणार à¤¨à¤¾à¤¹à¥\80त.''",
+'anontalkpagetext'                 => "---- ''हà¥\87 à¤¬à¥\8bलपान à¤\85शा à¤\85à¤\9cà¥\8dà¤\9eात à¤¸à¤¦à¤¸à¥\8dयासाठà¥\80 à¤\86हà¥\87 à¤\9cà¥\8dयाà¤\82नà¥\80 à¤\96ातà¥\87 à¤¤à¤¯à¤¾à¤° à¤\95à¥\87लà¥\87लà¥\87 à¤¨à¤¾à¤¹à¥\80 à¤\95िà¤\82वा à¤¤à¥\8dयाà¤\9aा à¤µà¤¾à¤ªà¤° à¤\95रत à¤¨à¤¾à¤¹à¥\80त. à¤¤à¥\8dयाà¤\82à¤\9aà¥\8dया à¤\93ळà¤\96à¥\80साठà¥\80 à¤\86मà¥\8dहà¥\80 à¤\86à¤\82तरà¤\9cाल à¤\85à¤\82à¤\95पतà¥\8dता à¤µà¤¾à¤ªà¤°à¤¤à¥\8b à¤\86हà¥\8bत. à¤\85सा à¤\85à¤\82à¤\95पतà¥\8dता à¤¬à¤±à¥\8dयाà¤\9a à¤²à¥\8bà¤\95ाà¤\82à¤\9aा à¤\8fà¤\95à¤\9a à¤\85सà¥\82 à¤¶à¤\95तà¥\8b à¤\9cर à¤\86पण à¤\85à¤\9cà¥\8dà¤\9eात à¤¸à¤¦à¤¸à¥\8dय à¤\85साल à¤\86णि à¤\86पलà¥\8dयाला à¤\95ाहà¥\80 à¤\85पà¥\8dरासà¤\82à¤\97िà¤\95 à¤¸à¤\82दà¥\87श à¤®à¤¿à¤³à¤¾à¤²à¤¾ à¤\85सà¥\87ल à¤¤à¤° à¤\95à¥\83पया [[Special:UserLogin| à¤\96ातà¥\87 à¤¤à¤¯à¤¾à¤° à¤\95रा]] à¤\95िà¤\82वा [[Special:UserLogin/signup|पà¥\8dरवà¥\87श à¤\95रा]] à¤\9cà¥\8dयामà¥\81ळà¥\87 à¤ªà¥\81ढà¥\87 à¤\85सà¥\87 à¤\97à¥\88रसमà¤\9c à¤¹à¥\8bणार à¤¨à¤¾à¤¹à¥\80त.''",
 'noarticletext'                    => 'या लेखात सध्या काहीही मजकूर नाही.
-तà¥\81मà¥\8dहà¥\80 à¤µà¤¿à¤\95िपिडà¥\80यावरील इतर लेखांमध्ये या [[Special:Search/{{PAGENAME}}|मथळ्याच्या शोध घेऊ शकता]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} इतर याद्या शोधा],
+तà¥\81मà¥\8dहà¥\80 à¤µà¤¿à¤\95िपà¥\80डियावरील इतर लेखांमध्ये या [[Special:Search/{{PAGENAME}}|मथळ्याच्या शोध घेऊ शकता]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} इतर याद्या शोधा],
 किंवा हा लेख [{{fullurl:{{FULLPAGENAME}}|action=edit}} लिहू शकता]</span>.',
 'noarticletext-nopermission'       => 'या लेखात सध्या काहीही मजकूर नाही.
-तà¥\81मà¥\8dहà¥\80 à¤µà¤¿à¤\95िपिडà¥\80यावरील इतर लेखांमध्ये या [[Special:Search/{{PAGENAME}}|मथळ्याच्या शोध घेऊ शकता]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} इतर याद्या शोधा],
+तà¥\81मà¥\8dहà¥\80 à¤µà¤¿à¤\95िपà¥\80डियावरील इतर लेखांमध्ये या [[Special:Search/{{PAGENAME}}|मथळ्याच्या शोध घेऊ शकता]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} इतर याद्या शोधा],
 किंवा हा लेख [{{fullurl:{{FULLPAGENAME}}|action=edit}} लिहू शकता]</span>.',
 'userpage-userdoesnotexist'        => '"<nowiki>$1</nowiki>" सदस्य खाते नोंदीकॄत नाही.कृपया हे पान तुम्ही संपादीत किंवा नव्याने तयार करू इच्छिता का या बद्दल विचार करा.',
 'userpage-userdoesnotexist-view'   => 'सदस्यखाते "$1"  हे नोंदलेले नाही.',
@@ -982,9 +982,9 @@ $2',
 जर आपण बदल साठवून ठेवण्यात आले तर या नंतरच्या सर्व आवृत्त्यांमधील साठविण्यात आलेले बदल नष्ठ होतील.'''",
 'yourdiff'                         => 'फरक',
 'copyrightwarning'                 => "{{SITENAME}} येथे केलेले कोणतेही लेखन $2 (अधिक माहितीसाठी $1 पहा) अंतर्गत मुक्त उद्घोषित केले आहे असे गृहित धरले जाईल याची कृपया नोंद घ्यावी. आपणास आपल्या लेखनाचे मुक्त संपादन आणि मुक्त वितरण होणे पसंत नसेल तर येथे संपादन करू नये.<br />
-तà¥\81मà¥\8dहà¥\80 à¤¯à¥\87थà¥\87 à¤²à¥\87à¤\96न à¤\95रताना à¤¹à¥\87 à¤¸à¥\81दà¥\8dधा à¤\97à¥\83हित à¤§à¤°à¤²à¥\87लà¥\87 à¤\85सतà¥\87 à¤\95à¥\80 à¤¯à¥\87थà¥\87 à¤\95à¥\87लà¥\87लà¥\87 à¤²à¥\87à¤\96न à¤¤à¥\81मà¤\9aà¥\87 à¤¸à¥\8dवतà¤\83à¤\9aà¥\87 à¤\86णि à¤\95à¥\87वळ à¤¸à¥\8dवतà¤\83à¤\9aà¥\8dया à¤ªà¥\8dरताधिà¤\95ार (à¤\95à¥\89पà¥\80राà¤\88à¤\9f) à¤®à¤¾à¤²à¤\95à¥\80à¤\9aà¥\87 à¤\86हà¥\87 à¤\95िà¤\82वा à¤ªà¥\8dरताधिà¤\95ारानà¥\87 à¤\97ठà¥\80त à¤¨ à¤¹à¥\8bणारà¥\8dâ\80\8dया à¤¸à¤¾à¤°à¥\8dवà¤\9cनिà¤\95 à¤\9cà¥\8dà¤\9eानà¤\95à¥\8dषà¥\87तà¥\8dरातà¥\82न à¤\98à¥\87तलà¥\87 à¤\86हà¥\87 à¤\95िà¤\82वा à¤¤à¤¤à¥\8dसम à¤®à¥\81à¤\95à¥\8dत à¤¸à¥\8dरà¥\8bतातà¥\82न à¤\98à¥\87तलà¥\87 à¤\86हà¥\87. à¤¤à¥\81मà¥\8dहà¥\80 à¤¸à¤\82पादन à¤\95रताना à¤¤à¤¸à¥\87 à¤µà¤\9aन à¤¦à¥\87त à¤\86हात. '''पà¥\8dरताधिà¤\95ारयà¥\81à¤\95à¥\8dत à¤²à¥\87à¤\96न à¤¸à¥\81यà¥\8bà¤\97à¥\8dय à¤ªà¤°à¤µà¤¾à¤¨à¤\97à¥\80शिवाय à¤®à¥\81ळà¥\80à¤\9a à¤\9aढवà¥\82/भरà¥\82 à¤¨à¤¯à¥\87!'''",
+तà¥\81मà¥\8dहà¥\80 à¤¯à¥\87थà¥\87 à¤²à¥\87à¤\96न à¤\95रताना à¤¹à¥\87 à¤¸à¥\81दà¥\8dधा à¤\97à¥\83हित à¤§à¤°à¤²à¥\87लà¥\87 à¤\85सतà¥\87 à¤\95à¥\80 à¤¯à¥\87थà¥\87 à¤\95à¥\87लà¥\87लà¥\87 à¤²à¥\87à¤\96न à¤¤à¥\81मà¤\9aà¥\87 à¤¸à¥\8dवतà¤\83à¤\9aà¥\87 à¤\86णि à¤\95à¥\87वळ à¤¸à¥\8dवतà¤\83à¤\9aà¥\8dया à¤ªà¥\8dरताधिà¤\95ार (à¤\95à¥\89पà¥\80राà¤\88à¤\9f) à¤®à¤¾à¤²à¤\95à¥\80à¤\9aà¥\87 à¤\86हà¥\87 à¤\95िà¤\82वा à¤ªà¥\8dरताधिà¤\95ारानà¥\87 à¤\97ठà¥\80त à¤¨ à¤¹à¥\8bणाऱà¥\8dया à¤¸à¤¾à¤°à¥\8dवà¤\9cनिà¤\95 à¤\9cà¥\8dà¤\9eानà¤\95à¥\8dषà¥\87तà¥\8dरातà¥\82न à¤\98à¥\87तलà¥\87 à¤\86हà¥\87 à¤\95िà¤\82वा à¤¤à¤¤à¥\8dसम à¤®à¥\81à¤\95à¥\8dत à¤¸à¥\8dरà¥\8bतातà¥\82न à¤\98à¥\87तलà¥\87 à¤\86हà¥\87. à¤¤à¥\81मà¥\8dहà¥\80 à¤¸à¤\82पादन à¤\95रताना à¤¤à¤¸à¥\87 à¤µà¤\9aन à¤¦à¥\87त à¤\86हात. '''पà¥\8dरताधिà¤\95ारयà¥\81à¤\95à¥\8dत à¤²à¥\87à¤\96न à¤¸à¥\81यà¥\8bà¤\97à¥\8dय à¤ªà¤°à¤µà¤¾à¤¨à¤\97à¥\80शिवाय à¤®à¥\81ळà¥\80à¤\9a à¤\9aढवà¥\82/भरà¥\82 à¤¨à¤¯à¥\87!'''",
 'copyrightwarning2'                => "{{SITENAME}} येथे केलेले कोणतेही लेखन हे इतर संपादकांकरवी बदलले अथवा काढले जाऊ शकते. जर आपणास आपल्या लेखनाचे मुक्त संपादन होणे पसंत नसेल तर येथे संपादन करू नये.<br />
-तà¥\81मà¥\8dहà¥\80 à¤¯à¥\87थà¥\87 à¤²à¥\87à¤\96न à¤\95रताना à¤¹à¥\87 à¤¸à¥\81दà¥\8dधा à¤\97à¥\83हित à¤§à¤°à¤²à¥\87लà¥\87 à¤\85सतà¥\87 à¤\95à¥\80 à¤¯à¥\87थà¥\87 à¤\95à¥\87लà¥\87लà¥\87 à¤²à¥\87à¤\96न à¤¤à¥\81मà¤\9aà¥\87 à¤¸à¥\8dवतà¤\83à¤\9aà¥\87 à¤\86णि à¤\95à¥\87वळ à¤¸à¥\8dवतà¤\83à¤\9aà¥\8dया à¤ªà¥\8dरताधिà¤\95ार (à¤\95à¥\89पà¥\80राà¤\88à¤\9f) à¤®à¤¾à¤²à¤\95à¥\80à¤\9aà¥\87 à¤\86हà¥\87 à¤\95िà¤\82वा à¤ªà¥\8dरताधिà¤\95ारानà¥\87 à¤\97ठà¥\80त à¤¨ à¤¹à¥\8bणारà¥\8dâ\80\8dया à¤¸à¤¾à¤°à¥\8dवà¤\9cनिà¤\95 à¤\9cà¥\8dà¤\9eानà¤\95à¥\8dषà¥\87तà¥\8dरातà¥\82न à¤\98à¥\87तलà¥\87 à¤\86हà¥\87 à¤\95िà¤\82वा à¤¤à¤¤à¥\8dसम à¤®à¥\81à¤\95à¥\8dत à¤¸à¥\8dरà¥\8bतातà¥\82न à¤\98à¥\87तलà¥\87 à¤\86हà¥\87. à¤¤à¥\81मà¥\8dहà¥\80 à¤¸à¤\82पादन à¤\95रताना à¤¤à¤¸à¥\87 à¤µà¤\9aन à¤¦à¥\87त à¤\86हात (à¤\85धिà¤\95 à¤®à¤¾à¤¹à¤¿à¤¤à¥\80साठà¥\80 $1 à¤ªà¤¹à¤¾). '''पà¥\8dरताधिà¤\95ारयà¥\81à¤\95à¥\8dत à¤²à¥\87à¤\96न à¤¸à¥\81यà¥\8bà¤\97à¥\8dय à¤ªà¤°à¤µà¤¾à¤¨à¤\97à¥\80शिवाय à¤®à¥\81ळà¥\80à¤\9a à¤\9aढवà¥\82/भरà¥\82 à¤¨à¤¯à¥\87!'''",
+तà¥\81मà¥\8dहà¥\80 à¤¯à¥\87थà¥\87 à¤²à¥\87à¤\96न à¤\95रताना à¤¹à¥\87 à¤¸à¥\81दà¥\8dधा à¤\97à¥\83हित à¤§à¤°à¤²à¥\87लà¥\87 à¤\85सतà¥\87 à¤\95à¥\80 à¤¯à¥\87थà¥\87 à¤\95à¥\87लà¥\87लà¥\87 à¤²à¥\87à¤\96न à¤¤à¥\81मà¤\9aà¥\87 à¤¸à¥\8dवतà¤\83à¤\9aà¥\87 à¤\86णि à¤\95à¥\87वळ à¤¸à¥\8dवतà¤\83à¤\9aà¥\8dया à¤ªà¥\8dरताधिà¤\95ार (à¤\95à¥\89पà¥\80राà¤\88à¤\9f) à¤®à¤¾à¤²à¤\95à¥\80à¤\9aà¥\87 à¤\86हà¥\87 à¤\95िà¤\82वा à¤ªà¥\8dरताधिà¤\95ारानà¥\87 à¤\97ठà¥\80त à¤¨ à¤¹à¥\8bणाऱà¥\8dया à¤¸à¤¾à¤°à¥\8dवà¤\9cनिà¤\95 à¤\9cà¥\8dà¤\9eानà¤\95à¥\8dषà¥\87तà¥\8dरातà¥\82न à¤\98à¥\87तलà¥\87 à¤\86हà¥\87 à¤\95िà¤\82वा à¤¤à¤¤à¥\8dसम à¤®à¥\81à¤\95à¥\8dत à¤¸à¥\8dरà¥\8bतातà¥\82न à¤\98à¥\87तलà¥\87 à¤\86हà¥\87. à¤¤à¥\81मà¥\8dहà¥\80 à¤¸à¤\82पादन à¤\95रताना à¤¤à¤¸à¥\87 à¤µà¤\9aन à¤¦à¥\87त à¤\86हात (à¤\85धिà¤\95 à¤®à¤¾à¤¹à¤¿à¤¤à¥\80साठà¥\80 $1 à¤ªà¤¹à¤¾). '''पà¥\8dरताधिà¤\95ारयà¥\81à¤\95à¥\8dत à¤²à¥\87à¤\96न à¤¸à¥\81यà¥\8bà¤\97à¥\8dय à¤ªà¤°à¤µà¤¾à¤¨à¤\97à¥\80शिवाय à¤®à¥\81ळà¥\80à¤\9a à¤\9aढवà¥\82/भरà¥\82 à¤¨à¤¯à¥\87!'''",
 'longpageerror'                    => 'त्रूटी:आपण दिलेला मजकुर जास्तीत जास्त शक्य {{PLURAL:$2|one किलोबाईट|$2 किलोबाईट}} पेक्षा अधिक लांबीचा {{PLURAL:$1|one किलोबाईट|$1 किलोबाईट}} आहे.तो जतन केला जाऊ शकत नाही',
 'readonlywarning'                  => "सावधान:विदागारास भरण-पोषणाकरिता ताळे ठोकले आहे,त्यामुळे सध्या तुम्ही तुमचे संपादन जतन करू शकत नाही.जर तुम्हाला हवे असेल तर नंतर उपयोग करण्याच्या दृष्टीने, तुम्ही मजकुर ’मजकुर संचिकेत’(टेक्स्ट फाईल मध्ये) कापून-चिटकवू शकता.'''
 विदागारास ताळे ठोकलेल्या प्रचालकांनी $1 असे स्पष्टीकरणे दीले आहे",
@@ -1118,7 +1118,7 @@ $3ने ''$2'' कारण दिले आहे.",
 'rev-showdeleted'             => 'दाखवा',
 'revisiondelete'              => 'आवर्तने वगळा/पुनर्स्थापित करा',
 'revdelete-nooldid-title'     => 'अपेक्षीत आवृत्ती दिलेली नाही',
-'revdelete-nooldid-text'      => '!!à¤\86पण à¤¹à¥\80 à¤\95à¥\83तà¥\80 à¤\95रावयाà¤\9aà¥\80 à¤\86वरà¥\8dतनà¥\87 à¤¸à¥\82à¤\9aà¥\80त केलेली नाहीत, दिलेले आवर्तन अस्तित्वात नाही, किंवा तुम्ही सध्याचे आवर्तन लपविण्याचा प्रयत्न करीत आहात.',
+'revdelete-nooldid-text'      => '!!à¤\86पण à¤¹à¥\80 à¤\95à¥\83तà¥\80 à¤\95रावयाà¤\9aà¥\80 à¤\86वरà¥\8dतनà¥\87 à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 केलेली नाहीत, दिलेले आवर्तन अस्तित्वात नाही, किंवा तुम्ही सध्याचे आवर्तन लपविण्याचा प्रयत्न करीत आहात.',
 'revdelete-nologtype-title'   => 'कोणताही क्रमलेखप्रकार दिलेला नाही',
 'revdelete-nologtype-text'    => 'ही क्रिया करण्यासाठी तुम्ही यादीप्रकार निवडला नाही.',
 'revdelete-nologid-title'     => 'अवैध क्रमलेख प्रविष्टी',
@@ -1169,7 +1169,7 @@ $1",
 तुम्ही तिच्यापर्यंत पोचू शकत नाही.',
 'revdelete-modify-missing'    => 'वस्तू क्र. $1 ला संपादताना त्रुटी: ती माहितीकोषात नाही!',
 'revdelete-no-change'         => "'''सूचना:''' $2, $1 च्या वस्तूने अगोदरच दृश्यता रुपरेषा मागितल्या आहेत.",
-'revdelete-concurrent-change' => '$2, $1 à¤\9aà¥\80 à¤µà¤¸à¥\8dतà¥\82 à¤¸à¤\82पादताना à¤\9aà¥\82à¤\95: à¤¤à¥\81मà¥\8dहà¥\80 à¤¤à¤¿à¤²à¤¾ à¤¸à¤\82पादताना à¤¦à¥\81सरà¥\8dâ\80\8dया à¤µà¥\8dयà¤\95à¥\8dतिनà¥\87 à¤µà¤¸à¥\8dतà¥\82स à¤¸à¤\82पादलà¥\87 à¤\85सावà¥\87.
+'revdelete-concurrent-change' => '$2, $1 à¤\9aà¥\80 à¤µà¤¸à¥\8dतà¥\82 à¤¸à¤\82पादताना à¤\9aà¥\82à¤\95: à¤¤à¥\81मà¥\8dहà¥\80 à¤¤à¤¿à¤²à¤¾ à¤¸à¤\82पादताना à¤¦à¥\81सऱà¥\8dया à¤µà¥\8dयà¤\95à¥\8dतिनà¥\87 à¤µà¤¸à¥\8dतà¥\82स à¤¸à¤\82पादलà¥\87 à¤\85सावà¥\87.
 कृपया याद्या तपासा.',
 'revdelete-only-restricted'   => '$2, $1 ची वस्तू लपवताना चूक: तुम्ही इतर दृश्यता पर्यायांना निवडल्याशिवाय प्रचालकांपासून वस्तू लपवू शकत नाही.',
 'revdelete-reason-dropdown'   => '*सामान्य वगळण्याची कारणे
@@ -1213,7 +1213,7 @@ $1",
 'mergelog'           => 'नोंदी एकत्र करा',
 'pagemerge-logentry' => '[[$2]]मध्ये[[$1]] समाविष्ट केले ($3पर्यंतची आवर्तने)',
 'revertmerge'        => 'वेगवेगळे करा',
-'mergelogpagetext'   => 'à¤\8fà¤\95ापानाà¤\9aा à¤\87तिहास à¤\87तर à¤ªà¤¾à¤¨à¤¾à¤¤ à¤\9fाà¤\95à¥\82न à¤\85à¤\97दà¥\80 à¤\85लिà¤\95डà¥\87 à¤\8fà¤\95तà¥\8dरित à¤\95à¥\87लà¥\87लà¥\80 à¤\8fà¤\95तà¥\8dरिà¤\95रणà¥\87 à¤¨à¤¿à¤®à¥\8dनà¥\8dदरà¥\8dशà¥\80त à¤¸à¥\82à¤\9aà¥\80त आहेत.',
+'mergelogpagetext'   => 'à¤\8fà¤\95ापानाà¤\9aा à¤\87तिहास à¤\87तर à¤ªà¤¾à¤¨à¤¾à¤¤ à¤\9fाà¤\95à¥\82न à¤\85à¤\97दà¥\80 à¤\85लिà¤\95डà¥\87 à¤\8fà¤\95तà¥\8dरित à¤\95à¥\87लà¥\87लà¥\80 à¤\8fà¤\95तà¥\8dरिà¤\95रणà¥\87 à¤¨à¤¿à¤®à¥\8dनà¥\8dदरà¥\8dशà¥\80त à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 आहेत.',
 
 # Diffs
 'history-title'            => '"$1" चा संपादन इतिहास',
@@ -1315,15 +1315,15 @@ $1",
 'prefs-personal'                => 'सदस्य व्यक्तिरेखा',
 'prefs-rc'                      => 'अलीकडील बदल',
 'prefs-watchlist'               => 'पहाऱ्याची सूची',
-'prefs-watchlist-days'          => 'पहारà¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80त à¤¦à¤¿à¤¸à¤£à¤¾à¤°à¥\8dâ\80\8dया à¤¦à¤¿à¤µà¤¸à¤¾à¤\82à¤\9aà¥\80 à¤¸à¤\82à¤\96à¥\8dया:',
+'prefs-watchlist-days'          => 'पहाऱà¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 à¤¦à¤¿à¤¸à¤£à¤¾à¤±à¥\8dया à¤¦à¤¿à¤µà¤¸à¤¾à¤\82à¤\9aà¥\80 à¤¸à¤\82à¤\96à¥\8dया:',
 'prefs-watchlist-days-max'      => 'जास्तीत जास्त $1 {{PLURAL:$1|दिवस|दिवस}}',
-'prefs-watchlist-edits'         => 'वाढà¥\80व à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80त à¤¦à¤¿à¤¸à¤£à¤¾à¤°à¥\8dâ\80\8dया à¤¸à¤\82पादनाà¤\82à¤\9aà¥\80 à¤¸à¤\82à¤\96à¥\8dया:',
+'prefs-watchlist-edits'         => 'वाढà¥\80व à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 à¤¦à¤¿à¤¸à¤£à¤¾à¤±à¥\8dया à¤¸à¤\82पादनाà¤\82à¤\9aà¥\80 à¤¸à¤\82à¤\96à¥\8dया:',
 'prefs-watchlist-edits-max'     => 'अधिकतम अंक:  १०००.',
-'prefs-watchlist-token'         => 'पहारà¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80à¤\9aा à¤¬à¤¿à¤²à¥\8dला:',
+'prefs-watchlist-token'         => 'पहाऱà¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80à¤\9aा à¤¬à¤¿à¤²à¥\8dला:',
 'prefs-misc'                    => 'इतर',
 'prefs-resetpass'               => 'परवलीचा शब्द बदला.',
 'prefs-changeemail'             => 'विपत्रपत्ता बदला',
-'prefs-setemail'                => 'तà¥\81मà¤\9aा à¤\87मेल पत्ता लिहा.',
+'prefs-setemail'                => 'तà¥\81मà¤\9aा à¤\88-मेल पत्ता लिहा.',
 'prefs-email'                   => 'विपत्र पर्याय',
 'prefs-rendering'               => 'देखावा',
 'saveprefs'                     => 'जतन करा',
@@ -1337,9 +1337,9 @@ $1",
 'resultsperpage'                => 'प्रति पान धडका:',
 'stub-threshold'                => '<a href="#" class="stub">अंकुरीत दुव्यांच्या</a> रचनेची नांदी (बाईट्स):',
 'stub-threshold-disabled'       => 'अक्षम केले',
-'recentchangesdays'             => 'à¤\85लिकडील बदल मधील दाखवावयाचे दिवस:',
+'recentchangesdays'             => 'à¤\85लà¥\80कडील बदल मधील दाखवावयाचे दिवस:',
 'recentchangesdays-max'         => 'जास्तीतजास्त $1 {{PLURAL:$1|दिवस|दिवस}}',
-'recentchangescount'            => 'à¤\85लिकडील बदल, इतिहास व नोंद पानांमध्ये दाखवायाच्या संपादनांची संख्या:',
+'recentchangescount'            => 'à¤\85लà¥\80कडील बदल, इतिहास व नोंद पानांमध्ये दाखवायाच्या संपादनांची संख्या:',
 'prefs-help-recentchangescount' => 'यात नुकतेच झालेले बदल, पानांचे इतिहास व याद्या या गोष्टी असतात.',
 'prefs-help-watchlist-token'    => 'या क्षेत्रत गुपित किल्लि प्रदान केल्यस तुमच्या निरीक्षणयादीसाठी एक आरएसएस फीड उत्पन्न होईल.
 कोणीही ज्याला या क्षेत्रातिल किल्लि माहित असेल तुमची निरीक्षणयादी वाचू शकतो, त्यमुळे कोणतीही सुरक्षित किल्लि निवडा.
@@ -1362,7 +1362,7 @@ $1",
 'timezoneregion-europe'         => 'युरोप',
 'timezoneregion-indian'         => 'हिंदी महासागर',
 'timezoneregion-pacific'        => 'प्रशांत महासागर',
-'allowemail'                    => 'à¤\87तर à¤¸à¤¦à¤¸à¥\8dयाà¤\82à¤\95डà¥\82न à¤®à¤¾à¤\9dà¥\8dया à¤\88-मà¥\87ल à¤ªà¤¤à¥\8dतà¥\8dयावर à¤\87मेल येण्यास मुभा द्या',
+'allowemail'                    => 'à¤\87तर à¤¸à¤¦à¤¸à¥\8dयाà¤\82à¤\95डà¥\82न à¤®à¤¾à¤\9dà¥\8dया à¤\88-मà¥\87ल à¤ªà¤¤à¥\8dतà¥\8dयावर à¤\88-मेल येण्यास मुभा द्या',
 'prefs-searchoptions'           => 'शोध विकल्प',
 'prefs-namespaces'              => 'नामविश्वे',
 'defaultns'                     => 'या नामविश्वातील अविचल शोध :',
@@ -1557,7 +1557,7 @@ $1",
 'action-block'                => 'या सदस्यास संपादन करण्यापासून प्रतिबंधित करा',
 'action-protect'              => 'या पानाशाठी सुरक्षापातळी बदला',
 'action-rollback'             => 'या आधीच्या सदस्याचे नुकतेच संपादन केलेले एखादे विशिष्ट पानाचे बदल लवकर आधीच्य स्थितीत न्या',
-'action-import'               => 'दà¥\81सरà¥\8dâ\80\8dया à¤µà¤¿à¤\95à¥\80वरà¥\81न à¤¹à¥\87 à¤ªà¤¾à¤¨ à¤\86यात à¤\95रा',
+'action-import'               => 'दà¥\81सऱà¥\8dया à¤µà¤¿à¤\95à¥\80वरà¥\81न à¤¹à¥\87 à¤ªà¤¾à¤¨ à¤\86यात à¤\95रा',
 'action-importupload'         => 'चढविलेल्या संचिकेतून पान आयात करा',
 'action-patrol'               => 'इतरांची संपादने तपासलेली म्हणून जतन करा',
 'action-autopatrol'           => 'आपल्या बदलास देखरेखी खाली असल्याचे सुचवा',
@@ -1609,8 +1609,8 @@ $1",
 'recentchangeslinked-toolbox'  => 'या पृष्ठासंबंधीचे बदल',
 'recentchangeslinked-title'    => '"$1" च्या संदर्भातील बदल',
 'recentchangeslinked-noresult' => 'जोडलेल्या पानांमध्ये दिलेल्या कालावधीत काहीही बदल झालेले नाहीत.',
-'recentchangeslinked-summary'  => "हà¥\87 à¤ªà¥\83षà¥\8dठ à¤\8fà¤\96ादà¥\8dया à¤µà¤¿à¤¶à¤¿à¤·à¥\8dà¤\9f à¤ªà¤¾à¤¨à¤¾à¤¶à¥\80 (à¤\95िà¤\82वा à¤\8fà¤\96ादà¥\8dया à¤µà¤¿à¤¶à¤¿à¤·à¥\8dà¤\9f à¤µà¤°à¥\8dà¤\97ात à¤\85सणारà¥\8dâ\80\8dया à¤ªà¤¾à¤¨à¤¾à¤\82शà¥\80) à¤\9cà¥\8bडलà¥\87लà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\82वरà¥\80ल à¤¬à¤¦à¤² à¤¦à¤°à¥\8dशवतà¥\87.
-तà¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तील पाने '''ठळक''' दिसतील.",
+'recentchangeslinked-summary'  => "हà¥\87 à¤ªà¥\83षà¥\8dठ à¤\8fà¤\96ादà¥\8dया à¤µà¤¿à¤¶à¤¿à¤·à¥\8dà¤\9f à¤ªà¤¾à¤¨à¤¾à¤¶à¥\80 (à¤\95िà¤\82वा à¤\8fà¤\96ादà¥\8dया à¤µà¤¿à¤¶à¤¿à¤·à¥\8dà¤\9f à¤µà¤°à¥\8dà¤\97ात à¤\85सणाऱà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\82शà¥\80) à¤\9cà¥\8bडलà¥\87लà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\82वरà¥\80ल à¤¬à¤¦à¤² à¤¦à¤°à¥\8dशवतà¥\87.
+तà¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधील पाने '''ठळक''' दिसतील.",
 'recentchangeslinked-page'     => 'पृष्ठ नाव:',
 'recentchangeslinked-to'       => 'याऐवजी दिलेल्या पानाला जोडलेल्या पानांवरील बदल दाखवा',
 
@@ -1966,7 +1966,7 @@ Input:contenttype/subtype, e.g. <tt>image/jpeg</tt>.',
 'disambiguations-text' => "निम्नलिखीत पाने एका '''नि:संदिग्धकरण पृष्ठास'''जोडली जातात. त्याऐवजी ती सुयोग्य विषयाशी जोडली जावयास हवीत.<br /> जर जर एखादे पान [[MediaWiki:Disambiguationspage]]पासून जोडलेला साचा वापरत असेल तर ते पान '''नि:संदिग्धकरण पृष्ठ''' गृहीत धरले जाते",
 
 'doubleredirects'                   => 'दुहेरी-पुनर्निर्देशने',
-'doubleredirectstext'               => 'हà¥\87 à¤ªà¤¾à¤¨ à¤\85शा à¤ªà¤¾à¤¨à¤¾à¤\82à¤\9aà¥\80 à¤¸à¥\82à¤\9aà¥\80 à¤ªà¥\81रवतà¥\87 à¤\95à¥\80 à¤\9cà¥\80 à¤ªà¥\81रà¥\8dननिरà¥\8dदà¥\87शà¥\80त à¤ªà¤¾à¤¨à¥\87 à¤¦à¥\81सरà¥\8dâ\80\8dया à¤ªà¥\81रà¥\8dननिरà¥\8dदà¥\87शà¥\80त à¤ªà¤¾à¤¨à¤¾à¤\95डà¥\87 à¤¨à¤¿à¤°à¥\8dदà¥\87शà¥\80त à¤\9dालà¥\80 à¤\86हà¥\87त.पà¥\8dरतà¥\8dयà¥\87à¤\95 à¤\93ळà¥\80त à¤ªà¤¹à¤¿à¤²à¥\8dया à¤\86णि à¤¦à¥\81सरà¥\8dâ\80\8dया à¤ªà¥\81रà¥\8dननिरà¥\8dदà¥\87शनास à¤¦à¥\81वा à¤¦à¥\80ला à¤\86हà¥\87 à¤¸à¥\8bबतà¤\9a à¤¦à¥\81सरà¥\87 à¤ªà¥\81रà¥\8dननिरà¥\8dदà¥\87शन à¤\9cà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\95डà¥\87 à¤ªà¥\8bहà¤\9aतà¥\87 à¤¤à¥\87 à¤ªà¤£ à¤¦à¤¿à¤²à¥\87 à¤\86हà¥\87, à¤\9cà¥\87 à¤\95à¥\80 à¤¬à¤°à¥\8bबर à¤\85सणà¥\8dयाà¤\9aà¥\80 à¤¶à¤\95à¥\8dयता à¤\86हà¥\87 ,तà¥\87 à¤µà¤¸à¥\8dतà¥\81त: पहिल्या पानापासूनचेही पुर्ननिर्देशन असावयास हवे.',
+'doubleredirectstext'               => 'हà¥\87 à¤ªà¤¾à¤¨ à¤\85शा à¤ªà¤¾à¤¨à¤¾à¤\82à¤\9aà¥\80 à¤¸à¥\82à¤\9aà¥\80 à¤ªà¥\81रवतà¥\87 à¤\95à¥\80 à¤\9cà¥\80 à¤ªà¥\81रà¥\8dननिरà¥\8dदà¥\87शà¥\80त à¤ªà¤¾à¤¨à¥\87 à¤¦à¥\81सऱà¥\8dया à¤ªà¥\81रà¥\8dननिरà¥\8dदà¥\87शà¥\80त à¤ªà¤¾à¤¨à¤¾à¤\95डà¥\87 à¤¨à¤¿à¤°à¥\8dदà¥\87शà¥\80त à¤\9dालà¥\80 à¤\86हà¥\87त.पà¥\8dरतà¥\8dयà¥\87à¤\95 à¤\93ळà¥\80त à¤ªà¤¹à¤¿à¤²à¥\8dया à¤\86णि à¤¦à¥\81सऱà¥\8dया à¤ªà¥\81रà¥\8dननिरà¥\8dदà¥\87शनास à¤¦à¥\81वा à¤¦à¤¿à¤²à¤¾ à¤\86हà¥\87 à¤¸à¥\8bबतà¤\9a à¤¦à¥\81सरà¥\87 à¤ªà¥\81रà¥\8dननिरà¥\8dदà¥\87शन à¤\9cà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\95डà¥\87 à¤ªà¥\8bहà¤\9aतà¥\87 à¤¤à¥\87 à¤ªà¤£ à¤¦à¤¿à¤²à¥\87 à¤\86हà¥\87, à¤\9cà¥\87 à¤\95à¥\80 à¤¬à¤°à¥\8bबर à¤\85सणà¥\8dयाà¤\9aà¥\80 à¤¶à¤\95à¥\8dयता à¤\86हà¥\87 ,तà¥\87 à¤µà¤¸à¥\8dतà¥\81तà¤\83 पहिल्या पानापासूनचेही पुर्ननिर्देशन असावयास हवे.',
 'double-redirect-fixed-move'        => '[[$1]] हलवले गेले आहे.
 ते [[$2]] येथे निर्देशित होते.',
 'double-redirect-fixed-maintenance' => '[[$1]] ते [[$2]] हे चुकीचे पुनर्निर्देशन नीट केले.',
@@ -2016,7 +2016,7 @@ Input:contenttype/subtype, e.g. <tt>image/jpeg</tt>.',
 'mostcategories'          => 'सर्वाधिक वर्गीकृत पाने',
 'mostimages'              => 'सर्वाधिक जोडलेली चित्रे',
 'mostrevisions'           => 'सर्वाधिक बदललेले लेख',
-'prefixindex'             => 'à¤\89पसरà¥\8dà¤\97 à¤\85सणारà¥\8dâ\80\8dया à¤²à¥\87à¤\96ाà¤\82à¤\9aà¥\80 à¤¯à¤¾à¤¦à¥\80',
+'prefixindex'             => 'à¤\89पसरà¥\8dà¤\97 à¤\85सणाऱà¥\8dया à¤²à¥\87à¤\96ाà¤\82à¤\9aà¥\80 à¤¯à¤¾à¤¦à¥\80',
 'prefixindex-namespace'   => '($1 नामविश्व) हा  उपसर्ग असणारी सर्व पाने',
 'shortpages'              => 'छोटी पाने',
 'longpages'               => 'मोठी पाने',
@@ -2055,7 +2055,7 @@ Input:contenttype/subtype, e.g. <tt>image/jpeg</tt>.',
 'booksources'               => 'पुस्तक स्रोत',
 'booksources-search-legend' => 'पुस्तक स्रोत शोधा',
 'booksources-go'            => 'चला',
-'booksources-text'          => 'à¤\96ालà¥\80ल à¤¯à¤¾à¤¦à¥\80त à¤¨à¤µà¥\80 à¤\86णिà¤\9cà¥\81नà¥\80 à¤ªà¥\81सà¥\8dतà¤\95à¥\87 à¤µà¤¿à¤\95णारà¥\8dâ\80\8dया à¤¸à¤\82à¤\95à¥\87तसà¥\8dथळाà¤\9aà¥\87 à¤¦à¥\81वà¥\87 à¤\86हà¥\87त,à¤\86णि à¤¤à¥\8dयात à¤\95दाà¤\9aित à¤\86पण à¤¶à¥\8bधà¥\82 à¤ªà¤¹à¤¾à¤¤ à¤\85सलà¥\87लà¥\8dया à¤ªà¥\81सà¥\8dतà¤\95ाà¤\9aà¥\80 à¤\85धिà¤\95 à¤®à¤¾à¤¹à¤¿à¤¤à¥\80 à¤\85सà¥\87ल:',
+'booksources-text'          => 'à¤\96ालà¥\80ल à¤¯à¤¾à¤¦à¥\80त à¤¨à¤µà¥\80 à¤\86णिà¤\9cà¥\81नà¥\80 à¤ªà¥\81सà¥\8dतà¤\95à¥\87 à¤µà¤¿à¤\95णाऱà¥\8dया à¤¸à¤\82à¤\95à¥\87तसà¥\8dथळाà¤\9aà¥\87 à¤¦à¥\81वà¥\87 à¤\86हà¥\87त,à¤\86णि à¤¤à¥\8dयात à¤\95दाà¤\9aित à¤\86पण à¤¶à¥\8bधà¥\82 à¤ªà¤¹à¤¾à¤¤ à¤\85सलà¥\87लà¥\8dया à¤ªà¥\81सà¥\8dतà¤\95ाà¤\9aà¥\80 à¤\85धिà¤\95 à¤®à¤¾à¤¹à¤¿à¤¤à¥\80 à¤\85सà¥\87ल:',
 'booksources-invalid-isbn'  => 'दिलेला आयएसबीएन वैध नाही; मूळ स्रोतातून उतरवताना झालेल्या चुकांचे निरसन करा.',
 
 # Special:Log
@@ -2149,13 +2149,13 @@ Input:contenttype/subtype, e.g. <tt>image/jpeg</tt>.',
 # E-mail user
 'mailnologin'          => 'पाठविण्याचा पत्ता नाही',
 'mailnologintext'      => 'इतर सदस्यांना विपत्र(ई-मेल) पाठवण्याकरिता तुम्ही [[Special:UserLogin|प्रवेश केलेला]] असणे आणि  प्रमाणित (ई-मेल) पत्ता तुमच्या [[Special:Preferences|पसंतीत]] नमुद असणे आवश्यक आहे.',
-'emailuser'            => 'या à¤¸à¤¦à¤¸à¥\8dयाला à¤\87मेल पाठवा',
+'emailuser'            => 'या à¤¸à¤¦à¤¸à¥\8dयाला à¤\88-मेल पाठवा',
 'emailpage'            => 'विपत्र (ईमेल) उपयोगकर्ता',
 'emailpagetext'        => 'जर या सदस्याने प्रमाणित विपत्र (ईमेल)पत्ता तीच्या अथवा त्याच्या सदस्य पसंतीत नमुद केला असेल,तर खालील सारणी तुम्हाला एक(च) संदेश पाठवेल.तुम्ही तुमच्या [[Special:Preferences|सदस्य पसंतीत]] नमुद केलेला विपत्र पत्ता "कडून" पत्त्यात येईल म्हणजे  प्राप्तकरता आपल्याला उत्तर देऊ शकेल.',
 'usermailererror'      => 'पत्र बाब त्रुटी वापस पाठवली:',
 'defemailsubject'      => '{{SITENAME}} "$1" सदस्याकडून विपत्र',
 'usermaildisabled'     => 'सदस्य विपत्र निष्क्रीय आहे',
-'usermaildisabledtext' => 'या à¤µà¤¿à¤\95à¥\80वर तुम्हाला इतर सदस्यांना विपत्रे पाठवता येत नाहीत',
+'usermaildisabledtext' => 'या à¤µà¤¿à¤\95िवर तुम्हाला इतर सदस्यांना विपत्रे पाठवता येत नाहीत',
 'noemailtitle'         => 'विपत्र पत्ता नाही',
 'noemailtext'          => 'या सदस्याने वैध विपत्र पत्ता नमूद केलेला नाही.',
 'nowikiemailtitle'     => 'विपत्र प्रतिबंधित',
@@ -2185,15 +2185,15 @@ Input:contenttype/subtype, e.g. <tt>image/jpeg</tt>.',
 'mywatchlist'          => 'माझी नित्य पहाण्याची सूची',
 'watchlistfor2'        => '$1 $2 साठी',
 'nowatchlist'          => 'तुमची पहाऱ्याची सूची रिकामी आहे.',
-'watchlistanontext'    => 'तà¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तील बाबी पाहण्याकरता किंवा संपादित करण्याकरता, कृपया $1.',
+'watchlistanontext'    => 'तà¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधील बाबी पाहण्याकरता किंवा संपादित करण्याकरता, कृपया $1.',
 'watchnologin'         => 'प्रवेश केलेला नाही',
 'watchnologintext'     => 'तुमची पहाऱ्याची सूची बदलायची असेल तर तुम्ही [[Special:UserLogin|प्रवेश केलेला]] असलाच पाहीजे.',
-'addwatch'             => 'पहारà¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80त टाका',
-'addedwatchtext'       => '"[[:$1]]"  à¤¹à¥\87 à¤ªà¤¾à¤¨ à¤¤à¥\81मà¤\9aà¥\8dया  [[Special:Watchlist|पहारà¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80त]] टाकले आहे. या पानावरील तसेच त्याच्या चर्चा पानावरील पुढील बदल येथे दाखवले जातील, आणि   [[Special:RecentChanges|अलीकडील बदलांमध्ये]] पान ठळक दिसेल.
+'addwatch'             => 'पहाऱà¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 टाका',
+'addedwatchtext'       => '"[[:$1]]"  à¤¹à¥\87 à¤ªà¤¾à¤¨ à¤¤à¥\81मà¤\9aà¥\8dया  [[Special:Watchlist|पहाऱà¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87]] टाकले आहे. या पानावरील तसेच त्याच्या चर्चा पानावरील पुढील बदल येथे दाखवले जातील, आणि   [[Special:RecentChanges|अलीकडील बदलांमध्ये]] पान ठळक दिसेल.
 
-पहारà¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤ªà¤¾à¤¨ à¤\95ाढायà¤\9aà¥\87 à¤\85सà¥\87ल à¤¤à¤° "पहारा à¤\95ाढा" à¤µà¤° à¤\9fिà¤\9aà¤\95à¥\80 à¤¦à¥\8dया.',
-'removewatch'          => 'पहारà¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤µà¤\97ळा',
-'removedwatchtext'     => '"[[:$1]]" à¤ªà¤¾à¤¨ à¤¤à¥\81मà¤\9aà¥\8dया [[Special:Watchlist|पहारà¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80]]तà¥\82न à¤µà¤\97ळणà¥\8dयात à¤\86लà¥\87 à¤\86हà¥\87.',
+पहाऱà¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤ªà¤¾à¤¨ à¤\95ाढायà¤\9aà¥\87 à¤\85सà¥\87ल à¤¤à¤° "पहारा à¤\95ाढा" à¤µà¤° à¤\9fिà¤\9aà¤\95à¥\80 à¤¦à¥\8dया.',
+'removewatch'          => 'पहाऱà¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤µà¤\97ळा',
+'removedwatchtext'     => '"[[:$1]]" à¤ªà¤¾à¤¨ à¤¤à¥\81मà¤\9aà¥\8dया [[Special:Watchlist|पहाऱà¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80]]तà¥\82न à¤µà¤\97ळणà¥\8dयात à¤\86लà¥\87 à¤\86हà¥\87.',
 'watch'                => 'पहारा',
 'watchthispage'        => 'या पानावर बदलांसाठी लक्ष ठेवा.',
 'unwatch'              => 'पहारा काढा',
@@ -2201,11 +2201,11 @@ Input:contenttype/subtype, e.g. <tt>image/jpeg</tt>.',
 'notanarticle'         => 'मजकुर विरहीत पान',
 'notvisiblerev'        => 'आवृत्ती वगळण्यात आलेली आहे',
 'watchnochange'        => 'प्रदर्शित कालावाधीत, तुम्ही पहारा ठेवलेली कोणतीही बाब संपादीत झाली नाही.',
-'watchlist-details'    => '{{PLURAL:$1|$1 à¤ªà¤¾à¤¨|$1 à¤ªà¤¾à¤¨à¥\87}} à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80त,à¤\9aरà¥\8dà¤\9aा à¤ªà¤¾à¤¨à¥\87 à¤®à¥\8bà¤\9cलà¥\87लà¥\80 नाहीत.',
+'watchlist-details'    => '{{PLURAL:$1|$1 à¤ªà¤¾à¤¨|$1 à¤ªà¤¾à¤¨à¥\87}} à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87, à¤\9aरà¥\8dà¤\9aा à¤ªà¤¾à¤¨à¥\87 à¤®à¥\8bà¤\9cलà¥\87लà¥\87 नाहीत.',
 'wlheader-enotif'      => '* विपत्र सूचना सुविधा ऊपलब्ध केली.',
 'wlheader-showupdated' => "* तुम्ही पानांस दिलेल्या शेवटच्या भेटी पासून बदललेली पाने '''ठळक''' दाखवली आहेत.",
-'watchmethod-recent'   => 'पहारà¥\8dâ\80\8dयातà¥\80ल à¤ªà¤¾à¤¨à¤¾à¤\82à¤\95रिता à¤\85लिकडील बदलांचा तपास',
-'watchmethod-list'     => 'à¤\85लिà¤\95डà¥\80ल à¤¬à¤¦à¤²à¤¾à¤\82à¤\95रिता à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयातà¥\80ल à¤ªà¤¾à¤¨à¤¾à¤\82à¤\9aा à¤¤à¤ªà¤¾à¤¸',
+'watchmethod-recent'   => 'पहाऱà¥\8dयातà¥\80ल à¤ªà¤¾à¤¨à¤¾à¤\82à¤\95रिता à¤\85लà¥\80कडील बदलांचा तपास',
+'watchmethod-list'     => 'à¤\85लà¥\80à¤\95डà¥\80ल à¤¬à¤¦à¤²à¤¾à¤\82à¤\95रिता à¤ªà¤¹à¤¾à¤±à¥\8dयातà¥\80ल à¤ªà¤¾à¤¨à¤¾à¤\82à¤\9aा à¤¤à¤ªà¤¾à¤¸',
 'watchlistcontains'    => 'तुमचा $1 {{PLURAL:$1|पानावर|पानांवर}} पहारा आहे.',
 'iteminvalidname'      => "'$1'बाबीस समस्या, अमान्य नाव...",
 'wlnote'               => "खाली $3, $4 पर्यंतचे गेल्या {{PLURAL:$2| '''१''' तासातील|'''$2''' तासातील}} {{PLURAL:$1|शेवटचा बदल दिला आहे|शेवटाचे '''$1'''बदल दिले आहेत}}.",
@@ -2215,7 +2215,7 @@ Input:contenttype/subtype, e.g. <tt>image/jpeg</tt>.',
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching'       => 'पाहताहे...',
 'unwatching'     => 'पहारा काढत आहे...',
-'watcherrortext' => '$1 à¤¸à¤¾à¤ à¥\80à¤\9aà¥\8dया à¤¤à¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तील मांडणीत (watchlist settings) बदल करताना त्रुटी आली.',
+'watcherrortext' => '$1 à¤¸à¤¾à¤ à¥\80à¤\9aà¥\8dया à¤¤à¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधील मांडणीत (watchlist settings) बदल करताना त्रुटी आली.',
 
 'enotif_mailer'                => '{{SITENAME}} सूचना विपत्र',
 'enotif_reset'                 => 'सर्व पानास भेट दिल्याचे नमुद करा',
@@ -2240,15 +2240,15 @@ $NEWPAGE
 विपत्र: $PAGEEDITOR_EMAIL
 विकि: $PAGEEDITOR_WIKI
 
-तà¥\81मà¥\8dहà¥\80 à¤ªà¤¾à¤¨à¤¾à¤¸ à¤­à¥\87à¤\9f à¤¦à¥\87त à¤¨à¤¾à¤¹à¥\80 à¤¤à¥\8bपरà¥\8dयà¤\82त à¤ªà¥\81ढà¥\87 à¤¹à¥\8bणारà¥\8dâ\80\8dया à¤¬à¤¦à¤²à¤¾à¤\82à¤\9aà¥\80 à¤\87तर à¤\95à¥\8bणतà¥\80हà¥\80 à¤µà¥\87à¤\97ळà¥\80 à¤¸à¥\82à¤\9aना à¤¨à¤¸à¥\87ल. à¤¤à¥\81मà¥\8dहà¥\80 à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\80 à¤¸à¥\82à¤\9aà¥\80तील पहारा ठेवलेल्या पानांकरिताच्या सूचना पताकांचे पुर्नयोजन करु शकता.
+तà¥\81मà¥\8dहà¥\80 à¤ªà¤¾à¤¨à¤¾à¤¸ à¤­à¥\87à¤\9f à¤¦à¥\87त à¤¨à¤¾à¤¹à¥\80 à¤¤à¥\8bपरà¥\8dयà¤\82त à¤ªà¥\81ढà¥\87 à¤¹à¥\8bणाऱà¥\8dया à¤¬à¤¦à¤²à¤¾à¤\82à¤\9aà¥\80 à¤\87तर à¤\95à¥\8bणतà¥\80हà¥\80 à¤µà¥\87à¤\97ळà¥\80 à¤¸à¥\82à¤\9aना à¤¨à¤¸à¥\87ल. à¤¤à¥\81मà¥\8dहà¥\80 à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\80 à¤¸à¥\82à¤\9aà¥\80मधील पहारा ठेवलेल्या पानांकरिताच्या सूचना पताकांचे पुर्नयोजन करु शकता.
 
 तुमची मैत्रीपूर्ण {{SITENAME}} सुचना प्रणाली
 
 --
 
-तà¥\81मà¤\9aà¥\87 à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयातà¥\80ल à¤ªà¤¾à¤¨à¤¾à¤\82à¤\9aà¥\80 à¤®à¤¾à¤\82डणावळ (à¤\95à¥\8bà¤\82दण) à¤¬à¤¦à¤²à¥\82 à¤¶à¤\95ता, {{canonicalurl:{{#special:EditWatchlist}}}} à¤²à¤¾ à¤­à¥\87à¤\9f à¤¦à¥\8dया
+तà¥\81मà¤\9aà¥\87 à¤ªà¤¹à¤¾à¤±à¥\8dयातà¥\80ल à¤ªà¤¾à¤¨à¤¾à¤\82à¤\9aà¥\80 à¤®à¤¾à¤\82डणावळ (à¤\95à¥\8bà¤\82दण) à¤¬à¤¦à¤²à¥\82 à¤¶à¤\95ता, {{canonicalurl:{{#special:EditWatchlist}}}} à¤²à¤¾ à¤­à¥\87à¤\9f à¤¦à¥\8dया
 
-हà¥\87 à¤ªà¤¾à¤¨ à¤¤à¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\81à¤\9aà¥\80तà¥\81न à¤\95ाधà¥\81न à¤\9fाà¤\95णà¥\8dयासाठà¥\80 à¤\96लà¥\80ल à¤¦à¥\81वà¥\8dयावर à¤\9fिà¤\9aà¤\95à¥\80 à¤®à¤¾à¤°à¤¾.
+हà¥\87 à¤ªà¤¾à¤¨ à¤¤à¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\81à¤\9aà¥\80तà¥\81न à¤\95ाधà¥\81न à¤\9fाà¤\95णà¥\8dयासाठà¥\80 à¤\96लà¥\80ल à¤¦à¥\81वà¥\8dयावर à¤\9fिà¤\9aà¤\95à¥\80 à¤®à¤¾à¤°à¤¾.
 $UNWATCHURL
 
 पुढील सहाय्य आणि प्रतिक्रीया:
@@ -2379,8 +2379,8 @@ $UNWATCHURL
 'undeletehistory'              => 'जर तुम्ही पान पुनर्स्थापित केले तर ,सारी आवर्तने इतिहासात पुनर्स्थापित होतील.
 वगळल्या पासून त्याच नावाचे नवे पान तयार केले गेले असेले तर, पुनर्स्थापित आवर्तने पाठीमागील इतिहासात दिसतील. पुनर्स्थापना नंतर संचिकांच्या आवर्तनांवरील बंधने गळून पडतील याची नोंद घ्या.',
 'undeleterevdel'               => 'पृष्ठ पानाचे आवर्तन अर्धवट वगळले जाणार असेल तर पुनर्स्थापनाची कृती केली जाणार नाही.
-à¤\85शा à¤ªà¥\8dरसà¤\82à¤\97à¥\80, à¤¤à¥\81मà¥\8dहà¥\80 à¤\85à¤\97दà¥\80 à¤\85लिकडील वगळलेली आवर्तने अनचेक किंवा अनहाईड केलीच पाहिजे.',
-'undeletehistorynoadmin'       => 'हà¥\87 à¤ªà¤¾à¤¨ à¤µà¤\97ळलà¥\87 à¤\97à¥\87लà¥\87 à¤\86हà¥\87.वà¤\97ळणà¥\8dयाà¤\9aà¥\87 à¤\95ारण à¤\96ालà¥\80ल à¤\86ढावà¥\8dयात,वà¤\97ळणà¥\8dयापà¥\82रà¥\8dवà¥\80 à¤¸à¤\82पादà¥\80त à¤\95रणारà¥\8dâ\80\8dया à¤¸à¤\82पादà¤\95ाà¤\82à¤\9aà¥\8dया à¤®à¤¾à¤¹à¤¿à¤¤à¥\80 à¤¸à¥\8bबत,दाà¤\96वलà¥\87 à¤\86हà¥\87. à¤µà¤\97ळलà¥\87लà¥\8dया à¤\86वरà¥\8dतà¥\8dनाà¤\82à¤\9aा à¤¨à¥\87मà¤\95ा à¤®à¤\9cà¤\95à¥\81र à¤\95à¥\87वळ à¤ªà¥\8dरà¤\9aालà¤\95ाà¤\82ना à¤\89पलबà¥\8dध à¤\85सà¥\87ल.',
+à¤\85शा à¤ªà¥\8dरसà¤\82à¤\97à¥\80, à¤¤à¥\81मà¥\8dहà¥\80 à¤\85à¤\97दà¥\80 à¤\85लà¥\80कडील वगळलेली आवर्तने अनचेक किंवा अनहाईड केलीच पाहिजे.',
+'undeletehistorynoadmin'       => 'हà¥\87 à¤ªà¤¾à¤¨ à¤µà¤\97ळलà¥\87 à¤\97à¥\87लà¥\87 à¤\86हà¥\87.वà¤\97ळणà¥\8dयाà¤\9aà¥\87 à¤\95ारण à¤\96ालà¥\80ल à¤\86ढावà¥\8dयात,वà¤\97ळणà¥\8dयापà¥\82रà¥\8dवà¥\80 à¤¸à¤\82पादà¥\80त à¤\95रणाऱà¥\8dया à¤¸à¤\82पादà¤\95ाà¤\82à¤\9aà¥\8dया à¤®à¤¾à¤¹à¤¿à¤¤à¥\80 à¤¸à¥\8bबत,दाà¤\96वलà¥\87 à¤\86हà¥\87. à¤µà¤\97ळलà¥\87लà¥\8dया à¤\86वरà¥\8dतà¥\8dनाà¤\82à¤\9aा à¤¨à¥\87मà¤\95ा à¤®à¤\9cà¤\95à¥\81र à¤\95à¥\87वळ à¤ªà¥\8dरà¤\9aालà¤\95ाà¤\82ना à¤\89पलबà¥\8dध à¤\85सà¥\87ल.',
 'undelete-revision'            => '$1चे($4चे, $5 येथील) आवर्तन $3 ने वगळले:',
 'undeleterevision-missing'     => 'अयोग्य अथवा नसापडणारे आवर्तन. तुमचा दुवा कदाचित चूकीचा असेल, किंवा आवर्तन पुनर्स्थापित केले गेले असेल किंवा विदागारातून वगळले असेल.',
 'undelete-nodiff'              => 'पूर्वीचे कोणतेही आवर्तन आढळले नाही.',
@@ -2397,7 +2397,7 @@ $UNWATCHURL
 'undeletedpage'                => "'''$1ला पुनर्स्थापित केले'''
 
 अलिकडिल वगळलेल्या आणि पुनर्स्थापितांच्या नोंदीकरिता [[Special:Log/delete|वगळल्याच्या नोंदी]] पहा .",
-'undelete-header'              => 'à¤\85लिकडील वगळलेल्या पानांकरिता [[Special:Log/delete|वगळलेल्या नोंदी]] पहा.',
+'undelete-header'              => 'à¤\85लà¥\80कडील वगळलेल्या पानांकरिता [[Special:Log/delete|वगळलेल्या नोंदी]] पहा.',
 'undelete-search-title'        => 'वगळलेली पाने शोधा',
 'undelete-search-box'          => 'वगळलेली पाने शोधा',
 'undelete-search-prefix'       => 'पासून सूरू होणारी पाने दाखवा:',
@@ -2599,9 +2599,9 @@ $1',
 # Developer tools
 'lockdb'              => 'विदागारास ताळे ठोका',
 'unlockdb'            => 'विदागाराचे ताळे उघडा',
-'lockdbtext'          => 'विदाà¤\97ारास à¤¤à¤¾à¤³à¥\87 à¤ à¥\8bà¤\95लà¥\8dयानà¥\87 à¤¸à¤°à¥\8dव à¤¸à¤¦à¤¸à¥\8dयाà¤\82à¤\9aà¥\80 à¤¸à¤\82पादन à¤\95à¥\8dषमता, à¤¤à¥\8dयाà¤\82à¤\9aà¥\8dया à¤¸à¤¦à¤¸à¥\8dय à¤ªà¤¸à¤\82तà¥\80 à¤¬à¤¦à¤²à¤£à¥\87,तà¥\8dयाà¤\82à¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80 à¤¸à¤\82पादà¥\80त à¤\95रणà¥\87,à¤\86णि à¤µà¤¿à¤¦à¥\87त à¤¬à¤¦à¤² à¤\98डवणारà¥\8dâ\80\8dया à¤\87तर à¤\97à¥\8bषà¥\8dà¤\9fà¥\80 à¤¸à¤\82सà¥\8dथà¤\97à¥\80त à¤¹à¥\8bतà¥\80ल.
+'lockdbtext'          => 'विदाà¤\97ारास à¤¤à¤¾à¤³à¥\87 à¤ à¥\8bà¤\95लà¥\8dयानà¥\87 à¤¸à¤°à¥\8dव à¤¸à¤¦à¤¸à¥\8dयाà¤\82à¤\9aà¥\80 à¤¸à¤\82पादन à¤\95à¥\8dषमता, à¤¤à¥\8dयाà¤\82à¤\9aà¥\8dया à¤¸à¤¦à¤¸à¥\8dय à¤ªà¤¸à¤\82तà¥\80 à¤¬à¤¦à¤²à¤£à¥\87,तà¥\8dयाà¤\82à¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80 à¤¸à¤\82पादà¥\80त à¤\95रणà¥\87,à¤\86णि à¤µà¤¿à¤¦à¥\87त à¤¬à¤¦à¤² à¤\98डवणाऱà¥\8dया à¤\87तर à¤\97à¥\8bषà¥\8dà¤\9fà¥\80 à¤¸à¤\82सà¥\8dथà¤\97à¥\80त à¤¹à¥\8bतà¥\80ल.
 कृपया तुम्हाला हेच करावयाचे आहे आणि भरण-पोषणा नंतर विदागाराचे ताळे उघडावयाचे आहे हे निश्चित करा.',
-'unlockdbtext'        => 'विदाà¤\97ाराà¤\9aà¥\87 à¤¤à¤¾à¤³à¥\87 à¤\89à¤\98डलà¥\8dयानà¥\87 à¤¸à¤°à¥\8dव à¤¸à¤¦à¤¸à¥\8dयाà¤\82à¤\9aà¥\80 à¤¸à¤\82पादन à¤\95à¥\8dषमता, à¤¤à¥\8dयाà¤\82à¤\9aà¥\8dया à¤¸à¤¦à¤¸à¥\8dय à¤ªà¤¸à¤\82तà¥\80 à¤¬à¤¦à¤²à¤£à¥\87,तà¥\8dयाà¤\82à¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80 à¤¸à¤\82पादà¥\80त à¤\95रणà¥\87,à¤\86णि à¤µà¤¿à¤¦à¥\87त à¤¬à¤¦à¤² à¤\98डवणारà¥\8dâ\80\8dया à¤\87तर à¤\97à¥\8bषà¥\8dà¤\9fà¥\80à¤\9aà¥\80 à¤\95à¥\8dषमता à¤ªà¥\81नà¥\8dहा à¤\89पलबà¥\8dध à¤¹à¥\8bà¤\88ल.
+'unlockdbtext'        => 'विदाà¤\97ाराà¤\9aà¥\87 à¤¤à¤¾à¤³à¥\87 à¤\89à¤\98डलà¥\8dयानà¥\87 à¤¸à¤°à¥\8dव à¤¸à¤¦à¤¸à¥\8dयाà¤\82à¤\9aà¥\80 à¤¸à¤\82पादन à¤\95à¥\8dषमता, à¤¤à¥\8dयाà¤\82à¤\9aà¥\8dया à¤¸à¤¦à¤¸à¥\8dय à¤ªà¤¸à¤\82तà¥\80 à¤¬à¤¦à¤²à¤£à¥\87,तà¥\8dयाà¤\82à¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80 à¤¸à¤\82पादà¥\80त à¤\95रणà¥\87,à¤\86णि à¤µà¤¿à¤¦à¥\87त à¤¬à¤¦à¤² à¤\98डवणाऱà¥\8dया à¤\87तर à¤\97à¥\8bषà¥\8dà¤\9fà¥\80à¤\9aà¥\80 à¤\95à¥\8dषमता à¤ªà¥\81नà¥\8dहा à¤\89पलबà¥\8dध à¤¹à¥\8bà¤\88ल.
 कृपया तुम्हाला हेच करावयाचे आहे हे निश्चित करा.',
 'lockconfirm'         => 'होय,मला खरेच विदागारास ताळे ठोकायच आहे.',
 'unlockconfirm'       => 'होय,मला खरेच विदागाराचे ताळे उघडवयाचे आहे.',
@@ -2645,7 +2645,7 @@ $1',
 असे केल्याने एखाद्या महत्वाच्या/लोकप्रीय लेखामध्ये अनपेक्षित आणि महत्वाचे बदल होऊ शकतात. तुम्हाला विनंती आहे की तुम्ही पूर्ण काळजी घ्या व होणारे परिणाम समजावून घ्या.
 जर तुम्हाला शंका असेल तर प्रचालक/प्रबंधकांशी संपर्क करा.",
 'movepagetalktext'             => "संबंधित चर्चा पृष्ठ याबरोबर स्थानांतरीत होणार नाही '''जर:'''
-* à¤¤à¥\81मà¥\8dहà¥\80 à¤ªà¥\83षà¥\8dठ à¤¦à¥\81सरà¥\8dâ\80\8dया à¤¨à¤¾à¤®à¤µà¤¿à¤¶à¥\8dवात à¤¸à¥\8dथानाà¤\82तरà¥\80त à¤\95रत à¤\85साल
+* à¤¤à¥\81मà¥\8dहà¥\80 à¤ªà¥\83षà¥\8dठ à¤¦à¥\81सऱà¥\8dया à¤¨à¤¾à¤®à¤µà¤¿à¤¶à¥\8dवात à¤¸à¥\8dथानाà¤\82तरà¥\80त à¤\95रत à¤\85साल
 * या नावाचे चर्चा पान अगोदरच अस्तित्वात असेल तर, किंवा
 * खालील चेकबॉक्स तुम्ही काढून टाकला तर.
 
@@ -2713,7 +2713,7 @@ $1',
 
 # Export
 'export'            => 'पाने निर्यात करा',
-'exporttext'        => 'तà¥\81मà¥\8dहà¥\80 à¤\8fà¤\96ादà¥\8dया à¤µà¤¿à¤¶à¤¿à¤·à¥\8dà¤\9f à¤ªà¤¾à¤¨à¤¾à¤\9aा à¤®à¤\9cà¤\95à¥\81र à¤\86णि à¤¸à¤\82पादन à¤\87तिहास à¤\95िà¤\82वा  à¤ªà¤¾à¤¨à¤¾à¤\82à¤\9aा à¤¸à¤\82à¤\9a à¤\8fà¤\96ादà¥\8dया XML à¤µà¥\87षà¥\8dठणात à¤ à¥\87वà¥\82न à¤¨à¤¿à¤°à¥\8dयात à¤\95रà¥\82 à¤¶à¤\95ता.हà¥\87 à¤¤à¥\81मà¥\8dहाला [[Special:Import|पान à¤\86यात à¤\95रा]]वापरà¥\82न à¤®à¤¿à¤¡à¥\80याविà¤\95ि à¤µà¤¾à¤ªà¤°à¤£à¤¾à¤°à¥\8dâ\80\8dया à¤\87तर à¤µà¤¿à¤\95ित à¤\86यात à¤\95रता à¤¯à¥\87à¤\88ल.
+'exporttext'        => 'तà¥\81मà¥\8dहà¥\80 à¤\8fà¤\96ादà¥\8dया à¤µà¤¿à¤¶à¤¿à¤·à¥\8dà¤\9f à¤ªà¤¾à¤¨à¤¾à¤\9aा à¤®à¤\9cà¤\95à¥\81र à¤\86णि à¤¸à¤\82पादन à¤\87तिहास à¤\95िà¤\82वा  à¤ªà¤¾à¤¨à¤¾à¤\82à¤\9aा à¤¸à¤\82à¤\9a à¤\8fà¤\96ादà¥\8dया XML à¤µà¥\87षà¥\8dठणात à¤ à¥\87वà¥\82न à¤¨à¤¿à¤°à¥\8dयात à¤\95रà¥\82 à¤¶à¤\95ता.हà¥\87 à¤¤à¥\81मà¥\8dहाला [[Special:Import|पान à¤\86यात à¤\95रा]]वापरà¥\82न à¤®à¤¿à¤¡à¥\80याविà¤\95ि à¤µà¤¾à¤ªà¤°à¤£à¤¾à¤±à¥\8dया à¤\87तर à¤µà¤¿à¤\95ित à¤\86यात à¤\95रता à¤¯à¥\87à¤\88ल.
 
 पाने निर्यात करण्या करिता,एका ओळीत एक मथळा असे, खालील मजकुर रकान्यात मथळे भरा आणि तुम्हाला ’सध्याची आवृत्ती तसेच सर्व जुन्या आवृत्ती ,पानाच्या इतिहास ओळी सोबत’, किंवा ’केवळ सध्याची आवृत्ती शेवटच्या संपादनाच्या माहिती सोबत’ हवी आहे का ते निवडा.
 
@@ -2769,7 +2769,7 @@ $1',
 आवर्तनांच्या तारखा आणि संपादकांची नावे जतन केली जातील.
 सर्व आंतरविकि आयात क्रिया [[Special:Log/import|आयात नोंदीत]] दाखल केल्या आहेत.',
 'import-interwiki-source'    => 'स्रोत विकी / पान:',
-'import-interwiki-history'   => 'या à¤ªà¤¾à¤¨à¤¾à¤\95रिताà¤\9aà¥\80 à¤¸à¤¾à¤°à¥\8dâ\80\8dया à¤\87तिहास à¤\86वरà¥\8dतनाà¤\82à¤\9aà¥\80 à¤¨à¤\95à¥\8dà¤\95ल à¤\95रा',
+'import-interwiki-history'   => 'या à¤ªà¤¾à¤¨à¤¾à¤\95रिताà¤\9aà¥\80 à¤¸à¤¾à¤±à¥\8dया à¤\87तिहास à¤\86वरà¥\8dतनाà¤\82à¤\9aà¥\80 à¤¨à¤\95à¥\8dà¤\95ल à¤\95रा',
 'import-interwiki-templates' => 'साचे आंतरभूत करा',
 'import-interwiki-submit'    => 'आयात',
 'import-interwiki-namespace' => 'पाने नामविश्वात स्थानांतरीत करा:',
@@ -2847,7 +2847,7 @@ $1',
 'tooltip-ca-undelete'                 => 'या पानाची वगळण्यापूर्वी केलेली संपादने पुनर्स्थापित करा',
 'tooltip-ca-move'                     => 'हे पान स्थानांतरित करा.',
 'tooltip-ca-watch'                    => 'हे पान तुमच्या पहाऱ्याच्या सूचीमध्ये टाका',
-'tooltip-ca-unwatch'                  => 'हà¥\87 à¤ªà¤¾à¤¨ à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤\95ाढा.',
+'tooltip-ca-unwatch'                  => 'हà¥\87 à¤ªà¤¾à¤¨ à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80तà¥\82न à¤\95ाढा.',
 'tooltip-search'                      => '{{SITENAME}} शोधा',
 'tooltip-search-go'                   => 'या नेमक्या नावाच्या पानाकडे,अस्तित्वात असल्यास, चला',
 'tooltip-search-fulltext'             => 'या मजकुराकरिता पान शोधा',
@@ -2864,7 +2864,7 @@ $1',
 'tooltip-feed-rss'                    => 'या पानाकरिता आर.एस.एस. रसद',
 'tooltip-feed-atom'                   => 'या पानाकरिता ऍटम रसद',
 'tooltip-t-contributions'             => 'या सदस्याच्या योगदानांची यादी पहा',
-'tooltip-t-emailuser'                 => 'या à¤¸à¤¦à¤¸à¥\8dयाला à¤\87मेल पाठवा',
+'tooltip-t-emailuser'                 => 'या à¤¸à¤¦à¤¸à¥\8dयाला à¤\88-मेल पाठवा',
 'tooltip-t-upload'                    => 'चित्रे किंवा माध्यम संचिका चढवा',
 'tooltip-t-specialpages'              => 'सर्व विशेष पृष्ठांची यादी',
 'tooltip-t-print'                     => 'या पानाची छापण्यायोग्य आवृत्ती',
@@ -2884,7 +2884,7 @@ $1',
 'tooltip-preview'                     => 'तुम्ही केलेल्या बदलांची झलक पहा, जतन करण्यापूर्वी कृपया हे वापरा!',
 'tooltip-diff'                        => 'या पाठ्यातील तुम्ही केलेले बदल दाखवा.',
 'tooltip-compareselectedversions'     => 'निवडलेल्या आवृत्त्यांमधील बदल दाखवा.',
-'tooltip-watch'                       => 'हà¥\87 à¤ªà¤¾à¤¨ à¤¤à¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80त à¤\9fाà¤\95ा.',
+'tooltip-watch'                       => 'हà¥\87 à¤ªà¤¾à¤¨ à¤¤à¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80त à¤\9fाà¤\95ा.',
 'tooltip-watchlistedit-normal-submit' => 'शीर्षके काढवीत',
 'tooltip-watchlistedit-raw-submit'    => 'पाहण्याची सूची अद्ययावत करावी',
 'tooltip-recreate'                    => 'हे पान मागे वगळले असले तरी नवनिर्मीत करा',
@@ -2949,8 +2949,8 @@ $1',
 'markaspatrolledtext'                 => 'या पानावर गस्त झाल्याची खूण करा',
 'markedaspatrolled'                   => 'गस्त केल्याची खूण केली',
 'markedaspatrolledtext'               => 'निवडलेल्या [[:$1]]च्या आवर्तनास गस्त घातल्याची खूण केली.',
-'rcpatroldisabled'                    => 'à¤\85लिकडील बदलची गस्ती अनुपलब्ध',
-'rcpatroldisabledtext'                => 'सधà¥\8dया â\80\99à¤\85लिकडील बदल’ ची गस्त सुविधा अनुपलब्ध केली आहे.',
+'rcpatroldisabled'                    => 'à¤\85लà¥\80कडील बदलची गस्ती अनुपलब्ध',
+'rcpatroldisabledtext'                => 'सधà¥\8dया â\80\99à¤\85लà¥\80कडील बदल’ ची गस्त सुविधा अनुपलब्ध केली आहे.',
 'markedaspatrollederror'              => 'गस्तीची खूण करता येत नाही',
 'markedaspatrollederrortext'          => 'गस्त घातल्याची खूण करण्याकरिता तुम्हाला एक आवर्तन नमुद करावे लागेल.',
 'markedaspatrollederror-noautopatrol' => 'तुम्हाला स्वत:च्याच बदलांवर गस्त घातल्याची खूण करण्याची परवानगी नाही.',
@@ -3065,7 +3065,7 @@ $1',
 'exif-whitepoint'                  => 'धवल बिंदू क्रोमॅटिसिटी',
 'exif-primarychromaticities'       => 'क्रोमॅटिसिटीज ऑफ प्राईमारिटीज',
 'exif-ycbcrcoefficients'           => 'कलर स्पेस ट्रान्स्फॉर्मेशन मॅट्रीक्स कोएफिशीयंट्स',
-'exif-referenceblackwhite'         => 'à¤\95ाळà¥\8dया à¤\86णि à¤ªà¤¾à¤\82ढरà¥\8dâ\80\8dया à¤¸à¤\82दरà¥\8dभ à¤®à¥\81लà¥\8dयाà¤\82à¤\9aà¥\80 à¤\9cà¥\8bडà¥\80',
+'exif-referenceblackwhite'         => 'à¤\95ाळà¥\8dया à¤\86णि à¤ªà¤¾à¤\82ढऱà¥\8dया à¤¸à¤\82दरà¥\8dभ à¤®à¥\81लà¥\8dयाà¤\82à¤\9aà¥\80 à¤\9cà¥\8bडà¥\80',
 'exif-datetime'                    => 'संचिका बदल तारीख आणि वेळ',
 'exif-imagedescription'            => 'चित्र शीर्षक',
 'exif-make'                        => 'कॅमेरा उत्पादक',
@@ -3446,9 +3446,9 @@ $1',
 'limitall'      => 'सर्व',
 
 # E-mail address confirmation
-'confirmemail'              => 'à¤\87मेल पत्ता पडताळून पहा',
-'confirmemail_noemail'      => '[[Special:Preferences|सदसà¥\8dय à¤ªà¤¸à¤\82तà¥\80त]] à¤¤à¥\81मà¥\8dहà¥\80 à¤ªà¥\8dरमाणित à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\87मेल) पत्ता दिलेला नाही.',
-'confirmemail_text'         => 'विपतà¥\8dर à¤¸à¥\81विधा à¤µà¤¾à¤ªà¤°à¤£à¥\8dया à¤ªà¥\82रà¥\8dवà¥\80 {{SITENAME}}वर à¤¤à¥\81मà¤\9aा à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\87मà¥\87ल) à¤ªà¤¤à¥\8dता à¤ªà¥\8dरमाणित à¤\95रणà¥\87 à¤\97रà¤\9cà¥\87à¤\9aà¥\87 à¤\86हà¥\87. à¤¤à¥\81मà¤\9aà¥\8dया à¤ªà¤¤à¥\8dतà¥\8dयावर à¤¨à¤¿à¤¶à¥\8dà¤\9aितà¥\80à¤\95रण à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\87मà¥\87ल) à¤ªà¤¾à¤ à¤µà¤£à¥\8dयाà¤\95रिता à¤\96ालà¥\80ल à¤¬à¤\9fण à¤¸à¥\81रà¥\82 à¤\95रा.विपतà¥\8dरात à¤\95à¥\81à¤\9fसà¤\82à¤\95à¥\87तà¤\9aà¥\8d(पासवरà¥\8dड) à¤\85सलà¥\87ला à¤¦à¥\81वा à¤\85सà¥\87ल;तà¥\81मà¤\9aा à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\87मेल) पत्ता प्रमाणित करण्या करिता तुमच्या विचरकात हा दिलेला दुवा चढवा.',
+'confirmemail'              => 'à¤\88-मेल पत्ता पडताळून पहा',
+'confirmemail_noemail'      => '[[Special:Preferences|सदसà¥\8dय à¤ªà¤¸à¤\82तà¥\80त]] à¤¤à¥\81मà¥\8dहà¥\80 à¤ªà¥\8dरमाणित à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\88-मेल) पत्ता दिलेला नाही.',
+'confirmemail_text'         => 'विपतà¥\8dर à¤¸à¥\81विधा à¤µà¤¾à¤ªà¤°à¤£à¥\8dया à¤ªà¥\82रà¥\8dवà¥\80 {{SITENAME}}वर à¤¤à¥\81मà¤\9aा à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\88-मà¥\87ल) à¤ªà¤¤à¥\8dता à¤ªà¥\8dरमाणित à¤\95रणà¥\87 à¤\97रà¤\9cà¥\87à¤\9aà¥\87 à¤\86हà¥\87. à¤¤à¥\81मà¤\9aà¥\8dया à¤ªà¤¤à¥\8dतà¥\8dयावर à¤¨à¤¿à¤¶à¥\8dà¤\9aितà¥\80à¤\95रण à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\88-मà¥\87ल) à¤ªà¤¾à¤ à¤µà¤£à¥\8dयाà¤\95रिता à¤\96ालà¥\80ल à¤¬à¤\9fण à¤¸à¥\81रà¥\82 à¤\95रा.विपतà¥\8dरात à¤\95à¥\81à¤\9fसà¤\82à¤\95à¥\87तà¤\9aà¥\8d(पासवरà¥\8dड) à¤\85सलà¥\87ला à¤¦à¥\81वा à¤\85सà¥\87ल;तà¥\81मà¤\9aा à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\88-मेल) पत्ता प्रमाणित करण्या करिता तुमच्या विचरकात हा दिलेला दुवा चढवा.',
 'confirmemail_pending'      => 'एक निश्चितीकरण कुटसंकेत आधीच तुम्हाला विपत्र केला आहे; जर तुम्ही खाते अशातच उघडले असेल तर,एक नवा कुट संकेत मागण्यापूर्वी,पाठवलेला मिळण्याकरिता थोडी मिनिटे वाट पहाणे तुम्हाला आवडू शकेल.',
 'confirmemail_send'         => 'विपत्र निश्चितीकरण नियमावली',
 'confirmemail_sent'         => 'शाबितीकरण विपत्र पाठवले.',
@@ -3459,10 +3459,10 @@ $1',
 मेलर परत आले: $1',
 'confirmemail_invalid'      => 'अयोग्य निश्चितीकरण नियमावली.नियमावली काल समाप्त झाला असु शकेल.',
 'confirmemail_needlogin'    => 'तुमचा विपत्रपत्ता प्रमाणित करण्यासाठी तुम्ही $1 करावयास हवे.',
-'confirmemail_success'      => 'तà¥\81मà¤\9aा à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\87मेल) पत्ता प्रमाणित झाला आहे.तुम्ही आता [[Special:UserLogin|दाखल]] होऊ शकता आणि विकिचा आनंद घेऊ शकता.',
-'confirmemail_loggedin'     => 'तà¥\81मà¤\9aा à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\87मेल) पत्ता आता प्रमाणित झाला आहे.',
+'confirmemail_success'      => 'तà¥\81मà¤\9aा à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\88-मेल) पत्ता प्रमाणित झाला आहे.तुम्ही आता [[Special:UserLogin|दाखल]] होऊ शकता आणि विकिचा आनंद घेऊ शकता.',
+'confirmemail_loggedin'     => 'तà¥\81मà¤\9aा à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\88-मेल) पत्ता आता प्रमाणित झाला आहे.',
 'confirmemail_error'        => 'तुमची निश्चिती जतन करताना काही तरी चूकले',
-'confirmemail_subject'      => '{{SITENAME}} à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\87मेल) पत्ता प्रमाणित',
+'confirmemail_subject'      => '{{SITENAME}} à¤µà¤¿à¤ªà¤¤à¥\8dर (à¤\88-मेल) पत्ता प्रमाणित',
 'confirmemail_body'         => 'कुणीतरी, बहुतेक तुम्ही, $1 या पत्त्यावारून, "$2" खाते हा ईमेल पत्ता वापरून {{SITENAME}} या संकेतस्थळावर उघडले आहे.
 
 हे खाते खरोखर तुमचे आहे याची खात्री करण्यासाठी आणि {{SITENAME}} वर ईमेल पर्याय उत्तेजित (उपलब्ध) करण्यासाठी, हा दुवा तुमच्या ब्राउजर मधे उघडा:
@@ -3476,18 +3476,18 @@ $5
 हा हमी कलम $4 ला नष्ट होईल.',
 'confirmemail_body_changed' => '
 
-{{SITENAME}} à¤¯à¤¾ à¤¸à¤\82à¤\95à¥\87तसà¥\8dथळावर à¤\95à¥\81णà¥\80तरà¥\80, à¤¬à¤¹à¥\81तà¥\87à¤\95 à¤¤à¥\81मà¥\8dहà¥\80, $1 à¤¯à¤¾ à¤\85à¤\82à¤\95पतà¥\8dतà¥\8dयावारà¥\82न, "$2" à¤\96ातà¥\8dयाà¤\95रिताà¤\9aा  à¤\88मà¥\87ल   à¤\86पलà¥\8dया à¤¯à¤¾ à¤\87मेल पत्त्यावर बदलला आहे.
+{{SITENAME}} à¤¯à¤¾ à¤¸à¤\82à¤\95à¥\87तसà¥\8dथळावर à¤\95à¥\81णà¥\80तरà¥\80, à¤¬à¤¹à¥\81तà¥\87à¤\95 à¤¤à¥\81मà¥\8dहà¥\80, $1 à¤¯à¤¾ à¤\85à¤\82à¤\95पतà¥\8dतà¥\8dयावारà¥\82न, "$2" à¤\96ातà¥\8dयाà¤\95रिताà¤\9aा  à¤\88मà¥\87ल   à¤\86पलà¥\8dया à¤¯à¤¾ à¤\88-मेल पत्त्यावर बदलला आहे.
 
 हे खाते खरोखर तुमचे आहे याची खात्री करण्यासाठी आणि {{SITENAME}} वर ईमेल पर्याय उत्तेजित (उपलब्ध) करण्यासाठी, हा दुवा तुमच्या ब्राउजर मधे उघडा:
 
 $3
 
-à¤\9cर à¤¤à¥\81मà¥\8dहà¥\80 à¤¹à¥\87 à¤\96ातà¥\87 à¤¤à¥\81मà¤\9aà¥\87 *नसà¥\87ल* à¤¤à¤° à¤¹à¥\80 à¤\87मà¥\87लपत्त्याच्या बदलाची मागणी रद्द करण्यासाठी खालील दुवा उघडा:
+à¤\9cर à¤¤à¥\81मà¥\8dहà¥\80 à¤¹à¥\87 à¤\96ातà¥\87 à¤¤à¥\81मà¤\9aà¥\87 *नसà¥\87ल* à¤¤à¤° à¤¹à¥\80 à¤\88-मà¥\87ल पत्त्याच्या बदलाची मागणी रद्द करण्यासाठी खालील दुवा उघडा:
 
 $5
 
 हा  निश्चितीकरण संदेश  $4 ला नष्ट होईल.',
-'confirmemail_body_set'     => '{{SITENAME}} à¤¯à¤¾ à¤¸à¤\82à¤\95à¥\87तसà¥\8dथळावर à¤\95à¥\81णà¥\80तरà¥\80, à¤¬à¤¹à¥\81तà¥\87à¤\95 à¤¤à¥\81मà¥\8dहà¥\80, $1 à¤¯à¤¾ à¤\85à¤\82à¤\95पतà¥\8dतà¥\8dयावारà¥\82न, "$2" à¤\96ातà¥\8dयाà¤\95रिताà¤\9aा  à¤\88-मà¥\87ल  à¤\86पलà¥\8dया à¤¯à¤¾ à¤\87मेल पत्त्यानुसार दिला आहे.
+'confirmemail_body_set'     => '{{SITENAME}} à¤¯à¤¾ à¤¸à¤\82à¤\95à¥\87तसà¥\8dथळावर à¤\95à¥\81णà¥\80तरà¥\80, à¤¬à¤¹à¥\81तà¥\87à¤\95 à¤¤à¥\81मà¥\8dहà¥\80, $1 à¤¯à¤¾ à¤\85à¤\82à¤\95पतà¥\8dतà¥\8dयावारà¥\82न, "$2" à¤\96ातà¥\8dयाà¤\95रिताà¤\9aा  à¤\88-मà¥\87ल  à¤\86पलà¥\8dया à¤¯à¤¾ à¤\88-मेल पत्त्यानुसार दिला आहे.
 
 हे खाते खरोखर तुमचे आहे याची खात्री करण्यासाठी आणि {{SITENAME}} वर ई-मेल पर्याय उत्तेजित (उपलब्ध) करण्यासाठी, हा दुवा तुमच्या ब्राउजर मधे उघडा:
 
@@ -3517,11 +3517,11 @@ $5
 # action=purge
 'confirm_purge_button' => 'ठीक',
 'confirm-purge-top'    => 'यापानाची सय रिकामी करावयाची आहे?',
-'confirm-purge-bottom' => 'पानाà¤\9aà¥\80 à¤\85तà¥\80 à¤\85लिकडील आवृत्ती सादर करण्यासाठी त्या पानाचे क्षालन,  पानाची सय ( पानाचे पर्जींग पानाची cache )  रिकामी करते .',
+'confirm-purge-bottom' => 'पानाà¤\9aà¥\80 à¤\85तà¥\80 à¤\85लà¥\80कडील आवृत्ती सादर करण्यासाठी त्या पानाचे क्षालन,  पानाची सय ( पानाचे पर्जींग पानाची cache )  रिकामी करते .',
 
 # action=watch/unwatch
 'confirm-watch-button'   => 'ठीक आहे',
-'confirm-watch-top'      => 'हà¥\87 à¤ªà¤¾à¤¨ à¤¤à¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤°à¤¾ à¤¸à¥\82à¤\9aà¥\80त टाकायचे?',
+'confirm-watch-top'      => 'हà¥\87 à¤ªà¤¾à¤¨ à¤¤à¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤°à¤¾ à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 टाकायचे?',
 'confirm-unwatch-button' => 'ठीक',
 'confirm-unwatch-top'    => 'हे पान पहार्‍याच्या सूचीतून काढायचे?',
 
@@ -3566,7 +3566,7 @@ $5
 'lag-warn-high'   => 'विदा विदादात्यास लागणार्‍या अत्युच्च कालावधी मुळे, $1 {{PLURAL:$1|सेकंदापेक्षा|सेकंदांपेक्षा}} नवे बदल या सूचीत न दाखवले जाण्याची शक्यता आहे.',
 
 # Watchlist editor
-'watchlistedit-numitems'       => 'à¤\9aरà¥\8dà¤\9aा à¤ªà¤¾à¤¨à¥\87 à¤¸à¥\8bडà¥\82न, {{PLURAL:$1|1 à¤¶à¥\80रà¥\8dषà¤\95 à¤ªà¤¾à¤¨|$1 à¤¶à¥\80रà¥\8dषà¤\95 à¤ªà¤¾à¤¨à¥\87}} à¤¤à¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤°à¥\8dâ\80\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80त आहेत.',
+'watchlistedit-numitems'       => 'à¤\9aरà¥\8dà¤\9aा à¤ªà¤¾à¤¨à¥\87 à¤¸à¥\8bडà¥\82न, {{PLURAL:$1|1 à¤¶à¥\80रà¥\8dषà¤\95 à¤ªà¤¾à¤¨|$1 à¤¶à¥\80रà¥\8dषà¤\95 à¤ªà¤¾à¤¨à¥\87}} à¤¤à¥\81मà¤\9aà¥\8dया à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया à¤¸à¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 आहेत.',
 'watchlistedit-noitems'        => 'पहार्‍याच्या सूचीत कोणतेही शीर्षक पान नोंदलेले नाही.',
 'watchlistedit-normal-title'   => 'पहाऱ्याची सूचीचे संपादन करा',
 'watchlistedit-normal-legend'  => 'शीर्षकपाने पहार्‍याच्या सूचीतून वगळा',
@@ -3752,7 +3752,7 @@ $5
 'logentry-newusers-create'            => 'एक सदस्यखाते $1 तयार केले',
 'logentry-newusers-create2'           => '$1  ने  सदस्य खाते $3  निर्मित केले  आहे.',
 'logentry-newusers-autocreate'        => '$1  खाते स्वयमेव निर्मित झाले आहे.',
-'newuserlog-byemail'                  => 'परवलà¥\80à¤\9aा à¤¶à¤¬à¥\8dद à¤\87मà¥\87लमार्फत पाठविलेला आहे',
+'newuserlog-byemail'                  => 'परवलà¥\80à¤\9aा à¤¶à¤¬à¥\8dद à¤\88-मà¥\87ल मार्फत पाठविलेला आहे',
 
 # Feedback
 'feedback-bugornote' => 'जर आपण तांत्रिक प्रश्न  विस्तृतपणे मांडण्यास तयार असाल तर कृपया ($1 गणकदोष वृतांत) पाठवा. नपेक्षा, खाली देण्यात आलेले सोपे आवेदनपत्र वापरा. आपली टिप्पणी "[ $3, $2]" या पानास आपले सदस्यनाव व आपण कोणता ब्राउजर वापरता यासह जोडण्यात येईल.',
index 681214d..5ec62e5 100644 (file)
@@ -580,6 +580,9 @@ Pertanyaan: $2',
 'customjsprotected'    => 'Anda tidak dibenarkan menyunting laman JavaScript ini kerana ia mengandungi tetapan peribadi pengguna lain.',
 'ns-specialprotected'  => 'Laman khas tidak boleh disunting.',
 'titleprotected'       => "Tajuk ini telah dilindungi oleh [[User:$1|$1]] daripada dicipta. Sebab yang diberikan ialah ''$2''.",
+'filereadonlyerror'    => 'Fail "$1" tidak dapat diubah suai kerana repositori fail "$2" berada dalam ragam baca sahaja.
+
+Sebab yang diberikan ialah "\'\'$3\'\'".',
 
 # Virus scanner
 'virus-badscanner'     => "Konfigurasi rosak: pengimbas virus yang tidak diketahui: ''$1''",
@@ -1685,6 +1688,7 @@ Sila hubungi [[Special:ListUsers/sysop|pentadbir sistem]].',
 'backend-fail-closetemp'     => 'Fail sementara tidak dapat ditutup.',
 'backend-fail-read'          => 'Fail $1 tidak dapat dibaca.',
 'backend-fail-create'        => 'Fail $1 tidak dapat diwujudkan.',
+'backend-fail-maxsize'       => 'Fail $1 tidak boleh dibuat kerana melebihi $2 bait.',
 'backend-fail-readonly'      => 'Backend storan "$1" kini dalam mod baca sahaja. Sebab yang diberikan ialah: "$2"',
 'backend-fail-synced'        => 'Fail "$1" berada dalam keadaan yang tidak sejajar dalam backend storan dalaman',
 'backend-fail-connect'       => 'Tidak dapat bersambung dengan backend storan "$1".',
@@ -1692,6 +1696,9 @@ Sila hubungi [[Special:ListUsers/sysop|pentadbir sistem]].',
 'backend-fail-contenttype'   => 'Jenis kandungan fail untuk disimpan di "$1" tidak dapat ditentukan.',
 'backend-fail-batchsize'     => 'Backend storan diberi $1 operasi fail dalam satu kelompok; hadnya ialah $2 operasi.',
 
+'filejournal-fail-dbconnect' => 'Tidak dapat bersambung dengan pangkalan data jurnal untuk backend storan "$1".',
+'filejournal-fail-dbquery'   => 'Pangkalan data jurnal untuk backend storan "$1" tidak dapat dikemaskinikan.',
+
 # Lock manager
 'lockmanager-notlocked'        => '"$1" tidak dapat dibuka; ia tidak terkunci.',
 'lockmanager-fail-closelock'   => 'Fail kunci untuk "$1" tidak dapat ditutup.',
@@ -2017,6 +2024,11 @@ serta mungkin mempunyai maklumat lanjut mengenai buku yang anda cari:',
 'allpagesbadtitle'  => 'Tajuk laman yang dinyatakan tidak sah atau mempunyai awalam antara bahasa atau antara wiki. Ia mungkin mengandungi aksara yang tidak boleh digunakan dalam tajuk laman.',
 'allpages-bad-ns'   => '{{SITENAME}} tidak mempunyai ruang nama "$1".',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Anda sedang melihat versi dalam cache laman ini yang mungkin selama $1.',
+'cachedspecial-viewing-cached-ts'  => 'Anda sedang melihat versi dalam cache laman ini yang mungkin tidak lengkap sepenuhnya.',
+'cachedspecial-refresh-now'        => 'Lihat yang terkini.',
+
 # Special:Categories
 'categories'                    => 'Kategori',
 'categoriespagetext'            => '{{PLURAL:$1|Kategori|Kategori-kategori}} berikut mengandungi laman-laman atau media.
@@ -2294,10 +2306,10 @@ Ini adalah tetapan semasa bagi laman '''$1''':",
 'protect-otherreason'         => 'Sebab lain/tambahan:',
 'protect-otherreason-op'      => 'Sebab lain',
 'protect-dropdown'            => '*Sebab lazim
-** Vandalisme
-** Spam
-** Perang sunting
-** Laman popular',
+** Laku musnah berlebihan
+** Spam berlebihan
+** Perang sunting yang tidak membina
+** Laman yang terlalu ramai pelawat',
 'protect-edit-reasonlist'     => 'Ubah sebab-sebab perlindungan',
 'protect-expiry-options'      => '1 jam:1 hour,1 hari:1 day,1 minggu:1 week,2 minggu:2 weeks,1 bulan:1 month,3 bulan:3 months,6 bulan:6 months,1 tahun:1 year,selama-lamanya:infinite',
 'restriction-type'            => 'Keizinan:',
@@ -2338,9 +2350,9 @@ sebelum penghapusan. Teks sebenar bagi semua semakan yang dihapuskan hanya boleh
 atau semakan tersebut telah dipulihkan atau dibuang daripada arkib.',
 'undelete-nodiff'              => 'Tiada semakan sebelumnya.',
 'undeletebtn'                  => 'Pulihkan',
-'undeletelink'                 => 'lihat/pulih',
+'undeletelink'                 => 'lihat/pulihkan',
 'undeleteviewlink'             => 'papar',
-'undeletereset'                => 'set semula',
+'undeletereset'                => 'Set semula',
 'undeleteinvert'               => 'Kecualikan pilihan',
 'undeletecomment'              => 'Sebab:',
 'undeletedrevisions'           => '$1 semakan dipulihkan',
@@ -2377,12 +2389,12 @@ $1',
 'blanknamespace'                => '(Utama)',
 
 # Contributions
-'contributions'       => 'Sumbangan',
+'contributions'       => 'Sumbangan pengguna',
 'contributions-title' => 'Sumbangan oleh $1',
 'mycontris'           => 'Sumbangan saya',
 'contribsub2'         => 'Oleh $1 ($2)',
 'nocontribs'          => 'Tiada sebarang perubahan yang sepadan dengan kriteria-kriteria ini.',
-'uctop'               => ' (puncak)',
+'uctop'               => '(puncak)',
 'month'               => 'Sebelum bulan:',
 'year'                => 'Sebelum tahun:',
 
@@ -2419,7 +2431,7 @@ $1',
 'whatlinkshere-hidetrans'  => '$1 penyertaan',
 'whatlinkshere-hidelinks'  => '$1 pautan',
 'whatlinkshere-hideimages' => '$1 pautan imej',
-'whatlinkshere-filters'    => 'Tapis',
+'whatlinkshere-filters'    => 'Penapis',
 
 # Block/unblock
 'autoblockid'                     => 'Sekat #$1 secara automatik',
@@ -2473,7 +2485,7 @@ dirosakkan).',
 'ipb-blocklist-contribs'          => 'Sumbangan oleh $1',
 'unblockip'                       => 'Nyahsekat pengguna',
 'unblockiptext'                   => 'Gunakan borang di bawah untuk membuang sekatan bagialamat IP atau nama pengguna yang telah disekat.',
-'ipusubmit'                       => 'Tarik sekatan ini',
+'ipusubmit'                       => 'Tarik balik sekatan ini',
 'unblocked'                       => '[[User:$1|$1]] telah dinyahsekat',
 'unblocked-range'                 => '$1 telah dinyahsekat',
 'unblocked-id'                    => 'Sekatan $1 telah dibuang',
@@ -2494,7 +2506,7 @@ dirosakkan).',
 'ipblocklist-localblock'          => 'Sekatan tempatan',
 'ipblocklist-otherblocks'         => '{{PLURAL:$1|Sekatan|Sekatan-sekatan}} lain',
 'infiniteblock'                   => 'selama-lamanya',
-'expiringblock'                   => 'sehingga $1 pada $2',
+'expiringblock'                   => 'sehingga $1, $2',
 'anononlyblock'                   => 'pengguna tanpa nama sahaja',
 'noautoblockblock'                => 'sekatan automatik dipadamkan',
 'createaccountblock'              => 'pembukaan akaun baru disekat',
@@ -2524,7 +2536,7 @@ Sila lihat juga [[Special:BlockList|senarai sekatan IP]] yang sedang berkuatkuas
 'block-log-flags-noemail'         => 'e-mail disekat',
 'block-log-flags-nousertalk'      => 'tidak boleh menyunting laman perbincangan sendiri',
 'block-log-flags-angry-autoblock' => 'sekatan automatik tambahan diaktifkan',
-'block-log-flags-hiddenname'      => 'nama pengguna tersembunyi',
+'block-log-flags-hiddenname'      => 'nama pengguna tersorok',
 'range_block_disabled'            => 'Kebolehan penyelia untuk membuat sekatan julat dimatikan.',
 'ipb_expiry_invalid'              => 'Waktu tamat tidak sah.',
 'ipb_expiry_temp'                 => 'Sekatan nama pengguna terselindung sepatutnya kekal.',
@@ -2538,9 +2550,10 @@ Sila lihat juga [[Special:BlockList|senarai sekatan IP]] yang sedang berkuatkuas
 'ip_range_invalid'                => 'Julat IP tidak sah.',
 'ip_range_toolarge'               => 'Sekatan julat yang lebih luas daripada /$1 adalah tidak dibenarkan.',
 'blockme'                         => 'Sekat saya',
-'proxyblocker'                    => 'Sekatan proksi',
+'proxyblocker'                    => 'Penyekat proksi',
 'proxyblocker-disabled'           => 'Fungsi ini dimatikan.',
-'proxyblockreason'                => 'Alamat IP anda telah disekat kerana ia merupakan proksi terbuka. Sila hubungi penyedia perkhidmatan Internet anda atau pihak sokongan teknikal dan beritahu mereka mengenai masalah berat ini.',
+'proxyblockreason'                => 'Alamat IP anda telah disekat kerana ia merupakan proksi terbuka.
+Sila hubungi penyedia perkhidmatan Internet anda atau pihak sokongan teknikal dan beritahu mereka mengenai masalah keselamatan yang berat ini.',
 'proxyblocksuccess'               => 'Berjaya.',
 'sorbsreason'                     => 'Alamat IP anda telah disenaraikan sebagai proksi terbuka dalam DNSBL yang digunakan oleh {{SITENAME}}.',
 'sorbs_create_account_reason'     => 'Alamat IP anda telah disenaraikan sebagai proksi terbuka dalam DNSBL yang digunakan oleh {{SITENAME}}. Oleh itu, anda tidak dibenarkan membuka akaun baru.',
@@ -2566,9 +2579,9 @@ sahkan bahawa anda betul-betul mahu melakukan tindakan ini.',
 'unlockconfirm'       => 'Ya, saya betul-betul mahu membuka kunci pangkalan data.',
 'lockbtn'             => 'Kunci pangkalan data',
 'unlockbtn'           => 'Buka kunci pangkalan data',
-'locknoconfirm'       => 'Anda tidak menyemak kotak pengesahan.',
-'lockdbsuccesssub'    => 'Pangkalan data dikunci.',
-'unlockdbsuccesssub'  => 'Kunci pangkalan data dibuka.',
+'locknoconfirm'       => 'Anda tidak meraitkan petak pengesahan.',
+'lockdbsuccesssub'    => 'Pangkalan data berjaya dikunci',
+'unlockdbsuccesssub'  => 'Kunci pangkalan data dibuka',
 'lockdbsuccesstext'   => 'Pangkalan data telah dikunci.
 <br />Pastikan anda [[Special:UnlockDB|membukanya semula]] selepas penyelenggaraan selesai.',
 'unlockdbsuccesstext' => 'Kunci pangkalan data {{SITENAME}} telah dibuka.',
@@ -2577,8 +2590,8 @@ sahkan bahawa anda betul-betul mahu melakukan tindakan ini.',
 'lockedbyandtime'     => '(oleh $1 di $2 pada $3)',
 
 # Move page
-'move-page'                    => 'Pindah $1',
-'move-page-legend'             => 'Pindah laman',
+'move-page'                    => 'Pindahkan $1',
+'move-page-legend'             => 'Pindahkan laman',
 'movepagetext'                 => "Gunakan borang di bawah untuk menukar nama laman dan memindahkan semua maklumat sejarahnya ke nama baru. Tajuk yang lama akan dijadikan lencongan ke tajuk yang baru. Anda juga boleh mengemaskinikan semua lencongan yang menuju ke tajuk asal supaya menuju ke tajuk baru. Sebaliknya, anda boleh menyemak sekiranya terdapat [[Special:DoubleRedirects|lencongan berganda]] atau [[Special:BrokenRedirects|lencongan rosak]]. Anda bertanggungjawab memastikan semua pautan bersambung ke laman yang sepatutnya.
 
 Sila ambil perhatian bahawa laman tersebut '''tidak''' akan dipindahkan sekiranya laman dengan tajuk yang baru tadi telah wujud, melainkan apabila
@@ -2602,7 +2615,7 @@ sila pastikan anda faham akibat yang mungkin timbul sebelum meneruskannya.",
 * Anda membuang tanda kotak di bawah.
 
 Dalam kes tersebut, anda terpaksa melencongkan atau menggabungkan laman secara manual, jika perlu.",
-'movearticle'                  => 'Pindah laman:',
+'movearticle'                  => 'Pindahkan laman:',
 'moveuserpage-warning'         => "'''Amaran:''' Anda sudah hendak memindahkan suatu laman pengguna. Sila ambil perhatian bahawa hanya laman tersebut akan dipindahkan dan nama pengguna yang berkenaan ''tidak'' berubah.",
 'movenologin'                  => 'Belum log masuk.',
 'movenologintext'              => 'Anda mesti [[Special:UserLogin|log masuk]] terlebih dahulu untuk memindahkan laman.',
@@ -2610,12 +2623,12 @@ Dalam kes tersebut, anda terpaksa melencongkan atau menggabungkan laman secara m
 'movenotallowedfile'           => 'Anda tidak mempunyai keizinan untuk memindahkan fail.',
 'cant-move-user-page'          => 'Anda tidak mempunyai keizinan untuk memindahkan laman pengguna (tidak termasuk sublaman-sublamannya).',
 'cant-move-to-user-page'       => 'Anda tidak mempunyai keizinan untuk memindahkan sesebuah laman ke mana-mana laman pengguna (kecuali sebagai sublamannya sahaja).',
-'newtitle'                     => 'Kepada tajuk baru:',
+'newtitle'                     => 'Ke tajuk baru:',
 'move-watch'                   => 'Pantau laman ini',
-'movepagebtn'                  => 'Pindah laman',
+'movepagebtn'                  => 'Pindahkan laman',
 'pagemovedsub'                 => 'Pemindahan berjaya',
 'movepage-moved'               => '\'\'\'"$1" telah dipindahkan ke "$2"\'\'\'',
-'movepage-moved-redirect'      => 'Sebuah lencongan telah dicipta.',
+'movepage-moved-redirect'      => 'Satu lencongan telah diwujudkan.',
 'movepage-moved-noredirect'    => 'Penciptaan lencongan telah dihalang.',
 'articleexists'                => 'Laman dengan nama tersebut telah pun wujud,
 atau nama yang anda pilih tidak sah.
@@ -2634,7 +2647,7 @@ Sila pilih nama lain.',
 'movelogpagetext'              => 'Yang berikut ialah senarai pemindahan laman.',
 'movesubpage'                  => '{{PLURAL:$1|Sublaman|Sublaman}}',
 'movesubpagetext'              => 'Laman ini mempunyai $1 sublaman berikut.',
-'movenosubpage'                => 'Laman ini tidak mempunyai sublaman.',
+'movenosubpage'                => 'Laman ini tiada sublaman.',
 'movereason'                   => 'Sebab:',
 'revertmove'                   => 'balik',
 'delete_and_move'              => 'Hapus dan pindah',
@@ -2649,10 +2662,10 @@ Laman destinasi "[[:$1]]" telah pun wujud. Adakah anda mahu menghapuskannya supa
 'immobile-target-namespace-iw' => 'Pautan interwiki tidak boleh dijadikan sasaran untuk pemindahan laman.',
 'immobile-source-page'         => 'Anda tidak boleh memindahkan laman ini.',
 'immobile-target-page'         => 'Anda tidak boleh memindahkan laman ke tajuk itu.',
-'imagenocrossnamespace'        => 'Tidak boleh memindah fail ke ruang nama lain',
+'imagenocrossnamespace'        => 'Anda tidak boleh memindahkan fail ke ruang nama bukan fail',
 'nonfile-cannot-move-to-file'  => 'Laman bukan fail tidak boleh dipindahkan ke ruang nama fail',
 'imagetypemismatch'            => 'Sambungan baru fail tersebut tidak sepadan dengan jenisnya',
-'imageinvalidfilename'         => 'Nama fail imej sasaran tidak sah',
+'imageinvalidfilename'         => 'Nama fail sasaran tidak sah',
 'fix-double-redirects'         => 'Kemas kinikan semua lencongan yang menuju ke tajuk asal',
 'move-leave-redirect'          => 'Lencongkan ke tajuk baru',
 'protectedpagemovewarning'     => "'''Amaran:''' Laman ini telah dikunci supaya hanya mereka yang mempunyai keistimewaan penyelia boleh mengalihkannya.
@@ -2660,7 +2673,7 @@ Masukan log terakhir ditunjukkan di bawah untuk rujukan:",
 'semiprotectedpagemovewarning' => "'''Nota:''' Laman ini telah dikunci agar hanya pengguna berdaftar sahaja boleh memindahkannya.
 Masukan log terakhir ditunjukkan di bawah untuk rujukan:",
 'move-over-sharedrepo'         => '== Fail wujud ==
-[[:$1]] telah wujud di gedung kongsi. Fail yang menggunakan tajuk ini akan mengatasi fail di gedung kongsi.',
+[[:$1]] telah wujud di gedung kongsi. Fail baru yang menggunakan tajuk ini akan mengatasi fail di gedung kongsi ini.',
 'file-exists-sharedrepo'       => 'Nama fail yang dipilih telah pun digunakan dalam gedung kongsi. Sila pilih nama lain.',
 
 # Export
@@ -2677,9 +2690,9 @@ Dalam pilihan kedua tadi, anda juga boleh menggunakan pautan, umpamanya [[{{#Spe
 '''Catatan:''' Ciri eksport sejarah penuh laman melalui borang ini telah dimatikan atas sebab-sebab prestasi.",
 'exportlistauthors' => 'Sertakan senarai penuh penyumbang untuk setiap laman',
 'export-submit'     => 'Eksport',
-'export-addcattext' => 'Tambah laman daripada kategori:',
+'export-addcattext' => 'Tambahkan laman dari kategori:',
 'export-addcat'     => 'Tambahkan',
-'export-addnstext'  => 'Tambah laman dari ruang nama:',
+'export-addnstext'  => 'Tambahkan laman dari ruang nama:',
 'export-addns'      => 'Tambahkan',
 'export-download'   => 'Simpan sebagai fail',
 'export-templates'  => 'Sertakan templat',
@@ -2689,7 +2702,7 @@ Dalam pilihan kedua tadi, anda juga boleh menggunakan pautan, umpamanya [[{{#Spe
 'allmessages'                   => 'Pesanan sistem',
 'allmessagesname'               => 'Nama',
 'allmessagesdefault'            => 'Teks mesej asal',
-'allmessagescurrent'            => 'Teks semasa',
+'allmessagescurrent'            => 'Teks pesanan semasa',
 'allmessagestext'               => 'Ini ialah senarai pesanan sistem yang terdapat dalam ruang nama MediaWiki.
 Sila lawat [//www.mediawiki.org/wiki/Localisation Penyetempatan MediaWiki] dan [//translatewiki.net translatewiki.net] sekiranya anda mahu menyumbang dalam menyetempatkan dan menterjemah perisian MediaWiki.',
 'allmessagesnotsupportedDB'     => "'''{{ns:special}}:Allmessages''' tidak boleh digunakan kerana '''\$wgUseDatabaseMessages''' dipadamkan.",
@@ -2805,14 +2818,14 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 'tooltip-search'                      => 'Cari dalam {{SITENAME}}',
 'tooltip-search-go'                   => 'Pergi ke laman dengan nama tepat ini, jika ada',
 'tooltip-search-fulltext'             => 'Cari laman dengan teks ini',
-'tooltip-p-logo'                      => 'Laman Utama',
+'tooltip-p-logo'                      => 'Kunjungi laman utama',
 'tooltip-n-mainpage'                  => 'Kunjungi Laman Utama',
 'tooltip-n-mainpage-description'      => 'Kunjungi laman utama',
 'tooltip-n-portal'                    => 'Maklumat mengenai projek ini',
 'tooltip-n-currentevents'             => 'Cari maklumat latar belakang mengenai peristiwa semasa',
 'tooltip-n-recentchanges'             => 'Senarai perubahan terkini dalam wiki ini.',
 'tooltip-n-randompage'                => 'Buka laman rawak',
-'tooltip-n-help'                      => 'Tempat mencari jawapan.',
+'tooltip-n-help'                      => 'Tempat mencari jawapan',
 'tooltip-t-whatlinkshere'             => 'Senarai laman wiki yang mengandungi pautan ke laman ini',
 'tooltip-t-recentchangeslinked'       => 'Perubahan terkini bagi semua laman yang dipaut dari laman ini',
 'tooltip-feed-rss'                    => 'Suapan RSS bagi laman ini',
@@ -2964,7 +2977,7 @@ Dengan menjalankannya, komputer anda mungkin akan terjejas.",
 'newimages'             => 'Galeri fail baru',
 'imagelisttext'         => "Yang berikut ialah senarai bagi '''$1''' fail yang disusun secara $2.",
 'newimages-summary'     => 'Laman khas ini memaparkan senarai fail muat naik terakhir.',
-'newimages-legend'      => 'Nama fail',
+'newimages-legend'      => 'Penapis',
 'newimages-label'       => 'Nama fail (atau sebahagian daripadanya):',
 'showhidebots'          => '($1 bot)',
 'noimages'              => 'Tiada imej.',
@@ -3188,7 +3201,7 @@ Ruangan-ruangan yang lain pula akan disembunyikan pada asali.
 'exif-originalimagewidth'          => 'Lebar imej sebelum dipangkas',
 
 # EXIF attributes
-'exif-compression-1' => 'Tidak dimampat',
+'exif-compression-1' => 'Tak termampat',
 'exif-compression-2' => 'Pengekodan panjang jalan Huffman Terubahsuai 1-Dimensi Kumpulan 3 CCITT',
 'exif-compression-3' => 'Pengekodan faks Kumpulan 3 CCITT',
 'exif-compression-4' => 'Pengekodan faks Kumpulan 4 CCITT',
@@ -3789,4 +3802,14 @@ Ataupun, anda boleh menggunakan borang yang mudah di bawah. Ulasan anda akan dic
 'api-error-uploaddisabled'                => 'Ciri muat naik dimatikan di wiki ini.',
 'api-error-verification-error'            => 'Fail ini mungkin tercemar atau tersalah sambungannya.',
 
+# Durations
+'duration-seconds'   => '$1 saat',
+'duration-minutes'   => '$1 minit',
+'duration-hours'     => '$1 jam',
+'duration-days'      => '$1 hari',
+'duration-weeks'     => '$1 minggu',
+'duration-years'     => '$1 tahun',
+'duration-decades'   => '$1 dekad',
+'duration-centuries' => '$1 abad',
+
 );
index c32a67a..18315fc 100644 (file)
@@ -377,8 +377,8 @@ Nā m̄-sī hit chióng chêng-hêng, lí khó-lêng tú tio̍h nńg-thé ê chh
 'cannotdelete-title'   => '無法度共"$1"這頁刣掉',
 'badtitle'             => 'M̄-chiâⁿ piau-tê',
 'badtitletext'         => 'Iau-kiû ê piau-tê sī bô-hāu ê, khang ê, a̍h-sī liân-kiat chhò-gō· ê inter-language/inter-wiki piau-tê.',
-'perfcached'           => 'Ē-kha ê chu-liāu tùi lâi--ê, só·-í bī-pit oân-choân hoán-èng siōng sin ê chōng-hóng. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts'         => 'Ē-kha ê chu-liāu tùi lâi--ê, tī $1 keng-sin--koè. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached'           => 'Ē-kha ê chu-liāu ùi khoài-chhú(cache) lâi--ê, só·-í khó-lêng m̄-sī siōng sin ê. Khoài-chhú lāi-té siōng chē khǹg {{PLURAL:$1| chi̍t tiâu|$1 tiâu}}.',
+'perfcachedts'         => 'Ē-kha ê chu-liāu ùi khoài-chhú(cache) lâi--ê, tī $1 keng-sin--koè. Khoài-chhú lāi-té siōng chē khǹg {{PLURAL:$4| chi̍t tiâu |$4 tiâu}}.',
 'querypage-no-updates' => 'Chit-má bē-sái kái chit ia̍h.
 Chia ê chu-liāu bē-tàng sui tiông-sin chéng-lí.',
 'wrong_wfQuery_params' => 'Chhò-ngō͘ ê chham-sò͘ chhoân hō͘ wfQuery()<br />
@@ -437,7 +437,7 @@ Chhiaⁿ chù-ì: ū-kóa ia̍h ū khó-lêng khoàⁿ-tio̍h bē-su lí iû-go
 'createaccount'              => 'Khui sin kháu-chō',
 'gotaccount'                 => "Í-keng ū kháu-chō? '''$1'''.",
 'gotaccountlink'             => 'Teng-ji̍p',
-'userlogin-resetlink'        => 'è¢\82è¨\98å\93©你登入的資料?',
+'userlogin-resetlink'        => 'è¢\82è¨\98å¾\97你登入的資料?',
 'createaccountmail'          => 'Thàu koè tiān-chú-phoe',
 'createaccountreason'        => 'Lí-iû:',
 'badretype'                  => 'Lí su-ji̍p ê 2-cho· bi̍t-bé bô tùi.',
@@ -750,8 +750,8 @@ Kā só tiâu ê koán-lí-goân ū lâu oē: $1",
 
 Lí tio̍h chim-chiok soà-chiap pian-chi̍p chit ia̍h ê pit-iàu-sèng. 
 Chia ū chit ia̍h ê san-tû kì-lo̍k hō͘ lí chham-khó:",
-'moveddeleted-notice'              => '這頁已經hông刣掉,
-刣掉佮徙走的記錄佇下跤通參考。',
+'moveddeleted-notice'              => '這頁已經予人刣掉,
+下跤有刣掉佮徙走的記錄通參考。',
 'log-fulllog'                      => '看全部的記錄',
 'edit-hook-aborted'                => '取消編輯,
 無講啥物原因',
@@ -1288,7 +1288,7 @@ Tī pat-lâng liân-lo̍k lí ê sî-chūn bē kā e-mail tsū-tsí siá chhut--
 'action-writeapi'             => '使用API編寫',
 'action-delete'               => '刣掉這頁',
 'action-deleterevision'       => '刣掉這个修訂本',
-'action-deletedhistory'       => '看這个頁hông刣掉的歷史',
+'action-deletedhistory'       => '看這頁予人刣掉的歷史',
 'action-browsearchive'        => '揣刣掉的頁',
 'action-undelete'             => '共刣掉的頁救倒轉來',
 'action-suppressrevision'     => '看而且取消這个藏起來的修訂本',
@@ -1347,12 +1347,12 @@ Tī pat-lâng liân-lo̍k lí ê sî-chūn bē kā e-mail tsū-tsí siá chhut--
 'recentchangeslinked'          => 'Siong-koan ê kái-piàn',
 'recentchangeslinked-feed'     => 'Siong-koan ê kái-piàn',
 'recentchangeslinked-toolbox'  => 'Siong-koan ê kái-piàn',
-'recentchangeslinked-title'    => '連到「$1」的頁閣有改過的',
+'recentchangeslinked-title'    => '佮「$1」有關係的修改',
 'recentchangeslinked-noresult' => 'Lí chí-tēng ê tiâu-kiaⁿ lāi-té chhōe bô jīn-hô kái-piàn.',
-'recentchangeslinked-summary'  => "é\80\99æ\98¯ä¸\80个ç\89¹æ®\8aé \81æ\8e\92å\88\97å\87ºä¸\80个é \81ä¼\8aé\80£çµ\90ç\9a\84é \81ä½\87æ\9c\80è¿\91æ\9c\89æ\94¹é\81\8e(抑是指定分類的成員)。
-佇[[Special:Watchlist|你的監視單]]內底的頁會'''粗體'''顯示。",
+'recentchangeslinked-summary'  => "é\80\99æ\98¯ä½®æ\8c\87å®\9aç\9a\84é \81é\9d¢æ\9c\89é\80£çµ\90ã\80\81é\96£æ\9c\80è¿\91æ\9c\89æ\94¹é\81\8eç\9a\84å\88¥é \81æ¸\85å\96®(抑是指定分類的成員)。
+佇[[Special:Watchlist|你的監視單]]內底的頁會'''粗體'''顯示。",
 'recentchangeslinked-page'     => 'Ia̍h ê miâ:',
-'recentchangeslinked-to'       => '顯示連到我拍入的頁名閣有改過的',
+'recentchangeslinked-to'       => '顯示另外拍入頁伊的相關修改',
 
 # Upload
 'upload'                      => 'Kā tóng-àn chiūⁿ-bāng',
@@ -1366,7 +1366,7 @@ Tī pat-lâng liân-lo̍k lí ê sî-chūn bē kā e-mail tsū-tsí siá chhut--
 'uploaderror'                 => 'Upload chhò-gō·',
 'upload-recreate-warning'     => "'''注意:一个仝名的檔案捌hông刣掉抑是徙去別位。'''
 
-這頁的刣掉、徙振動記錄佇下跤通參考:",
+這頁有刣掉佮徙走的記錄通參考:",
 'uploadtext'                  => "用下跤的表來共檔案上載。
 若欲看抑是揣往過上載的檔案,會使進入[[Special:FileList|檔案上載清單]],(重)上載嘛會記錄佇[[Special:Log/upload|上傳記錄]],若刣掉就會記錄佇[[Special:Log/delete|刪除記錄]]。
 
@@ -1410,7 +1410,7 @@ Tī pat-lâng liân-lo̍k lí ê sî-chūn bē kā e-mail tsū-tsí siá chhut--
 'hookaborted'                 => '你欲做的編輯因為擴展鈎(extension hook)去跳開。',
 'illegal-filename'            => '無合用的檔案名稱',
 'overwrite'                   => '袂使覆寫已經佇咧的檔案',
-'unknown-error'               => '發生一个不知的錯誤',
+'unknown-error'               => '有一个無啥清楚的錯誤。',
 'tmp-create-error'            => '無法度建立臨時檔案',
 'tmp-write-error'             => '寫入臨時檔案的時陣發生錯誤',
 'large-file'                  => '建議檔案的大小袂當超過 $1,本檔案大小是 $2。',
@@ -1510,6 +1510,7 @@ $1',
 'backend-fail-closetemp'     => '無法度徙掉臨時檔案',
 'backend-fail-read'          => '無法度讀$1這个檔案',
 'backend-fail-create'        => '無法度建立$1這个檔案。',
+'backend-fail-maxsize'       => '無法度建立$1檔案,因為伊超過{{PLURAL:$2|$2位元|$2位元}}。',
 'backend-fail-readonly'      => '囥「$1」的位,這馬只會當讀,因為「$2」。',
 'backend-fail-synced'        => '"$1"這个檔案佇內部的囥位無一致。',
 'backend-fail-connect'       => '無法度連接到囥"$1"的位。',
@@ -1518,6 +1519,9 @@ $1',
 'backend-fail-batchsize'     => '囥位一批$1个檔案
 {{PLURAL:$1|遍動作|遍動作}},上濟$2遍{{PLURAL:$2|動作|動作}}。',
 
+'filejournal-fail-dbconnect' => '無法度連接到佇囥位"$1"的資料庫。',
+'filejournal-fail-dbquery'   => '無法度更新佇囥位"$1"的資料庫。',
+
 # Lock manager
 'lockmanager-notlocked'        => '無法度開鎖"$1",伊無予人封鎖牢咧。',
 'lockmanager-fail-closelock'   => '無法度共卡牢咧的檔案 "$1"收起來。',
@@ -1525,11 +1529,34 @@ $1',
 'lockmanager-fail-acquirelock' => '無法度套牢檔案 "$1"。',
 'lockmanager-fail-openlock'    => '無法度開"$1"這个hông套牢的檔案。',
 'lockmanager-fail-releaselock' => '無法度解套 "$1"。',
-'lockmanager-fail-db-bucket'   => '佇資料桶,提無夠愛套牢的資料。',
+'lockmanager-fail-db-bucket'   => '佇$1資料桶,提無夠愛套牢的資料。',
+'lockmanager-fail-db-release'  => '無法度共佇伺服器$1的套牢釋放掉。',
 'lockmanager-fail-svr-release' => '無法度共佇伺服器$1的套牢釋放掉。',
 
+# ZipDirectoryReader
+'zip-file-open-error' => '佇拍開檔案的ZIP檢查時陣,拄著一个問題。',
+'zip-wrong-format'    => '指定的檔案毋是一个ZIP檔案。',
+'zip-bad'             => '檔案已經歹去抑是無法度讀的ZIP檔案,
+伊無法正確來檢查,看有妥當無。',
+'zip-unsupported'     => '這个是一个 ZIP 檔案,伊用著 MediaWiki 無支持的ZIP功能,
+伊袂當正確檢查看有妥當無。',
+
+# Special:UploadStash
+'uploadstash'          => '上載囥位',
+'uploadstash-summary'  => '這个頁面提供的檔案已經上載(抑是當咧上載),毋過猶未佇wiki發布,遮的檔案除了上載的用者以外,別人看袂著。',
+'uploadstash-clear'    => '清掉囥咧的檔案',
+'uploadstash-nofiles'  => '你無囥咧的檔案。',
+'uploadstash-badtoken' => '彼个動作做無成功,可能是你的編輯資料已經過期,請閣試一擺。',
+'uploadstash-errclear' => '欲清掉檔案無成功。',
+'uploadstash-refresh'  => '更新檔案清單。',
+'invalid-chunk-offset' => '無效的區位偏移量',
+
 # img_auth script messages
 'img-auth-accessdenied'     => '拒絕讀寫',
+'img-auth-nopathinfo'       => '欠PATH_INFO,
+你的伺服器無設講免這个資料,
+伊它可能是因為是CGI的,而且不支源img_auth,
+會使參考[https://www.mediawiki.org/wiki/Manual:Image_Authorization 圖片認證。]',
 'img-auth-notindir'         => '你欲用的路徑無佇事先設定的上載目錄當中。',
 'img-auth-badtitle'         => '無法度對"$1"產生一个有效的標題',
 'img-auth-nologinnWL'       => '你猶未登入,"$1"無佇白名單(whitelist)面頂。',
@@ -1607,6 +1634,7 @@ $1',
 有一个[[Special:WhatLinksHere/$2|全部的清單]]。',
 'nolinkstoimage'            => 'Bô poàⁿ ia̍h liân kàu chit tiuⁿ iáⁿ-siōng.',
 'morelinkstoimage'          => '看連接到這个檔案的[[Special:WhatLinksHere/$1|其他連結]]',
+'linkstoimage-redirect'     => '$1 (檔案轉向) $2',
 'duplicatesoffile'          => '下跤{{PLURAL:$1|个|个}}檔案佮這个仝款([[Special:FileDuplicateSearch/$2|詳細]]):',
 'sharedupload'              => '這个檔案是對$1遐來的,伊可能用佇別个事工。',
 'sharedupload-desc-there'   => '這个檔案對$1遐來的,伊可能用佇別个事工,
@@ -1630,26 +1658,31 @@ $1',
 'filerevert-badversion'     => '這个檔案所提供的時間截記,無進前的本地版本。',
 
 # File deletion
-'filedelete'                  => '刣掉$1',
-'filedelete-legend'           => '刣掉檔案',
-'filedelete-intro'            => "你當咧刣掉檔案'''[[Media:$1|$1]]''',佮伊的歷史。",
-'filedelete-intro-old'        => "你當咧刣掉'''[[Media:$1|$1]]'''佇[$4 $2 $3]的版本",
-'filedelete-comment'          => '理由:',
-'filedelete-submit'           => '刣掉',
-'filedelete-success'          => "'''$1'''已經刣掉",
-'filedelete-success-old'      => "'''[[Media:$1|$1]]'''佇$2 $3 的版本已經刣掉",
-'filedelete-nofile'           => "無'''$1'''這个",
-'filedelete-nofile-old'       => "揣無'''$1'''指定的保存版本",
-'filedelete-otherreason'      => '其他/另外的理由:',
-'filedelete-reason-otherlist' => '其他理由',
-'filedelete-reason-dropdown'  => '*一般刣掉的理由
+'filedelete'                   => '刣掉$1',
+'filedelete-legend'            => '刣掉檔案',
+'filedelete-intro'             => "你當咧刣掉檔案'''[[Media:$1|$1]]''',佮伊的歷史。",
+'filedelete-intro-old'         => "你當咧刣掉'''[[Media:$1|$1]]'''佇[$4 $2 $3]的版本",
+'filedelete-comment'           => '理由:',
+'filedelete-submit'            => '刣掉',
+'filedelete-success'           => "'''$1'''已經刣掉",
+'filedelete-success-old'       => "'''[[Media:$1|$1]]'''佇$2 $3 的版本已經刣掉",
+'filedelete-nofile'            => "無'''$1'''這个",
+'filedelete-nofile-old'        => "揣無'''$1'''指定的保存版本",
+'filedelete-otherreason'       => '其他/另外的理由:',
+'filedelete-reason-otherlist'  => '其他理由',
+'filedelete-reason-dropdown'   => '*一般刣掉的理由
 ** 違反著作權
 ** 相仝',
-'filedelete-edit-reasonlist'  => '編輯刣掉的理由',
+'filedelete-edit-reasonlist'   => '編輯刣掉的理由',
+'filedelete-maintenance'       => '佇維護的時陣,暫時袂當刣掉檔案佮救倒轉來檔案。',
+'filedelete-maintenance-title' => '袂當刣掉檔案',
 
 # MIME search
-'mimesearch' => 'MIME chhiau-chhoē',
-'download'   => '下載',
+'mimesearch'         => 'MIME chhiau-chhoē',
+'mimesearch-summary' => '這个頁面有用MIME類型的檔案過濾器,
+輸入︰內容類型/次類型,親像 <tt>image/jpeg</tt>。',
+'mimetype'           => 'MIME 類型:',
+'download'           => '下載',
 
 # Unwatched pages
 'unwatchedpages' => 'Bô lâng kàm-sī ê ia̍h',
@@ -1658,8 +1691,10 @@ $1',
 'listredirects' => 'Lia̍t-chhut choán-ia̍h',
 
 # Unused templates
-'unusedtemplates'    => 'Bô iōng ê pang-bô·',
-'unusedtemplateswlh' => '其他的連結',
+'unusedtemplates'     => 'Bô iōng ê pang-bô·',
+'unusedtemplatestext' => '這个頁面排列出佇{{ns:template}}名空間內底,閣無予別頁面用著的頁。
+請會記得佇刣掉遮的枋模進前,看有別的連接鏈連著。',
+'unusedtemplateswlh'  => '其他的連結',
 
 # Random page
 'randompage'         => 'Sûi-chāi kéng ia̍h',
@@ -1667,28 +1702,46 @@ $1',
 {{PLURAL:$2|名空間|名空間}}:$1.',
 
 # Random redirect
-'randomredirect' => 'Sûi-chāi choán-ia̍h',
+'randomredirect'         => 'Sûi-chāi choán-ia̍h',
+'randomredirect-nopages' => '佇 "$1" 名空間內底無轉向的頁。',
 
 # Statistics
-'statistics'              => 'Thóng-kè',
-'statistics-header-pages' => '頁的統計',
-'statistics-header-edits' => '改的統計',
-'statistics-header-views' => '看的統計',
-'statistics-header-users' => 'Iōng-chiá thóng-kè sò·-ba̍k',
-'statistics-header-hooks' => '其他的統計',
-'statistics-articles'     => '內容頁',
-'statistics-pages-desc'   => '佇Wiki所有的頁,包括討論頁、轉頁等等。',
-'statistics-files'        => '上載檔案',
-'statistics-users-active' => '猶咧出工的用者',
-'statistics-mostpopular'  => '上濟人看的頁',
-
-'disambiguations'     => 'Khu-pia̍t-ia̍h',
-'disambiguationspage' => 'Template:disambig
+'statistics'                   => 'Thóng-kè',
+'statistics-header-pages'      => '頁的統計',
+'statistics-header-edits'      => '改的統計',
+'statistics-header-views'      => '看的統計',
+'statistics-header-users'      => 'Iōng-chiá thóng-kè sò·-ba̍k',
+'statistics-header-hooks'      => '其他的統計',
+'statistics-articles'          => '內容頁',
+'statistics-pages'             => '文章',
+'statistics-pages-desc'        => '佇Wiki所有的頁,包括討論頁、轉頁等等。',
+'statistics-files'             => '上載檔案',
+'statistics-edits'             => '自設立{{SITENAME}}以後,對頁的編輯總數',
+'statistics-edits-average'     => '每頁的平均編輯數量',
+'statistics-views-total'       => '看的總量',
+'statistics-views-total-desc'  => '看空頁抑是特殊頁的數量無算在內。',
+'statistics-views-peredit'     => '佇編輯的時陣看的數量',
+'statistics-users'             => '已經註冊[[Special:ListUsers|用者]]',
+'statistics-users-active'      => '猶咧出工的用者',
+'statistics-users-active-desc' => '佇前{{PLURAL:$1|一工|$1工}}有操作過的用者。',
+'statistics-mostpopular'       => '上濟人看的頁',
+
+'disambiguations'      => 'Khu-pia̍t-ia̍h',
+'disambiguationspage'  => 'Template:disambig
 Template:KhPI
 Template:Khu-pia̍t-iah
 Template:Khu-pia̍t-ia̍h',
-
-'doubleredirects' => 'Siang-thâu choán-ia̍h',
+'disambiguations-text' => "下面的頁攏有連接到'''區別頁''',
+In應該連接到適當的頁面。<br />一个頁面若有用[[MediaWiki:Disambiguationspage]]內底的枋模,就會算做是區別頁。",
+
+'doubleredirects'                   => 'Siang-thâu choán-ia̍h',
+'doubleredirectstext'               => '這个頁排列出所有轉向到捌个轉向頁,
+每一列有轉向去第一个佮第二个轉向頁的連結,佮第二个轉向頁的目標,彼个目標一般著是應該的頁面, 第一个轉向連結應該指的所在。
+<del>拍叉的</del>是已經處理好的項目。',
+'double-redirect-fixed-move'        => '[[$1]]已經徙位,
+伊這馬轉去[[$2]]。',
+'double-redirect-fixed-maintenance' => '修改對[[$1]]到[[$2]]的兩擺轉向。',
+'double-redirect-fixer'             => '轉向的改向',
 
 'brokenredirects'        => 'Choán-ia̍h kò·-chiòng',
 'brokenredirectstext'    => 'Í-hā ê choán-ia̍h liân kàu bô chûn-chāi ê ia̍h:',
@@ -1697,6 +1750,7 @@ Template:Khu-pia̍t-ia̍h',
 
 'withoutinterwiki'         => 'Bô gí-giân liân-kiat ê ia̍h',
 'withoutinterwiki-summary' => 'Ē-kha ê ia̍h bô kî-thaⁿ gí-giân pán-pún ê liân-kiat:',
+'withoutinterwiki-legend'  => '前綴',
 'withoutinterwiki-submit'  => '顯示',
 
 'fewestrevisions' => 'Siōng bô siu-tēng ê bûn-chiuⁿ',
@@ -1704,10 +1758,15 @@ Template:Khu-pia̍t-ia̍h',
 # Miscellaneous special pages
 'nbytes'                  => '$1 {{PLURAL:$1|jī-goân|jī-goân}}',
 'ncategories'             => '$1 {{PLURAL:$1|ê lūi-pia̍t |ê lūi-pia̍t}}',
-'nlinks'                  => '$1 ê liân-kiat',
+'nlinks'                  => '$1 {{PLURAL:$1|ê|ê}} liân-kiat',
 'nmembers'                => '$1 {{PLURAL:$1|成員|成員}}',
-'nrevisions'              => '$1 ê siu-tēng-pún',
+'nrevisions'              => '$1 {{PLURAL:$1|ê|ê}} siu-tēng-pún',
+'nviews'                  => '看$1{{PLURAL:$1|擺|擺}}',
+'nimagelinks'             => '用佇$1 {{PLURAL:$1|篇文章|篇文章}}',
+'ntransclusions'          => '用佇$1 {{PLURAL:$1|篇文章|篇文章}}',
+'specialpage-empty'       => '這个報表空空。',
 'lonelypages'             => 'Ko·-ia̍h',
+'lonelypagestext'         => '下跤的頁面無予佇{{SITENAME}}的其它頁面連結抑是用著。',
 'uncategorizedpages'      => 'Bô lūi-pia̍t ê ia̍h',
 'uncategorizedcategories' => 'Bô lūi-pia̍t ê lūi-pia̍t',
 'uncategorizedimages'     => 'Bô lūi-pia̍t ê iáⁿ-siōng',
@@ -1717,7 +1776,10 @@ Template:Khu-pia̍t-ia̍h',
 'popularpages'            => 'Sî-kiâⁿ ê ia̍h',
 'wantedcategories'        => 'wantedcategories',
 'wantedpages'             => 'Beh ti̍h ê ia̍h',
+'wantedpages-badtitle'    => '佇清單內底的怪怪標題:$1',
 'wantedfiles'             => '欲挃的檔案',
+'wantedfiletext-cat'      => '下跤是無彼个檔案,毋過有頁面用著。有个佇外部檔案庫嘛可能寫佇清單,彼種失誤應該<del>排除</del>。另外,頁面包的檔案若無,嘛會寫佇[[:$1]]清單。',
+'wantedfiletext-nocat'    => '下跤的是有頁面用著,毋過無彼个檔案。有个佇外部檔案庫嘛可能寫出來,彼種失誤應該<del>排除</del>。',
 'wantedtemplates'         => '欲挃的枋模',
 'mostlinked'              => 'Siōng chia̍p liân-kiat ê ia̍h',
 'mostlinkedcategories'    => 'Siōng chia̍p liân-kiat ê lūi-pia̍t',
@@ -1726,14 +1788,23 @@ Template:Khu-pia̍t-ia̍h',
 'mostimages'              => 'Siōng chia̍p liân-kiat ê iáⁿ-siōng',
 'mostrevisions'           => 'Siōng chia̍p siu-kái ê ia̍h',
 'prefixindex'             => 'Só͘-ū chiàu sû-thâu sek-ín liáu ê  ia̍h',
+'prefixindex-namespace'   => '照頭排的所有頁面($1名空間)',
 'shortpages'              => 'Té-ia̍h',
 'longpages'               => '長頁',
 'deadendpages'            => 'Khu̍t-thâu-ia̍h',
 'deadendpagestext'        => 'Ē-kha ê ia̍h bô liân kàu wiki lāi-té ê kî-thaⁿ ia̍h.',
 'protectedpages'          => 'Siū pó-hō͘ ê ia̍h',
+'protectedpages-indef'    => '干焦無限期保護的頁',
+'protectedpages-cascade'  => '干焦連鎖保護的頁',
 'protectedpagestext'      => 'Ē-kha ê ia̍h siū pó-hō͘, bē-tit soá-ūi ia̍h pian-chi̍p',
+'protectedpagesempty'     => '照遐的參數保護的,這馬無半頁。',
+'protectedtitles'         => '保護牢著的標題',
+'protectedtitlestext'     => '下跤的標題袂當寫。',
+'protectedtitlesempty'    => '照遐的參數保護的標題,這馬無半頁。',
 'listusers'               => 'Iōng-chiá lia̍t-toaⁿ',
+'listusers-editsonly'     => '干焦顯示有改過的用者',
 'listusers-creationsort'  => '照開始寫的日期排',
+'usereditcount'           => '改過$1{{PLURAL:$1|擺|擺}}',
 'usercreated'             => ' {{GENDER:$3|}}佇$1 $2創建',
 'newpages'                => 'Sin ia̍h',
 'newpages-username'       => 'Iōng-chiá miâ-chheng:',
@@ -1743,19 +1814,31 @@ Template:Khu-pia̍t-ia̍h',
 'unusedimagestext'        => 'Ē-kha ê tóng-àn bô poàⁿ ia̍h ū teh iōng. M̄-koh ia̍h lâu leh. 
 Chhiáⁿ chù-ì: kî-thaⁿ ê bāng-chām ū khó-lêng iōng URL ti̍t-chiap liân kàu iáⁿ-siōng, só·-í sui-jiân bô teh iōng, mā sī ē lia̍t tī chia.',
 'unusedcategoriestext'    => 'Ū ē-kha chiah-ê lūi-pia̍t-ia̍h, m̄-koh bô kî-thaⁿ ê bûn-chiuⁿ a̍h-sī lūi-pia̍t lī-iōng.',
+'notargettitle'           => '無目標',
+'notargettext'            => '你無指定目標頁面抑是用者通做這个動作',
+'nopagetitle'             => '無這个目標頁',
+'nopagetext'              => '無你指定的目標頁。',
 'pager-newer-n'           => '{{PLURAL:$1|較新一个|較新$1个 }}',
 'pager-older-n'           => '{{PLURAL:$1|較舊一个|較舊$1个}}',
+'suppress'                => '監督',
+'querypage-disabled'      => '這个特殊頁因為效能的原因已經無咧用。',
 
 # Book sources
 'booksources'               => 'Tô͘-su chu-liāu',
 'booksources-search-legend' => '揣圖書資料',
 'booksources-go'            => '來去',
+'booksources-text'          => '下跤是連接去賣新冊抑舊冊網站的清單,並而可能有你欲揣的冊的其他資料:',
+'booksources-invalid-isbn'  => '提供的ISBN號碼無正確,請檢查拷備來源是毋是有錯誤。',
 
 # Special:Log
-'specialloguserlabel'  => 'Iōng-chiá:',
+'specialloguserlabel'  => '操作者:',
 'speciallogtitlelabel' => 'Bo̍k-piau (sû-tiâu ia̍h iōng-chiá) :',
 'log'                  => '記錄',
+'all-logs-page'        => '所有公開的記錄',
+'alllogstext'          => '顯示所有佇 {{SITENAME}} 有提供的記錄,
+你會當看你所選的記錄類別、用者名稱(大小寫有差)抑是相關的頁(大小寫有差)。',
 'logempty'             => 'Log lāi-bīn bô sio-tùi ê hāng-bo̍k.',
+'log-title-wildcard'   => '去揣以這个文字做頭的標題',
 
 # Special:AllPages
 'allpages'          => 'Só·-ū ê ia̍h',
@@ -1763,36 +1846,54 @@ Chhiáⁿ chù-ì: kî-thaⁿ ê bāng-chām ū khó-lêng iōng URL ti̍t-chiap
 'nextpage'          => 'Āu 1 ia̍h ($1)',
 'prevpage'          => '前一頁($1)',
 'allpagesfrom'      => 'Tùi chit ia̍h khai-sí hián-sī:',
+'allpagesto'        => '顯示到這頁:',
 'allarticles'       => 'Só·-ū ê bûn-chiuⁿ',
 'allinnamespace'    => 'Só·-ū ê ia̍h ($1 miâ-khong-kan)',
 'allnotinnamespace' => 'Só·-ū ê ia̍h (bô tī $1 miâ-khong-kan)',
 'allpagesprev'      => 'Téng 1 ê',
 'allpagesnext'      => 'ē 1 ê',
 'allpagessubmit'    => 'Lâi-khì',
+'allpagesprefix'    => '顯示頁標題有:',
+'allpagesbadtitle'  => '指定的頁面標題無適當,抑是有用著別个語言抑是別个Wiki。
+伊可能是有一字抑一字以上的字是袂當用佇標題。',
+'allpages-bad-ns'   => '佇{{SITENAME}}無"$1"這个名空間。',
 
 # Special:Categories
-'categories'         => 'Lūi-pia̍t',
-'categoriespagetext' => 'Chit ê wiki ū ē-kha chia ê lūi-pia̍t.
-[[Special:UnusedCategories|Unused categories]] are not shown here.
-Also see [[Special:WantedCategories|wanted categories]].',
+'categories'                    => 'Lūi-pia̍t',
+'categoriespagetext'            => 'Ē-kha {{PLURAL:$1| ê ūi-pia̍t|ê ūi-pia̍t}} ū ia̍h ia̍h-sī mûi-thé.
+[[Special:UnusedCategories|Bô iōng tio̍h ê ūi-pia̍t]] tō bô tī chiah hián-sī.
+Lēng-goā thang chham-khó [[Special:WantedCategories|beh ti̍h ê lūi-pia̍t]].',
+'categoriesfrom'                => 'Tùi chit ê lūi-pia̍t khai-sí hián-sī:',
+'special-categories-sort-count' => '按數量排',
+'special-categories-sort-abc'   => '按字母排',
 
 # Special:DeletedContributions
-'deletedcontributions'       => 'Hō͘ lâng thâi tiāu ê kòng-hiàn',
-'deletedcontributions-title' => 'Hō͘ lâng thâi tiāu ê kòng-hiàn',
+'deletedcontributions'             => 'Hō͘ lâng thâi tiāu ê kòng-hiàn',
+'deletedcontributions-title'       => 'Hō͘ lâng thâi tiāu ê kòng-hiàn',
+'sp-deletedcontributions-contribs' => '貢獻',
 
 # Special:LinkSearch
-'linksearch'      => 'Chhoē chām-goā ê liân-kiat',
-'linksearch-ns'   => '名空間:',
-'linksearch-ok'   => '揣',
-'linksearch-line' => '$1 是對$2連接來的',
+'linksearch'       => 'Chhoē chām-goā ê liân-kiat',
+'linksearch-pat'   => '揣的方式:',
+'linksearch-ns'    => '名空間:',
+'linksearch-ok'    => '揣',
+'linksearch-text'  => '會當用親像“*.wikipedia.org”的萬用字元,
+上少愛對上頂層的網域,親像“*.org”。<br />
+支援的協議:<tt>$1</tt>(莫加佇你的搜揣)。',
+'linksearch-line'  => '$1 是對$2連接來的',
+'linksearch-error' => '萬用字元干焦會當用佇主機名的頭前。',
 
 # Special:ListUsers
+'listusersfrom'      => '對這个用者開始顯示:',
 'listusers-submit'   => '顯示',
 'listusers-noresult' => '揣無用者',
+'listusers-blocked'  => '(封鎖牢咧)',
 
 # Special:ActiveUsers
 'activeusers'            => '有咧活動的用者清單',
 'activeusers-intro'      => '這是佇過去$1 {{PLURAL:$1|工y|工}}有做過一寡活動的用者清單。',
+'activeusers-count'      => '佇{{PLURAL:$3|一工|$3工}}內的$1改編輯',
+'activeusers-from'       => '對這个用者開始顯示:',
 'activeusers-hidebots'   => '掩機器人',
 'activeusers-hidesysops' => '掩管理員',
 'activeusers-noresult'   => '揣無用者',
@@ -1802,72 +1903,104 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'newuserlogpagetext' => '這是開用者口座的記錄',
 
 # Special:ListGroupRights
-'listgrouprights'         => '用者陣權利',
-'listgrouprights-members' => '(成員列單)',
+'listgrouprights'                      => '用者陣的權利',
+'listgrouprights-summary'              => '下跤是佇這个wiki分的用者陣清單,佮相關的使用權。
+每一陣的權利,通去看[[{{MediaWiki:Listgrouprights-helppage}}|其他資料]]。',
+'listgrouprights-key'                  => '* <span class="listgrouprights-granted">授權的權利</span>
+* <span class="listgrouprights-revoked">扣除的權利</span>',
+'listgrouprights-group'                => '陣營',
+'listgrouprights-rights'               => '權利',
+'listgrouprights-helppage'             => 'Help:陣營的權利',
+'listgrouprights-members'              => '(成員列單)',
+'listgrouprights-addgroup'             => '加入的{{PLURAL:$2|个|个}}陣營: $1',
+'listgrouprights-removegroup'          => '徙走的{{PLURAL:$2|个|个}}陣營: $1',
+'listgrouprights-addgroup-all'         => '加入所有陣營',
+'listgrouprights-removegroup-all'      => '離開所有的陣營',
+'listgrouprights-addgroup-self'        => '共家己加入去{{PLURAL:$2|个|个}}陣營:$1',
+'listgrouprights-removegroup-self'     => '共家己對{{PLURAL:$2|个|个}}陣營徙走:$1',
+'listgrouprights-addgroup-self-all'    => '共家己加入所有的陣營',
+'listgrouprights-removegroup-self-all' => '共家己對所有陣營徙走',
 
 # E-mail user
 'mailnologin'          => 'Bô siu-phoe ê chū-chí',
 'mailnologintext'      => 'Lí it-tēng ài [[Special:UserLogin|teng-ji̍p]] jī-chhiáⁿ ū 1 ê ū-hāu ê e-mail chū-chí tī lí ê [[Special:Preferences|iōng-chiá siat-tēng]] chiah ē-tàng kià e-mail hō· pa̍t-ūi iōng-chiá.',
 'emailuser'            => 'Kià e-mail hō· iōng-chiá',
 'emailpage'            => 'E-mail iōng-chiá',
-'emailpagetext'        => 'Ká-sú chit ê iōng-chiá ū siat-tēng 1 ê ū-hāu ê e-mail chū-chí, lí tō ē-tàng ēng ē-kha chit tiuⁿ FORM hoat sìn-sek hō· i. Lí siat-tēng ê e-mail chū-chí ē chhut-hiān tī e-mail ê "Kià-phoe-jîn" (From) hit ūi. Án-ne siu-phoe-jîn chiah ū hoat-tō· kā lí hôe-phoe.',
+'emailpagetext'        => 'Lí ē-tàng iōng ē-kha ê pió kià chi̍t tiuⁿ phe hō͘ chit ê iōng-chiá.
+Lí ê [[Special:Preferences|siat-tēng]] ê tiān-chú-phe tē-chí ē chhut-hiān tī tiān-chú-phe ê "Kià-phe-chiá" (From) hit ūi. Án-ne siu-phe-chiá chiah ū hoat-tō· kā lí hôe-phe.',
+'usermailererror'      => '退批錯誤:',
+'defemailsubject'      => '{{SITENAME}}的用者 $1 送的電子批',
 'usermaildisabled'     => '你的電子批已經停掉',
 'usermaildisabledtext' => '你袂當佇這个wiki寄批予別人',
 'noemailtitle'         => 'Bô e-mail chū-chí',
 'noemailtext'          => 'Chit ūi iōng-chiá pēng-bô lâu ū-hāu ê e-mail chū-chí.',
+'nowikiemailtitle'     => '無電子批',
 'nowikiemailtext'      => '這个用者無欲收電子批。',
+'emailnotarget'        => '無彼个收批的人,抑是收批的用者名稱毋著。',
+'emailtarget'          => '拍入欲收批的用者名稱',
 'emailusername'        => '用者名稱:',
+'emailusernamesubmit'  => '送出',
+'email-legend'         => '送一張電子批去予佇{{SITENAME}}的另外一位用者',
 'emailfrom'            => 'Lâi chū:',
 'emailto'              => 'Khì hō·:',
 'emailsubject'         => 'Tê-bo̍k:',
 'emailmessage'         => 'Sìn-sit:',
 'emailsend'            => 'Sàng chhut-khì',
 'emailccme'            => '共我的訊息用電子批寄一份予我',
+'emailccsubject'       => '你送予$1訊息的副本:$2',
 'emailsent'            => 'E-mail sàng chhut-khì ah',
 'emailsenttext'        => 'Lí ê e-mail í-keng sàng chhut-khì ah.',
+'emailuserfooter'      => '這張由$1寄予$2的電子批已經用{{SITENAME}}的「電子批用者」功能送出。',
 
 # User Messenger
 'usermessage-summary' => '留系統信息',
 'usermessage-editor'  => '系統信息',
 
 # Watchlist
-'watchlist'          => 'Kàm-sī-toaⁿ',
-'mywatchlist'        => 'Góa ê kàm-sī-toaⁿ',
-'watchlistfor2'      => '予$1 $2',
-'nowatchlist'        => 'Lí ê kàm-sī-toaⁿ bô pòaⁿ hāng.',
-'watchnologin'       => 'Bô teng-ji̍p',
-'watchnologintext'   => 'Lí it-tēng ài [[Special:UserLogin|teng-ji̍p]] chiah ē-tàng siu-kái lí ê kàm-sī-toaⁿ.',
-'addwatch'           => '加入去監視單',
-'addedwatchtext'     => "\"[[:\$1]]\" chit ia̍h í-keng ka-ji̍p lí ê [[Special:Watchlist|kàm-sī-toaⁿ]]. Bī-lâi chit ia̍h a̍h-sī siong-koan ê thó-lūn-ia̍h nā ū kái-piàn, ē lia̍t tī hia. Tông-sî tī [[Special:RecentChanges|Chòe-kīn ê kái-piàn]] ē iōng '''chho·-thé''' hián-sī ia̍h ê piau-tê, án-ne khah bêng-hián. Ká-sú lí beh chiōng chit ia̍h tùi lí ê kàm-sī-toaⁿ tû tiāu, khì khòng-chè-tiâu chhi̍h \"Mài kàm-sī\" chiū ē-sái-tit.",
-'removewatch'        => '對監視單徙走',
-'removedwatchtext'   => '"[[:$1]]" chit ia̍h í-keng tùi lí ê kàm-sī-toaⁿ tû tiāu.',
-'watch'              => 'kàm-sī',
-'watchthispage'      => 'Kàm-sī chit ia̍h',
-'unwatch'            => 'Mài kàm-sī',
-'unwatchthispage'    => 'Mài koh kàm-sī',
-'notanarticle'       => '毋是內容頁面',
-'watchnochange'      => 'Lí kàm-sī ê hāng-bo̍k tī hián-sī ê sî-kî í-lāi lóng bô siu-kái kòe.',
-'watchlist-details'  => 'Kàm-sī-toaⁿ ū {{PLURAL:$1|$1 ia̍h|$1 ia̍h}}, thó-lūn-ia̍h bô sǹg chāi-lāi.',
-'watchmethod-recent' => 'tng teh kíam-cha choè-kīn ê siu-kái, khoàⁿ ū kàm-sī ê ia̍h bô',
-'watchmethod-list'   => 'tng teh kiám-cha kàm-sī ê ia̍h khoàⁿ chòe-kīn ū siu-kái bô',
-'watchlistcontains'  => 'Lí ê kàm-sī-toaⁿ siu {{PLURAL:$1|ia̍h|ia̍h}} .',
-'wlnote'             => "Ē-kha sī '''$2''' tiám-cheng í-lāi siōng sin ê $1 ê kái-piàn.",
-'wlshowlast'         => 'Hián-sī chêng $1 tiám-cheng $2 ji̍t $3',
-'watchlist-options'  => '監視單的選項',
+'watchlist'            => 'Kàm-sī-toaⁿ',
+'mywatchlist'          => 'Góa ê kàm-sī-toaⁿ',
+'watchlistfor2'        => '予$1 $2',
+'nowatchlist'          => 'Lí ê kàm-sī-toaⁿ bô pòaⁿ hāng.',
+'watchlistanontext'    => '請$1去看抑是改你的監視清單。',
+'watchnologin'         => 'Bô teng-ji̍p',
+'watchnologintext'     => 'Lí it-tēng ài [[Special:UserLogin|teng-ji̍p]] chiah ē-tàng siu-kái lí ê kàm-sī-toaⁿ.',
+'addwatch'             => '加入去監視單',
+'addedwatchtext'       => "\"[[:\$1]]\" chit ia̍h í-keng ka-ji̍p lí ê [[Special:Watchlist|kàm-sī-toaⁿ]]. Bī-lâi chit ia̍h a̍h-sī siong-koan ê thó-lūn-ia̍h nā ū kái-piàn, ē lia̍t tī hia. Tông-sî tī [[Special:RecentChanges|Chòe-kīn ê kái-piàn]] ē iōng '''chho·-thé''' hián-sī ia̍h ê piau-tê, án-ne khah bêng-hián. Ká-sú lí beh chiōng chit ia̍h tùi lí ê kàm-sī-toaⁿ tû tiāu, khì khòng-chè-tiâu chhi̍h \"Mài kàm-sī\" chiū ē-sái-tit.",
+'removewatch'          => '對監視單徙走',
+'removedwatchtext'     => '"[[:$1]]" chit ia̍h í-keng tùi lí ê [[Special:Watchlist|kàm-sī-toaⁿ]] soá cháu.',
+'watch'                => 'kàm-sī',
+'watchthispage'        => 'Kàm-sī chit ia̍h',
+'unwatch'              => 'Mài kàm-sī',
+'unwatchthispage'      => 'Mài koh kàm-sī',
+'notanarticle'         => '毋是內容頁面',
+'notvisiblerev'        => '別个用者的頂一个修訂本已經予人刣掉',
+'watchnochange'        => 'Lí kàm-sī ê hāng-bo̍k tī hián-sī ê sî-kî í-lāi lóng bô siu-kái kòe.',
+'watchlist-details'    => 'Kàm-sī-toaⁿ ū {{PLURAL:$1|$1 ia̍h|$1 ia̍h}}, thó-lūn-ia̍h bô sǹg chāi-lāi.',
+'wlheader-enotif'      => '*會當用電子批通知',
+'wlheader-showupdated' => '自你頂回看的、到今有改過的會用較大烏字顯示',
+'watchmethod-recent'   => 'tng teh kíam-cha choè-kīn ê siu-kái, khoàⁿ ū kàm-sī ê ia̍h bô',
+'watchmethod-list'     => 'tng teh kiám-cha kàm-sī ê ia̍h khoàⁿ chòe-kīn ū siu-kái bô',
+'watchlistcontains'    => 'Lí ê kàm-sī-toaⁿ siu {{PLURAL:$1|ia̍h|ia̍h}} .',
+'iteminvalidname'      => "項目'$1'有問題,名稱無適當...",
+'wlnote'               => "Ē-kha sī '''$2''' tiám-cheng í-lāi siōng sin ê $1 ê kái-piàn.",
+'wlshowlast'           => 'Hián-sī chêng $1 tiám-cheng $2 ji̍t $3',
+'watchlist-options'    => '監視單的選項',
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching'       => '共監視',
 'unwatching'     => '莫監視',
 'watcherrortext' => '佇你改"$1"監視設定的時陣,發生一个問題',
 
-'enotif_reset'       => '共全部的頁攏當做巡過',
-'enotif_newpagetext' => '這是新的一頁',
-'changed'            => '改過',
-'created'            => '寫過',
-'enotif_subject'     => '佇{{SITENAME}}的$PAGETITLE這頁捌予$CHANGEDORCREATED$PAGEEDITOR',
-'enotif_lastvisited' => '看$1,自你頂回來到今所有改的',
-'enotif_lastdiff'    => '看$1這回改的',
-'enotif_anon_editor' => '無名氏用者$1',
+'enotif_mailer'                => '{{SITENAME}} 的電子批通知系統',
+'enotif_reset'                 => '共全部的頁攏當做巡過',
+'enotif_newpagetext'           => '這是新的一頁',
+'enotif_impersonal_salutation' => '{{SITENAME}}用者',
+'changed'                      => '改過',
+'created'                      => '寫過',
+'enotif_subject'               => '佇{{SITENAME}}的$PAGETITLE這頁捌予$CHANGEDORCREATED$PAGEEDITOR',
+'enotif_lastvisited'           => '看$1,自你頂回來到今所有改的',
+'enotif_lastdiff'              => '看$1這回改的',
+'enotif_anon_editor'           => '無名氏用者$1',
 
 # Delete
 'deletepage'             => 'Thâi ia̍h',
@@ -1935,6 +2068,9 @@ Téng 1 ūi siu-kái-chiá sī [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-s
 'protect-unchain-permissions' => '解除更加保護的選項',
 'protect-locked-blocked'      => "你袂當佇封鎖的時陣改保護等級,
 下跤是'''$1'''這馬的保護等級:",
+'protect-default'             => '所有用者攏會當',
+'protect-fallback'            => '要求會當"$1"',
+'protect-level-sysop'         => '干焦管理員',
 'protect-expiring-local'      => '佇$1到期',
 'protect-cascade'             => 'Cascading protection - pó-hō͘ jīm-hô pau-hâm tī chit ia̍h ê ia̍h.',
 'protect-othertime'           => '其他的時間:',
@@ -1958,17 +2094,22 @@ Téng 1 ūi siu-kái-chiá sī [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-s
 'restriction-level-all'           => '任何一級',
 
 # Undelete
-'undelete'            => 'Kiù thâi tiāu ê ia̍h',
-'undeletepage'        => 'Khoàⁿ kap kiù thâi tiāu ê ia̍h',
-'undeletepagetitle'   => "'''下跤包括[[:$1]]的刣掉修訂本'''",
-'viewdeletedpage'     => '看刣掉的頁',
-'undeletepagetext'    => '下跤的{{PLURAL:$1|篇頁|篇頁}}已經予人刣掉,毋過猶留佇檔案庫,而且會使救倒轉來。
+'undelete'                 => 'Kiù thâi tiāu ê ia̍h',
+'undeletepage'             => 'Khoàⁿ kap kiù thâi tiāu ê ia̍h',
+'undeletepagetitle'        => "'''下跤包括[[:$1]]的刣掉修訂本'''",
+'viewdeletedpage'          => '看刣掉的頁',
+'undeletepagetext'         => '下跤的{{PLURAL:$1|篇頁|篇頁}}已經予人刣掉,毋過猶留佇檔案庫,而且會使救倒轉來。
 檔案庫內底可能會定時清掉。',
-'undeletelink'        => '看/恢復',
-'undeleteviewlink'    => 'Khoàⁿ',
-'undeletereset'       => '設便',
-'undeletecomment'     => '理由:',
-'undelete-search-box' => '揣刣掉的頁',
+'undelete-revision'        => '$1予$3(佇$4 $5)刣掉的修訂本。',
+'undeleterevision-missing' => '毋著抑是無去的修訂本,
+你的連結毋著,抑是彼个修訂本己經對保管庫轉回抑徙掉。',
+'undelete-nodiff'          => '無頂一个修訂本。',
+'undeletebtn'              => '恢復',
+'undeletelink'             => '看/恢復',
+'undeleteviewlink'         => 'Khoàⁿ',
+'undeletereset'            => '設便',
+'undeletecomment'          => '理由:',
+'undelete-search-box'      => '揣刣掉的頁',
 
 # Namespace form on various pages
 'namespace'      => 'Miâ-khong-kan:',
@@ -2028,18 +2169,35 @@ Téng 1 ūi siu-kái-chiá sī [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-s
 'ipbsubmit'                   => 'Hong-só chit ūi iōng-chiá',
 'ipbother'                    => '其他時間:',
 'ipboptions'                  => '兩點鐘:2 hours,一工:1 day,三工:3 days,一禮拜:1 week,兩禮拜:2 weeks,一個月:1 month,兩個月:3 months,六個月:6 months,一年:1 year,永久:infinite',
+'ipbotheroption'              => '其他',
 'ipbotherreason'              => '其他/另外的理由:',
+'ipbwatchuser'                => '看這个用者的用者頁佮討論頁',
 'ipb-confirm'                 => '確定封鎖',
 'badipaddress'                => 'Bô-hāu ê IP chū-chí',
 'blockipsuccesssub'           => 'Hong-só sêng-kong',
 'blockipsuccesstext'          => '[[Special:Contributions/$1|$1]] í-keng pī hong-só. <br />Khì [[Special:BlockList|IP hong-só lia̍t-toaⁿ]] review hong-só ê IP.',
 'ipb-blockingself'            => '你欲封鎖你家己!你敢確定欲按呢做?',
+'ipb-unblock-addr'            => '解除封鎖$1',
 'unblockip'                   => '解除對用者的封鎖',
 'ipusubmit'                   => 'Chhú-siau chit ê hong-só',
+'unblocked-range'             => '$1已經解除封鎖',
+'unblocked-id'                => '對$1的封鎖已經徙掉',
+'blocklist'                   => '封鎖牢咧的用者',
 'ipblocklist'                 => 'Siū hong-só ê iōng-chiá',
 'ipblocklist-legend'          => '揣一个封鎖的用者',
+'blocklist-timestamp'         => '戳印的時間',
 'blocklist-target'            => '目標',
+'blocklist-expiry'            => '到期',
+'blocklist-reason'            => '理由',
 'ipblocklist-submit'          => '揣',
+'infiniteblock'               => '無限',
+'expiringblock'               => '佇$1  $2 到期',
+'anononlyblock'               => '只限無名氏',
+'noautoblockblock'            => '自動封鎖袂當用',
+'emailblock'                  => '電子批封鎖牢咧',
+'blocklist-nousertalk'        => '袂當改家己的討論頁',
+'ipblocklist-empty'           => '封鎖清單空的',
+'ipblocklist-no-results'      => '請求的IP地址抑是用者名稱無予人封鎖牢咧。',
 'blocklink'                   => 'hong-só',
 'unblocklink'                 => '取消封鎖',
 'change-blocklink'            => '改封鎖',
@@ -2047,6 +2205,8 @@ Téng 1 ūi siu-kái-chiá sī [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-s
 'emaillink'                   => '寄電子批',
 'autoblocker'                 => 'Chū-tōng kìm-chí lí sú-iōng, in-ūi lí kap "$1" kong-ke kāng 1 ê IP chū-chí (kìm-chí lí-iû "$2").',
 'blocklogpage'                => '封鎖記錄',
+'blocklog-showlog'            => '這个用者進前予人封鎖牢咧,
+下跤有封鎖的記錄會當參考:',
 'blocklogentry'               => 'hong-só [[$1]], siat kî-hān chì $2 $3',
 'blocklogtext'                => 'Chit-ê log lia̍t-chhut block/unblock ê tōng-chok. Chū-tōng block ê IP chū-chí bô lia̍t--chhut-lâi ([[Special:BlockList]] ū hiān-chú-sî ū-hāu ê block/ban o·-miâ-toaⁿ).',
 'unblocklogentry'             => '解除封鎖$1',
@@ -2058,23 +2218,36 @@ Téng 1 ūi siu-kái-chiá sī [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-s
 'block-log-flags-hiddenname'  => '用者名稱藏起來矣',
 'ipb_expiry_invalid'          => '到期的時間毋著',
 'ipb_already_blocked'         => '"$1"是封鎖牢咧',
+'ipb_cant_unblock'            => '錯誤:無$1的封鎖,伊可能已經解除封鎖。',
 'ip_range_invalid'            => '毋著的網址(IP)範圍',
 'blockme'                     => '封鎖我',
 'proxyblocker-disabled'       => '這个功能袂當用。',
+'proxyblocksuccess'           => '完成。',
+'cant-block-while-blocked'    => '你若予人封鎖牢咧,你就袂封鎖別个用者。',
+'ipbblocked'                  => '你袂當封鎖抑是解除封鎖別个用者,因為你本身就封鎖牢咧。',
+'ipbnounblockself'            => '你袂當對家己解除封鎖',
 
 # Developer tools
+'lockdb'              => '封鎖資料庫',
+'unlockdb'            => '解除對資料庫的封鎖',
+'unlockdbtext'        => '解除封鎖會予所有的用者通編輯、改設定、改監視單佮其他通改資料庫的代誌,
+請確認這是你欲做的動作。',
+'lockconfirm'         => '是,我確實欲封鎖資料庫。',
+'unlockconfirm'       => '是,我確實欲解除封鎖資料庫。',
 'lockbtn'             => '封鎖資料庫',
 'unlockbtn'           => '解除對資料庫的封鎖',
 'locknoconfirm'       => 'Lí bô kau "khak-tēng" ê keh-á.',
 'lockdbsuccesssub'    => '資料庫封鎖成功',
 'unlockdbsuccesssub'  => '已經共資料庫的封鎖解除',
+'lockdbsuccesstext'   => '資料庫已經封鎖牢咧。<br />
+維修了,愛會記得[[Special:UnlockDB|解除封鎖]]。',
 'unlockdbsuccesstext' => '資料庫已經解除封鎖',
 'databasenotlocked'   => '資料庫無封鎖牢咧。',
 
 # Move page
-'move-page'              => '徙$1',
-'move-page-legend'       => 'Sóa ia̍h',
-'movepagetext'           => "Ē-kha chit ê form> iōng lâi kái 1 ê ia̍h ê piau-tê (miâ-chheng); só·-ū siong-koan ê le̍k-sú ē tòe leh sóa khì sin piau-tê.
+'move-page'                    => '徙$1',
+'move-page-legend'             => 'Sóa ia̍h',
+'movepagetext'                 => "Ē-kha chit ê form> iōng lâi kái 1 ê ia̍h ê piau-tê (miâ-chheng); só·-ū siong-koan ê le̍k-sú ē tòe leh sóa khì sin piau-tê.
 Kū piau-tê ē chiâⁿ-chò 1 ia̍h choán khì sin piau-tê ê choán-ia̍h.
 Liân khì kū piau-tê ê liân-kiat (link) bē khì tāng--tio̍h; ē-kì-tit chhiau-chhōe siang-thâu (double) ê a̍h-sī kò·-chiòng ê choán-ia̍h.
 Lí ū chek-jīm khak-tēng liân-kiat kè-sio̍k liân tio̍h ūi.
@@ -2085,53 +2258,104 @@ Che piaú-sī nā ū têng-tâⁿ, ē-sái kā sin ia̍h soà tńg-khì goân-l
 '''SÈ-JĪ!'''
 Tùi chē lâng tha̍k ê ia̍h lâi kóng, soá-ūi sī toā tiâu tāi-chì.
 Liâu--lo̍h-khì chìn-chêng, chhiáⁿ seng khak-tēng lí ū liáu-kái chiah-ê hiō-kó.",
-'movepagetalktext'       => "Siong-koan ê thó-lūn-ia̍h (chún ū) oân-nâ ē chū-tōng tòe leh sóa-ūi. Í-hā ê chêng-hêng '''bô chún-sǹg''': *Beh kā chit ia̍h tùi 1 ê miâ-khong-kan (namespace) soá khì lēng-gōa 1 ê miâ-khong-kan, *Sin piau-tê í-keng ū iōng--kòe ê thó-lūn-ia̍h, he̍k-chiá *Ē-kha ê sió-keh-á bô phah-kau. Í-siōng ê chêng-hêng nā-chún tī leh, lí chí-hó iōng jîn-kang ê hong-sek sóa ia̍h a̍h-sī kā ha̍p-pèng (nā ū su-iàu).",
-'movearticle'            => 'Sóa ia̍h:',
-'movenologin'            => 'Bô teng-ji̍p',
-'movenologintext'        => 'Lí it-tēng ài sī chù-chheh ê iōng-chiá jī-chhiáⁿ ū [[Special:UserLogin|teng-ji̍p]] chiah ē-tàng sóa ia̍h.',
-'movenotallowed'         => '你無授權通去徙頁',
-'movenotallowedfile'     => '你無授權通去徙檔案',
-'cant-move-user-page'    => '你無授權通去徙用者頁(無包括伊的下頁)',
-'cant-move-to-user-page' => '你無授權通去徙用者頁(下頁例外)',
-'newtitle'               => 'Khì sin piau-tê:',
-'move-watch'             => 'Kàm-sī chit ia̍h',
-'movepagebtn'            => 'Sóa ia̍h',
-'pagemovedsub'           => 'Sóa-ūi sêng-kong',
-'articleexists'          => 'Kāng miâ ê ia̍h í-keng tī leh, a̍h-sī lí kéng ê miâ bô-hāu. Chhiáⁿ kéng pa̍t ê miâ.',
-'talkexists'             => "'''Ia̍h ê loē-bûn ū soá cháu, m̄-koh siong-koan ê thó-lūn-ia̍h bô toè leh soá, in-ūi sin piau-tê pun-té tō ū hit ia̍h. Chhiáⁿ iōng jîn-kang ê hoat-tō· kā ha̍p-pèng.'''",
-'movedto'                => 'sóa khì tī',
-'movetalk'               => 'Sūn-sòa sóa thó-lūn-ia̍h',
-'movepage-page-moved'    => '$1 í-keng sóa khì tī $2.',
-'movepage-page-unmoved'  => '$1這頁袂當徙去$2',
-'movelogpage'            => '徙位記錄',
-'movelogpagetext'        => 'Ē-kha lia̍t-chhut hông soá-ūi ê ia̍h.',
-'movenosubpage'          => '這頁無下頁',
-'movereason'             => 'Lí-iû:',
-'revertmove'             => '回轉',
-'selfmove'               => 'Goân piau-tê kap sin piau-tê sio-siâng; bô hoat-tō· sóa.',
+'movepagetalktext'             => "Siong-koan ê thó-lūn-ia̍h (chún ū) oân-nâ ē chū-tōng tòe leh sóa-ūi. Í-hā ê chêng-hêng '''bô chún-sǹg''': *Beh kā chit ia̍h tùi 1 ê miâ-khong-kan (namespace) soá khì lēng-gōa 1 ê miâ-khong-kan, *Sin piau-tê í-keng ū iōng--kòe ê thó-lūn-ia̍h, he̍k-chiá *Ē-kha ê sió-keh-á bô phah-kau. Í-siōng ê chêng-hêng nā-chún tī leh, lí chí-hó iōng jîn-kang ê hong-sek sóa ia̍h a̍h-sī kā ha̍p-pèng (nā ū su-iàu).",
+'movearticle'                  => 'Sóa ia̍h:',
+'movenologin'                  => 'Bô teng-ji̍p',
+'movenologintext'              => 'Lí it-tēng ài sī chù-chheh ê iōng-chiá jī-chhiáⁿ ū [[Special:UserLogin|teng-ji̍p]] chiah ē-tàng sóa ia̍h.',
+'movenotallowed'               => '你無授權通去徙頁',
+'movenotallowedfile'           => '你無授權通去徙檔案',
+'cant-move-user-page'          => '你無授權通去徙用者頁(無包括伊的下頁)',
+'cant-move-to-user-page'       => '你無授權通去徙用者頁(下頁例外)',
+'newtitle'                     => 'Khì sin piau-tê:',
+'move-watch'                   => 'Kàm-sī chit ia̍h',
+'movepagebtn'                  => 'Sóa ia̍h',
+'pagemovedsub'                 => 'Sóa-ūi sêng-kong',
+'movepage-moved-redirect'      => '已經建立一个轉向的頁。',
+'articleexists'                => 'Kāng miâ ê ia̍h í-keng tī leh, a̍h-sī lí kéng ê miâ bô-hāu. Chhiáⁿ kéng pa̍t ê miâ.',
+'talkexists'                   => "'''Ia̍h ê loē-bûn ū soá cháu, m̄-koh siong-koan ê thó-lūn-ia̍h bô toè leh soá, in-ūi sin piau-tê pun-té tō ū hit ia̍h. Chhiáⁿ iōng jîn-kang ê hoat-tō· kā ha̍p-pèng.'''",
+'movedto'                      => 'sóa khì tī',
+'movetalk'                     => 'Sūn-sòa sóa thó-lūn-ia̍h',
+'movepage-page-moved'          => '$1 í-keng sóa khì tī $2.',
+'movepage-page-unmoved'        => '$1這頁袂當徙去$2',
+'movelogpage'                  => '徙位記錄',
+'movelogpagetext'              => 'Ē-kha lia̍t-chhut hông soá-ūi ê ia̍h.',
+'movenosubpage'                => '這頁無下頁',
+'movereason'                   => 'Lí-iû:',
+'revertmove'                   => '回轉',
+'delete_and_move'              => '刣掉而且徙走',
+'delete_and_move_text'         => '==需要刣掉==
+目標頁面"[[:$1]]"已經有矣,
+你敢真正欲為著徙頁共彼頁刣掉?',
+'delete_and_move_confirm'      => '無毋著,共刣掉彼頁。',
+'delete_and_move_reason'       => '為著徙位,[[$1]]已經刣掉。',
+'selfmove'                     => 'Goân piau-tê kap sin piau-tê sio-siâng; bô hoat-tō· sóa.',
+'immobile-source-namespace'    => '佇"$1"名空間內底袂使徙頁。',
+'immobile-target-namespace'    => '袂當共頁徙去$1名空間。',
+'immobile-target-namespace-iw' => '跨維基的連結袂當用佇徙頁。',
+'immobile-source-page'         => '這頁袂當徙振動。',
+'immobile-target-page'         => '無法度徙去指定的標題',
+'imagenocrossnamespace'        => '檔案只會當佇"檔案"名空間內底徙位。',
+'nonfile-cannot-move-to-file'  => '袂當共毋是檔案的物件徙來"檔案"名空間。',
+'imagetypemismatch'            => '新檔案尾的類型無符合伊的類型。',
+'imageinvalidfilename'         => '目標的檔案名稱無適當',
+'fix-double-redirects'         => '改新所有指到原本標題的轉向。',
+'move-leave-redirect'          => '留一个轉向',
+'protectedpagemovewarning'     => "'''KÉNG-KÒ: Pún ia̍h só tiâu leh. Kan-taⁿ ū hêng-chèng te̍k-koân ê iōng-chiá (sysop) ē-sái soá tín-tāng.'''
+Ē-kha ū choè-kīn ê kì-lio̍k thang chham-khó:",
+'semiprotectedpagemovewarning' => "'''注意:'''這頁予人保護牢咧,只有有註冊的用者通徙振動,
+下跤有最近的記錄通參考:",
+'move-over-sharedrepo'         => '== 檔案已經存在 ==
+[[:$1]]已經佇共享資源,共檔案徙到這个標題會蓋掉共享的檔案。',
+'file-exists-sharedrepo'       => '仝名的檔案已經佇共享資源,
+請用另外一个檔案名稱。',
 
 # Export
-'export'        => 'Su-chhut ia̍h',
-'exportcuronly' => 'Hān hiān-chhú-sî ê siu-téng-pún, mài pau-koat kui-ê le̍k-sú',
+'export'            => 'Su-chhut ia̍h',
+'exportall'         => '輸出所有的頁',
+'exportcuronly'     => 'Hān hiān-chhú-sî ê siu-téng-pún, mài pau-koat kui-ê le̍k-sú',
+'export-submit'     => '輸出',
+'export-addcattext' => '對這類別加頁面:',
+'export-addcat'     => '加頁面',
+'export-addnstext'  => '對這个名空間加頁面:',
+'export-addns'      => '加頁面',
+'export-download'   => '保存做檔案',
+'export-templates'  => '包括枋模',
+'export-pagelinks'  => '包刮到第幾層的轉向頁:',
 
 # Namespace 8 related
-'allmessages'               => 'Hē-thóng sìn-sit',
-'allmessagesname'           => 'Miâ',
-'allmessagesdefault'        => 'Siat piān ê bûn-jī',
-'allmessagescurrent'        => 'Bo̍k-chêng ê bûn-jī',
-'allmessagestext'           => 'Chia lia̍t chhut só·-ū tī MediaWiki: miâ-khong-kan ê hē-thóng sìn-sit.',
-'allmessages-filter-all'    => '全部',
-'allmessages-language'      => '話語:',
-'allmessages-filter-submit' => '來去',
+'allmessages'                   => 'Hē-thóng sìn-sit',
+'allmessagesname'               => 'Miâ',
+'allmessagesdefault'            => 'Siat piān ê bûn-jī',
+'allmessagescurrent'            => 'Bo̍k-chêng ê bûn-jī',
+'allmessagestext'               => 'Chia lia̍t chhut só·-ū tī MediaWiki: miâ-khong-kan ê hē-thóng sìn-sit.',
+'allmessagesnotsupportedDB'     => "這頁袂當用得,因為'''\$wgUseDatabaseMessages'''已經停用。",
+'allmessages-filter-legend'     => '過濾器',
+'allmessages-filter-unmodified' => '無修改過',
+'allmessages-filter-all'        => '全部',
+'allmessages-filter-modified'   => '修改',
+'allmessages-prefix'            => '欲做過濾的頭前文字:',
+'allmessages-language'          => '話語:',
+'allmessages-filter-submit'     => '來去',
 
 # Thumbnails
-'thumbnail-more'  => 'Hòng-tōa',
-'filemissing'     => 'Bô tóng-àn',
-'thumbnail_error' => '產生小圖時錯誤:$1',
+'thumbnail-more'           => 'Hòng-tōa',
+'filemissing'              => 'Bô tóng-àn',
+'thumbnail_error'          => '產生小圖時錯誤:$1',
+'thumbnail_dest_directory' => '無法度建立目標的目錄',
 
 # Special:Import
-'import'                 => 'Su-ji̍p ia̍h',
-'import-upload-filename' => '檔案名稱:',
+'import'                     => 'Su-ji̍p ia̍h',
+'import-interwiki-submit'    => '輸入',
+'import-interwiki-namespace' => '目標名空間:',
+'import-upload-filename'     => '檔案名稱:',
+'import-comment'             => '註釋:',
+'importstart'                => '當咧輸入頁面...',
+'importunknownsource'        => '毋捌的輸入來源類型',
+'importnotext'               => '空的抑是無字',
+'importsuccess'              => '輸入完成!',
+'importnofile'               => '無輸入的檔案有上載。',
+'importuploaderrorsize'      => '輸入的檔案上載失敗,
+檔案大過通上載的量。',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage'             => 'Lí chit ê iōng-chiá ê ia̍h',
@@ -2309,10 +2533,12 @@ Lí ē-sái khoàⁿ i ê goân-sú-bé.',
 
 # E-mail address confirmation
 'confirmemail'              => 'Khak-jīn e-mail chū-chí',
+'confirmemail_noemail'      => '佇你的[[Special:Preferences|設定]],你無設一个會用得的電子批地址。',
 'confirmemail_text'         => 'Sú-iōng e-mail kong-lêng chìn-chêng tio̍h seng khak-jīn lí ê e-mail chū-chí ū-hāu. Chhi̍h ē-pêng hit-ê liú-á thang kià 1 tiuⁿ khak-jīn phoe hō· lí. Hit tiuⁿ phoe lāi-bīn ū 1 ê te̍k-sû liân-kiat. Chhiáⁿ iōng liû-lám-khì khui lâi khoàⁿ, án-ne tō ē-tit khak-jīn lí ê chū-chí ū-hāu.',
 'confirmemail_send'         => 'Kià khak-jīn phoe',
 'confirmemail_sent'         => 'Khak-jīn phoe kià chhut-khì ah.',
 'confirmemail_invalid'      => 'Bô-hāu ê khak-jīn pian-bé. Pian-bé khó-lêng í-keng kòe-kî.',
+'confirmemail_needlogin'    => '你愛$1去確定你的電子批地址。',
 'confirmemail_success'      => 'í ê e-mail chū-chí khak-jīn oân-sêng. Lí ē-sái teng-ji̍p, khai-sí hiáng-siū chit ê wiki.',
 'confirmemail_loggedin'     => 'Lí ê e-mail chū-chí í-keng khak-jīn ū-hāu.',
 'confirmemail_error'        => 'Pó-chûn khak-jīn chu-sìn ê sî-chūn hoat-seng būn-tê.',
@@ -2350,8 +2576,12 @@ Nā-chún *m̄-sī* lí, chhiáⁿ khui ē-kha chit-ê liân-kiat,  chhú-siau k
 $5
 
 Chit tiuⁿ phoe ê khak-jīn-bé ē chū-tōng tī $4 kòe-kî.',
+'confirmemail_invalidated'  => '電子批的確認已經取消。',
 'invalidateemail'           => '取消電子批的確認。',
 
+# Delete conflict
+'recreate' => '重做',
+
 # action=purge
 'confirm-purge-top' => 'Kā chit ia̍h ê cache piàⁿ tiāu?',
 
@@ -2471,8 +2701,87 @@ Chit tiuⁿ phoe ê khak-jīn-bé ē chū-tōng tī $4 kòe-kî.',
 'htmlform-selectorother-other' => '其他',
 
 # New logging system
-'revdelete-restricted'   => '已經共限制用佇管裡員',
-'revdelete-unrestricted' => '徙走對管裡員的限制',
-'newuserlog-byemail'     => '用電子批寄密碼',
+'revdelete-content-hid'               => '內容藏起來',
+'revdelete-summary-hid'               => '編輯藏起的摘要',
+'revdelete-uname-hid'                 => '共用者名稱藏起來',
+'revdelete-content-unhid'             => '恢復內容',
+'revdelete-summary-unhid'             => '編輯恢復的摘要',
+'revdelete-uname-unhid'               => '恢復用者名稱',
+'revdelete-restricted'                => '已經共限制用佇管裡員',
+'revdelete-unrestricted'              => '徙走對管裡員的限制',
+'logentry-move-move-noredirect'       => '$1共頁面$3徙去$4,閣無留轉向頁',
+'logentry-move-move_redir'            => '$1透過轉向,共頁面$3徙去$4',
+'logentry-move-move_redir-noredirect' => '$1透過轉向,共$3頁面徙去$4,無留轉向頁',
+'logentry-patrol-patrol'              => '$1共$3頁的$4修訂本記做巡過',
+'logentry-patrol-patrol-auto'         => '$1自動共頁面$3的版本$4記做巡過',
+'logentry-newusers-newusers'          => '$1建立一个用者口座',
+'logentry-newusers-create'            => '$1建立一个用者口座',
+'logentry-newusers-create2'           => '$1建立口座$3',
+'logentry-newusers-autocreate'        => '口座$1已經自動建立',
+'newuserlog-byemail'                  => '用電子批寄密碼',
+
+# Feedback
+'feedback-bugornote' => '若你欲詳細寫一个技術問題,請[$1 報告一隻臭蟲]。
+抑是,你會當用下跤簡單的表,你的意見會加佇頁面“[$3 $2]”,而且有你的用戶名佮你用的佗一種瀏覽器。',
+'feedback-subject'   => '題目:',
+'feedback-message'   => '信息:',
+'feedback-cancel'    => '取消',
+'feedback-submit'    => '送出回饋',
+'feedback-adding'    => '當咧加回饋到頁面...',
+'feedback-error1'    => '錯誤:對API送來的結果(無法判斷)。',
+'feedback-error2'    => '錯誤:編輯失敗',
+'feedback-error3'    => '錯誤:API 無回應',
+'feedback-thanks'    => '多謝,你的回饋已經貼佇"[$2 $1]"的頁面。',
+'feedback-close'     => '完成',
+'feedback-bugcheck'  => '誠好,拄檢查過,彼無佇[$1發現過的臭蟲]內底。',
+'feedback-bugnew'    => '我已經檢查過。報告一个新臭蟲。',
+
+# API errors
+'api-error-badaccess-groups'              => '你無允准上載檔案到這个Wiki網站。',
+'api-error-badtoken'                      => '內部錯誤:標記失效。',
+'api-error-copyuploaddisabled'            => '佇這个伺服器無用透過網址(URL)上載的功能。',
+'api-error-duplicate'                     => '佇網站內底另外有{{PLURAL:$1|[$2个]|[$2个]}}仝款的檔案。',
+'api-error-duplicate-archive'             => '佇網站內底{{PLURAL:$1|[$2个]|[$2个]}}仝款的檔案,毋過已經刣掉。',
+'api-error-duplicate-archive-popup-title' => '仝款的{{PLURAL:$1|檔案|檔案}}已經共刣掉。',
+'api-error-duplicate-popup-title'         => '仝款的 {{PLURAL:$1|檔案|檔案}}。',
+'api-error-empty-file'                    => '你送出來的檔案是空的。',
+'api-error-emptypage'                     => '袂當開空頁。',
+'api-error-fetchfileerror'                => '內部錯誤:掠檔案的時陣有一寡問題。',
+'api-error-file-too-large'                => '你送出來的檔案傷過大。',
+'api-error-filename-tooshort'             => '檔案名傷短。',
+'api-error-filetype-banned'               => '這類的檔案被禁止。',
+'api-error-filetype-missing'              => '檔案名稱尾仔欠類型。',
+'api-error-hookaborted'                   => '你欲做的編輯因為擴展鈎(extension hook)去跳開。',
+'api-error-http'                          => '內部錯誤:連接袂到伺服器。',
+'api-error-illegal-filename'              => '無合用的檔案名稱。',
+'api-error-internal-error'                => '內部錯誤:佇處理你的上載的時陣,這个Wiki拄著一寡問題。',
+'api-error-invalid-file-key'              => '內部錯誤:佇臨時囥位揣無檔案。',
+'api-error-missingparam'                  => '內部錯誤:請求欠參數。',
+'api-error-missingresult'                 => '內部錯誤:無確定拷備是毋是有成功。',
+'api-error-mustbeloggedin'                => '你愛登入才通上載檔案。',
+'api-error-mustbeposted'                  => '內部錯誤:請求愛用HTTP POST。',
+'api-error-noimageinfo'                   => '上載有成功,毋過伺服器無予咱彼个檔案的任何資料。',
+'api-error-nomodule'                      => '內部錯誤:無掛上載套件。',
+'api-error-ok-but-empty'                  => '內部錯誤:伺服器無回應。',
+'api-error-overwrite'                     => '袂使覆寫已經佇咧的檔案',
+'api-error-stashfailed'                   => '內部錯誤:伺服器做無到保存臨時檔案。',
+'api-error-timeout'                       => '伺服器佇預期的時間內無回應。',
+'api-error-unclassified'                  => '有一个無啥清楚的錯誤。',
+'api-error-unknown-code'                  => '毋知的錯誤:"$1"。',
+'api-error-unknown-error'                 => '內部錯誤:佇欲上載你檔案的時陣有一寡問題。',
+'api-error-unknown-warning'               => '毋知的警告:"$1"。',
+'api-error-unknownerror'                  => '毋知的錯誤:"$1"。',
+'api-error-uploaddisabled'                => '佇這个Wiki袂當上載。',
+'api-error-verification-error'            => '這个檔案可能已經毀掉,抑是檔案尾仔名稱毋著。',
+
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|秒|秒}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|分鐘|分鐘}}',
+'duration-hours'     => '$1 {{PLURAL:$1|點鐘|點鐘}}',
+'duration-days'      => '$1 {{PLURAL:$1|工|工}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|禮拜|禮拜}}',
+'duration-years'     => '$1 {{PLURAL:$1|冬|冬}}',
+'duration-decades'   => '$1 {{PLURAL:$1|十冬|十冬}}',
+'duration-centuries' => '$1 {{PLURAL:$1|百年|百年}}',
 
 );
index 6fbbf92..52c76d0 100644 (file)
@@ -735,6 +735,9 @@ $2",
 'ns-specialprotected'  => 'Pagina\'s in de naamruimte "{{ns:special}}" kunnen niet bewerkt worden.',
 'titleprotected'       => "Het aanmaken van deze pagina is beveiligd door [[User:$1|$1]].
 De gegeven reden is ''$2''.",
+'filereadonlyerror'    => 'Het was niet mogelijk het bestand "$1" aan te passen omdat de bestandsrepository "$2" op dit moment alleen-lezen is.
+
+De opgegeven reden is "\'\'$3\'\'".',
 
 # Virus scanner
 'virus-badscanner'     => "Onjuiste configuratie: onbekende virusscanner: ''$1''.",
@@ -1902,6 +1905,7 @@ Als het probleem aanhoudt, neem dan contact op met een [[Special:ListUsers/sysop
 'backend-fail-closetemp'     => 'Het was niet mogelijk een tijdelijk bestand te sluiten.',
 'backend-fail-read'          => 'Het was niet mogelijk het bestand $1 te lezen.',
 'backend-fail-create'        => 'Het was niet mogelijk het bestand $1 aan te maken.',
+'backend-fail-maxsize'       => 'Het was niet mogelijk het bestand $1 aan te maken omdat het groter is dan {{PLURAL:$2|één byte|$2 bytes}}.',
 'backend-fail-readonly'      => 'Het opslagbackend "$1" kan op dit moment alleen gelezen worden. De opgegeven reden was: "$2"',
 'backend-fail-synced'        => 'Het bestand "$1" bevindt zich in een inconsistente toestand in de interne opslagbackends.',
 'backend-fail-connect'       => 'Het was niet mogelijk een verbinding te maken met het opslagbackend "$1".',
@@ -1909,6 +1913,9 @@ Als het probleem aanhoudt, neem dan contact op met een [[Special:ListUsers/sysop
 'backend-fail-contenttype'   => 'Kon het inhoudstype van het bestand om op "$1" op te slaan niet bepalen.',
 'backend-fail-batchsize'     => 'Taak met $1 {{PLURAL:$1|bestandshandeling|bestandshandelingen}} in het opslagbackend; de limiet is $2 {{PLURAL:$2|handeling|handelingen}}.',
 
+'filejournal-fail-dbconnect' => 'Het was niet mogelijk een verbinding te maken met de journaldatabase voor het opslagbackend "$1".',
+'filejournal-fail-dbquery'   => 'Het was niet mogelijk de journaldatabase bij te werken voor het opslagbackend "$1".',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Het was niet mogelijk "$1" vrij te geven; dit object is niet vergrendeld.',
 'lockmanager-fail-closelock'   => 'Het was niet mogelijk het vergrendelingsbestand voor "$1" te sluiten.',
@@ -2247,6 +2254,11 @@ U kunt ook kiezen voor specifieke logboeken en filteren op gebruiker (hoofdlette
 Mogelijk bevatte de naam karakters die niet gebruikt mogen worden in paginanamen.',
 'allpages-bad-ns'   => '{{SITENAME}} heeft geen naamruimte "$1".',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'U bekijkt een cacheversie van deze pagina, die maximaal $1 oud is.',
+'cachedspecial-viewing-cached-ts'  => 'U bekijkt een cacheversie van deze pagina, die mogelijk niet volledig is bijgewerkt.',
+'cachedspecial-refresh-now'        => 'Meest recente weergeven.',
+
 # Special:Categories
 'categories'                    => 'Categorieën',
 'categoriespagetext'            => "De volgende {{PLURAL:$1|categorie bevat|categorieën bevatten}} pagina's of mediabestanden.
@@ -4068,4 +4080,14 @@ Anders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw commentaar za
 'api-error-uploaddisabled'                => 'Uploaden is niet mogelijk in deze wiki.',
 'api-error-verification-error'            => 'Dit bestand is mogelijk beschadigd of heeft een onjuiste extensie.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|seconde|seconden}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|minuut|minuten}}',
+'duration-hours'     => '$1 {{PLURAL:$1|uur|uren}}',
+'duration-days'      => '$1 {{PLURAL:$1|dag|dagen}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|week|weken}}',
+'duration-years'     => '$1 {{PLURAL:$1|jaar|jaar}}',
+'duration-decades'   => '$1 {{PLURAL:$1|decennium|decennia}}',
+'duration-centuries' => '$1 {{PLURAL:$1|eeuw|eeuwen}}',
+
 );
index c4f8c25..25a3f17 100644 (file)
@@ -325,7 +325,7 @@ $messages = array(
 'thu'           => 'ଗୁରୁବାର',
 'fri'           => 'ଶୁକ୍ରବାର',
 'sat'           => 'ଶନିବାର',
-'january'       => 'à¬\9cାନà­\81à¬\86ରà­\80',
+'january'       => 'à¬\9cାନà­\81à¬\86ରି',
 'february'      => 'ଫେବୁଆରି',
 'march'         => 'ମାର୍ଚ',
 'april'         => 'ଏପ୍ରିଲ',
@@ -337,7 +337,7 @@ $messages = array(
 'october'       => 'ଅକ୍ଟୋବର',
 'november'      => 'ନଭେମ୍ବର',
 'december'      => 'ଡିସେମ୍ବର',
-'january-gen'   => 'à¬\9cାନà­\81à¬\86ରà­\80',
+'january-gen'   => 'à¬\9cାନà­\81à¬\86ରି',
 'february-gen'  => 'ଫେବୁଆରି',
 'march-gen'     => 'ମାର୍ଚ',
 'april-gen'     => 'ଏପ୍ରିଲ',
@@ -411,11 +411,11 @@ $messages = array(
 'vector-action-undelete'         => 'ଲିଭାଇବେ ନାହିଁ',
 'vector-action-unprotect'        => 'କିଳିବେ ନାହିଁ',
 'vector-simplesearch-preference' => 'ଆହୁରି ଅଧିକ ଖୋଜା ମତାମତ ଗୁଡ଼ିକ ସଚଳ କରିବେ (କେବଳ ଭେକ୍ଟର ସ୍କିନ)',
-'vector-view-create'             => 'ତିà¬\86ରି',
+'vector-view-create'             => 'à¬\97ଢ଼ନà­\8dତà­\81',
 'vector-view-edit'               => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
 'vector-view-history'            => 'ଇତିହାସ',
 'vector-view-view'               => 'ପଢ଼ନ୍ତୁ',
-'vector-view-viewsource'         => 'à¬\89ତà­\8dସ ଦେଖିବେ',
+'vector-view-viewsource'         => 'ମà­\82ଳାଧାର ଦେଖିବେ',
 'actions'                        => 'କାମ',
 'namespaces'                     => 'ନେମସ୍ପେସ',
 'variants'                       => 'ନିଆରା',
@@ -519,9 +519,9 @@ $1',
 'youhavenewmessagesmulti' => '$1 ତାରିଖରେ ନୂଆ ଚିଠିଟିଏ ଆସିଛି',
 'editsection'             => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
 'editold'                 => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
-'viewsourceold'           => 'à¬\89ତà­\8dସ ଦେଖିବେ',
+'viewsourceold'           => 'ମà­\82ଳାଧାର ଦେଖିବେ',
 'editlink'                => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
-'viewsourcelink'          => 'à¬\89ତà­\8dସ ଦେଖିବେ',
+'viewsourcelink'          => 'ମà­\82ଳାଧାର ଦେଖିବେ',
 'editsectionhint'         => '$1 ଭାଗଟିକୁ ବଦଳାଇବେ',
 'toc'                     => 'ଭିତର ଚିଜ',
 'showtoc'                 => 'ଦେଖାଇବେ',
@@ -618,7 +618,7 @@ $1',
 'wrong_wfQuery_params' => 'wfQuery() ପାଇଁ ଭୁଲ ପାରାମିଟର<br />
 କାମ: $1<br />
 ଖୋଜା ପ୍ରଶ୍ନ: $2',
-'viewsource'           => 'à¬\89ତà­\8dସ ଦେଖିବେ',
+'viewsource'           => 'ମà­\82ଳାଧାର ଦେଖିବେ',
 'viewsource-title'     => '$1 ନିମନ୍ତେ ଆଧାର ଦେଖିବେ',
 'actionthrottled'      => 'କାମଟି ବନ୍ଦ କରିଦିଆଗଲା',
 'actionthrottledtext'  => 'ସ୍ପାମକୁ ବନ୍ଦ କରିବା ନିମନ୍ତେ ଏକ ଅଳ୍ପ ସମୟ ବିରତି ଭିତରେ ଆପଣଙ୍କୁ ଏହି କାମଟୀ ବାରମ୍ବାର କରିବାକୁ ଅନୁମତି ଦିଆଯାଉନାହିଁ ଓ ଆପଣ ସୀମା ପାର କରିଯାଇଛନ୍ତି ।
@@ -668,10 +668,10 @@ $2',
 'userlogout'                 => 'ଲଗ ଆଉଟ',
 'notloggedin'                => 'ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି',
 'nologin'                    => 'ଖାତାଟିଏ ନାହିଁ? $1।',
-'nologinlink'                => 'ନà­\81à¬\86 à¬\96ାତାà¬\9fିà¬\8f à¬\96à­\8bଲିବା',
+'nologinlink'                => 'ନà­\81à¬\86 à¬\96ାତାà¬\9fିà¬\8f à¬\96à­\8bଲନà­\8dତà­\81',
 'createaccount'              => 'ନୁଆ ଖାତା ଖୋଲିବା',
 'gotaccount'                 => 'ଆଗରୁ ଖାତାଟିଏ ଅଛି କି? $1.',
-'gotaccountlink'             => 'ଲଗଇନ',
+'gotaccountlink'             => 'ଲଗ ଇନ',
 'userlogin-resetlink'        => 'ଲଗଇନ ତଥ୍ୟ ସବୁ ଭୁଲିଗେଲେକି?',
 'createaccountmail'          => 'ଇ-ମେଲ ରୁ',
 'createaccountreason'        => 'କାରଣ:',
@@ -1191,7 +1191,7 @@ $1",
 'mergehistory-header'              => 'ଏହି ପୃଷ୍ଠାଟି ଏକ ମୂଳାଧାର ଥିବା ପୃଷ୍ଠାର ଇତିହାସକୁ ଏକ ନୂଆ ପୃଷ୍ଠାରେ ମିଶାଇଦେବାରେ ଏହି ପୃଷ୍ଠା ଆପଣଙ୍କୁ ଅନୁମତି ଦେଇଥାଏ ।
 ମନେ ରଖନ୍ତୁ ଯେ ଏହି ବଦଳ ପୃଷ୍ଠା ଇତିହାସ ନଥିରେ ସାଇତାହୋଇ ରହିବ ।',
 'mergehistory-box'                 => 'ଦୁଇଟି ପୃଷ୍ଠାର ସଙ୍କଳନ ଯୋଡ଼ିଦେବେ:',
-'mergehistory-from'                => 'à¬\89ତà­\8dସ ପୃଷ୍ଠା:',
+'mergehistory-from'                => 'ମà­\82ଳାଧାର ପୃଷ୍ଠା:',
 'mergehistory-into'                => 'ଲକ୍ଷ ପୃଷ୍ଠା:',
 'mergehistory-list'                => 'ଯୋଡ଼ାଯାଇପାରିବା ଭଳି ସମ୍ପାଦନା ଇତିହାସ',
 'mergehistory-merge'               => 'ଏହି [[:$1]] ସଂସ୍କରଣଟି [[:$2]] ସହ ଯୋଡ଼ାଯାଇପାରିବ ।
@@ -1813,9 +1813,9 @@ $1',
 
 # img_auth script messages
 'img-auth-accessdenied'     => 'ଭିତରକୁ ପଶିବାକୁ ବାରଣ କରାଗଲା',
-'img-auth-nopathinfo'       => 'PATH_INFO ମିଳୁ ନାହିଁ।
-à¬\86ପଣà¬\99à­\8dà¬\95 à¬¸à¬°à­\8dଭରà¬\95à­\81 à¬\8fହି à¬¤à¬¥à­\8dà­\9fà¬\9fିà¬\95à­\81 à¬ªà¬ à¬¾à¬\87ବା à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬¸à¬\9cଡ଼ାଯାଇନାହିଁ ।
-à¬\8fହା à¬¸à¬¿à¬\9cିà¬\86à¬\87-à¬\9aାଳିତ à¬¹à­\8bà¬\87ପାରà­\87 à¬\93 img_auth ରେ କାମକରୁନଥାଇପାରେ  ।
+'img-auth-nopathinfo'       => 'ପଥ_ବିବରଣୀ ମିଳୁ ନାହିଁ।
+à¬\86ପଣà¬\99à­\8dà¬\95 à¬¸à¬°à­\8dଭରରà­\87 à¬\8fହି à¬¤à¬¥à­\8dà­\9fà¬\9fିà¬\95à­\81 à¬ªà¬ à¬¾à¬\87ବା à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬¬à­\8dà­\9fବସà­\8dଥା à¬\95ରାଯାଇନାହିଁ ।
+à¬\8fହା à¬¸à¬¿à¬\9cିà¬\86à¬\87-à¬\86ଧାରିତ à¬¹à­\8bà¬\87ପାରà­\87 à¬\93 à¬\86à¬\87à¬\8fମà¬\9cି_à¬\85à¬\89ଥରେ କାମକରୁନଥାଇପାରେ  ।
 https://www.mediawiki.org/wiki/Manual:Image_Authorization ଦେଖନ୍ତୁ ।',
 'img-auth-notindir'         => 'ଅନୁରୋଧ କରାଯାଇଥିବା ପଥ ସଂରଚିତ ଅପଲୋଡ଼ ତାଲିକା ନୁହେଁ ।',
 'img-auth-badtitle'         => '"$1"ରୁ ଏକ ସଠିକ ଶିରୋନାମା ଗଠନ କରିବାରେ ଅସଫଳ ହେଲୁଁ ।',
@@ -2054,7 +2054,7 @@ A page is treated as disambiguation page if it uses a template which is linked f
 'protectedpagestext'      => 'ଏହି ତଳଲିଖିତ ପୃଷ୍ଠାମାନ ଘୁଞ୍ଚାଇବାରୁ ବା ସମ୍ପାଦନାରୁ କିଳାଯାଇଅଛି',
 'protectedpagesempty'     => 'ଏହି ସବୁ ସଜାଣି ସହ ଗୋଟିଏ ବି ପୃଷ୍ଠା ଏବେ କିଳାଯାଇ ନାହିଁ ।',
 'protectedtitles'         => 'କିଳାଯାଇଥିବା ଶିରୋନାମାମାନ',
-'protectedtitlestext'     => 'ତଲାଲିଖିତ ଶିରୋନାମା ସବୁ ତିଆରି କରିବାରୁ କିଳାଯାଇଅଛି ।',
+'protectedtitlestext'     => 'ତଳଲିଖିତ ଶିରୋନାମା ସବୁ ତିଆରି କରିବାରୁ କିଳାଯାଇଅଛି ।',
 'protectedtitlesempty'    => 'ଏହି ସବୁ ସଜାଣି ସହ ଗୋଟିଏ ବି ପୃଷ୍ଠା ଏବେ କିଳାଯାଇ ନାହିଁ ।',
 'listusers'               => 'ବ୍ୟବହାରକାରୀଙ୍କ ତାଲିକା',
 'listusers-editsonly'     => 'କେବଳ କିଛି ସମ୍ପାଦନା କରିଥିବା ସଭ୍ୟମାନଙ୍କୁ ଦେଖାଇବେ',
@@ -2404,7 +2404,7 @@ $2ଙ୍କ ଦେଇ ଶେଷଥର ହୋଇଥିବା ସଂସ୍କର
 # Restrictions (nouns)
 'restriction-edit'   => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
 'restriction-move'   => 'ଘୁଞ୍ଚାଇବେ',
-'restriction-create' => 'ତିà¬\86ରି',
+'restriction-create' => 'à¬\97ଢ଼ନà­\8dତà­\81',
 'restriction-upload' => 'ଅପଲୋଡ଼ କରନ୍ତୁ',
 
 # Restriction levels
@@ -3321,7 +3321,7 @@ $1',
 'exif-lightsource-18'  => 'ମାନକ ଆଲୁଅ B',
 'exif-lightsource-19'  => 'ମାନକ ଆଲୁଅ C',
 'exif-lightsource-24'  => 'ISO ଷ୍ଟୁଡ଼ିଓ ଟଙ୍ଗଷ୍ଟନ',
-'exif-lightsource-255' => 'ବାà¬\95ି à¬\86ଲà­\81à¬\85 à¬¸à­\8dରà­\8bତ',
+'exif-lightsource-255' => 'ବାà¬\95ି à¬²à¬¾à¬\87à¬\9f à¬¸à­\8bରà­\8dସ',
 
 # Flash modes
 'exif-flash-fired-0'    => 'ଫ୍ଲାସ କାମ କଲାନାହିଁ',
index 7cbc73c..5a6e04c 100644 (file)
@@ -49,9 +49,6 @@ $namespaceAliases = array(
        'Категорийы_тыххæй_дискусси'  => NS_CATEGORY_TALK,
 );
 
-// Remove Russian aliases
-$namespaceGenderAliases = array();
-
 $magicWords = array(
        'redirect'                => array( '0', '#РАРВЫСТ', '#перенаправление', '#перенапр', '#REDIRECT' ),
        'img_right'               => array( '1', 'рахиз', 'справа', 'right' ),
@@ -83,6 +80,7 @@ $messages = array(
 'tog-watchdeletion'           => 'Æз цы фæрстæ аппарын, уыдонмæ мæ цæст дарын мæ фæнды',
 'tog-minordefault'            => 'Æппæт ивддзинæдтæ банысан кæн куыд чысылтæ',
 'tog-previewontop'            => 'Разæркасты рудзынг ивыны рудзынджы уæлдæр',
+'tog-previewonfirst'          => 'Æвдисын иу разæркаст фыццаг ивды рæстæджы',
 'tog-nocache'                 => 'Ахицæн кæнын браузеры кешкæнынад',
 'tog-enotifwatchlistpages'    => 'Электронон постæй мæм хъуысынгæнинаг æрвыст уа, æз цы фæрстæм мæ цæст дарын, уыдонæй иу куы ивд æрцæуа, уæд',
 'tog-enotifusertalkpages'     => 'Электронон постæй мæм хъуысынгæнинаг æрвыст уа, мæ тæрхоны фарс куы ивд æрцæуа, уæд',
@@ -92,21 +90,30 @@ $messages = array(
 'tog-oldsig'                  => 'Ныры къухæрфыст:',
 'tog-fancysig'                => 'Сæвæрын къухæрфыст викитекстæй (æнæ хæдæвзæргæ æрвитæнæй)',
 'tog-externaleditor'          => 'Архайын æддаг ивæнæй (æрмæст эксперттæн, домы сæрмагонд æвæрдтытæ компьютерыл. [//www.mediawiki.org/wiki/Manual:External_editors Лæмбынæг.])',
+'tog-externaldiff'            => 'Архайын æндæр иртасæнæй (æрмæст эксперттæн, домы сæрмагонд æвæрдтытæ компьютерыл. [//www.mediawiki.org/wiki/Manual:External_editors Лæмбынæг.])',
 'tog-showjumplinks'           => 'Тагъд æрвитæнтæй пайда кæн',
+'tog-uselivepreview'          => 'Архайын тагъд разбакастæй (домы JavaScript) (эксперименталон)',
 'tog-watchlisthideown'        => 'Айсын мæ ивдтытæ цæстдардæй',
 'tog-watchlisthidebots'       => 'Мæ цæстдарды номхыгъды роботты куыст бамбæхс',
 'tog-watchlisthideminor'      => 'Мæ цæстдарды номхыгъды чысыл ивддзинæдтæ бамбæхс',
+'tog-watchlisthideliu'        => 'Айсын системæмæ хызт архайджыты ивдтытæ мæ цæстдардæй',
+'tog-watchlisthideanons'      => 'Айсын æнæном архайджыты ивдтытæ мæ цæстдардæй',
 'tog-watchlisthidepatrolled'  => 'Айсын сгæрст ивдтытæ цæстдардæй',
 'tog-ccmeonemails'            => 'Æз электронон фыстæг æндæр архайæгæн куы рарвитын, уæд уыцы иу фыстæг мæхи адрисмæ дæр æрбацæуæд.',
+'tog-diffonly'                => 'Ма æвдис фарсы мидис иртасæны бынмæ',
 'tog-showhiddencats'          => 'Æмбæхст категоритæ æвдис',
+'tog-norollbackdiff'          => 'Рауадзын иртасæн раздæхты фæстæ',
 
 'underline-always'  => 'Æдзух',
 'underline-never'   => 'Никуы',
 'underline-default' => 'Браузеры куыд у',
 
 # Font style option in Special:Preferences
+'editfont-style'     => 'Ивæн бынаты шрифты стил:',
 'editfont-default'   => 'Браузеры куыд у',
 'editfont-monospace' => 'Æмуæрæх шрифт',
+'editfont-sansserif' => 'Sans-serif шрифт',
+'editfont-serif'     => 'Serif шрифт',
 
 # Dates
 'sunday'        => 'хуыцаубон',
@@ -172,6 +179,7 @@ $messages = array(
 'category-subcat-count-limited'  => 'Ацы категорийы мидæг ис {{PLURAL:$1|$1 дæлкатегори|$1 дæлкатегорийы}}.',
 'category-article-count'         => '{{PLURAL:$2|Ацы категорийы æрмæст иу фарс и.|Ацы категорийы $2 фарсæй {{PLURAL:$1|æвдыст у $1.|æвдыст сты $1 фарсы.}}}}',
 'category-article-count-limited' => 'Ацы категорийы мидæг {{PLURAL:$1|$1 фарс|$1 фарсы}} ис.',
+'category-file-count'            => '{{PLURAL:$2|Ацы категорийы æрмæст иу файл ис.|Ацы категорийы $2 файлæй {{PLURAL:$1|æвдыст у $1.|æвдыст сты $1.}}}}',
 'category-file-count-limited'    => 'Ацы категорийы {{PLURAL:$1|$1 файл|$1 файлы}} ис.',
 'listingcontinuesabbrev'         => '(дарддæргонд)',
 'index-category'                 => 'Индексгонд фæрстæ',
@@ -201,19 +209,21 @@ $messages = array(
 'faqpage'        => 'Project:FAQ',
 
 # Vector skin
-'vector-action-addsection' => 'Нæуæг ныхас бакæнын',
-'vector-action-delete'     => 'Аппарын',
-'vector-action-move'       => 'Ном ивын',
-'vector-action-protect'    => 'Сæхгæнын',
-'vector-action-undelete'   => 'Рацаразын',
-'vector-view-create'       => 'Скæнын',
-'vector-view-edit'         => 'Ивын',
-'vector-view-history'      => 'Истори',
-'vector-view-view'         => 'Кæсын',
-'vector-view-viewsource'   => 'Код кæсын',
-'actions'                  => 'Архайдтæ',
-'namespaces'               => 'Номдæттæ',
-'variants'                 => 'Варианттæ',
+'vector-action-addsection'       => 'Нæуæг ныхас бакæнын',
+'vector-action-delete'           => 'Аппарын',
+'vector-action-move'             => 'Ном ивын',
+'vector-action-protect'          => 'Сæхгæнын',
+'vector-action-undelete'         => 'Рацаразын',
+'vector-action-unprotect'        => 'Ивын хъахъхъæд',
+'vector-simplesearch-preference' => 'Баиу кæнын уæрæхгонд агурыны æххуыстæ (Вектор цармæн æрмæст)',
+'vector-view-create'             => 'Скæнын',
+'vector-view-edit'               => 'Ивын',
+'vector-view-history'            => 'Истори',
+'vector-view-view'               => 'Кæсын',
+'vector-view-viewsource'         => 'Код кæсын',
+'actions'                        => 'Архайдтæ',
+'namespaces'                     => 'Номдæттæ',
+'variants'                       => 'Варианттæ',
 
 'errorpagetitle'    => 'Рæдыд',
 'returnto'          => 'Фæстæмæ $1 фарсмæ.',
@@ -225,6 +235,7 @@ $messages = array(
 'searcharticle'     => 'Агурын',
 'history'           => 'Фарсы истори',
 'history_short'     => 'Истори',
+'updatedmarker'     => 'ноггонд мæ фæстаг æрбахызтæй',
 'printableversion'  => 'Мыхурмæ верси',
 'permalink'         => 'Ацы версимæ æрвитæн',
 'print'             => 'Мыхуыр',
@@ -236,6 +247,7 @@ $messages = array(
 'delete'            => 'Аппар',
 'deletethispage'    => 'Аппарын ацы фарс',
 'undelete_short'    => 'Рацаразын {{PLURAL:$1|иу ивд|$1 ивды}}',
+'viewdeleted_short' => 'Кæсын {{PLURAL:$1|иу хафт ивд|$1 хафт ивдтытæ}}',
 'protect'           => 'Сæхгæнын',
 'protect_change'    => 'баивын',
 'protectthispage'   => 'Сæхгæн ацы фарс',
@@ -263,10 +275,18 @@ $messages = array(
 'redirectedfrom'    => '(Ацы статьяйæ æрвыст: «$1»)',
 'redirectpagesub'   => 'Рарвысты фарс',
 'lastmodifiedat'    => 'Ацы фарс фæстаг хатт ивд æрцыд: $1, $2.',
+'viewcount'         => 'Ацы фарс домд æрцыд {{PLURAL:$1|иу хатт|$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) and the disambiguation template definition (see disambiguations).
@@ -283,6 +303,7 @@ $messages = array(
 'helppage'             => 'Help:Сæргæндтæ',
 'mainpage'             => 'Сæйраг фарс',
 'mainpage-description' => 'Сæйраг фарс',
+'policy-url'           => 'Project:Уагæвæрд',
 'portal'               => 'Архайджыты æхсæнад',
 'portal-url'           => 'Project:Архайджыты æхсæнад',
 'privacy'              => 'Хибардзинады политикæ',
@@ -571,6 +592,7 @@ $messages = array(
 'searchrelated'                    => 'хæстæг',
 'searchall'                        => 'иууылдæр',
 'showingresultsheader'             => "{{PLURAL:$5|Фæстиуæг '''$1''' '''$3'''-йæ|Фæстиуæджы '''$1 - $2''' '''$3'''-йæ}} '''{{grammar:dative|$4}}'''",
+'search-nonefound'                 => 'Ницы разындис домæнæн',
 'powersearch'                      => 'Сæрмагонд агуырд',
 'powersearch-legend'               => 'Сæрмагонд агуырд',
 'powersearch-redir'                => 'Рарвыстытæ дæр æвдис',
@@ -774,7 +796,7 @@ $3',
 'filehist-dimensions'     => 'Барæнтæ',
 'filehist-filesize'       => 'Файлы бæрцуат',
 'filehist-comment'        => 'Фиппаинаг',
-'imagelinks'              => 'Æрвитæнтæ файлмæ',
+'imagelinks'              => 'Файлæй архайд',
 'linkstoimage'            => 'Ацы нывæй пайда {{PLURAL:$1|кæны иу фарс|кæнынц ахæм фæрстæ}}:',
 'nolinkstoimage'          => 'Нæй ахæм фæрстæ, кæдон æрвитынц ацы файлмæ.',
 'sharedupload'            => 'Ацы файл у {{grammar:ablative|$1}} æмæ дзы гæнæн ис æндæр проекттæ дæр архайой.',
@@ -1035,6 +1057,7 @@ $3',
 # Namespace 8 related
 'allmessages'            => 'Системæйы уацтæ',
 'allmessagesname'        => 'Ном',
+'allmessagesdefault'     => 'Разæвæрд текст',
 'allmessages-filter-all' => 'Иууылдæр',
 'allmessages-language'   => 'Æвзаг:',
 
@@ -1146,12 +1169,34 @@ $3',
 'metadata'          => 'Метабæрæггæнæнтæ',
 'metadata-expand'   => 'Равдисын лæмбынæг афыст',
 'metadata-collapse' => 'Айсын лæмбынæг афыст',
+'metadata-fields'   => 'Нывы метарардтæ, кæдон ам сты ранымад, уыдзысты æвдыст нывы фарсыл, мета рардты бынат зылд куы уа.
+Иннæтæ уыдзысты æмбæхст разæвæрдæй.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* isospeedratings
+* focallength
+* artist
+* copyright
+* imagedescription
+* gpslatitude
+* gpslongitude
+* gpsaltitude',
 
 # EXIF tags
-'exif-imagewidth'   => 'Уæрх',
-'exif-imagelength'  => 'Бæрзæнд',
-'exif-artist'       => 'Чи йæ систа',
-'exif-languagecode' => 'Æвзаг',
+'exif-imagewidth'              => 'Уæрх',
+'exif-imagelength'             => 'Бæрзæнд',
+'exif-artist'                  => 'Автор',
+'exif-writer'                  => 'Фыссæг',
+'exif-languagecode'            => 'Æвзаг',
+'exif-iimversion'              => 'IIM-ы фæлтæр',
+'exif-iimcategory'             => 'Категори',
+'exif-iimsupplementalcategory' => 'Æндæр категоритæ',
+'exif-datetimeexpires'         => 'Ма архай ацы датæйы фæстæ',
+'exif-datetimereleased'        => 'Рауагъды датæ',
+'exif-identifier'              => 'Бæрæггæнæн',
 
 'exif-gaincontrol-0' => 'Нæй',
 
@@ -1163,13 +1208,18 @@ $3',
 'watchlistall2' => 'иууылдæр',
 'namespacesall' => 'иууылдæр',
 'monthsall'     => 'иууылдæр',
+'limitall'      => 'иууылдæр',
 
 # action=purge
 'confirm_purge_button' => 'Афтæ уæд!',
 
+# action=watch/unwatch
+'confirm-watch-button'   => 'Хорз',
+'confirm-unwatch-button' => 'Хорз',
+
 # Multipage image navigation
 'imgmultipageprev' => '← раздæры фарс',
-'imgmultipagenext' => 'фæдылдзог фарс →',
+'imgmultipagenext' => 'иннæ фарс →',
 'imgmultigo'       => 'Афтæ бакæн!',
 
 # Table pager
@@ -1188,7 +1238,9 @@ $3',
 'size-gigabytes' => '$1 ГБ',
 
 # Live preview
-'livepreview-failed' => 'Тагъд разæркастæй пайда кæнæн нæй. Хуымæтæджы разæркастæй пайда кæн.',
+'livepreview-loading' => 'Æвгæнгæ...',
+'livepreview-ready'   => 'Æвгæнгæ...Цæттæ!',
+'livepreview-failed'  => 'Тагъд разæркастæй пайда кæнæн нæй. Хуымæтæджы разæркастæй пайда кæн.',
 
 # Watchlist editor
 'watchlistedit-noitems'       => 'Дæ цæстдард афтид у.',
@@ -1202,16 +1254,40 @@ $3',
 'watchlisttools-edit' => 'Бакæсын æмæ ивын цæстдард рæгъ',
 'watchlisttools-raw'  => 'Ивын цæстдард рæгъы бындуртекст',
 
+# Core parser functions
+'duplicate-defaultsort' => '\'\'\'Сындæг:\'\'\' Разæвæрд сортгæнæн амонæн "$2" раздæры разæвæрд амонæн "$1"-ы бæсты лæууы.',
+
 # Special:Version
 'version'                  => 'Фæлтæр',
+'version-skins'            => 'Фæлыст',
+'version-other'            => 'Æндæр',
 'version-version'          => '(Фæлтæр $1)',
+'version-license'          => 'Лицензи',
+'version-poweredby-others' => 'æндæртæ',
 'version-software-version' => 'Верси',
 
+# Special:FilePath
+'filepath-page' => 'Файл:',
+
+# Special:FileDuplicateSearch
+'fileduplicatesearch-filename' => 'Файлы ном:',
+
 # Special:SpecialPages
 'specialpages' => 'Сæрмагонд фæрстæ',
 
+# External image whitelist
+'external_image_whitelist' => ' #Ныууадз ацы рæнхъ куыд у афтæ<pre>
+#Бавæр бындæр регуларон дзырды ххæйттæ (кæцы ис дыууæ слешы æхсæн //)
+#Уыдон уыдзысты æмхаст æддагон нывты URL-тимæ
+#Кæд нывы URL æмбæлы дзырдтимæ, уæд уыдзæн æвдыст куыд ныв, кæннæд та куыд æрвитæн нывмæ.
+#Рæнхъытæ, кæдон байдайынц #-йæ сты нымад куыд хъуыдытæ
+#Дамгъæ уавæр (стыр æви гыццыл) уæлдай у
+
+#Æвæр регуларон дзырдтæ ацы рæнхъы фæстæ. Ныууадз ацы рæнхъ куыд у афтæ</pre>',
+
 # Special:Tags
-'tags-edit' => 'ивын',
+'tag-filter' => '[[Special:Tags|Тегты]] фæрсудзæн:',
+'tags-edit'  => 'ивын',
 
 # Special:ComparePages
 'compare-page1'  => 'Фарс 1',
index 0885cf1..f9707be 100644 (file)
@@ -460,6 +460,9 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'accmailtitle'               => 'ਪਾਸਵਰਡ ਭੇਜਿਆ।',
 'accmailtext'                => '"$1" ਲਈ ਪਾਸਵਰਡ $2 ਨੂੰ ਭੇਜਿਆ ਗਿਆ।',
 'newarticle'                 => '(ਨਵਾਂ)',
+'newarticletext'             => "ਤੁਸੀਂ ਕਿਸੇ ਐਸੇ ਲਿੰਕ ਰਾਹੀਂ ਉਸ ਪੰਨੇ ਤੇ ਪੁੱਜੇ ਹੋ ਜੋ ਅਜੇ ਬਣਾਇਆ ਨਹੀਂ ਗਿਆ।
+ਪੰਨਾ ਬਨਾਉਣ ਲਈ  ਹੇਠ ਦਿੱਤੇ ਖਾਨੇ ਵਿਚ ਪਾਠ ਲਿਖੋ।(ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ [[{{MediaWiki:Helppage}}|ਮੱਦਦ ਪੰਨਾ]] ਦੇਖੋ)
+ਜੇ ਤੁਸੀਂ ਇੱਥੇ ਗਲਤੀ ਨਾਲ ਆਏ ਹੋ ਤਾਂ ਆਪਣੇ ਬਰਾਊਜ਼ਰ ਦੇ ਬੈਕ ('''back''') ਬਟਨ ਪਰ ਕਲਿਕ ਕਰੋ।",
 'noarticletext'              => 'ਫਿਲਹਾਲ ਇਸ ਪੰਨੇ ਤੇ ਐਸਾ ਕੋਈ ਪਾਠ ਨਹੀਂ ਹੈ।ਤੁਸੀਂ ਦੂਸਰੇ ਪੰਨਿਆਂ ਤੇ [[Special:Search/{{PAGENAME}}|ਇਸ ਪਾਠ ਦੀ ਖੋਜ]] ਕਰ ਸਕਦੇ ਹੋ।,<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ਸੰਭੰਧਿਤ ਖਾਤਿਆਂ ਵਿਚ ਖੋਜ ਸਕਦੇ ਹੋ],
 ਯਾ [{{fullurl:{{FULLPAGENAME}}|action=edit}} ਇਸ ਪੰਨੇ ਨੂੰ ਸੰਪਾਦਨ ਕਰ ਸਕਦੇ ਹੋ]</span>।',
 'noarticletext-nopermission' => '↓
@@ -698,6 +701,7 @@ $1 ਘੰਟੇ ਵਿੱਚ। ਨੁਕਸਾਨ ਤੋਂ ਬਚਣ ਲਈ, $
 'recentchangeslinked-title'   => '"$1" ਨਾਲ ਸੰਬੰਧਿਤ ਬਦਲਾਅ',
 'recentchangeslinked-summary' => 'ਇਹ ਸੂਚੀ ਊਨ੍ਹਾਂ ਪੰਨਿਆਂ ,ਜੋ ਇਕ ਖਾਸ ਪੰਨੇ ਨਾਲ ਸੰਬੰਧਿਤ ਹਨ, (ਯਾ ਕਿਸੇ ਖਾਸ ਸ਼੍ਰੇਣੀ ਦੇ ਮੈਂਬਰਾਂ) ਦੇ ਹਾਲ ਵਿਚ ਹੋਏ ਬਦਲਾਵਾਂ ਨੂੰ ਦਰਸ਼ਾਂਦੀ ਹੈ [[Special:Watchlist|ਤੁਹਾਡੀ ਦ੍ਰਿਸ਼ਟੀ ਗੋਚਰ ਸੂਚੀ]] ਵਿਚ ਮੌਜੂਦ ਪੰਨੇ ਮੋਟੇ ਅਖਰਾਂ ਵਿਚ ਦਿਖਾਈ ਦੇਣਗੇ।',
 'recentchangeslinked-page'    => 'ਸਫ਼ਾ ਨਾਂ:',
+'recentchangeslinked-to'      => 'ਇਸ ਦੇ ਬਦਲੇ ਇਸ ਪੰਨੇ ਨਾਲ ਜੁੜੇ ਪੰਨਿਆਂ ਵਿਚ ਹੋਏ ਬਦਲਾਅ ਦਿਖਾਓ',
 
 # Upload
 'upload'               => 'ਫਾਇਲ ਅੱਪਲੋਡ ਕਰੋ',
@@ -970,7 +974,13 @@ to upload files.',
 'whatlinkshere'            => 'ਇੱਥੇ ਕਿਹੜੇ ਲਿੰਕ',
 'whatlinkshere-title'      => '$1 ਨਾਲ ਜੁੜੇ ਹੋਏ ਪੰਨੇ',
 'whatlinkshere-page'       => 'ਸਫਾ:',
+'linkshere'                => "ਹੇਠ ਦਿੱਤੇ ਪੰਨੇ '''[[:$1]]''' ਨਾਲ ਜੋੜਦੇ ਹਨ।",
 'nolinkshere'              => "'''[[:$1]]'''ਨਾਲ ਮਿਲਦਾ ਜੁਲਦਾ ਕੋਈ ਪੰਨਾ ਨਹੀਂ ਹੈ।",
+'isredirect'               => 'ਰੀ-ਡਿਰੈਕਟ ਪੇਜ',
+'istemplate'               => 'ਟਾਕਰਾ ਕਰੋ',
+'isimage'                  => 'ਮਿਸਲ ਦੀ ਕੜੀ',
+'whatlinkshere-prev'       => '{{PLURAL:$1|ਪਿਛਲਾ|ਪਿਛਲੇ $1}}',
+'whatlinkshere-next'       => '{{PLURAL:$1|ਅਗਲਾ|ਅਗਲੇ $1}}',
 'whatlinkshere-links'      => '← ਲਿੰਕ',
 'whatlinkshere-hideredirs' => '$1 ਗੈਰਸਿਧਾ',
 'whatlinkshere-hidelinks'  => '$1 ਲਿੰਕ',
@@ -1139,6 +1149,7 @@ to upload files.',
 'widthheightpage' => '$1 × $2, $3 ਪੇਜ਼',
 'file-info'       => 'ਫਾਇਲ ਆਕਾਰ: $1, MIME ਕਿਸਮ: $2',
 'file-info-size'  => '$1 × $2 ਪਿਕਸਲ, ਫਾਇਲ ਆਕਾਰ: $3, MIME ਕਿਸਮ: $4',
+'file-nohires'    => 'ਇਸ ਤੌਂ ਜ਼ਿਆਦਾ ਰੈਜ਼ੋਲਊਸ਼ਨ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।',
 'svg-long-desc'   => 'SVG ਫਾਇਲ, nominally $1 × $2 pixels, file size: $3',
 'show-big-image'  => 'ਪੂਰਾ ਰੈਜ਼ੋਲੇਸ਼ਨ',
 
@@ -1198,6 +1209,7 @@ to upload files.',
 'exif-gpsspeed-m' => 'ਮੀਲ ਪ੍ਰਤੀ ਘੰਟਾ',
 
 # External editor support
+'edit-externally'      => 'ਬਾਹਰੀ ਫਾਰਮੂਲਾ ਲਗਾ ਕੇ ਇਸ ਮਿਸਲ ਨੂੰ ਸੰਪਾਦਨ ਕਰੋ।',
 'edit-externally-help' => '(ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਇ [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] ਇਥੇ ਦਬੋ)',
 
 # 'all' in various places, this might be different for inflected languages
index 816a528..eec0edd 100644 (file)
@@ -1809,6 +1809,7 @@ Jeśli problem będzie się powtarzał, skontaktuj się z [[Special:ListUsers/sy
 'backend-fail-closetemp'     => 'Nie można zamknąć pliku tymczasowego.',
 'backend-fail-read'          => 'Nie można odczytać pliku $1.',
 'backend-fail-create'        => 'Nie można utworzyć pliku $1.',
+'backend-fail-maxsize'       => 'Nie udało utworzyć pliku $1 ponieważ jest on większy niż {{PLURAL:$2|$2 bajt| $2 bajty| $2 bajtów}}.',
 'backend-fail-readonly'      => 'Interfejs magazynowania "$1" jest obecnie tylko do odczytu. Powód: "$2"',
 'backend-fail-synced'        => 'Plik "$1" jest w niespójnym stanie w ramach wewnętrznych funkcji magazynowania',
 'backend-fail-connect'       => 'Nie można nawiązać połączenia do wewnętrznych funkcji magazynowania "$1".',
index 84d0302..e6e0f75 100644 (file)
@@ -2413,12 +2413,12 @@ Për piasì che a contata sò fornitor ëd conession e che a lo anforma. As trat
 Për piasì, che an conferma che sossì a l'é pròpe lòn che a veul fé, e dzortut che a dësblocherà la base dat pì ampressa che a peul, an manera che tut a funsion-a torna coma che as dev, pen-a che a l'avrà finisse soa manutension.",
 'unlockdbtext'        => "Ën dësblocand la base dat as darà andaré a tuti j'Utent la possibilità dë fé 'd modìfiche a le pàgine ò dë fene ëd neuve, ëd cangé ij «sò gust», ëd modifiché soe liste 'd ròba da tnì sot euj, e pì an general dë fé tute cole operassion che a l'han da manca dë fé 'd modìfiche a la base dat.
 Për piasì, che an conferma che sòn a l'é da bon lòn che chiel a veul fé.",
-'lockconfirm'         => 'É, i veuj da bon, e sota mia responsabilità, bloché la base dat.',
-'unlockconfirm'       => ' É, da bon i veuj dësbloché la base dat, sota mia responsabilità personal.',
-'lockbtn'             => 'Blòca la base dat',
-'unlockbtn'           => 'Dësblòca la base dat',
-'locknoconfirm'       => "Che a varda che a l'é dësmentiasse dë spunté ël quadrèt ëd conferma.",
-'lockdbsuccesssub'    => 'Blocagi dla base dat fait',
+'lockconfirm'         => 'Bò, i veuj da bon, e sota mia responsabilità, bloché la base dij dat.',
+'unlockconfirm'       => 'Bò, da bon i veuj dësbloché la base dij dat, sota mia responsabilità përsonal.',
+'lockbtn'             => 'Bloché la base dij dat',
+'unlockbtn'           => 'Dësbloché la base dij dat',
+'locknoconfirm'       => "Che a varda che a l'é dësmentiasse dë sponté ël quadrèt ëd conferma.",
+'lockdbsuccesssub'    => 'Blocagi dla base dij dat fàit',
 'unlockdbsuccesssub'  => "Dësblocagi dla base dat fait, ël blòch a l'é stait gavà",
 'lockdbsuccesstext'   => "La base dat ëd {{SITENAME}} a l'è staita blocà.
 <br />Che as visa mach dë gavé ël blocagi pen-a che a l'ha finì soa manutension.",
index 1c5fb27..8766cbf 100644 (file)
@@ -319,6 +319,7 @@ $messages = array(
 'vector-view-viewsource'   => 'سرچينه کتل',
 'actions'                  => 'کړنې',
 'namespaces'               => 'نوم-تشيالونه',
+'variants'                 => 'ډولونه',
 
 'errorpagetitle'    => 'تېروتنه',
 'returnto'          => 'بېرته $1 ته وګرځه.',
@@ -515,6 +516,7 @@ $1',
 
 # Virus scanner
 'virus-badscanner'     => "بده سازېدنه: د ويروس ناڅرګنده ځيرڅار: ''$1''",
+'virus-scanfailed'     => 'ځيرڅارنه بريالۍ نه شوه (کوډ $1)',
 'virus-unknownscanner' => 'ناڅرګند ضدويروس:',
 
 # Login and logout pages
@@ -626,19 +628,22 @@ $1',
 'resetpass-temp-password'   => 'لنډمهالی پټنوم:',
 
 # Special:PasswordReset
-'passwordreset'              => 'پټنوم بياپرځايول',
-'passwordreset-text'         => 'د دې لپاره چې ستاسې د ګڼون بشپړې څرګندنې دربرېښليک شي نو دا فورمه ډکه کړۍ.',
-'passwordreset-legend'       => 'پټنوم بياپرځايول',
-'passwordreset-username'     => 'کارن-نوم:',
-'passwordreset-domain'       => 'شپول:',
-'passwordreset-email'        => 'برېښليک پته:',
-'passwordreset-emailtitle'   => 'د {{SITENAME}} د ګڼون څرګندنې',
-'passwordreset-emailelement' => 'کارن-نوم: $1
+'passwordreset'                   => 'پټنوم بياپرځايول',
+'passwordreset-text'              => 'د دې لپاره چې ستاسې د ګڼون بشپړې څرګندنې دربرېښليک شي نو دا فورمه ډکه کړۍ.',
+'passwordreset-legend'            => 'پټنوم بياپرځايول',
+'passwordreset-username'          => 'کارن-نوم:',
+'passwordreset-domain'            => 'شپول:',
+'passwordreset-capture'           => 'د پايلې برېښليک کتل غواړې؟',
+'passwordreset-email'             => 'برېښليک پته:',
+'passwordreset-emailtitle'        => 'د {{SITENAME}} د ګڼون څرګندنې',
+'passwordreset-emailelement'      => 'کارن-نوم: $1
 لنډمهاله پټنوم: $2',
-'passwordreset-emailsent'    => 'يو يادښتي برېښليک ولېږل شو.',
+'passwordreset-emailsent'         => 'يو يادښتي برېښليک ولېږل شو.',
+'passwordreset-emailsent-capture' => 'د يادونې لپاره يو برېښليک ولېږل شو، برېښليک په لاندې توګه ښودل شوی.',
 
 # Special:ChangeEmail
 'changeemail'          => 'برېښليک پته بدلول',
+'changeemail-header'   => 'د ګڼون برېښليک پته بدلول',
 'changeemail-oldemail' => 'اوسنۍ برېښليک پته:',
 'changeemail-newemail' => 'نوې برېښليک پته:',
 'changeemail-none'     => '(هېڅ)',
@@ -755,8 +760,8 @@ $1',
 'yourdiff'                         => 'توپيرونه',
 'copyrightwarning'                 => "لطفاً په پام کې وساتۍ چې ټولې هغه ونډې چې تاسې يې {{SITENAME}} کې ترسره کوی هغه د $2 له مخې د خپرولو لپاره ګڼل کېږي (د لانورو تفصيلاتو لپاره $1 وګورۍ). که تاسې نه غواړۍ چې په ليکنو کې مو په بې رحمۍ سره لاسوهنې (سمونې) وشي او د نورو په غوښتنه پسې لانورې هم خپرې شي، نو دلته يې مه ځای پر ځای کوی..<br />
 تاسې زمونږ سره دا ژمنه هم کوی چې تاسې پخپله دا ليکنه کښلې، او يا مو د ټولګړو پاڼو او يا ورته وړيا سرچينو نه کاپي کړې ده '''لطفاً د ليکوال د اجازې نه پرته د خوندي رښتو ليکنې مه خپروی!'''",
-'longpageerror'                    => "'''ستÙ\88Ù\86زÙ\87: Ú©Ù\88Ù\85 Ù\85تÙ\86 Ú\86Û\90 Ø¯Ù\84تÙ\87 ØªØ§Ø³Ù\88 Ù\84Ù\8aÚ©Ù\84Û\8cØ\8c $1 Ú©Ù\8aÙ\84Ù\88باÙ\8aÙ¼Ù\87 Ø§Ù\88Ú\96د Ø¯Û\8c Ø§Ù\88 Ø¯Ø§ Ø¯ Ù\87Ù\85دÛ\90 Ù\85Ø® Ø¯ Ù\84Ù\88Ú\93ترÙ\8aÙ\86 Ù¼Ø§Ú©Ù\84Ù\8a Ø¨Ø±Ù\8aدÙ\87Ø\8c $2 Ú©Ù\8aÙ\84Ù\88باÙ\8aÙ¼Ù\87Ø\8c Ú\85Ø®Ù\87 Ø§Ù\88Ú\96د Ø¯Û\8c.
-ستاسو متن نه شي خوندي کېدلای.'''",
+'longpageerror'                    => "'''تÛ\90رÙ\88تÙ\86Ù\87: Ú©Ù\88Ù\85 Ù\85تÙ\86 Ú\86Û\90 Ù\85Ù\88 Ù\84Ù\8aÚ©Ù\84Û\8c {{PLURAL:$1|Ù\8aÙ\88 Ú©Ù\8aÙ\84Ù\88باÙ\8aÙ¼Ù\87|$1 Ú©Ù\8aÙ\84Ù\88باÙ\8aÙ¼Ù\87}} Ø§Ù\88Ú\96د Ø¯Û\8cØ\8c Ú\86Û\90 Ø¯Ø§ Ù¾Ø®Ù¾Ù\84Ù\87 Ø¯ Ø­Ø¯ Ø§Ú©Ø«Ø± Ù\86Ù\87 {{PLURAL:$2|Ù\8aÙ\88 Ú©Ù\8aÙ\84Ù\88باÙ\8aÙ¼Ù\87|$2 Ú©Ù\8aÙ\84Ù\88باÙ\8aÙ¼Ù\87}} Ø§Ù\88Ú\96د Ø¯Û\8c.'''
+ستاسې متن نه شي خوندي کېدلای.",
 'protectedpagewarning'             => "'''ګواښنه: همدا مخ تړل شوی او يوازې هغه کارنان په دې مخ کې بدلونونه راوستلای شي چې د پازوالۍ د آسانتياوو نه برخمن دي.'''
 ستاسې د مالوماتو لپاره د وروستني يادښت متن دلته په دې توګه راوړل شوی:",
 'semiprotectedpagewarning'         => "'''پاملرنه:''' دا مخ تړل شوی او يواځې ثبت شوي کارنان کولای شي چې په دې مخ کې بدلونونه راولي.
@@ -794,8 +799,9 @@ $1',
 پدې نوم د پخوا نه يو مخ شته.',
 
 # Parser/template warnings
-'post-expand-template-inclusion-warning' => "'''ګواښنه:''' دا کينډۍ د خپل ټاکلي بريد نه ډېره لويه ده.
+'post-expand-template-inclusion-warning'  => "'''ګواښنه:''' دا کينډۍ د خپل ټاکلي بريد نه ډېره لويه ده.
 ځينې کينډۍ به په کې ګډې نه شي.",
+'post-expand-template-inclusion-category' => 'هغه مخونه چې په کې د کارېدلو کينډيو شمېر له ټاکلې کچې ډېر دی',
 
 # "Undo" feature
 'undo-norev' => 'دا سمون ناکړ کېدلای نه شي دا ځکه چې دا سمون نشته او يا هم ړنګ شوی.',
@@ -1114,6 +1120,7 @@ $1',
 'right-move-subpages'        => 'مخونه د خپلو څېرمه مخونو سره لېږدول',
 'right-movefile'             => 'دوتنې لېږدول',
 'right-upload'               => 'دوتنې پورته کول',
+'right-upload_by_url'        => 'د يو URL نه دوتنې پورته کول',
 'right-writeapi'             => 'د API کښنې کارېدنه',
 'right-delete'               => 'مخونه ړنګول',
 'right-bigdelete'            => 'د اوږدو پېښليکونو مخونه ړنګول',
@@ -2458,6 +2465,7 @@ $5
 #ټولې regex ټوټې د دغې کرښې نه پورته ځای پر ځای کړی. دا کرښه چې څنګه ده، همداسې يې پرېږدۍ</pre>',
 
 # Special:Tags
+'tag-filter'              => '[[Special:Tags|نښلن]] چاڼګر:',
 'tag-filter-submit'       => 'چاڼګر',
 'tags-display-header'     => 'د بدلون په لړليکونو کې ښکارېدنه',
 'tags-description-header' => 'د مانا بشپړه څرګندونه',
index 25730e1..6af4e9c 100644 (file)
@@ -671,13 +671,13 @@ Pode já ter sido eliminado por outro utilizador.',
 'badtitletext'         => 'O título de página solicitado era inválido, vazio, ou um link interlínguas ou interwikis incorrecto.
 Talvez contenha um ou mais caracteres que não podem ser usados em títulos.',
 'perfcached'           => "Os seguintes dados encontram-se armazenados na ''cache'' e podem não estar actualizados. No máximo {{PLURAL:$1|um resultado é disponível|$1 resultados são disponíveis}} na ''cache''.",
-'perfcachedts'         => "Os seguintes dados encontram-se armazenados na ''cache'' e foram actualizados pela última vez a $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+'perfcachedts'         => "Os seguintes dados encontram-se armazenados na ''cache'' e foram actualizados pela última vez a $1. No máximo {{PLURAL:$4|um resultado está disponível|$4 resultados estão disponíveis}} na ''cache''.",
 'querypage-no-updates' => 'As actualizações estão presentemente desactivadas para esta página.
 Por enquanto, os dados aqui presentes não poderão ser actualizados.',
 'wrong_wfQuery_params' => 'Parâmetros incorrectos para wfQuery()<br />
 Função: $1<br />
 Consulta: $2',
-'viewsource'           => 'Ver conteúdo',
+'viewsource'           => 'Ver código-fonte',
 'viewsource-title'     => 'Mostrar código-fonte de $1',
 'actionthrottled'      => 'Operação limitada',
 'actionthrottledtext'  => 'Como medida anti-spam, está impedido de realizar esta operação demasiadas vezes num espaço de tempo curto e já excedeu esse limite. Tente de novo dentro de alguns minutos, por favor.',
@@ -1372,7 +1372,7 @@ Note, no entanto, que a indexação da {{SITENAME}} neste motor de busca pode es
 'prefs-rc'                      => 'Mudanças recentes',
 'prefs-watchlist'               => 'Páginas vigiadas',
 'prefs-watchlist-days'          => 'Dias a mostrar nas mudanças às páginas vigiadas:',
-'prefs-watchlist-days-max'      => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max'      => 'Máximo: $1 {{PLURAL:$1|dia|dias}}',
 'prefs-watchlist-edits'         => 'Número de edições a mostrar na listagem expandida:',
 'prefs-watchlist-edits-max'     => 'Máximo: 1000',
 'prefs-watchlist-token'         => 'Senha secreta da lista de {{lc:{{int:watchlist}}}}:',
@@ -1394,7 +1394,7 @@ Note, no entanto, que a indexação da {{SITENAME}} neste motor de busca pode es
 'stub-threshold'                => 'Links para páginas curtas terão <a href="#" class="stub">este formato</a> se elas ocuparem menos de (bytes):',
 'stub-threshold-disabled'       => 'Desactivado',
 'recentchangesdays'             => 'Dias a apresentar nas mudanças recentes:',
-'recentchangesdays-max'         => '(máximo: $1 {{PLURAL:$1|dia|dias}})',
+'recentchangesdays-max'         => 'Máximo: $1 {{PLURAL:$1|dia|dias}}',
 'recentchangescount'            => 'Número de edições a apresentar por omissão:',
 'prefs-help-recentchangescount' => 'Inclui mudanças recentes, histórico de páginas e registos.',
 'prefs-help-watchlist-token'    => "Preencher este campo com uma senha secreta gera um ''feed'' RSS para a sua lista de páginas vigiadas.
@@ -2233,7 +2233,7 @@ Encontram-se disponíveis [[{{MediaWiki:Listgrouprights-helppage}}|informações
 'emailpagetext'        => 'Pode usar o formulário abaixo para enviar uma mensagem por correio electrónico para este utilizador.
 O endereço de correio que introduziu nas suas [[Special:Preferences|preferências]] irá aparecer no campo do remetente da mensagem "De:", para que o destinatário lhe possa responder directamente.',
 'usermailererror'      => 'O sistema de correio devolveu o erro:',
-'defemailsubject'      => '{{SITENAME}} e-mail do usuário "$1"',
+'defemailsubject'      => 'E-mail do usuário "$1" da {{SITENAME}}',
 'usermaildisabled'     => 'Correio electrónico do utilizador foi desactivado',
 'usermaildisabledtext' => 'Não pode enviar correio electrónico aos outros utilizadores desta wiki',
 'noemailtitle'         => 'Sem endereço de correio electrónico',
@@ -2914,7 +2914,7 @@ Não há um directório temporário.',
 
 # JavaScriptTest
 'javascripttest'                           => 'Teste de JavaScript',
-'javascripttest-disabled'                  => 'Esta função está desabilitada.',
+'javascripttest-disabled'                  => 'Esta função está desabilitada neste wiki.',
 'javascripttest-title'                     => 'Executando os testes $1',
 'javascripttest-pagetext-noframework'      => 'Esta página é reservada para a execução de testes de JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Estrutura de testes "$1" desconhecido.',
@@ -3902,6 +3902,7 @@ Imagens serão apresentadas pelo browser na resolução máxima; ficheiros de ou
 'feedback-error2'  => 'Erro: A edição falhou',
 'feedback-error3'  => 'Erro: A API não responde',
 'feedback-close'   => 'Feito',
+'feedback-bugnew'  => 'Eu verifiquei. Reportar um novo bug.',
 
 # API errors
 'api-error-badaccess-groups'              => 'Não tem permissão para enviar ficheiros para esta wiki.',
@@ -3912,6 +3913,7 @@ Imagens serão apresentadas pelo browser na resolução máxima; ficheiros de ou
 'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|Ficheiro duplicado que já foi eliminado|Ficheiros duplicados que já foram eliminados}}',
 'api-error-duplicate-popup-title'         => '{{PLURAL:$1|Ficheiro duplicado|Ficheiros duplicados}}',
 'api-error-empty-file'                    => 'O ficheiro que enviou está vazio.',
+'api-error-emptypage'                     => 'Não é permitido criar páginas novas vazias.',
 'api-error-fetchfileerror'                => 'Erro interno: Ocorreu um problema indeterminado ao aceder ao ficheiro.',
 'api-error-file-too-large'                => 'O ficheiro que enviou era demasiado grande.',
 'api-error-filename-tooshort'             => 'O nome do ficheiro é demasiado curto.',
index 6971210..ec44f30 100644 (file)
@@ -14,6 +14,7 @@
  * @author Brunoy Anastasiya Seryozhenko
  * @author Capmo
  * @author Carla404
+ * @author Chicocvenancio
  * @author Crazymadlover
  * @author Daemorris
  * @author Danielsouzat
@@ -666,7 +667,7 @@ Por favor, reporte este fato a um administrador, fazendo notar a URL.',
 'badtitletext'         => 'O título de página solicitado era inválido, vazio, ou um link interlínguas ou interwikis incorreto.
 Talvez contenha um ou mais caracteres que não podem ser usados em títulos.',
 'perfcached'           => "Os seguintes dados encontram-se armazenados na ''cache'' e podem não estar atualizados. No máximo {{PLURAL:$1|um resultado está disponível|$1 resultados estão disponíveis}} na ''cache''.",
-'perfcachedts'         => "Os seguintes dados encontram-se armazenados na ''cache'' e podem não estar atualizados. No máximo {{PLURAL:$4|um resultado está disponível|$1 resultados estão disponíveis}} na ''cache''.",
+'perfcachedts'         => "Os seguintes dados encontram-se armazenados no ''cache'' e foram atualizados as $1. No máximo {{PLURAL:$4|um resultado está disponível|$4 resultados estão disponíveis}} no ''cache''.",
 'querypage-no-updates' => 'Momentaneamente as atualizações para esta página estão desativadas. Por enquanto, os dados aqui presentes não poderão ser atualizados.',
 'wrong_wfQuery_params' => 'Parâmetros incorretos para wfQuery()<br />
 Função: $1<br />
@@ -2191,7 +2192,7 @@ Pode haver [[{{MediaWiki:Listgrouprights-helppage}}|informações adicionais]] s
 'emailpagetext'        => 'Você pode usar o formulário abaixo para enviar uma mensagem por correio eletrônico para este usuário.
 O endereço eletrônico que você inseriu em [[Special:Preferences|suas preferências de usuário]] irá aparecer como o endereço do remetente da mensagem, então o destinatário poderá responder diretamente para você.',
 'usermailererror'      => 'Erro no email:',
-'defemailsubject'      => '{{SITENAME}} e-mail do usuário "$1"',
+'defemailsubject'      => 'E-mail do usuário "$1" da {{SITENAME}}',
 'usermaildisabled'     => 'O e-mail do usuário foi desativado',
 'usermaildisabledtext' => 'Você não tem como enviar e-mails a outros usuários deste wiki.',
 'noemailtitle'         => 'Sem endereço de e-mail',
@@ -3796,7 +3797,7 @@ As imagens serão exibidas em sua resolução máxima, outros tipos de arquivos
 'logentry-newusers-newusers'          => '$1 criou uma conta de usuário',
 'logentry-newusers-create'            => '$1 criou uma conta de usuário',
 'logentry-newusers-create2'           => '$1 criou uma conta de usuário $3',
-'logentry-newusers-autocreate'        => 'A conta $1 foi criada automaticalmente',
+'logentry-newusers-autocreate'        => 'A conta $1 foi criada automaticamente',
 'newuserlog-byemail'                  => 'senha enviada por correio-eletrônico',
 
 # Feedback
index 7b48dde..4eb4b0d 100644 (file)
@@ -2066,6 +2066,8 @@ Example: [[:Image:Addon-icn.png]]',
 {{doc-important|Do not customise this message. Just translate it.|Customisation should be done by local wikis.}}',
 'sharedupload-desc-there'           => ':See also: {{msg-mw|Sharedupload}}',
 'sharedupload-desc-here'            => ':See also: {{msg-mw|Sharedupload}}',
+'sharedupload-desc-edit'            => ':See also: {{msg-mw|Sharedupload}}',
+'sharedupload-desc-create'          => ':See also: {{msg-mw|Sharedupload}}',
 'filepage-nofile'                   => "This message appears when visiting a File page for which there's no file, if the user cannot upload files, or file uploads are disabled. (Otherwise, see {{msg-mw|Filepage-nofile-link}})
 
 Filepage-nofile and Filepage-nofile-link message deprecate {{msg-mw|Noimage}}",
@@ -2347,6 +2349,12 @@ The title is {{msg-mw|nopagetitle}}.',
 
 {{Identical|Go}}',
 'allpagesprefix'    => "Used for the label of the input box of [[Special:PrefixIndex]]. On this page you can either write 'Name of namespace:string from which to begin display in alphabetical order' in the top box, or you can choose a namespace in the bottom box and put 'string from which to begin display in alphabetical order' in the top box. The result will be the same.",
+'allpages-hide-redirects' => 'Label for a checkbox. If the checkbox is checked redirects will not be shown in the list. Used in [[Special:PrefixIndex]] and [[Special:Allpages]].',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Message notifying they are viewing a cached page. $1 is a duration (ie "1 hour and 30 minutes")',
+'cachedspecial-viewing-cached-ts'  => 'Message notifying they are viewing a cached page.',
+'cachedspecial-refresh-now'        => 'Link text pointing to the most recent version of the page.',
 
 # Special:Categories
 'categories'                    => 'The page name of [[Special:Categories]].
index bb0dd9b..772ed4c 100644 (file)
@@ -1800,6 +1800,7 @@ Dacă problema persistă, contactați un [[Special:ListUsers/sysop|administrator
 'backend-fail-closetemp'     => 'Imposibil de închis fișierul temporar.',
 'backend-fail-read'          => 'Imposibil de citit fișierul $1.',
 'backend-fail-create'        => 'Imposibil de creat fișierul $1.',
+'backend-fail-maxsize'       => 'Nu s-a putut crea fișierul $1 pentru că acesta este mai mare de {{PLURAL:$2|un octet|$2 octeți|$2 de octeți}}.',
 'backend-fail-contenttype'   => 'Nu s-a putut determina tipul de conținut al fișierului de stocat la „$1”.',
 
 # Lock manager
index ca539a2..9ce8acf 100644 (file)
@@ -17,6 +17,7 @@
  * @author Amikeco
  * @author Askarmuk
  * @author Assele
+ * @author Bouron
  * @author Chilin
  * @author Claymore
  * @author Comp1089
@@ -682,6 +683,9 @@ $2',
 'ns-specialprotected'  => 'Страницы пространства имён «{{ns:special}}» не могут правиться.',
 'titleprotected'       => "Создание страницы с таким заголовком было запрещено участником [[Участник:$1|$1]].
 Указана следующая причина: ''$2''.",
+'filereadonlyerror'    => "Не удаётся изменить файл «$1», так как хранилище «$2» находится в режиме «только для чтения».
+
+Указана причина: «''$3''».",
 
 # Virus scanner
 'virus-badscanner'     => "Ошибка настройки. Неизвестный сканер вирусов: ''$1''",
@@ -1814,6 +1818,7 @@ $1',
 'backend-fail-closetemp'     => 'Не удаётся закрыть временный файл.',
 'backend-fail-read'          => 'Не удалось прочитать файл $1.',
 'backend-fail-create'        => 'Не удалось создать файл $1.',
+'backend-fail-maxsize'       => 'Не удалось создать файл $1, так как его размер превышает {{PLURAL:$2|$2 байт|$2 байта|$2 байт}}.',
 'backend-fail-readonly'      => 'Хранилище «$1» сейчас находится в режиме «только чтение». Причина: «$2»',
 'backend-fail-synced'        => 'Файл «$1» находится в несогласованном состоянии во внутреннем хранилище',
 'backend-fail-connect'       => 'Не удалось подключиться к хранилищу «$1».',
@@ -1821,6 +1826,9 @@ $1',
 'backend-fail-contenttype'   => 'Не удалось определить тип содержимого файла, чтобы сохранить его в «$1».',
 'backend-fail-batchsize'     => 'Хранилище получило блок из $1 {{PLURAL:$1|файловой операции|файловых операций|файловых операций}}, ограничение составляет $2 {{PLURAL:$1|операцию|операции|файловых операций}}.',
 
+'filejournal-fail-dbconnect' => 'Не удалось подключиться к базе данных журнала для хранилища «$1».',
+'filejournal-fail-dbquery'   => 'Не удалось обновить базу данных журнала для хранилища «$1».',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Не удалось разблокировать "$1"; он не заблокирован.',
 'lockmanager-fail-closelock'   => 'Не удалось закрыть файл блокировки для  «$1».',
@@ -1919,7 +1927,7 @@ $1',
 'filehist-thumbtext'                => 'Миниатюра для версии от $1',
 'filehist-nothumb'                  => 'Нет миниатюры',
 'filehist-user'                     => 'Участник',
-'filehist-dimensions'               => 'Разрешения',
+'filehist-dimensions'               => 'Размеры',
 'filehist-filesize'                 => 'Размер файла',
 'filehist-comment'                  => 'Примечание',
 'filehist-missing'                  => 'Файл отсутствует',
@@ -2150,6 +2158,11 @@ $1',
 'allpagesbadtitle'  => 'Недопустимое название страницы. Заголовок содержит интервики, межъязыковой префикс или запрещённые в заголовках символы.',
 'allpages-bad-ns'   => '{{SITENAME}} не содержит пространства имён «$1».',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Вы просматриваете закэшированную версию страницы, она могла быть обновлена $1 назад.',
+'cachedspecial-viewing-cached-ts'  => 'Вы просматриваете кэшированную версию этой страницы, которая может серьёзно отличаться от текущей версии.',
+'cachedspecial-refresh-now'        => 'Просмотреть последнюю версию.',
+
 # Special:Categories
 'categories'                    => 'Категории',
 'categoriespagetext'            => '{{PLURAL:$1|Следующая категория содержит|Следующие категории содержат}} страницы или медиа-файлы.
@@ -2897,7 +2910,7 @@ $1',
 
 # JavaScriptTest
 'javascripttest'                           => 'Проверка JavaScript',
-'javascripttest-disabled'                  => 'Эта функция отключена.',
+'javascripttest-disabled'                  => 'Эта функция отключена в этой вики.',
 'javascripttest-title'                     => 'Проводится проверка $1',
 'javascripttest-pagetext-noframework'      => 'Эта страница зарезервирована для запуска JavaScript-тестов.',
 'javascripttest-pagetext-unknownframework' => 'Неизвестная среда тестирования «$1».',
@@ -3856,7 +3869,7 @@ MediaWiki распространяется в надежде, что она бу
 #они будут соотнесены с URL внешних изображений.
 #Подходящие будут показаны как изображения, остальные будут показаны как ссылки на изображения.
 #Строки, начинающиеся с # считаются комментариями.
-#Строки чувствительны к регистру
+#Строки не чувствительны к регистру
 
 #Размещайте фрагменты регулярных выражений над этой строчкой. Оставьте эту строчку такой, как она есть.</pre>',
 
@@ -3996,4 +4009,15 @@ MediaWiki распространяется в надежде, что она бу
 'api-error-uploaddisabled'                => 'В этой вики отключена возможность загрузки файлов.',
 'api-error-verification-error'            => 'Возможно, этот файл повреждён или имеет неправильное расширение.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|секунда|секунды|секунд}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|минута|минуты|минут}}',
+'duration-hours'     => '$1 {{PLURAL:$1|час|часа|часов}}',
+'duration-days'      => '$1 {{PLURAL:$1|день|дня|дней}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|неделя|недели|недель}}',
+'duration-years'     => '$1 {{PLURAL:$1|год|года|лет}}',
+'duration-decades'   => '$1 {{PLURAL:$1|декада|декады|декад}}',
+'duration-centuries' => '$1 {{PLURAL:$1|век|века|веков}}',
+'duration-millennia' => '$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}',
+
 );
index 0aaa4ee..adc5a76 100644 (file)
@@ -15,6 +15,7 @@
  * @author Hrishikesh.kb
  * @author Htt
  * @author Kaustubh
+ * @author Krinkle
  * @author Mahitgar
  * @author Naveen Sankar
  * @author Omnipaedista
@@ -535,6 +536,7 @@ $1',
 'versionrequiredtext' => 'एतत्पृष्ठं प्रयोक्तुं मीडियाविकि इत्येतस्य $1तमा आवृत्तिः आवश्यकी। पश्यतु [[Special:Version|आवृत्ति-सूचिका]]',
 
 'ok'                      => 'अस्तु',
+'pagetitle'               => '',
 'retrievedfrom'           => '"$1" इत्यस्माद् उद्धृतम्',
 'youhavenewmessages'      => 'भवदर्थम् $1 सन्ति। ($2).',
 'newmessageslink'         => 'नूतनाः सन्देशाः',
@@ -1177,7 +1179,7 @@ $2
 'prefs-registration'        => 'पंजीकरण कालः:',
 'yourrealname'              => 'वास्तविकं नाम:',
 'yourlanguage'              => 'भाषा:',
-'yournick'                  => ' नूतनाः हस्ताक्षराः:',
+'yournick'                  => 'नूतनाः हस्ताक्षराः:',
 'prefs-help-signature'      => 'संभाषणपृष्ठगताः संवादाः "<nowiki>~~~~</nowiki>" इति लिखित्वा हस्ताक्षरोपेताः कर्त्तव्याः। एतानि चिह्नानि पृष्ठरक्षणपश्चात् भवतः हस्ताक्षरान् समयमुद्रां च प्रदर्शयिष्यन्ति।',
 'badsig'                    => 'अमान्याः (त्रुटिपूर्णाः) हि एते अपक्वाः हस्ताक्षराः।
 एचटीएमएल्-टैग इत्येतानि पुनरीक्षितव्यानि भवता।',
@@ -1831,6 +1833,13 @@ $2
 'htmlform-float-invalid'       => 'भवता निर्दिष्टं मौल्यं संख्या न ।',
 'htmlform-selectorother-other' => 'अन्य',
 
+# New logging system
+'logentry-move-move'                  => '$1 इति प्रयोक्त्रा $3 इत्येतत् $4 इत्येतत् प्रति चालितम्',
+'logentry-move-move-noredirect'       => '$1 इति प्रयोक्त्रा $3 इति पृष्ठम् $4 इत्येतत् प्रति चालितं, अनुप्रेषणेन विना',
+'logentry-move-move_redir'            => '↓
+$1 इत्यनेन $3 इति पृष्ठम् $4 इत्येतत् प्रति चालितं, अनुप्रेषणम् अतिक्रम्य',
+'logentry-move-move_redir-noredirect' => '$1 इति प्रयोक्त्रा $3 इति पृष्ठं $4 इत्येतत् प्रति चालितम्, अनुप्रेषणम् अतिक्रम्य, अनुप्रेषणमोचनेन च विना।',
+
 # Feedback
 'feedback-subject' => 'विषय:',
 'feedback-message' => 'संदेश:',
index ce5debc..012280a 100644 (file)
@@ -527,7 +527,7 @@ L'account hà statu criatu currettamenti. Nun ti scurdari di pirsunalizzari li [
 'yourname'                   => "Lu tò nomu d'utenti (''user name'')",
 'yourpassword'               => "La tò ''password''",
 'yourpasswordagain'          => "Scrivi la password n'àutra vota",
-'remembermypassword'         => "Ricòrdami la mè ''password'' duranti li sissioni (for a maximum of $1 {{PLURAL:$1|day|days}})",
+'remembermypassword'         => 'Arricorda la password supra stu computer (pi ô massimu $1 {{PLURAL:$1|jornu|jorna}})',
 'yourdomainname'             => 'Lu tò dominiu',
 'externaldberror'            => "S'havi virificatu n'erruri cû server d'autinticazzioni sternu, oppuru nun si disponi di l'auturizzazzioni nicissari p'aggiurnari lu propiu accessu sternu.",
 'login'                      => 'Trasi',
@@ -543,6 +543,7 @@ L'account hà statu criatu currettamenti. Nun ti scurdari di pirsunalizzari li [
 'createaccount'              => 'Criati un cuntu novu',
 'gotaccount'                 => "Hai già nu cuntu? '''$1'''.",
 'gotaccountlink'             => 'Trasi',
+'userlogin-resetlink'        => "T'ascurdasti li dittagli pâ trasuta?",
 'createaccountmail'          => 'via e-mail',
 'createaccountreason'        => 'Mutivu:',
 'badretype'                  => "La ''password'' chi mittisti nun è bona.",
@@ -563,7 +564,7 @@ Virificari lu nomu nziritu o [[Special:UserLogin/signup|criari un novu accessu]]
 'wrongpassword'              => "La ''password'' chi mittisti nun è giusta. Prova n'àutra vota.",
 'wrongpasswordempty'         => 'Nun hà statu nzirita arcuna password. Ripruvari.',
 'passwordtooshort'           => 'La tò password è troppu curta. Havi a cuntèniri armenu {{PLURAL:$1|1 caràttiri|$1 caràttiri}}.',
-'password-name-match'        => 'La tou password havi a essiri diversa dô tou nnomu utenti.',
+'password-name-match'        => "La tò password havi a essiri diversa dû tò nomu d'utilizzaturi.",
 'mailmypassword'             => "Mànnimi n'àutra password",
 'passwordremindertitle'      => 'Sirvizziu Password Reminder di {{SITENAME}}',
 'passwordremindertext'       => 'Quarchidunu (prubbabbirmenti tu, cu nnirizzu IP $1) addumannau d\'aviri mannata na password d\'accessu nova a {{SITENAME}} ($4). La password pi l\'utenti "$2" vinni mpustata a "$3".
@@ -584,6 +585,7 @@ Pirciò, li utenti ca usunu stu ndirizzu IP nun ponu pi lu mumentu criari novi a
 'emailconfirmlink'           => 'Cunfirmari lu tò ndrizzu imeil',
 'invalidemailaddress'        => 'Lu nnirizzu email nun pò èssiri accittatu ca ci hà un furmatu nun vàlidu.
 Pi favuri nziriti nu nnirizzu vàlidu o svacantati la casella.',
+'cannotchangeemail'          => 'Li nnirizzi e-mail nun ponnu essiri canciati nti stu wiki.',
 'accountcreated'             => 'Cuntu criatu',
 'accountcreatedtext'         => "Fu criatu n'accessu pi l'utenti $1.",
 'createaccount-title'        => "Criazzioni di n'accessu a {{SITENAME}}",
@@ -593,6 +595,7 @@ Si l\'accessu fu criatu pi sbagghiu, si può gnurari stu missaggiu.',
 'usernamehasherror'          => "Lu nomu di l'utenti nun pò cuntèniri caràttiri hash",
 'login-throttled'            => "Facisti troppi tintativi.
 Aspetta tanticchia prima di pruvari  n'àutra vota.",
+'login-abort-generic'        => 'La trasuta nun arriniscìu - Annullata',
 'loginlanguagelabel'         => 'Lingua: $1',
 'suspicious-userlogout'      => 'La tò dumanna di discunnissioni fu niàta prichì pari ca veni di nu browser nun funziunanti o nu proxy di caching.',
 
@@ -703,7 +706,8 @@ Si agghicasti ccà pi sbagghiu, clicca lu buttuni ''''n arreri (back)''' dû tò
 P’idintificàrilu è pirciò nicissariu usari lu nùmmiru di lu sò nnirizzu IP.
 Li nnirizzi IP ponnu pirò èssiri spartuti di cchiù utenti.
 Siddu sî n’utenti anònimu e riteni ca li cummenti prisenti nta sta pàggina nun si rifirìscinu a tia, [[Special:UserLogin/signup|crea n’accessu novu]] o [[Special:UserLogin|trasi]] cu chiddu ca già hai p’evitari d’èssiri cunfusu cu àutri utenti anònimi ‘n futuru.''",
-'noarticletext'                    => "Nta stu mumentu la pàggina addumannata è vacanti. È pussìbbili [[Special:Search/{{PAGENAME}}|circari stu tìtulu]] nta l'àutri pàggini dû situ oppuru [{{fullurl:{{FULLPAGENAME}}|action=edit}} canciari la pàggina ora].",
+'noarticletext'                    => 'Nta stu mumentu la pàggina addumannata è vacanti. È pussìbbili [[Special:Search/{{PAGENAME}}|circari stu tìtulu]] nta l\'àutri pàggini dû situ oppuru <span class="plainlinks">[{{fullurl:{{#Special:Log}}|action=edit}} circari ntê riggistra culligati] oppuru [{{fullurl:{{FULLPAGENAME}}|action=edit}} canciari la pàggina ora]</span>.',
+'noarticletext-nopermission'       => 'Nta stu mumentu la pàggina addumannata è vacanti. È pussibbili [[Special:Search/{{PAGENAME}}|circari stu titulu]] nti àutri pàggini dû situ oppuru <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} circari ntê riggistra currilati]</span>.',
 'userpage-userdoesnotexist'        => 'L\'account "<nowiki>$1</nowiki>" nun currispunni a n\'utenti riggistratu. Virificari si si voli criari o canciari sta pàggina.',
 'clearyourcache'                   => "'''Nota:''' doppu aviri sarvatu è nicissariu puliri la cache dû propiu browser pi vìdiri li canciamenti. Pi '''Mozilla / Firefox / Safari''': fari clic supra ''Ricarica'' tinnennu primutu lu tastu dî maiùsculi, oppuru prèmiri ''Ctrl-Maiusc-R'' (''Cmd-Maiusc-R'' supra Mac); pi '''Internet Explorer:''' mantèniri primutu lu tastu ''Ctrl'' mentri si premi lu pulsanti ''Aggiorna'' o prèmiri ''Ctrl-F5''; pi '''Konqueror''': prèmiri lu pulsanti ''Ricarica'' o lu tastu ''F5''; pi '''Opera''' pò èssiri nicissariu svacantari cumpletamenti la cache dû menu ''Strumenti → Preferenze''.",
 'usercssyoucanpreview'             => "'''Suggirimentu:''' Usa lu tastu 'Visualizza antiprima' pi pruvari li novi css/js prima di sarvàrili.",
@@ -749,7 +753,7 @@ L'amministraturi ca bluccau lu database lu fici pi stu mutivu: $1",
 'semiprotectedpagewarning'         => "'''ACCURA:''' Sta pàggina hà statu bluccata n modu ca sulu li utenti riggistrati ponnu canciàrila.",
 'cascadeprotectedwarning'          => "'''Accura:''' Sta pàggina havi stata bluccata n modu ca sulu li utenti cu privileggi di amministraturi ponnu mudificàrila, pirchì veni nclusa {{PLURAL:\$1|nta siquente pàggina ca hà stata prutiggiuta|ntê siquenti pàggini ca hannu stati prutiggiuti}} silizziunannu la prutizzioni \"ricursiva\":",
 'titleprotectedwarning'            => "'''ATTENZIONI:  Sta pàggina fu bluccata n modu tali ca sianu nicissari [[Special:ListGroupRights|diritti spicifici]] pi criarla.'''",
-'templatesused'                    => "Template utilizzati 'n sta pàggina:",
+'templatesused'                    => '{{PLURAL:$1|Template utilizzatu|Template utilizzati}} nti sta pàggina:',
 'templatesusedpreview'             => "Template utilizzati 'n st'antiprima:",
 'templatesusedsection'             => "Template utilizzati 'n sta sezzioni:",
 'template-protected'               => '(prutettu)',
@@ -820,6 +824,7 @@ Lu mutivu è ''$2''",
 'page_last'              => 'ùrtima',
 'histlegend'             => "Cunfrontu tra virsioni: silizziunari li caselli currispunnenti ê virsioni addisiati e prèmiri Mannu o lu pulsanti a basciu.<br /> Liggenna: (curr) = diffirenzi cu la virsioni attuali, (pric) = diffirenzi cu la virsioni pricidenti, '''m''' = canciamentu nicu",
 'history-fieldset-title' => 'Scurri ntâ crunuluggìa',
+'history-show-deleted'   => 'Sulu chiddi scancillati',
 'histfirst'              => 'Prima',
 'histlast'               => 'Ùrtima',
 'historysize'            => '({{PLURAL:$1|1 byte|$1 byte}})',
@@ -892,6 +897,8 @@ $1",
 'logdelete-failure'           => "'''La visibilità dû eventu nun po essiri impustata:'''
 $1",
 'revdel-restore'              => 'Cancia la visibbilità',
+'revdel-restore-deleted'      => 'rivisioni scancillati',
+'revdel-restore-visible'      => 'rivisioni visibbili',
 'pagehist'                    => 'Storia dâ pàggina',
 'deletedhist'                 => 'Storia cancillata',
 'revdelete-hide-current'      => "Impussibili ammucciari l'oggettu cu la data $1 $2 in quantu è la rivisoni currenti.",
@@ -1109,6 +1116,7 @@ L'operazioni nun pò èssiri annullata.",
 'email'                         => 'Nnirizzu email',
 'prefs-help-realname'           => '* Nomu veru (upziunali): siddu scegghi di furnìrilu veni usatu pi dàriti crèditu dû tò travagghiu.',
 'prefs-help-email'              => "* Imeil (opziunali): abbìlita l'àutri utenti a cuntattàriti attraversu la tò pàggina d'utenti o di discussioni, senza pi chissu rivilari la tò idintitati.",
+'prefs-help-email-others'       => "Putiti videmma scegghiri di pirmèttiri ca l'autri ti cuntattanu pi posta elittronica cu nu culligamentu di la tò pàggina d'utilizzaturi o di discussioni. Lu tò nnirizzu nun veni rivilatu quannu l'àutri utilizzatura ti cuntattanu.",
 'prefs-help-email-required'     => 'Lu nnirizzu email è nicissariu.',
 'prefs-info'                    => 'Informazzioni di basi',
 'prefs-i18n'                    => 'Internazionalizzazioni',
@@ -1422,6 +1430,7 @@ PICT # arcuni
 'upload-curl-error28-text' => 'Lu situ rimotu hà mpiegatu troppu tempu a arrispùnniri. Virificari ca lu situ è attivu, attènniri quarchi minutu e pruvari di novu, eventuarmenti nta un mumentu di tràfficu nicu.',
 
 'license'            => "Licenza d'usu:",
+'license-header'     => "Licenza d'usu:",
 'nolicense'          => 'Nudda silizzioni',
 'license-nopreview'  => '(Antiprima nun disponibbili)',
 'upload_source_url'  => '(na URL curretta e accissìbbili)',
@@ -1458,7 +1467,7 @@ Pi canciari l'urdinamentu, fari clic supra a la ntistazzioni dâ culonna scigghi
 'filehist-filesize'         => 'Dimensioni dû file',
 'filehist-comment'          => 'Oggettu',
 'filehist-missing'          => 'File mancanti',
-'imagelinks'                => "Pàggini c'ùsanu sta mmàggini",
+'imagelinks'                => 'Usu dû file',
 'linkstoimage'              => '{{PLURAL:$1|La pàggina siquenti richiàma|Li $1 pàggini siquenti richiàmanu}} sta mmàggini:',
 'linkstoimage-more'         => 'Chiossai di $1 {{PLURAL:$1|pàggina punta|pàggini pùntanu}} a stu file.
 Di sècutu sunnu alincati sulu {{PLURAL:$1|la prima pàggina ca punta|li primi $1 pàggini ca pùntanu}} a stu file.
@@ -1619,7 +1628,7 @@ Li redirect <del>cancillati</del> furunu curretti.',
 'listusers-editsonly'     => 'Ammustra sulu utenti cu cuntribbuti',
 'listusers-creationsort'  => 'Ordina pi data di criazioni',
 'usereditcount'           => '$1 {{PLURAL:$1|cuntribbutu|cuntribbuti}}',
-'usercreated'             => 'Creatu lu $1 ê $2',
+'usercreated'             => '{{GENDER:$3|Criatu/a}} lu $1 ê $2',
 'newpages'                => 'pàggini cchiù ricenti',
 'newpages-username'       => 'Utenti:',
 'ancientpages'            => 'pàggini cchiù vecchi',
@@ -1702,7 +1711,7 @@ Protucolli suppurtati: <tt>$1</tt>',
 
 # Special:ActiveUsers
 'activeusers'            => 'Lista dî utenti attivi',
-'activeusers-count'      => '$1 recent {{PLURAL:$1|canciamento|canciamenti ricenti}}',
+'activeusers-count'      => "$1 {{PLURAL:$1|canciamentu|canciamenti}} nti {{PLURAL:$3|l'ùrtimu jornu| nti l'ùrtimi $3 jorna}}",
 'activeusers-from'       => 'Ammustra li utenti a pàrtiri da:',
 'activeusers-hidebots'   => 'Bot ammucciati',
 'activeusers-hidesysops' => 'Amministratura ammucciati',
@@ -1968,9 +1977,10 @@ $1',
 'undelete-show-file-submit'    => 'Si',
 
 # Namespace form on various pages
-'namespace'      => 'Tipu di pàggina:',
-'invert'         => 'scancia la silizzioni',
-'blanknamespace' => '(Principali)',
+'namespace'             => 'Tipu di pàggina:',
+'invert'                => 'scancia la silizzioni',
+'namespace_association' => 'Namespace assuciatu',
+'blanknamespace'        => '(Principali)',
 
 # Contributions
 'contributions'       => 'cuntribbuti',
@@ -1987,11 +1997,13 @@ $1',
 'sp-contributions-newbies-title' => "Cuntribbuti di l'utenti novi",
 'sp-contributions-blocklog'      => 'log dî blocchi',
 'sp-contributions-deleted'       => 'cuntribbuti utenti scancillati',
+'sp-contributions-uploads'       => 'file carricati',
 'sp-contributions-logs'          => 'riggistri',
 'sp-contributions-talk'          => 'discussioni',
 'sp-contributions-userrights'    => 'gistioni dî dritti utenti',
 'sp-contributions-search'        => 'Ricerca cuntribbuti',
 'sp-contributions-username'      => 'Nnirizzu IP o nomu utenti:',
+'sp-contributions-toponly'       => "Ammuscia sulu li cuntribbuti ca sunnu l'ùrtimi rivisioni pâ pàggina",
 'sp-contributions-submit'        => 'Ricerca',
 
 # What links here
@@ -2003,7 +2015,7 @@ $1',
 'nolinkshere-ns'           => "Nun ci sugnu pàggini chi puntano a '''[[:$1]]''' ntô namespace silizziunatu.",
 'isredirect'               => 'pàggina di rinnirizzamentu',
 'istemplate'               => 'nchiusioni',
-'isimage'                  => 'link mmàggini',
+'isimage'                  => 'liami dû file',
 'whatlinkshere-prev'       => '{{PLURAL:$1|pricidenti|pricidenti $1}}',
 'whatlinkshere-next'       => '{{PLURAL:$1|succissivu|succissivi $1}}',
 'whatlinkshere-links'      => '← liami',
@@ -2054,7 +2066,7 @@ Pi maggiuri nfurmazzioni, talìa la [[Special:BlockList|lista di l'IP bluccati]]
 'ipusubmit'                       => 'Leva stu bloccu',
 'unblocked'                       => "L'utenti [[User:$1|$1]] hà statu sbluccatu",
 'unblocked-id'                    => 'Lu bloccu $1 hà statu cacciatu',
-'ipblocklist'                     => 'Utenti e nnirizzi IP bluccati',
+'ipblocklist'                     => 'Utiloizzatura bluccati',
 'ipblocklist-legend'              => "Atrova n'utenti bluccatu",
 'ipblocklist-submit'              => 'Ricerca',
 'infiniteblock'                   => 'nfinitu',
@@ -2342,6 +2354,7 @@ Visita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//trans
 'tooltip-rollback'                => '"Rollback" annulla li canci di l\'ùrtinu cuntribbuturi â sta pâggina cu nu sulu clic.',
 'tooltip-undo'                    => '"Annulla" pirmetti di annullari sta mudìfica e grapi lu mòdulu di mudifica ntâ mudalità di antiprima. Pirmetti di nsiriri na mutivazziopni nti l\'uggettu dâ mudifica.',
 'tooltip-preferences-save'        => 'Sarva prifirenzi',
+'tooltip-summary'                 => 'Nsiriri na sintisi curta',
 
 # Stylesheets
 'common.css'   => "/* Li stili CSS nziriti ccà s'àpplicanu a tutti li skin */",
@@ -2449,7 +2462,7 @@ Li lijami succissivi, supra la stissa riga, sunnu cunzidirati comu eccizzioni (p
 'metadata-help'     => 'Stu file cunteni nfurmazzioni agghiuntivi, prubbabbirmenti junti dâ fotucàmira o dû scanner usati pi criàrila o diggitalizzàrila. Siddu lu file hà statu canciatu, arcuni dittagghi putìssiru nun currispùnniri â rialitati.',
 'metadata-expand'   => 'Ammustra dittagghi',
 'metadata-collapse' => 'Ammuccia dittagghi',
-'metadata-fields'   => "Li campi rilativi a li metadati EXIF alincati 'n stu missaggiu vèninu ammustrati supra la pàggina dâ mmàggini quannu la tabbella dî metadati è prisintata ntâ forma brivi. Pi mpustazzioni pridifinita, l'àutri campi vèninu ammucciati.
+'metadata-fields'   => "Li campi rilativi a li metadati di la mmàggini alincati 'n stu missaggiu vèninu ammustrati supra la pàggina dâ mmàggini quannu la tabbella dî metadati è prisintata ntâ forma brivi. Pi mpustazzioni pridifinita, l'àutri campi vèninu ammucciati.
 * make
 * model
 * datetimeoriginal
@@ -2932,7 +2945,7 @@ Mèttiri lu nomu dû file senza lu prifissu "{{ns:file}}:"',
 'tags-description-header' => 'Discrizzioni cumpleta dô significatu',
 'tags-hitcount-header'    => 'Canciamenti che hanno tag',
 'tags-edit'               => 'cancia',
-'tags-hitcount'           => '1 {{PLURAL:$1|canciamento|canciamenti}}',
+'tags-hitcount'           => '$1 {{PLURAL:$1|canciamentu|canciamenti}}',
 
 # Database error messages
 'dberr-header'      => 'Sta wiki havi nu prublema',
@@ -2955,8 +2968,20 @@ Mèttiri lu nomu dû file senza lu prifissu "{{ns:file}}:"',
 'htmlform-selectorother-other' => 'Autri',
 
 # New logging system
-'revdelete-restricted'   => 'ristrizzioni ai suli amministratura attivate',
-'revdelete-unrestricted' => 'ristrizzioni pi suli amministraturi rimossi',
-'newuserlog-byemail'     => 'password mannata via mail',
+'logentry-delete-delete'   => '$1 cancillau la pàggina $3',
+'revdelete-restricted'     => 'ristrizzioni ai suli amministratura attivate',
+'revdelete-unrestricted'   => 'ristrizzioni pi suli amministraturi rimossi',
+'logentry-move-move'       => '$1 spustau la pàggina $3 a $4',
+'logentry-newusers-create' => '$1 criau na utenza',
+'newuserlog-byemail'       => 'password mannata via mail',
+
+# API errors
+'api-error-nomodule'     => 'Erruri nternu: nun fu mpustatu lu mòdulu di carricamentu',
+'api-error-ok-but-empty' => 'Erruri ntenru: nudda risposta dû server',
+'api-error-overwrite'    => 'Suprascriviri nu file ca nun esisti nun è cunsitutu',
+'api-error-stashfailed'  => 'Erruri nternu: lu server nun arrinisciu a mimurizzari lu ducumentu timpuraniu',
+'api-error-timeout'      => 'Lu server nun arrispunniu ntô tempu privistu',
+'api-error-unclassified' => "S'avvirificau n'erruri scanusciutu",
+'api-error-unknown-code' => 'Erruri scanusciuti: "$1$".',
 
 );
index da6b01c..1733a7f 100644 (file)
@@ -356,7 +356,9 @@ Aks: $2',
 'protectedpagetext'    => "Sairy, this page haes been '''lockit''' tae hinder vandalism.",
 'viewsourcetext'       => 'Ye can leuk at an copy the soorce o this page:',
 'protectedinterface'   => 'Sairy, but this page provides interface text for the saftware, an is lockit to hinder abuise.',
-'editinginterface'     => "'''Warnin:''' Ye'r editin a page that's uised tae provide interface text for the saftware. Chynges tae this page will affect the appearance o the uiser interface for ither uisers.",
+'editinginterface'     => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
+Changes to this page will affect the appearance of the user interface for other users.
+For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
 'sqlhidden'            => '(SQL query hidden)',
 'cascadeprotected'     => 'This page haes been protectit fra editin, acause it is includit in the followin {{PLURAL:$1|page|pages}}, that are protectit wi the "cascading" option turnit on:
 $2',
index 30e20c5..016b702 100644 (file)
@@ -307,7 +307,9 @@ Query: $2',
 'protectedpagetext'    => 'Jan páhina coccebj lockom neticpatlöx pos-poop.',
 'viewsourcetext'       => 'Mecohuatlöx ö copynom sourcenam zode jan páhina:',
 'protectedinterface'   => "Jan páhina coccebj textuade interface software zo 'de ö coccebj lockom neticpatlöx abusenam.",
-'editinginterface'     => "'''Attencion:''' Meticpatlöx páhinám pac, jan usadadde textuade interface software zo 'de. Quiíxde jan páhinám affectom caitominterface zode diijömde caitóm.",
+'editinginterface'     => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
+Changes to this page will affect the appearance of the user interface for other users.
+For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
 'sqlhidden'            => '(SQL querynam cíiitámöx)',
 'cascadeprotected'     => 'Jan páhina coccebj protectöxde ticpatlöx, zo coccebj cascadande jan {{PLURAL:$1|páhina|páhinám}}, jan coccebj protëctox cascadanöx opcion zo mii:
 $2',
index 3d10720..33ce825 100644 (file)
@@ -503,6 +503,9 @@ ikhssak ola kiyi ador tnqilt ɣtamani yadni.
 'template-semiprotected'           => 'Azin-ugdal',
 'hiddencategories'                 => '{{PLURAL:$1|Taggayt iḥban|Taggayin ḥbanin}} lli ɣtlla tasba yad :',
 'permissionserrorstext-withaction' => 'Urak ittuyskar  {{IGGUT:||e|(e)}} s $2, bac {{PLURAL:$1|s wacku yad|iwackutn ad}} :',
+'recreate-moveddeleted-warn'       => '"Balak z ɣin: tmmaɣt addaɣ tskrt tasna lli yad ittuykkasn."
+Ẓr zwar is ifulki ad tfrt imbddln ɣ tasna yad. Tanɣmast n mad ittuykkasn d mad ibddln ttla ɣid ɣ uzddar.',
+'moveddeleted-notice'              => 'Tasna yad ttuykkas. inɣmas n tuyykkas d issmmattayn nsn llan ɣ ɣ ufflla i tusna.',
 'log-fulllog'                      => 'Zṛ anɣmas izun (usmmid)',
 'edit-hook-aborted'                => 'Imbddln ur ttuyskarnin.. Ur ittuyssan maɣ',
 'edit-gone-missing'                => 'Ur iga as f was tasnayad
@@ -514,12 +517,16 @@ ikhssak ola kiyi ador tnqilt ɣtamani yadni.
 # Parser/template warnings
 'post-expand-template-inclusion-warning'  => 'Han:  tasna yad illa gis tuggut n tmuḍimin. Kra gitsnt ur ran illint.',
 'post-expand-template-inclusion-category' => 'Tisniwin lli bahra ittafn tuggut n tmuḍimin',
+'post-expand-template-argument-warning'   => 'Balak: Tasna ivɣ gis uggar n iɣwar n tmudimt lli ur tti ttajjan an gis tilli
+Tigira n ujbbad ns, ar takka yat tayafut bahra imqqurn,  ɣayan afan ur ttili.',
+'post-expand-template-argument-category'  => 'Tisna lliɣ llan iɣwarn n tmudimt urta lan atig',
 'parser-template-loop-warning'            => 'Tamuḍimt ikrknnin ttyufa ɣid : [[$1]]',
 
 # History pages
 'viewpagelogs'           => 'Ẓr timhlin lli ittuskarn ɣ tasna yad',
 'currentrev-asof'        => 'Amseggar amǧuru  n $1',
 'revisionasof'           => 'Askttay yaḍn f $1',
+'revision-info'          => 'Imsurritn n $1 s $2',
 'previousrevision'       => 'Iẓṛi daɣ aqbur',
 'nextrevision'           => 'Amẓr amaynu',
 'currentrevisionlink'    => 'Amcggr amggaṛu',
@@ -610,6 +617,7 @@ ikhssak ola kiyi ador tnqilt ɣtamani yadni.
 'shown-title'                      => 'Fsr $1 tayafut{{PLURAL:$1||s}} s tasna',
 'viewprevnext'                     => 'Mel ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend'                => 'Istayn ucnubc',
+'searchmenu-exists'                => '"\'Tlla yat tasna lli ilan assaɣ « [[:$1]] » ɣ wiki yad',
 'searchmenu-new'                   => "'''Skr Tasna « [[:$1|$1]] » ɣ wiki !'''",
 'searchhelp-url'                   => 'Help:Mayllan',
 'searchprofile-articles'           => 'Mayllan ɣ tasna',
@@ -729,6 +737,8 @@ Izdar ad urtili ɣ isbidn n mayllan ɣ {{SITENAME}} .',
 'gender-male'               => 'dkr',
 'gender-female'             => 'lont',
 'email'                     => 'email',
+'prefs-help-email'          => 'Tansa n tbratin ur tga bzzez, mac trwa ad taft taguri n uzray d ar ak tskar ast tsbadlt iɣ tti tuut.',
+'prefs-help-email-others'   => 'Tẓḍart ad tstit ad tajt wiyyaḍ ad ak ttaran, snḥkmn dik ɣ, mlinak iwnnan nsn ɣ tasna lli sik iẓlin bla ssn assaɣ nk d mad tgit.',
 'prefs-signature'           => 'sinyator',
 'prefs-dateformat'          => 'sight n loqt',
 
@@ -757,7 +767,9 @@ Izdar ad urtili ɣ isbidn n mayllan ɣ {{SITENAME}} .',
 'recentchanges-label-newpage'       => 'Ambddl ad ar iskar yakka yat tasna tamaynut.',
 'recentchanges-label-minor'         => 'Imbddl ifssusn',
 'recentchanges-label-bot'           => 'Ambddl ad iskr robot',
+'recentchanges-label-unpatrolled'   => 'Ambddl ad ura jju ittmẓra',
 'rcnote'                            => 'Γid {{PLURAL:$1|ambddl amggaru lli ittuysgarn| $1 Imbddln imggura lli ittuyskarn}} ɣ {{PLURAL:$2|was amggaru| <b>$2</b> Ussan imggura}} ar $5 n $4.',
+'rcnotefrom'                        => "Had imbddln lli ittuyskarn z '''$2''' ('''$1''' ɣ uggar).",
 'rclistfrom'                        => 'Mel imbdeltn imaynutn z $1',
 'rcshowhideminor'                   => '$1 iẓṛign fssusnin',
 'rcshowhidebots'                    => '$1 butn',
@@ -801,7 +813,15 @@ Mel imbddeln z tisniwin li ittuyzdayni bla tasna li trit.',
 'uploadnologintext'        => 'Mel zwar mat git [[Special:UserLogin|Mel mat git]] iɣ trit ad tsrbut isddawn.',
 'upload_directory_missing' => 'Akaram n w-affay ($1) ur ittyufa d urt iskr uqadac web (serveur)',
 'uploadlogpage'            => 'Anɣmis n isrbuṭn',
+'filename'                 => 'Assaɣ n usdaw',
+'filedesc'                 => 'Talusi',
+'fileuploadsummary'        => 'Talusi',
+'filereuploadsummary'      => 'Imbddln n usdaw',
+'filestatus'               => 'Izrfan ḥbanin',
+'filesource'               => 'Aɣbalu',
 'uploadedimage'            => 'Issrba "[[$1]]"',
+'upload-source'            => 'Aɣbalu n usdaw',
+'sourcefilename'           => 'Aɣbalu n ussaɣ n usdaw',
 
 'license'        => 'Tlla s izrfan',
 'license-header' => 'Tẓrg ddu n izrfan',
@@ -822,6 +842,8 @@ Mel imbddeln z tisniwin li ittuyzdayni bla tasna li trit.',
 'linkstoimage'              => 'Tasna yad {{PLURAL:$1|izdayn n tasna|$1 azday n tasniwin}} s usdaw:',
 'nolinkstoimage'            => 'Ḥtta kra n tasna ur tra asdaw ad',
 'sharedupload'              => 'Asdawad z $1 tẓḍart at tsxdmt gr iswirn yaḍnin',
+'sharedupload-desc-here'    => 'ⴰⵙⴷⴰⵡ ⴰⴷ ⵉⴽⴽⴰⴷ ⵣ : $1.  ⵜⵥⴹⴰⵔⵜ ⴰⵙⵙⵉ ⵜⵙⵡⵡⵓⵔ ⵖ ⵜⵉⵡⵓⵔⵉⵡⵉⵏ ⵜⴰⴹⵏ.
+ⵓⴳⴳⴰⵔ ⴼⵍⵍⴰⵙ ⵍⵍⴰⵏ ⵖ [$2 ⵜⴰⵙⵏⴰ ⵏ ⵉⵎⵍⵓⵣⵣⵓⵜⵏ] ⵍⵍⵉ ⵉⵍⵍⴰⵏ ⵖⵉⴷ.',
 'uploadnewversion-linktext' => 'Srbud tunɣilt tamaynut n usdaw ad',
 
 # Random page
@@ -830,6 +852,8 @@ Mel imbddeln z tisniwin li ittuyzdayni bla tasna li trit.',
 # Statistics
 'statistics' => 'Tisnaddanin',
 
+'disambiguationspage' => 'Template:Homonymie',
+
 # Miscellaneous special pages
 'nbytes'                  => '$1 {{PLURAL:$1|byt|byt}}',
 'ncategories'             => '$1 {{PLURAL:$1|taggayt|taggayin}}',
@@ -843,7 +867,7 @@ Mel imbddeln z tisniwin li ittuyzdayni bla tasna li trit.',
 'uncategorizedpages'      => 'Tisnawinad ur llant ɣ graygan taggayt',
 'uncategorizedcategories' => 'Taggayin ur ittuyzlayn ɣ kraygan taggayt',
 'prefixindex'             => 'Tisniwin lli izwarn s ...',
-'usercreated'             => 'Tuyskar z $1 ar $2',
+'usercreated'             => '{{GENDER:$3|tuyskar}}  z $1 ar $2',
 'newpages'                => 'Tisniwin timaynutin',
 'move'                    => 'Smmatti',
 'movethispage'            => 'Smmatti tasna yad',
@@ -1259,6 +1283,9 @@ Wiyyaḍ raggis ḥbun s ɣiklli sttin kkan gantn.
 'watchlisttools-edit' => 'Ẓr tẓṛgt umuɣ lli tuytfarn',
 'watchlisttools-raw'  => 'Ẓṛig umuɣ n tisniwin',
 
+# Core parser functions
+'duplicate-defaultsort' => 'Balak: tasarut n ustay « $2 » ar tbj tallit izwarn« $1 ».',
+
 # Special:Version
 'version'                       => 'noskha',
 'version-specialpages'          => 'Tisnatin timzlay',
@@ -1299,6 +1326,16 @@ Wiyyaḍ raggis ḥbun s ɣiklli sttin kkan gantn.
 # Special:BlankPage
 'blankpage' => 'tawriqt orgiss walo',
 
+# External image whitelist
+'external_image_whitelist' => '# Ajji aṣṭtar nna ɣiklli iga. <pre>
+# Ml igzman n tannayin (ɣir imi lli illan gr//) ɣ uzddar ɣid.
+# Rad tmiqqirn d tansiwin URL n tiwlaf n brra.
+# Tilli dis tmiqqirnin rad baynt zund tiwlaf, niɣd yan uzday s tawlaft arad ibayn.
+# Isṭṭarn lli ittizwirn s # rad gin zund iwnnan.
+# Tasna yad tfta d ugmmaḍ ad
+
+# Gatn igzman n iwnnan ɣ uflla n usṭṭar ad. Ajji yataṣṭṭar amggaru ɣiklli iga. </pre>',
+
 # Special:Tags
 'tag-filter'           => 'Astay n [[Special:Tags|balises]] :',
 'tag-filter-submit'    => 'Istayn',
index 52bd525..2bfb06b 100644 (file)
@@ -451,8 +451,8 @@ $1",
 'badaccess-group0' => 'ඔබ විසින් අයැදුම් කර සිටි කාර්යය ක්‍රියාත්මක කිරීමට ඔබ හට ඉඩ ලබා දෙනු නොලැබේ.',
 'badaccess-groups' => 'ඔබ අයැදුම් කර සිටි කාර්යය, ඉදිරි {{PLURAL:$2| කාණ්ඩයට| කාණ්ඩ සමූහය අතුරින් එකකට}} අයත් පරිශීලකයන්ගේ පරිහරණයට සීමා කර ඇත: $1.',
 
-'versionrequired'     => 'මà·\8fධà·\8aâ\80\8dයවිකි $1 අනුවාදය අවශ්‍ය වේ',
-'versionrequiredtext' => 'මà·\99ම à¶´à·\92ටà·\94à·\80 à¶·à·\8fà·\80à·\92තà·\8f à¶\9aà·\92රà·\93මට, à¶¸à·\8fධà·\8aâ\80\8dයවිකි හි $1 අනුවාදය අවශ්‍ය වේ.
+'versionrequired'     => 'මà·\93ඩà·\92යà·\8fවිකි $1 අනුවාදය අවශ්‍ය වේ',
+'versionrequiredtext' => 'මà·\99ම à¶´à·\92ටà·\94à·\80 à¶·à·\8fà·\80à·\92තà·\8f à¶\9aà·\92රà·\93මට, à¶¸à·\93ඩà·\92යà·\8fවිකි හි $1 අනුවාදය අවශ්‍ය වේ.
 [[Special:Version|අනුවාද පිටුව]] බලන්න.',
 
 'ok'                      => 'හරි',
@@ -577,7 +577,7 @@ URL  සඳහන් කරමින්, මෙම කරුණ [[Special:ListUs
 'protectedinterface'   => 'මෙම පිටුව විසින්, මෘදුකාංගය සඳහා අතුරුමුව පෙළ සපයන අතර එබැවින් අපයෙදුම වැලැක්වීම සඳහා එය අවුරා ඇත.',
 'editinginterface'     => "'''අවවාදයයි:''' මෘදුකාංගයට අතුරුමුව පෙළ සැපයීමට භාවිතා වන පිටුවක් ඔබ විසින් සංස්කරණය කරනු ලබයි.
 මෙම පිටුවට සිදු කරන වෙනස්වීම් විසින් අනෙකුත් පරිශීලකයන්ගේ පරිශීලක අතුරුමුවෙහි පෙනුමට බලපෑම් එල්ල කෙරෙනු ඇත.
-පරà·\92à·\80රà·\8aතන à·\83ඳà·\84à·\8f, à¶¸à·\8fධà·\8aâ\80\8dයවිකි ප්‍රාදේශීයකරන ව්‍යාපෘතිය, [//translatewiki.net/wiki/Main_Page?setlang=si translatewiki.net], භාවිතා කිරීම සලකා බැලීමට කාරුණික වන්න.",
+පරà·\92à·\80රà·\8aතන à·\83ඳà·\84à·\8f, à¶¸à·\93ඩà·\92යà·\8fවිකි ප්‍රාදේශීයකරන ව්‍යාපෘතිය, [//translatewiki.net/wiki/Main_Page?setlang=si translatewiki.net], භාවිතා කිරීම සලකා බැලීමට කාරුණික වන්න.",
 'sqlhidden'            => '(එස්කිවුඑල් විපරම සඟවා ඇත)',
 'cascadeprotected'     => '"තීරු දර්ශන" විකල්පය සක්‍රීයනය කොට එමගින් ආරක්‍ෂණය කල පහත දැක්වෙන {{PLURAL:$1|පිටුව|පිටු}} අඩංගු කර ඇති බැවින්, මෙම පිටුව සංස්කරණය කිරීමෙන් වලකා ඇත:
 $2',
@@ -974,8 +974,8 @@ $2
 'language-converter-depth-warning'        => 'භාෂා පරිවර්තක අධිකත්ව සීමාව ඉක්මවා ඇත ($1)',
 
 # "Undo" feature
-'undo-success' => 'සංස්කරණය අහෝසි කල හැක.
-පà·\84ත à¶¯à¶\9aà·\8aà·\80à·\8f à¶\87තà·\92 à·\83à·\90à·\83à·\90ඳà·\94ම à¶´à¶»à·\92à¶\9aà·\8aà·\82à·\8f à¶\9aර à¶¶à¶½à·\8f à¶\94බà¶\9cà·\9a à¶\85භà·\92ලà·\8fà·\82ය à¶¸à·\99යමà·\90යà·\92 à·\83තà·\8aâ\80\8dයà·\8fපනය à¶\9aà·\9cට à¶\9cà·\99න, à·\83à¶\82à·\83à·\8aà¶\9aරණය à¶\85à·\84à·\9dà·\83à·\92 à¶\9aà·\92රà·\93ම à¶±à·\92මà·\80නà·\94 à·\80à·\83à·\8a පහත දැක්වෙන වෙනස්වීම් සුරකින්න.',
+'undo-success' => 'මà·\99ම à·\83à¶\82à·\83à·\8aà¶\9aරණය à¶\85à·\84à·\9dà·\83à·\92 à¶\9aල à·\84à·\90à¶\9a.
+පà·\84ත à¶¯à¶\9aà·\8aà·\80à·\8f à¶\87තà·\92 à·\83à·\90à·\83à·\90ඳà·\94ම à¶´à¶»à·\92à¶\9aà·\8aà·\82à·\8f à¶\9aර à¶¶à¶½à·\8f à¶\94බà¶\9cà·\9a à¶\85භà·\92ලà·\8fà·\82ය à¶¸à·\99යමà·\90යà·\92 à¶­à·\84à·\80à·\94රà·\94 à¶\9aà·\9cට à¶\9cà·\99න, à·\83à¶\82à·\83à·\8aà¶\9aරණය à¶\85à·\84à·\9dà·\83à·\92à¶\9aà·\92රà·\93ම à·\83ඳà·\84à·\8f පහත දැක්වෙන වෙනස්වීම් සුරකින්න.',
 'undo-failure' => 'පරස්පර විරෝධී අතරමැදි සංස්කරණ හේතුවෙන් මෙම සංස්කරණය අහෝසි කල නොහැක.',
 'undo-norev'   => 'එය නොපැවතීම නිසාවෙන් හෝ එය මකා දමා ඇති නිසාවෙන් මෙම සංස්කරණය අහෝසි කිරීම කල නොහැකි විය.',
 'undo-summary' => ' [[Special:Contributions/$2|$2]] මගින් සිදුකල  $1 සංශෝධනය අහෝසි කරන්න ([[User talk:$2|සාකච්ඡා]])',
@@ -1344,7 +1344,7 @@ HTML ටැගයන් පිරික්සන්න.',
 'prefs-signature'               => 'අත්සන',
 'prefs-dateformat'              => 'දින ආකෘතිය',
 'prefs-timeoffset'              => 'වේලා හිලව්ව',
-'prefs-advancedediting'         => 'පà·\8aâ\80\8dරà¶\9cත à·\80à·\92à¶\9aලà·\8aපයන්',
+'prefs-advancedediting'         => 'à·\80à·\90ඩà·\92දà·\94ර à¶­à·\9dරà·\8fà¶\9cà·\90නà·\93මà·\8a à·\83à·\90à¶\9aà·\83à·\94ම්',
 'prefs-advancedrc'              => 'ප්‍රගත විකල්පයන්',
 'prefs-advancedrendering'       => 'ප්‍රගත විකල්පයන්',
 'prefs-advancedsearchoptions'   => 'ප්‍රගත විකල්පයන්',
@@ -1701,9 +1701,9 @@ $1',
 'upload-file-error-text'    => 'සේවාදායකයෙහි තාවකාලික ගොනුවක් තැනීමට උත්සාහ දැරීමෙහිදී අභ්‍යන්තර දෝෂයක් හට ගැනිණි.
 කරුණාකර [[Special:ListUsers/sysop|පරිපාලකවරයෙක්]] වෙත යොමුවන්න.',
 'upload-misc-error'         => 'අඥාත උඩුගත කිරීම් දෝෂය',
-'upload-misc-error-text'    => 'à¶\8bඩà·\94à¶\9cත à¶\9aà·\92රà·\93මà·\9aදà·\93 à\85ඥà·\8fත දෝෂයක් සිදුවිය.
-කලාප ලිපිනයෙහි  (URL) නීතික බව හා ප්‍රවේශ්‍ය බව සත්‍යාපනය කොට නැවත උත්සාහ කරන්න.
-à¶\9cà·\90ටà·\85à·\94à·\80 à¶­à·\80දà·\94රටතà·\8a à¶´à·\80තà·\92යà·\92 නම්, [[Special:ListUsers/sysop|පරිපාලකවරයෙකු]] අමතන්න.',
+'upload-misc-error-text'    => 'à¶\8bඩà·\94à¶\9cත à¶\9aà·\92රà·\93මà·\9aදà·\93 à·\84ඳà·\94නà·\8fà¶\9cත à¶±à·\9cà·\84à·\90à¶\9aà·\92 දෝෂයක් සිදුවිය.
+URLහි නීතික බව හා ප්‍රවේශ්‍ය බව තහවුරුකරගෙන නැවත උත්සාහ කරන්න.
+à¶\9cà·\90ටà·\85à·\94à·\80 à¶­à·\80දà·\94රටතà·\8a à¶´à·\80තà·\93 නම්, [[Special:ListUsers/sysop|පරිපාලකවරයෙකු]] අමතන්න.',
 'upload-too-many-redirects' => 'අන්තර්ජාල ලිපිනයෙහි පමණට වඩා යළි-යොමුවීම් අඩංගු වෙයි',
 'upload-unknown-size'       => 'ප්‍රමාණය නොදනී',
 'upload-http-error'         => 'HTTP දෝෂයක් හට ගැනිණි: $1',
@@ -2330,11 +2330,11 @@ $2 ගේ අවසන් අනුවාදය වෙතට යළි වෙන
 'protect-existing-expiry'     => 'සංස්කරණ කල්ඉකුත්වීම් කාලය time: $3, $2',
 'protect-otherreason'         => 'අනෙකුත්/අමතර හේතුව:',
 'protect-otherreason-op'      => 'අනෙකුත් හේතුව',
-'protect-dropdown'            => '*à·\83à·\8fමනà·\8aâ\80\8dය à¶»à¶\9aà·\8aà·\82ණ à·\84à·\9aතà·\96නà·\8a
-** à¶\85තà·\8aâ\80\8dයනà·\8aත à·\80නà·\8aධà·\8aâ\80\8dයලය
-** à¶\85තà·\8aâ\80\8dයනà·\8aත à¶\85යà·\8fචà·\92ත-තà·\90පà·\91ල
+'protect-dropdown'            => '*බà·\84à·\94ල à¶\86රà¶\9aà·\8aà·\82ණ à·\84à·\9aතà·\94
+** à¶\85ධà·\92à¶\9aලà·\99à·\83 à·\83à·\92දà·\94à¶\9aරන à·\80à·\92නà·\8fà·\81à¶\9aà·\92රà·\93මà·\8a (vandalism)
+** à¶\85ධà·\92à¶\9aලà·\99à·\83 à·\83à·\8aපà·\91මà·\8a à¶\9aà·\92රà·\93ම
 ** නිෂ්ඵලදායී සංස්කරණ පොරකෑම්
-** අධික අතුරුමාරු සහිත පිටුව',
+** අධිකව භාවිතකරන පිටු',
 'protect-edit-reasonlist'     => 'සංස්කරණ ආරක්ෂණ හේතූන්',
 'protect-expiry-options'      => 'පැය 1:1 hour,දින 1:1 day, සති 1:1 week, සති 2:2 weeks, මාස 1:1 month, මාස 3:3 months, මාස 6:6 months, වසර 1:1 year, අනන්තය:infinite',
 'restriction-type'            => 'අවසරය:',
@@ -2938,7 +2938,7 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'spamprotectiontext'  => 'ඔබ හට සුරැකීමට අවශ්‍ය පිටුව අයාචිත-තැපැල් පෙරහන විසින් වාරණය කෙරිණි.
 මෙය බොහෝදුරට අපලේඛිත බාහිර අඩවියක් වෙත වූ සබැඳියක් හේතුවෙන් සිදුවන්නට ඇත.',
 'spamprotectionmatch' => 'ඔබගේ අයාචිත-තැපෑල  පෙරහන පූරනය කර ඇත්තේ ඉදිරියේ දැක්වෙන පෙළය: $1',
-'spambot_username'    => 'මà·\8fධà·\8aâ\80\8dයà·\80à·\92à¶\9aà·\92 à¶\85යà·\8fචà·\92ත-තà·\90පà·\91ල à·\81à·\9dධනය',
+'spambot_username'    => 'මà·\93ඩà·\92යà·\8fà·\80à·\92à¶\9aà·\92 à·\83à·\8aපà·\91මà·\8a à¶\89à·\80තà·\8aà¶\9aà·\92රà·\93ම',
 'spam_reverting'      => ' $1 හට සබැඳියන් නොමැති අවසන් අනුවාදය වෙත ප්‍රතිවර්තනය වෙමින්',
 'spam_blanking'       => 'සියළු සංශෝධනයන්හි  $1 වෙතවූ සබැඳියන් අඩංගු විය, හිස්කරමින්',
 
index b12cd03..06431a5 100644 (file)
@@ -22,6 +22,7 @@
  * @author Rudko
  * @author Sp5uhe
  * @author Tchoř
+ * @author Teslaton
  * @author Urhixidur
  * @author Valasek
  * @author Wizzard
@@ -658,11 +659,14 @@ Požiadavka: $2',
 'cascadeprotected'     => 'Táto stránka bola zamknutá proti úpravám, pretože je použitá na {{PLURAL:$1|nasledovnej stránke, ktorá je zamknutá|nasledovných stránkach, ktoré sú zamknuté}} voľbou „kaskádového zamknutia“:
 $2',
 'namespaceprotected'   => "Nemáte povolenie upravovať stránky v mennom priestore '''$1'''.",
-'customcssprotected'   => 'Nemáte právo upravovať túto CSS stránku, pretože obsahuje osobné nastavenie iného užívateľa.',
-'customjsprotected'    => 'Nemáte právo upravovať túto JavaScript stránku, pretože obsahuje osobné nastavenie iného užívateľa.',
+'customcssprotected'   => 'Nemáte právo upravovať túto CSS stránku, pretože obsahuje osobné nastavenie iného používateľa.',
+'customjsprotected'    => 'Nemáte právo upravovať túto JavaScript stránku, pretože obsahuje osobné nastavenie iného používateľa.',
 'ns-specialprotected'  => 'Stránky v mennom pristore {{ns:special}} nie je možné upravovať.',
 'titleprotected'       => "Používateľ [[User:$1|$1]] zabránil vytváraniu stránky s týmto názvom.
 Udaný dôvod: ''$2''.",
+'filereadonlyerror'    => "Nebolo možné modifikovať súbor „$1“, protože úložisko „$2“ je momentálne v režime len na čítanie.
+
+Udaný dôvod: „''$3''“.",
 
 # Virus scanner
 'virus-badscanner'     => "Chybná konfigurácia: neznámy antivírus: ''$1''",
@@ -752,7 +756,7 @@ Z tohto dôvodu nemôžu návštevníci z tejto IP adresy momentálne vytvoriť
 'noemailprefs'               => 'Tieto nástroje budú prístupné po vyplnení emailovej adresy vo vašich nastaveniach.',
 'emailconfirmlink'           => 'Potvrďte vašu e-mailovú adresu',
 'invalidemailaddress'        => 'Emailovú adresu nemožno akceptovať, pretože sa zdá, že má neplatný formát. Zadajte adresu v správnom tvare alebo nechajte príslušné políčko prázdne.',
-'cannotchangeemail'          => 'Na tejto wiki nie je možné meniť e-mailové adresy užívateľského konta.',
+'cannotchangeemail'          => 'Na tejto wiki nie je možné meniť e-mailové adresy používateľského konta.',
 'accountcreated'             => 'Účet vytvorený',
 'accountcreatedtext'         => 'Používateľský účet $1 bol vytvorený.',
 'createaccount-title'        => 'Vytvorenie účtu na {{GRAMMAR:lokál|{{SITENAME}}}}',
@@ -798,7 +802,7 @@ Je možné, že sa vám už podarilo úspešne zmeniť svoje heslo alebo ste si
 'passwordreset-username'           => 'Používateľské meno:',
 'passwordreset-domain'             => 'Doména:',
 'passwordreset-capture'            => 'Zobraziť výsledný e-mail?',
-'passwordreset-capture-help'       => 'Ak označíte toto políčko, bude e-mail (s dočasným heslom) okrem zaslania užívateľovi zobrazený aj vám.',
+'passwordreset-capture-help'       => 'Ak označíte toto políčko, bude e-mail (s dočasným heslom) okrem zaslania používateľovi zobrazený aj vám.',
 'passwordreset-email'              => 'Emailová adresa:',
 'passwordreset-emailtitle'         => 'Podrobnosti o účte na {{GRAMMAR:lokál|{{SITENAME}}}}',
 'passwordreset-emailtext-ip'       => 'Niekto (pravdepodobne vy z IP adresy $1) požiadal pripomenutie podrobností o vašom
@@ -825,7 +829,7 @@ ignorovať a ďalej používať vaše staré heslo.',
 Dočasné heslo:$2',
 'passwordreset-emailsent'          => 'Email s heslom bol odoslaný.',
 'passwordreset-emailsent-capture'  => 'Bol vytvorený pripomienkový e-mail, ktorý je zobrazený nižšie.',
-'passwordreset-emailerror-capture' => 'Bol vytvorený pripomienkový e-mail, ktorý je zobrazený nižšie, ale nepodarilo sa ho odoslať užívateľovi: $1',
+'passwordreset-emailerror-capture' => 'Bol vytvorený pripomienkový e-mail, ktorý je zobrazený nižšie, ale nepodarilo sa ho odoslať používateľovi: $1',
 
 # Special:ChangeEmail
 'changeemail'          => 'Zmena e-mailovej adresy',
@@ -1611,6 +1615,7 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'newsectionsummary'                 => '/* $1 */ nová sekcia',
 'rc-enhanced-expand'                => 'Zobraziť podrobnosti (vyžaduje JavaScript)',
 'rc-enhanced-hide'                  => 'Skryť podrobnosti',
+'rc-old-title'                      => 'pôvodne vytvorené ako "$1"',
 
 # Recent changes linked
 'recentchangeslinked'          => 'Súvisiace úpravy',
@@ -1787,6 +1792,7 @@ Ak problém pretrváva, kontaktujte [[Special:ListUsers/sysop|správcu systému]
 'backend-fail-closetemp'     => 'Nebolo možné zatvoriť dočasný súbor.',
 'backend-fail-read'          => 'Nebolo možné prečítať súbor „$1“.',
 'backend-fail-create'        => 'Nebolo možné vytvoriť súbor „$1“.',
+'backend-fail-maxsize'       => 'Súbor $1 nie je možné vytvoriť, pretože je väčší ako {{PLURAL:$2|$2 bajtov|$2 bajt}}.',
 'backend-fail-readonly'      => 'Úložisko „$1“ je momentálne v režime len na čítanie. Udaný dôvod: „$2“',
 'backend-fail-synced'        => 'Súbor „$1“ je v nekonzistentnom stave v rámci vnútorného úložiska',
 'backend-fail-connect'       => 'Nepodarilo sa pripojiť k úložisku „$1“.',
@@ -1794,6 +1800,9 @@ Ak problém pretrváva, kontaktujte [[Special:ListUsers/sysop|správcu systému]
 'backend-fail-contenttype'   => 'Nebolo možné určiť typ obsahu súboru, ktorý sa má uložiť na „$1“.',
 'backend-fail-batchsize'     => 'Do úložiska bola zaslaná dávka s $1 {{PLURAL:$1|operáciou|operáciami}}; limit je $2 {{PLURAL:$2|operácia|operácie|operácií}}.',
 
+'filejournal-fail-dbconnect' => 'Nepodarilo sa pripojiť k žurnálovej databáze úložiska „$1“.',
+'filejournal-fail-dbquery'   => 'Nepodarilo sa aktualizovať žurnálovú databázu úložiska „$1“.',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Nepodarilo sa odomknúť zámok „$1“; nie je zamknutý.',
 'lockmanager-fail-closelock'   => 'Nepodarilo sa zatvoriť súbor zámku pre „$1“.',
@@ -2118,6 +2127,11 @@ Môžete zúžiť rozsah, ak zvolíte typ záznamu, používateľské meno alebo
 'allpagesbadtitle'  => 'Zadaný názov stránky je neplatný alebo mal medzijazykový alebo interwiki prefix. Môže obsahovať jeden alebo viac znakov, ktoré nie je možné použiť v názve stránky.',
 'allpages-bad-ns'   => '{{SITENAME}} nemá menný priestor „$1“.',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Prezeráte si kópiu stránky z vyrovnávacej pamäte, môže byť stará až $1.',
+'cachedspecial-viewing-cached-ts'  => 'Prezeráte si kópiu stránky z vyrovnávacej pamäte, nemusí byť úplne aktuálna.',
+'cachedspecial-refresh-now'        => 'Zobraziť aktuálnu.',
+
 # Special:Categories
 'categories'                    => 'Kategórie',
 'categoriespagetext'            => '{{PLURAL:$1|Nasledovná kategória obsahuje|Nasledovné kategórie obsahujú}} stránky alebo multimediálne súbory.
@@ -2596,7 +2610,7 @@ z/od momentálne zablokovanej IP adresy/používateľa.',
 'emaillink'                       => 'poslať email',
 'autoblocker'                     => 'Boli ste automaticky zablokovaný, pretože vašu IP adresu nedávno použil „[[User:$1|$1]]“.
 Uvedený dôvod zablokovania používateľa $2 bol: „$2“',
-'blocklogpage'                    => 'Záznam_blokovaní',
+'blocklogpage'                    => 'Záznam blokovaní',
 'blocklog-showlog'                => 'Tento používateľ bol v minulosti zablokovaný. Záznam blokovaní uvádza nasledovný dôvod:',
 'blocklog-showsuppresslog'        => 'Tento používateľ bol v minulosti zablokovaný a skrytý. Záznam potlačení uvádza nasledovný dôvod:',
 'blocklogentry'                   => 'zablokoval/a "[[$1]]" s časom ukončenia $2 $3',
@@ -2963,7 +2977,7 @@ Umožnuje do zhrnutia pridanie dôvodu.',
 'handheld.css'    => '/* Tu umiestnené CSS bude ovplyvňovať prenosné zariadenia vychádzajúceho zo štýlu nastaveného v $wgHandheldStyle */',
 
 # Scripts
-'common.js'      => '/* Tu uvedený JavaScript sa nahrá všetkým užívateľom pri každom nahraní stránky. */',
+'common.js'      => '/* Tu uvedený JavaScript sa nahrá všetkým používateľom pri každom nahraní stránky. */',
 'standard.js'    => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Klasický */',
 'nostalgia.js'   => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Nostalgia */',
 'cologneblue.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Kolínska modrá */',
@@ -3797,7 +3811,7 @@ Obrázky sa zobrazia v plnom rozlíšení, ostatné typy súborov sa spustia v p
 'dberr-info'        => '(Spojenie s databázovým serverom neúspešné: $1)',
 'dberr-usegoogle'   => 'Zatiaľ môžete skúsiť hľadať pomocou Google.',
 'dberr-outofdate'   => 'Pamätajte, že ich indexy nemusia byť aktuálne.',
-'dberr-cachederror' => 'Toto je kópia požadovanej ztránky z vyrovnávacej pamäte a nemusí byť aktuálna.',
+'dberr-cachederror' => 'Toto je kópia požadovanej stránky z vyrovnávacej pamäte a nemusí byť aktuálna.',
 
 # HTML forms
 'htmlform-invalid-input'       => 'Niekotrý z údajov, ktoré ste zadali je problematický',
@@ -3901,4 +3915,15 @@ V opačnom prípade môžete použiť zjednodušený formulár nižšie. Váš k
 'api-error-uploaddisabled'                => 'Nahrávanie je na tejto wiki zakázané.',
 'api-error-verification-error'            => 'Tento súbor môže byť poškodený, alebo má zlú príponu.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|sekunda|sekundy|sekúnd}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|minúta|minúty|minút}}',
+'duration-hours'     => '$1 {{PLURAL:$1|hodina|hodiny|hodín}}',
+'duration-days'      => '$1 {{PLURAL:$1|deň|dni|dní}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|týždeň|týždne|týždňov}}',
+'duration-years'     => '$1 {{PLURAL:$1|rok|roky|rokov}}',
+'duration-decades'   => '$1 {{PLURAL:$1|dekáda|dekády|dekád}}',
+'duration-centuries' => '$1 {{PLURAL:$1|storočie|storočia|storočí}}',
+'duration-millennia' => '$1 {{PLURAL:$1|tisícročie|tisícročia|tisícročí}}',
+
 );
index d2e5e13..6d237f1 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Dbc334
  * @author Freakolowsky
+ * @author Irena Plahuta
  * @author McDutchie
  * @author Smihael
  * @author XJamRastafire
@@ -570,6 +571,9 @@ $2',
 'ns-specialprotected'  => 'Posebnih strani ni mogoče urejati.',
 'titleprotected'       => "Uporabnik [[User:$1|$1]] je preprečil ustvarjanje strani s takim naslovom.
 Podani razlog je bil »''$2''«.",
+'filereadonlyerror'    => "Ne morem spremeniti datoteke »$1«, ker je skladišče datotek »$2« v načinu, ki dovoljuje samo branje.
+
+Podano pojasnilo je »''$3''«.",
 
 # Virus scanner
 'virus-badscanner'     => "Slaba konfiguracija: neznani virus skener: ''$1''",
@@ -1715,6 +1719,7 @@ Prosimo, preverite veljavnost in dostopnost naslova URL ter poskusite ponovno.
 'backend-fail-closetemp'     => 'Ne morem zapreti začasne datoteke.',
 'backend-fail-read'          => 'Ne morem brati datoteke $1.',
 'backend-fail-create'        => 'Ne morem ustvariti datoteke $1.',
+'backend-fail-maxsize'       => 'Ne morem ustvariti datoteke $1, kjer je večja od {{PLURAL:$2|$2 bajta|$2 bajtov}}.',
 'backend-fail-readonly'      => 'Skladiščno zaledje »$1« je trenutno označeno samo za branje. Podan razlog je: »$2«',
 'backend-fail-synced'        => 'Datoteka »$1« je v neskladnem stanju z notranjimi skladiščnimi zaledji',
 'backend-fail-connect'       => 'Ne morem se povezati s skladiščnim zaledjem »$1«.',
@@ -1722,6 +1727,9 @@ Prosimo, preverite veljavnost in dostopnost naslova URL ter poskusite ponovno.
 'backend-fail-contenttype'   => 'Ne morem določiti vrsto vsebine datoteke za shranjevanje pri »$1«.',
 'backend-fail-batchsize'     => 'Skladiščnemu zaledju je dana vrsta $1 {{PLURAL:$1|datotečne operacije|datotečnih operacij}}; omejitev {{PLURAL:$2|je $2 operacija|sta $2 operaciji|so $2 operacije|je $2 operacij}}.',
 
+'filejournal-fail-dbconnect' => 'Ne morem se povezati z listovno zbirko podatkov za skladiščno zaledje »$1«.',
+'filejournal-fail-dbquery'   => 'Ne morem posodobiti listovne zbirke podatkov za skladiščno zaledje »$1«.',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Ne morem odkleniti »$1«, saj ni zaklenjeno.',
 'lockmanager-fail-closelock'   => 'Ne morem zapreti zaklenitvene datoteke »$1«.',
@@ -2055,6 +2063,11 @@ Prosimo, upoštevajte, da se lahko druge spletne strani povezujejo na datoteko z
 Morda vsebuje enega ali več znakov, ki niso dovoljeni v naslovih.',
 'allpages-bad-ns'   => '{{SITENAME}} nima imenskega prostora »$1«.',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Ogledujete si predpomnjeno različico strani, ki je lahko stara $1.',
+'cachedspecial-viewing-cached-ts'  => 'Ogledujete si predpomnjeno različico strani, ki morda ni popolnoma posodobljena.',
+'cachedspecial-refresh-now'        => 'Ogled najnovejše.',
+
 # Special:Categories
 'categories'                    => 'Kategorije',
 'categoriespagetext'            => '{{PLURAL:$1|Naslednja $1 kategorija vsebuje|Naslednji $1 kategoriji vsebujeta|Naslednje $1 kategorije vsebujejo|Naslednjih $1 kategorij vsebuje}} strani ali datoteke.
@@ -3820,4 +3833,15 @@ V nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bom
 'api-error-uploaddisabled'                => 'Nalaganje je onemogočeno na tem wikiju.',
 'api-error-verification-error'            => 'Ta datoteka je morda poškodovana ali ima napačno končnico.',
 
+# Durations
+'duration-seconds'   => '$1 {{PLURAL:$1|sekunda|sekundi|sekunde|sekund}}',
+'duration-minutes'   => '$1 {{PLURAL:$1|minuta|minuti|minute|minut}}',
+'duration-hours'     => '$1 {{PLURAL:$1|ura|uri|ure|ur}}',
+'duration-days'      => '$1 {{PLURAL:$1|dan|dneva|dnevi|dni}}',
+'duration-weeks'     => '$1 {{PLURAL:$1|teden|tedna|tedni|tednov}}',
+'duration-years'     => '$1 {{PLURAL:$1|leto|leti|leta|let}}',
+'duration-decades'   => '$1 {{PLURAL:$1|desetletje|desetletji|desetletja|desetletij}}',
+'duration-centuries' => '$1 {{PLURAL:$1|stoletje|stoletji|stoletja|stoletij}}',
+'duration-millennia' => '$1 {{PLURAL:$1|tisočletje|tisočletji|tisočletja|tisočletij}}',
+
 );
index 12c1146..0e2d7c2 100644 (file)
@@ -14,6 +14,7 @@
  * @author Dori
  * @author Eagleal
  * @author Ergon
+ * @author Euriditi
  * @author Kaganer
  * @author Marinari
  * @author Mdupont
@@ -560,8 +561,8 @@ Mund të jetë fshirë nga dikush tjetër.',
 'badtitle'             => 'Titull i pasaktë',
 'badtitletext'         => 'Titulli i faqes që kërkuat nuk ishte i saktë, ishte bosh, ose ishte një titull ndër-gjuhësor/inter-wiki me lidhje të pasaktë.
 Mund të përmbajë një ose më shumë germa, të cilat nuk mund të përdoren në tituj.',
-'perfcached'           => 'Informacioni i mëposhtëm është kopje e ruajtur dhe mund të mos jetë i përditësuar. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts'         => 'Informacioni i mëposhtëm është një kopje e rifreskuar më $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached'           => 'nformacioni i mëposhtëm është kopje e ruajtur dhe mund të mos jetë i përditësuar. E shumta  {{PLURAL:$1|një rezultat është|$1 rezultate janë}} ruajtur në kopje.',
+'perfcachedts'         => 'Informacioni i mëposhtëm është një kopje e rifreskuar më $1. E shumta  {{PLURAL:$4|një rezultat është|$4 rezultate janë}} ruajtur në kopje.',
 'querypage-no-updates' => "Përditësimet për këtë faqe për momentin janë të ç'aktivizuara.
 Këtu informacioni nuk do të jetë i përditësuar.",
 'wrong_wfQuery_params' => 'Parametrat gabim tek wfQuery()<br />
@@ -907,7 +908,7 @@ Gjithashtu, ju po na premtoni ne që gjithçka e keni shkruar vetë, ose e keni
 Nëse ju nuk dëshironi që shkrimet tuaja të redaktohen pa mëshirë dhe të shpërndahen sipas dëshirës, atëherë mos i vendosni këtu<br />
 Gjithashtu, ju po na premtoni ne që gjithçka e keni shkruar vetë, ose e keni kopjuar nga një domain publik ose nga burime të tjera  te hapura.
 '''Mos vendosni material të mbrojtur nga e drejta e autorit pa leje!'''",
-'longpageerror'                    => "'''Gabim: Teksti që shkruat është $1 kilobajt i gjatë, që është më i gjatë se maksimumi i lejuar prej $2 kilobajtësh.'''
+'longpageerror'                    => "'''Gabim: Teksti që shkruat është  {{PLURAL:$1|një kilobajt|$1 kilobajt}} i gjatë, që është mëtepër se maksimumi i lejuar prej  {{PLURAL:$2|një kilobajt|$2 kilobajtësh}} .'''
 Nuk mund të ruhet.",
 'readonlywarning'                  => "'''Kujdes: Baza e të dhënave është mbyllur për mirëmbajtje, prandaj ju nuk do të mund të ruani redaktimin tuaj për momentin.'''
 Ju mund të kopjoni tekstin dhe ta ruani për më vonë në një dokument tjetër.'''
@@ -1727,7 +1728,7 @@ Ajo nuk mund të kontrollohet siç duhet për sigurinë.',
 'img-auth-nopathinfo'       => 'Mungon PATH_INFO.
 Shërbyesi juaj nuk e kalon këtë informacion.
 Mund të jetë CGI-bazuar dhe nuk mund të mbështesë img_auth.
-[https://www.mediawiki.org/wiki/Manual:Image_Authorization Shikoni autorizimin për figurat.]',
+Shiko https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-notindir'         => 'Kërkesa nuk është në drejtorinë e ngarkimeve të konfiguruara.',
 'img-auth-badtitle'         => 'Nuk mund të krihohej një titull i vlefshëm nga "$1".',
 'img-auth-nologinnWL'       => 'Ju nuk jeni i regjistruar dhe "$1" nuk është në listën e bardhë.',
@@ -2787,72 +2788,77 @@ Ju lutemi provoni përsëri.',
 'import-logentry-interwiki'        => 'transwikoji $1',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$!1|version|versione}} nga $2',
 
+# JavaScriptTest
+'javascripttest-qunit-intro' => 'Shiko [$1 dokumentacionin e testimit] në mediawiki.org.',
+
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'Faqja juaj e përdoruesit',
-'tooltip-pt-anonuserpage'         => 'Faqja e përdoruesve anonim nga kjo adresë IP',
-'tooltip-pt-mytalk'               => 'Faqja juaj e diskutimeve',
-'tooltip-pt-anontalk'             => 'Faqja e diskutimeve të përdoruesve anonim për këtë adresë IP',
-'tooltip-pt-preferences'          => 'Parapëlqimet tuaja',
-'tooltip-pt-watchlist'            => 'Lista e faqeve nën mbikqyrjen tuaj.',
-'tooltip-pt-mycontris'            => 'Lista e kontributeve tuaja',
-'tooltip-pt-login'                => 'Identifikimi nuk është i detyrueshëm, megjithatë ne jua rekomandojmë.',
-'tooltip-pt-anonlogin'            => 'Të hysh brenda nuk është e detyrueshme, por ka shumë përparësi.',
-'tooltip-pt-logout'               => 'Dalje',
-'tooltip-ca-talk'                 => 'Diskutim për faqen përmbajtje',
-'tooltip-ca-edit'                 => 'Ju mund ta redaktoni këtë faqe. Përdorni butonin Trego parapamjen para se të ruani ndryshimet.',
-'tooltip-ca-addsection'           => 'Fillo një temë të re diskutimi.',
-'tooltip-ca-viewsource'           => 'Kjo faqe është e mbrojtur. Ju mundeni vetëm ta shikoni burimin e tekstit.',
-'tooltip-ca-history'              => 'Versione të mëparshme të artikullit.',
-'tooltip-ca-protect'              => 'Mbroje këtë faqe',
-'tooltip-ca-unprotect'            => 'Liroje mbrojtjen e kësaj faqeje',
-'tooltip-ca-delete'               => 'Grise këtë faqe',
-'tooltip-ca-undelete'             => 'Faqja u restaurua',
-'tooltip-ca-move'                 => 'Me anë të zhvendosjes mund ta ndryshoni titullin e artikullit',
-'tooltip-ca-watch'                => 'Shtoje faqen në lisën e faqeve nën mbikqyrje',
-'tooltip-ca-unwatch'              => 'Hiqe faqen nga lista e faqeve nën mbikqyrje.',
-'tooltip-search'                  => 'Kërko {{SITENAME}}',
-'tooltip-search-go'               => 'Shko tek faqja me këtë emër nëse ekziston',
-'tooltip-search-fulltext'         => 'Kërko faqet për këtë tekst',
-'tooltip-p-logo'                  => 'Vizito faqen kryesore',
-'tooltip-n-mainpage'              => 'Vizitoni Faqen kryesore',
-'tooltip-n-mainpage-description'  => 'Vizito faqen kryesore',
-'tooltip-n-portal'                => 'Rreth projektit, çfarë mund të bëni dhe ku gjenden gjërat',
-'tooltip-n-currentevents'         => 'Kërko informacion të mëparshëm për ngjarjet aktuale.',
-'tooltip-n-recentchanges'         => 'Lista e ndryshimeve më të fundit në wiki',
-'tooltip-n-randompage'            => 'Shikoni një artikull të rastit',
-'tooltip-n-help'                  => 'Vendi ku mund të gjeni ndihmë',
-'tooltip-t-whatlinkshere'         => 'Lista e të gjitha faqeve wiki që lidhen tek kjo faqe',
-'tooltip-t-recentchangeslinked'   => 'Lista e ndryshimeve të faqeve që lidhen tek kjo faqe',
-'tooltip-feed-rss'                => 'Burimi ushqyes "RSS" për këtë faqe',
-'tooltip-feed-atom'               => 'Burimi ushqyes "Atom" për këtë faqe',
-'tooltip-t-contributions'         => 'Shiko listën e kontributeve për përdoruesin në fjalë',
-'tooltip-t-emailuser'             => 'Dërgoni një email përdoruesit',
-'tooltip-t-upload'                => 'Ngarko skeda',
-'tooltip-t-specialpages'          => 'Lista e të gjitha faqeve speciale.',
-'tooltip-t-print'                 => 'Version i shtypshëm i kësaj faqeje',
-'tooltip-t-permalink'             => 'Lidhja e përhershme tek ky version i faqes',
-'tooltip-ca-nstab-main'           => 'Shikoni përmbajtjen e atikullit.',
-'tooltip-ca-nstab-user'           => 'Shikoni faqen e përdoruesit',
-'tooltip-ca-nstab-media'          => 'Shikoni faqen e skedës',
-'tooltip-ca-nstab-special'        => 'Kjo është një faqe speciale. Ju nuk mundeni ta redaktoni këtë faqe',
-'tooltip-ca-nstab-project'        => 'Shikoni faqen e projektit',
-'tooltip-ca-nstab-image'          => 'Shikoni faqen e figurës',
-'tooltip-ca-nstab-mediawiki'      => 'Shikoni mesazhet e sistemit',
-'tooltip-ca-nstab-template'       => 'Shikoni stampën',
-'tooltip-ca-nstab-help'           => 'Shikoni faqet ndihmëse',
-'tooltip-ca-nstab-category'       => 'Shikoni faqen e kategorisë',
-'tooltip-minoredit'               => 'Shënoje këtë redaktim të vogël',
-'tooltip-save'                    => 'Kryej ndryshimet',
-'tooltip-preview'                 => 'Shqyrtoni ndryshimet tuaj, ju lutemi, bëjeni këtë para se të ruani ndryshimet!',
-'tooltip-diff'                    => 'Trego ndryshimet që Ju i keni bërë tekstit.',
-'tooltip-compareselectedversions' => 'Shikoni krahasimin midis dy versioneve të zgjedhura të kësaj faqeje.',
-'tooltip-watch'                   => 'Mbikqyre këtë faqe',
-'tooltip-recreate'                => 'Rikrijoje faqen edhe nëse është grisur më parë',
-'tooltip-upload'                  => 'Fillo ngarkimin',
-'tooltip-rollback'                => '"Rikthimi" rikthen ndryshimet tek kjo faqe nga redaktuesi i fundit vetëm me një klikim.',
-'tooltip-undo'                    => '"Zhbëje" rikthen këtë ndryshim dhe hap modulin e redaktimit për shqyrtim. Lejon që të jepni një arsye tek përmbledhja.',
-'tooltip-preferences-save'        => 'Ruaj parapëlqimet',
-'tooltip-summary'                 => 'Fusni një përmbledhje të shkurtër',
+'tooltip-pt-userpage'                 => 'Faqja juaj e përdoruesit',
+'tooltip-pt-anonuserpage'             => 'Faqja e përdoruesve anonim nga kjo adresë IP',
+'tooltip-pt-mytalk'                   => 'Faqja juaj e diskutimeve',
+'tooltip-pt-anontalk'                 => 'Faqja e diskutimeve të përdoruesve anonim për këtë adresë IP',
+'tooltip-pt-preferences'              => 'Parapëlqimet tuaja',
+'tooltip-pt-watchlist'                => 'Lista e faqeve nën mbikqyrjen tuaj.',
+'tooltip-pt-mycontris'                => 'Lista e kontributeve tuaja',
+'tooltip-pt-login'                    => 'Identifikimi nuk është i detyrueshëm, megjithatë ne jua rekomandojmë.',
+'tooltip-pt-anonlogin'                => 'Të hysh brenda nuk është e detyrueshme, por ka shumë përparësi.',
+'tooltip-pt-logout'                   => 'Dalje',
+'tooltip-ca-talk'                     => 'Diskutim për faqen përmbajtje',
+'tooltip-ca-edit'                     => 'Ju mund ta redaktoni këtë faqe. Përdorni butonin Trego parapamjen para se të ruani ndryshimet.',
+'tooltip-ca-addsection'               => 'Fillo një temë të re diskutimi.',
+'tooltip-ca-viewsource'               => 'Kjo faqe është e mbrojtur. Ju mundeni vetëm ta shikoni burimin e tekstit.',
+'tooltip-ca-history'                  => 'Versione të mëparshme të artikullit.',
+'tooltip-ca-protect'                  => 'Mbroje këtë faqe',
+'tooltip-ca-unprotect'                => 'Liroje mbrojtjen e kësaj faqeje',
+'tooltip-ca-delete'                   => 'Grise këtë faqe',
+'tooltip-ca-undelete'                 => 'Faqja u restaurua',
+'tooltip-ca-move'                     => 'Me anë të zhvendosjes mund ta ndryshoni titullin e artikullit',
+'tooltip-ca-watch'                    => 'Shtoje faqen në lisën e faqeve nën mbikqyrje',
+'tooltip-ca-unwatch'                  => 'Hiqe faqen nga lista e faqeve nën mbikqyrje.',
+'tooltip-search'                      => 'Kërko {{SITENAME}}',
+'tooltip-search-go'                   => 'Shko tek faqja me këtë emër nëse ekziston',
+'tooltip-search-fulltext'             => 'Kërko faqet për këtë tekst',
+'tooltip-p-logo'                      => 'Vizito faqen kryesore',
+'tooltip-n-mainpage'                  => 'Vizitoni Faqen kryesore',
+'tooltip-n-mainpage-description'      => 'Vizito faqen kryesore',
+'tooltip-n-portal'                    => 'Rreth projektit, çfarë mund të bëni dhe ku gjenden gjërat',
+'tooltip-n-currentevents'             => 'Kërko informacion të mëparshëm për ngjarjet aktuale.',
+'tooltip-n-recentchanges'             => 'Lista e ndryshimeve më të fundit në wiki',
+'tooltip-n-randompage'                => 'Shikoni një artikull të rastit',
+'tooltip-n-help'                      => 'Vendi ku mund të gjeni ndihmë',
+'tooltip-t-whatlinkshere'             => 'Lista e të gjitha faqeve wiki që lidhen tek kjo faqe',
+'tooltip-t-recentchangeslinked'       => 'Lista e ndryshimeve të faqeve që lidhen tek kjo faqe',
+'tooltip-feed-rss'                    => 'Burimi ushqyes "RSS" për këtë faqe',
+'tooltip-feed-atom'                   => 'Burimi ushqyes "Atom" për këtë faqe',
+'tooltip-t-contributions'             => 'Shiko listën e kontributeve për përdoruesin në fjalë',
+'tooltip-t-emailuser'                 => 'Dërgoni një email përdoruesit',
+'tooltip-t-upload'                    => 'Ngarko skeda',
+'tooltip-t-specialpages'              => 'Lista e të gjitha faqeve speciale.',
+'tooltip-t-print'                     => 'Version i shtypshëm i kësaj faqeje',
+'tooltip-t-permalink'                 => 'Lidhja e përhershme tek ky version i faqes',
+'tooltip-ca-nstab-main'               => 'Shikoni përmbajtjen e atikullit.',
+'tooltip-ca-nstab-user'               => 'Shikoni faqen e përdoruesit',
+'tooltip-ca-nstab-media'              => 'Shikoni faqen e skedës',
+'tooltip-ca-nstab-special'            => 'Kjo është një faqe speciale. Ju nuk mundeni ta redaktoni këtë faqe',
+'tooltip-ca-nstab-project'            => 'Shikoni faqen e projektit',
+'tooltip-ca-nstab-image'              => 'Shikoni faqen e figurës',
+'tooltip-ca-nstab-mediawiki'          => 'Shikoni mesazhet e sistemit',
+'tooltip-ca-nstab-template'           => 'Shikoni stampën',
+'tooltip-ca-nstab-help'               => 'Shikoni faqet ndihmëse',
+'tooltip-ca-nstab-category'           => 'Shikoni faqen e kategorisë',
+'tooltip-minoredit'                   => 'Shënoje këtë redaktim të vogël',
+'tooltip-save'                        => 'Kryej ndryshimet',
+'tooltip-preview'                     => 'Shqyrtoni ndryshimet tuaj, ju lutemi, bëjeni këtë para se të ruani ndryshimet!',
+'tooltip-diff'                        => 'Trego ndryshimet që Ju i keni bërë tekstit.',
+'tooltip-compareselectedversions'     => 'Shikoni krahasimin midis dy versioneve të zgjedhura të kësaj faqeje.',
+'tooltip-watch'                       => 'Mbikqyre këtë faqe',
+'tooltip-watchlistedit-normal-submit' => 'Largo titujt',
+'tooltip-watchlistedit-raw-submit'    => 'Aktualizo listën mbikqyrëse',
+'tooltip-recreate'                    => 'Rikrijoje faqen edhe nëse është grisur më parë',
+'tooltip-upload'                      => 'Fillo ngarkimin',
+'tooltip-rollback'                    => '"Rikthimi" rikthen ndryshimet tek kjo faqe nga redaktuesi i fundit vetëm me një klikim.',
+'tooltip-undo'                        => '"Zhbëje" rikthen këtë ndryshim dhe hap modulin e redaktimit për shqyrtim. Lejon që të jepni një arsye tek përmbledhja.',
+'tooltip-preferences-save'            => 'Ruaj parapëlqimet',
+'tooltip-summary'                     => 'Fusni një përmbledhje të shkurtër',
 
 # Stylesheets
 'monobook.css' => '/* redaktoni këtë faqe për të përshtatur pamjen Monobook për tëra faqet tuaja */',
@@ -3738,6 +3744,7 @@ Përndryshe, ju mund të formularin e thjeshtë më poshtë. Komenti juaj do të
 'api-error-duplicate-archive-popup-title' => 'Dublo {{PLURAL:$1|skedë|skeda}} që janë grisur tashmë',
 'api-error-duplicate-popup-title'         => 'Dublo {{PLURAL:$1|skedë|skeda}}',
 'api-error-empty-file'                    => 'Skeda që paraqitët ishte bosh.',
+'api-error-emptypage'                     => 'Nuk lejohet krijimi i faqeve të reja bosh.',
 'api-error-fetchfileerror'                => 'Gabim i brendshëm: Diçka shkoi keq gjatë marrjes së skedës.',
 'api-error-file-too-large'                => 'Skeda që paraqitët ishte shumë e madhe.',
 'api-error-filename-tooshort'             => 'Emri i skedës është shumë i shkurtër.',
@@ -3762,6 +3769,7 @@ Përndryshe, ju mund të formularin e thjeshtë më poshtë. Komenti juaj do të
 'api-error-unknown-code'                  => 'Gabim i panjohur: "$1"',
 'api-error-unknown-error'                 => 'Gabim i brendshëm: Diçka shkoi gabim kur provuat të ngarkoni skedën tuaj.',
 'api-error-unknown-warning'               => 'Paralajmërim i panjohur: $1',
+'api-error-unknownerror'                  => 'Gabim i papërcaktuar: "$1".',
 'api-error-uploaddisabled'                => 'Ngarkimi është i çaktivizuar në këte wiki.',
 'api-error-verification-error'            => 'Skeda mund të jetë e korruptuar ose ka shtesë të gabuar.',
 
index 609f57b..7215184 100644 (file)
@@ -1956,6 +1956,7 @@ $1',
 'backend-fail-closetemp'     => 'Не могу да затворим привремену датотеку.',
 'backend-fail-read'          => 'Не могу да прочитам датотеку $1.',
 'backend-fail-create'        => 'Не могу да направим датотеку $1.',
+'backend-fail-maxsize'       => 'Не могу да направим датотеку $1 јер је већа од {{PLURAL:$2|$2 бајта|$2 бајта|$2 бајтова}}.',
 'backend-fail-readonly'      => 'Складишна основа „$1“ тренутно не може да се записује. Наведени разлог гласи: „$2“',
 'backend-fail-synced'        => 'Датотека „$1“ је недоследна између унутрашњих складишних основа',
 'backend-fail-connect'       => 'Не могу да се повежем са складишном основом „$1“.',
@@ -1963,6 +1964,9 @@ $1',
 'backend-fail-contenttype'   => 'Не могу да утврдим какав садржај има датотека коју треба да сместим у „$1“.',
 'backend-fail-batchsize'     => 'Складишна основа је добила блокаду од $1 {{PLURAL:$1|операције|операције|операција}}; ограничење је $2 {{PLURAL:$2|операција|операције|операција}}.',
 
+'filejournal-fail-dbconnect' => 'Не могу да се повежем с новинарском базом за складишну основу „$1“.',
+'filejournal-fail-dbquery'   => 'Не могу да ажурирам новинарску базу за складишну основу „$1“.',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Не могу да откључам „$1“ јер није закључан.',
 'lockmanager-fail-closelock'   => 'Не могу да затворим катанац за „$1“.',
@@ -3542,7 +3546,7 @@ Variants for Chinese language
 'exif-datetimeexpires'             => 'Не користи након',
 'exif-datetimereleased'            => 'Објављено',
 'exif-originaltransmissionref'     => 'Изворни пренос кôда локације',
-'exif-identifier'                  => 'Ð\9eзнака',
+'exif-identifier'                  => 'Ð\9dазнака',
 'exif-lens'                        => 'Коришћени објектив',
 'exif-serialnumber'                => 'Серијски број камере',
 'exif-cameraownername'             => 'Власник камере',
@@ -3900,7 +3904,7 @@ $5
 
 # Delete conflict
 'deletedwhileediting'      => "'''Упозорење''': ова страница је обрисана након што сте почели с уређивањем!",
-'confirmrecreate'          => "[[User:$1|$1]] ([[User talk:$1|разговор]]) {{GENDER:$1|је обрисао|је обрисала|обриса}} ову страницу након што сте почели да је уређујете, са следећим разлогом:
+'confirmrecreate'          => "[[User:$1|$1]] ([[User talk:$1|разговор]]) {{GENDER:$1|је обрисао|је обрисала|је обрисао}} ову страницу након што сте почели да је уређујете, са следећим разлогом:
 : ''$2''
 Потврдите да стварно желите да направите страницу.",
 'confirmrecreate-noreason' => 'Корисник [[User:$1|$1]] ([[User talk:$1|разговор]]) је обрисао ову страницу након што сте почели да га уређујете. Потврдите да стварно желите да поново направите ову страницу.',
index a6ff20a..761bc19 100644 (file)
@@ -1857,6 +1857,7 @@ Ako se problem ne reši, kontaktirajte [[Special:ListUsers/sysop|administratora]
 'backend-fail-closetemp'     => 'Ne mogu da zatvorim privremenu datoteku.',
 'backend-fail-read'          => 'Ne mogu da pročitam datoteku $1.',
 'backend-fail-create'        => 'Ne mogu da napravim datoteku $1.',
+'backend-fail-maxsize'       => 'Ne mogu da napravim datoteku $1 jer je veća od {{PLURAL:$2|$2 bajta|$2 bajta|$2 bajtova}}.',
 'backend-fail-readonly'      => 'Skladišna osnova „$1“ trenutno ne može da se zapisuje. Navedeni razlog glasi: „$2“',
 'backend-fail-synced'        => 'Datoteka „$1“ je nedosledna između unutrašnjih skladišnih osnova',
 'backend-fail-connect'       => 'Ne mogu da se povežem sa skladišnom osnovom „$1“.',
@@ -1864,6 +1865,9 @@ Ako se problem ne reši, kontaktirajte [[Special:ListUsers/sysop|administratora]
 'backend-fail-contenttype'   => 'Ne mogu da utvrdim kakav sadržaj ima datoteka koju treba da smestim u „$1“.',
 'backend-fail-batchsize'     => 'Skladišna osnova je dobila blokadu od $1 {{PLURAL:$1|operacije|operacije|operacija}}; ograničenje je $2 {{PLURAL:$2|operacija|operacije|operacija}}.',
 
+'filejournal-fail-dbconnect' => 'Ne mogu da se povežem s novinarskom bazom za skladišnu osnovu „$1“.',
+'filejournal-fail-dbquery'   => 'Ne mogu da ažuriram novinarsku bazu za skladišnu osnovu „$1“.',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Ne mogu da otključam „$1“ jer nije zaključan.',
 'lockmanager-fail-closelock'   => 'Ne mogu da zatvorim katanac za „$1“.',
index 46ed441..55b99c3 100644 (file)
@@ -698,6 +698,9 @@ $2',
 'ns-specialprotected'  => 'Specialsidor kan inte redigeras.',
 'titleprotected'       => 'Denna sidtitel har skyddats från att skapas av [[User:$1|$1]].
 Den uppgivna anledningen är "\'\'$2\'\'".',
+'filereadonlyerror'    => 'Det går inte att ändra filen "$1", eftersom fildatabasen "$2" är i skrivskyddat läge.
+
+Den angivna anledningen var "\'\'$3\'\'".',
 
 # Virus scanner
 'virus-badscanner'     => "Dålig konfigurering: okänd virusskanner: ''$1''",
@@ -1818,12 +1821,16 @@ Om problemet kvarstår, kontakta en [[Special:ListUsers/sysop|administratör]].'
 'backend-fail-closetemp'     => 'Kunde inte stänga temporär fil.',
 'backend-fail-read'          => 'Kunde inte läsa filen $1.',
 'backend-fail-create'        => 'Kunde inte skapa filen $1.',
-'backend-fail-readonly'      => 'Lagrings-backend "$1" är för närvarande skrivskyddad. Den angivna anledningen är: "$2"',
-'backend-fail-synced'        => 'Filen "$1" är i ett inkonsekvent tillstånd inom de interna lagrings-backends',
-'backend-fail-connect'       => 'Kunde inte ansluta till lagrings-backend "$1".',
-'backend-fail-internal'      => 'Ett okänt fel uppstod i lagrings-backend "$1".',
+'backend-fail-maxsize'       => 'Kunde inte skapa filen $1, eftersom den är större än {{PLURAL:$2|$2|$2}} byte.',
+'backend-fail-readonly'      => 'Lagringssystemet "$1" är för närvarande skrivskyddad. Den angivna anledningen är: "$2"',
+'backend-fail-synced'        => 'Filen "$1" är i ett inkonsekvent tillstånd inom de interna lagringssystemen',
+'backend-fail-connect'       => 'Kunde inte ansluta till lagringssystemet "$1".',
+'backend-fail-internal'      => 'Ett okänt fel uppstod i lagringssystemet "$1".',
 'backend-fail-contenttype'   => 'Kunde inte bestämma innehållstypen för filen att spara på "$1".',
-'backend-fail-batchsize'     => 'Lagrings-backend gavs en batch på $1 fil{{PLURAL:$1|operation|operationer}}; gränsen är $2 {{PLURAL:$2|operation|operationer}}.',
+'backend-fail-batchsize'     => 'Lagringssystemet gav en batch på $1 fil{{PLURAL:$1|operation|operationer}}; gränsen är $2 {{PLURAL:$2|operation|operationer}}.',
+
+'filejournal-fail-dbconnect' => 'Kunde inte ansluta till journaldatabasen för lagringssystemet "$1".',
+'filejournal-fail-dbquery'   => 'Kunde inte uppdatera journaldatabasen för lagringssystemet "$1".',
 
 # Lock manager
 'lockmanager-notlocked'        => 'Kunde inte låsa upp "$1"; den är inte låst.',
index 3b097f9..736828c 100644 (file)
@@ -485,7 +485,7 @@ Huenda likawa tayari lishafutwa na mtu mwingine.',
 'badtitle'             => 'Jina halifai',
 'badtitletext'         => 'Jina la ukurasa ulilotaka ni batilifu, tupu, au limeungwa vibaya na jina la lugha nyingine au Wiki nyingine.  Labda linazo herufi moja au zaidi ambazo hazitumiki katika majina.',
 'perfcached'           => 'Data zifuatazo zimekachewa na huenda zisiwe za kisasa. Mwisho wa {{PLURAL:$1|jibu moja linapatikana|majibu $1 yanapatikana}} katika kache.',
-'perfcachedts'         => 'Data zifuatazo zimetoka kwenye kache iliobadilishwa mara ya mwisho saa $3, tarehe $2. Mwisho wa {{PLURAL:$1|jibu moja linapatikana|majibu $1 yanapatikana}} katika kache.',
+'perfcachedts'         => 'Data zifuatazo zimetoka kwenye kache iliobadilishwa mara ya mwisho saa $3, tarehe $2. Mwisho wa {{PLURAL:$4|jibu moja linapatikana|majibu $4 yanapatikana}} katika kache.',
 'querypage-no-updates' => 'Mabadiliko kwa ajili ya ukurasa huu yamesimamishwa.
 Data za hapa haziwezi kunawirishwa kwa sasa.',
 'wrong_wfQuery_params' => 'Parameta za ulizio zilizoingizwa wfQuery() na zisizo sahihi ni<br />
@@ -835,7 +835,7 @@ Unakuwa unaahidi kwamba maandishi unayoyaingia ni yako tu, au uliyapata kutoka b
 Ikiwa hutaki maandishi yako yasihaririwe na yeyote, basi usiyaweke hapa.<br />
 Pia una tuahidi kwamba umeandika haya wewe mwenyewe, au umenakili kutoka katika tovuti ya umma au chanzo cha wazi sawa na hiki (tazama  $1 kwa maelezo).
 '''Usiandike makala yenye hakimiliki bila ya ruhusa halali!'''",
-'longpageerror'                    => "'''Hitilafu: Maandishi uliyoyaweka yana kilobaiti $1, ambayo ni urefu kuliko kiwango cha kawaida cha kilobaiti $2.'''
+'longpageerror'                    => "'''Hitilafu: Maandishi uliyoyaweka yana {{PLURAL:$1|kilobaiti $1}}, ambayo ni urefu kuliko kiwango cha kawaida cha kilobaiti $2.'''
 Hayawezi kuhifadhiwa.",
 'readonlywarning'                  => "'''Onyo: Hifadhidata imefungwa kwa ajili ya matengenezo, kwa hiyo hautakuwa na uwezo wa kuhifadhi maharirio yako kwa sasa.'''
 Unaweza kukata-na-kabandika maandishi yako kwenye faili na kulihifadhi kwa ajili ya baadaye.
@@ -1235,7 +1235,7 @@ Taarifa hii itakuwa wazi.',
 'userrights-lookup-user'       => 'Kusimamia kundi za watumiaji',
 'userrights-user-editname'     => 'Andika jina la mtumiaji:',
 'editusergroup'                => 'Kuhariri vikundi vya watumiaji',
-'editinguser'                  => "Kubadilisha wezo za mtumiaji '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+'editinguser'                  => "Kubadilisha wezo za mtumiaji '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup'     => 'Kuhariri kundi za watumiaji',
 'saveusergroups'               => 'Kuhifadhi kundi za watumiaji',
 'userrights-groupsmember'      => 'Mwanachama wa:',
@@ -1958,7 +1958,7 @@ Ukitaka kufuta ukurasa huo kutoka maangalizi yako baadaye, bonyeza \"Acha kufuat
 'watchmethod-list'     => 'kupitia kurasa za maangalizi ili kupata madabiliko ya karibuni',
 'watchlistcontains'    => 'Orodha ya maangalizi yako ina {{PLURAL:$1|kitu|vitu}} $1.',
 'iteminvalidname'      => "Kitu '$1' kina tatizo la jina batili...",
-'wlnote'               => "{{PLURAL:$1|Badiliko la|Mabadiliko '''$1''' ya}} mwisho katika {{PLURAL:$2|saa iliyopita linaonyeshwa|masaa '''$2''' yaliyopita yanaonyeshwa}} chini.",
+'wlnote'               => "{{PLURAL:$1|Badiliko la|Mabadiliko '''$1''' ya}} mwisho katika {{PLURAL:$2|saa iliyopita linaonyeshwa|masaa '''$2''' yaliyopita yanaonyeshwa}} chini, ilivyokuwa saa $4, tarehe $3.",
 'wlshowlast'           => 'Onyesha kutoka masaa $1 siku $2 $3',
 'watchlist-options'    => 'Hitiari za maangalizi',
 
@@ -2721,7 +2721,7 @@ likifupishwa. Nyuga zingine zitafichwa kama chaguo-msingi.
 
 'exif-gpsdop-excellent' => 'Nzuri sana ($1)',
 'exif-gpsdop-good'      => 'Nzuri ($1)',
-'exif-gpsdop-moderate'  => 'Nzuri kiasi ($)',
+'exif-gpsdop-moderate'  => 'Nzuri kiasi ($1)',
 'exif-gpsdop-fair'      => 'Nzuri kidogo ($1)',
 'exif-gpsdop-poor'      => ' Si nzuri ($1)',
 
index 8f9c6be..31ee771 100644 (file)
@@ -28,6 +28,7 @@
  * @author לערי ריינהארט
  * @author கோபி
  * @author செல்வா
+ * @author மதனாஹரன்
  * @author බිඟුවා
  */
 
@@ -705,8 +706,7 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage
 or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} அல்லது தேடுதல் தொடர்பான பதிவுகளில் தேடவும்.]</span>.',
 'userpage-userdoesnotexist'        => '"<nowiki>$1</nowiki>" என்றக் கணக்கு இன்னமும் பதிவுச் செய்யப்படவில்லை. இதை உருவாக்க/தொகுக்க வேண்டுமா என்பதை உறுதிப்படுத்தவும்.',
 'userpage-userdoesnotexist-view'   => 'பயனர் கணக்கு "$1" பதியப்படவில்லை',
-'blocked-notice-logextract'        => 'இந்தப் பயனர் தற்சமயம் தடை செய்யப்பட்டுள்ளார்.
-இவரது தடை பதிகையின் அண்மைய மாற்றம் கிழே தரப்பட்டுள்ளது:',
+'blocked-notice-logextract'        => 'இந்தப் பயனர் தற்சமயம் தடை செய்யப்பட்டுள்ளார். இவரது தடை பதிகையின் அண்மைய மாற்றம் கீழே தரப்பட்டுள்ளது:',
 'clearyourcache'                   => "'''கவனிக்க''' - சேமித்த பின்னர், நீங்கள் செய்த மாற்றங்களைக் காண்பதற்கு உங்கள் உலவியின் இடைமாற்று அகற்றப்பட வேண்டும்.'''
 *'''மொஸில்லா பயர்பாக்ஸ் / சபாரி:''' ''Shift+Reload'', அல்லது ''Ctrl-F5'' அல்லது ''Ctrl-R'' (''⌘-R'' Mac ல்)
 *'''கூகிள் குரோம்''' ''Ctrl-Shift-R'' அழுத்தவும். (''⌘-Shift-R''  Mac ல்) ;
@@ -1175,6 +1175,7 @@ $1",
 'email'                         => 'மின்னஞ்சல்',
 'prefs-help-realname'           => 'உண்மையான பெயர் கட்டாயமற்றது. நீங்கள் இதை கொடுத்தால் உங்கள் ஆக்கங்களுக்கான உரிமையளிப்புகளின் போது இது பயன்படும்.',
 'prefs-help-email'              => 'மின்னஞ்சல் விருப்பத்தின் பேரில் ஆனால் உங்கள் கடவுச்சொல் உங்களுக்கு நினைவில்லையென்றால், புதிய கடவுச்சொல் ஒன்றை மின்னஞ்சல் மூலம் அனுப்ப வழிசெய்யும்.மேலும் உங்கள் பயனர் பக்கம் அல்லது பயனர் பேச்சுப் பக்கத்தில் இருந்து மற்ற பயனர்கள் உங்களுக்கு மின்னஞ்சல் அனுப்ப உதவும். எனினும் உங்கள் மின்னஞ்சல் முகவரி வெளிப்படுத்தப்பட மாட்டாது.',
+'prefs-help-email-others'       => 'உங்கள் பேச்சுப் பக்கத்தில் உள்ள இணைப்பு மூலம் பிற பயனர்கள் உங்களுக்கு மின்னஞ்சல் அனுப்புதலை நீங்கள் தெரிவு செய்யலாம். பிற பயனர்கள் உங்களைத் தொடர்பு கொள்ளும் அதே வேளையில் உங்கள் மின்னஞ்சல் முகவரி வெளிப்படுத்தப்பட மாட்டாது.',
 'prefs-help-email-required'     => 'மின்னஞ்சல் முகவரி தேவை.',
 'prefs-info'                    => 'அடிப்படைச் செய்தி',
 'prefs-i18n'                    => 'உலகமயமாக்குதல்',
@@ -1349,7 +1350,7 @@ $1",
 'action-sendemail'            => 'மின்னஞ்சல்கள் அனுப்பு',
 
 # Recent changes
-'nchanges'                          => '{{PLURAL:$1|à®\92à®°à¯\81 மாற்றம்|$1 மாற்றங்கள்}}',
+'nchanges'                          => '{{PLURAL:$1|à®\93à®°à¯\8d மாற்றம்|$1 மாற்றங்கள்}}',
 'recentchanges'                     => 'அண்மைய மாற்றங்கள்',
 'recentchanges-legend'              => 'அண்மைய மாற்றங்களின் தேர்வுகள்',
 'recentchangestext'                 => 'இந்த விக்கிக்கு மிக அண்மையில் செய்யப்பட்ட மாற்றங்களை, இந்தப் பக்கத்தில் காணலாம்.',
@@ -2079,7 +2080,7 @@ $NEWPAGE
 'movedarticleprotection'      => 'காப்பு அமைப்புகள் "[[$2]]" இல் இருந்து "[[$1]]" க்கு மாற்றப்பட்டது',
 'protect-title'               => '"$1" பக்கத்துக்கான காப்பு அமைப்பு',
 'protect-title-notallowed'    => ' "$1" இன் பாதுகாப்பு அளவினைப் பார்',
-'prot_1movedto2'              => '[[$1]], [[$2]] என்றத் தலைப்புக்கு நகர்த்தப் பட்டுள்ளது',
+'prot_1movedto2'              => '[[$1]], [[$2]] என்றத் தலைப்புக்கு நகர்த்தப்பட்டுள்ளது.',
 'protect-badnamespace-title'  => 'பாதுகாக்க முடியாத பெயரிடைவெளி',
 'protect-badnamespace-text'   => 'இந்த பெயரிடைவெளியில் உள்ள  பக்கங்கள் பாதுகாக்கப்படாது.',
 'protect-legend'              => 'காப்பை உறுதிப்படுத்து',
@@ -2212,7 +2213,7 @@ $1',
 'sp-contributions-talk'                => 'உரையாடல்',
 'sp-contributions-userrights'          => 'பயனர் அனுமதி முகாமைத்துவம்',
 'sp-contributions-blocked-notice'      => 'இந்தப் பயனர் தற்சமயம் தடை செய்யப்பட்டுள்ளார்.
- தடை பதிகையின் அண்மைய மாற்றம் குறிப்புதவிக்காக  கிழே தரப்பட்டுள்ளது :',
+தடை பதிகையின் அண்மைய மாற்றம் குறிப்புதவிக்காக கீழே தரப்பட்டுள்ளது:',
 'sp-contributions-blocked-notice-anon' => 'இந்த IP முகவரி தற்போது தடுக்கப்பட்டுள்ளது.
 சமீபத்திய தடுப்பு குறிப்பேடு  கீழே குறிப்பிற்காக வழங்கப்பட்டுள்ளது :',
 'sp-contributions-search'              => 'பங்களிப்புகளைத் தேடு',
@@ -2420,7 +2421,7 @@ $1',
 'move-watch'                   => 'இப்பக்கத்தைக் கவனி',
 'movepagebtn'                  => 'பக்கத்தை நகர்த்து',
 'pagemovedsub'                 => 'நகர்த்தல் வெற்றி',
-'movepage-moved'               => '\'\'\'"$1", "$2" என்ற தலைப்புக்கு நகர்த்தப் பட்டுள்ளது\'\'\'',
+'movepage-moved'               => '\'\'\'"$1", "$2" என்ற தலைப்புக்கு நகர்த்தப்பட்டுள்ளது\'\'\'',
 'movepage-moved-redirect'      => 'ஒரு வழிமாற்று உருவாக்கப்பட்டுள்ளது.',
 'movepage-moved-noredirect'    => 'வழிமாற்று உருவாக்கம் தடுக்கப்பட்டது.',
 'articleexists'                => 'அந்தப் பெயரையுடைய பக்கம் ஏற்கெனவே உள்ளது அல்லது நீங்கள் தெரிவு செய்த பெயர் செல்லுபடியாகாது. தயவுசெய்து வேறு பெயரைத் தெரியவும்.',
@@ -2433,7 +2434,7 @@ $1',
 'movepage-page-exists'         => 'பக்கம் $1 ஏற்கனவே  உள்ளது, மற்றும் தானாகவே மேலெழுத இயலாது.',
 'movepage-page-moved'          => 'பக்கம் $1, $2 இற்கு நகர்த்தப்பட்டுள்ளது.',
 'movepage-page-unmoved'        => 'பக்கம் $1 ஐ $2க்கு நகர்த்த இயலாது.',
-'movepage-max-pages'           => 'à®\85திà®\95பà®\9fà¯\8dà®\9aமாà®\95  $1   {{PLURAL:$1| à®ªà®\95à¯\8dà®\95à®®à¯\8d |பà®\95à¯\8dà®\95à®\99à¯\8dà®\95ளà¯\8d}} à®¨à®\95à®°à¯\8dதà¯\8dதபà¯\8dபà®\9fà¯\8dà®\9fதà¯\81, à®\87தறà¯\8dà®\95à¯\8dà®\95à¯\81 à®®à¯\87லà¯\81à®®à¯\8d à®¤à®¾à®©à®¾à®\95 à®¨à®\95à®°à¯\8dதà¯\8dதபà¯\8dபà®\9fாதà¯\81.',
+'movepage-max-pages'           => 'அதிகபட்சமாக  $1   {{PLURAL:$1| பக்கம் |பக்கங்கள்}} நகர்த்தப்பட்டது, இதற்கு மேலும் தானாக நகர்த்தப்படாது.',
 'movelogpage'                  => 'நகர்த்தல் பதிகை',
 'movelogpagetext'              => 'நகர்த்தப்பட்டப் பக்கங்களின் பட்டியல் கீழே தரப்பட்டுள்ளது.',
 'movesubpage'                  => '{{PLURAL:$1|துணைப்பக்கம்|துணைப்பக்கங்கள்}}',
@@ -2573,6 +2574,7 @@ $1',
 
 # JavaScriptTest
 'javascripttest'                => 'சாவாநிரல் சோதனை நடக்கின்றது',
+'javascripttest-disabled'       => 'இந்தச் செயல்பாடு முடக்கப்பட்டுள்ளது.',
 'javascripttest-title'          => '$1 சோதனைகள் நடக்கின்றன',
 'javascripttest-pagetext-skins' => 'சோதனைகளை நடத்த முகப்புறை ஒன்றைத் தேர்வுசெய்:',
 
@@ -3323,7 +3325,7 @@ $5
 
 # Core parser functions
 'unknown_extension_tag' => 'அறியப்படாத நீட்சி வகை "$1"',
-'duplicate-defaultsort' => "''' எச்சரிக்கை:''' இயல்புநிலை வரிசைப்படுத்து விசை ''\$2 \" முன்னால் இயல்புநிலை வரிசைப்படுத்து விசை \"\$1\" ஐ மீறுகிறது.",
+'duplicate-defaultsort' => "'''எச்சரிக்கை:''' இயல்புநிலை வரிசைப்படுத்து விசை ''\$2 \" முன்னால் இயல்புநிலை வரிசைப்படுத்து விசை \"\$1\" ஐ மீறுகிறது.",
 
 # Special:Version
 'version'                       => 'பதிப்பு',
@@ -3473,7 +3475,7 @@ $5
 'revdelete-uname-unhid'               => 'பயனர் பெயர் மறைக்கப்பட்டது நீக்கப்பட்டுள்ளது.',
 'revdelete-restricted'                => 'நிர்வாகிகளுக்கு கட்டுப்பாடுகள் விதிக்கப்பட்டது',
 'revdelete-unrestricted'              => 'நிர்வாகிகளின் கட்டுப்பாடுகள் நீக்கப்பட்டது',
-'logentry-move-move'                  => '$1 பயனரால் $3, $4 என்ற தலைப்புக்கு நகர்த்தப் பட்டுள்ளது',
+'logentry-move-move'                  => '$1 பயனரால் $3, $4 என்ற தலைப்புக்கு நகர்த்தப்பட்டுள்ளது.',
 'logentry-move-move-noredirect'       => '$1, $3 பக்கத்தை $4 என்ற தலைப்புக்கு வழிமாற்று இன்றி நகர்த்தியுள்ளார்',
 'logentry-move-move_redir'            => '$1 பக்கம் $3 ஐ $4 க்கு முன்னிருந்த வழிமாற்றின் மேலாக நகர்த்தியுள்ளார்',
 'logentry-move-move_redir-noredirect' => '$1 பக்கம் $3 ஐ $4 க்கு முன்னிருந்த வழிமாற்றின் மேலாக, இன்னொரு வழிமாற்றின்றி நகர்த்தியுள்ளார்',
index 8663a19..5805a98 100644 (file)
@@ -3182,6 +3182,7 @@ $1',
 'exif-urgency-normal' => 'సాధారణం ($1)',
 'exif-urgency-low'    => 'తక్కువ ($1)',
 'exif-urgency-high'   => 'ఎక్కువ ($1)',
+'exif-urgency-other'  => 'వాడుకరి-నిర్వచిత ప్రాథాన్యత ($1)',
 
 # External editor support
 'edit-externally'      => 'బయటి అప్లికేషను వాడి ఈ ఫైలును మార్చు',
index a932f85..87dc7e6 100644 (file)
@@ -173,6 +173,7 @@ $messages = array(
 'vector-view-create'  => 'Kria',
 'vector-view-edit'    => 'Edita',
 'vector-view-history' => 'Haree istória',
+'actions'             => 'Aksaun sira',
 
 'errorpagetitle'    => 'Sala',
 'returnto'          => 'Fali ba $1.',
@@ -393,19 +394,21 @@ Check your spelling, ka [[Special:UserLogin/signup|kria konta foun]].',
 'lineno' => 'Liña $1:',
 
 # Search results
-'searchsubtitleinvalid'     => "Ita buka tiha ona '''$1'''",
-'prevn'                     => 'molok {{PLURAL:$1|$1}}',
-'nextn'                     => 'oinmai {{PLURAL:$1|$1}}',
-'viewprevnext'              => 'Haree ($1 {{int:pipe-separator}} $2) ($3)',
-'search-result-size'        => '$1 ({{PLURAL:$2|liafuan ida|liafuan $2}})',
-'search-section'            => '(seksaun $1)',
-'search-interwiki-caption'  => 'Projetu seluseluk sira',
-'search-mwsuggest-enabled'  => 'fó sujestaun',
-'search-mwsuggest-disabled' => 'la hatudu sujestaun',
-'searchall'                 => 'hotu',
-'powersearch'               => 'Buka',
-'powersearch-field'         => 'Buka',
-'powersearch-toggleall'     => 'Hotu',
+'searchsubtitleinvalid'         => "Ita buka tiha ona '''$1'''",
+'prevn'                         => 'molok {{PLURAL:$1|$1}}',
+'nextn'                         => 'oinmai {{PLURAL:$1|$1}}',
+'viewprevnext'                  => 'Haree ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-new'                => "'''Kria pájina \"[[:\$1]]\" iha wiki ne'e!'''",
+'searchprofile-project-tooltip' => 'Buka iha $1',
+'search-result-size'            => '$1 ({{PLURAL:$2|liafuan ida|liafuan $2}})',
+'search-section'                => '(seksaun $1)',
+'search-interwiki-caption'      => 'Projetu seluseluk sira',
+'search-mwsuggest-enabled'      => 'fó sujestaun',
+'search-mwsuggest-disabled'     => 'la hatudu sujestaun',
+'searchall'                     => 'hotu',
+'powersearch'                   => 'Buka',
+'powersearch-field'             => 'Buka',
+'powersearch-toggleall'         => 'Hotu',
 
 # Preferences page
 'preferences'               => 'Preferénsia',
index c6aa0f5..5384072 100644 (file)
@@ -559,8 +559,8 @@ $1',
 'sqlhidden'            => '(คำสั่ง SQL ซ่อนอยู่)',
 'cascadeprotected'     => 'หน้านี้ได้รับการป้องกันจากการแก้ไข เนื่องจากหน้านี้ถูกใช้เป็นส่วนหนึ่งใน{{PLURAL:$1|หน้า $2 ซึ่งได้รับการป้องกันแบบ "ทบทุกลำดับขั้น"|หน้าซึ่งได้รับการป้องกันแบบ "ทบทุกลำดับขั้น" ดังต่อไปนี้: $2}}',
 'namespaceprotected'   => "คุณไม่มีสิทธิแก้ไขหน้าในเนมสเปซ '''$1'''",
-'customcssprotected'   => 'คุณไม่มีสิทธิ์ในการแก้ไขหน้าสไตล์ CSS หน้านี้ได้ เนื่องจากหน้านี้ประกอบด้วยการตั้งค่าส่วนบุคคลของผู้ใช้อื่น',
-'customjsprotected'    => 'คุณไม่มีสิทธิ์ในการแก้ไขหน้า JavaScript หน้านี้ได้ เนื่องจากหน้านี้ประกอบด้วยการตั้งค่าส่วนบุคคลของผู้ใช้อื่น',
+'customcssprotected'   => 'คุณไม่มีสิทธิ์ในการแก้ไขหน้าสไตล์ CSS หน้านี้ เนื่องจากหน้านี้ประกอบด้วยการตั้งค่าส่วนบุคคลของผู้ใช้อื่น',
+'customjsprotected'    => 'คุณไม่มีสิทธิ์ในการแก้ไขหน้า JavaScript หน้านี้ เนื่องจากหน้านี้ประกอบด้วยการตั้งค่าส่วนบุคคลของผู้ใช้อื่น',
 'ns-specialprotected'  => 'หน้าพิเศษไม่สามารถแก้ไขได้',
 'titleprotected'       => "หัวเรื่องนี้ได้รับการป้องกันไม่ให้สร้างใหม่ โดย [[User:$1|$1]] 
 เหตุผลที่ให้ไว้ คือ ''$2''",
@@ -2343,7 +2343,7 @@ $1',
 'blockipsuccesssub'               => 'บล็อกสำเร็จ',
 'blockipsuccesstext'              => '[[Special:Contributions/$1|$1]] ถูกบล็อก
 <br />ดู  [[Special:BlockList|รายการไอพีที่ถูกบล็อก]] เพื่อตรวจสอบการบล็อก',
-'ipb-blockingself'                => 'à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\97ำà¸\81ารà¸\9aลà¹\87อà¸\84ตัวคุณเอง คุณแน่ใจแล้วหรือว่าต้องการทำเช่นนั้น',
+'ipb-blockingself'                => 'à¸\84ุà¸\93à¸\81ำลัà¸\87à¸\97ำà¸\81ารà¸\9aลà¹\87อà¸\81ตัวคุณเอง คุณแน่ใจแล้วหรือว่าต้องการทำเช่นนั้น',
 'ipb-edit-dropdown'               => 'แก้ไขสาเหตุการบล็อก',
 'ipb-unblock-addr'                => 'เลิกบล็อก $1',
 'ipb-unblock'                     => 'เลิกบล็อกผู้ใช้หรือหมายเลขไอพี',
@@ -3434,8 +3434,8 @@ $5
 'logentry-move-move_redir-noredirect' => '$1 ย้ายหน้า $3 ไปยัง $4 ทับหน้าเปลี่ยนทาง (ไม่สร้างหน้าเปลี่ยนทางตามมา)',
 'logentry-patrol-patrol'              => '$1 ทำเครื่องหมายว่ารุ่น $4 ของหน้า $3 ได้รับการตรวจสอบแล้ว',
 'logentry-patrol-patrol-auto'         => '$1 ทำเครื่องหมายโดยอัตโนมัติว่ารุ่น $4 ของหน้า $3 ได้รับการตรวจสอบแล้ว',
-'logentry-newusers-newusers'          => '$1 สร้างบัญชีผู้ใช้',
-'logentry-newusers-create'            => '$1 สร้างบัญชีผู้ใช้',
+'logentry-newusers-newusers'          => '$1 สร้างบัญชีผู้ใช้ใหม่',
+'logentry-newusers-create'            => '$1 สร้างบัญชีผู้ใช้ใหม่',
 'logentry-newusers-create2'           => '$1 สร้างบัญชีผู้ใช้ $3',
 'logentry-newusers-autocreate'        => 'บัญชี $1 ถูกสร้างขึ้นอัตโนมัติ',
 'newuserlog-byemail'                  => 'รหัสผ่านถูกส่งทางอีเมล',
index e381c93..fb4d291 100644 (file)
@@ -251,7 +251,9 @@ Lakanga: $1<br />
 Eke: $2",
 'viewsource'           => 'Vakai ki he tupunga',
 'protectedinterface'   => 'Ko e peesi ʻeni ʻoku fakaai ia ʻa e potutohi maʻa e founga fakakomipiuta, ʻoku maluʻi ia ʻo taʻofi leakovi.',
-'editinginterface'     => "'''Fakatokanga''' ʻOku ke fatu ʻi he peesi ʻoku ne ngāueʻaki ki he potutohi ʻo e founga fakakomipiuta. Ko ia ʻene ʻasi mai maʻa e kau ʻetita kotoa ʻe hūkitonu ai ʻa e ngaahi liliu ʻo e pēsí.",
+'editinginterface'     => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
+Changes to this page will affect the appearance of the user interface for other users.
+For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
 'sqlhidden'            => '(ʻOku toi ʻa e fehuʻi SQL)',
 'namespaceprotected'   => "ʻOku ʻikai ngofua ke ke fatu ʻa e ngaahi kupu ʻi he vā hingoa '''$1'''.",
 
index 052d68c..d2ab90e 100644 (file)
@@ -952,7 +952,7 @@ Bu yeni hesap için parola, giriş yapıldıktan sonra ''[[Special:ChangePasswor
 'newarticletext'                   => "Henüz varolmayan bir sayfaya konulmuş bir bağlantıya tıkladınız.
 Sayfayı oluşturmak için aşağıdaki metin kutusunu kullanın. ([[{{MediaWiki:Helppage}}|yardım sayfasına]] bakınız).
 Buraya yanlışlıkla geldiyseniz tarayıcınızın '''geri''' tuşuna tıklayın.",
-'anontalkpagetext'                 => "----''Bu sayfa henüz bir kullanıcı hesabı oluşturmamış veya hesabını kullanmayan bir anonim kullanıcının ileti sayfasıdır. Bu nedenle bu kişiyi belirtmek için rakamsal IP adresini kullanmak zorundayız. Bu gibi IP adresleri birçok kullanıcı tarafından paylaşılabilir. Eğer siz de bir anonim kullanıcıysanız ve size sizin ilginiz olmayan iletiler geliyorsa, lütfen diğer anonim kullanıcılarla olabilecek olan karmaşayı önlemek için [[Special:UserLogin/signup|bir hesap edinin]] veya [[Special:UserLogin|oturum açın]].''",
+'anontalkpagetext'                 => "----''Bu sayfa henüz bir kullanıcı hesabı oluşturmamış veya hesabını kullanmayan bir anonim kullanıcının mesaj sayfasıdır. Bu nedenle bu kişiyi belirtmek için rakamsal IP adresini kullanmak zorundayız. Bu gibi IP adresleri birçok kullanıcı tarafından paylaşılabilir. Eğer siz de bir anonim kullanıcıysanız ve size sizin ilginiz olmayan iletiler geliyorsa, lütfen diğer anonim kullanıcılarla olabilecek olan karmaşayı önlemek için [[Special:UserLogin/signup|bir hesap edinin]] veya [[Special:UserLogin|oturum açın]].''",
 'noarticletext'                    => 'Bu sayfa şu anda boştur.
 Bu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları arayabilir],
@@ -1413,7 +1413,7 @@ Kullanabileceğiniz rastgele-üretilmiş bir değer: $1',
 'prefs-registration'            => 'Kayıt zamanı:',
 'yourrealname'                  => 'Gerçek adınız:',
 'yourlanguage'                  => 'Dil:',
-'yourvariant'                   => 'Sizce:',
+'yourvariant'                   => 'İçerik dili türevi:',
 'prefs-help-variant'            => 'Bu vikinin içeriğini görüntülemek için tercih ettiğiniz varyant veya ortografi.',
 'yournick'                      => 'İmzalarda gözükmesini istediğiniz isim',
 'prefs-help-signature'          => 'Tartışma sayfalarındaki yorumlar "<nowiki>~~~~</nowiki>" ile imzalanmalıdır, bu imzanıza ve zaman damgasına dönüştürülür.',
@@ -1555,7 +1555,7 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'right-siteadmin'             => 'Veritabanını kilitle ve kilidi aç',
 'right-override-export-depth' => "Sayfaları, derinlik 5'e kadar bağlantılı sayfalarla beraber, dışa aktar",
 'right-sendemail'             => 'Diğer kullanıcılara e-posta gönder',
-'right-passwordreset'         => 'Bir kullanıcının parolasını sıfırlar ([[Special:PasswordReset|özel sayfa]])',
+'right-passwordreset'         => 'Parola sıfırlama e-postalarını görür',
 
 # User rights log
 'rightslog'                  => 'Kullanıcı hakları kayıtları',
@@ -1630,6 +1630,7 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'number_of_watching_users_pageview' => '[$1 izlenilen {{PLURAL:$1|kullanıcı|kullanıcı}}]',
 'rc_categories'                     => 'Kategorilere sınırla ("|" ile ayır)',
 'rc_categories_any'                 => 'Herhangi',
+'rc-change-size-new'                => '$1 {{PLURAL:$1|bayt|bayt}} değişiklikten sonra',
 'newsectionsummary'                 => '/* $1 */ yeni başlık',
 'rc-enhanced-expand'                => 'Ayrıntıları göster (JavaScript gerekir)',
 'rc-enhanced-hide'                  => 'Ayrıntıları gizle',
index c1bca70..6d0e3b4 100644 (file)
@@ -76,6 +76,11 @@ $messages = array(
 'faq'            => 'FAQ',
 'faqpage'        => 'Project:FAQ',
 
+# Vector skin
+'vector-action-delete'  => 'Sula',
+'vector-action-protect' => 'Sirhelela',
+'vector-view-create'    => 'Tumbuluxa',
+
 'errorpagetitle'   => 'Xihoxo',
 'returnto'         => 'Thlelela e $1.',
 'tagline'          => 'Kusuka e {{SITENAME}}',
@@ -94,6 +99,7 @@ $messages = array(
 'delete'           => 'Sula',
 'deletethispage'   => 'Sula tluka leri',
 'protect'          => 'Sirhelela',
+'protect_change'   => 'Cinca',
 'newpage'          => 'Tluka rintswa',
 'talkpagelinktext' => 'Mbulavulo',
 'talk'             => 'Mbulavuriswano',
@@ -119,6 +125,11 @@ $messages = array(
 
 'badaccess'        => 'Xihoxo hita mpfumelelo',
 'badaccess-group0' => 'U hava mpumelelo wo endla xikombelo lexi.',
+'badaccess-groups' => 'The action you have requested is limited to users in one of the groups $1.',
+
+'versionrequired'     => 'Version $1 of MediaWiki required',
+'versionrequiredtext' => 'Version $1 of MediaWiki is required to use this page.
+See [[Special:Version|version page]].',
 
 'ok'                      => 'Hiswona',
 'retrievedfrom'           => 'ku suka e "$1"',
@@ -129,6 +140,7 @@ $messages = array(
 'editsection'             => 'Lulamisa',
 'editold'                 => 'Lulamisa',
 'viewsourceold'           => 'Languta vutsari-ntumbuluko',
+'editlink'                => 'Lulamisa',
 'editsectionhint'         => 'Lulamisa xiphemu: $1',
 'toc'                     => 'Leswinga ndzeni',
 'showtoc'                 => 'Kombisa',
@@ -136,6 +148,13 @@ $messages = array(
 'thisisdeleted'           => 'Langutisa kumbe Thlerisela $1?',
 'viewdeleted'             => 'Langutisa $1?',
 'restorelink'             => '{{PLURAL:$1|ndzulamiso lowu suriweke|$1 mindzulamiso leyi suriweke}}',
+'feedlinks'               => 'Feed:',
+'feed-invalid'            => 'Invalid subscription feed type.',
+'feed-unavailable'        => 'Syndication feeds are not available on {{SITENAME}}',
+'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 (Arisi tsariwa)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
@@ -159,12 +178,59 @@ $messages = array(
 Vona nxaxamelo wa ma tluka yo hlawuleka e [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
-'error'         => 'Xihoxo',
-'databaseerror' => 'Xihoxo xo Database',
-'internalerror' => 'Xihoxo xa le ndzeni',
-'viewsource'    => 'Vona tsalwa-tumbuluxa',
+'error'                => 'Xihoxo',
+'databaseerror'        => 'Xihoxo xo Database',
+'dberrortext'          => 'A database query syntax error has occurred.
+This may indicate a bug in the software.
+The last attempted database query was:
+<blockquote><tt>$1</tt></blockquote>
+from within function "<tt>$2</tt>".
+MySQL returned error "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'A database query syntax error has occurred.
+The last attempted database query was:
+"$1"
+from within function "$2".
+MySQL returned error "$3: $4"',
+'laggedslavemode'      => 'Warning: Page may not contain recent updates.',
+'readonly'             => 'Database locked',
+'enterlockreason'      => 'Enter a reason for the lock, including an estimate of when the lock will be released',
+'readonlytext'         => 'The database is currently locked to new entries and other modifications, probably for routine database maintenance, after which it will be back to normal.
+
+The administrator who locked it offered this explanation: $1',
+'missing-article'      => 'The database did not find the text of a page that it should have found, named "$1" $2.
+
+This is usually caused by following an outdated diff or history link to a page that has been deleted.
+
+If this is not the case, you may have found a bug in the software.
+Please report this to an administrator, making note of the URL.',
+'missingarticle-rev'   => '(revision#: $1)',
+'missingarticle-diff'  => '(Diff: $1, $2)',
+'readonly_lag'         => 'The database has been automatically locked while the slave database servers catch up to the master',
+'internalerror'        => 'Xihoxo xa le ndzeni',
+'internalerror_info'   => 'Internal error: $1',
+'filecopyerror'        => 'Could not copy file "$1" to "$2".',
+'filerenameerror'      => 'Could not rename file "$1" to "$2".',
+'filedeleteerror'      => 'Could not delete file "$1".',
+'directorycreateerror' => 'Could not create directory "$1".',
+'filenotfound'         => 'Could not find file "$1".',
+'fileexistserror'      => 'Unable to write to file "$1": file exists',
+'unexpected'           => 'Unexpected value: "$1"="$2".',
+'formerror'            => 'Error: could not submit form',
+'badarticleerror'      => 'This action cannot be performed on this page.',
+'cannotdelete'         => 'Could not delete the page or file specified.
+It may have already been deleted by someone else.',
+'badtitle'             => 'Bad title',
+'badtitletext'         => 'The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.
+It may contain one or more characters which cannot be used in titles.',
+'querypage-no-updates' => 'Updates for this page are currently disabled.
+Data here will not presently be refreshed.',
+'wrong_wfQuery_params' => 'Incorrect parameters to wfQuery()<br />
+Function: $1<br />
+Query: $2',
+'viewsource'           => 'Vona tsalwa-tumbuluxa',
 
 # Login and logout pages
+'yourname'                => 'Vito ra vutirhisi',
 'yourpassword'            => 'Vito-mpfungulo:',
 'login'                   => 'Pfula u nghena',
 'nav-login-createaccount' => 'Pfula unghena / Tumbuluxa akhawunti',
@@ -190,15 +256,19 @@ U hi tshembisa nakambe leswaku hi wena mutsari wa leswi nyikeriwaka laha, kumbe
 '''UNGA RHUMERI MATSALWA LA MA SIRHELERIWEKE HANDLE KA MPFUMELELO!'''",
 
 # History pages
-'next'       => 'Leswilandzelaka',
-'last'       => 'Swo hetelela',
-'page_first' => 'Xo sungula',
+'next'                 => 'Leswilandzelaka',
+'last'                 => 'Swo hetelela',
+'page_first'           => 'Xo sungula',
+'history-show-deleted' => 'Leswi suriweke ntsena',
 
 # Revision deletion
 'rev-delundel' => 'Komba/Tumbeta',
 'pagehist'     => 'Matimu ya tluka',
 'deletedhist'  => 'Matimu lamasuriweke',
 
+# Merge log
+'revertmerge' => 'Hambanisa',
+
 # Search results
 'searchhelp-url'        => 'Help:Leswinga ndzeni',
 'search-interwiki-more' => '(Leswi engetelekeke)',
@@ -226,10 +296,14 @@ U hi tshembisa nakambe leswaku hi wena mutsari wa leswi nyikeriwaka laha, kumbe
 'right-createpage' => 'Tumbuluxa matluka (mangariki eka matluka ya mbulavulo)',
 'right-createtalk' => 'Tumbuluxa matluka ya mbulavulo',
 
+# Associated actions - in the sentence "You do not have permission to X"
+'action-edit' => 'Lulamisa tluka leri',
+
 # Recent changes
-'recentchanges' => 'Ku cinca ka sweswi-nyana',
-'hide'          => 'Tumbeta',
-'show'          => 'Komba',
+'recentchanges'    => 'Ku cinca ka sweswi-nyana',
+'hide'             => 'Tumbeta',
+'show'             => 'Komba',
+'rc-enhanced-hide' => 'Tumbeta vuxokoxoko',
 
 # Recent changes linked
 'recentchangeslinked'         => 'Kuncica loku yelanaka',
@@ -250,8 +324,12 @@ U hi tshembisa nakambe leswaku hi wena mutsari wa leswi nyikeriwaka laha, kumbe
 'filehist-deleteall' => 'sula hinkwaswo',
 'filehist-deleteone' => 'Dlaya',
 'filehist-revert'    => 'thlerisela',
+'filehist-datetime'  => 'Siku/Nkarhi',
 'filehist-user'      => 'Mutirhisi',
 
+# Statistics
+'statistics' => 'Mintsengo',
+
 # Miscellaneous special pages
 'newpages'     => 'Matluka mantswa',
 'move'         => 'Yi sa kunwana',
@@ -306,6 +384,9 @@ U hi tshembisa nakambe leswaku hi wena mutsari wa leswi nyikeriwaka laha, kumbe
 # Block/unblock
 'contribslink' => 'Minyikelo',
 
+# Namespace 8 related
+'allmessagesname' => 'Vito',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage'     => 'Tluka ra vutirhisi',
 'tooltip-pt-mytalk'       => 'Mbulavulo namina',
@@ -315,6 +396,7 @@ U hi tshembisa nakambe leswaku hi wena mutsari wa leswi nyikeriwaka laha, kumbe
 'tooltip-ca-protect'      => 'Sirhelela tluka leri',
 'tooltip-ca-delete'       => 'Sula tluka leri',
 'tooltip-ca-move'         => 'Veka tluka endhzawini yinwana',
+'tooltip-ca-watch'        => 'Hoxa tluka leri eka leswi uswilanguteke',
 'tooltip-n-mainpage'      => 'Endzela tlukankulu',
 'tooltip-t-whatlinkshere' => 'Nxaxamelo wa matluka lama khwekelaka laha',
 'tooltip-t-upload'        => 'Khandziyisa tifayili',
@@ -322,6 +404,7 @@ U hi tshembisa nakambe leswaku hi wena mutsari wa leswi nyikeriwaka laha, kumbe
 'tooltip-ca-nstab-user'   => 'Vona tluka ra mutirhisi',
 'tooltip-save'            => 'Hlayiso ku cinca ka wena',
 'tooltip-preview'         => 'Ringanisa ku cinca loku uku endleke, Tirhisa Xitirhisiwa lexi ungasi hlayisa tluka leri!',
+'tooltip-summary'         => 'Tsala nkomiso',
 
 # Special:SpecialPages
 'specialpages' => 'Matluka yo hlawuleka',
index 245743d..57e9e16 100644 (file)
@@ -79,6 +79,13 @@ $messages = array(
 'thursday'      => 'Дөрт дугаар хүн',
 'friday'        => 'Беш дугаар хүн',
 'saturday'      => 'Чартык улуг хүн',
+'sun'           => 'Улуг-хүн',
+'mon'           => 'Пн',
+'tue'           => 'Вт',
+'wed'           => 'Ср',
+'thu'           => 'Чт',
+'fri'           => 'Пт',
+'sat'           => 'Сб',
 'january'       => 'Бир ай',
 'february'      => 'ийи ай',
 'march'         => 'Үш ай',
@@ -158,6 +165,7 @@ $messages = array(
 'vector-view-view'       => 'Номчууру',
 'vector-view-viewsource' => 'Дөзү бижиин көөрү',
 'actions'                => 'Кылыглар',
+'variants'               => 'Бир янзы',
 
 'errorpagetitle'    => 'Алдаг',
 'returnto'          => '$1 деп арынже эглири.',
@@ -204,6 +212,7 @@ $messages = array(
 'viewtalkpage'      => 'Чугааны көөрү',
 'otherlanguages'    => 'Өске дылдарга',
 'lastmodifiedat'    => 'Бо арын сөөлгү каттап $2, $1 өскерилген.',
+'jumpto'            => 'Шилчиир:',
 'jumptonavigation'  => 'навигация',
 'jumptosearch'      => 'дилээри',
 
@@ -329,30 +338,31 @@ $messages = array(
 'media_tip'       => 'Файлдың холбаазы',
 
 # Edit pages
-'summary'            => 'Түңнел:',
-'subject'            => 'Кол сөс:',
-'minoredit'          => 'Бо өскерлиишкин биче-дир',
-'watchthis'          => 'Бо арынны хайгаараары',
-'savearticle'        => 'Арынны шыгжаары',
-'preview'            => 'Чижеглей көөрү',
-'showpreview'        => 'Чижеглей көөрү',
-'showdiff'           => 'Өскерлиишкиннерни көргүзери',
-'missingcommenttext' => 'Комментарийни адаанда чогаадыңар.',
-'summary-preview'    => 'Түңнелдү чижеглей көөрү:',
-'subject-preview'    => 'Кол сөс чижеглей көөр:',
-'nosuchsectiontitle' => 'Бо салбыр чок',
-'loginreqlink'       => 'кирери',
-'accmailtitle'       => 'Чажыт сөс чоргустунган.',
-'accmailtext'        => "A randomly generated password for [[User talk:$1|$1]] has been sent to $2.
+'summary'                => 'Түңнел:',
+'subject'                => 'Кол сөс:',
+'minoredit'              => 'Бо өскерлиишкин биче-дир',
+'watchthis'              => 'Бо арынны хайгаараары',
+'savearticle'            => 'Арынны шыгжаары',
+'preview'                => 'Чижеглей көөрү',
+'showpreview'            => 'Чижеглей көөрү',
+'showdiff'               => 'Өскерлиишкиннерни көргүзери',
+'missingcommenttext'     => 'Комментарийни адаанда чогаадыңар.',
+'summary-preview'        => 'Түңнелдү чижеглей көөрү:',
+'subject-preview'        => 'Кол сөс чижеглей көөр:',
+'nosuchsectiontitle'     => 'Бо салбыр чок',
+'loginreqlink'           => 'кирери',
+'accmailtitle'           => 'Чажыт сөс чоргустунган.',
+'accmailtext'            => "A randomly generated password for [[User talk:$1|$1]] has been sent to $2.
 
 The password for this new account can be changed on the ''[[Special:ChangePassword|change password]]'' page upon logging in.",
-'newarticle'         => '(Чаа)',
-'editing'            => '$1 деп арынны өскертип турар',
-'editingsection'     => '$1 деп арынның салбырын өскертип турар',
-'editingcomment'     => '$1 деп арынны өскертип турар (чаа салбыр)',
-'yourtext'           => 'Силерниң сөзүглелиңер',
-'yourdiff'           => 'Ылгалдар',
-'template-protected' => '(камгалаан)',
+'newarticle'             => '(Чаа)',
+'editing'                => '$1 деп арынны өскертип турар',
+'editingsection'         => '$1 деп арынның салбырын өскертип турар',
+'editingcomment'         => '$1 деп арынны өскертип турар (чаа салбыр)',
+'yourtext'               => 'Силерниң сөзүглелиңер',
+'yourdiff'               => 'Ылгалдар',
+'template-protected'     => '(камгалаан)',
+'template-semiprotected' => '(четпес камгалаан)',
 
 # History pages
 'viewpagelogs'           => 'Бо арынның журналын көргүзери',
@@ -389,6 +399,7 @@ The password for this new account can be changed on the ''[[Special:ChangePasswo
 'revdelete-radio-set'        => 'Ийе',
 'revdelete-radio-unset'      => 'Чок',
 'revdelete-log'              => 'Чылдагаан:',
+'revdel-restore'             => 'көскүзүн өскертири',
 'pagehist'                   => 'Арынның төөгүзү',
 'revdelete-otherreason'      => 'Өске/немелде чылдагаан:',
 'revdelete-reasonotherlist'  => 'Өске чылдагаан',
@@ -698,6 +709,7 @@ The password for this new account can be changed on the ''[[Special:ChangePasswo
 'delete-confirm'        => '"$1" деп арынны ырадыры',
 'delete-legend'         => 'Ырадыры',
 'actioncomplete'        => 'Ажыл доосту',
+'dellogpage'            => 'казыышкыннар',
 'deletecomment'         => 'Чылдагаан:',
 'deleteotherreason'     => 'Өске/немелде чылдагаан:',
 'deletereasonotherlist' => 'Өске чылдагаан',
@@ -740,6 +752,7 @@ The password for this new account can be changed on the ''[[Special:ChangePasswo
 
 'sp-contributions-newbies'  => 'Чүгле чаа кирерилерниң немелделерин көргүзерн',
 'sp-contributions-blocklog' => 'ниимиктээриге журнал',
+'sp-contributions-uploads'  => 'киирген чүүлдер',
 'sp-contributions-logs'     => 'журналдар',
 'sp-contributions-talk'     => 'чугаалажыры',
 'sp-contributions-username' => 'ИП-адрес азы ажыглачының ады:',
@@ -763,6 +776,7 @@ The password for this new account can be changed on the ''[[Special:ChangePasswo
 'ipbotheroption'             => 'өске',
 'ipbotherreason'             => 'Өске/немелде чылдагаан:',
 'badipaddress'               => 'Багай ИП-адрес',
+'ipblocklist'                => 'кызыгаарлаттынган киржикчилер',
 'ipblocklist-submit'         => 'Дилээр',
 'infiniteblock'              => 'кезээ-мөңгеде',
 'blocklink'                  => 'ниимиктээри',
index 930ff1b..a509135 100644 (file)
@@ -28,6 +28,7 @@
  * @author Kalan
  * @author Microcell
  * @author NickK
+ * @author Olvin
  * @author Prima klasy4na
  * @author Riwnodennyk
  * @author Sodmy
@@ -1026,7 +1027,7 @@ $2
 Кількість викликів не повинна перевищувати $2, зараз потрібно зробити $1 {{PLURAL:$1|виклик|виклики|викликів}}.',
 'expensive-parserfunction-category'       => 'Сторінки з дуже великою кількістю викликів ресурсомістких функцій',
 'post-expand-template-inclusion-warning'  => 'Увага: розмір шаблонів для включення занадто великий.
-Деякі шаблони не будуть включені.',
+Деякі шаблони не буде включено.',
 'post-expand-template-inclusion-category' => 'Сторінки з перевищеним розміром включених шаблонів',
 'post-expand-template-argument-warning'   => "'''Увага:''' Ця сторінка містить принаймні один аргумент шаблону, який має надто великий розмір для розгортання.
 Такі аргументи були опущені.",
@@ -1758,15 +1759,16 @@ $1',
 'upload-warning-subj'         => 'Попередження при завантаженні',
 'upload-warning-msg'          => 'Сталася помилка при пересиланні з [$2]. Ви можете повернутися до [[Special:Upload/stash/$1|формуляру пересилання]], щоб вирішити проблему.',
 
-'upload-proto-error'        => 'Невірний протокол',
-'upload-proto-error-text'   => 'Віддалене завантаження вимагає адресів, що починаються з <code>http://</code> або <code>ftp://</code>.',
-'upload-file-error'         => 'Внутрішня помилка',
-'upload-file-error-text'    => 'Сталася внутрішня помилка при спробі створити тимчасовий файл на сервері. Будь-ласка, зверніться до [[Special:ListUsers/sysop|адміністратора]].',
-'upload-misc-error'         => 'Невідома помилка завантаження',
-'upload-misc-error-text'    => 'Невідома помилка завантаження. Будь-ласка, перевірте, що вказана адреса вірна й спробуйте ще. Якщо проблема виникає знову, зверніться до системного адміністратора.',
-'upload-too-many-redirects' => 'URL містить надто багато перенаправлень',
-'upload-unknown-size'       => 'Невідомий розмір',
-'upload-http-error'         => 'Відбулася помилка HTTP: $1',
+'upload-proto-error'                => 'Невірний протокол',
+'upload-proto-error-text'           => 'Віддалене завантаження вимагає адресів, що починаються з <code>http://</code> або <code>ftp://</code>.',
+'upload-file-error'                 => 'Внутрішня помилка',
+'upload-file-error-text'            => 'Сталася внутрішня помилка при спробі створити тимчасовий файл на сервері. Будь-ласка, зверніться до [[Special:ListUsers/sysop|адміністратора]].',
+'upload-misc-error'                 => 'Невідома помилка завантаження',
+'upload-misc-error-text'            => 'Невідома помилка завантаження. Будь-ласка, перевірте, що вказана адреса вірна й спробуйте ще. Якщо проблема виникає знову, зверніться до системного адміністратора.',
+'upload-too-many-redirects'         => 'URL містить надто багато перенаправлень',
+'upload-unknown-size'               => 'Невідомий розмір',
+'upload-http-error'                 => 'Відбулася помилка HTTP: $1',
+'upload-copy-upload-invalid-domain' => 'З цього домену завантаження неможливе.',
 
 # File backend
 'backend-fail-stream'        => 'Не вдалося транслювати файл $1.',
@@ -1785,10 +1787,11 @@ $1',
 'backend-fail-closetemp'     => 'Не вдалося закрити тимчасовий файл.',
 'backend-fail-read'          => 'Не вдалося прочитати файл $1.',
 'backend-fail-create'        => 'Не вдалося створити файл $1.',
+'backend-fail-maxsize'       => 'Неможливо створити файл $1, бо він більший, ніж $2 байт(и).',
 'backend-fail-readonly'      => 'Інтерфейс сховища "$1" зараз доступний тільки для читання. Причина: "$2"',
-'backend-fail-synced'        => 'Файл "$1" знаходиться в неузгодженому стані',
-'backend-fail-connect'       => 'Не вдалося підключитися до файлового сховища "$1".',
-'backend-fail-internal'      => 'СÑ\82алаÑ\81Ñ\8f Ð½ÐµÐ²Ñ\96дома Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñ\83 Ñ\84айловомÑ\83 Ñ\81Ñ\85овиÑ\89Ñ\96 "$1".',
+'backend-fail-synced'        => 'Файл "$1" у внутрішньому сховищі рушія перебуває в неузгодженому стані',
+'backend-fail-connect'       => 'Неможливо підключитися до сховища рушія "$1".',
+'backend-fail-internal'      => 'СÑ\82алаÑ\81Ñ\8f Ð½ÐµÐ²Ñ\96дома Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñ\83 Ñ\81Ñ\85овиÑ\89Ñ\96 Ñ\80Ñ\83Ñ\88Ñ\96Ñ\8f "$1".',
 'backend-fail-contenttype'   => 'Не вдалося визначити тип вмісту файла, щоб зберегти його в "$1".',
 'backend-fail-batchsize'     => 'Серверна частина отримала блок із $1 {{PLURAL:$1|файлової операції|файлових операцій}}; обмеження складає $2 {{PLURAL:$2|файлову операцію|файлових операцій}}.',
 
@@ -1824,7 +1827,7 @@ $1',
 # img_auth script messages
 'img-auth-accessdenied'     => 'Відмовлено в доступі',
 'img-auth-nopathinfo'       => 'Відсутній PATH_INFO.
\92аÑ\88 Ñ\81еÑ\80веÑ\80 Ð½Ðµ Ð½Ð°Ð»Ð°Ñ\88Ñ\82ований для передачі цих даних.
\92аÑ\88 Ñ\81еÑ\80веÑ\80 Ð½Ðµ Ð½Ð°Ð»Ð°Ñ\88Ñ\82овано для передачі цих даних.
 Можливо, він працює на основі CGI та не підтримує img_auth.
 Перегляньте [https://www.mediawiki.org/wiki/Manual:Image_Authorization Відкриття доступу до зображень]',
 'img-auth-notindir'         => 'Проханий шлях не відноситься до теки завантажень, вказаної в налаштуваннях.',
@@ -2866,7 +2869,7 @@ IP-адреси, що блокуються автоматично тут не в
 
 # JavaScriptTest
 'javascripttest'                           => 'Тестування JavaScript',
-'javascripttest-disabled'                  => 'ФÑ\83нкÑ\86Ñ\96Ñ\8f Ð²Ñ\96дклÑ\8eÑ\87ена.',
+'javascripttest-disabled'                  => 'ЦÑ\8e Ñ\84Ñ\83нкÑ\86Ñ\96Ñ\8e Ð²Ñ\96дклÑ\8eÑ\87ено.',
 'javascripttest-title'                     => 'Працює  $1  випробувань',
 'javascripttest-pagetext-noframework'      => 'Ця сторінка призначений для тестування JavaScript.',
 'javascripttest-pagetext-unknownframework' => 'Невідоме середовище тестування " $1 ".',
index 9ab7202..5523ea3 100644 (file)
@@ -105,6 +105,7 @@ $messages = array(
 'category_header'        => '"$1" turkumidagi maqolalar.',
 'subcategories'          => 'Ostturkumlar',
 'category-empty'         => "''Ushbu turkumda hozircha sahifa yoki fayllar yoʻq.''",
+'hidden-categories'      => '{{PLURAL:$1|Yashirin turkum|Yashirin turkumlar}}',
 'category-subcat-count'  => '{{PLURAL:$2|Ushbu turkumda faqat bitta ostturkum mavjud.|Ushbu turkumda quyidagi {{PLURAL:$1|ostturkum|$1 ostturkumlar}}, hammasi boʻlib $2 ta ostturkum mavjud.}}',
 'category-article-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta sahifa mavjud.|Ushbu turkumda quyidagi {{PLURAL:$1|sahifa|$1 sahifalar}}, hammasi boʻlib $2 ta sahifa mavjud.}}',
 'listingcontinuesabbrev' => 'davomi',
@@ -129,6 +130,9 @@ $messages = array(
 'vector-view-history'    => 'Tarix',
 'vector-view-view'       => 'Mutolaa',
 'vector-view-viewsource' => 'Manbasini koʻrsat',
+'actions'                => 'Amallar',
+'namespaces'             => 'Nomfazolar',
+'variants'               => 'Variantlar',
 
 'errorpagetitle'   => 'Xato',
 'returnto'         => '$1 sahifasiga qaytish.',
@@ -141,7 +145,7 @@ $messages = array(
 'history'          => 'Sahifa tarixi',
 'history_short'    => 'Tarix',
 'printableversion' => 'Bosma uchun versiya',
-'permalink'        => "Doimiy bog'",
+'permalink'        => 'Doimiy ishorat',
 'print'            => 'Chop et',
 'view'             => 'Koʻrish',
 'edit'             => 'Tahrirlash',
@@ -197,6 +201,7 @@ $messages = array(
 'newmessagesdifflink'  => 'soʻnggi oʻzgarish',
 'editsection'          => 'tahrirlash',
 'editold'              => 'tahrir',
+'editlink'             => 'tahrirla',
 'viewsourcelink'       => 'manbasini koʻr',
 'editsectionhint'      => 'Boʻlimni tahrirlash: $1',
 'toc'                  => 'Mundarija',
@@ -219,7 +224,7 @@ $messages = array(
 # General errors
 'error'             => 'Xato',
 'badtitle'          => 'Notoʻgʻri sarlavha',
-'viewsource'        => "Ko'rib chiqish",
+'viewsource'        => 'Manbasini koʻrish',
 'protectedpagetext' => 'Bu sahifa tahrirlashdan saqlanish maqsadida qulflangan.',
 'viewsourcetext'    => "Siz bu sahifaning manbasini ko'rishingiz va uni nusxasini olishingiz mumkin:",
 
@@ -338,27 +343,37 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'editundo'                => 'qaytar',
 
 # Search results
-'searchresults'            => 'Qidiruv natijalari',
-'searchresults-title'      => '"$1" uchun qidiruv natijalari',
-'searchresulttext'         => "{{SITENAME}}da qidirish haqida qo'shimcha ma'lumotga ega bo'lishini xoxlasangiz, [[{{MediaWiki:Helppage}}|{{SITENAME}}da qidiruv]] sahifasini o'qing.",
-'searchsubtitle'           => '\'\'\'[[:$1]]\'\'\'ni qidirdingiz ([[Special:Prefixindex/$1|"$1" bilan boshlanadigan sahifalar]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1"ga bogʻlangan sahifalar]])',
-'searchsubtitleinvalid'    => "'''$1'''ni qidirdingiz",
-'notitlematches'           => 'Bunday sarlavha topilmadi',
-'notextmatches'            => 'Bunday matn topilmadi',
-'prevn'                    => 'oldingi $1',
-'nextn'                    => 'keyingi {{PLURAL:$1|$1}}',
-'viewprevnext'             => "Ko'rish ($1 {{int:pipe-separator}} $2) ($3).",
-'searchhelp-url'           => 'Help:Mundarija',
-'search-result-size'       => '$1 ({{PLURAL:$2|1 soʻz|$2 soʻz}})',
-'search-redirect'          => '(yoʻnaltirish $1)',
-'search-section'           => '($1 boʻlimi)',
-'search-suggest'           => 'Balki buni nazarda tutgandirsiz: $1',
-'search-interwiki-default' => '$1 natijalar:',
-'showingresults'           => "#<b>$2</b> boshlanayotgan <b>$1</b> natijalar ko'rsatilyapti.",
-'powersearch'              => 'Qidiruv',
-'powersearch-ns'           => 'Bu nom-fazolarda izla:',
-'powersearch-redir'        => 'Yoʻnaltirishlarni koʻrsat',
-'powersearch-field'        => 'Qidir',
+'searchresults'                  => 'Qidiruv natijalari',
+'searchresults-title'            => '"$1" uchun qidiruv natijalari',
+'searchresulttext'               => "{{SITENAME}}da qidirish haqida qo'shimcha ma'lumotga ega bo'lishini xoxlasangiz, [[{{MediaWiki:Helppage}}|{{SITENAME}}da qidiruv]] sahifasini o'qing.",
+'searchsubtitle'                 => '\'\'\'[[:$1]]\'\'\'ni qidirdingiz ([[Special:Prefixindex/$1|"$1" bilan boshlanadigan sahifalar]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1"ga bogʻlangan sahifalar]])',
+'searchsubtitleinvalid'          => "'''$1'''ni qidirdingiz",
+'notitlematches'                 => 'Bunday sarlavha topilmadi',
+'notextmatches'                  => 'Bunday matn topilmadi',
+'prevn'                          => 'oldingi $1',
+'nextn'                          => 'keyingi {{PLURAL:$1|$1}}',
+'prevn-title'                    => 'Avvalgi $1 {{PLURAL:$1|natija|natijalar}}',
+'nextn-title'                    => 'Keyingi $1 {{PLURAL:$1|natija|natijalar}}',
+'shown-title'                    => 'Har sahifada $1 natija koʻrsat',
+'viewprevnext'                   => 'Koʻrish ($1 {{int:pipe-separator}} $2) ($3).',
+'searchmenu-new'                 => "'''Ushbu vikida \"[[:\$1]]\" sahifani yarat!'''",
+'searchhelp-url'                 => 'Help:Mundarija',
+'searchprofile-everything'       => 'Har yerda',
+'searchprofile-articles-tooltip' => '$1da qidir',
+'searchprofile-project-tooltip'  => '$1da qidir',
+'searchprofile-images-tooltip'   => 'Fayllarni qidir',
+'search-result-size'             => '$1 ({{PLURAL:$2|1 soʻz|$2 soʻz}})',
+'search-redirect'                => '(yoʻnaltirish $1)',
+'search-section'                 => '($1 boʻlimi)',
+'search-suggest'                 => 'Balki buni nazarda tutgandirsiz: $1',
+'search-interwiki-default'       => '$1 natijalar:',
+'searchall'                      => 'barchasi',
+'showingresults'                 => "#<b>$2</b> boshlanayotgan <b>$1</b> natijalar ko'rsatilyapti.",
+'showingresultsheader'           => "$4 uchun {{PLURAL:$5|'''$3'''dan '''$1''' natija|'''$3'''dan '''$1 - $2''' natijalar}}",
+'powersearch'                    => 'Qidiruv',
+'powersearch-ns'                 => 'Bu nom-fazolarda izla:',
+'powersearch-redir'              => 'Yoʻnaltirishlarni koʻrsat',
+'powersearch-field'              => 'Qidir',
 
 # Preferences page
 'preferences'       => 'Moslamalar',
@@ -396,12 +411,13 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'diff'              => 'farq',
 'hist'              => 'tarix',
 'hide'              => 'yashirish',
-'show'              => "ko'rsat",
+'show'              => 'koʻrsat',
 'minoreditletter'   => 'k',
 'newpageletter'     => 'Y',
 
 # Recent changes linked
 'recentchangeslinked'          => "Bog'langan o'zgarishlar",
+'recentchangeslinked-toolbox'  => 'Bogʻliq oʻzgarishlar',
 'recentchangeslinked-title'    => '"$1"ga aloqador oʻzgarishlar',
 'recentchangeslinked-noresult' => 'Berilgan davrda bogʻlangan sahifalarda oʻzgarishlar boʻlmagan.',
 'recentchangeslinked-summary'  => "Ushbu maxsus sahifa unga bogʻlangan sahifalardagi soʻnggi oʻzgarishlarni koʻrsatadi. [[Special:Watchlist|Kuzatuv roʻyxatingizdagi]] sahifalar '''qalin''' qilib koʻrsatilgan.",
@@ -429,6 +445,8 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'linkstoimage'              => 'Bu faylga quyidagi {{PLURAL:$1|sahifa|$1 sahifalar}} bogʻlangan:',
 'nolinkstoimage'            => 'Bu faylga bogʻlangan sahifalar yoʻq.',
 'sharedupload'              => 'This file is from $1 and may be used by other projects.',
+'sharedupload-desc-here'    => 'Ushbu fayl $1dan boʻlib, boshqa loyihalarda ham ishlatilishi mumkin.
+Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 'uploadnewversion-linktext' => 'Bu faylning yangi versiyasini yukla',
 
 # Unused templates
@@ -444,6 +462,7 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'disambiguationspage' => '{{ns:template}}:Disambig',
 
 # Miscellaneous special pages
+'nbytes'                  => '$1 bayt',
 'ncategories'             => '$1 {{PLURAL:$1|turkum|turkumlar}}',
 'lonelypages'             => 'Yetim sahifalar',
 'uncategorizedpages'      => 'Turkumlashtirilmagan sahifalar',
@@ -474,7 +493,7 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'allpagesfrom'   => 'Sahifalarni koʻrsat:',
 'allarticles'    => 'Barcha sahifalar',
 'allpagesnext'   => 'Keyingi',
-'allpagessubmit' => "O'tish",
+'allpagessubmit' => 'Oʻt',
 'allpagesprefix' => 'Bunday prefiksli sahifalarni koʻrsat:',
 
 # Special:Categories
@@ -530,7 +549,7 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 
 # Contributions
 'contributions' => 'Foydalanuvchining hissasi',
-'mycontris'     => 'hissam',
+'mycontris'     => 'Hissam',
 'contribsub2'   => '$1 uchun ($2)',
 
 'sp-contributions-newbies'  => 'Faqatgina yangi foydalanuvchilarning hissalarini koʻrsat',
@@ -588,14 +607,14 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'tooltip-ca-protect'              => 'Bu sahifani himoyalash',
 'tooltip-ca-delete'               => "Bu sahifani o'chirish",
 'tooltip-ca-undelete'             => "Bu sahifa o'chirilmasdan oldin qilingan tahrirlarni tiklash",
-'tooltip-ca-move'                 => "Bu sahifani ko'chirish",
+'tooltip-ca-move'                 => 'Bu sahifani koʻchir',
 'tooltip-ca-watch'                => "Bu sahifani kuzatuv ro'yxatingizga qo'shish",
 'tooltip-ca-unwatch'              => "Bu sahifani kuzatuv ro'yxatingizga o'chirish",
 'tooltip-search'                  => '{{SITENAME}}da qidirish',
 'tooltip-search-go'               => 'Xuddi shu nomli sahifa bor boʻlsa, uni och',
 'tooltip-search-fulltext'         => 'Sahifalarda shu matnni izla',
 'tooltip-p-logo'                  => 'Bosh sahifa',
-'tooltip-n-mainpage'              => "Bosh sahifaga o'tish",
+'tooltip-n-mainpage'              => 'Bosh sahifaga oʻtish',
 'tooltip-n-portal'                => 'Loyiha haqida, nimalar qilishingiz mumkin, nimalarni qayerdan topish mumkin',
 'tooltip-n-currentevents'         => "Joriy hodisalar haqida ma'lumot olish",
 'tooltip-n-recentchanges'         => "Yangi o'zgarishlar ro'yxati.",
@@ -628,6 +647,7 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'tooltip-compareselectedversions' => "Bu sahifaning ikki tanlangan versiyalari o'rtasidagi farqni ko'rish.",
 'tooltip-watch'                   => "Bu sahifani kuzatuv ro'yxatingizga qo'shish",
 'tooltip-recreate'                => "Bu sahifani u o'chirilgan bo'lishiga qaramasdan qayta yaratish",
+'tooltip-summary'                 => 'Qisqa mazmun kiriting',
 
 # Browsing diffs
 'previousdiff' => '← Avvalgi tahrir',
@@ -645,6 +665,7 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'ilsubmit' => 'Qidirish',
 
 # Metadata
+'metadata'          => "Metama'lumot",
 'metadata-expand'   => 'Batafsil axborot koʻrsat',
 'metadata-collapse' => 'Batafsil axborotni yashir',
 
index 14d82ed..cde098d 100644 (file)
@@ -330,6 +330,7 @@ $messages = array(
 'printableversion'  => 'Version par la stanpa',
 'permalink'         => 'Link parmanente',
 'print'             => 'Stanpa',
+'view'              => 'Varda',
 'edit'              => 'Canbia',
 'create'            => 'Crea',
 'editthispage'      => 'Canbia sta pagina',
@@ -508,10 +509,12 @@ I dati che ghè qua drento no i xe azornà.",
 Funsion: $1<br />
 Query: $2',
 'viewsource'           => 'Varda el testo',
+'viewsource-title'     => 'Varda el testo de $1',
 'actionthrottled'      => 'Asion ritardà',
 'actionthrottledtext'  => "Come misura de sicuresa contro e o spam, l'esecusion de alcune asion e a xè limità a on numaro masimo de volte en on determinà periodo de tenpo, limite che en questo caso xè sta superà. Se prega de riprovare tra qualche minuto.",
 'protectedpagetext'    => 'Sta pagina la xe stà proteta de modo che nissuni possa canbiarla.',
 'viewsourcetext'       => 'Se pole vardar e copiar el testo de sta pagina:',
+'viewyourtext'         => "Xè posibile vedàre e copiare el codexe sorzente de le '''to modifighe''' a sta pajina:",
 'protectedinterface'   => "Sta pagina la gà drento un testo de l'interfacia utente del software, quindi la xe proteta parché nissuni la strussia.",
 'editinginterface'     => "'''Ocio:''' El testo de sta pajina el fa parte de l'interfacia utente del sito. Tute łe modifeghe aportae a sta pajina se riflete so i mesaji visuałizà par tuti i utenti.
 Par łe tradusion, considera ła posibiłità de usare [//translatewiki.net/wiki/Main_Page?setlang=vec translatewiki.net], el projeto MediaWiki par ła localizasion.",
@@ -519,6 +522,8 @@ Par łe tradusion, considera ła posibiłità de usare [//translatewiki.net/wiki
 'cascadeprotected'     => 'So sta pajina no xè posibiłe efetuare modifeghe parché xè sta inclusa {{PLURAL:$1|ne ła pajina indicà de seguito, che xè sta proteta|ne łe pajine indicae de seguito, che e xè sta protete}} sełesionando ła protesion "ricorsiva":
 $2',
 'namespaceprotected'   => "No se dispone de i parmesi nesesari par modifegare łe pajine del namespace '''$1'''.",
+'customcssprotected'   => "Nò se dispone dei parmesi necesari a la modifega de sta pajina CSS, in quanto la contien le inpostasion personali de n'altro utente.",
+'customjsprotected'    => "Nò se dispone dei parmesi necesari a la modifega de sta pajina JavaScript, in quanto la contien le inpostasion personali de n'altro utente.",
 'ns-specialprotected'  => 'No xè posibiłe modifegare łe pajine spesałi.',
 'titleprotected'       => 'Ła creasion de na pajina con sto titoło xè sta blocà da [[User:$1|$1]].
 Ła modivasion xè ła seguente: "$2".',
@@ -567,6 +572,8 @@ Tòtene uno difarente.',
 'createaccounterror'         => "No se pole crear l'utente: $1",
 'nocookiesnew'               => "Ła rejistrasion xè sta conpletà, ma no xè sta posibiłe asedare a {{SITENAME}} parché i cookie i xè disativai. Riprovare l'aceso con el nome utente e ła password pena creai dopo aver ativà i cookie nel proprio browser.",
 'nocookieslogin'             => "L'aceso a {{SITENAME}} richiede l'uso de i cookie, che i risulta disativai. Riprovare l'aceso dopo aver ativà i cookie nel proprio browser.",
+'nocookiesfornew'            => "L'account utente nò'l xè stà creà, parchè nò gavemo podùo confermar la so fonte.
+Asicurate de 'ver ativà i cookie, ricarica sta pajina e riprova.",
 'noname'                     => 'El nome utente indicà no xè vałido.',
 'loginsuccesstitle'          => 'Aceso efetuà',
 'loginsuccess'               => "'''Te si sta conesso al server de {{SITENAME}} con el nome utente de \"\$1\".'''",
@@ -738,6 +745,8 @@ L'ultimo ełemento del rejistro de i blochi xè riportà de seguito par informas
 'usercsspreview'                   => "'''Sta qua la xe solo n'anteprima del proprio CSS personal.
 Le modifiche no le xe gnancora stà salvà!'''",
 'userjspreview'                    => "'''Sta qua la xe solo n'anteprima par proar el proprio JavaScript personal; le modifiche no le xe gnancora stà salvà!'''",
+'sitecsspreview'                   => "'''Sta qua la xe solo n'anteprima del proprio CSS personal. Le modifiche no le xe gnancora stà salvà!'''",
+'sitejspreview'                    => "'''Sta qua la xe solo n'anteprima par proar el proprio JavaScript personal; le modifiche no le xe gnancora stà salvà!'''",
 'userinvalidcssjstitle'            => "'''Ocio:'''  No ghe xe nissuna skin con nome \"\$1\". Nota che le pagine par i .css e .js personalizà le gà l'iniziale del titolo minuscola, par esenpio {{ns:user}}:Esenpio/vector.css e no {{ns:user}}:Esenpio/Vector.css.",
 'updated'                          => '(Agiornà)',
 'note'                             => "'''Nota:'''",
@@ -1341,6 +1350,7 @@ Co qualcheduni te scrivarà, nol vedarà mia el to indirizo.',
 'action-userrights'           => 'canbiar tuti i diriti dei utenti',
 'action-userrights-interwiki' => 'canbiar i diriti dei utenti su altre wiki',
 'action-siteadmin'            => 'blocar e desblocar el database',
+'action-sendemail'            => 'Manda e-mail',
 
 # Recent changes
 'nchanges'                          => '$1 {{PLURAL:$1|canbiamento|canbiamenti}}',
@@ -1975,8 +1985,8 @@ Par riscontri e ulteriore assistensa:
 'delete-legend'          => 'Scancela',
 'historywarning'         => "'''Ocio:''' La pàxena che te sì drio scancełar la gà na cronołogia con circa $1 {{PLURAL:$1|revision|revision}}:",
 'confirmdeletetext'      => 'Te ste par scansełare na pajina co tuta ła so cronołosia. Par cortesia, conferma che xè to intension prosedere a tałe scansełasion, che te ghe piena consapevołeza de łe conseguense de ła to axion e che esa xè conforme a łe linee guida stabiłie en [[{{MediaWiki:Policy-url}}]].',
-'actioncomplete'         => 'Axion conpletà',
-'actionfailed'           => 'Azion mia riussìa',
+'actioncomplete'         => 'Asion conpletà',
+'actionfailed'           => 'Asion mia riussìa',
 'deletedtext'            => "''$1'' xe stà scanselà.
 Varda $2 par n'elenco de le ultime pagine scanselà.",
 'dellogpage'             => 'Registro de scancelassion',
@@ -1995,7 +2005,7 @@ Varda $2 par n'elenco de le ultime pagine scanselà.",
 'delete-warning-toobig'  => 'La cronologia de sta pagina le xe longa assè (oltre $1 {{PLURAL:$1|revision|revisioni}}). La so scancelazion la pode crear dei problemi de funzionamento al database de {{SITENAME}}; procedi con cautela.',
 
 # Rollback
-'rollback'          => 'Anula le modifiche',
+'rollback'          => 'Anuła łe modifighe',
 'rollback_short'    => 'Rollback',
 'rollbacklink'      => 'rollback',
 'rollbackfailed'    => 'Ripristino mìa riussìo',
@@ -2020,6 +2030,7 @@ L'ultima modefega l'è stà fata da [[User:$3|$3]] ([[User talk:$3|discussion]]{
 'unprotectedarticle'          => 'gà sblocà "[[$1]]"',
 'movedarticleprotection'      => 'gà canbià la protesion da "[[$2]]" a "[[$1]]"',
 'protect-title'               => 'Canbia el livèl de protezion par "$1"',
+'protect-title-notallowed'    => 'Varda el livelo de protesion de " $1 "',
 'prot_1movedto2'              => '[[$1]] spostà a [[$2]]',
 'protect-legend'              => 'Conferma la protezion',
 'protectcomment'              => 'Motivassion:',
@@ -2171,6 +2182,9 @@ $1',
 'whatlinkshere-filters'    => 'Filtri',
 
 # Block/unblock
+'autoblockid'                     => 'Autobloco #$1',
+'block'                           => 'Bloca utente',
+'unblock'                         => 'Sbloca utente',
 'blockip'                         => 'Bloco utente',
 'blockip-title'                   => "Bloca l'utente",
 'blockip-legend'                  => "Bloca l'utente",
@@ -2187,6 +2201,7 @@ $1',
 ** Conportamenti intimidatori o molestie
 ** Uso indebito de più account
 ** Nome utente non cònsono',
+'ipb-hardblock'                   => 'Inpedissighe agli utenti rejistrai de contribuire da sto indirizo IP',
 'ipbcreateaccount'                => 'Inpedissi la creazion de altri account',
 'ipbemailban'                     => "Inpedìsseghe a l'utente de mandar e-mail",
 'ipbenableautoblock'              => "Bloca automaticamente l'ultimo indirizo IP doparà da l'utente e i sucessivi con cui vien tentà modifiche",
@@ -2197,11 +2212,14 @@ $1',
 'ipbotherreason'                  => 'Altri motivi/detagli:',
 'ipbhidename'                     => 'Scondi el nome utente da le modìfeghe e da i elenchi.',
 'ipbwatchuser'                    => "Tien d'ocio la pagina utente e la pagina de discussion de sto utente",
+'ipb-disableusertalk'             => "Inpedissi a sto utente de modifegar la propia pajina de discussion mentre l'è blocà",
 'ipb-change-block'                => "Bloca de novo l'utente co ste inpostassion",
+'ipb-confirm'                     => 'Conferma el bloco',
 'badipaddress'                    => "L'indirisso IP indicà no'l xè mìa coreto.",
 'blockipsuccesssub'               => 'Bloco eseguìo',
 'blockipsuccesstext'              => "[[Special:Contributions/$1|$1]] l'è sta bloccà.<br />
 Varda [[Special:BlockList|lista IP bloccati]] par védar tuti i blochi.",
+'ipb-blockingself'                => 'Sito drio blocar te steso! Sito sicuro de voerlo fare?',
 'ipb-edit-dropdown'               => 'Motivi par el bloco',
 'ipb-unblock-addr'                => 'Sbloca $1',
 'ipb-unblock'                     => 'Sbloca un utente o un indirizo IP',
@@ -2211,6 +2229,7 @@ Varda [[Special:BlockList|lista IP bloccati]] par védar tuti i blochi.",
 'unblockiptext'                   => 'Dòpara el modulo qua soto par ridarghe el dirito de scritura a un indirizzo IP precedentemente blocà.',
 'ipusubmit'                       => 'Cava sto bloco',
 'unblocked'                       => '[[User:$1|$1]] el xe stà sblocà',
+'unblocked-range'                 => '$1 xè stà sblocà',
 'unblocked-id'                    => 'El bloco $1 el xe stà cavà',
 'ipblocklist'                     => 'Utenti blocà',
 'ipblocklist-legend'              => 'Cata fora un utente blocà',
@@ -2288,6 +2307,7 @@ Tiente in mente de [[Special:UnlockDB|sblocarlo]] co te ghè finìo de far manut
 'unlockdbsuccesstext' => 'El database de {{SITENAME}} el xe stà sblocà.',
 'lockfilenotwritable' => "Inpossibile scrìvar sul file de ''lock'' del database. Ghe vole acesso in scritura a sto file da parte del server web, par blocar e sblocar el database.",
 'databasenotlocked'   => "El database no l'è mìa blocà.",
+'lockedbyandtime'     => '(da $1 el $2 ale $3)',
 
 # Move page
 'move-page'                    => 'Spostamento de $1',
@@ -2565,6 +2585,10 @@ Questo xe probabilmente dovùo a la presenza de un colegamento a un sito foresto
 'spam_reverting'      => "Ripristinà l'ultima version priva de colegamenti a $1",
 'spam_blanking'       => 'Pàxena svodà, tute łe version le contegneva cołegamenti a $1',
 
+# Info page
+'pageinfo-title'        => 'Informasion par "$1"',
+'pageinfo-header-edits' => 'Modìfeghe',
+
 # Patrolling
 'markaspatrolleddiff'                 => 'Segna la modifica come verificà',
 'markaspatrolledtext'                 => 'Segna sta pàxena come verificà',
@@ -3055,6 +3079,9 @@ Nota che te pol anca [[Special:EditWatchlist|modificar la lista con l'interfacia
 'watchlisttools-edit' => "Varda e canbia le pagine tegnùe d'ocio",
 'watchlisttools-raw'  => 'Canbia la lista in formato testo',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|msj]])',
+
 # Core parser functions
 'unknown_extension_tag' => 'Tag estension sconossiùo: "$1"',
 'duplicate-defaultsort' => 'Ocio: la ciave de ordinamento predefinìa "$2" la va in conflito co\' quela de prima "$1".',
@@ -3183,8 +3210,35 @@ Le imagini le vien mostrà a la risoluzion pi granda che se pol, par i altri tip
 'sqlite-no-fts'  => '$1 sensa la possibilità de riserca completa nel testo',
 
 # New logging system
-'revdelete-restricted'   => 'aplicà restrizioni ai aministradori',
-'revdelete-unrestricted' => 'gà cavà le limitazion par i aministradori',
-'newuserlog-byemail'     => 'password spedìa par e-mail',
+'logentry-delete-delete'              => '$1 ga scanselà la pajina $3',
+'logentry-delete-restore'             => '$1 ga ripristinà "$3"',
+'logentry-delete-event'               => '$1 ga canbià la vixibilità de {{PLURAL:$5|n\'asion del registro|$5 asion del registro}} de "$3": $4',
+'logentry-delete-revision'            => '$1 ga canbià la vixibilità de {{PLURAL:$5|na revixion|$5 revixion}} de la pajina"$3": $4',
+'logentry-delete-event-legacy'        => '$1 ga canbià la vixibilità de calche asion del registro de "$3"',
+'logentry-delete-revision-legacy'     => '$1 ga canbià la vixibilità par le revixion de la pajina $3',
+'logentry-suppress-delete'            => '$1 ga sconto la pajina "$3"',
+'logentry-suppress-event'             => '$1 ga canbià de scondón la vixibilità de {{PLURAL:$5|n\'asion del registro|$5 asion del registro}} de "$3": $4',
+'logentry-suppress-revision'          => '$1 ga canbià de scondón la vixibilità de {{PLURAL:$5|na revixion|$5 revixion}} de "$3": $4',
+'logentry-suppress-event-legacy'      => '$1 ga canbià de scondón la vixibilità de calche asion del registro de "$3"',
+'logentry-suppress-revision-legacy'   => '$1 ga canbià de scondón la vixibilità de calche revixion de $3',
+'revdelete-content-hid'               => 'contegnùo sconto',
+'revdelete-summary-hid'               => 'ogeto de la modifega sconto',
+'revdelete-uname-hid'                 => 'nome utente sconto',
+'revdelete-content-unhid'             => 'contegnùo ripristinà',
+'revdelete-summary-unhid'             => 'ogeto ripristinà',
+'revdelete-uname-unhid'               => 'nome utente ripristinà',
+'revdelete-restricted'                => 'aplicà restrizioni ai aministradori',
+'revdelete-unrestricted'              => 'gà cavà le limitazion par i aministradori',
+'logentry-move-move'                  => '$1 ga spostà la pajina $3 a $4',
+'logentry-move-move-noredirect'       => '$1 ga spostà la pajina $3 a $4 sensa metare un rimando',
+'logentry-move-move_redir'            => '$1 ga spostà la pajina $3 a $4 metendo un rimando',
+'logentry-move-move_redir-noredirect' => '$1 ga spostà la pajina $3 a $4 al posto de un rimando sensa metare un rimando',
+'logentry-patrol-patrol'              => '$1 ga segnà la revixion $4 de la pajina $3 come verifegà',
+'logentry-patrol-patrol-auto'         => '$1 ga segnà automategamente la revixion $4 de la pajina $3 come verifegà',
+'logentry-newusers-newusers'          => '$1 ga creà na utensa',
+'logentry-newusers-create'            => '$1 ga creà na utensa',
+'logentry-newusers-create2'           => '$1 ga creà na utensa $3',
+'logentry-newusers-autocreate'        => "L'utensa $1 xè stà creà automategamente",
+'newuserlog-byemail'                  => 'password spedìa par e-mail',
 
 );
index 76f7372..08c0286 100644 (file)
@@ -674,6 +674,9 @@ $2',
 'ns-specialprotected'  => 'Không thể sửa chữa các trang trong không gian tên {{ns:special}}.',
 'titleprotected'       => "Tựa đề này đã bị [[User:$1|$1]] khóa không cho tạo ra.
 Lý do được cung cấp là ''$2''.",
+'filereadonlyerror'    => "Không thể sửa đổi tập tin “$1” vì kho tập tin “$2” đang ở chế độ chỉ-đọc.
+
+Lý do đưa ra là: “''$3''”.",
 
 # Virus scanner
 'virus-badscanner'     => "Cấu hình sau: không nhận ra bộ quét virus: ''$1''",
@@ -1789,13 +1792,17 @@ Nếu vẫn còn bị lỗi, xin hãy liên hệ với một [[Special:ListUsers
 'backend-fail-closetemp'     => 'Không thể đóng tập tin tạm thời.',
 'backend-fail-read'          => 'Không thể đọc tập tin $1.',
 'backend-fail-create'        => 'Không thể tạo tập tin $1.',
-'backend-fail-readonly'      => 'Phía sau lưu trữ “$1” bây giờ là chỉ-đọc. Lý do đưa ra là: “$2”',
+'backend-fail-maxsize'       => 'Không thể tạo tập tin $1 vì nó lớn hơn $2 byte.',
+'backend-fail-readonly'      => 'Phía sau lưu trữ “$1” đang ở chế độ chỉ-đọc. Lý do đưa ra là: “$2”',
 'backend-fail-synced'        => 'Tập tin “$1” đang có trạng thái không nhất quán đối với các phía sau lưu trữ nội bộ',
 'backend-fail-connect'       => 'Không thể kết nối đến phía sau lưu trữ “$1”.',
 'backend-fail-internal'      => 'Lỗi không rõ xuất hiện trong phía sau lưu trữ “$1”.',
 'backend-fail-contenttype'   => 'Không thể xác định kiểu nội dung của tập tin để lưu giữ tại “$1”.',
 'backend-fail-batchsize'     => 'Phía sau lưu trữ đã nhận một loạt $1 thao tác tập tin; mức hạn là $2 thao tác.',
 
+'filejournal-fail-dbconnect' => 'Không thể kết nối với cơ sở dữ liệu nhật ký của phía sau lưu trữ “$1”.',
+'filejournal-fail-dbquery'   => 'Không thể cập nhật cơ sở dữ liệu nhật ký của phía sau lưu trữ “$1”.',
+
 # Lock manager
 'lockmanager-notlocked'        => 'Không thể mở khóa “$1”; nó chưa khóa.',
 'lockmanager-fail-closelock'   => 'Không thể đóng tập tin khóa cho “$1”.',
@@ -2123,6 +2130,11 @@ Bạn có thể thu hẹp kết quả bằng cách chọn loại nhật trình,
 'allpagesbadtitle'  => 'Tựa trang không hợp lệ hay chứa tiền tố liên kết ngôn ngữ hoặc liên kết wiki. Nó có thể chứa một hoặc nhiều ký tự không dùng được ở tựa trang.',
 'allpages-bad-ns'   => '{{SITENAME}} không có không gian tên “$1”',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Bạn đang xem phiên bản vùng nhớ đệm của trang này có thể lỗi thời cho tới $1.',
+'cachedspecial-viewing-cached-ts'  => 'Bạn đang xem phiên bản vùng nhớ đệm của trang này có thể không đúng thời hoàn toàn.',
+'cachedspecial-refresh-now'        => 'Xem phiên bản mới nhất.',
+
 # Special:Categories
 'categories'                    => 'Thể loại',
 'categoriespagetext'            => '{{PLURAL:$1|Thể loại|Các thể loại}} dưới đây có trang hoặc tập tin phương tiện.
@@ -4002,4 +4014,15 @@ Nếu không thì bạn có thể điền biểu mẫu đơn giản ở dưới.
 'api-error-uploaddisabled'                => 'Chức năng tải lên đã bị tắt trên wiki này.',
 'api-error-verification-error'            => 'Tập tin này có thể bị hỏng hoặc có phần mở rộng sai.',
 
+# Durations
+'duration-seconds'   => '$1 giây',
+'duration-minutes'   => '$1 phút',
+'duration-hours'     => '$1 giờ',
+'duration-days'      => '$1 ngày',
+'duration-weeks'     => '$1 tuần',
+'duration-years'     => '$1 năm',
+'duration-decades'   => '$1 thập niên',
+'duration-centuries' => '$1 thế kỷ',
+'duration-millennia' => '$1 thiên niên kỷ',
+
 );
index 12978ac..2439d2f 100644 (file)
@@ -346,7 +346,9 @@ Cweraedje: $2',
 'viewsource'           => 'Vey côde sourdant',
 'viewsourcetext'       => 'Loukîz li contnou di l’ årtike, et s’ li rcopyî si vos vloz, por vos bouter dsu foû des fyis :',
 'protectedinterface'   => "Cisse pådje ci dene on tecse d' eterface pol programe, eyet elle a stî protedjeye po s' waeranti siconte des abus.",
-'editinginterface'     => "'''Asteme:''' Vos candjîz ene pådje k' est eployeye po dner on tecse d' eterface pol programe. Les candjmints a cisse pådje ci vont-st aveur èn efet so l' eterface d' uzeu des ôtes uzeus.",
+'editinginterface'     => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
+Changes to this page will affect the appearance of the user interface for other users.
+For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
 
 # Login and logout pages
 'logouttext'                 => "'''Vos vs avoz dislodjî.'''
index cc774a5..a4d4463 100644 (file)
@@ -425,10 +425,10 @@ Ayaw paghingalimot hin pagbalyo han imo [[Special:Preferences|{{SITENAME}} mga g
 'remembermypassword'      => "Hinumdumi an akon pan-sakob dinhi nga panngaykay ''(browser)'' (para ha pinakamaiha $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}})",
 'yourdomainname'          => 'Imo dominyo:',
 'login'                   => 'Sakob',
-'nav-login-createaccount' => 'Sakob / paghimo hin bag-o nga akawnt',
+'nav-login-createaccount' => 'Magpalista nga masakob / paghimo hin bag-o nga akawnt',
 'loginprompt'             => "Kinahanglan mo hin mga kuki (''cookie'') para makapag log-in ha {{SITENAME}}.",
-'userlogin'               => 'Sakob/Pagrehistro',
-'userloginnocreate'       => 'Sakob',
+'userlogin'               => 'Magpasabot nga masakob / paghimo hin akawnt',
+'userloginnocreate'       => 'Magpasabot nga masakob',
 'logout'                  => 'Gawas',
 'userlogout'              => 'Gawas',
 'notloggedin'             => 'Diri sakob',
@@ -531,7 +531,7 @@ Kun pidliton mo an \"{{int:savearticle}}\" utro, an imo ginliwat in matitipig bi
 'whitelistedittext'                => 'Kinahanglan mo mag-$1 para makaliwat han mga pakli.',
 'nosuchsectiontitle'               => 'Waray kaagi-i an bahin',
 'loginreqtitle'                    => 'Nagkikinahanglan hin pan-sakob',
-'loginreqlink'                     => 'Pansakob',
+'loginreqlink'                     => 'Magpasabot nga masakob',
 'loginreqpagetext'                 => 'Kinahanglan mo mag-$1 para makakita ha iba nga mga pakli.',
 'accmailtitle'                     => 'Ginpadara na an tigaman-pagsulod.',
 'newarticle'                       => '(Bag-o)',
index 105a06a..ec413fd 100644 (file)
@@ -17,6 +17,7 @@
  * @author Chinalace
  * @author Dingyuang
  * @author Fantasticfears
+ * @author Fengchao
  * @author Franklsf95
  * @author Gaoxuewei
  * @author Gzdavidwong
@@ -389,11 +390,11 @@ $messages = array(
 
 'about'         => '关于',
 'article'       => '内容页面',
-'newwindow'     => 'ï¼\88å\9c¨新窗口中打开)',
+'newwindow'     => 'ï¼\88å°\86äº\8e新窗口中打开)',
 'cancel'        => '取消',
 'moredotdotdot' => '更多',
 'mypage'        => '我的页面',
-'mytalk'        => '我的讨论',
+'mytalk'        => '我的讨论',
 'anontalk'      => '该IP地址的讨论',
 'navigation'    => '导航',
 'and'           => '和',
@@ -437,7 +438,7 @@ $messages = array(
 'history'           => '页面历史',
 'history_short'     => '历史',
 'updatedmarker'     => '我上次访问以来的修改',
-'printableversion'  => '可打印版',
+'printableversion'  => '打印版本',
 'permalink'         => '永久链接',
 'print'             => '打印',
 'view'              => '查看',
@@ -451,9 +452,9 @@ $messages = array(
 'viewdeleted_short' => '查看$1个被删除的编辑',
 'protect'           => '保护',
 'protect_change'    => '更改',
-'protectthispage'   => 'ä¿\9dæ\8a¤æ­¤页',
+'protectthispage'   => 'ä¿\9dæ\8a¤æ\9c¬页',
 'unprotect'         => '更改保护',
-'unprotectthispage' => 'æ\9b´æ\94¹æ­¤页面的保护',
+'unprotectthispage' => 'æ\9b´æ\94¹æ\9c¬页面的保护',
 'newpage'           => '最新页面',
 'talkpage'          => '讨论本页',
 'talkpagelinktext'  => '讨论',
@@ -475,7 +476,7 @@ $messages = array(
 'otherlanguages'    => '其他语言',
 'redirectedfrom'    => '(重定向自$1)',
 'redirectpagesub'   => '重定向页',
-'lastmodifiedat'    => '本页面最后修于$1 $2。',
+'lastmodifiedat'    => '本页面最后修于$1 $2。',
 'viewcount'         => '此页面已被浏览过$1次。',
 'protectedpage'     => '受保护页面',
 'jumpto'            => '跳转到:',
@@ -986,7 +987,7 @@ $3的理由是''$2''",
 'viewpagelogs'           => '查看本页面的日志',
 'nohistory'              => '本页面没有编辑历史记录。',
 'currentrev'             => '最后版本',
-'currentrev-asof'        => '$1的最版本',
+'currentrev-asof'        => '$1的最版本',
 'revisionasof'           => '$1的版本',
 'revision-info'          => '在$1由$2所做的修订版本',
 'previousrevision'       => '←上一版本',
@@ -1138,7 +1139,7 @@ $1",
 
 # Search results
 'searchresults'                    => '搜索结果',
-'searchresults-title'              => '“$1”的搜索结果',
+'searchresults-title'              => '“$1”的搜索结果',
 'searchresulttext'                 => '有关搜索{{SITENAME}}的更多信息,参见[[{{MediaWiki:Helppage}}|{{int:help}}]]。',
 'searchsubtitle'                   => '搜索\'\'\'[[:$1]]\'\'\'([[Special:Prefixindex/$1|所有以 "$1" 开头的页面]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|所有链接到“$1”的页面]])',
 'searchsubtitleinvalid'            => "搜索'''$1'''",
@@ -1949,7 +1950,7 @@ $1',
 'newpages-username'       => '用户名:',
 'ancientpages'            => '最早页面',
 'move'                    => '移动',
-'movethispage'            => '移å\8a¨æ­¤页',
+'movethispage'            => '移å\8a¨æ\9c¬页',
 'unusedimagestext'        => '下列文件已存在,但并未插入任何页面。
 请注意其它网站可能会直接通过URL链接此文件,因此下面列出的文件依然有可能被使用。',
 'unusedcategoriestext'    => '虽然没有被其它页面或者分类所采用,但列表中的分类页依然存在。',
@@ -2062,8 +2063,8 @@ $1',
 # E-mail user
 'mailnologin'          => '无电邮地址',
 'mailnologintext'      => '你必须[[Special:UserLogin|登录]]并在你的[[Special:Preferences|系统设置]]中拥有有效的电子邮件地址才能向其他用户发送电子邮件。',
-'emailuser'            => 'ç»\99该ç\94¨æ\88·å\8f\91é\80\81ç\94µå­\90é\82®ä»¶',
-'emailpage'            => '向用户发邮件',
+'emailuser'            => 'ç\94µé\82®è\81\94ç³»',
+'emailpage'            => '电邮联系',
 'emailpagetext'        => '您可以用下面的表格去寄一封电邮给这位用户。
 您在[[Special:Preferences|您参数设置]]中所输入的电子邮箱地址将出现在邮件"发件人"一栏中,这样该用户就可以回复您。',
 'usermailererror'      => 'Mail 对象返回错误:',
@@ -2110,7 +2111,7 @@ $1',
 'watchthispage'        => '监视本页',
 'unwatch'              => '取消监视',
 'unwatchthispage'      => '停止监视',
-'notanarticle'         => '不是页面',
+'notanarticle'         => '非内容页面',
 'notvisiblerev'        => '上次由不同用户所作的修订版本已经删除',
 'watchnochange'        => '在显示的时间段内您所监视的页面没有更改。',
 'watchlist-details'    => '不计讨论页面,你的监视列表中有$1个页面。',
@@ -2661,7 +2662,7 @@ $1被封禁的理由是:“$2”',
 # Thumbnails
 'thumbnail-more'           => '放大',
 'filemissing'              => '无法找到文件',
-'thumbnail_error'          => '创建缩略图错误:$1',
+'thumbnail_error'          => '生成缩略图错误:$1',
 'djvu_page_error'          => 'DjVu页面超出范围',
 'djvu_no_xml'              => '无法在DjVu文件中获取XML',
 'thumbnail-temp-create'    => '无法创建临时缩略图文件',
@@ -2670,11 +2671,11 @@ $1被封禁的理由是:“$2”',
 'thumbnail_dest_directory' => '无法建立目标目录',
 'thumbnail_image-type'     => '图像类型不支持',
 'thumbnail_gd-library'     => '未完成的GD设置:功能遗失 $1',
-'thumbnail_image-missing'  => '文件似乎遗失:$1',
+'thumbnail_image-missing'  => '文件可能丢失:$1',
 
 # Special:Import
 'import'                     => '导入页面',
-'importinterwiki'            => '跨wiki导入',
+'importinterwiki'            => '跨维基导入',
 'import-interwiki-text'      => '选择要导入的wiki和页面标题,导入修订的日期和编辑者名称会被保存。所有的跨wiki导入操作都将记录到[[Special:Log/import|导入日志]]。',
 'import-interwiki-source'    => '来源wiki/页面:',
 'import-interwiki-history'   => '复制此页的所有历史修订版本',
@@ -2685,7 +2686,7 @@ $1被封禁的理由是:“$2”',
 'import-comment'             => '注释:',
 'importtext'                 => '请使用[[Special:Export|导出功能]]从源 wiki 导出文件,
 保存到您的电脑并上传到这里。',
-'importstart'                => '页面导入中……',
+'importstart'                => '正在导入页面...',
 'import-revision-count'      => '$1个版本',
 'importnopages'              => '没有导入的页面。',
 'imported-log-entries'       => '导入了$1项日志记录。',
@@ -2718,7 +2719,7 @@ $1被封禁的理由是:“$2”',
 'importlogpage'                    => '导入日志',
 'importlogpagetext'                => '由管理员从其他wiki导入的带有编辑历史的页面。',
 'import-logentry-upload'           => '通过文件上传导入的[[$1]]',
-'import-logentry-upload-detail'    => '$1个修订',
+'import-logentry-upload-detail'    => '$1个版本',
 'import-logentry-interwiki'        => '跨 wiki $1',
 'import-logentry-interwiki-detail' => '来自$2的$1个修订',
 
@@ -2735,27 +2736,27 @@ $1被封禁的理由是:“$2”',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage'                 => '你的用户页面',
-'tooltip-pt-anonuserpage'             => '您编辑本站所用IP的对应用户页',
+'tooltip-pt-anonuserpage'             => '你用于编辑的IP地址的用户页面',
 'tooltip-pt-mytalk'                   => '你的讨论页面',
-'tooltip-pt-anontalk'                 => '对于来自此IP地址的编辑的对话',
+'tooltip-pt-anontalk'                 => '有关本IP地址的编辑的讨论',
 'tooltip-pt-preferences'              => '你的系统设置',
-'tooltip-pt-watchlist'                => '你正监视更改的页面列表',
+'tooltip-pt-watchlist'                => '你正在监视更改的页面的列表',
 'tooltip-pt-mycontris'                => '你的贡献列表',
-'tooltip-pt-login'                    => '我们希望您可以登入,但不强求',
-'tooltip-pt-anonlogin'                => '我们鼓励您登录,但这并不是必须的',
+'tooltip-pt-login'                    => '我们鼓励你登录,不过这不是强制的',
+'tooltip-pt-anonlogin'                => '我们鼓励你登录,不过这不是强制的',
 'tooltip-pt-logout'                   => '退出登录',
-'tooltip-ca-talk'                     => '关于内容页面的讨论',
-'tooltip-ca-edit'                     => '你可以编辑本页。请在保存前预览一下。',
+'tooltip-ca-talk'                     => '有关内容页面的讨论',
+'tooltip-ca-edit'                     => '你可以编辑本页面。请在保存前使用预览按钮。',
 'tooltip-ca-addsection'               => '开始新段落',
-'tooltip-ca-viewsource'               => 'æ\9c¬é¡µé\9d¢å·²è¢«保护。你可以查看其源代码。',
-'tooltip-ca-history'                  => '本页面的早前修订版本',
-'tooltip-ca-protect'                  => 'ä¿\9dæ\8a¤æ­¤页',
-'tooltip-ca-unprotect'                => 'æ\9b´æ\94¹æ­¤页面的保护',
+'tooltip-ca-viewsource'               => 'æ\9c¬é¡µé\9d¢å\8f\97å\88°保护。你可以查看其源代码。',
+'tooltip-ca-history'                  => '本页面过去的版本',
+'tooltip-ca-protect'                  => 'ä¿\9dæ\8a¤æ\9c¬页',
+'tooltip-ca-unprotect'                => 'æ\9b´æ\94¹æ\9c¬页面的保护',
 'tooltip-ca-delete'                   => '删除本页',
 'tooltip-ca-undelete'                 => '将这个页面恢复到被删除以前的状态',
-'tooltip-ca-move'                     => '移å\8a¨æ­¤页',
-'tooltip-ca-watch'                    => '将本页面加入你的监视列表',
-'tooltip-ca-unwatch'                  => '将此页面从监视列表中移去',
+'tooltip-ca-move'                     => '移å\8a¨æ\9c¬页',
+'tooltip-ca-watch'                    => '添加本页面至你的监视列表',
+'tooltip-ca-unwatch'                  => '从你的监视列表删除本页面',
 'tooltip-search'                      => '在{{SITENAME}}中搜索',
 'tooltip-search-go'                   => '如果相同的标题存在的话便直接前往该页面',
 'tooltip-search-fulltext'             => '搜索含这些文字的页面',
@@ -2765,34 +2766,34 @@ $1被封禁的理由是:“$2”',
 'tooltip-n-portal'                    => '关于本项目,你可以做什么,在哪里找到你需要的事物',
 'tooltip-n-currentevents'             => '查看当前事件的背景信息',
 'tooltip-n-recentchanges'             => '本wiki的最近更改列表',
-'tooltip-n-randompage'                => '随机进入一个页面',
-'tooltip-n-help'                      => '寻求帮助的地方',
+'tooltip-n-randompage'                => '载入一个随机页面',
+'tooltip-n-help'                      => '查找帮助的地方',
 'tooltip-t-whatlinkshere'             => '所有链入本页的wiki页面列表',
 'tooltip-t-recentchangeslinked'       => '本页链入的页面的最近更改',
-'tooltip-feed-rss'                    => '此页ç\9a\84 RSS è®¢é\98\85',
-'tooltip-feed-atom'                   => '本页的Atom',
+'tooltip-feed-rss'                    => 'æ\9c¬é¡µé\9d¢ç\9a\84RSSæº\90',
+'tooltip-feed-atom'                   => '本页面的Atom源',
 'tooltip-t-contributions'             => '查看该用户的贡献列表',
 'tooltip-t-emailuser'                 => '给该用户发送电子邮件',
 'tooltip-t-upload'                    => '上传文件',
-'tooltip-t-specialpages'              => '所有特殊页面列表',
+'tooltip-t-specialpages'              => '所有特殊页面列表',
 'tooltip-t-print'                     => '本页面的可打印版本',
-'tooltip-t-permalink'                 => '本页面该修订版本的永久链接',
+'tooltip-t-permalink'                 => '本页面该版本的永久链接',
 'tooltip-ca-nstab-main'               => '查看内容页面',
 'tooltip-ca-nstab-user'               => '查看用户页面',
-'tooltip-ca-nstab-media'              => '查看媒体页面',
+'tooltip-ca-nstab-media'              => '查看媒体文件页面',
 'tooltip-ca-nstab-special'            => '本页为特殊页面,你不能编辑本页',
 'tooltip-ca-nstab-project'            => '查看计划页面',
 'tooltip-ca-nstab-image'              => '查看文件页面',
-'tooltip-ca-nstab-mediawiki'          => '查看系统界面消息',
+'tooltip-ca-nstab-mediawiki'          => '查看系统息',
 'tooltip-ca-nstab-template'           => '查看模板',
 'tooltip-ca-nstab-help'               => '查看帮助页面',
 'tooltip-ca-nstab-category'           => '查看分类页面',
-'tooltip-minoredit'                   => '将此标记为小更改',
+'tooltip-minoredit'                   => '标记本编辑为小编辑',
 'tooltip-save'                        => '保存您的更改',
 'tooltip-preview'                     => '预览您的更改,请在保存前使用此功能!',
 'tooltip-diff'                        => '显示您对该文字所做的更改',
 'tooltip-compareselectedversions'     => '查看此页面两个选定的修订版本间的差异。',
-'tooltip-watch'                       => '将该页面加到您的监视列表',
+'tooltip-watch'                       => '添加本页面至你的监视列表',
 'tooltip-watchlistedit-normal-submit' => '删除标题',
 'tooltip-watchlistedit-raw-submit'    => '更新监视列表',
 'tooltip-recreate'                    => '重建该页面,无论是否被删除。',
@@ -2800,7 +2801,7 @@ $1被封禁的理由是:“$2”',
 'tooltip-rollback'                    => '单击“回退”恢复上一位贡献者对本页的编辑',
 'tooltip-undo'                        => '“撤销”可以恢复该编辑并在预览模式下打开编辑表单。它允许在摘要中加入原因。',
 'tooltip-preferences-save'            => '保存设定',
-'tooltip-summary'                     => 'è¾\93å\85¥ä¸\80个简短的摘要',
+'tooltip-summary'                     => '请è¾\93å\85¥简短的摘要',
 
 # Stylesheets
 'common.css'      => '/* 此处的 CSS 将应用于所有的皮肤 */',
@@ -2832,16 +2833,16 @@ $1被封禁的理由是:“$2”',
 'notacceptable' => '该网站服务器不能提供您的客户端能识别的数据格式。',
 
 # Attribution
-'anonymous'        => '{{SITENAME}}的匿名{{PLURAL:$1|用户|用户}}',
+'anonymous'        => '{{SITENAME}}匿名{{PLURAL:$1|用户}}',
 'siteuser'         => '{{SITENAME}}用户$1',
 'anonuser'         => '{{SITENAME}}匿名用户$1',
-'lastmodifiedatby' => '本页面由$3于$1 $2做出最后修改。',
-'othercontribs'    => 'å\9c¨$1ç\9a\84å·¥ä½\9cå\9fºç¡\80ä¸\8a。',
+'lastmodifiedatby' => '本页面被$3最后修改于$1 $2。',
+'othercontribs'    => 'å\9fºäº\8e$1ç\9a\84å·¥ä½\9c。',
 'others'           => '其他',
-'siteusers'        => '{{SITENAME}}{{PLURAL:$2|用户|用户}}$1',
-'anonusers'        => '{{SITENAME}}匿名{{PLURAL:$2|用户|用户}}$1',
-'creditspage'      => '页面致谢',
-'nocredits'        => '该页没有致谢名单信息。',
+'siteusers'        => '{{SITENAME}}{{PLURAL:$2|用户}}$1',
+'anonusers'        => '{{SITENAME}}匿名{{PLURAL:$2|用户}}$1',
+'creditspage'      => '页面编辑名单',
+'nocredits'        => '本页面没有编辑名单信息。',
 
 # Spam protection
 'spamprotectiontitle' => '垃圾链接过滤器',
@@ -2908,15 +2909,15 @@ $1',
 运行它可能对您的系统带来危险。",
 'imagemaxsize'           => "图像大小限制:<br />''(文件说明页面)''",
 'thumbsize'              => '缩略图大小:',
-'widthheightpage'        => '$1 × $2,$3页',
+'widthheightpage'        => '$1×$2,$3页',
 'file-info'              => '文件大小:$1,MIME类型:$2',
-'file-info-size'         => '$1 × $2像素,文件大小:$3,MIME类型:$4',
-'file-info-size-pages'   => '$1×$2像素,文件大小:$3,MIME类型:$4,$5个页面',
+'file-info-size'         => '$1×$2像素,文件大小:$3,MIME类型:$4',
+'file-info-size-pages'   => '$1×$2像素,文件大小:$3,MIME类型:$4,$5',
 'file-nohires'           => '没有更高的分辨率。',
 'svg-long-desc'          => 'SVG文件,图像大小:$1 × $2像素,文件大小:$3',
-'show-big-image'         => '完分辨率',
-'show-big-image-preview' => 'æ­¤é¢\84è§\88ç\9a\84大å°\8fï¼\9a$1.',
-'show-big-image-other'   => '其他{{PLURAL:$2||}}分辨率:$1。',
+'show-big-image'         => '完分辨率',
+'show-big-image-preview' => 'æ\9c¬é¢\84è§\88ç\9a\84大å°\8fï¼\9a$1ã\80\82',
+'show-big-image-other'   => '其他{{PLURAL:$2|分辨率}}:$1。',
 'show-big-image-size'    => '$1×$2像素',
 'file-info-gif-looped'   => '循环',
 'file-info-gif-frames'   => '$1帧',
@@ -2938,7 +2939,7 @@ $1',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'seconds' => '$1秒',
-'minutes' => '$1分',
+'minutes' => '$1分',
 'hours'   => '$1小时',
 'days'    => '$1天',
 'ago'     => '$1前',
@@ -3001,7 +3002,7 @@ Variants for Chinese language
 'exif-orientation'                 => '方位',
 'exif-samplesperpixel'             => '像素数',
 'exif-planarconfiguration'         => '数据排列',
-'exif-ycbcrsubsampling'            => '黄色洋红的二次采样比例',
+'exif-ycbcrsubsampling'            => '黄色洋红的二次采样比例',
 'exif-ycbcrpositioning'            => '黄色和洋红配置',
 'exif-xresolution'                 => '水平分辨率',
 'exif-yresolution'                 => '垂直分辨率',
index 263fa25..659a6b4 100644 (file)
@@ -427,7 +427,7 @@ $messages = array(
 'redirectpagesub'   => '重定向頁面',
 'lastmodifiedat'    => '此頁面最後修訂於 $1 $2。',
 'viewcount'         => '本頁面已經被瀏覽$1次。',
-'protectedpage'     => '被保護頁',
+'protectedpage'     => '受保護頁面',
 'jumpto'            => '跳轉到:',
 'jumptonavigation'  => '導覽',
 'jumptosearch'      => '搜尋',
@@ -1927,12 +1927,12 @@ Template:消除歧義',
 'longpages'               => '長頁面',
 'deadendpages'            => '斷連頁面',
 'deadendpagestext'        => '以下頁面沒有連結到{{SITENAME}}中的其它頁面。',
-'protectedpages'          => 'å·²保護頁面',
+'protectedpages'          => 'å\8f\97保護頁面',
 'protectedpages-indef'    => '只有無期之保護頁面',
 'protectedpages-cascade'  => '只有連鎖之保護頁面',
 'protectedpagestext'      => '以下頁面已經被保護以防止移動或編輯',
 'protectedpagesempty'     => '在這些參數下沒有頁面正在保護。',
-'protectedtitles'         => 'å·²ä¿\9dè­·ç\9a\84標題',
+'protectedtitles'         => 'å\8f\97ä¿\9dè­·標題',
 'protectedtitlestext'     => '以下的頁面已經被保護以防止建立',
 'protectedtitlesempty'    => '在這些參數之下並無標題正在保護。',
 'listusers'               => '用戶列表',
@@ -2130,9 +2130,9 @@ Template:消除歧義',
 'enotif_reset'                 => '將所有頁面標為已閱讀',
 'enotif_newpagetext'           => '這是新建頁面。',
 'enotif_impersonal_salutation' => '{{SITENAME}}用戶',
-'changed'                      => '修改了',
+'changed'                      => '更改',
 'created'                      => '建立了',
-'enotif_subject'               => '{{SITENAME}}有頁面 $PAGETITLE 被 $PAGEEDITOR $CHANGEDORCREATED',
+'enotif_subject'               => '{{SITENAME}}頁面“$PAGETITLE”已被$PAGEEDITOR$CHANGEDORCREATED',
 'enotif_lastvisited'           => '檢視您上次訪問後的所有更改請參閱$1。',
 'enotif_lastdiff'              => '檢視更改請參閱$1。',
 'enotif_anon_editor'           => '匿名用戶$1',
index b7c1e5e..aeb2e9d 100644 (file)
@@ -345,8 +345,8 @@ UML_LOOK               = NO
 TEMPLATE_RELATIONS     = NO
 INCLUDE_GRAPH          = YES
 INCLUDED_BY_GRAPH      = YES
-CALL_GRAPH             = YES
-CALLER_GRAPH           = YES
+CALL_GRAPH             = NO
+CALLER_GRAPH           = NO
 GRAPHICAL_HIERARCHY    = YES
 DIRECTORY_GRAPH        = YES
 DOT_IMAGE_FORMAT       = png
diff --git a/maintenance/archives/patch-filejournal.sql b/maintenance/archives/patch-filejournal.sql
new file mode 100644 (file)
index 0000000..b7a7d09
--- /dev/null
@@ -0,0 +1,24 @@
+-- File backend operation journal
+CREATE TABLE /*_*/filejournal (
+  -- Unique ID for each file operation
+  fj_id bigint unsigned NOT NULL PRIMARY KEY auto_increment,
+  -- UUID of the batch this operation belongs to
+  fj_batch_uuid varbinary(32) NOT NULL,
+  -- The registered file backend name
+  fj_backend varchar(255) NOT NULL,
+  -- The storage path that was affected (may be internal paths)
+  fj_path blob NOT NULL,
+  -- SHA-1 file path hash in base-36
+  fj_path_sha1 varbinary(32) NOT NULL default '',
+  -- Primitive operation description (create/update/delete)
+  fj_op varchar(16) NOT NULL default '',
+  -- SHA-1 file content hash in base-36
+  fj_new_sha1 varbinary(32) NOT NULL default '',
+  -- Timestamp of the batch operation
+  fj_timestamp varbinary(14) NOT NULL default ''
+);
+
+CREATE INDEX /*i*/fj_batch_id ON /*_*/filejournal (fj_batch_uuid,fj_id);
+CREATE INDEX /*i*/fj_path_id ON /*_*/filejournal (fj_path_sha1,fj_id);
+CREATE INDEX /*i*/fj_new_sha1 ON /*_*/filejournal (fj_new_sha1,fj_id);
+CREATE INDEX /*i*/fj_timestamp ON /*_*/filejournal (fj_timestamp);
index ce8f694..470a513 100644 (file)
@@ -47,6 +47,8 @@ class BackupDumper {
        var $skipFooter = false; // don't output </mediawiki>
        var $startId    = 0;
        var $endId      = 0;
+       var $revStartId = 0;
+       var $revEndId   = 0;
        var $sink       = null; // Output filters
        var $stubText   = false; // include rev_text_id instead of text; for 2-pass dump
        var $dumpUploads = false;
index 73947e9..4f5889b 100644 (file)
@@ -74,7 +74,7 @@ class DeleteDefaultMessages extends Maintenance {
                        $dbw->commit( __METHOD__ );
                }
 
-               $this->output( 'done!', 'msg' );
+               $this->output( "done!\n", 'msg' );
        }
 }
 
index 9067ba8..95bb1fa 100644 (file)
@@ -3,6 +3,10 @@
 # Router for the php cli-server built-in webserver
 # http://ca2.php.net/manual/en/features.commandline.webserver.php
 
+if ( php_sapi_name() != 'cli-server' ) {
+       die( "This script can only be run by php's cli-server sapi." );
+}
+
 ini_set('display_errors', 1);
 error_reporting(E_ALL);
 
index c03f3df..6796c75 100644 (file)
@@ -41,9 +41,7 @@ class TextPassDumper extends BackupDumper {
        var $prefetchCountLast = 0;
        var $fetchCountLast = 0;
 
-       var $failures = 0;
        var $maxFailures = 5;
-       var $failedTextRetrievals = 0;
        var $maxConsecutiveFailedTextRetrievals = 200;
        var $failureTimeout = 5; // Seconds to sleep after db failure
 
@@ -71,6 +69,52 @@ class TextPassDumper extends BackupDumper {
         */
        protected $db;
 
+
+       /**
+        * Drop the database connection $this->db and try to get a new one.
+        *
+        * This function tries to get a /different/ connection if this is
+        * possible. Hence, (if this is possible) it switches to a different
+        * failover upon each call.
+        *
+        * This function resets $this->lb and closes all connections on it.
+        *
+        * @throws MWException
+        */
+       function rotateDb() {
+               // Cleaning up old connections
+               if ( isset( $this->lb ) ) {
+                       $this->lb->closeAll();
+                       unset( $this->lb );
+               }
+
+               if ( isset( $this->db ) && $this->db->isOpen() ) {
+                       throw new MWException( 'DB is set and has not been closed by the Load Balancer' );
+               }
+
+               unset( $this->db );
+
+               // Trying to set up new connection.
+               // We do /not/ retry upon failure, but delegate to encapsulating logic, to avoid
+               // individually retrying at different layers of code.
+
+               // 1. The LoadBalancer.
+               try {
+                       $this->lb = wfGetLBFactory()->newMainLB();
+               } catch ( Exception $e ) {
+                       throw new MWException( __METHOD__ . " rotating DB failed to obtain new load balancer (" . $e->getMessage() . ")" );
+               }
+
+
+               // 2. The Connection, through the load balancer.
+               try {
+                       $this->db = $this->lb->getConnection( DB_SLAVE, 'backup' );
+               } catch ( Exception $e ) {
+                       throw new MWException( __METHOD__ . " rotating DB failed to obtain new database (" . $e->getMessage() . ")" );
+               }
+       }
+
+
        function initProgress( $history ) {
                parent::initProgress();
                $this->timeOfCheckpoint = $this->startTime;
@@ -87,7 +131,19 @@ class TextPassDumper extends BackupDumper {
 
                $this->initProgress( $this->history );
 
-               $this->db = $this->backupDb();
+               // We are trying to get an initial database connection to avoid that the
+               // first try of this request's first call to getText fails. However, if
+               // obtaining a good DB connection fails it's not a serious issue, as
+               // getText does retry upon failure and can start without having a working
+               // DB connection.
+               try {
+                       $this->rotateDb();
+               } catch ( Exception $e ) {
+                       // We do not even count this as failure. Just let eventual
+                       // watchdogs know.
+                       $this->progress( "Getting initial DB connection failed (" .
+                               $e->getMessage() . ")" );
+               }
 
                $this->egress = new ExportProgressFilter( $this->sink, $this );
 
@@ -124,7 +180,7 @@ class TextPassDumper extends BackupDumper {
                        $this->input = $url;
                        break;
                case 'maxtime':
-                       $this->maxTimeAllowed = intval($val)*60;
+                       $this->maxTimeAllowed = intval( $val ) * 60;
                        break;
                case 'checkpointfile':
                        $this->checkpointFiles[] = $val;
@@ -145,7 +201,7 @@ class TextPassDumper extends BackupDumper {
        }
 
        function processFileOpt( $val, $param ) {
-               $fileURIs = explode(';',$param);
+               $fileURIs = explode( ';', $param );
                foreach ( $fileURIs as $URI ) {
                        switch( $val ) {
                                case "file":
@@ -240,19 +296,19 @@ class TextPassDumper extends BackupDumper {
        function finalOptionCheck() {
                if ( ( $this->checkpointFiles && ! $this->maxTimeAllowed ) ||
                        ( $this->maxTimeAllowed && !$this->checkpointFiles ) ) {
-                       throw new MWException("Options checkpointfile and maxtime must be specified together.\n");
+                       throw new MWException( "Options checkpointfile and maxtime must be specified together.\n" );
                }
-               foreach ($this->checkpointFiles as $checkpointFile) {
-                       $count = substr_count ( $checkpointFile,"%s" );
+               foreach ( $this->checkpointFiles as $checkpointFile ) {
+                       $count = substr_count ( $checkpointFile, "%s" );
                        if ( $count != 2 ) {
-                               throw new MWException("Option checkpointfile must contain two '%s' for substitution of first and last pageids, count is $count instead, file is $checkpointFile.\n");
+                               throw new MWException( "Option checkpointfile must contain two '%s' for substitution of first and last pageids, count is $count instead, file is $checkpointFile.\n" );
                        }
                }
 
                if ( $this->checkpointFiles ) {
                        $filenameList = (array)$this->egress->getFilenames();
                        if ( count( $filenameList ) != count( $this->checkpointFiles ) ) {
-                               throw new MWException("One checkpointfile must be specified for each output option, if maxtime is used.\n");
+                               throw new MWException( "One checkpointfile must be specified for each output option, if maxtime is used.\n" );
                        }
                }
        }
@@ -275,7 +331,7 @@ class TextPassDumper extends BackupDumper {
                $offset = 0; // for context extraction on error reporting
                $bufferSize = 512 * 1024;
                do {
-                       if ($this->checkIfTimeExceeded()) {
+                       if ( $this->checkIfTimeExceeded() ) {
                                $this->setTimeExceeded();
                        }
                        $chunk = fread( $input, $bufferSize );
@@ -285,27 +341,27 @@ class TextPassDumper extends BackupDumper {
                        }
                        $offset += strlen( $chunk );
                } while ( $chunk !== false && !feof( $input ) );
-               if ($this->maxTimeAllowed) {
+               if ( $this->maxTimeAllowed ) {
                        $filenameList = (array)$this->egress->getFilenames();
                        // we wrote some stuff after last checkpoint that needs renamed
-                       if (file_exists($filenameList[0])) {
+                       if ( file_exists( $filenameList[0] ) ) {
                                $newFilenames = array();
                                # we might have just written the header and footer and had no
                                # pages or revisions written... perhaps they were all deleted
                                # there's no pageID 0 so we use that. the caller is responsible
                                # for deciding what to do with a file containing only the
                                # siteinfo information and the mw tags.
-                               if (! $this->firstPageWritten) {
-                                       $firstPageID = str_pad(0,9,"0",STR_PAD_LEFT);
-                                       $lastPageID = str_pad(0,9,"0",STR_PAD_LEFT);
+                               if ( ! $this->firstPageWritten ) {
+                                       $firstPageID = str_pad( 0, 9, "0", STR_PAD_LEFT );
+                                       $lastPageID = str_pad( 0, 9, "0", STR_PAD_LEFT );
                                }
                                else {
-                                       $firstPageID = str_pad($this->firstPageWritten,9,"0",STR_PAD_LEFT);
-                                       $lastPageID = str_pad($this->lastPageWritten,9,"0",STR_PAD_LEFT);
+                                       $firstPageID = str_pad( $this->firstPageWritten, 9, "0", STR_PAD_LEFT );
+                                       $lastPageID = str_pad( $this->lastPageWritten, 9, "0", STR_PAD_LEFT );
                                }
                                for ( $i = 0; $i < count( $filenameList ); $i++ ) {
                                        $checkpointNameFilledIn = sprintf( $this->checkpointFiles[$i], $firstPageID, $lastPageID );
-                                       $fileinfo = pathinfo($filenameList[$i]);
+                                       $fileinfo = pathinfo( $filenameList[$i] );
                                        $newFilenames[] = $fileinfo['dirname'] . '/' . $checkpointNameFilledIn;
                                }
                                $this->egress->closeAndRename( $newFilenames );
@@ -316,98 +372,142 @@ class TextPassDumper extends BackupDumper {
                return true;
        }
 
+       /**
+        * Tries to get the revision text for a revision id.
+        *
+        * Upon errors, retries (Up to $this->maxFailures tries each call).
+        * If still no good revision get could be found even after this retrying, "" is returned.
+        * If no good revision text could be returned for
+        * $this->maxConsecutiveFailedTextRetrievals consecutive calls to getText, MWException
+        * is thrown.
+        *
+        * @param $id string The revision id to get the text for
+        *
+        * @return string The revision text for $id, or ""
+        * @throws MWException
+        */
        function getText( $id ) {
+               $prefetchNotTried = true; // Whether or not we already tried to get the text via prefetch.
+               $text = false; // The candidate for a good text. false if no proper value.
+               $failures = 0; // The number of times, this invocation of getText already failed.
+
+               static $consecutiveFailedTextRetrievals = 0; // The number of times getText failed without
+                                                            // yielding a good text in between.
+
                $this->fetchCount++;
-               if ( isset( $this->prefetch ) ) {
-                       $text = $this->prefetch->prefetch( $this->thisPage, $this->thisRev );
-                       if ( $text !== null ) { // Entry missing from prefetch dump
-                               $dbr = wfGetDB( DB_SLAVE );
+
+               // To allow to simply return on success and do not have to worry about book keeping,
+               // we assume, this fetch works (possible after some retries). Nevertheless, we koop
+               // the old value, so we can restore it, if problems occur (See after the while loop).
+               $oldConsecutiveFailedTextRetrievals = $consecutiveFailedTextRetrievals;
+               $consecutiveFailedTextRetrievals = 0;
+
+               while ( $failures < $this->maxFailures ) {
+
+                       // As soon as we found a good text for the $id, we will return immediately.
+                       // Hence, if we make it past the try catch block, we know that we did not
+                       // find a good text.
+
+                       try {
+                               // Step 1: Get some text (or reuse from previous iteratuon if checking
+                               //         for plausibility failed)
+
+                               // Trying to get prefetch, if it has not been tried before
+                               if ( $text === false && isset( $this->prefetch ) && $prefetchNotTried ) {
+                                       $prefetchNotTried = false;
+                                       $tryIsPrefetch = true;
+                                       $text = $this->prefetch->prefetch( $this->thisPage, $this->thisRev );
+                                       if ( $text === null ) {
+                                               $text = false;
+                                       }
+                               }
+
+                               if ( $text === false ) {
+                                       // Fallback to asking the database
+                                       $tryIsPrefetch = false;
+                                       if ( $this->spawn ) {
+                                               $text = $this->getTextSpawned( $id );
+                                       } else {
+                                               $text = $this->getTextDb( $id );
+                                       }
+                               }
+
+                               if ( $text === false ) {
+                                       throw new MWException( "Generic error while obtaining text for id " . $id );
+                               }
+
+                               // We received a good candidate for the text of $id via some method
+
+                               // Step 2: Checking for plausibility and return the text if it is
+                               //         plausible
                                $revID = intval( $this->thisRev );
-                               $revLength = $dbr->selectField( 'revision', 'rev_len', array( 'rev_id' => $revID ) );
-                               // if length of rev text in file doesn't match length in db, we reload
-                               // this avoids carrying forward broken data from previous xml dumps
-                               if( strlen( $text ) == $revLength ) {
-                                       $this->prefetchCount++;
+                               if ( ! isset( $this->db ) ) {
+                                       throw new MWException( "No database available" );
+                               }
+                               $revLength = $this->db->selectField( 'revision', 'rev_len', array( 'rev_id' => $revID ) );
+                               if ( strlen( $text ) == $revLength ) {
+                                       if ( $tryIsPrefetch ) {
+                                               $this->prefetchCount++;
+                                       }
                                        return $text;
                                }
+
+                               $text = false;
+                               throw new MWException( "Received text is unplausible for id " . $id );
+
+                       } catch ( Exception $e ) {
+                               $msg = "getting/checking text " . $id . " failed (" . $e->getMessage() . ")";
+                               if ( $failures + 1 < $this->maxFailures ) {
+                                       $msg .= " (Will retry " . ( $this->maxFailures - $failures - 1 ) . " more times)";
+                               }
+                               $this->progress( $msg );
                        }
-               }
-               return $this->doGetText( $id );
-       }
 
-       private function doGetText( $id ) {
-               $id = intval( $id );
-               $this->failures = 0;
-               $ex = new MWException( "Graceful storage failure" );
-               while (true) {
-                       if ( $this->spawn ) {
-                               if ($this->failures) {
-                                       // we don't know why it failed, could be the child process
-                                       // borked, could be db entry busted, could be db server out to lunch,
-                                       // so cover all bases
+                       // Something went wrong; we did not a text that was plausible :(
+                       $failures++;
+
+
+                       // After backing off for some time, we try to reboot the whole process as
+                       // much as possible to not carry over failures from one part to the other
+                       // parts
+                       sleep( $this->failureTimeout );
+                       try {
+                               $this->rotateDb();
+                               if ( $this->spawn ) {
                                        $this->closeSpawn();
                                        $this->openSpawn();
                                }
-                               $text = $this->getTextSpawned( $id );
-                       } else {
-                               $text = $this->getTextDbSafe( $id );
-                       }
-                       if ( $text === false ) {
-                               $this->failures++;
-                               if ( $this->failures > $this->maxFailures) {
-                                       $this->progress( "Failed to retrieve revision text for text id ".
-                                                                        "$id after $this->maxFailures tries, giving up" );
-                                       // were there so many bad retrievals in a row we want to bail?
-                                       // at some point we have to declare the dump irretrievably broken
-                                       $this->failedTextRetrievals++;
-                                       if ($this->failedTextRetrievals > $this->maxConsecutiveFailedTextRetrievals) {
-                                               throw $ex;
-                                       } else {
-                                               // would be nice to return something better to the caller someday,
-                                               // log what we know about the failure and about the revision
-                                               return "";
-                                       }
-                               } else {
-                                       $this->progress( "Error $this->failures " .
-                                                                "of allowed $this->maxFailures retrieving revision text for text id $id! " .
-                                                                "Pausing $this->failureTimeout seconds before retry..." );
-                                       sleep( $this->failureTimeout );
-                               }
-                       } else {
-                               $this->failedTextRetrievals= 0;
-                               return $text;
+                       } catch ( Exception $e ) {
+                               $this->progress( "Rebooting getText infrastructure failed (" . $e->getMessage() . ")" .
+                                       " Trying to continue anyways" );
                        }
                }
-               return '';
-       }
 
-       /**
-        * Fetch a text revision from the database, retrying in case of failure.
-        * This may survive some transitory errors by reconnecting, but
-        * may not survive a long-term server outage.
-        *
-        * FIXME: WTF? Why is it using a loop and then returning unconditionally?
-        * @param $id int
-        * @return bool|string
-        */
-       private function getTextDbSafe( $id ) {
-               while ( true ) {
-                       try {
-                               $text = $this->getTextDb( $id );
-                       } catch ( DBQueryError $ex ) {
-                               $text = false;
-                       }
-                       return $text;
+               // Retirieving a good text for $id failed (at least) maxFailures times.
+               // We abort for this $id.
+
+               // Restoring the consecutive failures, and maybe aborting, if the dump
+               // is too broken.
+               $consecutiveFailedTextRetrievals = $oldConsecutiveFailedTextRetrievals + 1;
+               if ( $consecutiveFailedTextRetrievals > $this->maxConsecutiveFailedTextRetrievals ) {
+                       throw new MWException( "Graceful storage failure" );
                }
+
+               return "";
        }
 
+
        /**
         * May throw a database error if, say, the server dies during query.
         * @param $id
         * @return bool|string
+        * @throws MWException
         */
        private function getTextDb( $id ) {
                global $wgContLang;
+               if ( ! isset( $this->db ) ) {
+                       throw new MWException( __METHOD__ . "No database available" );
+               }
                $row = $this->db->selectRow( 'text',
                        array( 'old_text', 'old_flags' ),
                        array( 'old_id' => $id ),
@@ -517,7 +617,7 @@ class TextPassDumper extends BackupDumper {
 
                $nbytes = intval( $len );
                // actual error, not zero-length text
-               if ($nbytes < 0 ) return false;
+               if ( $nbytes < 0 ) return false;
 
                $text = "";
 
@@ -584,15 +684,15 @@ class TextPassDumper extends BackupDumper {
                        $this->buffer = "";
                        $this->thisRev = "";
                } elseif ( $name == 'page' ) {
-                       if (! $this->firstPageWritten) {
-                               $this->firstPageWritten = trim($this->thisPage);
+                       if ( ! $this->firstPageWritten ) {
+                               $this->firstPageWritten = trim( $this->thisPage );
                        }
-                       $this->lastPageWritten = trim($this->thisPage);
-                       if ($this->timeExceeded) {
+                       $this->lastPageWritten = trim( $this->thisPage );
+                       if ( $this->timeExceeded ) {
                                $this->egress->writeClosePage( $this->buffer );
                                // nasty hack, we can't just write the chardata after the
                                // page tag, it will include leading blanks from the next line
-                               $this->egress->sink->write("\n");
+                               $this->egress->sink->write( "\n" );
 
                                $this->buffer = $this->xmlwriterobj->closeStream();
                                $this->egress->writeCloseStream( $this->buffer );
@@ -603,11 +703,11 @@ class TextPassDumper extends BackupDumper {
 
                                $filenameList = (array)$this->egress->getFilenames();
                                $newFilenames = array();
-                               $firstPageID = str_pad($this->firstPageWritten,9,"0",STR_PAD_LEFT);
-                               $lastPageID = str_pad($this->lastPageWritten,9,"0",STR_PAD_LEFT);
+                               $firstPageID = str_pad( $this->firstPageWritten, 9, "0", STR_PAD_LEFT );
+                               $lastPageID = str_pad( $this->lastPageWritten, 9, "0", STR_PAD_LEFT );
                                for ( $i = 0; $i < count( $filenameList ); $i++ ) {
                                        $checkpointNameFilledIn = sprintf( $this->checkpointFiles[$i], $firstPageID, $lastPageID );
-                                       $fileinfo = pathinfo($filenameList[$i]);
+                                       $fileinfo = pathinfo( $filenameList[$i] );
                                        $newFilenames[] = $fileinfo['dirname'] . '/' . $checkpointNameFilledIn;
                                }
                                $this->egress->closeRenameAndReopen( $newFilenames );
@@ -640,9 +740,9 @@ class TextPassDumper extends BackupDumper {
                }
                // have to skip the newline left over from closepagetag line of
                // end of checkpoint files. nasty hack!!
-               if ($this->checkpointJustWritten) {
-                       if ($data[0] == "\n") {
-                               $data = substr($data,1);
+               if ( $this->checkpointJustWritten ) {
+                       if ( $data[0] == "\n" ) {
+                               $data = substr( $data, 1 );
                        }
                        $this->checkpointJustWritten = false;
                }
index d6abd1a..e7f67f5 100644 (file)
@@ -41,7 +41,7 @@ mediazilla|https://bugzilla.wikimedia.org/$1|1
 mediawikiwiki|http://www.mediawiki.org/wiki/$1|0
 memoryalpha|http://www.memory-alpha.org/en/index.php/$1|0
 metawiki|http://sunir.org/apps/meta.pl?$1|0
-metawikipedia|http://meta.wikimedia.org/wiki/$1|0
+metawikimedia|http://meta.wikimedia.org/wiki/$1|0
 moinmoin|http://purl.net/wiki/moin/$1|0
 mozillawiki|http://wiki.mozilla.org/index.php/$1|0
 mw|http://www.mediawiki.org/wiki/$1|0
index 6efc1e0..76103ab 100644 (file)
@@ -43,7 +43,7 @@ REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local) VALUES
 ('mediawikiwiki','http://www.mediawiki.org/wiki/$1',0),
 ('memoryalpha','http://www.memory-alpha.org/en/index.php/$1',0),
 ('metawiki','http://sunir.org/apps/meta.pl?$1',0),
-('metawikipedia','http://meta.wikimedia.org/wiki/$1',0),
+('metawikimedia','http://meta.wikimedia.org/wiki/$1',0),
 ('moinmoin','http://purl.net/wiki/moin/$1',0),
 ('mozillawiki','http://wiki.mozilla.org/index.php/$1',0),
 ('mw','http://www.mediawiki.org/wiki/$1',0),
index b33e2c4..c61ae39 100644 (file)
@@ -136,6 +136,7 @@ $wgIgnoredMessages = array(
        'sitetitle',
        'sp-contributions-footer',
        'sp-contributions-footer-anon',
+       'sp-contributions-footer-newbies',
        'statistics-summary',
        'statistics-footer',
        'talkpagetext',
@@ -218,6 +219,24 @@ $wgIgnoredMessages = array(
        'deletedarticle',
        // 'uploadedimage',
        // 'overwroteimage',
+       'userlogout-summary',
+       'changeemail-summary',
+       'changepassword-summary',
+       'unusedcategories-summary',
+       'unusedimages-summary',
+       'deletedcontributions-summary',
+       'linksearch-summary',
+       'emailuser-summary',
+       'undelete-summary',
+       'contributions-summary',
+       'unblock-summary',
+       'movepage-summary',
+       'export-summary',
+       'import-summary',
+       'editwatchlist-summary',
+       'version-summary',
+       'tags-summary',
+       'comparepages-summary',
 );
 
 /** Optional messages, which may be translated only if changed in the target language. */
index f60208f..29c5c05 100644 (file)
@@ -408,6 +408,7 @@ $wgMessageStructure = array(
                'customjsprotected',
                'ns-specialprotected',
                'titleprotected',
+               'filereadonlyerror'
        ),
        'virus' => array(
                'virus-badscanner',
@@ -431,6 +432,7 @@ $wgMessageStructure = array(
                'userloginnocreate',
                'logout',
                'userlogout',
+               'userlogout-summary',
                'notloggedin',
                'nologin',
                'nologinlink',
@@ -538,6 +540,7 @@ $wgMessageStructure = array(
        ),
        'changeemail' => array(
                'changeemail',
+               'changeemail-summary',
                'changeemail-header',
                'changeemail-text',
                'changeemail-no-info',
@@ -925,6 +928,7 @@ $wgMessageStructure = array(
                'prefsnologin',
                'prefsnologintext',
                'changepassword',
+               'changepassword-summary',
                'prefs-skin',
                'skin-preview',
                'datedefault',
@@ -1374,6 +1378,11 @@ $wgMessageStructure = array(
                'backend-fail-batchsize'
        ),
 
+       'filejournal-errors' => array(
+               'filejournal-fail-dbconnect',
+               'filejournal-fail-dbquery'
+       ),
+
        'lockmanager-errors' => array(
                'lockmanager-notlocked',
                'lockmanager-fail-closelock',
@@ -1485,6 +1494,8 @@ $wgMessageStructure = array(
                'sharedupload',
                'sharedupload-desc-there',
                'sharedupload-desc-here',
+               'sharedupload-desc-edit',
+               'sharedupload-desc-create',
                'shareddescriptionfollows',
                'filepage-nofile',
                'filepage-nofile-link',
@@ -1628,7 +1639,9 @@ $wgMessageStructure = array(
                'uncategorizedtemplates',
                'uncategorizedtemplates-summary',
                'unusedcategories',
+               'unusedcategories-summary',
                'unusedimages',
+               'unusedimages-summary',
                'popularpages',
                'popularpages-summary',
                'wantedcategories',
@@ -1737,6 +1750,7 @@ $wgMessageStructure = array(
                'allpagesprefix',
                'allpagesbadtitle',
                'allpages-bad-ns',
+               'allpages-hide-redirects',
        ),
        'categories' => array(
                'categories',
@@ -1748,11 +1762,13 @@ $wgMessageStructure = array(
        ),
        'deletedcontribs' => array(
                'deletedcontributions',
+               'deletedcontributions-summary',
                'deletedcontributions-title',
                'sp-deletedcontributions-contribs',
        ),
        'linksearch' => array(
                'linksearch',
+               'linksearch-summary',
                'linksearch-pat',
                'linksearch-ns',
                'linksearch-ok',
@@ -1805,6 +1821,7 @@ $wgMessageStructure = array(
                'mailnologin',
                'mailnologintext',
                'emailuser',
+               'emailuser-summary',
                'emailpage',
                'emailpagetext',
                'usermailererror',
@@ -1987,6 +2004,7 @@ $wgMessageStructure = array(
        ),
        'undelete' => array(
                'undelete',
+               'undelete-summary',
                'undeletepage',
                'undeletepagetitle',
                'viewdeletedpage',
@@ -2037,6 +2055,7 @@ $wgMessageStructure = array(
        ),
        'contributions' => array(
                'contributions',
+               'contributions-summary',
                'contributions-title',
                'mycontris',
                'contribsub2',
@@ -2064,6 +2083,7 @@ $wgMessageStructure = array(
                'sp-contributions-explain',
                'sp-contributions-footer',
                'sp-contributions-footer-anon',
+               'sp-contributions-footer-newbies',
        ),
        'whatlinkshere' => array(
                'whatlinkshere',
@@ -2089,6 +2109,7 @@ $wgMessageStructure = array(
                'autoblockid',
                'block',
                'unblock',
+               'unblock-summary',
                'blockip',
                'blockip-title',
                'blockip-legend',
@@ -2220,6 +2241,7 @@ $wgMessageStructure = array(
        ),
        'movepage' => array(
                'move-page',
+               'movepage-summary',
                'move-page-legend',
                'movepagetext',
                'movepagetext-noredirectfixer',
@@ -2281,6 +2303,7 @@ $wgMessageStructure = array(
        ),
        'export' => array(
                'export',
+               'export-summary',
                'exporttext',
                'exportall',
                'exportcuronly',
@@ -2327,6 +2350,7 @@ $wgMessageStructure = array(
        ),
        'import' => array(
                'import',
+               'import-summary',
                'importinterwiki',
                'import-interwiki-text',
                'import-interwiki-source',
@@ -3340,6 +3364,7 @@ $wgMessageStructure = array(
                'confirm-watch-button',
        ),
        'watchlisteditor' => array(
+               'editwatchlist-summary',
                'watchlistedit-numitems',
                'watchlistedit-noitems',
                'watchlistedit-normal-title',
@@ -3430,6 +3455,7 @@ $wgMessageStructure = array(
        ),
        'version' => array(
                'version',
+               'version-summary',
                'version-extensions',
                'version-specialpages',
                'version-parserhooks',
@@ -3498,6 +3524,7 @@ $wgMessageStructure = array(
        ),
        'special-tags' => array(
                'tags',
+               'tags-summary',
                'tag-filter',
                'tag-filter-submit',
                'tags-title',
@@ -3511,6 +3538,7 @@ $wgMessageStructure = array(
        ),
        'comparepages' => array(
                'comparepages',
+               'comparepages-summary',
                'compare-selector',
                'compare-page1',
                'compare-page2',
index a0c8587..a353504 100644 (file)
@@ -116,31 +116,7 @@ function getSvnRevision( $dir ) {
 
        $content = file( $entries );
 
-       // check if file is xml (subversion release <= 1.3) or not (subversion release = 1.4)
-       if ( preg_match( '/^<\?xml/', $content[0] ) ) {
-               // subversion is release <= 1.3
-               if ( !function_exists( 'simplexml_load_file' ) ) {
-                       // We could fall back to expat... YUCK
-                       return false;
-               }
-
-               $xml = simplexml_load_file( $entries );
-
-               if ( $xml ) {
-                       foreach ( $xml->entry as $entry ) {
-                               if ( $xml->entry[0]['name'] == '' ) {
-                                       // The directory entry should always have a revision marker.
-                                       if ( $entry['revision'] ) {
-                                               return intval( $entry['revision'] );
-                                       }
-                               }
-                       }
-               }
-               return false;
-       } else {
-               // subversion is release 1.4
-               return intval( $content[3] );
-       }
+       return intval( $content[3] );
 }
 
 /**
@@ -273,6 +249,7 @@ case 5:
                $file = readaline( "Enter file name $mwPath" );
        }
        $input = $mwPath . $file;
+       break;
 case 6:
        $input = $mwPath;
        $exclude_patterns = 'extensions';
index 0a5fec3..74bd657 100644 (file)
@@ -257,7 +257,7 @@ class NamespaceConflictChecker extends Maintenance {
                        $newTitle->getDBkey(),
                        $newTitle->getPrefixedText() ) );
 
-               $id = $newTitle->getArticleId();
+               $id = $newTitle->getArticleID();
                if ( $id ) {
                        $this->output( "...  *** cannot resolve automatically; page exists with ID $id ***\n" );
                        return false;
@@ -285,7 +285,7 @@ class NamespaceConflictChecker extends Maintenance {
                                        $this->output( "... !!! invalid title\n" );
                                        return false;
                                }
-                               $id = $title->getArticleId();
+                               $id = $title->getArticleID();
                                if ( $id ) {
                                        $this->output( "...  *** page exists with ID $id ***\n" );
                                } else {
index d755d58..5064fe7 100644 (file)
@@ -17,8 +17,9 @@
  *  -c <chunk-size>     maximum number of revisions in a concat chunk
  *  -b <begin-date>     earliest date to check for uncompressed revisions
  *  -e <end-date>       latest revision date to compress
- *  -s <startid>        the old_id to start from
- *  -n <endid>          the old_id to stop at
+ *  -s <startid>        the id to start from (referring to the text table for
+ *                      type gzip, and to the page table for type concat)
+ *  -n <endid>          the page_id to stop at (only when using concat compression type)
  *  --extdb <cluster>   store specified revisions in an external cluster (untested)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -56,9 +57,9 @@ class CompressOld extends Maintenance {
                $this->addOption( 'chunksize', 'Maximum number of revisions in a concat chunk', false, true, 'c' );
                $this->addOption( 'begin-date', 'Earliest date to check for uncompressed revisions', false, true, 'b' );
                $this->addOption( 'end-date', 'Latest revision date to compress', false, true, 'e' );
-               $this->addOption( 'startid', 'The old_id to start from', false, true, 's' );
+               $this->addOption( 'startid', 'The id to start from (gzip -> text table, concat -> page table)', false, true, 's' );
                $this->addOption( 'extdb', 'Store specified revisions in an external cluster (untested)', false, true );
-               $this->addOption( 'endid', 'Stop at this old_id', false, true, 'n' );
+               $this->addOption( 'endid', 'The page_id to stop at (only when using concat compression type)', false, true, 'n' );
        }
 
        public function execute() {
index 60fc7fc..66a1845 100644 (file)
@@ -326,7 +326,7 @@ CREATE INDEX /*i*/rev_timestamp ON /*_*/revision (rev_timestamp);
 CREATE INDEX /*i*/page_timestamp ON /*_*/revision (rev_page,rev_timestamp);
 CREATE INDEX /*i*/user_timestamp ON /*_*/revision (rev_user,rev_timestamp);
 CREATE INDEX /*i*/usertext_timestamp ON /*_*/revision (rev_user_text,rev_timestamp);
-CREATE INDEX /*i*/page_user_timestamp ON /*_*/revision  (rev_page,rev_user,rev_timestamp);
+CREATE INDEX /*i*/page_user_timestamp ON /*_*/revision (rev_page,rev_user,rev_timestamp);
 
 --
 -- Holds text of individual page revisions.
@@ -946,44 +946,44 @@ CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timesta
 -- moved into the actual filestore
 --
 CREATE TABLE /*_*/uploadstash (
-       us_id int unsigned NOT NULL PRIMARY KEY auto_increment,
+  us_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
 
-       -- the user who uploaded the file.
-       us_user int unsigned NOT NULL,
+  -- the user who uploaded the file.
+  us_user int unsigned NOT NULL,
 
-       -- file key. this is how applications actually search for the file.
-       -- this might go away, or become the primary key.
-       us_key varchar(255) NOT NULL,
+  -- file key. this is how applications actually search for the file.
+  -- this might go away, or become the primary key.
+  us_key varchar(255) NOT NULL,
 
-       -- the original path
-       us_orig_path varchar(255) NOT NULL,
+  -- the original path
+  us_orig_path varchar(255) NOT NULL,
 
-       -- the temporary path at which the file is actually stored
-       us_path varchar(255) NOT NULL,
+  -- the temporary path at which the file is actually stored
+  us_path varchar(255) NOT NULL,
 
-       -- which type of upload the file came from (sometimes)
-       us_source_type varchar(50),
+  -- which type of upload the file came from (sometimes)
+  us_source_type varchar(50),
 
-       -- the date/time on which the file was added
-       us_timestamp varbinary(14) not null,
+  -- the date/time on which the file was added
+  us_timestamp varbinary(14) NOT NULL,
 
-       us_status varchar(50) not null,
+  us_status varchar(50) NOT NULL,
 
-       -- chunk counter starts at 0, current offset is stored in us_size
-       us_chunk_inx int unsigned NULL,
+  -- chunk counter starts at 0, current offset is stored in us_size
+  us_chunk_inx int unsigned NULL,
 
-       -- file properties from File::getPropsFromPath.  these may prove unnecessary.
-       --
-       us_size int unsigned NOT NULL,
-       -- this hash comes from File::sha1Base36(), and is 31 characters
-       us_sha1 varchar(31) NOT NULL,
-       us_mime varchar(255),
-       -- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
-       us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
-       -- image-specific properties
-       us_image_width int unsigned,
-       us_image_height int unsigned,
-       us_image_bits smallint unsigned
+  -- file properties from File::getPropsFromPath.  these may prove unnecessary.
+  --
+  us_size int unsigned NOT NULL,
+  -- this hash comes from File::sha1Base36(), and is 31 characters
+  us_sha1 varchar(31) NOT NULL,
+  us_mime varchar(255),
+  -- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
+  us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  -- image-specific properties
+  us_image_width int unsigned,
+  us_image_height int unsigned,
+  us_image_bits smallint unsigned
 
 ) /*$wgDBTableOptions*/;
 
@@ -1237,7 +1237,7 @@ CREATE INDEX /*i*/page_time ON /*_*/logging (log_namespace, log_title, log_times
 CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp);
 CREATE INDEX /*i*/log_user_type_time ON /*_*/logging (log_user, log_type, log_timestamp);
 CREATE INDEX /*i*/log_page_id_time ON /*_*/logging (log_page,log_timestamp);
-CREATE INDEX /*i*/type_action ON /*_*/logging(log_type, log_action, log_timestamp);
+CREATE INDEX /*i*/type_action ON /*_*/logging (log_type, log_action, log_timestamp);
 
 
 CREATE TABLE /*_*/log_search (
@@ -1275,7 +1275,7 @@ CREATE TABLE /*_*/job (
 ) /*$wgDBTableOptions*/;
 
 CREATE INDEX /*i*/job_cmd ON /*_*/job (job_cmd, job_namespace, job_title, job_params(128));
-CREATE INDEX /*i*/job_timestamp ON /*_*/job(job_timestamp);
+CREATE INDEX /*i*/job_timestamp ON /*_*/job (job_timestamp);
 
 
 -- Details of updates to cached special pages
index c65be69..edfae92 100644 (file)
@@ -10,7 +10,7 @@ define( 'MEDIAWIKI_INSTALL', true );
 
 chdir( dirname( dirname( __FILE__ ) ) );
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
-       require ( 'phase3/includes/WebStart.php' );
+       require ( 'core/includes/WebStart.php' );
 } else {
        require( dirname( dirname( __FILE__ ) ) . '/includes/WebStart.php' );
 }
index 1549349..ef038c1 100644 (file)
@@ -29,7 +29,7 @@ ini_set( 'zlib.output_compression', 'off' );
 
 $wgEnableProfileInfo = $wgProfileToDatabase = false;
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
-       require ( 'phase3/includes/WebStart.php' );
+       require ( 'core/includes/WebStart.php' );
 } else {
        require ( dirname( __FILE__ ) . '/includes/WebStart.php' );
 }
@@ -56,16 +56,20 @@ header( 'Content-Type: text/html; charset=utf-8' );
                text-align: right;
        }
        td.timep, td.tpc, td.tpr {
-               background-color: #fffff0;
+               background-color: #ffff80;
        }
        td.memoryp, td.mpc, td.mpr {
-               background-color: #f0f8ff;
+               background-color: #80f8ff;
        }
        td.count, td,cpr {
-               background-color: #f0fff0;
+               background-color: #80ff80;
        }
        td.name {
-               background-color: #f9f9f9;
+               background-color: #89f9f9;
+       }
+
+       tr:hover {
+               font-weight: bold;
        }
 </style>
 </head>
index 1041192..3c0d7e5 100644 (file)
@@ -1,9 +1,10 @@
 /**
- * jQuery byteLimit
+ * jQuery byteLimit plugin
  *
- * @author Jan Paul Posma
+ * @author Jan Paul Posma, 2011
+ * @author Timo Tijhof, 2011-2012
  */
-( function( $ ) {
+( function ( $, undefined ) {
 
        /**
         * Enforces a byte limit to a textbox, so that UTF-8 entries are counted as well, when, for example,
         * or both. Order of arguments is important!
         *
         * @context {jQuery} Instance of jQuery for one or more input elements
-        * @param limit {Number} (optional) Limit to enforce, fallsback to maxLength-attribute,
+        * @param limit {Number} [optional] Limit to enforce, fallsback to maxLength-attribute,
         * called with fetched value as argument.
-        * @param fn {Function} (optional) Function to call on the input string before assessing the length
+        * @param fn {Function} [optional] Function to call on the input string before assessing the length
         * @return {jQuery} The context
         */
-       $.fn.byteLimit = function( limit, fn ) {
+       $.fn.byteLimit = function ( limit, fn ) {
                // If the first argument is the function,
                // set fn to the first argument's value and ignore the second argument.
                if ( $.isFunction( limit ) ) {
                        limit = undefined;
                }
 
-               // Default limit to current attribute value
-               if ( limit === undefined ) {
-                       limit = this.prop( 'maxLength' );
-               }
-
-               // Update/set attribute value, but only if there is no callback set.
-               // If there's a callback set, it's possible that the limit being enforced
-               // is too low (ie. if the callback would return "Foo" for "User:Foo").
-               // Usually this isn't a problem since browsers ignore maxLength when setting
-               // the value property through JavaScript, but Safari 4 violates that rule, so
-               // we have to remove or not set the property if we have a callback.
-               if ( fn == undefined ) {
-                       this.prop( 'maxLength', limit );
-               } else {
-                       this.removeProp( 'maxLength' );
-               }
-
-               // Nothing passed and/or empty attribute, return without binding an event.
-               if ( limit === undefined ) {
-                       return this;
-               }
-
-               // Save function for reference
-               this.data( 'byteLimit-callback', fn );
+               // The following is specific to each element in the collection
+               return this.each( function ( i, el ) {
+                       var $el, elLimit;
 
-               // We've got something, go for it:
-               return this.keypress( function( e ) {
-                       // First check to see if this is actually a character key
-                       // being pressed.
-                       // Based on key-event info from http://unixpapa.com/js/key.html
-                       // jQuery should also normalize e.which to be consistent cross-browser,
-                       // however the same check is still needed regardless of jQuery.
+                       $el = $( el );
 
-                       // Note: At the moment, for some older opera versions (~< 10.5)
-                       // some special keys won't be recognized (aka left arrow key).
-                       // Backspace will be, so not big issue.
-
-                       if ( e.which === 0 || e.charCode === 0 || e.which === 8 ||
-                               e.ctrlKey || e.altKey || e.metaKey )
-                       {
-                               return true; //a special key (backspace, etc) so don't interfere.
+                       // Default limit to current attribute value
+                       // Can't re-use 'limit' variable because it's in the higher scope
+                       // that affects the next each() iteration as well.
+                       elLimit = limit === undefined ? $el.prop( 'maxLength' ) : limit;
+       
+                       // Update/set attribute value, but only if there is no callback set.
+                       // If there's a callback set, it's possible that the limit being enforced
+                       // is too low (ie. if the callback would return "Foo" for "User:Foo").
+                       // Usually this isn't a problem since browsers ignore maxLength when setting
+                       // the value property through JavaScript, but Safari 4 violates that rule, so
+                       // we have to remove or not set the property if we have a callback.
+                       if ( fn === undefined ) {
+                               $el.prop( 'maxLength', elLimit );
+                       } else {
+                               $el.removeProp( 'maxLength' );
                        }
-
-                       var     val = fn !== undefined ? fn( $( this ).val() ): $( this ).val(),
-                               len = $.byteLength( val ),
+       
+                       // Nothing passed and/or empty attribute, return without binding an event.
+                       if ( elLimit === undefined ) {
+                               return;
+                       }
+       
+                       // Save function for reference
+                       $el.data( 'byteLimit-callback', fn );
+       
+                       // We've got something, go for it:
+                       $el.keypress( function ( e ) {
+                               var val, len, charLen;
+                               // First check to see if this is actually a character key
+                               // being pressed.
+                               // Based on key-event info from http://unixpapa.com/js/key.html
+                               // jQuery should also normalize e.which to be consistent cross-browser,
+                               // however the same check is still needed regardless of jQuery.
+       
+                               // Note: At the moment, for some older opera versions (~< 10.5)
+                               // some special keys won't be recognized (aka left arrow key).
+                               // Backspace will be, so not big issue.
+       
+                               if ( e.which === 0 || e.charCode === 0 || e.which === 8 ||
+                                       e.ctrlKey || e.altKey || e.metaKey )
+                               {
+                                       // A special key (backspace, etc) so don't interfere
+                                       return true;
+                               }
+       
+                               val = fn !== undefined ? fn( $( this ).val() ): $( this ).val();
+                               len = $.byteLength( val );
                                // Note that keypress returns a character code point, not a keycode.
                                // However, this may not be super reliable depending on how keys come in...
                                charLen = $.byteLength( String.fromCharCode( e.which ) );
-
-                       if ( ( len + charLen ) > limit ) {
-                               e.preventDefault();
-                       }
+       
+                               if ( ( len + charLen ) > elLimit ) {
+                                       e.preventDefault();
+                               }
+                       });
                });
        };
-
-} )( jQuery );
+}( jQuery ) );
index 493d4b0..2c6e257 100644 (file)
@@ -1,7 +1,7 @@
 /**
  * User-agent detection
  */
-( function( $ ) {
+( function ( $ ) {
 
        /* Private Members */
 
@@ -18,7 +18,7 @@
                /**
                 * Get an object containing information about the client.
                 *
-                * @param nav {Object} An object with atleast a 'userAgent' and 'platform' key.=
+                * @param nav {Object} An object with atleast a 'userAgent' and 'platform' key.
                 * Defaults to the global Navigator object.
                 * @return {Object} The resulting client object will be in the following format:
                 *  {
@@ -31,7 +31,7 @@
                 *   'versionNumber': 3.5,
                 *  }
                 */
-               profile: function( nav ) {
+               profile: function ( nav ) {
                        if ( nav === undefined ) {
                                nav = window.navigator;
                        }
                                // Strings which precede a version number in a user agent string - combined and used as match 1 in
                                // version detectection
                                var versionPrefixes = [
-                                       'camino', 'chrome', 'firefox', 'netscape', 'netscape6', 'opera', 'version', 'konqueror', 'lynx',
-                                       'msie', 'safari', 'ps3'
+                                       'camino', 'chrome', 'firefox', 'netscape', 'netscape6', 'opera', 'version', 'konqueror',
+                                       'lynx', 'msie', 'safari', 'ps3'
                                ];
                                // Used as matches 2, 3 and 4 in version extraction - 3 is used as actual version number
                                var versionSuffix = '(\\/|\\;?\\s|)([a-z0-9\\.\\+]*?)(\\;|dev|rel|\\)|\\s|$)';
                                // Names of known browsers
                                var names = [
-                                       'camino', 'chrome', 'firefox', 'netscape', 'konqueror', 'lynx', 'msie', 'opera', 'safari', 'ipod',
-                                       'iphone', 'blackberry', 'ps3', 'rekonq'
+                                       'camino', 'chrome', 'firefox', 'netscape', 'konqueror', 'lynx', 'msie', 'opera',
+                                       'safari', 'ipod', 'iphone', 'blackberry', 'ps3', 'rekonq'
                                ];
                                // Tanslations for conforming browser names
                                var nameTranslations = [];
 
                                /* Methods */
 
-                               // Performs multiple replacements on a string
-                               var translate = function( source, translations ) {
-                                       for ( var i = 0; i < translations.length; i++ ) {
+                               /**
+                                * Performs multiple replacements on a string
+                                */
+                               var translate = function ( source, translations ) {
+                                       var i;
+                                       for ( i = 0; i < translations.length; i++ ) {
                                                source = source.replace( translations[i][0], translations[i][1] );
                                        }
                                        return source;
                                /* Caching */
 
                                profileCache[nav.userAgent] = {
-                                       'name': name,
-                                       'layout': layout,
-                                       'layoutVersion': layoutversion,
-                                       'platform': platform,
-                                       'version': version,
-                                       'versionBase': ( version !== x ? Math.floor( versionNumber ).toString() : x ),
-                                       'versionNumber': versionNumber
+                                       name: name,
+                                       layout: layout,
+                                       layoutVersion: layoutversion,
+                                       platform: platform,
+                                       version: version,
+                                       versionBase: ( version !== x ? Math.floor( versionNumber ).toString() : x ),
+                                       versionNumber: versionNumber
                                };
                        }
                        return profileCache[nav.userAgent];
                 *
                 * @return Boolean true if browser known or assumed to be supported, false if blacklisted
                 */
-               test: function( map, profile ) {
+               test: function ( map, profile ) {
+                       var conditions, dir, i, op, val;
                        profile = $.isPlainObject( profile ) ? profile : $.client.profile();
 
-                       var dir = $( 'body' ).is( '.rtl' ) ? 'rtl' : 'ltr';
+                       dir = $( 'body' ).is( '.rtl' ) ? 'rtl' : 'ltr';
                        // Check over each browser condition to determine if we are running in a compatible client
-                       if ( typeof map[dir] !== 'object' || typeof map[dir][profile.name] === 'undefined' ) {
+                       if ( typeof map[dir] !== 'object' || map[dir][profile.name] === undefined ) {
                                // Unknown, so we assume it's working
                                return true;
                        }
-                       var conditions = map[dir][profile.name];
-                       for ( var i = 0; i < conditions.length; i++ ) {
-                               var op = conditions[i][0];
-                               var val = conditions[i][1];
+                       conditions = map[dir][profile.name];
+                       for ( i = 0; i < conditions.length; i++ ) {
+                               op = conditions[i][0];
+                               val = conditions[i][1];
                                if ( val === false ) {
                                        return false;
-                               } else if ( typeof val == 'string' ) {
+                               }
+                               if ( typeof val === 'string' ) {
                                        if ( !( eval( 'profile.version' + op + '"' + val + '"' ) ) ) {
                                                return false;
                                        }
-                               } else if ( typeof val == 'number' ) {
+                               } else if ( typeof val === 'number' ) {
                                        if ( !( eval( 'profile.versionNumber' + op + val ) ) ) {
                                                return false;
                                        }
                        return true;
                }
        };
-} )( jQuery );
+}( jQuery ) );
index 44ac56e..42b1194 100644 (file)
@@ -23,7 +23,7 @@ $.highlightText = {
                        // TODO - need to be smarter about the character matching here. 
                        // non latin characters can make regex think a new word has begun: do not use \b
                        // http://stackoverflow.com/questions/3787072/regex-wordwrap-with-utf8-characters-in-js
-                       // look for an occurence of our pattern and store the starting position
+                       // look for an occurrence of our pattern and store the starting position
                        var match = node.data.match( new RegExp( "(^|\\s)" + $.escapeRE( pat ), "i" ) );
                        if ( match ) {
                                var pos = match.index + match[1].length; // include length of any matched spaces
index 8ccd0ea..d7950ec 100644 (file)
@@ -6447,6 +6447,7 @@ var ralpha = /alpha\([^)]*\)/i,
        rupper = /([A-Z]|^ms)/g,
        rnumpx = /^-?\d+(?:px)?$/i,
        rnum = /^-?\d/,
+       rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
        rrelNum = /^([\-+])=([\-+.\de]+)/,
 
        cssShow = { position: "absolute", visibility: "hidden", display: "block" },
@@ -6794,6 +6795,12 @@ function getWH( elem, name, extra ) {
        if ( val < 0 || val == null ) {
                val = elem.style[ name ] || 0;
        }
+
+       // Computed unit is not pixels. Stop here and return.
+       if ( rnumnonpx.test(val) ) {
+               return val;
+       }
+
        // Normalize "", auto, and prepare for extra
        val = parseFloat( val ) || 0;
 
index 443722f..91b6e75 100644 (file)
@@ -131,8 +131,58 @@ encapsulateSelection: function( options ) {
                var isSample = false;
                if ( this.style.display == 'none' ) {
                        // Do nothing
+               } else if ( document.selection && document.selection.createRange ) {
+                       // IE
+
+                       // Note that IE9 will trigger the next section unless we check this first.
+                       // See bug 35201.
+
+                       activateElementOnIE( this );
+                       if ( context ) {
+                               context.fn.restoreCursorAndScrollTop();
+                       }
+                       if ( options.selectionStart !== undefined ) {
+                               $(this).textSelection( 'setSelection', { 'start': options.selectionStart, 'end': options.selectionEnd } );
+                       }
+
+                       var selText = $(this).textSelection( 'getSelection' );
+                       var scrollTop = this.scrollTop;
+                       var range = document.selection.createRange();
+
+                       checkSelectedText();
+                       var insertText = pre + selText + post;
+                       if ( options.splitlines ) {
+                               insertText = doSplitLines( selText, pre, post );
+                       }
+                       if ( options.ownline && range.moveStart ) {
+                               var range2 = document.selection.createRange();
+                               range2.collapse();
+                               range2.moveStart( 'character', -1 );
+                               // FIXME: Which check is correct?
+                               if ( range2.text != "\r" && range2.text != "\n" && range2.text != "" ) {
+                                       insertText = "\n" + insertText;
+                                       pre += "\n";
+                               }
+                               var range3 = document.selection.createRange();
+                               range3.collapse( false );
+                               range3.moveEnd( 'character', 1 );
+                               if ( range3.text != "\r" && range3.text != "\n" && range3.text != "" ) {
+                                       insertText += "\n";
+                                       post += "\n";
+                               }
+                       }
+
+                       range.text = insertText;
+                       if ( isSample && options.selectPeri && range.moveStart ) {
+                               range.moveStart( 'character', - post.length - selText.length );
+                               range.moveEnd( 'character', - post.length );
+                       }
+                       range.select();
+                       // Restore the scroll position
+                       this.scrollTop = scrollTop;
                } else if ( this.selectionStart || this.selectionStart == '0' ) {
                        // Mozilla/Opera
+
                        $(this).focus();
                        if ( options.selectionStart !== undefined ) {
                                $(this).textSelection( 'setSelection', { 'start': options.selectionStart, 'end': options.selectionEnd } );
@@ -182,51 +232,6 @@ encapsulateSelection: function( options ) {
                                this.selectionStart = startPos + insertText.length;
                                this.selectionEnd = this.selectionStart;
                        }
-               } else if ( document.selection && document.selection.createRange ) {
-                       // IE
-                       activateElementOnIE( this );
-                       if ( context ) {
-                               context.fn.restoreCursorAndScrollTop();
-                       }
-                       if ( options.selectionStart !== undefined ) {
-                               $(this).textSelection( 'setSelection', { 'start': options.selectionStart, 'end': options.selectionEnd } );
-                       }
-                       
-                       var selText = $(this).textSelection( 'getSelection' );
-                       var scrollTop = this.scrollTop;
-                       var range = document.selection.createRange();
-
-                       checkSelectedText();
-                       var insertText = pre + selText + post;
-                       if ( options.splitlines ) {
-                               insertText = doSplitLines( selText, pre, post );
-                       }
-                       if ( options.ownline && range.moveStart ) {
-                               var range2 = document.selection.createRange();
-                               range2.collapse();
-                               range2.moveStart( 'character', -1 );
-                               // FIXME: Which check is correct?
-                               if ( range2.text != "\r" && range2.text != "\n" && range2.text != "" ) {
-                                       insertText = "\n" + insertText;
-                                       pre += "\n";
-                               }
-                               var range3 = document.selection.createRange();
-                               range3.collapse( false );
-                               range3.moveEnd( 'character', 1 );
-                               if ( range3.text != "\r" && range3.text != "\n" && range3.text != "" ) {
-                                       insertText += "\n";
-                                       post += "\n";
-                               }
-                       }
-
-                       range.text = insertText;
-                       if ( isSample && options.selectPeri && range.moveStart ) {
-                               range.moveStart( 'character', - post.length - selText.length );
-                               range.moveEnd( 'character', - post.length );
-                       }
-                       range.select();
-                       // Restore the scroll position
-                       this.scrollTop = scrollTop;
                }
                $(this).trigger( 'encapsulateSelection', [ options.pre, options.peri, options.post, options.ownline,
                        options.replace, options.spitlines ] );
index 00fcbb3..090e4c3 100644 (file)
  */
 ( function ( $, mw, undefined ) {
 
-/**
- * Update the link text, link href attribute and (if applicable)
- * "loading" class.
- *
- * @param $link {jQuery} Anchor tag of (un)watch link
- * @param action {String} One of 'watch', 'unwatch'.
- * @param state {String} [optional] 'idle' or 'loading'. Default is 'idle'.
- */
-function updateWatchLink( $link, action, state ) {
-       // message keys 'watch', 'watching', 'unwatch' or 'unwatching'.
-       var     msgKey = state === 'loading' ? action + 'ing' : action,
-               accesskeyTip = $link.attr( 'title' ).match( mw.util.tooltipAccessKeyRegexp ),
+       /**
+        * The name of the page to watch or unwatch.
+        */
+       var title = mw.config.get( 'wgRelevantPageName', mw.config.get( 'wgPageName' ) );
+
+       /**
+        * Update the link text, link href attribute and (if applicable)
+        * "loading" class.
+        *
+        * @param $link {jQuery} Anchor tag of (un)watch link.
+        * @param action {String} One of 'watch', 'unwatch'.
+        * @param state {String} [optional] 'idle' or 'loading'. Default is 'idle'.
+        */
+       function updateWatchLink( $link, action, state ) {
+               var accesskeyTip, msgKey, $li;
+
+               // message keys 'watch', 'watching', 'unwatch' or 'unwatching'.
+               msgKey = state === 'loading' ? action + 'ing' : action;
+               accesskeyTip = $link.attr( 'title' ).match( mw.util.tooltipAccessKeyRegexp );
                $li = $link.closest( 'li' );
 
-       $link
-               .text( mw.msg( msgKey ) )
-               .attr( 'title', mw.msg( 'tooltip-ca-' + action ) +
-                       ( accesskeyTip ? ' ' + accesskeyTip[0] : '' )
-               )
-               .attr( 'href', mw.util.wikiScript() + '?' + $.param({
-                               title: mw.config.get( 'wgPageName' ),
-                               action: action
-                       })
-               );
-
-       // Special case for vector icon
-       if ( $li.hasClass( 'icon' ) ) {
-               if ( state === 'loading' ) {
-                       $link.addClass( 'loading' );
-               } else {
-                       $link.removeClass( 'loading' );
+               $link
+                       .text( mw.msg( msgKey ) )
+                       .attr( 'title', mw.msg( 'tooltip-ca-' + action ) +
+                               ( accesskeyTip ? ' ' + accesskeyTip[0] : '' )
+                       )
+                       .attr( 'href', mw.util.wikiScript() + '?' + $.param({
+                                       title: title,
+                                       action: action
+                               })
+                       );
+
+               // Special case for vector icon
+               if ( $li.hasClass( 'icon' ) ) {
+                       if ( state === 'loading' ) {
+                               $link.addClass( 'loading' );
+                       } else {
+                               $link.removeClass( 'loading' );
+                       }
                }
        }
-}
 
-/**
- * @todo This should be moved somewhere more accessible.
- * @param url {String}
- * @return {String} The extracted action, defaults to 'view'.
- */
-function mwUriGetAction( url ) {
-       var     actionPaths = mw.config.get( 'wgActionPaths' ),
-               key, parts, m, action;
-
-       // @todo: Does MediaWiki give action path or query param
-       // precedence ? If the former, move this to the bottom
-       action = mw.util.getParamValue( 'action', url );
-       if ( action !== null ) {
-               return action;
-       }
+       /**
+        * @todo This should be moved somewhere more accessible.
+        * @param url {String}
+        * @return {String} The extracted action, defaults to 'view'.
+        */
+       function mwUriGetAction( url ) {
+               var action, actionPaths, key, i, m, parts;
+
+               actionPaths = mw.config.get( 'wgActionPaths' );
+
+               // @todo: Does MediaWiki give action path or query param
+               // precedence ? If the former, move this to the bottom
+               action = mw.util.getParamValue( 'action', url );
+               if ( action !== null ) {
+                       return action;
+               }
+
+               for ( key in actionPaths ) {
+                       if ( actionPaths.hasOwnProperty( key ) ) {
+                               parts = actionPaths[key].split( '$1' );
+                               for ( i = 0; i < parts.length; i += 1 ) {
+                                       parts[i] = $.escapeRE( parts[i] );
+                               }
+                               m = new RegExp( parts.join( '(.+)' ) ).exec( url );
+                               if ( m && m[1] ) {
+                                       return key;
+                               }
 
-       for ( key in actionPaths ) {
-               if ( actionPaths.hasOwnProperty( key ) ) {
-                       parts = actionPaths[key].split( '$1' );
-                       for ( i = 0; i < parts.length; i += 1 ) {
-                               parts[i] = $.escapeRE( parts[i] );
-                       }
-                       m = new RegExp( parts.join( '(.+)' ) ).exec( url );
-                       if ( m && m[1] ) {
-                               return key;
                        }
-               
                }
+
+               return 'view';
        }
 
-       return 'view';
-}
+       $( document ).ready( function () {
+               var $links = $( '.mw-watchlink a, a.mw-watchlink, ' +
+                       '#ca-watch a, #ca-unwatch a, #mw-unwatch-link1, ' +
+                       '#mw-unwatch-link2, #mw-watch-link2, #mw-watch-link1' );
 
-$( document ).ready( function() {
-       var $links = $( '.mw-watchlink a, a.mw-watchlink, ' +
-               '#ca-watch a, #ca-unwatch a, #mw-unwatch-link1, ' +
-               '#mw-unwatch-link2, #mw-watch-link2, #mw-watch-link1' );
+               // Allowing people to add inline animated links is a little scary
+               $links = $links.filter( ':not( #bodyContent *, #content * )' );
 
-       // Allowing people to add inline animated links is a little scary
-       $links = $links.filter( ':not( #bodyContent *, #content * )' );
+               $links.click( function ( e ) {
+                       var action, api, $link;
 
-       $links.click( function( e ) {
-               var     $link, api,
                        action = mwUriGetAction( this.href );
 
-               if ( action !== 'watch' && action !== 'unwatch' ) {
-                       // Could not extract target action from link url,
-                       // let native browsing handle it further
-                       return true;
-               }
-               e.preventDefault();
-               e.stopPropagation();
-               
-               $link = $( this );
-
-               updateWatchLink( $link, action, 'loading' );
-
-               api = new mw.Api();
-               api[action](
-                       mw.config.get( 'wgPageName' ),
-                       // Success
-                       function( watchResponse ) {
-                               var     otherAction = action === 'watch' ? 'unwatch' : 'watch',
-                                       $li = $link.closest( 'li' );
+                       if ( action !== 'watch' && action !== 'unwatch' ) {
+                               // Could not extract target action from link url,
+                               // let native browsing handle it further
+                               return true;
+                       }
+                       e.preventDefault();
+                       e.stopPropagation();
 
-                               mw.util.jsMessage( watchResponse.message, 'ajaxwatch' );
+                       $link = $( this );
 
-                               // Set link to opposite
-                               updateWatchLink( $link, otherAction );
+                       updateWatchLink( $link, action, 'loading' );
 
-                               // Most common ID style
-                               if ( $li.prop( 'id' ) === 'ca-' + otherAction || $li.prop( 'id' ) === 'ca-' + action ) {
-                                       $li.prop( 'id', 'ca-' + otherAction );
-                               }
-                               
-                               // Bug 12395 - update the watch checkbox on edit pages when the
-                               // page is watched or unwatched via the tab.
-                               if ( watchResponse.watched !== undefined ) {
-                                       $( '#wpWatchthis' ).prop( 'checked', true );
-                               } else {
-                                       $( '#wpWatchthis' ).removeProp( 'checked' );
-                               }
-                       },
-                       // Error
-                       function(){             
-
-                               // Reset link to non-loading mode
-                               updateWatchLink( $link, action );
-                               
-                               // Format error message
-                               var cleanTitle = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' );
-                               var link = mw.html.element(
-                                       'a', {
-                                               'href': mw.util.wikiGetlink( mw.config.get( 'wgPageName' ) ),
-                                               'title': cleanTitle
-                                       }, cleanTitle
-                               );
-                               var html = mw.msg( 'watcherrortext', link );
-                               
-                               // Report to user about the error
-                               mw.util.jsMessage( html, 'ajaxwatch' );
+                       api = new mw.Api();
+                       api[action](
+                               title,
+                               // Success
+                               function ( watchResponse ) {
+                                       var $li, otherAction;
 
-                       }
-               );
-       });
+                                       otherAction = action === 'watch' ? 'unwatch' : 'watch';
+                                       $li = $link.closest( 'li' );
+
+                                       mw.util.jsMessage( watchResponse.message, 'ajaxwatch' );
+
+                                       // Set link to opposite
+                                       updateWatchLink( $link, otherAction );
+
+                                       // Most common ID style
+                                       if ( $li.prop( 'id' ) === 'ca-' + otherAction || $li.prop( 'id' ) === 'ca-' + action ) {
+                                               $li.prop( 'id', 'ca-' + otherAction );
+                                       }
+
+                                       // Bug 12395 - update the watch checkbox on edit pages when the
+                                       // page is watched or unwatched via the tab.
+                                       if ( watchResponse.watched !== undefined ) {
+                                               $( '#wpWatchthis' ).prop( 'checked', true );
+                                       } else {
+                                               $( '#wpWatchthis' ).removeProp( 'checked' );
+                                       }
+                               },
+                               // Error
+                               function () {
+                                       var cleanTitle, html, link;
+
+                                       // Reset link to non-loading mode
+                                       updateWatchLink( $link, action );
+
+                                       // Format error message
+                                       cleanTitle = title.replace( /_/g, ' ' );
+                                       link = mw.html.element(
+                                               'a', {
+                                                       href: mw.util.wikiGetlink( title ),
+                                                       title: cleanTitle
+                                               }, cleanTitle
+                                       );
+                                       html = mw.msg( 'watcherrortext', link );
+
+                                       // Report to user about the error
+                                       mw.util.jsMessage( html, 'ajaxwatch' );
 
-});
+                               }
+                       );
+               });
+       });
 
-})( jQuery, mediaWiki );
+}( jQuery, mediaWiki ) );
index 8ed6832..302a2d3 100644 (file)
@@ -4,47 +4,51 @@
  */
 ( function( $, mw ) {
 
+       /**
+        * @context {mw.Api}
+        */
+       function doWatchInternal( page, success, err, addParams ) {
+               var params = {
+                       action: 'watch',
+                       title: String( page ),
+                       token: mw.user.tokens.get( 'watchToken' ),
+                       uselang: mw.config.get( 'wgUserLanguage' )
+               };
+               function ok( data ) {
+                       success( data.watch );
+               }
+               if ( addParams ) {
+                       $.extend( params, addParams );
+               }
+               return this.post( params, { ok: ok, err: err } );
+       }
+
        $.extend( mw.Api.prototype, {
                /**
                 * Convinience method for 'action=watch'.
                 *
                 * @param page {String|mw.Title} Full page name or instance of mw.Title
-                * @param success {Function} callback to which the watch object will be passed
-                * watch object contains 'title' (full page name), 'watched' (boolean) and
+                * @param success {Function} Callback to which the watch object will be passed.
+                * Watch object contains properties 'title' (full pagename), 'watched' (boolean) and
                 * 'message' (parsed HTML of the 'addedwatchtext' message).
-                * @param _unwatch {Boolean} Internally used to re-use this logic for unwatch(),
-                * do not use outside this module.
-                * @param err {Function} callback if error (optional)
+                * @param err {Function} Error callback (optional)
                 * @return {jqXHR}
                 */
-               watch: function( page, success, err, _unwatch ) {
-                       var params, ok;
-                       params = {
-                               action: 'watch',
-                               title: String( page ),
-                               token: mw.user.tokens.get( 'watchToken' ),
-                               uselang: mw.config.get( 'wgUserLanguage' )
-                       };
-                       if ( _unwatch ) {
-                               params.unwatch = 1;
-                       }
-                       ok = function( data ) {
-                               success( data.watch );
-                       };
-                       return this.post( params, { ok: ok, err: err } );
+               watch: function ( page, success, err ) {
+                       return doWatchInternal.call( this, page, success, err );
                },
                /**
                 * Convinience method for 'action=watch&unwatch=1'.
                 *
                 * @param page {String|mw.Title} Full page name or instance of mw.Title
-                * @param success {Function} callback to which the watch object will be passed
-                * watch object contains 'title' (full page name), 'unwatched' (boolean) and
+                * @param success {Function} Callback to which the watch object will be passed.
+                * Watch object contains properties 'title' (full pagename), 'watched' (boolean) and
                 * 'message' (parsed HTML of the 'removedwatchtext' message).
-                * @param err {Function} callback if error (optional)
+                * @param err {Function} Error callback (optional)
                 * @return {jqXHR}
                 */
-               unwatch: function( page, success, err ) {
-                       return this.watch( page, success, err, true );
+               unwatch: function ( page, success, err ) {
+                       return doWatchInternal.call( this, page, success, err, { unwatch: 1 } );
                }
 
        } );
index a2bfbcb..2afcbc6 100644 (file)
 
                        paneTriggerBitDiv( 'includes', 'PHP includes', this.data.includes.length );
 
+                       var gitInfo = '';
+                       if ( this.data.gitRevision != false ) {
+                               gitInfo = ' (' + this.data.gitRevision.substring( 0, 7 ) + ')';
+                       }
+
                        bitDiv( 'mwversion' )
                                .append( $( '<a href="//www.mediawiki.org/"></a>' ).text( 'MediaWiki' ) )
-                               .append( ': ' + this.data.mwVersion );
+                               .append( ': ' + this.data.mwVersion + gitInfo );
+
+                       if ( this.data.gitBranch != false ) {
+                               bitDiv( 'gitbranch' ).text( 'Git branch: ' + this.data.gitBranch );
+                       }
 
                        bitDiv( 'phpversion' )
                                .append( $( '<a href="//www.php.net/"></a>' ).text( 'PHP' ) )
index fbb2d7b..eebbab2 100644 (file)
@@ -611,11 +611,12 @@ var mw = ( function ( $, undefined ) {
                                                        filter( 'ready', jobs[j].dependencies ),
                                                        jobs[j].dependencies ) )
                                                {
-                                                       if ( $.isFunction( jobs[j].ready ) ) {
-                                                               jobs[j].ready();
-                                                       }
+                                                       var callback = jobs[j].ready;
                                                        jobs.splice( j, 1 );
                                                        j -= 1;
+                                                       if ( $.isFunction( callback ) ) {
+                                                               callback();
+                                                       }
                                                }
                                        }
                                        // Execute modules whose dependencies have just been met
index bd0c41a..1114e7d 100644 (file)
@@ -143,7 +143,7 @@ class StandardTemplate extends LegacyTemplate {
                }
 
                $s .= "\n<hr class='sep' />";
-               $articleExists = $title->getArticleId();
+               $articleExists = $title->getArticleID();
                if ( $this->data['isarticle'] || $action == 'edit' || $action == 'history' || $wpPreview ) {
                        if( $this->data['isarticle'] ) {
                                $s .= '<strong>' . $this->editThisPage() . '</strong>';
index 5a596c3..d1b51a6 100644 (file)
@@ -72,7 +72,7 @@ class VectorTemplate extends BaseTemplate {
                $nav = $this->data['content_navigation'];
 
                if ( $wgVectorUseIconWatch ) {
-                       $mode = $this->getSkin()->getTitle()->userIsWatching() ? 'unwatch' : 'watch';
+                       $mode = $this->getSkin()->getRelevantTitle()->userIsWatching() ? 'unwatch' : 'watch';
                        if ( isset( $nav['actions'][$mode] ) ) {
                                $nav['views'][$mode] = $nav['actions'][$mode];
                                $nav['views'][$mode]['class'] = rtrim( 'icon ' . $nav['views'][$mode]['class'], ' ' );
@@ -369,7 +369,7 @@ class VectorTemplate extends BaseTemplate {
        </h4>
        <h5><span><?php $this->msg( 'variants' ) ?></span><a href="#"></a></h5>
        <div class="menu">
-               <ul<?php $this->html( 'userlangattributes' ) ?>>
+               <ul>
                        <?php foreach ( $this->data['variant_urls'] as $link ): ?>
                                <li<?php echo $link['attributes'] ?>><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" lang="<?php echo htmlspecialchars( $link['lang'] ) ?>" hreflang="<?php echo htmlspecialchars( $link['hreflang'] ) ?>" <?php echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] ) ?></a></li>
                        <?php endforeach; ?>
index 3787d82..ba689b0 100644 (file)
@@ -354,10 +354,6 @@ div.gallerybox {
 
 .templatesUsed { margin-top: 1.5em; }
 
-.printfooter {
-       display: none;
-}
-
 #footer {
        background-color: white;
        border-top: 1px solid #fabd23;
index 84d42c9..6dcdf6f 100644 (file)
@@ -55,12 +55,6 @@ div.floatleft p {
        font-style: italic;
 }
 
-
-/* Print-specific things to hide */
-.printfooter {
-       display: none;
-}
-
 /* table standards */
 table.rimage {
        float: right;
index b7d2ee1..3172779 100644 (file)
@@ -861,6 +861,12 @@ ol:lang(ckb) li {
        list-style-type: arabic-indic;
 }
 
+ol:lang(hi) li,
+ol:lang(mr) li {
+       list-style-type: -moz-devanagari;
+       list-style-type: devanagari;
+}
+
 ol:lang(as) li,
 ol:lang(bn) li {
        list-style-type: -moz-bengali;
@@ -1034,6 +1040,11 @@ table.floatleft {
        zoom: 1; /* http://webaim.org/techniques/skipnav/#iequirk */
 }
 
+/* Print footer should be hidden by default in screen. */
+.printfooter {
+       display: none;
+}
+
 /* For developpers */
 .xdebug-error {
        position: absolute;
index 1748156..5d6eb0b 100644 (file)
@@ -278,10 +278,6 @@ img {
        margin: 0 0 0 0;
 }
 
-div.printfooter {
-       display: none;
-}
-
 p {
        margin: 1em 0 1em 0;
 }
index 9a8eac1..868d32e 100644 (file)
@@ -759,10 +759,6 @@ div#userloginForm .captcha {
        margin: 5px;
 }
 
-.printfooter {
-       display: none;
-}
-
 div.patrollink {
        clear: both;
 }
index b2e70ba..dbcf199 100644 (file)
@@ -372,9 +372,6 @@ li.new {
 #p-cactions {
        background-color: inherit;
 }
-div.printfooter {
-       display: none;
-}
 
 #footer {
        padding-left: 11.8em;
index 60b6188..d48b5f8 100644 (file)
@@ -762,9 +762,6 @@ div#content a.external[href *=".pdf?"], div#content a.external[href *=".PDF?"],
        padding-right: 13px;
 }
 
-div#content .printfooter {
-       display: none;
-}
 /* Icon for Usernames */
 #pt-userpage,
 #pt-anonuserpage,
index 30e451b..deb5c5a 100644 (file)
@@ -140,7 +140,7 @@ class ParserTest {
                        $wgNamespaceAliases, $wgNamespaceProtection, $wgLocalFileRepo,
                        $parserMemc, $wgThumbnailScriptPath, $wgScriptPath,
                        $wgArticlePath, $wgStyleSheetPath, $wgScript, $wgStylePath, $wgExtensionAssetsPath,
-                       $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType;
+                       $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType, $wgLockManagers;
 
                $wgScript = '/index.php';
                $wgScriptPath = '/';
@@ -149,6 +149,11 @@ class ParserTest {
                $wgStylePath = '/skins';
                $wgExtensionAssetsPath = '/extensions';
                $wgThumbnailScriptPath = false;
+               $wgLockManagers = array( array(
+                       'name'          => 'fsLockManager',
+                       'class'         => 'FSLockManager',
+                       'lockDirectory' => wfTempDir() . '/test-repo/lockdir',
+               ) );
                $wgLocalFileRepo = array(
                        'class'           => 'LocalRepo',
                        'name'            => 'local',
@@ -627,6 +632,11 @@ class ParserTest {
                        'wgScriptPath' => '/',
                        'wgArticlePath' => '/wiki/$1',
                        'wgActionPaths' => array(),
+                       'wgLockManagers' => array(
+                               'name'          => 'fsLockManager',
+                               'class'         => 'FSLockManager',
+                               'lockDirectory' => $this->uploadDir . '/lockdir',
+                       ),
                        'wgLocalFileRepo' => array(
                                'class' => 'LocalRepo',
                                'name' => 'local',
@@ -951,6 +961,8 @@ class ParserTest {
         */
        private function teardownGlobals() {
                RepoGroup::destroySingleton();
+               FileBackendGroup::destroySingleton();
+               LockManagerGroup::destroySingleton();
                LinkCache::singleton()->clear();
 
                foreach ( $this->savedGlobals as $var => $val ) {
index 6f5702d..d304b19 100644 (file)
@@ -8482,6 +8482,16 @@ comment title=[[Main Page]]
 <a href="/wiki/Main_Page#External_links" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
 !!end
 
+!! test
+Edit comment with section link and text before it (non-local, eg in history list)
+!! options
+comment title=[[Main Page]]
+!! input
+pre-comment text /* External links */ removed bogus entries
+!! result
+pre-comment text - <a href="/wiki/Main_Page#External_links" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
+!!end
+
 !! test
 Edit comment with section link (local, eg in diff view)
 !! options
@@ -9086,6 +9096,96 @@ title=[[Main Page]]
 
 !! end
 
+!! test
+Strip marker in urlencode
+!! input
+{{urlencode:x<nowiki/>y}}
+{{urlencode:x<nowiki/>y|wiki}}
+{{urlencode:x<nowiki/>y|path}}
+!! result
+<p>xy
+xy
+xy
+</p>
+!! end
+
+!! test
+Strip marker in lc
+!! input
+{{lc:x<nowiki/>y}}
+!! result
+<p>xy
+</p>
+!! end
+
+!! test
+Strip marker in uc
+!! input
+{{uc:x<nowiki/>y}}
+!! result
+<p>XY
+</p>
+!! end
+
+!! test
+Strip marker in formatNum
+!! input
+{{formatnum:1<nowiki/>2}}
+{{formatnum:1<nowiki/>2|R}}
+!! result
+<p>12
+12
+</p>
+!! end
+
+!! test
+Strip marker in grammar
+!! options
+language=fi
+!! input
+{{grammar:elative|foo<nowiki/>bar}}
+!! result
+<p>foobarista
+</p>
+!! end
+
+!! test
+Strip marker in padleft
+!! input
+{{padleft:|2|x<nowiki/>y}}
+!! result
+<p>xy
+</p>
+!! end
+
+!! test
+Strip marker in padright
+!! input
+{{padright:|2|x<nowiki/>y}}
+!! result
+<p>xy
+</p>
+!! end
+
+!! test
+Strip marker in anchorencode
+!! input
+{{anchorencode:x<nowiki/>y}}
+!! result
+<p>xy
+</p>
+!! end
+
+!! test
+nowiki inside link inside heading (bug 18295)
+!! input
+==[[foo|x<nowiki>y</nowiki>z]]==
+!! result
+<h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: xyz">edit</a>]</span> <span class="mw-headline" id="xyz"><a href="/index.php?title=Foo&amp;action=edit&amp;redlink=1" class="new" title="Foo (page does not exist)">xyz</a></span></h2>
+
+!! end
+
+
 TODO:
 more images
 more tables
index e98e970..8ecfd7e 100644 (file)
@@ -1,5 +1,8 @@
 <?php
 
+/**
+ * @group Editing      
+ */
 class EditPageTest extends MediaWikiTestCase {
 
        /**
@@ -27,7 +30,11 @@ class EditPageTest extends MediaWikiTestCase {
                        array(
                                "== Section ==\nfollowed by a fake == Non-section == ??\nnoooo",
                                "Section"
-                       )
+                       ),
+                       array(
+                               "== Section== \t\r\n followed by whitespace (bug 35051)",
+                               'Section',
+                       ),
                );
        }
 }
index 4397b87..e38fa7e 100644 (file)
@@ -14,9 +14,9 @@ class IPTest extends MediaWikiTestCase {
                $this->assertFalse( IP::isIPAddress( "" ), 'Empty string is not an IP' );
                $this->assertFalse( IP::isIPAddress( 'abc' ), 'Garbage IP string' );
                $this->assertFalse( IP::isIPAddress( ':' ), 'Single ":" is not an IP' );
-               $this->assertFalse( IP::isIPAddress( '2001:0DB8::A:1::1'), 'IPv6 with a double :: occurence' );
-               $this->assertFalse( IP::isIPAddress( '2001:0DB8::A:1::'), 'IPv6 with a double :: occurence, last at end' );
-               $this->assertFalse( IP::isIPAddress( '::2001:0DB8::5:1'), 'IPv6 with a double :: occurence, firt at beginning' );
+               $this->assertFalse( IP::isIPAddress( '2001:0DB8::A:1::1'), 'IPv6 with a double :: occurrence' );
+               $this->assertFalse( IP::isIPAddress( '2001:0DB8::A:1::'), 'IPv6 with a double :: occurrence, last at end' );
+               $this->assertFalse( IP::isIPAddress( '::2001:0DB8::5:1'), 'IPv6 with a double :: occurrence, firt at beginning' );
                $this->assertFalse( IP::isIPAddress( '124.24.52' ), 'IPv4 not enough quads' );
                $this->assertFalse( IP::isIPAddress( '24.324.52.13' ), 'IPv4 out of range' );
                $this->assertFalse( IP::isIPAddress( '.24.52.13' ), 'IPv4 starts with period' );
index 295b6d7..20181fd 100644 (file)
@@ -16,6 +16,8 @@ class MessageTest extends MediaWikiLangTestCase {
                $this->assertInstanceOf( 'Message', wfMessage( 'i-dont-exist-evar' ) );
                $this->assertEquals( 'Main Page', wfMessage( 'mainpage' )->text() );
                $this->assertEquals( '&lt;i-dont-exist-evar&gt;', wfMessage( 'i-dont-exist-evar' )->text() );
+               $this->assertEquals( '<i-dont-exist-evar>', wfMessage( 'i-dont-exist-evar' )->plain() );
+               $this->assertEquals( '&lt;i-dont-exist-evar&gt;', wfMessage( 'i-dont-exist-evar' )->escaped() );
        }
 
        function testInLanguage() {
index 7865ed2..fbf271c 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+/**
+ * @group Database
+ */
 class RecentChangeTest extends MediaWikiTestCase {
        protected $title;
        protected $target;
index 1d9361f..1d4a36f 100644 (file)
@@ -193,52 +193,6 @@ class XmlTest extends MediaWikiTestCase {
                );
        }
 
-       function testNamespaceSelector() {
-               $this->assertEquals(
-                       '<select class="namespaceselector" id="namespace" name="namespace">' . "\n" .
-'<option value="0">(Main)</option>' . "\n" .
-'<option value="1">Talk</option>' . "\n" .
-'<option value="2">User</option>' . "\n" .
-'<option value="3">User talk</option>' . "\n" .
-'<option value="4">MyWiki</option>' . "\n" .
-'<option value="5">MyWiki Talk</option>' . "\n" .
-'<option value="6">File</option>' . "\n" .
-'<option value="7">File talk</option>' . "\n" .
-'<option value="8">MediaWiki</option>' . "\n" .
-'<option value="9">MediaWiki talk</option>' . "\n" .
-'<option value="10">Template</option>' . "\n" .
-'<option value="11">Template talk</option>' . "\n" .
-'<option value="100">Custom</option>' . "\n" .
-'<option value="101">Custom talk</option>' . "\n" .
-'</select>',
-                       Xml::namespaceSelector(),
-                       'Basic namespace selector without custom options'
-               );
-               $this->assertEquals(
-                       '<label for="namespace">Select a namespace:</label>' .
-'&#160;<select class="namespaceselector" id="namespace" name="myname">' . "\n" .
-'<option value="all">all</option>' . "\n" .
-'<option value="0">(Main)</option>' . "\n" .
-'<option value="1">Talk</option>' . "\n" .
-'<option value="2" selected="">User</option>' . "\n" .
-'<option value="3">User talk</option>' . "\n" .
-'<option value="4">MyWiki</option>' . "\n" .
-'<option value="5">MyWiki Talk</option>' . "\n" .
-'<option value="6">File</option>' . "\n" .
-'<option value="7">File talk</option>' . "\n" .
-'<option value="8">MediaWiki</option>' . "\n" .
-'<option value="9">MediaWiki talk</option>' . "\n" .
-'<option value="10">Template</option>' . "\n" .
-'<option value="11">Template talk</option>' . "\n" .
-'<option value="100">Custom</option>' . "\n" .
-'<option value="101">Custom talk</option>' . "\n" .
-'</select>',
-                       Xml::namespaceSelector( $selected = '2', $all = 'all', $element_name = 'myname', $label = 'Select a namespace:' ),
-                       'Basic namespace selector with custom values'
-               );
-       }
-
-
        #
        # textarea
        #
index 514da42..d9ea7b5 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 /**
+ * @group API
  * @group Database
  */
 class ApiBlockTest extends ApiTestCase {
index 70c2074..2566c6c 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 /**
+ * @group API
  * @group Database
  */
 class ApiPurgeTest extends ApiTestCase {
index ae05a30..a4b9dc7 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 /**
+ * @group API
  * @group Database
  */
 class ApiQueryTest extends ApiTestCase {
index 1d9c323..c3eacd5 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 /**
+ * @group API
  * @group Database
  */
 class ApiTest extends ApiTestCase {
index b780374..d2c742a 100644 (file)
@@ -1,8 +1,9 @@
 <?php
 
 /**
+ * @group API
  * @group Database
- * @todo This test suite is severly broken and need a full review 
+ * @todo This test suite is severly broken and need a full review
  */
 class ApiWatchTest extends ApiTestCase {
 
@@ -10,7 +11,7 @@ class ApiWatchTest extends ApiTestCase {
                parent::setUp();
                $this->doLogin();
        }
-       
+
        function getTokens() {
                return $this->getTokenList( self::$users['sysop'] );
        }
@@ -19,9 +20,9 @@ class ApiWatchTest extends ApiTestCase {
         * @group Broken
         */
        function testWatchEdit() {
-               
+
                $data = $this->getTokens();
-               
+
                $keys = array_keys( $data[0]['query']['pages'] );
                $key = array_pop( $keys );
                $pageinfo = $data[0]['query']['pages'][$key];
@@ -44,7 +45,7 @@ class ApiWatchTest extends ApiTestCase {
         * @group Broken
         */
        function testWatchClear() {
-       
+
                $data = $this->doApiRequest( array(
                        'action' => 'query',
                        'list' => 'watchlist' ), $data );
@@ -71,11 +72,11 @@ class ApiWatchTest extends ApiTestCase {
 
        /**
         * @group Broken
-        */      
+        */
        function testWatchProtect() {
-               
+
                $data = $this->getTokens();
-               
+
                $keys = array_keys( $data[0]['query']['pages'] );
                $key = array_pop( $keys );
                $pageinfo = $data[0]['query']['pages'][$key];
@@ -97,9 +98,9 @@ class ApiWatchTest extends ApiTestCase {
         * @group Broken
         */
        function testGetRollbackToken() {
-               
+
                $data = $this->getTokens();
-               
+
                if ( !Title::newFromText( 'UTPage' )->exists() ) {
                        $this->markTestIncomplete( "The article [[UTPage]] does not exist" );
                }
@@ -159,9 +160,9 @@ class ApiWatchTest extends ApiTestCase {
         * @group Broken
         */
        function testWatchDelete() {
-               
+
                $data = $this->getTokens();
-               
+
                $keys = array_keys( $data[0]['query']['pages'] );
                $key = array_pop( $keys );
                $pageinfo = $data[0]['query']['pages'][$key];
index 0f02313..8f92c12 100644 (file)
@@ -34,8 +34,12 @@ class FileRepoTest extends MediaWikiTestCase {
        function testFileRepoConstructionWithRequiredOptions() {
                $f = new FileRepo( array(
                        'name'    => 'FileRepoTestRepository',
-                       'backend' => 'local-backend',
-               ));
+                       'backend' => new FSFileBackend( array(
+                               'name'           => 'local-testing',
+                               'lockManager'    => 'nullLockManager',
+                               'containerPaths' => array()
+                       ) )
+               ) );
                $this->assertInstanceOf( 'FileRepo', $f );
        }
 }
index b2b2da7..c6498fa 100644 (file)
@@ -232,7 +232,7 @@ class UploadFromUrlTest extends ApiTestCase {
                        $page->doDeleteArticle( '' );
                }
 
-               $this->assertFalse( (bool)$talk->getArticleId( Title::GAID_FOR_UPDATE ), 'User talk does not exist' );
+               $this->assertFalse( (bool)$talk->getArticleID( Title::GAID_FOR_UPDATE ), 'User talk does not exist' );
 
                $data = $this->doApiRequest( array(
                        'action' => 'upload',
@@ -249,7 +249,7 @@ class UploadFromUrlTest extends ApiTestCase {
                $job->run();
 
                $this->assertTrue( wfLocalFile( 'UploadFromUrlTest.png' )->exists() );
-               $this->assertTrue( (bool)$talk->getArticleId( Title::GAID_FOR_UPDATE ), 'User talk exists' );
+               $this->assertTrue( (bool)$talk->getArticleID( Title::GAID_FOR_UPDATE ), 'User talk exists' );
 
                $this->deleteFile( 'UploadFromUrlTest.png' );
 
index c83e01e..c089c31 100644 (file)
@@ -23,12 +23,12 @@ class LanguageTest extends MediaWikiTestCase {
                        'convertDoubleWidth() with the full alphabet and digits'
                );
        }
-       
+
        /** @dataProvider provideFormattableTimes */
        function testFormatTimePeriod( $seconds, $format, $expected, $desc ) {
                $this->assertEquals( $expected, $this->lang->formatTimePeriod( $seconds, $format ), $desc );
        }
-       
+
        function provideFormattableTimes() {
                return array(
                        array( 9.45, array(), '9.5s', 'formatTimePeriod() rounding (<10s)' ),
@@ -62,7 +62,7 @@ class LanguageTest extends MediaWikiTestCase {
                        array( 176460.55, array(), '2d 1h 1m 1s', 'formatTimePeriod() rounding, recursion, (>48h)' ),
                        array( 176460.55, array( 'noabbrevs' => true ), '2 days 1 hour 1 minute 1 second', 'formatTimePeriod() rounding, recursion, (>48h)' ),
                );
-               
+
        }
 
        function testTruncate() {
@@ -224,7 +224,7 @@ class LanguageTest extends MediaWikiTestCase {
                        "sprintfDate('$format', '$ts'): $msg"
                );
 
-               date_default_timezone_set( $oldTZ );            
+               date_default_timezone_set( $oldTZ );
        }
 
        function provideSprintfDateSamples() {
index 3346c2d..21effdb 100644 (file)
-( function () {
-
-module( 'jquery.byteLimit', QUnit.newMwEnvironment() );
-
-test( '-- Initial check', function() {
-       expect(1);
-       ok( $.fn.byteLimit, 'jQuery.fn.byteLimit defined' );
-} );
-
-// Basic sendkey-implementation
-$.addChars = function( $input, charstr ) {
-       var len = charstr.length;
-       for ( var i = 0; i < len; i++ ) {
-               // Keep track of the previous value
-               var prevVal = $input.val();
-
-               // Get the key code
-               var code = charstr.charCodeAt(i);
-
-               // Trigger event and undo if prevented
-               var event = new jQuery.Event( 'keypress', { keyCode: code, which: code, charCode: code } );
-               $input.trigger( event );
-               if ( !event.isDefaultPrevented() ) {
-                       $input.val( prevVal + charstr.charAt(i) );
-               }
-       }
-};
-
-/**
- * Test factory for $.fn.byteLimit
- *
- * @param $input {jQuery} jQuery object in an input element
- * @param hasLimit {Boolean} Wether a limit should apply at all
- * @param limit {Number} Limit (if used) otherwise undefined
- * The limit should be less than 20 (the sample data's length)
- */
-var byteLimitTest = function( options ) {
-       var opt = $.extend({
-               description: '',
-               $input: null,
-               sample: '',
-               hasLimit: false,
-               expected: '',
-               limit: null
-       }, options);
-
-       test( opt.description, function() {
-
-               opt.$input.appendTo( '#qunit-fixture' );
-
-               // Simulate pressing keys for each of the sample characters
-               $.addChars( opt.$input, opt.sample );
-               var     rawVal = opt.$input.val(),
-                       fn = opt.$input.data( 'byteLimit-callback' ),
-                       newVal = $.isFunction( fn ) ? fn( rawVal ) : rawVal;
-
-               if ( opt.hasLimit ) {
-                       expect(3);
-
-                       ltOrEq( $.byteLength( newVal ), opt.limit, 'Prevent keypresses after byteLimit was reached, length never exceeded the limit' );
-                       equal( $.byteLength( rawVal ), $.byteLength( opt.expected ), 'Not preventing keypresses too early, length has reached the expected length' );
-                       equal( rawVal, opt.expected, 'New value matches the expected string' );
+( function ( $ ) {
+       var simpleSample, U_20AC, mbSample;
 
-               } else {
-                       expect(2);
-                       equal( newVal, opt.expected, 'New value matches the expected string' );
-                       equal( $.byteLength( newVal ), $.byteLength( opt.expected ), 'Unlimited scenarios are not affected, expected length reached' );
-               }
-       } );
-};
+       module( 'jquery.byteLimit', QUnit.newMwEnvironment() );
 
-var
        // Simple sample (20 chars, 20 bytes)
-       simpleSample = '12345678901234567890',
+       simpleSample = '12345678901234567890';
 
        // 3 bytes (euro-symbol)
-       U_20AC = '\u20AC',
+       U_20AC = '\u20AC';
 
        // Multi-byte sample (22 chars, 26 bytes)
        mbSample = '1234567890' + U_20AC + '1234567890' + U_20AC;
 
-byteLimitTest({
-       description: 'Plain text input',
-       $input: $( '<input>' )
-               .attr( 'type', 'text' ),
-       sample: simpleSample,
-       hasLimit: false,
-       expected: simpleSample
-});
-
-byteLimitTest({
-       description: 'Limit using the maxlength attribute',
-       $input: $( '<input>' )
-               .attr( 'type', 'text' )
-               .prop( 'maxLength', '10' )
-               .byteLimit(),
-       sample: simpleSample,
-       hasLimit: true,
-       limit: 10,
-       expected: '1234567890'
-});
-
-byteLimitTest({
-       description: 'Limit using a custom value',
-       $input: $( '<input>' )
-               .attr( 'type', 'text' )
-               .byteLimit( 10 ),
-       sample: simpleSample,
-       hasLimit: true,
-       limit: 10,
-       expected: '1234567890'
-});
-
-byteLimitTest({
-       description: 'Limit using a custom value, overriding maxlength attribute',
-       $input: $( '<input>' )
-               .attr( 'type', 'text' )
-               .prop( 'maxLength', '10' )
-               .byteLimit( 15 ),
-       sample: simpleSample,
-       hasLimit: true,
-       limit: 15,
-       expected: '123456789012345'
-});
-
-byteLimitTest({
-       description: 'Limit using a custom value (multibyte)',
-       $input: $( '<input>' )
-               .attr( 'type', 'text' )
-               .byteLimit( 14 ),
-       sample: mbSample,
-       hasLimit: true,
-       limit: 14,
-       expected: '1234567890' + U_20AC + '1'
-});
-
-byteLimitTest({
-       description: 'Limit using a custom value (multibyte) overlapping a byte',
-       $input: $( '<input>' )
-               .attr( 'type', 'text' )
-               .byteLimit( 12 ),
-       sample: mbSample,
-       hasLimit: true,
-       limit: 12,
-       expected: '1234567890' + '12'
-});
-
-byteLimitTest({
-       description: 'Pass the limit and a callback as input filter',
-       $input: $( '<input>' )
-               .attr( 'type', 'text' )
-               .byteLimit( 6, function( val ) {
-                       // Invalid title
-                       if ( val == '' ) {
-                               return '';
+       // Basic sendkey-implementation
+       function addChars( $input, charstr ) {
+               var len, i, prevVal, code, event;
+               len = charstr.length;
+               for ( i = 0; i < len; i += 1 ) {
+                       // Keep track of the previous value
+                       prevVal = $input.val();
+
+                       // Get the key code
+                       code = charstr.charCodeAt( i );
+
+                       // Trigger event and undo if prevented
+                       event = new jQuery.Event( 'keypress', {
+                               which: code,
+                               keyCode: code,
+                               charCode: code
+                       } );
+                       $input.trigger( event );
+                       if ( !event.isDefaultPrevented() ) {
+                               $input.val( prevVal + charstr.charAt( i ) );
                        }
+               }
+       }
 
-                       // Return without namespace prefix
-                       return new mw.Title( '' + val ).getMain();
-               } ),
-       sample: 'User:Sample',
-       hasLimit: true,
-       limit: 6, // 'Sample' length
-       expected: 'User:Sample'
-});
-
-byteLimitTest({
-       description: 'Limit using the maxlength attribute and pass a callback as input filter',
-       $input: $( '<input>' )
-               .attr( 'type', 'text' )
-               .prop( 'maxLength', '6' )
-               .byteLimit( function( val ) {
-                       // Invalid title
-                       if ( val === '' ) {
-                               return '';
+       /**
+        * Test factory for $.fn.byteLimit
+        *
+        * @param $input {jQuery} jQuery object in an input element
+        * @param hasLimit {Boolean} Wether a limit should apply at all
+        * @param limit {Number} Limit (if used) otherwise undefined
+        * The limit should be less than 20 (the sample data's length)
+        */
+       function byteLimitTest( options ) {
+               var opt = $.extend({
+                       description: '',
+                       $input: null,
+                       sample: '',
+                       hasLimit: false,
+                       expected: '',
+                       limit: null
+               }, options);
+
+               test( opt.description, function () {
+                       var rawVal, fn, newVal;
+
+                       opt.$input.appendTo( '#qunit-fixture' );
+
+                       // Simulate pressing keys for each of the sample characters
+                       addChars( opt.$input, opt.sample );
+                       rawVal = opt.$input.val();
+                       fn = opt.$input.data( 'byteLimit-callback' );
+                       newVal = $.isFunction( fn ) ? fn( rawVal ) : rawVal;
+
+                       if ( opt.hasLimit ) {
+                               expect(3);
+
+                               QUnit.ltOrEq(
+                                       $.byteLength( newVal ),
+                                       opt.limit,
+                                       'Prevent keypresses after byteLimit was reached, length never exceeded the limit'
+                               );
+                               equal(
+                                       $.byteLength( rawVal ),
+                                       $.byteLength( opt.expected ),
+                                       'Not preventing keypresses too early, length has reached the expected length'
+                               );
+                               equal( rawVal, opt.expected, 'New value matches the expected string' );
+
+                       } else {
+                               expect(2);
+                               equal( newVal, opt.expected, 'New value matches the expected string' );
+                               equal(
+                                       $.byteLength( newVal ),
+                                       $.byteLength( opt.expected ),
+                                       'Unlimited scenarios are not affected, expected length reached'
+                               );
                        }
+               } );
+       }
 
-                       // Return without namespace prefix
-                       return new mw.Title( '' + val ).getMain();
-               } ),
-       sample: 'User:Sample',
-       hasLimit: true,
-       limit: 6, // 'Sample' length
-       expected: 'User:Sample'
-});
+       test( '-- Initial check', function () {
+               expect(1);
+               ok( $.fn.byteLimit, 'jQuery.fn.byteLimit defined' );
+       } );
 
-}() );
\ No newline at end of file
+       byteLimitTest({
+               description: 'Plain text input',
+               $input: $( '<input>' )
+                       .attr( 'type', 'text' ),
+               sample: simpleSample,
+               hasLimit: false,
+               expected: simpleSample
+       });
+
+       byteLimitTest({
+               description: 'Limit using the maxlength attribute',
+               $input: $( '<input>' )
+                       .attr( 'type', 'text' )
+                       .prop( 'maxLength', '10' )
+                       .byteLimit(),
+               sample: simpleSample,
+               hasLimit: true,
+               limit: 10,
+               expected: '1234567890'
+       });
+
+       byteLimitTest({
+               description: 'Limit using a custom value',
+               $input: $( '<input>' )
+                       .attr( 'type', 'text' )
+                       .byteLimit( 10 ),
+               sample: simpleSample,
+               hasLimit: true,
+               limit: 10,
+               expected: '1234567890'
+       });
+
+       byteLimitTest({
+               description: 'Limit using a custom value, overriding maxlength attribute',
+               $input: $( '<input>' )
+                       .attr( 'type', 'text' )
+                       .prop( 'maxLength', '10' )
+                       .byteLimit( 15 ),
+               sample: simpleSample,
+               hasLimit: true,
+               limit: 15,
+               expected: '123456789012345'
+       });
+
+       byteLimitTest({
+               description: 'Limit using a custom value (multibyte)',
+               $input: $( '<input>' )
+                       .attr( 'type', 'text' )
+                       .byteLimit( 14 ),
+               sample: mbSample,
+               hasLimit: true,
+               limit: 14,
+               expected: '1234567890' + U_20AC + '1'
+       });
+
+       byteLimitTest({
+               description: 'Limit using a custom value (multibyte) overlapping a byte',
+               $input: $( '<input>' )
+                       .attr( 'type', 'text' )
+                       .byteLimit( 12 ),
+               sample: mbSample,
+               hasLimit: true,
+               limit: 12,
+               expected: '1234567890' + '12'
+       });
+
+       byteLimitTest({
+               description: 'Pass the limit and a callback as input filter',
+               $input: $( '<input>' )
+                       .attr( 'type', 'text' )
+                       .byteLimit( 6, function ( val ) {
+                               // Invalid title
+                               if ( val === '' ) {
+                                       return '';
+                               }
+
+                               // Return without namespace prefix
+                               return new mw.Title( String( val ) ).getMain();
+                       } ),
+               sample: 'User:Sample',
+               hasLimit: true,
+               limit: 6, // 'Sample' length
+               expected: 'User:Sample'
+       });
+
+       byteLimitTest({
+               description: 'Limit using the maxlength attribute and pass a callback as input filter',
+               $input: $( '<input>' )
+                       .attr( 'type', 'text' )
+                       .prop( 'maxLength', '6' )
+                       .byteLimit( function ( val ) {
+                               // Invalid title
+                               if ( val === '' ) {
+                                       return '';
+                               }
+
+                               // Return without namespace prefix
+                               return new mw.Title( String( val ) ).getMain();
+                       } ),
+               sample: 'User:Sample',
+               hasLimit: true,
+               limit: 6, // 'Sample' length
+               expected: 'User:Sample'
+       });
+
+       test( 'Confirm properties and attributes set', function () {
+               var $el, $elA, $elB;
+
+               expect(5);
+
+               $el = $( '<input>' )
+                       .attr( 'type', 'text' )
+                       .prop( 'maxLength', '7' )
+                       .appendTo( '#qunit-fixture' )
+                       .byteLimit();
+
+               strictEqual( $el.prop( 'maxLength' ), 7, 'Pre-set maxLength property unchanged' );
+
+               $el = $( '<input>' )
+                       .attr( 'type', 'text' )
+                       .prop( 'maxLength', '7' )
+                       .appendTo( '#qunit-fixture' )
+                       .byteLimit( 12 );
+
+               strictEqual( $el.prop( 'maxLength' ), 12, 'maxLength property updated if value was passed to $.fn.byteLimit' );
+
+               $elA = $( '<input>' )
+                       .addClass( 'mw-test-byteLimit-foo' )
+                       .attr( 'type', 'text' )
+                       .prop( 'maxLength', '7' )
+                       .appendTo( '#qunit-fixture' );
+
+               $elB = $( '<input>' )
+                       .addClass( 'mw-test-byteLimit-foo' )
+                       .attr( 'type', 'text' )
+                       .prop( 'maxLength', '12' )
+                       .appendTo( '#qunit-fixture' );
+
+               $el = $( '.mw-test-byteLimit-foo' );
+
+               strictEqual( $el.length, 2, 'Verify that there are no other elements clashing with this test suite' );
+
+               $el.byteLimit();
+
+               // Before bug 35294 was fixed, both $elA and $elB had maxLength set to 7,
+               // because $.fn.byteLimit sets:
+               // `limit = limitArg || this.prop( 'maxLength' ); this.prop( 'maxLength', limit )`
+               // and did so outside the each() loop.
+               strictEqual( $elA.prop( 'maxLength' ), 7, 'maxLength was not incorrectly set on #1 when calling byteLimit on multiple elements (bug 35294)' );
+               strictEqual( $elB.prop( 'maxLength' ), 12, 'maxLength was not incorrectly set on #2 when calling byteLimit on multiple elements (bug 35294)' );
+       });
+
+}( jQuery ) );
index 1a3196c..d688c3b 100644 (file)
@@ -347,7 +347,7 @@ CREATE TABLE `mw_interwiki` (
 
 LOCK TABLES `mw_interwiki` WRITE;
 /*!40000 ALTER TABLE `mw_interwiki` DISABLE KEYS */;
-INSERT INTO `mw_interwiki` VALUES ('acronym','http://www.acronymfinder.com/af-query.asp?String=exact&Acronym=$1','','',0,0),('advogato','http://www.advogato.org/$1','','',0,0),('annotationwiki','http://www.seedwiki.com/page.cfm?wikiid=368&doc=$1','','',0,0),('arxiv','http://www.arxiv.org/abs/$1','','',0,0),('c2find','http://c2.com/cgi/wiki?FindPage&value=$1','','',0,0),('cache','http://www.google.com/search?q=cache:$1','','',0,0),('commons','http://commons.wikimedia.org/wiki/$1','','',0,0),('corpknowpedia','http://corpknowpedia.org/wiki/index.php/$1','','',0,0),('dictionary','http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query=$1','','',0,0),('disinfopedia','http://www.disinfopedia.org/wiki.phtml?title=$1','','',0,0),('docbook','http://wiki.docbook.org/topic/$1','','',0,0),('doi','http://dx.doi.org/$1','','',0,0),('drumcorpswiki','http://www.drumcorpswiki.com/index.php/$1','','',0,0),('dwjwiki','http://www.suberic.net/cgi-bin/dwj/wiki.cgi?$1','','',0,0),('elibre','http://enciclopedia.us.es/index.php/$1','','',0,0),('emacswiki','http://www.emacswiki.org/cgi-bin/wiki.pl?$1','','',0,0),('foldoc','http://foldoc.org/?$1','','',0,0),('foxwiki','http://fox.wikis.com/wc.dll?Wiki~$1','','',0,0),('freebsdman','http://www.FreeBSD.org/cgi/man.cgi?apropos=1&query=$1','','',0,0),('gej','http://www.esperanto.de/cgi-bin/aktivikio/wiki.pl?$1','','',0,0),('gentoo-wiki','http://gentoo-wiki.com/$1','','',0,0),('google','http://www.google.com/search?q=$1','','',0,0),('googlegroups','http://groups.google.com/groups?q=$1','','',0,0),('hammondwiki','http://www.dairiki.org/HammondWiki/$1','','',0,0),('hewikisource','http://he.wikisource.org/wiki/$1','','',1,0),('hrwiki','http://www.hrwiki.org/index.php/$1','','',0,0),('imdb','http://us.imdb.com/Title?$1','','',0,0),('jargonfile','http://sunir.org/apps/meta.pl?wiki=JargonFile&redirect=$1','','',0,0),('jspwiki','http://www.jspwiki.org/wiki/$1','','',0,0),('keiki','http://kei.ki/en/$1','','',0,0),('kmwiki','http://kmwiki.wikispaces.com/$1','','',0,0),('linuxwiki','http://linuxwiki.de/$1','','',0,0),('lojban','http://www.lojban.org/tiki/tiki-index.php?page=$1','','',0,0),('lqwiki','http://wiki.linuxquestions.org/wiki/$1','','',0,0),('lugkr','http://lug-kr.sourceforge.net/cgi-bin/lugwiki.pl?$1','','',0,0),('mathsongswiki','http://SeedWiki.com/page.cfm?wikiid=237&doc=$1','','',0,0),('meatball','http://www.usemod.com/cgi-bin/mb.pl?$1','','',0,0),('mediawikiwiki','http://www.mediawiki.org/wiki/$1','','',0,0),('mediazilla','https://bugzilla.wikimedia.org/$1','','',1,0),('memoryalpha','http://www.memory-alpha.org/en/index.php/$1','','',0,0),('metawiki','http://sunir.org/apps/meta.pl?$1','','',0,0),('metawikipedia','http://meta.wikimedia.org/wiki/$1','','',0,0),('moinmoin','http://purl.net/wiki/moin/$1','','',0,0),('mozillawiki','http://wiki.mozilla.org/index.php/$1','','',0,0),('mw','http://www.mediawiki.org/wiki/$1','','',0,0),('oeis','http://www.research.att.com/cgi-bin/access.cgi/as/njas/sequences/eisA.cgi?Anum=$1','','',0,0),('openfacts','http://openfacts.berlios.de/index.phtml?title=$1','','',0,0),('openwiki','http://openwiki.com/?$1','','',0,0),('pmeg','http://www.bertilow.com/pmeg/$1.php','','',0,0),('ppr','http://c2.com/cgi/wiki?$1','','',0,0),('pythoninfo','http://wiki.python.org/moin/$1','','',0,0),('rfc','http://www.rfc-editor.org/rfc/rfc$1.txt','','',0,0),('s23wiki','http://is-root.de/wiki/index.php/$1','','',0,0),('seattlewiki','http://seattle.wikia.com/wiki/$1','','',0,0),('seattlewireless','http://seattlewireless.net/?$1','','',0,0),('senseislibrary','http://senseis.xmp.net/?$1','','',0,0),('sourceforge','http://sourceforge.net/$1','','',0,0),('squeak','http://wiki.squeak.org/squeak/$1','','',0,0),('susning','http://www.susning.nu/$1','','',0,0),('svgwiki','http://wiki.svg.org/$1','','',0,0),('tavi','http://tavi.sourceforge.net/$1','','',0,0),('tejo','http://www.tejo.org/vikio/$1','','',0,0),('theopedia','http://www.theopedia.com/$1','','',0,0),('tmbw','http://www.tmbw.net/wiki/$1','','',0,0),('tmnet','http://www.technomanifestos.net/?$1','','',0,0),('tmwiki','http://www.EasyTopicMaps.com/?page=$1','','',0,0),('twiki','http://twiki.org/cgi-bin/view/$1','','',0,0),('uea','http://www.tejo.org/uea/$1','','',0,0),('unreal','http://wiki.beyondunreal.com/wiki/$1','','',0,0),('usemod','http://www.usemod.com/cgi-bin/wiki.pl?$1','','',0,0),('vinismo','http://vinismo.com/en/$1','','',0,0),('webseitzwiki','http://webseitz.fluxent.com/wiki/$1','','',0,0),('why','http://clublet.com/c/c/why?$1','','',0,0),('wiki','http://c2.com/cgi/wiki?$1','','',0,0),('wikia','http://www.wikia.com/wiki/$1','','',0,0),('wikibooks','http://en.wikibooks.org/wiki/$1','','',1,0),('wikicities','http://www.wikia.com/wiki/$1','','',0,0),('wikif1','http://www.wikif1.org/$1','','',0,0),('wikihow','http://www.wikihow.com/$1','','',0,0),('wikimedia','http://wikimediafoundation.org/wiki/$1','','',0,0),('wikinews','http://en.wikinews.org/wiki/$1','','',1,0),('wikinfo','http://www.wikinfo.org/index.php/$1','','',0,0),('wikipedia','http://en.wikipedia.org/wiki/$1','','',1,0),('wikiquote','http://en.wikiquote.org/wiki/$1','','',1,0),('wikisource','http://wikisource.org/wiki/$1','','',1,0),('wikispecies','http://species.wikimedia.org/wiki/$1','','',1,0),('wikitravel','http://wikitravel.org/en/$1','','',0,0),('wikiversity','http://en.wikiversity.org/wiki/$1','','',1,0),('wikt','http://en.wiktionary.org/wiki/$1','','',1,0),('wiktionary','http://en.wiktionary.org/wiki/$1','','',1,0),('wlug','http://www.wlug.org.nz/$1','','',0,0),('zwiki','http://zwiki.org/$1','','',0,0),('zzz wiki','http://wiki.zzz.ee/index.php/$1','','',0,0);
+INSERT INTO `mw_interwiki` VALUES ('acronym','http://www.acronymfinder.com/af-query.asp?String=exact&Acronym=$1','','',0,0),('advogato','http://www.advogato.org/$1','','',0,0),('annotationwiki','http://www.seedwiki.com/page.cfm?wikiid=368&doc=$1','','',0,0),('arxiv','http://www.arxiv.org/abs/$1','','',0,0),('c2find','http://c2.com/cgi/wiki?FindPage&value=$1','','',0,0),('cache','http://www.google.com/search?q=cache:$1','','',0,0),('commons','http://commons.wikimedia.org/wiki/$1','','',0,0),('corpknowpedia','http://corpknowpedia.org/wiki/index.php/$1','','',0,0),('dictionary','http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query=$1','','',0,0),('disinfopedia','http://www.disinfopedia.org/wiki.phtml?title=$1','','',0,0),('docbook','http://wiki.docbook.org/topic/$1','','',0,0),('doi','http://dx.doi.org/$1','','',0,0),('drumcorpswiki','http://www.drumcorpswiki.com/index.php/$1','','',0,0),('dwjwiki','http://www.suberic.net/cgi-bin/dwj/wiki.cgi?$1','','',0,0),('elibre','http://enciclopedia.us.es/index.php/$1','','',0,0),('emacswiki','http://www.emacswiki.org/cgi-bin/wiki.pl?$1','','',0,0),('foldoc','http://foldoc.org/?$1','','',0,0),('foxwiki','http://fox.wikis.com/wc.dll?Wiki~$1','','',0,0),('freebsdman','http://www.FreeBSD.org/cgi/man.cgi?apropos=1&query=$1','','',0,0),('gej','http://www.esperanto.de/cgi-bin/aktivikio/wiki.pl?$1','','',0,0),('gentoo-wiki','http://gentoo-wiki.com/$1','','',0,0),('google','http://www.google.com/search?q=$1','','',0,0),('googlegroups','http://groups.google.com/groups?q=$1','','',0,0),('hammondwiki','http://www.dairiki.org/HammondWiki/$1','','',0,0),('hewikisource','http://he.wikisource.org/wiki/$1','','',1,0),('hrwiki','http://www.hrwiki.org/index.php/$1','','',0,0),('imdb','http://us.imdb.com/Title?$1','','',0,0),('jargonfile','http://sunir.org/apps/meta.pl?wiki=JargonFile&redirect=$1','','',0,0),('jspwiki','http://www.jspwiki.org/wiki/$1','','',0,0),('keiki','http://kei.ki/en/$1','','',0,0),('kmwiki','http://kmwiki.wikispaces.com/$1','','',0,0),('linuxwiki','http://linuxwiki.de/$1','','',0,0),('lojban','http://www.lojban.org/tiki/tiki-index.php?page=$1','','',0,0),('lqwiki','http://wiki.linuxquestions.org/wiki/$1','','',0,0),('lugkr','http://lug-kr.sourceforge.net/cgi-bin/lugwiki.pl?$1','','',0,0),('mathsongswiki','http://SeedWiki.com/page.cfm?wikiid=237&doc=$1','','',0,0),('meatball','http://www.usemod.com/cgi-bin/mb.pl?$1','','',0,0),('mediawikiwiki','http://www.mediawiki.org/wiki/$1','','',0,0),('mediazilla','https://bugzilla.wikimedia.org/$1','','',1,0),('memoryalpha','http://www.memory-alpha.org/en/index.php/$1','','',0,0),('metawiki','http://sunir.org/apps/meta.pl?$1','','',0,0),('metawikimedia','http://meta.wikimedia.org/wiki/$1','','',0,0),('moinmoin','http://purl.net/wiki/moin/$1','','',0,0),('mozillawiki','http://wiki.mozilla.org/index.php/$1','','',0,0),('mw','http://www.mediawiki.org/wiki/$1','','',0,0),('oeis','http://www.research.att.com/cgi-bin/access.cgi/as/njas/sequences/eisA.cgi?Anum=$1','','',0,0),('openfacts','http://openfacts.berlios.de/index.phtml?title=$1','','',0,0),('openwiki','http://openwiki.com/?$1','','',0,0),('pmeg','http://www.bertilow.com/pmeg/$1.php','','',0,0),('ppr','http://c2.com/cgi/wiki?$1','','',0,0),('pythoninfo','http://wiki.python.org/moin/$1','','',0,0),('rfc','http://www.rfc-editor.org/rfc/rfc$1.txt','','',0,0),('s23wiki','http://is-root.de/wiki/index.php/$1','','',0,0),('seattlewiki','http://seattle.wikia.com/wiki/$1','','',0,0),('seattlewireless','http://seattlewireless.net/?$1','','',0,0),('senseislibrary','http://senseis.xmp.net/?$1','','',0,0),('sourceforge','http://sourceforge.net/$1','','',0,0),('squeak','http://wiki.squeak.org/squeak/$1','','',0,0),('susning','http://www.susning.nu/$1','','',0,0),('svgwiki','http://wiki.svg.org/$1','','',0,0),('tavi','http://tavi.sourceforge.net/$1','','',0,0),('tejo','http://www.tejo.org/vikio/$1','','',0,0),('theopedia','http://www.theopedia.com/$1','','',0,0),('tmbw','http://www.tmbw.net/wiki/$1','','',0,0),('tmnet','http://www.technomanifestos.net/?$1','','',0,0),('tmwiki','http://www.EasyTopicMaps.com/?page=$1','','',0,0),('twiki','http://twiki.org/cgi-bin/view/$1','','',0,0),('uea','http://www.tejo.org/uea/$1','','',0,0),('unreal','http://wiki.beyondunreal.com/wiki/$1','','',0,0),('usemod','http://www.usemod.com/cgi-bin/wiki.pl?$1','','',0,0),('vinismo','http://vinismo.com/en/$1','','',0,0),('webseitzwiki','http://webseitz.fluxent.com/wiki/$1','','',0,0),('why','http://clublet.com/c/c/why?$1','','',0,0),('wiki','http://c2.com/cgi/wiki?$1','','',0,0),('wikia','http://www.wikia.com/wiki/$1','','',0,0),('wikibooks','http://en.wikibooks.org/wiki/$1','','',1,0),('wikicities','http://www.wikia.com/wiki/$1','','',0,0),('wikif1','http://www.wikif1.org/$1','','',0,0),('wikihow','http://www.wikihow.com/$1','','',0,0),('wikimedia','http://wikimediafoundation.org/wiki/$1','','',0,0),('wikinews','http://en.wikinews.org/wiki/$1','','',1,0),('wikinfo','http://www.wikinfo.org/index.php/$1','','',0,0),('wikipedia','http://en.wikipedia.org/wiki/$1','','',1,0),('wikiquote','http://en.wikiquote.org/wiki/$1','','',1,0),('wikisource','http://wikisource.org/wiki/$1','','',1,0),('wikispecies','http://species.wikimedia.org/wiki/$1','','',1,0),('wikitravel','http://wikitravel.org/en/$1','','',0,0),('wikiversity','http://en.wikiversity.org/wiki/$1','','',1,0),('wikt','http://en.wiktionary.org/wiki/$1','','',1,0),('wiktionary','http://en.wiktionary.org/wiki/$1','','',1,0),('wlug','http://www.wlug.org.nz/$1','','',0,0),('zwiki','http://zwiki.org/$1','','',0,0),('zzz wiki','http://wiki.zzz.ee/index.php/$1','','',0,0);
 /*!40000 ALTER TABLE `mw_interwiki` ENABLE KEYS */;
 UNLOCK TABLES;
 
index 2724bad..7beb9e6 100644 (file)
@@ -391,7 +391,7 @@ INSERT INTO `mw_interwiki` VALUES ('mediawikiwiki','http://www.mediawiki.org/wik
 INSERT INTO `mw_interwiki` VALUES ('mediazilla','https://bugzilla.wikimedia.org/$1','','',1,0);
 INSERT INTO `mw_interwiki` VALUES ('memoryalpha','http://www.memory-alpha.org/en/index.php/$1','','',0,0);
 INSERT INTO `mw_interwiki` VALUES ('metawiki','http://sunir.org/apps/meta.pl?$1','','',0,0);
-INSERT INTO `mw_interwiki` VALUES ('metawikipedia','http://meta.wikimedia.org/wiki/$1','','',0,0);
+INSERT INTO `mw_interwiki` VALUES ('metawikimedia','http://meta.wikimedia.org/wiki/$1','','',0,0);
 INSERT INTO `mw_interwiki` VALUES ('moinmoin','http://purl.net/wiki/moin/$1','','',0,0);
 INSERT INTO `mw_interwiki` VALUES ('mozillawiki','http://wiki.mozilla.org/index.php/$1','','',0,0);
 INSERT INTO `mw_interwiki` VALUES ('mw','http://www.mediawiki.org/wiki/$1','','',0,0);
index 83d1a34..bc880a8 100644 (file)
@@ -1,6 +1,6 @@
 == Details==
 
-Automated Selenium test scripts written for MediaWiki Installer is available at svn.wikimedia.org/svnroot/mediawiki/trunk/phase3/tests/selenium/installer.
+Automated Selenium test scripts written for MediaWiki Installer is available at https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/core.git;a=tree;f=tests/selenium/installer;hb=HEAD.
 Detailed test cases available at http://www.mediawiki.org/wiki/New_installer/Test_plan.
 
 Version : MediaWiki 1.18alpha
index eb0d67d..6afc7e5 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -8,7 +8,7 @@
  */
 define( 'MW_NO_OUTPUT_COMPRESSION', 1 );
 if ( isset( $_SERVER['MW_COMPILED'] ) ) {
-       require( 'phase3/includes/WebStart.php' );
+       require( 'core/includes/WebStart.php' );
 } else {
        require( dirname( __FILE__ ) . '/includes/WebStart.php' );
 }