Merge "Fix reset interwiki table between tests"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 14 Aug 2018 23:17:37 +0000 (23:17 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 14 Aug 2018 23:17:37 +0000 (23:17 +0000)
387 files changed:
.mailmap
.phpcs.xml
CREDITS
HISTORY
RELEASE-NOTES-1.32
autoload.php
composer.json
docs/export-demo.xml
docs/php-memcached/Documentation
includes/ActorMigration.php
includes/CategoriesRdf.php
includes/CategoryViewer.php
includes/CommentStore.php
includes/CommentStoreComment.php
includes/ContentSecurityPolicy.php
includes/DefaultSettings.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/Html.php
includes/Linker.php
includes/MWGrants.php
includes/MediaWiki.php
includes/MediaWikiServices.php
includes/Message.php
includes/OutputPage.php
includes/PHPVersionCheck.php
includes/Preferences.php
includes/PrefixSearch.php
includes/Revision.php
includes/ServiceWiring.php
includes/Storage/DerivedPageDataUpdater.php
includes/Storage/RevisionStore.php
includes/Storage/RevisionStoreFactory.php
includes/TemplateParser.php
includes/Title.php
includes/WebRequest.php
includes/WebRequestUpload.php
includes/Xml.php
includes/actions/Action.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/RevertAction.php
includes/api/ApiBase.php
includes/api/ApiHelp.php
includes/api/ApiMain.php
includes/api/ApiPageSet.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiResult.php
includes/api/ApiStashEdit.php
includes/api/i18n/ar.json
includes/api/i18n/he.json
includes/api/i18n/ko.json
includes/api/i18n/ksh.json
includes/api/i18n/ru.json
includes/api/i18n/zh-hant.json
includes/auth/AuthManager.php
includes/cache/HTMLFileCache.php
includes/cache/LinkBatch.php
includes/cache/MessageCache.php
includes/cache/localisation/LCStoreDB.php
includes/cache/localisation/LocalisationCache.php
includes/changetags/ChangeTags.php
includes/collation/Collation.php
includes/collation/IdentityCollation.php
includes/collation/NorthernSamiUppercaseCollation.php [deleted file]
includes/collation/NumericUppercaseCollation.php
includes/content/ContentHandler.php
includes/content/TextContent.php
includes/content/WikitextContent.php
includes/context/RequestContext.php
includes/db/DatabaseOracle.php
includes/debug/logger/LegacyLogger.php
includes/deferred/LinksUpdate.php
includes/deferred/SearchUpdate.php
includes/diff/DifferenceEngine.php
includes/export/XmlDumpWriter.php
includes/externalstore/ExternalStoreDB.php
includes/filerepo/FileRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/file/File.php
includes/filerepo/file/ForeignAPIFile.php
includes/filerepo/file/ForeignDBFile.php
includes/filerepo/file/LocalFile.php
includes/gallery/ImageGalleryBase.php
includes/gallery/TraditionalImageGallery.php
includes/htmlform/HTMLNestedFilterable.php
includes/htmlform/fields/HTMLButtonField.php
includes/htmlform/fields/HTMLTitleTextField.php
includes/import/WikiImporter.php
includes/installer/CliInstaller.php
includes/installer/MysqlUpdater.php
includes/installer/SqliteInstaller.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerName.php
includes/installer/i18n/ast.json
includes/installer/i18n/br.json
includes/installer/i18n/ca.json
includes/installer/i18n/da.json
includes/installer/i18n/ia.json
includes/installer/i18n/ja.json
includes/installer/i18n/nap.json
includes/installer/i18n/nl.json
includes/installer/i18n/sr-ec.json
includes/installer/i18n/tt-cyrl.json
includes/interwiki/ClassicInterwikiLookup.php
includes/jobqueue/JobQueueDB.php
includes/jobqueue/jobs/ThumbnailRenderJob.php
includes/libs/JavaScriptMinifier.php
includes/libs/MapCacheLRU.php
includes/libs/filebackend/FileBackend.php
includes/libs/objectcache/WANObjectCache.php
includes/libs/rdbms/TransactionProfiler.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/DatabaseMysqlBase.php
includes/libs/rdbms/database/DatabasePostgres.php
includes/libs/rdbms/database/DatabaseSqlite.php
includes/libs/rdbms/lbfactory/LBFactory.php
includes/libs/rdbms/loadbalancer/ILoadBalancer.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/logging/BlockLogFormatter.php
includes/logging/LogEventsList.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/logging/ProtectLogFormatter.php
includes/logging/RightsLogFormatter.php
includes/mail/EmailNotification.php
includes/media/FormatMetadata.php
includes/media/SVGMetadataExtractor.php
includes/page/Article.php
includes/page/ImageHistoryList.php
includes/page/WikiPage.php
includes/parser/CoreParserFunctions.php
includes/parser/DateFormatter.php
includes/parser/LinkHolderArray.php
includes/parser/Parser.php
includes/parser/ParserCache.php
includes/parser/ParserFactory.php [new file with mode: 0644]
includes/parser/ParserOptions.php
includes/parser/Sanitizer.php
includes/password/PasswordPolicyChecks.php
includes/preferences/DefaultPreferencesFactory.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderOOUIModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/search/SearchEngine.php
includes/search/SearchHighlighter.php
includes/search/SearchMssql.php
includes/search/SearchMySQL.php
includes/search/SearchOracle.php
includes/search/SearchResultSet.php
includes/search/SearchSqlite.php
includes/session/SessionBackend.php
includes/session/SessionProvider.php
includes/skins/Skin.php
includes/skins/SkinTemplate.php
includes/specialpage/ChangesListSpecialPage.php
includes/specialpage/PageQueryPage.php
includes/specialpage/QueryPage.php
includes/specialpage/SpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialAncientpages.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBooksources.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialExport.php
includes/specials/SpecialFewestrevisions.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialImport.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialListgrouprights.php
includes/specials/SpecialLockdb.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMostlinkedcategories.php
includes/specials/SpecialMyLanguage.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialPrefixindex.php
includes/specials/SpecialRandompage.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialSearch.php
includes/specials/SpecialUnwatchedpages.php
includes/specials/SpecialWantedcategories.php
includes/specials/formfields/Licenses.php
includes/specials/forms/UploadForm.php
includes/specials/helpers/ImportReporter.php
includes/specials/pagers/AllMessagesTablePager.php
includes/tidy/RemexCompatMunger.php
includes/title/NaiveForeignTitleFactory.php
includes/title/NaiveImportTitleFactory.php
includes/user/User.php
includes/utils/AutoloadGenerator.php
includes/widget/search/BasicSearchResultSetWidget.php
includes/widget/search/SearchFormWidget.php
languages/FakeConverter.php
languages/Language.php
languages/LanguageConverter.php
languages/classes/LanguageCrh.php
languages/classes/LanguageGan.php
languages/classes/LanguageKk.php
languages/classes/LanguageZh.php
languages/data/Names.php
languages/i18n/ar.json
languages/i18n/arc.json
languages/i18n/ast.json
languages/i18n/azb.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/cdo.json
languages/i18n/ckb.json
languages/i18n/cs.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/eu.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/frr.json
languages/i18n/gcr.json
languages/i18n/gl.json
languages/i18n/gu.json
languages/i18n/ha.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hr.json
languages/i18n/ht.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/io.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/kum.json
languages/i18n/lb.json
languages/i18n/mai.json
languages/i18n/mk.json
languages/i18n/mni.json
languages/i18n/mnw.json [new file with mode: 0644]
languages/i18n/mr.json
languages/i18n/my.json
languages/i18n/nb.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/pfl.json
languages/i18n/pl.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sat.json
languages/i18n/sd.json
languages/i18n/se.json
languages/i18n/sh.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sv.json
languages/i18n/sw.json
languages/i18n/ta.json
languages/i18n/te.json
languages/i18n/tg-cyrl.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/vi.json
languages/i18n/wa.json
languages/i18n/yue.json
languages/i18n/zgh.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesKo.php
languages/messages/MessagesMnw.php [new file with mode: 0644]
languages/messages/MessagesSat.php
languages/messages/MessagesSkr_arab.php
languages/messages/MessagesTg_cyrl.php
maintenance/Maintenance.php
maintenance/benchmarks/Benchmarker.php
maintenance/benchmarks/australia-untidy.html.gz [deleted file]
maintenance/benchmarks/benchmarkCSSMin.php
maintenance/benchmarks/benchmarkJavaScriptMinifier.php [new file with mode: 0644]
maintenance/benchmarks/benchmarkTidy.php
maintenance/benchmarks/benchmarkTitleValue.php [new file with mode: 0644]
maintenance/benchmarks/jsmin/jquery-3.2.1.js.gz [new file with mode: 0644]
maintenance/benchmarks/tidy/australia-untidy.html.gz [new file with mode: 0644]
maintenance/categoryChangesAsRdf.php
maintenance/cleanupCaps.php
maintenance/cleanupImages.php
maintenance/cleanupTitles.php
maintenance/cleanupWatchlist.php
maintenance/commandLine.inc
maintenance/convertLinks.php
maintenance/deleteEqualMessages.php
maintenance/dumpTextPass.php
maintenance/generateSitemap.php
maintenance/importDump.php
maintenance/jsduck/eg-iframe.html
maintenance/language/dumpMessages.php
maintenance/namespaceDupes.php
maintenance/orphans.php
maintenance/parse.php
maintenance/preprocessorFuzzTest.php
maintenance/rebuildImages.php
package.json
resources/Resources.php
resources/lib/easy-deflate/easydeflate.js
resources/lib/jquery.client/jquery.client.js
resources/lib/jquery/jquery.migrate.js
resources/src/jquery.tablesorter/jquery.tablesorter.js
resources/src/jquery/jquery.makeCollapsible.styles.less
resources/src/mediawiki.Title/Title.js
resources/src/mediawiki.base/mediawiki.base.js
resources/src/mediawiki.feedback/feedback.css
resources/src/mediawiki.legacy/commonPrint.css
resources/src/mediawiki.legacy/oldshared.css
resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
resources/src/mediawiki.skinning/content.css
resources/src/mediawiki.special.search.interwikiwidget.styles.less
resources/src/mediawiki.util.js
resources/src/startup/mediawiki.js
resources/src/startup/startup.js
tests/phpunit/MediaWikiLangTestCase.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/autoload.ide.php [deleted file]
tests/phpunit/data/categoriesrdf/change.sparql
tests/phpunit/data/categoriesrdf/delete.sparql
tests/phpunit/data/categoriesrdf/move.sparql
tests/phpunit/data/media/comma_separated_viewbox.svg [new file with mode: 0644]
tests/phpunit/includes/CommentStoreTest.php
tests/phpunit/includes/ContentSecurityPolicyTest.php
tests/phpunit/includes/EditPageTest.php
tests/phpunit/includes/ExportTest.php
tests/phpunit/includes/MediaWikiServicesTest.php
tests/phpunit/includes/MediaWikiVersionFetcherTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/RevisionDbTestBase.php
tests/phpunit/includes/ServiceWiringTest.php [new file with mode: 0644]
tests/phpunit/includes/Storage/DerivedPageDataUpdaterTest.php
tests/phpunit/includes/Storage/McrReadNewSchemaOverride.php
tests/phpunit/includes/Storage/McrWriteBothSchemaOverride.php
tests/phpunit/includes/Storage/PreMcrSchemaOverride.php
tests/phpunit/includes/TimeAdjustTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/api/ApiQueryDisabledTest.php [new file with mode: 0644]
tests/phpunit/includes/auth/AuthManagerTest.php
tests/phpunit/includes/cache/MessageCacheTest.php
tests/phpunit/includes/content/TextContentTest.php
tests/phpunit/includes/content/WikitextContentHandlerTest.php
tests/phpunit/includes/content/WikitextContentTest.php
tests/phpunit/includes/db/LoadBalancerTest.php
tests/phpunit/includes/libs/CSSMinTest.php
tests/phpunit/includes/libs/JavaScriptMinifierTest.php
tests/phpunit/includes/libs/MapCacheLRUTest.php
tests/phpunit/includes/libs/XhprofDataTest.php
tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php
tests/phpunit/includes/media/SVGMetadataExtractorTest.php
tests/phpunit/includes/parser/ParserFactoryTest.php [new file with mode: 0644]
tests/phpunit/includes/parser/ParserOptionsTest.php
tests/phpunit/includes/parser/ParserPreloadTest.php
tests/phpunit/includes/parser/PreprocessorTest.php
tests/phpunit/includes/parser/TagHooksTest.php
tests/phpunit/includes/password/PasswordTestCase.php
tests/phpunit/includes/preferences/DefaultPreferencesFactoryTest.php
tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php
tests/phpunit/includes/specials/SpecialMyLanguageTest.php
tests/phpunit/includes/tidy/RemexDriverTest.php
tests/phpunit/languages/LanguageConverterTest.php
tests/phpunit/maintenance/backup_LogTest.php
tests/phpunit/phpunit.php
tests/qunit/.eslintrc.json
tests/qunit/data/load.mock.php
tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.base.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.loader.test.js

index 6c31617..f199b65 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -24,6 +24,7 @@
 [BOT] jenkins-bot <jenkins-bot@gerrit.wikimedia.org>
 [BOT] jenkins-bot <jenkins-bot@gerrit.wikimedia.org> <jenkins-bot@wikimedia.org>
 [BOT] Translation updater bot <l10n-bot@translatewiki.net>
+[BOT] libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
 Aaron Schulz <aschulz@wikimedia.org>
 Aaron Schulz <aschulz@wikimedia.org> <aaron@users.mediawiki.org>
 Adam Roses Wight <awight@wikimedia.org>
index 2a34154..944c3e2 100644 (file)
@@ -22,7 +22,6 @@
                <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment" />
                <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.SingleSpaceBeforeSingleLineComment" />
                <exclude name="Squiz.Scope.MethodScope.Missing" />
-               <exclude name="Squiz.Scope.MemberVarScope.Missing" />
        </rule>
        <rule ref="MediaWiki.NamingConventions.PrefixedGlobalFunctions">
                <properties>
diff --git a/CREDITS b/CREDITS
index d9bdc3d..5e1c6ae 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -94,6 +94,7 @@ The following list can be found parsed under Special:Version/Credits -->
 * Benny Situ
 * Bergi
 * Bertrand Grondin
+* Bill Pirkle
 * Bill Traynor
 * Billinghurst
 * billm
@@ -140,6 +141,7 @@ The following list can be found parsed under Special:Version/Credits -->
 * Conrad Irwin
 * Cormac Parle
 * cryptocoryne
+* Daimona Eaytoy
 * Dan Barrett
 * Dan Collins
 * Dan Duvall
@@ -191,6 +193,7 @@ The following list can be found parsed under Special:Version/Credits -->
 * dr0ptp4kt
 * Ebrahim Byagowi
 * Ed Sanders
+* Ed Schouten
 * Eddie Greiner-Petter
 * Edward Chernenko
 * Edward Z. Yang
@@ -250,6 +253,7 @@ The following list can be found parsed under Special:Version/Credits -->
 * glaisher
 * golopot
 * gopavasanth
+* Greg Grossmeier
 * Greg Maxwell
 * Greg Sabino Mullane
 * Gregory Szorc
@@ -257,6 +261,7 @@ The following list can be found parsed under Special:Version/Credits -->
 * Guillaume Blanchard
 * Guy Van den Broeck
 * Guycn2
+* Hagar Shilo
 * Haikal Izzuddin
 * HakanIST
 * Happy-melon
@@ -285,6 +290,7 @@ The following list can be found parsed under Special:Version/Credits -->
 * Jacob Clark
 * jagori
 * Jaime Crespo
+* Jakob Warkotsch
 * Jakub Vrana
 * James D. Forrester
 * James Earl Douglas
@@ -356,6 +362,7 @@ The following list can be found parsed under Special:Version/Credits -->
 * kipod
 * kishanio
 * konarak
+* Kosta Harlan
 * krishna keshav
 * Krzysztof Krzyzaniak
 * Krzysztof Zbudniewek
@@ -519,7 +526,9 @@ The following list can be found parsed under Special:Version/Credits -->
 * OverlordQ
 * Owen Davis
 * Paa Kwesi Imbeah
+* Pablo Grass
 * paladox
+* Pankajeshkr
 * Patricio Molina
 * Patrick Reilly
 * Patrick Westerhoff
@@ -592,6 +601,7 @@ The following list can be found parsed under Special:Version/Credits -->
 * Roman Tsukanov
 * Rotem Liss
 * Rowan Collins
+* runntb
 * Russ Nelson
 * Russell Blau
 * Rusty Burchfield
@@ -648,17 +658,21 @@ The following list can be found parsed under Special:Version/Credits -->
 * Stephan Muggli
 * Stephane Bisson
 * Stephen Liang
+* Stephen Niedzielski
 * Steve Sanbeg
 * Steven Roddis
 * Steven Walling
 * Str4nd
+* Strainu
 * Subin Siby
 * Subramanya Sastry
 * Sumit Asthana
+* superyetkin
 * Suriyaa Kudo
 * svip
 * Szymon Świerkosz
 * T.D. Corell
+* tacsipacsi
 * Tarquin
 * TerraCodes
 * Thalia Chan
diff --git a/HISTORY b/HISTORY
index 7540af3..2dc94ba 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -4730,7 +4730,7 @@ This is a maintenance release of the MediaWiki 1.22 branch.
 
 === Changes since 1.22.9 ===
 * (bug 64970) Fix support for blobs on DatabaseOracle::update
-* (bug 60719) In MediaWiki 1.22, the job queue execution on each page request was changed (Gerrit change 59797) so, instead of executing the job inside the same PHP process that's rendering the page, a new PHP cli command is spawned to execute runJobs.php in the background. It will only work if $wgPhpCli is set to an actual path or safe mode is off, otherwise, the old method will be used. https://www.mediawiki.org/wiki/Manual:Job_queue#Changes_introduced_in_MediaWiki_1.22 for more infomation. This change was in earlier releases of 1.22 but was not noted here until now.
+* (bug 60719) In MediaWiki 1.22, the job queue execution on each page request was changed (Gerrit change 59797) so, instead of executing the job inside the same PHP process that's rendering the page, a new PHP cli command is spawned to execute runJobs.php in the background. It will only work if $wgPhpCli is set to an actual path or safe mode is off, otherwise, the old method will be used. https://www.mediawiki.org/wiki/Manual:Job_queue#Changes_introduced_in_MediaWiki_1.22 for more information. This change was in earlier releases of 1.22 but was not noted here until now.
 
 == MediaWiki 1.22.9 ==
 This is a security and maintenance release of the MediaWiki 1.22 branch.
index 00a6ce9..3c26f58 100644 (file)
@@ -80,9 +80,11 @@ production.
 * Updated mediawiki/mediawiki-codesniffer from v20.0.0 to v21.0.0.
 * Updated composer/spdx-licenses from 1.3.0 to 1.4.0.
 * Updated jquery.i18n from 1.0.4 to 1.0.5.
+* Updated wikimedia/timestamp from 1.0.0 to 2.0.0.
+* Updated wikimedia/remex-html from 1.0.3 to 2.0.0.
 
 ==== New external libraries ====
-* Added wikimedia/xmp-reader 0.5.1
+* Added wikimedia/xmp-reader 0.6.0
 * …
 
 ==== Removed and replaced external libraries ====
@@ -151,6 +153,7 @@ because of Phabricator reports.
 * (T137491) Added language support for Standard Moroccan Amazigh (zgh).
 * (T198132) Added language support for Manipuri (mni).
 * (T201276) Added language support for Western Armenian (hyw).
+* (T201583) Added language support for Mon (mnw).
 
 === Breaking changes in 1.32 ===
 * $wgRequestTime, deprecated in 1.25, was removed. Use
@@ -241,6 +244,8 @@ because of Phabricator reports.
 * MagicWord::clearCache() has been removed.  Instead, create a new
   MagicWordFactory, such as by calling
   resetServiceForTesting( 'MagicWordFactory' ) on a MediaWikiServices.
+* mw.util.init() has been removed. This function is not needed anymore and was
+  a no-op function since 1.30.
 
 === Deprecations in 1.32 ===
 * Use of a StartProfiler.php file is deprecated in favour of placing
index 38f6ba9..1c1eeef 100644 (file)
@@ -195,11 +195,13 @@ $wgAutoloadLocalClasses = [
        'BenchmarkDeleteTruncate' => __DIR__ . '/maintenance/benchmarks/bench_delete_truncate.php',
        'BenchmarkHooks' => __DIR__ . '/maintenance/benchmarks/benchmarkHooks.php',
        'BenchmarkJSMinPlus' => __DIR__ . '/maintenance/benchmarks/benchmarkJSMinPlus.php',
+       'BenchmarkJavaScriptMinifier' => __DIR__ . '/maintenance/benchmarks/benchmarkJavaScriptMinifier.php',
        'BenchmarkLruHash' => __DIR__ . '/maintenance/benchmarks/benchmarkLruHash.php',
        'BenchmarkParse' => __DIR__ . '/maintenance/benchmarks/benchmarkParse.php',
        'BenchmarkPurge' => __DIR__ . '/maintenance/benchmarks/benchmarkPurge.php',
        'BenchmarkSanitizer' => __DIR__ . '/maintenance/benchmarks/benchmarkSanitizer.php',
        'BenchmarkTidy' => __DIR__ . '/maintenance/benchmarks/benchmarkTidy.php',
+       'BenchmarkTitleValue' => __DIR__ . '/maintenance/benchmarks/benchmarkTitleValue.php',
        'Benchmarker' => __DIR__ . '/maintenance/benchmarks/Benchmarker.php',
        'BitmapHandler' => __DIR__ . '/includes/media/BitmapHandler.php',
        'BitmapHandler_ClientOnly' => __DIR__ . '/includes/media/BitmapHandler_ClientOnly.php',
@@ -1012,7 +1014,6 @@ $wgAutoloadLocalClasses = [
        'NewUsersLogFormatter' => __DIR__ . '/includes/logging/NewUsersLogFormatter.php',
        'NoWriteWatchedItemStore' => __DIR__ . '/includes/watcheditem/NoWriteWatchedItemStore.php',
        'NolinesImageGallery' => __DIR__ . '/includes/gallery/NolinesImageGallery.php',
-       'NorthernSamiUppercaseCollation' => __DIR__ . '/includes/collation/NorthernSamiUppercaseCollation.php',
        'NotRecursiveIterator' => __DIR__ . '/includes/libs/iterators/NotRecursiveIterator.php',
        'NukeNS' => __DIR__ . '/maintenance/nukeNS.php',
        'NukePage' => __DIR__ . '/maintenance/nukePage.php',
@@ -1079,6 +1080,7 @@ $wgAutoloadLocalClasses = [
        'Parser' => __DIR__ . '/includes/parser/Parser.php',
        'ParserCache' => __DIR__ . '/includes/parser/ParserCache.php',
        'ParserDiffTest' => __DIR__ . '/includes/parser/ParserDiffTest.php',
+       'ParserFactory' => __DIR__ . '/includes/parser/ParserFactory.php',
        'ParserOptions' => __DIR__ . '/includes/parser/ParserOptions.php',
        'ParserOutput' => __DIR__ . '/includes/parser/ParserOutput.php',
        'ParsoidVirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/ParsoidVirtualRESTService.php',
index 38a6b93..6b71a34 100644 (file)
                "wikimedia/php-session-serializer": "1.0.6",
                "wikimedia/purtle": "1.0.7",
                "wikimedia/relpath": "2.1.1",
-               "wikimedia/remex-html": "1.0.3",
+               "wikimedia/remex-html": "2.0.0",
                "wikimedia/running-stat": "1.2.1",
                "wikimedia/scoped-callback": "2.0.0",
                "wikimedia/utfnormal": "2.0.0",
-               "wikimedia/timestamp": "1.0.0",
+               "wikimedia/timestamp": "2.0.0",
                "wikimedia/wait-condition-loop": "1.0.1",
                "wikimedia/wrappedstring": "3.0.1",
-               "wikimedia/xmp-reader": "0.5.1",
+               "wikimedia/xmp-reader": "0.6.0",
                "zordius/lightncandy": "0.23"
        },
        "require-dev": {
index 93b237f..2e2e459 100644 (file)
@@ -27,7 +27,7 @@
       <namespace key="2" case="first-letter">User</namespace>
       <namespace key="3" case="first-letter">User talk</namespace>
       <namespace key="4" case="first-letter">DemoWiki</namespace>
-      <namespace key="5" case="first-letter">DemoWIki talk</namespace>
+      <namespace key="5" case="first-letter">DemoWiki talk</namespace>
       <namespace key="6" case="first-letter">File</namespace>
       <namespace key="7" case="first-letter">File talk</namespace>
       <namespace key="8" case="first-letter">MediaWiki</namespace>
index 32e340a..6a0dce6 100644 (file)
@@ -130,7 +130,7 @@ MemCachedClient::set_debug($do_debug);
 MemCachedClient::forget_dead_hosts();
 
 // When a function returns FALSE, an error code is set.
-// This funtion will return the error code.
+// This function will return the error code.
 // See error_string()
 // returns last error code set
 MemCachedClient::error()
index 161c7a9..51dfa60 100644 (file)
@@ -220,7 +220,7 @@ class ActorMigration {
         * @param UserIdentity $user User to set in the update
         * @return array with two values:
         *  - array to merge into `$values` to `IDatabase->update()` or `$a` to `IDatabase->insert()`
-        *  - callback to call with the the primary key for the main table insert
+        *  - callback to call with the primary key for the main table insert
         *    and extra fields needed for the temp table.
         */
        public function getInsertValuesWithTempTable( IDatabase $dbw, $key, UserIdentity $user ) {
index fc296d4..eb601a2 100644 (file)
@@ -85,6 +85,10 @@ class CategoriesRdf {
         * @param int $subcategories Subcategory count
         */
        public function writeCategoryData( $categoryName, $isHidden, $pages, $subcategories ) {
+               if ( $pages < 0 ) {
+                       // Bugfix for T201119
+                       $pages = 0;
+               }
                $title = Title::makeTitle( NS_CATEGORY, $categoryName );
                $this->rdfWriter->about( $this->titleToUrl( $title ) )
                        ->say( 'a' )
index 79ab8b4..46a1473 100644 (file)
@@ -221,8 +221,6 @@ class CategoryViewer extends ContextSource {
         * @return string
         */
        function getSubcategorySortChar( $title, $sortkey ) {
-               global $wgContLang;
-
                if ( $title->getPrefixedText() == $sortkey ) {
                        $word = $title->getDBkey();
                } else {
@@ -231,7 +229,7 @@ class CategoryViewer extends ContextSource {
 
                $firstChar = $this->collation->getFirstLetter( $word );
 
-               return $wgContLang->convert( $firstChar );
+               return MediaWikiServices::getInstance()->getContentLanguage()->convert( $firstChar );
        }
 
        /**
@@ -242,7 +240,6 @@ class CategoryViewer extends ContextSource {
         * @param bool $isRedirect
         */
        function addImage( Title $title, $sortkey, $pageLength, $isRedirect = false ) {
-               global $wgContLang;
                if ( $this->showGallery ) {
                        $flip = $this->flip['file'];
                        if ( $flip ) {
@@ -253,8 +250,8 @@ class CategoryViewer extends ContextSource {
                } else {
                        $this->imgsNoGallery[] = $this->generateLink( 'image', $title, $isRedirect );
 
-                       $this->imgsNoGallery_start_char[] = $wgContLang->convert(
-                               $this->collation->getFirstLetter( $sortkey ) );
+                       $this->imgsNoGallery_start_char[] = MediaWikiServices::getInstance()->
+                               getContentLanguage()->convert( $this->collation->getFirstLetter( $sortkey ) );
                }
        }
 
@@ -266,12 +263,10 @@ class CategoryViewer extends ContextSource {
         * @param bool $isRedirect
         */
        function addPage( $title, $sortkey, $pageLength, $isRedirect = false ) {
-               global $wgContLang;
-
                $this->articles[] = $this->generateLink( 'page', $title, $isRedirect );
 
-               $this->articles_start_char[] = $wgContLang->convert(
-                       $this->collation->getFirstLetter( $sortkey ) );
+               $this->articles_start_char[] = MediaWikiServices::getInstance()->
+                       getContentLanguage()->convert( $this->collation->getFirstLetter( $sortkey ) );
        }
 
        function finaliseCategoryState() {
index d03a00e..bf3e3d6 100644 (file)
@@ -98,7 +98,7 @@ class CommentStore {
 
        /**
         * @param Language $lang Language to use for comment truncation. Defaults
-        *  to $wgContLang.
+        *  to content language.
         * @param int $migrationStage One of the MIGRATION_* constants
         */
        public function __construct( Language $lang, $migrationStage ) {
@@ -114,10 +114,11 @@ class CommentStore {
         * @return CommentStore
         */
        public static function newKey( $key ) {
-               global $wgCommentTableSchemaMigrationStage, $wgContLang;
+               global $wgCommentTableSchemaMigrationStage;
                // TODO uncomment once not used in extensions
                // wfDeprecated( __METHOD__, '1.31' );
-               $store = new CommentStore( $wgContLang, $wgCommentTableSchemaMigrationStage );
+               $store = new CommentStore( MediaWikiServices::getInstance()->getContentLanguage(),
+                       $wgCommentTableSchemaMigrationStage );
                $store->key = $key;
                return $store;
        }
index 7ed86d6..af866cd 100644 (file)
@@ -19,6 +19,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * CommentStoreComment represents a comment stored by CommentStore. The fields
@@ -63,8 +64,6 @@ class CommentStoreComment {
         * @return CommentStoreComment
         */
        public static function newUnsavedComment( $comment, array $data = null ) {
-               global $wgContLang;
-
                if ( $comment instanceof CommentStoreComment ) {
                        return $comment;
                }
@@ -79,7 +78,8 @@ class CommentStoreComment {
 
                if ( $comment instanceof Message ) {
                        $message = clone $comment;
-                       $text = $message->inLanguage( $wgContLang ) // Avoid $wgForceUIMsgAsContentMsg
+                       // Avoid $wgForceUIMsgAsContentMsg
+                       $text = $message->inLanguage( MediaWikiServices::getInstance()->getContentLanguage() )
                                ->setInterfaceMessageFlag( true )
                                ->text();
                        return new CommentStoreComment( null, $text, $message, $data );
index 91117f4..6216046 100644 (file)
@@ -27,8 +27,6 @@
 class ContentSecurityPolicy {
        const REPORT_ONLY_MODE = 1;
        const FULL_MODE = 2;
-       /** Used for meta tag. Does not include report urls or nonce sources */
-       const FULL_MODE_RESTRICTED = 3;
 
        /** @var string The nonce to use for inline scripts (from OutputPage) */
        private $nonce;
@@ -65,20 +63,6 @@ class ContentSecurityPolicy {
                }
        }
 
-       /**
-        * Return the meta header to use for after load restricted mode
-        *
-        * This should restrict browsers that don't support nonce-sources.
-        * Idea stolen from
-        * https://blogs.dropbox.com/tech/2015/09/unsafe-inline-and-nonce-deployment/
-        *
-        * @param array $csp CSP configuration
-        * @return string Content for meta tag
-        */
-       public function getMetaHeader( $csp ) {
-               return $this->makeCSPDirectives( $csp, self::FULL_MODE_RESTRICTED );
-       }
-
        /**
         * Send CSP headers based on wiki config
         *
@@ -100,39 +84,13 @@ class ContentSecurityPolicy {
                $csp->sendCSPHeader( $cspConfig, self::FULL_MODE );
                $csp->sendCSPHeader( $cspConfigReportOnly, self::REPORT_ONLY_MODE );
 
-               // Include <meta> header which increases security level after initial load.
-               // This helps mitigate attacks on browsers not supporting CSP2. It also
-               // helps mitigate attacks due to the shared nonce that non-logged in users
-               // get due to varnish cache.
-               // Unclear if this is the best place to insert the meta tag, or if
-               // it should be in a RL module. I figure its best to do this as early
-               // as possible.
-               // FIXME: Needs testing to see if this actually works properly
-               $metaHeader = $csp->getMetaHeader( $cspConfig );
-               if ( $metaHeader ) {
-                       $context->getOutput()->addScript(
-                               ResourceLoader::makeInlineScript(
-                                       $csp->makeMetaInsertScript(
-                                               $metaHeader
-                                       ),
-                                       $out->getCSPNonce()
-                               )
-                       );
-               }
-       }
-
-       /**
-        * Makes javascript to insert a meta CSP header after page load
-        *
-        * @see https://blogs.dropbox.com/tech/2015/09/unsafe-inline-and-nonce-deployment/
-        * @param string $metaContents content of meta tag
-        * @return string JS for including in page
-        */
-       private function makeMetaInsertScript( $metaContents ) {
-               return "$('\\x3Cmeta http-equiv=\"Content-Security-Policy\"\\x3E')" .
-                       '.attr("content",' .
-                       Xml::encodeJsVar( $metaContents ) .
-                       ').prependTo($("head"))';
+               // This used to insert a <meta> tag here, per advice at
+               // https://blogs.dropbox.com/tech/2015/09/unsafe-inline-and-nonce-deployment/
+               // The goal was to prevent nonce from working after the page hit onready,
+               // This would help in old browsers that didn't support nonces, and
+               // also assist for varnish-cached pages which repeat nonces.
+               // However, this is incompatible with how resource loader storage works
+               // via mw.domEval() so it was removed.
        }
 
        /**
@@ -140,7 +98,6 @@ class ContentSecurityPolicy {
         *
         * @param int $reportOnly Either self::REPORT_ONLY_MODE or self::FULL_MODE
         * @return string Name of http header
-        * @throws UnexpectedValueException if you feed it self::FULL_MODE_RESTRICTED.
         */
        private function getHeaderName( $reportOnly ) {
                if ( $reportOnly === self::REPORT_ONLY_MODE ) {
@@ -155,7 +112,7 @@ class ContentSecurityPolicy {
         * Determine what CSP policies to set for this page
         *
         * @param array|bool $config Policy configuration (Either $wgCSPHeader or $wgCSPReportOnlyHeader)
-        * @param int $mode self::REPORT_ONLY_MODE, self::FULL_MODE or Self::FULL_MODE_RESTRICTED
+        * @param int $mode self::REPORT_ONLY_MODE, self::FULL_MODE
         * @return string Policy directives, or empty string for no policy.
         */
        private function makeCSPDirectives( $policyConfig, $mode ) {
@@ -182,13 +139,10 @@ class ContentSecurityPolicy {
                $cssSrc = false;
                $imgSrc = false;
                $scriptSrc = [ "'unsafe-eval'", "'self'" ];
-               if (
-                       $mode !== self::FULL_MODE_RESTRICTED &&
-                       ( !isset( $policyConfig['useNonces'] ) || $policyConfig['useNonces'] )
-               ) {
-                       $nonceSrc = "'nonce-" . $this->nonce . "'";
-                       $scriptSrc[] = $nonceSrc;
+               if ( !isset( $policyConfig['useNonces'] ) || $policyConfig['useNonces'] ) {
+                       $scriptSrc[] = "'nonce-" . $this->nonce . "'";
                }
+
                $scriptSrc = array_merge( $scriptSrc, $additionalSelfUrlsScript );
                if ( isset( $policyConfig['script-src'] )
                        && is_array( $policyConfig['script-src'] )
@@ -200,7 +154,6 @@ class ContentSecurityPolicy {
                // Note: default on if unspecified.
                if ( ( !isset( $policyConfig['unsafeFallback'] )
                        || $policyConfig['unsafeFallback'] )
-                       && $mode !== self::FULL_MODE_RESTRICTED
                ) {
                        // unsafe-inline should be ignored on browsers
                        // that support 'nonce-foo' sources.
@@ -247,10 +200,7 @@ class ContentSecurityPolicy {
                        $cssSrc = array_merge( $defaultSrc, [ "'unsafe-inline'" ] );
                }
 
-               if ( $mode === self::FULL_MODE_RESTRICTED ) {
-                       // report-uri disallowed in <meta> tags.
-                       $reportUri = false;
-               } elseif ( isset( $policyConfig['report-uri'] ) && $policyConfig['report-uri'] !== true ) {
+               if ( isset( $policyConfig['report-uri'] ) && $policyConfig['report-uri'] !== true ) {
                        if ( $policyConfig['report-uri'] === false ) {
                                $reportUri = false;
                        } else {
@@ -311,14 +261,11 @@ class ContentSecurityPolicy {
        /**
         * Get the default report uri.
         *
-        * @param int $mode self::*_MODE constant. Do not use with self::FULL_MODE_RESTRICTED
+        * @param int $mode self::*_MODE constant.
         * @return string The URI to send reports to.
         * @throws UnexpectedValueException if given invalid mode.
         */
        private function getReportUri( $mode ) {
-               if ( $mode === self::FULL_MODE_RESTRICTED ) {
-                       throw new UnexpectedValueException( $mode );
-               }
                $apiArguments = [
                        'action' => 'cspreport',
                        'format' => 'json'
index 27769f9..0ed476e 100644 (file)
@@ -6189,24 +6189,28 @@ $wgTrxProfilerLimits = [
        'GET' => [
                'masterConns' => 0,
                'writes' => 0,
-               'readQueryTime' => 5
+               'readQueryTime' => 5,
+               'readQueryRows' => 10000
        ],
        // HTTP POST requests.
        // Master reads and writes will happen for a subset of these.
        'POST' => [
                'readQueryTime' => 5,
                'writeQueryTime' => 1,
+               'readQueryRows' => 100000,
                'maxAffected' => 1000
        ],
        'POST-nonwrite' => [
                'masterConns' => 0,
                'writes' => 0,
-               'readQueryTime' => 5
+               'readQueryTime' => 5,
+               'readQueryRows' => 10000
        ],
        // Deferred updates that run after HTTP response is sent for GET requests
        'PostSend-GET' => [
                'readQueryTime' => 5,
                'writeQueryTime' => 1,
+               'readQueryRows' => 10000,
                'maxAffected' => 1000,
                // Log master queries under the post-send entry point as they are discouraged
                'masterConns' => 0,
@@ -6216,12 +6220,14 @@ $wgTrxProfilerLimits = [
        'PostSend-POST' => [
                'readQueryTime' => 5,
                'writeQueryTime' => 1,
+               'readQueryRows' => 100000,
                'maxAffected' => 1000
        ],
        // Background job runner
        'JobRunner' => [
                'readQueryTime' => 30,
                'writeQueryTime' => 5,
+               'readQueryRows' => 100000,
                'maxAffected' => 500 // ballpark of $wgUpdateRowsPerQuery
        ],
        // Command-line scripts
index 127946c..7f209d4 100644 (file)
@@ -1171,8 +1171,6 @@ class EditPage {
         * @since 1.21
         */
        protected function getContentObject( $def_content = null ) {
-               global $wgContLang;
-
                $content = false;
 
                $user = $this->context->getUser();
@@ -1235,7 +1233,8 @@ class EditPage {
 
                                                if ( $undoMsg === null ) {
                                                        $oldContent = $this->page->getContent( Revision::RAW );
-                                                       $popts = ParserOptions::newFromUserAndLang( $user, $wgContLang );
+                                                       $popts = ParserOptions::newFromUserAndLang(
+                                                               $user, MediaWikiServices::getInstance()->getContentLanguage() );
                                                        $newContent = $content->preSaveTransform( $this->mTitle, $user, $popts );
                                                        if ( $newContent->getModel() !== $oldContent->getModel() ) {
                                                                // The undo may change content
@@ -3461,8 +3460,6 @@ ERROR;
         * save and then make a comparison.
         */
        public function showDiff() {
-               global $wgContLang;
-
                $oldtitlemsg = 'currentrev';
                # if message does not exist, show diff against the preloaded default
                if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI && !$this->mTitle->exists() ) {
@@ -3492,7 +3489,8 @@ ERROR;
                        Hooks::run( 'EditPageGetDiffContent', [ $this, &$newContent ] );
 
                        $user = $this->context->getUser();
-                       $popts = ParserOptions::newFromUserAndLang( $user, $wgContLang );
+                       $popts = ParserOptions::newFromUserAndLang( $user,
+                               MediaWikiServices::getInstance()->getContentLanguage() );
                        $newContent = $newContent->preSaveTransform( $this->mTitle, $user, $popts );
                }
 
@@ -3603,10 +3601,10 @@ ERROR;
         * Get the Limit report for page previews
         *
         * @since 1.22
-        * @param ParserOutput $output ParserOutput object from the parse
+        * @param ParserOutput|null $output ParserOutput object from the parse
         * @return string HTML
         */
-       public static function getPreviewLimitReport( $output ) {
+       public static function getPreviewLimitReport( ParserOutput $output = null ) {
                global $wgLang;
 
                if ( !$output || !$output->getLimitReportData() ) {
@@ -4047,8 +4045,7 @@ ERROR;
         * @return string
         */
        public static function getEditToolbar( $title = null ) {
-               global $wgContLang, $wgOut;
-               global $wgEnableUploads, $wgForeignFileRepos;
+               global $wgOut, $wgEnableUploads, $wgForeignFileRepos;
 
                $imagesAvailable = $wgEnableUploads || count( $wgForeignFileRepos );
                $showSignature = true;
@@ -4056,6 +4053,8 @@ ERROR;
                        $showSignature = MWNamespace::wantSignatures( $title->getNamespace() );
                }
 
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+
                /**
                 * $toolarray is an array of arrays each of which includes the
                 * opening tag, the closing tag, optionally a sample text that is
@@ -4103,14 +4102,14 @@ ERROR;
                        ],
                        $imagesAvailable ? [
                                'id'     => 'mw-editbutton-image',
-                               'open'   => '[[' . $wgContLang->getNsText( NS_FILE ) . ':',
+                               'open'   => '[[' . $contLang->getNsText( NS_FILE ) . ':',
                                'close'  => ']]',
                                'sample' => wfMessage( 'image_sample' )->text(),
                                'tip'    => wfMessage( 'image_tip' )->text(),
                        ] : false,
                        $imagesAvailable ? [
                                'id'     => 'mw-editbutton-media',
-                               'open'   => '[[' . $wgContLang->getNsText( NS_MEDIA ) . ':',
+                               'open'   => '[[' . $contLang->getNsText( NS_MEDIA ) . ':',
                                'close'  => ']]',
                                'sample' => wfMessage( 'media_sample' )->text(),
                                'tip'    => wfMessage( 'media_tip' )->text(),
@@ -4138,7 +4137,7 @@ ERROR;
                        ]
                ];
 
-               $script = 'mw.loader.using("mediawiki.toolbar", function () {';
+               $script = '';
                foreach ( $toolarray as $tool ) {
                        if ( !$tool ) {
                                continue;
@@ -4165,15 +4164,16 @@ ERROR;
                        );
                }
 
-               $script .= '});';
-
                $toolbar = '<div id="toolbar"></div>';
 
                if ( Hooks::run( 'EditPageBeforeEditToolbar', [ &$toolbar ] ) ) {
                        // Only add the old toolbar cruft to the page payload if the toolbar has not
                        // been over-written by a hook caller
                        $nonce = $wgOut->getCSPNonce();
-                       $wgOut->addScript( ResourceLoader::makeInlineScript( $script, $nonce ) );
+                       $wgOut->addScript( Html::inlineScript(
+                               ResourceLoader::makeInlineCodeWithModule( 'mediawiki.toolbar', $script ),
+                               $nonce
+                       ) );
                };
 
                return $toolbar;
index 4a09b9c..567db85 100644 (file)
@@ -1308,11 +1308,11 @@ function wfGetLangObj( $langcode = false ) {
                return $langcode;
        }
 
-       global $wgContLang, $wgLanguageCode;
+       global $wgLanguageCode;
        if ( $langcode === true || $langcode === $wgLanguageCode ) {
                # $langcode is the language code of the wikis content language object.
                # or it is a boolean and value is true
-               return $wgContLang;
+               return MediaWikiServices::getInstance()->getContentLanguage();
        }
 
        global $wgLang;
@@ -1330,7 +1330,7 @@ function wfGetLangObj( $langcode = false ) {
 
        # $langcode is a string, but not a valid language code; use content language.
        wfDebug( "Invalid language code passed to wfGetLangObj, falling back to content language.\n" );
-       return $wgContLang;
+       return MediaWikiServices::getInstance()->getContentLanguage();
 }
 
 /**
index ad0130b..32375c1 100644 (file)
@@ -22,6 +22,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * This class is a collection of static functions that serve two purposes:
@@ -824,8 +825,6 @@ class Html {
         * @return array
         */
        public static function namespaceSelectorOptions( array $params = [] ) {
-               global $wgContLang;
-
                $options = [];
 
                if ( !isset( $params['exclude'] ) || !is_array( $params['exclude'] ) ) {
@@ -838,7 +837,8 @@ class Html {
                        $options[$params['all']] = wfMessage( 'namespacesall' )->text();
                }
                // Add all namespaces as options (in the content language)
-               $options += $wgContLang->getFormattedNamespaces();
+               $options +=
+                       MediaWikiServices::getInstance()->getContentLanguage()->getFormattedNamespaces();
 
                $optionsOut = [];
                // Filter out namespaces below 0 and massage labels
@@ -851,7 +851,8 @@ class Html {
                                // main we don't use "" but the user message describing it (e.g. "(Main)" or "(Article)")
                                $nsName = wfMessage( 'blanknamespace' )->text();
                        } elseif ( is_int( $nsId ) ) {
-                               $nsName = $wgContLang->convertNamespace( $nsId );
+                               $nsName = MediaWikiServices::getInstance()->getContentLanguage()->
+                                       convertNamespace( $nsId );
                        }
                        $optionsOut[$nsId] = $nsName;
                }
index f160fd6..56e377d 100644 (file)
@@ -184,14 +184,13 @@ class Linker {
         * @return string
         */
        public static function getInvalidTitleDescription( IContextSource $context, $namespace, $title ) {
-               global $wgContLang;
-
                // First we check whether the namespace exists or not.
                if ( MWNamespace::exists( $namespace ) ) {
                        if ( $namespace == NS_MAIN ) {
                                $name = $context->msg( 'blanknamespace' )->text();
                        } else {
-                               $name = $wgContLang->getFormattedNsText( $namespace );
+                               $name = MediaWikiServices::getInstance()->getContentLanguage()->
+                                       getFormattedNsText( $namespace );
                        }
                        return $context->msg( 'invalidtitle-knownnamespace', $namespace, $name, $title )->text();
                } else {
@@ -1227,10 +1226,11 @@ class Linker {
                                ([^[]*) # 3. link trail (the text up until the next link)
                        /x',
                        function ( $match ) use ( $title, $local, $wikiId ) {
-                               global $wgContLang;
-
                                $medians = '(?:' . preg_quote( MWNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|';
-                               $medians .= preg_quote( $wgContLang->getNsText( NS_MEDIA ), '/' ) . '):';
+                               $medians .= preg_quote(
+                                       MediaWikiServices::getInstance()->getContentLanguage()->getNsText( NS_MEDIA ),
+                                       '/'
+                               ) . '):';
 
                                $comment = $match[0];
 
@@ -1264,7 +1264,11 @@ class Linker {
                                                $match[1] = substr( $match[1], 1 );
                                        }
                                        if ( $match[1] !== false && $match[1] !== '' ) {
-                                               if ( preg_match( $wgContLang->linkTrail(), $match[3], $submatch ) ) {
+                                               if ( preg_match(
+                                                       MediaWikiServices::getInstance()->getContentLanguage()->linkTrail(),
+                                                       $match[3],
+                                                       $submatch
+                                               ) ) {
                                                        $trail = $submatch[1];
                                                } else {
                                                        $trail = "";
@@ -1655,8 +1659,7 @@ class Linker {
         * @return array
         */
        static function splitTrail( $trail ) {
-               global $wgContLang;
-               $regex = $wgContLang->linkTrail();
+               $regex = MediaWikiServices::getInstance()->getContentLanguage()->linkTrail();
                $inside = '';
                if ( $trail !== '' ) {
                        $m = [];
index 769e5b4..3079c65 100644 (file)
@@ -193,12 +193,10 @@ class MWGrants {
         * @return string Wikitext
         */
        public static function getGrantsWikiText( $grantsFilter, $lang = null ) {
-               global $wgContLang;
-
                if ( is_string( $lang ) ) {
                        $lang = Language::factory( $lang );
                } elseif ( $lang === null ) {
-                       $lang = $wgContLang;
+                       $lang = MediaWikiServices::getInstance()->getContentLanguage();
                }
 
                $s = '';
index a67cb9b..3620047 100644 (file)
@@ -66,8 +66,6 @@ class MediaWiki {
         * @return Title Title object to be $wgTitle
         */
        private function parseTitle() {
-               global $wgContLang;
-
                $request = $this->context->getRequest();
                $curid = $request->getInt( 'curid' );
                $title = $request->getVal( 'title' );
@@ -88,12 +86,13 @@ class MediaWiki {
                        if ( !is_null( $ret ) && $ret->getNamespace() == NS_MEDIA ) {
                                $ret = Title::makeTitle( NS_FILE, $ret->getDBkey() );
                        }
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                        // Check variant links so that interwiki links don't have to worry
                        // about the possible different language variants
-                       if ( $wgContLang->hasVariants()
-                               && !is_null( $ret ) && $ret->getArticleID() == 0
+                       if (
+                               $contLang->hasVariants() && !is_null( $ret ) && $ret->getArticleID() == 0
                        ) {
-                               $wgContLang->findVariantLink( $title, $ret );
+                               $contLang->findVariantLink( $title, $ret );
                        }
                }
 
index fd9b472..326c12c 100644 (file)
@@ -39,6 +39,7 @@ use MimeAnalyzer;
 use ObjectCache;
 use Parser;
 use ParserCache;
+use ParserFactory;
 use PasswordFactory;
 use ProxyLookup;
 use SearchEngine;
@@ -403,128 +404,117 @@ class MediaWikiServices extends ServiceContainer {
        // CONVENIENCE GETTERS ////////////////////////////////////////////////////
 
        /**
-        * Returns the Config object containing the bootstrap configuration.
-        * Bootstrap configuration would typically include database credentials
-        * and other information that may be needed before the ConfigFactory
-        * service can be instantiated.
-        *
-        * @note This should only be used during bootstrapping, in particular
-        * when creating the MainConfig service. Application logic should
-        * use getMainConfig() to get a Config instances.
-        *
-        * @since 1.27
-        * @return Config
+        * @since 1.31
+        * @return ActorMigration
         */
-       public function getBootstrapConfig() {
-               return $this->getService( 'BootstrapConfig' );
+       public function getActorMigration() {
+               return $this->getService( 'ActorMigration' );
        }
 
        /**
-        * @since 1.27
-        * @return ConfigFactory
+        * @since 1.31
+        * @return BlobStore
         */
-       public function getConfigFactory() {
-               return $this->getService( 'ConfigFactory' );
+       public function getBlobStore() {
+               return $this->getService( '_SqlBlobStore' );
        }
 
        /**
-        * Returns the Config object that provides configuration for MediaWiki core.
-        * This may or may not be the same object that is returned by getBootstrapConfig().
-        *
-        * @since 1.27
-        * @return Config
+        * @since 1.31
+        * @return BlobStoreFactory
         */
-       public function getMainConfig() {
-               return $this->getService( 'MainConfig' );
+       public function getBlobStoreFactory() {
+               return $this->getService( 'BlobStoreFactory' );
        }
 
        /**
+        * Returns the Config object containing the bootstrap configuration.
+        * Bootstrap configuration would typically include database credentials
+        * and other information that may be needed before the ConfigFactory
+        * service can be instantiated.
+        *
+        * @note This should only be used during bootstrapping, in particular
+        * when creating the MainConfig service. Application logic should
+        * use getMainConfig() to get a Config instances.
+        *
         * @since 1.27
-        * @return SiteLookup
+        * @return Config
         */
-       public function getSiteLookup() {
-               return $this->getService( 'SiteLookup' );
+       public function getBootstrapConfig() {
+               return $this->getService( 'BootstrapConfig' );
        }
 
        /**
-        * @since 1.27
-        * @return SiteStore
+        * @since 1.32
+        * @return NameTableStore
         */
-       public function getSiteStore() {
-               return $this->getService( 'SiteStore' );
+       public function getChangeTagDefStore() {
+               return $this->getService( 'ChangeTagDefStore' );
        }
 
        /**
-        * @since 1.28
-        * @return InterwikiLookup
+        * @since 1.31
+        * @return CommentStore
         */
-       public function getInterwikiLookup() {
-               return $this->getService( 'InterwikiLookup' );
+       public function getCommentStore() {
+               return $this->getService( 'CommentStore' );
        }
 
        /**
         * @since 1.27
-        * @return IBufferingStatsdDataFactory
+        * @return ConfigFactory
         */
-       public function getStatsdDataFactory() {
-               return $this->getService( 'StatsdDataFactory' );
+       public function getConfigFactory() {
+               return $this->getService( 'ConfigFactory' );
        }
 
        /**
         * @since 1.32
-        * @return IBufferingStatsdDataFactory
-        */
-       public function getPerDbNameStatsdDataFactory() {
-               return $this->getService( 'PerDbNameStatsdDataFactory' );
-       }
-
-       /**
-        * @since 1.27
-        * @return EventRelayerGroup
+        * @return ConfigRepository
         */
-       public function getEventRelayerGroup() {
-               return $this->getService( 'EventRelayerGroup' );
+       public function getConfigRepository() {
+               return $this->getService( 'ConfigRepository' );
        }
 
        /**
-        * @since 1.27
-        * @return SearchEngine
+        * @since 1.29
+        * @return \ConfiguredReadOnlyMode
         */
-       public function newSearchEngine() {
-               // New engine object every time, since they keep state
-               return $this->getService( 'SearchEngineFactory' )->create();
+       public function getConfiguredReadOnlyMode() {
+               return $this->getService( 'ConfiguredReadOnlyMode' );
        }
 
        /**
-        * @since 1.27
-        * @return SearchEngineFactory
+        * @since 1.32
+        * @return \Language
         */
-       public function getSearchEngineFactory() {
-               return $this->getService( 'SearchEngineFactory' );
+       public function getContentLanguage() {
+               return $this->getService( 'ContentLanguage' );
        }
 
        /**
-        * @since 1.27
-        * @return SearchEngineConfig
+        * @since 1.31
+        * @return NameTableStore
         */
-       public function getSearchEngineConfig() {
-               return $this->getService( 'SearchEngineConfig' );
+       public function getContentModelStore() {
+               return $this->getService( 'ContentModelStore' );
        }
 
        /**
-        * @since 1.27
-        * @return SkinFactory
+        * @since 1.28
+        * @return CryptHKDF
         */
-       public function getSkinFactory() {
-               return $this->getService( 'SkinFactory' );
+       public function getCryptHKDF() {
+               return $this->getService( 'CryptHKDF' );
        }
 
        /**
         * @since 1.28
-        * @return LBFactory
+        * @deprecated since 1.32, use random_bytes()/random_int()
+        * @return CryptRand
         */
-       public function getDBLoadBalancerFactory() {
-               return $this->getService( 'DBLoadBalancerFactory' );
+       public function getCryptRand() {
+               return $this->getService( 'CryptRand' );
        }
 
        /**
@@ -537,91 +527,69 @@ class MediaWikiServices extends ServiceContainer {
 
        /**
         * @since 1.28
-        * @return WatchedItemStoreInterface
-        */
-       public function getWatchedItemStore() {
-               return $this->getService( 'WatchedItemStore' );
-       }
-
-       /**
-        * @since 1.28
-        * @return WatchedItemQueryService
+        * @return LBFactory
         */
-       public function getWatchedItemQueryService() {
-               return $this->getService( 'WatchedItemQueryService' );
+       public function getDBLoadBalancerFactory() {
+               return $this->getService( 'DBLoadBalancerFactory' );
        }
 
        /**
-        * @since 1.28
-        * @deprecated since 1.32, use random_bytes()/random_int()
-        * @return CryptRand
+        * @since 1.27
+        * @return EventRelayerGroup
         */
-       public function getCryptRand() {
-               return $this->getService( 'CryptRand' );
+       public function getEventRelayerGroup() {
+               return $this->getService( 'EventRelayerGroup' );
        }
 
        /**
-        * @since 1.28
-        * @return CryptHKDF
+        * @since 1.31
+        * @return \ExternalStoreFactory
         */
-       public function getCryptHKDF() {
-               return $this->getService( 'CryptHKDF' );
+       public function getExternalStoreFactory() {
+               return $this->getService( 'ExternalStoreFactory' );
        }
 
        /**
         * @since 1.28
-        * @return MediaHandlerFactory
+        * @return GenderCache
         */
-       public function getMediaHandlerFactory() {
-               return $this->getService( 'MediaHandlerFactory' );
+       public function getGenderCache() {
+               return $this->getService( 'GenderCache' );
        }
 
        /**
-        * @since 1.28
-        * @return MimeAnalyzer
+        * @since 1.31
+        * @return HttpRequestFactory
         */
-       public function getMimeAnalyzer() {
-               return $this->getService( 'MimeAnalyzer' );
+       public function getHttpRequestFactory() {
+               return $this->getService( 'HttpRequestFactory' );
        }
 
        /**
         * @since 1.28
-        * @return ProxyLookup
-        */
-       public function getProxyLookup() {
-               return $this->getService( 'ProxyLookup' );
-       }
-
-       /**
-        * @since 1.29
-        * @return Parser
-        */
-       public function getParser() {
-               return $this->getService( 'Parser' );
-       }
-
-       /**
-        * @since 1.30
-        * @return ParserCache
+        * @return InterwikiLookup
         */
-       public function getParserCache() {
-               return $this->getService( 'ParserCache' );
+       public function getInterwikiLookup() {
+               return $this->getService( 'InterwikiLookup' );
        }
 
        /**
         * @since 1.28
-        * @return GenderCache
+        * @return LinkCache
         */
-       public function getGenderCache() {
-               return $this->getService( 'GenderCache' );
+       public function getLinkCache() {
+               return $this->getService( 'LinkCache' );
        }
 
        /**
+        * LinkRenderer instance that can be used
+        * if no custom options are needed
+        *
         * @since 1.28
-        * @return LinkCache
+        * @return LinkRenderer
         */
-       public function getLinkCache() {
-               return $this->getService( 'LinkCache' );
+       public function getLinkRenderer() {
+               return $this->getService( 'LinkRenderer' );
        }
 
        /**
@@ -633,30 +601,30 @@ class MediaWikiServices extends ServiceContainer {
        }
 
        /**
-        * LinkRenderer instance that can be used
-        * if no custom options are needed
-        *
         * @since 1.28
-        * @return LinkRenderer
+        * @return \BagOStuff
         */
-       public function getLinkRenderer() {
-               return $this->getService( 'LinkRenderer' );
+       public function getLocalServerObjectCache() {
+               return $this->getService( 'LocalServerObjectCache' );
        }
 
        /**
-        * @since 1.28
-        * @return TitleFormatter
+        * @since 1.32
+        * @return MagicWordFactory
         */
-       public function getTitleFormatter() {
-               return $this->getService( 'TitleFormatter' );
+       public function getMagicWordFactory() {
+               return $this->getService( 'MagicWordFactory' );
        }
 
        /**
-        * @since 1.28
-        * @return TitleParser
+        * Returns the Config object that provides configuration for MediaWiki core.
+        * This may or may not be the same object that is returned by getBootstrapConfig().
+        *
+        * @since 1.27
+        * @return Config
         */
-       public function getTitleParser() {
-               return $this->getService( 'TitleParser' );
+       public function getMainConfig() {
+               return $this->getService( 'MainConfig' );
        }
 
        /**
@@ -677,90 +645,106 @@ class MediaWikiServices extends ServiceContainer {
 
        /**
         * @since 1.28
-        * @return \BagOStuff
+        * @return MediaHandlerFactory
         */
-       public function getLocalServerObjectCache() {
-               return $this->getService( 'LocalServerObjectCache' );
+       public function getMediaHandlerFactory() {
+               return $this->getService( 'MediaHandlerFactory' );
        }
 
        /**
         * @since 1.28
-        * @return VirtualRESTServiceClient
+        * @return MimeAnalyzer
         */
-       public function getVirtualRESTServiceClient() {
-               return $this->getService( 'VirtualRESTServiceClient' );
+       public function getMimeAnalyzer() {
+               return $this->getService( 'MimeAnalyzer' );
        }
 
        /**
-        * @since 1.29
-        * @return \ConfiguredReadOnlyMode
+        * @since 1.32
+        * @return OldRevisionImporter
         */
-       public function getConfiguredReadOnlyMode() {
-               return $this->getService( 'ConfiguredReadOnlyMode' );
+       public function getOldRevisionImporter() {
+               return $this->getService( 'OldRevisionImporter' );
        }
 
        /**
         * @since 1.29
-        * @return \ReadOnlyMode
+        * @return Parser
         */
-       public function getReadOnlyMode() {
-               return $this->getService( 'ReadOnlyMode' );
+       public function getParser() {
+               return $this->getService( 'Parser' );
        }
 
        /**
-        * @since 1.31
-        * @return \UploadRevisionImporter
+        * @since 1.30
+        * @return ParserCache
         */
-       public function getWikiRevisionUploadImporter() {
-               return $this->getService( 'UploadRevisionImporter' );
+       public function getParserCache() {
+               return $this->getService( 'ParserCache' );
        }
 
        /**
-        * @since 1.31
-        * @return \OldRevisionImporter
+        * @since 1.32
+        * @return ParserFactory
         */
-       public function getWikiRevisionOldRevisionImporter() {
-               return $this->getService( 'OldRevisionImporter' );
+       public function getParserFactory() {
+               return $this->getService( 'ParserFactory' );
        }
 
        /**
-        * @since 1.31
-        * @return \OldRevisionImporter
+        * @since 1.32
+        * @return PasswordFactory
         */
-       public function getWikiRevisionOldRevisionImporterNoUpdates() {
-               return $this->getService( 'WikiRevisionOldRevisionImporterNoUpdates' );
+       public function getPasswordFactory() {
+               return $this->getService( 'PasswordFactory' );
        }
 
        /**
-        * @since 1.30
-        * @return CommandFactory
+        * @since 1.32
+        * @return IBufferingStatsdDataFactory
         */
-       public function getShellCommandFactory() {
-               return $this->getService( 'ShellCommandFactory' );
+       public function getPerDbNameStatsdDataFactory() {
+               return $this->getService( 'PerDbNameStatsdDataFactory' );
        }
 
        /**
         * @since 1.31
-        * @return \ExternalStoreFactory
+        * @return PreferencesFactory
         */
-       public function getExternalStoreFactory() {
-               return $this->getService( 'ExternalStoreFactory' );
+       public function getPreferencesFactory() {
+               return $this->getService( 'PreferencesFactory' );
+       }
+
+       /**
+        * @since 1.28
+        * @return ProxyLookup
+        */
+       public function getProxyLookup() {
+               return $this->getService( 'ProxyLookup' );
+       }
+
+       /**
+        * @since 1.29
+        * @return \ReadOnlyMode
+        */
+       public function getReadOnlyMode() {
+               return $this->getService( 'ReadOnlyMode' );
        }
 
        /**
         * @since 1.31
-        * @return BlobStoreFactory
+        * @return RevisionFactory
         */
-       public function getBlobStoreFactory() {
-               return $this->getService( 'BlobStoreFactory' );
+       public function getRevisionFactory() {
+               return $this->getService( 'RevisionFactory' );
        }
 
        /**
         * @since 1.31
-        * @return BlobStore
+        * @return RevisionLookup
         */
-       public function getBlobStore() {
-               return $this->getService( '_SqlBlobStore' );
+       public function getRevisionLookup() {
+               return $this->getService( 'RevisionLookup' );
        }
 
        /**
@@ -780,75 +764,92 @@ class MediaWikiServices extends ServiceContainer {
        }
 
        /**
-        * @since 1.31
-        * @return RevisionLookup
+        * @since 1.27
+        * @return SearchEngine
         */
-       public function getRevisionLookup() {
-               return $this->getService( 'RevisionLookup' );
+       public function newSearchEngine() {
+               // New engine object every time, since they keep state
+               return $this->getService( 'SearchEngineFactory' )->create();
        }
 
        /**
-        * @since 1.31
-        * @return RevisionFactory
+        * @since 1.27
+        * @return SearchEngineConfig
         */
-       public function getRevisionFactory() {
-               return $this->getService( 'RevisionFactory' );
+       public function getSearchEngineConfig() {
+               return $this->getService( 'SearchEngineConfig' );
        }
 
        /**
-        * @since 1.31
-        * @return NameTableStore
+        * @since 1.27
+        * @return SearchEngineFactory
         */
-       public function getContentModelStore() {
-               return $this->getService( 'ContentModelStore' );
+       public function getSearchEngineFactory() {
+               return $this->getService( 'SearchEngineFactory' );
        }
 
        /**
-        * @since 1.31
-        * @return NameTableStore
+        * @since 1.30
+        * @return CommandFactory
         */
-       public function getSlotRoleStore() {
-               return $this->getService( 'SlotRoleStore' );
+       public function getShellCommandFactory() {
+               return $this->getService( 'ShellCommandFactory' );
        }
 
        /**
-        * @since 1.32
-        * @return NameTableStore
+        * @since 1.27
+        * @return SiteLookup
         */
-       public function getChangeTagDefStore() {
-               return $this->getService( 'ChangeTagDefStore' );
+       public function getSiteLookup() {
+               return $this->getService( 'SiteLookup' );
        }
 
        /**
-        * @since 1.31
-        * @return PreferencesFactory
+        * @since 1.27
+        * @return SiteStore
         */
-       public function getPreferencesFactory() {
-               return $this->getService( 'PreferencesFactory' );
+       public function getSiteStore() {
+               return $this->getService( 'SiteStore' );
        }
 
        /**
-        * @since 1.31
-        * @return HttpRequestFactory
+        * @since 1.27
+        * @return SkinFactory
         */
-       public function getHttpRequestFactory() {
-               return $this->getService( 'HttpRequestFactory' );
+       public function getSkinFactory() {
+               return $this->getService( 'SkinFactory' );
        }
 
        /**
         * @since 1.31
-        * @return CommentStore
+        * @return NameTableStore
         */
-       public function getCommentStore() {
-               return $this->getService( 'CommentStore' );
+       public function getSlotRoleStore() {
+               return $this->getService( 'SlotRoleStore' );
        }
 
        /**
-        * @since 1.31
-        * @return ActorMigration
+        * @since 1.27
+        * @return IBufferingStatsdDataFactory
         */
-       public function getActorMigration() {
-               return $this->getService( 'ActorMigration' );
+       public function getStatsdDataFactory() {
+               return $this->getService( 'StatsdDataFactory' );
+       }
+
+       /**
+        * @since 1.28
+        * @return TitleFormatter
+        */
+       public function getTitleFormatter() {
+               return $this->getService( 'TitleFormatter' );
+       }
+
+       /**
+        * @since 1.28
+        * @return TitleParser
+        */
+       public function getTitleParser() {
+               return $this->getService( 'TitleParser' );
        }
 
        /**
@@ -860,49 +861,51 @@ class MediaWikiServices extends ServiceContainer {
        }
 
        /**
-        * @since 1.32
-        * @return OldRevisionImporter
+        * @since 1.28
+        * @return VirtualRESTServiceClient
         */
-       public function getOldRevisionImporter() {
-               return $this->getService( 'OldRevisionImporter' );
+       public function getVirtualRESTServiceClient() {
+               return $this->getService( 'VirtualRESTServiceClient' );
        }
 
        /**
-        * @since 1.32
-        * @return ConfigRepository
+        * @since 1.28
+        * @return WatchedItemQueryService
         */
-       public function getConfigRepository() {
-               return $this->getService( 'ConfigRepository' );
+       public function getWatchedItemQueryService() {
+               return $this->getService( 'WatchedItemQueryService' );
        }
 
        /**
-        * @since 1.32
-        * @return MagicWordFactory
+        * @since 1.28
+        * @return WatchedItemStoreInterface
         */
-       public function getMagicWordFactory() {
-               return $this->getService( 'MagicWordFactory' );
+       public function getWatchedItemStore() {
+               return $this->getService( 'WatchedItemStore' );
        }
 
        /**
-        * @since 1.32
-        * @return \Language
+        * @since 1.31
+        * @return \OldRevisionImporter
         */
-       public function getContentLanguage() {
-               return $this->getService( 'ContentLanguage' );
+       public function getWikiRevisionOldRevisionImporter() {
+               return $this->getService( 'OldRevisionImporter' );
        }
 
        /**
-        * @since 1.32
-        * @return PasswordFactory
+        * @since 1.31
+        * @return \OldRevisionImporter
         */
-       public function getPasswordFactory() {
-               return $this->getService( 'PasswordFactory' );
+       public function getWikiRevisionOldRevisionImporterNoUpdates() {
+               return $this->getService( 'WikiRevisionOldRevisionImporterNoUpdates' );
        }
 
-       ///////////////////////////////////////////////////////////////////////////
-       // NOTE: When adding a service getter here, don't forget to add a test
-       // case for it in MediaWikiServicesTest::provideGetters() and in
-       // MediaWikiServicesTest::provideGetService()!
-       ///////////////////////////////////////////////////////////////////////////
+       /**
+        * @since 1.31
+        * @return \UploadRevisionImporter
+        */
+       public function getWikiRevisionUploadImporter() {
+               return $this->getService( 'UploadRevisionImporter' );
+       }
 
 }
index 5ca0942..e2fe254 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @author Niklas Laxström
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * The Message class provides methods which fulfil two basic services:
@@ -469,18 +470,20 @@ class Message implements MessageSpecifier, Serializable {
         * @since 1.26
         */
        public function getTitle() {
-               global $wgContLang, $wgForceUIMsgAsContentMsg;
+               global $wgForceUIMsgAsContentMsg;
 
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                $title = $this->key;
                if (
-                       !$this->language->equals( $wgContLang )
+                       !$this->language->equals( $contLang )
                        && in_array( $this->key, (array)$wgForceUIMsgAsContentMsg )
                ) {
                        $code = $this->language->getCode();
                        $title .= '/' . $code;
                }
 
-               return Title::makeTitle( NS_MEDIAWIKI, $wgContLang->ucfirst( strtr( $title, ' ', '_' ) ) );
+               return Title::makeTitle(
+                       NS_MEDIAWIKI, $contLang->ucfirst( strtr( $title, ' ', '_' ) ) );
        }
 
        /**
@@ -766,8 +769,7 @@ class Message implements MessageSpecifier, Serializable {
                        return $this;
                }
 
-               global $wgContLang;
-               $this->inLanguage( $wgContLang );
+               $this->inLanguage( MediaWikiServices::getInstance()->getContentLanguage() );
                return $this;
        }
 
index 9173f26..f6d5dc9 100644 (file)
@@ -255,6 +255,11 @@ class OutputPage extends ContextSource {
 
        private $mIndexPolicy = 'index';
        private $mFollowPolicy = 'follow';
+
+       /**
+        * @var array Headers that cause the cache to vary.  Key is header name, value is an array of
+        * options for the Key header.
+        */
        private $mVaryHeader = [
                'Accept-Encoding' => [ 'match=gzip' ],
        ];
@@ -1240,8 +1245,6 @@ class OutputPage extends ContextSource {
         * @param array $categories Mapping category name => sort key
         */
        public function addCategoryLinks( array $categories ) {
-               global $wgContLang;
-
                if ( !$categories ) {
                        return;
                }
@@ -1265,7 +1268,8 @@ class OutputPage extends ContextSource {
                        'OutputPageMakeCategoryLinks',
                        [ &$outputPage, $categories, &$this->mCategoryLinks ] )
                ) {
-                       $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+                       $services = MediaWikiServices::getInstance();
+                       $linkRenderer = $services->getLinkRenderer();
                        foreach ( $categories as $category => $type ) {
                                // array keys will cast numeric category names to ints, so cast back to string
                                $category = (string)$category;
@@ -1274,11 +1278,11 @@ class OutputPage extends ContextSource {
                                if ( !$title ) {
                                        continue;
                                }
-                               $wgContLang->findVariantLink( $category, $title, true );
+                               $services->getContentLanguage()->findVariantLink( $category, $title, true );
                                if ( $category != $origcategory && array_key_exists( $category, $categories ) ) {
                                        continue;
                                }
-                               $text = $wgContLang->convertHtml( $title->getText() );
+                               $text = $services->getContentLanguage()->convertHtml( $title->getText() );
                                $this->mCategories[$type][] = $title->getText();
                                $this->mCategoryLinks[$type][] = $linkRenderer->makeLink( $title, new HtmlArmor( $text ) );
                        }
@@ -1749,7 +1753,7 @@ class OutputPage extends ContextSource {
         * @since 1.24
         * @param ParserOutput $parserOutput
         */
-       public function addParserOutputMetadata( $parserOutput ) {
+       public function addParserOutputMetadata( ParserOutput $parserOutput ) {
                $this->mLanguageLinks =
                        array_merge( $this->mLanguageLinks, $parserOutput->getLanguageLinks() );
                $this->addCategoryLinks( $parserOutput->getCategories() );
@@ -1787,7 +1791,7 @@ class OutputPage extends ContextSource {
                foreach ( $parserOutput->getOutputHooks() as $hookInfo ) {
                        list( $hookName, $data ) = $hookInfo;
                        if ( isset( $parserOutputHooks[$hookName] ) ) {
-                               call_user_func( $parserOutputHooks[$hookName], $this, $parserOutput, $data );
+                               $parserOutputHooks[$hookName]( $this, $parserOutput, $data );
                        }
                }
 
@@ -1826,7 +1830,7 @@ class OutputPage extends ContextSource {
         * @param ParserOutput $parserOutput
         * @param array $poOptions Options to ParserOutput::getText()
         */
-       public function addParserOutputContent( $parserOutput, $poOptions = [] ) {
+       public function addParserOutputContent( ParserOutput $parserOutput, $poOptions = [] ) {
                $this->addParserOutputText( $parserOutput, $poOptions );
 
                $this->addModules( $parserOutput->getModules() );
@@ -1843,7 +1847,7 @@ class OutputPage extends ContextSource {
         * @param ParserOutput $parserOutput
         * @param array $poOptions Options to ParserOutput::getText()
         */
-       public function addParserOutputText( $parserOutput, $poOptions = [] ) {
+       public function addParserOutputText( ParserOutput $parserOutput, $poOptions = [] ) {
                $text = $parserOutput->getText( $poOptions );
                // Avoid PHP 7.1 warning of passing $this by reference
                $outputPage = $this;
@@ -1857,7 +1861,7 @@ class OutputPage extends ContextSource {
         * @param ParserOutput $parserOutput
         * @param array $poOptions Options to ParserOutput::getText()
         */
-       function addParserOutput( $parserOutput, $poOptions = [] ) {
+       function addParserOutput( ParserOutput $parserOutput, $poOptions = [] ) {
                $this->addParserOutputMetadata( $parserOutput );
                $this->addParserOutputText( $parserOutput, $poOptions );
        }
@@ -1876,9 +1880,9 @@ class OutputPage extends ContextSource {
         *
         * @param string $text
         * @param bool $linestart Is this the start of a line?
-        * @param bool $interface Use interface language ($wgLang instead of
-        *   $wgContLang) while parsing language sensitive magic words like GRAMMAR and PLURAL.
-        *   This also disables LanguageConverter.
+        * @param bool $interface Use interface language (instead of content language) while parsing
+        *   language sensitive magic words like GRAMMAR and PLURAL.  This also disables
+        *   LanguageConverter.
         * @param Language|null $language Target language object, will override $interface
         * @throws MWException
         * @return string HTML
@@ -1920,9 +1924,8 @@ class OutputPage extends ContextSource {
         *
         * @param string $text
         * @param bool $linestart Is this the start of a line?
-        * @param bool $interface Use interface language ($wgLang instead of
-        *   $wgContLang) while parsing language sensitive magic
-        *   words like GRAMMAR and PLURAL
+        * @param bool $interface Use interface language (instead of content language) while parsing
+        *   language sensitive magic words like GRAMMAR and PLURAL
         * @return string HTML
         */
        public function parseInline( $text, $linestart = true, $interface = false ) {
@@ -1940,7 +1943,10 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Lower the value of the "s-maxage" part of the "Cache-control" HTTP header
+        * Set the value of the "s-maxage" part of the "Cache-control" HTTP header to $maxage if that is
+        * lower than the current s-maxage.  Either way, $maxage is now an upper limit on s-maxage, so
+        * that future calls to setCdnMaxage() will no longer be able to raise the s-maxage above
+        * $maxage.
         *
         * @param int $maxage Maximum cache time on the CDN, in seconds
         * @since 1.27
@@ -1958,9 +1964,10 @@ class OutputPage extends ContextSource {
         * TTL is 90% of the age of the object, subject to the min and max.
         *
         * @param string|int|float|bool|null $mtime Last-Modified timestamp
-        * @param int $minTTL Mimimum TTL in seconds [default: 1 minute]
+        * @param int $minTTL Minimum TTL in seconds [default: 1 minute]
         * @param int $maxTTL Maximum TTL in seconds [default: $wgSquidMaxage]
-        * @return int TTL in seconds
+        * @return int TTL in seconds passed to lowerCdnMaxage() (may not be the same as the new
+        *  s-maxage)
         * @since 1.28
         */
        public function adaptCdnTTL( $mtime, $minTTL = 0, $maxTTL = 0 ) {
@@ -1983,16 +1990,16 @@ class OutputPage extends ContextSource {
        /**
         * Use enableClientCache(false) to force it to send nocache headers
         *
-        * @param bool $state
+        * @param bool|null $state New value, or null to not set the value
         *
-        * @return bool
+        * @return bool Old value
         */
        public function enableClientCache( $state ) {
                return wfSetVar( $this->mEnableClientCache, $state );
        }
 
        /**
-        * Get the list of cookies that will influence on the cache
+        * Get the list of cookie names that will influence the cache
         *
         * @return array
         */
@@ -2045,7 +2052,8 @@ class OutputPage extends ContextSource {
                if ( !is_array( $option ) ) {
                        $option = [];
                }
-               $this->mVaryHeader[$header] = array_unique( array_merge( $this->mVaryHeader[$header], $option ) );
+               $this->mVaryHeader[$header] =
+                       array_unique( array_merge( $this->mVaryHeader[$header], $option ) );
        }
 
        /**
@@ -2120,14 +2128,13 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * T23672: Add Accept-Language to Vary and Key headers
-        * if there's no 'variant' parameter existed in GET.
+        * T23672: Add Accept-Language to Vary and Key headers if there's no 'variant' parameter in GET.
         *
         * For example:
-        *   /w/index.php?title=Main_page should always be served; but
-        *   /w/index.php?title=Main_page&variant=zh-cn should never be served.
+        *   /w/index.php?title=Main_page will vary based on Accept-Language; but
+        *   /w/index.php?title=Main_page&variant=zh-cn will not.
         */
-       function addAcceptLanguage() {
+       private function addAcceptLanguage() {
                $title = $this->getTitle();
                if ( !$title instanceof Title ) {
                        return;
@@ -2140,16 +2147,15 @@ class OutputPage extends ContextSource {
                        foreach ( $variants as $variant ) {
                                if ( $variant === $lang->getCode() ) {
                                        continue;
-                               } else {
-                                       $aloption[] = 'substr=' . $variant;
-
-                                       // IE and some other browsers use BCP 47 standards in
-                                       // their Accept-Language header, like "zh-CN" or "zh-Hant".
-                                       // We should handle these too.
-                                       $variantBCP47 = LanguageCode::bcp47( $variant );
-                                       if ( $variantBCP47 !== $variant ) {
-                                               $aloption[] = 'substr=' . $variantBCP47;
-                                       }
+                               }
+
+                               $aloption[] = "substr=$variant";
+
+                               // IE and some other browsers use BCP 47 standards in their Accept-Language header,
+                               // like "zh-CN" or "zh-Hant".  We should handle these too.
+                               $variantBCP47 = LanguageCode::bcp47( $variant );
+                               if ( $variantBCP47 !== $variant ) {
+                                       $aloption[] = "substr=$variantBCP47";
                                }
                        }
                        $this->addVaryHeader( 'Accept-Language', $aloption );
@@ -2307,8 +2313,6 @@ class OutputPage extends ContextSource {
         * @throws MWException
         */
        public function output( $return = false ) {
-               global $wgContLang;
-
                if ( $this->mDoNothing ) {
                        return $return ? '' : null;
                }
@@ -2355,7 +2359,8 @@ class OutputPage extends ContextSource {
                ob_start();
 
                $response->header( 'Content-type: ' . $config->get( 'MimeType' ) . '; charset=UTF-8' );
-               $response->header( 'Content-language: ' . $wgContLang->getHtmlCode() );
+               $response->header( 'Content-language: ' .
+                       MediaWikiServices::getInstance()->getContentLanguage()->getHtmlCode() );
 
                if ( !$this->mArticleBodyOnly ) {
                        $sk = $this->getSkin();
@@ -2751,7 +2756,7 @@ class OutputPage extends ContextSource {
                                $this->rlClientContext = new DerivativeResourceLoaderContext( $this->rlClientContext );
                                $this->rlClientContext->setContentOverrideCallback( function ( Title $title ) {
                                        foreach ( $this->contentOverrideCallbacks as $callback ) {
-                                               $content = call_user_func( $callback, $title );
+                                               $content = $callback( $title );
                                                if ( $content !== null ) {
                                                        return $content;
                                                }
@@ -2853,10 +2858,8 @@ class OutputPage extends ContextSource {
         * @return string The doctype, opening "<html>", and head element.
         */
        public function headElement( Skin $sk, $includeStyle = true ) {
-               global $wgContLang;
-
                $userdir = $this->getLanguage()->getDir();
-               $sitedir = $wgContLang->getDir();
+               $sitedir = MediaWikiServices::getInstance()->getContentLanguage()->getDir();
 
                $pieces = [];
                $pieces[] = Html::htmlHeader( Sanitizer::mergeAttributes(
@@ -3054,8 +3057,6 @@ class OutputPage extends ContextSource {
         * @return array
         */
        public function getJSVars() {
-               global $wgContLang;
-
                $curRevisionId = 0;
                $articleId = 0;
                $canonicalSpecialPageName = false; # T23115
@@ -3125,6 +3126,7 @@ class OutputPage extends ContextSource {
                        'wgRelevantPageName' => $relevantTitle->getPrefixedDBkey(),
                        'wgRelevantArticleId' => $relevantTitle->getArticleID(),
                        'wgRequestId' => WebRequest::getRequestId(),
+                       'wgCSPNonce' => $this->getCSPNonce(),
                ];
 
                if ( $user->isLoggedIn() ) {
@@ -3138,8 +3140,9 @@ class OutputPage extends ContextSource {
                        $vars['wgUserNewMsgRevisionId'] = $user->getNewMessageRevisionId();
                }
 
-               if ( $wgContLang->hasVariants() ) {
-                       $vars['wgUserVariant'] = $wgContLang->getPreferredVariant();
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               if ( $contLang->hasVariants() ) {
+                       $vars['wgUserVariant'] = $contLang->getPreferredVariant();
                }
                // Same test as SkinTemplate
                $vars['wgIsProbablyEditable'] = $title->quickUserCan( 'edit', $user )
index 8eda14a..c49318b 100644 (file)
@@ -19,6 +19,7 @@
  */
 
 // phpcs:disable Generic.Arrays.DisallowLongArraySyntax,PSR2.Classes.PropertyDeclaration,MediaWiki.Usage.DirUsage
+// phpcs:disable Squiz.Scope.MemberVarScope.Missing,Squiz.Scope.MethodScope.Missing
 /**
  * Check PHP Version, as well as for composer dependencies in entry points,
  * and display something vaguely comprehensible in the event of a totally
@@ -71,7 +72,7 @@ class PHPVersionCheck {
         *  - 'implementation': The name of the implementation used
         *  - 'vendor': The development group, vendor or developer of the implementation.
         *  - 'upstreamSupported': The minimum version of the implementation supported by the named vendor.
-        *  - 'minSupported': The minimum version supported by MediWiki
+        *  - 'minSupported': The minimum version supported by MediaWiki
         *  - 'upgradeURL': The URL to the website of the implementation that contains
         *  upgrade/installation instructions.
         */
index a8a312c..d66da93 100644 (file)
@@ -35,12 +35,12 @@ class Preferences {
         * @return DefaultPreferencesFactory
         */
        protected static function getDefaultPreferencesFactory() {
-               global $wgContLang;
                $authManager = AuthManager::singleton();
                $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
                $config = MediaWikiServices::getInstance()->getMainConfig();
                $preferencesFactory = new DefaultPreferencesFactory(
-                       $config, $wgContLang, $authManager, $linkRenderer
+                       $config, MediaWikiServices::getInstance()->getContentLanguage(), $authManager,
+                       $linkRenderer
                );
                return $preferencesFactory;
        }
index 63a4d9c..e32b439 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Handles searching prefixes of titles and finding any page
  * names that match. Used largely by the OpenSearch implementation.
@@ -81,9 +83,8 @@ abstract class PrefixSearch {
                // if the content language has variants, try to retrieve fallback results
                $fallbackLimit = $limit - count( $searches );
                if ( $fallbackLimit > 0 ) {
-                       global $wgContLang;
-
-                       $fallbackSearches = $wgContLang->autoConvertToAllVariants( $search );
+                       $fallbackSearches = MediaWikiServices::getInstance()->getContentLanguage()->
+                               autoConvertToAllVariants( $search );
                        $fallbackSearches = array_diff( array_unique( $fallbackSearches ), [ $search ] );
 
                        foreach ( $fallbackSearches as $fbs ) {
@@ -167,8 +168,6 @@ abstract class PrefixSearch {
         * @return array
         */
        protected function specialSearch( $search, $limit, $offset ) {
-               global $wgContLang;
-
                $searchParts = explode( '/', $search, 2 );
                $searchKey = $searchParts[0];
                $subpageSearch = $searchParts[1] ?? null;
@@ -192,23 +191,24 @@ abstract class PrefixSearch {
                }
 
                # normalize searchKey, so aliases with spaces can be found - T27675
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                $searchKey = str_replace( ' ', '_', $searchKey );
-               $searchKey = $wgContLang->caseFold( $searchKey );
+               $searchKey = $contLang->caseFold( $searchKey );
 
                // Unlike SpecialPage itself, we want the canonical forms of both
                // canonical and alias title forms...
                $keys = [];
                foreach ( SpecialPageFactory::getNames() as $page ) {
-                       $keys[$wgContLang->caseFold( $page )] = [ 'page' => $page, 'rank' => 0 ];
+                       $keys[$contLang->caseFold( $page )] = [ 'page' => $page, 'rank' => 0 ];
                }
 
-               foreach ( $wgContLang->getSpecialPageAliases() as $page => $aliases ) {
+               foreach ( $contLang->getSpecialPageAliases() as $page => $aliases ) {
                        if ( !in_array( $page, SpecialPageFactory::getNames() ) ) {# T22885
                                continue;
                        }
 
                        foreach ( $aliases as $key => $alias ) {
-                               $keys[$wgContLang->caseFold( $alias )] = [ 'page' => $alias, 'rank' => $key ];
+                               $keys[$contLang->caseFold( $alias )] = [ 'page' => $alias, 'rank' => $key ];
                        }
                }
                ksort( $keys );
@@ -307,10 +307,8 @@ abstract class PrefixSearch {
         * @return array (default: contains only NS_MAIN)
         */
        protected function validateNamespaces( $namespaces ) {
-               global $wgContLang;
-
-               // We will look at each given namespace against wgContLang namespaces
-               $validNamespaces = $wgContLang->getNamespaces();
+               // We will look at each given namespace against content language namespaces
+               $validNamespaces = MediaWikiServices::getInstance()->getContentLanguage()->getNamespaces();
                if ( is_array( $namespaces ) && count( $namespaces ) > 0 ) {
                        $valid = [];
                        foreach ( $namespaces as $ns ) {
index 7ff73dd..6d684a8 100644 (file)
@@ -1013,7 +1013,7 @@ class Revision implements IDBAccessObject {
         * @param stdClass $row The text data
         * @param string $prefix Table prefix (default 'old_')
         * @param string|bool $wiki The name of the wiki to load the revision text from
-        *   (same as the the wiki $row was loaded from) or false to indicate the local
+        *   (same as the wiki $row was loaded from) or false to indicate the local
         *   wiki (this is the default). Otherwise, it must be a symbolic wiki database
         *   identifier as understood by the LoadBalancer class.
         * @return string|false Text the text requested or false on failure
index 671544e..e5ebe2d 100644 (file)
 use MediaWiki\Auth\AuthManager;
 use MediaWiki\Config\ConfigRepository;
 use MediaWiki\Interwiki\ClassicInterwikiLookup;
+use MediaWiki\Interwiki\InterwikiLookup;
+use MediaWiki\Linker\LinkRenderer;
 use MediaWiki\Linker\LinkRendererFactory;
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Preferences\PreferencesFactory;
 use MediaWiki\Preferences\DefaultPreferencesFactory;
 use MediaWiki\Shell\CommandFactory;
+use MediaWiki\Storage\BlobStore;
 use MediaWiki\Storage\BlobStoreFactory;
 use MediaWiki\Storage\NameTableStore;
+use MediaWiki\Storage\RevisionFactory;
+use MediaWiki\Storage\RevisionLookup;
+use MediaWiki\Storage\RevisionStore;
 use MediaWiki\Storage\RevisionStoreFactory;
-use Wikimedia\ObjectFactory;
+use MediaWiki\Storage\SqlBlobStore;
 
 return [
-       'DBLoadBalancerFactory' => function ( MediaWikiServices $services ) {
-               $mainConfig = $services->getMainConfig();
-
-               $lbConf = MWLBFactory::applyDefaultConfig(
-                       $mainConfig->get( 'LBFactoryConf' ),
-                       $mainConfig,
-                       $services->getConfiguredReadOnlyMode()
+       'ActorMigration' => function ( MediaWikiServices $services ) : ActorMigration {
+               return new ActorMigration(
+                       $services->getMainConfig()->get( 'ActorTableSchemaMigrationStage' )
                );
-               $class = MWLBFactory::getLBFactoryClass( $lbConf );
-
-               $instance = new $class( $lbConf );
-               MWLBFactory::setSchemaAliases( $instance, $mainConfig );
-
-               return $instance;
        },
 
-       'DBLoadBalancer' => function ( MediaWikiServices $services ) {
-               // just return the default LB from the DBLoadBalancerFactory service
-               return $services->getDBLoadBalancerFactory()->getMainLB();
+       'BlobStore' => function ( MediaWikiServices $services ) : BlobStore {
+               return $services->getService( '_SqlBlobStore' );
        },
 
-       'SiteStore' => function ( MediaWikiServices $services ) {
-               $rawSiteStore = new DBSiteStore( $services->getDBLoadBalancer() );
-
-               // TODO: replace wfGetCache with a CacheFactory service.
-               // TODO: replace wfIsHHVM with a capabilities service.
-               $cache = wfGetCache( wfIsHHVM() ? CACHE_ACCEL : CACHE_ANYTHING );
-
-               return new CachingSiteStore( $rawSiteStore, $cache );
+       'BlobStoreFactory' => function ( MediaWikiServices $services ) : BlobStoreFactory {
+               return new BlobStoreFactory(
+                       $services->getDBLoadBalancer(),
+                       $services->getMainWANObjectCache(),
+                       $services->getMainConfig(),
+                       $services->getContentLanguage()
+               );
        },
 
-       'SiteLookup' => function ( MediaWikiServices $services ) {
-               $cacheFile = $services->getMainConfig()->get( 'SitesCacheFile' );
+       'ChangeTagDefStore' => function ( MediaWikiServices $services ) : NameTableStore {
+               return new NameTableStore(
+                       $services->getDBLoadBalancer(),
+                       $services->getMainWANObjectCache(),
+                       LoggerFactory::getInstance( 'NameTableSqlStore' ),
+                       'change_tag_def',
+                       'ctd_id',
+                       'ctd_name',
+                       null,
+                       false,
+                       function ( $insertFields ) {
+                               $insertFields['ctd_user_defined'] = 0;
+                               $insertFields['ctd_count'] = 0;
+                               return $insertFields;
+                       }
+               );
+       },
 
-               if ( $cacheFile !== false ) {
-                       return new FileBasedSiteLookup( $cacheFile );
-               } else {
-                       // Use the default SiteStore as the SiteLookup implementation for now
-                       return $services->getSiteStore();
-               }
+       'CommentStore' => function ( MediaWikiServices $services ) : CommentStore {
+               return new CommentStore(
+                       $services->getContentLanguage(),
+                       $services->getMainConfig()->get( 'CommentTableSchemaMigrationStage' )
+               );
        },
 
-       'ConfigFactory' => function ( MediaWikiServices $services ) {
+       'ConfigFactory' => function ( MediaWikiServices $services ) : ConfigFactory {
                // Use the bootstrap config to initialize the ConfigFactory.
                $registry = $services->getBootstrapConfig()->get( 'ConfigRegistry' );
                $factory = new ConfigFactory();
@@ -104,133 +113,192 @@ return [
                return $factory;
        },
 
-       'ConfigRepository' => function ( MediaWikiServices $services ) {
+       'ConfigRepository' => function ( MediaWikiServices $services ) : ConfigRepository {
                return new ConfigRepository( $services->getConfigFactory() );
        },
 
-       'MainConfig' => function ( MediaWikiServices $services ) {
-               // Use the 'main' config from the ConfigFactory service.
-               return $services->getConfigFactory()->makeConfig( 'main' );
+       'ConfiguredReadOnlyMode' => function ( MediaWikiServices $services ) : ConfiguredReadOnlyMode {
+               return new ConfiguredReadOnlyMode( $services->getMainConfig() );
        },
 
-       'InterwikiLookup' => function ( MediaWikiServices $services ) {
-               $config = $services->getMainConfig();
-               return new ClassicInterwikiLookup(
-                       $services->getContentLanguage(),
+       'ContentLanguage' => function ( MediaWikiServices $services ) : Language {
+               return Language::factory( $services->getMainConfig()->get( 'LanguageCode' ) );
+       },
+
+       'ContentModelStore' => function ( MediaWikiServices $services ) : NameTableStore {
+               return new NameTableStore(
+                       $services->getDBLoadBalancer(),
                        $services->getMainWANObjectCache(),
-                       $config->get( 'InterwikiExpiry' ),
-                       $config->get( 'InterwikiCache' ),
-                       $config->get( 'InterwikiScopes' ),
-                       $config->get( 'InterwikiFallbackSite' )
+                       LoggerFactory::getInstance( 'NameTableSqlStore' ),
+                       'content_models',
+                       'model_id',
+                       'model_name'
+                       /**
+                        * No strtolower normalization is added to the service as there are examples of
+                        * extensions that do not stick to this assumption.
+                        * - extensions/examples/DataPages define( 'CONTENT_MODEL_XML_DATA','XML_DATA' );
+                        * - extensions/Scribunto define( 'CONTENT_MODEL_SCRIBUNTO', 'Scribunto' );
+                        */
                );
        },
 
-       'StatsdDataFactory' => function ( MediaWikiServices $services ) {
-               return new BufferingStatsdDataFactory(
-                       rtrim( $services->getMainConfig()->get( 'StatsdMetricPrefix' ), '.' )
+       'CryptHKDF' => function ( MediaWikiServices $services ) : CryptHKDF {
+               $config = $services->getMainConfig();
+
+               $secret = $config->get( 'HKDFSecret' ) ?: $config->get( 'SecretKey' );
+               if ( !$secret ) {
+                       throw new RuntimeException( "Cannot use MWCryptHKDF without a secret." );
+               }
+
+               // In HKDF, the context can be known to the attacker, but this will
+               // keep simultaneous runs from producing the same output.
+               $context = [ microtime(), getmypid(), gethostname() ];
+
+               // Setup salt cache. Use APC, or fallback to the main cache if it isn't setup
+               $cache = $services->getLocalServerObjectCache();
+               if ( $cache instanceof EmptyBagOStuff ) {
+                       $cache = ObjectCache::getLocalClusterInstance();
+               }
+
+               return new CryptHKDF( $secret, $config->get( 'HKDFAlgorithm' ), $cache, $context );
+       },
+
+       'CryptRand' => function () : CryptRand {
+               return new CryptRand();
+       },
+
+       'DBLoadBalancer' => function ( MediaWikiServices $services ) : Wikimedia\Rdbms\LoadBalancer {
+               // just return the default LB from the DBLoadBalancerFactory service
+               return $services->getDBLoadBalancerFactory()->getMainLB();
+       },
+
+       'DBLoadBalancerFactory' =>
+       function ( MediaWikiServices $services ) : Wikimedia\Rdbms\LBFactory {
+               $mainConfig = $services->getMainConfig();
+
+               $lbConf = MWLBFactory::applyDefaultConfig(
+                       $mainConfig->get( 'LBFactoryConf' ),
+                       $mainConfig,
+                       $services->getConfiguredReadOnlyMode()
                );
+               $class = MWLBFactory::getLBFactoryClass( $lbConf );
+
+               $instance = new $class( $lbConf );
+               MWLBFactory::setSchemaAliases( $instance, $mainConfig );
+
+               return $instance;
+       },
+
+       'EventRelayerGroup' => function ( MediaWikiServices $services ) : EventRelayerGroup {
+               return new EventRelayerGroup( $services->getMainConfig()->get( 'EventRelayerConfig' ) );
        },
 
-       'PerDbNameStatsdDataFactory' => function ( MediaWikiServices $services ) {
+       'ExternalStoreFactory' => function ( MediaWikiServices $services ) : ExternalStoreFactory {
                $config = $services->getMainConfig();
-               $wiki = $config->get( 'DBname' );
-               return new BufferingStatsdDataFactory(
-                       rtrim( $services->getMainConfig()->get( 'StatsdMetricPrefix' ), '.' ) . '.' . $wiki
+
+               return new ExternalStoreFactory(
+                       $config->get( 'ExternalStores' )
                );
        },
 
-       'EventRelayerGroup' => function ( MediaWikiServices $services ) {
-               return new EventRelayerGroup( $services->getMainConfig()->get( 'EventRelayerConfig' ) );
+       'GenderCache' => function ( MediaWikiServices $services ) : GenderCache {
+               return new GenderCache();
        },
 
-       'SearchEngineFactory' => function ( MediaWikiServices $services ) {
-               return new SearchEngineFactory( $services->getSearchEngineConfig() );
+       'HttpRequestFactory' =>
+       function ( MediaWikiServices $services ) : \MediaWiki\Http\HttpRequestFactory {
+               return new \MediaWiki\Http\HttpRequestFactory();
        },
 
-       'SearchEngineConfig' => function ( MediaWikiServices $services ) {
-               return new SearchEngineConfig( $services->getMainConfig(),
-                       $services->getContentLanguage() );
+       'InterwikiLookup' => function ( MediaWikiServices $services ) : InterwikiLookup {
+               $config = $services->getMainConfig();
+               return new ClassicInterwikiLookup(
+                       $services->getContentLanguage(),
+                       $services->getMainWANObjectCache(),
+                       $config->get( 'InterwikiExpiry' ),
+                       $config->get( 'InterwikiCache' ),
+                       $config->get( 'InterwikiScopes' ),
+                       $config->get( 'InterwikiFallbackSite' )
+               );
        },
 
-       'SkinFactory' => function ( MediaWikiServices $services ) {
-               $factory = new SkinFactory();
+       'LinkCache' => function ( MediaWikiServices $services ) : LinkCache {
+               return new LinkCache(
+                       $services->getTitleFormatter(),
+                       $services->getMainWANObjectCache()
+               );
+       },
 
-               $names = $services->getMainConfig()->get( 'ValidSkinNames' );
+       'LinkRenderer' => function ( MediaWikiServices $services ) : LinkRenderer {
+               global $wgUser;
 
-               foreach ( $names as $name => $skin ) {
-                       $factory->register( $name, $skin, function () use ( $name, $skin ) {
-                               $class = "Skin$skin";
-                               return new $class( $name );
-                       } );
+               if ( defined( 'MW_NO_SESSION' ) ) {
+                       return $services->getLinkRendererFactory()->create();
+               } else {
+                       return $services->getLinkRendererFactory()->createForUser( $wgUser );
                }
-               // Register a hidden "fallback" skin
-               $factory->register( 'fallback', 'Fallback', function () {
-                       return new SkinFallback;
-               } );
-               // Register a hidden skin for api output
-               $factory->register( 'apioutput', 'ApiOutput', function () {
-                       return new SkinApi;
-               } );
-
-               return $factory;
        },
 
-       'WatchedItemStore' => function ( MediaWikiServices $services ) {
-               $store = new WatchedItemStore(
-                       $services->getDBLoadBalancer(),
-                       new HashBagOStuff( [ 'maxKeys' => 100 ] ),
-                       $services->getReadOnlyMode(),
-                       $services->getMainConfig()->get( 'UpdateRowsPerQuery' )
+       'LinkRendererFactory' => function ( MediaWikiServices $services ) : LinkRendererFactory {
+               return new LinkRendererFactory(
+                       $services->getTitleFormatter(),
+                       $services->getLinkCache()
                );
-               $store->setStatsdDataFactory( $services->getStatsdDataFactory() );
-
-               if ( $services->getMainConfig()->get( 'ReadOnlyWatchedItemStore' ) ) {
-                       $store = new NoWriteWatchedItemStore( $store );
-               }
+       },
 
-               return $store;
+       'LocalServerObjectCache' => function ( MediaWikiServices $services ) : BagOStuff {
+               $cacheId = \ObjectCache::detectLocalServerCache();
+               return \ObjectCache::newFromId( $cacheId );
        },
 
-       'WatchedItemQueryService' => function ( MediaWikiServices $services ) {
-               return new WatchedItemQueryService(
-                       $services->getDBLoadBalancer(),
-                       $services->getCommentStore(),
-                       $services->getActorMigration()
-               );
+       'MagicWordFactory' => function ( MediaWikiServices $services ) : MagicWordFactory {
+               return new MagicWordFactory( $services->getContentLanguage() );
        },
 
-       'CryptRand' => function () {
-               return new CryptRand();
+       'MainConfig' => function ( MediaWikiServices $services ) : Config {
+               // Use the 'main' config from the ConfigFactory service.
+               return $services->getConfigFactory()->makeConfig( 'main' );
        },
 
-       'CryptHKDF' => function ( MediaWikiServices $services ) {
-               $config = $services->getMainConfig();
+       'MainObjectStash' => function ( MediaWikiServices $services ) : BagOStuff {
+               $mainConfig = $services->getMainConfig();
 
-               $secret = $config->get( 'HKDFSecret' ) ?: $config->get( 'SecretKey' );
-               if ( !$secret ) {
-                       throw new RuntimeException( "Cannot use MWCryptHKDF without a secret." );
+               $id = $mainConfig->get( 'MainStash' );
+               if ( !isset( $mainConfig->get( 'ObjectCaches' )[$id] ) ) {
+                       throw new UnexpectedValueException(
+                               "Cache type \"$id\" is not present in \$wgObjectCaches." );
                }
 
-               // In HKDF, the context can be known to the attacker, but this will
-               // keep simultaneous runs from producing the same output.
-               $context = [ microtime(), getmypid(), gethostname() ];
+               return \ObjectCache::newFromParams( $mainConfig->get( 'ObjectCaches' )[$id] );
+       },
 
-               // Setup salt cache. Use APC, or fallback to the main cache if it isn't setup
-               $cache = $services->getLocalServerObjectCache();
-               if ( $cache instanceof EmptyBagOStuff ) {
-                       $cache = ObjectCache::getLocalClusterInstance();
+       'MainWANObjectCache' => function ( MediaWikiServices $services ) : WANObjectCache {
+               $mainConfig = $services->getMainConfig();
+
+               $id = $mainConfig->get( 'MainWANCache' );
+               if ( !isset( $mainConfig->get( 'WANObjectCaches' )[$id] ) ) {
+                       throw new UnexpectedValueException(
+                               "WAN cache type \"$id\" is not present in \$wgWANObjectCaches." );
                }
 
-               return new CryptHKDF( $secret, $config->get( 'HKDFAlgorithm' ), $cache, $context );
+               $params = $mainConfig->get( 'WANObjectCaches' )[$id];
+               $objectCacheId = $params['cacheId'];
+               if ( !isset( $mainConfig->get( 'ObjectCaches' )[$objectCacheId] ) ) {
+                       throw new UnexpectedValueException(
+                               "Cache type \"$objectCacheId\" is not present in \$wgObjectCaches." );
+               }
+               $params['store'] = $mainConfig->get( 'ObjectCaches' )[$objectCacheId];
+
+               return \ObjectCache::newWANCacheFromParams( $params );
        },
 
-       'MediaHandlerFactory' => function ( MediaWikiServices $services ) {
+       'MediaHandlerFactory' => function ( MediaWikiServices $services ) : MediaHandlerFactory {
                return new MediaHandlerFactory(
                        $services->getMainConfig()->get( 'MediaHandlers' )
                );
        },
 
-       'MimeAnalyzer' => function ( MediaWikiServices $services ) {
+       'MimeAnalyzer' => function ( MediaWikiServices $services ) : MimeAnalyzer {
                $logger = LoggerFactory::getInstance( 'Mime' );
                $mainConfig = $services->getMainConfig();
                $params = [
@@ -289,21 +357,19 @@ return [
                return new MimeMagic( $params );
        },
 
-       'ProxyLookup' => function ( MediaWikiServices $services ) {
-               $mainConfig = $services->getMainConfig();
-               return new ProxyLookup(
-                       $mainConfig->get( 'SquidServers' ),
-                       $mainConfig->get( 'SquidServersNoPurge' )
+       'OldRevisionImporter' => function ( MediaWikiServices $services ) : OldRevisionImporter {
+               return new ImportableOldRevisionImporter(
+                       true,
+                       LoggerFactory::getInstance( 'OldRevisionImporter' ),
+                       $services->getDBLoadBalancer()
                );
        },
 
-       'Parser' => function ( MediaWikiServices $services ) {
-               $conf = $services->getMainConfig()->get( 'ParserConf' );
-               return ObjectFactory::constructClassInstance( $conf['class'],
-                       [ $conf, $services->getMagicWordFactory() ] );
+       'Parser' => function ( MediaWikiServices $services ) : Parser {
+               return $services->getParserFactory()->create();
        },
 
-       'ParserCache' => function ( MediaWikiServices $services ) {
+       'ParserCache' => function ( MediaWikiServices $services ) : ParserCache {
                $config = $services->getMainConfig();
                $cache = ObjectCache::getInstance( $config->get( 'ParserCacheType' ) );
                wfDebugLog( 'caches', 'parser: ' . get_class( $cache ) );
@@ -314,138 +380,97 @@ return [
                );
        },
 
-       'LinkCache' => function ( MediaWikiServices $services ) {
-               return new LinkCache(
-                       $services->getTitleFormatter(),
-                       $services->getMainWANObjectCache()
+       'ParserFactory' => function ( MediaWikiServices $services ) : ParserFactory {
+               return new ParserFactory(
+                       $services->getMainConfig()->get( 'ParserConf' ),
+                       $services->getMagicWordFactory(),
+                       $services->getContentLanguage(),
+                       wfUrlProtocols()
                );
        },
 
-       'LinkRendererFactory' => function ( MediaWikiServices $services ) {
-               return new LinkRendererFactory(
-                       $services->getTitleFormatter(),
-                       $services->getLinkCache()
+       'PasswordFactory' => function ( MediaWikiServices $services ) : PasswordFactory {
+               $config = $services->getMainConfig();
+               return new PasswordFactory(
+                       $config->get( 'PasswordConfig' ),
+                       $config->get( 'PasswordDefault' )
                );
        },
 
-       'LinkRenderer' => function ( MediaWikiServices $services ) {
-               global $wgUser;
-
-               if ( defined( 'MW_NO_SESSION' ) ) {
-                       return $services->getLinkRendererFactory()->create();
-               } else {
-                       return $services->getLinkRendererFactory()->createForUser( $wgUser );
-               }
-       },
-
-       'GenderCache' => function ( MediaWikiServices $services ) {
-               return new GenderCache();
+       'PerDbNameStatsdDataFactory' =>
+       function ( MediaWikiServices $services ) : IBufferingStatsdDataFactory {
+               $config = $services->getMainConfig();
+               $wiki = $config->get( 'DBname' );
+               return new BufferingStatsdDataFactory(
+                       rtrim( $services->getMainConfig()->get( 'StatsdMetricPrefix' ), '.' ) . '.' . $wiki
+               );
        },
 
-       '_MediaWikiTitleCodec' => function ( MediaWikiServices $services ) {
-               return new MediaWikiTitleCodec(
+       'PreferencesFactory' => function ( MediaWikiServices $services ) : PreferencesFactory {
+               $factory = new DefaultPreferencesFactory(
+                       $services->getMainConfig(),
                        $services->getContentLanguage(),
-                       $services->getGenderCache(),
-                       $services->getMainConfig()->get( 'LocalInterwikis' )
+                       AuthManager::singleton(),
+                       $services->getLinkRendererFactory()->create()
                );
-       },
-
-       'TitleFormatter' => function ( MediaWikiServices $services ) {
-               return $services->getService( '_MediaWikiTitleCodec' );
-       },
+               $factory->setLogger( LoggerFactory::getInstance( 'preferences' ) );
 
-       'TitleParser' => function ( MediaWikiServices $services ) {
-               return $services->getService( '_MediaWikiTitleCodec' );
+               return $factory;
        },
 
-       'MainObjectStash' => function ( MediaWikiServices $services ) {
+       'ProxyLookup' => function ( MediaWikiServices $services ) : ProxyLookup {
                $mainConfig = $services->getMainConfig();
-
-               $id = $mainConfig->get( 'MainStash' );
-               if ( !isset( $mainConfig->get( 'ObjectCaches' )[$id] ) ) {
-                       throw new UnexpectedValueException(
-                               "Cache type \"$id\" is not present in \$wgObjectCaches." );
-               }
-
-               return \ObjectCache::newFromParams( $mainConfig->get( 'ObjectCaches' )[$id] );
+               return new ProxyLookup(
+                       $mainConfig->get( 'SquidServers' ),
+                       $mainConfig->get( 'SquidServersNoPurge' )
+               );
        },
 
-       'MainWANObjectCache' => function ( MediaWikiServices $services ) {
-               $mainConfig = $services->getMainConfig();
-
-               $id = $mainConfig->get( 'MainWANCache' );
-               if ( !isset( $mainConfig->get( 'WANObjectCaches' )[$id] ) ) {
-                       throw new UnexpectedValueException(
-                               "WAN cache type \"$id\" is not present in \$wgWANObjectCaches." );
-               }
-
-               $params = $mainConfig->get( 'WANObjectCaches' )[$id];
-               $objectCacheId = $params['cacheId'];
-               if ( !isset( $mainConfig->get( 'ObjectCaches' )[$objectCacheId] ) ) {
-                       throw new UnexpectedValueException(
-                               "Cache type \"$objectCacheId\" is not present in \$wgObjectCaches." );
-               }
-               $params['store'] = $mainConfig->get( 'ObjectCaches' )[$objectCacheId];
-
-               return \ObjectCache::newWANCacheFromParams( $params );
+       'ReadOnlyMode' => function ( MediaWikiServices $services ) : ReadOnlyMode {
+               return new ReadOnlyMode(
+                       $services->getConfiguredReadOnlyMode(),
+                       $services->getDBLoadBalancer()
+               );
        },
 
-       'LocalServerObjectCache' => function ( MediaWikiServices $services ) {
-               $cacheId = \ObjectCache::detectLocalServerCache();
-               return \ObjectCache::newFromId( $cacheId );
+       'RevisionFactory' => function ( MediaWikiServices $services ) : RevisionFactory {
+               return $services->getRevisionStore();
        },
 
-       'VirtualRESTServiceClient' => function ( MediaWikiServices $services ) {
-               $config = $services->getMainConfig()->get( 'VirtualRestConfig' );
-
-               $vrsClient = new VirtualRESTServiceClient( new MultiHttpClient( [] ) );
-               foreach ( $config['paths'] as $prefix => $serviceConfig ) {
-                       $class = $serviceConfig['class'];
-                       // Merge in the global defaults
-                       $constructArg = $serviceConfig['options'] ?? [];
-                       $constructArg += $config['global'];
-                       // Make the VRS service available at the mount point
-                       $vrsClient->mount( $prefix, [ 'class' => $class, 'config' => $constructArg ] );
-               }
-
-               return $vrsClient;
+       'RevisionLookup' => function ( MediaWikiServices $services ) : RevisionLookup {
+               return $services->getRevisionStore();
        },
 
-       'ConfiguredReadOnlyMode' => function ( MediaWikiServices $services ) {
-               return new ConfiguredReadOnlyMode( $services->getMainConfig() );
+       'RevisionStore' => function ( MediaWikiServices $services ) : RevisionStore {
+               return $services->getRevisionStoreFactory()->getRevisionStore();
        },
 
-       'ReadOnlyMode' => function ( MediaWikiServices $services ) {
-               return new ReadOnlyMode(
-                       $services->getConfiguredReadOnlyMode(),
-                       $services->getDBLoadBalancer()
+       'RevisionStoreFactory' => function ( MediaWikiServices $services ) : RevisionStoreFactory {
+               $config = $services->getMainConfig();
+               $store = new RevisionStoreFactory(
+                       $services->getDBLoadBalancerFactory(),
+                       $services->getBlobStoreFactory(),
+                       $services->getMainWANObjectCache(),
+                       $services->getCommentStore(),
+                       $services->getActorMigration(),
+                       $config->get( 'MultiContentRevisionSchemaMigrationStage' ),
+                       LoggerFactory::getProvider(),
+                       $config->get( 'ContentHandlerUseDB' )
                );
-       },
 
-       'UploadRevisionImporter' => function ( MediaWikiServices $services ) {
-               return new ImportableUploadRevisionImporter(
-                       $services->getMainConfig()->get( 'EnableUploads' ),
-                       LoggerFactory::getInstance( 'UploadRevisionImporter' )
-               );
+               return $store;
        },
 
-       'OldRevisionImporter' => function ( MediaWikiServices $services ) {
-               return new ImportableOldRevisionImporter(
-                       true,
-                       LoggerFactory::getInstance( 'OldRevisionImporter' ),
-                       $services->getDBLoadBalancer()
-               );
+       'SearchEngineConfig' => function ( MediaWikiServices $services ) : SearchEngineConfig {
+               return new SearchEngineConfig( $services->getMainConfig(),
+                       $services->getContentLanguage() );
        },
 
-       'WikiRevisionOldRevisionImporterNoUpdates' => function ( MediaWikiServices $services ) {
-               return new ImportableOldRevisionImporter(
-                       false,
-                       LoggerFactory::getInstance( 'OldRevisionImporter' ),
-                       $services->getDBLoadBalancer()
-               );
+       'SearchEngineFactory' => function ( MediaWikiServices $services ) : SearchEngineFactory {
+               return new SearchEngineFactory( $services->getSearchEngineConfig() );
        },
 
-       'ShellCommandFactory' => function ( MediaWikiServices $services ) {
+       'ShellCommandFactory' => function ( MediaWikiServices $services ) : CommandFactory {
                $config = $services->getMainConfig();
 
                $limits = [
@@ -464,77 +489,51 @@ return [
                return $factory;
        },
 
-       'ExternalStoreFactory' => function ( MediaWikiServices $services ) {
-               $config = $services->getMainConfig();
-
-               return new ExternalStoreFactory(
-                       $config->get( 'ExternalStores' )
-               );
-       },
+       'SiteLookup' => function ( MediaWikiServices $services ) : SiteLookup {
+               $cacheFile = $services->getMainConfig()->get( 'SitesCacheFile' );
 
-       'RevisionStore' => function ( MediaWikiServices $services ) {
-               return $services->getRevisionStoreFactory()->getRevisionStore();
+               if ( $cacheFile !== false ) {
+                       return new FileBasedSiteLookup( $cacheFile );
+               } else {
+                       // Use the default SiteStore as the SiteLookup implementation for now
+                       return $services->getSiteStore();
+               }
        },
 
-       'RevisionStoreFactory' => function ( MediaWikiServices $services ) {
-               $config = $services->getMainConfig();
-               $store = new RevisionStoreFactory(
-                       $services->getDBLoadBalancerFactory(),
-                       $services->getBlobStoreFactory(),
-                       $services->getMainWANObjectCache(),
-                       $services->getCommentStore(),
-                       $services->getActorMigration(),
-                       $config->get( 'MultiContentRevisionSchemaMigrationStage' ),
-                       LoggerFactory::getProvider(),
-                       $config->get( 'ContentHandlerUseDB' )
-               );
-
-               return $store;
-       },
+       'SiteStore' => function ( MediaWikiServices $services ) : SiteStore {
+               $rawSiteStore = new DBSiteStore( $services->getDBLoadBalancer() );
 
-       'RevisionLookup' => function ( MediaWikiServices $services ) {
-               return $services->getRevisionStore();
-       },
+               // TODO: replace wfGetCache with a CacheFactory service.
+               // TODO: replace wfIsHHVM with a capabilities service.
+               $cache = wfGetCache( wfIsHHVM() ? CACHE_ACCEL : CACHE_ANYTHING );
 
-       'RevisionFactory' => function ( MediaWikiServices $services ) {
-               return $services->getRevisionStore();
+               return new CachingSiteStore( $rawSiteStore, $cache );
        },
 
-       'BlobStoreFactory' => function ( MediaWikiServices $services ) {
-               return new BlobStoreFactory(
-                       $services->getDBLoadBalancer(),
-                       $services->getMainWANObjectCache(),
-                       $services->getMainConfig(),
-                       $services->getContentLanguage()
-               );
-       },
+       'SkinFactory' => function ( MediaWikiServices $services ) : SkinFactory {
+               $factory = new SkinFactory();
 
-       'BlobStore' => function ( MediaWikiServices $services ) {
-               return $services->getService( '_SqlBlobStore' );
-       },
+               $names = $services->getMainConfig()->get( 'ValidSkinNames' );
 
-       '_SqlBlobStore' => function ( MediaWikiServices $services ) {
-               return $services->getBlobStoreFactory()->newSqlBlobStore();
-       },
+               foreach ( $names as $name => $skin ) {
+                       $factory->register( $name, $skin, function () use ( $name, $skin ) {
+                               $class = "Skin$skin";
+                               return new $class( $name );
+                       } );
+               }
+               // Register a hidden "fallback" skin
+               $factory->register( 'fallback', 'Fallback', function () {
+                       return new SkinFallback;
+               } );
+               // Register a hidden skin for api output
+               $factory->register( 'apioutput', 'ApiOutput', function () {
+                       return new SkinApi;
+               } );
 
-       'ContentModelStore' => function ( MediaWikiServices $services ) {
-               return new NameTableStore(
-                       $services->getDBLoadBalancer(),
-                       $services->getMainWANObjectCache(),
-                       LoggerFactory::getInstance( 'NameTableSqlStore' ),
-                       'content_models',
-                       'model_id',
-                       'model_name'
-                       /**
-                        * No strtolower normalization is added to the service as there are examples of
-                        * extensions that do not stick to this assumption.
-                        * - extensions/examples/DataPages define( 'CONTENT_MODEL_XML_DATA','XML_DATA' );
-                        * - extensions/Scribunto define( 'CONTENT_MODEL_SCRIBUNTO', 'Scribunto' );
-                        */
-               );
+               return $factory;
        },
 
-       'SlotRoleStore' => function ( MediaWikiServices $services ) {
+       'SlotRoleStore' => function ( MediaWikiServices $services ) : NameTableStore {
                return new NameTableStore(
                        $services->getDBLoadBalancer(),
                        $services->getMainWANObjectCache(),
@@ -546,68 +545,90 @@ return [
                );
        },
 
-       'ChangeTagDefStore' => function ( MediaWikiServices $services ) {
-               return new NameTableStore(
-                       $services->getDBLoadBalancer(),
-                       $services->getMainWANObjectCache(),
-                       LoggerFactory::getInstance( 'NameTableSqlStore' ),
-                       'change_tag_def',
-                       'ctd_id',
-                       'ctd_name',
-                       null,
-                       false,
-                       function ( $insertFields ) {
-                               $insertFields['ctd_user_defined'] = 0;
-                               $insertFields['ctd_count'] = 0;
-                               return $insertFields;
-                       }
+       'StatsdDataFactory' => function ( MediaWikiServices $services ) : IBufferingStatsdDataFactory {
+               return new BufferingStatsdDataFactory(
+                       rtrim( $services->getMainConfig()->get( 'StatsdMetricPrefix' ), '.' )
                );
        },
 
-       'PreferencesFactory' => function ( MediaWikiServices $services ) {
-               $authManager = AuthManager::singleton();
-               $linkRenderer = $services->getLinkRendererFactory()->create();
-               $config = $services->getMainConfig();
-               $factory = new DefaultPreferencesFactory( $config, $services->getContentLanguage(),
-                       $authManager, $linkRenderer );
-               $factory->setLogger( LoggerFactory::getInstance( 'preferences' ) );
-
-               return $factory;
+       'TitleFormatter' => function ( MediaWikiServices $services ) : TitleFormatter {
+               return $services->getService( '_MediaWikiTitleCodec' );
        },
 
-       'HttpRequestFactory' => function ( MediaWikiServices $services ) {
-               return new \MediaWiki\Http\HttpRequestFactory();
+       'TitleParser' => function ( MediaWikiServices $services ) : TitleParser {
+               return $services->getService( '_MediaWikiTitleCodec' );
        },
 
-       'CommentStore' => function ( MediaWikiServices $services ) {
-               return new CommentStore(
-                       $services->getContentLanguage(),
-                       $services->getMainConfig()->get( 'CommentTableSchemaMigrationStage' )
+       'UploadRevisionImporter' => function ( MediaWikiServices $services ) : UploadRevisionImporter {
+               return new ImportableUploadRevisionImporter(
+                       $services->getMainConfig()->get( 'EnableUploads' ),
+                       LoggerFactory::getInstance( 'UploadRevisionImporter' )
                );
        },
 
-       'ActorMigration' => function ( MediaWikiServices $services ) {
-               return new ActorMigration(
-                       $services->getMainConfig()->get( 'ActorTableSchemaMigrationStage' )
+       'VirtualRESTServiceClient' =>
+       function ( MediaWikiServices $services ) : VirtualRESTServiceClient {
+               $config = $services->getMainConfig()->get( 'VirtualRestConfig' );
+
+               $vrsClient = new VirtualRESTServiceClient( new MultiHttpClient( [] ) );
+               foreach ( $config['paths'] as $prefix => $serviceConfig ) {
+                       $class = $serviceConfig['class'];
+                       // Merge in the global defaults
+                       $constructArg = $serviceConfig['options'] ?? [];
+                       $constructArg += $config['global'];
+                       // Make the VRS service available at the mount point
+                       $vrsClient->mount( $prefix, [ 'class' => $class, 'config' => $constructArg ] );
+               }
+
+               return $vrsClient;
+       },
+
+       'WatchedItemQueryService' =>
+       function ( MediaWikiServices $services ) : WatchedItemQueryService {
+               return new WatchedItemQueryService(
+                       $services->getDBLoadBalancer(),
+                       $services->getCommentStore(),
+                       $services->getActorMigration()
                );
        },
 
-       'MagicWordFactory' => function ( MediaWikiServices $services ) {
-               return new MagicWordFactory( $services->getContentLanguage() );
+       'WatchedItemStore' => function ( MediaWikiServices $services ) : WatchedItemStore {
+               $store = new WatchedItemStore(
+                       $services->getDBLoadBalancer(),
+                       new HashBagOStuff( [ 'maxKeys' => 100 ] ),
+                       $services->getReadOnlyMode(),
+                       $services->getMainConfig()->get( 'UpdateRowsPerQuery' )
+               );
+               $store->setStatsdDataFactory( $services->getStatsdDataFactory() );
+
+               if ( $services->getMainConfig()->get( 'ReadOnlyWatchedItemStore' ) ) {
+                       $store = new NoWriteWatchedItemStore( $store );
+               }
+
+               return $store;
        },
 
-       'ContentLanguage' => function ( MediaWikiServices $services ) {
-               return Language::factory( $services->getMainConfig()->get( 'LanguageCode' ) );
+       'WikiRevisionOldRevisionImporterNoUpdates' =>
+       function ( MediaWikiServices $services ) : ImportableOldRevisionImporter {
+               return new ImportableOldRevisionImporter(
+                       false,
+                       LoggerFactory::getInstance( 'OldRevisionImporter' ),
+                       $services->getDBLoadBalancer()
+               );
        },
 
-       'PasswordFactory' => function ( MediaWikiServices $services ) {
-               $config = $services->getMainConfig();
-               return new PasswordFactory(
-                       $config->get( 'PasswordConfig' ),
-                       $config->get( 'PasswordDefault' )
+       '_MediaWikiTitleCodec' => function ( MediaWikiServices $services ) : MediaWikiTitleCodec {
+               return new MediaWikiTitleCodec(
+                       $services->getContentLanguage(),
+                       $services->getGenderCache(),
+                       $services->getMainConfig()->get( 'LocalInterwikis' )
                );
        },
 
+       '_SqlBlobStore' => function ( MediaWikiServices $services ) : SqlBlobStore {
+               return $services->getBlobStoreFactory()->newSqlBlobStore();
+       },
+
        ///////////////////////////////////////////////////////////////////////////
        // NOTE: When adding a service here, don't forget to add a getter function
        // in the MediaWikiServices class. The convenience getter should just call
index 3ad19d4..a00766f 100644 (file)
@@ -110,7 +110,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
        /**
         * @var Language
         */
-       private $contentLanguage;
+       private $contLang;
 
        /**
         * @var LoggerInterface
@@ -251,7 +251,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
         * @param ParserCache $parserCache
         * @param JobQueueGroup $jobQueueGroup
         * @param MessageCache $messageCache
-        * @param Language $contentLanguage
+        * @param Language $contLang
         * @param LoggerInterface|null $saveParseLogger
         */
        public function __construct(
@@ -260,7 +260,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                ParserCache $parserCache,
                JobQueueGroup $jobQueueGroup,
                MessageCache $messageCache,
-               Language $contentLanguage,
+               Language $contLang,
                LoggerInterface $saveParseLogger = null
        ) {
                $this->wikiPage = $wikiPage;
@@ -269,7 +269,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                $this->revisionStore = $revisionStore;
                $this->jobQueueGroup = $jobQueueGroup;
                $this->messageCache = $messageCache;
-               $this->contentLanguage = $contentLanguage;
+               $this->contLang = $contLang;
 
                // XXX: replace all wfDebug calls with a Logger. Do we nede more than one logger here?
                $this->saveParseLogger = $saveParseLogger ?: new NullLogger();
@@ -320,7 +320,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
 
        /**
         * Checks whether this DerivedPageDataUpdater can be re-used for running updates targeting
-        * the the given revision.
+        * the given revision.
         *
         * @param UserIdentity|null $user The user creating the revision in question
         * @param RevisionRecord|null $revision New revision (after save, if already saved)
@@ -762,7 +762,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                        $this->canonicalParserOutput = $output;
                }
 
-               $userPopts = ParserOptions::newFromUserAndLang( $user, $this->contentLanguage );
+               $userPopts = ParserOptions::newFromUserAndLang( $user, $this->contLang );
                Hooks::run( 'ArticlePrepareTextForEdit', [ $wikiPage, $userPopts ] );
 
                $this->user = $user;
index 65c0361..5769527 100644 (file)
@@ -207,6 +207,20 @@ class RevisionStore
                return ( $this->mcrMigrationStage & $flags ) === $flags;
        }
 
+       /**
+        * Throws a RevisionAccessException if this RevisionStore is configured for cross-wiki loading
+        * and still reading from the old DB schema.
+        *
+        * @throws RevisionAccessException
+        */
+       private function assertCrossWikiContentLoadingIsSafe() {
+               if ( $this->wikiId !== false && $this->hasMcrSchemaFlags( SCHEMA_COMPAT_READ_OLD ) ) {
+                       throw new RevisionAccessException(
+                               "Cross-wiki content loading is not supported by the pre-MCR schema"
+                       );
+               }
+       }
+
        public function setLogger( LoggerInterface $logger ) {
                $this->logger = $logger;
        }
@@ -780,6 +794,8 @@ class RevisionStore
 
                        // MCR migration note: rev_content_model and rev_content_format will go away
                        if ( $this->contentHandlerUseDB ) {
+                               $this->assertCrossWikiContentLoadingIsSafe();
+
                                $defaultModel = ContentHandler::getDefaultModelFor( $title );
                                $defaultFormat = ContentHandler::getForModelID( $defaultModel )->getDefaultFormat();
 
@@ -888,6 +904,8 @@ class RevisionStore
                        // if $wgContentHandlerUseDB is not set,
                        // all revisions must use the default content model and format.
 
+                       $this->assertCrossWikiContentLoadingIsSafe();
+
                        $defaultModel = ContentHandler::getDefaultModelFor( $title );
                        $defaultHandler = ContentHandler::getForModelID( $defaultModel );
                        $defaultFormat = $defaultHandler->getDefaultFormat();
@@ -1207,6 +1225,8 @@ class RevisionStore
 
                if ( $mainSlotRow->model_name === null ) {
                        $mainSlotRow->model_name = function ( SlotRecord $slot ) use ( $title ) {
+                               $this->assertCrossWikiContentLoadingIsSafe();
+
                                // TODO: MCR: consider slot role in getDefaultModelFor()! Use LinkTarget!
                                // TODO: MCR: deprecate $title->getModel().
                                return ContentHandler::getDefaultModelFor( $title );
index cfc5444..9419b40 100644 (file)
@@ -75,7 +75,8 @@ class RevisionStoreFactory {
         * @param ActorMigration $actorMigration
         * @param int $migrationStage
         * @param LoggerSpi $loggerProvider
-        * @param bool $contentHandlerUseDB see {@link $wgContentHandlerUseDB}
+        * @param bool $contentHandlerUseDB see {@link $wgContentHandlerUseDB}. Must be the same
+        *        for all wikis in the cluster. Will go away after MCR migration.
         */
        public function __construct(
                ILBFactory $dbLoadBalancerFactory,
index dc7d31e..4210a96 100644 (file)
@@ -67,7 +67,7 @@ class TemplateParser {
        }
 
        /**
-        * Constructs the location of the the source Mustache template
+        * Constructs the location of the source Mustache template
         * @param string $templateName The name of the template
         * @return string
         * @throws UnexpectedValueException If $templateName attempts upwards directory traversal
index cc7d722..f2c6adb 100644 (file)
@@ -745,12 +745,10 @@ class Title implements LinkTarget {
        public static function makeName( $ns, $title, $fragment = '', $interwiki = '',
                $canonicalNamespace = false
        ) {
-               global $wgContLang;
-
                if ( $canonicalNamespace ) {
                        $namespace = MWNamespace::getCanonicalName( $ns );
                } else {
-                       $namespace = $wgContLang->getNsText( $ns );
+                       $namespace = MediaWikiServices::getInstance()->getContentLanguage()->getNsText( $ns );
                }
                $name = $namespace == '' ? $title : "$namespace:$title";
                if ( strval( $interwiki ) != '' ) {
@@ -1051,8 +1049,8 @@ class Title implements LinkTarget {
         * @return string Namespace text
         */
        public function getSubjectNsText() {
-               global $wgContLang;
-               return $wgContLang->getNsText( MWNamespace::getSubject( $this->mNamespace ) );
+               return MediaWikiServices::getInstance()->getContentLanguage()->
+                       getNsText( MWNamespace::getSubject( $this->mNamespace ) );
        }
 
        /**
@@ -1061,8 +1059,8 @@ class Title implements LinkTarget {
         * @return string Namespace text
         */
        public function getTalkNsText() {
-               global $wgContLang;
-               return $wgContLang->getNsText( MWNamespace::getTalk( $this->mNamespace ) );
+               return MediaWikiServices::getInstance()->getContentLanguage()->
+                       getNsText( MWNamespace::getTalk( $this->mNamespace ) );
        }
 
        /**
@@ -1632,8 +1630,6 @@ class Title implements LinkTarget {
         * @return string The prefixed text
         */
        private function prefix( $name ) {
-               global $wgContLang;
-
                $p = '';
                if ( $this->isExternal() ) {
                        $p = $this->mInterwiki . ':';
@@ -1644,7 +1640,8 @@ class Title implements LinkTarget {
 
                        if ( $nsText === false ) {
                                // See T165149. Awkward, but better than erroneously linking to the main namespace.
-                               $nsText = $wgContLang->getNsText( NS_SPECIAL ) . ":Badtitle/NS{$this->mNamespace}";
+                               $nsText = MediaWikiServices::getInstance()->getContentLanguage()->
+                                       getNsText( NS_SPECIAL ) .  ":Badtitle/NS{$this->mNamespace}";
                        }
 
                        $p .= $nsText . ':';
@@ -1979,7 +1976,7 @@ class Title implements LinkTarget {
                                $titleRef = $this;
                                Hooks::run( 'GetLocalURL::Article', [ &$titleRef, &$url ] );
                        } else {
-                               global $wgVariantArticlePath, $wgActionPaths, $wgContLang;
+                               global $wgVariantArticlePath, $wgActionPaths;
                                $url = false;
                                $matches = [];
 
@@ -2002,7 +1999,8 @@ class Title implements LinkTarget {
                                if ( $url === false
                                        && $wgVariantArticlePath
                                        && preg_match( '/^variant=([^&]*)$/', $query, $matches )
-                                       && $this->getPageLanguage()->equals( $wgContLang )
+                                       && $this->getPageLanguage()->equals(
+                                               MediaWikiServices::getInstance()->getContentLanguage() )
                                        && $this->getPageLanguage()->hasVariants()
                                ) {
                                        $variant = urldecode( $matches[1] );
@@ -3677,10 +3675,8 @@ class Title implements LinkTarget {
         * @return string Containing capitalized title
         */
        public static function capitalize( $text, $ns = NS_MAIN ) {
-               global $wgContLang;
-
                if ( MWNamespace::isCapitalized( $ns ) ) {
-                       return $wgContLang->ucfirst( $text );
+                       return MediaWikiServices::getInstance()->getContentLanguage()->ucfirst( $text );
                } else {
                        return $text;
                }
@@ -4227,8 +4223,6 @@ class Title implements LinkTarget {
         *     $parent => $currentarticle
         */
        public function getParentCategories() {
-               global $wgContLang;
-
                $data = [];
 
                $titleKey = $this->getArticleID();
@@ -4247,9 +4241,11 @@ class Title implements LinkTarget {
                );
 
                if ( $res->numRows() > 0 ) {
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                        foreach ( $res as $row ) {
-                               // $data[] = Title::newFromText($wgContLang->getNsText ( NS_CATEGORY ).':'.$row->cl_to);
-                               $data[$wgContLang->getNsText( NS_CATEGORY ) . ':' . $row->cl_to] = $this->getFullText();
+                               // $data[] = Title::newFromText( $contLang->getNsText ( NS_CATEGORY ).':'.$row->cl_to);
+                               $data[$contLang->getNsText( NS_CATEGORY ) . ':' . $row->cl_to] =
+                                       $this->getFullText();
                        }
                }
                return $data;
@@ -4733,11 +4729,11 @@ class Title implements LinkTarget {
                        // message content will be displayed, same for language subpages-
                        // Use always content language to avoid loading hundreds of languages
                        // to get the link color.
-                       global $wgContLang;
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                        list( $name, ) = MessageCache::singleton()->figureMessage(
-                               $wgContLang->lcfirst( $this->getText() )
+                               $contLang->lcfirst( $this->getText() )
                        );
-                       $message = wfMessage( $name )->inLanguage( $wgContLang )->useDatabase( false );
+                       $message = wfMessage( $name )->inLanguage( $contLang )->useDatabase( false );
                        return $message->exists();
                }
 
@@ -4750,14 +4746,12 @@ class Title implements LinkTarget {
         * @return string|bool
         */
        public function getDefaultMessageText() {
-               global $wgContLang;
-
                if ( $this->getNamespace() != NS_MEDIAWIKI ) { // Just in case
                        return false;
                }
 
                list( $name, $lang ) = MessageCache::singleton()->figureMessage(
-                       $wgContLang->lcfirst( $this->getText() )
+                       MediaWikiServices::getInstance()->getContentLanguage()->lcfirst( $this->getText() )
                );
                $message = wfMessage( $name )->inLanguage( $lang )->useDatabase( false );
 
@@ -4884,7 +4878,6 @@ class Title implements LinkTarget {
         * @return string XML 'id' name
         */
        public function getNamespaceKey( $prepend = 'nstab-' ) {
-               global $wgContLang;
                // Gets the subject namespace of this title
                $subjectNS = MWNamespace::getSubject( $this->getNamespace() );
                // Prefer canonical namespace name for HTML IDs
@@ -4894,7 +4887,7 @@ class Title implements LinkTarget {
                        $namespaceKey = $this->getSubjectNsText();
                }
                // Makes namespace key lowercase
-               $namespaceKey = $wgContLang->lc( $namespaceKey );
+               $namespaceKey = MediaWikiServices::getInstance()->getContentLanguage()->lc( $namespaceKey );
                // Uses main
                if ( $namespaceKey == '' ) {
                        $namespaceKey = 'main';
@@ -5043,7 +5036,7 @@ class Title implements LinkTarget {
 
        /**
         * Get the language in which the content of this page is written in
-        * wikitext. Defaults to $wgContLang, but in certain cases it can be
+        * wikitext. Defaults to content language, but in certain cases it can be
         * e.g. $wgLang (such as special pages, which are in the user language).
         *
         * @since 1.18
@@ -5081,7 +5074,7 @@ class Title implements LinkTarget {
 
        /**
         * Get the language in which the content of this page is written when
-        * viewed by user. Defaults to $wgContLang, but in certain cases it can be
+        * viewed by user. Defaults to content language, but in certain cases it can be
         * e.g. $wgLang (such as special pages, which are in the user language).
         *
         * @since 1.20
index e31d3f9..327dd54 100644 (file)
@@ -162,11 +162,12 @@ class WebRequest {
                                        $router->add( $wgActionPaths, [ 'action' => '$key' ] );
                                }
 
-                               global $wgVariantArticlePath, $wgContLang;
+                               global $wgVariantArticlePath;
                                if ( $wgVariantArticlePath ) {
                                        $router->add( $wgVariantArticlePath,
                                                [ 'variant' => '$2' ],
-                                               [ '$2' => $wgContLang->getVariants() ]
+                                               [ '$2' => MediaWikiServices::getInstance()->getContentLanguage()->
+                                               getVariants() ]
                                        );
                                }
 
@@ -306,7 +307,7 @@ class WebRequest {
        /**
         * Check for title, action, and/or variant data in the URL
         * and interpolate it into the GET variables.
-        * This should only be run after $wgContLang is available,
+        * This should only be run after the content language is available,
         * as we may need the list of language variants to determine
         * available variant URLs.
         */
@@ -364,9 +365,8 @@ class WebRequest {
                                $data[$key] = $this->normalizeUnicode( $val );
                        }
                } else {
-                       global $wgContLang;
-                       $data = isset( $wgContLang ) ?
-                               $wgContLang->normalize( $data ) :
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+                       $data = $contLang ? $contLang->normalize( $data ) :
                                UtfNormal\Validator::cleanUp( $data );
                }
                return $data;
@@ -386,12 +386,12 @@ class WebRequest {
                # Work around PHP *feature* to avoid *bugs* elsewhere.
                $name = strtr( $name, '.', '_' );
                if ( isset( $arr[$name] ) ) {
-                       global $wgContLang;
                        $data = $arr[$name];
                        if ( isset( $_GET[$name] ) && !is_array( $data ) ) {
                                # Check for alternate/legacy character encoding.
-                               if ( isset( $wgContLang ) ) {
-                                       $data = $wgContLang->checkTitleEncoding( $data );
+                               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+                               if ( $contLang ) {
+                                       $data = $contLang->checkTitleEncoding( $data );
                                }
                        }
                        $data = $this->normalizeUnicode( $data );
index 916a10c..34c6062 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Object to access the $_FILES array
  *
@@ -63,13 +65,12 @@ class WebRequestUpload {
                        return null;
                }
 
-               global $wgContLang;
                $name = $this->fileInfo['name'];
 
                # Safari sends filenames in HTML-encoded Unicode form D...
                # Horrid and evil! Let's try to make some kind of sense of it.
                $name = Sanitizer::decodeCharReferences( $name );
-               $name = $wgContLang->normalize( $name );
+               $name = MediaWikiServices::getInstance()->getContentLanguage()->normalize( $name );
                wfDebug( __METHOD__ . ": {$this->fileInfo['name']} normalized to '$name'\n" );
                return $name;
        }
index 8c65461..9744aee 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Module of static functions for generating XML
  */
@@ -79,9 +81,8 @@ class Xml {
        }
 
        /**
-        * Format an XML element as with self::element(), but run text through the
-        * $wgContLang->normalize() validator first to ensure that no invalid UTF-8
-        * is passed.
+        * Format an XML element as with self::element(), but run text through the content language's
+        * normalize() validator first to ensure that no invalid UTF-8 is passed.
         *
         * @param string $element
         * @param array $attribs Name=>value pairs. Values will be escaped.
@@ -89,12 +90,12 @@ class Xml {
         * @return string
         */
        public static function elementClean( $element, $attribs = [], $contents = '' ) {
-               global $wgContLang;
                if ( $attribs ) {
                        $attribs = array_map( [ 'UtfNormal\Validator', 'cleanUp' ], $attribs );
                }
                if ( $contents ) {
-                       $contents = $wgContLang->normalize( $contents );
+                       $contents =
+                               MediaWikiServices::getInstance()->getContentLanguage()->normalize( $contents );
                }
                return self::element( $element, $attribs, $contents );
        }
index fb22445..66f4d59 100644 (file)
@@ -19,6 +19,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @defgroup Actions Action done on pages
  */
@@ -386,8 +388,7 @@ abstract class Action implements MessageLocalizer {
         * @since 1.25
         */
        public function addHelpLink( $to, $overrideBaseUrl = false ) {
-               global $wgContLang;
-               $msg = wfMessage( $wgContLang->lc(
+               $msg = wfMessage( MediaWikiServices::getInstance()->getContentLanguage()->lc(
                        self::getActionName( $this->getContext() )
                        ) . '-helppage' );
 
index 1a15fc0..2778a1d 100644 (file)
@@ -358,12 +358,13 @@ class HistoryAction extends FormlessAction {
                        $rev->getComment()
                );
                if ( $rev->getComment() == '' ) {
-                       global $wgContLang;
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                        $title = $this->msg( 'history-feed-item-nocomment',
                                $rev->getUserText(),
-                               $wgContLang->timeanddate( $rev->getTimestamp() ),
-                               $wgContLang->date( $rev->getTimestamp() ),
-                               $wgContLang->time( $rev->getTimestamp() ) )->inContentLanguage()->text();
+                               $contLang->timeanddate( $rev->getTimestamp() ),
+                               $contLang->date( $rev->getTimestamp() ),
+                               $contLang->time( $rev->getTimestamp() )
+                       )->inContentLanguage()->text();
                } else {
                        $title = $rev->getUserText() .
                                $this->msg( 'colon-separator' )->inContentLanguage()->text() .
index e77cdf7..dc661aa 100644 (file)
@@ -207,8 +207,6 @@ class InfoAction extends FormlessAction {
         * @return array
         */
        protected function pageInfo() {
-               global $wgContLang;
-
                $services = MediaWikiServices::getInstance();
 
                $user = $this->getUser();
@@ -607,7 +605,7 @@ class InfoAction extends FormlessAction {
                $wordIDs = $magicWords->names;
 
                // Array of IDs => localized magic words
-               $localizedWords = $wgContLang->getMagicWords();
+               $localizedWords = $services->getContentLanguage()->getMagicWords();
 
                $listItems = [];
                foreach ( $pageProperties as $property => $value ) {
index a914c9b..68a0325 100644 (file)
@@ -23,6 +23,8 @@
  * @author Rob Church <robchur@gmail.com>
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * File reversion user interface
  *
@@ -78,8 +80,6 @@ class RevertAction extends FormAction {
        }
 
        protected function getFormFields() {
-               global $wgContLang;
-
                $timestamp = $this->oldFile->getTimestamp();
 
                $user = $this->getUser();
@@ -88,8 +88,9 @@ class RevertAction extends FormAction {
                $userTime = $lang->userTime( $timestamp, $user );
                $siteTs = MWTimestamp::getLocalInstance( $timestamp );
                $ts = $siteTs->format( 'YmdHis' );
-               $siteDate = $wgContLang->date( $ts, false, false );
-               $siteTime = $wgContLang->time( $ts, false, false );
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               $siteDate = $contLang->date( $ts, false, false );
+               $siteTime = $contLang->time( $ts, false, false );
                $tzMsg = $siteTs->getTimezoneMessage()->inContentLanguage()->text();
 
                return [
index e546c4a..ac07eeb 100644 (file)
@@ -1246,8 +1246,8 @@ abstract class ApiBase extends ContextSource {
                        // Preserve U+001F for self::parseMultiValue(), or error out if that won't be called
                        if ( isset( $value ) && substr( $rawValue, 0, 1 ) === "\x1f" ) {
                                if ( $multi ) {
-                                       // This loses the potential $wgContLang->checkTitleEncoding() transformation
-                                       // done by WebRequest for $_GET. Let's call that a feature.
+                                       // This loses the potential checkTitleEncoding() transformation done by
+                                       // WebRequest for $_GET. Let's call that a feature.
                                        $value = implode( "\x1f", $request->normalizeUnicode( explode( "\x1f", $rawValue ) ) );
                                } else {
                                        $this->dieWithError( 'apierror-badvalue-notmultivalue', 'badvalue_notmultivalue' );
index 041b024..72509c2 100644 (file)
@@ -91,8 +91,6 @@ class ApiHelp extends ApiBase {
         * @param array $options Formatting options (described above)
         */
        public static function getHelp( IContextSource $context, $modules, array $options ) {
-               global $wgContLang;
-
                if ( !is_array( $modules ) ) {
                        $modules = [ $modules ];
                }
@@ -108,10 +106,12 @@ class ApiHelp extends ApiBase {
                }
                $out->setPageTitle( $context->msg( 'api-help-title' ) );
 
-               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+               $services = MediaWikiServices::getInstance();
+               $cache = $services->getMainWANObjectCache();
                $cacheKey = null;
                if ( count( $modules ) == 1 && $modules[0] instanceof ApiMain &&
-                       $options['recursivesubmodules'] && $context->getLanguage() === $wgContLang
+                       $options['recursivesubmodules'] &&
+                       $context->getLanguage()->equals( $services->getContentLanguage() )
                ) {
                        $cacheHelpTimeout = $context->getConfig()->get( 'APICacheHelpTimeout' );
                        if ( $cacheHelpTimeout > 0 ) {
index e5e384c..03d2952 100644 (file)
@@ -244,8 +244,7 @@ class ApiMain extends ApiBase {
                        // for uselang=user (see T85635).
                } else {
                        if ( $uselang === 'content' ) {
-                               global $wgContLang;
-                               $uselang = $wgContLang->getCode();
+                               $uselang = MediaWikiServices::getInstance()->getContentLanguage()->getCode();
                        }
                        $code = RequestContext::sanitizeLangCode( $uselang );
                        $this->getContext()->setLanguage( $code );
@@ -265,8 +264,7 @@ class ApiMain extends ApiBase {
                        if ( $errorLangCode === 'uselang' ) {
                                $errorLang = $this->getLanguage();
                        } elseif ( $errorLangCode === 'content' ) {
-                               global $wgContLang;
-                               $errorLang = $wgContLang;
+                               $errorLang = MediaWikiServices::getInstance()->getContentLanguage();
                        } else {
                                $errorLangCode = RequestContext::sanitizeLangCode( $errorLangCode );
                                $errorLang = Language::factory( $errorLangCode );
@@ -809,7 +807,7 @@ class ApiMain extends ApiBase {
         * Attempt to validate the value of Access-Control-Request-Headers against a list
         * of headers that we allow the follow up request to send.
         *
-        * @param string $requestedHeaders Comma seperated list of HTTP headers
+        * @param string $requestedHeaders Comma separated list of HTTP headers
         * @return bool True if all requested headers are in the list of allowed headers
         */
        protected static function matchRequestedHeaders( $requestedHeaders ) {
index ea2a85f..19629da 100644 (file)
@@ -512,11 +512,10 @@ class ApiPageSet extends ApiBase {
         * @since 1.21
         */
        public function getNormalizedTitlesAsResult( $result = null ) {
-               global $wgContLang;
-
                $values = [];
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                foreach ( $this->getNormalizedTitles() as $rawTitleStr => $titleStr ) {
-                       $encode = ( $wgContLang->normalize( $rawTitleStr ) !== $rawTitleStr );
+                       $encode = $contLang->normalize( $rawTitleStr ) !== $rawTitleStr;
                        $values[] = [
                                'fromencoded' => $encode,
                                'from' => $encode ? rawurlencode( $rawTitleStr ) : $rawTitleStr,
@@ -1198,15 +1197,14 @@ class ApiPageSet extends ApiBase {
                                $this->mInterwikiTitles[$unconvertedTitle] = $titleObj->getInterwiki();
                        } else {
                                // Variants checking
-                               global $wgContLang;
-                               if ( $this->mConvertTitles &&
-                                       $wgContLang->hasVariants() &&
-                                       !$titleObj->exists()
+                               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+                               if (
+                                       $this->mConvertTitles && $contLang->hasVariants() && !$titleObj->exists()
                                ) {
                                        // Language::findVariantLink will modify titleText and titleObj into
                                        // the canonical variant if possible
                                        $titleText = is_string( $title ) ? $title : $titleObj->getPrefixedText();
-                                       $wgContLang->findVariantLink( $titleText, $titleObj );
+                                       $contLang->findVariantLink( $titleText, $titleObj );
                                        $titleWasConverted = $unconvertedTitle !== $titleObj->getPrefixedText();
                                }
 
index 40abcaf..1d57c3c 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * A query action to return messages from site message cache
  *
@@ -110,15 +112,13 @@ class ApiQueryAllMessages extends ApiQueryBase {
                // Whether we have any sort of message customisation filtering
                $customiseFilterEnabled = $params['customised'] !== 'all';
                if ( $customiseFilterEnabled ) {
-                       global $wgContLang;
-
                        $customisedMessages = AllMessagesTablePager::getCustomisedStatuses(
                                array_map(
                                        [ $langObj, 'ucfirst' ],
                                        $messages_target
                                ),
                                $langObj->getCode(),
-                               !$langObj->equals( $wgContLang )
+                               !$langObj->equals( MediaWikiServices::getInstance()->getContentLanguage() )
                        );
 
                        $customised = $params['customised'] === 'modified';
index 8994e06..18d2804 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * A query action to get image information and upload history.
  *
@@ -369,14 +371,12 @@ class ApiQueryImageInfo extends ApiQueryBase {
         * @return array Result array
         */
        public static function getInfo( $file, $prop, $result, $thumbParams = null, $opts = false ) {
-               global $wgContLang;
-
                $anyHidden = false;
 
                if ( !$opts || is_string( $opts ) ) {
                        $opts = [
                                'version' => $opts ?: 'latest',
-                               'language' => $wgContLang,
+                               'language' => MediaWikiServices::getInstance()->getContentLanguage(),
                                'multilang' => false,
                                'extmetadatafilter' => [],
                                'revdelUser' => null,
@@ -650,8 +650,6 @@ class ApiQueryImageInfo extends ApiQueryBase {
        }
 
        public function getAllowedParams() {
-               global $wgContLang;
-
                return [
                        'prop' => [
                                ApiBase::PARAM_ISMULTI => true,
@@ -690,7 +688,8 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        ],
                        'extmetadatalanguage' => [
                                ApiBase::PARAM_TYPE => 'string',
-                               ApiBase::PARAM_DFLT => $wgContLang->getCode(),
+                               ApiBase::PARAM_DFLT =>
+                                       MediaWikiServices::getInstance()->getContentLanguage()->getCode(),
                        ],
                        'extmetadatamultilang' => [
                                ApiBase::PARAM_TYPE => 'boolean',
index 1d3c110..0cf6b04 100644 (file)
@@ -764,12 +764,12 @@ class ApiQueryInfo extends ApiQueryBase {
        }
 
        private function getAllVariants( $text, $ns = NS_MAIN ) {
-               global $wgContLang;
                $result = [];
-               foreach ( $wgContLang->getVariants() as $variant ) {
-                       $convertTitle = $wgContLang->autoConvert( $text, $variant );
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               foreach ( $contLang->getVariants() as $variant ) {
+                       $convertTitle = $contLang->autoConvert( $text, $variant );
                        if ( $ns !== NS_MAIN ) {
-                               $convertNs = $wgContLang->convertNamespace( $ns, $variant );
+                               $convertNs = $contLang->convertNamespace( $ns, $variant );
                                $convertTitle = $convertNs . ':' . $convertTitle;
                        }
                        $result[$variant] = $convertTitle;
index 2d8e44c..f33a67f 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * A query module to list all langlinks (links to corresponding foreign language pages).
  *
@@ -140,7 +142,6 @@ class ApiQueryLangLinks extends ApiQueryBase {
        }
 
        public function getAllowedParams() {
-               global $wgContLang;
                return [
                        'prop' => [
                                ApiBase::PARAM_ISMULTI => true,
@@ -160,7 +161,7 @@ class ApiQueryLangLinks extends ApiQueryBase {
                                        'descending'
                                ]
                        ],
-                       'inlanguagecode' => $wgContLang->getCode(),
+                       'inlanguagecode' => MediaWikiServices::getInstance()->getContentLanguage()->getCode(),
                        'limit' => [
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
index f5461e0..d4f0396 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Query module to perform full text search within wiki titles and content
  *
@@ -48,7 +50,6 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
         * @return void
         */
        private function run( $resultPageSet = null ) {
-               global $wgContLang;
                $params = $this->extractRequestParams();
 
                // Extract parameters
@@ -152,7 +153,8 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                }
 
                // Add the search results to the result
-               $terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
+               $terms = MediaWikiServices::getInstance()->getContentLanguage()->
+                       convertForSearchResult( $matches->termMatches() );
                $titles = [];
                $count = 0;
                $limit = $params['limit'];
index c65dfa5..c26bb62 100644 (file)
@@ -125,8 +125,6 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendGeneralInfo( $property ) {
-               global $wgContLang;
-
                $config = $this->getConfig();
 
                $data = [];
@@ -164,8 +162,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data['langconversion'] = !$config->get( 'DisableLangConversion' );
                $data['titleconversion'] = !$config->get( 'DisableTitleConversion' );
 
-               if ( $wgContLang->linkPrefixExtension() ) {
-                       $linkPrefixCharset = $wgContLang->linkPrefixCharset();
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               if ( $contLang->linkPrefixExtension() ) {
+                       $linkPrefixCharset = $contLang->linkPrefixCharset();
                        $data['linkprefixcharset'] = $linkPrefixCharset;
                        // For backwards compatibility
                        $data['linkprefix'] = "/^((?>.*[^$linkPrefixCharset]|))(.+)$/sDu";
@@ -174,7 +173,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $data['linkprefix'] = '';
                }
 
-               $linktrail = $wgContLang->linkTrail();
+               $linktrail = $contLang->linkTrail();
                $data['linktrail'] = $linktrail ?: '';
 
                $data['legaltitlechars'] = Title::legalChars();
@@ -197,26 +196,26 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data['lang'] = $config->get( 'LanguageCode' );
 
                $fallbacks = [];
-               foreach ( $wgContLang->getFallbackLanguages() as $code ) {
+               foreach ( $contLang->getFallbackLanguages() as $code ) {
                        $fallbacks[] = [ 'code' => $code ];
                }
                $data['fallback'] = $fallbacks;
                ApiResult::setIndexedTagName( $data['fallback'], 'lang' );
 
-               if ( $wgContLang->hasVariants() ) {
+               if ( $contLang->hasVariants() ) {
                        $variants = [];
-                       foreach ( $wgContLang->getVariants() as $code ) {
+                       foreach ( $contLang->getVariants() as $code ) {
                                $variants[] = [
                                        'code' => $code,
-                                       'name' => $wgContLang->getVariantname( $code ),
+                                       'name' => $contLang->getVariantname( $code ),
                                ];
                        }
                        $data['variants'] = $variants;
                        ApiResult::setIndexedTagName( $data['variants'], 'lang' );
                }
 
-               $data['rtl'] = $wgContLang->isRTL();
-               $data['fallback8bitEncoding'] = $wgContLang->fallback8bitEncoding();
+               $data['rtl'] = $contLang->isRTL();
+               $data['fallback8bitEncoding'] = $contLang->fallback8bitEncoding();
 
                $data['readonly'] = wfReadOnly();
                if ( $data['readonly'] ) {
@@ -280,11 +279,13 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendNamespaces( $property ) {
-               global $wgContLang;
                $data = [
                        ApiResult::META_TYPE => 'assoc',
                ];
-               foreach ( $wgContLang->getFormattedNamespaces() as $ns => $title ) {
+               foreach (
+                       MediaWikiServices::getInstance()->getContentLanguage()->getFormattedNamespaces()
+                       as $ns => $title
+               ) {
                        $data[$ns] = [
                                'id' => intval( $ns ),
                                'case' => MWNamespace::isCapitalized( $ns ) ? 'first-letter' : 'case-sensitive',
@@ -314,10 +315,10 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendNamespaceAliases( $property ) {
-               global $wgContLang;
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                $aliases = array_merge( $this->getConfig()->get( 'NamespaceAliases' ),
-                       $wgContLang->getNamespaceAliases() );
-               $namespaces = $wgContLang->getNamespaces();
+                       $contLang->getNamespaceAliases() );
+               $namespaces = $contLang->getNamespaces();
                $data = [];
                foreach ( $aliases as $title => $ns ) {
                        if ( $namespaces[$ns] == $title ) {
@@ -339,9 +340,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendSpecialPageAliases( $property ) {
-               global $wgContLang;
                $data = [];
-               $aliases = $wgContLang->getSpecialPageAliases();
+               $aliases = MediaWikiServices::getInstance()->getContentLanguage()->getSpecialPageAliases();
                foreach ( SpecialPageFactory::getNames() as $specialpage ) {
                        if ( isset( $aliases[$specialpage] ) ) {
                                $arr = [ 'realname' => $specialpage, 'aliases' => $aliases[$specialpage] ];
@@ -355,9 +355,11 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendMagicWords( $property ) {
-               global $wgContLang;
                $data = [];
-               foreach ( $wgContLang->getMagicWords() as $magicword => $aliases ) {
+               foreach (
+                       MediaWikiServices::getInstance()->getContentLanguage()->getMagicWords()
+                       as $magicword => $aliases
+               ) {
                        $caseSensitive = array_shift( $aliases );
                        $arr = [ 'name' => $magicword, 'aliases' => $aliases ];
                        $arr['case-sensitive'] = (bool)$caseSensitive;
index 3b7c181..c4a31c7 100644 (file)
@@ -18,6 +18,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * This class represents the result of the API operations.
  * It simply wraps a nested array structure, adding some functions to simplify
@@ -330,8 +332,6 @@ class ApiResult implements ApiSerializable {
         * @return array|mixed|string
         */
        private static function validateValue( $value ) {
-               global $wgContLang;
-
                if ( is_object( $value ) ) {
                        // Note we use is_callable() here instead of instanceof because
                        // ApiSerializable is an informal protocol (see docs there for details).
@@ -374,7 +374,7 @@ class ApiResult implements ApiSerializable {
                } elseif ( is_float( $value ) && !is_finite( $value ) ) {
                        throw new InvalidArgumentException( 'Cannot add non-finite floats to ApiResult' );
                } elseif ( is_string( $value ) ) {
-                       $value = $wgContLang->normalize( $value );
+                       $value = MediaWikiServices::getInstance()->getContentLanguage()->normalize( $value );
                } elseif ( $value !== null && !is_scalar( $value ) ) {
                        $type = gettype( $value );
                        if ( is_resource( $value ) ) {
index 23163c2..a3e3e57 100644 (file)
@@ -67,11 +67,11 @@ class ApiStashEdit extends ApiBase {
                        );
                }
 
-               $this->requireAtLeastOneParameter( $params, 'stashedtexthash', 'text' );
+               $this->requireOnlyOneParameter( $params, 'stashedtexthash', 'text' );
 
                $text = null;
                $textHash = null;
-               if ( strlen( $params['stashedtexthash'] ) ) {
+               if ( $params['stashedtexthash'] !== null ) {
                        // Load from cache since the client indicates the text is the same as last stash
                        $textHash = $params['stashedtexthash'];
                        if ( !preg_match( '/^[0-9a-f]{40}$/', $textHash ) ) {
@@ -82,16 +82,11 @@ class ApiStashEdit extends ApiBase {
                        if ( !is_string( $text ) ) {
                                $this->dieWithError( 'apierror-stashedit-missingtext', 'missingtext' );
                        }
-               } elseif ( $params['text'] !== null ) {
-                       // Trim and fix newlines so the key SHA1's match (see WebRequest::getText())
+               } else {
+                       // 'text' was passed.  Trim and fix newlines so the key SHA1's
+                       // match (see WebRequest::getText())
                        $text = rtrim( str_replace( "\r\n", "\n", $params['text'] ) );
                        $textHash = sha1( $text );
-               } else {
-                       $this->dieWithError( [
-                               'apierror-missingparam-at-least-one-of',
-                               Message::listParam( [ '<var>stashedtexthash</var>', '<var>text</var>' ] ),
-                               2,
-                       ], 'missingparam' );
                }
 
                $textContent = ContentHandler::makeContent(
@@ -156,14 +151,13 @@ class ApiStashEdit extends ApiBase {
                $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
                $stats->increment( "editstash.cache_stores.$status" );
 
-               $this->getResult()->addValue(
-                       null,
-                       $this->getModuleName(),
-                       [
-                               'status' => $status,
-                               'texthash' => $textHash
-                       ]
-               );
+               $ret = [ 'status' => $status ];
+               // If we were rate-limited, we still return the pre-existing valid hash if one was passed
+               if ( $status !== 'ratelimited' || $params['stashedtexthash'] !== null ) {
+                       $ret['texthash'] = $textHash;
+               }
+
+               $this->getResult()->addValue( null, $this->getModuleName(), $ret );
        }
 
        /**
@@ -407,7 +401,7 @@ class ApiStashEdit extends ApiBase {
        ) {
                // If an item is renewed, mind the cache TTL determined by config and parser functions.
                // Put an upper limit on the TTL for sanity to avoid extreme template/file staleness.
-               $since = time() - wfTimestamp( TS_UNIX, $parserOutput->getTimestamp() );
+               $since = time() - wfTimestamp( TS_UNIX, $parserOutput->getCacheTime() );
                $ttl = min( $parserOutput->getCacheExpiry() - $since, self::MAX_CACHE_TTL );
 
                // Avoid extremely stale user signature timestamps (T84843)
index 8c69b9d..241e71a 100644 (file)
        "apihelp-query+revisions+base-paramvalue-prop-user": "المستخدم الذي أجرى المراجعة.",
        "apihelp-query+revisions+base-paramvalue-prop-userid": "معرف المستخدم لمنشئ المراجعة.",
        "apihelp-query+revisions+base-paramvalue-prop-size": "طول (بايت) المراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-slotsize": "طول (بايت) كل فتحة مراجعة.",
        "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (القاعدة 16) المراجعة.",
-       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "معرف نموذج المحتوى للمراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-slotsha1": "SHA-1 (القاعدة 16) لكل فتحة مراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "معرف نموذج المحتوى لكل فتحة مراجعة.",
        "apihelp-query+revisions+base-paramvalue-prop-comment": "تعليق من قبل المستخدم للمراجعة.",
        "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "تعليق محلل من قبل المستخدم للمراجعة.",
-       "apihelp-query+revisions+base-paramvalue-prop-content": "Ù\86ص Ø§Ù\84مراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "Ù\85حتÙ\88Ù\89 Ù\83Ù\84 Ù\81تحة مراجعة.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "وسوم للمراجعة.",
-       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "<span class=\"apihelp-deprecated\">موقوف.</span> استخدم <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> أو <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> بدلا من ذلك، شجرة تحليل XML لمحتوى المراجعة (تتطلب نموذج المحتوى <code>$1</code>).",
+       "apihelp-query+revisions+base-paramvalue-prop-roles": "أدرج أدوار فتحة المحتوى الموجودة في المراجعة.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "استخدم <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> أو <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> بدلا من ذلك، شجرة تحليل XML لمحتوى المراجعة (تتطلب نموذج المحتوى <code>$1</code>).",
        "apihelp-query+revisions+base-param-limit": "الحد من عدد المراجعات التي سيتم إرجاعها.",
        "apihelp-query+revisions+base-param-expandtemplates": "استخدم <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> بدلا من ذلك، قم بتوسيع القوالب في محتوى المراجعة (يتطلب $1prop=content).",
        "apihelp-query+revisions+base-param-generatexml": "استخدم <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> أو <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> بدلا من ذلك، قم بتوليد شجرة تحليل XML لمحتوى المراجعة (تتطلب $1prop=content).",
        "apierror-emptynewsection": "إنشاء أقسام جديدة فارغة غير ممكن.",
        "apierror-emptypage": "لا يُسمَح بإنشاء صفحات جديدة فارغة.",
        "apierror-exceptioncaught": "[$1] تم اكتشاف الاستثناء: $2",
+       "apierror-exceptioncaughttype": "[$1] تم اكتشافها باستثناء النوع $2",
        "apierror-filedoesnotexist": "الملف غير موجود.",
        "apierror-fileexists-sharedrepo-perm": "الملف الهدف موجود في مستودع مشترك; استخدم الوسيط <var>ignorewarnings</var> لتجاوزه.",
        "apierror-filenopath": "لا يمكن الحصول على مسار الملف المحلي.",
index e2c73c2..cb018dc 100644 (file)
        "apihelp-query+revisions+base-paramvalue-prop-user": "המשתמש שעשה את הגרסה",
        "apihelp-query+revisions+base-paramvalue-prop-userid": "מזהה המשתמש של יוצר הגרסה.",
        "apihelp-query+revisions+base-paramvalue-prop-size": "אורך (בבייטים) של הגרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-slotsize": "אורך (בבתים) של כל משבצת גרסה.",
        "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (בבסיס 16) של הגרסה.",
-       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "מזהה מודל התוכן של הגרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-slotsha1": "SHA-1 (בסיס 16) של כל משבצת גרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "מזהה מודל התוכן של כל משבצת גרסה.",
        "apihelp-query+revisions+base-paramvalue-prop-comment": "הערה מאת המשתמש על הגרסה.",
        "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "הערה מפוענחת מאת המשתמש על הגרסה.",
-       "apihelp-query+revisions+base-paramvalue-prop-content": "×\94×\98קס×\98 ×©×\9c ×\94גרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "×\94ת×\95×\9b×\9f ×©×\9c ×\9b×\9c ×\9eש×\91צת גרסה.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "התגים עבור הגרסה.",
-       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "<span class=\"apihelp-deprecated\">מיושן.</span> יש להשתמש ב־ <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> או ב־ <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> במקום בזה.\n\nעץ פענוח XML של תוכן הגרסה (דורש מודל תוכן <code>$1</code>).",
+       "apihelp-query+revisions+base-paramvalue-prop-roles": "רשימת תפקידי משבצות תוכן שקיימות בגרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "יש להשתמש ב־ <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> או ב־ <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> במקום בזה.\n\nעץ פענוח XML של תוכן הגרסה (דורש מודל תוכן <code>$1</code>).",
+       "apihelp-query+revisions+base-param-slots": "עבור אילו משבצות תוכן להחזיר נתונים, כאשר מאפיינים שקשורים למשבצת כלולים ב־<var>$1props</var>. אם זה מושמט, נתונים ממשבצת <kbd>main</kbd> יוחזרו בתסדיר תואם לאחור.",
        "apihelp-query+revisions+base-param-limit": "הגבלת מספר הגרסאות שיוחזרו.",
        "apihelp-query+revisions+base-param-expandtemplates": "יש להשתמש ב־<kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> במקום בזה. להרחיב תבניות בתוכן הגרסה (דורש $1prop=content).",
        "apihelp-query+revisions+base-param-generatexml": "יש להשתמש ב־<kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> או ב־<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> במקום בזה. יצירת עץ פענוח XML עבור תוכן הגרסה (דורש את $1prop=content; מוחלף ב־<kbd>$1prop=parsetree</kbd>).",
        "apierror-emptynewsection": "יצירת פסקאות חדשות ריקות בלתי־אפשרי.",
        "apierror-emptypage": "יצירת דפים חדשים ריקים אינו מותר.",
        "apierror-exceptioncaught": "[$1] נתפס חריג: $2",
+       "apierror-exceptioncaughttype": "[$1] נתפס חריג מסוג $2",
        "apierror-filedoesnotexist": "הקובץ אינו קיים.",
        "apierror-fileexists-sharedrepo-perm": "קובץ היעד קיים במאגר משותף. יש להשתמש בפרמטר <var>ignorewarnings</var> כדי לעקוף אותו.",
        "apierror-filenopath": "לא ניתן לקבל נתיב לקובץ מקומי.",
        "apiwarn-deprecation-login-botpw": "כניסה לחשבון עיקרי (main-account) דרך <kbd>action=login</kbd> מיושנת ועלולה להפסיק לעבוד ללא אזהרה נוספת. כדי להמשיך להיכנס עם <kbd>action=login</kbd>, ר' [[Special:BotPasswords]]. כדי להמשיך באופן מאובטח באמצעות חשבון עיקרי, ר' <kbd>action=clientlogin</kbd>.",
        "apiwarn-deprecation-login-nobotpw": "כניסה בחשבון ראשי עם <kbd>action=login</kbd> מיושנת ויכולה להפסיק לעבוד ללא אזהרה. כדי להיכנס באופן מאובטח, ר' <kbd>action=clientlogin</kbd>.",
        "apiwarn-deprecation-login-token": "אחזור אסימון דרך <kbd>action=login</kbd> מיושן. נא להשתמש ב־<kbd>action=query&meta=tokens&type=login</kbd> במקום זה.",
+       "apiwarn-deprecation-missingparam": "מכיוון שלא צוין <var>$1</var>, ישמש תסדיר ישן לפלט. התסדיר הזה מוכרז בתור מיושן, ובעתיד ישמש רק התסדיר החדש.",
        "apiwarn-deprecation-parameter": "הפרמטר <var>$1</var> מיושן.",
        "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd> מיושן מאז מדיה־ויקי 1.28. יש להשתמש ב־<kbd>prop=headhtml</kbd> בעת יצירת מסמכי HTML חדשים, או ב־<kbd>prop=modules|jsconfigvars</kbd> בעת עדכון מסמך בצד הלקוח.",
        "apiwarn-deprecation-purge-get": "שימוש ב־<kbd>action=purge</kbd> דרך GET מיושן. יש להשתמש ב־POST במקום זה.",
index 56a6507..084dfac 100644 (file)
        "apihelp-query+allcategories-summary": "모든 분류를 열거합니다.",
        "apihelp-query+allcategories-param-prefix": "이 값으로 시작하는 모든 분류 제목을 검색합니다.",
        "apihelp-query+allcategories-param-dir": "정렬 방향.",
-       "apihelp-query+allcategories-param-limit": "ë°\98í\99\98í\95  ë¶\84ë¥\98ì\9d\98 ê°¯수입니다.",
+       "apihelp-query+allcategories-param-limit": "ë°\98í\99\98í\95  ë¶\84ë¥\98ì\9d\98 ê°\9c수입니다.",
        "apihelp-query+allcategories-param-prop": "얻고자 하는 속성:",
        "apihelp-query+allcategories-paramvalue-prop-size": "페이지 수를 분류에 추가합니다.",
        "apihelp-query+alldeletedrevisions-summary": "사용자에 의해서나 이름공간 안에서 삭제된 모든 판을 나열합니다.",
        "apihelp-query+allredirects-param-namespace": "열거할 이름공간.",
        "apihelp-query+allredirects-param-limit": "반환할 총 항목 수입니다.",
        "apihelp-query+allrevisions-summary": "모든 판 표시.",
-       "apihelp-query+mystashedfiles-param-limit": "ê°\80ì ¸ì\98¬ í\8c\8cì\9d¼ì\9d\98 ê°¯ì\88\98.",
+       "apihelp-query+mystashedfiles-param-limit": "ê°\80ì ¸ì\98¬ í\8c\8cì\9d¼ì\9d\98 ê°\9cì\88\98ì\9e\85ë\8b\88ë\8b¤.",
        "apihelp-query+alltransclusions-summary": "존재하지 않는 문서를 포함하여 끼워넣은 모든 문서(&#123;&#123;x&#125;&#125;를 사용하여 끼워넣은 문서)를 나열합니다.",
        "apihelp-query+alltransclusions-param-prop": "포함할 정보:",
        "apihelp-query+alltransclusions-param-namespace": "열거할 이름공간.",
        "apihelp-query+blocks-paramvalue-prop-reason": "차단 이유를 추가합니다.",
        "apihelp-query+blocks-paramvalue-prop-range": "차단에 영향을 받는 IP 주소 대역을 추가합니다.",
        "apihelp-query+categories-summary": "문서가 속하는 모든 분류를 나열합니다.",
-       "apihelp-query+categories-param-limit": "ë°\98í\99\98í\95  ë¶\84ë¥\98ì\9d\98 ê°¯수입니다.",
+       "apihelp-query+categories-param-limit": "ë°\98í\99\98í\95  ë¶\84ë¥\98ì\9d\98 ê°\9c수입니다.",
        "apihelp-query+categoryinfo-summary": "제시된 분류의 정보를 반환합니다.",
        "apihelp-query+categorymembers-summary": "제시된 분류의 모든 문서를 나열합니다.",
        "apihelp-query+categorymembers-paramvalue-prop-ids": "페이지 ID를 추가합니다.",
        "apihelp-query+iwbacklinks-summary": "제시된 인터위키 링크에 연결된 모든 문서를 찾습니다.",
        "apihelp-query+iwbacklinks-param-prefix": "인터위키의 접두사.",
        "apihelp-query+iwbacklinks-param-title": "검색할 인터위키 링크. <var>$1blprefix</var>와 함께 사용해야 합니다.",
-       "apihelp-query+iwbacklinks-param-limit": "ë°\98í\99\9cí\95\9c ì´\9d ë¬¸ì\84\9c ì\88\98.",
+       "apihelp-query+iwbacklinks-param-limit": "ë°\98í\99\98í\95  ì´\9d ë¬¸ì\84\9c ì\88\98ì\9e\85ë\8b\88ë\8b¤.",
        "apihelp-query+iwbacklinks-param-prop": "얻고자 하는 속성:",
        "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "인터위키의 접두사를 추가합니다.",
        "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "인터위키의 제목을 추가합니다.",
index 4ba4062..80d1416 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Purodha",
-                       "Macofe"
+                       "Macofe",
+                       "Als-Holder"
                ]
        },
        "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page/de|Dokemäntazjohn]]\n* [[mw:API:FAQ/de|Öff jefrohch]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mäileng_Leß]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Aanköndejonge zom <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Jemäldte Fähler un Wönsch]\n</div>\n<strong>Status:</strong> Alle op heh dä Sigg aanjzeischte Ußwahle sullte donn, ävver et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> weed jrahd noch äntwekeld un et kann sesch alle Nahslangs jädd ändere. Holl Der de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ Mäileng_Leß med Aanköndejonge], öm automattesch övver Neujeschkeite enfommehrt ze wähde.\n\n<strong>Kapodde Aanfrohre:</strong> Wam_mer kapodde Aanfroheaan et API <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> schek, kritt mer ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">HTTP</i>-Kopp ußjejovve met däm Täx „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MediaWiki-API-Error</code>“ dren, dä mer als ene Schlößel bedraachte kann. Mih dohzoh fengk met op dä Sigg [[mw:API:Errors_and_warnings|<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>: Fähler un Warnonge]].",
        "apihelp-protect-param-cascade": "Donn en Schotz-Kaskahd zohlohße, alsu ene Schoz för ennjeföhschte Schablohne un upjerohfe Bellder vun dä Sigg. Deiht nix, wann keine von dä aanjejovve Zoote Schoz en Kaskahd zohlöht.",
        "apihelp-protect-param-watchlist": "Donn di Sigg ohne Bedengonge op däm aktoälle Metmaacher sing Oppaßleß udder nemm se druß fott, donn de Enschtällonge nämme, udder donn de Oppaßleß jaa nit verändere.",
        "apihelp-protect-example-protect": "Donn en Sigg schöze.",
-       "apihelp-protect-example-unprotect": "Donn en Sigg nit mih schöze un doh för saz de Beschrängkonge op <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">all</kbd>“. <!--  https://phabricator.wikimedia.org/T141367 -->",
+       "apihelp-protect-example-unprotect": "Donn en Sigg nit mih schöze un doh för saz de Beschrängkonge op <kbd>all</kbd>.",
        "apihelp-protect-example-unprotect2": "Donn dä Schoz för en Sigg ophävve, un doh för kein Beschrängkonge säze.",
        "apihelp-purge-param-forcelinkupdate": "Bräng de Tabälle met de lengks obb ene neue Schtand.",
        "apihelp-purge-example-simple": "Donn fö de Sigge „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">API</kbd>“ de zweschejeschpeijscherte Väsjohn fottschmiiße.",
index bae0948..d712765 100644 (file)
        "apihelp-query+filearchive-example-simple": "Список всех удалённых файлов.",
        "apihelp-query+filerepoinfo-summary": "Возвращает мета-информацию о файловых репозиториях, настроенных в вики.",
        "apihelp-query+filerepoinfo-param-prop": "Какие свойства хранилища получить (доступность свойств может отличаться в разных вики).",
+       "apihelp-query+filerepoinfo-paramvalue-prop-apiurl": "Ссылка на API репозитория — полезно для получения информации об изображении с сервера.",
        "apihelp-query+filerepoinfo-paramvalue-prop-rootUrl": "Корневой URL для изображений.",
        "apihelp-query+filerepoinfo-paramvalue-prop-url": "URL путь публичной зоны.",
        "apihelp-query+filerepoinfo-example-simple": "Получить информацию о файловых репозиториях.",
        "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Распарсенное описание правки.",
        "apihelp-query+revisions+base-paramvalue-prop-content": "Текст версии.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "Метки версии.",
-       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "<span class=\"apihelp-deprecated\">Устарело.</span> Вместо этого используйте <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> или <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Дерево парсинга XML содержимого версии (требуется модель содержимого <code>$1</code>).",
+       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "Используйте <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> или <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Дерево парсинга XML-содержимого версии (требуется модель содержимого <code>$1</code>).",
        "apihelp-query+revisions+base-param-limit": "Сколько версий вернуть.",
        "apihelp-query+revisions+base-param-expandtemplates": "Вместо этого используйте <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd>. Раскрыть шаблоны в содержимом версии (требуется $1prop=content).",
        "apihelp-query+revisions+base-param-generatexml": "Вместо этого используйте <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> или <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Сгенерировать дерево парсинга XML содержимого версии (требуется $1prop=content).",
index 342a835..91b817e 100644 (file)
@@ -59,6 +59,7 @@
        "apihelp-compare-param-totitle": "要比對的第二個標題。",
        "apihelp-compare-param-toid": "要比對的第二個頁面 ID。",
        "apihelp-compare-param-torev": "要比對的第二個修訂。",
+       "apihelp-compare-param-prop": "要取得的資訊部份。",
        "apihelp-compare-example-1": "建立修訂 1 與 1 的差異檔",
        "apihelp-createaccount-summary": "建立新使用者帳號。",
        "apihelp-createaccount-param-name": "使用者名稱。",
@@ -76,6 +77,7 @@
        "apihelp-delete-param-title": "您欲刪除的頁面標題。 無法與 <var>$1pageid</var> 同時使用。",
        "apihelp-delete-param-pageid": "您欲刪除頁面的頁面 ID。 無法與 <var>$1title</var> 同時使用。",
        "apihelp-delete-param-reason": "刪除的原因。 若未設定,將會使用自動產生的原因。",
+       "apihelp-delete-param-tags": "在刪除日誌裡更改套用到項目的標籤。",
        "apihelp-delete-param-watch": "加入目前頁面至您的監視清單。",
        "apihelp-delete-param-watchlist": "無條件使用設置將頁面加入或移除目前使用者的監視清單或者是不更改監視清單。",
        "apihelp-delete-param-unwatch": "從您的監視清單中移除目前頁面。",
@@ -90,6 +92,7 @@
        "apihelp-edit-param-sectiontitle": "新章節的標題。",
        "apihelp-edit-param-text": "頁面內容。",
        "apihelp-edit-param-summary": "編輯摘要。 當未設定 $1section=new 與 $1sectiontitle 時也會當做章節標題。",
+       "apihelp-edit-param-tags": "更改套用到修訂的標籤。",
        "apihelp-edit-param-minor": "小編輯。",
        "apihelp-edit-param-notminor": "非小編輯。",
        "apihelp-edit-param-bot": "標記此編輯為機器人編輯。",
        "apihelp-edit-param-nocreate": "若頁面不存在,則產生錯誤。",
        "apihelp-edit-param-watch": "加入目前頁面至您的監視清單。",
        "apihelp-edit-param-unwatch": "從您的監視清單中移除目前頁面。",
+       "apihelp-edit-param-contentformat": "用於輸入文字的內容序列化格式。",
+       "apihelp-edit-param-contentmodel": "新內容的內容模組。",
        "apihelp-edit-example-edit": "編輯頁面",
        "apihelp-emailuser-summary": "寄送電子郵件給使用者。",
        "apihelp-emailuser-param-target": "電子郵件的收件使用者。",
        "apihelp-expandtemplates-param-text": "要轉換的 Wikitext。",
        "apihelp-feedcontributions-summary": "回傳使用者貢獻 Feed。",
        "apihelp-feedcontributions-param-feedformat": "Feed 的格式。",
+       "apihelp-feedcontributions-param-year": "起始年份(更早之前)。",
+       "apihelp-feedcontributions-param-month": "起始月份(更早之前)。",
+       "apihelp-feedcontributions-param-deletedonly": "僅顯示已刪除的貢獻。",
+       "apihelp-feedcontributions-param-toponly": "只顯示最新修訂的編輯。",
+       "apihelp-feedcontributions-param-newonly": "只顯示建立頁面的編輯。",
        "apihelp-feedcontributions-param-hideminor": "隱藏小修改。",
        "apihelp-feedcontributions-param-showsizediff": "顯示修訂版本之間的差異大小。",
        "apihelp-feedcontributions-example-simple": "返回使用者<kbd>Example</kbd>的貢獻。",
        "apihelp-help-example-main": "主模組使用說明",
        "apihelp-help-example-recursive": "一個頁面中的所有說明。",
        "apihelp-help-example-help": "說明模組自身的說明。",
+       "apihelp-help-example-query": "兩個查詢子模組的說明。",
        "apihelp-imagerotate-summary": "旋轉一張或多張圖片。",
+       "apihelp-imagerotate-param-rotation": "順時針旋轉圖片的度數。",
+       "apihelp-import-summary": "從其它 wiki 或 XML 檔案來匯入頁面。",
        "apihelp-import-param-summary": "匯入摘要。",
        "apihelp-import-param-xml": "上載的 XML 檔。",
        "apihelp-import-param-interwikisource": "用於跨 wiki 匯入:匯入的來源 wiki。",
        "apihelp-login-example-login": "登入",
        "apihelp-logout-summary": "登出並清除 session 資料。",
        "apihelp-logout-example-logout": "登出當前使用者",
+       "apihelp-managetags-param-tags": "在標籤管理日誌裡更改套用到項目的標籤。",
        "apihelp-mergehistory-summary": "合併頁面歷史",
        "apihelp-mergehistory-param-reason": "合併歷史的原因。",
        "apihelp-mergehistory-example-merge": "將<kbd>Oldpage</kbd>的整個歷史合併至<kbd>Newpage</kbd>。",
        "apihelp-opensearch-param-suggest": "若<var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var>設定為false,則不做任何事。",
        "apihelp-opensearch-param-redirects": "如何處理重定向:\n;return:傳回重定向本身。\n;resolve:傳回目標頁面,傳回的結果數目可能少於$1limit。\n由於歷史原因,$1format=json的預設值為「return」,其他格式則為「resolve」。",
        "apihelp-opensearch-param-format": "輸出的格式。",
+       "apihelp-options-summary": "更改目前使用者的偏好設定。",
        "apihelp-options-param-reset": "重設偏好設定為網站預設值。",
        "apihelp-options-example-reset": "重設所有偏好設定",
+       "apihelp-options-example-change": "更改<kbd>skin</kbd>和<kbd>hideminor</kbd>偏好設定。",
+       "apihelp-paraminfo-summary": "獲得有關 API 模組的資訊。",
+       "apihelp-parse-param-summary": "解析摘要。",
+       "apihelp-parse-param-pageid": "解析此頁面的內容。覆蓋 <var>$1page</var>。",
+       "apihelp-parse-param-prop": "要取得的資訊部份:",
+       "apihelp-parse-param-disablepp": "請改用<var>$1disablelimitreport</var>。",
+       "apihelp-parse-param-preview": "在預覽模式下解析。",
        "apihelp-parse-example-page": "解析頁面。",
        "apihelp-parse-example-text": "解析 wikitext。",
        "apihelp-parse-example-texttitle": "解析 wikitext,指定頁面標題。",
        "apihelp-protect-param-watchlist": "無條件地將該頁面加入至或移除自目前使用者的監視列表、使用偏好設定或不更改監視。",
        "apihelp-protect-example-protect": "保護一個頁面。",
        "apihelp-purge-summary": "為指定標題清除快取。",
+       "apihelp-purge-param-forcelinkupdate": "更新連結表格。",
        "apihelp-purge-example-generator": "重新整理主要命名空間的前10個頁面。",
        "apihelp-query-summary": "擷取來自及有關MediaWiki的數據。",
+       "apihelp-query-param-list": "要取得的清單。",
+       "apihelp-query-param-meta": "要取得的詮釋資料。",
+       "apihelp-query+allcategories-summary": "列舉所有分類。",
+       "apihelp-query+allcategories-param-from": "起始列舉的分類。",
+       "apihelp-query+allcategories-param-to": "終止列舉的分類。",
+       "apihelp-query+allcategories-param-dir": "排序的方向。",
        "apihelp-query+allcategories-param-limit": "要回傳的分類數量。",
+       "apihelp-query+allcategories-param-prop": "要取得的屬性。",
+       "apihelp-query+allcategories-paramvalue-prop-size": "在分類裡添加頁面數。",
+       "apihelp-query+alldeletedrevisions-summary": "依使用者或所在命名空間來列出所有已刪除的修訂。",
+       "apihelp-query+alldeletedrevisions-param-start": "起始列舉的時間戳記。",
+       "apihelp-query+alldeletedrevisions-param-from": "在此標題開始列出。",
+       "apihelp-query+alldeletedrevisions-param-to": "在此標題停止列出。",
+       "apihelp-query+alldeletedrevisions-param-user": "此列出由該使用者作出的修訂。",
+       "apihelp-query+alldeletedrevisions-param-excludeuser": "不要列出由該使用者作出的修訂。",
+       "apihelp-query+alldeletedrevisions-param-namespace": "僅列出此命名空間的頁面。",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "添加檔案標題。",
        "apihelp-query+allfileusages-param-limit": "要回傳的項目總數。",
+       "apihelp-query+allfileusages-param-dir": "列出時所採用的方向。",
+       "apihelp-query+allfileusages-example-unique": "列出唯一的檔案標題。",
+       "apihelp-query+allfileusages-example-generator": "取得包含檔案的頁面。",
+       "apihelp-query+allimages-param-dir": "列出時所採用的方向。",
+       "apihelp-query+allimages-param-minsize": "限制圖片至少要有這樣多的位元組。",
+       "apihelp-query+allimages-param-maxsize": "限制圖片最多只能這樣多的位元組。",
+       "apihelp-query+allimages-param-mime": "所要搜尋的 MIME 類型,例如:<kbd>image/jpeg</kbd>。",
        "apihelp-query+allimages-param-limit": "要回傳的圖片總數。",
+       "apihelp-query+alllinks-paramvalue-prop-title": "添加連結標題。",
+       "apihelp-query+alllinks-param-namespace": "要列舉的命名空間。",
        "apihelp-query+alllinks-param-limit": "要回傳的項目總數。",
+       "apihelp-query+alllinks-param-dir": "列出時所採用的方向。",
        "apihelp-query+allmessages-summary": "返回來自該網站的訊息。",
+       "apihelp-query+allmessages-param-prop": "要取得的屬性。",
+       "apihelp-query+allmessages-param-lang": "以此語言來回傳訊息。",
+       "apihelp-query+allmessages-param-from": "以此訊息來回傳訊息開頭。",
+       "apihelp-query+allmessages-param-to": "以此訊息來回傳訊息結尾。",
+       "apihelp-query+allpages-param-filterredir": "要列出的頁面。",
        "apihelp-query+allpages-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+allredirects-summary": "列出至命名空間的所有重新導向。",
+       "apihelp-query+allredirects-param-namespace": "要列舉的命名空間。",
        "apihelp-query+allredirects-param-limit": "要回傳的項目總數。",
        "apihelp-query+allrevisions-summary": "列出所有修訂版本。",
+       "apihelp-query+allrevisions-param-start": "起始列舉的時間戳記。",
+       "apihelp-query+mystashedfiles-param-limit": "要取得的檔案數量。",
        "apihelp-query+alltransclusions-param-limit": "要回傳的項目總數。",
        "apihelp-query+allusers-param-from": "起始列舉的使用者名稱。",
+       "apihelp-query+allusers-param-dir": "排序的方向。",
        "apihelp-query+allusers-example-Y": "列出以<kbd>Y</kbd>開頭的使用者。",
        "apihelp-query+authmanagerinfo-summary": "取得目前身分核對狀態的資訊。",
+       "apihelp-query+backlinks-param-namespace": "要列舉的命名空間。",
+       "apihelp-query+blocks-param-start": "起始列舉的時間戳記。",
+       "apihelp-query+blocks-param-prop": "要取得的屬性。",
        "apihelp-query+categories-param-limit": "要回傳的分類數量。",
        "apihelp-query+categoryinfo-summary": "回傳有關指定分類的資訊。",
        "apihelp-query+categorymembers-summary": "在指定的分類中列出所有頁面。",
        "apihelp-query+categorymembers-param-limit": "回傳的頁面數量上限。",
        "apihelp-query+contributors-param-limit": "要回傳的貢獻人員數量。",
+       "apihelp-query+deletedrevs-param-start": "起始列舉的時間戳記。",
+       "apihelp-query+deletedrevs-param-from": "在此標題開始列出。",
+       "apihelp-query+deletedrevs-param-to": "在此標題停止列出。",
        "apihelp-query+duplicatefiles-param-limit": "要回傳的重複檔案數量。",
        "apihelp-query+embeddedin-param-filterredir": "如何過濾重新導向。",
        "apihelp-query+embeddedin-param-limit": "要回傳的頁面總數。",
        "apihelp-query+extlinks-param-limit": "要回傳的連結數量。",
        "apihelp-query+exturlusage-param-limit": "要回傳的頁面數量。",
        "apihelp-query+filearchive-param-limit": "要回傳的圖片總數。",
+       "apihelp-query+filearchive-paramvalue-prop-mime": "添加圖片的 MIME。",
+       "apihelp-query+filearchive-paramvalue-prop-mediatype": "添加圖片的多媒體類型。",
+       "apihelp-query+fileusage-param-prop": "要取得的屬性。",
        "apihelp-query+fileusage-param-limit": "要回傳的數量。",
        "apihelp-query+imageinfo-summary": "回傳檔案資訊與上傳日誌。",
        "apihelp-query+imageinfo-param-limit": "每個檔案要回傳的檔案修訂數量。",
        "apihelp-query+images-summary": "回傳指定頁面中包含的所有檔案。",
        "apihelp-query+images-param-limit": "要回傳的檔案數量。",
        "apihelp-query+info-summary": "取得基本頁面訊息。",
+       "apihelp-query+iwbacklinks-param-prop": "要取得的屬性。",
        "apihelp-query+iwlinks-summary": "回傳指定頁面的所有 interwiki 連結。",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "添加完整的 URL。",
        "apihelp-query+iwlinks-param-limit": "要回傳的跨 Wiki 連結數量。",
        "apihelp-query+langbacklinks-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+langbacklinks-param-prop": "要取得的屬性。",
        "apihelp-query+langlinks-summary": "回傳指定頁面的所有跨語言連結。",
        "apihelp-query+langlinks-param-limit": "要回傳的 langlinks 數量。",
+       "apihelp-query+langlinks-paramvalue-prop-url": "添加完整的 URL。",
+       "apihelp-query+langlinks-param-dir": "列出時所採用的方向。",
+       "apihelp-query+langlinks-param-inlanguagecode": "用於本地化語言名稱的語言代碼。",
        "apihelp-query+links-summary": "回傳指定頁面的所有連結。",
        "apihelp-query+links-param-limit": "要回傳的連結數量。",
+       "apihelp-query+linkshere-param-prop": "要取得的屬性。",
+       "apihelp-query+linkshere-paramvalue-prop-title": "各頁面的標題。",
+       "apihelp-query+linkshere-paramvalue-prop-redirect": "若頁面為重新導向,則做出標記。",
        "apihelp-query+linkshere-param-limit": "要回傳的數量。",
        "apihelp-query+logevents-summary": "從日誌中獲取事件。",
+       "apihelp-query+logevents-param-prop": "要取得的屬性。",
+       "apihelp-query+logevents-param-start": "起始列舉的時間戳記。",
+       "apihelp-query+logevents-param-end": "結束列舉的時間戳記。",
        "apihelp-query+logevents-param-limit": "要回傳的事件項目總數。",
        "apihelp-query+pagepropnames-param-limit": "回傳的名稱數量上限。",
+       "apihelp-query+pageswithprop-paramvalue-prop-ids": "添加頁面 ID。",
        "apihelp-query+pageswithprop-param-limit": "回傳的頁面數量上限。",
+       "apihelp-query+prefixsearch-param-search": "搜尋字串。",
+       "apihelp-query+prefixsearch-param-namespace": "搜尋的命名空間。若 <var>$1search</var> 以有效的命名空間前綴為開頭則會被忽略。",
        "apihelp-query+prefixsearch-param-limit": "回傳的結果數量上限。",
+       "apihelp-query+prefixsearch-param-offset": "要略過的結果數量。",
        "apihelp-query+protectedtitles-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+protectedtitles-param-prop": "要取得的屬性。",
        "apihelp-query+querypage-param-limit": "回傳的結果數量。",
        "apihelp-query+recentchanges-summary": "列舉出最近變更。",
+       "apihelp-query+recentchanges-param-start": "起始列舉的時間戳記。",
+       "apihelp-query+recentchanges-param-end": "結束列舉的時間戳記。",
+       "apihelp-query+recentchanges-param-user": "此列出由該使用者作出的更改。",
+       "apihelp-query+recentchanges-param-excludeuser": "不要列出由該使用者作出的更改。",
        "apihelp-query+recentchanges-param-limit": "要回傳變更總數。",
        "apihelp-query+recentchanges-example-simple": "最近變更清單",
        "apihelp-query+redirects-summary": "回傳連結至指定頁面的所有重新導向。",
+       "apihelp-query+redirects-param-prop": "要取得的屬性。",
+       "apihelp-query+redirects-paramvalue-prop-title": "各重新導向的標題。",
        "apihelp-query+redirects-param-limit": "要回傳的重新導向數量。",
+       "apihelp-query+revisions-summary": "取得修訂的資訊。",
+       "apihelp-query+revisions+base-paramvalue-prop-ids": "修訂 ID。",
+       "apihelp-query+search-param-info": "要回傳的詮釋資料。",
+       "apihelp-query+search-param-prop": "要回傳的屬性:",
        "apihelp-query+search-paramvalue-prop-score": "已忽略",
        "apihelp-query+search-paramvalue-prop-hasrelated": "已忽略",
        "apihelp-query+search-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+siteinfo-example-simple": "索取站台資訊。",
+       "apihelp-query+siteinfo-example-interwiki": "索取本地端跨 wiki 前綴的清單。",
        "apihelp-query+stashimageinfo-summary": "回傳多筆儲藏檔案的檔案資訊。",
        "apihelp-query+stashimageinfo-example-simple": "回傳儲藏檔案的檔案資訊。",
        "apihelp-query+tags-summary": "列出變更標記。",
+       "apihelp-query+tags-param-prop": "要取得的屬性。",
+       "apihelp-query+tags-paramvalue-prop-name": "添加標籤名稱。",
+       "apihelp-query+tags-paramvalue-prop-displayname": "添加標籤的系統訊息。",
+       "apihelp-query+tags-paramvalue-prop-description": "添加標籤的描述。",
+       "apihelp-query+tags-example-simple": "列出可用標籤。",
        "apihelp-query+templates-summary": "回傳指定頁面中所有引用的頁面。",
        "apihelp-query+templates-param-limit": "要回傳的模板數量。",
        "apihelp-query+tokens-param-type": "要求的權杖類型。",
        "apihelp-query+tokens-example-simple": "接收 csrf 密鑰 (預設)。",
        "apihelp-query+tokens-example-types": "接收監視密鑰以及巡邏密鑰。",
+       "apihelp-query+transcludedin-param-prop": "要取得的屬性。",
+       "apihelp-query+transcludedin-paramvalue-prop-pageid": "各頁面的頁面 ID。",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "各頁面的標題。",
+       "apihelp-query+transcludedin-paramvalue-prop-redirect": "若頁面為重新導向,則做出標記。",
        "apihelp-query+transcludedin-param-limit": "回傳的數量。",
        "apihelp-query+usercontribs-param-limit": "回傳的貢獻數量上限。",
+       "apihelp-query+users-summary": "取得有關使用者清單的資訊。",
+       "apihelp-query+watchlist-param-start": "起始列舉的時間戳記。",
+       "apihelp-query+watchlist-param-end": "結束列舉的時間戳記。",
        "apihelp-query+watchlist-param-limit": "每個請求要回傳的結果總數。",
+       "apihelp-query+watchlist-paramvalue-prop-title": "添加頁面標題。",
+       "apihelp-query+watchlist-paramvalue-prop-flags": "添加編輯的標籤。",
+       "apihelp-query+watchlist-paramvalue-type-log": "日誌項目。",
+       "apihelp-query+watchlist-paramvalue-type-categorize": "分類成員更改。",
        "apihelp-query+watchlistraw-param-limit": "每個請求要回傳的結果總數。",
+       "apihelp-query+watchlistraw-param-dir": "列出時所採用的方向。",
        "apihelp-removeauthenticationdata-summary": "為目前使用者移除身分核對資料。",
        "apihelp-revisiondelete-summary": "刪除和取消刪除修訂。",
        "apihelp-stashedit-param-title": "正在編輯此頁面的標題。",
        "apihelp-unblock-summary": "解除封鎖一位使用者。",
        "apihelp-unblock-param-reason": "解除封鎖的原因。",
        "apihelp-unblock-example-id": "解除封銷 ID #<kbd>105</kbd>。",
+       "apihelp-undelete-param-title": "要恢復的頁面標題。",
        "apihelp-undelete-param-reason": "還原的原因。",
+       "apihelp-upload-param-filename": "目標檔案名稱。",
+       "apihelp-upload-param-comment": "上傳註釋。如果 <var>$1text</var> 未指定的話,也會作為新檔案用的初始頁面文字。",
+       "apihelp-upload-param-file": "檔案內容。",
+       "apihelp-upload-example-url": "從 URL 上傳。",
        "apihelp-userrights-summary": "變更一位使用者的群組成員。",
        "apihelp-userrights-param-user": "使用者名稱。",
        "apihelp-userrights-param-userid": "使用者ID。",
        "apihelp-userrights-param-add": "加入使用者至這些群組;若已是成員,則更新失效時間。",
        "apihelp-userrights-param-remove": "從這些群組移除使用者。",
        "apihelp-userrights-param-reason": "變更的原因。",
+       "apihelp-validatepassword-param-password": "要驗證的密碼。",
+       "apihelp-watch-example-watch": "監視頁面 <kbd>Main Page</kbd>。",
        "apihelp-format-example-generic": "以 $1 格式傳回查詢結果。",
        "apihelp-json-summary": "使用 JSON 格式輸出資料。",
        "apihelp-jsonfm-summary": "使用 JSON 格式輸出資料 (使用 HTML 格式顯示)。",
        "api-help-flag-writerights": "此模組需要寫入權限。",
        "api-help-flag-mustbeposted": "此模組僅接受 POST 請求。",
        "api-help-flag-generator": "此模組可作為產生器使用。",
+       "api-help-source": "來源:$1",
+       "api-help-source-unknown": "來源:<span class=\"apihelp-unknown\">未知</span>",
        "api-help-license": "協定:[[$1|$2]]",
        "api-help-license-noname": "協定:[[$1|查看連結]]",
        "api-help-license-unknown": "協定:<span class=\"apihelp-unknown\">未知</span>",
        "api-help-param-required": "此參數為必填。",
        "api-help-datatypes-header": "資料類型",
        "api-help-datatypes": "至MediaWiki的輸入值應為NFC標準化的UTF-8。MediaWiki可以嘗試轉換其他輸入值,但這可能導致一些操作失敗(例如附帶MD5檢查的[[Special:ApiHelp/edit|編輯]])。\n\n一些在API請求中的參數類型需要更進一步解釋:\n;boolean\n:布林參數產生作用就像HTML複選框一樣:如果參數被指定,無論何值都被視為真(true)。如果要假值(false),則必須省略參數。\n;timestamp\n:時間戳記可被指定為多種格式。推荐使用ISO 8601日期和時間標準。所有時間為UTC時間,包含的任何時區都會被忽略。\n:* ISO 8601日期和時間,<kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd>(標點和<kbd>Z</kbd>為選用)\n:* 帶小數秒(會被忽略)的ISO 8601日期和時間,<kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd>(破折號、冒號和<kbd>Z</kbd>為選用)\n:* MediaWiki格式,<kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* 一般數字格式,<kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>(<kbd>GMT</kbd>、<kbd>+<var>##</var></kbd>或<kbd>-<var>##</var></kbd>的選用時區會被忽略)\n:* EXIF格式,<kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* RFC 2822格式(時區可省略),<kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* RFC 850格式(時區可省略),<kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* C ctime格式,<kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* 從1970-01-01T00:00:00Z開始的秒數,作為1到13位數的整數(除了<kbd>0</kbd>)\n:* 字串<kbd>now</kbd>\n;替代多值分隔符號\n:使用多個值的參數通常會與垂直線符號(|)分隔的值一起提交,例如<kbd>param=value1|value2</kbd>或<kbd>param=value1%7Cvalue2</kbd>。如果值必須包含垂直線符號,使用U+001F(單位分隔符號)作為分隔符號,''並且''在值前加前綴U+001F,例如<kbd>param=%1Fvalue1%1Fvalue2</kbd>。",
+       "api-help-templatedparams-header": "模板參數",
        "api-help-param-type-limit": "類型:整數或<kbd>max</kbd>",
        "api-help-param-type-integer": "類型:{{PLURAL:$1|1=整數|2=整數列表}}",
        "api-help-param-type-boolean": "類型:布林值([[Special:ApiHelp/main#main/datatypes|詳細資訊]])",
        "api-help-authmanagerhelper-returnurl": "為第三方身份驗證流程傳回URL,必須為絕對值。需要此值或<var>$1continue</var>兩者之一。\n\n在接收<samp>REDIRECT</samp>回應時,一般狀況下您將打開瀏覽器或網站瀏覽功能到特定的<samp>redirecttarget</samp> URL以進行第三方身份驗證流程。當它完成時,第三方會將瀏覽器或網站瀏覽功能送至此URL。您應當提取任何來自URL的查詢或POST參數,並將之作為<var>$1continue</var>請求傳遞至此API模組。",
        "api-help-authmanagerhelper-continue": "此請求是在先前的<samp>UI</samp>或<samp>REDIRECT</samp>回應之後的後續動作。必須為此值或<var>$1returnurl</var>。",
        "api-help-authmanagerhelper-additional-params": "此模組允許額外參數,取決於可用的身份驗證請求。使用<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>与<kbd>amirequestsfor=$1</kbd>(或之前來自此模組的回應,如果合適)以決定可用請求及其使用的欄位。",
+       "apierror-badip": "IP 參數無效。",
+       "apierror-badmd5": "提供的 MD5 雜湊不正確。",
+       "apierror-badquery": "無效的查詢。",
+       "apierror-copyuploadbadurl": "不允許從此 URL 來上傳。",
+       "apierror-filedoesnotexist": "檔案不存在。",
+       "apierror-filenopath": "無法取得本地端檔案路徑。",
+       "apierror-import-unknownerror": "未知的匯入錯誤:$1",
+       "apierror-invalidsha1hash": "所提供的 SHA1 雜湊無效。",
        "apierror-missingparam": "<var>$1</var>參數必須被設定。",
+       "apierror-missingtitle": "您所指定的頁面不存在。",
        "apierror-mustbeloggedin-changeauth": "必須登入,才能變更身分核對資取。",
+       "apierror-mustbeloggedin-generic": "您必須登入。",
        "apierror-mustbeloggedin-removeauth": "必須登入,才能移除身分核對資取。",
+       "apierror-nodeleteablefile": "沒有這樣檔案的舊版本。",
+       "apierror-noedit-anon": "匿名使用者不可編輯頁面。",
+       "apierror-noedit": "您沒有權限來編輯頁面。",
+       "apierror-nouploadmodule": "未設定上傳模組。",
        "apierror-permissiondenied": "您沒有權限$1。",
+       "apierror-permissiondenied-unblock": "您沒有權限來解封使用者。",
+       "apierror-readonly": "Wiki 目前為唯讀模式。",
        "apierror-reauthenticate": "於本工作階段還未核對身分,請重新核對。",
        "apierror-timeout": "伺服器未有在預計的時間內回應。",
+       "apierror-unknownerror-editpage": "不明編輯頁面錯誤:$1。",
+       "apierror-unknownerror-nocode": "不明錯誤。",
+       "apierror-unknownerror": "不明錯誤:\"$1\"。",
+       "apierror-unknownformat": "無法識別的格式\"$1\"。",
+       "apierror-upload-missingresult": "狀態資料裡沒有結果。",
        "api-feed-error-title": "錯誤($1)",
        "api-credits-header": "製作群",
        "api-credits": "API 開發人員:\n* Roan Kattouw (首席開發者 Sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (創立者,首席開發者 Sep 2006–Sep 2007)\n* Brad Jorsch (首席開發者 2013–present)\n\n請傳送您的評論、建議以及問題至 mediawiki-api@lists.wikimedia.org\n或者回報問題至 https://phabricator.wikimedia.org/。"
index d3fd5fc..ab7ba0f 100644 (file)
@@ -2408,15 +2408,15 @@ class AuthManager implements LoggerAwareInterface {
         * @param bool $useContextLang Use 'uselang' to set the user's language
         */
        private function setDefaultUserOptions( User $user, $useContextLang ) {
-               global $wgContLang;
-
                $user->setToken();
 
-               $lang = $useContextLang ? \RequestContext::getMain()->getLanguage() : $wgContLang;
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+
+               $lang = $useContextLang ? \RequestContext::getMain()->getLanguage() : $contLang;
                $user->setOption( 'language', $lang->getPreferredVariant() );
 
-               if ( $wgContLang->hasVariants() ) {
-                       $user->setOption( 'variant', $wgContLang->getPreferredVariant() );
+               if ( $contLang->hasVariants() ) {
+                       $user->setOption( 'variant', $contLang->getPreferredVariant() );
                }
        }
 
index f8cd754..3a89066 100644 (file)
@@ -91,7 +91,6 @@ class HTMLFileCache extends FileCacheBase {
         * @return bool
         */
        public static function useFileCache( IContextSource $context, $mode = self::MODE_NORMAL ) {
-               global $wgContLang;
                $config = MediaWikiServices::getInstance()->getMainConfig();
 
                if ( !$config->get( 'UseFileCache' ) && $mode !== self::MODE_REBUILD ) {
@@ -124,7 +123,8 @@ class HTMLFileCache extends FileCacheBase {
                $ulang = $context->getLanguage();
 
                // Check that there are no other sources of variation
-               if ( $user->getId() || !$ulang->equals( $wgContLang ) ) {
+               if ( $user->getId() ||
+                       !$ulang->equals( MediaWikiServices::getInstance()->getContentLanguage() ) ) {
                        return false;
                }
 
@@ -145,7 +145,6 @@ class HTMLFileCache extends FileCacheBase {
         * @return void
         */
        public function loadFromFileCache( IContextSource $context, $mode = self::MODE_NORMAL ) {
-               global $wgContLang;
                $config = MediaWikiServices::getInstance()->getMainConfig();
 
                wfDebug( __METHOD__ . "()\n" );
@@ -158,7 +157,8 @@ class HTMLFileCache extends FileCacheBase {
 
                $context->getOutput()->sendCacheControl();
                header( "Content-Type: {$config->get( 'MimeType' )}; charset=UTF-8" );
-               header( "Content-Language: {$wgContLang->getHtmlCode()}" );
+               header( 'Content-Language: ' .
+                       MediaWikiServices::getInstance()->getContentLanguage()->getHtmlCode() );
                if ( $this->useGzip() ) {
                        if ( wfClientAcceptsGzip() ) {
                                header( 'Content-Encoding: gzip' );
index 30d105b..c1aef59 100644 (file)
@@ -222,8 +222,7 @@ class LinkBatch {
                        return false;
                }
 
-               global $wgContLang;
-               if ( !$wgContLang->needsGenderDistinction() ) {
+               if ( !MediaWikiServices::getInstance()->getContentLanguage()->needsGenderDistinction() ) {
                        return false;
                }
 
index 7a172be..f09b5bf 100644 (file)
@@ -88,6 +88,8 @@ class MessageCache {
        protected $clusterCache;
        /** @var BagOStuff */
        protected $srvCache;
+       /** @var Language */
+       protected $contLang;
 
        /**
         * Singleton instance
@@ -112,7 +114,8 @@ class MessageCache {
                                        ? MediaWikiServices::getInstance()->getLocalServerObjectCache()
                                        : new EmptyBagOStuff(),
                                $wgUseDatabaseMessages,
-                               $wgMsgCacheExpiry
+                               $wgMsgCacheExpiry,
+                               MediaWikiServices::getInstance()->getContentLanguage()
                        );
                }
 
@@ -135,13 +138,11 @@ class MessageCache {
         * @return string Normalized message key
         */
        public static function normalizeKey( $key ) {
-               global $wgContLang;
-
                $lckey = strtr( $key, ' ', '_' );
                if ( ord( $lckey ) < 128 ) {
                        $lckey[0] = strtolower( $lckey[0] );
                } else {
-                       $lckey = $wgContLang->lcfirst( $lckey );
+                       $lckey = MediaWikiServices::getInstance()->getContentLanguage()->lcfirst( $lckey );
                }
 
                return $lckey;
@@ -153,13 +154,15 @@ class MessageCache {
         * @param BagOStuff $serverCache
         * @param bool $useDB Whether to look for message overrides (e.g. MediaWiki: pages)
         * @param int $expiry Lifetime for cache. @see $mExpiry.
+        * @param Language|null $contLang Content language of site
         */
        public function __construct(
                WANObjectCache $wanCache,
                BagOStuff $clusterCache,
                BagOStuff $serverCache,
                $useDB,
-               $expiry
+               $expiry,
+               Language $contLang = null
        ) {
                $this->wanCache = $wanCache;
                $this->clusterCache = $clusterCache;
@@ -169,6 +172,7 @@ class MessageCache {
 
                $this->mDisable = !$useDB;
                $this->mExpiry = $expiry;
+               $this->contLang = $contLang ?? MediaWikiServices::getInstance()->getContentLanguage();
        }
 
        /**
@@ -228,13 +232,13 @@ class MessageCache {
         * (2) memcached
         * (3) from the database.
         *
-        * When succesfully loading from (2) or (3), all higher level caches are
+        * When successfully loading from (2) or (3), all higher level caches are
         * updated for the newest version.
         *
         * Nothing is loaded if member variable mDisable is true, either manually
         * set by calling code or if message loading fails (is this possible?).
         *
-        * Returns true if cache is already populated or it was succesfully populated,
+        * Returns true if cache is already populated or it was successfully populated,
         * or false if populating empty cache fails. Also returns true if MessageCache
         * is disabled.
         *
@@ -364,7 +368,7 @@ class MessageCache {
                if ( !$success ) {
                        $where[] = 'loading FAILED - cache is disabled';
                        $this->mDisable = true;
-                       $this->cache->set( $code, null );
+                       $this->cache->set( $code, [] );
                        wfDebugLog( 'MessageCacheError', __METHOD__ . ": Failed to load $code\n" );
                        # This used to throw an exception, but that led to nasty side effects like
                        # the whole wiki being instantly down if the memcached server died
@@ -581,7 +585,7 @@ class MessageCache {
                // (b) Update the shared caches in a deferred update with a fresh DB snapshot
                DeferredUpdates::addCallableUpdate(
                        function () use ( $title, $msg, $code ) {
-                               global $wgContLang, $wgMaxMsgCacheEntrySize;
+                               global $wgMaxMsgCacheEntrySize;
                                // Allow one caller at a time to avoid race conditions
                                $scopedLock = $this->getReentrantScopedLock(
                                        $this->clusterCache->makeKey( 'messages', $code )
@@ -627,7 +631,7 @@ class MessageCache {
                                // Purge the message in the message blob store
                                $resourceloader = RequestContext::getMain()->getOutput()->getResourceLoader();
                                $blobStore = $resourceloader->getMessageBlobStore();
-                               $blobStore->updateMessage( $wgContLang->lcfirst( $msg ) );
+                               $blobStore->updateMessage( $this->contLang->lcfirst( $msg ) );
 
                                Hooks::run( 'MessageCacheReplace', [ $title, $text ] );
                        },
@@ -860,8 +864,6 @@ class MessageCache {
         * @return string|bool The message, or false if not found
         */
        protected function getMessageFromFallbackChain( $lang, $lckey, $useDB ) {
-               global $wgContLang;
-
                $alreadyTried = [];
 
                // First try the requested language.
@@ -871,7 +873,7 @@ class MessageCache {
                }
 
                // Now try checking the site language.
-               $message = $this->getMessageForLang( $wgContLang, $lckey, $useDB, $alreadyTried );
+               $message = $this->getMessageForLang( $this->contLang, $lckey, $useDB, $alreadyTried );
                return $message;
        }
 
@@ -886,13 +888,11 @@ class MessageCache {
         * @return string|bool The message, or false if not found
         */
        private function getMessageForLang( $lang, $lckey, $useDB, &$alreadyTried ) {
-               global $wgContLang;
-
                $langcode = $lang->getCode();
 
                // Try checking the database for the requested language
                if ( $useDB ) {
-                       $uckey = $wgContLang->ucfirst( $lckey );
+                       $uckey = $this->contLang->ucfirst( $lckey );
 
                        if ( !isset( $alreadyTried[$langcode] ) ) {
                                $message = $this->getMsgFromNamespace(
@@ -1241,8 +1241,6 @@ class MessageCache {
         * @return array Array of message keys (strings)
         */
        public function getAllMessageKeys( $code ) {
-               global $wgContLang;
-
                $this->load( $code );
                if ( !$this->cache->has( $code ) ) {
                        // Apparently load() failed
@@ -1257,7 +1255,7 @@ class MessageCache {
                $cache = array_diff( $cache, [ '!NONEXISTENT' ] );
 
                // Keys may appear with a capital first letter. lcfirst them.
-               return array_map( [ $wgContLang, 'lcfirst' ], array_keys( $cache ) );
+               return array_map( [ $this->contLang, 'lcfirst' ], array_keys( $cache ) );
        }
 
        /**
@@ -1268,8 +1266,6 @@ class MessageCache {
         * @since 1.29
         */
        public function updateMessageOverride( Title $title, Content $content = null ) {
-               global $wgContLang;
-
                $msgText = $this->getMessageTextFromContent( $content );
                if ( $msgText === null ) {
                        $msgText = false; // treat as not existing
@@ -1277,8 +1273,8 @@ class MessageCache {
 
                $this->replace( $title->getDBkey(), $msgText );
 
-               if ( $wgContLang->hasVariants() ) {
-                       $wgContLang->updateConversionTable( $title );
+               if ( $this->contLang->hasVariants() ) {
+                       $this->contLang->updateConversionTable( $title );
                }
        }
 
index c57145c..2d8e4d2 100644 (file)
@@ -18,6 +18,7 @@
  * @file
  */
 
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
 use Wikimedia\Rdbms\DBQueryError;
 
@@ -26,21 +27,29 @@ use Wikimedia\Rdbms\DBQueryError;
  * This will work on any MediaWiki installation.
  */
 class LCStoreDB implements LCStore {
-
        /** @var string */
        private $currentLang;
        /** @var bool */
        private $writesDone = false;
-       /** @var IDatabase */
+       /** @var IDatabase|null */
        private $dbw;
        /** @var array */
        private $batch = [];
        /** @var bool */
        private $readOnly = false;
+       /** @var array Server configuration map */
+       private $server;
+
+       public function __construct( $params ) {
+               $this->server = $params['server'] ?? [];
+       }
 
        public function get( $code, $key ) {
-               if ( $this->writesDone && $this->dbw ) {
-                       $db = $this->dbw; // see the changes in finishWrite()
+               if ( $this->server || $this->writesDone ) {
+                       // If a server configuration map is specified, always used that connection
+                       // for reads and writes. Otherwise, if writes occurred in finishWrite(), make
+                       // sure those changes are always visible.
+                       $db = $this->getWriteConnection();
                } else {
                        $db = wfGetDB( DB_REPLICA );
                }
@@ -62,8 +71,8 @@ class LCStoreDB implements LCStore {
                        throw new MWException( __METHOD__ . ": Invalid language \"$code\"" );
                }
 
-               $this->dbw = wfGetDB( DB_MASTER );
-               $this->readOnly = $this->dbw->isReadOnly();
+               $dbw = $this->getWriteConnection();
+               $this->readOnly = $dbw->isReadOnly();
 
                $this->currentLang = $code;
                $this->batch = [];
@@ -76,25 +85,22 @@ class LCStoreDB implements LCStore {
                        throw new MWException( __CLASS__ . ': must call startWrite() before finishWrite()' );
                }
 
-               $this->dbw->startAtomic( __METHOD__ );
+               $dbw = $this->getWriteConnection();
+               $dbw->startAtomic( __METHOD__ );
                try {
-                       $this->dbw->delete(
-                               'l10n_cache',
-                               [ 'lc_lang' => $this->currentLang ],
-                               __METHOD__
-                       );
+                       $dbw->delete( 'l10n_cache', [ 'lc_lang' => $this->currentLang ], __METHOD__ );
                        foreach ( array_chunk( $this->batch, 500 ) as $rows ) {
-                               $this->dbw->insert( 'l10n_cache', $rows, __METHOD__ );
+                               $dbw->insert( 'l10n_cache', $rows, __METHOD__ );
                        }
                        $this->writesDone = true;
                } catch ( DBQueryError $e ) {
-                       if ( $this->dbw->wasReadOnlyError() ) {
+                       if ( $dbw->wasReadOnlyError() ) {
                                $this->readOnly = true; // just avoid site down time
                        } else {
                                throw $e;
                        }
                }
-               $this->dbw->endAtomic( __METHOD__ );
+               $dbw->endAtomic( __METHOD__ );
 
                $this->currentLang = null;
                $this->batch = [];
@@ -107,11 +113,30 @@ class LCStoreDB implements LCStore {
                        throw new MWException( __CLASS__ . ': must call startWrite() before set()' );
                }
 
+               $dbw = $this->getWriteConnection();
+
                $this->batch[] = [
                        'lc_lang' => $this->currentLang,
                        'lc_key' => $key,
-                       'lc_value' => $this->dbw->encodeBlob( serialize( $value ) )
+                       'lc_value' => $dbw->encodeBlob( serialize( $value ) )
                ];
        }
 
+       /**
+        * @return IDatabase
+        */
+       private function getWriteConnection() {
+               if ( !$this->dbw ) {
+                       if ( $this->server ) {
+                               $this->dbw = Database::factory( $this->server['type'], $this->server );
+                               if ( !$this->dbw ) {
+                                       throw new MWException( __CLASS__ . ': failed to obtain a DB connection' );
+                               }
+                       } else {
+                               $this->dbw = wfGetDB( DB_MASTER );
+                       }
+               }
+
+               return $this->dbw;
+       }
 }
index 9e2a2fd..75e5e19 100644 (file)
@@ -203,6 +203,7 @@ class LocalisationCache {
                                        break;
                                case 'db':
                                        $storeClass = LCStoreDB::class;
+                                       $storeConf['server'] = $conf['storeServer'] ?? [];
                                        break;
                                case 'array':
                                        $storeClass = LCStoreStaticArray::class;
@@ -215,6 +216,7 @@ class LocalisationCache {
                                                $storeClass = LCStoreCDB::class;
                                        } else {
                                                $storeClass = LCStoreDB::class;
+                                               $storeConf['server'] = $conf['storeServer'] ?? [];
                                        }
                                        break;
                                default:
index 3bb777e..b5bf488 100644 (file)
@@ -916,8 +916,8 @@ class ChangeTags {
                if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_OLD ) {
                        $dbw->update(
                                'change_tag_def',
-                               [ 'ctd_name' => $tag ],
                                [ 'ctd_user_defined' => 0 ],
+                               [ 'ctd_name' => $tag ],
                                __METHOD__
                        );
 
index f52dcae..25b3d94 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @since 1.16.3
  * @author Tim Starling
@@ -46,13 +48,12 @@ abstract class Collation {
         * @return Collation
         */
        public static function factory( $collationName ) {
-               global $wgContLang;
-
                switch ( $collationName ) {
                        case 'uppercase':
                                return new UppercaseCollation;
                        case 'numeric':
-                               return new NumericUppercaseCollation( $wgContLang );
+                               return new NumericUppercaseCollation(
+                                       MediaWikiServices::getInstance()->getContentLanguage() );
                        case 'identity':
                                return new IdentityCollation;
                        case 'uca-default':
@@ -67,8 +68,6 @@ abstract class Collation {
                                return new AbkhazUppercaseCollation;
                        case 'uppercase-ba':
                                return new BashkirUppercaseCollation;
-                       case 'uppercase-se':
-                               return new NorthernSamiUppercaseCollation;
                        default:
                                $match = [];
                                if ( preg_match( '/^uca-([A-Za-z@=-]+)$/', $collationName, $match ) ) {
index 46e7f38..8e5871b 100644 (file)
@@ -18,6 +18,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Collation class that's essentially a no-op.
  *
@@ -33,12 +35,11 @@ class IdentityCollation extends Collation {
        }
 
        public function getFirstLetter( $string ) {
-               global $wgContLang;
                // Copied from UppercaseCollation.
                // I'm kind of unclear on when this could happen...
                if ( $string[0] == "\0" ) {
                        $string = substr( $string, 1 );
                }
-               return $wgContLang->firstChar( $string );
+               return MediaWikiServices::getInstance()->getContentLanguage()->firstChar( $string );
        }
 }
diff --git a/includes/collation/NorthernSamiUppercaseCollation.php b/includes/collation/NorthernSamiUppercaseCollation.php
deleted file mode 100644 (file)
index d373749..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @since 1.31
- *
- * @file
- */
-
-/**
- * Temporary workaround for incorrect collation of Northern Sami
- * language ('se') in Wikimedia servers (see bug T181503).
- *
- * When the ICU's 'se' collation has been included in PHP-intl and Wikimedia
- * servers updated to that new version of PHP, this file should be deleted
- * and the collation for 'se' set to 'uca-se'.
- *
- * @since 1.31
- */
-
-class NorthernSamiUppercaseCollation extends CustomUppercaseCollation {
-
-       public function __construct() {
-               parent::__construct( [
-                       'A',
-                       'Á',
-                       'B',
-                       'C',
-                       'Č',
-                       'Ʒ', // Not part of modern alphabet, but part of ICU
-                       'Ǯ', // Not part of modern alphabet, but part of ICU
-                       'D',
-                       'Đ',
-                       'E',
-                       'F',
-                       'G',
-                       'Ǧ', // Not part of modern alphabet, but part of ICU
-                       'Ǥ', // Not part of modern alphabet, but part of ICU
-                       'H',
-                       'I',
-                       'J',
-                       'K',
-                       'Ǩ', // Not part of modern alphabet, but part of ICU
-                       'L',
-                       'M',
-                       'N',
-                       'Ŋ',
-                       'O',
-                       'P',
-                       'Q',
-                       'R',
-                       'S',
-                       'Š',
-                       'T',
-                       'Ŧ',
-                       'U',
-                       'V',
-                       'W',
-                       'X',
-                       'Y',
-                       'Z',
-                       'Ž',
-                       'Ø', // Not part of native alphabet, but part of ICU
-                       'Æ', // Not part of native alphabet, but part of ICU
-                       'Å', // Not part of native alphabet, but part of ICU
-                       'Ä', // Not part of native alphabet, but part of ICU
-                       'Ö', // Not part of native alphabet, but part of ICU
-               ], Language::factory( 'se' ) );
-       }
-}
index 4a2d776..d249640 100644 (file)
@@ -35,7 +35,7 @@
 class NumericUppercaseCollation extends UppercaseCollation {
 
        /**
-        * @var $digitTransformLang Language How to convert digits (usually $wgContLang)
+        * @var $digitTransformLang Language How to convert digits (usually the content language)
         */
        private $digitTransformLang;
 
@@ -43,7 +43,7 @@ class NumericUppercaseCollation extends UppercaseCollation {
         * @param Language $lang How to convert digits.
         *  For example, if given language "my" than ၇ is treated like 7.
         *
-        * It is expected that usually this is given $wgContLang.
+        * It is expected that usually this is given the content language.
         */
        public function __construct( Language $lang ) {
                $this->digitTransformLang = $lang;
index 79bbba8..004e38a 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
 use MediaWiki\Search\ParserOutputSearchDataExtractor;
 
 /**
@@ -642,7 +643,7 @@ abstract class ContentHandler {
        /**
         * Get the language in which the content of the given page is written.
         *
-        * This default implementation just returns $wgContLang (except for pages
+        * This default implementation just returns the content language (except for pages
         * in the MediaWiki namespace)
         *
         * Note that the pages language is not cacheable, since it may in some
@@ -659,8 +660,8 @@ abstract class ContentHandler {
         * @return Language The page's language
         */
        public function getPageLanguage( Title $title, Content $content = null ) {
-               global $wgContLang, $wgLang;
-               $pageLang = $wgContLang;
+               global $wgLang;
+               $pageLang = MediaWikiServices::getInstance()->getContentLanguage();
 
                if ( $title->getNamespace() == NS_MEDIAWIKI ) {
                        // Parse mediawiki messages with correct target language
index c058296..20bce37 100644 (file)
@@ -25,6 +25,8 @@
  * @author Daniel Kinzler
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Content object implementation for representing flat text.
  *
@@ -71,13 +73,10 @@ class TextContent extends AbstractContent {
        }
 
        public function getTextForSummary( $maxlength = 250 ) {
-               global $wgContLang;
-
                $text = $this->getNativeData();
 
-               $truncatedtext = $wgContLang->truncateForDatabase(
-                       preg_replace( "/[\n\r]/", ' ', $text ),
-                       max( 0, $maxlength ) );
+               $truncatedtext = MediaWikiServices::getInstance()->getContentLanguage()->
+                       truncateForDatabase( preg_replace( "/[\n\r]/", ' ', $text ), max( 0, $maxlength ) );
 
                return $truncatedtext;
        }
@@ -195,20 +194,18 @@ class TextContent extends AbstractContent {
         *
         * @param Content $that The other content object to compare this content object to.
         * @param Language|null $lang The language object to use for text segmentation.
-        *    If not given, $wgContentLang is used.
+        *    If not given, the content language is used.
         *
         * @return Diff A diff representing the changes that would have to be
         *    made to this content object to make it equal to $that.
         */
        public function diff( Content $that, Language $lang = null ) {
-               global $wgContLang;
-
                $this->checkModelID( $that->getModel() );
 
                // @todo could implement this in DifferenceEngine and just delegate here?
 
                if ( !$lang ) {
-                       $lang = $wgContLang;
+                       $lang = MediaWikiServices::getInstance()->getContentLanguage();
                }
 
                $otext = $this->getNativeData();
index 21947d2..a7021b1 100644 (file)
@@ -35,6 +35,12 @@ use MediaWiki\MediaWikiServices;
 class WikitextContent extends TextContent {
        private $redirectTargetAndText = null;
 
+       /**
+        * @var bool Tracks if the parser set the user-signature flag when creating this content, which
+        *   would make it expire faster in ApiStashEdit.
+        */
+       private $hadSignature = false;
+
        public function __construct( $text ) {
                parent::__construct( $text, CONTENT_MODEL_WIKITEXT );
        }
@@ -140,7 +146,17 @@ class WikitextContent extends TextContent {
                $text = $this->getNativeData();
                $pst = $wgParser->preSaveTransform( $text, $title, $user, $popts );
 
-               return ( $text === $pst ) ? $this : new static( $pst );
+               if ( $text === $pst ) {
+                       return $this;
+               }
+
+               $ret = new static( $pst );
+
+               if ( $wgParser->getOutput()->getFlag( 'user-signature' ) ) {
+                       $ret->hadSignature = true;
+               }
+
+               return $ret;
        }
 
        /**
@@ -337,6 +353,11 @@ class WikitextContent extends TextContent {
                                $output->addModuleStyles( 'mediawiki.action.view.redirectPage' );
                        }
                }
+
+               // Pass along user-signature flag
+               if ( $this->hadSignature ) {
+                       $output->setFlag( 'user-signature' );
+               }
        }
 
        /**
index 7563330..16c304c 100644 (file)
@@ -325,8 +325,6 @@ class RequestContext implements IContextSource, MutableContext {
                } elseif ( $this->lang === null ) {
                        $this->recursion = true;
 
-                       global $wgContLang;
-
                        try {
                                $request = $this->getRequest();
                                $user = $this->getUser();
@@ -340,7 +338,7 @@ class RequestContext implements IContextSource, MutableContext {
                                Hooks::run( 'UserGetLanguageObject', [ $user, &$code, $this ] );
 
                                if ( $code === $this->getConfig()->get( 'LanguageCode' ) ) {
-                                       $this->lang = $wgContLang;
+                                       $this->lang = MediaWikiServices::getInstance()->getContentLanguage();
                                } else {
                                        $obj = Language::factory( $code );
                                        $this->lang = $obj;
index f4f04f1..4977762 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Database
  */
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\Blob;
 use Wikimedia\Rdbms\ResultWrapper;
@@ -446,8 +447,6 @@ class DatabaseOracle extends Database {
         * @throws DBUnexpectedError
         */
        private function insertOneRow( $table, $row, $fname ) {
-               global $wgContLang;
-
                $table = $this->tableName( $table );
                // "INSERT INTO tables (a, b, c)"
                $sql = "INSERT INTO " . $table . " (" . implode( ',', array_keys( $row ) ) . ')';
@@ -493,7 +492,8 @@ class DatabaseOracle extends Database {
                                        $val = $this->getInfinity();
                                }
 
-                               $val = ( $wgContLang != null ) ? $wgContLang->checkTitleEncoding( $val ) : $val;
+                               $val = MediaWikiServices::getInstance()->getContentLanguage()->
+                                       checkTitleEncoding( $val );
                                if ( oci_bind_by_name( $stmt, ":$col", $val, -1, SQLT_CHR ) === false ) {
                                        $e = oci_error( $stmt );
                                        $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
@@ -1067,9 +1067,9 @@ class DatabaseOracle extends Database {
        }
 
        function addQuotes( $s ) {
-               global $wgContLang;
-               if ( isset( $wgContLang->mLoaded ) && $wgContLang->mLoaded ) {
-                       $s = $wgContLang->checkTitleEncoding( $s );
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               if ( isset( $contLang->mLoaded ) && $contLang->mLoaded ) {
+                       $s = $contLang->checkTitleEncoding( $s );
                }
 
                return "'" . $this->strencode( $s ) . "'";
@@ -1092,15 +1092,15 @@ class DatabaseOracle extends Database {
        }
 
        private function wrapFieldForWhere( $table, &$col, &$val ) {
-               global $wgContLang;
-
                $col_info = $this->fieldInfoMulti( $table, $col );
                $col_type = $col_info != false ? $col_info->type() : 'CONSTANT';
                if ( $col_type == 'CLOB' ) {
                        $col = 'TO_CHAR(' . $col . ')';
-                       $val = $wgContLang->checkTitleEncoding( $val );
+                       $val =
+                               MediaWikiServices::getInstance()->getContentLanguage()->checkTitleEncoding( $val );
                } elseif ( $col_type == 'VARCHAR2' ) {
-                       $val = $wgContLang->checkTitleEncoding( $val );
+                       $val =
+                               MediaWikiServices::getInstance()->getContentLanguage()->checkTitleEncoding( $val );
                }
        }
 
@@ -1225,8 +1225,6 @@ class DatabaseOracle extends Database {
         * @throws DBUnexpectedError
         */
        function update( $table, $values, $conds, $fname = __METHOD__, $options = [] ) {
-               global $wgContLang;
-
                $table = $this->tableName( $table );
                $opts = $this->makeUpdateOptions( $options );
                $sql = "UPDATE $opts $table SET ";
@@ -1270,7 +1268,8 @@ class DatabaseOracle extends Database {
                                        $val = '31-12-2030 12:00:00.000000';
                                }
 
-                               $val = ( $wgContLang != null ) ? $wgContLang->checkTitleEncoding( $val ) : $val;
+                               $val = MediaWikiServices::getInstance()->getContentLanguage()->
+                                       checkTitleEncoding( $val );
                                if ( oci_bind_by_name( $stmt, ":$col", $val ) === false ) {
                                        $e = oci_error( $stmt );
                                        $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
index 7bd505d..d4a79d9 100644 (file)
@@ -193,7 +193,7 @@ class LegacyLogger extends AbstractLogger {
         * Format a message.
         *
         * Messages to the 'wfDebug', 'wfLogDBError' and 'wfErrorLog' channels
-        * receive special fomatting to mimic the historic output of the functions
+        * receive special formatting to mimic the historic output of the functions
         * of the same name. All other channel values are formatted based on the
         * historic output of the `wfDebugLog()` global function.
         *
index 141888c..ae3c660 100644 (file)
@@ -581,12 +581,13 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
         * @return array
         */
        private function getCategoryInsertions( $existing = [] ) {
-               global $wgContLang, $wgCategoryCollation;
+               global $wgCategoryCollation;
                $diffs = array_diff_assoc( $this->mCategories, $existing );
                $arr = [];
                foreach ( $diffs as $name => $prefix ) {
                        $nt = Title::makeTitleSafe( NS_CATEGORY, $name );
-                       $wgContLang->findVariantLink( $name, $nt, true );
+                       MediaWikiServices::getInstance()->getContentLanguage()->
+                               findVariantLink( $name, $nt, true );
 
                        $type = MWNamespace::getCategoryLinkType( $this->mTitle->getNamespace() );
 
index 0d1de1a..105877b 100644 (file)
@@ -117,15 +117,14 @@ class SearchUpdate implements DeferrableUpdate {
         * @return string
         */
        public function updateText( $text, SearchEngine $se = null ) {
-               global $wgContLang;
-
                # Language-specific strip/conversion
-               $text = $wgContLang->normalizeForSearch( $text );
+               $text = MediaWikiServices::getInstance()->getContentLanguage()->normalizeForSearch( $text );
                $se = $se ?: MediaWikiServices::getInstance()->newSearchEngine();
                $lc = $se->legalSearchChars() . '&#;';
 
+               # Strip HTML markup
                $text = preg_replace( "/<\\/?\\s*[A-Za-z][^>]*?>/",
-                       ' ', $wgContLang->lc( " " . $text . " " ) ); # Strip HTML markup
+                       ' ', MediaWikiServices::getInstance()->getContentLanguage()->lc( " " . $text . " " ) );
                $text = preg_replace( "/(^|\\n)==\\s*([^\\n]+)\\s*==(\\s)/sD",
                        "\\1\\2 \\2 \\2\\3", $text ); # Emphasize headings
 
@@ -200,15 +199,13 @@ class SearchUpdate implements DeferrableUpdate {
         * @return string A stripped-down title string ready for the search index
         */
        private function getNormalizedTitle( SearchEngine $search ) {
-               global $wgContLang;
-
                $ns = $this->title->getNamespace();
                $title = $this->title->getText();
 
                $lc = $search->legalSearchChars() . '&#;';
-               $t = $wgContLang->normalizeForSearch( $title );
+               $t = MediaWikiServices::getInstance()->getContentLanguage()->normalizeForSearch( $title );
                $t = preg_replace( "/[^{$lc}]+/", ' ', $t );
-               $t = $wgContLang->lc( $t );
+               $t = MediaWikiServices::getInstance()->getContentLanguage()->lc( $t );
 
                # Handle 's, s'
                $t = preg_replace( "/([{$lc}]+)'s( |$)/", "\\1 \\1's ", $t );
index aa0a1f7..5138655 100644 (file)
@@ -992,8 +992,6 @@ class DifferenceEngine extends ContextSource {
         * @return bool|string
         */
        protected function textDiff( $otext, $ntext ) {
-               global $wgContLang;
-
                $otext = str_replace( "\r\n", "\n", $otext );
                $ntext = str_replace( "\r\n", "\n", $ntext );
 
@@ -1067,11 +1065,12 @@ class DifferenceEngine extends ContextSource {
                }
 
                # Native PHP diff
-               $ota = explode( "\n", $wgContLang->segmentForDiff( $otext ) );
-               $nta = explode( "\n", $wgContLang->segmentForDiff( $ntext ) );
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               $ota = explode( "\n", $contLang->segmentForDiff( $otext ) );
+               $nta = explode( "\n", $contLang->segmentForDiff( $ntext ) );
                $diffs = new Diff( $ota, $nta );
                $formatter = new TableDiffFormatter();
-               $difftext = $wgContLang->unsegmentForDiff( $formatter->format( $diffs ) );
+               $difftext = $contLang->unsegmentForDiff( $formatter->format( $diffs ) );
                $difftext .= $this->debug( 'native PHP' );
 
                return $difftext;
index e1c12de..e6f1fd7 100644 (file)
@@ -23,6 +23,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @ingroup Dump
  */
@@ -38,7 +40,6 @@ class XmlDumpWriter {
         * @return string
         */
        function openStream() {
-               global $wgContLang;
                $ver = WikiExporter::schemaVersion();
                return Xml::element( 'mediawiki', [
                        'xmlns'              => "http://www.mediawiki.org/xml/export-$ver/",
@@ -55,8 +56,8 @@ class XmlDumpWriter {
                         */
                        'xsi:schemaLocation' => "http://www.mediawiki.org/xml/export-$ver/ " .
                                "http://www.mediawiki.org/xml/export-$ver.xsd",
-                       'version'            => $ver,
-                       'xml:lang'           => $wgContLang->getHtmlCode() ],
+                       'version' => $ver,
+                       'xml:lang' => MediaWikiServices::getInstance()->getContentLanguage()->getHtmlCode() ],
                        null ) .
                        "\n" .
                        $this->siteInfo();
@@ -123,9 +124,11 @@ class XmlDumpWriter {
         * @return string
         */
        function namespaces() {
-               global $wgContLang;
                $spaces = "<namespaces>\n";
-               foreach ( $wgContLang->getFormattedNamespaces() as $ns => $title ) {
+               foreach (
+                       MediaWikiServices::getInstance()->getContentLanguage()->getFormattedNamespaces()
+                       as $ns => $title
+               ) {
                        $spaces .= '      ' .
                                Xml::element( 'namespace',
                                        [
@@ -434,8 +437,8 @@ class XmlDumpWriter {
                        return $title->getPrefixedText();
                }
 
-               global $wgContLang;
-               $prefix = $wgContLang->getFormattedNsText( $title->getNamespace() );
+               $prefix = MediaWikiServices::getInstance()->getContentLanguage()->
+                       getFormattedNsText( $title->getNamespace() );
 
                // @todo Emit some kind of warning to the user if $title->getNamespace() !==
                // NS_MAIN and $prefix === '' (viz. pages in an unregistered namespace)
index 422e1fb..5a77e89 100644 (file)
  */
 
 use MediaWiki\MediaWikiServices;
-use Wikimedia\Rdbms\LoadBalancer;
+use Wikimedia\Rdbms\ILoadBalancer;
 use Wikimedia\Rdbms\IDatabase;
 use Wikimedia\Rdbms\DBConnRef;
 use Wikimedia\Rdbms\MaintainableDBConnRef;
+use Wikimedia\Rdbms\DatabaseDomain;
 
 /**
  * DB accessible external objects.
@@ -112,7 +113,7 @@ class ExternalStoreDB extends ExternalStoreMedium {
         * Get a LoadBalancer for the specified cluster
         *
         * @param string $cluster Cluster name
-        * @return LoadBalancer
+        * @return ILoadBalancer
         */
        private function getLoadBalancer( $cluster ) {
                $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
@@ -128,8 +129,8 @@ class ExternalStoreDB extends ExternalStoreMedium {
        public function getSlave( $cluster ) {
                global $wgDefaultExternalStore;
 
-               $wiki = $this->params['wiki'] ?? false;
                $lb = $this->getLoadBalancer( $cluster );
+               $domainId = $this->getDomainId( $lb->getServerInfo( $lb->getWriterIndex() ) );
 
                if ( !in_array( "DB://" . $cluster, (array)$wgDefaultExternalStore ) ) {
                        wfDebug( "read only external store\n" );
@@ -138,7 +139,7 @@ class ExternalStoreDB extends ExternalStoreMedium {
                        wfDebug( "writable external store\n" );
                }
 
-               $db = $lb->getConnectionRef( DB_REPLICA, [], $wiki );
+               $db = $lb->getConnectionRef( DB_REPLICA, [], $domainId );
                $db->clearFlag( DBO_TRX ); // sanity
 
                return $db;
@@ -151,15 +152,38 @@ class ExternalStoreDB extends ExternalStoreMedium {
         * @return MaintainableDBConnRef
         */
        public function getMaster( $cluster ) {
-               $wiki = $this->params['wiki'] ?? false;
                $lb = $this->getLoadBalancer( $cluster );
+               $domainId = $this->getDomainId( $lb->getServerInfo( $lb->getWriterIndex() ) );
 
-               $db = $lb->getMaintenanceConnectionRef( DB_MASTER, [], $wiki );
+               $db = $lb->getMaintenanceConnectionRef( DB_MASTER, [], $domainId );
                $db->clearFlag( DBO_TRX ); // sanity
 
                return $db;
        }
 
+       /**
+        * @param array $server Master DB server configuration array for LoadBalancer
+        * @return string|bool Database domain ID or false
+        */
+       private function getDomainId( array $server ) {
+               if ( isset( $server['dbname'] ) ) {
+                       // T200471: for b/c, treat any "dbname" field as forcing which database to use.
+                       // MediaWiki/LoadBalancer previously did not enforce any concept of a local DB
+                       // domain, but rather assumed that the LB server configuration matched $wgDBname.
+                       // This check is useful when the external storage DB for this cluster does not use
+                       // the same name as the corresponding "main" DB(s) for wikis.
+                       $domain = new DatabaseDomain(
+                               $server['dbname'],
+                               $server['schema'] ?? null,
+                               $server['tablePrefix'] ?? ''
+                       );
+
+                       return $domain->getId();
+               }
+
+               return $this->params['wiki'] ?? false; // local domain unless explictly given
+       }
+
        /**
         * Get the 'blobs' table name for this database
         *
index 3d9a904..858e124 100644 (file)
@@ -7,6 +7,8 @@
  * @details
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Base code for file repositories.
  *
@@ -638,11 +640,10 @@ class FileRepo {
         * @return string
         */
        public function getNameFromTitle( Title $title ) {
-               global $wgContLang;
                if ( $this->initialCapital != MWNamespace::isCapitalized( NS_FILE ) ) {
                        $name = $title->getUserCaseDBKey();
                        if ( $this->initialCapital ) {
-                               $name = $wgContLang->ucfirst( $name );
+                               $name = MediaWikiServices::getInstance()->getContentLanguage()->ucfirst( $name );
                        }
                } else {
                        $name = $title->getDBkey();
@@ -1350,7 +1351,7 @@ class FileRepo {
        }
 
        /**
-        * Checks existence of a file
+        * Checks existence of a file
         *
         * @param string $file Virtual URL (or storage path) of file to check
         * @return bool
index 9a6ef22..789ed4c 100644 (file)
@@ -278,7 +278,6 @@ class LocalRepo extends FileRepo {
                $applyMatchingFiles = function ( ResultWrapper $res, &$searchSet, &$finalFiles )
                        use ( $fileMatchesSearch, $flags )
                {
-                       global $wgContLang;
                        $info = $this->getInfo();
                        foreach ( $res as $row ) {
                                $file = $this->newFileFromRow( $row );
@@ -287,7 +286,8 @@ class LocalRepo extends FileRepo {
                                $dbKeysLook = [ strtr( $file->getName(), ' ', '_' ) ];
                                if ( !empty( $info['initialCapital'] ) ) {
                                        // Search keys for "hi.png" and "Hi.png" should use the "Hi.png file"
-                                       $dbKeysLook[] = $wgContLang->lcfirst( $file->getName() );
+                                       $dbKeysLook[] = MediaWikiServices::getInstance()->getContentLanguage()->
+                                               lcfirst( $file->getName() );
                                }
                                foreach ( $dbKeysLook as $dbKey ) {
                                        if ( isset( $searchSet[$dbKey] )
index 370ebb4..5a0cf6a 100644 (file)
@@ -2051,17 +2051,17 @@ abstract class File implements IDBAccessObject {
        /**
         * Get the HTML text of the description page, if available
         *
-        * @param bool|Language $lang Optional language to fetch description in
+        * @param Language|null $lang Optional language to fetch description in
         * @return string|false
         */
-       function getDescriptionText( $lang = false ) {
+       function getDescriptionText( Language $lang = null ) {
                global $wgLang;
 
                if ( !$this->repo || !$this->repo->fetchDescription ) {
                        return false;
                }
 
-               $lang = $lang ?: $wgLang;
+               $lang = $lang ?? $wgLang;
 
                $renderUrl = $this->repo->getDescriptionRenderUrl( $this->getName(), $lang->getCode() );
                if ( $renderUrl ) {
index 0e48195..2ed4853 100644 (file)
@@ -355,9 +355,8 @@ class ForeignAPIFile extends File {
        }
 
        function purgeDescriptionPage() {
-               global $wgContLang;
-
-               $url = $this->repo->getDescriptionRenderUrl( $this->getName(), $wgContLang->getCode() );
+               $url = $this->repo->getDescriptionRenderUrl(
+                       $this->getName(), MediaWikiServices::getInstance()->getContentLanguage()->getCode() );
                $key = $this->repo->getLocalCacheKey( 'RemoteFileDescription', 'url', md5( $url ) );
 
                MediaWikiServices::getInstance()->getMainWANObjectCache()->delete( $key );
index 7a982bd..ee4df1d 100644 (file)
@@ -126,14 +126,14 @@ class ForeignDBFile extends LocalFile {
         * @param Language|null $lang Optional language to fetch description in.
         * @return string|false
         */
-       function getDescriptionText( $lang = null ) {
+       function getDescriptionText( Language $lang = null ) {
                global $wgLang;
 
                if ( !$this->repo->fetchDescription ) {
                        return false;
                }
 
-               $lang = $lang ?: $wgLang;
+               $lang = $lang ?? $wgLang;
                $renderUrl = $this->repo->getDescriptionRenderUrl( $this->getName(), $lang->getCode() );
                if ( !$renderUrl ) {
                        return false;
index 742d78d..7920e9c 100644 (file)
@@ -2115,7 +2115,7 @@ class LocalFile extends File {
         * @param Language|null $lang What language to get description in (Optional)
         * @return string|false
         */
-       function getDescriptionText( $lang = null ) {
+       function getDescriptionText( Language $lang = null ) {
                $revision = Revision::newFromTitle( $this->title, false, Revision::READ_NORMAL );
                if ( !$revision ) {
                        return false;
@@ -3146,7 +3146,7 @@ class LocalFileRestoreBatch {
 
        /**
         * Cleanup a failed batch. The batch was only partially successful, so
-        * rollback by removing all items that were succesfully copied.
+        * rollback by removing all items that were successfully copied.
         *
         * @param Status $storeStatus
         * @param array[] $storeBatch
index 09e40a2..6e8c8c9 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Image gallery
  *
@@ -99,7 +101,6 @@ abstract class ImageGalleryBase extends ContextSource {
         * @throws MWException
         */
        static function factory( $mode = false, IContextSource $context = null ) {
-               global $wgContLang;
                self::loadModes();
                if ( !$context ) {
                        $context = RequestContext::getMainAndWarn( __METHOD__ );
@@ -109,7 +110,7 @@ abstract class ImageGalleryBase extends ContextSource {
                        $mode = $galleryOptions['mode'];
                }
 
-               $mode = $wgContLang->lc( $mode );
+               $mode = MediaWikiServices::getInstance()->getContentLanguage()->lc( $mode );
 
                if ( isset( self::$modeMapping[$mode] ) ) {
                        $class = self::$modeMapping[$mode];
index 479ca5d..5ede631 100644 (file)
@@ -170,8 +170,8 @@ class TraditionalImageGallery extends ImageGalleryBase {
                        }
 
                        // @todo Code is incomplete.
-                       // $linkTarget = Title::newFromText( $wgContLang->getNsText( MWNamespace::getUser() ) .
-                       // ":{$ut}" );
+                       // $linkTarget = Title::newFromText( MediaWikiServices::getInstance()->
+                       // getContentLanguage()->getNsText( MWNamespace::getUser() ) . ":{$ut}" );
                        // $ul = Linker::link( $linkTarget, $ut );
 
                        $meta = [];
index d44fc60..a68ab62 100644 (file)
@@ -2,7 +2,7 @@
 
 interface HTMLNestedFilterable {
        /**
-        * Support for seperating multi-option preferences into multiple preferences
+        * Support for separating multi-option preferences into multiple preferences
         * Due to lack of array support.
         *
         * @param array $data
index 7f7f718..84719a7 100644 (file)
@@ -34,6 +34,11 @@ class HTMLButtonField extends HTMLFormField {
 
        public function __construct( $info ) {
                $info['nodata'] = true;
+
+               $this->setShowEmptyLabel( false );
+
+               parent::__construct( $info );
+
                if ( isset( $info['flags'] ) ) {
                        $this->mFlags = $info['flags'];
                }
@@ -55,10 +60,6 @@ class HTMLButtonField extends HTMLFormField {
                } elseif ( isset( $info['buttonlabel-raw'] ) ) {
                        $this->buttonLabel = $info['buttonlabel-raw'];
                }
-
-               $this->setShowEmptyLabel( false );
-
-               parent::__construct( $info );
        }
 
        public function getInputHTML( $value ) {
index 0ad41d4..93d09e7 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
 use MediaWiki\Widget\TitleInputWidget;
 
 /**
@@ -56,8 +57,8 @@ class HTMLTitleTextField extends HTMLTextField {
                                $title = Title::newFromTextThrow( $value );
                        } else {
                                // Can't use Title::makeTitleSafe(), because it doesn't throw useful exceptions
-                               global $wgContLang;
-                               $namespaceName = $wgContLang->getNsText( $this->mParams['namespace'] );
+                               $namespaceName = MediaWikiServices::getInstance()->getContentLanguage()->
+                                       getNsText( $this->mParams['namespace'] );
                                $title = Title::newFromTextThrow( $namespaceName . ':' . $value );
                        }
                } catch ( MalformedTitleException $e ) {
index e5dacd7..00a7b52 100644 (file)
@@ -24,6 +24,8 @@
  * @ingroup SpecialPage
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * XML file reader for the page data importer.
  *
@@ -286,11 +288,10 @@ class WikiImporter {
                                $status->fatal( 'import-rootpage-invalid' );
                        } else {
                                if ( !MWNamespace::hasSubpages( $title->getNamespace() ) ) {
-                                       global $wgContLang;
-
                                        $displayNSText = $title->getNamespace() == NS_MAIN
                                                ? wfMessage( 'blanknamespace' )->text()
-                                               : $wgContLang->getNsText( $title->getNamespace() );
+                                               : MediaWikiServices::getInstance()->getContentLanguage()->
+                                                       getNsText( $title->getNamespace() );
                                        $status->fatal( 'import-rootpage-nosubpage', $displayNSText );
                                } else {
                                        // set namespace to 'all', so the namespace check in processTitle() can pass
index 4f531da..aee51e7 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Deployment
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Class for the core installer command line interface.
  *
@@ -69,9 +71,9 @@ class CliInstaller extends Installer {
                if ( isset( $option['lang'] ) ) {
                        global $wgLang, $wgLanguageCode;
                        $this->setVar( '_UserLang', $option['lang'] );
-                       $wgContLang = Language::factory( $option['lang'] );
-                       $wgLang = Language::factory( $option['lang'] );
                        $wgLanguageCode = $option['lang'];
+                       $wgContLang = MediaWikiServices::getInstance()->getContentLanguage();
+                       $wgLang = Language::factory( $option['lang'] );
                        RequestContext::getMain()->setLanguage( $wgLang );
                }
 
index 99d6b35..ac0a520 100644 (file)
@@ -756,8 +756,9 @@ class MysqlUpdater extends DatabaseUpdater {
                        'Converting links and brokenlinks tables to pagelinks'
                );
 
-               global $wgContLang;
-               foreach ( $wgContLang->getNamespaces() as $ns => $name ) {
+               foreach (
+                       MediaWikiServices::getInstance()->getContentLanguage()->getNamespaces() as $ns => $name
+               ) {
                        if ( $ns == 0 ) {
                                continue;
                        }
index 6f16872..aa95438 100644 (file)
@@ -230,6 +230,7 @@ class SqliteInstaller extends DatabaseInstaller {
                $status = Status::newGood();
                $status->merge( $this->makeStubDBFile( $dir, $db ) );
                $status->merge( $this->makeStubDBFile( $dir, "wikicache" ) );
+               $status->merge( $this->makeStubDBFile( $dir, "{$db}_l10n_cache" ) );
                if ( !$status->isOK() ) {
                        return $status;
                }
@@ -242,7 +243,8 @@ class SqliteInstaller extends DatabaseInstaller {
 
                # Create the global cache DB
                try {
-                       $conn = Database::factory( 'sqlite', [ 'dbname' => 'wikicache', 'dbDirectory' => $dir ] );
+                       $conn = Database::factory(
+                               'sqlite', [ 'dbname' => 'wikicache', 'dbDirectory' => $dir ] );
                        # @todo: don't duplicate objectcache definition, though it's very simple
                        $sql =
 <<<EOT
@@ -260,6 +262,27 @@ EOT;
                        return Status::newFatal( 'config-sqlite-connection-error', $e->getMessage() );
                }
 
+               # Create the l10n cache DB
+               try {
+                       $conn = Database::factory(
+                               'sqlite', [ 'dbname' => "{$db}_l10n_cache", 'dbDirectory' => $dir ] );
+                       # @todo: don't duplicate l10n_cache definition, though it's very simple
+                       $sql =
+<<<EOT
+       CREATE TABLE l10n_cache (
+               lc_lang BLOB NOT NULL,
+               lc_key TEXT NOT NULL,
+               lc_value BLOB NOT NULL,
+               PRIMARY KEY (lc_lang, lc_key)
+       );
+EOT;
+                       $conn->query( $sql );
+                       $conn->query( "PRAGMA journal_mode=WAL" ); // this is permanent
+                       $conn->close();
+               } catch ( DBConnectionError $e ) {
+                       return Status::newFatal( 'config-sqlite-connection-error', $e->getMessage() );
+               }
+
                # Open the main DB
                return $this->getConnection();
        }
@@ -330,6 +353,13 @@ EOT;
                'dbDirectory' => \$wgSQLiteDataDir,
                'flags' => 0
        ]
+];
+\$wgLocalisationCacheConf['storeServer'] = [
+       'type' => 'sqlite',
+       'dbname' => \"{\$wgDBname}_l10n_cache\",
+       'tablePrefix' => '',
+       'dbDirectory' => \$wgSQLiteDataDir,
+       'flags' => 0
 ];";
        }
 }
index 739d9f2..d8281b0 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Deployment
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Class for the core installer web interface.
  *
@@ -500,14 +502,14 @@ class WebInstaller extends Installer {
 
                if ( $this->getSession( 'test' ) === null && !$this->request->wasPosted() ) {
                        $wgLanguageCode = $this->getAcceptLanguage();
-                       $wgLang = $wgContLang = Language::factory( $wgLanguageCode );
+                       $wgLang = Language::factory( $wgLanguageCode );
                        RequestContext::getMain()->setLanguage( $wgLang );
                        $this->setVar( 'wgLanguageCode', $wgLanguageCode );
                        $this->setVar( '_UserLang', $wgLanguageCode );
                } else {
                        $wgLanguageCode = $this->getVar( 'wgLanguageCode' );
-                       $wgContLang = Language::factory( $wgLanguageCode );
                }
+               $wgContLang = MediaWikiServices::getInstance()->getContentLanguage();
        }
 
        /**
index 09fc0f3..8314fd2 100644 (file)
@@ -19,6 +19,8 @@
  * @ingroup Deployment
  */
 
+use MediaWiki\MediaWikiServices;
+
 class WebInstallerName extends WebInstallerPage {
 
        /**
@@ -186,8 +188,7 @@ class WebInstallerName extends WebInstallerPage {
                }
 
                // Make sure it won't conflict with any existing namespaces
-               global $wgContLang;
-               $nsIndex = $wgContLang->getNsIndex( $name );
+               $nsIndex = MediaWikiServices::getInstance()->getContentLanguage()->getNsIndex( $name );
                if ( $nsIndex !== false && $nsIndex !== NS_PROJECT ) {
                        $this->parent->showError( 'config-ns-conflict', $name );
                        $retVal = false;
index e0afeff..73929dd 100644 (file)
        "config-sqlite-dir-help": "SQLite almacena tolos datos nun ficheru únicu.\n\nEl direutoriu que proporciones tien de poder escribise pol servidor web mientres la instalación.\n\n<strong>Nun</strong> tendría de tener accesu pela web, por eso nun se pon nel sitiu onde tán los ficheros PHP.\n\nL'instalador escribirá un ficheru <code>.htaccess</code> xunto con él, pero si esto falla dalguién podría tener accesu a la base de datos completa.\nEso incluye los datos d'usuariu completos (direcciones de corréu electrónicu, contraseñes con hash) lo mesmo que les revisiones desaniciaes y otros datos acutaos de la wiki.\n\nConsidera poner la base de datos en dalgún otru sitiu, por casu en <code>/var/lib/mediawiki/miowiki</code>.",
        "config-oracle-def-ts": "Espaciu de tables predetermináu:",
        "config-oracle-temp-ts": "Espaciu de tables temporal:",
-       "config-type-mysql": "MySQL (o compatible)",
+       "config-type-mysql": "MariaDB, MySQL o compatible",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki ye compatible colos siguientes sistemes de bases de datos:\n\n$1\n\nSi nun atopes na llista el sistema de base de datos que tas intentando utilizar, sigue les instrucciones enllazaes enriba p'activar la compatibilidá.",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] ye un sistema comercial de base de datos empresariales pa Windows. ([https://secure.php.net/manual/en/sqlsrv.installation.php Cómo compilar PHP con compatibilidá pa SQLSRV])",
-       "config-header-mysql": "Configuración de MySQL",
+       "config-header-mysql": "Configuración de MariaDB/MySQL",
        "config-header-postgres": "Configuración de PostgreSQL",
        "config-header-sqlite": "Configuración de SQLite",
        "config-header-oracle": "Configuración d'Oracle",
        "config-db-web-create": "Crear la cuenta si nun esiste yá",
        "config-db-web-no-create-privs": "La cuenta qu'especificasti pa la instalación nun tien permisos abondo pa crear una cuenta.\nLa cuenta qu'especifiques equí yá tien d'esistir.",
        "config-mysql-engine": "Motor d'almacenamientu:",
-       "config-mysql-innodb": "InnoDB",
+       "config-mysql-innodb": "InnoDB (recomendao)",
        "config-mysql-myisam": "MyISAM",
        "config-mssql-auth": "Triba d'autenticación:",
+       "config-mssql-sqlauth": "Autenticación de SQL Server",
+       "config-mssql-windowsauth": "Autenticación de Windows",
        "config-site-name": "Nome de la wiki:",
        "config-site-name-help": "Esto apaecerá na barra de títulos del navegador y en dellos sitios más.",
        "config-site-name-blank": "Escriba un nome pal sitiu.",
        "config-ns-site-name": "Igual que'l nome de la wiki: $1",
        "config-ns-other": "Otru (especificar)",
        "config-ns-other-default": "MioWiki",
+       "config-admin-box": "Cuenta d'alministrador",
        "config-admin-name": "El to nome d'usuariu:",
        "config-admin-password": "Contraseña:",
+       "config-admin-password-confirm": "Repiti la contraseña:",
+       "config-admin-help": "Escribe equí'l nome d'usuariu que desees, como por casu \"Nel Bloggs\".\nEsti ye'l nome que vas usar pa entrar na wiki.",
+       "config-admin-name-blank": "Escribe'l nome d'usuariu d'un alministrador.",
        "config-optional-skip": "Yá toi aburríu, namái instala la wiki.",
+       "config-profile-wiki": "Wiki públicu",
+       "config-profile-no-anon": "Ríquese crear una cuenta",
+       "config-profile-fishbowl": "Solo editores autorizaos",
        "config-profile-private": "Wiki privada",
        "config-license": "Derechos d'autor y llicencia:",
        "config-license-none": "Ensin pie de llicencia",
        "config-install-database": "Configurando la base de datos",
        "config-install-schema": "Creando l'esquema",
        "config-install-pg-schema-not-exist": "L'esquema PostgreSQL nun esiste.",
+       "config-install-user": "Creando l'usuariu de la base de datos",
+       "config-install-user-alreadyexists": "L'usuariu «$1» yá esiste.",
+       "config-install-user-create-failed": "Falló la creación del usuariu «$1»: $2",
+       "config-install-user-grant-failed": "Falló la concesión de permisos al usuariu «$1»: $2",
+       "config-install-user-missing": "L'usuariu especificáu «$1» nun esiste.",
+       "config-install-tables": "Creando tables",
+       "config-install-tables-exist": "<strong>Avisu</strong>: Paez que les tables de MediaWiki yá esisten.\nSaltándo la so creación.",
+       "config-install-tables-failed": "<strong>Error:</strong> La creación de tables falló col error siguiente: $1",
+       "config-install-interwiki": "Enllenando la tabla d'interwiki predeterminada",
+       "config-install-interwiki-list": "Nun pudo lleese'l ficheru <code>interwiki.list</code>.",
        "config-download-localsettings": "Descargar <code>LocalSettings.php</code>",
        "config-help": "Ayuda",
        "config-nofile": "Nun pudo atopase'l ficheru \"$1\". ¿Desaniciose?",
index 6ee9263..b612a8b 100644 (file)
@@ -9,7 +9,7 @@
                        "Macofe"
                ]
        },
-       "config-desc": "Poellad staliañ MediaWIki",
+       "config-desc": "Poellad staliañ MediaWiki",
        "config-title": "Staliadur MediaWiki $1",
        "config-information": "Titouroù",
        "config-localsettings-upgrade": "Kavet ez eus bet ur restr <code>LocalSettings.php</code>.\nEvit hizivaat ar staliadur-se, merkit an talvoud <code>$wgUpgradeKey</code> er voest dindan.\nE gavout a rit e <code>LocalSettings.php</code>.",
index a1f7248..c7f9b27 100644 (file)
@@ -98,7 +98,7 @@
        "config-sqlite-dir": "Directori de dades de l'SQLite",
        "config-oracle-def-ts": "Espai de taules per defecte:",
        "config-oracle-temp-ts": "Espai de taules temporal:",
-       "config-type-mysql": "MySQL (o compatible)",
+       "config-type-mysql": "MariaDB, MySQL o compatible",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki és compatible amb els següents sistemes de bases de dades:\n$1\nSi el sistema de bases de dades que intenteu utilitzar no apareix a la llista, seguiu les instruccions enllaçades més amunt per habilitar el suport.",
        "config-header-mysql": "Paràmetres de MySQL",
index 2afd2ca..94abdba 100644 (file)
@@ -7,7 +7,8 @@
                        "Thomsen",
                        "MGA73",
                        "Mads Haupt",
-                       "Joedalton"
+                       "Joedalton",
+                       "Saederup92"
                ]
        },
        "config-desc": "Installationsprogrammet til MediaWiki",
@@ -53,7 +54,7 @@
        "config-db-install-username": "Indtast brugernavnet som vil blive brugt til at forbinde til databasen under installationsprocessen.\nDette er ikke brugernavnet for MediaWiki-kontoen; det er brugernavnet på din database.",
        "config-mysql-old": "MySQL $1 eller nyere kræves. Du har $2.",
        "config-type-mssql": "Microsoft SQL-server",
-       "config-header-mysql": "MySQL-indstillinger",
+       "config-header-mysql": "MariaDB/MySQL-indstillinger",
        "config-header-postgres": "PostgreSQL-indstillinger",
        "config-header-sqlite": "SQLite-indstillinger",
        "config-header-oracle": "Oracle-indstillinger",
@@ -78,6 +79,6 @@
        "config-upload-deleted": "Mappe for slettede filer:",
        "config-help": "hjælp",
        "config-help-tooltip": "klik for at udvide",
-       "mainpagetext": "'''MediaWiki er nu installeret.'''",
+       "mainpagetext": "<strong>MediaWiki er nu installeret.</strong>",
        "mainpagedocfooter": "Se [https://meta.wikimedia.org/wiki/Help:Contents brugervejledningen] for oplysninger om brugen af wikiprogrammellet.\n\n== At komme i gang ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Listen over opsætningsmuligheder]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki ofte stillede spørgsmål]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Postliste angående udgivelser af MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Oversæt MediaWiki til dit sprog]"
 }
index fe382ac..b526d5a 100644 (file)
@@ -4,7 +4,8 @@
                        "McDutchie",
                        "아라",
                        "Macofe",
-                       "Fanjiayi"
+                       "Fanjiayi",
+                       "Fitoschido"
                ]
        },
        "config-desc": "Le installator de MediaWiki",
        "config-sqlite-dir-help": "SQLite immagazina tote le datos in un sol file.\n\nLe directorio que tu forni debe permitter le accesso de scriptura al servitor web durante le installation.\n\nIllo '''non''' debe esser accessibile via web. Pro isto, nos non lo pone ubi tu files PHP es.\n\nLe installator scribera un file <code>.htaccess</code> insimul a illo, ma si isto falli, alcuno pote ganiar accesso directe a tu base de datos.\nIsto include le crude datos de usator (adresses de e-mail, contrasignos codificate) assi como versiones delite e altere datos restringite super le wiki.\n\nConsidera poner le base de datos in un loco completemente differente, per exemplo in <code>/var/lib/mediawiki/yourwiki</code>.",
        "config-oracle-def-ts": "Spatio de tabellas predefinite:",
        "config-oracle-temp-ts": "Spatio de tabellas temporari:",
-       "config-type-mysql": "MySQL (o compatibile)",
+       "config-type-mysql": "MariaDB, MySQL o compatibile",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki supporta le sequente systemas de base de datos:\n\n$1\n\nSi tu non vide hic infra le systema de base de datos que tu tenta usar, alora seque le instructiones ligate hic supra pro activar le supporto.",
-       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] es le systema primari pro MediaWiki e le melio supportate. MediaWiki functiona anque con [{{int:version-db-mariadb-url}} MariaDB] e con [{{int:version-db-percona-url}} Percona Server], le quales es compatibile con MySQL. ([https://secure.php.net/manual/en/mysqli.installation.php Como compilar PHP con supporto de MySQL])",
+       "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] es le systema primari pro MediaWiki e le melio supportate. MediaWiki functiona anque con [{{int:version-db-mysql-url}} MySQL] e con [{{int:version-db-percona-url}} Percona Server], le quales es compatibile con MariaDB. ([https://secure.php.net/manual/en/mysqli.installation.php Como compilar PHP con supporto de MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] es un systema de base de datos popular e open source, alternativa a MySQL. ([https://secure.php.net/manual/en/pgsql.installation.php Como compilar PHP con supporto de PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] es un systema de base de datos legier que es multo ben supportate. ([https://secure.php.net/manual/en/pdo.installation.php Como compilar PHP con supporto de SQLite], usa PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] es un banca de datos commercial pro interprisas. ([https://secure.php.net/manual/en/oci8.installation.php Como compilar PHP con supporto de OCI8])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] es un base de datos de interprisa commercial pro Windows. ([https://secure.php.net/manual/en/sqlsrv.installation.php Como compilar PHP con supporto de SQLSRV])",
-       "config-header-mysql": "Configuration de MySQL",
+       "config-header-mysql": "Configuration de MariaDB/MySQL",
        "config-header-postgres": "Configuration de PostgreSQL",
        "config-header-sqlite": "Configuration de SQLite",
        "config-header-oracle": "Configuration de Oracle",
index 0346dc7..3ad6073 100644 (file)
        "config-sqlite-dir-help": "SQLite は単一のファイル内にすべてのデータを格納しています。\n\n指定したディレクトリは、インストール時にウェブ サーバーが書き込めるようにしておく必要があります。\n\nこのディレクトリはウェブからアクセス<strong>不可能</strong>である必要があります。PHP ファイルがある場所には配置できないのはこのためです。\n\nインストーラーは <code>.htaccess</code> ファイルにも書き込みます。しかし、これが失敗した場合は、誰かが生のデータベースにアクセスできてしまいます。\nデータベースは、生のデータ (メールアドレス、パスワードのハッシュ値) の他、削除された版、その他ウィキ上の制限されているデータを含んでいます。\n\n例えば <code>/var/lib/mediawiki/yourwiki</code> のように、別の場所にデータベースを配置することを検討してください。",
        "config-oracle-def-ts": "既定のテーブル領域:",
        "config-oracle-temp-ts": "一時的なテーブル領域:",
-       "config-type-mysql": "MySQL(または互換製品)",
+       "config-type-mysql": "MariaDB、MySQLまたは互換製品",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "マイクロソフト SQL Server",
        "config-support-info": "MediaWiki は以下のデータベース システムに対応しています:\n\n$1\n\n使用しようとしているデータベース システムが下記の一覧にない場合は、上記リンク先の手順に従ってインストールしてください。",
-       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL]はMediaWikiの主要な対象であり、最もよくサポートされています。MediaWikiはMySQLと互換性のある[{{int:version-db-mariadb-url}} MariaDB]、[{{int:version-db-percona-url}} Percona Server]でも動きます。 ([https://secure.php.net/manual/ja/mysqli.installation.php PHPをMySQLサポート付きでコンパイルする方法])",
+       "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB]はMediaWikiの主要な対象であり、最もよくサポートされています。MediaWikiはMariaDBと互換性のある[{{int:version-db-mysql-url}} MySQL]、[{{int:version-db-percona-url}} Percona Server]でも動きます。 ([https://secure.php.net/manual/ja/mysqli.installation.php PHPをMySQLサポート付きでコンパイルする方法])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] は、MySQLの代替として人気がある公開のデータベースシステムです。([https://secure.php.net/manual/en/pgsql.installation.php PHPをPostgreSQLサポート付きでコンパイルする方法])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]は、良くサポートされている、軽量データベースシステムです。([https://secure.php.net/manual/ja/pdo.installation.php SQLiteに対応したPHPをコンパイルする方法]、PDOを使用)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle]は商業企業のデータベースです。([https://secure.php.net/manual/en/oci8.installation.php OCI8サポートなPHPをコンパイルする方法])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server]は商業企業のWindows用データベースです。([https://secure.php.net/manual/en/sqlsrv.installation.php SQLSRVサポートなPHPをコンパイルする方法])",
-       "config-header-mysql": "MySQL の設定",
+       "config-header-mysql": "MariaDB/MySQL の設定",
        "config-header-postgres": "PostgreSQL の設定",
        "config-header-sqlite": "SQLite の設定",
        "config-header-oracle": "Oracle の設定",
        "config-db-web-create": "アカウントが存在しない場合は作成する",
        "config-db-web-no-create-privs": "あなたがインストールのために定義したアカウントは、アカウント作成のための特権としては不充分です。\nあなたがここで指定したアカウントは既に存在している必要があります。",
        "config-mysql-engine": "ストレージ エンジン:",
-       "config-mysql-innodb": "InnoDB",
+       "config-mysql-innodb": "InnoDB(推奨)",
        "config-mysql-myisam": "MyISAM",
        "config-mysql-myisam-dep": "<strong>警告:</strong> MySQLのストレージエンジンとして MyISAM を選択していますが、これをMediaWikiで利用するのは推奨されていません。その理由は: \n* テーブルロックによる並列性をほとんどサポートしていない\n* 他のエンジンに比べて壊れやすい\n* MediaWiki のコードベースは必ずしも MyISAM を本来あるべきほどには扱っていない\n\nあなたがインストールした MySQL が InnoDB をサポートしている場合、代わりにそちらをお使いになることを強くお勧めします。\nあなたがインストールした MySQL が InnoDB をサポートしていない場合、アップグレードした方がいいでしょう。",
        "config-mysql-only-myisam-dep": "<strong>警告:</strong> MyISAM がこのマシンの MySQL の唯一のストレージエンジンですが、これをMediaWikiで利用するのは推奨されていません。その理由は: \n* テーブルロックによる並列性をほとんどサポートしていない\n* 他のエンジンに比べて壊れやすい\n* MediaWiki のコードベースは必ずしも MyISAM を本来あるべきほどには扱っていない\n\nあなたがインストールした MySQL が InnoDB をサポートしていない場合、アップグレードした方がいいでしょう。",
index 6ba2375..e391609 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "C.R.",
                        "Chelin",
-                       "Macofe"
+                       "Macofe",
+                       "Fitoschido"
                ]
        },
        "config-desc": "'O prugramma d'istallazione 'e MediaWiki",
        "config-sqlite-dir-help": "SQLite astipa tutte 'e date dint'a n'uneco file.\n\n'A cartella ca starraje a innecà adda essere scrivibbele d' 'o server webe pe' tramente ca sta l'istallazione.\n\nAvess'a essere <strong>nun trasibbele via web</strong>, è pecchesto ca nun se sta mettenno addò stanno 'e file PHP.\n\nL'installatore scriverrà nzieme a chesta nu file <code>.htaccess</code>, ma si 'o tentativo scassasse, coccheruno putesse tenè acciesso dint' 'o database ncruro.\nChesto pure cunzidera 'e date ncruro 'e ll'utente (indirizze, password cifrate) accussì comme 'e verziune luvate e ati dati d'accesso limmetato dint' 'o wiki.\n\nCunzidera ll'opportunità 'e sistimà ô tiempo 'o database 'a n'ata parte, p'esempio int'a <code>/var/lib/mediawiki/tuowiki</code>.",
        "config-oracle-def-ts": "Tablespace 'e default:",
        "config-oracle-temp-ts": "Tablespace temporaneo:",
-       "config-type-mysql": "MySQL (o compatibbele)",
+       "config-type-mysql": "MariaDB, MySQL o compatibbele",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki supporta 'e sisteme 'e database ccà abbascio:\n\n$1\n\nSi nfra chiste ccà nun vedite 'o sistema 'e database ca vulite ausà, allora avite liegge 'e instruziune ccà ncoppa pe' ne dà supporto.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] è 'a configurazione cchiù mmeglio p' 'o MediaWiki e è chilla meglio suppurtata. MediaWiki può faticà pure cu' [{{int:version-db-mariadb-url}} MariaDB] e [{{int:version-db-percona-url}} Percona Server], ca fossero MySQL cumpatibbele. ([https://secure.php.net/manual/en/mysqli.installation.php Comme s'adda fà pe' cumpilà PHP cu suppuorto MySQL])",
index ca4bcc2..0459807 100644 (file)
@@ -21,7 +21,8 @@
                        "Mainframe98",
                        "Rcdeboer",
                        "Festina90",
-                       "MarcoSwart"
+                       "MarcoSwart",
+                       "Kippenvlees1"
                ]
        },
        "config-desc": "Het installatieprogramma voor MediaWiki",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki ondersteunt de volgende databasesystemen:\n\n$1\n\nAls u het databasesysteem dat u wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.",
-       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is de primaire database voor MediaWiki en wordt het best ondersteund. MediaWiki werkt ook met [{{int:version-db-mariadb-url}} MariaDB] en [{{int:version-db-percona-url}} Percona Server], die MySQL compatibel zijn ([https://secure.php.net/manual/en/mysqli.installation.php hoe PHP te compileren met MySQL-ondersteuning]).",
+       "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] is de primaire database voor MediaWiki en wordt het best ondersteund. MediaWiki werkt ook met [{{int:version-db-mysql-url}} MySQL] en [{{int:version-db-percona-url}} Percona Server], die MariaDB-compatibel zijn ([https://secure.php.net/manual/en/mysqli.installation.php hoe PHP te compileren met MySQL-ondersteuning]).",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is een populair open source databasesysteem als alternatief voor MySQL.([https://secure.php.net/manual/en/pgsql.installation.php Hoe u PHP kunt compileren met ondersteuning voor PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is een zeer goed ondersteund lichtgewicht databasesysteem ([https://secure.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor SQLite]; gebruikt PDO).",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] is een commerciële database voor grote bedrijven ([https://secure.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).",
index 62f2538..3bdc761 100644 (file)
@@ -70,9 +70,9 @@
        "config-mssql-old": "Потребан је Microsoft SQL Server $1 или новији. Ви имате $2.",
        "config-mysql-innodb": "InnoDB (препоручено)",
        "config-mysql-myisam": "MyISAM",
-       "config-mssql-auth": "Тип провере идентитета:",
-       "config-mssql-sqlauth": "Ð\9fÑ\80овеÑ\80а Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82а SQL Server-а",
-       "config-mssql-windowsauth": "Ð\9fÑ\80овеÑ\80а Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82а Ð\92индоÑ\83Ñ\81а",
+       "config-mssql-auth": "Тип потврде идентитета:",
+       "config-mssql-sqlauth": "Ð\90Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98а Ð·Ð° Ð¡Ð\9aÑ\83Ð\9b Ð¡ÐµÑ\80веÑ\80",
+       "config-mssql-windowsauth": "Ð\90Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98а Ð·Ð° Ð\92индоÑ\83Ñ\81",
        "config-site-name": "Име викија:",
        "config-site-name-blank": "Унесите име сајта.",
        "config-project-namespace": "Именски простор пројекта:",
@@ -81,7 +81,7 @@
        "config-ns-other": "Друго (наведите)",
        "config-ns-other-default": "MyWiki",
        "config-admin-box": "Налог администратора",
-       "config-admin-name": "Ð\92аÑ\88е Ðºорисничко име:",
+       "config-admin-name": "Ð\9aорисничко име:",
        "config-admin-password": "Лозинка:",
        "config-admin-password-confirm": "Поново унесите лозинку:",
        "config-admin-help": "Овде упишите жељено корисничко име; на пример, „Јован Крстић“.\nОво име ћете користити за пријаву на вики.",
        "config-skins-screenshots": "„$1” (снимци екрана: $2)",
        "config-skins-screenshot": "$1 ($2)",
        "config-screenshot": "снимак екрана",
-       "mainpagetext": "<strong>Медијавики је успешно инсталиран.</strong>",
+       "mainpagetext": "<strong>Медијавики је инсталиран.</strong>",
        "mainpagedocfooter": "Погледајте [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents кориснички водич] за коришћење програма.\n\n== Увод ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Помоћ у вези са подешавањима]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Често постављана питања]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописни списак о издањима Медијавикија]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Научите како да се борите против спама на својој вики]"
 }
index 9ebbc27..5565354 100644 (file)
        "config-page-upgradedoc": "Яңарту",
        "config-page-existingwiki": "Хәзерге вики",
        "config-restart": "Әйе, яңадан башларга",
+       "config-env-php": "PHP $1 куелды.",
+       "config-env-hhvm": "HHVM $1 куелды.",
        "config-apc": "[https://secure.php.net/apc APC] куелды",
        "config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache] куелды",
        "config-diff3-bad": "GNU diff3 табылмады.",
        "config-git": "Git юрамалар идарә итү системасы табылды: <code>$1</code>.",
+       "config-using-server": "«<nowiki>$1</nowiki>» сервер исеме файдаланыла.",
+       "config-using-uri": "«<nowiki>$1$2</nowiki>» URL исемле сервер файдаланыла.",
        "config-db-type": "Мәгълүмат базасы төре:",
        "config-db-host": "Мәгълүмат базасы хосты:",
        "config-db-host-oracle": "TNS мәгълүмат базасы:",
+       "config-db-wiki-settings": "Бу вики идентификациясе",
+       "config-db-name": "Мәгълүмат базасы исеме:",
        "config-db-name-oracle": "Мәгълүмат базасы төзелеше:",
        "config-db-username": "Мәгълүмат базасын кулланучы исеме:",
        "config-db-password": "Мәгълүмат базасының серсүзе:",
        "config-db-port": "Мәгълүмат базасы порты:",
        "config-db-schema": "MediaWiki өчен төзелеш:",
-       "config-mysql-innodb": "InnoDB",
+       "config-type-mysql": "MariaDB, MySQL яисә ярашлы",
+       "config-type-mssql": "Microsoft SQL Server",
+       "config-header-mysql": "MariaDB/MySQL көйләнмәләре",
+       "config-header-postgres": "PostgreSQL көйләнмәләре",
+       "config-header-sqlite": "SQLite көйләнмәләре",
+       "config-header-oracle": "Oracle көйләнмәләре",
+       "config-header-mssql": "Microsoft SQL Server көйләнмәләре",
+       "config-invalid-db-type": "Ялган бирелмәләр базасы төре",
+       "config-upgrade-done-no-regenerate": "Яңартү тәмамланды.\n\nХәзер сез [$1 вики] белән эшли аласыз.",
+       "config-regenerate": "LocalSettings.php яңадан төзү →",
+       "config-show-table-status": "«<code>SHOW TABLE STATUS</code>» таләбе эшләнмәде!",
+       "config-mysql-engine": "Саклау системасы:",
+       "config-mysql-innodb": "InnoDB (тәкъдим ителә)",
        "config-mysql-myisam": "MyISAM",
+       "config-mssql-auth": "Аутентификация төре:",
+       "config-mssql-sqlauth": "SQL Server чынлыгын раслау",
+       "config-mssql-windowsauth": "Windows чынлыгын раслау",
+       "config-site-name": "Вики исеме:",
+       "config-site-name-blank": "Сайт исемен языгыз.",
+       "config-project-namespace": "Проектның исемнәр киңлеге:",
        "config-ns-generic": "Проект",
+       "config-ns-site-name": "Вики исеме сыман: $1",
        "config-ns-other": "Башка (күрсәтегез)",
        "config-ns-other-default": "MyWiki",
+       "config-admin-box": "Иларәченең хисап язмасы",
+       "config-admin-name": "Кулланучы исемегез:",
        "config-admin-password": "Серсүз:",
        "config-admin-password-confirm": "Серсүзне кабатлагыз:",
        "config-admin-email": "Электрон почта адресы:",
        "config-logo": "Логотип URL:",
        "config-cc-again": "Кабат сайлагыз...",
        "config-advanced-settings": "Өстәмә көйләнмәләр",
+       "config-memcached-servers": "Memcached серверлары:",
        "config-extensions": "Киңәйтүләр",
        "config-skins": "Бизәлеш",
        "config-install-step-done": "әзер",
        "config-install-step-failed": "булмады",
+       "config-install-schema": "Схема төзү",
+       "config-install-tables": "Табын төзү",
+       "config-install-stats": "Инициализация статистикасы",
+       "config-download-localsettings": "<code>LocalSettings.php</code> йөкләү",
        "config-help": "ярдәм",
+       "config-help-tooltip": "ачу өчен басыгыз",
+       "config-skins-screenshots": "$1 (скриншотлар: $2)",
+       "config-extensions-requires": "$1 ($2 кирәк)",
+       "config-screenshot": "скриншот",
        "mainpagetext": "<strong>«MediaWiki» куелды.</strong>",
        "mainpagedocfooter": "Бу вики турында мәгълүматны [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/ru биредә] табып була.\n\n== Кайбер файдалы ресурслар ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Көйләнмәләр исемлеге (рус.)];\n* [https://www.mediawiki.org/wiki/Manual:FAQ/ru MediaWiki турында еш бирелгән сораулар һәм җаваплар (рус.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki сәхифәсенең яңа юрамалары турында хәбәрләр яздырып алу].\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources MediaWiki сәхифәсен туган телегезгә тәрҗемә итү]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Үзегезнең викида ничек спам белән көрәшү турында мәгълүмат]"
 }
index eada9d4..05cf933 100644 (file)
@@ -53,7 +53,7 @@ class ClassicInterwikiLookup implements InterwikiLookup {
        /**
         * @var Language
         */
-       private $contentLanguage;
+       private $contLang;
 
        /**
         * @var WANObjectCache
@@ -91,7 +91,7 @@ class ClassicInterwikiLookup implements InterwikiLookup {
        private $thisSite = null;
 
        /**
-        * @param Language $contentLanguage Language object used to convert prefixes to lower case
+        * @param Language $contLang Language object used to convert prefixes to lower case
         * @param WANObjectCache $objectCache Cache for interwiki info retrieved from the database
         * @param int $objectCacheExpiry Expiry time for $objectCache, in seconds
         * @param bool|array|string $cdbData The path of a CDB file, or
@@ -104,7 +104,7 @@ class ClassicInterwikiLookup implements InterwikiLookup {
         * @param string $fallbackSite The code to assume for the local site,
         */
        function __construct(
-               Language $contentLanguage,
+               Language $contLang,
                WANObjectCache $objectCache,
                $objectCacheExpiry,
                $cdbData,
@@ -113,7 +113,7 @@ class ClassicInterwikiLookup implements InterwikiLookup {
        ) {
                $this->localCache = new MapCacheLRU( 100 );
 
-               $this->contentLanguage = $contentLanguage;
+               $this->contLang = $contLang;
                $this->objectCache = $objectCache;
                $this->objectCacheExpiry = $objectCacheExpiry;
                $this->cdbData = $cdbData;
@@ -144,7 +144,7 @@ class ClassicInterwikiLookup implements InterwikiLookup {
                        return null;
                }
 
-               $prefix = $this->contentLanguage->lc( $prefix );
+               $prefix = $this->contLang->lc( $prefix );
                if ( $this->localCache->has( $prefix ) ) {
                        return $this->localCache->get( $prefix );
                }
index bc73718..689326e 100644 (file)
@@ -221,7 +221,7 @@ class JobQueueDB extends JobQueue {
                $rowSet = []; // (sha1 => job) map for jobs that are de-duplicated
                $rowList = []; // list of jobs for jobs that are not de-duplicated
                foreach ( $jobs as $job ) {
-                       $row = $this->insertFields( $job );
+                       $row = $this->insertFields( $job, $dbw );
                        if ( $job->ignoreDuplicates() ) {
                                $rowSet[$row['job_sha1']] = $row;
                        } else {
@@ -722,11 +722,10 @@ class JobQueueDB extends JobQueue {
 
        /**
         * @param IJobSpecification $job
+        * @param IDatabase $db
         * @return array
         */
-       protected function insertFields( IJobSpecification $job ) {
-               $dbw = $this->getMasterDB();
-
+       protected function insertFields( IJobSpecification $job, IDatabase $db ) {
                return [
                        // Fields that describe the nature of the job
                        'job_cmd' => $job->getType(),
@@ -734,7 +733,7 @@ class JobQueueDB extends JobQueue {
                        'job_title' => $job->getTitle()->getDBkey(),
                        'job_params' => self::makeBlob( $job->getParams() ),
                        // Additional job metadata
-                       'job_timestamp' => $dbw->timestamp(),
+                       'job_timestamp' => $db->timestamp(),
                        'job_sha1' => Wikimedia\base_convert(
                                sha1( serialize( $job->getDeduplicationInfo() ) ),
                                16, 36, 31
index cf3155d..49eabbb 100644 (file)
@@ -43,29 +43,18 @@ class ThumbnailRenderJob extends Job {
                        if ( $wgUploadThumbnailRenderMethod === 'jobqueue' ) {
                                $thumb = $file->transform( $transformParams, File::RENDER_NOW );
 
-                               if ( $thumb && !$thumb->isError() ) {
-                                       return true;
-                               } else {
-                                       $this->setLastError( __METHOD__ . ': thumbnail couln\'t be generated' );
+                               if ( !$thumb || $thumb->isError() ) {
+                                       if ( $thumb instanceof MediaTransformError ) {
+                                               $this->setLastError( __METHOD__ . ': thumbnail couln\'t be generated:' .
+                                                       $thumb->toText() );
+                                       } else {
+                                               $this->setLastError( __METHOD__ . ': thumbnail couln\'t be generated' );
+                                       }
                                        return false;
                                }
+                               return true;
                        } elseif ( $wgUploadThumbnailRenderMethod === 'http' ) {
-                               $thumbUrl = '';
-                               $status = $this->hitThumbUrl( $file, $transformParams, $thumbUrl );
-
-                               wfDebug( __METHOD__ . ": received status {$status}\n" );
-
-                               // 400 happens when requesting a size greater or equal than the original
-                               if ( $status === 200 || $status === 301 || $status === 302 || $status === 400 ) {
-                                       return true;
-                               } elseif ( $status ) {
-                                       $this->setLastError( __METHOD__ . ': incorrect HTTP status ' .
-                                               $status . ' when hitting ' . $thumbUrl );
-                                       return false;
-                               } else {
-                                       $this->setLastError( __METHOD__ . ': HTTP request failure' );
-                                       return false;
-                               }
+                               return $this->hitThumbUrl( $file, $transformParams );
                        } else {
                                $this->setLastError( __METHOD__ . ': unknown thumbnail render method ' .
                                        $wgUploadThumbnailRenderMethod );
@@ -77,16 +66,35 @@ class ThumbnailRenderJob extends Job {
                }
        }
 
-       protected function hitThumbUrl( LocalFile $file, $transformParams, &$thumbUrl ) {
+       /**
+        * @param LocalFile $file
+        * @param array $transformParams
+        * @return bool Success status (error will be set via setLastError() when false)
+        */
+       protected function hitThumbUrl( LocalFile $file, $transformParams ) {
                global $wgUploadThumbnailRenderHttpCustomHost, $wgUploadThumbnailRenderHttpCustomDomain;
 
+               $handler = $file->getHandler();
+               if ( !$handler ) {
+                       $this->setLastError( __METHOD__ . ': could not get handler' );
+                       return false;
+               } elseif ( !$handler->normaliseParams( $file, $transformParams ) ) {
+                       $this->setLastError( __METHOD__ . ': failed to normalize' );
+                       return false;
+               }
                $thumbName = $file->thumbName( $transformParams );
                $thumbUrl = $file->getThumbUrl( $thumbName );
 
+               if ( $thumbUrl === null ) {
+                       $this->setLastError( __METHOD__ . ': could not get thumb URL' );
+                       return false;
+               }
+
                if ( $wgUploadThumbnailRenderHttpCustomDomain ) {
                        $parsedUrl = wfParseUrl( $thumbUrl );
 
                        if ( !$parsedUrl || !isset( $parsedUrl['path'] ) || !strlen( $parsedUrl['path'] ) ) {
+                               $this->setLastError( __METHOD__ . ": invalid thumb URL: $thumbUrl" );
                                return false;
                        }
 
@@ -105,7 +113,19 @@ class ThumbnailRenderJob extends Job {
                }
 
                $status = $request->execute();
-
-               return $request->getStatus();
+               $statusCode = $request->getStatus();
+               wfDebug( __METHOD__ . ": received status {$statusCode}\n" );
+
+               // 400 happens when requesting a size greater or equal than the original
+               // TODO use proper error signaling. 400 could mean a number of other things.
+               if ( $statusCode === 200 || $statusCode === 301 || $statusCode === 302 || $statusCode === 400 ) {
+                       return true;
+               } elseif ( $statusCode ) {
+                       $this->setLastError( __METHOD__ . ": incorrect HTTP status $statusCode when hitting $thumbUrl" );
+               } else {
+                       $this->setLastError( __METHOD__ . ': HTTP request failure: '
+                               . Status::wrap( $status )->getWikiText( null, null, 'en' ) );
+               }
+               return false;
        }
 }
index 2e8b591..f822805 100644 (file)
  * slow, because they construct a complete parse tree before outputting the code minified.
  * So this class is meant to allow arbitrary (but syntactically correct) input, while being
  * fast enough to be used for on-the-fly minifying.
+ *
+ * This class was written with ECMA-262 Edition 3 in mind ("ECMAScript 3"). Parsing features
+ * new to ECMAScript 5 or later might not be supported. However, Edition 5.1 better reflects
+ * how actual JS engines worked and work and is simpler and more readable prose. As such,
+ * the below code will refer to sections of the 5.1 specification.
+ *
+ * See <https://www.ecma-international.org/ecma-262/5.1/>.
  */
 class JavaScriptMinifier {
 
@@ -44,33 +51,40 @@ class JavaScriptMinifier {
        const PROPERTY_EXPRESSION_FUNC = 15;
 
        /* Token types */
-       const TYPE_UN_OP       = 1; // unary operators
-       const TYPE_INCR_OP     = 2; // ++ and --
-       const TYPE_BIN_OP      = 3; // binary operators
-       const TYPE_ADD_OP      = 4; // + and - which can be either unary or binary ops
-       const TYPE_HOOK        = 5; // ?
-       const TYPE_COLON       = 6; // :
-       const TYPE_COMMA       = 7; // ,
-       const TYPE_SEMICOLON   = 8; // ;
-       const TYPE_BRACE_OPEN  = 9; // {
-       const TYPE_BRACE_CLOSE = 10; // }
-       const TYPE_PAREN_OPEN  = 11; // ( and [
-       const TYPE_PAREN_CLOSE = 12; // ) and ]
-       const TYPE_RETURN      = 13; // keywords: break, continue, return, throw
-       const TYPE_IF          = 14; // keywords: catch, for, with, switch, while, if
-       const TYPE_DO          = 15; // keywords: case, var, finally, else, do, try
-       const TYPE_FUNC        = 16; // keywords: function
-       const TYPE_LITERAL     = 17; // all literals, identifiers and unrecognised tokens
+       const TYPE_UN_OP       = 101; // unary operators
+       const TYPE_INCR_OP     = 102; // ++ and --
+       const TYPE_BIN_OP      = 103; // binary operators
+       const TYPE_ADD_OP      = 104; // + and - which can be either unary or binary ops
+       const TYPE_HOOK        = 105; // ?
+       const TYPE_COLON       = 106; // :
+       const TYPE_COMMA       = 107; // ,
+       const TYPE_SEMICOLON   = 108; // ;
+       const TYPE_BRACE_OPEN  = 109; // {
+       const TYPE_BRACE_CLOSE = 110; // }
+       const TYPE_PAREN_OPEN  = 111; // ( and [
+       const TYPE_PAREN_CLOSE = 112; // ) and ]
+       const TYPE_RETURN      = 113; // keywords: break, continue, return, throw
+       const TYPE_IF          = 114; // keywords: catch, for, with, switch, while, if
+       const TYPE_DO          = 115; // keywords: case, var, finally, else, do, try
+       const TYPE_FUNC        = 116; // keywords: function
+       const TYPE_LITERAL     = 117; // all literals, identifiers and unrecognised tokens
+
+       const ACTION_GOTO = 201;
 
        // Sanity limit to avoid excessive memory usage
        const STACK_LIMIT = 1000;
 
        /**
-        * NOTE: This isn't a strict maximum. Longer lines will be produced when
-        *       literals (e.g. quoted strings) longer than this are encountered
-        *       or when required to guard against semicolon insertion.
+        * Maximum line length
+        *
+        * This is not a strict maximum, but a guideline. Longer lines will be
+        * produced when literals (e.g. quoted strings) longer than this are
+        * encountered, or when required to guard against semicolon insertion.
+        *
+        * This is a private member (instead of constant) to allow tests to
+        * set it to 1, to verify ASI and line-breaking behaviour.
         */
-       const MAX_LINE_LENGTH = 1000;
+       private static $maxLineLength = 1000;
 
        /**
         * Returns minified JavaScript code.
@@ -81,207 +95,411 @@ class JavaScriptMinifier {
        public static function minify( $s ) {
                // First we declare a few tables that contain our parsing rules
 
-               // $opChars : characters, which can be combined without whitespace in between them
+               // $opChars : Characters which can be combined without whitespace between them.
                $opChars = [
-                       '!' => true,
-                       '"' => true,
-                       '%' => true,
-                       '&' => true,
-                       "'" => true,
+                       // ECMAScript 5.1 § 7.7 Punctuators
+                       // Unlike the spec, these are individual symbols, not sequences.
+                       '{' => true,
+                       '}' => true,
                        '(' => true,
                        ')' => true,
-                       '*' => true,
-                       '+' => true,
-                       ',' => true,
-                       '-' => true,
+                       '[' => true,
+                       ']' => true,
                        '.' => true,
-                       '/' => true,
-                       ':' => true,
                        ';' => true,
+                       ',' => true,
                        '<' => true,
-                       '=' => true,
                        '>' => true,
-                       '?' => true,
-                       '[' => true,
-                       ']' => true,
-                       '^' => true,
-                       '{' => true,
+                       '=' => true,
+                       '!' => true,
+                       '+' => true,
+                       '-' => true,
+                       '*' => true,
+                       '%' => true,
+                       '&' => true,
                        '|' => true,
-                       '}' => true,
-                       '~' => true
+                       '^' => true,
+                       '~' => true,
+                       '?' => true,
+                       ':' => true,
+                       '/' => true,
+                       // ECMAScript 5.1 § 7.8.4 String Literals
+                       '"' => true,
+                       "'" => true,
                ];
 
-               // $tokenTypes : maps keywords and operators to their corresponding token type
+               // $tokenTypes : Map keywords and operators to their corresponding token type
                $tokenTypes = [
-                       '!'          => self::TYPE_UN_OP,
-                       '~'          => self::TYPE_UN_OP,
-                       'delete'     => self::TYPE_UN_OP,
+                       // ECMAScript 5.1 § 11.4 Unary Operators
+                       // ECMAScript 5.1 § 11.6 Additive Operators
+                       // UnaryExpression includes PostfixExpression, which includes 'new'.
                        'new'        => self::TYPE_UN_OP,
-                       'typeof'     => self::TYPE_UN_OP,
+                       'delete'     => self::TYPE_UN_OP,
                        'void'       => self::TYPE_UN_OP,
+                       'typeof'     => self::TYPE_UN_OP,
                        '++'         => self::TYPE_INCR_OP,
                        '--'         => self::TYPE_INCR_OP,
+                       '+'          => self::TYPE_ADD_OP,
+                       '-'          => self::TYPE_ADD_OP,
+                       '~'          => self::TYPE_UN_OP,
+                       '!'          => self::TYPE_UN_OP,
+                       // ECMAScript 5.1 § 11.5 Multiplicative Operators
+                       '*'          => self::TYPE_BIN_OP,
+                       '/'          => self::TYPE_BIN_OP,
+                       '%'          => self::TYPE_BIN_OP,
+                       // ECMAScript 5.1 § 11.7 Bitwise Shift Operators
+                       '<<'         => self::TYPE_BIN_OP,
+                       '>>'         => self::TYPE_BIN_OP,
+                       '>>>'        => self::TYPE_BIN_OP,
+                       // ECMAScript 5.1 § 11.8 Relational Operators
+                       '<'          => self::TYPE_BIN_OP,
+                       '>'          => self::TYPE_BIN_OP,
+                       '<='         => self::TYPE_BIN_OP,
+                       '>='         => self::TYPE_BIN_OP,
+                       // ECMAScript 5.1 § 11.9 Equality Operators
+                       '=='         => self::TYPE_BIN_OP,
                        '!='         => self::TYPE_BIN_OP,
+                       '==='        => self::TYPE_BIN_OP,
                        '!=='        => self::TYPE_BIN_OP,
-                       '%'          => self::TYPE_BIN_OP,
-                       '%='         => self::TYPE_BIN_OP,
+                       'instanceof' => self::TYPE_BIN_OP,
+                       'in'         => self::TYPE_BIN_OP,
+                       // ECMAScript 5.1 § 11.10 Binary Bitwise Operators
                        '&'          => self::TYPE_BIN_OP,
+                       '^'          => self::TYPE_BIN_OP,
+                       '|'          => self::TYPE_BIN_OP,
+                       // ECMAScript 5.1 § 11.11 Binary Logical Operators
                        '&&'         => self::TYPE_BIN_OP,
-                       '&='         => self::TYPE_BIN_OP,
-                       '*'          => self::TYPE_BIN_OP,
+                       '||'         => self::TYPE_BIN_OP,
+                       // ECMAScript 5.1 § 11.12 Conditional Operator
+                       // Also known as ternary.
+                       '?'          => self::TYPE_HOOK,
+                       ':'          => self::TYPE_COLON,
+                       // ECMAScript 5.1 § 11.13 Assignment Operators
+                       '='          => self::TYPE_BIN_OP,
                        '*='         => self::TYPE_BIN_OP,
+                       '/='         => self::TYPE_BIN_OP,
+                       '%='         => self::TYPE_BIN_OP,
                        '+='         => self::TYPE_BIN_OP,
                        '-='         => self::TYPE_BIN_OP,
-                       '.'          => self::TYPE_BIN_OP,
-                       '/'          => self::TYPE_BIN_OP,
-                       '/='         => self::TYPE_BIN_OP,
-                       '<'          => self::TYPE_BIN_OP,
-                       '<<'         => self::TYPE_BIN_OP,
                        '<<='        => self::TYPE_BIN_OP,
-                       '<='         => self::TYPE_BIN_OP,
-                       '='          => self::TYPE_BIN_OP,
-                       '=='         => self::TYPE_BIN_OP,
-                       '==='        => self::TYPE_BIN_OP,
-                       '>'          => self::TYPE_BIN_OP,
-                       '>='         => self::TYPE_BIN_OP,
-                       '>>'         => self::TYPE_BIN_OP,
                        '>>='        => self::TYPE_BIN_OP,
-                       '>>>'        => self::TYPE_BIN_OP,
                        '>>>='       => self::TYPE_BIN_OP,
-                       '^'          => self::TYPE_BIN_OP,
+                       '&='         => self::TYPE_BIN_OP,
                        '^='         => self::TYPE_BIN_OP,
-                       '|'          => self::TYPE_BIN_OP,
                        '|='         => self::TYPE_BIN_OP,
-                       '||'         => self::TYPE_BIN_OP,
-                       'in'         => self::TYPE_BIN_OP,
-                       'instanceof' => self::TYPE_BIN_OP,
-                       '+'          => self::TYPE_ADD_OP,
-                       '-'          => self::TYPE_ADD_OP,
-                       '?'          => self::TYPE_HOOK,
-                       ':'          => self::TYPE_COLON,
+                       // ECMAScript 5.1 § 11.14 Comma Operator
                        ','          => self::TYPE_COMMA,
-                       ';'          => self::TYPE_SEMICOLON,
-                       '{'          => self::TYPE_BRACE_OPEN,
-                       '}'          => self::TYPE_BRACE_CLOSE,
-                       '('          => self::TYPE_PAREN_OPEN,
-                       '['          => self::TYPE_PAREN_OPEN,
-                       ')'          => self::TYPE_PAREN_CLOSE,
-                       ']'          => self::TYPE_PAREN_CLOSE,
-                       'break'      => self::TYPE_RETURN,
+
+                       // The keywords that disallow LineTerminator before their
+                       // (sometimes optional) Expression or Identifier.
+                       //
+                       //    keyword ;
+                       //    keyword [no LineTerminator here] Identifier ;
+                       //    keyword [no LineTerminator here] Expression ;
+                       //
+                       // See also ECMAScript 5.1:
+                       // - § 12.7 The continue Statement
+                       // - $ 12.8 The break Statement
+                       // - § 12.9 The return Statement
+                       // - § 12.13 The throw Statement
                        'continue'   => self::TYPE_RETURN,
+                       'break'      => self::TYPE_RETURN,
                        'return'     => self::TYPE_RETURN,
                        'throw'      => self::TYPE_RETURN,
+
+                       // The keywords require a parenthesised Expression or Identifier
+                       // before the next Statement.
+                       //
+                       //     keyword ( Expression ) Statement
+                       //     keyword ( Identifier ) Statement
+                       //
+                       // See also ECMAScript 5.1:
+                       // - § 12.5 The if Statement
+                       // - § 12.6 Iteration Statements (do, while, for)
+                       // - § 12.10 The with Statement
+                       // - § 12.11 The switch Statement
+                       // - § 12.13 The throw Statement
+                       'if'         => self::TYPE_IF,
                        'catch'      => self::TYPE_IF,
+                       'while'      => self::TYPE_IF,
                        'for'        => self::TYPE_IF,
-                       'if'         => self::TYPE_IF,
                        'switch'     => self::TYPE_IF,
-                       'while'      => self::TYPE_IF,
                        'with'       => self::TYPE_IF,
-                       'case'       => self::TYPE_DO,
-                       'do'         => self::TYPE_DO,
+
+                       // The keywords followed by an Identifier, Statement,
+                       // Expression, or Block.
+                       //
+                       //     var Identifier
+                       //     else Statement
+                       //     do Statement
+                       //     case Expression
+                       //     try Block
+                       //     finally Block
+                       //
+                       // See also ECMAScript 5.1:
+                       // - § 12.2 Variable Statement
+                       // - § 12.5 The if Statement (else)
+                       // - § 12.6 Iteration Statements (do, while, for)
+                       // - § 12.11 The switch Statement (case)
+                       // - § 12.14 The try Statement
+                       'var'        => self::TYPE_DO,
                        'else'       => self::TYPE_DO,
-                       'finally'    => self::TYPE_DO,
+                       'do'         => self::TYPE_DO,
+                       'case'       => self::TYPE_DO,
                        'try'        => self::TYPE_DO,
-                       'var'        => self::TYPE_DO,
-                       'function'   => self::TYPE_FUNC
+                       'finally'    => self::TYPE_DO,
+
+                       // ECMAScript 5.1 § 13 Function Definition
+                       'function'   => self::TYPE_FUNC,
+
+                       // Can be one of:
+                       // - DecimalLiteral (ECMAScript 5.1 § 7.8.3 Numeric Literals)
+                       // - MemberExpression (ECMAScript 5.1 § 11.2 Left-Hand-Side Expressions)
+                       '.'          => self::TYPE_BIN_OP,
+
+                       // Can be one of:
+                       // - Block (ECMAScript 5.1 § 12.1 Block)
+                       // - ObjectLiteral (ECMAScript 5.1 § 11.1 Primary Expressions)
+                       '{'          => self::TYPE_BRACE_OPEN,
+                       '}'          => self::TYPE_BRACE_CLOSE,
+
+                       // Can be one of:
+                       // - Parenthesised Identifier or Expression after a
+                       //   TYPE_IF or TYPE_FUNC keyword.
+                       // - PrimaryExpression (ECMAScript 5.1 § 11.1 Primary Expressions)
+                       // - CallExpression (ECMAScript 5.1 § 11.2 Left-Hand-Side Expressions)
+                       '('          => self::TYPE_PAREN_OPEN,
+                       ')'          => self::TYPE_PAREN_CLOSE,
+
+                       // Can be one of:
+                       // - ArrayLiteral (ECMAScript 5.1 § 11.1 Primary Expressions)
+                       '['          => self::TYPE_PAREN_OPEN,
+                       ']'          => self::TYPE_PAREN_CLOSE,
+
+                       // Can be one of:
+                       // - End of any statement
+                       // - EmptyStatement (ECMAScript 5.1 § 12.3 Empty Statement)
+                       ';'          => self::TYPE_SEMICOLON,
                ];
 
-               // $goto : This is the main table for our state machine. For every state/token pair
-               //         the following state is defined. When no rule exists for a given pair,
-               //         the state is left unchanged.
-               $goto = [
+               // $model : This is the main table for our state machine. For every state/token pair
+               //          the desired action is defined.
+               $model = [
+                       // Statement - This is the initial state.
                        self::STATEMENT => [
-                               self::TYPE_UN_OP      => self::EXPRESSION,
-                               self::TYPE_INCR_OP    => self::EXPRESSION,
-                               self::TYPE_ADD_OP     => self::EXPRESSION,
-                               self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
-                               self::TYPE_RETURN     => self::EXPRESSION_NO_NL,
-                               self::TYPE_IF         => self::CONDITION,
-                               self::TYPE_FUNC       => self::CONDITION,
-                               self::TYPE_LITERAL    => self::EXPRESSION_OP
+                               self::TYPE_UN_OP => [
+                                       self::ACTION_GOTO => self::EXPRESSION,
+                               ],
+                               self::TYPE_INCR_OP => [
+                                       self::ACTION_GOTO => self::EXPRESSION,
+                               ],
+                               self::TYPE_ADD_OP => [
+                                       self::ACTION_GOTO => self::EXPRESSION,
+                               ],
+                               self::TYPE_PAREN_OPEN => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
+                               self::TYPE_RETURN => [
+                                       self::ACTION_GOTO => self::EXPRESSION_NO_NL,
+                               ],
+                               self::TYPE_IF => [
+                                       self::ACTION_GOTO => self::CONDITION,
+                               ],
+                               self::TYPE_FUNC => [
+                                       self::ACTION_GOTO => self::CONDITION,
+                               ],
+                               self::TYPE_LITERAL => [
+                                       self::ACTION_GOTO => self::EXPRESSION_OP,
+                               ],
                        ],
                        self::CONDITION => [
-                               self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
+                               self::TYPE_PAREN_OPEN => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
                        ],
                        self::PROPERTY_ASSIGNMENT => [
-                               self::TYPE_COLON      => self::PROPERTY_EXPRESSION,
-                               self::TYPE_BRACE_OPEN => self::STATEMENT
+                               self::TYPE_COLON => [
+                                       self::ACTION_GOTO => self::PROPERTY_EXPRESSION,
+                               ],
+                               self::TYPE_BRACE_OPEN => [
+                                       self::ACTION_GOTO => self::STATEMENT,
+                               ],
                        ],
                        self::EXPRESSION => [
-                               self::TYPE_SEMICOLON  => self::STATEMENT,
-                               self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
-                               self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
-                               self::TYPE_FUNC       => self::EXPRESSION_FUNC,
-                               self::TYPE_LITERAL    => self::EXPRESSION_OP
+                               self::TYPE_SEMICOLON => [
+                                       self::ACTION_GOTO => self::STATEMENT,
+                               ],
+                               self::TYPE_BRACE_OPEN => [
+                                       self::ACTION_GOTO => self::PROPERTY_ASSIGNMENT,
+                               ],
+                               self::TYPE_PAREN_OPEN => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
+                               self::TYPE_FUNC => [
+                                       self::ACTION_GOTO => self::EXPRESSION_FUNC,
+                               ],
+                               self::TYPE_LITERAL => [
+                                       self::ACTION_GOTO => self::EXPRESSION_OP,
+                               ],
                        ],
                        self::EXPRESSION_NO_NL => [
-                               self::TYPE_SEMICOLON  => self::STATEMENT,
-                               self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
-                               self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
-                               self::TYPE_FUNC       => self::EXPRESSION_FUNC,
-                               self::TYPE_LITERAL    => self::EXPRESSION_OP
+                               self::TYPE_SEMICOLON => [
+                                       self::ACTION_GOTO => self::STATEMENT,
+                               ],
+                               self::TYPE_BRACE_OPEN => [
+                                       self::ACTION_GOTO => self::PROPERTY_ASSIGNMENT,
+                               ],
+                               self::TYPE_PAREN_OPEN => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
+                               self::TYPE_FUNC => [
+                                       self::ACTION_GOTO => self::EXPRESSION_FUNC,
+                               ],
+                               self::TYPE_LITERAL => [
+                                       self::ACTION_GOTO => self::EXPRESSION_OP,
+                               ],
                        ],
                        self::EXPRESSION_OP => [
-                               self::TYPE_BIN_OP     => self::EXPRESSION,
-                               self::TYPE_ADD_OP     => self::EXPRESSION,
-                               self::TYPE_HOOK       => self::EXPRESSION_TERNARY,
-                               self::TYPE_COLON      => self::STATEMENT,
-                               self::TYPE_COMMA      => self::EXPRESSION,
-                               self::TYPE_SEMICOLON  => self::STATEMENT,
-                               self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
+                               self::TYPE_BIN_OP => [
+                                       self::ACTION_GOTO => self::EXPRESSION,
+                               ],
+                               self::TYPE_ADD_OP => [
+                                       self::ACTION_GOTO => self::EXPRESSION,
+                               ],
+                               self::TYPE_HOOK => [
+                                       self::ACTION_GOTO => self::EXPRESSION_TERNARY,
+                               ],
+                               self::TYPE_COLON => [
+                                       self::ACTION_GOTO => self::STATEMENT,
+                               ],
+                               self::TYPE_COMMA => [
+                                       self::ACTION_GOTO => self::EXPRESSION,
+                               ],
+                               self::TYPE_SEMICOLON => [
+                                       self::ACTION_GOTO => self::STATEMENT,
+                               ],
+                               self::TYPE_PAREN_OPEN => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
                        ],
                        self::EXPRESSION_FUNC => [
-                               self::TYPE_BRACE_OPEN => self::STATEMENT
+                               self::TYPE_BRACE_OPEN => [
+                                       self::ACTION_GOTO => self::STATEMENT,
+                               ],
                        ],
                        self::EXPRESSION_TERNARY => [
-                               self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
-                               self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
-                               self::TYPE_FUNC       => self::EXPRESSION_TERNARY_FUNC,
-                               self::TYPE_LITERAL    => self::EXPRESSION_TERNARY_OP
+                               self::TYPE_BRACE_OPEN => [
+                                       self::ACTION_GOTO => self::PROPERTY_ASSIGNMENT,
+                               ],
+                               self::TYPE_PAREN_OPEN => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
+                               self::TYPE_FUNC => [
+                                       self::ACTION_GOTO => self::EXPRESSION_TERNARY_FUNC,
+                               ],
+                               self::TYPE_LITERAL => [
+                                       self::ACTION_GOTO => self::EXPRESSION_TERNARY_OP,
+                               ],
                        ],
                        self::EXPRESSION_TERNARY_OP => [
-                               self::TYPE_BIN_OP     => self::EXPRESSION_TERNARY,
-                               self::TYPE_ADD_OP     => self::EXPRESSION_TERNARY,
-                               self::TYPE_HOOK       => self::EXPRESSION_TERNARY,
-                               self::TYPE_COMMA      => self::EXPRESSION_TERNARY,
-                               self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
+                               self::TYPE_BIN_OP => [
+                                       self::ACTION_GOTO => self::EXPRESSION_TERNARY,
+                               ],
+                               self::TYPE_ADD_OP => [
+                                       self::ACTION_GOTO => self::EXPRESSION_TERNARY,
+                               ],
+                               self::TYPE_HOOK => [
+                                       self::ACTION_GOTO => self::EXPRESSION_TERNARY,
+                               ],
+                               self::TYPE_COMMA => [
+                                       self::ACTION_GOTO => self::EXPRESSION_TERNARY,
+                               ],
+                               self::TYPE_PAREN_OPEN => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
                        ],
                        self::EXPRESSION_TERNARY_FUNC => [
-                               self::TYPE_BRACE_OPEN => self::STATEMENT
+                               self::TYPE_BRACE_OPEN => [
+                                       self::ACTION_GOTO => self::STATEMENT,
+                               ],
                        ],
                        self::PAREN_EXPRESSION => [
-                               self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
-                               self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
-                               self::TYPE_FUNC       => self::PAREN_EXPRESSION_FUNC,
-                               self::TYPE_LITERAL    => self::PAREN_EXPRESSION_OP
+                               self::TYPE_BRACE_OPEN => [
+                                       self::ACTION_GOTO => self::PROPERTY_ASSIGNMENT,
+                               ],
+                               self::TYPE_PAREN_OPEN => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
+                               self::TYPE_FUNC => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION_FUNC,
+                               ],
+                               self::TYPE_LITERAL => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION_OP,
+                               ],
                        ],
                        self::PAREN_EXPRESSION_OP => [
-                               self::TYPE_BIN_OP     => self::PAREN_EXPRESSION,
-                               self::TYPE_ADD_OP     => self::PAREN_EXPRESSION,
-                               self::TYPE_HOOK       => self::PAREN_EXPRESSION,
-                               self::TYPE_COLON      => self::PAREN_EXPRESSION,
-                               self::TYPE_COMMA      => self::PAREN_EXPRESSION,
-                               self::TYPE_SEMICOLON  => self::PAREN_EXPRESSION,
-                               self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
+                               self::TYPE_BIN_OP => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
+                               self::TYPE_ADD_OP => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
+                               self::TYPE_HOOK => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
+                               self::TYPE_COLON => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
+                               self::TYPE_COMMA => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
+                               self::TYPE_SEMICOLON => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
+                               self::TYPE_PAREN_OPEN => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
                        ],
                        self::PAREN_EXPRESSION_FUNC => [
-                               self::TYPE_BRACE_OPEN => self::STATEMENT
+                               self::TYPE_BRACE_OPEN => [
+                                       self::ACTION_GOTO => self::STATEMENT,
+                               ],
                        ],
                        self::PROPERTY_EXPRESSION => [
-                               self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
-                               self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
-                               self::TYPE_FUNC       => self::PROPERTY_EXPRESSION_FUNC,
-                               self::TYPE_LITERAL    => self::PROPERTY_EXPRESSION_OP
+                               self::TYPE_BRACE_OPEN => [
+                                       self::ACTION_GOTO => self::PROPERTY_ASSIGNMENT,
+                               ],
+                               self::TYPE_PAREN_OPEN => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
+                               self::TYPE_FUNC => [
+                                       self::ACTION_GOTO => self::PROPERTY_EXPRESSION_FUNC,
+                               ],
+                               self::TYPE_LITERAL => [
+                                       self::ACTION_GOTO => self::PROPERTY_EXPRESSION_OP,
+                               ],
                        ],
                        self::PROPERTY_EXPRESSION_OP => [
-                               self::TYPE_BIN_OP     => self::PROPERTY_EXPRESSION,
-                               self::TYPE_ADD_OP     => self::PROPERTY_EXPRESSION,
-                               self::TYPE_HOOK       => self::PROPERTY_EXPRESSION,
-                               self::TYPE_COMMA      => self::PROPERTY_ASSIGNMENT,
-                               self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
+                               self::TYPE_BIN_OP => [
+                                       self::ACTION_GOTO => self::PROPERTY_EXPRESSION,
+                               ],
+                               self::TYPE_ADD_OP => [
+                                       self::ACTION_GOTO => self::PROPERTY_EXPRESSION,
+                               ],
+                               self::TYPE_HOOK => [
+                                       self::ACTION_GOTO => self::PROPERTY_EXPRESSION,
+                               ],
+                               self::TYPE_COMMA => [
+                                       self::ACTION_GOTO => self::PROPERTY_ASSIGNMENT,
+                               ],
+                               self::TYPE_PAREN_OPEN => [
+                                       self::ACTION_GOTO => self::PAREN_EXPRESSION,
+                               ],
                        ],
                        self::PROPERTY_EXPRESSION_FUNC => [
-                               self::TYPE_BRACE_OPEN => self::STATEMENT
+                               self::TYPE_BRACE_OPEN => [
+                                       self::ACTION_GOTO => self::STATEMENT,
+                               ],
                        ]
                ];
 
@@ -340,6 +558,7 @@ class JavaScriptMinifier {
                                self::TYPE_PAREN_OPEN => self::PROPERTY_EXPRESSION_OP
                        ],
                        self::PROPERTY_EXPRESSION_OP => [
+                               self::TYPE_BRACE_OPEN => self::PROPERTY_EXPRESSION_OP,
                                self::TYPE_PAREN_OPEN => self::PROPERTY_EXPRESSION_OP
                        ],
                        self::PROPERTY_EXPRESSION_FUNC => [
@@ -583,7 +802,7 @@ class JavaScriptMinifier {
                                $out .= "\n";
                                $state = self::STATEMENT;
                                $lineLength = 0;
-                       } elseif ( $lineLength + $end - $pos > self::MAX_LINE_LENGTH &&
+                       } elseif ( $lineLength + $end - $pos > self::$maxLineLength &&
                                        !isset( $semicolon[$state][$type] ) && $type !== self::TYPE_INCR_OP ) {
                                // This line would get too long if we added $token, so add a newline first.
                                // Only do this if it won't trigger semicolon insertion and if it won't
@@ -620,8 +839,8 @@ class JavaScriptMinifier {
                        }
                        if ( $stack && isset( $pop[$state][$type] ) ) {
                                $state = array_pop( $stack );
-                       } elseif ( isset( $goto[$state][$type] ) ) {
-                               $state = $goto[$state][$type];
+                       } elseif ( isset( $model[$state][$type][self::ACTION_GOTO] ) ) {
+                               $state = $model[$state][$type][self::ACTION_GOTO];
                        }
                }
                return $out;
index ad5e58d..3a549af 100644 (file)
@@ -64,7 +64,7 @@ class MapCacheLRU implements IExpiringStore, Serializable {
                Assert::parameter( $maxKeys > 0, '$maxKeys', 'must be above zero' );
 
                $this->maxCacheKeys = $maxKeys;
-               // Use the current time as the default "as of" timesamp of entries
+               // Use the current time as the default "as of" timestamp of entries
                $this->epoch = $this->getCurrentTime();
        }
 
@@ -141,7 +141,7 @@ class MapCacheLRU implements IExpiringStore, Serializable {
        public function has( $key, $maxAge = 0.0 ) {
                if ( !is_int( $key ) && !is_string( $key ) ) {
                        throw new UnexpectedValueException(
-                               __METHOD__ . ' called with invalid key. Must be string or integer.' );
+                               __METHOD__ . ': invalid key; must be string or integer.' );
                }
 
                if ( !array_key_exists( $key, $this->cache ) ) {
@@ -183,8 +183,15 @@ class MapCacheLRU implements IExpiringStore, Serializable {
                        $this->set( $key, [], $initRank );
                }
 
+               if ( !is_int( $field ) && !is_string( $field ) ) {
+                       throw new UnexpectedValueException(
+                               __METHOD__ . ": invalid field for '$key'; must be string or integer." );
+               }
+
                if ( !is_array( $this->cache[$key] ) ) {
-                       throw new UnexpectedValueException( "The value of '$key' is not an array." );
+                       $type = gettype( $this->cache[$key] );
+
+                       throw new UnexpectedValueException( "The value of '$key' ($type) is not an array." );
                }
 
                $this->cache[$key][$field] = $value;
@@ -199,6 +206,12 @@ class MapCacheLRU implements IExpiringStore, Serializable {
         */
        public function hasField( $key, $field, $maxAge = 0.0 ) {
                $value = $this->get( $key );
+
+               if ( !is_int( $field ) && !is_string( $field ) ) {
+                       throw new UnexpectedValueException(
+                               __METHOD__ . ": invalid field for '$key'; must be string or integer." );
+               }
+
                if ( !is_array( $value ) || !array_key_exists( $field, $value ) ) {
                        return false;
                }
index 6d5efa2..2852265 100644 (file)
@@ -394,7 +394,7 @@ abstract class FileBackend implements LoggerAwareInterface {
         *                           This should only be used if all entries in the process
         *                           cache were added after the files were already locked. (since 1.20)
         *
-        * @remarks Remarks on locking:
+        * @note Remarks on locking:
         * File system paths given to operations should refer to files that are
         * already locked or otherwise safe from modification from other processes.
         * Normally these files will be new temp files, which should be adequate.
index 2989c81..716641f 100644 (file)
@@ -107,6 +107,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        protected $useInterimHoldOffCaching = true;
        /** @var callable|null Function that takes a WAN cache callback and runs it later */
        protected $asyncHandler;
+       /** @var float Unix timestamp of the oldest possible valid values */
+       protected $epoch;
 
        /** @var int ERR_* constant for the "last error" registry */
        protected $lastRelayError = self::ERR_NONE;
@@ -223,6 +225,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *   - mcrouterAware: set as true if mcrouter is the backing store proxy and mcrouter
         *       is configured to interpret /<region>/<cluster>/ key prefixes as routes. This
         *       requires that "region" and "cluster" are both set above. [optional]
+        *   - epoch: lowest UNIX timestamp a value/tombstone must have to be valid. [optional]
         */
        public function __construct( array $params ) {
                $this->cache = $params['cache'];
@@ -231,6 +234,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                $this->region = $params['region'] ?? 'main';
                $this->cluster = $params['cluster'] ?? 'wan-main';
                $this->mcrouterAware = !empty( $params['mcrouterAware'] );
+               $this->epoch = $params['epoch'] ?? 1.0;
 
                $this->setLogger( $params['logger'] ?? new NullLogger() );
                $this->stats = $params['stats'] ?? new NullStatsdDataFactory();
@@ -942,7 +946,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * @code
         *     $catSituationTolerabilityCache = $this->cache->getWithSetCallback(
         *         // Group by constraint ID/hash, cat family ID/hash, or something else useful
-        *         $this->cache->makeKey( 'cat-situation-tolerablity-checks', $groupKey ),
+        *         $this->cache->makeKey( 'cat-situation-tolerability-checks', $groupKey ),
         *         WANObjectCache::TTL_DAY, // rarely used groups should fade away
         *         // The $scenarioKey format is $constraintId:<ID/hash of $situation>
         *         function ( $cacheMap ) use ( $scenarioKey, $constraintId, $situation ) {
@@ -2042,6 +2046,11 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                        $curTTL = INF;
                }
 
+               if ( $wrapped[self::FLD_TIME] < $this->epoch ) {
+                       // Values this old are ignored
+                       return [ false, null ];
+               }
+
                return [ $wrapped[self::FLD_VALUE], $curTTL ];
        }
 
@@ -2070,7 +2079,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        }
 
        /**
-        * @param string $value Wrapped value like "PURGED:<timestamp>:<holdoff>"
+        * @param string|array|bool $value Possible string of the form "PURGED:<timestamp>:<holdoff>"
         * @return array|bool Array containing a UNIX timestamp (float) and holdoff period (integer),
         *  or false if value isn't a valid purge value
         */
@@ -2078,16 +2087,24 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                if ( !is_string( $value ) ) {
                        return false;
                }
+
                $segments = explode( ':', $value, 3 );
                if ( !isset( $segments[0] ) || !isset( $segments[1] )
                        || "{$segments[0]}:" !== self::PURGE_VAL_PREFIX
                ) {
                        return false;
                }
+
                if ( !isset( $segments[2] ) ) {
                        // Back-compat with old purge values without holdoff
                        $segments[2] = self::HOLDOFF_TTL;
                }
+
+               if ( $segments[1] < $this->epoch ) {
+                       // Values this old are ignored
+                       return false;
+               }
+
                return [
                        self::FLD_TIME => (float)$segments[1],
                        self::FLD_HOLDOFF => (int)$segments[2],
index c353a22..8ea28f0 100644 (file)
@@ -62,6 +62,7 @@ class TransactionProfiler implements LoggerAwareInterface {
                'conns'          => INF,
                'masterConns'    => INF,
                'maxAffected'    => INF,
+               'readQueryRows'  => INF,
                'readQueryTime'  => INF,
                'writeQueryTime' => INF
        ];
@@ -199,7 +200,7 @@ class TransactionProfiler implements LoggerAwareInterface {
         * @param string $query Function name or generalized SQL
         * @param float $sTime Starting UNIX wall time
         * @param bool $isWrite Whether this is a write query
-        * @param int $n Number of affected rows
+        * @param int $n Number of affected/read rows
         */
        public function recordQueryCompletion( $query, $sTime, $isWrite = false, $n = 0 ) {
                $eTime = microtime( true );
@@ -209,6 +210,10 @@ class TransactionProfiler implements LoggerAwareInterface {
                        $this->logger->warning(
                                "Query affected $n row(s):\n" . $query . "\n" .
                                ( new RuntimeException() )->getTraceAsString() );
+               } elseif ( !$isWrite && $n > $this->expect['readQueryRows'] ) {
+                       $this->logger->warning(
+                               "Query returned $n row(s):\n" . $query . "\n" .
+                               ( new RuntimeException() )->getTraceAsString() );
                }
 
                // Report when too many writes/queries happen...
index 4070a02..2673b2c 100644 (file)
@@ -1239,7 +1239,10 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                }
 
                $this->trxProfiler->recordQueryCompletion(
-                       $queryProf, $startTime, $isWrite, $this->affectedRows()
+                       $queryProf,
+                       $startTime,
+                       $isWrite,
+                       $isWrite ? $this->affectedRows() : $this->numRows( $ret )
                );
                $this->queryLogger->debug( $sql, [
                        'method' => $fname,
index 3ecfca9..57fab54 100644 (file)
@@ -367,7 +367,7 @@ abstract class DatabaseMysqlBase extends Database {
                        $res = $res->result;
                }
                Wikimedia\suppressWarnings();
-               $n = $this->mysqlNumRows( $res );
+               $n = $res ? $this->mysqlNumRows( $res ) : 0;
                Wikimedia\restoreWarnings();
 
                // Unfortunately, mysql_num_rows does not reset the last errno.
index a043cd6..a959d72 100644 (file)
@@ -299,6 +299,10 @@ class DatabasePostgres extends Database {
        }
 
        public function numRows( $res ) {
+               if ( $res === false ) {
+                       return 0;
+               }
+
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
@@ -645,7 +649,7 @@ __INDEXATTR__;
         * be quoted with Database::addQuotes()
         * $conds may be "*" to copy the whole table
         * srcTable may be an array of tables.
-        * @todo FIXME: Implement this a little better (seperate select/insert)?
+        * @todo FIXME: Implement this a little better (separate select/insert)?
         *
         * @param string $destTable
         * @param array|string $srcTable
index b0fd12a..25fbba0 100644 (file)
@@ -399,13 +399,14 @@ class DatabaseSqlite extends Database {
        /**
         * The PDO::Statement class implements the array interface so count() will work
         *
-        * @param ResultWrapper|array $res
+        * @param ResultWrapper|array|false $res
         * @return int
         */
        function numRows( $res ) {
+               // false does not implement Countable
                $r = $res instanceof ResultWrapper ? $res->result : $res;
 
-               return count( $r );
+               return is_array( $r ) ? count( $r ) : 0;
        }
 
        /**
index e47e75e..be1a851 100644 (file)
@@ -135,6 +135,7 @@ abstract class LBFactory implements ILBFactory {
                        'IPAddress' => $_SERVER[ 'REMOTE_ADDR' ] ?? '',
                        'UserAgent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
                        // Headers application can inject via LBFactory::setRequestInfo()
+                       'ChronologyProtection' => null,
                        'ChronologyClientId' => null, // prior $cpClientId value from LBFactory::shutdown()
                        'ChronologyPositionIndex' => null // prior $cpIndex value from LBFactory::shutdown()
                ];
index 0ff6a32..9f7d050 100644 (file)
@@ -187,7 +187,8 @@ interface ILoadBalancer {
        /**
         * Get any open connection to a given server index, local or foreign
         *
-        * Use CONN_TRX_AUTOCOMMIT to only look for connections opened with that flag
+        * Use CONN_TRX_AUTOCOMMIT to only look for connections opened with that flag.
+        * Avoid the use of begin() or startAtomic() on any such connections.
         *
         * @param int $i Server index or DB_MASTER/DB_REPLICA
         * @param int $flags Bitfield of CONN_* class constants
@@ -202,9 +203,10 @@ interface ILoadBalancer {
         * (e.g. sqlite) in order to avoid deadlocks. ILoadBalancer::getServerAttributes()
         * can be used to check such flags beforehand.
         *
-        * If the caller uses $domain or sets CONN_TRX_AUTOCOMMIT in $flags, then it must also
-        * call ILoadBalancer::reuseConnection() on the handle when finished using it.
+        * If the caller uses $domain or sets CONN_TRX_AUTOCOMMIT in $flags, then it must
+        * also call ILoadBalancer::reuseConnection() on the handle when finished using it.
         * In all other cases, this is not necessary, though not harmful either.
+        * Avoid the use of begin() or startAtomic() on any such connections.
         *
         * @param int $i Server index (overrides $groups) or DB_MASTER/DB_REPLICA
         * @param array|string|bool $groups Query group(s), or false for the generic reader
@@ -236,7 +238,8 @@ interface ILoadBalancer {
         *
         * The CONN_TRX_AUTOCOMMIT flag is ignored for databases with ATTR_DB_LEVEL_LOCKING
         * (e.g. sqlite) in order to avoid deadlocks. ILoadBalancer::getServerAttributes()
-        * can be used to check such flags beforehand.
+        * can be used to check such flags beforehand. Avoid the use of begin() or startAtomic()
+        * on any CONN_TRX_AUTOCOMMIT connections.
         *
         * @see ILoadBalancer::getConnection() for parameter information
         *
@@ -255,7 +258,8 @@ interface ILoadBalancer {
         *
         * The CONN_TRX_AUTOCOMMIT flag is ignored for databases with ATTR_DB_LEVEL_LOCKING
         * (e.g. sqlite) in order to avoid deadlocks. ILoadBalancer::getServerAttributes()
-        * can be used to check such flags beforehand.
+        * can be used to check such flags beforehand. Avoid the use of begin() or startAtomic()
+        * on any CONN_TRX_AUTOCOMMIT connections.
         *
         * @see ILoadBalancer::getConnection() for parameter information
         *
@@ -274,7 +278,8 @@ interface ILoadBalancer {
         *
         * The CONN_TRX_AUTOCOMMIT flag is ignored for databases with ATTR_DB_LEVEL_LOCKING
         * (e.g. sqlite) in order to avoid deadlocks. ILoadBalancer::getServerAttributes()
-        * can be used to check such flags beforehand.
+        * can be used to check such flags beforehand. Avoid the use of begin() or startAtomic()
+        * on any CONN_TRX_AUTOCOMMIT connections.
         *
         * @see ILoadBalancer::getConnection() for parameter information
         *
@@ -292,13 +297,14 @@ interface ILoadBalancer {
         * The index must be an actual index into the array. If a connection to the server is
         * already open and not considered an "in use" foreign connection, this simply returns it.
         *
-        * Avoid using CONN_TRX_AUTOCOMMIT for databases with ATTR_DB_LEVEL_LOCKING (e.g. sqlite) in
-        * order to avoid deadlocks. ILoadBalancer::getServerAttributes() can be used to check
+        * Avoid using CONN_TRX_AUTOCOMMIT for databases with ATTR_DB_LEVEL_LOCKING (e.g. sqlite)
+        * in order to avoid deadlocks. ILoadBalancer::getServerAttributes() can be used to check
         * such flags beforehand.
         *
-        * If the caller uses $domain or sets CONN_TRX_AUTOCOMMIT in $flags, then it must also
-        * call ILoadBalancer::reuseConnection() on the handle when finished using it.
+        * If the caller uses $domain or sets CONN_TRX_AUTOCOMMIT in $flags, then it must
+        * also call ILoadBalancer::reuseConnection() on the handle when finished using it.
         * In all other cases, this is not necessary, though not harmful either.
+        * Avoid the use of begin() or startAtomic() on any such connections.
         *
         * @note This method throws DBAccessError if ILoadBalancer::disable() was called
         *
@@ -350,6 +356,7 @@ interface ILoadBalancer {
         * Return the server info structure for a given index, or false if the index is invalid.
         * @param int $i
         * @return array|bool
+        * @since 1.31
         */
        public function getServerInfo( $i );
 
index f2f9eb0..92cabca 100644 (file)
@@ -926,6 +926,13 @@ class LoadBalancer implements ILoadBalancer {
                }
 
                if ( $autoCommit && $conn instanceof IDatabase ) {
+                       if ( $conn->trxLevel() ) { // sanity
+                               throw new DBUnexpectedError(
+                                       $conn,
+                                       __METHOD__ . ': CONN_TRX_AUTOCOMMIT handle has a transaction.'
+                               );
+                       }
+
                        $conn->clearFlag( $conn::DBO_TRX ); // auto-commit mode
                }
 
index 0d22382..3762d62 100644 (file)
@@ -130,7 +130,7 @@ class BlockLogFormatter extends LogFormatter {
         * @param Language $lang
         * @return string
         */
-       public static function formatBlockFlags( $flags, $lang ) {
+       public static function formatBlockFlags( $flags, Language $lang ) {
                $flags = trim( $flags );
                if ( $flags === '' ) {
                        return ''; // nothing to do
@@ -153,7 +153,7 @@ class BlockLogFormatter extends LogFormatter {
         * @param Language $lang Language object to use
         * @return string
         */
-       public static function formatBlockFlag( $flag, $lang ) {
+       public static function formatBlockFlag( $flag, Language $lang ) {
                static $messages = [];
 
                if ( !isset( $messages[$flag] ) ) {
index f032efc..a5aa687 100644 (file)
@@ -130,10 +130,13 @@ class LogEventsList extends ContextSource {
                        !empty( $extraInputsDescriptor )
                ) {
                        $formDescriptor[ 'extra' ] = $extraInputsDescriptor;
-               } elseif ( is_string( $extraInputsDescriptor ) ) {
+               } elseif (
+                       is_string( $extraInputsDescriptor ) &&
+                       $extraInputsDescriptor !== ''
+               ) {
                        // We'll add this to the footer of the form later
                        $extraInputsString = $extraInputsDescriptor;
-                       wfDeprecated( 'Using $input in LogEventsListGetExtraInputs hook', '1.32' );
+                       wfDeprecated( '$input in LogEventsListGetExtraInputs hook', '1.32' );
                }
 
                // Title pattern, if allowed
index 35bb451..e14c485 100644 (file)
@@ -227,8 +227,6 @@ class LogFormatter {
         * @return string Text
         */
        public function getIRCActionText() {
-               global $wgContLang;
-
                $this->plaintext = true;
                $this->irctext = true;
 
@@ -238,6 +236,7 @@ class LogFormatter {
                // Text of title the action is aimed at.
                $target = $entry->getTarget()->getPrefixedText();
                $text = null;
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                switch ( $entry->getType() ) {
                        case 'move':
                                switch ( $entry->getSubtype() ) {
@@ -383,12 +382,12 @@ class LogFormatter {
                                                        $rawDuration = $parameters['5::duration'];
                                                        $rawFlags = $parameters['6::flags'];
                                                }
-                                               $duration = $wgContLang->translateBlockExpiry(
+                                               $duration = $contLang->translateBlockExpiry(
                                                        $rawDuration,
                                                        null,
                                                        wfTimestamp( TS_UNIX, $entry->getTimestamp() )
                                                );
-                                               $flags = BlockLogFormatter::formatBlockFlags( $rawFlags, $wgContLang );
+                                               $flags = BlockLogFormatter::formatBlockFlags( $rawFlags, $contLang );
                                                $text = wfMessage( 'blocklogentry' )
                                                        ->rawParams( $target, $duration, $flags )->inContentLanguage()->escaped();
                                                break;
@@ -397,12 +396,13 @@ class LogFormatter {
                                                        ->rawParams( $target )->inContentLanguage()->escaped();
                                                break;
                                        case 'reblock':
-                                               $duration = $wgContLang->translateBlockExpiry(
+                                               $duration = $contLang->translateBlockExpiry(
                                                        $parameters['5::duration'],
                                                        null,
                                                        wfTimestamp( TS_UNIX, $entry->getTimestamp() )
                                                );
-                                               $flags = BlockLogFormatter::formatBlockFlags( $parameters['6::flags'], $wgContLang );
+                                               $flags = BlockLogFormatter::formatBlockFlags( $parameters['6::flags'],
+                                                       $contLang );
                                                $text = wfMessage( 'reblock-logentry' )
                                                        ->rawParams( $target, $duration, $flags )->inContentLanguage()->escaped();
                                                break;
@@ -645,13 +645,18 @@ class LogFormatter {
         * @param Title|null $title The page
         * @param array $parameters Query parameters
         * @param string|null $html Linktext of the link as raw html
-        * @throws MWException
         * @return string
         */
        protected function makePageLink( Title $title = null, $parameters = [], $html = null ) {
                if ( !$title instanceof Title ) {
-                       throw new MWException( 'Expected title, got null' );
+                       $msg = $this->msg( 'invalidtitle' )->text();
+                       if ( !$this->plaintext ) {
+                               return Html::element( 'span', [ 'class' => 'mw-invalidtitle' ], $msg );
+                       } else {
+                               return $msg;
+                       }
                }
+
                if ( !$this->plaintext ) {
                        $html = $html !== null ? new HtmlArmor( $html ) : $html;
                        $link = $this->getLinkRenderer()->makeLink( $title, $html, [], $parameters );
index 265a41c..673c929 100644 (file)
@@ -223,10 +223,10 @@ class LogPage {
        public static function actionText( $type, $action, $title = null, $skin = null,
                $params = [], $filterWikilinks = false
        ) {
-               global $wgLang, $wgContLang, $wgLogActions;
+               global $wgLang, $wgLogActions;
 
                if ( is_null( $skin ) ) {
-                       $langObj = $wgContLang;
+                       $langObj = MediaWikiServices::getInstance()->getContentLanguage();
                        $langObjOrNull = null;
                } else {
                        $langObj = $wgLang;
index 931829a..02a6972 100644 (file)
@@ -22,6 +22,8 @@
  * @since 1.26
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * This class formats protect log entries.
  *
@@ -146,13 +148,12 @@ class ProtectLogFormatter extends LogFormatter {
        }
 
        public function formatParametersForApi() {
-               global $wgContLang;
-
                $ret = parent::formatParametersForApi();
                if ( isset( $ret['details'] ) && is_array( $ret['details'] ) ) {
                        foreach ( $ret['details'] as &$detail ) {
                                if ( isset( $detail['expiry'] ) ) {
-                                       $detail['expiry'] = $wgContLang->formatExpiry( $detail['expiry'], TS_ISO_8601, 'infinite' );
+                                       $detail['expiry'] = MediaWikiServices::getInstance()->getContentLanguage()->
+                                               formatExpiry( $detail['expiry'], TS_ISO_8601, 'infinite' );
                                }
                        }
                }
index 6e527e8..c958947 100644 (file)
@@ -23,6 +23,8 @@
  * @since 1.22
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * This class formats rights log entries.
  *
  */
 class RightsLogFormatter extends LogFormatter {
        protected function makePageLink( Title $title = null, $parameters = [], $html = null ) {
-               global $wgContLang, $wgUserrightsInterwikiDelimiter;
+               global $wgUserrightsInterwikiDelimiter;
 
                if ( !$this->plaintext ) {
-                       $text = $wgContLang->ucfirst( $title->getDBkey() );
+                       $text = MediaWikiServices::getInstance()->getContentLanguage()->
+                               ucfirst( $title->getDBkey() );
                        $parts = explode( $wgUserrightsInterwikiDelimiter, $text, 2 );
 
                        if ( count( $parts ) === 2 ) {
index 67b7142..3144504 100644 (file)
@@ -452,7 +452,7 @@ class EmailNotification {
         * @private
         */
        function sendPersonalised( $watchingUser, $source ) {
-               global $wgContLang, $wgEnotifUseRealName;
+               global $wgEnotifUseRealName;
                // From the PHP manual:
                //   Note: The to parameter cannot be an address in the form of
                //   "Something <someone@example.com>". The mail command will not parse
@@ -462,14 +462,15 @@ class EmailNotification {
                # $PAGEEDITDATE is the time and date of the page change
                # expressed in terms of individual local time of the notification
                # recipient, i.e. watching user
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                $body = str_replace(
                        [ '$WATCHINGUSERNAME',
                                '$PAGEEDITDATE',
                                '$PAGEEDITTIME' ],
                        [ $wgEnotifUseRealName && $watchingUser->getRealName() !== ''
                                ? $watchingUser->getRealName() : $watchingUser->getName(),
-                               $wgContLang->userDate( $this->timestamp, $watchingUser ),
-                               $wgContLang->userTime( $this->timestamp, $watchingUser ) ],
+                               $contLang->userDate( $this->timestamp, $watchingUser ),
+                               $contLang->userTime( $this->timestamp, $watchingUser ) ],
                        $this->body );
 
                $headers = [];
@@ -490,19 +491,18 @@ class EmailNotification {
         * @return Status|null
         */
        function sendImpersonal( $addresses ) {
-               global $wgContLang;
-
                if ( empty( $addresses ) ) {
                        return null;
                }
 
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                $body = str_replace(
                        [ '$WATCHINGUSERNAME',
                                '$PAGEEDITDATE',
                                '$PAGEEDITTIME' ],
                        [ wfMessage( 'enotif_impersonal_salutation' )->inContentLanguage()->text(),
-                               $wgContLang->date( $this->timestamp, false, false ),
-                               $wgContLang->time( $this->timestamp, false, false ) ],
+                               $contLang->date( $this->timestamp, false, false ),
+                               $contLang->time( $this->timestamp, false, false ) ],
                        $this->body );
 
                return UserMailer::send( $addresses, $this->from, $this->subject, $body, [
index f647a9d..345b3cb 100644 (file)
@@ -1003,13 +1003,12 @@ class FormatMetadata extends ContextSource {
        public static function flattenArrayContentLang( $vals, $type = 'ul',
                $noHtml = false, $context = false
        ) {
-               global $wgContLang;
                $obj = new FormatMetadata;
                if ( $context ) {
                        $obj->setContext( $context );
                }
                $context = new DerivativeContext( $obj->getContext() );
-               $context->setLanguage( $wgContLang );
+               $context->setLanguage( MediaWikiServices::getInstance()->getContentLanguage() );
                $obj->setContext( $context );
 
                return $obj->flattenArrayReal( $vals, $type, $noHtml );
@@ -1056,7 +1055,7 @@ class FormatMetadata extends ContextSource {
                         */
                        switch ( $type ) {
                                case 'lang':
-                                       // Display default, followed by ContLang,
+                                       // Display default, followed by ContentLanguage,
                                        // followed by the rest in no particular
                                        // order.
 
@@ -1218,13 +1217,15 @@ class FormatMetadata extends ContextSource {
         * @return string The text content of "exif-$tag-$val" message in lower case
         */
        private function exifMsg( $tag, $val, $arg = null, $arg2 = null ) {
-               global $wgContLang;
-
                if ( $val === '' ) {
                        $val = 'value';
                }
 
-               return $this->msg( $wgContLang->lc( "exif-$tag-$val" ), $arg, $arg2 )->text();
+               return $this->msg(
+                       MediaWikiServices::getInstance()->getContentLanguage()->lc( "exif-$tag-$val" ),
+                       $arg,
+                       $arg2
+               )->text();
        }
 
        /**
index e00a5b3..e52bf0b 100644 (file)
@@ -325,7 +325,7 @@ class SVGReader {
 
                if ( $this->reader->getAttribute( 'viewBox' ) ) {
                        // min-x min-y width height
-                       $viewBox = preg_split( '/\s+/', trim( $this->reader->getAttribute( 'viewBox' ) ) );
+                       $viewBox = preg_split( '/\s*[\s,]\s*/', trim( $this->reader->getAttribute( 'viewBox' ) ) );
                        if ( count( $viewBox ) == 4 ) {
                                $viewWidth = $this->scaleSVGUnit( $viewBox[2] );
                                $viewHeight = $this->scaleSVGUnit( $viewBox[3] );
@@ -380,7 +380,11 @@ class SVGReader {
                        '' => 1.0, // "User units" pixels by default
                ];
                $matches = [];
-               if ( preg_match( '/^\s*(\d+(?:\.\d+)?)(em|ex|px|pt|pc|cm|mm|in|%|)\s*$/', $length, $matches ) ) {
+               if ( preg_match(
+                       '/^\s*([-+]?\d*(?:\.\d+|\d+)(?:[Ee][-+]?\d+)?)\s*(em|ex|px|pt|pc|cm|mm|in|%|)\s*$/',
+                       $length,
+                       $matches
+               ) ) {
                        $length = floatval( $matches[1] );
                        $unit = $matches[2];
                        if ( $unit == '%' ) {
index 49912c7..3a7b18e 100644 (file)
@@ -750,7 +750,7 @@ class Article implements Page {
         * @return array The policy that should be set
         * @todo actions other than 'view'
         */
-       public function getRobotPolicy( $action, $pOutput = null ) {
+       public function getRobotPolicy( $action, ParserOutput $pOutput = null ) {
                global $wgArticleRobotPolicies, $wgNamespaceRobotPolicies, $wgDefaultRobotPolicy;
 
                $ns = $this->getTitle()->getNamespace();
index bb8ed24..1f87d93 100644 (file)
@@ -18,6 +18,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Builds the image revision log shown on image pages
  *
@@ -111,8 +113,6 @@ class ImageHistoryList extends ContextSource {
         * @return string
         */
        public function imageHistoryLine( $iscur, $file ) {
-               global $wgContLang;
-
                $user = $this->getUser();
                $lang = $this->getLanguage();
                $timestamp = wfTimestamp( TS_MW, $file->getTimestamp() );
@@ -264,8 +264,9 @@ class ImageHistoryList extends ContextSource {
                        $row .= '<td><span class="history-deleted">' .
                                $this->msg( 'rev-deleted-comment' )->escaped() . '</span></td>';
                } else {
-                       $row .= '<td dir="' . $wgContLang->getDir() . '">' .
-                               Linker::formatComment( $description, $this->title ) . '</td>';
+                       $row .=
+                               '<td dir="' . MediaWikiServices::getInstance()->getContentLanguage()->getDir() .
+                               '">' .  Linker::formatComment( $description, $this->title ) . '</td>';
                }
 
                $rowClass = null;
index a1b2e57..661faa7 100644 (file)
@@ -1625,7 +1625,7 @@ class WikiPage implements Page, IDBAccessObject {
         * @return DerivedPageDataUpdater
         */
        private function newDerivedDataUpdater() {
-               global $wgContLang, $wgRCWatchCategoryMembership, $wgArticleCountMethod;
+               global $wgRCWatchCategoryMembership, $wgArticleCountMethod;
 
                $derivedDataUpdater = new DerivedPageDataUpdater(
                        $this, // NOTE: eventually, PageUpdater should not know about WikiPage
@@ -1633,7 +1633,7 @@ class WikiPage implements Page, IDBAccessObject {
                        $this->getParserCache(),
                        JobQueueGroup::singleton(),
                        MessageCache::singleton(),
-                       $wgContLang,
+                       MediaWikiServices::getInstance()->getContentLanguage(),
                        LoggerFactory::getInstance( 'SaveParse' )
                );
 
@@ -2301,14 +2301,13 @@ class WikiPage implements Page, IDBAccessObject {
         * @return string
         */
        protected function formatExpiry( $expiry ) {
-               global $wgContLang;
-
                if ( $expiry != 'infinity' ) {
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                        return wfMessage(
                                'protect-expiring',
-                               $wgContLang->timeanddate( $expiry, false, false ),
-                               $wgContLang->date( $expiry, false, false ),
-                               $wgContLang->time( $expiry, false, false )
+                               $contLang->timeanddate( $expiry, false, false ),
+                               $contLang->date( $expiry, false, false ),
+                               $contLang->time( $expiry, false, false )
                        )->inContentLanguage()->text();
                } else {
                        return wfMessage( 'protect-expiry-indefinite' )
@@ -2366,13 +2365,12 @@ class WikiPage implements Page, IDBAccessObject {
         * @return string
         */
        public function protectDescriptionLog( array $limit, array $expiry ) {
-               global $wgContLang;
-
                $protectDescriptionLog = '';
 
                foreach ( array_filter( $limit ) as $action => $restrictions ) {
                        $expiryText = $this->formatExpiry( $expiry[$action] );
-                       $protectDescriptionLog .= $wgContLang->getDirMark() .
+                       $protectDescriptionLog .=
+                               MediaWikiServices::getInstance()->getContentLanguage()->getDirMark() .
                                "[$action=$restrictions] ($expiryText)";
                }
 
@@ -2841,7 +2839,7 @@ class WikiPage implements Page, IDBAccessObject {
        public function commitRollback( $fromP, $summary, $bot,
                &$resultDetails, User $guser, $tags = null
        ) {
-               global $wgUseRCPatrol, $wgContLang;
+               global $wgUseRCPatrol;
 
                $dbw = wfGetDB( DB_MASTER );
 
@@ -2922,13 +2920,14 @@ class WikiPage implements Page, IDBAccessObject {
                $targetEditorForPublic = $target->getUser( RevisionRecord::FOR_PUBLIC );
 
                // Allow the custom summary to use the same args as the default message
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                $args = [
                        $targetEditorForPublic ? $targetEditorForPublic->getName() : null,
                        $currentEditorForPublic ? $currentEditorForPublic->getName() : null,
                        $s->rev_id,
-                       $wgContLang->timeanddate( wfTimestamp( TS_MW, $s->rev_timestamp ) ),
+                       $contLang->timeanddate( wfTimestamp( TS_MW, $s->rev_timestamp ) ),
                        $current->getId(),
-                       $wgContLang->timeanddate( $current->getTimestamp() )
+                       $contLang->timeanddate( $current->getTimestamp() )
                ];
                if ( $summary instanceof Message ) {
                        $summary = $summary->params( $args )->inContentLanguage()->text();
index 3c47de3..ae7ca6d 100644 (file)
@@ -135,14 +135,13 @@ class CoreParserFunctions {
        }
 
        public static function ns( $parser, $part1 = '' ) {
-               global $wgContLang;
                if ( intval( $part1 ) || $part1 == "0" ) {
                        $index = intval( $part1 );
                } else {
-                       $index = $wgContLang->getNsIndex( str_replace( ' ', '_', $part1 ) );
+                       $index = $parser->getContentLanguage()->getNsIndex( str_replace( ' ', '_', $part1 ) );
                }
                if ( $index !== false ) {
-                       return $wgContLang->getFormattedNsText( $index );
+                       return $parser->getContentLanguage()->getFormattedNsText( $index );
                } else {
                        return [ 'found' => false ];
                }
@@ -197,13 +196,11 @@ class CoreParserFunctions {
        }
 
        public static function lcfirst( $parser, $s = '' ) {
-               global $wgContLang;
-               return $wgContLang->lcfirst( $s );
+               return $parser->getContentLanguage()->lcfirst( $s );
        }
 
        public static function ucfirst( $parser, $s = '' ) {
-               global $wgContLang;
-               return $wgContLang->ucfirst( $s );
+               return $parser->getContentLanguage()->ucfirst( $s );
        }
 
        /**
@@ -212,8 +209,7 @@ class CoreParserFunctions {
         * @return string
         */
        public static function lc( $parser, $s = '' ) {
-               global $wgContLang;
-               return $parser->markerSkipCallback( $s, [ $wgContLang, 'lc' ] );
+               return $parser->markerSkipCallback( $s, [ $parser->getContentLanguage(), 'lc' ] );
        }
 
        /**
@@ -222,8 +218,7 @@ class CoreParserFunctions {
         * @return string
         */
        public static function uc( $parser, $s = '' ) {
-               global $wgContLang;
-               return $parser->markerSkipCallback( $s, [ $wgContLang, 'uc' ] );
+               return $parser->markerSkipCallback( $s, [ $parser->getContentLanguage(), 'uc' ] );
        }
 
        public static function localurl( $parser, $s = '', $arg = null ) {
@@ -742,7 +737,6 @@ class CoreParserFunctions {
         * @return string
         */
        public static function pagesincategory( $parser, $name = '', $arg1 = null, $arg2 = null ) {
-               global $wgContLang;
                static $magicWords = null;
                if ( is_null( $magicWords ) ) {
                        $magicWords = $parser->getMagicWordFactory()->newArray( [
@@ -772,7 +766,7 @@ class CoreParserFunctions {
                if ( !$title ) { # invalid title
                        return self::formatRaw( 0, $raw, $parser->getFunctionLang() );
                }
-               $wgContLang->findVariantLink( $name, $title, true );
+               $parser->getContentLanguage()->findVariantLink( $name, $title, true );
 
                // Normalize name for cache
                $name = $title->getDBkey();
index 2aefc03..de02861 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Parser
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Date formatter, recognises dates in plain text and formats them according to user preferences.
  * @todo preferences, OutputPage
@@ -131,9 +133,9 @@ class DateFormatter {
         * @return DateFormatter
         */
        public static function getInstance( Language $lang = null ) {
-               global $wgContLang, $wgMainCacheType;
+               global $wgMainCacheType;
 
-               $lang = $lang ?: $wgContLang;
+               $lang = $lang ?? MediaWikiServices::getInstance()->getContentLanguage();
                $cache = ObjectCache::getLocalServerInstance( $wgMainCacheType );
 
                static $dateFormatter = false;
index 66fd723..f4856be 100644 (file)
@@ -282,8 +282,6 @@ class LinkHolderArray {
                        return;
                }
 
-               global $wgContLang;
-
                $colours = [];
                $linkCache = MediaWikiServices::getInstance()->getLinkCache();
                $output = $this->parent->getOutput();
@@ -364,7 +362,7 @@ class LinkHolderArray {
                }
 
                # Do a second query for different language variants of links and categories
-               if ( $wgContLang->hasVariants() ) {
+               if ( $this->parent->getContentLanguage()->hasVariants() ) {
                        $this->doVariants( $colours );
                }
 
@@ -452,7 +450,6 @@ class LinkHolderArray {
         * @param array &$colours
         */
        protected function doVariants( &$colours ) {
-               global $wgContLang;
                $linkBatch = new LinkBatch();
                $variantMap = []; // maps $pdbkey_Variant => $keys (of link holders)
                $output = $this->parent->getOutput();
@@ -480,7 +477,8 @@ class LinkHolderArray {
                }
 
                // Now do the conversion and explode string to text of titles
-               $titlesAllVariants = $wgContLang->autoConvertToAllVariants( rtrim( $titlesToBeConverted, "\0" ) );
+               $titlesAllVariants = $this->parent->getContentLanguage()->
+                       autoConvertToAllVariants( rtrim( $titlesToBeConverted, "\0" ) );
                $allVariantsName = array_keys( $titlesAllVariants );
                foreach ( $titlesAllVariants as &$titlesVariant ) {
                        $titlesVariant = explode( "\0", $titlesVariant );
@@ -521,7 +519,7 @@ class LinkHolderArray {
                foreach ( $output->getCategoryLinks() as $category ) {
                        $categoryTitle = Title::makeTitleSafe( NS_CATEGORY, $category );
                        $linkBatch->addObj( $categoryTitle );
-                       $variants = $wgContLang->autoConvertToAllVariants( $category );
+                       $variants = $this->parent->getContentLanguage()->autoConvertToAllVariants( $category );
                        foreach ( $variants as $variant ) {
                                if ( $variant !== $category ) {
                                        $variantTitle = Title::makeTitleSafe( NS_CATEGORY, $variant );
index 4073864..b1e3928 100644 (file)
@@ -263,13 +263,25 @@ class Parser {
        /** @var MagicWordFactory */
        private $magicWordFactory;
 
+       /** @var Language */
+       private $contLang;
+
+       /** @var ParserFactory */
+       private $factory;
+
        /**
-        * @param array $conf
+        * @param array $conf See $wgParserConf documentation
         * @param MagicWordFactory|null $magicWordFactory
+        * @param Language|null $contLang Content language
+        * @param ParserFactory|null $factory
+        * @param string|null $urlProtocols As returned from wfUrlProtocols()
         */
-       public function __construct( $conf = [], MagicWordFactory $magicWordFactory = null ) {
+       public function __construct(
+               array $conf = [], MagicWordFactory $magicWordFactory = null, Language $contLang = null,
+               ParserFactory $factory = null, $urlProtocols = null
+       ) {
                $this->mConf = $conf;
-               $this->mUrlProtocols = wfUrlProtocols();
+               $this->mUrlProtocols = $urlProtocols ?? wfUrlProtocols();
                $this->mExtLinkBracketedRegex = '/\[(((?i)' . $this->mUrlProtocols . ')' .
                        self::EXT_LINK_ADDR .
                        self::EXT_LINK_URL_CLASS . '*)\p{Zs}*([^\]\\x00-\\x08\\x0a-\\x1F\\x{FFFD}]*?)\]/Su';
@@ -289,10 +301,12 @@ class Parser {
                }
                wfDebug( __CLASS__ . ": using preprocessor: {$this->mPreprocessorClass}\n" );
 
-               $this->magicWordFactory = $magicWordFactory;
-               if ( !$magicWordFactory ) {
-                       $this->magicWordFactory = MediaWikiServices::getInstance()->getMagicWordFactory();
-               }
+               $this->magicWordFactory = $magicWordFactory ??
+                       MediaWikiServices::getInstance()->getMagicWordFactory();
+
+               $this->contLang = $contLang ?? MediaWikiServices::getInstance()->getContentLanguage();
+
+               $this->factory = $factory ?? MediaWikiServices::getInstance()->getParserFactory();
        }
 
        /**
@@ -972,7 +986,7 @@ class Parser {
         * @return Language
         */
        public function getContentLanguage() {
-               return $this->magicWordFactory->getContentLanguage();
+               return $this->contLang;
        }
 
        /**
@@ -2154,7 +2168,7 @@ class Parser {
                if ( $useLinkPrefixExtension ) {
                        # Match the end of a line for a word that's not followed by whitespace,
                        # e.g. in the case of 'The Arab al[[Razi]]', 'al' will be matched
-                       $charset = $this->getContentLanguage()->linkPrefixCharset();
+                       $charset = $this->contLang->linkPrefixCharset();
                        $e2 = "/^((?>.*[^$charset]|))(.+)$/sDu";
                }
 
@@ -2710,11 +2724,10 @@ class Parser {
                                break;
                        case 'namespace':
                                $value = str_replace( '_', ' ',
-                                       $this->getContentLanguage()->getNsText( $this->mTitle->getNamespace() ) );
+                                       $this->contLang->getNsText( $this->mTitle->getNamespace() ) );
                                break;
                        case 'namespacee':
-                               $value = wfUrlencode( $this->getContentLanguage()->
-                                       getNsText( $this->mTitle->getNamespace() ) );
+                               $value = wfUrlencode( $this->contLang->getNsText( $this->mTitle->getNamespace() ) );
                                break;
                        case 'namespacenumber':
                                $value = $this->mTitle->getNamespace();
@@ -2863,7 +2876,7 @@ class Parser {
                if ( !$this->getRevisionObject() ) {
                        # Get the timezone-adjusted timestamp $mtts seconds in the future
                        $resThen = substr(
-                               $this->getContentLanguage()->userAdjust( wfTimestamp( TS_MW, time() + $mtts ), '' ),
+                               $this->contLang->userAdjust( wfTimestamp( TS_MW, time() + $mtts ), '' ),
                                $start,
                                $len
                        );
@@ -3415,7 +3428,7 @@ class Parser {
                        $function = $this->mFunctionSynonyms[1][$function];
                } else {
                        # Case insensitive functions
-                       $function = $this->getContentLanguage()->lc( $function );
+                       $function = $this->contLang->lc( $function );
                        if ( isset( $this->mFunctionSynonyms[0][$function] ) ) {
                                $function = $this->mFunctionSynonyms[0][$function];
                        } else {
@@ -4519,14 +4532,14 @@ class Parser {
         */
        private function pstPass2( $text, $user ) {
                # Note: This is the timestamp saved as hardcoded wikitext to the database, we use
-               # $this->getContentLanguage() here in order to give everyone the same signature and use the
-               # default one rather than the one selected in each user's preferences.  (see also T14815)
+               # $this->contLang here in order to give everyone the same signature and use the default one
+               # rather than the one selected in each user's preferences.  (see also T14815)
                $ts = $this->mOptions->getTimestamp();
                $timestamp = MWTimestamp::getLocalInstance( $ts );
                $ts = $timestamp->format( 'YmdHis' );
                $tzMsg = $timestamp->getTimezoneMessage()->inContentLanguage()->text();
 
-               $d = $this->getContentLanguage()->timeanddate( $ts, false, false ) . " ($tzMsg)";
+               $d = $this->contLang->timeanddate( $ts, false, false ) . " ($tzMsg)";
 
                # Variable replacement
                # Because mOutputType is OT_WIKI, this will only process {{subst:xxx}} type tags
@@ -4892,7 +4905,7 @@ class Parser {
                foreach ( $synonyms as $syn ) {
                        # Case
                        if ( !$sensitive ) {
-                               $syn = $this->getContentLanguage()->lc( $syn );
+                               $syn = $this->contLang->lc( $syn );
                        }
                        # Add leading hash
                        if ( !( $flags & self::SFH_NO_HASH ) ) {
@@ -5476,6 +5489,23 @@ class Parser {
                );
        }
 
+       /**
+        * @since 1.32
+        * @return array
+        */
+       public function getFunctionSynonyms() {
+               $this->firstCallInit();
+               return $this->mFunctionSynonyms;
+       }
+
+       /**
+        * @since 1.32
+        * @return string
+        */
+       public function getUrlProtocols() {
+               return $this->mUrlProtocols;
+       }
+
        /**
         * Replace transparent tags in $text with the values given by the callbacks.
         *
@@ -5736,8 +5766,7 @@ class Parser {
                        # Since this value will be saved into the parser cache, served
                        # to other users, and potentially even used inside links and such,
                        # it needs to be consistent for all visitors.
-                       $this->mRevisionTimestamp = $this->getContentLanguage()->userAdjust( $timestamp, '' );
-
+                       $this->mRevisionTimestamp = $this->contLang->userAdjust( $timestamp, '' );
                }
                return $this->mRevisionTimestamp;
        }
@@ -6192,9 +6221,8 @@ class Parser {
         * @return Parser A parser object that is not parsing anything
         */
        public function getFreshParser() {
-               global $wgParserConf;
                if ( $this->mInParse ) {
-                       return new $wgParserConf['class']( $wgParserConf );
+                       return $this->factory->create();
                } else {
                        return $this;
                }
index e6326e6..5e6081d 100644 (file)
@@ -294,7 +294,13 @@ class ParserCache {
         * @param string|null $cacheTime TS_MW timestamp when the cache was generated
         * @param int|null $revId Revision ID that was parsed
         */
-       public function save( $parserOutput, $page, $popts, $cacheTime = null, $revId = null ) {
+       public function save(
+               ParserOutput $parserOutput,
+               $page,
+               $popts,
+               $cacheTime = null,
+               $revId = null
+       ) {
                $expire = $parserOutput->getCacheExpiry();
                if ( $expire > 0 && !$this->mMemc instanceof EmptyBagOStuff ) {
                        $cacheTime = $cacheTime ?: wfTimestampNow();
diff --git a/includes/parser/ParserFactory.php b/includes/parser/ParserFactory.php
new file mode 100644 (file)
index 0000000..646f855
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Parser
+ */
+
+/**
+ * @since 1.32
+ */
+class ParserFactory {
+       /** @var array */
+       private $conf;
+
+       /** @var MagicWordFactory */
+       private $magicWordFactory;
+
+       /** @var Language */
+       private $contLang;
+
+       /** @var string */
+       private $urlProtocols;
+
+       /**
+        * @param array $conf See $wgParserConf documentation
+        * @param MagicWordFactory $magicWordFactory
+        * @param Language $contLang Content language
+        * @param string $urlProtocols As returned from wfUrlProtocols()
+        * @since 1.32
+        */
+       public function __construct(
+               array $conf, MagicWordFactory $magicWordFactory, Language $contLang, $urlProtocols
+       ) {
+               $this->conf = $conf;
+               $this->magicWordFactory = $magicWordFactory;
+               $this->contLang = $contLang;
+               $this->urlProtocols = $urlProtocols;
+       }
+
+       /**
+        * @return Parser
+        * @since 1.32
+        */
+       public function create() : Parser {
+               return new Parser( $this->conf, $this->magicWordFactory, $this->contLang, $this,
+                       $this->urlProtocols );
+       }
+}
index e4b064e..b30c116 100644 (file)
@@ -968,8 +968,8 @@ class ParserOptions {
         * @return ParserOptions
         */
        public static function newFromAnon() {
-               global $wgContLang;
-               return new ParserOptions( new User, $wgContLang );
+               return new ParserOptions( new User,
+                       MediaWikiServices::getInstance()->getContentLanguage() );
        }
 
        /**
@@ -1021,7 +1021,7 @@ class ParserOptions {
         * @param IContextSource|string|User|null $context
         *  - If an IContextSource, the options are initialized based on the source's User and Language.
         *  - If the string 'canonical', the options are initialized with an anonymous user and
-        *    $wgContLang.
+        *    the content language.
         *  - If a User or null, the options are initialized for that User (or $wgUser if null).
         *    'userlang' is taken from the $userLang parameter, defaulting to $wgLang if that is null.
         * @param Language|StubObject|null $userLang (see above)
@@ -1061,7 +1061,7 @@ class ParserOptions {
                        $wgMaxArticleSize, $wgMaxPPNodeCount, $wgMaxTemplateDepth, $wgMaxPPExpandDepth,
                        $wgCleanSignatures, $wgExternalLinkTarget, $wgExpensiveParserFunctionLimit,
                        $wgMaxGeneratedPPNodeCount, $wgDisableLangConversion, $wgDisableTitleConversion,
-                       $wgEnableMagicLinks, $wgContLang;
+                       $wgEnableMagicLinks;
 
                if ( self::$defaults === null ) {
                        // *UPDATE* ParserOptions::matches() if any of this changes as needed
@@ -1115,7 +1115,7 @@ class ParserOptions {
                        'numberheadings' => User::getDefaultOption( 'numberheadings' ),
                        'thumbsize' => User::getDefaultOption( 'thumbsize' ),
                        'stubthreshold' => 0,
-                       'userlang' => $wgContLang,
+                       'userlang' => MediaWikiServices::getInstance()->getContentLanguage(),
                ];
        }
 
@@ -1329,8 +1329,8 @@ class ParserOptions {
                if ( !is_null( $title ) ) {
                        $confstr .= $title->getPageLanguage()->getExtraHashOptions();
                } else {
-                       global $wgContLang;
-                       $confstr .= $wgContLang->getExtraHashOptions();
+                       $confstr .=
+                               MediaWikiServices::getInstance()->getContentLanguage()->getExtraHashOptions();
                }
 
                $confstr .= $wgRenderHashAppend;
index 4614402..d885e24 100644 (file)
@@ -24,6 +24,8 @@
  * @ingroup Parser
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * HTML sanitizer for MediaWiki
  * @ingroup Parser
@@ -1657,7 +1659,6 @@ class Sanitizer {
         * @return string Still normalized, without entities
         */
        public static function decodeCharReferencesAndNormalize( $text ) {
-               global $wgContLang;
                $text = preg_replace_callback(
                        self::CHAR_REFS_REGEX,
                        [ self::class, 'decodeCharReferencesCallback' ],
@@ -1667,7 +1668,7 @@ class Sanitizer {
                );
 
                if ( $count ) {
-                       return $wgContLang->normalize( $text );
+                       return MediaWikiServices::getInstance()->getContentLanguage()->normalize( $text );
                } else {
                        return $text;
                }
index 502f1e0..837e959 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 use Cdb\Reader as CdbReader;
+use MediaWiki\MediaWikiServices;
 
 /**
  * Functions to check passwords against a policy requirement
@@ -81,10 +82,12 @@ class PasswordPolicyChecks {
         * @return Status error if username and password match, and policy is true
         */
        public static function checkPasswordCannotMatchUsername( $policyVal, User $user, $password ) {
-               global $wgContLang;
                $status = Status::newGood();
                $username = $user->getName();
-               if ( $policyVal && $wgContLang->lc( $password ) === $wgContLang->lc( $username ) ) {
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               if (
+                       $policyVal && $contLang->lc( $password ) === $contLang->lc( $username )
+               ) {
                        $status->error( 'password-name-match' );
                }
                return $status;
index 830da06..07d8b0b 100644 (file)
@@ -66,7 +66,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
        /** @var Config */
        protected $config;
 
-       /** @var Language The wiki's content language, equivalent to $wgContLang. */
+       /** @var Language The wiki's content language. */
        protected $contLang;
 
        /** @var AuthManager */
index aa632c3..45c19eb 100644 (file)
@@ -1095,7 +1095,7 @@ MESSAGE;
                                                break;
                                        case 'styles':
                                                $styles = $content['styles'];
-                                               // We no longer seperate into media, they are all combined now with
+                                               // We no longer separate into media, they are all combined now with
                                                // custom media type groups into @media .. {} sections as part of the css string.
                                                // Module returns either an empty array or a numerical array with css strings.
                                                $strContent = isset( $styles['css'] ) ? implode( '', $styles['css'] ) : '';
@@ -1298,8 +1298,8 @@ MESSAGE;
        }
 
        /**
-        * Returns a JS call to mw.loader.state, which sets the state of a
-        * module or modules to a given value. Has two calling conventions:
+        * Returns a JS call to mw.loader.state, which sets the state of one
+        * ore more modules to a given value. Has two calling conventions:
         *
         *    - ResourceLoader::makeLoaderStateScript( $name, $state ):
         *         Set the state of a single module called $name to $state
@@ -1307,24 +1307,19 @@ MESSAGE;
         *    - ResourceLoader::makeLoaderStateScript( [ $name => $state, ... ] ):
         *         Set the state of modules with the given names to the given states
         *
-        * @param string $name
+        * @param array|string $states
         * @param string|null $state
         * @return string JavaScript code
         */
-       public static function makeLoaderStateScript( $name, $state = null ) {
-               if ( is_array( $name ) ) {
-                       return Xml::encodeJsCall(
-                               'mw.loader.state',
-                               [ $name ],
-                               self::inDebugMode()
-                       );
-               } else {
-                       return Xml::encodeJsCall(
-                               'mw.loader.state',
-                               [ $name, $state ],
-                               self::inDebugMode()
-                       );
+       public static function makeLoaderStateScript( $states, $state = null ) {
+               if ( !is_array( $states ) ) {
+                       $states = [ $states => $state ];
                }
+               return Xml::encodeJsCall(
+                       'mw.loader.state',
+                       [ $states ],
+                       self::inDebugMode()
+               );
        }
 
        /**
@@ -1484,16 +1479,33 @@ MESSAGE;
        }
 
        /**
-        * Wraps JavaScript code to run after startup and base modules.
+        * Wraps JavaScript code to run after the startup module.
         *
         * @param string $script JavaScript code
         * @return string JavaScript code
         */
        public static function makeLoaderConditionalScript( $script ) {
+               // Adds a function to lazy-created RLQ
                return '(window.RLQ=window.RLQ||[]).push(function(){' .
                        trim( $script ) . '});';
        }
 
+       /**
+        * Wraps JavaScript code to run after a required module.
+        *
+        * @since 1.32
+        * @param string|string[] $modules Module name(s)
+        * @param string $script JavaScript code
+        * @return string JavaScript code
+        */
+       public static function makeInlineCodeWithModule( $modules, $script ) {
+               // Adds an array to lazy-created RLQ
+               return '(window.RLQ=window.RLQ||[]).push(['
+                       . json_encode( $modules ) . ','
+                       . 'function(){' . trim( $script ) . '}'
+                       . ']);';
+       }
+
        /**
         * Returns an HTML script tag that runs given JS code after startup and base modules.
         *
index 7018f16..3bf309d 100644 (file)
@@ -129,9 +129,8 @@ abstract class ResourceLoaderModule implements LoggerAwareInterface {
         * @return bool
         */
        public function getFlip( $context ) {
-               global $wgContLang;
-
-               return $wgContLang->getDir() !== $context->getDirection();
+               return MediaWikiServices::getInstance()->getContentLanguage()->getDir() !==
+                       $context->getDirection();
        }
 
        /**
index 4228a45..a3f7b5b 100644 (file)
@@ -33,6 +33,7 @@ trait ResourceLoaderOOUIModule {
                'icons-alerts',
                'icons-content',
                'icons-editing-advanced',
+               'icons-editing-citation',
                'icons-editing-core',
                'icons-editing-list',
                'icons-editing-styling',
index a4fd712..2457fe8 100644 (file)
@@ -20,6 +20,8 @@
  * @author Roan Kattouw
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Module for ResourceLoader initialization.
  *
@@ -53,7 +55,6 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        return $this->configVars[$hash];
                }
 
-               global $wgContLang;
                $conf = $this->getConfig();
 
                // We can't use Title::newMainPage() if 'mainpage' is in
@@ -71,10 +72,11 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                 * - wgNamespaceIds: Key-value pairs of all localized, canonical and aliases for namespaces.
                 * - wgCaseSensitiveNamespaces: Array of namespaces that are case-sensitive.
                 */
-               $namespaceIds = $wgContLang->getNamespaceIds();
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               $namespaceIds = $contLang->getNamespaceIds();
                $caseSensitiveNamespaces = [];
                foreach ( MWNamespace::getCanonicalNamespaces() as $index => $name ) {
-                       $namespaceIds[$wgContLang->lc( $name )] = $index;
+                       $namespaceIds[$contLang->lc( $name )] = $index;
                        if ( !MWNamespace::isCapitalized( $index ) ) {
                                $caseSensitiveNamespaces[] = $index;
                        }
@@ -101,13 +103,13 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        'wgServer' => $conf->get( 'Server' ),
                        'wgServerName' => $conf->get( 'ServerName' ),
                        'wgUserLanguage' => $context->getLanguage(),
-                       'wgContentLanguage' => $wgContLang->getCode(),
+                       'wgContentLanguage' => $contLang->getCode(),
                        'wgTranslateNumerals' => $conf->get( 'TranslateNumerals' ),
                        'wgVersion' => $conf->get( 'Version' ),
                        'wgEnableAPI' => true, // Deprecated since MW 1.32
                        'wgEnableWriteAPI' => true, // Deprecated since MW 1.32
                        'wgMainPageTitle' => $mainPage->getPrefixedText(),
-                       'wgFormattedNamespaces' => $wgContLang->getFormattedNamespaces(),
+                       'wgFormattedNamespaces' => $contLang->getFormattedNamespaces(),
                        'wgNamespaceIds' => $namespaceIds,
                        'wgContentNamespaces' => MWNamespace::getContentNamespaces(),
                        'wgSiteName' => $conf->get( 'Sitename' ),
@@ -319,17 +321,6 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                return true;
        }
 
-       /**
-        * @param ResourceLoaderContext $context
-        * @return array
-        */
-       public function getPreloadLinks( ResourceLoaderContext $context ) {
-               $url = $this->getBaseModulesUrl( $context );
-               return [
-                       $url => [ 'as' => 'script' ]
-               ];
-       }
-
        /**
         * Internal modules used by ResourceLoader that cannot be depended on.
         *
@@ -353,10 +344,18 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                return [];
        }
 
+       /**
+        * @private For internal use by SpecialJavaScriptTest
+        * @since 1.32
+        * @return array
+        */
+       public function getBaseModulesInternal() {
+               return $this->getBaseModules();
+       }
+
        /**
         * Base modules implicitly available to all modules.
         *
-        * @since 1.32
         * @return array
         */
        private function getBaseModules() {
@@ -370,25 +369,6 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                return $baseModules;
        }
 
-       /**
-        * Get the load URL of the startup modules.
-        *
-        * This is a helper for getScript().
-        *
-        * @param ResourceLoaderContext $context
-        * @return string
-        */
-       private function getBaseModulesUrl( ResourceLoaderContext $context ) {
-               $rl = $context->getResourceLoader();
-               $derivative = new DerivativeResourceLoaderContext( $context );
-               $derivative->setModules( $this->getBaseModules() );
-               $derivative->setOnly( 'scripts' );
-               // Must setModules() before makeVersionQuery()
-               $derivative->setVersion( $rl->makeVersionQuery( $derivative ) );
-
-               return $rl->createLoaderURL( 'local', $derivative );
-       }
-
        /**
         * @param ResourceLoaderContext $context
         * @return string JavaScript code
@@ -399,35 +379,43 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        return '/* Requires only=script */';
                }
 
-               $out = file_get_contents( "$IP/resources/src/startup/startup.js" );
+               $startupCode = file_get_contents( "$IP/resources/src/startup/startup.js" );
 
-               // Keep in sync with maintenance/jsduck/eg-iframe.html and,
-               // keep in sync with 'fileHashes' in StartUpModule::getDefinitionSummary().
+               // The files read here MUST be kept in sync with maintenance/jsduck/eg-iframe.html,
+               // and MUST be considered by 'fileHashes' in StartUpModule::getDefinitionSummary().
                $mwLoaderCode = file_get_contents( "$IP/resources/src/startup/mediawiki.js" ) .
                        file_get_contents( "$IP/resources/src/startup/mediawiki.requestIdleCallback.js" );
                if ( $context->getDebug() ) {
                        $mwLoaderCode .= file_get_contents( "$IP/resources/src/startup/mediawiki.log.js" );
                }
 
-               $pairs = array_map( function ( $value ) {
+               $mapToJson = function ( $value ) {
                        $value = FormatJson::encode( $value, ResourceLoader::inDebugMode(), FormatJson::ALL_OK );
                        // Fix indentation
                        $value = str_replace( "\n", "\n\t", $value );
                        return $value;
-               }, [
+               };
+
+               // Perform replacements for mediawiki.js
+               $mwLoaderCode = strtr( $mwLoaderCode, [
+                       '$VARS.baseModules' => $mapToJson( $this->getBaseModules() ),
+               ] );
+
+               // Perform replacements for startup.js
+               $pairs = array_map( $mapToJson, [
                        '$VARS.wgLegacyJavaScriptGlobals' => $this->getConfig()->get( 'LegacyJavaScriptGlobals' ),
                        '$VARS.configuration' => $this->getConfigSettings( $context ),
-                       // This url may be preloaded. See getPreloadLinks().
-                       '$VARS.baseModulesUri' => $this->getBaseModulesUrl( $context ),
                ] );
+               // Raw JavaScript code (not for JSON)
                $pairs['$CODE.registrations();'] = str_replace(
                        "\n",
                        "\n\t",
                        trim( $this->getModuleRegistrations( $context ) )
                );
                $pairs['$CODE.defineLoader();'] = $mwLoaderCode;
+               $startupCode = strtr( $startupCode, $pairs );
 
-               return strtr( $out, $pairs );
+               return $startupCode;
        }
 
        /**
index 30c2271..e3088c1 100644 (file)
@@ -232,10 +232,8 @@ abstract class SearchEngine {
         * @return string
         */
        public function normalizeText( $string ) {
-               global $wgContLang;
-
                // Some languages such as Chinese require word segmentation
-               return $wgContLang->segmentByWord( $string );
+               return MediaWikiServices::getInstance()->getContentLanguage()->segmentByWord( $string );
        }
 
        /**
@@ -257,8 +255,8 @@ abstract class SearchEngine {
         * @return SearchNearMatcher
         */
        public function getNearMatcher( Config $config ) {
-               global $wgContLang;
-               return new SearchNearMatcher( $config, $wgContLang );
+               return new SearchNearMatcher( $config,
+                       MediaWikiServices::getInstance()->getContentLanguage() );
        }
 
        /**
@@ -415,8 +413,6 @@ abstract class SearchEngine {
                $withAllKeyword = true,
                $withPrefixSearchExtractNamespaceHook = false
        ) {
-               global $wgContLang;
-
                $parsed = $query;
                if ( strpos( $query, ':' ) === false ) { // nothing to do
                        return false;
@@ -445,7 +441,7 @@ abstract class SearchEngine {
 
                if ( !$allQuery && strpos( $query, ':' ) !== false ) {
                        $prefix = str_replace( ' ', '_', substr( $query, 0, strpos( $query, ':' ) ) );
-                       $index = $wgContLang->getNsIndex( $prefix );
+                       $index = MediaWikiServices::getInstance()->getContentLanguage()->getNsIndex( $prefix );
                        if ( $index !== false ) {
                                $extractedNamespace = [ $index ];
                                $parsed = substr( $query, strlen( $prefix ) + 1 );
@@ -625,9 +621,8 @@ abstract class SearchEngine {
                $results = $this->completionSearchBackendOverfetch( $search );
                $fallbackLimit = 1 + $this->limit - $results->getSize();
                if ( $fallbackLimit > 0 ) {
-                       global $wgContLang;
-
-                       $fallbackSearches = $wgContLang->autoConvertToAllVariants( $search );
+                       $fallbackSearches = MediaWikiServices::getInstance()->getContentLanguage()->
+                               autoConvertToAllVariants( $search );
                        $fallbackSearches = array_diff( array_unique( $fallbackSearches ), [ $search ] );
 
                        foreach ( $fallbackSearches as $fbs ) {
index 2cec241..5dfc4df 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Search
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Highlight bits of wikitext
  *
@@ -49,7 +51,7 @@ class SearchHighlighter {
         * @return string
         */
        public function highlightText( $text, $terms, $contextlines, $contextchars ) {
-               global $wgContLang, $wgSearchHighlightBoundaries;
+               global $wgSearchHighlightBoundaries;
 
                if ( $text == '' ) {
                        return '';
@@ -84,7 +86,10 @@ class SearchHighlighter {
                                                if ( $key == 2 ) {
                                                        // see if this is an image link
                                                        $ns = substr( $val[0], 2, -1 );
-                                                       if ( $wgContLang->getNsIndex( $ns ) != NS_FILE ) {
+                                                       if (
+                                                               MediaWikiServices::getInstance()->getContentLanguage()->
+                                                               getNsIndex( $ns ) != NS_FILE
+                                                       ) {
                                                                break;
                                                        }
 
@@ -313,9 +318,10 @@ class SearchHighlighter {
         * @return string
         */
        function caseCallback( $matches ) {
-               global $wgContLang;
                if ( strlen( $matches[0] ) > 1 ) {
-                       return '[' . $wgContLang->lc( $matches[0] ) . $wgContLang->uc( $matches[0] ) . ']';
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+                       return '[' . $contLang->lc( $matches[0] ) .
+                               $contLang->uc( $matches[0] ) . ']';
                } else {
                        return $matches[0];
                }
@@ -480,9 +486,8 @@ class SearchHighlighter {
                if ( $colon === false ) {
                        return $matches[2]; // replace with caption
                }
-               global $wgContLang;
                $ns = substr( $matches[1], 0, $colon );
-               $index = $wgContLang->getNsIndex( $ns );
+               $index = MediaWikiServices::getInstance()->getContentLanguage()->getNsIndex( $ns );
                if ( $index !== false && ( $index == NS_FILE || $index == NS_CATEGORY ) ) {
                        return $matches[0]; // return the whole thing
                } else {
@@ -503,8 +508,6 @@ class SearchHighlighter {
         * @return string
         */
        public function highlightSimple( $text, $terms, $contextlines, $contextchars ) {
-               global $wgContLang;
-
                $lines = explode( "\n", $text );
 
                $terms = implode( '|', $terms );
@@ -514,6 +517,7 @@ class SearchHighlighter {
                $lineno = 0;
 
                $extract = "";
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                foreach ( $lines as $line ) {
                        if ( 0 == $contextlines ) {
                                break;
@@ -525,12 +529,12 @@ class SearchHighlighter {
                        }
                        --$contextlines;
                        // truncate function changes ... to relevant i18n message.
-                       $pre = $wgContLang->truncateForVisual( $m[1], - $contextchars, '...', false );
+                       $pre = $contLang->truncateForVisual( $m[1], - $contextchars, '...', false );
 
                        if ( count( $m ) < 3 ) {
                                $post = '';
                        } else {
-                               $post = $wgContLang->truncateForVisual( $m[3], $contextchars, '...', false );
+                               $post = $contLang->truncateForVisual( $m[3], $contextchars, '...', false );
                        }
 
                        $found = $m[2];
index 289f925..0e85f9d 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Search
  */
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IResultWrapper;
 
 /**
@@ -133,7 +134,6 @@ class SearchMssql extends SearchDatabase {
         * @return string
         */
        private function parseQuery( $filteredText, $fulltext ) {
-               global $wgContLang;
                $lc = $this->legalSearchChars( self::CHARS_NO_SYNTAX );
                $this->searchTerms = [];
 
@@ -144,7 +144,8 @@ class SearchMssql extends SearchDatabase {
                if ( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
                        $filteredText, $m, PREG_SET_ORDER ) ) {
                        foreach ( $m as $terms ) {
-                               $q[] = $terms[1] . $wgContLang->normalizeForSearch( $terms[2] );
+                               $q[] = $terms[1] . MediaWikiServices::getInstance()->getContentLanguage()->
+                                       normalizeForSearch( $terms[2] );
 
                                if ( !empty( $terms[3] ) ) {
                                        $regexp = preg_quote( $terms[3], '/' );
index 6253b55..806db7d 100644 (file)
@@ -24,6 +24,8 @@
  * @ingroup Search
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Search engine hook for MySQL 4+
  * @ingroup Search
@@ -43,8 +45,6 @@ class SearchMySQL extends SearchDatabase {
         * @return array
         */
        private function parseQuery( $filteredText, $fulltext ) {
-               global $wgContLang;
-
                $lc = $this->legalSearchChars( self::CHARS_NO_SYNTAX ); // Minus syntax chars (" and *)
                $searchon = '';
                $this->searchTerms = [];
@@ -76,7 +76,8 @@ class SearchMySQL extends SearchDatabase {
 
                                // Some languages such as Serbian store the input form in the search index,
                                // so we may need to search for matches in multiple writing system variants.
-                               $convertedVariants = $wgContLang->autoConvertToAllVariants( $term );
+                               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+                               $convertedVariants = $contLang->autoConvertToAllVariants( $term );
                                if ( is_array( $convertedVariants ) ) {
                                        $variants = array_unique( array_values( $convertedVariants ) );
                                } else {
@@ -87,9 +88,7 @@ class SearchMySQL extends SearchDatabase {
                                // around problems with minimum lengths and encoding in MySQL's
                                // fulltext engine.
                                // For Chinese this also inserts spaces between adjacent Han characters.
-                               $strippedVariants = array_map(
-                                       [ $wgContLang, 'normalizeForSearch' ],
-                                       $variants );
+                               $strippedVariants = array_map( [ $contLang, 'normalizeForSearch' ], $variants );
 
                                // Some languages such as Chinese force all variants to a canonical
                                // form when stripping to the low-level search index, so to be sure
@@ -134,10 +133,8 @@ class SearchMySQL extends SearchDatabase {
        }
 
        private function regexTerm( $string, $wildcard ) {
-               global $wgContLang;
-
                $regex = preg_quote( $string, '/' );
-               if ( $wgContLang->hasWordBreaks() ) {
+               if ( MediaWikiServices::getInstance()->getContentLanguage()->hasWordBreaks() ) {
                        if ( $wildcard ) {
                                // Don't cut off the final bit!
                                $regex = "\b$regex";
@@ -389,8 +386,6 @@ class SearchMySQL extends SearchDatabase {
         * @return mixed|string
         */
        function normalizeText( $string ) {
-               global $wgContLang;
-
                $out = parent::normalizeText( $string );
 
                // MySQL fulltext index doesn't grok utf-8, so we
@@ -398,7 +393,7 @@ class SearchMySQL extends SearchDatabase {
                $out = preg_replace_callback(
                        "/([\\xc0-\\xff][\\x80-\\xbf]*)/",
                        [ $this, 'stripForSearchCallback' ],
-                       $wgContLang->lc( $out ) );
+                       MediaWikiServices::getInstance()->getContentLanguage()->lc( $out ) );
 
                // And to add insult to injury, the default indexing
                // ignores short words... Pad them so we can pass them
index 6d7e988..9cd245a 100644 (file)
@@ -24,6 +24,8 @@
  * @ingroup Search
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Search engine hook base class for Oracle (ConText).
  * @ingroup Search
@@ -173,7 +175,6 @@ class SearchOracle extends SearchDatabase {
         * @return string
         */
        private function parseQuery( $filteredText, $fulltext ) {
-               global $wgContLang;
                $lc = $this->legalSearchChars( self::CHARS_NO_SYNTAX );
                $this->searchTerms = [];
 
@@ -185,7 +186,8 @@ class SearchOracle extends SearchDatabase {
                        foreach ( $m as $terms ) {
                                // Search terms in all variant forms, only
                                // apply on wiki with LanguageConverter
-                               $temp_terms = $wgContLang->autoConvertToAllVariants( $terms[2] );
+                               $temp_terms = MediaWikiServices::getInstance()->getContentLanguage()->
+                                       autoConvertToAllVariants( $terms[2] );
                                if ( is_array( $temp_terms ) ) {
                                        $temp_terms = array_unique( array_values( $temp_terms ) );
                                        foreach ( $temp_terms as $t ) {
@@ -212,8 +214,7 @@ class SearchOracle extends SearchDatabase {
        }
 
        private function escapeTerm( $t ) {
-               global $wgContLang;
-               $t = $wgContLang->normalizeForSearch( $t );
+               $t = MediaWikiServices::getInstance()->getContentLanguage()->normalizeForSearch( $t );
                $t = isset( $this->reservedWords[strtoupper( $t )] ) ? '{' . $t . '}' : $t;
                $t = preg_replace( '/^"(.*)"$/', '($1)', $t );
                $t = preg_replace( '/([-&|])/', '\\\\$1', $t );
index e82779a..14d5c4b 100644 (file)
@@ -81,7 +81,7 @@ class SearchResultSet implements Countable, IteratorAggregate {
         *  results available.
         */
        public function __construct( $containedSyntax = false, $hasMoreResults = false ) {
-               if ( static::class === __CLASS__ ) {
+               if ( static::class === self::class ) {
                        // This class will eventually be abstract. SearchEngine implementations
                        // already have to extend this class anyways to provide the actual
                        // search results.
index 0ed477a..0bc2d37 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Search
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Search engine hook for SQLite
  * @ingroup Search
@@ -43,7 +45,6 @@ class SearchSqlite extends SearchDatabase {
         * @return string
         */
        private function parseQuery( $filteredText, $fulltext ) {
-               global $wgContLang;
                $lc = $this->legalSearchChars( self::CHARS_NO_SYNTAX ); // Minus syntax chars (" and *)
                $searchon = '';
                $this->searchTerms = [];
@@ -70,7 +71,8 @@ class SearchSqlite extends SearchDatabase {
 
                                // Some languages such as Serbian store the input form in the search index,
                                // so we may need to search for matches in multiple writing system variants.
-                               $convertedVariants = $wgContLang->autoConvertToAllVariants( $term );
+                               $convertedVariants = MediaWikiServices::getInstance()->getContentLanguage()->
+                                       autoConvertToAllVariants( $term );
                                if ( is_array( $convertedVariants ) ) {
                                        $variants = array_unique( array_values( $convertedVariants ) );
                                } else {
@@ -82,7 +84,8 @@ class SearchSqlite extends SearchDatabase {
                                // fulltext engine.
                                // For Chinese this also inserts spaces between adjacent Han characters.
                                $strippedVariants = array_map(
-                                       [ $wgContLang, 'normalizeForSearch' ],
+                                       [ MediaWikiServices::getInstance()->getContentLanguage(),
+                                               'normalizeForSearch' ],
                                        $variants );
 
                                // Some languages such as Chinese force all variants to a canonical
@@ -123,10 +126,8 @@ class SearchSqlite extends SearchDatabase {
        }
 
        private function regexTerm( $string, $wildcard ) {
-               global $wgContLang;
-
                $regex = preg_quote( $string, '/' );
-               if ( $wgContLang->hasWordBreaks() ) {
+               if ( MediaWikiServices::getInstance()->getContentLanguage()->hasWordBreaks() ) {
                        if ( $wildcard ) {
                                // Don't cut off the final bit!
                                $regex = "\b$regex";
@@ -171,13 +172,12 @@ class SearchSqlite extends SearchDatabase {
        }
 
        protected function searchInternal( $term, $fulltext ) {
-               global $wgContLang;
-
                if ( !$this->fulltextSearchSupported() ) {
                        return null;
                }
 
-               $filteredTerm = $this->filter( $wgContLang->lc( $term ) );
+               $filteredTerm =
+                       $this->filter( MediaWikiServices::getInstance()->getContentLanguage()->lc( $term ) );
                $resultSet = $this->db->query( $this->getQuery( $filteredTerm, $fulltext ) );
 
                $total = null;
index 58163c6..f3bfb2b 100644 (file)
@@ -612,7 +612,7 @@ final class SessionBackend {
         * Save the session
         *
         * Update both the backend data and the associated WebRequest(s) to
-        * reflect the state of the the SessionBackend. This might include
+        * reflect the state of the SessionBackend. This might include
         * persisting or unpersisting the session.
         *
         * @param bool $closing Whether the session is being closed
index ba075e0..1f015b5 100644 (file)
@@ -521,7 +521,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI
                if ( strlen( $hash ) < 32 ) {
                        // Should never happen, even md5 is 128 bits
                        // @codeCoverageIgnoreStart
-                       throw new \UnexpectedValueException( 'Hash fuction returned less than 128 bits' );
+                       throw new \UnexpectedValueException( 'Hash function returned less than 128 bits' );
                        // @codeCoverageIgnoreEnd
                }
                if ( strlen( $hash ) >= 40 ) {
index ff2a9ea..83d02a0 100644 (file)
@@ -1306,7 +1306,7 @@ abstract class Skin extends ContextSource {
                                [
                                        'checkKeys' => [
                                                // Unless there is both no exact $code override nor an i18n definition
-                                               // in the the software, the only MediaWiki page to check is for $code.
+                                               // in the software, the only MediaWiki page to check is for $code.
                                                $msgCache->getCheckKey( $this->getLanguage()->getCode() )
                                        ],
                                        'lockTSE' => 30
@@ -1526,7 +1526,7 @@ abstract class Skin extends ContextSource {
         *   should fall back to the next notice in its sequence
         */
        private function getCachedNotice( $name ) {
-               global $wgRenderHashAppend, $wgContLang;
+               global $wgRenderHashAppend;
 
                $needParse = false;
 
@@ -1559,12 +1559,13 @@ abstract class Skin extends ContextSource {
                        }
                );
 
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                return Html::rawElement(
                        'div',
                        [
                                'id' => 'localNotice',
-                               'lang' => $wgContLang->getHtmlCode(),
-                               'dir' => $wgContLang->getDir()
+                               'lang' => $contLang->getHtmlCode(),
+                               'dir' => $contLang->getDir()
                        ],
                        $parsed
                );
index 7b2d79e..ceebf12 100644 (file)
@@ -268,7 +268,7 @@ class SkinTemplate extends Skin {
         * @return QuickTemplate The template to be executed by outputPage
         */
        protected function prepareQuickTemplate() {
-               global $wgContLang, $wgScript, $wgStylePath, $wgMimeType, $wgJsMimeType,
+               global $wgScript, $wgStylePath, $wgMimeType, $wgJsMimeType,
                        $wgSitename, $wgLogo, $wgMaxCredits,
                        $wgShowCreditsIfMax, $wgArticlePath,
                        $wgScriptPath, $wgServer;
@@ -363,7 +363,11 @@ class SkinTemplate extends Skin {
                // heading for the page title. Defaults to empty string.
                $tpl->set( 'prebodyhtml', '' );
 
-               if ( $userLangCode !== $wgContLang->getHtmlCode() || $userLangDir !== $wgContLang->getDir() ) {
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               if (
+                       $userLangCode !== $contLang->getHtmlCode() ||
+                       $userLangDir !== $contLang->getDir()
+               ) {
                        $escUserlang = htmlspecialchars( $userLangCode );
                        $escUserdir = htmlspecialchars( $userLangDir );
                        // Attributes must be in double quotes because htmlspecialchars() doesn't
@@ -783,9 +787,8 @@ class SkinTemplate extends Skin {
                if ( $msg->exists() ) {
                        $text = $msg->text();
                } else {
-                       global $wgContLang;
-                       $text = $wgContLang->getConverter()->convertNamespace(
-                               MWNamespace::getSubject( $title->getNamespace() ) );
+                       $text = MediaWikiServices::getInstance()->getContentLanguage()->getConverter()->
+                               convertNamespace( MWNamespace::getSubject( $title->getNamespace() ) );
                }
 
                // Avoid PHP 7.1 warning of passing $this by reference
index 58944b4..caa039b 100644 (file)
@@ -780,26 +780,20 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                $out = $this->getOutput();
                if ( $this->isStructuredFilterUiEnabled() && !$this->including() ) {
                        $jsData = $this->getStructuredFilterJsData();
-
                        $messages = [];
                        foreach ( $jsData['messageKeys'] as $key ) {
                                $messages[$key] = $this->msg( $key )->plain();
                        }
-                       $out->addBodyClasses( 'mw-rcfilters-enabled' );
 
+                       $out->addBodyClasses( 'mw-rcfilters-enabled' );
                        $collapsed = $this->getUser()->getBoolOption( static::$collapsedPreferenceName );
                        if ( $collapsed ) {
                                $out->addBodyClasses( 'mw-rcfilters-collapsed' );
                        }
 
-                       $out->addHTML(
-                               ResourceLoader::makeInlineScript(
-                                       ResourceLoader::makeMessageSetScript( $messages ),
-                                       $out->getCSPNonce()
-                               )
-                       );
-
+                       // These config and message exports should be moved into a ResourceLoader data module (T201574)
                        $out->addJsConfigVars( 'wgStructuredChangeFilters', $jsData['groups'] );
+                       $out->addJsConfigVars( 'wgStructuredChangeFiltersMessages', $messages );
                        $out->addJsConfigVars( 'wgStructuredChangeFiltersCollapsedState', $collapsed );
 
                        $out->addJsConfigVars(
index 7d6db05..ad66e31 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup SpecialPage
  */
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
 
@@ -50,12 +51,11 @@ abstract class PageQueryPage extends QueryPage {
         * @return string
         */
        public function formatResult( $skin, $row ) {
-               global $wgContLang;
-
                $title = Title::makeTitleSafe( $row->namespace, $row->title );
 
                if ( $title instanceof Title ) {
-                       $text = $wgContLang->convert( $title->getPrefixedText() );
+                       $text = MediaWikiServices::getInstance()->getContentLanguage()->
+                               convert( $title->getPrefixedText() );
                        return $this->getLinkRenderer()->makeLink( $title, $text );
                } else {
                        return Html::element( 'span', [ 'class' => 'mw-invalidtitle' ],
index 96f50bf..16a6d30 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup SpecialPage
  */
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
 use Wikimedia\Rdbms\DBError;
@@ -690,8 +691,6 @@ abstract class QueryPage extends SpecialPage {
         * @param int $offset Paging offset
         */
        protected function outputResults( $out, $skin, $dbr, $res, $num, $offset ) {
-               global $wgContLang;
-
                if ( $num > 0 ) {
                        $html = [];
                        if ( !$this->listoutput ) {
@@ -726,7 +725,7 @@ abstract class QueryPage extends SpecialPage {
                        }
 
                        $html = $this->listoutput
-                               ? $wgContLang->listToText( $html )
+                               ? MediaWikiServices::getInstance()->getContentLanguage()->listToText( $html )
                                : implode( '', $html );
 
                        $out->addHTML( $html );
index 7a39b3c..13287bd 100644 (file)
@@ -628,10 +628,9 @@ class SpecialPage implements MessageLocalizer {
         * @param string $summaryMessageKey Message key of the summary
         */
        function outputHeader( $summaryMessageKey = '' ) {
-               global $wgContLang;
-
                if ( $summaryMessageKey == '' ) {
-                       $msg = $wgContLang->lc( $this->getName() ) . '-summary';
+                       $msg = MediaWikiServices::getInstance()->getContentLanguage()->lc( $this->getName() ) .
+                               '-summary';
                } else {
                        $msg = $summaryMessageKey;
                }
@@ -832,8 +831,9 @@ class SpecialPage implements MessageLocalizer {
                        return;
                }
 
-               global $wgContLang;
-               $msg = $this->msg( $wgContLang->lc( $this->getName() ) . '-helppage' );
+               $msg = $this->msg(
+                       MediaWikiServices::getInstance()->getContentLanguage()->lc( $this->getName() ) .
+                       '-helppage' );
 
                if ( !$msg->isDisabled() ) {
                        $helpUrl = Skin::makeUrl( $msg->plain() );
index b3b63b0..9645811 100644 (file)
@@ -22,6 +22,7 @@
  * @defgroup SpecialPage SpecialPage
  */
 use MediaWiki\Linker\LinkRenderer;
+use MediaWiki\MediaWikiServices;
 use Wikimedia\ObjectFactory;
 
 /**
@@ -270,9 +271,9 @@ class SpecialPageFactory {
         * @return array
         */
        private static function getAliasList() {
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                if ( is_null( self::$aliases ) ) {
-                       global $wgContLang;
-                       $aliases = $wgContLang->getSpecialPageAliases();
+                       $aliases = $contLang->getSpecialPageAliases();
                        $pageList = self::getPageList();
 
                        self::$aliases = [];
@@ -280,7 +281,7 @@ class SpecialPageFactory {
 
                        // Force every canonical name to be an alias for itself.
                        foreach ( $pageList as $name => $stuff ) {
-                               $caseFoldedAlias = $wgContLang->caseFold( $name );
+                               $caseFoldedAlias = $contLang->caseFold( $name );
                                self::$aliases[$caseFoldedAlias] = $name;
                                $keepAlias[$caseFoldedAlias] = 'canonical';
                        }
@@ -290,7 +291,7 @@ class SpecialPageFactory {
                                foreach ( $aliases as $realName => $aliasList ) {
                                        $aliasList = array_values( $aliasList );
                                        foreach ( $aliasList as $i => $alias ) {
-                                               $caseFoldedAlias = $wgContLang->caseFold( $alias );
+                                               $caseFoldedAlias = $contLang->caseFold( $alias );
 
                                                if ( isset( self::$aliases[$caseFoldedAlias] ) &&
                                                        $realName === self::$aliases[$caseFoldedAlias]
@@ -327,10 +328,10 @@ class SpecialPageFactory {
         * @return array Array( String, String|null ), or array( null, null ) if the page is invalid
         */
        public static function resolveAlias( $alias ) {
-               global $wgContLang;
                $bits = explode( '/', $alias, 2 );
 
-               $caseFoldedAlias = $wgContLang->caseFold( $bits[0] );
+               $caseFoldedAlias = MediaWikiServices::getInstance()->getContentLanguage()->
+                       caseFold( $bits[0] );
                $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
                $aliases = self::getAliasList();
                if ( isset( $aliases[$caseFoldedAlias] ) ) {
@@ -646,15 +647,15 @@ class SpecialPageFactory {
         * @return string
         */
        public static function getLocalNameFor( $name, $subpage = false ) {
-               global $wgContLang;
-               $aliases = $wgContLang->getSpecialPageAliases();
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               $aliases = $contLang->getSpecialPageAliases();
                $aliasList = self::getAliasList();
 
                // Find the first alias that maps back to $name
                if ( isset( $aliases[$name] ) ) {
                        $found = false;
                        foreach ( $aliases[$name] as $alias ) {
-                               $caseFoldedAlias = $wgContLang->caseFold( $alias );
+                               $caseFoldedAlias = $contLang->caseFold( $alias );
                                $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
                                if ( isset( $aliasList[$caseFoldedAlias] ) &&
                                        $aliasList[$caseFoldedAlias] === $name
@@ -690,7 +691,7 @@ class SpecialPageFactory {
                        $name = "$name/$subpage";
                }
 
-               return $wgContLang->ucfirst( $name );
+               return $contLang->ucfirst( $name );
        }
 
        /**
index ecc030e..ff44bda 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup SpecialPage
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Implements Special:Ancientpages
  *
@@ -74,14 +76,13 @@ class AncientPagesPage extends QueryPage {
         * @return string
         */
        function formatResult( $skin, $result ) {
-               global $wgContLang;
-
                $d = $this->getLanguage()->userTimeAndDate( $result->value, $this->getUser() );
                $title = Title::makeTitle( $result->namespace, $result->title );
                $linkRenderer = $this->getLinkRenderer();
                $link = $linkRenderer->makeKnownLink(
                        $title,
-                       $wgContLang->convert( $title->getPrefixedText() )
+                       MediaWikiServices::getInstance()->getContentLanguage()->
+                               convert( $title->getPrefixedText() )
                );
 
                return $this->getLanguage()->specialList( $link, htmlspecialchars( $d ) );
index 3b25c6c..a60595a 100644 (file)
@@ -858,7 +858,7 @@ class SpecialBlock extends FormSpecialPage {
         *     suggestions
         * @return array
         */
-       public static function getSuggestedDurations( $lang = null, $includeOther = true ) {
+       public static function getSuggestedDurations( Language $lang = null, $includeOther = true ) {
                $a = [];
                $msg = $lang === null
                        ? wfMessage( 'ipboptions' )->inContentLanguage()->text()
index 72e0b88..c187156 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup SpecialPage
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Special page outputs information on sourcing a book with a particular ISBN
  * The parser creates links to this page when dealing with ISBNs in wikitext
@@ -154,8 +156,6 @@ class SpecialBookSources extends SpecialPage {
        private function showList( $isbn ) {
                $out = $this->getOutput();
 
-               global $wgContLang;
-
                $isbn = self::cleanIsbn( $isbn );
                # Hook to allow extensions to insert additional HTML,
                # e.g. for API-interacting plugins and so on
@@ -183,7 +183,7 @@ class SpecialBookSources extends SpecialPage {
                # Fall back to the defaults given in the language file
                $out->addWikiMsg( 'booksources-text' );
                $out->addHTML( '<ul>' );
-               $items = $wgContLang->getBookstoreList();
+               $items = MediaWikiServices::getInstance()->getContentLanguage()->getBookstoreList();
                foreach ( $items as $label => $url ) {
                        $out->addHTML( $this->makeListItem( $isbn, $label, $url ) );
                }
index 17b3201..7013e40 100644 (file)
@@ -535,8 +535,6 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
         * @return HTMLForm
         */
        protected function getNormalForm() {
-               global $wgContLang;
-
                $fields = [];
                $count = 0;
 
@@ -582,7 +580,8 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
 
                                $nsText = ( $ns == NS_MAIN )
                                        ? $this->msg( 'blanknamespace' )->escaped()
-                                       : htmlspecialchars( $wgContLang->getFormattedNsText( $ns ) );
+                                       : htmlspecialchars( MediaWikiServices::getInstance()->getContentLanguage()->
+                                               getFormattedNsText( $ns ) );
                                $this->toc .= Linker::tocLine( "editwatchlist-{$data['section']}", $nsText,
                                        $this->getLanguage()->formatNum( ++$tocLength ), 1 ) . Linker::tocLineEnd();
                        }
@@ -634,7 +633,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                if ( $title->getNamespace() == NS_USER && !$title->isSubpage() ) {
                        $tools['contributions'] = $linkRenderer->makeKnownLink(
                                SpecialPage::getTitleFor( 'Contributions', $title->getText() ),
-                               $this->msg( 'contributions' )->text()
+                               $this->msg( 'contribslink' )->text()
                        );
                }
 
index 5a98bb9..4407259 100644 (file)
@@ -421,8 +421,6 @@ class SpecialExport extends SpecialPage {
         * @return array
         */
        private function getPagesFromCategory( $title ) {
-               global $wgContLang;
-
                $maxPages = $this->getConfig()->get( 'ExportPagelistLimit' );
 
                $name = $title->getDBkey();
@@ -441,7 +439,8 @@ class SpecialExport extends SpecialPage {
                foreach ( $res as $row ) {
                        $n = $row->page_title;
                        if ( $row->page_namespace ) {
-                               $ns = $wgContLang->getNsText( $row->page_namespace );
+                               $ns = MediaWikiServices::getInstance()->getContentLanguage()->getNsText(
+                                       $row->page_namespace );
                                $n = $ns . ':' . $n;
                        }
 
@@ -456,8 +455,6 @@ class SpecialExport extends SpecialPage {
         * @return array
         */
        private function getPagesFromNamespace( $nsindex ) {
-               global $wgContLang;
-
                $maxPages = $this->getConfig()->get( 'ExportPagelistLimit' );
 
                $dbr = wfGetDB( DB_REPLICA );
@@ -475,7 +472,8 @@ class SpecialExport extends SpecialPage {
                        $n = $row->page_title;
 
                        if ( $row->page_namespace ) {
-                               $ns = $wgContLang->getNsText( $row->page_namespace );
+                               $ns = MediaWikiServices::getInstance()->getContentLanguage()->getNsText(
+                                       $row->page_namespace );
                                $n = $ns . ':' . $n;
                        }
 
index f20829f..4a57c95 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup SpecialPage
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Special page for listing the articles with the fewest revisions.
  *
@@ -68,8 +70,6 @@ class FewestrevisionsPage extends QueryPage {
         * @return string
         */
        function formatResult( $skin, $result ) {
-               global $wgContLang;
-
                $nt = Title::makeTitleSafe( $result->namespace, $result->title );
                if ( !$nt ) {
                        return Html::element(
@@ -83,7 +83,8 @@ class FewestrevisionsPage extends QueryPage {
                        );
                }
                $linkRenderer = $this->getLinkRenderer();
-               $text = $wgContLang->convert( $nt->getPrefixedText() );
+               $text = MediaWikiServices::getInstance()->getContentLanguage()->
+                       convert( $nt->getPrefixedText() );
                $plink = $linkRenderer->makeLink( $nt, $text );
 
                $nl = $this->msg( 'nrevisions' )->numParams( $result->value )->text();
index 83e18c2..3115adc 100644 (file)
@@ -207,11 +207,9 @@ class FileDuplicateSearchPage extends QueryPage {
         * @return string HTML
         */
        function formatResult( $skin, $result ) {
-               global $wgContLang;
-
                $linkRenderer = $this->getLinkRenderer();
                $nt = $result->getTitle();
-               $text = $wgContLang->convert( $nt->getText() );
+               $text = MediaWikiServices::getInstance()->getContentLanguage()->convert( $nt->getText() );
                $plink = $linkRenderer->makeLink(
                        $nt,
                        $text
index 5a6bbc4..3ef64f8 100644 (file)
@@ -79,7 +79,7 @@ class SpecialImport extends SpecialPage {
                }
 
                # @todo Allow Title::getUserPermissionsErrors() to take an array
-               # @todo FIXME: Title::checkSpecialsAndNSPermissions() has a very wierd expectation of what
+               # @todo FIXME: Title::checkSpecialsAndNSPermissions() has a very weird expectation of what
                # getUserPermissionsErrors() might actually be used for, hence the 'ns-specialprotected'
                $errors = wfMergeErrorArrays(
                        $this->getPageTitle()->getUserPermissionsErrors(
index b786c86..f858f5c 100644 (file)
@@ -103,65 +103,56 @@ class SpecialJavaScriptTest extends SpecialPage {
                $query['only'] = 'scripts';
                $startupContext = new ResourceLoaderContext( $rl, new FauxRequest( $query ) );
 
-               $query['raw'] = true;
-
                $modules = $rl->getTestModuleNames( 'qunit' );
 
                // Disable autostart because we load modules asynchronously. By default, QUnit would start
                // at domready when there are no tests loaded and also fire 'QUnit.done' which then instructs
-               // Karma to end the run before the tests even started.
+               // Karma to exit the browser process before the tests even finished loading.
                $qunitConfig = 'QUnit.config.autostart = false;'
                        . 'if (window.__karma__) {'
                        // karma-qunit's use of autostart=false and QUnit.start conflicts with ours.
-                       // Hack around this by replacing 'karma.loaded' with a no-op and call it ourselves later.
-                       // See <https://github.com/karma-runner/karma-qunit/issues/27>.
+                       // Hack around this by replacing 'karma.loaded' with a no-op and perfom its duty of calling
+                       // `__karma__.start()` ourselves. See <https://github.com/karma-runner/karma-qunit/issues/27>.
                        . 'window.__karma__.loaded = function () {};'
                        . '}';
 
                // The below is essentially a pure-javascript version of OutputPage::headElement().
-               $startup = $rl->makeModuleResponse( $startupContext, [
+               $code = $rl->makeModuleResponse( $startupContext, [
                        'startup' => $rl->getModule( 'startup' ),
                ] );
-               // Embed page-specific mw.config variables.
-               // The current Special page shouldn't be relevant to tests, but various modules (which
-               // are loaded before the test suites), reference mw.config while initialising.
-               $code = ResourceLoader::makeConfigSetScript( $out->getJSVars() );
-               // Embed private modules as they're not allowed to be loaded dynamically
-               $code .= $rl->makeModuleResponse( $embedContext, [
-                       'user.options' => $rl->getModule( 'user.options' ),
-                       'user.tokens' => $rl->getModule( 'user.tokens' ),
-               ] );
-               // Catch exceptions (such as "dependency missing" or "unknown module") so that we
-               // always start QUnit. Re-throw so that they are caught and reported as global exceptions
-               // by QUnit and Karma.
-               $modules = Xml::encodeJsVar( $modules );
-               $code .= <<<CODE
-(function () {
+               // The following has to be deferred via RLQ because the startup module is asynchronous.
+               $code .= ResourceLoader::makeLoaderConditionalScript(
+                       // Embed page-specific mw.config variables.
+                       // The current Special page shouldn't be relevant to tests, but various modules (which
+                       // are loaded before the test suites), reference mw.config while initialising.
+                       ResourceLoader::makeConfigSetScript( $out->getJSVars() )
+                       // Embed private modules as they're not allowed to be loaded dynamically
+                       . $rl->makeModuleResponse( $embedContext, [
+                               'user.options' => $rl->getModule( 'user.options' ),
+                               'user.tokens' => $rl->getModule( 'user.tokens' ),
+                       ] )
+                       // Load all the test suites
+                       . Xml::encodeJsCall( 'mw.loader.load', [ $modules ] )
+               );
+               $encModules = Xml::encodeJsVar( $modules );
+               $code .= ResourceLoader::makeInlineCodeWithModule( 'mediawiki.base', <<<JAVASCRIPT
        var start = window.__karma__ ? window.__karma__.start : QUnit.start;
-       try {
-               mw.loader.using( $modules )
-                       .always( function () {
-                               start();
-                       } )
-                       .fail( function ( e ) {
-                               setTimeout( function () {
-                                       throw e;
-                               } );
-                       } );
-       } catch ( e ) {
-               start();
-               throw e;
-       }
-}());
-CODE;
+       mw.loader.using( $encModules ).always( start );
+       mw.trackSubscribe( 'resourceloader.exception', function ( topic, err ) {
+               // Things like "dependency missing" or "unknown module".
+               // Re-throw so that they are reported as global exceptions by QUnit and Karma.
+               setTimeout( function () {
+                       throw e;
+               } );
+       } );
+JAVASCRIPT
+       );
 
                header( 'Content-Type: text/javascript; charset=utf-8' );
                header( 'Cache-Control: private, no-cache, must-revalidate' );
                header( 'Pragma: no-cache' );
                echo $qunitConfig;
-               echo $startup;
-               // The following has to be deferred via RLQ because the startup module is asynchronous.
-               echo ResourceLoader::makeLoaderConditionalScript( $code );
+               echo $code;
        }
 
        private function plainQUnit() {
index 6091a64..8802a38 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup SpecialPage
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * This special page lists all defined user groups and the associated rights.
  * See also @ref $wgGroupPermissions.
@@ -133,7 +135,6 @@ class SpecialListGroupRights extends SpecialPage {
        }
 
        private function outputNamespaceProtectionInfo() {
-               global $wgContLang;
                $out = $this->getOutput();
                $namespaceProtection = $this->getConfig()->get( 'NamespaceProtection' );
 
@@ -169,7 +170,8 @@ class SpecialListGroupRights extends SpecialPage {
                        if ( $namespace == NS_MAIN ) {
                                $namespaceText = $this->msg( 'blanknamespace' )->text();
                        } else {
-                               $namespaceText = $wgContLang->convertNamespace( $namespace );
+                               $namespaceText = MediaWikiServices::getInstance()->getContentLanguage()->
+                                       convertNamespace( $namespace );
                        }
 
                        $out->addHTML(
index fb04b90..a2c2530 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup SpecialPage
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * A form to make the database readonly (eg for maintenance purposes).
  *
@@ -74,8 +76,6 @@ class SpecialLockdb extends FormSpecialPage {
        }
 
        public function onSubmit( array $data ) {
-               global $wgContLang;
-
                if ( !$data['Confirm'] ) {
                        return Status::newFatal( 'locknoconfirm' );
                }
@@ -92,10 +92,11 @@ class SpecialLockdb extends FormSpecialPage {
                }
                fwrite( $fp, $data['Reason'] );
                $timestamp = wfTimestampNow();
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                fwrite( $fp, "\n<p>" . $this->msg( 'lockedbyandtime',
                        $this->getUser()->getName(),
-                       $wgContLang->date( $timestamp, false, false ),
-                       $wgContLang->time( $timestamp, false, false )
+                       $contLang->date( $timestamp, false, false ),
+                       $contLang->time( $timestamp, false, false )
                )->inContentLanguage()->text() . "</p>\n" );
                fclose( $fp );
 
index f43ed9b..18c163e 100644 (file)
@@ -22,6 +22,8 @@
  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Searches the database for files of the requested MIME type, comparing this with the
  * 'img_major_mime' and 'img_minor_mime' fields in the image table.
@@ -182,11 +184,9 @@ class MIMEsearchPage extends QueryPage {
         * @return string
         */
        function formatResult( $skin, $result ) {
-               global $wgContLang;
-
                $linkRenderer = $this->getLinkRenderer();
                $nt = Title::makeTitle( $result->namespace, $result->title );
-               $text = $wgContLang->convert( $nt->getText() );
+               $text = MediaWikiServices::getInstance()->getContentLanguage()->convert( $nt->getText() );
                $plink = $linkRenderer->makeLink(
                        Title::newFromText( $nt->getPrefixedText() ),
                        $text
index f238f6c..b80e518 100644 (file)
@@ -24,6 +24,7 @@
  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
  */
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
 
@@ -71,8 +72,6 @@ class MostlinkedCategoriesPage extends QueryPage {
         * @return string
         */
        function formatResult( $skin, $result ) {
-               global $wgContLang;
-
                $nt = Title::makeTitleSafe( NS_CATEGORY, $result->title );
                if ( !$nt ) {
                        return Html::element(
@@ -85,7 +84,7 @@ class MostlinkedCategoriesPage extends QueryPage {
                        );
                }
 
-               $text = $wgContLang->convert( $nt->getText() );
+               $text = MediaWikiServices::getInstance()->getContentLanguage()->convert( $nt->getText() );
                $plink = $this->getLinkRenderer()->makeLink( $nt, $text );
                $nlinks = $this->msg( 'nmembers' )->numParams( $result->value )->escaped();
 
index 37d96f4..537db9e 100644 (file)
@@ -23,6 +23,8 @@
  * @copyright Copyright © 2010-2013 Niklas Laxström, Siebrand Mazeland
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Unlisted special page just to redirect the user to the translated version of
  * a page, if it exists.
@@ -90,17 +92,17 @@ class SpecialMyLanguage extends RedirectSpecialArticle {
                        $base = $page->getRedirectTarget();
                }
 
-               $uiCode = $this->getLanguage()->getCode();
-               $wikiLangCode = $this->getConfig()->get( 'LanguageCode' );
+               $uiLang = $this->getLanguage();
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
 
-               if ( $uiCode === $wikiLangCode ) {
+               if ( $uiLang->equals( $contLang ) ) {
                        // Short circuit when the current UI language is the
                        // wiki's default language to avoid unnecessary page lookups.
                        return $base;
                }
 
                // Check for a subpage in current UI language
-               $proposed = $base->getSubpage( $uiCode );
+               $proposed = $base->getSubpage( $uiLang->getCode() );
                if ( $proposed && $proposed->exists() ) {
                        return $proposed;
                }
@@ -111,9 +113,9 @@ class SpecialMyLanguage extends RedirectSpecialArticle {
                }
 
                // Check for fallback languages specified by the UI language
-               $possibilities = Language::getFallbacksFor( $uiCode );
+               $possibilities = $uiLang->getFallbackLanguages();
                foreach ( $possibilities as $lang ) {
-                       if ( $lang !== $wikiLangCode ) {
+                       if ( $lang !== $contLang->getCode() ) {
                                $proposed = $base->getSubpage( $lang );
                                if ( $proposed && $proposed->exists() ) {
                                        return $proposed;
index 693b8aa..7526c3e 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup SpecialPage
  */
 
+use MediaWiki\MediaWikiServices;
+
 class SpecialNewFiles extends IncludableSpecialPage {
        /** @var FormOptions */
        protected $opts;
@@ -213,13 +215,15 @@ class SpecialNewFiles extends IncludableSpecialPage {
         * Send the text to be displayed above the options
         */
        function setTopText() {
-               global $wgContLang;
-
                $message = $this->msg( 'newimagestext' )->inContentLanguage();
                if ( !$message->isDisabled() ) {
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                        $this->getOutput()->addWikiText(
                                Html::rawElement( 'p',
-                                       [ 'lang' => $wgContLang->getHtmlCode(), 'dir' => $wgContLang->getDir() ],
+                                       [
+                                               'lang' => $contLang->getHtmlCode(),
+                                               'dir' => $contLang->getDir()
+                                       ],
                                        "\n" . $message->plain() . "\n"
                                ),
                                /* $lineStart */ false,
index 2a8a09d..f7906db 100644 (file)
@@ -48,8 +48,6 @@ class SpecialPrefixindex extends SpecialAllPages {
         * @param string $par Becomes "FOO" when called like Special:Prefixindex/FOO (default null)
         */
        function execute( $par ) {
-               global $wgContLang;
-
                $this->setHeaders();
                $this->outputHeader();
 
@@ -65,7 +63,7 @@ class SpecialPrefixindex extends SpecialAllPages {
                $this->hideRedirects = $request->getBool( 'hideredirects', $this->hideRedirects );
                $this->stripPrefix = $request->getBool( 'stripprefix', $this->stripPrefix );
 
-               $namespaces = $wgContLang->getNamespaces();
+               $namespaces = MediaWikiServices::getInstance()->getContentLanguage()->getNamespaces();
                $out->setPageTitle(
                        ( $namespace > 0 && array_key_exists( $namespace, $namespaces ) )
                                ? $this->msg( 'prefixindex-namespace', str_replace( '_', ' ', $namespaces[$namespace] ) )
@@ -143,15 +141,13 @@ class SpecialPrefixindex extends SpecialAllPages {
         * @param string|null $from List all pages from this name (default false)
         */
        protected function showPrefixChunk( $namespace, $prefix, $from = null ) {
-               global $wgContLang;
-
                if ( $from === null ) {
                        $from = $prefix;
                }
 
                $fromList = $this->getNamespaceKeyAndText( $namespace, $from );
                $prefixList = $this->getNamespaceKeyAndText( $namespace, $prefix );
-               $namespaces = $wgContLang->getNamespaces();
+               $namespaces = MediaWikiServices::getInstance()->getContentLanguage()->getNamespaces();
                $res = null;
                $n = 0;
                $nextRow = null;
index e3b567d..7e5a73f 100644 (file)
@@ -22,6 +22,8 @@
  * @author Rob Church <robchur@gmail.com>, Ilmari Karonen
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Special page to direct the user to a random page
  *
@@ -54,12 +56,11 @@ class RandomPage extends SpecialPage {
        }
 
        public function execute( $par ) {
-               global $wgContLang;
-
                if ( is_string( $par ) ) {
                        // Testing for stringiness since we want to catch
                        // the empty string to mean main namespace only.
-                       $this->setNamespace( $wgContLang->getNsIndex( $par ) );
+                       $this->setNamespace(
+                               MediaWikiServices::getInstance()->getContentLanguage()->getNsIndex( $par ) );
                }
 
                $title = $this->getRandomTitle();
@@ -85,17 +86,17 @@ class RandomPage extends SpecialPage {
         * @return string
         */
        private function getNsList() {
-               global $wgContLang;
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                $nsNames = [];
                foreach ( $this->namespaces as $n ) {
                        if ( $n === NS_MAIN ) {
                                $nsNames[] = $this->msg( 'blanknamespace' )->plain();
                        } else {
-                               $nsNames[] = $wgContLang->getNsText( $n );
+                               $nsNames[] = $contLang->getNsText( $n );
                        }
                }
 
-               return $wgContLang->commaList( $nsNames );
+               return $contLang->commaList( $nsNames );
        }
 
        /**
index 2496192..983f74c 100644 (file)
@@ -578,10 +578,9 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
         * @param FormOptions $opts Unused
         */
        function setTopText( FormOptions $opts ) {
-               global $wgContLang;
-
                $message = $this->msg( 'recentchangestext' )->inContentLanguage();
                if ( !$message->isDisabled() ) {
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                        // Parse the message in this weird ugly way to preserve the ability to include interlanguage
                        // links in it (T172461). In the future when T66969 is resolved, perhaps we can just use
                        // $message->parse() instead. This code is copied from Message::parseText().
@@ -592,7 +591,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                                // Message class sets the interface flag to false when parsing in a language different than
                                // user language, and this is wiki content language
                                /*interface*/false,
-                               $wgContLang
+                               $contLang
                        );
                        $content = $parserOutput->getText( [
                                'enableSectionEditLinks' => false,
@@ -601,8 +600,8 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                        $this->getOutput()->addParserOutputMetadata( $parserOutput );
 
                        $langAttributes = [
-                               'lang' => $wgContLang->getHtmlCode(),
-                               'dir' => $wgContLang->getDir(),
+                               'lang' => $contLang->getHtmlCode(),
+                               'dir' => $contLang->getDir(),
                        ];
 
                        $topLinksAttributes = [ 'class' => 'mw-recentchanges-toplinks' ];
index 2cff90e..78a54f5 100644 (file)
@@ -269,8 +269,6 @@ class SpecialSearch extends SpecialPage {
         * @param string $term
         */
        public function showResults( $term ) {
-               global $wgContLang;
-
                if ( $this->searchEngineType !== null ) {
                        $this->setExtraParam( 'srbackend', $this->searchEngineType );
                }
@@ -281,7 +279,8 @@ class SpecialSearch extends SpecialPage {
                        $this->searchConfig,
                        $this->getSearchProfiles()
                );
-               $filePrefix = $wgContLang->getFormattedNsText( NS_FILE ) . ':';
+               $filePrefix = MediaWikiServices::getInstance()->getContentLanguage()->
+                       getFormattedNsText( NS_FILE ) . ':';
                if ( trim( $term ) === '' || $filePrefix === trim( $term ) ) {
                        // Empty query -- straight view of search form
                        if ( !Hooks::run( 'SpecialSearchResultsPrepend', [ $this, $out, $term ] ) ) {
index 0ea7dfa..a3a9bc6 100644 (file)
@@ -24,6 +24,7 @@
  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
  */
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
 
@@ -109,15 +110,14 @@ class UnwatchedpagesPage extends QueryPage {
         * @return string
         */
        function formatResult( $skin, $result ) {
-               global $wgContLang;
-
                $nt = Title::makeTitleSafe( $result->namespace, $result->title );
                if ( !$nt ) {
                        return Html::element( 'span', [ 'class' => 'mw-invalidtitle' ],
                                Linker::getInvalidTitleDescription( $this->getContext(), $result->namespace, $result->title ) );
                }
 
-               $text = $wgContLang->convert( $nt->getPrefixedText() );
+               $text = MediaWikiServices::getInstance()->getContentLanguage()->
+                       convert( $nt->getPrefixedText() );
 
                $linkRenderer = $this->getLinkRenderer();
 
index d323c9e..2accef6 100644 (file)
@@ -23,6 +23,8 @@
  * @ingroup SpecialPage
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * A querypage to list the most wanted categories - implements Special:Wantedcategories
  *
@@ -88,10 +90,8 @@ class WantedCategoriesPage extends WantedQueryPage {
         * @return string
         */
        function formatResult( $skin, $result ) {
-               global $wgContLang;
-
                $nt = Title::makeTitle( $result->namespace, $result->title );
-               $text = $wgContLang->convert( $nt->getText() );
+               $text = MediaWikiServices::getInstance()->getContentLanguage()->convert( $nt->getText() );
 
                if ( !$this->isCached() ) {
                        // We can assume the freshest data
index 0b6c165..51e63d9 100644 (file)
@@ -23,6 +23,8 @@
  * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * A License class for use on Special:Upload
  */
@@ -57,8 +59,6 @@ class Licenses extends HTMLFormField {
         * @return string
         */
        protected static function getMessageFromParams( $params ) {
-               global $wgContLang;
-
                if ( !empty( $params['licenses'] ) ) {
                        return $params['licenses'];
                }
@@ -72,7 +72,8 @@ class Licenses extends HTMLFormField {
                // Also see https://phabricator.wikimedia.org/T3495
                $defaultMsg = wfMessage( 'licenses' )->inContentLanguage();
                if ( !$defaultMsg->exists() || $defaultMsg->plain() === '-' ) {
-                       $defaultMsg = wfMessage( 'licenses' )->inLanguage( $wgContLang );
+                       $defaultMsg = wfMessage( 'licenses' )->inLanguage(
+                               MediaWikiServices::getInstance()->getContentLanguage() );
                }
 
                return $defaultMsg->plain();
index e37200f..da4398a 100644 (file)
@@ -260,12 +260,11 @@ class UploadForm extends HTMLForm {
                                $file = null;
                        }
                        if ( $file ) {
-                               global $wgContLang;
-
                                $mto = $file->transform( [ 'width' => 120 ] );
                                if ( $mto ) {
                                        $this->addHeaderText(
-                                               '<div class="thumb t' . $wgContLang->alignEnd() . '">' .
+                                               '<div class="thumb t' .
+                                               MediaWikiServices::getInstance()->getContentLanguage()->alignEnd() . '">' .
                                                Html::element( 'img', [
                                                        'src' => $mto->getUrl(),
                                                        'class' => 'thumbimage',
index 63addb8..c79e87c 100644 (file)
@@ -158,15 +158,13 @@ class ImportReporter extends ContextSource {
                        $logEntry->setComment( $this->reason );
                        $logEntry->setPerformer( $this->getUser() );
                        $logEntry->setParameters( $logParams );
-                       $logid = $logEntry->insert();
+                       // Make sure the null revision will be tagged as well
+                       $logEntry->setAssociatedRevId( $nullRevId );
                        if ( count( $this->logTags ) ) {
                                $logEntry->setTags( $this->logTags );
                        }
-                       // Make sure the null revision will be tagged as well
-                       $logEntry->setAssociatedRevId( $nullRevId );
-
+                       $logid = $logEntry->insert();
                        $logEntry->publish( $logid );
-
                } else {
                        $this->getOutput()->addHTML( "<li>" . $linkRenderer->makeKnownLink( $title ) . " " .
                                $this->msg( 'import-nonewrevisions' )->escaped() . "</li>\n" );
index 5addd9c..6d5f64b 100644 (file)
@@ -19,6 +19,7 @@
  * @ingroup Pager
  */
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\FakeResultWrapper;
 
 /**
@@ -27,8 +28,6 @@ use Wikimedia\Rdbms\FakeResultWrapper;
  *
  * @ingroup Pager
  */
-use MediaWiki\MediaWikiServices;
-
 class AllMessagesTablePager extends TablePager {
 
        protected $filter, $prefix, $langcode, $displayPrefix;
@@ -45,7 +44,7 @@ class AllMessagesTablePager extends TablePager {
         */
        public $custom;
 
-       function __construct( $page, $conds, $langObj = null ) {
+       function __construct( $page, $conds, Language $langObj = null ) {
                parent::__construct( $page->getContext() );
                $this->mIndexField = 'am_title';
                $this->mPage = $page;
@@ -54,13 +53,12 @@ class AllMessagesTablePager extends TablePager {
                $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
                $this->mLimitsShown = [ 20, 50, 100, 250, 500, 5000 ];
 
-               global $wgContLang;
-
                $this->talk = $this->msg( 'talkpagelinktext' )->escaped();
 
-               $this->lang = $langObj ?: $wgContLang;
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               $this->lang = $langObj ?? $contLang;
                $this->langcode = $this->lang->getCode();
-               $this->foreign = !$this->lang->equals( $wgContLang );
+               $this->foreign = !$this->lang->equals( $contLang );
 
                $request = $this->getRequest();
 
index ab2ba46..e6351e2 100644 (file)
@@ -262,7 +262,6 @@ class RemexCompatMunger implements TreeHandler {
                        $pElement = $parentData->childPElement;
                        $parentData->childPElement = null;
                        $newRef = $refElement->userData;
-                       $this->endTag( $pElement, $sourceStart, 0 );
                } elseif ( $under && $parentData->isSplittable
                        && (bool)$parentData->ancestorPNode !== $inline
                ) {
index 44cf90d..307050b 100644 (file)
@@ -18,6 +18,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * A parser that translates page titles on a foreign wiki into ForeignTitle
  * objects, with no knowledge of the namespace setup on the foreign site.
@@ -42,8 +44,6 @@ class NaiveForeignTitleFactory implements ForeignTitleFactory {
        public function createForeignTitle( $title, $ns = null ) {
                $pieces = explode( ':', $title, 2 );
 
-               global $wgContLang;
-
                /**
                 * Can we assume that the part of the page title before the colon is a
                 * namespace name?
@@ -56,9 +56,10 @@ class NaiveForeignTitleFactory implements ForeignTitleFactory {
                 * ID, we fall back to using the local wiki's namespace names to resolve
                 * this -- better than nothing, and mimics the old crappy behavior
                 */
-               $isNamespacePartValid = is_null( $ns ) ?
-                       ( $wgContLang->getNsIndex( $pieces[0] ) !== false ) :
-                       $ns != 0;
+               $isNamespacePartValid = is_null( $ns )
+                       ? MediaWikiServices::getInstance()->getContentLanguage()->getNsIndex( $pieces[0] ) !==
+                               false
+                       : $ns != 0;
 
                if ( count( $pieces ) === 2 && $isNamespacePartValid ) {
                        list( $namespaceName, $pageName ) = $pieces;
index 5cb6112..4da9395 100644 (file)
@@ -18,6 +18,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * A class to convert page titles on a foreign wiki (ForeignTitle objects) into
  * page titles on the local wiki (Title objects), using a default namespace
@@ -39,8 +41,6 @@ class NaiveImportTitleFactory implements ImportTitleFactory {
         * @return Title|null
         */
        public function createTitleFromForeignTitle( ForeignTitle $foreignTitle ) {
-               global $wgContLang;
-
                if ( $foreignTitle->isNamespaceIdKnown() ) {
                        $foreignNs = $foreignTitle->getNamespaceId();
 
@@ -53,7 +53,8 @@ class NaiveImportTitleFactory implements ImportTitleFactory {
 
                // Do we have a local namespace by the same name as the foreign
                // namespace?
-               $targetNs = $wgContLang->getNsIndex( $foreignTitle->getNamespaceName() );
+               $targetNs = MediaWikiServices::getInstance()->getContentLanguage()->getNsIndex(
+                       $foreignTitle->getNamespaceName() );
                if ( $targetNs !== false ) {
                        return Title::makeTitleSafe( $targetNs, $foreignTitle->getText() );
                }
index 5e57a18..7bebe80 100644 (file)
@@ -986,13 +986,13 @@ class User implements IDBAccessObject, UserIdentity {
         * @return bool
         */
        public static function isValidUserName( $name ) {
-               global $wgContLang, $wgMaxNameChars;
+               global $wgMaxNameChars;
 
                if ( $name == ''
                        || self::isIP( $name )
                        || strpos( $name, '/' ) !== false
                        || strlen( $name ) > $wgMaxNameChars
-                       || $name != $wgContLang->ucfirst( $name )
+                       || $name != MediaWikiServices::getInstance()->getContentLanguage()->ucfirst( $name )
                ) {
                        return false;
                }
@@ -1228,8 +1228,7 @@ class User implements IDBAccessObject, UserIdentity {
         */
        public static function getCanonicalName( $name, $validate = 'valid' ) {
                // Force usernames to capital
-               global $wgContLang;
-               $name = $wgContLang->ucfirst( $name );
+               $name = MediaWikiServices::getInstance()->getContentLanguage()->ucfirst( $name );
 
                # Reject names containing '#'; these will be cleaned up
                # with title normalisation, but then it's too late to
@@ -1761,24 +1760,29 @@ class User implements IDBAccessObject, UserIdentity {
         * @return array Array of String options
         */
        public static function getDefaultOptions() {
-               global $wgNamespacesToBeSearchedDefault, $wgDefaultUserOptions, $wgContLang, $wgDefaultSkin;
+               global $wgNamespacesToBeSearchedDefault, $wgDefaultUserOptions, $wgDefaultSkin;
 
                static $defOpt = null;
                static $defOptLang = null;
 
-               if ( $defOpt !== null && $defOptLang === $wgContLang->getCode() ) {
-                       // $wgContLang does not change (and should not change) mid-request,
-                       // but the unit tests change it anyway, and expect this method to
-                       // return values relevant to the current $wgContLang.
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               if ( $defOpt !== null && $defOptLang === $contLang->getCode() ) {
+                       // The content language does not change (and should not change) mid-request, but the
+                       // unit tests change it anyway, and expect this method to return values relevant to the
+                       // current content language.
                        return $defOpt;
                }
 
                $defOpt = $wgDefaultUserOptions;
                // Default language setting
-               $defOptLang = $wgContLang->getCode();
+               $defOptLang = $contLang->getCode();
                $defOpt['language'] = $defOptLang;
                foreach ( LanguageConverter::$languagesWithVariants as $langCode ) {
-                       $defOpt[$langCode == $wgContLang->getCode() ? 'variant' : "variant-$langCode"] = $langCode;
+                       if ( $langCode === $contLang->getCode() ) {
+                               $defOpt['variant'] = $langCode;
+                       } else {
+                               $defOpt["variant-$langCode"] = $langCode;
+                       }
                }
 
                // NOTE: don't use SearchEngineConfig::getSearchableNamespaces here,
@@ -5453,8 +5457,6 @@ class User implements IDBAccessObject, UserIdentity {
         * @param array|null $data Rows for the current user out of the user_properties table
         */
        protected function loadOptions( $data = null ) {
-               global $wgContLang;
-
                $this->load();
 
                if ( $this->mOptionsLoaded ) {
@@ -5468,7 +5470,7 @@ class User implements IDBAccessObject, UserIdentity {
                        // There's no need to do it for logged-in users: they can set preferences,
                        // and handling of page content is done by $pageLang->getPreferredVariant() and such,
                        // so don't override user's choice (especially when the user chooses site default).
-                       $variant = $wgContLang->getDefaultVariant();
+                       $variant = MediaWikiServices::getInstance()->getContentLanguage()->getDefaultVariant();
                        $this->mOptions['variant'] = $variant;
                        $this->mOptions['language'] = $variant;
                        $this->mOptionsLoaded = true;
index b437653..511b673 100644 (file)
@@ -258,7 +258,7 @@ EOD;
         * @return string
         */
        public function getAutoload( $commandName = 'AutoloadGenerator' ) {
-               // We need to check whether an extenson.json or skin.json exists or not, and
+               // We need to check whether an extension.json or skin.json exists or not, and
                // incase it doesn't, update the autoload.php file.
 
                $fileinfo = $this->getTargetFileinfo();
index 8521e68..1a885b0 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace MediaWiki\Widget\Search;
 
+use MediaWiki\MediaWikiServices;
 use Message;
 use SearchResultSet;
 use SpecialSearch;
@@ -42,8 +43,6 @@ class BasicSearchResultSetWidget {
                SearchResultSet $titleResultSet = null,
                SearchResultSet $textResultSet = null
        ) {
-               global $wgContLang;
-
                $hasTitle = $titleResultSet ? $titleResultSet->numRows() > 0 : false;
                $hasText = $textResultSet ? $textResultSet->numRows() > 0 : false;
                $hasSecondary = $textResultSet
@@ -95,7 +94,7 @@ class BasicSearchResultSetWidget {
 
                // Convert the whole thing to desired language variant
                // TODO: Move this up to Special:Search?
-               return $wgContLang->convert( $out );
+               return MediaWikiServices::getInstance()->getContentLanguage()->convert( $out );
        }
 
        /**
@@ -118,9 +117,8 @@ class BasicSearchResultSetWidget {
         * @return string HTML
         */
        protected function renderResultSet( SearchResultSet $resultSet, $offset ) {
-               global $wgContLang;
-
-               $terms = $wgContLang->convertForSearchResult( $resultSet->termMatches() );
+               $terms = MediaWikiServices::getInstance()->getContentLanguage()->
+                       convertForSearchResult( $resultSet->termMatches() );
 
                $hits = [];
                foreach ( $resultSet as $result ) {
index 2302177..735806b 100644 (file)
@@ -4,6 +4,7 @@ namespace MediaWiki\Widget\Search;
 
 use Hooks;
 use Html;
+use MediaWiki\MediaWikiServices;
 use MediaWiki\Widget\SearchInputWidget;
 use MWNamespace;
 use SearchEngineConfig;
@@ -50,7 +51,8 @@ class SearchFormWidget {
                $offset,
                $isPowerSearch
        ) {
-               return Xml::openElement(
+               return '<div class="mw-search-form-wrapper">' .
+                       Xml::openElement(
                                'form',
                                [
                                        'id' => $isPowerSearch ? 'powersearch' : 'search',
@@ -67,7 +69,8 @@ class SearchFormWidget {
                                        "<div style='clear:both'></div>" .
                                "</div>" .
                                $this->optionsHtml( $term, $isPowerSearch, $profile ) .
-                       '</form>';
+                       '</form>' .
+               '</div>';
        }
 
        /**
@@ -169,11 +172,10 @@ class SearchFormWidget {
         * @return bool
         */
        protected function startsWithImage( $term ) {
-               global $wgContLang;
-
                $parts = explode( ':', $term );
                return count( $parts ) > 1
-                       ? $wgContLang->getNsIndex( $parts[0] ) === NS_FILE
+                       ? MediaWikiServices::getInstance()->getContentLanguage()->getNsIndex( $parts[0] ) ===
+                               NS_FILE
                        : false;
        }
 
@@ -234,8 +236,6 @@ class SearchFormWidget {
         * @return string HTML
         */
        protected function powerSearchBox( $term, array $opts ) {
-               global $wgContLang;
-
                $rows = [];
                $activeNamespaces = $this->specialSearch->getNamespaces();
                foreach ( $this->searchConfig->searchableNamespaces() as $namespace => $name ) {
@@ -244,7 +244,8 @@ class SearchFormWidget {
                                $rows[$subject] = "";
                        }
 
-                       $name = $wgContLang->getConverter()->convertNamespace( $namespace );
+                       $name = MediaWikiServices::getInstance()->getContentLanguage()->getConverter()->
+                               convertNamespace( $namespace );
                        if ( $name === '' ) {
                                $name = $this->specialSearch->msg( 'blanknamespace' )->text();
                        }
index 22377c2..c4ec638 100644 (file)
@@ -37,7 +37,7 @@ class FakeConverter {
         */
        public $mLang;
 
-       function __construct( $langobj ) {
+       function __construct( Language $langobj ) {
                $this->mLang = $langobj;
        }
 
index 453a610..dfbacfc 100644 (file)
@@ -550,7 +550,7 @@ class Language {
         * Get a namespace value by key
         *
         * <code>
-        * $mw_ns = $wgContLang->getNsText( NS_MEDIAWIKI );
+        * $mw_ns = $lang->getNsText( NS_MEDIAWIKI );
         * echo $mw_ns; // prints 'MediaWiki'
         * </code>
         *
@@ -568,7 +568,7 @@ class Language {
         * producing output.
         *
         * <code>
-        * $mw_ns = $wgContLang->getFormattedNsText( NS_MEDIAWIKI_TALK );
+        * $mw_ns = $lang->getFormattedNsText( NS_MEDIAWIKI_TALK );
         * echo $mw_ns; // prints 'MediaWiki talk'
         * </code>
         *
index dcc2cf3..c098518 100644 (file)
@@ -85,7 +85,7 @@ class LanguageConverter {
         * @param array $flags Defining the custom strings that maps to the flags
         * @param array $manualLevel Limit for supported variants
         */
-       public function __construct( $langobj, $maincode, $variants = [],
+       public function __construct( Language $langobj, $maincode, $variants = [],
                                                                $variantfallbacks = [], $flags = [],
                                                                $manualLevel = [] ) {
                global $wgDisabledVariants;
@@ -250,7 +250,7 @@ class LanguageConverter {
         * @return mixed Variant if one found, null otherwise
         */
        protected function getUserVariant() {
-               global $wgUser, $wgContLang;
+               global $wgUser;
 
                // memoizing this function wreaks havoc on parserTest.php
                /*
@@ -266,7 +266,10 @@ class LanguageConverter {
                        return false;
                }
                if ( $wgUser->isLoggedIn() ) {
-                       if ( $this->mMainLanguageCode == $wgContLang->getCode() ) {
+                       if (
+                               $this->mMainLanguageCode ==
+                               MediaWikiServices::getInstance()->getContentLanguage()->getCode()
+                       ) {
                                $ret = $wgUser->getOption( 'variant' );
                        } else {
                                $ret = $wgUser->getOption( 'variant-' . $this->mMainLanguageCode );
index e652a52..27af14b 100644 (file)
@@ -63,7 +63,7 @@ class CrhConverter extends LanguageConverter {
         * @param array $variantfallbacks
         * @param array $flags
         */
-       function __construct( $langobj, $maincode,
+       function __construct( Language $langobj, $maincode,
                                                                $variants = [],
                                                                $variantfallbacks = [],
                                                                $flags = [] ) {
index d6f90df..f315473 100644 (file)
@@ -32,7 +32,7 @@ class GanConverter extends LanguageConverter {
         * @param array $flags
         * @param array $manualLevel
         */
-       function __construct( $langobj, $maincode,
+       function __construct( Language $langobj, $maincode,
                $variants = [],
                $variantfallbacks = [],
                $flags = [],
index 1a1438c..dc8a9f8 100644 (file)
@@ -44,7 +44,7 @@ class KkConverter extends LanguageConverter {
         * @param array $variantfallbacks
         * @param array $flags
         */
-       function __construct( $langobj, $maincode,
+       function __construct( Language $langobj, $maincode,
                                                                $variants = [],
                                                                $variantfallbacks = [],
                                                                $flags = [] ) {
index e1099f8..27d6972 100644 (file)
@@ -33,7 +33,7 @@ class ZhConverter extends LanguageConverter {
         * @param array $flags
         * @param array $manualLevel
         */
-       function __construct( $langobj, $maincode,
+       function __construct( Language $langobj, $maincode,
                                                                $variants = [],
                                                                $variantfallbacks = [],
                                                                $flags = [],
index bd619b1..a5b0188 100644 (file)
@@ -299,6 +299,7 @@ class Names {
                'ml' => 'മലയാളം', # Malayalam
                'mn' => 'монгол', # Halh Mongolian (Cyrillic) (ISO 639-3: khk)
                'mni' => 'মেইতেই লোন্', # Manipuri/Meitei
+               'mnw' => 'ဘာသာ မန်', # Mon, T201583
                'mo' => 'молдовеняскэ', # Moldovan, deprecated
                'mr' => 'मराठी', # Marathi
                'mrj' => 'кырык мары', # Hill Mari
index a6273c5..65562a1 100644 (file)
        "customcssprotected": "أنت لا تمتلك السماح لتعديل صفحة الCSS هذه، لأنها تحتوي على الإعدادات الشخصية لمستخدم آخر.",
        "customjsonprotected": "ليست لديك صلاحية تحرير صفحة جسون هذه لأنها تحتوي على إعدادات شخصية لمستخدم آخر.",
        "customjsprotected": "أنت لا تمتلك السماح لتعديل صفحة الجافاسكريبت هذه، لأنها تحتوي على الإعدادات الشخصية لمستخدم آخر.",
+       "sitecssprotected": "ليست لديك صلاحية تعديل صفحة CSS هذه لأنها قد تؤثر على جميع الزوار",
+       "sitejsonprotected": "ليست لديك صلاحية تعديل صفحة جسون هذه لأنها قد تؤثر على جميع الزوار",
+       "sitejsprotected": "ليست لديك صلاحية تعديل صفحة جافا سكريبت هذه لأنها قد تؤثر على جميع الزوار",
        "mycustomcssprotected": "ليس لديك صلاحية تعديل هذه الصفحة للطرز المتراصة.",
        "mycustomjsonprotected": "ليست لديك صلاحية تحرير صفحة جسون هذه",
        "mycustomjsprotected": "ليس لديك صلاحية تعديل صفحة جافاسكربت هذه.",
        "ns-specialprotected": "الصفحات الخاصة لا يمكن تعديلها.",
        "titleprotected": "{{GENDER:$1|حمى|حمت}} [[User:$1|$1]] هذا العنوان من الإنشاء.\nالسبب المعطى هو <em>$2</em>.",
        "filereadonlyerror": "تعذر تعديل الملف \"$1\" لأن مستودع الملف \"$2\" في وضع القراءة فقط. \n\nإداري النظام الذي قام بغلقه قدم التفسير التالي: \"$3\".",
+       "invalidtitle": "عنوان غير صالح",
        "invalidtitle-knownnamespace": "عنوان غير صالح في النطاق «$2» مع نص «$3»",
        "invalidtitle-unknownnamespace": "عنوان غير صالح ذو نطاق غير معروف رقم $1 ونص «$2»",
        "exception-nologin": "غير مسجل الدخول",
        "grant-createaccount": "إنشاء حسابات",
        "grant-createeditmovepage": "إنشاء وتعديل ونقل الصفحات",
        "grant-delete": "حذف الصفحات والمراجعات ومدخلات السجلات",
-       "grant-editinterface": "تعديل نطاق ميدياويكي وCSS/جافا سكريت المستخدم",
+       "grant-editinterface": "تعديل نطاق ميدياويكي وجسون على مستوى الموقع/المستخدم",
        "grant-editmycssjs": "تعديل CSS/جافا سكريت/جسون الخاصة بحسابك",
        "grant-editmyoptions": "تعديل تفضيلاتك",
        "grant-editmywatchlist": "تعديل قائمة مراقبتك",
+       "grant-editsiteconfig": "عدل CSS/JS على مستوى الموقع والمستخدم",
        "grant-editpage": "تعديل صفحات موجودة",
        "grant-editprotected": "تعديل صفحات محمية",
        "grant-highvolume": "تعديل كبير الحجم",
        "uploadstash-zero-length": "الملف طوله صفر.",
        "invalid-chunk-offset": "قطعة أوفست غير صالحة",
        "img-auth-accessdenied": "رفض الوصول",
-       "img-auth-nopathinfo": "PATH_INFO مفقود.\nخادومك ليس مضبوطاً لتمرير هذه المعلومة.\nقد يكون مبنياً على نظام CGI ولا يمكنه دعم img_auth.\nراجع https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+       "img-auth-nopathinfo": "معلومات المسار مفقودة;\nيجب إعداد خادمك لتمرير المتغير REQUEST_URI و/أو PATH_INFO variables،\nإذا كان كذلك، فحاول تمكين $wgUsePathInfo،\nانظر https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "المسار المطلوب غير موجود في مجلد الرفع المضبوط.",
        "img-auth-badtitle": "تعذر تشكيل عنوان صالح من \"$1\".",
        "img-auth-nologinnWL": "لست والجا و\"$1\" ليست في القائمة البيضاء.",
        "http-timed-out": "انتهت مهلة طلب HTTP.",
        "http-curl-error": "فشل جلب المسار: $1",
        "http-bad-status": "ثمة مشكلة أثناء طلب HTTP: $1 $2",
+       "http-internal-error": "خطأ HTTP داخلي.",
        "upload-curl-error6": "لم يتمكن من الوصول للمسار",
        "upload-curl-error6-text": "لم يمكن الوصول إلى المسار الذي حددته.\nمن فضلك راجع صحة المسار مرة أخرى وأن الموقع يعمل.",
        "upload-curl-error28": "انتهاء مهلة الرفع",
        "cachedspecial-refresh-now": "استعرض آخر نسخة",
        "categories": "تصنيفات",
        "categories-submit": "أظهر",
-       "categoriespagetext": "{{PLURAL:$1|التصنيف التالي يحتوي|التصنيفات التالية تحتوي}} على صفحات أو وسائط.\n[[Special:UnusedCategories|التصنيفات غير المستخدمة]] غير معروضة هنا.\nانظر أيضاً [[Special:WantedCategories|التصنيفات المطلوبة]].",
+       "categoriespagetext": "{{PLURAL:$1|التصنيف التالي|التصنيفات التالية}} موجودة في الويكي، وقد تكون مستخدمة أو غير مستخدمة،\nانظر أيضا [[Special:WantedCategories|التصنيفات المطلوبة]].",
        "categoriesfrom": "اعرض التصنيفات ابتداء من:",
        "deletedcontributions": "مساهمات المستخدم المحذوفة",
        "deletedcontributions-title": "مساهمات المستخدم المحذوفة",
        "edit-error-long": "الأخطاء:\n\n$1",
        "revid": "المراجعة $1",
        "pageid": "معرف الصفحة $1",
+       "interfaceadmin-info": "$1\n\nتم فصل صلاحيات تحرير ملفات CSS/JS/JSON على مستوى الموقع مؤخرً من صلاحية  <code>editinterface</code>، إذا لم تفهم سبب حصولك على هذا الخطأ، فراجع  [[mw:MediaWiki_1.32/interface-admin]].",
        "rawhtml-notallowed": "لا يمكن استخدام وسوم &lt;html&gt; خارج الصفحات العادية.",
        "gotointerwiki": "ترك {{SITENAME}}",
        "gotointerwiki-invalid": "العنوان المحدد غير صحيح.",
        "passwordpolicies-policy-passwordcannotmatchusername": "لا يمكن أن تكون كلمة المرور هي نفس اسم المستخدم",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "لا يمكن أن تتطابق كلمة المرور مع كلمات المرور المدرجة على القائمة السوداء تحديدا",
        "passwordpolicies-policy-maximalpasswordlength": "يجب أن يكون طول كلمة المرور أقل من $1 {{PLURAL:$1|حرف|أحرف}}",
-       "passwordpolicies-policy-passwordcannotbepopular": "لا يمكن أن تكون كلمة المرور {{PLURAL:$1|كلمة المرور الشائعة|في قائمة كلمات المرور الشائعة الـ$1}}"
+       "passwordpolicies-policy-passwordcannotbepopular": "لا يمكن أن تكون كلمة المرور {{PLURAL:$1|كلمة المرور الشائعة|في قائمة كلمات المرور الشائعة الـ$1}}",
+       "easydeflate-invaliddeflate": "المحتوى المقدم لا يتم تفريغه بشكل صحيح"
 }
index 9c910c2..1e98162 100644 (file)
        "oct": "ܬܫܪܝܢ ܩܕܡ",
        "nov": "ܬܫܪܝܢ ܐܚܪܝ",
        "dec": "ܟܢܘܢ ܩܕܡ",
+       "january-date": "ܟܢܘܢ ܬܪܝܢܐ $1",
+       "february-date": "ܫܒܛ $1",
+       "march-date": "ܐܕܪ $1",
+       "april-date": "ܢܝܣܢ $1",
+       "may-date": "ܐܝܪ $1",
+       "june-date": "ܚܙܝܪܢ $1",
+       "july-date": "ܬܡܘܙ $1",
+       "august-date": "ܐܒ $1",
+       "september-date": "ܐܝܠܘܠ $1",
+       "october-date": "ܬܫܪܝܢ ܩܕܡܝܐ $1",
+       "november-date": "ܬܫܪܝܢ ܬܪܝܢܐ $1",
+       "december-date": "ܟܢܘܢ ܩܕܡܝܐ $1",
+       "period-am": "ܩܕܡ ܛܗܪܐ",
+       "period-pm": "ܒܬܪ ܛܗܪܐ",
        "pagecategories": "{{PLURAL:$1|ܣܕܪܐ|ܣܕܪ̈ܐ}}",
        "category_header": "ܦܐܬܬ̈ܐ ܒܣܕܪܐ ܕ \"$1\"",
        "subcategories": "ܣܕܪ̈ܐ ܦܪ̈ܥܝܐ",
        "moredotdotdot": "ܝܬܝܪ...",
        "mypage": "ܦܐܬܐ",
        "mytalk": "ܡܡܠܠܐ",
-       "anontalk": "ܡܡܠܠܐ ܕܗܢܐ ܐܝ ܦܝ (IP)",
+       "anontalk": "ܡܡܠܠܐ",
        "navigation": "ܐܠܦܪܘܬܐ",
        "and": "&#32;ܘ",
        "faq": "ܫܘܐܠ̈ܐ ܬܢܝ̈ܐ",
        "searcharticle": "ܙܠ",
        "history": "ܬܫܥܝܬܐ ܕܦܐܬܐ",
        "history_short": "ܬܫܥܝܬܐ",
+       "history_small": "ܬܫܥܝܬܐ",
        "updatedmarker": "ܐܬܚܕܬ ܗܐ ܡܢ ܙܒܢܐ ܕܣܘܥܪܢܝ ܐܚܪܝܐ",
        "printableversion": "ܨܚܚܐ ܡܬܛܒܥܢܐ",
        "permalink": "ܐܣܘܪܐ ܦܝܘܫܐ",
        "print": "ܛܒܘܥ",
        "view": "ܚܘܝ",
+       "view-foreign": "ܚܙܝ ܒ$1",
        "edit": "ܫܚܠܦ",
        "create": "ܒܪܝ",
        "delete": "ܫܘܦ",
        "disclaimers": "ܠܐ ܡܫܬܐܠܢܘܬܐ",
        "disclaimerpage": "Project:ܠܐ ܡܫܬܐܠܢܘܬܐ ܓܘܢܝܬܐ",
        "edithelp": "ܥܘܕܪܢܐ ܠܫܚܠܦܬܐ",
+       "helppage-top-gethelp": "ܥܘܕܪܢܐ",
        "mainpage": "ܦܐܬܐ ܪܝܫܝܬܐ",
        "mainpage-description": "ܦܐܬܐ ܪܝܫܝܬܐ",
        "policy-url": "Project:ܦܘܪܢܣܐ",
        "hidetoc": "ܛܫܝ",
        "collapsible-collapse": "ܐܟܪܟ",
        "collapsible-expand": "ܐܪܘܚ",
+       "confirmable-yes": "ܐܝܢ",
+       "confirmable-no": "ܠܐ",
        "viewdeleted": "ܚܙܝ $1؟",
        "restorelink": "{{PLURAL:$1|ܚܕ ܫܘܚܠܦܐ ܫܝܦܐ|$1 ܫܘܚܠܦ̈ܐ ܫܝܦ̈ܐ}}",
        "site-atom-feed": "$1 ܛܥܝܡܘܬܐ ܕܐܛܘܡ",
        "nstab-template": "ܩܠܒܐ",
        "nstab-help": "ܦܐܬܐ ܕܥܘܕܪܢܐ",
        "nstab-category": "ܣܕܪܐ",
+       "mainpage-nstab": "ܕܦܐ ܪܝܫܝܐ",
        "nosuchaction": "ܠܝܬ ܗܟܘܬ ܥܒܕܐ",
        "nosuchspecialpage": "ܠܝܬ ܗܟܘܬ ܦܐܬܐ ܕܝܠܢܝܬܐ",
        "error": "ܦܘܕܐ",
        "databaseerror": "ܦܘܕܐ ܒܐܣ ܝܕ̈ܥܬܐ",
+       "databaseerror-error": "ܦܘܕܐ: $1",
        "missingarticle-rev": "(ܡܢܝܢܐ ܕܬܢܝܬܐ: $1)",
        "missingarticle-diff": "(ܦܘܪܫܐ: $1, $2)",
        "internalerror": "ܦܘܕܐ ܓܘܝܐ",
        "viewsource": "ܚܙܝ ܡܒܘܥܐ",
        "viewsource-title": "ܚܙܝ ܡܒܘܥܐ ܕ $1",
        "actionthrottled": "ܠܐ ܡܬܡܨܝܢܬܐ ܐܝܬܝܗܝ ܠܡܥܒܕ ܝܬܝܪ ܡܢ ܗܢܐ ܥܒܕܐ",
-       "viewsourcetext": "ܡܨܐ ܐܢܬ ܕܬܚܙܐ ܘܬܢܣܚ ܠܡܒܘ̈ܥܐ ܕܗܕܐ ܦܐܬܐ:",
+       "viewsourcetext": "ܡܨܐ ܐܢܬ ܕܬܚܙܐ ܘܬܢܣܚ ܠܡܒܘ̈ܥܐ ܕܕܦܐ ܗܢܐ.",
+       "viewyourtext": "ܡܨܐ ܐܢܬ ܕܬܚܙܐ ܘܬܢܣܚ ܠܡܒܘ̈ܥܐ <strong>ܕܫܘܚ̈ܠܦܐ ܕܝܠܟ</strong> ܒܕܦܐ ܗܢܐ.",
        "protectedinterface": "ܗܕܐ ܦܐܬܐ ܡܘܬܪܐ ܟܬܝܒܬܐ ܕܦܐܬܐ ܠܚܘܪܙܐ ܒܗܢܐ ܘܝܩܝ, ܘܐܝܬܝܗܝ ܢܛܪܬܐ ܠܡܘܢܥ ܚܘܒܠܐ.\nܠܡܘܣܦ ܐܘ ܫܘܚܠܦ ܬܘܪ̈ܓܡܐ ܕܟܠܗܘܢ ܘܝܩܝ، ܐܦܠܚ [https://translatewiki.net/ translatewiki.net]، ܬܪܡܝܬܐ ܕܬܘܪܓܡܐ ܕܡܝܕܝܐܘܝܩܝ.",
        "editinginterface": "'''ܙܘܗܪܐ:''' ܐܢܬ ܬܫܚܠܦ ܦܐܬܐ ܕܡܬܦܠܚܬ ܒܚܙܝܐ ܟܬܝܒܝܐ ܕܬܚܪܙܬܐ.\nܟܠ ܫܘܚܠܦܐ ܒܦܐܬܐ ܗܕܐ ܢܗܘܐ ܠܗ ܡܥܒܕܢܘܬܐ ܥܠ ܐܣܟܡ ܦܐܬܐ ܕܡܦܠܚܢܐ ܕܡܦܠܚܢ̈ܐ ܐܚܪ̈ܢܐ ܒܘܝܩܝ ܗܢܐ.\nܠܡܘܣܦ ܐܘ ܫܘܚܠܦ ܬܘܪ̈ܓܡܐ ܕܟܠܗܘܢ ܘܝܩܝ، ܐܦܠܚ [https://translatewiki.net/ translatewiki.net]، ܬܪܡܝܬܐ ܕܬܘܪܓܡܐ ܕܡܝܕܝܐܘܝܩܝ.",
        "namespaceprotected": "ܠܝܬ ܠܟ ܦܣܣܐ ܠܫܚܠܦܬܐ ܕܦܐܬܬ̈ܐ ܒܚܩܠܐ ܕ'''$1'''.",
index d49e1c5..2422fa8 100644 (file)
        "customcssprotected": "Nun tienes permisu pa editar esta páxina CSS porque contien preferencies personales d'otru usuariu.",
        "customjsonprotected": "Nun tienes permisu pa editar esta páxina JSON porque contien preferencies personales d'otru usuariu.",
        "customjsprotected": "Nun tienes permisu pa editar esta páxina de JavaScript porque contien preferencies personales d'otru usuariu.",
+       "sitecssprotected": "Nun tienes permisu pa editar esta páxina de CSS porque puede afeutar a tolos visitantes",
+       "sitejsonprotected": "Nun tienes permisu pa editar esta páxina en JSON porque puede afeutar a tolos visitantes",
+       "sitejsprotected": "Nun tienes permisu para editar esta páxina de JavaScript porque puede afeutar a tolos visitantes",
        "mycustomcssprotected": "Nun tien permisu pa editar esta páxina CSS.",
        "mycustomjsonprotected": "Nun tien permisu pa editar esta páxina JSON.",
        "mycustomjsprotected": "Nun tien permisu pa editar esta páxina JavaScript.",
        "converter-manual-rule-error": "Detectóse un error na regla de conversión manual de llingua",
        "undo-success": "La edición se pue esfacer.\nPor favor comprueba la comparanza d'abaxo pa confirmar que ye eso lo que quies facer, y depués guarda los cambios p'acabar d'esfacer la edición.",
        "undo-failure": "Nun pudo esfacese la edición por aciu d'ediciones intermedies conflictives.",
+       "undo-main-slot-only": "Nun pudo desfacese'l cambiu porque tien conteníu fora del slot principal.",
        "undo-norev": "Nun pudo desfacese la edición porque nun esiste o se desanició.",
        "undo-nochange": "Paez que la edición yá ta desfecha.",
        "undo-summary": "Esfacer la revisión $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|alderique]])",
        "diff-paragraph-moved-toold": "Treslladóse'l párrafu. Pulsia pa saltar al allugamientu anterior.",
        "difference-missing-revision": "{{PLURAL:$2|Nun s'alcontró|Nun s'alcontraron}} {{PLURAL:$2|una revisión|$2 revisiones}} d'esta diferencia ($1).\n\nDe vezu la causa d'esto ye siguir un enllaz de diferencia antiguu a una páxina que se desanició.\nSe puen alcontrar más detalles nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rexistru de desanicios].",
        "searchresults": "Resultaos de la busca",
+       "search-filter-title-prefix": "Buscar solo nes páxines con títulos qu'empiecen por «$1»",
+       "search-filter-title-prefix-reset": "Buscar en toles páxines",
        "searchresults-title": "Resultaos de buscar \"$1\"",
        "titlematches": "Coincidencies de los títulos de la páxina",
        "textmatches": "Coincidencies del testu de la páxina",
        "group-autoconfirmed": "Usuarios autoconfirmaos",
        "group-bot": "Bots",
        "group-sysop": "Alministradores",
+       "group-interface-admin": "Alministradores de la interfaz",
        "group-bureaucrat": "Burócrates",
        "group-suppress": "Supresores",
        "group-all": "(toos)",
        "group-autoconfirmed-member": "{{GENDER:$1|usuariu auto-confirmáu|usuaria auto-confirmada}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|alministrador|alministradora}}",
+       "group-interface-admin-member": "{{GENDER:$1|alministrador|alministradora}} de la interfaz",
        "group-bureaucrat-member": "{{GENDER:$1|burócrata}}",
        "group-suppress-member": "{{GENDER:$1|supresor|supresora}}",
        "grouppage-user": "{{ns:project}}:Usuarios",
        "grouppage-autoconfirmed": "{{ns:project}}:Usuarios autoconfirmaos",
        "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Alministradores",
+       "grouppage-interface-admin": "{{ns:project}}: Alministradores de la interfaz",
        "grouppage-bureaucrat": "{{ns:project}}:Burócrates",
        "grouppage-suppress": "{{ns:project}}:Supresores",
        "right-read": "Lleer páxines",
        "right-editusercss": "Editar los ficheros CSS d'otros usuarios",
        "right-edituserjson": "Editar los ficheros JSON d'otros usuarios",
        "right-edituserjs": "Editar los ficheros JavaScript d'otros usuarios",
+       "right-editsitecss": "Editar CSS global del sitiu",
+       "right-editsitejson": "Editar JSON global del sitiu",
+       "right-editsitejs": "Editar JavaScript global del sitiu",
        "right-editmyusercss": "Editar los propios ficheros CSS d'usuariu",
        "right-editmyuserjson": "Editar los ficheros JSON d'usuariu propios",
        "right-editmyuserjs": "Editar los propios ficheros JavaScript d'usuariu",
        "grant-createaccount": "Crear cuentes",
        "grant-createeditmovepage": "Crear, editar y mover páxines",
        "grant-delete": "Desaniciar páxines, revisiones y entraes del rexistru",
-       "grant-editinterface": "Editar l'espaciu de nomes MediaWiki y los CSS/JSON/JavaScript d'usuariu",
+       "grant-editinterface": "Editar l'espaciu de nomes MediaWiki y los JSON del sitiu o d'usuariu",
        "grant-editmycssjs": "Editar los CSS/JSON/JavaScript d'usuariu propios",
        "grant-editmyoptions": "Editar les preferencies d'usuariu propies",
        "grant-editmywatchlist": "Editar la llista de vixilancia propia",
+       "grant-editsiteconfig": "Editar les páxines CSS/JS del sitiu o d'usuariu",
        "grant-editpage": "Editar páxines esistentes",
        "grant-editprotected": "Editar páxines protexíes",
        "grant-highvolume": "Ediciones de gran volume",
        "rcfilters-activefilters": "Filtros activos",
        "rcfilters-activefilters-hide": "Tapecer",
        "rcfilters-activefilters-show": "Amosar",
+       "rcfilters-activefilters-hide-tooltip": "Anubrir l'área de Filtros activos",
+       "rcfilters-activefilters-show-tooltip": "Amosar l'área de Filtros activos",
        "rcfilters-advancedfilters": "Filtros avanzaos",
        "rcfilters-limit-title": "Resultancies qu'amosar",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|cambiu|$1 cambios}}, $2",
        "uploadstash-zero-length": "El ficheru tien tamañu cero.",
        "invalid-chunk-offset": "Allugamientu inválidu del fragmentu",
        "img-auth-accessdenied": "Accesu denegáu",
-       "img-auth-nopathinfo": "Falta PATH_INFO.\nEl to sirvidor nun ta configuráu pa pasar esta información.\nPue tar basáu en CGI y nun tener sofitu pa img_auth.\nVer https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
+       "img-auth-nopathinfo": "Falta la información de ruta.\nEl to sirvidor tien de configurase pa pasar les variables REQUEST_URI y/o PATH_INFO.\nSi yá ta fecho, tenta activar $wgUsePathInfo.\nVer https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
        "img-auth-notindir": "El camín solicitáu nun ta nel direutoriu de xubíes configuráu.",
        "img-auth-badtitle": "Nun se pue construir un títulu validu dende \"$1\".",
        "img-auth-nologinnWL": "Nun tas coneutáu y \"$1\" nun ta na llista blanca.",
        "http-timed-out": "La llamada HTTP escosó'l tiempu.",
        "http-curl-error": "Error al baxar la URL: $1",
        "http-bad-status": "Hebo un problema demientres la llamada HTTP: $1 $2",
+       "http-internal-error": "Error internu d'HTTP.",
        "upload-curl-error6": "Nun se pudo acceder a la URL",
        "upload-curl-error6-text": "Nun pudo algamase la URL dada.\nComprueba que la URL ye correuta y que'l sitiu ta activu.",
        "upload-curl-error28": "Escosó'l tiempu d'espera de la carga",
        "speciallogtitlelabel": "Oxetivu (títulu o {{ns:user}}:nome d'usuariu):",
        "log": "Rexistros",
        "logeventslist-submit": "Amosar",
+       "logeventslist-more-filters": "Amosar más rexistros:",
+       "logeventslist-patrol-log": "Rexistru de revisiones",
+       "logeventslist-tag-log": "Rexistru d'etiquetes",
        "all-logs-page": "Tolos rexistros públicos",
        "alllogstext": "Vista combinada de tolos rexistros disponibles de {{SITENAME}}.\nPues filtrar la vista seleicionando una triba de rexistru, el nome d'usuariu (sensible a mayúscules y minúscules), o la páxina afeutada (tamién sensible a mayúscules y minúscules).",
        "logempty": "Nun hai coincidencies nel rexistru.",
        "cachedspecial-refresh-now": "Ver la más nueva.",
        "categories": "Categoríes",
        "categories-submit": "Amosar",
-       "categoriespagetext": "{{PLURAL:$1|La siguiente categoría contién|Les siguientes categoríes contienen}} páxines o ficheros multimedia.\nLes [[Special:UnusedCategories|categoríes nun usaes]] nun s'amuesen equí.\nVer tamién les [[Special:WantedCategories|categoríes más buscaes]].",
+       "categoriespagetext": "{{PLURAL:$1|La siguiente categoría existe|Les siguientes categoríes existen}} na wiki, y pueden tar usándose o non.\nVer tamién les [[Special:WantedCategories|categoríes más buscaes]].",
        "categoriesfrom": "Amosar les categoríes qu'empiecen por:",
        "deletedcontributions": "Contribuciones d'usuariu desaniciaes",
        "deletedcontributions-title": "Contribuciones d'usuariu desaniciaes",
        "uctop": "(actual)",
        "month": "Dende'l mes (y anteriores):",
        "year": "Dende l'añu (y anteriores):",
+       "date": "Dende la fecha (y anteriores):",
        "sp-contributions-newbies": "Amosar namái les contribuciones de cuentes nueves",
        "sp-contributions-newbies-sub": "Pa cuentes nueves",
        "sp-contributions-newbies-title": "Contribuciones d'usuariu pa cuentes nueves",
        "edit-error-long": "Errores:\n\n$1",
        "revid": "revisión $1",
        "pageid": "ID de páxina $1",
+       "interfaceadmin-info": "$1\n\nLos permisos pa editar los ficheros  CSS, JS y JSON globales del sitiu fueron apocayá dixebraos del permisu <code>editinterface</code>. Si nun entiendes por qué recibes esti error, por favor llei [[mw:MediaWiki_1.32/interface-admin]].",
        "rawhtml-notallowed": "Les etiquetes &lt;html&gt; nun pueden usase fuera de les páxines normales.",
        "gotointerwiki": "Dexando {{SITENAME}}",
        "gotointerwiki-invalid": "El títulu especificáu nun ye válidu.",
        "passwordpolicies-policy-passwordcannotmatchusername": "La contraseña nun puede ser la mesma que'l nome d'usuariu",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "La contraseña nun puede casar con contraseñes torgaes específicamente",
        "passwordpolicies-policy-maximalpasswordlength": "La llonxitú de la contraseña tien de ser menor que {{PLURAL:$1|1 caráuter|$1 caráuteres}}",
-       "passwordpolicies-policy-passwordcannotbepopular": "La contraseña nun puede {{PLURAL:$1|ser la contraseña más popular|tar na llista de $1 contraseñes populares}}"
+       "passwordpolicies-policy-passwordcannotbepopular": "La contraseña nun puede {{PLURAL:$1|ser la contraseña más popular|tar na llista de $1 contraseñes populares}}",
+       "easydeflate-invaliddeflate": "El conteníu dau nun ta comprimíu correutamente"
 }
index f3b60a1..52de5f7 100644 (file)
@@ -22,7 +22,8 @@
                        "Ilğım",
                        "ییلماز",
                        "Saraiki",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "SajjadHKH"
                ]
        },
        "tog-underline": "باغلانتی‌لارین آلتینی خطله:",
        "title-invalid-empty": "آختاردیٛغیٛنیٛز صفحه‌‌نین آدیٛ بوْشدۇر و یا آدلارفضاسیٛندا یالنیٛز آدیٛ وار.",
        "title-invalid-utf8": "ایسته‌نیلن صفحه‌نین آدیندا بیر یانلیش UTF-8 کاراکتِری وار.",
        "title-invalid-interwiki": "آختاردیٛغیٛنیٛز صفحه‌ آدیٛیٛندا بیر ایستیفاده‌ اوْلۇنا بیلمه‌‌ین اینتئر ویکی باغلانتیٛسیٛ وار.",
+       "title-invalid-talk-namespace": "ایسته دیینیز صفحه آرتیق وار اولمایان بیر \"دانیشیق صفحه\" سینه ایشاره ادیر",
        "title-invalid-characters": "ایسته‌نیلن صفحه‌نین آدیندا، یانلیش کاراکتِرلر وار: «$1»",
+       "title-invalid-magic-tilde": "ایسته دیینیز صفحه ده دوغرو اولمایان \"تیلد\" کاراکترلری واردیر\n(<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "ایسته دیینیز عنوان چوخ اوزوندور. عنواننیز $1 {{PLURAL:$1|byte|bytes}} کارکتردن داها چوخ UTF-8 کاراکترینه صاحیب اولمامالیدیر.",
+       "title-invalid-leading-colon": "ایسته دیینیز عنوان دوغرو اولمایان \"کولون\" کاراکتری ایله باشلانیر.",
        "perfcached": "بو دئیتا، کَش اولوب‌دور و اولا بیلر آپدیت اولماسین. چوخو {{PLURAL:$1|بیر نتیجه|$1 نتیجه}} کَش‌ده‌دیر.",
        "perfcachedts": "بو دئیتا کَش اولوب‌دور، سون دفعه $1 واختیندا آپدین اولونوبدور. چوخو {{PLURAL:$4|بیر نتیجه|$4 نتیجه}} کَش‌ده‌دیر.",
        "querypage-no-updates": "بو صفحه ده آپدیت ائتمک ایندی باغلانیب‌دیر.\nبورداکی دئیتا یئنی‌لشمیه‌جکلر.",
        "viewsource": "قایناغا باخ",
        "viewsource-title": "$1 اوچون قایناغا باخین",
        "actionthrottled": "سیزین چالیشمانیزین قاباغی آلیندی",
-       "actionthrottledtext": "Ø¢Ù\86تÛ\8c-اÛ\8cسپاÙ\85 Ø­Ø±Ú©Øªâ\80\8cÙ\84رÛ\8c Ú¯Ø¤Ø±Ù\87، بیر حرکتی قیسا بیر زامان آرالیغیندا چوخئتمه‌نیز انگللندی، و سیز حدی آشمیسینیز. لطفاً بیر نئچه دقیقه سونرا یئنی‌دن یوخلایین.",
+       "actionthrottledtext": "سÙ\88ءاستÙ\81ادÙ\87 Ù\84رÛ\8cÙ\86 Ù\82اباÙ\82Û\8cÙ\86 Ø¢Ù\84Ù\85اخ Ø§Ù\88Ú\86Ù\88Ù\86، بیر حرکتی قیسا بیر زامان آرالیغیندا چوخئتمه‌نیز انگللندی، و سیز حدی آشمیسینیز. لطفاً بیر نئچه دقیقه سونرا یئنی‌دن یوخلایین.",
        "protectedpagetext": "بو صحیفه دیَیشدیرمک و باشقا ایشلر اوچون باغلی‌دیر.",
        "viewsourcetext": "سیز بو صفحه‌نین قایناغینی گؤروب و کؤچوره بیلرسینیز.",
        "viewyourtext": "سیز بو صفحه‌ده <strong>اؤز دَییشیکلیکلرینیزین</strong> قایناغینی گؤروب و کوپی ائده بیلرسینیز.",
        "cascadeprotected": "بو صحیفه دَییشیکلیکلر قاباغیندا قورونوب‌دور، چونکو بو آشاغیداکی، آبشاری {{PLURAL:$1|سئچمه‌سی|سئچمه‌لری}} سئچیلن، قورونان {{PLURAL:$1|صحیفه|صحیفه‌لر}} ایچینده‌دیر:\n$2",
        "namespaceprotected": "سیز '''$1''' آدفضاسینداکی صحیفه‌لرین دَییشمه‌سینه ایجازه‌نیز یوخدور.",
        "customcssprotected": "سیز بو CSS صفحه‌سینین دَییشمه‌سینه ایجازه‌نیز یوخدور نییه کی اون‌دا باشقا ایشلدنین شخصی تنظیملری واردیر.",
+       "customjsonprotected": "سیزین بو JSON صفحه‌سینی دَییشمه‌ حقیز یوخدور، نییه کی اون‌دا باشقا ایشلدنین شخصی تنظیملری واردیر.",
        "customjsprotected": "سیز بو جاوااسکریپت صفحه‌سینین دَییشمه‌سینه ایجازه‌نیز یوخدور، نییه کی اون‌دا باشقا ایشلدنین شخصی تنظیملری واردیر.",
+       "sitecssprotected": "سیز بو CSS صفحه سینی دئیشه بیلمه سیز چونکی دئیشدیینیز موردلر بوتون ایشلدن لره تاثیر قویا بیلر.",
+       "sitejsonprotected": "سیزین بو JSON صفحه‌سینی دَییشمه‌ حقیز یوخدور، نییه کی دییشملرینیز بوتون ایشلدن لره تاثیر قویا بیلر.",
+       "sitejsprotected": "سیزین بو JavaScript صفحه‌سینی دَییشمه‌ حقیز یوخدور، نییه کی دییشملرینیز بوتون ایشلدن لره تاثیر قویا بیلر.",
        "mycustomcssprotected": "بو CSS صحیفه‌سینی دَییشدیرمگه ایجازه‌نیز یوخدور.",
+       "mycustomjsonprotected": "سیزین بو JSON صفحه‌سینی دَییشمه‌ حقیز یوخدور.",
        "mycustomjsprotected": "بو جاوااسکریپت صحیفه‌سینی دَییشدیرمگه ایجازه‌نیز یوخدور.",
        "myprivateinfoprotected": "اؤز گیزلی بیلگیلرینیزی دَییشدیرمگه ایجازه‌نیز یوخدور.",
        "mypreferencesprotected": "اؤز ترجیحلرینیزی دَییشدیرمگه ایجازه‌نیز یوخدور.",
        "ns-specialprotected": "اؤزل یارپاقلاری دَییشمک اولماز.",
        "titleprotected": "بو آددا یارپاغین یارادیلماسی [[User:$1|$1]] ایشلدن طرفیندن باغلانیب‌دیر.\nاونون نَدَن‌لیگی بودور: <em>$2</em>.",
        "filereadonlyerror": "«$2» آنباری‌نین تکجه-اوخومالی دوروموندا اولدوغونا گؤره، «$1»-ی دَییشمک اولماز.\n\nاونو باغلایان ایداره‌چی بو ایضاحی وئریب‌دیر: $3",
+       "invalidtitle": "گئچرسیز عنوان",
        "invalidtitle-knownnamespace": "«$2» آدآلان‌لی و «$3» یازی‌لی یانلیش باشلیق",
        "invalidtitle-unknownnamespace": "تانینمامیش $1 نومره‌لی آدآلان و «$2» یازی‌لی یانلیش باشلیق",
        "exception-nologin": "گیریش ائتمه‌میسینیز",
        "cannotloginnow-title": "ایندی گیریش اوْلونمازدیر",
        "cannotloginnow-text": "$1-ی ایشلدرکن گیریش اوْلونمازدیر",
        "cannotcreateaccount-title": "حساب یاراتماق اوْلمور",
+       "cannotcreateaccount-text": "مستقیم آد یازدیرماق بو ویکی ده فعال ادیلمیب.",
        "yourdomainname": "سیزین دامنه:",
        "password-change-forbidden": "بو ویکی‌ده رمزلری دَییشه بیلنمه‌سینیز.",
        "externaldberror": "بیر دیتابیس دوغرولاما خطاسی اولدو، یوخسا سیزین ائشیک حسابینیزی گونجل‌لدمگه ایجازه‌نیز یوخدور.",
        "createacct-email-ph": "ایمیل آدرسینیزی یازین",
        "createacct-another-email-ph": "ایمیل آدرسینیزی یازین",
        "createaccountmail": "بیر گئچیجی راست‌گله رمز ایشلت و اونو آشاغیدا بللندیرن ایمیل آدرسینه گؤندر",
+       "createaccountmail-help": "بیر آیری ایشلدنه گئچیش یازی سین بیلمه دن آد یازدیرماق ایچین دیر",
        "createacct-realname": "دوغرو آد (ایستگه باغلی)",
        "createacct-reason": "سبب",
        "createacct-reason-ph": "ندن سیز باشقا حساب یارادیرسینیز",
        "createacct-benefit-body2": "{{PLURAL:$1|صفحه}}",
        "createacct-benefit-body3": "سون {{PLURAL:$1|قاتیلان|قاتیلانلار}}",
        "badretype": "یازدیغینیز رمزلر بیر دئییل‌لر.",
+       "usernameinprogress": "بو اسم ده بیر ایشلده نین آد یازدیرماق مرحله سی داها اونجه دن باشلامیشدیر.\nلطفا صبیرلی اولون.",
        "userexists": "یازدیغینیز آد، اؤنجه‌دن ایشده‌دیر.\nلوطفاً باشقا بیر آد سئچین.",
        "loginerror": "گیریش خطاسی",
        "createacct-error": "حساب یاراتما خطاسی",
        "nocookiesnew": "ایستیفاده‌چی حسابی یارادیلدی، اما سیز گیرمه‌میسینیز.\n{{SITENAME}} ایستیفاده‌چیلری گیردیرمک اوچون، کوکی‌لری ایشلدیر.\nسیزین کوکی‌لریز باغلانیب‌دیر.\nلوطفاً اونلاری آچین و سونرا یئنی ایستیفاده‌چی آدی و رمزینیزله گیریش ائدین.",
        "nocookieslogin": "{{SITENAME}} ایشلدنلری گیردیرمک اوچون، کوکی‌لری ایشلدیر.\nسیزین کوکی‌لریز باغلانیب‌دیر.\nلوطفا اونلاری آچین و یئنی‌دن چالیشین.",
        "nocookiesfornew": "قایناغینی دوغرو اولدوغونو بیلمه‌مک اوچون، ایشلدن حسابی یارادیلمادی.\nکوکی‌لرینیزین آچیق اولدوغون دان آرخایین اولوب، بو یارپاغی یئنی‌دن یوکله‌ییب، یئنی‌دن چالیشین.",
+       "createacct-loginerror": "ایشله دنین آد یازدیریلماسی قوتولوبدور، آنجاق سیز اتوماتیک اولاراخ ایشله دن صفحه سینه گیریش اده بیلمه دینیز. لطفا بوردان [[Special:UserLogin|manual login]] دووام ادینیز.",
        "noname": "گئچرلی ایستیفاده‌چی آدی وئرمه‌دینیز.",
        "loginsuccesstitle": "گیریلدینیز",
        "loginsuccess": "'''سیز ایندی {{SITENAME}} سایتینا، «$1» آدی‌له گیرمیسینیز.'''",
-       "nosuchuser": "«$1» Ø¢Ø¯Ù\84ا Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Û\8cÙ\88خدÙ\88ر.\nاÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c آدلاری، حرفلرین بؤیوک/کیچیک‌لیگینه حساس‌دیلار.\nیازدیغینیزا یئنی‌دن باخین، یوخسا [[Special:CreateAccount|یئنی بیر حساب آچین]].",
+       "nosuchuser": "«$1» Ø¢Ø¯Ù\84ا Ø§Û\8cØ´Ù\84Ù\87 Ø¯Ù\86 Û\8cÙ\88خدÙ\88ر.\nاÛ\8cØ´Ù\84Ù\87 Ø¯Ù\86 آدلاری، حرفلرین بؤیوک/کیچیک‌لیگینه حساس‌دیلار.\nیازدیغینیزا یئنی‌دن باخین، یوخسا [[Special:CreateAccount|یئنی بیر حساب آچین]].",
        "nosuchusershort": "\"$1\" آدلا ایستیفاده‌چی یوخدور.\nدوزگون یازدیغینیزدان آرخایین اولون.",
        "nouserspecified": "بیر ایستیفاده‌چی آدی وئرمه‌لیسینیز.",
        "login-userblocked": "بو ایستیفاده چی باغلانیب‌دیر. گیریشه ایجازه یوخدور.",
-       "wrongpassword": "غÙ\84Ø· Ø±Ù\85ز وئریلدی.\nیئنی‌دن یازین.",
+       "wrongpassword": "غÙ\84Ø· Ø§Û\8cØ´Ù\84Ù\87 Ø¯Ù\86 Ø¢Ø¯ Û\8cا Ø¯Ø§ Ú¯Û\8cرÛ\8cØ´ Ø±Ù\85زÛ\8c وئریلدی.\nیئنی‌دن یازین.",
        "wrongpasswordempty": "بوش رمز وئردینیز.\nیئنی‌دن یازین.",
        "passwordtooshort": "رمز، آزی {{PLURAL:$1|بیر|$1}} کاراکتئر اولمالی‌دیر.",
        "passwordtoolong": "رمز،سوزو چوخلوغو {{PLURAL:$1|۱ سوز|$1 سوز}} کاراکتئر اولمامالی‌دیر.",
+       "passwordtoopopular": "معمول ایستیفاده اولان گیریش کدلارین دان ایستفاده اده بیلمه سیز. لطفا داها زور اولان بیز گیریش کدی یازینیز.",
        "password-name-match": "رمزینیز ایستیفاده‌چی آدینیزلا فرق‌لی اولمالی‌دیر.",
        "password-login-forbidden": "بو ایستیفاده‌چی آدی و رمزی ایشلدمک، قاداغان اولوب‌دور.",
        "mailmypassword": "یئنی رمزی ایمیل ایله گؤندر",
        "changepassword-throttled": "سیزین چوخ گیریش چالیشماغینیز اولوب‌دور.\nلوطفاً یئنی‌دن چالیشماق‌دان اؤنجه $1 دؤزون.",
        "botpasswords": "روبات رمزی",
        "botpasswords-disabled": "روبات پسووْردلاری ایشلدن سالینیبدیر.",
+       "botpasswords-existing": "وار اولان \"بات\" گیریش کدلاری",
        "botpasswords-createnew": "روبات رمزی یارات",
+       "botpasswords-editexisting": "وار اولان بیر گیریش کدی دئیشتیر",
+       "botpasswords-label-needsreset": "(گیریش کدونو دئیشتیرماق احتیاجی وار)",
        "botpasswords-label-appid": "روبات آدی:",
        "botpasswords-label-create": "یارات",
        "botpasswords-label-update": "آپدیت ائت",
index fa66673..568b1c1 100644 (file)
        "ns-specialprotected": "Немагчыма рэдагаваць спэцыяльныя старонкі.",
        "titleprotected": "Стварэньне старонкі з такой назвай было забароненае {{GENDER:$1|ўдзельнікам|ўдзельніцай}} [[User:$1|$1]].\nПрычына забароны: <em>$2</em>.",
        "filereadonlyerror": "Немагчыма зьмяніць файл «$1», бо файлавае сховішча «$2» знаходзіцца ў рэжыме толькі для чытаньня.\n\nСыстэмны адміністратар, які абмежаваў доступ, пазначыў прычыну: «$3».",
+       "invalidtitle": "Няслушная назва",
        "invalidtitle-knownnamespace": "Няслушны загаловак з прасторай назваў «$2» і тэкстам «$3»",
        "invalidtitle-unknownnamespace": "Няслушны загаловак зь невядомым нумарам прасторы назваў $1 і тэкстам «$2»",
        "exception-nologin": "Вы не ўвайшлі ў сыстэму",
        "right-editusercss": "Рэдагаваньне CSS-файлаў іншых удзельнікаў",
        "right-edituserjson": "Рэдагаваньне JSON-файлаў іншых удзельнікаў",
        "right-edituserjs": "Рэдагаваньне JavaScript-файлаў іншых удзельнікаў",
+       "right-editsitecss": "Рэдагаваньне агульнасайтавага CSS",
+       "right-editsitejson": "Рэдагаваньне агульнасайтавага JSON",
+       "right-editsitejs": "Рэдагаваньне агульнасайтавага JavaScript",
        "right-editmyusercss": "Рэдагаваць свае карыстальніцкія CSS-файлы",
        "right-editmyuserjson": "Рэдагаваньне вашых уласных JSON-файлаў",
        "right-editmyuserjs": "Рэдагаваць свае карыстальніцкія JavaScript-файлы",
        "grant-editmycssjs": "Рэдагаваньне вашага CSS/JSON/JavaScript",
        "grant-editmyoptions": "Рэдагаваньне вашых наладаў удзельніка",
        "grant-editmywatchlist": "Рэдагаваньне вашага сьпісу назіраньня",
+       "grant-editsiteconfig": "Рэдагаваньне агульнасайтавага і карыстальніцкага CSS/JS",
        "grant-editpage": "Рэдагаваньне існых старонак",
        "grant-editprotected": "Рэдагаваньне абароненых старонак",
        "grant-highvolume": "Рэдагаваньне з высокай інтэнсіўнасьцю",
        "upload-file-error": "Унутраная памылка",
        "upload-file-error-text": "Адбылася ўнутраная памылка пры стварэньні часовага файлу на сэрвэры.\nКалі ласка, зьвярніцеся да [[Special:ListUsers/sysop|адміністратара]].",
        "upload-misc-error": "Невядомая памылка загрузкі",
-       "upload-misc-error-text": "Адбылася невядомая памылка пад час загрузкі.\nКалі ласка, упэўніцеся, што URL-адрас слушны, і паспрабуйце ізноў.\nКалі памылка паўтарыцца, зьвярніцеся да [[Special:ListUsers/sysop|адміністратара]].",
+       "upload-misc-error-text": "Адбылася невядомая памылка падчас загрузкі.\nКалі ласка, упэўніцеся, што URL-адрас слушны, і паспрабуйце ізноў.\nКалі памылка паўторыцца, зьвярніцеся да [[Special:ListUsers/sysop|адміністратара]].",
        "upload-too-many-redirects": "URL-адрас утрымлівае зашмат перанакіраваньняў",
        "upload-http-error": "Узьнікла памылка HTTP: $1",
-       "upload-copy-upload-invalid-domain": "Капіяваньне загрузак не дазволенае ў гэтым дамэне.",
+       "upload-copy-upload-invalid-domain": "Капіяваньне загрузак не дазволенае з гэтага дамэну.",
        "upload-foreign-cant-upload": "Гэтая вікі не наладжаная для загрузкі файлаў у запытанае вонкавае сховішча файлаў.",
        "upload-foreign-cant-load-config": "Не атрымалася загрузіць канфігурацыю для загрузкі файлаў у вонкавае сховішча.",
        "upload-dialog-disabled": "Загрузка файлаў з дапамогай гэтага дыялёгу адключаная ў гэтай вікі.",
        "filehist-filesize": "Памер файла",
        "filehist-comment": "Камэнтар",
        "imagelinks": "Выкарыстаньне файла",
-       "linkstoimage": "{{PLURAL:$1|1=Наступная старонка спасылаецца|Наступныя старонкі спасылаюцца}} на гэты файл:",
-       "linkstoimage-more": "Больш чым $1 {{PLURAL:$1|старонка спасылаецца|старонкі спасылаюцца|старонак спасылаюцца}} на гэты файл.\nУ гэтым сьпісе толькі $1 {{PLURAL:$1|спасылка|спасылкі|спасылак}} на гэты файл.\nДаступны таксама [[Special:WhatLinksHere/$2|поўны сьпіс]].",
-       "nolinkstoimage": "Ніводная старонка не спасылаецца на гэты файл.",
+       "linkstoimage": "{{PLURAL:$1|1=Наступная старонка выкарыстоўвае|Наступныя старонкі выкарыстоўваюць}} гэты файл:",
+       "linkstoimage-more": "Больш чым $1 {{PLURAL:$1|старонка выкарыстоўвае|старонкі выкарыстоўваюць|старонак выкарыстоўваюць}} гэты файл.\nУ гэтым сьпісе толькі $1 {{PLURAL:$1|старонка, якая выкарыстоўвае|старонкі, якія выкарыстоўваюць|старонак, якія выкарыстоўваюць}} гэты файл.\nДаступны таксама [[Special:WhatLinksHere/$2|поўны сьпіс]].",
+       "nolinkstoimage": "Ніводная старонка не выкарыстоўвае гэты файл.",
        "morelinkstoimage": "Паказаць [[Special:WhatLinksHere/$1|болей спасылак]] на гэты файл.",
        "linkstoimage-redirect": "$1 (перанакіраваньне на файл) $2",
        "duplicatesoffile": "{{PLURAL:$1|1=Наступны файл дублюе|Наступныя файлы дублююць}} гэты файл ([[Special:FileDuplicateSearch/$2|падрабязнасьці]]):",
        "edit-error-long": "Памылкі:\n\n$1",
        "revid": "вэрсія $1",
        "pageid": "Ідэнтыфікатар старонкі $1",
+       "interfaceadmin-info": "$1\n\nДазволы на рэдагаваньне агульнасайтавых CSS/JS/JSON-файлаў былі нядаўна вылучаныя з права <code>editinterface</code>. Калі вы не разумееце, чаму атрымліваеце гэтую памылку, глядзіце [[mw:MediaWiki_1.32/interface-admin]].",
        "rawhtml-notallowed": "&lt;html&gt;-тэгі ня могуць быць выкарыстаныя па-за звычайнымі старонкамі.",
        "gotointerwiki": "Пакідаем {{grammar:вінавальны|{{SITENAME}}}}",
        "gotointerwiki-invalid": "Пазначаная назва зьяўляецца няслушнай.",
        "passwordpolicies-policy-passwordcannotmatchusername": "Пароль ня можа супадаць зь імем ўдзельніка",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Пароль ня можа супадаць з паролямі з чорнага сьпісу",
        "passwordpolicies-policy-maximalpasswordlength": "Пароль мусіць быць даўжынёй менш за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}",
-       "passwordpolicies-policy-passwordcannotbepopular": "Пароль ня можа {{PLURAL:$1|супадаць з самым папулярным паролем|быць зь сьпісу $1 папулярных пароляў}}"
+       "passwordpolicies-policy-passwordcannotbepopular": "Пароль ня можа {{PLURAL:$1|супадаць з самым папулярным паролем|быць зь сьпісу $1 папулярных пароляў}}",
+       "easydeflate-invaliddeflate": "Пададзены зьмест ня сьціснуты адпаведным чынам"
 }
index 505af10..3e02cea 100644 (file)
        "right-block": "Спиране на достъпа до редактиране",
        "right-blockemail": "Блокиране на потребители да изпращат писма по е-поща",
        "right-hideuser": "Блокиране и скриване на потребителско име",
-       "right-ipblock-exempt": "Пренебрегване на блокирания по IP blocks, автоматични блокирания и блокирани IP интервали",
+       "right-ipblock-exempt": "Пренебрегване на блокирания по IP, автоматични блокирания и блокирани IP интервали",
        "right-unblockself": "Собствено отблокиране",
        "right-protect": "Променяне на нивото на защита и редактиране на каскадно-защитените страници",
        "right-editprotected": "Редактиране на страници защитени като „{{int:protect-level-sysop}}“",
        "speciallogtitlelabel": "Цел (заглавие или {{ns:user}}:потребителско име за потребител):",
        "log": "Дневници",
        "logeventslist-submit": "Показване",
+       "logeventslist-more-filters": "Показване на още дневници:",
+       "logeventslist-patrol-log": "Дневник на патрула",
+       "logeventslist-tag-log": "Дневник на етикетите",
        "all-logs-page": "Всички публични дневници",
        "alllogstext": "Смесено показване на записи от всички налични дневници в {{SITENAME}}.\nМожете да ограничите прегледа, като изберете вид на дневника, потребителско име или определена страница.",
        "logempty": "Дневникът не съдържа записи, отговарящи на избрания критерий.",
index f07c2c3..2e7eb73 100644 (file)
        "protectedpages-timestamp": "সময়বার্তা",
        "protectedpages-page": "পাতা",
        "protectedpages-expiry": "মেয়াদোত্তীর্ণ হবে",
-       "protectedpages-performer": "বà§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦¸à§\81রà¦\95à§\8dষিত à¦\95রা à¦¹à¦\9aà§\8dà¦\9bà§\87",
+       "protectedpages-performer": "সà§\81রà¦\95à§\8dষা à¦¯à§\8bà¦\97 à¦\95রà§\87à¦\9bà§\87ন",
        "protectedpages-params": "সুরক্ষা প্যারামিটার",
        "protectedpages-reason": "কারণ",
        "protectedpages-submit": "পাতা প্রদর্শন করুন",
        "magiclink-tracking-isbn": "আইএসবিএন জাদু সংযোগ ব্যবহার করা পাতা",
        "magiclink-tracking-isbn-desc": "এই পাতাটি আইএসবিএন যাদু সংযোগ ব্যবহার করে। কিভাবে মাইগ্রেট করবেন জানতে [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] দেখুন।",
        "specialloguserlabel": "সম্পাদক:",
-       "speciallogtitlelabel": "লà¦\95à§\8dষà§\8dয (বà§\8dযবহারà¦\95ারà§\80র à¦\9cনà§\8dয à¦¶à¦¿à¦°à§\8bনাম বা {{ns:user}}:ব্যবহারকারী নাম):",
+       "speciallogtitlelabel": "লà¦\95à§\8dষà§\8dয (পাতার নাম বা {{ns:user}}:ব্যবহারকারী নাম):",
        "log": "লগগুলি",
        "logeventslist-submit": "দেখাও",
        "logeventslist-more-filters": "অতিরিক্ত লগ দেখান:",
        "protect-cascadeon": "এই পাতাটি বর্তমানে সুরক্ষিত আছে, কারণ পাতাটি নিচের {{PLURAL:$1|পাতায়|পাতাগুলিতে}} অন্তর্ভুক্ত, {{PLURAL:$1|যাতে|যেগুলিতে}} প্রপাতাকার সুরক্ষা চালু আছে। আপনি এই পাতাটির সুরক্ষা স্তর পরিবর্তন করতে পারেন, তবে এটি প্রপাতাকার সুরক্ষাটিতে কোন পরিবর্তন সাধন করবে না।",
        "protect-default": "সমস্ত ব্যবহারকারীর জন্য",
        "protect-fallback": "\"$1\" অধিকার রয়েছে এমন ব্যবহারকারীদের জন্য অনুমতি",
-       "protect-level-autoconfirmed": "শুধুমাত্র স্বয়ং পরীক্ষিত ব্যবহারকারীদের জন্য",
+       "protect-level-autoconfirmed": "শুধুমাত্র স্বয়ংনিশ্চিতকৃত ব্যবহারকারীদের জন্য",
        "protect-level-sysop": "কেবল প্রশাসকদের জন্য অনুমতি",
        "protect-summary-cascade": "প্রপাতাকার",
        "protect-expiring": "মেয়াদোত্তীর্ণ হবার তারিখ $1 (ইউটিসি)",
        "logentry-patrol-patrol": "$1 ব্যবহারকারী $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {{GENDER:$2|চিহ্নিত}} করেছেন",
        "logentry-patrol-patrol-auto": "$1 ব্যবহারকারী স্বয়ংক্রিয়ভাবে $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {{GENDER:$2|চিহ্নিত}} করেছেন",
        "logentry-newusers-newusers": "$1 ব্যবহারকারী অ্যাকাউন্টটি {{GENDER:$2|তৈরি করা}} হয়েছে",
-       "logentry-newusers-create": "বà§\8dযবহারà¦\95ারà§\80 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f $1 {{GENDER:$2|তà§\88রà§\80 করা}} হয়েছে",
+       "logentry-newusers-create": "বà§\8dযবহারà¦\95ারà§\80 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f $1 {{GENDER:$2|তà§\88রি করা}} হয়েছে",
        "logentry-newusers-create2": "$1 ব্যবহারকারী $3 নামের অ্যাকাউন্টটি {{GENDER:$2|তৈরী}} করেছেন",
        "logentry-newusers-byemail": "$1, $3 ব্যবহারকরী অ্যাকাউন্টটি {{GENDER:$2|তৈরী করেছেন}} এবং পাসওয়ার্ড ইমেইলের মাধ্যমে পাঠানো হয়েছে",
        "logentry-newusers-autocreate": "$1 অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে {{GENDER:$2|তৈরি}} হয়েছে",
index 2516889..4f58d19 100644 (file)
        "cancel": "取消",
        "moredotdotdot": "固価...",
        "morenotlisted": "茲萆單單𣍐完整",
-       "mypage": "Nguāi gì hiĕk-miêng",
+       "mypage": "hiĕk-miêng",
        "mytalk": "我其討論",
        "anontalk": "攀講",
        "navigation": "Dô̤-hòng",
        "newarticle": "(新)",
        "newarticletext": "汝已經跟鏈接跟遘無存在其頁面了。\n卜想創建頁面,敆下底其框框𡅏拍字(覷蜀覷[$1 幫助頁面]有無更更価其幫助)。\n如果汝是無注意來遘茲蜀萆頁面,篤囇汝其瀏覽器上其「返回」按鈕。",
        "anontalkpagetext": "<em>茲是未登錄其用戶討論頁面。</em>\n故此儂家著使數字IP來確定伊。\n總款其IP地址會乞雅価用戶共享。\n如果蜀隻未登錄其用戶見覺無關係其評論指向汝,起動[[Special:CreateAccount|開賬戶]]或者[[Special:UserLogin|登錄]]來避免以後共其它未登錄其用戶混蜀堆。",
-       "noarticletext": "現在敆茲蜀頁𡅏無文字。汝會使敆其它其頁面𡅏[[Special:Search/{{PAGENAME}}|討蜀討茲蜀萆標題]],<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 討相關其記錄],或者[{{fullurl:{{FULLPAGENAME}}|action=edit}}創建茲蜀頁]</span>。",
+       "noarticletext": "現在敆茲蜀頁𡅏無文字。汝會使敆其它其頁面𡅏[[Special:Search/{{PAGENAME}}|討蜀討茲蜀萆標題]],<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 討相關其記錄],或者[{{fullurl:{{FULLPAGENAME}}|action=edit}} 創建茲蜀頁]</span>。",
        "clearyourcache": "'''注意:'''保存以後,汝可能固著刷新汝其瀏覽器緩存來看遘變化。\n* '''火狐/Safari:'''擪下''Shift''篤蜀篤''重新載入'',或者擪蜀擪''Ctrl+F5''或者''Ctrl+R'' (''⌘-R''敆Mac懸頂)\n* '''Google Chrome:'''擪''Ctrl+Shift+R''(敆Mac𡅏使''⌘-Shift-R'')\n* '''Internet Explorer:'''擪''Ctrl''其時候篤蜀篤''刷新'',或者擪''Ctrl+F5''\n* '''Opera:'''敆''工具→首選項''𡅏清除緩存",
        "note": "<strong>注意:</strong>",
        "previewnote": "'''記定茲若是蜀萆預覽。'''\n汝其改變固𡅏未保存!",
index 1e84913..8e2621e 100644 (file)
        "revdelete-text-file": "وەشانە سڕاوەکانی پەڕگە ھێشتا لە مێژووی پەڕگەدا دەردەکەوێت بەڵام بەشێک لە ناوەرۆکەکەیان بۆ ھەمووان لەبەر دەست دەبێت.",
        "logdelete-text": "ڕووداوە سڕاوەکانی لۆگ ھێشتا لە لۆگەکاندا دەردەکەوێت بەڵام بەشێک لە ناوەرۆکەکەیان بۆ ھەمووان لەبەر دەست دەبێت.",
        "revdelete-text-others": "بەڕێوەبەرانی تر ھێشتا دەتوانن ناوەرۆکی شاردراو ببینن و بیھێننەوە، مەگەر سنووردارکردنی تر ڕێک بخرێت.",
-       "revdelete-confirm": "تکایە پشتڕاست بکەوە دەتەوێ ئەمە بکەیت و لە ئاکامەکەی ئاگاداریت و ئەمە بە پێی [[{{MediaWiki:Policy-url}}|سیاسەتنامە]] دەکەیت.",
+       "revdelete-confirm": "تکایە پشتڕاست بکەوە دەتەوێ ئەمە بکەیت و لە ئاکامەکەی ئاگاداریت و ئەمە بە پێی [[{{MediaWiki:Policy-url}}|سیاسەتەکان و ڕێساکان]] دەکەیت.",
        "revdelete-suppress-text": "بەرگری دەبێ <strong>تەنها</strong> بۆ ئەم بابەتانە بەکاربهێندرێت:\n* سووکایەتیکردن بە کەسایەتییەک<br />\n* بڵاوکردنەوەی زانیاریی تاکەکەسی نەگونجاو<br />\n*: <em>ناونیشانی ماڵ یا ژمارە تەلەفۆن و وەک ئەمانە.</em>",
        "revdelete-legend": "ڕێکخستنی سنووردارکردنی دیاریکردن",
        "revdelete-hide-text": "دەقی پێداچوونەوە",
        "revdelete-show-no-access": "هەڵە لە نیشان‌دانی بابەتی ڕیکەوتی $1، کات $2: ئەم بابەتە وەک \"بەرگیراو\"‌ نیشانکراوە.\nدەسەڵاتی دەستپێگەیشتنی ئەوەت نیە.",
        "revdelete-modify-no-access": "هەڵە لە چاکسازی بابەتی ڕیکەوتی $1، کات $2: ئەم بابەتە وەک \"بەرگیراو\"‌ نیشان‌ کراوە.\nدەسەڵاتی دەستپێگەیشتنی ئەوەت نیە.",
        "revdelete-modify-missing": "هەڵە لە چاکسازی بابەت خاوەن پێناسەی $1: لە بنکەدراو ون بووە !",
-       "revdelete-no-change": "'''ئاگاداری:''' بابەتی ڕێکەوتی $2، کات $1، لە پێش‌دا خاوەن داخوازی هەلبژاردەکانی بیندرانە.",
+       "revdelete-no-change": "'''ئاگاداری:''' بابەتی ڕێکەوتی $2، کات $1، خاوەن داخوازی هەلبژاردەکانی بیندرانە.",
        "revdelete-concurrent-change": "هەڵە لە چاکسازی بابەتی ڕێکەوتی $2 کات $1: لەوانەیە کاتێ تۆ هەوڵی چاکسازیت ئەدا، کەسێکی‌تر دۆخەکەی گۆڕابێت.\nتکایە چاو لە لۆگەکەی بکە.",
        "revdelete-only-restricted": "ھەڵە لە شاردنەوەی بابەتی ڕێکەوتی $2ی $1: ناتوانی لە بینینی بابەتەکان لە لایەن بەڕێوبەرانەوە بەرگری بکەیت، مەگەر یەکێکی تر لە ھەڵبژاردەکانی بەرچاوکەوتن ھەڵبژێریت.",
        "revdelete-reason-dropdown": "*ھۆکارە باوەکانی سڕینەوە\n** لادان لە مافی لەبەرگرتنەوە\n** بۆچوون یان زانیاریی تاکەکەسیی نەشیاو\n** ناوی بەکارھێنەریی نەشیاو\n** زانیارییەک کە دەتوانێ بوختاناوی بێت",
index 7089f17..1c99d15 100644 (file)
        "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 {{GENDER:$1|zamkl|zamkla|zamkl uživatel}} [[User:$1|$1]].\nUdaným důvodem bylo <em>$2</em>.",
        "filereadonlyerror": "Nelze změnit soubor „$1“, protože úložiště souborů „$2“ je pouze pro čtení.\n\nSprávce serveru, který úložiště zamkl, poskytl toto zdůvodnění: „$3“.",
+       "invalidtitle": "Neplatný název",
        "invalidtitle-knownnamespace": "Neplatný název se jmenným prostorem „$2“ a textem „$3“",
        "invalidtitle-unknownnamespace": "Neplatný název s neznámým číslem jmenného prostoru $1 a textem „$2“",
        "exception-nologin": "Nejste přihlášen(a)",
index e0286c6..43af650 100644 (file)
        "namespaceprotected": "Du har ikke rettigheder til at redigere sider i $1-navnerummet.",
        "customcssprotected": "Du har ikke tilladelse til at redigere denne CSS-side, da den indeholder en anden brugers personlige indstillinger.",
        "customjsprotected": "Du har ikke tilladelse til at redigere denne JavaScript-side, da den indeholder en anden brugers personlige indstillinger.",
+       "sitecssprotected": "Du har ikke tilladelse til at redigere denne CSS-side fordi det kan påvirke alle besøgende",
+       "sitejsonprotected": "Du har ikke tilladelse til at redigere denne JSON-side fordi det kan påvirke alle besøgende",
+       "sitejsprotected": "Du har ikke tilladelse til at redigere denne JavaScript-side fordi det kan påvirke alle besøgende",
        "mycustomcssprotected": "Du har ikke rettigheder til at redigere denne CSS-side.",
        "mycustomjsonprotected": "Du har ikke rettigheder til at redigere denne JSON-side.",
        "mycustomjsprotected": "Du har ikke rettigheder til at redigere denne JavaScript-side.",
        "ns-specialprotected": "Sider i navnerummet {{ns:special}} kan ikke redigeres.",
        "titleprotected": "Dette sidenavn er blevet beskyttet mod oprettelse af [[User:$1|$1]]. Begrundelsen for beskyttelsen er <em>$2</em>.",
        "filereadonlyerror": "Ude af stand til at redigere filen \"$1\", fordi fildatabasen \"$2\" er skrivebeskyttet.\n\nSystemadministratoren, som skrivebeskyttede den, gav denne begrundelse: \"$3\".",
+       "invalidtitle": "Ugyldig titel",
        "invalidtitle-knownnamespace": "Ugyldig titel med navnerummet \"$2\" og teksten \"$3\"",
        "invalidtitle-unknownnamespace": "Ugyldig titel med ukendt navnerum nummer $1 og tekst \"$2\"",
        "exception-nologin": "Ikke logget på",
        "wrongpasswordempty": "Du glemte at indtaste adgangskode. Prøv igen.",
        "passwordtooshort": "Adgangskoden skal mindst være på $1 {{PLURAL:$1|tegn|tegn}}.",
        "passwordtoolong": "Adgangskoden må ikke være længere end {{PLURAL:$1|et tegn|$1 tegn}}.",
-       "passwordtoopopular": "Almindeligt brugte adgangskoder, kan ikke bruges. Vælg venligst en mere unik adgangskode.",
+       "passwordtoopopular": "Almindeligt brugte adgangskoder, kan ikke bruges. Vælg venligst en adgangskode der er sværere at gætte.",
        "password-name-match": "Adgangskoden må ikke være det samme som brugernavnet.",
        "password-login-forbidden": "Brugen af dette brugernavn og adgangskode er blevet forbudt.",
        "mailmypassword": "Nulstil adgangskode",
        "passwordremindertitle": "Ny midlertidig adgangskode til {{SITENAME}}",
-       "passwordremindertext": "Nogen (sandsynligvis dig, fra IP-adressen $1)\nhar bedt om at vi sender dig en ny adgangskode til at logge på {{SITENAME}} ($4).\nEn midlertidig adgangskode for bruger \"$2\" er blevet lavet, den er \"$3\".\nHvis dette var din mening, skal du logge på og vælge en ny adgangskode nu.\nDin midlertidige adgangskode vil udløbe om {{PLURAL:$5|en dag|$5 dage}}.\n\nHvis en anden har bestilt den nye adgangskode, eller hvis du er kommet i tanke om din gamle adgangskode og ikke længere vil ændre den,\nkan du bare ignorere denne e-mail og fortsætte med at bruge din gamle adgangskode.",
+       "passwordremindertext": "Nogen (sandsynligvis dig, fra IP-adressen $1)\nhar bedt om at vi sender dig en ny adgangskode til at logge på {{SITENAME}} ($4).\nEn midlertidig adgangskode for bruger \"$2\" er blevet lavet, den er \"$3\".\nHvis dette var din mening, skal du logge på og vælge en ny adgangskode nu.\nDin midlertidige adgangskode vil udløbe om {{PLURAL:$5|en dag|$5 dage}}.\n\nHvis en anden har bestilt den nye adgangskode, eller hvis du er kommet i tanke om din gamle adgangskode og ikke længere vil ændre den,\nkan du bare ignorere denne besked og fortsætte med at bruge din gamle adgangskode.",
        "noemail": "Der er ikke oplyst en e-mailadresse for bruger \"$1\".",
        "noemailcreate": "Du skal angive en gyldig e-mailadresse",
        "passwordsent": "En ny adgangskode er sendt til e-mailadressen, som er registreret for \"$1\".\nDu bør logge på og ændre din adgangskode straks efter du har modtaget e-mailen.",
        "botpasswords-existing": "Eksisterende bot adgangskoder",
        "botpasswords-createnew": "Opret en ny bot adgangskode",
        "botpasswords-editexisting": "Redigere en eksisterende bot adgangskode",
+       "botpasswords-label-needsreset": "(adgangskoden skal nulstilles)",
        "botpasswords-label-appid": "Botnavn:",
        "botpasswords-label-create": "Opret",
        "botpasswords-label-update": "Opdatér",
        "stub-threshold-disabled": "Deaktiveret",
        "recentchangesdays": "Antal dage som skal vises i seneste ændringer:",
        "recentchangesdays-max": "(maks. $1 {{PLURAL:$1|dag|dage}})",
-       "recentchangescount": "Antal redigeringer som skal vises som standard:",
+       "recentchangescount": "Antal redigeringer som skal vises som standard i sidste ændringer, sidehistorikker og logger:",
        "prefs-help-recentchangescount": "Det gælder for seneste ændringer, historikker og logger.",
        "prefs-help-watchlist-token2": "Dette er den hemmelige nøgle til web-feed af din overvågningsliste.\nHvis andre kender den, vil man være i stand til at læse din overvågningsliste, så del den ikke.\n[[Special:ResetTokens|Klik her]] hvis du har brug at nulstille den.",
        "savedprefs": "Dine indstillinger er blevet gemt.",
        "prefs-files": "Filer",
        "prefs-custom-css": "Personlig CSS",
        "prefs-custom-js": "Personlig JavaScript",
-       "prefs-common-config": "Fælles CSS/JS for alle udseender:",
+       "prefs-common-config": "Fælles CSS/JSON/JavaScript for alle udseender:",
        "prefs-reset-intro": "Du kan bruge denne side til at tilbagestille alle dine indstillinger til standardindstillingerne.\nDet kan ikke gøres om.",
        "prefs-emailconfirm-label": "Bekræftelse af e-mail:",
        "youremail": "Din e-mailadresse:",
        "prefs-dateformat": "Formatering af datoer",
        "prefs-timeoffset": "Tidsforskel",
        "prefs-advancedediting": "Generelle indstillinger",
+       "prefs-developertools": "Udviklerværktøjer",
        "prefs-editor": "Redigeringsprogrammet",
        "prefs-preview": "Forhåndsvisning",
        "prefs-advancedrc": "Avancerede indstillinger",
        "grouppage-bureaucrat": "{{ns:project}}:Bureaukrater",
        "grouppage-suppress": "{{ns:project}}:Undertryk",
        "right-read": "Se sider",
-       "right-edit": "Redigere sider",
+       "right-edit": "Rediger sider",
        "right-createpage": "Oprette andre sider end diskussionssider",
        "right-createtalk": "Oprette diskussionssider",
        "right-createaccount": "Oprette nye brugere",
        "right-editinterface": "Ændre brugergrænsefladens tekster",
        "right-editusercss": "Ændre andre brugeres CSS filer",
        "right-edituserjs": "Ændre andre brugeres JS filer",
+       "right-editsitecss": "Rediger CSS for hele siden",
+       "right-editsitejson": "Rediger JSON for hele siden",
+       "right-editsitejs": "Rediger JavaScript for hele siden",
        "right-editmyusercss": "Redigere dine egne CSS-filer",
        "right-editmyuserjs": "Redigere dine egne JavaScript-filer",
        "right-viewmywatchlist": "Se din egen overvågningsliste",
        "grant-createaccount": "Oprette af konti",
        "grant-createeditmovepage": "Oprette, redigere og flytte sider",
        "grant-delete": "Slette sider, revisioner og logposter",
-       "grant-editinterface": "Redigere MediaWiki-navnerummet og bruger-CSS/JavaScript",
-       "grant-editmycssjs": "Redigere din bruger-CSS/JavaScript",
+       "grant-editinterface": "Redigere MediaWiki-navnerummet og bruger/side JSON",
+       "grant-editmycssjs": "Redigere din bruger-CSS/JSON/JavaScript",
        "grant-editmyoptions": "Redigere dine brugerindstillinger",
        "grant-editmywatchlist": "Redigere din overvågningsliste",
        "grant-editpage": "Redigere eksisterende sider",
        "rcfilters-restore-default-filters": "Gendan standardfiltre",
        "rcfilters-clear-all-filters": "Ryd alle filtre",
        "rcfilters-show-new-changes": "Vis seneste ændringer",
-       "rcfilters-search-placeholder": "Filtrer seneste ændringer (gennemse eller begynd at taste)",
+       "rcfilters-search-placeholder": "Filtrer ændringer (brug menuen eller eller søg på filternavn)",
        "rcfilters-invalid-filter": "Ugyldigt filter",
        "rcfilters-empty-filter": "Ingen aktive filtre. All bidrag vises.",
        "rcfilters-filterlist-title": "Filtre",
        "rcfilters-filterlist-whatsthis": "Hvordan virker disse?",
-       "rcfilters-filterlist-feedbacklink": "Fortæl os hvad du synes om disse (nye) filtreringsværktøjer",
+       "rcfilters-filterlist-feedbacklink": "Fortæl os hvad du synes om disse filtreringsværktøjer",
        "rcfilters-highlightbutton-title": "Fremhæv resultater",
        "rcfilters-highlightmenu-title": "Vælg en farve",
        "rcfilters-highlightmenu-help": "Vælg en farve for at fremhæve denne egenskab",
        "rcfilters-filter-previousrevision-label": "Ikke den seneste revision",
        "rcfilters-filter-previousrevision-description": "Alle ændringer som ikke er »seneste revision«.",
        "rcfilters-filter-excluded": "Ekskluderet",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:ikke</strong> $1",
+       "rcfilters-exclude-button-off": "Ekskluder valgte",
+       "rcfilters-exclude-button-on": "Ekskluderer valgte",
        "rcfilters-view-tags": "Mærkede redigeringer",
        "rcfilters-view-namespaces-tooltip": "Filtrer resultater efter navnerum",
+       "rcfilters-liveupdates-button": "Live-opdateringer",
+       "rcfilters-liveupdates-button-title-on": "Sluk for live opdateringer",
        "rcfilters-liveupdates-button-title-off": "Vis nye ændringer når de sker",
        "rcfilters-watchlist-markseen-button": "Marker alle ændringer som set",
        "rcfilters-watchlist-edit-watchlist-button": "Rediger din liste med overvågede sider",
        "rcfilters-watchlist-showupdated": "Ændringer til sider du ikke har besøgt siden ændringerne blev gjort vises med <strong>fed</strong>, med faste markører.",
        "rcfilters-preference-label": "Skjul den forbedrede verson af Seneste ændringer",
+       "rcfilters-filter-showlinkedto-label": "Vis ændringer på sider der linker til",
        "rcfilters-target-page-placeholder": "Indtast et sidenavn (eller en kategori)",
        "rcnotefrom": "Nedenfor er op til '''$1''' {{PLURAL:$5|ændring|ændringer}} siden '''$2''' vist.",
        "rclistfromreset": "Nulstil datovalg",
        "deadendpages": "Blindgydesider",
        "deadendpagestext": "De følgende sider henviser ikke til andre sider i denne wiki.",
        "protectedpages": "Skrivebeskyttede sider",
+       "protectedpages-filters": "Filtre:",
        "protectedpages-indef": "Kun beskyttelser på ubestemt tid",
        "protectedpages-summary": "Denne side indeholder en liste over eksisterende sider, der i øjeblikket er beskyttet. For en liste over titler, der er beskyttet fra oprettelse, se [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Kun nedarvende beskyttelser",
        "apisandbox-results-error": "Der opstod en fejl under indlæsning af API-forespørgelsessvaret: $1.",
        "apisandbox-request-format-url-label": "Adresseforepørgselsstreng",
        "apisandbox-request-url-label": "Forespurgt URL:",
+       "apisandbox-request-json-label": "Anmod om JSON:",
        "apisandbox-request-time": "Forespørgselstid: {{PLURAL:$1|$1 ms}}",
        "apisandbox-alert-page": "Felter på denne side er ugyldige.",
        "apisandbox-alert-field": "Værdien af dette felt er ugyldigt.",
        "speciallogtitlelabel": "Mål (titel eller {{ns:user}}:brugernavn for bruger):",
        "log": "Loglister",
        "logeventslist-submit": "Vis",
+       "logeventslist-more-filters": "Vis flere logs:",
        "all-logs-page": "Alle offentlige logger",
        "alllogstext": "Samlet visning af alle loggene på {{SITENAME}}.\nDu kan afgrænse visningen ved at vælge en logtype, brugernavn eller påvirket side. Der skelnes mellem små og store bogstaver for både bruger- og sidenavne.",
        "logempty": "Intet passende fundet.",
        "enotif_body_intro_moved": "{{SITENAME}} siden $1 er blevet flyttet den $PAGEEDITDATE af {{gender:$2|$2}}, se $3 for den aktuelle revision.",
        "enotif_body_intro_restored": "{{SITENAME}} siden $1 er blevet gendannet den $PAGEEDITDATE af {{gender:$2|$2}}, se $3 for den aktuelle version.",
        "enotif_body_intro_changed": "{{SITENAME}}-siden $1 er blevet ændret den $PAGEEDITDATE af {{gender:$2|$2}}, se $3 for den aktuelle version.",
-       "enotif_lastvisited": "Gå til $1 for at se alle ændringer siden dit sidste besøg.",
+       "enotif_lastvisited": "Gå til $1 for at se alle ændringer siden dit sidste besøg",
        "enotif_lastdiff": "For at se denne ændring, se $1",
        "enotif_anon_editor": "anonym bruger $1",
        "enotif_body": "Kære $WATCHINGUSERNAME\n\n$PAGEINTRO $NEWPAGE\n\nBidragyderens opsummering: $PAGESUMMARY $PAGEMINOREDIT\n\nKontakt bidragyderen:\ne-mail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nDu vil ikke modtage flere beskeder om yderligere aktivitet medmindre du besøger denne side. På din overvågningsliste kan du også nulstille alle markeringer for de sider, du overvåger.\n\n         Med venlig hilsen {{SITENAME}}s informationssystem\n\n--\nFor at ændre dine indstillinger for e-mail-meddelelser, besøg\n{{canonicalurl:{{#special:Preferences}}}}\n\nFor at ændre indstillingerne for din overvågningsliste, besøg\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nFor at slette siden fra din overvågningsliste, besøg\n$UNWATCHURL\n\nTilbagemelding og yderligere hjælp:\n$HELPPAGE",
        "undeleteviewlink": "vis",
        "undeleteinvert": "Omvend valget af versioner",
        "undeletecomment": "Begrundelse:",
-       "cannotundelete": "Gendannelse mislykkedes:\n$1",
+       "cannotundelete": "Gendannelse mislykkedes for nogle eller alle:\n$1",
        "undeletedpage": "'''$1''' blev gendannet.\n\nI [[Special:Log/delete|slette-loggen]] findes en oversigt over de nyligt slettede og gendannede sider.",
        "undelete-header": "Se [[Special:Log/delete|slette-loggen]] for nyligt slettede og gendannede sider.",
        "undelete-search-title": "Søg i slettede sider",
        "autoblocklist": "Autoblokeringer",
        "autoblocklist-submit": "Søg",
        "autoblocklist-legend": "Vis autoblokeringer",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Lokal autoblokering|Lokale autoblokeringer}}",
        "autoblocklist-total-autoblocks": "Samlet antal automatiske blokeringer: $1",
        "autoblocklist-empty": "Autoblokeringslisten er tom.",
        "autoblocklist-otherblocks": "Andre {{PLURAL:$1|autoblokering|autoblokeringer}}",
        "thumbnail_dest_directory": "Kataloget kan ikke oprettes.",
        "thumbnail_image-type": "Billedtypen understøttes ikke",
        "thumbnail_gd-library": "Ufuldstændig konfiguration af GD-biblioteket: funktionen $1 mangler",
+       "thumbnail_image-size-zero": "Filstørrelsen til billedet ser ud til at være nul.",
        "thumbnail_image-missing": "Filen $1 ser til at mangle",
        "import": "Importer sider",
        "importinterwiki": "Import fra en anden wiki",
        "pageinfo-category-subcats": "Antal underkategorier",
        "pageinfo-category-files": "Antal filer",
        "pageinfo-user-id": "Bruger-id",
+       "pageinfo-file-hash": "Hash værdi",
        "markaspatrolleddiff": "Markér som patruljeret",
        "markaspatrolledtext": "Markér denne side som patruljeret",
        "markaspatrolledtext-file": "Markér denne filversion som patruljeret",
        "version-specialpages": "Specialsider",
        "version-parserhooks": "Parserfunktioner",
        "version-variables": "Variabler",
+       "version-editors": "Skribenter",
        "version-antispam": "Spamforebyggelse",
        "version-other": "Andet",
        "version-mediahandlers": "Specialhåndtering af mediefiler",
        "version-ext-colheader-credits": "Forfattere",
        "version-license-title": "Licens for $1",
        "version-license-not-found": "Ingen detaljerede licensoplysninger blev fundet for denne udvidelse.",
+       "version-credits-title": "Anerkendelser for $1",
        "version-credits-not-found": "Ingen detaljeret information om bidragyderen blev fundet for denne udvidelse.",
        "version-poweredby-credits": "Denne wiki er drevet af '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "andre",
        "tag-mw-removed-redirect": "Fjernede omdirigering",
        "tag-mw-changed-redirect-target": "Omdigeringsmål ændret",
        "tag-mw-blank": "Sidetømning",
+       "tag-mw-blank-description": "Redigeringer som tømmer en side",
        "tag-mw-replace": "Erstattet",
+       "tag-mw-replace-description": "Redigeringer som fjerner mere end 90% af indholdet på en side",
        "tag-mw-rollback": "Tilbagerulning",
        "tag-mw-undo": "Omgjort",
        "tags-title": "Tags",
        "tags-delete-title": "Slet mærke",
        "tags-delete-explanation-initial": "Du er ved at slette mærket »$1« fra databasen.",
        "tags-delete-reason": "Årsag:",
+       "tags-delete-not-found": "Tagget \"$1\" findes ikke.",
        "tags-activate-title": "Aktiver mærke",
        "tags-activate-question": "Du er ved at aktivere mærket »$1«.",
        "tags-activate-reason": "Årsag:",
        "compare-revision-not-exists": "Den version, du har angivet, findes ikke.",
        "diff-form": "Forskelle",
        "diff-form-submit": "Vis forskelle",
+       "permanentlink": "Permanent link",
+       "permanentlink-revid": "Versions-ID",
+       "permanentlink-submit": "Gå til version",
        "dberr-problems": "Undskyld! Siden har tekniske problemer.",
        "dberr-again": "Prøv at vente et par minutter og opdater så siden igen.",
        "dberr-info": "(Kan ikke tilgå databasen: $1)",
        "htmlform-date-placeholder": "ÅÅÅÅ-MM-DD",
        "htmlform-time-placeholder": "TT:MM:SS",
        "htmlform-datetime-placeholder": "ÅÅÅÅ-MM-DD TT:MM:SS",
+       "htmlform-title-badnamespace": "[[:$1]] er ikke i \"{{ns:$2}}\" navnerummet.",
        "htmlform-title-not-exists": "$1 findes ikke.",
+       "htmlform-user-not-exists": "<strong>$1</strong> findes ikke.",
+       "htmlform-user-not-valid": "<strong>$1</strong> er ikke et gyldigt brugernavn.",
        "logentry-delete-delete": "$1 {{GENDER:$2|slettede}} siden $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|slettede}} omdirigering $3 ved overskrivning",
        "logentry-delete-restore": "$1 {{GENDER:$2|gendannede}} siden $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|gendannede}} siden $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 version|$1 versioner}}",
+       "restore-count-files": "{{PLURAL:$1|1 fil|$1 filer}}",
        "logentry-delete-event": "$1 {{GENDER:$2|ændrede}} synligheden af {{PLURAL:$5|en loghændelse|$5 loghændelser}} for siden $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|ændrede}} synligheden af {{PLURAL:$5|en version|$5 versioner}} af siden $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|ændrede}} synligheden af loghændelser for siden $3",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|beskyttede}} $3 $4 [kaskaderende]",
        "logentry-protect-modify": "$1 {{GENDER:$2|ændrede}} beskyttelsesniveau for $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|ændrede}} beskyttelsesniveau for $3 $4 [kaskaderende]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|ændrede}} gruppemedlemskabet for $3 fra $4 til $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|ændrede}} gruppemedlemskabet for {{GENDER:$6|$3}} fra $4 til $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ændrede}} gruppemedlemskabet for $3",
        "logentry-rights-autopromote": "$1 blev automatisk {{GENDER:$2|forfremmet}} fra $4 til $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|lagde}} $3 op",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|lagde}} en ny udgave af $3 op",
        "logentry-upload-revert": "$1 {{GENDER:$2|lagde}} $3 op",
+       "logentry-managetags-create": "$1 {{GENDER:$2|oprettede}} tagget \"$4\"",
        "rightsnone": "(-)",
        "rightslogentry-temporary-group": "$1 (midlertidig, indtil $2)",
        "feedback-adding": "Tilføjer kommentar til side...",
        "expandtemplates": "Udfold skabeloner",
        "expand_templates_intro": "Denne specialside tager en tekst og udfolder alle benyttede skabeloner rekursivt.\nDen udfolder også understøttede parserfunktioner så som\n<code><nowiki>{{</nowiki>#language:…}}</code> og variabler så som \n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>\nFaktisk udfolder den stort set alt i dobbelte tuborgklammer.",
        "expand_templates_title": "Sammenhængstitel, for {{FULLPAGENAME}} osv.:",
-       "expand_templates_input": "Inputtekst:",
+       "expand_templates_input": "Input wikitekst:",
        "expand_templates_output": "Resultat",
        "expand_templates_xml_output": "XML-kode",
        "expand_templates_html_output": "Rå HTML-output",
        "pagelang-select-lang": "Vælg sprog",
        "pagelang-reason": "Begrundelse",
        "pagelang-submit": "Indsend",
+       "pagelang-nonexistent-page": "Siden $1 findes ikke.",
+       "pagelang-unchanged-language": "Siden $1 er allerede sat til sproget $2.",
        "right-pagelang": "Ændre sidesproget",
+       "action-pagelang": "ændre sidesproget",
        "mediastatistics": "Mediestatistik",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME-type",
        "log-action-filter-protect-move_prot": "Flyttede beskyttelse",
        "log-action-filter-upload-upload": "Ny overførsel",
        "authmanager-create-from-login": "For at oprette din konto, så udfyld venligst felterne.",
+       "authmanager-authplugin-setpass-failed-title": "Ændring af adgangskode mislykkedes",
        "authmanager-authplugin-setpass-bad-domain": "Ugyldig domæne.",
        "authmanager-userdoesnotexist": "Brugerkontoen \"$1\" er ikke registreret.",
        "authmanager-email-label": "E-post",
        "authmanager-realname-help": "Brugerens egentlige navn",
        "authmanager-provider-temporarypassword": "Midlertidig adgangskode",
        "authprovider-resetpass-skip-label": "Spring over",
+       "authprovider-resetpass-skip-help": "Spring over nulstilling af adgangskoden.",
+       "authform-notoken": "Mangler nøgle",
+       "authform-wrongtoken": "Forkert nøgle",
        "specialpage-securitylevel-not-allowed-title": "Ikke tilladt",
        "cannotauth-not-allowed-title": "Adgang nægtet",
        "cannotauth-not-allowed": "Du har ikke tilladelse til at bruge denne side",
        "credentialsform-account": "Kontonavn:",
        "edit-error-short": "Fejl: $1",
        "edit-error-long": "Fejl:\n\n$1",
+       "revid": "version $1",
+       "pageid": "side id: $1",
        "gotointerwiki": "Forlader {{SITENAME}}",
+       "gotointerwiki-invalid": "Den angivne titel er ikke gyldig.",
+       "pagedata-title": "Sidedata",
        "pagedata-bad-title": "Ugyldig titel: $1",
        "passwordpolicies": "Password politikker",
        "passwordpolicies-group": "Gruppe",
index 8d4d08d..9398ee4 100644 (file)
        "ns-specialprotected": "Spezialseiten können nicht bearbeitet werden.",
        "titleprotected": "Eine Seite mit diesem Namen kann nicht angelegt werden.\nDie Sperre wurde durch [[User:$1|$1]] mit der Begründung <em>$2</em> eingerichtet.",
        "filereadonlyerror": "Die Datei „$1“ kann nicht verändert werden, da auf das Dateirepositorium „$2“ nur Lesezugriff möglich ist.\n\nDer Systemadministrator, der den Schreibzugriff sperrte, gab folgenden Grund an: „$3“.",
+       "invalidtitle": "Ungültiger Titel",
        "invalidtitle-knownnamespace": "Ungültiger Titel mit Namensraum „$2“ und Text „$3“",
        "invalidtitle-unknownnamespace": "Ungültiger Titel mit unbekannter Namensraumnummer $1 und Text „$2“",
        "exception-nologin": "Nicht angemeldet",
        "filehist-comment": "Kommentar",
        "imagelinks": "Dateiverwendung",
        "linkstoimage": "Die {{PLURAL:$1|folgende Seite verwendet|folgenden $1 Seiten verwenden}} diese Datei:",
-       "linkstoimage-more": "Mehr als {{PLURAL:$1|eine Seite verlinkt|$1 Seiten verlinken}} auf diese Datei.\nDie folgende Liste zeigt nur {{PLURAL:$1|den ersten Link|die ersten $1 Links}} auf diese Datei.\nEine [[Special:WhatLinksHere/$2|vollständige Liste]] ist verfügbar.",
-       "nolinkstoimage": "Diese Datei wird auf keiner Seite verwendet.",
+       "linkstoimage-more": "Mehr als {{PLURAL:$1|eine Seite verwendet|$1 Seiten verwenden}} diese Datei.\nDie folgende Liste zeigt nur die {{PLURAL:$1|erste Verwendung|ersten $1 Verwendungen}} dieser Datei.\nEine [[Special:WhatLinksHere/$2|vollständige Liste]] ist verfügbar.",
+       "nolinkstoimage": "Keine Seiten verwenden diese Datei.",
        "morelinkstoimage": "[[Special:WhatLinksHere/$1|Weitere Links]] auf diese Datei.",
        "linkstoimage-redirect": "$1 (Dateiweiterleitung) $2",
        "duplicatesoffile": "Die {{PLURAL:$1|folgende Datei ist ein Duplikat|folgenden $1 Dateien sind Duplikate}} dieser Datei ([[Special:FileDuplicateSearch/$2|weitere Details]]):",
index e2c022a..704cdc8 100644 (file)
        "ns-specialprotected": "Η επεξεργασία σελίδων στον τομέα {{ns:special}} δεν είναι δυνατή.",
        "titleprotected": "Αυτός ο τίτλος έχει προστατευθεί από την δημιουργία από τον [[User:$1|$1]].\nΟ λόγος που δίνεται είναι <em>$2</em>.",
        "filereadonlyerror": "Δεν είναι δυνατή η τροποποίηση του αρχείου «$1» επειδή το αποθετήριο αρχείων «$2» είναι σε κατάσταση λειτουργίας μόνο για ανάγνωση.\n\nΟ διαχειριστής που το κλείδωσε προσφέρει αυτή την αιτιολόγηση: «$3».",
+       "invalidtitle": "Άκυρος τίτλος",
        "invalidtitle-knownnamespace": "Μη έγκυρος τίτλος με χώρο ονομάτων «$2» και κείμενο «$3»",
        "invalidtitle-unknownnamespace": "Μη έγκυρος τίτλος με άγνωστο αριθμό χώρου ονομάτων $1 και κείμενο «$2»",
        "exception-nologin": "Δεν έχετε συνδεθεί",
        "filehist-filesize": "Μέγεθος",
        "filehist-comment": "Σχόλιο",
        "imagelinks": "Χρήση αρχείου",
-       "linkstoimage": "{{PLURAL:$1|Η ακόλουθη σελίδα έχει σύνδεσμο|Οι ακόλουθες $1 σελίδες έχουν συνδέσμους}} προς αυτό το αρχείο:",
-       "linkstoimage-more": "Περισσότεροι από $1 {{PLURAL:$1|σύνδεσμο|σύνδεσμοι}} συνδέονται με αυτό το αρχείο.\nΗ ακόλουθη λίστα δείχνει {{PLURAL:$1|την πρώτη σελίδα που συνδέεται|τις πρώτες $1 σελίδες που συνδέονται}} με αυτό το αρχείο μονοσήμαντα.\nΗ [[Special:WhatLinksHere/$2|πλήρης λίστα]] είναι διαθέσιμη.",
-       "nolinkstoimage": "Δεν υπάρχουν σελίδες με συνδέσμους προς αυτό το αρχείο.",
+       "linkstoimage": "{{PLURAL:$1|Η ακόλουθη σελίδα χρησιμοποιεί|Οι ακόλουθες $1 σελίδες χρησιμοποιούν}} προς αυτό το αρχείο:",
+       "linkstoimage-more": "Περισσότεροι από $1 {{PLURAL:$1|σελίδα χρησιμοποιεί|σελίδες χρησιμοποιούν}} αυτό το αρχείο.\nΗ ακόλουθη λίστα δείχνει {{PLURAL:$1|την πρώτη σελίδα που συνδέεται|τις πρώτες $1 σελίδες που συνδέονται}} με αυτό το αρχείο μονοσήμαντα.\nΗ [[Special:WhatLinksHere/$2|πλήρης λίστα]] είναι διαθέσιμη.",
+       "nolinkstoimage": "Δεν υπάρχουν σελίδες που χρησιμοποιούν αυτό το αρχείο.",
        "morelinkstoimage": "Δείτε [[Special:WhatLinksHere/$1|περισσότερους συνδέσμους]] προς αυτό το αρχείο.",
        "linkstoimage-redirect": "$1 (ανακατεύθυνση του αρχείου) $2",
        "duplicatesoffile": "{{PLURAL:$1|Το ακόλουθο αρχείο είναι διπλότυπο|Τα $1 ακόλουθα αρχεία είναι διπλότυπα}} αυτού του αρχείου ([[Special:FileDuplicateSearch/$2|περισσότερες λεπτομέρειες]]):",
index 0948136..47747b6 100644 (file)
        "ns-specialprotected": "Special pages cannot be edited.",
        "titleprotected": "This title has been protected from creation by [[User:$1|$1]].\nThe reason given is <em>$2</em>.",
        "filereadonlyerror": "Unable to modify the file \"$1\" because the file repository \"$2\" is in read-only mode.\n\nThe system administrator who locked it offered this explanation: \"$3\".",
+       "invalidtitle": "Invalid title",
        "invalidtitle-knownnamespace": "Invalid title with namespace \"$2\" and text \"$3\"",
        "invalidtitle-unknownnamespace": "Invalid title with unknown namespace number $1 and text \"$2\"",
        "exception-nologin": "Not logged in",
        "filehist-filesize": "File size",
        "filehist-comment": "Comment",
        "imagelinks": "File usage",
-       "linkstoimage": "The following {{PLURAL:$1|page links|$1 pages link}} to this file:",
-       "linkstoimage-more": "More than $1 {{PLURAL:$1|page links|pages link}} to this file.\nThe following list shows the {{PLURAL:$1|first page link|first $1 page links}} to this file only.\nA [[Special:WhatLinksHere/$2|full list]] is available.",
-       "nolinkstoimage": "There are no pages that link to this file.",
+       "linkstoimage": "The following {{PLURAL:$1|page uses|$1 pages uses}} this file:",
+       "linkstoimage-more": "More than $1 {{PLURAL:$1|page uses|pages use}} this file.\nThe following list shows the {{PLURAL:$1|first page|first $1 pages}} that use this file only.\nA [[Special:WhatLinksHere/$2|full list]] is available.",
+       "nolinkstoimage": "There are no pages that use this file.",
        "morelinkstoimage": "View [[Special:WhatLinksHere/$1|more links]] to this file.",
        "linkstoimage-redirect": "$1 (file redirect) $2",
        "duplicatesoffile": "The following {{PLURAL:$1|file is a duplicate|$1 files are duplicates}} of this file ([[Special:FileDuplicateSearch/$2|more details]]):",
index 0951559..b06bcc7 100644 (file)
        "group-autoconfirmed-member": "{{GENDER:$1|autoconfirmado|autoconfirmada}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|administrador|administradora}}",
+       "group-interface-admin-member": "{{GENDER:$1|administrador|administradora}} de la interfaz",
        "group-bureaucrat-member": "{{GENDER:$1|burócrata}}",
        "group-suppress-member": "{{GENDER:$1|supresor|supresora}} de Flow",
        "grouppage-user": "{{ns:project}}:Usuarios",
        "grouppage-autoconfirmed": "{{ns:project}}:Autoconfirmados",
        "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Administradores",
+       "grouppage-interface-admin": "{{ns:project}}:Administradores de la interfaz",
        "grouppage-bureaucrat": "{{ns:project}}:Burócratas",
        "grouppage-suppress": "{{ns:project}}:Supresores de Flow",
        "right-read": "Leer páginas",
        "grant-createaccount": "Crear cuentas",
        "grant-createeditmovepage": "Crear, editar y trasladar páginas",
        "grant-delete": "Borrar páginas, revisiones y entradas del registro",
-       "grant-editinterface": "Editar el espacio de nombres MediaWiki y el CSS/JSON/JavaScript de los usuarios",
+       "grant-editinterface": "Editar el espacio de nombres MediaWiki y las páginas CSS/JSON/JavaScript del sitio y de los usuarios",
        "grant-editmycssjs": "Editar tu CSS/JSON/JavaScript",
        "grant-editmyoptions": "Editar tus preferencias de usuario",
        "grant-editmywatchlist": "Editar tu lista de seguimiento",
+       "grant-editsiteconfig": "Editar páginas de configuración CSS/JS del sitio",
        "grant-editpage": "Editar páginas existentes",
        "grant-editprotected": "Editar páginas protegidas",
        "grant-highvolume": "Gran cantidad de ediciones",
        "pageswithprop-legend": "Páginas con una propiedad de página",
        "pageswithprop-text": "Esta página muestra las páginas que usan una determinada propiedad de página.",
        "pageswithprop-prop": "Nombre de la propiedad:",
-       "pageswithprop-reverse": "Ordenar en orden inverso",
+       "pageswithprop-reverse": "Ordenar en modo inverso",
        "pageswithprop-sortbyvalue": "Ordenar por valor de propiedad",
        "pageswithprop-submit": "Ir",
        "pageswithprop-prophidden-long": "hay un largo valor en la propiedad texto oculta ($1)",
        "uctop": "(edición actual)",
        "month": "Desde el mes (y anteriores):",
        "year": "Desde el año (y anteriores):",
+       "date": "Desde el día (y anteriores):",
        "sp-contributions-newbies": "Mostrar solo las contribuciones de usuarios nuevos",
        "sp-contributions-newbies-sub": "Para cuentas nuevas",
        "sp-contributions-newbies-title": "Contribuciones de usuarios nuevos",
        "ipbemailban": "Impedir que el usuario envíe correo electrónico",
        "ipbenableautoblock": "Bloquear automáticamente la última dirección IP usada por este usuario y cualquier IP posterior desde la cual intente editar",
        "ipbsubmit": "Bloquear a este usuario",
-       "ipbother": "En otro momento:",
+       "ipbother": "Otra duración o fecha:",
        "ipboptions": "2 horas:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year,para siempre:infinite",
        "ipbhidename": "Ocultar nombre de usuario de ediciones y listas",
        "ipbwatchuser": "Vigilar las páginas de usuario y de discusión de este usuario",
        "edit-error-long": "Errores:\n\n$1",
        "revid": "revisión $1",
        "pageid": "ID de página $1",
+       "interfaceadmin-info": "$1\n\nLos permisos para editar las páginas de configuración con formato CSS, JS y JSON han sido recientemente segregados del permiso <code>editinterface</code>. Si no comprendes por qué recibes este error, por favor lee [[mw:MediaWiki_1.32/interface-admin]].",
        "rawhtml-notallowed": "No se pueden emplear las etiquetas &lt;html&gt; si no es en las páginas normales.",
        "gotointerwiki": "Salir de {{SITENAME}}",
        "gotointerwiki-invalid": "El título especificado no es válido.",
index e425e94..7248b62 100644 (file)
        "customcssprotected": "Ez duzu baimenik CSS orrialde hau aldatzeko beste erabiltzaile baten hobespen pertsonalak dituelako.",
        "customjsonprotected": "Ez duzu baimenik JSON orrialde hau editatzeko beste erabiltzaile baten hobespen pertsonalak dituelako.",
        "customjsprotected": "Ez duzu baimenik JavaScript orrialde hau aldatzeko beste erabiltzaile baten hobespen pertsonalak dituelako.",
+       "sitecssprotected": "Ez daukazu CSS orri hau aldatzeko baimenik bisitari guztiei eragin diezaiekeelako",
+       "sitejsonprotected": "Ez daukazu JSON orri hau aldatzeko baimenik bisitari guztiei eragin diezaiekeelako",
+       "sitejsprotected": "Ez daukazu JavaScript orri hau aldatzeko baimenik bisitari guztiei eragin diezaiekeelako",
        "mycustomcssprotected": "Ez duzu baimenik CSS orrialde hau aldatzeko.",
        "mycustomjsonprotected": "Ez duzu baimenik JSON orrialde hau aldatzeko.",
        "mycustomjsprotected": "Ez duzu baimentik JavaScript orrialdea aldatzeko.",
        "group-autoconfirmed": "Lankide autokonfirmatuak",
        "group-bot": "Bot-ak",
        "group-sysop": "Administratzaileak",
+       "group-interface-admin": "Interfazeko administratzaileak",
        "group-bureaucrat": "Burokratak",
        "group-suppress": "Gainikupenak",
        "group-all": "(guztiak)",
        "group-autoconfirmed-member": "{{GENDER:$1|baieztatutako lankidea}}",
        "group-bot-member": "{{GENDER:$1|bot-a}}",
        "group-sysop-member": "{{GENDER:$1|administratzailea}}",
+       "group-interface-admin-member": "{{GENDER:$1|interfazeko administratzailea}}",
        "group-bureaucrat-member": "{{GENDER:$1|burokrata}}",
        "group-suppress-member": "{{GENDER:$1|ezabatzailea}}",
        "grouppage-user": "{{ns:project}}:Lankideak",
        "grouppage-autoconfirmed": "{{ns:project}}:Erabiltzaile autokonfirmatuak",
        "grouppage-bot": "{{ns:project}}:Bot-ak",
        "grouppage-sysop": "{{ns:project}}:Administratzaileak",
+       "grouppage-interface-admin": "{{ns:project}}:Interfazeko administratzaileak",
        "grouppage-bureaucrat": "{{ns:project}}:Burokratak",
        "grouppage-suppress": "{{ns:project}}:Ezabatzea",
        "right-read": "Irakurri orriak",
        "http-timed-out": "HTTP eskaera iraungi da.",
        "http-curl-error": "Errorea URLa bilatzerakoan: $1",
        "http-bad-status": "Arazo bat egon da HTTP eskaera bitartean: $1 $2",
+       "http-internal-error": "HTTP barneko errorea.",
        "upload-curl-error6": "Ezin izan da URLa eskuratu",
        "upload-curl-error6-text": "Ezin da emandako URLa eskuratu. Mesedez, ziurtatu URLa zuzena dela eta gunea eskuragarri dagoela.",
        "upload-curl-error28": "Denbora gehiegi igotzerakoan",
index 47f8d1f..40f5bfa 100644 (file)
        "right-editusercss": "Muokata toisten käyttäjien CSS-tiedostoja",
        "right-edituserjson": "Muokata toisten käyttäjien JSON-tiedostoja",
        "right-edituserjs": "Muokata toisten käyttäjien JavaScript-tiedostoja",
-       "right-editsitecss": "muokata CSS-koodia koko sivustolla",
-       "right-editsitejson": "muokata JSON-koodia koko sivustolla",
-       "right-editsitejs": "muokata JavaScriptiä koko sivustolla",
+       "right-editsitecss": "Muokata CSS-koodia koko sivustolla",
+       "right-editsitejson": "Muokata JSON-koodia koko sivustolla",
+       "right-editsitejs": "Muokata JavaScriptiä koko sivustolla",
        "right-editmyusercss": "Muokata omia CSS-tiedostoja",
        "right-editmyuserjson": "Muokkaa omia JSON-tiedostoja",
        "right-editmyuserjs": "Muokata omia JavaScript-tiedostoja",
index c61cf3b..cdc118c 100644 (file)
        "ns-specialprotected": "Les pages spéciales ne peuvent pas être modifiés.",
        "titleprotected": "Ce titre a été protégé contre toute création par [[User:$1|$1]].\nLe motif fourni est <em>$2</em>.",
        "filereadonlyerror": "Impossible de modifier le fichier « $1 » parce que le répertoire de fichiers « $2 » est en lecture seule.\n\nL’administrateur système qui l’a verrouillé a fourni ce motif : « $3 ».",
+       "invalidtitle": "Titre non valide",
        "invalidtitle-knownnamespace": "Titre non valide avec l’espace de noms « $2 » et l’intitulé « $3 »",
        "invalidtitle-unknownnamespace": "Titre non valide avec le numéro d’espace de noms $1 inconnu et l’intitulé « $2 »",
        "exception-nologin": "Non connecté",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Lister",
        "rcfilters-tag-remove": "Supprimer « $1 »",
-       "rcfilters-legend-heading": "<strong>Liste des abréviations : </strong>",
+       "rcfilters-legend-heading": "<strong>Liste des abréviations :&#32;</strong>",
        "rcfilters-other-review-tools": "Autres outils de relecture",
        "rcfilters-group-results-by-page": "Grouper les résultats par page",
        "rcfilters-activefilters": "Filtres actifs",
        "filehist-comment": "Commentaire",
        "imagelinks": "Utilisation du fichier",
        "linkstoimage": "{{PLURAL:$1|La page suivante utilise|Les $1 pages suivantes utilisent}} ce fichier :",
-       "linkstoimage-more": "Plus {{PLURAL:$1|d'une page utilise|de $1 pages utilisent}} ce fichier.\nLa liste suivante affiche seulement {{PLURAL:$1|la première page qui utilise|les $1 premières pages qui utilisent}} ce fichier.\nUne [[Special:WhatLinksHere/$2|liste complète]] est disponible.",
-       "nolinkstoimage": "Aucune page n'utilise ce fichier.",
+       "linkstoimage-more": "Plus {{PLURAL:$1|dune page utilise|de $1 pages utilisent}} ce fichier.\nLa liste suivante affiche seulement {{PLURAL:$1|la première page qui utilise|les $1 premières pages qui utilisent}} ce fichier.\nUne [[Special:WhatLinksHere/$2|liste complète]] est disponible.",
+       "nolinkstoimage": "Aucune page nutilise ce fichier.",
        "morelinkstoimage": "Voir [[Special:WhatLinksHere/$1|plus de liens]] vers ce fichier.",
        "linkstoimage-redirect": "$1 (redirection de fichier) $2",
        "duplicatesoffile": "{{PLURAL:$1|Le fichier suivant est un doublon|Les $1 fichiers suivants sont des doublons}} de celui-ci ([[Special:FileDuplicateSearch/$2|plus de détails]]) :",
        "lastmodifiedatby": "Cette page a été modifiée pour la dernière fois le $1 à $2 par $3.",
        "othercontribs": "Basé sur le travail de $1.",
        "others": "autres",
-       "siteusers": "{{PLURAL:$2|{{GENDER:$1|l’utilisateur|l’utilisatrice}}|{{Gender:$1|les utilisateurs|les utilisatrices}}}} $1 de {{SITENAME}}",
+       "siteusers": "{{PLURAL:$2|{{GENDER:$1|l’utilisateur|l’utilisatrice}}|{{GENDER:$1|les utilisateurs|les utilisatrices}}}} $1 de {{SITENAME}}",
        "anonusers": "{{PLURAL:$2|l'utilisateur anonyme|les utilisateurs anonymes}} $1 de {{SITENAME}}",
        "creditspage": "Crédits de la page",
        "nocredits": "Il n'y a pas d'informations d'attribution disponibles pour cette page.",
index dffd28b..082e540 100644 (file)
@@ -50,7 +50,7 @@
        "tog-watchlisthideminor": "Letj feranrangen bi a sidjen, diar ik uun't uug behual wal, fersteeg",
        "tog-watchlisthideliu": "Feranrangen faan uunmeldet brükern bi sidjen, diar ik uun't uug behual wal, fersteeg",
        "tog-watchlistreloadautomatically": "List mä sidjen, diar dü uun't uug behual wel, nei loose, wan en filter anert wurden as (brükt JavaScript)",
-       "tog-watchlistunwatchlinks": "Direkt ferwisangen tu Uunlukin/Ei uunlukin bi iindracher uun det list faan sidjen, diar dü uun't uug behual wel (brükt JavaScript)",
+       "tog-watchlistunwatchlinks": "Direkt ferwisangen tu {{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}} bi iindracher uun det list faan sidjen, diar dü uun't uug behual wel (brükt JavaScript)",
        "tog-watchlisthideanons": "Feranrangen faan anonüüm brükern (IPs) bi sidjen, diar ik uun't uug behual wal, fersteeg",
        "tog-watchlisthidepatrolled": "Kontroliaret feranrangen bi a sidjen, diar ik uun't uug behual wal, fersteeg",
        "tog-watchlisthidecategorization": "Kategorisiarang faan sidjen fersteeg",
        "nosuchusershort": "Diar as nään brüker mä di nööm \"$1\".\nHeest dü ham uk rocht skrewen?",
        "nouserspecified": "Dü skel en brükernööm uundu.",
        "login-userblocked": "Didiar brüker as speret wurden. Hi mut ham ei uunmelde.",
-       "wrongpassword": "Det paaswurd as ferkiard.\nWees so gud an ferschük det noch ans.",
+       "wrongpassword": "Di brükernööm of det paaswurd as ferkiard.\nWees so gud an ferschük det noch ans.",
        "wrongpasswordempty": "Dü heest nian paaswurd iinden.\nFerschük det man noch ans.",
        "passwordtooshort": "Paaswurden skel tumanst {{PLURAL:$1|1 tiaken|$1 tiakens}} lung wees.",
        "passwordtoolong": "Paaswurden kön ei linger üs {{PLURAL:$1|1 tiaken|$1 tiakens}} wees.",
        "password-login-forbidden": "Didiar brükernööm mä detdiar paaswurd as ei tuläät.",
        "mailmypassword": "Paaswurd turagsaat",
        "passwordremindertitle": "Nei tidjwiis paaswurd för {{SITENAME}}",
-       "passwordremindertext": "En brüker (woorskiinelk dü, faan IP adres $1) hää am en nei paaswurd för {{SITENAME}} ($4) fraaget.\nEn nei paaswurd för di brüker \"$2\" as maaget wurden an het nü \"$3\".\n\nWan dü det würelk so haa wel, do melde di nü uun an feranere det paaswurd. Det nei paaswurd täält för {{PLURAL:$5|ään dai|$5 daar}}.\n\nWan dü ei salew am en nei paaswurd fraaget heest, do säärst dü di am niks widjer komre. Do könst dü din ual paaswurd widjer brük.",
+       "passwordremindertext": "En brüker (faan IP adres $1) hää am en nei paaswurd för {{SITENAME}} ($4) fraaget.\nEn nei paaswurd för di brüker \"$2\" as maaget wurden an het nü \"$3\".\n\nWan dü det würelk so haa wel, do melde di nü uun an feranere det paaswurd. Det nei paaswurd täält för {{PLURAL:$5|ään dai|$5 daar}}.\n\nWan dü ei salew am en nei paaswurd fraaget heest, do säärst dü di am niks widjer komre. Do könst dü din ual paaswurd widjer brük.",
        "noemail": "Diar as nian e-mail adres bekäänd för di brüker \"$1\".",
        "noemailcreate": "Dü skel en rocht e-mail adres uundu.",
        "passwordsent": "En nei tidjwiis paaswurd as tu det e-mail-adres faan di brüker \"$1\" schüürd wurden.\nMelde di diarmä uun, wan dü det füngen heest. Det ual paaswurd blaft iarst ans bestunen.",
        "resetpass-temp-password": "Tidjwiis paaswurd:",
        "resetpass-abort-generic": "Det paaswurd-anerang as ferhanert wurden.",
        "resetpass-expired": "Din paaswurd as uflepen. Wees so gud an lei en nei paaswurd fääst.",
-       "resetpass-expired-soft": "Din paaswurd as uflepen an skal turagsaat wurd. Wees so gud an lei en nei paaswurd fääst of trak üüb \"{{int:authprovider-resetpass-skip-label}}\", am det leeder turag tu saaten.",
-       "resetpass-validity-soft": "Din paaswurd gongt ei: $1\n\nWees so gud an lei en nei paaswurd fääst, of trak üüb \"{{int:authprovider-resetpass-skip-label}}\" am det leeder turag tu saaten.",
+       "resetpass-expired-soft": "Din paaswurd as uflepen an skal feranert wurd. Wees so gud an lei en nei paaswurd fääst of trak üüb \"{{int:authprovider-resetpass-skip-label}}\", am det leeder tu feranrin.",
+       "resetpass-validity-soft": "Din paaswurd gongt ei: $1\n\nWees so gud an lei en nei paaswurd fääst, of trak üüb \"{{int:authprovider-resetpass-skip-label}}\" am det leeder tu feranrin.",
        "passwordreset": "Paaswurd turagsaat",
        "passwordreset-text-one": "Fal detheer formulaar ütj, am din paaswurd turag tu saaten.",
        "passwordreset-text-many": "{{PLURAL:$1|Fal ian faan jodiat fialen ütj, am en tidjwiis paaswurd tuschüürd tu fun.}}",
        "anonpreviewwarning": "\"Dü beest ei uunmeldet. Bi't seekrin woort din IP-adres uun a ferluup faan werjuunen aptiakent.\"",
        "missingsummary": "'''Paase üüb:''' Dü heest det ei tuupfaadet.\nWan dü det sidj seekerst, woort det saner en kurtfaadet beskriiwang auernimen.",
        "selfredirect": "<strong>Paase üüb:</strong> Dü feerst detheer sidj tu detsalew sidj widjer.\nDü heest was det ferkiard mual uunden, of dü bewerkest det ferkiard sidj.\nWan dü noch ans üüb „$1“ trakst, woort det widjerfeerang likes iinracht.",
-       "missingcommenttext": "Faade det oner tuup.",
+       "missingcommenttext": "Skriiw en komentaar.",
        "missingcommentheader": "<strong>Paase üüb:</strong> Dü heest nian teemo uunden. Wan dü noch ans üüb „$1“ trakst, woort din feranrang saner auerskraft seekert.",
        "summary-preview": "Föörskau faan det tuupfaadang:",
        "subject-preview": "Föörskau faan det auerskraft:",
        "previewerrortext": "Diar as wat skiaf gingen, üs en föörskau faan din feranrangen wiset wurd skul.",
        "blockedtitle": "Brüker as speret",
-       "blockedtext": "'''Dan brükernööm of din IP-adres as speret wurden.'''\n\nDet as maaget wurden faan $1.\nDi grünj as ''$2''.\n\n* Began: $8\n* Aanj: $6\n* Bedraapt: $7\n\nDü könst $1 kontaktiare of uk en [[{{MediaWiki:Grouppage-sysop}}|administraator]] am det tu diskutiarin.\n\nDü könst ei det e-mail-funktjuun 'E-mail tu didiar brüker' brük, so loong dü nian e-mail-adres uun din [[Special:Preferences|brükerkonto-iinstelangen]] uunden heest of wan det e-mail-funktjuun för di speret wurden as.\n\nUugenblakelk as din IP-addres $3, an det sper-ID as #$5.\nFör arke uunfraag wurd aal jo informatjuunen boowen brükt.",
-       "autoblockedtext": "'''Din IP-adres as speret wurden, auer det faan en öödern spereten brüker brükt wurden as.'''\n\nDi grünj as:\n: ''$2''.\n\n* Began: $8\n* Aanj: $6\n* Bedraapt: $7\n\nDü könst $1 kontaktiare of uk en [[{{MediaWiki:Grouppage-sysop}}|administraator]] am det tu diskutiarin.\n\nDü könst ei det e-mail-funktjuun 'E-mail tu didiar brüker' brük, so loong dü nian e-mail-adres uun din [[Special:Preferences|brükerkonto-iinstelangen]] uunden heest of wan det e-mail-funktjuun för di speret wurden as.\n\nUugenblakelk as din IP-addres $3, an det sper-ID as #$5.\nFör arke uunfraag wurd aal jo informatjuunen boowen brükt.",
+       "blockedtext": "<strong>Dan brükernööm of din IP-adres as speret wurden.</strong>\n\nDet as maaget wurden faan $1.\nDi grünj as <em>$2</em>.\n\n* Began: $8\n* Aanj: $6\n* Bedraapt: $7\n\nDü könst $1 kontaktiare of uk en [[{{MediaWiki:Grouppage-sysop}}|administraator]] am det tu diskutiarin.\n\nDü könst ei det e-mail-funktjuun '{{int:emailuser}}' brük, so loong dü nian e-mail-adres uun din [[Special:Preferences|brükerkonto-iinstelangen]] uunden heest of wan det e-mail-funktjuun för di speret wurden as.\n\nUugenblakelk as din IP-addres $3, an det sper-ID as #$5.\nFör arke uunfraag wurd aal jo informatjuunen boowen brükt.",
+       "autoblockedtext": "'''Din IP-adres as speret wurden, auer det faan en öödern spereten brüker brükt wurden as.'''\n\nDi grünj as:\n: <em>$2</em>.\n\n* Began: $8\n* Aanj: $6\n* Bedraapt: $7\n\nDü könst $1 kontaktiare of uk en [[{{MediaWiki:Grouppage-sysop}}|administraator]] am det tu diskutiarin.\n\nDü könst ei det e-mail-funktjuun '{{int:emailuser}}' brük, so loong dü nian e-mail-adres uun din [[Special:Preferences|brükerkonto-iinstelangen]] uunden heest of wan det e-mail-funktjuun för di speret wurden as.\n\nUugenblakelk as din IP-addres $3, an det sper-ID as #$5.\nFör arke uunfraag wurd aal jo informatjuunen boowen brükt.",
        "blockednoreason": "nään grünj uunden",
        "whitelistedittext": "Dü skel di $1, am sidjen tu bewerkin.",
        "confirmedittext": "Dü skel iarst din e-mail-adres gudkään, iar dü began könst tu werkin. Maage det üüb det sidj mä din persöönelk [[Special:Preferences|iinstelangen]].",
        "userjspreview": "'''Seenk diaram, dat det bluas en föörskau faan din JavaScript as.'''\n'''Det as noch ei seekert wurden!'''",
        "sitecsspreview": "<strong>Paase üüb! Det as bluas en föörskau faan't CSS. Det as noch ei seekert wurden!</strong>",
        "sitejspreview": "<strong>Paase üüb! Det as bluas en föörskau faan di JavaScript code. Det as noch ei seekert wurden!</strong>",
-       "userinvalidconfigtitle": "''Paase üüb:''' Skak \"$1\" jaft at ei.\nSeenk diaram, dat faan en brüker iinracht .css- an .js-sidjen mä en letjen buksteew began skel. Bispal:\n''{{ns:user}}:Münsterkjarl/vector.css'' uunsteed faan ''{{ns:user}}:Münsterkjarl/Vector.css''.",
+       "userinvalidconfigtitle": "<strong>Paase üüb:</strong> Skak \"$1\" jaft at ei.\nSeenk diaram, dat faan en brüker iinracht .css-, .json an .js-sidjen mä en letjen buksteew began skel. Bispal:\n''{{ns:user}}:Münsterkjarl/vector.css'' uunsteed faan ''{{ns:user}}:Münsterkjarl/Vector.css''.",
        "updated": "(Feranert)",
        "note": "'''Paase üüb:'''",
        "previewnote": "'''Heer könst dü sä, hü det sidj wurd skal.'''\nDet sidj as oober noch ei seekert!",
        "longpageerror": "'''Error: Dan tekst as {{PLURAL:$1|ian kilobyte|$1 kilobytes}} lung, hi mut oober ei linger wees üs {{PLURAL:$2|ian kilobyte|$2 kilobytes}}.'''Hi koon ei ufspiikerd wurd.",
        "readonlywarning": "<strong>Paase üüb: Dü könst uun uugenblak ei üüb det dootenbeenk tugrip. Din dooten kön ei seekert wurd.</strong> Wees so gud an seekre dan tekst iarst ans üüb dan reegner, an ferschük leederhen, ham tu auerdreegen.\n\nGrünj för det sper: $1",
        "protectedpagewarning": "'''Paase üüb: Detdiar sidj as speret wurden. Bluas administratooren kön det bewerke.'''\nUun't logbuk stäänt muar diartu:",
-       "semiprotectedpagewarning": "'''Paase üüb: Detdiar sidj as dialwiis tu't bewerkin speret wurden. Bluas gudkäänd brükern kön det bewerke.'''\nUun't logbuk stäänt muar diartu:",
+       "semiprotectedpagewarning": "<strong>Paase üüb:</strong> Detdiar sidj as dialwiis tu't bewerkin speret wurden. Bluas gudkäänd brükern kön det bewerke.\nUun't logbuk stäänt muar diartu:",
        "cascadeprotectedwarning": "<strong>Paase üüb:</strong> Detdiar sidj koon bluas faan brükern mä [[Special:ListGroupRights|aparte rochten]] bewerket wurd. Hat as uun {{PLURAL:$1|detdiar ööder sidj|jodiar ööder sidjen}} iinbünjen, diar troch en kaskaadensper seekert {{PLURAL:$1|as|san}}:",
        "titleprotectedwarning": "'''Paase üüb: \"Detdiar sidj mä didiar nööm koon ei faan arken bewerket wurd. Bluas enkelt brükern mä [[Special:ListGroupRights|was brükerrochten]] kön detdiar sidj nei maage of bewerke.'''\nUun't logbuk stäänt muar diartu:",
        "templatesused": "{{PLURAL:$1|Detdiar föörlaag woort|Jodiar föörlaagen wurd}} üüb detdiar sidj brükt:",
        "recentchangesdays": "Soföl daar skel a „leetst feranrangen“ uunwise:",
        "recentchangesdays-max": "Ei muar üs {{PLURAL:$1|ään dai|$1 daar}}",
        "recentchangescount": "Soföl feranrangen skel uunwiset wurd:",
-       "prefs-help-recentchangescount": "Det san a leetst feranrangen, werjuunen an logbuken.",
-       "prefs-help-watchlist-token2": "Detdiar as di hiamelk kai för't webfeed mä sidjen, diar dü uun't uug behual wel.\nMä didiar kai koon arken jodiar sidjen beluke, diaram skulst dü ham ei widjerdu.\n[[Special:ResetTokens|Trak diar]], wan dü ham turagsaat wel.",
+       "prefs-help-recentchangescount": "Maximaal uuntaal: 1000",
+       "prefs-help-watchlist-token2": "Detdiar as di hiamelk kai för't webfeed mä sidjen, diar dü uun't uug behual wel.\nMä didiar kai koon arken jodiar sidjen beluke, diaram skulst dü ham ei widjerdu.\nWan nuadag, [[Special:ResetTokens|trak diar]], wan dü ham turagsaat wel.",
        "savedprefs": "Din iinstelangen san seekert wurden.",
        "savedrights": "A brükersköölen faan {{GENDER:$1|$1}} san seekert wurden.",
        "timezonelegend": "Tidjsoon:",
        "prefs-files": "Datein",
        "prefs-custom-css": "Salew maaget CSS",
        "prefs-custom-js": "Salew maaget JavaScript",
-       "prefs-common-config": "CSS / JavaScript för arke skak:",
+       "prefs-common-config": "CSS/Jason/JavaScript för arke skak:",
        "prefs-reset-intro": "Üüb detdiar sidj könst dü weder a normool iinstelangen iinracht.\nDo san jo ual iinstelangen wech.",
        "prefs-emailconfirm-label": "E-Mail gudkäänd:",
        "youremail": "E-mail:",
        "group-autoconfirmed": "Registriaret brükern",
        "group-bot": "Bots",
        "group-sysop": "Administratooren",
+       "group-interface-admin": "Skakadministratooren",
        "group-bureaucrat": "Bürokraaten",
        "group-suppress": "Fersteeger",
        "group-all": "(Aal a)",
        "grouppage-autoconfirmed": "{{ns:project}}:Registriaret brükern",
        "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Administratooren",
+       "grouppage-interface-admin": "{{ns:project}}:Skakadministratooren",
        "grouppage-bureaucrat": "{{ns:project}}:Bürokraaten",
        "grouppage-suppress": "{{ns:project}}:Fersteeg",
        "right-read": "Sidjen lees",
        "recentchangeslinked-feed": "Feranrangen bi ferlinket sidjen",
        "recentchangeslinked-toolbox": "Feranrangen bi ferlinket sidjen",
        "recentchangeslinked-title": "Feranrangen bi sidjen, huar faan \"$1\" üüb ferwiset woort",
-       "recentchangeslinked-summary": "Skriiw en sidjennööm hen, am feranrangen üüb sidjen tu sen, diar üüb det sidj henwise of faan det sidj wechwise.\nAm iindracher uun en kategorii tu sen, skriiw 'Kategorie:Nööm faan't kategorii' hen.\nFeranrangen bi sidjen, diar dü [[Special:Watchlist|uun't uug behual]] wel, san <strong>fäät</strong> skrewen.",
+       "recentchangeslinked-summary": "Skriiw en sidjennööm hen, am feranrangen üüb sidjen tu sen, diar üüb det sidj henwise of faan det sidj wechwise.\nAm iindracher uun en kategorii tu sen, skriiw '{{ns:category}}:Nööm faan't kategorii' hen.\nFeranrangen bi sidjen, diar dü [[Special:Watchlist|uun't uug behual]] wel, san <strong>fäät</strong> skrewen.",
        "recentchangeslinked-page": "Sidjennööm:",
        "recentchangeslinked-to": "Wise feranrangen üüb sidjen, diar heerhen ferwise.",
        "recentchanges-page-added-to-category": "[[:$1]] tu kategorii saat",
        "lockmanager-fail-closelock": "Det sperdatei för „$1“ küd ei slööden wurd.",
        "lockmanager-fail-deletelock": "Det sperdatei för „$1“ küd ei stregen wurd.",
        "lockmanager-fail-acquirelock": "Det sper för „$1“ küd ei ufrepen  wurd.",
-       "lockmanager-fail-openlock": "Det sperdatei för „$1“ küd ei eeben maaget wurd.",
+       "lockmanager-fail-openlock": "Det sperdatei för „$1“ küd ei eeben maaget wurd. Stel seeker, dat din fertiaknis för't huuchloosin rocht iinracht as, an dat dan webserver diar üüb tugrip mut. Luke diar: https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory wan dü muar wed wel.",
        "lockmanager-fail-releaselock": "Det sper för „$1“ küd ei apliaset wurd.",
        "lockmanager-fail-db-bucket": "Mä $1 küd ei nooch ferbinjangen tu sperdootenbeenken iinracht wurd.",
        "lockmanager-fail-db-release": "A speren uun't dootenbeenk $1 küd ei apliaset wurd.",
        "uploadstash-refresh": "List mä datein aktualisiare.",
        "invalid-chunk-offset": "Di began as diar ei tuläät.",
        "img-auth-accessdenied": "Tugrip ei mögelk",
-       "img-auth-nopathinfo": "Diar as nään PATH_INFO.\nDi server koon detdiar informatjuun ei widjerdu.\nFerlicht as det uun CGI iinbünjen an komt diaram uk ei mä „img_auth“ turocht.\nÜüb det sidj https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization (ingelsk) stäänt diar muar auer.",
+       "img-auth-nopathinfo": "Diar as nian informatjuun auer di wai.\nDan server skal so iinracht wees, dat a wariaabeln REQUEST_URI an/of PATH_INFO auerden wurd.\nWan det tudraapt, aktiwiare $wgUsePathInfo.\nÜüb det sidj https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization (ingelsk) stäänt diar muar auer.",
        "img-auth-notindir": "Detdiar fertiaknis as ei föörsen tu huuchschüüren.",
        "img-auth-badtitle": "Mä „$1“ küd nään tiitel maaget wurd.",
        "img-auth-nologinnWL": "Dü beest ei uunmeldet, an „$1“ stäänt ei uun't whitelist.",
        "doubleredirects": "Dobelt widjerfeerangen",
        "doubleredirectstext": "Detheer list feert widjerfeerangen ap, diar üüb widjerfeerangen widjer feer.\nUun arke rä stun ferwisangen tu't iarst an ööder widjerfeerang an uk tu det sidj, huar det ööder widjerfeerang üüb ferwiset. <del>Trochstregen</del> iindracher san al bewerket wurden.",
        "double-redirect-fixed-move": "[[$1]] as fersköwen wurden. Hat feert nü widjer tu [[$2]].",
-       "double-redirect-fixed-maintenance": "Dobelt widjerfeerang faan [[$1]] tu [[$2]] as apredet wurden.",
+       "double-redirect-fixed-maintenance": "Dobelt widjerfeerang faan [[$1]] tu [[$2]] as apredet wurden",
        "double-redirect-fixer": "Bot för widjerfeerangen",
        "brokenredirects": "Uunstaken widjerfeerangen",
        "brokenredirectstext": "Jodiar widjerfeerangen ferwise üüb en sidj, diar't goorei jaft:",
        "cachedspecial-viewing-cached-ts": "Dü lukest en werjuun uun a cache uun. Det as ferlicht ei üüb a leetst stant.",
        "cachedspecial-refresh-now": "Neist werjuun uunluke.",
        "categories": "Kategoriin",
-       "categoriespagetext": "{{PLURAL:$1|Detdiar kategorii häält|Jodiar kategoriin hual}} sidjen of datein.\n[[Special:UnusedCategories|Leesag kategoriin]] wurd heer ei uunwiset.\nLuke uk bi det list faan [[Special:WantedCategories|nuadag kategoriin]].",
+       "categoriespagetext": "{{PLURAL:$1|Detdiar kategorii häält|Jodiar kategoriin hual}} sidjen of datein an koon brükt wurd of uk ei.\nLuke uk bi det list faan [[Special:WantedCategories|nuadag kategoriin]].",
        "categoriesfrom": "Wise kategoriin mä began üüb:",
        "deletedcontributions": "Stregen bidracher",
        "deletedcontributions-title": "Stregen bidracher",
        "revertpage-nouser": "Feranrangen faan en ferbürgenen brüker turagsaat an det leetst werjuun faan {{GENDER:$1|[[User:$1|$1]]}} weder iinsteld.",
        "rollback-success": "Feranrangen faan {{GENDER:$3|$1}} san turagsaat an det leetst werjuun faan {{GENDER:$4|$2}} as weder iinsteld wurden.",
        "sessionfailure-title": "session feeler",
-       "sessionfailure": "Diar as wat skiaf gingen bi't auerdreegen faan din brükerdooten.\nAm dat diar ei noch muar skiaf gongt, as det aktjuun ufbreegen wurden.\nGung turag, an began faan föören.",
+       "sessionfailure": "Diar as wat skiaf gingen bi't auerdreegen faan din brükerdooten.\nAm dat diar ei noch muar skiaf gongt, as det aktjuun ufbreegen wurden.\nWees so gud, an schüür det formulaar noch ans uf.",
        "changecontentmodel": "Det muude faan det sidj feranre",
        "changecontentmodel-legend": "Det muude feranre",
        "changecontentmodel-title-label": "Sidjennööm",
        "fix-double-redirects": "Efter't fersküüwen aal a widjerfeerangen hen tu det ual sidj ferbeedre",
        "move-leave-redirect": "Widjerfeerang iinracht",
        "protectedpagemovewarning": "'''Paase üüb: Detdiar sidj as speret wurden. Bluas administratooren kön det fersküüw.'''\nUun't logbuk stäänt muar diartu:",
-       "semiprotectedpagemovewarning": "'''Paase üüb:''' Detdiar sidj as dialwiis tu't bewerkin speret wurden. Bluas gudkäänd brükern kön det fersküüw.\nUun't logbuk stäänt muar diartu:",
+       "semiprotectedpagemovewarning": "<strong>Paase üüb:</strong> Detdiar sidj as dialwiis tu't bewerkin speret wurden. Bluas gudkäänd brükern kön det fersküüw.\nUun't logbuk stäänt muar diartu:",
        "move-over-sharedrepo": "[[:$1]] stäänt uun en gemiansoom brükt archiif. Det fersküüwen üüb didiar nööm auerskraft det gemiansoom brükt datei.",
        "file-exists-sharedrepo": "Didiar dateinööm woort al uun en gemiansoom archiif brükt. Wees so gud, an nem en öödern nööm.",
        "export": "Sidjen eksportiare",
        "version-poweredby-others": "öödern",
        "version-poweredby-translators": "Auersaatern faan translatewiki.net",
        "version-credits-summary": "Wi besoonke üs bi jodiar persuunen för hör bidracher tu [[Special:Version|MediaWiki]].",
-       "version-license-info": "MediaWiki is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\n\nMediaWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nYou should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License] along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA or [//www.gnu.org/licenses/old-licenses/gpl-2.0.html read it online].",
+       "version-license-info": "MediaWiki is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\n\nMediaWiki is distributed in the hope that it will be useful, but <em>WITHOUT ANY WARRANTY</em>; without even the implied warranty of <strong>MERCHANTABILITY</strong> or <strong>FITNESS FOR A PARTICULAR PURPOSE</strong>. See the GNU General Public License for more details.\n\nYou should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License] along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA or [//www.gnu.org/licenses/old-licenses/gpl-2.0.html read it online].",
        "version-software": "Instaliird software",
        "version-software-product": "Produkt",
        "version-software-version": "Werjuun",
        "limitreport-expansiondepth": "Maksimaal ütjwidjangsjipde",
        "limitreport-expensivefunctioncount": "Taal faan apwendag parser-funktjuunen",
        "expandtemplates": "Föörlaagen ütjwidje",
-       "expand_templates_intro": "Üüb detdiar spezial-sidj wurd a föörlaagen faan di tekst rekursiif ütjwidjet.\nUk parser-funktjuunen liküs <code><nowiki>{{</nowiki>#language:…}}</code> an wariaabeln liküs <code><nowiki>{{</nowiki>CURRENTDAY}}</code> wurd ferwerket - det ment ales, wat tesken dobelt sleufen stäänt.",
+       "expand_templates_intro": "Üüb detdiar spezial-sidj wurd a föörlaagen faan di wikitekst rekursiif ütjwidjet.\nUk parser-funktjuunen liküs <code><nowiki>{{</nowiki>#language:…}}</code> an wariaabeln liküs <code><nowiki>{{</nowiki>CURRENTDAY}}</code> wurd ferwerket - det ment ales, wat tesken dobelt sleufen stäänt.",
        "expand_templates_title": "Kontekst-tiitel, för {{FULLPAGENAME}} asw.:",
-       "expand_templates_input": "Skriiwfial:",
+       "expand_templates_input": "Skriiw wikitext:",
        "expand_templates_output": "Resultaat",
        "expand_templates_xml_output": "XML-resultaat",
        "expand_templates_html_output": "Rä HTML-ütjgoow",
index a7eb5ab..261420e 100644 (file)
@@ -32,7 +32,7 @@
        "tog-oldsig": "Zòt signatir atchwèl :",
        "tog-fancysig": "Trété signatir-a kou di wikitèks (san lyen otomatik)",
        "tog-uselivepreview": "Afiché apèrsou san roucharjé paj-a",
-       "tog-forceeditsummary": "Avèrti mo lò mo pa spésifyé di rézimé di modifikasyon",
+       "tog-forceeditsummary": "Avèrti mo lòské mo pa èspésifyé di rézimen di modifikasyon",
        "tog-watchlisthideown": "Maské mo pròp modifikasyon annan lis di swivi",
        "tog-watchlisthidebots": "Maské modifikasyon-yan ki fè pa dé robo annan lis di swivi",
        "tog-watchlisthideminor": "Maské modifikasyon-yan minò annan lis di swivi",
@@ -47,7 +47,7 @@
        "tog-showhiddencats": "Afiché katégori-ya ki kaché",
        "tog-norollbackdiff": "Pa afiché diff aprè révoké",
        "tog-useeditwarning": "Avèrti mo lò mo ka kité roun paj an kour di modifikasyon san sovgardé",
-       "tog-prefershttps": "Toujou itilizé roun konèksyon sékirizé lò mo konèkté",
+       "tog-prefershttps": "Toujou itilizé roun konnègsyon sékirizé lò mo konnègté",
        "underline-always": "Toujou",
        "underline-never": "Janmè",
        "underline-default": "Valò pa défo di tenm oben di navigatò",
@@ -78,7 +78,7 @@
        "july": "jwiyé",
        "august": "out",
        "september": "sèptanm",
-       "october": "òktòb",
+       "october": "ògtòb",
        "november": "novanm",
        "december": "désanm",
        "january-gen": "janvyé",
@@ -90,7 +90,7 @@
        "july-gen": "jwiyé",
        "august-gen": "out",
        "september-gen": "sèptanm",
-       "october-gen": "òktòb",
+       "october-gen": "ògtòb",
        "november-gen": "novanm",
        "december-gen": "désanm",
        "jan": "janv.",
        "july-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} jwiyé",
        "august-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} out",
        "september-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} sèptanm",
-       "october-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} òktòb",
+       "october-date": "{{PLURAL:$1|1=1é|$1}} ògtòb",
        "november-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} novanm",
        "december-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} désanm",
        "period-am": "AM",
        "index-category": "Paj endèksé",
        "noindex-category": "Paj ki pa endèksé",
        "broken-file-category": "Paj ké dé lyen di fiché brizé",
-       "about": "À propo",
+       "categoryviewer-pagedlinks": "($1) ($2)",
+       "category-header-numerals": "$1–$2",
+       "about": "Apropo",
        "article": "Paj di kontni",
        "newwindow": "(Ka ouvri so kò andan roun nouvèl finèt)",
-       "cancel": "Anilé",
+       "cancel": "Annilé",
        "moredotdotdot": "Plis...",
        "morenotlisted": "Sa lis pouvé fika enkonplèt",
        "mypage": "Paj",
        "errorpagetitle": "Érò",
        "returnto": "Rouvini kot paj-a $1.",
        "tagline": "Di {{SITENAME}}",
-       "help": "Èd",
+       "help": "d",
        "search": "Sasé",
        "search-ignored-headings": " #<!-- pa modifyé sa lign --><pre>\n# Tit dé sèksyon ki ké fika ignoré pa sasé-a.\n# Chanjman-yan ki éfèktchwé isi ka pran léfè lò ki paj-a ké tit-a sa endèksé.\n# Zòt pouvé fòrsé réyendèksasyon di paj-a an éfèktchwan roun modifikasyon vid.\n# Sentaks-a sa swivant-a :\n#   * Tousa ki ka swiv roun « # » jouk finisman-an di lign-an sa roun koumantèr.\n#   * Tout lign ki pa-vid sa tit ègzak-a pou ignoré, kas konprann osi.\nRéférans\nLyen ègstèrn\nWè osi\n #</pre><!-- pa modifyé sa lign -->",
        "searchbutton": "Sasé",
        "go": "Konsilté",
        "searcharticle": "Kontinwé",
-       "history": "Istorik di paj-a",
-       "history_short": "Istorik",
-       "history_small": "istorik",
+       "history": "Listorik di paj-a",
+       "history_short": "Listorik",
+       "history_small": "listorik",
        "updatedmarker": "modifyé dipi mo dannyé vizit",
        "printableversion": "Vèrsyon enprimab",
        "permalink": "Lyen pèrmanan",
        "pool-errorunknown": "Éròr enkonèt",
        "pool-servererror": "Sèrvis di rézèrvasyon pa disponib ($1).",
        "poolcounter-usage-error": "Éròr di itilizasyon : $1",
-       "aboutsite": "À propo di {{SITENAME}}",
-       "aboutpage": "Project:À propo di",
+       "aboutsite": "Apropo di {{SITENAME}}",
+       "aboutpage": "Project:Apropo di",
        "copyright": "Kontni-a sa disponib anba lisans $1 sof mansyon kontrèr.",
        "copyrightpage": "{{ns:project}}:Copyrights",
        "currentevents": "Atchwalité",
        "currentevents-url": "Project:Atchwalité",
        "disclaimers": "Panga",
        "disclaimerpage": "Project:Panga jénéral",
-       "edithelp": "Èd pou modifikasyon",
-       "helppage-top-gethelp": "Èd",
+       "edithelp": "Lèd pou modifikasyon-an",
+       "helppage-top-gethelp": "d",
        "mainpage": "Paj Prensipal",
        "mainpage-description": "Paj prensipal",
        "policy-url": "Project:Larèl",
-       "portal": "Pòrtay konminotèr",
-       "portal-url": "Project:Pòrtay konminotèr",
+       "portal": "Kouminoté",
+       "portal-url": "Project:Pòrtay kouminotèr",
        "privacy": "Politik di konfidansyalité",
        "privacypage": "Project:Politik di konfidansyalité",
        "badaccess": "Éròr di pèrmisyon",
        "versionrequired": "Vèrsyon $1 di MediaWiki nésésèr",
        "versionrequiredtext": "Vèrsyon $1 di MediaWiki sa nésésèr pou itilizé sa paj.\nKonsilté [[Special:Version|paj di vèrsyon-yan]].",
        "ok": "Validé",
+       "pagetitle": "$1 — {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
        "retrievedfrom": "Rékipéré di « $1 »",
        "youhavenewmessages": "{{PLURAL:$3|Zòt gen}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Zòt gen}} $1 {{PLURAL:$3|di rounòt itilizatò|di $3 ròt itilizatò}} ($2).",
        "site-atom-feed": "Flux Atom di $1",
        "page-rss-feed": "Flux RSS di « $1 »",
        "page-atom-feed": "Flux Atom di « $1 »",
+       "feed-atom": "Atom",
+       "feed-rss": "RSS",
        "red-link-title": "$1 (paj pa ka ègzisté)",
        "sort-descending": "Tri dékrwasan",
        "sort-ascending": "Tri krwasan",
        "nstab-user": "Paj di {{GENDER:{{ROOTPAGENAME}}|itilizatò|itilizatris}}",
        "nstab-media": "Médja",
        "nstab-special": "Paj èspésyal",
-       "nstab-project": "À propo",
+       "nstab-project": "Paj di projè",
        "nstab-image": "Fiché",
        "nstab-mediawiki": "Mésaj",
        "nstab-template": "Modèl",
-       "nstab-help": "Èd",
+       "nstab-help": "d",
        "nstab-category": "Katégori",
        "mainpage-nstab": "Paj prensipal",
        "nosuchaction": "Aksyon enkonèt",
        "nospecialpagetext": "<strong>Zòt doumandé oun paj èspésyal ki pa ka ègzisté.</strong>\n\nOun lis dé paj èspésyal valid ka trouvé so kò asou [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Érò",
        "databaseerror": "Érò di baz-a di data",
-       "databaseerror-text": "Oun érò di rékèt di baz di doné aparèt.\nSala pouvé provini di roun anomali annan lojisyèl-a.",
-       "databaseerror-textcl": "Oun érò di rékèt di baz di doné aparèt.",
+       "databaseerror-text": "Oun lérò di rékèt di baz di data prodjwi so kò.\nSala pouvé provini di roun annomali annan lojisyèl-a.",
+       "databaseerror-textcl": "Oun lérò di rékèt di baz di data prodjwi so kò.",
        "databaseerror-query": "Rékèt : $1",
        "databaseerror-function": "Fonksyon : $1",
        "databaseerror-error": "Érò : $1",
-       "transaction-duration-limit-exceeded": "Pou évité roun tròp fò ogmantasyon di délè di réplikasyon, sa tranzaksyon té anilé piskétan douré di ékritir ($1) dépasé limit-a di $2 ségonn. Si zòt ka sasé modifyé oun gran nonm di éléman similtanéman, éséyé plito di éfèktchwé opérasyon-an an plizyò étap pli piti.",
+       "transaction-duration-limit-exceeded": "Pou évité roun tròp fò ogmantasyon di délè di réplikasyon, sa tranzagsyon té annilé pas douré-a di ékritir ($1) dépasé limit-a di $2 ségonn. Si zòt ka sasé à modifyé oun gran nonm di éléman similtanéman, éséyé plito di éfègtchwé lopérasyon-an an plizyò létap pli piti.",
        "laggedslavemode": "Panga, sa paj pa pouvé kontni tout dannyé modifikasyon éfèktchwé",
        "readonly": "Baz di data vérouyé",
        "enterlockreason": "Endiké rézon-an di vérouyaj ensi ki roun èstimasyon di so douré",
-       "readonlytext": "Ajou ké mizajou di baz di doné sa atchwèlman bloké, probabman pou pèrmèt mentnans di baz-a, aprè sa, tout bagaj ké rantré andan lòrd.\n\nAdministratò sistèm ki vérouyé baz di doné té fourni èksplikasyon swivant :<br /> $1",
+       "readonlytext": "Ajou ké mizajou di baz di data sa atchwèlman bloké, probabman pou pèrmèt mentnans di baz-a, aprè sa, tout bagaj ké rantré annan lòrd.\n\nAdministratò sistenm-an ki vérouyé baz di data fourni èsplikasyon-an ki ka swiv :<br /> $1",
        "missing-article": "Baz-a di data pa trouvé tèks-a di roun paj ki li té divèt trouvé, ki entitilé « $1 » $2.\n\nJénéralman, sala ka sirvini an swivan roun lyen bò'd roun diff périmé oben bò'd listorik di roun paj souprimé.\n\nSi a pa sa ki la, zòt pitèt trouvé roun annonmali annan progranm-an.\nSouplé, signalé li à roun [[Special:ListUsers/sysop|administratò]] é pa bliyé di endiké li URL-a di paj-a.",
        "missingarticle-rev": "(niméro di vèrsyon : $1)",
        "missingarticle-diff": "(diff : $1, $2)",
-       "readonly_lag": "Baz-a di doné té otomatikman vérouyé pannan ki sèrvò-ya ségondèr ka réyaligné yé kò asou sèrvò prensipal",
+       "readonly_lag": "Baz-a di data té otonmatikman vérouyé pannan ki sèrvò-ya ségondèr ka réyaligné yé kò asou sèrvò prensipal-a",
        "nonwrite-api-promise-error": "Ankèt-a HTTP « <code>Promise-Non-Write-API-Action:</code> » té voyé mè rékèt-a té fè à oun modjoul di ékritir di API-a.",
        "internalerror": "Érò entèrn",
        "internalerror_info": "Érò entèrn : $1",
        "badarticleerror": "Sa aksyon pa pouvé fika éfèktchwé asou sa paj.",
        "cannotdelete": "Enposib di souprimé paj-a oben fiché-a « $1 ».\nSouprésyon-an pitèt ja té éfèktchwé pa rounòt moun.",
        "cannotdelete-title": "Enposib di souprimé paj-a « $1 »",
-       "delete-hook-aborted": "Souprésyon anilé pa roun ègstansyon.\nPyès èksplikasyon té bay.",
+       "delete-hook-aborted": "Souprésyon annilé pa roun ègstansyon.\nPyès èsplikasyon té bay.",
        "no-null-revision": "Enposib di kréyé roun nouvèl révizyon vid pou paj-a « $1 »",
        "badtitle": "Movè tit",
        "badtitletext": "Tit di paj doumandé pa valid, vid, oben mal fòrmé si a roun tit entèr-lanng oben entèr-projè.\nI ka kontni pitèt oun oben plizyò karaktèr ki pa pouvé fika itilizé annan tit-ya.",
        "title-invalid-magic-tilde": "Tit di paj doumandé ka kontni roun sékans di tilde majik ki pa valid (<nowiki>~~~</nowiki>).",
        "title-invalid-too-long": "Tit di paj doumandé tròp lonng. Li pa divèt dépasé $1 {{PLURAL:$1|òktè}} annan ankodaj-a UTF-8.",
        "title-invalid-leading-colon": "Tit di paj doumandé ka kontni roun dé-pwen envalid o koumansman.",
-       "perfcached": "Doné-ya ki ka swiv sa an kach é pa pouvé mizajou. Oun maximum di {{PLURAL:$1|1=roun rézilta|$1 rézilta}} sa disponib annan kach-a.",
-       "perfcachedts": "Doné-ya ki ka swiv sa an kach é té mizajou pou dannyè fwè $1. Oun maximum di {{PLURAL:$4|1=roun rézilta sa disponib|$4 rézilta sa disponib}} annan kach-a.",
-       "querypage-no-updates": "Mizajou-yan pou sa paj sa atchwèlman dézaktivé.\nDoné-ya anba pa ké mizajou.",
+       "perfcached": "Data-ya ki ka swiv sa an kach é pa pouvé fika mizajou. Oun magsimonm di {{PLURAL:$1|1=roun rézilta|$1 rézilta}} sa disponib annan kach-a.",
+       "perfcachedts": "Data-ya ki ka swiv sa an kach é té mizajou pou dannyè fwè-a $1-a. Oun magsimonm di {{PLURAL:$4|1=roun rézilta sa disponib|$4 rézilta sa disponib}} annan kach-a.",
+       "querypage-no-updates": "Mizajou-ya pou sa paj sa atchwèlman dézagtivé.\nData-ya ki anba pa ké fika mizajou.",
        "viewsource": "Wè tèks sours",
        "viewsource-title": "Wè sours-a di $1",
        "actionthrottled": "Aksyon limité",
        "ns-specialprotected": "Paj èspésyal-ya pa pouvé fika modifyé.",
        "titleprotected": "Sa tit té protéjé kont tout kréyasyon pa [[User:$1|$1]].\nMotif fourni sa <em>$2</em>.",
        "filereadonlyerror": "Enposib di modifyé fiché-a « $1 » pas répèrtwar-a di fiché « $2 » sa an lèktir sèl.\n\nAdministratò sistèm ki li vérouyé té fourni sa motif : « $3 ».",
+       "invalidtitle": "Tit pa valid",
        "invalidtitle-knownnamespace": "Tit pa valid ké lèspas di non « $2 » é entitilé-a « $3 »",
        "invalidtitle-unknownnamespace": "Tit pa valid ké niméro-a di lèspas di non $1 enkonèt é entitilé-a « $2 »",
-       "exception-nologin": "Pa konèkté",
-       "exception-nologin-text": "Souplé, konèkté zòt kò pou aksédé à sa paj oben sa aksyon.",
+       "exception-nologin": "Pa konnègté",
+       "exception-nologin-text": "Souplé, konnègté zòt kò pou agsédé à sa paj oben sa agsyon.",
        "exception-nologin-text-manual": "Souplé zòt $1 pou aksédé à sa paj oben sa aksyon.",
        "virus-badscanner": "Movèz konfigirasyon : analizò di viris enkonèt : <em>$1</em>",
        "virus-scanfailed": "échèk di analiz-a (kod $1)",
        "virus-unknownscanner": "antiviris enkonèt :",
-       "logouttext": "<strong>Zòt atchwèlman dékonèkté.</strong>\n\nNoté ki sèrtenn paj pouvé fika òkò afiché kou si zòt toujou konèkté, jouk zòt désidé di éfasé kach-a di zòt navigatò.",
-       "cannotlogoutnow-title": "Enposib di konèkté so kò atchwèlman",
-       "cannotlogoutnow-text": "Dékonèksyon-an pa posib an itilizan $1.",
+       "logouttext": "<strong>Zòt atchwèlman dékonnègté.</strong>\n\nNoté ki sèrten paj pouvé fika òkò afiché kou si zòt toujou konnègté, jouk zòt désidé di éfasé kach-a di zòt navigatò.",
+       "cannotlogoutnow-title": "Enposib di dékonnègté so kò atchwèlman",
+       "cannotlogoutnow-text": "Dékonnègsyon-an pa posib an itilizan $1.",
        "welcomeuser": "Bèlvini, $1 !",
        "welcomecreation-msg": "Zòt kont té kréyé.\nZòt pouvé modifyé [[Special:Preferences|zòt préférans]] pou {{SITENAME}} si zòt swété.",
        "yourname": "Non di itilizatò :",
        "createacct-yourpasswordagain": "Konfirmé mo di pas",
        "createacct-yourpasswordagain-ph": "Antré òkò menm mo di pas",
        "userlogin-remembermypassword": "Gardé mo sésyon aktiv",
-       "userlogin-signwithsecure": "Itilizé roun konèksyon sékirizé",
-       "cannotlogin-title": "Enposib di konèkté so kò",
-       "cannotlogin-text": "Konèksyon-an pa posib",
-       "cannotloginnow-title": "Enposib di konèkté so kò atchwèlman",
-       "cannotloginnow-text": "Konèksyon-an pa posib an itilizan $1.",
+       "userlogin-signwithsecure": "Itilizé roun konnègsyon sékirizé",
+       "cannotlogin-title": "Enposib di konnègté so kò",
+       "cannotlogin-text": "Konnègsyon-an pa posib",
+       "cannotloginnow-title": "Enposib di konnègté so kò atchwèlman",
+       "cannotloginnow-text": "Konnègsyon-an pa posib an itilizan $1.",
        "cannotcreateaccount-title": "Kréyasyon di kont enposib",
        "cannotcreateaccount-text": "Kréyasyon-an dirèk di kont itilizatò pa aktivé asou sa wiki.",
        "yourdomainname": "Zòt domenn :",
        "password-change-forbidden": "Zòt pa pouvé modifyé mo di pas asou sa wiki.",
-       "externaldberror": "Swé roun érò prodjwi so kò asou baz di doné di otantifikasyon, swé zòt pa otorizé à mété à jou zòt kont èkstèrn.",
-       "login": "Konèksyon",
+       "externaldberror": "Swé roun lérò prodjwi so kò asou baz-a di data d'otantifikasyon, swé zòt pa otorizé à mété à jou zòt kont ègstèrn.",
+       "login": "Konnègsyon",
        "login-security": "Vérifyé zòt idantité",
-       "nav-login-createaccount": "Kréyé roun kont oben konèkté so kò",
-       "logout": "Dékonèkté so kò",
-       "userlogout": "Dékonèksyon",
-       "notloggedin": "Pa konèkté",
+       "nav-login-createaccount": "Kréyé roun kont oben konnègté so kò",
+       "logout": "Dékonnègté so kò",
+       "userlogout": "Dékonnègsyon",
+       "notloggedin": "Pa konnègté",
        "userlogin-noaccount": "Zòt pa gen roun kont ?",
        "userlogin-joinproject": "Roujwenn {{SITENAME}}",
        "createaccount": "Kréyé roun kont",
        "userlogin-resetpassword-link": "Zòt bliyé zòt mo di pas ?",
-       "userlogin-helplink2": "Èd pou konèkté so kò",
-       "userlogin-loggedin": "Zòt ja konèkté an tan ki $1.\nItilizé fòrmilèr-a ki anba pou konèkté zòt kò ké rounòt kont itilizatò.",
+       "userlogin-helplink2": "Lèd pou konnègté so kò",
+       "userlogin-loggedin": "Zòt déja konnègté an tan ki $1.\nItilizé fòrmilèr-a ki anba pou konnègté zòt kò ké rounòt kont itilizatò.",
        "userlogin-reauth": "Zòt divèt roukonèkté zòt kò pou vérifyé ki zòt sa {{GENDER:$1|$1}}.",
        "userlogin-createanother": "Kréyé rounòt kont",
        "createacct-emailrequired": "Adrès di kouryé",
        "badretype": "Mo di pas ki zòt sézi pa ka korèsponn.",
        "usernameinprogress": "Oun kréyasyon di kont pou sa non d'itilizatò ja an kour.\nSouplé, pasyanté.",
        "userexists": "Non d'itilizatò sézi ja itilizé.\nSouplé, chwézi roun non diféran.",
-       "loginerror": "Érò di konèksyon",
+       "loginerror": "Lérò di konnègsyon",
        "createacct-error": "Érò lò kréyasyon-an di kont",
        "createaccounterror": "Enposib di kréyé kont-a : $1",
-       "nocookiesnew": "Kont itilizatò té kréyé, mè zòt pa konèkté.\n{{SITENAME}} ka itilizé dé témwen (''cookies'') pou konsèrvé konèksyon-an mè zòt dézaktivé yé.\nSouplé, aktivé yé é roukonèkté zòt kò ké menm non é menm mo di pas.",
-       "nocookieslogin": "{{SITENAME}} itilizé dé témwen (''cookies'') pou konsèrvé konèksyon-an mè zòt dézaktivé yé.\nSouplé, aktivé yé é roukonèkté zòt kò.",
+       "nocookiesnew": "Kont itilizatò fin kréyé, mé zòt pa konnègté.\n{{SITENAME}} ka itilizé dé témwen (''cookies'') pou konsèrvé konnègsyon-an mé zòt dézagtivé yé.\nSouplé, agtivé yé é rikonnègté zòt kò ké menm non é menm modipas.",
+       "nocookieslogin": "{{SITENAME}} itilizé dé témwen (''cookies'') pou konsèrvé konnègsyon-an mé zòt dézagtivé yé.\nSouplé, agtivé yé é rikonnègté zòt kò.",
        "nocookiesfornew": "Kont itilizatò pa té kréyé, pas nou pa té pouvé idantifyé so lorijin.\nVérifyé ki zòt aktivé témwen-yan (''cookies''), roucharjé paj-a é éséyé òkò.",
-       "createacct-loginerror": "Kont-a té byen kréyé mè zòt pa pouvé konèkté zòt kò otomatikman.\nSouplé, [[Special:UserLogin|konèkté zòt kò manwèlman]].",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
+       "createacct-loginerror": "Kont-a byen fin kréyé mé zòt pa pouvé konnègté zòt kò otonmatikman.\nSouplé, [[Special:UserLogin|konnègté zòt kò manniyèlman]].",
        "noname": "Zòt pa sézi roun non d'itilizatò valid.",
-       "loginsuccesstitle": "Konèkté",
-       "loginsuccess": "<strong>Zòt atchwèl konèkté à {{SITENAME}} antan ki « $1 ».</strong>",
+       "loginsuccesstitle": "Konnègté",
+       "loginsuccess": "<strong>Zòt sa atchwèlman konnègté à {{SITENAME}} antan ki « $1 ».</strong>",
        "nosuchuser": "Itilizatò « $1 » pa ka ègzisté.\nNon d'itilizatò-ya sa sansib à lakas.\nVérifyé lòrtograf, oben [[Special:CreateAccount|kréyé roun kont nòv]].",
        "nosuchusershort": "I pa gen kontribitò ké non-an « $1 ».\nSouplé, vérifyé lòrtograf.",
        "nouserspecified": "Zòt divèt sézi roun non d'itilizatò.",
-       "login-userblocked": "{{GENDER:$1|Sa itilizatò|Sa itilizatris}} bloké. Konèksyon-an pa otorizé.",
+       "login-userblocked": "{{GENDER:$1|Sa itilizatò}} bloké. Konnègsyon-an pa otorizé.",
        "wrongpassword": "Non d'itilizatò oben mo di pas enkorèk.\nSouplé, éséyé òkò.",
        "wrongpasswordempty": "Zòt pa antré pyès mo di pas.\nSouplé, éséyé òkò.",
        "passwordtooshort": "Zòt mo di pas divèt kontni omwen $1 karaktèr{{PLURAL:$1|}}.",
        "password-login-forbidden": "Itilizasyon-an di sa non d'itilizatò oben di sa mo di pas té entèrdit.",
        "mailmypassword": "Réyinisyalizé mo di pas",
        "passwordremindertitle": "Nouvèl mo di pas tanporèr pou {{SITENAME}}",
-       "passwordremindertext": "Tchèk moun (dipi adrès IP $1) doumandé roun mo di pas nòv pou {{SITENAME}} ($4). Oun mo di pas tanporèr pou itilizatò-a\n« $2 » té kréyé é sa « $3 ». Si sala té zòt entansyon,\nzòt divèt konèkté zòt kò é chwézi roun mo di pas nòv.\nZòt mo di pas tanporèr ké èkspiré andan $5 jou{{PLURAL:}}.\n\nSi zòt pa lotò di sa doumann, oben si zòt ka souvni zòt kò atchwèlman di zòt mo di pas é zòt pli ka swété an chanjé, zòt pouvé ignoré sa mésaj é kontinwé di itilizé zòt ansyen mo di pas.",
+       "passwordremindertext": "Tchèk moun (dipi adrès IP-a $1) doumandé roun modipas nòv pou {{SITENAME}} ($4). Oun modipas tanporèr pou itilizatò-a\n« $2 » fin kréyé é sa « $3 ». Si sala té zòt entansyon,\nzòt divèt konnègté zòt kò é chwézi roun modipas nòv.\nZòt modipas tanporèr ké èspiré annan $5 jou{{PLURAL:}}.\n\nSi zòt pa lotò di sa doumann, oben si zòt ka souvni zòt kò atchwèlman di zòt modipas é zòt pli ka swété an chanjé, zòt pouvé ignoré sa mésaj é kontinwé di itilizé zòt ansyen modipas.",
        "noemail": "Pyès adrès di kouryé té anréjistré pou itilizat{{GENDER:$1|ò|ris}}-a « $1 ».",
        "noemailcreate": "Zòt divèt fourni roun adrès di kouryé valid",
        "passwordsent": "Roun nouvèl mo di pas té voyé kot adrès-a di kouryé di itilizat{{GENDER:$1|ò|ris}} « $1 ».\nSouplé, roukonèkté zòt kò aprè ki zòt rousouvri li.",
        "accountcreatedtext": "Kont itilizatò pou [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|diskisyon]]) té kréyé.",
        "createaccount-title": "Kréyasyon di roun kont pou {{SITENAME}}",
        "createaccount-text": "Tchèk moun kréyé roun kont pou zòt adrès di kouryé asou {{SITENAME}} ($4) entitilé « $2 », ké mo di pas « $3 ».\nZòt divèt ouvri roun sésyon é atchwèlman modifyé zòt mo di pas.\n\nIgnoré sa mésaj si sa kont té kréyé pa érò.",
-       "login-throttled": "Zòt tanté dèrnyèrman roun nonm tròp élvé di konèksyon.\nSouplé, antann $1 anvan di éséyé òkò.",
-       "login-abort-generic": "Zòt échwé zòt tantativ di konèksyon",
+       "login-throttled": "Zòt tanté dannyéman roun nonm tròp élvé di konnègsyon.\nSouplé, antann $1 anvan di éséyé òkò.",
+       "login-abort-generic": "Zòt échwé zòt tantativ di konnègsyon",
        "login-migrated-generic": "Zòt kont té migré, é zòt non d'itilizatò pa ka ègzisté òkò asou sa wiki.",
        "loginlanguagelabel": "Lanng : $1",
-       "suspicious-userlogout": "Zòt doumann di konèksyon té réfizé pas i sanblé ki li té voyé pa roun navigatò défèktyé oben dipi kach-a di roun sèrvis mandatèr.",
+       "suspicious-userlogout": "Zòt doumann di konnègsyon té roufizé pas i sanblé ki li té voyé pa roun navigatò défègtché oben dipi kach-a di roun sèrvis mandatèr.",
        "createacct-another-realname-tip": "Véritab non sa òpsyonèl.\nSi zòt désidé di fourni li, i ké fika itilizé pou krédité lotò di so travay.",
-       "pt-login": "Konèkté so kò",
-       "pt-login-button": "Konèkté so kò",
-       "pt-login-continue-button": "Kontinwé konèksyon-an",
+       "pt-login": "Konnègté so kò",
+       "pt-login-button": "Konnègté so kò",
+       "pt-login-continue-button": "Kontinwé konnègsyon-an",
        "pt-createaccount": "Kréyé roun kont",
-       "pt-userlogout": "Dékonèkté so kò",
+       "pt-userlogout": "Dékonnègté so kò",
        "php-mail-error-unknown": "Érò enkonèt annan fonksyon-an <code>mail()</code> di PHP.",
        "user-mail-no-addy": "Enposib di voyé roun kouryé san adrès di kouryé.",
        "user-mail-no-body": "Ésè di voyé di roun kouryé ké roun kò vid oben anòrmalman kour.",
        "changepassword": "Chanjé di mo di pas",
        "resetpass_announce": "Pou tèrminé zòt enskripsyon, zòt divèt fourni roun mo di pas nòv.",
+       "resetpass_text": "<!-- Ajouté tègs-a isi -->",
        "resetpass_header": "Chanjé mo di pas di kont",
        "oldpassword": "Ansyen mo di pas :",
        "newpassword": "Mo di pas nòv :",
        "retypenew": "Konfirmé mo di pas nòv :",
-       "resetpass_submit": "Chanjé mo di pas é konèkté so kò.",
+       "resetpass_submit": "Chanjé modipas-a é konnègté so kò.",
        "changepassword-success": "Zòt mo di pas té modifyé !",
-       "changepassword-throttled": "Zòt fè tròp di tantativ di konèksyon résaman. \nSouplé, antann $1 anvan di rééséyé.",
+       "changepassword-throttled": "Zòt fè tròp di tantativ di konnègsyon résaman. \nSouplé, antann $1 anvan di réyéséyé.",
        "botpasswords": "Mo di pas di robo",
-       "botpasswords-summary": "<em>Mo di pas di robo</em> ka pèrmèt di aksédé à roun kont itilizatò via API-a san itilizé idantifyan-yan di konèksyon prensipal. Drwè itilizatò disponib lò to konèkté ké roun mo di pas robo pouvé fika rédjwi.\n\nSi zòt wè pou kisa zòt ké lé fè sa, a ki zòt pa benzwen di fè sa. Pésonn divèt janmè doumandé zòt di jénéré roun é di bay li.",
+       "botpasswords-summary": "<em>Modipas-ya di robo</em> ka pèrmèt di agsédé à roun kont itilizatò vya API-a san itilizé idantifyan-yan di konnègsyon prensipal. Drwè itilizatò disponib lò to konnègté ké roun modipas robo pouvé fika rédjwi.\n\nSi zòt pa ka wè poukisa zòt ké lé fè sa, a ki zòt pa benzwen di fè sa. Pésonn divèt janmen doumandé zòt di an jénéré roun é di bay li.",
        "botpasswords-disabled": "Mo di pas di robo sa dézaktivé.",
-       "botpasswords-no-central-id": "Pou itilizé mo di pas di robo, zòt divèt fika konèkté à roun kont santralizé.",
+       "botpasswords-no-central-id": "Pou itilizé modipas-ya di robo, zòt divèt fika konnègté à roun kont ki santralizé.",
        "botpasswords-existing": "Mo di pas di robo ègzistan",
        "botpasswords-createnew": "Kréyé roun mo di pas nòv di robo",
        "botpasswords-editexisting": "Modifyé roun mo di pas di robo ègzistan",
+       "botpasswords-label-needsreset": "(Modipas-a divèt fika réyinisyalizé)",
        "botpasswords-label-appid": "Non di robo :",
        "botpasswords-label-create": "Kréyé",
        "botpasswords-label-update": "Mété à jou",
-       "botpasswords-label-cancel": "Anilé",
+       "botpasswords-label-cancel": "Annilé",
        "botpasswords-label-delete": "Souprimé",
        "botpasswords-label-resetpassword": "Réyinisyalizé mo di pas",
        "botpasswords-label-grants": "Drwè aplikab :",
        "botpasswords-updated-body": "Mo di pas pou robo-a « $1 » di {{GENDER:$2|itilizatò|itilizatris}}-a « $2 » té mizajou.",
        "botpasswords-deleted-title": "Mo di pas di robo souprimé",
        "botpasswords-deleted-body": "Mo di pas pou robo-a « $1 » di {{GENDER:$2|itilizatò|itilizatris}}-a « $2 » té souprimé.",
-       "botpasswords-newpassword": "Mo di pas nòv pou konèkté so kò à<strong>$1</strong> sa <strong>$2</strong>. <em>Souplé, anréjistré li pou fè référans di li iltèryèrman.</em><br> (Pou ansyen robo ki ka nésésité ki non fourni pou konèksyon-an ka fika menm-an ki non di itilizasyon évantchwèl, zòt pouvé osi itilizé <strong>$3</strong> kou non di itilizatò é <strong>$4</strong> kou mo di pas).",
+       "botpasswords-newpassword": "Nouvèl modipas-a pou konnègté so kò à<strong>$1</strong> sa <strong>$2</strong>. <em>Souplé, anréjistré li pou fè référans asou li iltèryèrman.</em><br> (Pou ansyen robo ki ka nésésité ki non fourni pou konnègsyon-an ka fika menm-an ki non di itilizasyon évantchwèl, zòt pouvé osi itilizé <strong>$3</strong> kou non di itilizatò é <strong>$4</strong> kou modipas).",
        "botpasswords-no-provider": "BotPasswordsSessionProvider pa disponib.",
-       "botpasswords-restriction-failed": "Rèstriksyon-yan di mo di pas di robo ka anpéché sa konèksyon.",
+       "botpasswords-restriction-failed": "Rèstrigsyon-yan di modipas di robo ka anpéché sa konnègsyon.",
        "botpasswords-invalid-name": "Non-an d'itilizatò spésifyé pa ka kontni di séparatò di mo di pas di robo (« $1 »).",
        "botpasswords-not-exist": "{{GENDER:$1|Itilizatò|Itilizatris}}-a « $1 » pa gen di mo di pas di robo nonmen « $2 ».",
        "resetpass_forbidden": "Mo di pas pa pouvé fika chanjé.",
        "resetpass_forbidden-reason": "Mo di pas pa pouvé fika modifyé : $1",
-       "resetpass-no-info": "Zòt divèt fika konèkté pou aksédé dirèkman à sa paj.",
+       "resetpass-no-info": "Zòt divèt fika konnègté pou agsédé dirèkman à sa paj.",
        "resetpass-submit-loggedin": "Chanjé di mo di pas",
-       "resetpass-submit-cancel": "Anilé",
+       "resetpass-submit-cancel": "Annilé",
        "resetpass-wrong-oldpass": "Mo di pas atchwèl oben tanporèr envalid.\nZòt pitèt ja chanjé zòt mo di pas oben doumandé roun mo di pas nòv tanporèr.",
-       "resetpass-recycled": "Souplé, réyinisyalizé zòt mo di pas an tchèk kichoz di ròt ki atchwèl-a.",
-       "resetpass-temp-emailed": "Zòt konèkté ké roun kod tanporèr fourni pa kouryé.\nPou tèrminé konèksyon-an, zòt divèt fourni roun mo di pas nòv isi :",
+       "resetpass-recycled": "Souplé, réyinisyalizé zòt modipas an tchèk kichoz di ròt ki atchwèl-a.",
+       "resetpass-temp-emailed": "Zòt konnègté ké roun kod tanporèr ki fourni pa kouryé.\nPou tèrminé konnègsyon-an, zòt divèt fourni roun nouvèl modipas isi :",
        "resetpass-temp-password": "Mo di pas tanporèr :",
-       "resetpass-expired-soft": "Zòt mo di pas èkspiré, é divèt fika réyinisyalizé. Souplé, chwézi roun nouvèl atchwèlman oben kliké asou « {{int:authprovider-resetpass-skip-label}} » pou fè li plita.",
-       "resetpass-validity-soft": "Zòt mo di pas pa valid : $1\n\nSouplé, chwézi roun mo di pas nòv atchwèlman, oben kliké asou « {{int:authprovider-resetpass-skip-label}} » pou réyinisyalizé li plita.",
+       "resetpass-expired-soft": "Zòt modipas èspiré, é divèt fika réyinisyalizé. Souplé, chwézi roun nouvèl atchwèlman oben kliké asou « {{int:authprovider-resetpass-skip-label}} » pou fè li plita.",
+       "resetpass-validity-soft": "Zòt modipas pa valid : $1\n\nSouplé, chwézi roun modipas nòv atchwèlman, oben kliké asou « {{int:authprovider-resetpass-skip-label}} » pou réyinisyalizé li plita.",
        "passwordreset": "Réyinisyalizasyon di mo di pas",
        "passwordreset-text-one": "Ranplisé sa fòrmilèr pou zòt mo di pas.",
        "passwordreset-emaildisabled": "Fonksyonalité-ya di kouryé té dézaktivé asou sa wiki.",
        "passwordreset-invalidemail": "Adrès di mésajri envalid",
        "passwordreset-nodata": "Pyès non d'itilizatò oben adrès di mésajri té fourni",
        "changeemail": "Chanjé oben souprimé adrès di kouryé",
-       "changeemail-no-info": "Zòt divèt fika konèkté pou aksédé dirèkman à sa paj.",
+       "changeemail-no-info": "Zòt divèt fika konnègté pou agsédé dirèkman à sa paj.",
        "changeemail-oldemail": "Adrès di kouryé atchwèl :",
        "changeemail-newemail": "Nouvèl adrès di kouryé :",
        "changeemail-none": "(pyès)",
        "changeemail-password": "Zòt mo di pas asou {{SITENAME}} :",
        "changeemail-submit": "Chanjé adrès di kouryé",
-       "changeemail-throttled": "Zòt fè tròp di tantativ di konèksyon. \nSouplé, antann $1 anvan di rééséyé.",
+       "changeemail-throttled": "Zòt fè tròp tantativ di konnègsyon. \nSouplé, antann $1 anvan di réyéséyé.",
        "changeemail-nochange": "Souplé, sézi roun nouvèl adrès di kouryé diférant di présédant-a.",
        "resettokens": "Réyinisyalizé jéton-yan.",
        "resettokens-no-tokens": "I pa gen pyès jéton pou réyinisyalizé.",
        "media_tip": "Lyen bò'd roun fiché médja",
        "sig_tip": "Zòt signatir ké dat",
        "hr_tip": "Lign orizontal (pa an abizé)",
-       "summary": "Rézimé :",
+       "summary": "Rézimen :",
        "subject": "Sijè :",
        "minoredit": "Sa modifikasyon sa minò.",
        "watchthis": "Swiv sa paj",
        "preview": "Prévizwalizasyon",
        "showpreview": "Prévizwalizé",
        "showdiff": "Wè modifikasyon-yan",
-       "anoneditwarning": "<strong>Panga :</strong> zòt pa konèkté. Zòt adrès IP ké fika vizib pa tout moun si zòt ka fè dé modifikasyon. Si zòt <strong>[$1 ka konèkté zòt kò]</strong> oben <strong>[$2 kréyé roun kont]</strong>, zòt modifikasyon ké fika atribiyé à zòt pròp non di itilizatò é zòt ké gen ròt avantaj.",
+       "anoneditwarning": "<strong>Panga :</strong> zòt pa konnègté. Zòt adrès IP ké vizib pa tout moun si zòt ka fè dé modifikasyon. Si zòt <strong>[$1 ka konnègté zòt kò]</strong> oben <strong>[$2 kréyé roun kont]</strong>, zòt modifikasyon ké fika atribiyé à zòt pròp non di itilizatò é zòt ké gen ròt avantaj.",
        "blockedtext": "<strong>Zòt kont itilizatò oben zòt adrès IP bloké.</strong>\n\nBlokaj té éfèktchwé pa $1.\nRézon-an ki évoké ka swiv : <em>$2</em>.\n\n* Koumansman di blokaj : $8\n* Èspirasyon di blokaj : $6\n* Kont bloké : $7.\n\nZòt pouvé kontakté $1 oben rounòt [[{{MediaWiki:Grouppage-sysop}}|administratò]] pou an diskité.\nZòt pa pouvé itilizé fonksyon-an « {{int:emailuser}} » rounso si oun adrès di kouryé valid sa èspésifyé andan zòt [[Special:Preferences|préférans]] é rounso si sa fonksyonalité pa bloké.\nZòt adrès IP atchwèl sa $3 é zòt idantifyan di blokaj sa $5.\nSouplé, enkli tout détay-ya lasou'l annan chakin dé rékèt ki zòt ké fè.",
-       "loginreqlink": "konèkté so kò",
+       "loginreqlink": "konnègté so kò",
        "newarticletext": "Zòt té ka swiv roun lyen bò'd roun paj ki pa ka ègzisté òkò. \nAfen di kréyé sa paj, antré zòt tèks annan bwèt ki aprè (zòt pouvé konsilté [$1 paj di lèd-a] pou plis d'enfòrmasyon).\nSi zòt vini{{GENDER:|}} isi pa éròr, kliké asou bouton <strong>Routour</strong> di zòt navigatò.",
-       "anontalkpagetext": "----\n<em>Zòt asou paj di diskisyon di roun itilizatò anonim ki pa òkò kréyé di kont oben ki pa ka an itilizé</em>.\nPou sa rézon, nou divèt itilizé so adrès IP pou idantifyé li.\nOun adrès IP pouvé fika partajé pa plizyò itilizatò.\nSi zòt roun itiliza{{GENDER:|ò|ris}} anonim é si zòt ka kontasté ki dé koumantèr ki pa ka konsèrné zòt sa adrèsé pou zòt, zòt pouvé [[Special:CreateAccount|kréyé roun kont]] oben [[Special:UserLogin|konèkté zòt kò]] atò di évité tout konfizyon fitir ké ròt kontribitò anonim.",
+       "anontalkpagetext": "----\n<em>Zòt asou paj di diskisyon di roun itilizatò annonnim ki pa òkò kréyé di kont oben ki pa ka an itilizé</em>.\nPou sa rézon, nou divèt itilizé so adrès IP pou idantifyé li.\nOun adrès IP pouvé fika patajé pa plizyò itilizatò.\nSi zòt roun itiliza{{GENDER:|ò}} annonnim é si zòt ka kontasté ki dé koumantèr ki pa ka konsèrné zòt sa adrèsé pou zòt, zòt pouvé [[Special:CreateAccount|kréyé roun kont]] oben [[Special:UserLogin|konnègté zòt kò]] atò di évité tout konfizyon fitir ké ròt kontribitò annonnim.",
        "noarticletext": "I pa gen atchwèlman pyès tèks asou sa paj.\nZòt pouvé [[Special:Search/{{PAGENAME}}|lansé oun sasé asou sa tit]] annan ròt paj-ya,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sasé annan opérasyon ki lyannen]\noben [{{fullurl:{{FULLPAGENAME}}|action=edit}} kréyé sa paj]</span>.",
        "noarticletext-nopermission": "I pa gen atchwèlman pyès tèks asou sa paj.\nZòt pouvé [[Special:Search/{{PAGENAME}}|fè roun sasé asou sa tit]] andan ròt paj-ya,\noben <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|paj={{FULLPAGENAMEE}}}} sasé annan journal asosyé]</span>, mè zòt pa gen pèrmisyon di kréyé sa paj.",
        "userpage-userdoesnotexist-view": "Kont itilizatò-a « $1 » pa anréjistré.",
-       "clearyourcache": "<strong>Nòt :</strong> aprè zòt anréjistré zòt modifikasyon, zòt divèt fòrsé roucharjman konplè di kach di zòt navigatò pou wè chanjman-yan.\n* <strong>Firefox / Safari :</strong> mentné touch-a <em>Maj</em> (<em>Shift</em>) an klikan asou bouton-an <em>Atchwalizé</em> oben présé <em>Ctrl-F5</em> oben <em>Ctrl-R</em> (<em>⌘-R</em> asou roun Mac) \n* <strong>Google Chrome :</strong> apiyé asou <em>Ctrl-Maj-R</em> (<em>⌘-Shift-R</em> asou roun Mac) \n* <strong>Internet Explorer :</strong> mentni touch-a <em>Ctrl</em> an klikan asou bouton-an <em>Atchwalizé</em> oben présé <em>Ctrl-F5</em> \n* <strong>Opera :</strong> alé annan <em>Menu → Settings</em> (<em>Opera → Préférences</em> asou roun Mac) é answit à <em>Konfidansyalité & sékrité → Éfasé doné d'èsplorasyon-yan → Imaj ké fiché an kach</em>.",
+       "clearyourcache": "<strong>Nòt :</strong> aprè zòt anréjistré zòt modifikasyon, zòt divèt fòrsé richarjman konplè di kach di zòt navigatò pou wè chanjman-yan.\n* <strong>Firefox / Safari :</strong> mentni touch-a <em>Maj</em> (<em>Shift</em>) an klikan asou bouton-an <em>Atchwalizé</em> oben présé <em>Ctrl-F5</em> oben <em>Ctrl-R</em> (<em>⌘-R</em> asou roun Mac) \n* <strong>Google Chrome :</strong> apiyé asou <em>Ctrl-Maj-R</em> (<em>⌘-Shift-R</em> asou roun Mac) \n* <strong>Internet Explorer :</strong> mentni touch-a <em>Ctrl</em> an klikan asou bouton-an <em>Atchwalizé</em> oben présé <em>Ctrl-F5</em> \n* <strong>Opera :</strong> alé annan <em>Menu → Settings</em> (<em>Opera → Préférences</em> asou roun Mac) é answit à <em>Konfidansyalité & sékrité → Éfasé data d'èsplorasyon-yan → Zimaj ké fiché an kach</em>.",
        "previewnote": "<strong>Raplé-zòt ki a jis roun prévizwalizasyon.</strong>\nZòt modifikasyon pa òkò anréjistré !",
        "continue-editing": "Alé kot zonn di modifikasyon",
        "editing": "Modifikasyon di $1",
        "history-fieldset-title": "Sasé dé révizyon",
        "histfirst": "Pli ansyenn",
        "histlast": "Pli résant",
-       "history-feed-title": "Istorik dé vèrsyon",
-       "history-feed-description": "Istorik dé vèrsyon pou sa paj asou wiki",
+       "history-feed-title": "Listorik dé vèrsyon",
+       "history-feed-description": "Listorik dé vèrsyon pou sa paj asou wiki-a",
        "history-feed-item-nocomment": "$1 à $2",
        "rev-delundel": "afiché/maské",
        "mergelog": "Journal dé fizyon",
-       "history-title": "$1 : Istorik é vèrsyon",
+       "history-title": "$1 : Listorik dé vèrsyon",
        "difference-title": "$1 : Diférans ant vèrsyon",
        "lineno": "Lign $1 :",
        "compareselectedversions": "Konparé vèrsyon-yan sélèksyoné",
-       "editundo": "anilé",
+       "editundo": "annilé",
        "diff-empty": "(Pyès diférans)",
        "diff-multi-sameuser": "({{PLURAL:$1|Oun révizyon entermédyèr pa menm itilizatò pa afiché|$1}})",
        "diff-multi-otherusers": "({{PLURAL:$1|Oun révizyon entèrmédyèr|$1}} pa {{PLURAL:$2|rounòt itilizatò|$2}} pa {{PLURAL:$1|afiché|}})",
        "rightslog": "Journal dé modifikasyon di drwè di itilizatò",
        "action-edit": "modifyé sa paj",
        "action-createaccount": "kréyé sa kont itilizatò",
-       "enhancedrc-history": "istorik",
+       "enhancedrc-history": "listorik",
        "recentchanges": "Modifikasyon résant",
        "recentchanges-legend": "Lòpsyon dé modifikasyon résant",
        "recentchanges-summary": "Swiv chanjman-yan pli résan wiki asou sa paj.",
        "imgfile": "fiché",
        "listfiles": "Lis di fiché",
        "file-anchor-link": "Fiché",
-       "filehist": "Istorik di fiché",
+       "filehist": "Listorik di fiché",
        "filehist-help": "Kliké asou roun dat ké lò pou wè fiché-a tèl ki li té yé à sa moman.",
        "filehist-revert": "rétablir",
        "filehist-current": "atchwèl",
        "sharedupload-desc-here": "Sa fiché ka provini di $1. Li pouvé fika itilizé pa ròt projè.\nSo dèskripsyon asou so [$2 paj di dèskripsyon] sa afiché anba.",
        "filepage-nofile": "Pyès fiché di sa non ka ègzisté.",
        "upload-disallowed-here": "Zòt pa pouvé ranplasé sa fiché.",
-       "randompage": "Paj o azò",
+       "randompage": "Paj an azò",
        "statistics": "Èstatistik",
        "double-redirect-fixer": "Korèktò di roudirèksyon",
        "nbytes": "$1 {{PLURAL:$1|òktè}}",
        "tooltip-pt-preferences": "{{GENDER:|Zòt}} préférans",
        "tooltip-pt-watchlist": "Oun lis dé paj don zòt ka swiv modifikasyon",
        "tooltip-pt-mycontris": "Oun lis di {{GENDER:|zòt}} kontribisyon",
-       "tooltip-pt-login": "Nou ka ankourajé zòt à konèkté zòt kò ; soupannan, i pa obligatwar",
-       "tooltip-pt-logout": "Dékonèkté so kò",
-       "tooltip-pt-createaccount": "Nou ka ankourajé zòt à kréyé roun kont itilizatò é konèkté zòt kò ; soupannan, i pa obligatwar",
+       "tooltip-pt-login": "Nou ka ankourajé zòt à konnègté zòt kò ; soupannan, zòt pa blijé di fè li",
+       "tooltip-pt-logout": "Dékonnègté so kò",
+       "tooltip-pt-createaccount": "Nou ka ankourajé zòt à kréyé roun kont itilizatò é konnègté zòt kò ; soupannan, zòt pa blijé di fè li",
        "tooltip-ca-talk": "Diskisyon o sijè di sa paj di kontni",
        "tooltip-ca-edit": "Modifyé wikikod-a",
        "tooltip-ca-addsection": "Koumansé roun nouvèl sèksyon",
        "tooltip-ca-viewsource": "Sa paj sa protéjé.\nZòt pouvé toutfwè vizwalizé sours-a.",
-       "tooltip-ca-history": "Istorik vèrsyon-yan di sa paj",
+       "tooltip-ca-history": "Listorik dé vèrsyon di sa paj",
        "tooltip-ca-protect": "Protéjé sa paj",
        "tooltip-ca-delete": "Souprimé sa paj",
        "tooltip-ca-move": "Rounonmen sa paj",
        "tooltip-p-logo": "Vizité paj prensipal-a",
        "tooltip-n-mainpage": "Vizité paj prensipal-a di sit",
        "tooltip-n-mainpage-description": "Paj prensipal jénéral",
-       "tooltip-n-portal": "À propo di projè, sa ki zòt pouvé fè, koté trouvé enfòrmasyon-yan",
+       "tooltip-n-portal": "Apropo di projè, sa ki zòt pouvé fè, koté trouvé enfòrmasyon-yan",
        "tooltip-n-currentevents": "Trouvé plis d'enfòrmasyon asou atchwalité an kour",
        "tooltip-n-recentchanges": "Lis di modifikasyon résant asou wiki-a",
-       "tooltip-n-randompage": "Afiché roun paj o azò",
+       "tooltip-n-randompage": "Afiché roun paj an azò",
        "tooltip-n-help": "Aksè à lèd",
        "tooltip-t-whatlinkshere": "Lis dé paj ki lyannen ki ka pwenté asou sala",
        "tooltip-t-recentchangeslinked": "Lis di modifikasyon résant liyé à sa paj",
        "tooltip-diff": "Afiché modifikasyon-yan ki zòt apòrté andan tèks-a.",
        "tooltip-compareselectedversions": "Afiché diférans-ya ant dé vèrsyon-yan sélèksyoné di sa paj",
        "tooltip-watch": "Ajouté sa paj annan zòt lis di swivi",
-       "tooltip-rollback": "« Révoké » ka anilé an roun klik modifikasyon(-an oben yan) di sa paj ki réyalizé pa so dannyé kontribitò",
-       "tooltip-undo": "« Anilé » ka rétabli modifikasyon présédant é ka ouvri lafinèt di modifikasyon an mòd prévizwalizasyon. I posib di ajouté roun rézon annan rézimé-a.",
-       "tooltip-summary": "Antré roun brèf rézimé",
+       "tooltip-rollback": "« Révoké » ka annilé an roun klik modifikasyon(-an oben -yan) di sa paj ki réyalizé pa so dannyé kontribitò",
+       "tooltip-undo": "« Annilé » ka rétabli modifikasyon-an ki ka présédé é ka ouvri lafinèt di modifikasyon an mòd prévizwalizasyon. I posib di ajouté roun rézon annan rézimen-an.",
+       "tooltip-summary": "Antré roun brèf rézimen",
        "simpleantispam-label": "Vérifikasyon anti-pouryèl.\nPa <strong>enskri</strong> anyen isi !",
        "pageinfo-title": "Enfòrmasyon pou « $1 »",
        "pageinfo-header-basic": "Enfòrmasyon di baz",
-       "pageinfo-header-edits": "Istorik dé modifikasyon",
+       "pageinfo-header-edits": "Listorik dé modifikasyon",
        "pageinfo-header-restrictions": "Protèksyon di paj-a",
        "pageinfo-header-properties": "Propriyété di paj-a",
        "pageinfo-display-title": "Tit afiché",
index 3af4877..1ebf800 100644 (file)
@@ -27,7 +27,8 @@
                        "Hamilton Abreu",
                        "Athena in Wonderland",
                        "Navhy",
-                       "PokéDex Nacional"
+                       "PokéDex Nacional",
+                       "Maria zaos"
                ]
        },
        "tog-underline": "Subliñar as ligazóns:",
        "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]].\nO motivo achegado é <em>$2</em>.",
        "filereadonlyerror": "Non se puido modificar o ficheiro \"$1\" porque o repositorio \"$2\" está en modo de só lectura.\n\nO administrador do sistema que bloqueou o repositorio achegou este motivo: \"$3\".",
+       "invalidtitle": "Título non válido",
        "invalidtitle-knownnamespace": "Título inválido co espazo de nomes \"$2\" e o texto \"$3\"",
        "invalidtitle-unknownnamespace": "Título inválido cun número de espazo de nomes, $1, descoñecido e o texto \"$2\"",
        "exception-nologin": "Non accedeu ao sistema",
        "recentchangescount": "Número de edicións a amosar por defecto nos cambios recentes, nos historiais de páxina e nos rexistrosː",
        "prefs-help-recentchangescount": "Número máximo: 1000",
        "prefs-help-watchlist-token2": "Esta é a clave secreta da fonte de novas web para a súa lista de vixilancia.\nCalquera persoa que a saiba poderá ler a súa lista de vixilancia; non comparta esta clave.\nSe o precisa, [[Special:ResetTokens|pode restablecela]].",
-       "prefs-help-tokenmanagement": "Podes ver e restaurar a chave secreta para a túa conta que pode acceder á fonte web da túa lista de vixiancia. Calquera que coñeza a chave poderá leer a túa lista de vixiancia, non a comparta.",
+       "prefs-help-tokenmanagement": "Pode ver e restaurar a chave secreta da súa conta, que permite acceder á fonte web da súa lista de vixiancia. Calquera que coñeza a chave poderá ler a súa lista de vixilancia, así que non a comparta.",
        "savedprefs": "Gardáronse as súas preferencias.",
        "savedrights": "Gardáronse os grupos de {{GENDER:$1|usuario|usuaria}} de $1.",
        "timezonelegend": "Fuso horario:",
        "cachedspecial-refresh-now": "Ir á versión máis recente.",
        "categories": "Categorías",
        "categories-submit": "Amosar",
-       "categoriespagetext": "{{PLURAL:$1|A seguinte categoría contén|As seguintes categorías conteñen}} páxinas ou contidos multimedia.\nAquí non se mostran as [[Special:UnusedCategories|categorías sen uso]].\nOlle tamén as [[Special:WantedCategories|categorías requiridas]].",
+       "categoriespagetext": "{{PLURAL:$1|A seguinte categoría existe|As seguintes categorías existen}} na wiki, e poden ou non estar sen utilizar.\nOlle tamén as [[Special:WantedCategories|categorías requiridas]].",
        "categoriesfrom": "Mostrar as categorías que comecen por:",
        "deletedcontributions": "Contribucións borradas do usuario",
        "deletedcontributions-title": "Contribucións borradas do usuario",
        "edit-error-long": "Erros:\n\n$1",
        "revid": "revisión $1",
        "pageid": "identificador de páxina $1",
+       "interfaceadmin-info": "$1\n\nOs permisos para editar ficheiros globais de CSS/JS/JSON separáronse recentemente do dereito <code>editinterface</code>. Se non comprende porqué está vendo este erro, vexa [[mw:MediaWiki_1.32/interface-admin]].",
        "rawhtml-notallowed": "As marcas &lt;html&gt; non poden usarse fóra das páxinas normais.",
        "gotointerwiki": "Deixando {{SITENAME}}",
        "gotointerwiki-invalid": "O título especificado non é válido.",
index 7efe8d2..a955d65 100644 (file)
        "headline_tip": "બીજા ક્રમનું મથાળું",
        "nowiki_sample": "ફોર્મેટ કર્યા વગરનું લખાણ અહીં ઉમેરો",
        "nowiki_tip": "વિકિ ફોર્મેટીંગને અવગણો",
+       "image_sample": "Example.jpg",
        "image_tip": "અંદર વણાયેલી (Embedded) ફાઇલ",
+       "media_sample": "Example.ogg",
        "media_tip": "ફાઇલની કડી",
        "sig_tip": "સમયછાપ સાથે તમારા હસ્તાક્ષર",
        "hr_tip": "આડી લીટી (શક્ય તેટલો ઓછો ઉપયોગ કરો)",
        "template-protected": "(સુરક્ષિત)",
        "template-semiprotected": "(અર્ધ-સુરક્ષિત)",
        "hiddencategories": "આ પાનું {{PLURAL:$1|૧ છુપી શ્રેણી|$1 છુપી શ્રેણીઓ}}નું સભ્ય છે:",
+       "edittools": "<!-- ફેરફાર અને ફોર્મ અપલોડ કરતી વખતે અહીં લખાણ દર્શાવવામાં આવશે. -->",
        "nocreatetext": "{{SITENAME}}માં નવું પાનુ બનાવવા ઉપર નિયંત્રણ આવી ગયું છે.\n<br />આપ પાછા જઇને હયાત પાનામાં ફેરફાર કરી શકો છો, નહિતર [[Special:UserLogin|પ્રવેશ કરો કે નવું ખાતું ખોલો]].",
        "nocreate-loggedin": "તમને નવાં પાનાં બનાવવાની પરવાનગી નથી.",
        "sectioneditnotsupported-title": "ખંડીય સંપાદન શક્ય નથી",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|છેલ્લી મુલાકાતથી}}",
        "enhancedrc-history": "ઇતિહાસ",
        "recentchanges": "તાજા ફેરફારો",
-       "recentchanges-legend": "હાલમાàª\82 àª¥àª¯à«\87લા àª«à«\87રફારà«\8bના àªµàª¿àª\95લà«\8dપ",
+       "recentchanges-legend": "તાàª\9cા àª«à«\87રફારà«\8bના àªµàª¿àª\95લà«\8dપà«\8b",
        "recentchanges-summary": "વિકિમાં તાજેતરમાં થયેલા ફેરફારો પર અહીંથી નજર રાખો.",
        "recentchanges-noresult": "આપેલા સમયગાળા દરમિયાન આ માપદંડો માટે કોઇ ફેરફારો મળ્યા નહી.",
        "recentchanges-feed-description": "આ ફીડ દ્વારા વિકિમાં થયેલા તાજા ફેરફારો પર ધ્યાન રાખો.",
        "recentchanges-label-plusminus": "પાનાનું કદ આપેલા અંકો જેટલાં બાઈટ્સ જેટલું બદલ્યુ છે.",
        "recentchanges-legend-heading": "<strong>કળ:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|નવા પાનાઓની યાદી]] પણ જુઓ)",
+       "recentchanges-legend-plusminus": "(<em>±૧૨૩</em>)",
        "recentchanges-submit": "બતાવો",
        "rcfilters-legend-heading": "<strong>સંક્ષેપોની યાદી:</strong>",
        "rcfilters-other-review-tools": "અન્ય ચકાસણી સાધનો",
        "rcfilters-savedqueries-cancel-label": "રદ કરો",
        "rcfilters-show-new-changes": "તાજેતરના ફેરફારો દર્શાવો",
        "rcnotefrom": "નીચે <strong>$3, $4</strong> થી {{PLURAL:$5|ફેરફાર|ફેરફારો}} દર્શાવેલ છે (<strong>$1</strong> સુધી દર્શાવેલ છે).",
-       "rclistfrom": "$3 $2 બાદ થયેલા નવા ફેરફારો બતાવો",
+       "rclistfrom": "$2, $3 પછી થયેલા નવા ફેરફારો બતાવો",
        "rcshowhideminor": "નાના ફેરફારો $1",
        "rcshowhideminor-show": "બતાવો",
        "rcshowhideminor-hide": "છુપાવો",
        "filehist-filesize": "ફાઇલનું કદ",
        "filehist-comment": "ટિપ્પણી",
        "imagelinks": "ફાઇલનો વપરાશ",
-       "linkstoimage": "àª\86 àª«àª¾àª\87લ àª¸àª¾àª¥à«\87 {{PLURAL:$1|નà«\80àª\9aà«\87નà«\81àª\82 àªªàª¾àª¨à«\81àª\82 àª\9cà«\8bડાયà«\87લà«\81àª\82|$1 àª¨à«\80àª\9aà«\87નાàª\82 àªªàª¾àª¨àª¾àª\93 àª\9cà«\8bડાયà«\87લાàª\82}} àª\9bà«\87",
-       "linkstoimage-more": "$1 કરતાં વધુ {{PLURAL:$1|પાનું|પાનાં}} આ ફાઇલ સાથે જોડાય છે.\nનીચે જણાવેલ યાદી ફક્ત આ ફાઇલ સાથે જોડાયેલ {{PLURAL:$1|પ્રથમ પાનાની કડી|પ્રથમ $1 પાનાંની કડીઓ}} બતાવે છે.\nઅહીં [[Special:WhatLinksHere/$2|પુરી યાદી]]  મળશે.",
-       "nolinkstoimage": "આ ફાઇલ સાથે કોઇ પાનાં જોડાયેલાં નથી.",
+       "linkstoimage": "àª\86 àª«àª¾àª\87લ àª®àª¾àª\82 {{PLURAL:$1|નà«\80àª\9aà«\87નà«\81àª\82 àªªàª¾àª¨à«\81àª\82 àªµàªªàª°àª¾àª¯à«\87લà«\81àª\82|$1 àª¨à«\80àª\9aà«\87નાàª\82 àªªàª¾àª¨àª¾àª\93 àªµàªªàª°àª¾àª¯à«\87લાàª\82}} àª\9bà«\87:",
+       "linkstoimage-more": "$1 કરતાં વધુ {{PLURAL:$1|પાનું|પાનાં}} આ ફાઇલને વાપરે છે.\nનીચે જણાવેલ યાદી ફક્ત આ ફાઇલ સાથે જોડાયેલ {{PLURAL:$1|પ્રથમ પાનાની કડી|પ્રથમ $1 પાનાંની કડીઓ}} બતાવે છે.\nઅહીં [[Special:WhatLinksHere/$2|પુરી યાદી]] મળશે.",
+       "nolinkstoimage": "આ ફાઇલને કોઇ પાનાં વાપરતા નથી.",
        "morelinkstoimage": "આ ફાઇલ સાથે જોડાયેલ [[Special:WhatLinksHere/$1|વધુ કડીઓ]] જુઓ.",
        "linkstoimage-redirect": "$1 (ફાઈલ) $2  (પર નિર્દેશિત)",
        "duplicatesoffile": "નીચે જણાવેલ {{PLURAL:$1|ફાઇલ|$1 ફાઇલો}} આ ફાઇલની નકલ છે. ([[Special:FileDuplicateSearch/$2|વધુ વિગતો]])",
        "uploadnewversion-linktext": "આ ફાઇલની નવી આવૃત્તિ ચઢાવો",
        "shared-repo-from": "$1 થી",
        "shared-repo": "સાંઝો ભંડાર",
+       "shared-repo-name-wikimediacommons": "વિકિમિડીયા કોમન્સ",
        "upload-disallowed-here": "તમે આ ફાઇલ ઉપર લખી શકતા નથી.",
        "filerevert": "$1 હતું તેવું કરો",
        "filerevert-legend": "ફાઇલ હતી તેવી કરો",
index 07c5c5b..cf1ce58 100644 (file)
@@ -5,10 +5,11 @@
                        "아라",
                        "DonCamillo",
                        "Koavf",
-                       "Ammarpad"
+                       "Ammarpad",
+                       "Mojaam"
                ]
        },
-       "tog-underline": "Link underlining:",
+       "tog-underline": "Zana layin link",
        "tog-hideminor": "A ɓoye ƙananan gyare-gyare na baya-bayan nan",
        "tog-hidepatrolled": "A ɓoye gyare-gyaren kan ido a cikin gyare-gyare bayan-bayan nan",
        "tog-newpageshidepatrolled": "A ɓoye shafuna kan ido a cikin sabbin shafuna",
index 4087c8a..c379bd3 100644 (file)
        "ns-specialprotected": "לא ניתן לערוך דפים מיוחדים.",
        "titleprotected": "[[User:$1|$1]] {{GENDER:$1|הפעיל|הפעילה}} על הדף הזה הגנה מפני יצירה.\nהסיבה שניתנה להגנה היא: <em>$2</em>.",
        "filereadonlyerror": "לא ניתן לשנות את הקובץ \"$1\" כיוון שמאגר הקבצים \"$2\" במצב קריאה בלבד.\n\nמנהל המערכת שנעל את המאגר סיפק את ההסבר הבא: \"$3\".",
+       "invalidtitle": "כותרת בלתי תקינה",
        "invalidtitle-knownnamespace": "כותרת בלתי־תקינה עם מרחב השם \"$2\" ועם שם הדף \"$3\"",
        "invalidtitle-unknownnamespace": "כותרת בלתי־תקינה עם מרחב שם בלתי־ידוע מספר $1 ועם שם הדף \"$2\"",
        "exception-nologin": "לא בחשבון",
        "filehist-comment": "הערה",
        "imagelinks": "שימוש בקובץ",
        "linkstoimage": "{{PLURAL:$1|הדף הבא משתמש|הדפים הבאים משתמשים}} בקובץ זה:",
-       "linkstoimage-more": "×\99×\95תר {{PLURAL:$1|×\9e×\93×£ ×\90×\97×\93 ×\9eקשר|×\9eÖ¾$1 ×\93פ×\99×\9d ×\9eקשר×\99×\9d}} ×\9cק×\95×\91×¥ ×\96×\94.\n×\94רש×\99×\9e×\94 ×\94×\91×\90×\94 ×\9eר×\90×\94 ×¨×§ ×\90ת {{PLURAL:$1|×\94×\93×£ ×\94ר×\90ש×\95×\9f ×©×\9eקשר|$1 ×\94×\93פ×\99×\9d ×\94ר×\90ש×\95× ×\99×\9d ×©×\9eקשר×\99×\9d}} ×\9cק×\95×\91×¥ ×\96×\94.\nניתן לצפות ב[[Special:WhatLinksHere/$2|רשימה המלאה]].",
+       "linkstoimage-more": "×\99×\95תר {{PLURAL:$1|×\9e×\93×£ ×\90×\97×\93 ×\9eשת×\9eש|×\9eÖ¾$1 ×\93פ×\99×\9d ×\9eשת×\9eש×\99×\9d}} ×\91ק×\95×\91×¥ ×\96×\94.\n×\94רש×\99×\9e×\94 ×\94×\91×\90×\94 ×\9eר×\90×\94 ×¨×§ ×\90ת {{PLURAL:$1|×\94×\93×£ ×\94ר×\90ש×\95×\9f ×©×\9eשת×\9eש|$1 ×\94×\93פ×\99×\9d ×\94ר×\90ש×\95× ×\99×\9d ×©×\9eשת×\9eש×\99×\9d}} ×\91ק×\95×\91×¥.\nניתן לצפות ב[[Special:WhatLinksHere/$2|רשימה המלאה]].",
        "nolinkstoimage": "אין דפים המשתמשים בקובץ זה.",
        "morelinkstoimage": "ישנם [[Special:WhatLinksHere/$1|דפים נוספים]] שמשתמשים בקובץ זה.",
        "linkstoimage-redirect": "$1 (הפניה של קובץ) $2",
index 5d11142..7da330f 100644 (file)
        "prefsnologintext2": "अपनी वरीयताओं को बदलने के लिए कृपया लॉग इन करें।",
        "prefs-skin": "त्वचा",
        "skin-preview": "झलक",
-       "datedefault": "à¤\96ा़स पसंद नहीं",
+       "datedefault": "à¤\96़ास पसंद नहीं",
        "prefs-labs": "लैब विशेषताएँ",
        "prefs-user-pages": "सदस्य पृष्ठ",
        "prefs-personal": "सदस्य व्यक्तिरेखा",
index 817bb96..4c31ab0 100644 (file)
        "listfiles_date": "Datum",
        "listfiles_name": "Naziv slike",
        "listfiles_user": "Suradnik",
-       "listfiles_size": "Veličina (u bajtovima)",
+       "listfiles_size": "Veličina",
        "listfiles_description": "Opis",
        "listfiles_count": "Inačice",
        "listfiles-show-all": "Uključujući starije inačice datoteka",
index 5769b9f..6c537a7 100644 (file)
@@ -10,7 +10,8 @@
                        "Tisave",
                        "Bfpage",
                        "Macofe",
-                       "Lucas"
+                       "Lucas",
+                       "LeGuyanaisPure"
                ]
        },
        "tog-underline": "Souliyen lyen yo :",
index ed27e30..d252c7d 100644 (file)
@@ -50,7 +50,8 @@
                        "Urbalazs",
                        "Bencemac",
                        "Rodrigo",
-                       "Tothasze"
+                       "Tothasze",
+                       "David92003"
                ]
        },
        "tog-underline": "Hivatkozások aláhúzása:",
        "ns-specialprotected": "A speciális lapok nem szerkeszthetők.",
        "titleprotected": "Ilyen címmel nem lehet szócikket készíteni, [[User:$1|$1]] letiltotta.\nAz indoklás: <em>$2</em>.",
        "filereadonlyerror": "A(z) „$1” fájl nem módosítható, mert a(z) „$2” fájltároló csak olvasható módban üzemel.\n\nA lezárást végrehajtó rendszeradminisztrátor az alábbi indoklást adta meg: „$3”.",
+       "invalidtitle": "Érvénytelen cím",
        "invalidtitle-knownnamespace": "Érvénytelen cím „$2” névtérrel és „$3” szöveggel",
        "invalidtitle-unknownnamespace": "Érvénytelen cím az ismeretlen $1 névtérszámmal és „$2” szöveggel",
        "exception-nologin": "Nem vagy bejelentkezve.",
        "group-autoconfirmed": "automatikusan megerősített szerkesztők",
        "group-bot": "botok",
        "group-sysop": "adminisztrátorok",
+       "group-interface-admin": "felületadminisztrátorok",
        "group-bureaucrat": "bürokraták",
        "group-suppress": "adatvédelmi biztosok",
        "group-all": "(mind)",
        "group-autoconfirmed-member": "{{GENDER:$1|automatikusan megerősített felhasználó}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|adminisztrátor}}",
+       "group-interface-admin-member": "{{GENDER:$1|felületadminisztrátor}}",
        "group-bureaucrat-member": "{{GENDER:$1|bürokrata}}",
        "group-suppress-member": "{{GENDER:$1|adatvédelmi biztos}}",
        "grouppage-user": "{{ns:project}}:Felhasználók",
        "grouppage-autoconfirmed": "{{ns:project}}:Munkatársak#Automatikusan megerősített szerkesztők",
        "grouppage-bot": "{{ns:project}}:Botok",
        "grouppage-sysop": "{{ns:project}}:Adminisztrátorok",
+       "grouppage-interface-admin": "{{ns:project}}:Felületadminisztrátorok",
        "grouppage-bureaucrat": "{{ns:project}}:Bürokraták",
        "grouppage-suppress": "{{ns:project}}:Adatvédelmi biztosok",
        "right-read": "lapok olvasása",
-       "right-edit": "lapok szerkesztése",
+       "right-edit": "Lapok szerkesztése",
        "right-createpage": "lapok készítése (nem vitalapok)",
        "right-createtalk": "vitalapok készítése",
        "right-createaccount": "új felhasználói fiók készítése",
        "speciallogtitlelabel": "Cél (cím vagy felhasználóhoz {{ns:user}}:felhasználói név):",
        "log": "Rendszernaplók",
        "logeventslist-submit": "Mutat",
-       "logeventslist-more-filters": "További szűrők:",
+       "logeventslist-more-filters": "Egyéb naplók megjelenítése:",
        "logeventslist-patrol-log": "Ellenőrzési napló (patrol)",
        "logeventslist-tag-log": "Címkenapló",
        "all-logs-page": "Minden nyilvános napló",
        "uctop": "(aktuális)",
        "month": "E hónap végéig:",
        "year": "Eddig az évig:",
+       "date": "Eddig a dátumig:",
        "sp-contributions-newbies": "Csak a nemrég regisztrált szerkesztők közreműködéseinek mutatása",
        "sp-contributions-newbies-sub": "Új szerkesztők lapjai",
        "sp-contributions-newbies-title": "Új szerkesztők közreműködései",
index 48828ae..35a9280 100644 (file)
        "customcssprotected": "Tu non ha le permission de modificar iste pagina de CSS perque illo contine le configuration personal de un altere usator.",
        "customjsonprotected": "Tu non ha le permission de modificar iste pagina JSON perque illo contine le configuration personal de un altere usator.",
        "customjsprotected": "Tu non ha le permission de modificar iste pagina de JavaScript perque illo contine le configuration personal de un altere usator.",
+       "sitecssprotected": "Tu non ha le permission de modificar iste pagina CSS perque isto pote affectar tote le visitantes",
+       "sitejsonprotected": "Tu non ha le permission de modificar iste pagina JSON perque isto pote affectar tote le visitantes",
+       "sitejsprotected": "Tu non ha le permission de modificar iste pagina JavaScript perque isto pote affectar tote le visitantes",
        "mycustomcssprotected": "Tu non ha le permission de modificar iste pagina de CSS.",
        "mycustomjsonprotected": "Tu non ha le permission de modificar iste pagina JSON.",
        "mycustomjsprotected": "Tu non ha le permission de modificar iste pagina de JavaScript.",
        "ns-specialprotected": "Le paginas special non es modificabile.",
        "titleprotected": "Iste titulo ha essite protegite contra creation per [[User:$1|$1]].\nLe motivo specificate es <em>$2</em>.",
        "filereadonlyerror": "Impossibile modificar le file \"$1\" perque le repositorio de files \"$2\" es in modo de lectura sol.\n\nLe administrator de systema qui lo blocava offereva iste explication: \"$3\".",
+       "invalidtitle": "Titulo invalide",
        "invalidtitle-knownnamespace": "Titulo invalide con spatio de nomines \"$2\" e texto \"$3\"",
        "invalidtitle-unknownnamespace": "Titulo invalide con spatio de nomines incognite $1 e texto \"$2\"",
        "exception-nologin": "Non identificate",
        "diff-paragraph-moved-toold": "Le paragrapho ha essite displaciate. Clicca pro saltar al ancian position.",
        "difference-missing-revision": "{{PLURAL:$2|Un version|$2 versiones}} de iste differentia ($1) non ha essite trovate.\n\nIsto es generalmente causate per sequer un ligamine de diff obsolete a un pagina que ha essite delite.\nDetalios se trova in le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de deletiones].",
        "searchresults": "Resultatos del recerca",
+       "search-filter-title-prefix": "Cercar solmente in paginas de que le titulo comencia per \"$1\"",
+       "search-filter-title-prefix-reset": "Cercar in tote le paginas",
        "searchresults-title": "Resultatos del recerca de \"$1\"",
        "titlematches": "Correspondentias in le titulos de paginas",
        "textmatches": "Resultatos in le texto de paginas",
        "group-autoconfirmed": "Usatores autoconfirmate",
        "group-bot": "Bots",
        "group-sysop": "Administratores",
+       "group-interface-admin": "Administratores del interfacie",
        "group-bureaucrat": "Bureaucrates",
        "group-suppress": "Suppressores",
        "group-all": "(totes)",
        "group-autoconfirmed-member": "{{GENDER:$1|usator|usatrice|usator}} autoconfirmate",
        "group-bot-member": "{{GENDER:$1|robot}}",
        "group-sysop-member": "{{GENDER:$1|administrator|administratrice|administrator}}",
+       "group-interface-admin-member": "{{GENDER:$1|administrator|administratrice}} del interfacie",
        "group-bureaucrat-member": "{{GENDER:$1|bureaucrate}}",
        "group-suppress-member": "{{GENDER:$1|suppressor}}",
        "grouppage-user": "{{ns:project}}:Usatores",
        "grouppage-autoconfirmed": "{{ns:project}}:Usatores autoconfirmate",
        "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Administratores",
+       "grouppage-interface-admin": "{{ns:project}}:Administratores del interfacie",
        "grouppage-bureaucrat": "{{ns:project}}:Bureaucrates",
        "grouppage-suppress": "{{ns:project}}:Suppressores",
        "right-read": "Leger paginas",
        "right-editusercss": "Modificar le files CSS de altere usatores",
        "right-edituserjson": "Modificar le files JSON de altere usatores",
        "right-edituserjs": "Modificar le files JS de altere usatores",
+       "right-editsitecss": "Modificar le CSS global del sito",
+       "right-editsitejson": "Modificar le JSON global del sito",
+       "right-editsitejs": "Modificar le JavaScript global del sito",
        "right-editmyusercss": "Modificar le proprie files CSS de usator",
        "right-editmyuserjson": "Modificar le files JSON del proprie usator",
        "right-editmyuserjs": "Modificar le files JavaScript del proprie usator",
        "grant-createaccount": "Crear contos",
        "grant-createeditmovepage": "Crear, modificar e renominar paginas",
        "grant-delete": "Deler paginas, versiones e entratas de registro",
-       "grant-editinterface": "Modificar le spatio de nomines MediaWiki e le CSS/JSON/JavaScript de usatores",
+       "grant-editinterface": "Modificar le spatio de nomines MediaWiki e le JSON del sito e del usatores",
        "grant-editmycssjs": "Modificar le CSS/JSON/JavaScript del proprie usator",
        "grant-editmyoptions": "Modificar tu preferentias de usator",
        "grant-editmywatchlist": "Modificar tu observatorio",
+       "grant-editsiteconfig": "Modificar le CSS/JS del sito e del usatores",
        "grant-editpage": "Modificar paginas existente",
        "grant-editprotected": "Modificar paginas protegite",
        "grant-highvolume": "Modification in massa",
        "uploadstash-zero-length": "Le file ha un grandor de zero.",
        "invalid-chunk-offset": "Position de segmento invalide",
        "img-auth-accessdenied": "Accesso refusate",
-       "img-auth-nopathinfo": "PATH_INFO manca.\nLe servitor non ha essite configurate pro passar iste information.\nIllo pote esser basate super CGI e non pote supportar img_auth.\nVide https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+       "img-auth-nopathinfo": "Le information sur le percurso manca.\nLe servitor debe esser configurate pro passar le variabiles REQUEST_URI e/o PATH_INFO.\nSi illo lo es, essaya activar $wgUsePathInfo.\nVide https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "Le cammino requestate non es in le directorio de incargamentos configurate.",
        "img-auth-badtitle": "Impossibile construer un titulo valide ex \"$1\".",
        "img-auth-nologinnWL": "Tu non ha aperite un session e \"$1\" non es in le lista blanc.",
        "http-timed-out": "Le requesta HTTP ha expirate.",
        "http-curl-error": "Error al obtener datos del URL: $1",
        "http-bad-status": "Un problema occurreva durante le requesta HTTP: $1 $2",
+       "http-internal-error": "Error interne de HTTP.",
        "upload-curl-error6": "Non poteva acceder al URL",
        "upload-curl-error6-text": "Le adresse URL fornite es inaccessibile.\nPer favor reverifica que le adresse URL sia correcte e que le sito sia in operation.",
        "upload-curl-error28": "Le incargamento se prolongava troppo",
        "speciallogtitlelabel": "Objectivo (titulo o {{ns:user}}:nomine de usator):",
        "log": "Registros",
        "logeventslist-submit": "Monstrar",
-       "logeventslist-more-filters": "Altere filtros:",
+       "logeventslist-more-filters": "Monstrar altere registros:",
        "logeventslist-patrol-log": "Registro de patrulia",
        "logeventslist-tag-log": "Registro de etiquettas",
        "all-logs-page": "Tote le registros public",
        "cachedspecial-refresh-now": "Vider le plus recente.",
        "categories": "Categorias",
        "categories-submit": "Monstrar",
-       "categoriespagetext": "Le sequente {{PLURAL:$1|categoria|categorias}} contine paginas o multimedia.\nLe [[Special:UnusedCategories|categorias non usate]] non se monstra hic.\nVide etiam le [[Special:WantedCategories|categorias desirate]].",
+       "categoriespagetext": "Le sequente {{PLURAL:$1|categoria|categorias}} existe sur iste wiki, e pote esser o non esser usate.\nVide etiam le [[Special:WantedCategories|categorias desirate]].",
        "categoriesfrom": "Monstrar categorias a partir de:",
        "deletedcontributions": "Contributiones delite de usatores",
        "deletedcontributions-title": "Contributiones delite de usatores",
        "edit-error-long": "Errores:\n\n$1",
        "revid": "version $1",
        "pageid": "ID de pagina $1",
+       "interfaceadmin-info": "$1\n\nLe permissiones pro modificar le files CSS/JS/JSON global del sito ha recentemente essite separate ab le derecto <code>editinterface</code>. Si tu non comprende proque tu incontra iste error, vide [[mw:MediaWiki_1.32/interface-admin]].",
        "rawhtml-notallowed": "Etiquettas &lt;html&gt; non pote esser usate foras de paginas normal.",
        "gotointerwiki": "Quitar {{SITENAME}}",
        "gotointerwiki-invalid": "Le titulo specificate non es valide.",
        "passwordpolicies-policy-passwordcannotmatchusername": "Le contrasigno non pote esser identic al nomine de usator",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Le contrasigno non pote corresponder a contrasignos in le lista nigre",
        "passwordpolicies-policy-maximalpasswordlength": "Le contrasigno debe continer minus de $1 {{PLURAL:$1|character|characteres}}",
-       "passwordpolicies-policy-passwordcannotbepopular": "Le contrasigno non pote esser {{PLURAL:$1|le contrasigno le plus popular|in le lista de $1 contrasignos popular}}"
+       "passwordpolicies-policy-passwordcannotbepopular": "Le contrasigno non pote esser {{PLURAL:$1|le contrasigno le plus popular|in le lista de $1 contrasignos popular}}",
+       "easydeflate-invaliddeflate": "Le contento fornite non es correctemente comprimite"
 }
index 9b69a62..14ee815 100644 (file)
        "ns-specialprotected": "On ne povas redaktar speciala pagini.",
        "titleprotected": "Ita titulo es protektita de kreado da [[User:$1|$1]].\nLa motivo es <em>$2</em>.",
        "filereadonlyerror": "La dosiero \"$1\" ne es modifikebla nam la depozeyo di dosieri \"$2\" esas nur lektebla.\n\nLa sistem-administrero qua klozis ol ofris ita klarigo: \"$3\".",
+       "invalidtitle": "Nevalida titulo",
        "invalidtitle-knownnamespace": "Ne-valida titulo kun nomaro \"$2\" e texto \"$3\"",
        "invalidtitle-unknownnamespace": "Nevalida titulo kun nekonocata nombro di limitilo 'namespace' $1 e texto \"$2\"",
        "exception-nologin": "Vu ne eniris",
        "wrongpasswordempty": "Vu ne skribis pasovorto. Probez nove.",
        "passwordtooshort": "Pasovorti mustas kontenar adminime {{PLURAL:$1|1 signo|$1 signi}}.",
        "passwordtoolong": "Pasovorti ne mustas esar plu longa kam {{PLURAL:$1|1 litero|$1 literi}}.",
-       "passwordtoopopular": "Voluntez selektar plu unika pasovorto.",
+       "passwordtoopopular": "Pasovorti tre facila ne povas uzesar. Voluntez selektar pasovorto nefacila por divinar.",
        "password-name-match": "Pasovorto mustas diferar de vua uzeronomo.",
        "password-login-forbidden": "La uzo di ita uzeronomo e pasovorto es interdiktita.",
        "mailmypassword": "Sendez nova pasovorto per e-posto",
        "passwordremindertitle": "Nova provizora pasovorto por {{SITENAME}}",
-       "passwordremindertext": "Ulu (probable tu, del IP-adreso $1) solicitis nova pasovorto de {{SITENAME}} ($4). Provizora pasovorto por l'uzero \"$2\" kreesis e sendesis a \"$3\". Se to esis tua volunto, tu mustas facar 'log in' e selektar nova pasovorto nun.\nTua tempala pasovorto expiros en {{PLURAL:$5|un dio|$5 dii}}.\n\nSe altra persono facis la demando, o se tu rimemoris tua anciena pasovorto e ne bezonas modifikar ol, tu povas ignorar ica mesajo e durar l'uzo di tua anciena pasovorto.",
+       "passwordremindertext": "Ulu (probable tu, del IP-adreso $1) solicitis nova pasovorto de {{SITENAME}} ($4). Provizora pasovorto por l'uzero \"$2\" kreesis e sendesis a \"$3\". Se to esis tua volunto, tu mustas facar 'log in' e selektar nova pasovorto nun.\nTua tempala pasovorto expiros en {{PLURAL:$5|un dio|$5 dii}}.\n\nSe ul altra persono facis la demando, o se tu rimemoris tua anciena pasovorto e ne bezonas modifikor ol, ignorez ica mesajo e durez uzar tua anciena pasovorto.",
        "noemail": "Ne esas e-adreso konservita por la uzero \"$1\".",
        "noemailcreate": "Tu mustas informar valida e-posto",
        "passwordsent": "Nova pasovorto sendesis a la e-adreso registragita por \"$1\".\nVoluntez enirar altrafoye pos recevar ol.",
        "botpasswords-existing": "\"bot\"-pasovorti existanta",
        "botpasswords-createnew": "Krear nova \"bot\"-pasovorto",
        "botpasswords-editexisting": "Modifikar \"bot\"-pasovorto existanta",
+       "botpasswords-label-needsreset": "(la pasovorto bezonas riestablisesar)",
        "botpasswords-label-appid": "Nomo dil \"bot\"",
        "botpasswords-label-create": "Krear",
        "botpasswords-label-update": "Aktualigar",
        "botpasswords-label-grants": "Uzebla grantaji:",
        "botpasswords-label-grants-column": "Permisita",
        "botpasswords-bad-appid": "La nomo \"$1\" por la bot-programo esas nevalida.",
+       "botpasswords-insert-failed": "L'adjunto di nova nomo \"$1\" por la 'bot' faliis. Ka ol ja adjuntesis?",
        "botpasswords-created-title": "Kreita pasovorto por la 'bot'",
        "botpasswords-created-body": "La pasovorto por la 'bot' nomizita \"$1\" del {{GENDER:$2|uzero}} \"$2\" kreesis.",
        "botpasswords-updated-title": "La pasovorto dil 'bot' aktualigesis",
        "resetpass-submit-loggedin": "Chanjar pasovorto",
        "resetpass-submit-cancel": "Anular",
        "resetpass-wrong-oldpass": "Nevalida provizora od aktuala pasovorto.\nForsan vu ja chanjis vua pasovorto o demandis nova provizora pasovorto.",
-       "resetpass-recycled": "Voluntez chanjar vua pasovorto ad ulo diferanta de vua aktuala pasovorto.",
+       "resetpass-recycled": "Voluntez modifikar vua pasovorto per altra diferanta de vua nuna pasovorto.",
        "resetpass-temp-emailed": "Vu eniris uzante provizora pasovorto.\nPor parkompletigar enirado, vu mustas krear nova pasovorto hike:",
        "resetpass-temp-password": "Provizora pasovorto:",
        "resetpass-abort-generic": "La modifiko dil pasovorto interuptesis per ula 'extension'.",
        "resetpass-expired": "Vua pasovorto perdis la valideso. Voluntez krear nova pasovorto por facar 'log in'.",
+       "resetpass-expired-soft": "Vua pasovorto perdis la valideso e mustas modifikesar. Voluntez selektar nova pasovorto, o kliktez \"{{int:authprovider-resetpass-skip-label}}\" por modifikar ol pose.",
+       "resetpass-validity-soft": "Vua pasovorto esas nevalida: $1\n\nVoluntez selektar nova pasovorto, o kliktez \"{{int:authprovider-resetpass-skip-label}}\" por modifikar ol pose.",
        "passwordreset": "Sendez nova pasovorto per e-posto",
        "passwordreset-text-one": "Garnisez ica formulario por recevar provizora pasovorto per vua e-posto.",
+       "passwordreset-text-many": "{{PLURAL:$1|Skribez en un ek la texto-buxi por recevar tempala pasovorto per e-posto.}}",
        "passwordreset-username": "Uzantonomo:",
        "passwordreset-domain": "Interreto-domeno:",
        "passwordreset-email": "E-postal adreso:",
        "savechanges": "Konservez la chanji",
        "publishpage": "Publikigar pagino",
        "publishchanges": "Publikigar chanji",
+       "savearticle-start": "Registragar pagino",
+       "savechanges-start": "Konservez modifikuri...",
+       "publishpage-start": "Publikigar pagino...",
+       "publishchanges-start": "Publikigar chanji...",
        "preview": "Previdar",
        "showpreview": "Previdar",
        "showdiff": "Montrez chanji",
        "blankarticle": "<strong>Averto:</strong> La pagino quon vu kreis es vakua.\nSe vu ri-selektos \"$1\", la pagino kreesos sen irga kontenajo.",
        "anoneditwarning": "<strong>Averto:</strong> Vu ne eniris.\nVua IP-adreso esos videbla publike se vu redaktos. Se vu <strong>[$1 enirus]</strong> od <strong>[$2 kreus konto]</strong>, vua redakti atribuesos a vua uzeronomo, kune kun altra bonaji.",
        "anonpreviewwarning": "<em>Vu ne eniris. Konservar chanji registragos vua IP-adreso en la redakto-historio di ta pagino.</em>",
+       "missingsummary": "<strong>Atencez:</strong> Vu ne furnisis titulo por ica komento.\nSe vu itere kliktos \"$1\", vua editado salveskos sen ula titulo.",
+       "selfredirect": "<strong>Atencez:</strong> Vu ridirektis ica pagino ad ol ipsa.\nPosible vu informis nekorekta skopo por la ridirekturo, o vu skribabas che nekorekta pagino.\nSe vu iter kliktos \"$1\", la ridirekturo kreesos, irgamaniere.",
        "missingcommenttext": "Voluntez skribar komento.",
        "missingcommentheader": "<strong>Atencez:</strong> Vu ne furnisis titulo por ica komento.\nSe vu itere kliktos \"$1\", vua editado salveskos sen ula titulo.",
        "summary-preview": "Previdado di la rezumo:",
        "previewerrortext": "Eventis eroro kande on probis krear previdado pri vua modifikuri.",
        "blockedtitle": "La uzero esas blokusita",
        "blockedtext": "<strong>Vua uzantonomo od IP-adreso blokusesis.</strong>\n\n$1 blokusis vu.\nLa motivo esis <em>$2</em>.\n\n* Komenco di la blokuso: $8\n* Fino di la blokuso: $6\n* Motivo dil blokuso: $7\n\nVu povas kontaktar $1 od altra [[{{MediaWiki:Grouppage-sysop}}|administrero]] por diskutar la blokuso.\nVu ne povas uzar \"email this user\" por sendar e-posto ecepte se valida email indikesis en tua [[Special:Preferences|preferaji dil uzanto]], e se vu ne blokusesis por uzar ol.\nVua nuna IP-adreso esas $3, e la ID dil blokuso esas #$5.\nVoluntez inkluzor omna detali adsupre en omna demandi quin vu facos.",
-       "autoblockedtext": "<strong>Vua uzantonomo od IP-adreso blokusesis.</strong>\n\n$1 blokusis vu.\nLa motivo esis <em>$2</em>.\n\n* Komenco di la blokuso: $8\n* Fino di la blokuso: $6\n* Motivo dil blokuso: $7\n\nVu povas kontaktar $1 od altra [[{{MediaWiki:Grouppage-sysop}}|administrero]] por diskutar la blokuso.\nVu ne povas uzar \"email this user\" por sendar e-posto ecepte se valida email indikesis en tua [[Special:Preferences|preferaji dil uzanto]], e se vu ne blokusesis por uzar ol.\nVua nuna IP-adreso esas $3, e la ID dil blokuso esas #$5.\nVoluntez inkluzor omna detali adsupre en omna demandi quin vu facos.",
+       "autoblockedtext": "<strong>Vua uzantonomo od IP-adreso blokusesis.</strong>\n\n$1 blokusis vu.\nLa motivo esis <em>$2</em>.\n\n* Komenco di la blokuso: $8\n* Fino di la blokuso: $6\n* Persono blokusata: $7\n\nVu povas kontaktar $1 od altra [[{{MediaWiki:Grouppage-sysop}}|administrero]] por diskutar pri la blokuso.\nVu ne povas uzar \"email this user\" por sendar e-posto, ecepte se valida email indikesis en tua [[Special:Preferences|preferaji dil uzero]], e se vu ne blokusesis por uzar ol.\nVua nuna IP-adreso esas $3, e la ID dil blokuso esas #$5.\nVoluntez inkluzor omna detali adsupre en omna demandi quin vu facos.",
+       "systemblockedtext": "Vua uzero-nomo od IP-adreso blokusabis automatale da MediaWiki.\nLa motivo esas:\n\n:<em>$2</em>\n\n* Komenco di la blokuso: $8\n* Fino di la blokuso: $6\n* Persono blokuzata: $7\n\nVua nuna IP-adreso esas $3.\nVoluntez inkluzar omna detalii furnisita adsupre, en irga demandi quin vu facos.",
        "blockednoreason": "nula motivo donesis",
        "whitelistedittext": "Vu mustas $1 por redaktar pagini.",
        "nosuchsectiontitle": "On ne povis trovar la seciono",
+       "nosuchsectiontext": "Vu probis redaktar seciono qua na existas.\nOl posible movesis od efacesis dum ke vu vidabis la pagino.",
        "loginreqtitle": "Eniro esas postulata",
        "loginreqlink": "enirar",
        "loginreqpagetext": "Vu mustas $1 por vidar altra pagini.",
        "accmailtitle": "Pasovorto sendita.",
-       "accmailtext": "Hazarde genitita pasovorto por [[User talk:$1|$1]] sendesis ad $2.\n\nLa pasovorto por ica nova konto povas chanjesar che la ''[[Special:ChangePassword|chanjar pasovorto]]'' pagino pos on eniras.",
+       "accmailtext": "Hazarde kreita pasovorto por [[User talk:$1|$1]] sendesis ad $2. Ol povas chanjesar che la pagino <em>[[Special:ChangePassword|chanjar pasovorto]]</em> pos vua 'login'.",
        "newarticle": "(nova)",
        "newarticletext": "Vu sequis ligilo a pagino qua ne existas ankore.\nPor krear ica pagino, voluntez startar skribar en la infra buxo.\n(regardez la [$1 helpo] por plusa informo).\nSe vu esas hike erore, kliktez sur la butono por retrovenar en vua navigilo.",
        "anontalkpagetext": "----\n<em>Yen la diskuto-pagino por anonima uzero, qua ankore ne kreabas konto, o se kreis ne uzas ol.</em>\nDo, ni mustas uzar la IP-adreso por identifikar ilu/elu.\nTala IP-adreso povas uzesar da multa uzeri.\nSe vu esas anonima uzero e kreas ke nerelevanta komenti sendesis a vu, voluntez [[Special:CreateAccount|krear konto]], o [[Special:UserLogin|facar 'log in']] por preventar futura konfundo kun altra anonima uzeri.",
        "edit-conflict": "Konflikto di editi.",
        "postedit-confirmation-created": "La pagino kreesis.",
        "postedit-confirmation-saved": "Vua redakto konservesis",
+       "postedit-confirmation-published": "Vua redakturo publikigesis.",
+       "edit-already-exists": "Ne povis krear nova pagino.\nOl ja existas.",
+       "defaultmessagetext": "Ordinara mesajo-texto",
+       "invalid-content-data": "Nevalida kontenajo",
        "content-model-wikitext": "texto Wiki",
        "content-model-javascript": "JavaScript",
        "content-json-empty-object": "vakua objekto",
        "parser-unstrip-loop-warning": "Renkontresis nefinita procedo ('loop') en la funciono \"Unstrip\"",
        "undo-success": "La redakto ne povas desfacesar.\nVerifikez adinfre per komparo inter la du versioni se to esas fakte quon vu deziras facar; pose 'salvez' la modifiki por kompletigar la redakto.",
        "undo-failure": "Ne povis nuligar la redakto pro konflikti kun intermeza redakti.",
+       "undo-summary-username-hidden": "Desfacar revizo $1 facita da celita uzero",
        "cantcreateaccount-text": "La kreo di konto de ica adreso IP (<strong>$1</strong>) blokusesis da [[User:$3|$3]].\n\nLa motivo, segun $3, esas <em>$2</em>",
        "viewpagelogs": "Videz registrari por ca pagino",
        "nohistory": "Ne esas redakto-historio por ica pagino.",
        "page_last": "finala",
        "histlegend": "Selektado por diferi: markizez la versioni por komparar e presez 'Enter' o la butono adinfre.<br />\nSurskriburo: '''({{int:cur}})''' = diferi kun la nuna versiono,\n'''({{int:last}})''' = diferi kun l'antea versiono,\n'''{{int:minoreditletter}}''' = mikra redakturo.",
        "history-fieldset-title": "Serchar revizi",
-       "history-show-deleted": "Nur efacita",
+       "history-show-deleted": "Revizo nure efacita",
        "histfirst": "Maxim anciena",
        "histlast": "Maxim nova",
        "historysize": "({{PLURAL:$1|1 bicoko|$1 bicoki}})",
        "revdelete-hide-image": "Celar kontenajo dil arkivo",
        "revdelete-hide-comment": "Rezumo di redakto",
        "revdelete-hide-user": "uzeronomo di redaktanto/IP-adreso",
+       "revdelete-radio-same": "(ne modifikez)",
        "revdelete-radio-set": "Celita",
        "revdelete-radio-unset": "Videbla",
        "revdelete-log": "Motivo:",
        "deletedhist": "Efacita versionaro",
        "revdelete-otherreason": "Altra/suplementala motivo:",
        "revdelete-reasonotherlist": "Altra motivo",
+       "mergehistory-empty": "Nula revizuri povas mixesar.",
        "mergehistory-reason": "Motivo:",
        "mergelog": "Protokolo pri kunfuzo",
        "revertmerge": "Desmixar",
        "history-title": "Version-historio di \"$1\"",
        "difference-title": "Diferi inter la revizi di $1",
+       "difference-multipage": "(Difero inter pagini)",
        "lineno": "Lineo $1:",
        "compareselectedversions": "Komparar selektita versioni",
        "showhideselectedversions": "Modifikez la videbleso di la selektita versioni",
        "diff-multi-sameuser": "(ne montresas {{PLURAL:$1|1 meza revizo|$1 meza revizi}} facita da la sama uzero)",
        "diff-multi-otherusers": "(ne montresas {{PLURAL:$1|1 intermeza revizo|$1 intermeza revizi}} facita da {{PLURAL:$2|altra uzero|$2 altra uzeri}})",
        "searchresults": "Rezultaji dil sercho",
+       "search-filter-title-prefix-reset": "Traserchar pagini",
        "searchresults-title": "Sercho-rezultaji por \"$1\"",
        "titlematches": "Koincidi de titulo di artiklo",
        "textmatches": "Koincidi de texto di artiklo",
        "prevn": "antea {{PLURAL:$1|$1}}",
        "nextn": "sequanta {{PLURAL:$1|$1}}",
        "prev-page": "Antea pagino",
+       "next-page": "sequanta pagino",
        "prevn-title": "Antea $1 {{PLURAL:$1|rezultajo|rezultaji}}",
        "nextn-title": "Sequanta $1 {{PLURAL:$1|rezultajo|rezultaji}}",
        "shown-title": "Montrez $1 {{PLURAL:$1|rezulto|rezulti}} per pagino",
        "search-result-category-size": "{{PLURAL:$1|1 membro|$1 membri}} ({{PLURAL:$2|1 subkategorio|$2 subkategorii}}, {{PLURAL:$3|1 arkivo|$3 arkivi}})",
        "search-redirect": "(Ridirektita de $1)",
        "search-section": "(seciono $1)",
+       "search-category": "(kategorio $1)",
        "search-file-match": "(kongruanta kun la kontenajo)",
        "search-suggest": "Ka vu volis dicar: $1",
        "search-rewritten": "Yen la rezulti por \"$1\". Serchez vice por \"$2\".",
-       "search-interwiki-caption": "Altra projekti",
+       "search-interwiki-caption": "Rezulti de fratala projeti",
        "search-interwiki-default": "Rezultaji de $1:",
        "search-interwiki-more": "(plusa)",
+       "search-interwiki-more-results": "plusa rezultajo",
+       "search-relatedarticle": "Relatata",
+       "searchrelated": "relatata",
        "searchall": "omna",
        "showingresults": "Montrante infre {{PLURAL:$1|'''1''' rezulto|'''$1''' rezulti}}, qui komencas kun numero #'''$2'''.",
        "showingresultsinrange": "Infre montresas {{PLURAL:$1|<strong>1</strong> rezulto|<strong>$1</strong> rezulti}}, en l'intervalo #<strong>$2</strong> til #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Rezulto <strong>$1</strong> de <strong>$3</strong>|rezulti <strong>$1 – $2</strong> de <strong>$3</strong>}}",
        "search-nonefound": "Nula rezulto trovesis por vua serchado.",
+       "search-nonefound-thiswiki": "Nula rezulto trovesis por vua serchado.",
        "powersearch-legend": "Avancita sercho",
        "powersearch-ns": "Serchez en nomari:",
+       "powersearch-togglelabel": "Selektez:",
        "powersearch-toggleall": "Omna",
        "powersearch-togglenone": "Nula",
        "powersearch-remember": "Memorez la selektajo por futura serchi",
        "search-external": "Extera sercho",
        "searchdisabled": "La sercho en la kompleta texto desaktivigesis temporale pro superkargo dil servanto. Ni esperas riaktivigar ol pos facar ula proxima aktualigi. Dum ica tempo, vu povas serchar per Google.",
        "search-error": "Eventis eroro dum serchado: $1",
+       "search-warning": "Eventis eroro dum serchado: $1",
        "preferences": "Preferaji",
        "mypreferences": "Preferaji",
        "prefs-edits": "Nombro di redaktaji:",
        "prefs-skin": "Pelo",
        "skin-preview": "Pre-videz",
        "datedefault": "Sen prefero",
+       "prefs-user-pages": "Uzeropagini",
        "prefs-personal": "Personala informo",
        "prefs-rc": "Recenta chanji",
        "prefs-watchlist": "Surveyo-listo",
        "prefs-editwatchlist": "Modifikez surveyo-listo",
+       "prefs-editwatchlist-label": "Facez modifikuri en vua surveyo-listo:",
        "prefs-editwatchlist-edit": "Vidar e removar tituli de vua surveyo-listo",
        "prefs-editwatchlist-raw": "Modifikez vua surveyo-listo en formo di texto",
        "prefs-editwatchlist-clear": "Efacar vua surveyo-listo",
        "prefs-namespaces": "Nomari",
        "default": "Ordinara ('default')",
        "prefs-files": "Arkivi",
+       "prefs-custom-js": "Ordinara JavaScript",
        "prefs-emailconfirm-label": "Konfirmado dil e-posto (e-mail):",
        "youremail": "Vua e-adreso:",
        "username": "{{GENDER:$1|Uzeronomo}}:",
        "prefs-info": "Bazala informo",
        "prefs-i18n": "Internacioniigo",
        "prefs-signature": "Signaturo",
+       "prefs-dateformat": "Formato di la dato",
        "prefs-timeoffset": "Registro dil tempo",
+       "prefs-advancedediting": "Ordinara selekti",
+       "prefs-developertools": "Utensili por la kreero",
        "prefs-editor": "Redaktilo",
        "prefs-preview": "Previdar",
        "prefs-advancedrc": "Progresiva selektaji (advanced options)",
        "prefs-advancedrendering": "Progresiva selektaji (advanced options)",
        "prefs-advancedsearchoptions": "Progresiva selektaji (advanced options)",
        "prefs-advancedwatchlist": "Progresiva selektaji (advanced options)",
+       "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Diferi",
+       "prefs-help-prefershttps": "Ica preferajo efektigesos dum vua sequanta 'login'.",
+       "userrights": "Yuri dil uzero",
+       "userrights-lookup-user": "Selektez uzero",
        "userrights-user-editname": "Skribez uzantonomo:",
        "editusergroup": "Charjez grupi dil uzero",
        "userrights-groupsmember": "Membro di:",
        "grouppage-bureaucrat": "{{ns:project}}:Burokrati",
        "right-read": "Lektar pagini",
        "right-edit": "Redaktar pagini",
+       "right-createpage": "Krear pagini (qui ne esas diskuto-pagini)",
+       "right-createtalk": "Krear diskuto-pagini",
+       "right-createaccount": "Krear nova uzero-konti",
        "right-move": "Movar pagini",
        "right-movefile": "Movar arkivi",
        "right-upload": "Adkargar arkivi",
        "recentchangeslinked-feed": "Relatanta chanji",
        "recentchangeslinked-toolbox": "Relatanta chanji",
        "recentchangeslinked-title": "Chanji pri \"$1\"",
-       "recentchangeslinked-summary": "Skribez la nomo di ula pagino por vidar la modifikuri en pagini ligita ad ol. (Por vidar la membri di ula kategoriio, skribez Kategorio:Nomo di la kategorio). Chanji en la pagini qui esas en [[Special:Watchlist|vua surveryo-listo]] aparos en <strong>dika literi</strong>.",
+       "recentchangeslinked-summary": "Skribez la nomo di ula pagino por vidar la modifikuri en la pagini ligita ad ol. (Por vidar la kompozanti di ula kategoriio, skribez {{ns:category}}:Nomo di la kategorio). Chanji en la pagini qui esas en [[Special:Watchlist|vua surveryo-listo]] aparos en <strong>dika literi</strong>.",
        "recentchangeslinked-page": "Nomo di la pagino:",
        "recentchangeslinked-to": "Montrez chanji a pagini ligita a la specigita pagino vice",
        "recentchanges-page-added-to-category": "[[:$1]] adjuntita a kategorio",
        "ipb-hardblock": "Impedar redakturi e modifikuri de uzeri qui facas 'login' de ica IP-adreso",
        "ipbcreateaccount": "Preventez kreo di konti",
        "ipbemailban": "Impedar l'uzero sendar e-posto",
+       "ipbenableautoblock": "Automatale blokusar la lasta IP-adreso uzita da ica uzero, ed altra sequanta IP-adresi quin ilu probus uzar por redaktar",
        "ipbsubmit": "Blokusar ica uzero",
        "ipbother": "Altra tempo:",
        "ipboptions": "2 hori:2 hours,1 dio:1 day,3 dii:3 days,1 semano:1 week,2 semani:2 weeks,1 monato:1 month,3 monati:3 months,6 monati:6 months,1 yaro:1 year,nefinita:infinite",
        "logentry-move-move": "$1 {{GENDER:$2|movis}} la pagino $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|movis}} la pagino $3 a $4 sen lasar ridirektilo",
        "logentry-move-move_redir": "$1 {{GENDER:$2|movis}} la pagino $3 a $4 sen lasar ridirekto",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|movis}} la pagino $3 a $4 super antea ridirekto sen lasar ridirekto",
        "logentry-patrol-patrol-auto": "$1 automatale {{GENDER:$2|indikis}} ke la revizo $4 de la pagino $3 surveyesas",
        "logentry-newusers-create": "La konto dil uzero $1 kreesis.",
        "logentry-newusers-autocreate": "L'uzanto $1 {{GENDER:$2|kreesis}} automatale",
index 8e108ee..5aad047 100644 (file)
        "diff-paragraph-moved-toold": "Il paragrafo è stato spostato. Clicca per passare alla vecchia posizione.",
        "difference-missing-revision": "{{PLURAL:$2|Una versione|$2 versioni}} di questa differenza ($1) {{PLURAL:$2|non è stata trovata|non sono state trovate}}.\n\nQuesto si verifica solitamente seguendo un collegamento obsoleto di un diff a una pagina cancellata.\nI dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro delle cancellazioni].",
        "searchresults": "Risultati della ricerca",
+       "search-filter-title-prefix": "Ricerca effettuata solo nelle pagine con titolo che inizia con \"$1\"",
+       "search-filter-title-prefix-reset": "cerca in tutte le pagine",
        "searchresults-title": "Risultati della ricerca di \"$1\"",
        "titlematches": "Corrispondenze nel titolo delle pagine",
        "textmatches": "Corrispondenze nel testo delle pagine",
index ca6445d..095e653 100644 (file)
        "customcssprotected": "この CSS ページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。",
        "customjsonprotected": "この JSON ページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。",
        "customjsprotected": "この JavaScript ページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。",
+       "sitecssprotected": "すべての訪問者に影響する可能性があるためこのCSSページを編集する権限がありません",
+       "sitejsonprotected": "すべての訪問者に影響する可能性があるためこのJSONページを編集する権限がありません",
+       "sitejsprotected": "すべての訪問者に影響する可能性があるためこのJavaScriptページを編集する権限がありません",
        "mycustomcssprotected": "あなたにはこの CSS ページを編集する権限がありません。",
        "mycustomjsonprotected": "あなたにはこの JSON ページを編集する権限がありません。",
        "mycustomjsprotected": "あなたにはこの JavaScript ページを編集する権限がありません。",
        "undo-summary-username-hidden": "秘匿された利用者による版 $1 を取り消し",
        "cantcreateaccount-text": "この IP アドレス (<strong>$1</strong>) からのアカウント作成は、[[User:$3|$3]] によってブロックされています。\n\n$3 が示した理由: <em>$2</em>",
        "cantcreateaccount-range-text": "この IP アドレス (<strong>$4</strong>) を含む、IP アドレス範囲 <strong>$1</strong> からのアカウント作成は、[[User:$3|$3]] によってブロックされています。\n\n$3 が示した理由: <em>$2</em>",
-       "viewpagelogs": "このページの記録を閲覧",
+       "viewpagelogs": "このページの記録を表示",
        "nohistory": "このページには編集履歴がありません。",
        "currentrev": "最新版",
        "currentrev-asof": "$1時点における最新版",
        "badsig": "署名用のソースが正しくありません。\nHTMLタグを見直してください。",
        "badsiglength": "署名が長すぎます。\n$1 {{PLURAL:$1|文字}}以下である必要があります。",
        "yourgender": "表示に使用する性別",
-       "gender-unknown": "ã\81\82ã\81ªã\81\9fã\81«è¨\80å\8f\8aã\81\99ã\82\8bæ\99\82ã\80\81ã\82½ã\83\95ã\83\88ã\82¦ã\82§ã\82¢ã\81¯å\8f¯è\83½ã\81ªé\99\90ã\82\8aã\80\81æ\80§å\88¥ã\81\8c中æ\80§ã\81®å\8d\98èª\9eã\82\92使ã\81\8aã\81\86ã\81¨ã\81\97ã\81¾ã\81\99ã\80\82",
+       "gender-unknown": "ã\82½ã\83\95ã\83\88ã\82¦ã\82§ã\82¢ã\81\8cã\81\82ã\81ªã\81\9fã\81«è¨\80å\8f\8aã\81\99ã\82\8bé\9a\9bã\80\81å\8f¯è\83½ã\81ªé\99\90ã\82\8aæ\80§å\88¥ä¸\8då\95\8fã\81®è¨\80è\91\89ã\82\92使ç\94¨ã\81\97ã\81¾ã\81\99ã\80\82",
        "gender-male": "男",
        "gender-female": "女",
        "prefs-help-gender": "この項目の設定は省略できます。\nソフトウェアが利用者向けの画面表示であなたに言及する際に、適切な文法的性を選択するために使用されます。\nこの情報は公開されます。",
        "right-editusercss": "他の利用者のCSSファイルを編集",
        "right-edituserjson": "他の利用者のJSONファイルを編集",
        "right-edituserjs": "他の利用者のJavaScriptファイルを編集",
+       "right-editsitecss": "サイト全体のCSSを編集",
+       "right-editsitejson": "サイト全体のJSONを編集",
+       "right-editsitejs": "サイト全体のJavaScriptを編集",
        "right-editmyusercss": "自身のCSSファイルを編集",
        "right-editmyuserjson": "自身のJSONファイルを編集",
        "right-editmyuserjs": "自身のJavaScriptファイルを編集",
        "right-managechangetags": "[[Special:Tags|タグ]]の作成、有効化および無効化",
        "right-applychangetags": "自分の編集に[[Special:Tags|タグ]]を適用する",
        "right-changetags": "個々の版と記録項目の任意の[[Special:Tags|タグ]]の追加と削除",
-       "right-deletechangetags": "データベースから[[Special:Tags|タグ]]を削除します",
+       "right-deletechangetags": "データベースから[[Special:Tags|タグ]]を削除",
        "grant-generic": "「$1」の権限バンドル",
        "grant-group-page-interaction": "ページとの相互作用",
        "grant-group-file-interaction": "メディアとの相互作用",
        "grant-editmycssjs": "あなた自身の利用者 CSS/JSON/JavaScript を編集",
        "grant-editmyoptions": "あなたの個人設定を編集",
        "grant-editmywatchlist": "あなたのウォッチリストを編集",
+       "grant-editsiteconfig": "サイト全体と利用者のCSS/JSを編集",
        "grant-editpage": "既存のページを編集",
        "grant-editprotected": "保護されたページを編集",
        "grant-highvolume": "多量の編集",
        "rcfilters-watchlist-showupdated": "最終訪問以降に変更されたページは、塗りつぶされた丸印と一緒に、<strong>太字</strong>で表示されます。",
        "rcfilters-preference-label": "最近の更新の改善版を隠す",
        "rcfilters-preference-help": "2017年のインターフェース更新およびそれ以降に追加された新しいツールを無効化します。",
+       "rcfilters-watchlist-preference-label": "ウォッチリストの改善版を隠す",
        "rcfilters-filter-showlinkedfrom-label": "リンク先ページの変更を表示する",
        "rcfilters-filter-showlinkedfrom-option-label": "選択されているページから<strong>リンクされているページ</strong>",
        "rcfilters-filter-showlinkedto-label": "リンク先ページの変更を表示する",
        "protectedtitles-submit": "タイトルを表示",
        "listusers": "利用者一覧",
        "listusers-editsonly": "投稿記録のある利用者のみを表示",
+       "listusers-temporarygroupsonly": "一時的に利用者グループに属している利用者のみを表示",
        "listusers-creationsort": "作成日順に並べ替え",
        "listusers-desc": "降順に並べ替える",
        "usereditcount": "$1 {{PLURAL:$1|回編集}}",
        "magiclink-tracking-isbn": "ISBNマジックリンクを使用しているページ",
        "magiclink-tracking-isbn-desc": "このページはISBNマジックリンクを使用しています。移行方法について[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org]を参照してください。",
        "specialloguserlabel": "実行者:",
-       "speciallogtitlelabel": "対象 (ページ名または利用者の場合、{{ns:user}}:利用者名):",
+       "speciallogtitlelabel": "対象 (ページ名または\"{{ns:user}}:利用者名\"):",
        "log": "記録",
        "logeventslist-submit": "表示",
+       "logeventslist-more-filters": "付加記録を表示:",
+       "logeventslist-patrol-log": "巡回記録",
+       "logeventslist-tag-log": "タグ記録",
        "all-logs-page": "すべての公開記録",
        "alllogstext": "{{SITENAME}}の取得できる記録をまとめて表示しています。\n記録の種類、実行した利用者 (大文字小文字は区別)、影響を受けたページ (大文字小文字は区別) による絞り込みができます。",
        "logempty": "該当する記録はありません。",
        "uctop": "(最新)",
        "month": "この月以前:",
        "year": "この年以前:",
+       "date": "この日以前:",
        "sp-contributions-newbies": "新規利用者の投稿のみ表示",
        "sp-contributions-newbies-sub": "新規利用者のみ",
        "sp-contributions-newbies-title": "新規利用者の投稿記録",
        "special-characters-title-endash": "en ダッシュ",
        "special-characters-title-emdash": "em ダッシュ",
        "special-characters-title-minus": "マイナス記号",
-       "mw-widgets-dateinput-no-date": "日付未選択",
+       "mw-widgets-dateinput-no-date": "日付が選択されていません",
        "mw-widgets-dateinput-placeholder-day": "YYYY-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "YYYY-MM",
        "mw-widgets-mediasearch-input-placeholder": "メディアを検索",
        "mw-widgets-titleinput-description-redirect": "$1 へのリダイレクト",
        "mw-widgets-categoryselector-add-category-placeholder": "カテゴリを追加...",
        "mw-widgets-usersmultiselect-placeholder": "さらに追加",
-       "date-range-from": "開始日:",
-       "date-range-to": "終了日:",
+       "date-range-from": "この日から:",
+       "date-range-to": "この日まで:",
        "sessionmanager-tie": "複数の要求の認証方法を組み合わせることはできません: $1。",
        "sessionprovider-generic": "$1 セッション",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "Cookie ベースのセッション",
        "log-action-filter-contentmodel-new": "標準でないコンテンツ・モデルによるページの作成",
        "log-action-filter-delete-delete": "ページの削除",
        "log-action-filter-delete-delete_redir": "転送の上書き",
-       "log-action-filter-delete-restore": "ã\83\9aã\83¼ã\82¸ã\81®å¾©å¸°",
+       "log-action-filter-delete-restore": "ã\83\9aã\83¼ã\82¸ã\81®å¾©å\85\83",
        "log-action-filter-delete-event": "記録の削除",
        "log-action-filter-delete-revision": "版指定削除",
        "log-action-filter-import-interwiki": "ウィキ間の取り込み",
        "edit-error-long": "エラー:\n\n\n\n$1",
        "revid": "版 $1",
        "pageid": "ページID $1",
+       "interfaceadmin-info": "$1\n\nサイト全体のCSS/JS/JSONの編集における許可は、最近まで<code>editinterface</code>権限と分けられていました。なぜこのエラーが表示されるのかわからない場合は、[[mw:MediaWiki_1.32/interface-admin]]をご覧ください。",
        "rawhtml-notallowed": "&lt;html&gt;タグは通常ページ以外では使用できません。",
-       "gotointerwiki": "{{SITENAME}}ã\82\92é\9b¢ã\82\8cる",
+       "gotointerwiki": "{{SITENAME}}ã\81\8bã\82\89ä»\96ã\82µã\82¤ã\83\88ã\81¸ç§»å\8b\95ã\81\99る",
        "gotointerwiki-invalid": "指定したページは無効です。",
-       "gotointerwiki-external": "{{SITENAME}}を離れ、別のウェブサイトである[[$2]]を訪れようとしています。\n\n'''[$1 $1に行く]'''",
+       "gotointerwiki-external": "あなたは{{SITENAME}}から別のウェブサイトである[[$2]]へ移動しようとしています。\n\n'''[$1 $1 へ移動する]'''",
        "undelete-cantedit": "このページを編集する許可がないため復元できません。",
        "undelete-cantcreate": "同名のページが存在せず、このページを作成する許可がないため復元できません。",
        "pagedata-title": "ページ・データ",
index 66df3aa..84496e8 100644 (file)
        "categorypage": "Deleng kaca kategori",
        "viewtalkpage": "Deleng parembugan",
        "otherlanguages": "Ing basa liyané",
-       "redirectedfrom": "(Dilih saka $1)",
+       "redirectedfrom": "(Kaelih saka $1)",
        "redirectpagesub": "Alih kaca",
        "redirectto": "Ngalih menyang:",
-       "lastmodifiedat": "Kaca iki dibesut kèri dhéwé dhèk $1, pukul $2.",
+       "lastmodifiedat": "Kaca iki binesut pungkasan nalika $1, pukul $2.",
        "viewcount": "Kaca iki wis diaksès ping {{PLURAL:$1|siji|$1}}.",
        "protectedpage": "Kaca kareksa",
        "jumpto": "Jujug:",
        "recentchangeslinked": "Owahan magepokan",
        "recentchangeslinked-feed": "Owah-owahan sing gegayutan",
        "recentchangeslinked-toolbox": "Owahan magepokan",
-       "recentchangeslinked-title": "Owah-owahan sing magepokan \"$1\"",
+       "recentchangeslinked-title": "Owah-owahan kang magepokan \"$1\"",
        "recentchangeslinked-summary": "Iki pratélaning owah-owahan sing mentas digawé tumrap ing kaca-kaca sing nggayut sawijining kaca (utawa kaca-kaca anggotaning sawijining kategori).\nKaca ing [[Special:Watchlist|pawawangané panjenegan]] <strong>dikandeli</strong>.",
        "recentchangeslinked-page": "Jeneng kaca:",
-       "recentchangeslinked-to": "Nuduhaké owah-owahan kaca-kaca sing nggayut kaca iki",
+       "recentchangeslinked-to": "Tuduhaké owahané kaca kang nggayut kaca iki",
        "recentchanges-page-added-to-category": "[[:$1]] ditambahaké ing kategori",
        "recentchanges-page-added-to-category-bundled": "[[:$1]] ditambahaké ing kategori, [[Special:WhatLinksHere/$1|kaca iki kalebu ing njeroné kaca liyané]]",
        "recentchanges-page-removed-from-category": "[[:$1]] dibusak saka kategori",
        "imagelinks": "Panggunaning barkas",
        "linkstoimage": "{{PLURAL:$1|Kaca|$1 kaca}} ngisor iki nggayut barkas iki:",
        "linkstoimage-more": "Luwih saka $1 {{PLURAL:$1|kaca|kaca-kaca}} nduwèni pranala menyang berkas iki.\nDhaftar ing ngisor nuduhaké {{PLURAL:$1|kaca pisanan kanthi pranala langsung|$1 kaca kanthi pranala langsung}} menyang berkas iki.\n[[Special:WhatLinksHere/$2|dhaftar pepak]] uga ana.",
-       "nolinkstoimage": "Ora ana kaca sing nggayut menyang barkas iki.",
+       "nolinkstoimage": "Ora ana kaca kang nganggo barkas iki.",
        "morelinkstoimage": "Ndeleng [[Special:WhatLinksHere/$1|luwih akèh pranala]] menyang berkas iki.",
        "linkstoimage-redirect": "$1 (alihan barkas) $2",
        "duplicatesoffile": "{{PLURAL:$1|berkas ing ngisor arupa duplikat|$1 berkas ing ngisor arupa duplikat}} saka berkas iki ([[Special:FileDuplicateSearch/$2|luwih rinci]]):",
        "tooltip-p-logo": "Menyang tepas",
        "tooltip-n-mainpage": "Menyang tepas",
        "tooltip-n-mainpage-description": "Menyang tepas",
-       "tooltip-n-portal": "Bab proyèk, apa sing bisa panjenengan garap, lan ing endi saprelu golèk apa-apa",
+       "tooltip-n-portal": "Bab proyèk, apa kang bisa panjenengan garap, lan ing endi saprelu golèk apa-apa",
        "tooltip-n-currentevents": "Golèk katerangan latar wuri saka kadadéan saiki",
        "tooltip-n-recentchanges": "Pratélaning owah-owahan anyar sajeroning wiki.",
        "tooltip-n-randompage": "Mot sembarang kaca",
        "tooltip-n-help": "Papan kanggo golèk pitulung",
        "tooltip-t-whatlinkshere": "Pratélan kabèh kaca wiki kang nggayut mréné",
-       "tooltip-t-recentchangeslinked": "Owah-owahan anyar saka kaca-kaca sing nggayut kaca iki",
+       "tooltip-t-recentchangeslinked": "Owah-owahan anyar saka kaca-kaca kang nggayut kaca iki",
        "tooltip-feed-rss": "''RSS feed'' kanggo kaca iki",
        "tooltip-feed-atom": "Pakan atom tumrap kaca iki",
        "tooltip-t-contributions": "Pratélaning pisumbanging {{GENDER:$1|panganggo iki}}",
        "tooltip-ca-nstab-main": "Deleng kaca kontèn",
        "tooltip-ca-nstab-user": "Deleng kaca panganggo",
        "tooltip-ca-nstab-media": "Deleng kaca médhia",
-       "tooltip-ca-nstab-special": "Iki kaca mirunggan lan ora bisa dibesut",
+       "tooltip-ca-nstab-special": "Iki kaca mirunggan lan ora bisa kabesut",
        "tooltip-ca-nstab-project": "Deleng kaca proyèk",
        "tooltip-ca-nstab-image": "Deleng kaca barkas",
        "tooltip-ca-nstab-mediawiki": "Deleng layang sistem",
        "tooltip-save": "Simpen owah-owahaning panjenengan",
        "tooltip-publish": "Babar owahané panjenengan",
        "tooltip-preview": "Pratuduhana owah-owahaning panjenengan. Tulung ayahana iku sadurungé nyimpen.",
-       "tooltip-diff": "Tuduhaké owah-owahan endi sing panjenengan gawé tumrap tulisan iki",
+       "tooltip-diff": "Tuduhaké owahan endi kang panjenengan gawé tumrap tulisané",
        "tooltip-compareselectedversions": "Delengen prabédan antara rong vèrsi kaca iki sing dipilih.",
        "tooltip-watch": "Wuwuh kaca iki menyang pawawangané panjenengan",
        "tooltip-watchlistedit-normal-submit": "Busak sesirah",
        "tooltip-watchlistedit-raw-submit": "Anyari daptar pangawasan",
        "tooltip-recreate": "Gawéa kaca iki manèh senadyan tau dibusak",
        "tooltip-upload": "Wiwit ngunggah",
-       "tooltip-rollback": "\"Balèkaké\" bakal murungaké besutané wong sing nyumbang kèri dhéwé tumrap kacané sarana ngeklik pisan",
+       "tooltip-rollback": "\"Balèkaké\" bakal murungaké besutané kang nyumbang pungkasan ing kaca iki sarana ngeklik pisan",
        "tooltip-undo": "\"Wurung\" mbalèkaké besutan iki lan mbukak blangko besutan sarana modhe pratuduh. Alesan kena diwuwuhaké ing babagan ringkesan.",
        "tooltip-preferences-save": "Simpen préperensi",
        "tooltip-summary": "Isinen ringkesan cekak",
        "sunday-at": "Minggu jam $1",
        "yesterday-at": "Dhek wingi jam $1",
        "bad_image_list": "Formaté kaya mengkéné:\n\nNamung butir daftar (baris sing diawali mawa tandha *) sing mèlu diitung. Pranala kapisan ing sawijining baris kudu pranala ing berkas sing ala.\nPranala-pranala sabanjuré ing baris sing padha dianggep minangka ''pengecualian'', yaiku artikel sing bisa nuduhaké berkas iku.",
-       "metadata": "Métadata",
+       "metadata": "Métadhatah",
        "metadata-help": "Barkas iki ngemu katerangan tambahan, bokmanawa asalé saka kodhak dhigital utawa sekèner sing dienggo metha utawa ndhigitalisasi barkas iku. \nYèn barkasé wis diowahi saka asliné, sawenèh rerincèn mungkin ora sawutuhé mèmper karo barkas owahané.",
        "metadata-expand": "Tuduhaké rerincèn tambahan",
        "metadata-collapse": "Dhelikaké rerincèn tambahan",
-       "metadata-fields": "Babagan-babagan métadhata gambar sing kapacak ing layang iki bakal dimot nyang pitontonan kaca gambar nalika métadhata diciyutaké.\nLiyané bakal kadhelikaké kanthi baku.\n* panggawé\n* gagrag\n* tanggalwayahasli\n* wayahpaparan\n* angkaf\n* bijibanteriso\n* dawafocal\n* artis\n* hakcipta\n* pratélangambar\n* latitudgps\n* longitudgps\n* altitudgps",
+       "metadata-fields": "Babagan-babagan métadhata gambar kang kapacak ing layang iki bakal kamot menyang pitontonan kaca gambar nalika métadhata diciyutaké.\nLiyané bakal kadhelikaké kanthi gawan.\n* panggawé\n* gagrag\n* tanggalwayahasli\n* wayahpaparan\n* angkaf\n* bijibanteriso\n* dawafocal\n* artis\n* hakcipta\n* pratélangambar\n* latitudgps\n* longitudgps\n* altitudgps",
        "exif-imagewidth": "Jembar",
        "exif-imagelength": "Dhuwur",
        "exif-bitspersample": "Bit per komponèn",
        "exif-imagedescription": "Sesirah gambar",
        "exif-make": "Prodhusèn kodhak",
        "exif-model": "Modhèl kaméra",
-       "exif-software": "Piranti alus sing dianggo",
+       "exif-software": "Piranti alus kang kaanggo",
        "exif-artist": "Prodhusèn",
        "exif-copyright": "Sing ndarbèni hak cipta",
        "exif-exifversion": "Vèrsi Exif",
index 4e3b594..5038969 100644 (file)
        "recentchanges-label-plusminus": "ಪುಟದ ಗಾತ್ರವು ಇಷ್ಟು ಸಂಖ್ಯೆಯ ಬೈಟ್‍ಗಳಿಂದ ಬದಲಾಯಿಸಲ್ಪಟ್ಟಿದೆ",
        "recentchanges-legend-heading": "<strong>ಪರಿವಿಡಿ:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|ಹೊಸ ಪುಟಗಳ ಪಟ್ಟಿ]]ಯನ್ನೂ ನೋಡಿ)",
+       "rcfilters-legend-heading": "<strong> ಸಂಕ್ಷೇಪಣಗಳ ಪಟ್ಟಿ:</strong>",
+       "rcfilters-activefilters": "ಸಕ್ರಿಯ ಸೋಸುಕಗಳು",
+       "rcfilters-activefilters-hide-tooltip": "ಸಕ್ರಿಯ ಶೋಧಕಗಳ ಪ್ರದೇಶ ಅಡಗಿಸಿ",
+       "rcfilters-advancedfilters": "ಸುಧಾರಿಸಿದ ಶೋಧಕಗಳು",
+       "rcfilters-days-title": "ಇತ್ತೀಚಿನ ದಿನಗಳು",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|ದಿನ|ದಿನಗಳು}}",
+       "rcfilters-quickfilters": "ಉಳಿಸಲಾದ ಶೋಧಕಗಳು",
+       "rcfilters-savedqueries-defaultlabel": "ಉಳಿಸಲಾದ ಶೋಧಕಗಳು",
+       "rcfilters-restore-default-filters": "ಪೂರ್ವನಿಯೋಜಿತ ಶೋಧಕಗಳನ್ನು ಮರುಹೊಂದಿಸಿ",
+       "rcfilters-empty-filter": "ಸಕ್ರಿಯ ಶೋಧಕಗಳಿಲ್ಲ. ಎಲ್ಲಾ ಕೊಡುಗೆಗಳನ್ನು ತೋರಿಸಲಾಗುತ್ತಿದೆ.",
+       "rcfilters-filterlist-noresults": "ಶೋಧಕಗಳು ಲಭ್ಯವಿಲ್ಲ",
        "rcfilters-target-page-placeholder": "ಒಂದು ಪುಟದ ಹೆಸರನ್ನು ನಮೂದಿಸಿ (ಅಥವಾ ವಿಭಾಗ)",
        "rcnotefrom": "'''$2''' ಇಂದ ಆಗಿರುವ ಬದಲಾವಣೆಗಳು ಕೆಳಗಿವೆ (ಕೊನೆಯ '''$1'''ರವರೆಗೆ ತೋರಿಸಲಾಗಿದೆ).",
        "rclistfrom": "$2,$3 ಇಂದ ಪ್ರಾರಂಭಿಸಿ ಮಾಡಲಾದ ಬದಲಾವಣೆಗಳನ್ನು ನೋಡಿ",
        "deadendpages": "ಕೊನೆಯಂಚಿನ ಪುಟಗಳು",
        "deadendpagestext": "ಈ ಕೆಳಗಿನ ಪುಟಗಳು {{SITENAME}} ಅಲ್ಲಿ ಇರುವ ಇತರ ಪುಟಗಳಿಗೆ ಕೊಂಡಿಯನ್ನು ಹೊಂದಿಲ್ಲ.",
        "protectedpages": "ಸಂರಕ್ಷಿತ ಪುಟಗಳು",
+       "protectedpages-filters": "ಶೋಧಕಗಳುː",
        "protectedpages-indef": "ಅನಿಯಮಿತ ಸಂರಕ್ಷಣೆಗಳು ಮಾತ್ರ",
        "protectedpages-noredirect": "ಪುನರ್ನಿದೇಶನಗಳನ್ನು ಅಡಗಿಸಿ",
        "protectedpagesempty": "ಈ ನಿಯಮಾವಳಿಗಳಲ್ಲಿ ಯಾವ ಪುಟವೂ ಸಂರಕ್ಷಿತವಾಗಿಲ್ಲ.",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|ಸದಸ್ಯ|ಸದಸ್ಯರು}} $1",
        "creditspage": "ಪುಟದ ಗೌರವಗಳು",
        "simpleantispam-label": "ಆಂಟಿ-ಸ್ಪ್ಯಾಮ್ ಪರೀಕ್ಷೆ.\nಇದನ್ನು ತುಂಬ <strong>ಬೇಡಿ</strong>!",
-       "pageinfo-title": "ಮಹಿತಿ \"$1\"",
+       "pageinfo-title": "ಮಾಹಿತಿ \"$1\"",
        "pageinfo-header-basic": "ಮೂಲಭೂತ ಮಾಹಿತಿ",
        "pageinfo-header-edits": "ಇತಿಹಾಸ ಸಂಪಾದಿಸಿ",
        "pageinfo-header-restrictions": "ಪುಟ ರಕ್ಷಣೆ",
        "ilsubmit": "ಹುಡುಕು",
        "bydate": "ದಿನಾಂಕಕ್ಕನುಗುಣವಾಗಿ",
        "sp-newimages-showfrom": "$2, $1 ಇಂದ ಪ್ರಾರಂಭಿಸಿ ಹೊಸ ಫೈಲುಗಳನ್ನು ತೋರು",
+       "days": "{{PLURAL:$1|$1 ದಿನ|$1 ದಿನಗಳು}}",
        "just-now": "ಇದೀಗ",
        "monday-at": "ಸೋಮವಾರ $1",
        "tuesday-at": "ಮಂಗಳವಾರ $1",
index 025f8c9..f7ab4f8 100644 (file)
        "ns-specialprotected": "특수 문서는 편집할 수 없습니다.",
        "titleprotected": "[[User:$1|$1]]님이 문서 만들기를 보호했습니다.\n이유는 다음과 같습니다. <em>$2</em>",
        "filereadonlyerror": "\"$2\" 파일 저장소가 읽기 전용이기 때문에 \"$1\" 파일을 바꿀 수 없습니다.\n\n파일 저장소를 잠근 시스템 관리자가 다음과 같은 설명을 남겼습니다: \"$3\".",
+       "invalidtitle": "잘못된 제목",
        "invalidtitle-knownnamespace": "제목 오류: \"$2\" 이름공간과 \"$3\" 텍스트",
        "invalidtitle-unknownnamespace": "제목 오류: 알 수 없는 $1 이름공간 번호와 \"$2\" 텍스트",
        "exception-nologin": "로그인하지 않음",
        "uploadstash-zero-length": "파일 길이가 0입니다.",
        "invalid-chunk-offset": "청크 오프셋이 잘못되었습니다.",
        "img-auth-accessdenied": "접근이 거부됨",
-       "img-auth-nopathinfo": "PATH_INFO를 잃었습니다.\n서버가 이 정보를 받을 수 있도록 설정되어 있지 않습니다.\n이러한 경우는 서버가 CGI 기반이고 img_auth를 지원하지 않을 때 나타날 수 있습니다.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization을 참조하십시오.",
+       "img-auth-nopathinfo": "경로 정보가 없습니다.\n서버가 REQUEST_URI 및 PATH_INFO 변수를 넘길 수 있도록 설정되어야 합니다.\n이러한 경우 $wgUsePathInfo를 활성화해 보십시오.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization 를 참고하십시오.",
        "img-auth-notindir": "요청한 경로가 설정한 올리기 디렉터리에 없습니다.",
        "img-auth-badtitle": "\"$1\"에서 올바른 제목을 만들 수 없습니다.",
        "img-auth-nologinnWL": "로그인하지 않았으며 \"$1\" 파일은 화이트리스트에 존재하지 않습니다.",
        "filehist-filesize": "파일 크기",
        "filehist-comment": "설명",
        "imagelinks": "이 파일을 사용하는 문서",
-       "linkstoimage": "다음 {{PLURAL:$1|문서 $1개}}가 이 파일을 가리키고 있습니다:",
-       "linkstoimage-more": "$1개 이상의 {{PLURAL:$1|문서}}가 이 파일을 가리키고 있습니다.\n다음 목록은 이 파일을 {{PLURAL:$1|가리키는 처음 문서 $1개}}만 보여주고 있습니다.\n이 파일을 가리키는 [[Special:WhatLinksHere/$2|모든 문서 목록]]을 볼 수 있습니다.",
+       "linkstoimage": "다음 {{PLURAL:$1|문서 $1개}}가 이 파일을 사용하고 있습니다:",
+       "linkstoimage-more": "$1개 이상의 {{PLURAL:$1|문서}}가 이 파일을 사용하고 있습니다.\n다음 목록은 이 파일을 {{PLURAL:$1|사용하는 처음 문서 $1개}}만 보여주고 있습니다.\n이 파일을 사용하는 [[Special:WhatLinksHere/$2|모든 문서 목록]]을 볼 수 있습니다.",
        "nolinkstoimage": "이 파일을 사용하는 문서가 없습니다.",
        "morelinkstoimage": "이 파일이 쓰이고 있는 문서 목록 [[Special:WhatLinksHere/$1|더 보기]].",
        "linkstoimage-redirect": "$1 (파일 넘겨주기) $2",
        "cachedspecial-refresh-now": "최신판을 봅니다.",
        "categories": "분류 목록",
        "categories-submit": "보이기",
-       "categoriespagetext": "문서나 자료를 {{PLURAL:$1|포함하고 있는 분류}} 목록입니다.\n[[Special:UnusedCategories|사용되지 않는 분류]]는 여기에 보이지 않습니다.\n[[Special:WantedCategories|필요한 분류]]도 참조하세요.",
+       "categoriespagetext": "위키에 다음의 {{PLURAL:$1|분류가 존재}}하며 사용되거나 사용되지 않을 수 있습니다.\n[[Special:WantedCategories|필요한 분류]]도 참고하십시오.",
        "categoriesfrom": "검색어와 같거나 검색어보다 뒤에 오는 분류 표시:",
        "deletedcontributions": "삭제된 사용자 기여",
        "deletedcontributions-title": "삭제된 사용자 기여",
        "logentry-patrol-patrol": "$1님이 $3 문서의 $4판을 점검한 것으로 {{GENDER:$2|표시했습니다}}",
        "logentry-patrol-patrol-auto": "$1님이 자동으로 $3 문서의 $4판을 점검한 것으로 {{GENDER:$2|표시했습니다}}",
        "logentry-newusers-newusers": "$1 사용자 계정을 {{GENDER:$2|만들었습니다}}",
-       "logentry-newusers-create": "$1 계정이 생성되었습니다.",
+       "logentry-newusers-create": "$1 계정이 {{GENDER:$2|생성되었습니다}}",
        "logentry-newusers-create2": "$3 사용자 계정을 $1님이 {{GENDER:$2|만들었습니다}}",
        "logentry-newusers-byemail": "$3 사용자 계정을 $1님이 {{GENDER:$2|만들었고}} 비밀번호는 이메일로 보냈습니다",
-       "logentry-newusers-autocreate": "$1 사용자 계정을 자동으로 {{GENDER:$2|만들었습니다}}",
+       "logentry-newusers-autocreate": "$1 계정이 자동으로 {{GENDER:$2|생성되었습니다}}",
        "logentry-protect-move_prot": "$1님이 보호 설정을 $4에서 $3으로 {{GENDER:$2|이동했습니다}}",
        "logentry-protect-unprotect": "$1님이 $3 문서의 보호를 {{GENDER:$2|해제했습니다}}",
        "logentry-protect-protect": "$1님이 $3 문서를 {{GENDER:$2|보호했습니다}} $4",
        "edit-error-long": "오류:\n\n$1",
        "revid": "$1 판",
        "pageid": "페이지 ID $1",
+       "interfaceadmin-info": "$1\n\n사이트 전체에 쓰이는 CSS/JS/JSON 파일의 편집 권한이 최근 <code>editinterface</code>에서 분리되었습니다. 왜 이 오류를 겪는지 이해가 되지 않는다면, [[mw:MediaWiki_1.32/interface-admin]]을 참고하십시오.",
        "rawhtml-notallowed": "&lt;html&gt; 태그는 일반 페이지 밖에서는 사용할 수 없습니다.",
        "gotointerwiki": "{{SITENAME}}을(를) 떠납니다",
        "gotointerwiki-invalid": "지정된 제목이 올바르지 않습니다.",
index 4ec03ed..caa65d8 100644 (file)
@@ -78,7 +78,7 @@
        "hidden-categories": "{{PLURAL:$1|Яшырылгъан категория|Яшырылгъан категориялар}}‎",
        "category-subcat-count": "{{PLURAL:$2|Бу категорияда тек сонггъу гелеген тюпкатегориясы бар.|Бу категорияда {{PLURAL:$1|тюпкатегория|$1 тюпкатегориялар}} бар, жамда $2 тюпкатегориядан.}}",
        "category-article-count": "{{PLURAL:$2|Бу категорияда янгыз гелеген бир сагьифа бар.|Бу категориядагъы $2 {{PLURAL:$1|сагьифасы}} гёрсетилген.}}",
-       "category-file-count": "{{PLURAL:$2|Бу категорияда бир тек сонггъу гелеген сапламы бар.|Сонггъу гелеген {{PLURAL:$1|саплам|$1 сапламлар}}{{PLURAL:$2|категориядадыр|категориядадырлар}}}}.",
+       "category-file-count": "{{PLURAL:$2|Бу категорияда бир тек сонгра гелеген сапламы бар.|Сонгра гелеген {{PLURAL:$1|саплам|$1 сапламлар}} бу категориядадыр, жамы $2 санавундан.}}",
        "listingcontinuesabbrev": "давам",
        "noindex-category": "Индексленмейген сагьифалар",
        "broken-file-category": "Ишлеймейген саплам байланывлары булан сагьифалар",
        "template-semiprotected": "(ярты-къорулгъан)",
        "hiddencategories": "Бу сагьифа {{PLURAL:$1|1 яшырылгъан категориягъа}} янаша:",
        "permissionserrors": "Гириш ихтиярланы хатасы",
-       "permissionserrorstext-withaction": "Бугъар $2 гелеген {{PLURAL:$1|себепге|себеплеге}} гёре ихтиярынг ёкъ:",
+       "permissionserrorstext-withaction": "Бугъар $2 {{PLURAL:$1|бу себеп|бу себеплеге}} гёре ихтиярынг ёкъ:",
        "recreate-moveddeleted-warn": "<strong>Тергев бер: Алдын тайдырылгъан сагьифаны ярашдырма айланасан.</strong>\n\nБашлап тергеп къара, гертиден де тарыкъмы экен ол сагьифаны ярашдырмагъа.\nТайдырыв ва атын алышдырыв гюнделиги тюпде берилген:",
        "moveddeleted-notice": "Бу сагьифа тайдырылгъан эди.\nБу сагьифаны тайдырыв, къорув ва атянгыртыв гюнделиги маълюмат саялы тюпде гёрсетилген.",
        "content-model-wikitext": "викиматын",
        "nextrevision": "Сонггъу тюрю →",
        "currentrevisionlink": "Ахырынчы тюрю",
        "cur": "гьал.",
-       "next": "гелеген",
+       "next": "сонггъу",
        "last": "ингкъ.",
        "page_first": "биринчи",
        "page_last": "ахырынчы",
        "prevn": "алдагъы {{PLURAL:$1|$1}}",
        "nextn": "сонггъу {{PLURAL:$1|$1}}",
        "prev-page": "алдагъы сагьифа",
-       "next-page": "гелеген сагьифа",
+       "next-page": "сонггъу сагьифа",
        "prevn-title": "Алдагъы $1 {{PLURAL:$1|гьасил}}",
-       "nextn-title": "Ð\93елеген $1 {{PLURAL:$1|гьасил|гьасиллер}}",
+       "nextn-title": "СонггÑ\8aÑ\83 $1 {{PLURAL:$1|гьасил|гьасиллер}}",
        "shown-title": "Айры бир сагьифада $1 {{PLURAL:$1|языв|язывланы}} гёрсетмек",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) къарамакъ",
        "searchmenu-exists": "<strong>Бу викиде \"[[:$1]]\" деп аты булан сагьифа бар.</strong> {{PLURAL:$2|0=|Дагъы да табылгъан натижалагъа да къара.}}",
        "whatlinkshere": "Бери байланылгъан",
        "whatlinkshere-title": "\"$1\" бетге байлангъан сагьифалар",
        "whatlinkshere-page": "Сагьифа:",
-       "linkshere": "Ð\93елеген сагьифалар бугъар байлавлу <strong>$2</strong>:",
+       "linkshere": "СонгÑ\80а Ð³Ñ\91Ñ\80Ñ\81еÑ\82илген сагьифалар бугъар байлавлу <strong>$2</strong>:",
        "nolinkshere": "Бугъар байлавлу сагьифалар ёкъ <strong>$2</strong>:",
        "isredirect": "ёллав-сагьифа",
        "istemplate": "къошув",
        "exif-orientation-1": "Нормал",
        "namespacesall": "бары да",
        "monthsall": "бары да",
-       "imgmultipagenext": "гелеген сагьифа →",
+       "imgmultipagenext": "сонггъу сагьифа →",
        "imgmultigo": "Гечмек!",
        "imgmultigoto": "Сагьифагъа гечмек $1",
        "watchlisttools-clear": "Тергев тизмени тазаламакъ",
index b965f81..a7450a5 100644 (file)
        "ns-specialprotected": "Spezialsäite kënnen net verännert ginn.",
        "titleprotected": "Dësen Titel gouf vum [[User:$1|$1]] esou gespaart datt en net kann ugeluecht ginn. De Grond deen ugi gouf ass <em>$2</em>",
        "filereadonlyerror": "De Fichier \"$1\" konnt net geännert ginn well de Repertoire vun de Fichieren \"$2\" nëmme gelies däerf ginn.\n\nDe System-Administrateur deen d'Schreiwe gespaart huet, huet dës Erklärung uginn: \"$3\"",
+       "invalidtitle": "Net valabelen Titel",
        "invalidtitle-knownnamespace": "Net valabelen Titel mam Nummraum \"$2\" a mam Text \"$3\"",
        "invalidtitle-unknownnamespace": "Net valabelen Titel mat der onbekannter Nummraum-Zuel $1 a mam Text \"$2\"",
        "exception-nologin": "Net ageloggt",
        "imagelinks": "Benotze vu Fichieren",
        "linkstoimage": "Dës {{PLURAL:$1|Säit benotzt|Säite benotzen}} dëse Fichier:",
        "linkstoimage-more": "Méi wéi {{PLURAL:$1|eng Säit ass|$1 Säite si}} mat dësem Fichier verlinkt.\nDës Lëscht weist nëmmen {{PLURAL:$1|den éischte Link|déi éischt $1 Linken}} op dëse Fichier.\nEng [[Special:WhatLinksHere/$2|komplett Lëscht]] ass disponibel.",
-       "nolinkstoimage": "Keng Säit benotzt dëse Fichier.",
+       "nolinkstoimage": "Et gëtt keng Säiten déi dëse Fichier benotzen.",
        "morelinkstoimage": "Weis [[Special:WhatLinksHere/$1|méi Linken]] op dëse Fichier.",
        "linkstoimage-redirect": "$1 (Fichier-Viruleedung) $2",
        "duplicatesoffile": "{{PLURAL:$1|De Fichier ass een Doublon|Dës Fichiere sinn Doublone}} vum Fichier ([[Special:FileDuplicateSearch/$2|méi Detailer]]):",
index d4c3e75..a693c65 100644 (file)
        "deleteprotected": "अहाँ इ पन्ना नै मेटा सकए छी कियाकि ई सुरक्षण कएल गेल अछि",
        "deleting-backlinks-warning": "<strong>चेतावनी:</strong> जे पृष्ठ अहाँ मेटाबै लेल जा रहल छी ओ  [[Special:WhatLinksHere/{{FULLPAGENAME}}|अन्य पृष्ठसभ]] सँ जुडल अछि अथवा ट्रान्सक्ल्युड करैत अछि।",
        "rollback": "प्रत्यावर्तित सम्पादन",
-       "rollbacklink": "पà¥\8dरतà¥\8dयावरà¥\8dतन",
+       "rollbacklink": "पà¥\82रà¥\8dववतà¥\8d",
        "rollbacklinkcount": "$1 {{PLURAL:$1|सम्पादन}} पूर्ववत करी",
        "rollbacklinkcount-morethan": "$1 सँ अधिक {{PLURAL:$1|सम्पादन}} पूर्ववत करू",
        "rollbackfailed": "प्रत्यावर्तन असफल",
        "movesubpagetext": "नीचां $1 {{PLURAL:$1| पन्ना देखाओल गएल अछि, जे अहि पन्नाकऽ उप पन्ना अछि|पन्ना देखावोल गएल अछि, जे अहि पन्नाकऽ उप पन्ना अछि}}।",
        "movenosubpage": "अहि पन्ना कऽ कोनो उप पन्ना नहि अछि।",
        "movereason": "कारण:",
-       "revertmove": "फà¥\87रसà¤\81 à¤µà¤\8fह",
+       "revertmove": "पà¥\82रà¥\8dववतà¥\8d",
        "delete_and_move_text": "लक्ष्य पृष्ठ \"[[:$1]]\" पहिने सँ अस्तित्वमे अछि।\nअहाँ एकरा स्थानान्तरण करै लेल एकरा मेटाबैलेल चाहै छी?",
        "delete_and_move_confirm": "हँ, पन्ना मेटाउ",
        "delete_and_move_reason": "\"[[$1]]\" सँ घसकेबा लेल जगह बनेबा लेल मेटाएल गेल",
index 55ce3fe..64fbb7c 100644 (file)
        "ns-specialprotected": "Службени страници не може да се уредуваат.",
        "titleprotected": "Овој наслов од страна на [[User:$1|$1]] е заштитен и не може да се создаде.\nПричината за тоа е: <em>$2</em>.",
        "filereadonlyerror": "Не можам да ја изменам податотеката „$1“ бидејќи складиштето „$2“ е во незаписен режим.\n\t\nАдминистраторот што ја заклучи го понуди следново образложение: „''$3''“.",
+       "invalidtitle": "Погрешен наслов",
        "invalidtitle-knownnamespace": "Неважечки наслов со именски простор „$2“ и текст „$3“",
        "invalidtitle-unknownnamespace": "Неважечки наслов со именски простор бр. $1 и текст „$2“",
        "exception-nologin": "Не сте најавени",
        "cachedspecial-refresh-now": "Погл. најновата.",
        "categories": "Категории",
        "categories-submit": "Прикажи",
-       "categoriespagetext": "{{PLURAL:$1|Следната категорија содржи|Следните категории содржат}} страници или мултимедијални податотеки.\n[[Special:UnusedCategories|Неискористените категории]] не се прикажани овде.\nПогледајте ги и [[Special:WantedCategories|потребните категории]].",
+       "categoriespagetext": "На викито {{PLURAL:$1|постои следнава категорија, и истата може да е неискористена|постојат следниве категории, и истите можат да се неискористени}} или не.\nПогледајте ги и [[Special:WantedCategories|потребните категории]].",
        "categoriesfrom": "Приказ на категории почнувајќи од:",
        "deletedcontributions": "Избришани кориснички придонеси",
        "deletedcontributions-title": "Избришани кориснички придонеси",
        "duration-hours": "{{PLURAL:$1|еден час|$1 часа}}",
        "duration-days": "{{PLURAL:$1|еден ден|$1 дена}}",
        "duration-weeks": "$1 {{PLURAL:$1|недела|недели}}",
-       "duration-years": "{{PLURAL:$1|година|години}}",
+       "duration-years": "{{PLURAL:$1|$1 година|$1 години}}",
        "duration-decades": "$1 {{PLURAL:$1|деценија|децении}}",
        "duration-centuries": "$1 {{PLURAL:$1|век|века}}",
        "duration-millennia": "$1 {{PLURAL:$1|милениум|милениуми}}",
index 5f22f95..0751edd 100644 (file)
@@ -76,7 +76,7 @@
        "may_long": "ꯃꯦ",
        "june": "ꯖꯨꯟ",
        "july": "ꯖꯨꯂꯥꯏ",
-       "august": "ê¯\91ꯥê¯\92ꯥê¯\81ê¯\87",
+       "august": "ꯑꯒꯥꯁꯇ",
        "september": "ꯁꯦꯄꯇꯦꯝꯕꯔ",
        "october": "ꯑꯣꯛꯇꯣꯕꯔ",
        "november": "ꯅꯣꯕꯦꯝꯕꯔ",
        "december-date": "$1 ꯗꯤꯁꯦꯝꯕꯔ",
        "period-am": "ꯑꯦ ꯑꯦꯝ",
        "period-pm": "ꯄꯤ ꯑꯦꯝ",
-       "pagecategories": "{{PLURAL:$1|Category|Categories}}",
+       "pagecategories": "{{PLURAL:$1|ꯃꯆꯥꯈꯥꯏꯕ|ꯃꯆꯥꯈꯥꯏꯕꯁꯤꯡ}}",
        "category_header": "$1 ꯗꯥ ꯂꯩꯕꯥ ꯂꯥꯃꯥꯏꯒꯤ ꯃꯆꯥꯈꯥꯏꯕꯥ",
        "subcategories": "ꯃꯆꯥꯈꯥꯏꯕꯥ ꯃꯆꯥ",
        "category-media-header": "$1 ꯗꯥ ꯂꯩꯕꯥ ꯃꯦꯗꯤꯌꯥꯒꯤ ꯃꯆꯥꯈꯥꯏꯕꯥ",
        "mytalk": "ꯉꯥꯡꯐꯝ",
        "anontalk": "ꯉꯥꯡꯐꯝ",
        "navigation": "ꯆꯠꯄꯥ",
-       "and": "꯱ê¯\81ꯪ #꯳꯲; ꯑꯃꯁꯨꯪ",
+       "and": "ê¯\91ê¯\83ê¯\81ꯨꯡ #꯳꯲; ꯑꯃꯁꯨꯪ",
        "faq": "FAQ",
        "actions": "Actions",
        "namespaces": "ꯃꯥꯃꯤꯡꯒꯤ ꯃꯐꯝ",
        "help": "ꯃꯥꯇꯦꯡ",
        "search": "ꯊꯤꯕꯥ",
        "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Headings that will be ignored by search.\n# Changes to this take effect as soon as the page with the heading is indexed.\n# You can force page reindexing by doing a null edit.\n# The syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment.\n#   * Every non-blank line is the exact title to ignore, case and everything.\nReferences\nExternal links\nSee also\n #</pre> <!-- leave this line exactly as it is -->",
-       "searchbutton": "ê¯\87ꯤꯕꯥ",
+       "searchbutton": "ê¯\8aꯤꯕꯥ",
        "go": "ꯆꯠꯂꯨ",
        "searcharticle": "ꯆꯠꯂꯨ",
        "history": "ꯂꯥꯃꯥꯏꯒꯤ ꯄꯨꯋꯥꯔꯤ",
        "disclaimerpage": "Project:ꯃꯌꯥꯝꯒꯤ ꯑꯣꯏꯅꯥ ꯌꯥꯅꯤꯡꯗꯕꯥ ꯐꯣꯡꯗꯣꯔꯛꯄꯥ",
        "edithelp": "ꯁꯦꯝꯒꯠꯅꯕꯥ ꯃꯥꯇꯦꯡ",
        "helppage-top-gethelp": "ꯃꯥꯇꯦꯡ",
-       "mainpage": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯃꯥꯏ",
+       "mainpage": "ꯃꯔꯨꯑꯣꯏꯕ ꯂꯃꯥꯏ",
        "mainpage-description": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯃꯥꯏ",
        "policy-url": "Project:ꯈꯣꯡꯊꯥꯡ",
        "portal": "ꯃꯤꯌꯥꯝꯒꯤ ꯄꯣꯔꯇꯦꯜ",
        "portal-url": "Project:ꯃꯤꯌꯥꯝꯒꯤ ꯄꯣꯔꯇꯦꯜ",
        "privacy": "ꯑꯔꯣꯟꯕꯥ ꯊꯧꯔꯥꯡ",
-       "privacypage": "Project:ꯑꯔꯣꯟꯕ ꯊꯧꯔꯥꯡ",
+       "privacypage": "Project:ꯑꯔꯣꯟꯕ ꯊꯧꯔꯥꯡ",
        "badaccess": "ꯑꯌꯥꯕꯥꯗꯨ ꯁꯣꯏꯔꯦ",
        "badaccess-group0": "ꯅꯪ ꯍꯧꯖꯤꯛ ꯑꯦꯛꯁꯟ ꯂꯧꯈꯠꯄꯥ ꯌꯥꯗꯔꯤ ꯅꯪꯅꯥ ꯍꯪꯒꯠꯆꯔꯤꯕꯗꯨꯒꯤ ꯃꯇꯥꯡꯗ",
        "badaccess-groups": "The action you have requested is limited to users in {{PLURAL:$2|the group|one of the groups}}: $1.",
        "nstab-template": "ꯇꯦꯝꯄꯂꯦꯠ",
        "nstab-help": "ꯂꯥꯃꯥꯏꯒꯤ ꯃꯇꯦꯂꯧꯐꯝ",
        "nstab-category": "ꯃꯥꯆꯥꯛꯈꯥꯏꯕꯥ",
-       "mainpage-nstab": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯃꯥꯏ",
+       "mainpage-nstab": "ꯃꯔꯨꯑꯣꯏꯕ ꯂꯃꯥꯏ",
        "nosuchaction": "ꯃꯁꯤꯒꯨꯕꯥ ꯃꯥꯑꯣꯡꯁꯤ ꯅꯠꯇꯦ",
        "nosuchactiontext": "The action specified by the URL is invalid.\nYou might have mistyped the URL, or followed an incorrect link.\nThis might also indicate a bug in the software used by {{SITENAME}}.",
        "nosuchspecialpage": "ꯃꯁꯤꯒꯥ ꯃꯥꯟꯅꯕꯥ ꯑꯈꯟꯅꯕꯥ ꯂꯥꯃꯥꯏ ꯂꯩꯇꯦ",
        "content-json-empty-object": "ꯑꯍꯥꯡꯕꯥ ꯄꯣꯠꯁꯛ",
        "viewpagelogs": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤꯒꯤ ꯅꯧꯅ ꯆꯪꯉꯨ",
        "currentrev-asof": "$1 ꯒꯤ ꯅꯧꯅꯥ ꯑꯃꯨꯛꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ ꯃꯤꯠꯌꯦꯡ",
-       "revisionasof": "Revision as of $1",
+       "revisionasof": " $1 ꯒꯤ ꯑꯃꯨꯛ ꯍꯟꯅ ꯌꯦꯡꯕ",
        "revision-info": "Revision as of $1 by {{GENDER:$6|$2}}$7",
        "previousrevision": "ꯑꯔꯤꯕꯥ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ",
        "nextrevision": "ꯑꯅꯧꯕꯥ ꯑꯃꯨꯛꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ",
        "group-bot": "ꯕꯣꯇꯁꯤꯡ",
        "group-sysop": "ꯆꯨꯞꯂꯤ ꯄꯥꯏꯔꯤꯕꯁꯤꯡ",
        "grouppage-bot": "{{ns:project}}:ꯕꯣꯠꯁꯤꯡ",
-       "grouppage-sysop": "ꯉꯥꯛ ꯁꯦꯟꯂꯤꯕ {{ns:project}}",
+       "grouppage-sysop": "{{ns:project}}:ꯆꯨꯞꯂꯤ ꯄꯥꯏꯔꯤꯕꯁꯤꯡ",
        "right-writeapi": "API sijinaduna eba",
        "newuserlogpage": "User creation log",
        "action-edit": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤ ꯁꯦꯝꯒꯠꯂꯨ",
        "filehist-dimensions": "ꯄꯥꯛ ꯆꯥꯎꯕꯥ",
        "filehist-comment": "ꯑꯄꯥꯝꯕꯥ ꯐꯣꯡꯗꯣꯛ ꯎ",
        "imagelinks": "ꯐꯥꯏꯜꯒꯤ ꯁꯤꯖꯤꯟꯅꯐꯝ",
-       "linkstoimage": "The following {{PLURAL:$1|page links|$1 pages link}} to this file:",
-       "nolinkstoimage": "ê¯\83ê¯\81ꯤê¯\92ꯤ ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤê¯\92ꯥ ê¯\83ê¯\94ꯤ ê¯\82ꯩê¯\85ê¯\95ꯥ ê¯\81ê¯\9dê¯\85ê¯\90ê¯\9d ê¯\90ꯥê¯\8fê¯\9c ê¯\82ꯩê¯\87ꯦ",
+       "linkstoimage": "ꯃꯇꯨꯡ ꯏꯟꯕ {{PLURAL:$1|ꯂꯥꯃꯥꯏꯁꯤꯖꯤꯟꯅꯕ|$1ꯂꯥꯃꯥꯏ ꯁꯤꯖꯤꯟꯅꯕ}} ꯃꯁꯤꯒꯤ ꯐꯥꯏꯜ:",
+       "nolinkstoimage": "ê¯\83ê¯\81ꯤê¯\92ꯤ ê¯\90ꯥê¯\8fê¯\9c ê¯\81ꯤ ê¯\81ꯤê¯\96ꯤê¯\9fê¯\85ê¯\95 ê¯\82ꯥê¯\83ꯥê¯\8fê¯\81ꯤꯡ ê¯\82ꯩê¯\87ꯦ ê¯«",
        "sharedupload-desc-here": "This file is from $1 and may be used by other projects.\nThe description on its [$2 file description page] there is shown below.",
        "filepage-nofile": "ꯃꯁꯤꯒꯤ ꯐꯥꯏꯜ ꯃꯃꯤꯡ ꯁꯤ ꯒꯥ ꯃꯥꯟꯅꯕ ꯂꯩꯇꯦ",
        "upload-disallowed-here": "ꯃꯁꯤꯒꯤ ꯐꯥꯏꯜꯁꯤ ꯅꯪꯅꯥ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯏꯕꯥ ꯌꯥꯔꯣꯏ",
        "tooltip-invert": "Akhannaba maming gi manungda page tungi ahongba lotnaba oopu du yeng ngoo",
        "namespace_association": "Maming eefam ga marileinaba",
        "tooltip-namespace_association": "Oopu du yengoo maming eefam gi hiramga mari leinaba khangatlaba maming eefam amadi wa ngangfam manung channaba",
-       "blanknamespace": "ꯃꯔꯨꯑꯣꯏꯕ",
+       "blanknamespace": "ꯃꯔꯨꯑꯣꯏꯕ",
        "contributions": "{{GENDER:$1|User}} ꯈꯣꯝꯒꯠꯂꯛꯄꯁꯤꯡ",
        "contributions-title": "$1 ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯁꯤꯅ ꯈꯣꯝꯖꯤꯜꯂꯛꯄꯁꯤꯡ",
        "mycontris": "ꯈꯣꯝꯒꯠꯂꯛꯂꯤꯕꯁꯤꯡ",
        "anoncontribs": "ꯈꯣꯝꯒꯠꯂꯛꯂꯤꯕꯁꯤꯡ",
        "contribsub2": "{{GENDER:$3|$1}}$2 ꯒꯤ",
+       "nocontribs": "ꯃꯁꯤꯗ ꯆꯪꯂꯤꯕꯁꯤꯒ ꯆꯥꯟꯅꯕ ꯑꯍꯣꯡꯕ ꯂꯩꯇꯦ ꯫",
        "uctop": "ꯍꯧꯖꯤꯛ",
        "month": "ꯃꯗꯨꯒꯤ ꯊꯥꯗꯒꯤ (ꯑꯃꯗꯤ ꯅꯧꯔꯤꯕꯥ)",
        "year": "ꯃꯗꯨꯒꯤ ꯆꯥꯍꯤꯗꯒꯤ (ꯑꯃꯗꯤ ꯅꯧꯔꯤꯕꯥ)",
        "whatlinkshere-hidelinks": "$1 ꯁꯝꯅꯐꯝ",
        "whatlinkshere-hideimages": "$1 ꯒꯤ ꯐꯥꯏꯜ ꯁꯝꯅꯐꯝ",
        "whatlinkshere-filters": "ꯁꯦꯡꯇꯣꯛꯐꯝ",
-       "ipboptions": "ꯄꯨꯪ ꯲:2 hours,  ꯅꯣꯡꯃ:1 day, ꯅꯨꯃꯤꯠ ꯳ꯅꯤ:3 days, ꯆꯥꯌꯣꯜ ꯱: 1 week, ꯆꯥꯌꯣꯜ ꯲: 2weeks, ꯊꯥ ꯱: 1 month, ꯊꯥ ꯳: 3 months, ꯊꯥ ꯶: 6 months, ꯆꯥꯍꯤ ꯱: 1 year, ꯃꯁꯤꯡꯊꯤꯉꯝꯗꯅ:infinite ‌.",
+       "ipboptions": "2 ꯄꯨꯡ:2 hours,1 ꯅꯨꯃꯤꯠ:1 day,3 ꯅꯨꯃꯤꯠꯁꯤꯡ:3 days,1 ꯆꯥꯌꯣꯜ:1 week,2 ꯆꯥꯌꯣꯜꯁꯤꯡ:2 weeks,1 ꯊꯥ: 1 month,3 ꯊꯥꯁꯤꯡ:3 months,6 ꯊꯥꯁꯤꯡ:6 months,1 ꯆꯥꯍꯤ:1 year,ꯃꯁꯤꯡꯊꯤꯉꯝꯗꯕ:infinite ‌.",
        "infiniteblock": "ꯃꯁꯤꯡ ꯊꯤꯉꯝꯗꯅ",
        "blocklink": "ꯊꯤꯡꯕ",
        "contribslink": "ꯈꯣꯝ",
        "blocklogpage": "ꯆꯪꯁꯤꯟꯕꯥ ꯊꯤꯡꯕꯥ",
        "reblock-logentry": "[[$1]] ꯒꯤ ꯁꯦꯝꯐꯝꯒꯤ ꯑꯍꯣꯡꯕꯗꯨ ꯊꯤꯡꯉꯨ  $2 $3 ꯒꯤ ꯑꯍꯦꯟꯕ ꯃꯇꯝꯒ ꯂꯣꯏꯅꯅ",
+       "block-log-flags-nocreate": "ꯑꯩꯀꯥꯎꯟ ꯁꯦꯝꯕ ꯕꯥꯍꯟꯗꯕ",
        "movelogpage": "ꯂꯣꯒ ꯁꯤ ꯂꯦꯡꯍꯟꯂꯨ",
        "export": "ꯂꯥꯃꯥꯏꯁꯤꯡ ꯄꯨꯊꯣꯛꯈꯣ",
        "thumbnail-more": "ꯆꯥꯑꯣꯍꯟꯕꯥ",
        "file-info-size-pages": "$1 × $2 pixels, ꯐꯥꯏꯜ ꯆꯥꯎꯕꯒꯤ ꯆꯥꯡ: $3, MIME type: $4, $5 {{PLURAL:$5|ꯂꯥꯃꯥꯏ|ꯂꯥꯃꯥꯏꯁꯤꯡ}}",
        "file-nohires": "ꯃꯁꯤꯗꯒꯤ ꯍꯦꯟꯅꯥ ꯁꯦꯡꯕꯥ ꯂꯩꯇꯔꯦ",
        "svg-long-desc": "SVG file, nominally $1 × $2 pixels, file size: $3",
-       "show-big-image": "File Asengba",
+       "show-big-image": "ꯐꯥꯏꯜ ꯑꯁꯦꯡꯕ",
        "show-big-image-preview": "Size of this preview: $1.",
-       "show-big-image-other": "Other {{PLURAL:$2|resolution|resolutions}}: $1.",
+       "show-big-image-other": "ꯑꯇꯩ {{PLURAL:$2|resolution|ꯁꯦꯡꯅ ꯌꯦꯡꯕ ꯌꯥꯕ}}: $1.",
        "show-big-image-size": "$1 × $2 pixels",
        "metadata": "ꯃꯦꯇꯥꯗꯥꯇꯥ",
        "metadata-help": "This file contains additional information, probably added from the digital camera or scanner used to create or digitize it.\nIf the file has been modified from its original state, some details may not fully reflect the modified file.",
        "redirect-revision": "ꯂꯥꯃꯥꯏ ꯑꯃꯨꯧꯍꯟꯅ ꯌꯦꯡꯕ",
        "redirect-file": "ꯐꯥꯏꯜ ꯃꯃꯤꯡ",
        "specialpages": "ꯑꯈꯟꯅꯕ ꯂꯥꯃꯥꯏꯁꯤꯡ",
-       "tag-filter": "[[Special:Tags|Tag]] filter:",
+       "tag-filter": "[[Special:Tags|ꯊꯦꯡꯕ]] ꯁꯦꯡꯇꯣꯛꯄ:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
        "tags-active-yes": "ꯍꯣꯏ",
        "tags-active-no": "ꯅꯠꯇꯦ",
diff --git a/languages/i18n/mnw.json b/languages/i18n/mnw.json
new file mode 100644 (file)
index 0000000..85a4464
--- /dev/null
@@ -0,0 +1,635 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Dr Lotus Black",
+                       "Htawmonzel"
+               ]
+       },
+       "tog-underline": "လေန် မတာပၞောန်သၟဝ်",
+       "tog-hideminor": "ပၞုက် အရာမပလေဝ်ဒါန်လဝ် ကိစ္စဟွံဇၞော် နူကဵု ပြဟ်ဟ်ဏအ်",
+       "tog-hidepatrolled": "ပၞုက် အရာမပလေဝ်ဒါန်လဝ် ကိစ္စဇၞော်ဇၞော် နူကဵု ပြဟ်ဟ်ဏအ်",
+       "tog-hidecategorization": "ပၞုက် အရာမဖျေဟ်ကဏ္ဍ ကုမုက်လိက်",
+       "sunday": "တ္ၚဲအဒိုက်",
+       "monday": "တ္ၚဲစန်",
+       "tuesday": "တ္ၚဲအၚာ",
+       "wednesday": "တ္ၚဲဗုဒ္ဓဝါ",
+       "thursday": "တ္ၚဲအၚာ",
+       "friday": "တ္ၚဲသိုက်",
+       "saturday": "တ္ၚဲသ္ၚိသဝ်",
+       "sun": "အဒိုက်",
+       "mon": "စန်",
+       "tue": "အ္ၚာ",
+       "wed": "ဗုဒ္ဓ",
+       "thu": "ဗြဴ",
+       "fri": "သိုက်",
+       "sat": "သဝ်",
+       "january": "ဇာန်နဝါရဳ",
+       "february": "ဖေဖဝ်ဝါရဳ",
+       "march": "မာတ်",
+       "april": "ဨပြဳ",
+       "may_long": "မေ",
+       "june": "ဂျောန်",
+       "july": "ဂျူလာင်",
+       "august": "အဝ်ဂေတ်",
+       "september": "သေပ်တေမ်ပါ",
+       "october": "အံက်တဝ်ပါ",
+       "november": "နဝ်ဝေမ်ပါ",
+       "december": "ဒဳဇြေန်ပါ",
+       "january-gen": "ဇာန်နဝါရဳ",
+       "february-gen": "ဖေဖဝ်ဝါရဳ",
+       "march-gen": "မာတ်",
+       "april-gen": "ဨပြဳ",
+       "may-gen": "မေ",
+       "june-gen": "ဂျန်",
+       "july-gen": "ဂျူလာင်",
+       "august-gen": "အဝ်ဂေတ်",
+       "september-gen": "သေပ်တေမ်ပါ",
+       "october-gen": "အံက်တဝ်ပါ",
+       "november-gen": "နဝ်ဝေမ်ပါ",
+       "december-gen": "ဒဳဇြေန်ပါ",
+       "jan": "ဇာန်နဝါရဳ",
+       "feb": "ဖေ",
+       "mar": "မာတ်",
+       "apr": "ဨ",
+       "may": "မေ",
+       "jun": "ဂျန်",
+       "jul": "ဂျူ",
+       "aug": "အဝ်",
+       "sep": "သေတ်",
+       "oct": "အံက်",
+       "nov": "နဝ်",
+       "dec": "ဒဳ",
+       "pagecategories": "{{PLURAL:$1|ကဏ္ဍ|ကဏ္ဍဂမၠိုင်}}",
+       "category_header": "မုက်လိက်ဂမၠိုင် ပ္ဍဲ ကဏ္ဍ \"$1\"",
+       "subcategories": "ကဏ္ဍလစှ်ေဂမၠိုင်",
+       "category-media-header": "မဳဒဳယာ စပ်ကဵု ကဏ္ဍ \"$1\"",
+       "category-empty": "<em>ကဏ္ဍဏအ် ပြဟ်ဟ်ဏအ် ဟွံမဲ ကု မုက်လိက် ဟွံသေင်မ္ဂး ပရူမွဲမွဲဏီရ</em>",
+       "hidden-categories": "{{PLURAL:$1|ကဏ္ဍ မပၞုက်|ကဏ္ဍ မပၞုက်ဂမၠိုင်}}",
+       "category-subcat-count": "{{PLURAL:$2|ကဏ္ဍဏအ်ဂှ် ကဏ္ဍလစှ်ေ နွံဆ အတိုင်ဗွဲသၟဝ်ဝွံရ၊၊|ကဏ္ဍဏအ် နွံဆအတိုင် ဗွဲသၟဝ်ဝွံရ၊၊ {{PLURAL:$1|ကဏ္ဍလစှ်ေ|$1 ကဏ္ဍလစှ်ေဂမၠိုင်}}, ပၞောဝ်ကဵု $2 သီုဖအိုတ်}}",
+       "category-article-count": "{{PLURAL:$2|ကဏ္ဍဏအ် နွံဆၜိုတ် အတိုင်ဗွဲသၟဝ်ဏအ်ရ.| ဗွဲသၟဝ်ဏအ်ဂှ် {{PLURAL:$1| ဒှ်လၟိဟ် မုက်လိက်| ဒှ်လၟိဟ် မုက်လိက်ဂမၠိုင် $1 }} စပ် ကုကဏ္ဍဏအ်ရ၊၊ သီုဖအိုတ် နွံ  $2}}",
+       "category-file-count": "{{PLURAL:$2|ကဏ္ဍဏအ် နွံဆၜိုတ် ဝှာင်|အတိုင် ဗွဲသၟဝ်ဏအ်ရ {{PLURAL:$1|ဝှာင် ဂှ်|$1 ဝှာင်တအ် ဂှ်}} ပ္ဍဲကဏ္ဍဏအ် သီုဖအိုတ် နွံ $2 ၊၊}}",
+       "listingcontinuesabbrev": "ဆက်",
+       "noindex-category": "မုက်လိက် မသက္ကုလိက်",
+       "broken-file-category": "မုက်လိက် နကဵုလေန် ဝှာင်မလီုလာ်ဂမၠိုင်",
+       "about": "ပရူ",
+       "newwindow": "(ပံက် ပ္ဍဲ မုက်ဗတင် တၟိ)",
+       "cancel": "တးပဲါ",
+       "mytalk": "ဓရီုကျာ",
+       "navigation": "သ္ၚိအင်",
+       "and": "&#32; ကေုာံ",
+       "namespaces": "ဒၞာဲယၟု",
+       "variants": "မူတၞဟ်",
+       "navigation-heading": "သ္ၚိအင် မေန်နူ",
+       "returnto": "ကလေင်အာ ဇရေင် $1",
+       "tagline": "နူ {{SITENAME}}",
+       "help": "ရီု",
+       "search": "ဂၠာဲ",
+       "searchbutton": "ဂၠာဲ",
+       "searcharticle": "အာ",
+       "history": "ဝှာင် လၟေင်အပြံင်အလှာဲ",
+       "history_short": "အရာမဗှ်လဝ်တုဲ",
+       "printableversion": "မူလိက် မပြေန်ပ္တိတ်ဂွံ",
+       "permalink": "ဌာန်ဒတန်လေန် လၟိုန်",
+       "view": "ဗဗဵု",
+       "view-foreign": "ဗဵု ပ္ဍဲ $1",
+       "edit": "ပလေဝ်ဒါန်",
+       "create": "ခၞံကၠောန်",
+       "create-local": "စုတ် ပရူပရာဒေသ",
+       "delete": "ပလီု",
+       "newpage": "မုက်လိက် တၟိ",
+       "talkpagelinktext": "ဓရီုကျာ",
+       "personaltools": "ကြိယာ သွက်ပူဂဵု",
+       "talk": "သဳကၠဳ",
+       "views": "ထ္ၜး",
+       "toolbox": "ကြိယာ",
+       "otherlanguages": "နကဵု အရေဝ်ဘာသာ တၞဟ်",
+       "redirectedfrom": "(ကလေင်ထ္ၜး နူ $1)",
+       "redirectpagesub": "မုက်လိက် ကလေင်ပညုင်",
+       "redirectto": "ကလေင်စၞောန်ပညုင်လဝ် နူကဵု-",
+       "lastmodifiedat": "မုက်လိက်ဏအ် လက္ကရဴအိုတ် ပလေဝ်ဒါန်လဝ် ပ္ဍဲ $1 ပ္ဍဲ $2",
+       "jumpto": "ဒံင် လုပ်",
+       "jumptonavigation": "သ္ၚိအင်",
+       "jumptosearch": "ဂၠာဲ",
+       "aboutsite": "ပရူ {{SITENAME}}",
+       "aboutpage": "Project:ပရူ",
+       "copyright": "လိက်ဂှ် မံက် ပ္ဍဲ $1 ယဝ်ရတင်ယောင်ယာ မွဲမွဲ ဟွံမွဲမ္ဂး၊၊",
+       "copyrightpage": "{{ns:project}}:Copyrights",
+       "currentevents": "သဘင် လၟုဟ်ဂမၠိုင်",
+       "currentevents-url": "Project:သဘင် လၟုဟ်ဂမၠိုင်",
+       "disclaimers": "ဒဒှ်မဟွံဆက်စပ်",
+       "disclaimerpage": "Project:ဒဒှ်မဟွံဆက်စပ် နာနာ",
+       "edithelp": "အရီုအဗင် ပ္ဍဲအရာမပလေဝ်ဒါန်",
+       "mainpage": "မုက်လိက်တမ်",
+       "mainpage-description": "မုက်လိက်တမ်",
+       "portal": "ပါင်မုက် ဂကောံ",
+       "portal-url": "Project:ပါင်မုက် ဂကောံ",
+       "privacy": "ပဝ်လသဳ မဆေင်ကဵု အခေါင်အရာပူဂဵု",
+       "privacypage": "Project:ပဝ်လသဳ အခေါင်ပူဂဵု",
+       "retrievedfrom": "ကလေင်သီကေတ်လဝ် နူ \"$1\"",
+       "youhavenewmessages": "{{PLURAL:$3|မၞး ကလိဂွံ}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|မၞး ကလိဂွံ}} $1 နူ {{PLURAL:$3| မဒှ် ညးလွပ်တၞဟ်မွဲ|$3 ညးလွပ်ဂမၠိုင်}} ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|ပရိုင်မေတ်သုက် တၟိ|999=ပရိုင်မေတ်သုက်တၟိဂမၠိုင်}}",
+       "newmessagesdifflinkplural": "လက္ကရဴအိုတ် {{PLURAL:$1|အပြံင်အလှာဲ|999=အပြံင်အလှာဲဂမၠိုင်}}",
+       "editsection": "ပလေဝ်ဒါန်",
+       "editold": "ပလေဝ်ဒါန်",
+       "viewsourceold": "ထ္ၜး တမ်ရိုဟ်",
+       "editlink": "ပလေဝ်ဒါန်",
+       "viewsourcelink": "ထ္ၜး တမ်ရိုဟ်",
+       "editsectionhint": "ဒၞာဲ မပလေဝ်ဒါန် - $1",
+       "toc": "မာတိကာ",
+       "site-atom-feed": "$1 ဒၞာဲ ဗလးပတိတ်",
+       "page-atom-feed": "\"$1\" ဒၞာဲ ဗလးပတိတ်",
+       "red-link-title": "$1(မုက်လဝ်ဏအ် ဟွံပြာကတ်)",
+       "nstab-main": "မုက်လိက်",
+       "nstab-user": "မုက်လိက် ညးလွပ်",
+       "nstab-special": "မုက်လိက် တၟေင်",
+       "nstab-project": "မုက်လိက် ပရဝ်ဂျေတ်",
+       "nstab-image": "ဝှာင်",
+       "nstab-mediawiki": "ပရိုင်မေတ်သုက်",
+       "nstab-template": "Template",
+       "nstab-category": "ကဏ္ဍ",
+       "mainpage-nstab": "မုက်လိက်တမ်",
+       "nosuchspecialpage": "မုက်လိက် တၟေင် ညံင်ရဴဏအ် ဟွံမဲ",
+       "nospecialpagetext": "<strong>မၞး အာတ်မိက်လဝ် မုက်လိက်တၟေင် မဟွံမဲမွဲရ၊၊</strong>\n\nစရင် မုက်လိက်တၟေင် မနွံတအ်ဂှ် ဂွံဆဵုကေတ် ပ္ဍဲ [[Special:SpecialPages|{{int:specialpages}}]].",
+       "badtitle": "က္ဍိုပ်လိက် ဟွံခိုဟ်",
+       "badtitletext": "မုက်လိက် မအာတ်မိက်လဝ်ဂှ် ဟွံသၟဟ်အစောမ်၊ သၠာတ်သၠးဒၟံင် ဟွံသေင်မ္ဂး ဆက်စၠောအ်လေန်လဝ် ကုအရေဝ်ဘာသာနာနာ ဟွံသေင်မ္ဂး က္ဍိုပ်လိက် အပ္ဍဲအကြာဝဳကဳ ဟွံဒးရ၊၊\nဟိုတ်နူ စကာလဝ် မလိက် နဒဒှ်က္ဍိုပ်လိက်ဟွံဂွံ ပါလုပ်ဒၟံင် မွဲမ ဟွံသေင်မ္ဂး မဂၠိုင် ကုမ လေဝ် ဒှ်မာန်ရ၊၊",
+       "viewsource": "ထ္ၜး တမ်ရိုဟ်",
+       "viewsource-title": "ဗဵု တမ်ရိုဟ် သွက် $1",
+       "viewsourcetext": "မၞး ဗဵု ကေုာံ စၠောအ်ကပ်ပဳကေတ် တမ်ရိုဟ် မုက်လိက်ဏအ် ဂွံရ၊၊",
+       "userlogin-yourname": "ယၟုညးလွပ်",
+       "userlogin-yourname-ph": "စုတ် ယၟုညးလွပ်",
+       "userlogin-yourpassword": "မလိက်ပၞုက်",
+       "userlogin-yourpassword-ph": "စုတ် မလိက်ပၞုက် မၞးညိ",
+       "createacct-yourpassword-ph": "စုတ် မလိက်ပၞုက် မွဲညိ",
+       "createacct-yourpasswordagain": "ပဒတန် မလိက်ပၞုက်ညိ",
+       "createacct-yourpasswordagain-ph": "စုတ် မလိက်ပၞုက် မွဲဝါပၠန်ညိ",
+       "userlogin-remembermypassword": "လုပ်လံက်အေန်လဝ် အဲညိ၊၊",
+       "login": "လုပ်လံက်အေန်",
+       "userlogin-noaccount": "ဟွံကလိဂွံ အကံက်ဏီ?",
+       "userlogin-joinproject": "လုပ်ပံင်တောဲ {{SITENAME}}",
+       "createaccount": "ခၞံကၠောန် အကံက်",
+       "userlogin-resetpassword-link": "ဝိုတ်စ မလိက်ပၞုက် မၞးဟာ?",
+       "userlogin-helplink2": "အရီုအဗင် သွက်ဂွံ လုပ်လံက်အေန်",
+       "createacct-emailoptional": "ဌာန်ဒၟံင် အဳမေဝ် (သ္ဒးစုတ်ဟေင်)",
+       "createacct-email-ph": "စုတ် ဌာန်ဒၟံင် အဳမေဝ် မၞးညိ",
+       "createacct-submit": "ခၞံကၠောန် အကံက် မၞးညိ",
+       "createacct-benefit-heading": "{{SITENAME}} ဂှ် ကၠောန်လဝ် နကဵု မၞိဟ် ညံင်ရဴမၞးကီုရ၊၊",
+       "createacct-benefit-body1": "{{PLURAL:$1|တင်ပလေဝ်ဒါန်|တင်ပလေဝ်ဒါန်ဂမၠိုင်}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|မုက်လိက်|မုက်လိက်ဂမၠိုင်}}",
+       "createacct-benefit-body3": "ခြာဟွံလအ် {{PLURAL:$1|ညးမခၞံကၠောန်|ညးမခၞံကၠောန်ဂမၠိုင်}}",
+       "loginlanguagelabel": "အရေဝ်ဘာသာ- $1",
+       "pt-login": "လုပ်လံက်အေန်",
+       "pt-login-button": "လုပ်လံက်အေန်",
+       "pt-createaccount": "ခၞံကၠောန် အကံက်",
+       "pt-userlogout": "တိတ်",
+       "passwordreset": "ကလေင်စုတ် မလိက်ပၞုက်",
+       "bold_sample": "မလိက် တီု",
+       "bold_tip": "မလိက် တီု",
+       "italic_sample": "မလိက်ဓစေင်",
+       "italic_tip": "မလိက်ဓစေင်",
+       "link_sample": "လေန် က္ဍိုပ်လိက်",
+       "link_tip": "လေန် ဗွဲအပ္ဍဲ",
+       "extlink_sample": "http://www.example.com လေန် က္ဍိုပ်လိက်",
+       "extlink_tip": "လေန် ဗွဲမ္ၚး (remember http:// prefix)",
+       "headline_sample": "မလိက် က္ဍိုပ်လိက်",
+       "headline_tip": "က္ဍိုပ်လိက် ကဆံင် ၂",
+       "nowiki_sample": "စုတ် မလိက် ဟွံ-ဖျေဟ်ဗီုပြင်ဏီ ပ္ဍဲဒၞာဲဏအ်",
+       "nowiki_tip": "Ignore wiki formatting",
+       "image_tip": "Embedded file",
+       "media_tip": "လေန် ဝှာင်",
+       "sig_tip": "စၟတ်တဲ မၞး နကဵု တဆိပ်အခိင်",
+       "hr_tip": "လာင် ဗွဲလနေင်",
+       "summary": "သကေမ်",
+       "minoredit": "ဣဏအ်ဂှ် ဒှ်အရာ မပလေဝ်ဒါန် ညိည",
+       "watchthis": "မင်မဲ မုက်လိက်ဏအ်",
+       "savearticle": "ဂိုင်သိပ် မုက်လိက်",
+       "preview": "ကိုပ်ဗဗဵု",
+       "showpreview": "ထ္ၜး ကိုပ်ဗဗဵု",
+       "showdiff": "ထ္ၜး အရာမပြံင်လှာဲ",
+       "anoneditwarning": "<strong>သတိ</strong> မၞး ဟွံဂွံ လုပ်လံက်အေန်လဝ်ရ၊၊ IP address မၞး မံက်ဒၟံင်ရောင် ယဝ်ရ မၞးကၠောန်သ္ပ ပရေင်ပလေဝ်ပလေတ်မွဲမွဲမ္ဂး၊၊ ယဝ်ရ <strong>[$1 လုပ်လံက်အေန်]</strong> ဟွံသေင်မ္ဂး <strong>[$2 ခၞံကၠောန် အကံက်မွဲ]</strong>မ္ဂး၊ ပရေင်ပလေဝ်ဒါန်မၞး တြးပတိတ် နကဵု ယၟုသုင်စောဲ မၞးရောင်၊၊",
+       "blockedtext": "<strong>ယၟုညးလွပ် ဟွံသေင်မ္ဂး ဌာန်ဒၟံင်အာင်ဒဳမၞး ဒးဒုင်ကၟာတ်စဵုဒၞာလဝ်</strong>\n\nပွမကၟာတ်စဵုဒၞာဂှ် ကၠောန်လဝ် နကဵု $1.\nဟိုတ်မဂွံကၟာတ်စဵုဒၞာဂှ် <em>$2</em>.\n\n* အခိင်မစကၟာတ်စဵုဒၞာ- $8\n* အခိင်မကၟာတ်စဵုဒၞာအိုတ်- $6\n* မရန်တၟအ် blockee- $7\n\nမၞး ဆက်ကဵု $1 ဟွံသေင်မ္ဂး ညးတၞဟ်သအာင် [[{{MediaWiki:Grouppage-sysop}}|administrator]] ယဝ်ရ မိက်ဂွံ ပတိုန်ဂလာန် စပ်ကဵု မဒးဒုင်ကၟာတ်စဵုဒၞာဂှ်ဂွံရ၊၊\nမၞး စကာ အဳမေလ် \"{{int:emailuser}}\" ဟွံဂွံရ၊၊ ဆဂး ယဝ်ရ ဌာန်ဒၟံင်အဳမေလ်ဂှ် ဒှ်အရာတၟေင် ပ္ဍဲ [[Special:Preferences|account preferences]] မၞး ကေုာံ မၞးဟွံဒးဒုင် ကၟာတ်စဵုဒၞာလဝ် နကဵုအဳမေဝ်ဂှ်မ္ဂး ဂွံမာန်ရ၊၊\nIP address မၞး လၟုဟ်ဂှ် ဒှ် $3, တုဲ ID မဒးဒုင်ကၟာတ်စဵုဒၞာဂှ် ဒှ် #$5 ရ၊၊ \nယဝ်ရ မၞးမိက်ဂွံ သၟာန်မ္ဂး တင်ဂၞင် ဗွဲလတူတအ် သီုဖအိုတ်ဂှ် ဗၟံက်ထ္ၜးကဵုညိ၊၊",
+       "loginreqlink": "လုပ်လံက်အေန်",
+       "newarticletext": "မၞး စိုပ်အာ ဇရေင် မုက်လိက်လေန် မဟွံဂွံကၠောန်လဝ်ဏီရ၊၊\nသွက်ဂွံ ခၞံကၠောန် မုက်လိက်ဏအ်ဂှ် ပ္ဍဲခံက်အင် ဗွဲသၟဝ်ဏအ်ဂှ် စတက်စုတ် မလိက်ညိ\n(မိက်ဂွံ ဆက်တီ ပရူဏအ်မ္ဂး ဆက်ကျောဝ် ပ္ဍဲ[$1မုက်လိက်အရီုအဗင်]ညိ)။ ဟိုတ်နူဗၠေတ်တုဲ မၞး စိုပ်ကၠုင် ပ္ဍဲဒၞာဲဏအ်မ္ဂး ဍဵု <strong>back</strong> တုဲ ကလေင်အာ ဒၞာဲတြေံညိ၊၊",
+       "anontalkpagetext": "----\n<em>မုက်လိက်ဏအ်ဂှ် ဒှ်ဒၞာဲ သွက်မၞိဟ် မဟွံဗမံက်ယၟု၊ မၞိဟ်ဟွံဂွံကၠောန်လဝ် အကံက်တအ်ဏီ ဂွံပတိုန်လညာတ် ပါ်ပဲါရ၊၊</em>\nဟိုတ်ဂှ်ရ ပိုယ်ဒးစကာ မဂၞန် IP address သွက်ဂွံ တီညးတအ်ရ၊၊ IP address ဗီုဏအ်မွဲမွဲဂှ် ပါ်ပရအ်ဂွံ ညးလွပ် ဗွဲမဂၠိုင်ရ၊၊ ယဝ်ရ မၞးဂှ် ဒှ်ညးလွပ် မဟွံဗမံက်ယၟုမွဲ စှ်ေစိုတ် တင်ဂလာန်တအ်ဏအ်ဂှ် ဒှ်ဟွံထေက်မ္ဂး ပဂုန်တုဲ [[Special:CreateAccount|ခၞံကၠောန် အကံက်မွဲ]] ဟွံသေင်မ္ဂး [[Special:UserLogin|လုပ်လံက်အေန်]] သွက်ဂွံ ဝေင်ပဲါ ညးလွပ် မဟွံဗမံက်ယၟုတအ်တၞဟ်တအ်ရ၊၊",
+       "noarticletext": "ပ္ဍဲမုက်လိက်ဏအ် လိက်ဟွံမွဲဏီရ၊၊\nမၞး ဂၠာဲကေတ်  [[Special:Search/{{PAGENAME}}|search for this page title]] ပ္ဍဲမုက်လိက်တၞဟ်မ္ဂး ကလိဂွံမာန်ရောင်၊၊\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nဟွံသေင်မ္ဂး  [{{fullurl:{{FULLPAGENAME}}|action=edit}} ခၞံကၠောန် လိက်မုက်ဏအ်ညိ၊၊]</span>.",
+       "noarticletext-nopermission": "ပ္ဍဲမုက်လိက်ဏအ် လိက်ဟွံမဲဏီရ၊၊ မၞး ဂၠာဲကေတ် [[Special:Search/{{PAGENAME}}|search for this page title]] ပ္ဍဲမုက်လိက်တၞဟ်၊ဟွံသေင်မ္ဂး ကလိဂွံမာန်ရ၊၊ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>, ဆဂး မၞးအခေါင် ခၞံကၠောန် မုက်လိက်ဏအ် ဟွံမဲ၊၊",
+       "userpage-userdoesnotexist-view": "အကံက် ညးလွပ် \"$1\" ဂှ် ဟွံဂွံပၠောပ်လဝ် စရင်၊၊",
+       "clearyourcache": "<strong>Note:</strong> After saving, you may have to bypass your browser's cache to see the changes.\n* <strong>Firefox / Safari:</strong> Hold <em>Shift</em> while clicking <em>Reload</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> on a Mac)\n* <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)\n* <strong>Internet Explorer:</strong> Hold <em>Ctrl</em> while clicking <em>Refresh</em>, or press <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Go to <em>Menu → Settings</em> (<em>Opera → Preferences</em> on a Mac) and then to <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
+       "previewnote": "<strong>မုက်ဏအ်ဂှ် ဆကိုပ်ဗဗဵုဟေင်ရောင်ဂှ် ကဵုဂွံသတိညိ</strong>\nအရာမၞး မပြံင်လှာဲလဝ်တအ်ဂှ် ဟွံဂွံ ဂိုင်သိပ် ဏီရ!",
+       "continue-editing": "အာ ဇရေင် ဒၞာဲမပလေဝ်ဒါန်",
+       "editing": " $1 ပလေဝ်ဒါန်ဒၟံင်",
+       "creating": "မခၞံကၠောန်ဒၟံင် $1",
+       "editingsection": "ပလေဝ်ဒါန်ဒၟံင် (ဒကုတ်) $1",
+       "templatesused": "{{PLURAL:$1|Template|Templates}} မသုင်စောဲ ပ္ဍဲ မုက်လိက်ဏအ်:",
+       "templatesusedpreview": "{{PLURAL:$1|Template|Templates}} မစကာလဝ် ပ္ဍဲကိုပ်ဗဗဵုဏအ်-",
+       "template-protected": "(စဵုဒၞာလဝ်)",
+       "template-semiprotected": "(မစဵုဒၞာလဝ်-ကဝက်)",
+       "hiddencategories": "မုက်လိက်ဏအ်ဂှ် ဒှ်ဂကောံ ကု{{PLURAL:$1|1 hidden category|$1 hidden categories}}:",
+       "permissionserrors": "တင်သၠးအခေါင် ဗၠေတ်",
+       "permissionserrorstext-withaction": "မၞး ဟွံကလိဂွံလဝ် အခေါင် သွက် $2, အတိုင်ဗွဲသၟဝ်ဏအ်ရ၊၊ {{PLURAL:$1|ဟိုတ်|ဟိုတ်ဂမၠိုင်}}:$1",
+       "recreate-moveddeleted-warn": "<strong>သတိ - မုက်လိက် မဒးဒုင်ပလီုလဝ်တုဲ ခြာဟွံလအ်ဂှ် မၞး ကလေင်ခၞံကၠောန်ဒၟံင်ရ၊၊</strong>\nမုက်လိက်ဂှ် မၞးကလေင်ပလေဝ်ဒါန်ကၠောန် ထေက် ဟွံထေက်ဂှ် မၞးထေက် ကဵုဒးဗစာရဏာရ၊၊\n\nသွက်မၞး ဂွံဆဵုကေတ်မာန်ဂှ် တင်စၟတ်သမ္တီ ဒဒှ်မပလီု ကေုာံ မပြံင်ပဆုဲတအ်ဂှ် ထ္ၜးကဵုလဝ် ပ္ဍဲဒၞာဲဏအ်ရ၊၊",
+       "moveddeleted-notice": "မုက်လိက်ဏအ် ဒးဒုင် ပလီုထောအ်လဝ်ရ၊၊\nတင်စၟတ်သမ္တီ အရာမပလီု၊ မစဵုဒၞာ၊ မပြံင်လဝ် မုက်လိက်တအ်ဂှ် ဗၟံက်ထ္ၜးလဝ် ဗွဲသၟဝ်ဏအ် သွက်ဂွံနိဿဲ၊၊",
+       "content-model-wikitext": "ဖျုန်လိက်ဝဳကဳ",
+       "undo-failure": "ပရေင်ပလေဝ်ဒါန်ဂှ် ပတုဲဟွံဂွံ ဟိုတ်တုန် ဒၟာနူ မၞုံ ကုအခက်အခုဲ ပရေင်ပလေဝ်ဒါန် ဗွဲအပ္ဍဲ၊၊",
+       "viewpagelogs": "ဗဵု တင်စၟတ်သမ္တီ မုက်လိက်ဏအ်",
+       "currentrev-asof": "မူမဒါန်လဝ် လက္ကရဴအိုတ် နကဵု $1",
+       "revisionasof": "မူလိက်မပလေဝ်လဝ် နဒဒှ် $1",
+       "revision-info": "မူပလေဝ်ဒါန်လဝ် ပ္ဍဲ စၟတ်တ္ၚဲ နကဵု {{GENDER:$6|$2}}$7",
+       "previousrevision": "← မူလိက်မပလေဝ်လဝ် တြေံ",
+       "nextrevision": "မူမဒါန်လဝ် တၟိနူဂှ် →",
+       "currentrevisionlink": "မူမဒါန်လဝ် လက္ကရဴအိုတ်",
+       "cur": "ပစ္စုပ္ပန်",
+       "last": "ကိုပ်ဗဗဵု",
+       "histlegend": "တၞဟ်န ဂွံပတောအ်ၜတ် အကြာမူမပလေဝ်ဒါန်လဝ်တအ်ဂှ် ကဵုစၟတ် ပ္ဍဲခံက်အင်ရေဒဳယော radio boxes တုဲ ဍဵုenter ဟွံသေင်မ္ဂး ဍဵု ကောန်ဍေင် သၟဝ်ဂှ်ညိ၊၊ <br />Legend: <strong>({{int:cur}})</strong> = အရာမတၞဟ်ခြာ ကုမူလက္ကရဴအိုတ် <strong>({{int:last}})</strong> = အရာမတၞဟ်ခြာ ကုမူကၠာနူဂှ်၊၊ <strong>{{int:minoreditletter}}</strong> = မပလေဝ်ဒါန်လဝ် ညိည၊၊",
+       "history-fieldset-title": "ဂၠာဲ မူတြေံဂမၠိုင်",
+       "histfirst": "တြေံအိုတ်",
+       "histlast": "တၟိအိုတ်",
+       "history-feed-title": "လၟေင်အပြံင်အလှာဲ မူလိက်",
+       "history-feed-description": "လၟေင်အပြံင်အလှာဲ မပလေဝ်ဒါန်လဝ် ပ္ဍဲမုက်လိက်ဏအ် ပ္ဍဲကဵု ဝဳကဳ",
+       "history-feed-item-nocomment": "$1 ပ္ဍဲ $2",
+       "rev-delundel": "ပြံင်လှာဲ ဗီုပြင်မဂွံညာတ်ကေတ်",
+       "mergelog": "တင်စၟတ်သမ္တီ အရာမပံင်ပကောံလဝ်",
+       "history-title": "လၟေင်အပြံင်အလှာဲ မူမပလေဝ်ဒါန်လဝ် \"$1\"",
+       "difference-title": "အရာမတၞဟ်ခြာ အကြာ မူတၞဟ်ဂမၠိုင် \"$1\"",
+       "lineno": "လာင် $1-",
+       "compareselectedversions": "ၜတ်ကၞာတ် မူတၞဟ်ခြာ မရုဲစှ်လဝ်ဂမၠိုင်",
+       "editundo": "ဟွံပ",
+       "diff-empty": "(ဟွံ တၞဟ်ခြာ)",
+       "diff-multi-sameuser": "({{PLURAL:$1|မူတၞဟ် မၞုံအကြာ မွဲ|$1 မူတၞဟ် မၞုံအကြာဂမၠိုင်}} မခၞံကၠောန်လဝ် နကဵု ညးလွပ် တုပ်ပ်တအ်ဂှ် ဟွံထ္ၜးလဝ်ရ၊၊)",
+       "diff-multi-otherusers": "({{PLURAL:$1|မူတၞဟ် မၞုံအကြာ မွဲ|$1 မူတၞဟ် မၞုံအကြာဂမၠိုင်}} မခၞံကၠောဝန်လဝ် နကဵု{{PLURAL:$2|ညးလွပ်တၞဟ် မွဲ|$2 ညးလွပ်တၞဟ်ဂမၠိုင်}}ဂှ် ဟွံထ္ၜးလဝ်ရ၊၊)",
+       "searchresults": "သွဟ် မဂၠာဲ",
+       "searchresults-title": "သွဟ် မဂၠာဲ သွက် \"$1\"",
+       "prevn": "ကၠာ {{PLURAL:$1|$1}}",
+       "nextn": "ဂတ {{PLURAL:$1|$1}}",
+       "prevn-title": "မတုဲကၠုင် $1 {{PLURAL:$1|သွဟ်|သွဟ်ဂမၠိုင်}}",
+       "nextn-title": "ဆက်တုဲ $1 {{PLURAL:$1|သွဟ်|သွဟ်ဂမၠိုင်}}",
+       "shown-title": "ထ္ၜး $1 {{PLURAL:$1|သွဟ်|သွဟ်ဂမၠိုဟ်}} နကဵု မုက်လိက်",
+       "viewprevnext": "ဗဗဵု ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-exists": "<strong>မုက်လိက် ယၟု\"[[:$1]]\" မွဲ ပ္ဍဲဝဳကဳ၊၊</strong> {{PLURAL:$2|0=|ရံင် ပ္ဍဲသွဟ် မဂၠာဲဆဵု တၞဟ်တအ်ကီုညိ၊၊}}",
+       "searchmenu-new": "<strong>ခၞံကၠောန် မုက်လိက်ဏအ်  \"[[:$1]]\" ပ္ဍဲဝဳကဳ!</strong> {{PLURAL:$2|0=|ကျောဝ် သီုကဵု မုက်လိက် မဂွံဆဵုကေတ် အတိုင်မၞးမဂၠာဲ| ကျောဝ် သီုကဵု သွဟ် မကလိဂွံ နူကဵု မဂၠာဲသ္ၚေဝ်}}",
+       "searchprofile-articles": "မုက်လိက် မာတိကာဂမၠိုင်",
+       "searchprofile-images": "မဳဒဳယာနာနာ",
+       "searchprofile-everything": "ဇၟာပ်ပ်အရာ",
+       "searchprofile-advanced": "ဆက်ဂၠာဲ",
+       "searchprofile-articles-tooltip": "ဂၠာဲ ပ္ဍဲ $1",
+       "searchprofile-images-tooltip": "ဂၠာဲ ဝှာင်",
+       "searchprofile-everything-tooltip": "ဂၠာဲ လိက် သီုဖအိုတ် (သီုကဵု နူ မုက်လိက်ဓရီုကျာ)",
+       "searchprofile-advanced-tooltip": "ဂၠာဲ ပ္ဍဲ ဒၞာဲယၟု",
+       "search-result-size": "$1 ({{PLURAL:$2|1 မလိက်|$2 မလိက်ဂမၠိုင်}})",
+       "search-result-category-size": "{{PLURAL:$1|1 ကောန်ဂကောံ|$1 ကောန်ဂကောံဂမၠိုင်}} ({{PLURAL:$2|1 ကဏ္ဍလစှ်ေ|$2 ကဏ္ဍလစှ်ေဂမၠိုင်}}, {{PLURAL:$3|1 ဝှာင်|$3 ဝှာင်ဂမၠိုင်}})",
+       "search-redirect": "(ကလေင်ထ္ၜး နူ $1)",
+       "search-section": "(သကုတ် $1)",
+       "search-file-match": "(ဝှာင် မကိတ်ညဳ ကုပရူပရာ)",
+       "search-suggest": "မၞး မိက်ဂွံဟီုဂှ် - $1",
+       "searchall": "သီုဖအိုတ်",
+       "search-showingresults": "{{PLURAL:$4|သွဟ် <strong>$1</strong> ကု <strong>$3</strong>|သွဟ်ဂမၠိုင်<strong>$1 – $2</strong> ကု <strong>$3</strong>}}",
+       "search-nonefound": "အရာမဂၠာဲသ္ၚေဝ်တအ်ဂှ် ဟွံဂွံဆဵုကေတ်",
+       "mypreferences": "မဒးဂၞပ်စိုတ်",
+       "group-bot": "ဗောတ်ဂမၠိုင်",
+       "group-sysop": "မၞိဟ်မကောပ်ကာဲဂမၠိုင်",
+       "grouppage-bot": "{{ns:project}}:ဗောတ်ဂမၠိုင်",
+       "grouppage-sysop": "{{ns:project}}:မၞိဟ်မကောပ်ကာဲဂမၠိုင်",
+       "right-writeapi": "အခေါင်အရာ ညးမချူ API",
+       "newuserlogpage": "စၟတ်သမ္တီ ညးလွပ် မခၞံကၠောန်လဝ်",
+       "rightslog": "တင်စၟတ်သမ္တီ အခေါင်အရာ ညးလွပ်",
+       "action-edit": "ပလေဝ်ဒါန် မုက်လိက် ဏအ်",
+       "action-createaccount": "ခၞံကၠောန် အကံက် ညးလွပ်ဏအ်",
+       "enhancedrc-history": "လၟေင်မပြံင်လှာဲလဝ်",
+       "recentchanges": "မပပြံင်လှာဲ လၟုဟ်",
+       "recentchanges-legend": "အရာမရုဲစှ် မပြံင်လှာဲ ပြဟ်ဟ်ဏအ်",
+       "recentchanges-summary": "ကလေင်သ္ၚေဝ်မဲ အရာမပြံင်လှာဲ ဂၠိုင်အိုတ် ပ္ဍဲ ဝဳကဳ ပ္ဍဲမုက်လိက်ဏအ်၊၊",
+       "recentchanges-noresult": "အပ္ဍဲ အပိုင်အခြာအခိင် မကဵုလဝ်ဂှ် ပရေင်ပြံင်လှာဲ မကိတ်ညဳ ကုကဆံင်မပိုင်ခြာလဝ် ဟွံမဲ၊၊",
+       "recentchanges-feed-description": "ကလေင်သ္ၚေဝ်မဲ အရာမပြံင်လှာဲ ဂၠိုင်အိုတ် ပ္ဍဲ ဝဳကဳ ပ္ဍဲ feed ဏအ်၊၊",
+       "recentchanges-label-newpage": "ပလေဝ်ဒါန်ဏအ် ခၞံဗဒှ်လဝ် မုက်လိက်တၟိ",
+       "recentchanges-label-minor": "ဣဏအ်ဂှ် ဒှ်အရာ မပလေဝ်ဒါန် ညိည",
+       "recentchanges-label-bot": "ပရေင်ပလေဝ်ပလေတ်ဏအ် ကၠောန်လဝ် နကဵု စက်ဗန်",
+       "recentchanges-label-unpatrolled": "အရာပလေဝ်ဒါန်ဏအ်ဂှ် ဟွံဂွံ စၟဳစၟတ်ဏီ",
+       "recentchanges-label-plusminus": "ဇမၞော် မုက်လိက်ဏအ် သၠာဲအာ နကဵု လၟိဟ်လျိုင်ဗာက်",
+       "recentchanges-legend-heading": "<strong>Legend:</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (also see [[Special:NewPages|list of new pages]])",
+       "rcfilters-filter-user-experience-level-registered-description": "လော့အင် ဝင်ထားသော တည်းဖြတ်သူများ",
+       "rcfilters-filter-user-experience-level-unregistered-description": "လော့အင် မဝင်ထားသော တည်းဖြတ်သူများ",
+       "rcfilters-filter-minor-label": "အသေးစား တည်းဖြတ်မှုများ",
+       "rcfilters-filtergroup-changetype": "ပြောင်းလဲမှု အမျိုးအစား",
+       "rcfilters-filter-pageedits-label": "စာမျက်နှာ တည်းဖြတ်မှုများ",
+       "rcnotefrom": "ဗွဲသၟဝ်ဝွံ {{PLURAL:$5|ဒှ် အရာမပြံင်လှာဲ|ဒှ် အရာမပြံင်လှာဲဂမၠိုင်}} စနူ<strong>$3, $4</strong> (စဵုကဵု <strong>$1</strong> ဂှ် ထ္ၜးလဝ်ရ)၊၊",
+       "rclistfrom": "ထ္ၜး အရာမပြံင်လှာဲတၟိတၟိ စနူ $2, $3",
+       "rcshowhideminor": "$1 ပလေဝ်ဒါန်လဝ် ညိည",
+       "rcshowhideminor-show": "ထ္ၜး",
+       "rcshowhideminor-hide": "ဗဒန်",
+       "rcshowhidebots": "$1 bots",
+       "rcshowhidebots-show": "ထ္ၜး",
+       "rcshowhidebots-hide": "ဗဒန်",
+       "rcshowhideliu": "$1 ညးလွပ် မစၟတ်သမ္တီလဝ်တုဲဂမၠိုင်",
+       "rcshowhideliu-show": "ထ္ၜး",
+       "rcshowhideliu-hide": "ဗဒန်",
+       "rcshowhideanons": "$1 ညးလွပ် ဟွံဗမံက်ယၟု",
+       "rcshowhideanons-show": "ထ္ၜး",
+       "rcshowhideanons-hide": "ဗဒန်",
+       "rcshowhidepatr": "$1 သွက်ဂွံ ပလေဝ်ဒါန်မင်မဲ",
+       "rcshowhidemine": "$1 ပလေဝ်ဒါန်လဝ် နကဵုအဲ",
+       "rcshowhidemine-show": "ထ္ၜး",
+       "rcshowhidemine-hide": "ဗဒန်",
+       "rclinks": "ထ္ၜး အောန်အိုတ် $1 ပြံင်လှာဲလဝ် မတုဲကၠုင် $2 တ္ၚဲ",
+       "diff": "တၞဟ်ခြာ",
+       "hist": "တင်ဂၞင်မတုဲကၠုင်",
+       "hide": "ဗဒန်",
+       "show": "ထ္ၜး",
+       "minoreditletter": "m",
+       "newpageletter": "N",
+       "boteditletter": "b",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} ကြဴနူ ပြံင်ထောအ်တုဲ",
+       "rc-old-title": "တမ်မူလဂှ် ခၞံကၠောန်လဝ် နကဵုယၟု \"$1\"",
+       "recentchangeslinked": "အရာမဆက်စပ် ကု အပြံင်အလှာဲ",
+       "recentchangeslinked-feed": "တြးပတိတ် အပြံင်အလှာဲ",
+       "recentchangeslinked-toolbox": "တြးပတိတ် အပြံင်အလှာဲ",
+       "recentchangeslinked-title": "အရာမပြံင်လှာဲဂှ် ဆက်စပ်ဒၟံင် ကု \"$1\"",
+       "recentchangeslinked-summary": "စုတ် ယၟု မိက်လိက်မွဲ သွက်ဂွံဆဵု အရာမပြံင်လှာဲ ပ္ဍဲ လေန်မုက်လိက် ဟွံသေင်မ္ဂး နူကဵု မုက်လိက်ဏအ်၊၊ (သွက်ဂွံ ဆဵု ကောန်ဂကောံဂမၠိုင် ပ္ဍဲကဏ္ဍမွဲ၊ စုတ် {{ns:category}}:ယၟု ကဏ္ဍ). သၠာဲ ပ္ဍဲမုက်လိက် ပ္ဍဲ [[Special:Watchlist|your Watchlist]] ဒှ် ပ္ဍဲ <strong>bold</strong>.",
+       "recentchangeslinked-page": "ယၟု မုက်လိက်-",
+       "recentchangeslinked-to": "ထ္ၜး အရာပြံင်လှာဲ ပ္ဍဲလေန်မုက်လိက် သွက်ဂွံကဵု မုက်လိက် မၞးဒၞာဲ",
+       "upload": "ပတိုန်ပၠောပ် ဝှာင်",
+       "uploadlogpage": "တင်စၟတ်သမ္တီ အရာမ Upload ပတိုန်လဝ်",
+       "filedesc": "သကေမ်",
+       "license": "မစၟတ်သမ္တီလာင်ဇြေန်-",
+       "license-header": "မသ္ဂုတ်သွာတ်လာင်ဇြေန်",
+       "imgfile": "ဝှာင်",
+       "listfiles": "စရင်ဝှာင်",
+       "file-anchor-link": "ဝှာင်",
+       "filehist": "ဝှာင် လၟေင်အပြံင်အလှာဲ",
+       "filehist-help": "ဍဵု လတူ စၟတ်တ္ၚဲ/အခိင် မွဲမွဲ သွက်ဂွံ ထ္ၜးကဵု ဝှာင် မကတဵုဒှ်လဝ် ပ္ဍဲအခိင်ဂှ်၊၊",
+       "filehist-revert": "ကလေင်ပြံင်",
+       "filehist-current": "လၟုဟ်",
+       "filehist-datetime": "စၟတ်တ္ၚဲ/အခိင်",
+       "filehist-thumb": "ဗီုပြင်နမူနာ",
+       "filehist-thumbtext": "ဍဵုသၞေမ်ၝောအ်တဲ သွက်မူလိက် နကဵု $1",
+       "filehist-nothumb": "ဗီုပြင်နမူနာ ဟွံမဲ",
+       "filehist-user": "ညးလွပ်",
+       "filehist-dimensions": "ပမာဏ",
+       "filehist-comment": "တင်ပသောင်ကလး",
+       "imagelinks": "ဝှာင် ဗီုဂွံစကာ",
+       "linkstoimage": "အရာမဆက်ဗက်ကၠုင် {{PLURAL:$1|page links|$1 pages link}} ကုဝှာင်ဏအ် ဂမၠိုင်ဂှ် -",
+       "linkstoimage-more": "ဂၠိုင် နူ $1 {{PLURAL:$1|မုက်လိက် မဆက်စပ်|မုက်လိက် အဆက်စပ်ဂမၠိုင်}} ကုဝှာင်ဏအ်၊၊\nစရင်သၟဝ်ဏအ် ထ္ၜး{{PLURAL:$1|မုက်လိက် အဆက်စပ် ပထမ|ကၠာအိုတ် $1 မုက်လိက် အဆက်စပ်ဂမၠိုင်}} ကု ဝှာင်ဏအ်ဟေင်၊၊\nA [[Special:WhatLinksHere/$2|စရင် သီုဖအိုတ်လေဝ်]] ကလိဂွံမာန်ရ၊၊",
+       "nolinkstoimage": "မုက်လိက် မရပ်စပ် ဝှာင်ဏအ် ဟွံမဲ၊၊",
+       "linkstoimage-redirect": "$1 (ဝှာင် ကလေင်ပညုင်) $2",
+       "sharedupload-desc-here": "ဝှာင်ဏအ် ဒှ်ဝှာင် နူကဵု $1 တုဲ မဒှ်ဝှာင် မသုင်စောဲလဝ် နကဵုပရဝ်ဂျေတ် တၞဟ်လေဝ် ဒှ်မာန်ရ၊၊\nအရာမလဴထ္ၜး ပ္ဍဲဝှာင်တအ်ဂှ် [$2 မုက်လိက် မလဴထ္ၜး ဝှာင်] ထ္ၜးကဵုလဝ် အတိုင်ဗွဲသၟဝ်ဝွံရ၊၊",
+       "filepage-nofile": "ဝှာင် နကဵု ယၟုဏအ် ဟွံမွဲ၊၊",
+       "upload-disallowed-here": "မၞး ထပ်ချူစုတ် ပ္ဍဲ ဝှာင်ဏအ် ဟွံဂွံ၊၊",
+       "randompage": "မုက်လိက် ဇဟောမ်",
+       "statistics": "စရင်အင်",
+       "double-redirect-fixer": "ညးမပလေဝ် အရာမကလေင်စၞောန်ပညုင်",
+       "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
+       "nmembers": "$1 {{PLURAL:$1|ကောန်ဂကောံ|ကောန်ဂကောံဂမၠိုင်}}",
+       "prefixindex": "မုက်လိက် သီုဖအိုတ် နကဵု prefix",
+       "listusers": "စရင် ညးလွပ်",
+       "newpages": "မုက်လိက် တၟိ",
+       "move": "ပြံင်ပဆုဲ",
+       "pager-newer-n": "{{PLURAL:$1|တၟိနူ 1|တၟိနူ $1}}",
+       "pager-older-n": "{{PLURAL:$1|တြေံနူ 1|တြေံနူ $1}}",
+       "booksources": "လိက်ကၞပ် မနိဿဲဂမၠိုင်",
+       "booksources-search-legend": "ဂၠာဲ သွက် တမ်ရိုဟ် လိက်ကၞပ်",
+       "booksources-search": "ဂၠာဲ",
+       "specialloguserlabel": "ညးမရေင်တၠုင် -",
+       "speciallogtitlelabel": "တင်မရန်တၟအ် (က္ဍိုပ်လိက် ဟွံသေင်မ္ဂး {{ns:user}}:ယၟုညးလွပ် သွက် ညးလွပ်):",
+       "log": "လံက်",
+       "all-logs-page": "တင်စၟတ်သမ္တီ မပတိတ်တြး သီုဖအိုတ်",
+       "alllogstext": "{{SITENAME}}ဏအ်ဂှ် ဒှ်တင်သမ္တီ မပံင်ပ္ကောံလဝ် ၜိုတ်မကလိဂွံမာန်ရ၊၊\nနကဵု မရုဲစှ် ဂကူစၟတ်သမ္တီ၊ ယၟုညးလွပ် ဟွံသေင်မ္ဂး မုက်လိက် မစိုပ်တရဴတအ်တုဲ မၞးဖ္ဍန်ဖျေဟ် အရာမထ္ၜးတအ်မာန်ရ၊၊",
+       "logempty": "အရာမကိတ်ညဳ ပ္ဍဲ တင်စၟတ်သမ္တီ ဟွံမဲ၊၊",
+       "allpages": "မုက်လိက် သီုဖအိုတ်",
+       "allarticles": "မုက်လိက် သီုဖအိုတ်",
+       "allpagessubmit": "အာ",
+       "allpages-hide-redirects": "ပၞုက် အရာမကလေင်ပညုင်ဂမၠိုင်ညိ",
+       "categories": "ကဏ္ဍဂမၠိုင်",
+       "listgrouprights-members": "(စရင် ကောန်ဂကောံ)",
+       "emailuser": "ပလံင် အဳမေလ် ကုညးလွပ်ဏအ်",
+       "usermessage-editor": "သၞောတ် ပရိုင်မေတ်သေန်ဂျာ",
+       "watchlist": "စရင်မမင်မဲ",
+       "mywatchlist": "စရင်မမင်မဲ",
+       "watchlistfor2": "သွက် $1 $2",
+       "watch": "မင်မဲ",
+       "unwatch": "ဟွံမင်မဲ",
+       "watchlist-details": "{{PLURAL:$1|$1 မုက်လိက်ဂှ် နွံ|$1 မုက်လိက်တအ်ဂှ် နွံ}} ပ္ဍဲ စရင်မမင်မဲ မၞး (သီုကဵု မုက်လိက် ဓရီုကျာဂမၠိုင်).",
+       "wlheader-showupdated": "မုက်လိက် မပြံင်လှာဲလဝ် ကြဴနူ မၞးမလုပ်ဝေင်လဝ်တုဲတအ်ဂှ် ထ္ၜးလဝ် နကဵု <strong>အက္ခရ်တီုတီု</strong>.",
+       "wlnote": "ဗွဲသၟဝ်ဝွံ {{PLURAL:$1|ဒှ် အရာ မပြံင်လှာဲလဝ် လက္ကရဴအိုတ်ရ၊၊| ဒှ် အရာ မပြံင်လှာဲလဝ် လက္ကရဴအိုတ်ဂမၠိုင်ရ၊၊ <strong>$1</strong> အပြံင်အလှာဲ}} ပ္ဍဲအခိင် မအောန် နူ {{PLURAL:$2|နာဍဳ|<strong>$2</strong> နာဍဳ}}, ကု $3, $4.",
+       "wlshowlast": "လက္ကရဴအိုတ် $1 နာဍဳ $2 တ္ၚဲ ဂှ် ထ္ၜးညိ",
+       "watchlist-options": "အရာမရုဲစှ် သွက် စရင်မမင်မဲ",
+       "enotif_reset": "ကဵုစၟတ် ကုမုက်လိက် မဗဵုစိုပ်လဝ်တုဲ သီုဖအိုတ်",
+       "dellogpage": "တင်စၟတ်သမ္တီ အရာမဇိုတ်ပလီုလဝ်",
+       "rollbacklink": "ကလေင်",
+       "rollbacklinkcount": "ကလေင်အာ $1 {{PLURAL:$1|ပလေဝ်ဒါန်|ပလေဝ်ဒါန်ဂမၠိုင်}}",
+       "protectlogpage": "တင်စၟတ်သမ္တီ အရာမစဵုဒၞာဂမၠိုင်",
+       "protectedarticle": "မစဵုဒၞာလဝ် \"[[$1]]\"",
+       "modifiedarticleprotection": "ပြံင်လှာဲ ကဆံင်မစဵုဒၞာ သွက် မုက်လိက် \"[[$1]]\"",
+       "protect-default": "ကဵုအခေါင် ညးလွပ် သီုဖအိုတ်",
+       "restriction-edit": "ပလေဝ်ဒါန်",
+       "restriction-move": "ပြံင်ပဆုဲ",
+       "namespace": "ဒၞာဲယၟု",
+       "invert": "ဂတးထောအ် အရာမရုဲစှ်လဝ်",
+       "tooltip-invert": "Check this box to hide changes to pages within the selected namespace (and the associated namespace if checked)",
+       "namespace_association": "မပံင်ဗစိုပ် ကုဒၞာဲယၟု",
+       "tooltip-namespace_association": "Check this box to also include the talk or subject namespace associated with the selected namespace",
+       "blanknamespace": "(တမ်)",
+       "contributions": "{{GENDER:$1|User}} ပတိတ်တြး",
+       "contributions-title": "အရာမကၠောန်ဗဒှ် ညးလွပ် သွက် $1",
+       "mycontris": "အရာမကၠောန်လဝ်ဂမၠိုင်",
+       "anoncontribs": "အရာမကၠောန်လဝ်ဂမၠိုင်",
+       "contribsub2": "သွက် {{GENDER:$3|$1}} ($2)",
+       "nocontribs": "အရာမပလေဝ်ဒါန် မကိတ်ညဳ ကုတင်ဂၞင်တအ်ဂှ် ဟွံဂွံဆဵုကေတ်၊၊",
+       "uctop": "(လၟုဟ်)",
+       "month": "နူ ဂိတု (ကေုာံ ပြဟ်နူ)",
+       "year": "နူ သၞာံ (ကေုာံ ပြဟ်နူ):",
+       "sp-contributions-newbies": "ထ္ၜး အရာမကၠောန်ခၞံ နူကဵု အကံက်တၟိ ဟေင်",
+       "sp-contributions-blocklog": "စၟတ်သမ္တီ အရာမကၟာတ်ဗလံက်လဝ်",
+       "sp-contributions-uploads": "ပတိုန်ပၠောပ်",
+       "sp-contributions-logs": "တင်စၟတ်သမ္တီဂမၠိုင်",
+       "sp-contributions-talk": "ဓရီုကျာ",
+       "sp-contributions-search": "ဂၠာဲ သွက် အရာမရီုဗင်ကၠောန်ဂမၠိုင်",
+       "sp-contributions-username": "IP address ဟွံသေင်မ္ဂး ယၟုမသုင်စောဲ:",
+       "sp-contributions-toponly": "ထ္ၜး အရာမပလေဝ်ဒါန်လဝ် လက္ကရဴအိုတ်ဂှ် ဟေင်ညိ",
+       "sp-contributions-newonly": "ထ္ၜး မုက်လိက်မခၞံကၠောန်လဝ် ကၠာအိုတ်ဂှ် ဟေင်ညိ",
+       "sp-contributions-submit": "ဂၠာဲ",
+       "whatlinkshere": "မု အဆက်အစပ် ကုအရာဂှ်",
+       "whatlinkshere-title": "မုက်လိက် မဆက်လေန်လဝ် ကု \"$1\"",
+       "whatlinkshere-page": "မုက်လိက် -",
+       "linkshere": "မုက်လိက် ဗွဲသၟဝ်ဝွံ ဆက်စပ် ကဵု<strong>$2</strong>:",
+       "nolinkshere": "မုက်လိက် ဆက်စပ် ကု <strong>$2</strong> ဟွံမဲ၊၊",
+       "isredirect": "မုက်လိက် မကလေင်ထ္ၜး",
+       "istemplate": "အရာမထပ်ဗပေင်ပၠောပ်လဝ်",
+       "isimage": "လေန် ဝှာင်",
+       "whatlinkshere-prev": "{{PLURAL:$1|ကလေင်|ကလေင် $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|ဂတ|ဂတ $1}}",
+       "whatlinkshere-links": "← လေန်",
+       "whatlinkshere-hideredirs": "$1 ကလေင်ထ္ၜး",
+       "whatlinkshere-hidetrans": "$1 အရာမထပ်ဗပေင်ပၠောပ်လဝ်",
+       "whatlinkshere-hidelinks": "$1 လေန်",
+       "whatlinkshere-hideimages": "$1 ဝှာင်အဆက်အစပ်",
+       "whatlinkshere-filters": "ဖဍိုဟ်",
+       "ipboptions": "၂ နာဍဳ:2 hours,၁ တ္ၚဲ:1 day,၃တ္ၚဲ:3 days,၁ သတ္တဟ:1 week,၂သတ္တဟ:2 weeks,၁ ဂိတု:1 month,၃ ဂိတု:3 months,၆ ဂိတု:6 months,၁ သၞာံ:1 year,ဟွံချိုတ်ပၠိုတ်:infinite",
+       "infiniteblock": "မဟွံမဲကုအပိုင်အခြာ",
+       "blocklink": "ကၟာတ်ဗလံက်",
+       "contribslink": "တြးပတိတ်",
+       "blocklogpage": "စၟတ်သမ္တီ အရာမကၟာတ်ဗလံက်လဝ်",
+       "blocklogentry": "ကၟာတ်ဗလံက်လဝ် [[$1]] နကဵု အပိုင်အခြာအခိင်  $2 ဟိုတ်နူ $3",
+       "reblock-logentry": "ဒဒှ်မကၟာတ်လဒဵု ညးလွပ်  [[$1]] ဂှ် ပြံင်လှာဲလဝ် နကဵု တ္ၚဲလက္ကရဴအိုတ် $2 $3",
+       "block-log-flags-nocreate": "ပွမခၞံကၠောန် အကံက်ဂှ် ဟွံသၟဟ်ရထ",
+       "proxyblocker": "ညးမကၟာတ်စဵု proxy",
+       "movelogpage": "ပြံင်ပဆုဲ တင်စၟတ်သမ္တီ",
+       "export": "ပတိတ်တြး မုက်လိက်တအ်",
+       "thumbnail-more": "ဇၞော်ပတိုန်",
+       "importlogpage": "တင်စၟတ်သမ္တီ မပၠောပ်စုတ်",
+       "tooltip-pt-userpage": "မုက်လိက် {{GENDER:|မၞးမသုင်စောဲ}}",
+       "tooltip-pt-mytalk": "{{GENDER:|မုက်လိက် မၞး}} မဓရီုကျာ",
+       "tooltip-pt-preferences": "{{GENDER:|မၞး}} မဒးဂၞပ်စိုတ်ဂမၠိုင်",
+       "tooltip-pt-watchlist": "စရင် မုက်လိက် မၞး မင်မဲဒၟံင် သွက်ဂွံပြံင်လှာဲ",
+       "tooltip-pt-mycontris": "စရင် {{GENDER:|မၞး}} မကၠောန်ပတိတ်လဝ်ဂမၠိုင်",
+       "tooltip-pt-login": "မၞးဂှ် ဒးဒုင်အာတ်မိက် ကဵုလုပ်လံက်အေန်၊ ဆဂး ဒးကၠောန်တွဵု ဟွံသေင်ရ၊၊",
+       "tooltip-pt-logout": "တိတ်",
+       "tooltip-pt-createaccount": "မၞးဂှ် ဒးဒုင်အာတ်မိက် ကဵုခၞံကၠောန်အကံက်မွဲ ဆဂး ဒးကၠောန်တွဵု ဟွံသေင်ရ၊၊",
+       "tooltip-ca-talk": "သဳကၠဳ ပရူ မုက်လိက်မာတိကာ",
+       "tooltip-ca-edit": "ပလေဝ်ဒါန် မုက်လိက် ဏအ်",
+       "tooltip-ca-addsection": "စ ဒကုတ် တၟိမွဲ",
+       "tooltip-ca-viewsource": "မုက်လိက်ဏအ် စဵုဒၞာလဝ်၊၊\nမၞး ဗဵု တမ်ရိုဟ်ဍေဟ် ဂွံ",
+       "tooltip-ca-history": "အရာမပလေဝ်ဒါန်ကၠုင် မုက်လိက်ဏအ်",
+       "tooltip-ca-protect": "စဵုဒၞာ မုက်လိက်ဏအ်",
+       "tooltip-ca-delete": "ပလီု မုက်လိက်ဏအ်",
+       "tooltip-ca-move": "ပြံင်ပဆုဲ မုက်လိက်ဏအ်",
+       "tooltip-ca-watch": "စုတ် မုက်လိက်ဏအ် ပ္ဍဲစရင်မမင်မဲမၞး",
+       "tooltip-ca-unwatch": "ပတိတ်ထောအ် မုက်လိက်ဏအ် ပ္ဍဲစရင်မမင်မဲမၞး",
+       "tooltip-search": "ဂၠာဲ {{SITENAME}}",
+       "tooltip-search-go": "အတိုင်ယၟုဏအ် ယဝ်ရ နွံမ္ဂး အာ ဇရေင် မုက်လိက်ဂှ်",
+       "tooltip-search-fulltext": "ဂၠာဲ ပ္ဍဲမုက်လိက် နကဵု လိက်ဏအ်",
+       "tooltip-p-logo": "အာ မုက်လိက် တမ်",
+       "tooltip-n-mainpage": "အာ မုက်လိက် တမ်",
+       "tooltip-n-mainpage-description": "အာ မုက်လိက် တမ်",
+       "tooltip-n-portal": "ပရူပရဝ်ဂျေက်၊ မု မၞး မပဂွံ၊ အလဵု မၞး ဂွံဂၠာဲ အရာတအ်",
+       "tooltip-n-currentevents": "ဂၠာဲ တင်ဂၞင်ပရိုင် စပ်ကဵု သဘင်ဏအ်",
+       "tooltip-n-recentchanges": "စရင် မပလေဝ်လဝ် ပြဟ်ဟ်ဏအ် ပ္ဍဲ ဝဳကဳ",
+       "tooltip-n-randompage": "ပံက် မုက်လိက် ဇယောမ်",
+       "tooltip-n-help": "ဒၞာဲ သွက်ဂွံ ဂၠာဲ",
+       "tooltip-t-whatlinkshere": "စရင် မုက်လိက် ဝဳကဳ မဆက်စပ် ကု ပရူဏအ် သီုဖအိုတ်",
+       "tooltip-t-recentchangeslinked": "မပြံင်လှာဲ လၟုဟ် ပ္ဍဲမုက်လိက်ဏအ်ဂှ် ဆက်စပ်ဒၟံင် ကုမုက်လိက်ဏအ်",
+       "tooltip-feed-atom": "ဒၞာဲဗလးပတိတ် မုက်လိက်ဏအ်",
+       "tooltip-t-contributions": "စရင် မကၠောန်လဝ် နကဵု {{GENDER:$1|ညးလွပ်ဏအ်}}",
+       "tooltip-t-emailuser": "ပလံင် အဳမေလ် ကု {{GENDER:$1|မဒှ် ညးလွပ်ဏအ်}}",
+       "tooltip-t-upload": "ပတိုန်ပၠောပ် ဝှာင်",
+       "tooltip-t-specialpages": "စရင် မုက်လိက် တၟေင် သီုဖအိုတ်",
+       "tooltip-t-print": "မူမုက်လိက် မပြေန်ပ္တိတ်ဂွံ",
+       "tooltip-t-permalink": "ဌာန်ဒၟံင်လေန် လၟိုန် မုက်လိက် မကလေင်ပလေဝ်ဏအ်",
+       "tooltip-ca-nstab-main": "ဗဵု မုက်လိက် မာတိကာ",
+       "tooltip-ca-nstab-user": "ဗဵု မုက်လိက် ညးလွပ်",
+       "tooltip-ca-nstab-special": "မုက်လိက်ဏအ်ဂှ် ဒှ်မုက် တၟေင်၊ ဟိုတ်ဂှ်ရ ပလေဝ် ဟွံဂွံ",
+       "tooltip-ca-nstab-project": "ဗဵု မုက်လိက် ပရဝ်ဂျေတ်",
+       "tooltip-ca-nstab-image": "ဗဵု မုက်လိက် ဝှာင်",
+       "tooltip-ca-nstab-mediawiki": "ကျောဝ်ဗဵု သၞောတ် ပရိုင်မေတ်သုက်",
+       "tooltip-ca-nstab-template": "ကျောဝ်ဗဵု template",
+       "tooltip-ca-nstab-category": "ဗဵု မုက်လိက်ကဏ္ဍ",
+       "tooltip-minoredit": "ကဵုစၟတ် အရာဏအ် ဒဒှ်ရ မဒှ် အရာမပလေဝ်ဒါန် ညိည",
+       "tooltip-save": "ဂိုင်သိပ် အရာမၞး မပြံင်လှာဲလဝ်",
+       "tooltip-preview": "ကိုပ်ဗဗဵု အရာမၞး မပြံင်လှာဲလဝ်၊၊ ပဂုန်တုဲ ကၠာဟွံဂွံဂိုင်သိပ်ဂှ် ကၠောန်ကၠာညိ၊၊",
+       "tooltip-diff": "ထ္ၜး ဒၞာဲ မလိက် မၞးမပြံင်လှာဲလဝ်ဂှ်ညိ",
+       "tooltip-compareselectedversions": "ရံင် ဗီုတၞဟ်ခြာ အကြာ မူမပလေဝ်ဒါန်လဝ် ပ္ဍဲမုက်လိက်ဏအ် ဒၞာဲမရုဲစှ်လဝ် ၜါဂှ်",
+       "tooltip-watch": "စုတ် မုက်လိက်ဏအ် ပ္ဍဲစရင်မမင်မဲ မၞး",
+       "tooltip-rollback": "\"Rollback\" reverts the last contributor's edit(s) to this page in one click",
+       "tooltip-undo": "\"ဟွံကၠောန်\" ဂှ် ဒှ်အရာ မဟွံကၠောန်တုဲ ကလေင်အာ ဗီုအတိုင်တြေံ ကၠာဟွံဂွံစ ပလေဝ်လဝ်ဂှ်ရ၊၊ မုဟိုတ် ကလေင်အာ အတိုင်ဗီုတြေံပၠန်ဂှ် ချူစၟတ်သမ္တီ သကေံ မာန်ရ၊၊",
+       "tooltip-summary": "စုတ် သကေမ် summary ဇမၠေအ်",
+       "simpleantispam-label": "စၟဳစၟတ် အရာမပလီုပလာ်\n<strong>လ္ပ </strong> စုတ် ပ္ဍဲဏအ်ညိ!",
+       "pageinfo-title": "ပရိုင်တင်ဂၞင် သွက် \"$1\"",
+       "pageinfo-header-basic": "ပရိုင်တင်ဂၞင် သဇိုင်",
+       "pageinfo-header-edits": "လၟေင်စၟတ်သမ္တီ မပလေဝ်ဒါန်လဝ်",
+       "pageinfo-header-restrictions": "ပရေင်စဵုဒၞာ မုက်လိက်",
+       "pageinfo-header-properties": "ဒြပ်ရတ် မုက်လိက်",
+       "pageinfo-display-title": "က္ဍိုပ်ပရိုင် မထ္ၜးပျး",
+       "pageinfo-default-sort": "ရုဲစှ် ဂကူအဓိကတင်ဂၞင်",
+       "pageinfo-length": "ဇမၠိင် မုက်လိက် (နကဵု ဘာက်)",
+       "pageinfo-article-id": "မုက်လိက် ID",
+       "pageinfo-language": "မုက်လိက် အရေဝ်ဘာသာ ဖျုန်လိက်",
+       "pageinfo-content-model": "မုက်လိက် မဝ်ဒေလ် မာတိက",
+       "pageinfo-robot-policy": "ကၠောန်မာတိကာ index နကဵု စက်ရဝ်ဗတ်",
+       "pageinfo-robot-index": "မသၠးကဵုလဝ်အခေါင်",
+       "pageinfo-robot-noindex": "ဟွံကဵုလဝ်အခေါင်",
+       "pageinfo-watchers": "လၟိဟ် ပၟင်ပၟဲ မုက်လိက်",
+       "pageinfo-few-watchers": "အောန်နူ $1 {{PLURAL:$1|ပၟင်ပၟဲ|ပၟင်ပၟဲဂမၠိုင်}}",
+       "pageinfo-redirects-name": "လၟိဟ် မကလေင်ပညုင် ကုမုက်လိက်ဏအ်",
+       "pageinfo-subpages-name": "လၟိဟ် မုက်လိက်လစှ်ေ ဒဒက်တဴ ကုမုက်လိက်ဏအ်",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|အရာမကလေင်ပညုင်|အရာမကလေင်ပညုင်ဂမၠိုင်}}; $3 {{PLURAL:$3|ဟွံမဲ-အရာမကလေင်ပညုင်|ဟွံမဲ-အရာမကလေင်ပညုင်ဂမၠိုင်}})",
+       "pageinfo-firstuser": "ညးမခၞံဗဒှ် မုက်လိက်",
+       "pageinfo-firsttime": "စၟတ်တ္ၚဲ မခၞံဗဒှ်လဝ် မုက်လိက်",
+       "pageinfo-lastuser": "မပလေဝ်ဒါန်လဝ် လက္ကရဴအိုတ်",
+       "pageinfo-lasttime": "စၟတ်တ္ၚဲ မပလေဝ်ဒါန်လဝ် လက္ကရဴအိုတ်",
+       "pageinfo-edits": "လၟိဟ် မပလေဝ်ဒါန်လဝ် သီုဖအိုတ်",
+       "pageinfo-authors": "လၟိဟ် အစာချူလိက် သီုဖအိုတ်",
+       "pageinfo-recent-edits": "လၟိဟ် အရာမပလေဝ်ဒါန်လဝ် ပြဟ်ဟ်ဏအ် (အပ္ဍဲ $1)",
+       "pageinfo-recent-authors": "လၟိဟ် အစာချူလိက် ပြဟ်ဟ်ဏအ်",
+       "pageinfo-magic-words": "မှဝ် {{PLURAL:$1|မလိက်|မလိက်ဂမၠိုင်}} ($1)",
+       "pageinfo-hidden-categories": "ပၞုက် {{PLURAL:$1|ကဏ္ဍ|ကဏ္ဍဂမၠိုင်}} ($1)",
+       "pageinfo-templates": "မကၠောန် Transcluded လဝ် {{PLURAL:$1|template|templates}} ($1)",
+       "pageinfo-toolboxlink": "မုက်လိက် ပရိုင်တင်ဂၞင်",
+       "pageinfo-contentpage": "ရိုဟ်လၟိဟ် နဒဒှ် မုက်လိက် မာတိကာ",
+       "pageinfo-contentpage-yes": "ယွံ",
+       "patrol-log-page": "တင်စၟတ်သမ္တီ အရာမစဳစောတ်ကောပ်ကာဲ",
+       "previousdiff": "← အရာမပလေဝ်ဒါန်လဝ် တြေံ",
+       "nextdiff": "မပလေဝ်ဒါန်လဝ် တၟိနူဂှ် →",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|မုက်လိက်|မုက်လိက်ဂမၠိုင်}}",
+       "file-info-size": "$1 × $2 pixels, file size: $3, MIME type: $4",
+       "file-info-size-pages": "$1 × $2 pixels, ဇမၞော် ဝှာင်: $3, MIME ဂကူ: $4, $5 {{PLURAL:$5|မုက်လိက်|မုက်လိက်ဂမၠိုင်}}",
+       "file-nohires": "resolution ခိုဟ် နူဏအ် ဟွံဂွံဆဵုရ၊၊",
+       "svg-long-desc": "SVG ဝှာင်, မိက်ကဵုကသပ် $1 × $2 pixels, ဇမၞော် ဝှာင်: $3",
+       "show-big-image": "ဝှာင် တမ်မူလ",
+       "show-big-image-preview": "ဇမၞော် ကိုပ်ဗဗဵုဏအ် - $1",
+       "show-big-image-other": "တၞဟ် {{PLURAL:$2|resolution|resolutions}}: $1.",
+       "show-big-image-size": "$1 × $2 pixels",
+       "metadata": "Metadata",
+       "metadata-help": "ပ္ဍဲဝှာင်ဏအ်ဂှ် နွံဒၟံင် နကဵုအရာမဗပေင်စုတ်လဝ်ရ၊၊ မဒှ်အရာ မဗပေင်စုတ်လဝ် နူကဵု ကမ္မရာ ဒဳဂျဳတေဝ် ဟွံသေင်မ္ဂး နူသကေန်နာ မွဲမွဲ ဒှ်မာန်ရ၊၊\nယဝ်ရ ဝှာင်ဂှ် ဒးဒုင်ပလေဝ်ပလေတ် နူတမ်မူလဍေဟ်မ္ဂး၊ အရာလ္ၚဵုတအ်ဂှ် ဟွံမံက် ပ္ဍဲဝှာင်ဂှ် ဒှ်မာန်ရ၊၊",
+       "metadata-fields": "Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.\nOthers will be hidden by default.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-orientation": "ဒဒှ်မဖျေဟ်ဗီုပြင်မုက်",
+       "exif-xresolution": "သွဟ် ဂၠံင်လၞင်",
+       "exif-yresolution": "သွဟ် ဂၠံင်စှ်ေ",
+       "exif-datetime": "ဝှာင် ပြံင်လှာဲ စၟတ်တ္ၚဲ ကေုာံ အခိင်",
+       "exif-make": "ညးမကၠောန်ပတိတ် ကမ္မရာ",
+       "exif-model": "မဝ်ဒေလ် ကမ္မရာ",
+       "exif-software": "သပ်ဝဴ မစကာလဝ်",
+       "exif-exifversion": "Exif version",
+       "exif-colorspace": "ဒၞာဲ အသာ်",
+       "exif-datetimeoriginal": "စၟတ်တ္ၚဲ ကေုာံ အခိင် မခၞံဗဒှ် ဒါတာ",
+       "exif-datetimedigitized": "စၟတ်တ္ၚဲ ကေုာံ အခိင် မပြံင်လှာဲ နကဵုဒဳဂျဳတေဝ်",
+       "exif-orientation-1": "ဓမ္မတာ",
+       "namespacesall": "သီုဖအိုတ်",
+       "monthsall": "သီုဖအိုတ်",
+       "imgmultipagenext": "မုက်လိက်ဂတ →",
+       "imgmultigo": "အာ!",
+       "imgmultigoto": "အာ ဇရေင် မုက်လိက် $1",
+       "watchlisttools-clear": "ဖအး စရင်မမင်မွဲဂှ်",
+       "watchlisttools-view": "ဗဵု အရာမပြံင်လှာဲထေက်တအ်",
+       "watchlisttools-edit": "ဗဵု ကေုာံ ပလေဝ် စရင်မမင်မဲ",
+       "watchlisttools-raw": "ပလေဝ် စရင်မမင်မဲ အပြောမ်",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ဓရီု]])",
+       "redirect": "ကလေင်စၞောန်ပညုင်လဝ် နကဵု ဝှာင်၊ ညးလွပ်၊ မုက်လိက်၊ မူမပလေဝ်ဒန်လဝ် ဟွံသေင်မ္ဂး အာင်ဒဳ",
+       "redirect-summary": "မုက်လိက်တၟေင်ဏအ် ကလေင်စၞောန် ကဵု ဝှာင်(မကဵုလဝ်ယၟု), မုက်လိက်မွဲ (given a revision ID or page ID), မုက်လိက် ညးမသုင်စောဲမွဲ (given a numeric user ID), ဟွံသေင်မ္ဂး တင်စၟတ်သမ္တီမွဲ (given the log ID). Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
+       "redirect-submit": "အာ",
+       "redirect-lookup": "ဂၠာဲသ္ၚေဝ်",
+       "redirect-value": "ၚုဟ်မး -",
+       "redirect-user": "အာင်ဒဳ ညးလွပ်",
+       "redirect-page": "မုက်လိက် အာင်ဒဳ",
+       "redirect-revision": "မုက်လိက် မူမပလေဝ်ဒါန်",
+       "redirect-file": "ယၟုဝှာင်",
+       "specialpages": "မုက်လိက် တၟေင်",
+       "tag-filter": "[[Special:Tags|Tag]] ဝှာင်ဂမၠိုင်:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tags-active-yes": "ယွံ",
+       "tags-active-no": "ဟအှ်ေ",
+       "tags-hitcount": "$1 {{PLURAL:$1|ပြံင်လှာဲ|ပြံင်လှာဲဂမၠိုင်}}",
+       "logentry-delete-delete": "$3 မုက်လိက်ဂှ် $1 {{GENDER:$2|ပလီုထောအ်လဝ်ရ}}",
+       "logentry-delete-restore": "$1 {{GENDER:$2|ကလေင်ပ္တန်}} မုက်လိက် $3 ($4)",
+       "logentry-delete-revision": "ပ္ဍဲမုက်လိက် $3: $4 ဂှ် $1 {{GENDER:$2|ပြံင်လှာဲလဝ်}} ဗီုပြင် မုက်လိက် {{PLURAL:$5|မူလိက်မဒါန်လဝ် မွဲ|$5 မူလိက်မဒါန်လဝ်ဂမၠိုင်}}",
+       "revdelete-content-hid": "ဒဒှ် မပၞုက် ပရူပရာ",
+       "logentry-move-move": "$1 {{GENDER:$2|ပြံင်ပဆုဲလဝ်}} မုက်လိက် $3 ဇရေင် $4",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|ပြံင်ပဆုဲလဝ်}} မုက်လိက် $3 ဇရေင် $4 သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင်",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|ပြံင်ပဆုဲလဝ်}} မုက်လိက် $3 ဇရေင် $4 နကဵု မကလေင်ပညုင်",
+       "logentry-patrol-patrol-auto": "ပရေင်ပလေဝ်ဒါန် $3 ပ္ဍဲ $4 ဂှ် $1 ညးမင်သ္ၚေဝ်မဲဒၟံင် {{GENDER:$2|မကဵုစၟတ်}}အလဵုလဵုရ၊၊",
+       "logentry-newusers-create": "အကံက် ညးလွပ် $1 ဂှ် {{GENDER:$2|ခၞံကၠောန်လဝ်}}",
+       "logentry-newusers-autocreate": "အကံက် ညးလွပ် $1 ဂှ် {{GENDER:$2|ခၞံကၠောန်လဝ်}} အလဵုအလဵုရ၊၊",
+       "logentry-upload-upload": "$1  {{GENDER:$2|ပတိုန်ပၠောပ်လဝ်}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|ပလံင်ပၠောပ်လဝ်}} မူလိက် $3ဏအ် တၟိမွဲ",
+       "searchsuggest-search": "ဂၠာဲ {{SITENAME}}",
+       "duration-days": "$1 {{PLURAL:$1|တ္ၚဲ|တ္ၚဲဂမၠိုင်}}",
+       "randomrootpage": "တမ် မုက်လိက် ဇဟောမ်"
+}
index 57e3609..7b5d04b 100644 (file)
        "group-autoconfirmed": "स्वयंशाबीत सदस्य",
        "group-bot": "सांगकामे",
        "group-sysop": "प्रचालक",
+       "group-interface-admin": "तांत्रिक प्रचालक",
        "group-bureaucrat": "स्विकृती अधिकारी",
        "group-suppress": "झापडबंद",
        "group-all": "(सर्व)",
        "grant-createaccount": "खाते तयार करा",
        "grant-createeditmovepage": "पाने बनवा,संपादा व स्थानांतरण करा",
        "grant-delete": "पाने, आवृत्त्या व नोंदी वगळा",
-       "grant-editinterface": "मिडियाविà¤\95ि à¤¨à¤¾à¤®à¤µà¤¿à¤¶à¥\8dव à¤µ à¤¸à¤¦à¤¸à¥\8dयाà¤\82à¤\9aà¥\80 CSS/JS संपादा",
+       "grant-editinterface": "मिडियाविà¤\95ि à¤¨à¤¾à¤®à¤µà¤¿à¤¶à¥\8dव à¤µ à¤¸à¤\82à¤\95à¥\87तसà¥\8dथळावरà¤\9aà¥\80/सदसà¥\8dयाà¤\82à¤\9aà¥\80JS संपादा",
        "grant-editmycssjs": "आपली सदस्य CSS/JavaScript संपादित करा",
        "grant-editmyoptions": "आपला सदस्य पसंतीक्रम संपादा",
        "grant-editmywatchlist": "आपली निरीक्षणयादी संपादित करा",
        "protectedtitles-submit": "शीर्षके दर्शवा",
        "listusers": "सदस्यांची यादी",
        "listusers-editsonly": "फक्त संपादनांसहित सदस्य दाखवा",
+       "listusers-temporarygroupsonly": "फक्त तात्पुरत्या सदस्यगटात असणारे सदस्यच दाखवा",
        "listusers-creationsort": "निर्मितीच्या तारखेप्रमाणे लावा",
        "listusers-desc": "उतरत्या क्रमाने निवडा",
        "usereditcount": "$1 {{PLURAL:$1|संपादन|संपादने}}",
index 14fb3fb..5557493 100644 (file)
@@ -28,7 +28,7 @@
                        "Dr Lotus Black"
                ]
        },
-       "tog-underline": "လင့်ကို မျဉ်းသားသည့် ပုံစံ -",
+       "tog-underline": "လင့်ကို မျဉ်းသားသည့် ပုံစံ:",
        "tog-hideminor": "အရေးမကြီးသော တည်းဖြတ်မှုများကို လတ်တလော အပြောင်းအလဲများမှ ဝှက်ရန်",
        "tog-hidepatrolled": "လတ်တလော အပြောင်းအလဲများတွင် ကင်းလှည့်တည်းဖြတ်မှုများကို ဝှက်ရန်",
        "tog-newpageshidepatrolled": "စာမျက်နှာသစ်စာရင်းတွင် ကင်းလှည့်စာမျက်နှာများကို ဝှက်ရန်",
        "period-pm": "ညနေ",
        "pagecategories": "{{PLURAL:$1|ကဏ္ဍ|ကဏ္ဍများ}}",
        "category_header": "ကဏ္ဍ \"$1\" မှ စာမျက်နှာများ",
-       "subcategories": "ကဏ္ဍခွဲ",
+       "subcategories": "ကဏ္ဍခွဲများ",
        "category-media-header": "ကဏ္ဍ \"$1\" မှ မီဒီယာ",
        "category-empty": "<em>ဤကဏ္ဍသည် လက်ရှိတွင် စာမျက်နှာများ သို့မဟုတ် မီဒီယာများ မရှိပါ။</em>",
        "hidden-categories": "{{PLURAL:$1|ဝှက်ထားသော ကဏ္ဍ|ဝှက်ထားသော ကဏ္ဍများ}}",
        "noindex-category": "အက္ခရာမစဉ်ထားသော စာမျက်နှာများ",
        "broken-file-category": "ကျိုးပျက်နေသော ဖိုင်လင့်များပါသည့် စာမျက်နှာများ",
        "about": "အကြောင်း",
-       "article": "စာမျက်နှာ",
-       "newwindow": "(á\80\9dá\80\84á\80ºá\80¸á\80\92á\80­á\80¯á\80¸á\80¡á\80\9eá\80\85á\80ºá\80\90á\80\81á\80¯á\80\80á\80­á\80¯ဖွင့်ရန်)",
+       "article": "á\80\99á\80¬á\80\90á\80­á\80\80á\80¬á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬",
+       "newwindow": "(á\80\9dá\80\84á\80ºá\80¸á\80\92á\80­á\80¯á\80¸á\80¡á\80\9eá\80\85á\80ºá\80\90á\80\85á\80ºá\80\81á\80¯á\80\90á\80½á\80\84á\80º ဖွင့်ရန်)",
        "cancel": "မ​လုပ်​တော့​",
        "moredotdotdot": "နောက်ထပ်...",
        "morenotlisted": "ဤစာရင်းမှာ မပြည့်စုံနိုင်ပါ။",
        "history_short": "ရာဇဝင်",
        "history_small": "ရာဇဝင်",
        "updatedmarker": "နောက်ဆုံးကြည့်ပြီးသည့်နောက်ပိုင်း တည်းဖြတ်ထားသည်။",
-       "printableversion": "á\80\95á\80\9bá\80\84á\80·á\80ºá\80\91á\80¯á\80\90á\80ºá\80\9bá\80\94á\80º",
+       "printableversion": "á\80\95á\80\9bá\80\84á\80·á\80ºá\80\91á\80¯á\80\90á\80ºá\80\94á\80­á\80¯á\80\84á\80ºá\80\9eá\80±á\80¬ á\80\97á\80¬á\80¸á\80\9bá\80¾á\80\84á\80ºá\80¸",
        "permalink": "ပုံ​သေ​လိပ်​စာ​",
        "print": "ပရင့်",
        "view": "ကြည့်ရန်",
        "viewhelppage": "အကူအညီစာမျက်နှာကို ကြည့်ရန်",
        "categorypage": "ကဏ္ဍစာမျက်နှာကို ကြည့်ရန်",
        "viewtalkpage": "ဆွေးနွေးမှုကို ကြည့်ရန်",
-       "otherlanguages": "အခြား ဘာသာဖြင့်",
+       "otherlanguages": "á\80¡á\80\81á\80¼á\80¬á\80¸ á\80\98á\80¬á\80\9eá\80¬á\80\85á\80\80á\80¬á\80¸á\80\99á\80»á\80¬á\80¸á\80\96á\80¼á\80\84á\80·á\80º",
        "redirectedfrom": "($1 မှ ပြန်ညွှန်းထားသည်)",
        "redirectpagesub": "ပြန်ညွှန်းသော စာမျက်နှာ",
        "redirectto": "ပြန်ညွှန်းရန် -",
        "viewsourcetext": "ဤစာမျက်နှာ၏ ရင်းမြစ်ကို ကြည့်ရှု၍ ကူးယူနိုင်သည်။",
        "viewyourtext": "ဤစာမျက်နှာရှိ <strong>သင့်တည်းဖြတ်မှုများ</strong>၏ ရင်းမြစ်ကို ကြည့်ရှုပြီး ကူးယူနိုင်သည်။",
        "editinginterface": "<strong>သတိပေးချက်။</strong> သင်သည် ဆော့ဖ်ဝဲလ်၏ အသွင်အပြင်စာသားများကို အထောက်အကူပြုရာတွင် သုံးသော စာမျက်နှာအား တည်းဖြတ်နေသည်။\nဤစာမျက်နှာတွင် ပြောင်းလဲမှုများသည် ဤဝီကီရှိ အခြားအသုံးပြုသူများ၏ အသုံးပြုသူ အသွင်အပြင်များအပေါ် အကျိုးသက်ရောက်ပါလိမ့်မည်။",
+       "translateinterface": "ဝီကီများအားလုံးအတွက် ဘာသာပြန်များကို ပေါင်းထည့်၊ ပြင်ဆင်ရန်အတွက် မီဒီယာဝီကီ၏ ဒေသတွင်းပြုမှု ပရောဂျက် [https://translatewiki.net/ translatewiki.net] ကို အသုံးပြုပါ။",
        "namespaceprotected": "'''$1''' စာညွှန်းဖြင့် စာမျက်နှာကို တည်းဖြတ်ရန် ခွင့်ပြုချက် မရှိပါ။",
        "mycustomcssprotected": "ဤ CSS စာမျက်နှာကို သင်တည်းဖြတ်ပြင်ဆင်ခွင့် မရှိပါ။",
        "mycustomjsprotected": "ဤ JavaScript စာမျက်နှာကို သင်တည်းဖြတ်ပြင်ဆင်ခွင့် မရှိပါ။",
        "myprivateinfoprotected": "သင်သည် သင်၏ ပုဂ္ဂိုလ်ရေးရာ အချက်အလက်များကို ပြင်ဆင်ခွင့် မရှိပါ။",
        "mypreferencesprotected": "သင်သည် သင်၏ ရွေးချယ်စရာများကို ပြင်ဆင်ခွင့်မရှိပါ။",
        "ns-specialprotected": "အထူးစာမျက်နှာများကို တည်းဖြတ်မရနိုင်ပါ။",
+       "titleprotected": "ဤခေါင်းစဉ်ကို ဖန်တီးခြင်းမှ [[User:$1|$1]]က ကာကွယ်ထားသည်။ ပေးထားသော အကြောင်းပြချက်မှာ <em>$2</em> ဖြစ်သည်။",
+       "invalidtitle": "မဆီလျော်သော ခေါင်းစဉ်",
        "exception-nologin": "အကောင့် မဝင်ထားပါ",
        "exception-nologin-text": "ဤစာမျက်နှာကို ကြည့်ရှုနိုင်ရန် သို့မဟုတ် အခြားလုပ်ဆောင်ချက်များ ခွင့်ပြုချက်ရရှိရန် ကျေးဇူးပြု၍ အကောင့်ဝင်ပါ။",
        "exception-nologin-text-manual": "ဤစာမျက်နှာကို ဝင်ရောက်နိုင်ရန် သို့မဟုတ် အခြားလုပ်ဆောင်ချက်များ ရရှိနိုင်ရန် ကျေးဇူးပြု၍ $1 ပါ။",
        "cannotlogoutnow-text": "$1 ကိုအသုံးပြုနေစဉ်အတွင်း အကောင့်ထွက်ရန် မဖြစ်နိုင်ပါ။",
        "welcomeuser": "ကြိုဆိုပါတယ် $1!",
        "welcomecreation-msg": "သင့်အကောင့်အား ဖန်တီးပြီးပါပြီ။\nသင် ဆန္ဒရှိပါက {{SITENAME}} [[Special:Preferences|ပုဂ္ဂိုလ်ရေးအချက်အလက်များ]]ကို ပြောင်းလဲနိုင်ပါသည်။",
-       "yourname": "အသုံးပြုသူအမည် -",
+       "yourname": "အသုံးပြုသူအမည်:",
        "userlogin-yourname": "အသုံးပြုသူအမည်",
        "userlogin-yourname-ph": "သင်၏ အသုံးပြုသူအမည် ရိုက်ထည့်ပါ",
        "createacct-another-username-ph": "အသုံးပြုသူအမည် ရိုက်ထည့်ပါ",
        "userlogin-remembermypassword": "Log in ဝင်ထားမည်",
        "userlogin-signwithsecure": "လုံခြုံသော ဆက်သွယ်မှုကို သုံးမည်",
        "cannotlogin-title": "လော့ဂ်အင် မဝင်ရောက်နိုင်ပါ",
+       "cannotlogin-text": "အကောင့်ထဲ ဝင်ရောက်ခြင်းမှာ မဖြစ်နိုင်ပါ",
        "cannotloginnow-title": "ယခု လော့ဂ်အင်ဝင်၍ မရနိုင်ပါ",
+       "cannotloginnow-text": "$1 ကို အသုံးပြုနေစဉ် အကောင့်ထဲ ဝင်ရောက်ခြင်းမှာ မဖြစ်နိုင်ပါ",
        "cannotcreateaccount-title": "အကောင့်များ ဖန်တီးမရနိုင်ပါ",
+       "cannotcreateaccount-text": "တိုက်ရိုက် အကောင့်ဖန်တီးခြင်းအား ဤဝီကီပေါ်၌ ဖွင့်မထားပါ။",
        "yourdomainname": "သင့်ဒိုမိန်း -",
        "password-change-forbidden": "ဤဝီကီတွင် စကားဝှက်များကို ပြောင်းလဲ၍ မရပါ။",
        "login": "Log in ဝင်ရန်",
        "userlogin-resetpassword-link": "စကားဝှက် မေ့နေသလား။",
        "userlogin-helplink2": "log in အကူအညီ",
        "userlogin-loggedin": "သင်သည် {{GENDER:$1|$1}} အနေဖြင့် လော့အင်ဝင်ထားပြီး ဖြစ်သည်။ အခြားအသုံးပြုသူ အနေဖြင့် ဝင်ရောက်ရန် အောက်ပါပုံစံကို အသုံးပြုပါ။",
+       "userlogin-reauth": "သင်သည် {{GENDER:$1|}} ဖြစ်ကြောင်း အတည်ပြုရန်အတွက် အကောင့်ထဲ ထပ်မံဝင်ရောက်ရပါမည်။",
        "userlogin-createanother": "အခြားအကောင့် ဖန်တီးရန်",
        "createacct-emailrequired": "အီးမေး လိပ်စာ",
        "createacct-emailoptional": "အီးမေး လိပ်စာ (ဖြည့်လိုက)",
        "createacct-realname": "နာမည်ရင်း (ဖြည့်လိုက)",
        "createacct-reason": "အကြောင်းပြချက်",
        "createacct-reason-ph": "သင်ဘာကြောင့် အခြားအကောင့် ဖန်တီးချင်တာလဲ",
+       "createacct-reason-help": "အကောင့်ဖန်တီးခြင်း မှတ်တမ်းရှိ ပြသထားသော မက်ဆေ့",
        "createacct-submit": "သင့်အကောင့်ကို ဖန်တီးရန်",
        "createacct-another-submit": "အကောင့် ဖန်တီးရန်",
        "createacct-continue-submit": "အကောင့်ဖန်တီးမှု ဆက်သွားမည်",
        "noname": "တရားဝင် အသုံးပြုသူအမည်ကို မသတ်မှတ်ရသေးပါ။",
        "loginsuccesstitle": "လော့ဂ်အင်ဝင်ပြီးပြီ",
        "loginsuccess": "'''သင်သည် {{SITENAME}} သို့ \"$1\" အဖြစ် Login ဝင်ပြီးဖြစ်သည်။'''",
+       "nosuchuser": "\"$1\" နာမည်ဖြင့် အသုံးပြုသူ မရှိပါ။ အသုံးပြုသူအမည်သည် စာလုံးအကြီးအသေးကို အမှားမခံပါ။ သင်၏စာလုံးပေါင်းကို စစ်ဆေးပါ သို့မဟုတ် [[Special:CreateAccount|အကောင့်သစ်တစ်ခု ဖန်တီးပါ]]။",
        "nosuchusershort": "\"$1\" အမည်ဖြင့် အသုံးပြုသူမရှိပါ။\nစာလုံးပေါင်း ပြန်စစ်ပေးပါရန်။",
        "nouserspecified": "အသုံးပြုသူအမည်ကို ဖော်ပြရမည်ဖြစ်သည်။",
        "login-userblocked": "ဤအသုံးပြုသူကို ပိတ်ပင်ထားသည်။ Login ဝင်ခြင်း ခွင့်မပြုပါ။",
        "wrongpassword": "အသုံးပြုသူအမည် သို့မဟုတ် စကားဝှက် မှားယွင်းထည့်ထားသည်။\nကျေးဇူးပြု၍ ပြန်ကြိုးစားကြည့်ပါ။",
        "wrongpasswordempty": "စကားဝှက်ထည့်ရမည်နေရာ ဗလာဖြစ်နေသည်။\nကျေးဇူးပြု၍ ပြန်ကြိုးစားကြည့်ပါ။",
        "passwordtooshort": "စကားဝှက်တွင် စကားလုံး အနည်းဆုံး {{PLURAL:$1|တစ်လုံး|$1 လုံး}} ရှိရမည်။",
+       "passwordtoolong": "စကားဝှက်တွင် စကားလုံး {{PLURAL:$1|တစ်လုံး|$1 လုံး}} ထက်မပိုရပါ။",
+       "passwordtoopopular": "ယေဘုယျရွေးချယ်ထားသော စကားဝှက်များကို အသုံးမပြုနိုင်ပါ။ ခန့်မှန်းရန်ခက်ခဲသော စကားဝှက်တစ်ခုကို ရွေးချယ်ပါ။",
        "password-name-match": "သင့်စကားဝှက်သည် အသုံးပြုသူအမည်နှင့် အတူတူမဖြစ်စေရဘဲ ကွဲပြားရမည်။",
        "password-login-forbidden": "ဤအသုံးပြုသူအမည်နှင့် စကားဝှက်အား အသုံးပြုခြင်းကို တားမြစ်ထားသည်။",
        "mailmypassword": "စကားဝှက်ကို ပြန်ချိန်ရန်",
        "passwordremindertext": "တစ်စုံတစ်ယောက် ($1 အိုင်ပီလိပ်စာမှ) သည် {{SITENAME}} ($4) အတွက် စကားဝှက်အသစ်ကို တောင်းဆိုခဲ့သည်။ \nအသုံးပြုသူ \"$2\" အတွက် ယာယီစကားဝှက်အသစ်ကို ဖန်တီးပြီး \"$3\" အဖြစ် သတ်မှတ်လိုက်သည်။ \nဤအရာကို သင်ရည်ရွယ်သည်ဆိုပါက လော့ဂ်အင်ဝင်ရန်ပြီး စကားဝှက်အသစ် ရွေးချယ်ရန် လိုအပ်ပါသည်။ \nသင်၏ ယာယီစကားဝှက်သည် {{PLURAL:$5|တစ်ရက်|$5 ရက်}}အတွင်း သက်တမ်းကုန်ပါလိမ့်မည်။\n\nအကယ်၍ တစ်စုံတစ်ယောက်က ဤတောင်းဆိုမှုကို ပြုလုပ်ခဲ့ပါက၊ သို့မဟုတ် သင်သည် သင့်စကားဝှက်အား မှတ်မိပြီး \nပြောင်းလဲရန် ဆန္ဒမရှိပါ ဤစာလွှာကို မျက်ကွယ်ပြုပြီး စကားဝှက်အဟောင်းဖြင့် ဆက်လက်သုံးစွဲနိုင်ပါသည်။",
        "noemail": "အသုံးပြုသူ \"$1\" အတွက် မည်သည့်အီးမေးလိပ်စာမှ မှတ်သားထားခြင်း မရှိပါ။",
        "noemailcreate": "တရာဝင်အီးမေးလိပ်စာ ပေးရန် လိုအပ်သည်",
+       "passwordsent": "$1 အတွက် မှတ်ပုံတင်ထားသော အီးမေးလ်လိပ်စာဆီသို့ စကားဝှက်အသစ်တစ်ခုကို ပို့ထားလိုက်ပါပြီ။ သင် လက်ခံပြီးပါက ထပ်မံ၍ လော့အင်ဝင်ရောက်ပါ။",
+       "blocked-mailpassword": "သင်၏ အိုင်ပီလိပ်စာကို တည်းဖြတ်ခြင်းမှ ပိတ်ပင်တားဆီးထားပါသည်။ အလွဲသုံးစားပြုလုပ်ခြင်းမှ ကာကွယ်ရန်အတွက် ဤအိုင်ပီလိပ်စာမှ စကားဝှက်အား ပြန်လည်ဆယ်ယူခြင်းကို ခွင့်မပြုထားပါ။",
        "mailerror": "မေးပို့ခြင်း အမှား - $1",
        "emailauthenticated": "သင့်အီးမေးလိပ်စာကို $2 နေ့ $3 အချိန်တွင် အတည်ပြုပြီး ဖြစ်သည်။",
        "emailconfirmlink": "အီးမေးကိုအတည်ပြုပါ",
+       "cannotchangeemail": "ဤဝီကီတွင် အကောင့်အီးမေးလ်လိပ်စာကို မပြောင်းလဲနိုင်ပါ။",
        "emaildisabled": "ဤဆိုဒ်သည် အီးမေးလ်များ ပို၍မရနိုင်ပါ။",
        "accountcreated": "အကောင့်ဖန်တီးပြီးပါပြီ",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|ဆွေးနွေး]]) အတွက် အကောင့်ကို ဖန်တီးပြီး ဖြစ်သည်။",
        "createaccount-title": "{{SITENAME}} အတွက် အကောင့်ပြုလုပ်ခြင်း",
        "login-throttled": "သင်သည် login ဝင်ရန် အကြိမ်မြောက်မြားစွာ အားထုတ်ခဲ့ပြီးဖြစ်သည်။\nကျေးဇူးပြု၍ ထပ်မဝင်ခင် $1 စောင့်ပေးပါ။",
        "login-abort-generic": "လော့ဂ်အင်ဝင်ခြင်း မအောင်မြင်ပါ - ဖျက်သိမ်းပြီး",
+       "login-migrated-generic": "သင်၏အကောင့်သည် ပေါင်းစပ်လိုက်ပြီးဖြစ်သည်၊ သင်၏ အသုံးပြုသူအမည်မှာ ဤဝီကီတွင် မတည်ရှိတော့ပါ။",
        "loginlanguagelabel": "ဘာသာစကား: $1",
+       "createacct-another-realname-tip": "နာမည်ရင်းကို ထည့်သွင်းလိုက ထည့်နိုင်သည်။ ထည့်သွင်းရန် ရွေးချယ်ပါက အသုံးပြုသူတို့၏ အလုပ်အတွက် ထည့်သွင်းတွက်ချက်ရာတွင် အသုံးပြုပါလိမ့်မည်။",
        "pt-login": "အကောင့်ဝင်ရန်",
        "pt-login-button": "အကောင့်ဝင်ရန်",
        "pt-login-continue-button": "ဆက်လက် ဝင်ရောက်ပါ",
        "pt-createaccount": "အကောင့် ဖန်တီးရန်",
        "pt-userlogout": "အကောင့်ထွက်ရန်",
+       "user-mail-no-addy": "အီးမေးလ်လိပ်စာမရှိဘဲ အီးမေးလ်ပို့ကြည့်ခဲ့သည်။",
        "changepassword": "စကားဝှက် ပြောင်းရန်",
        "resetpass_announce": "လော့ဂ်အင်ဝင်ရောက်ခြင်း ပြီးမြောက်ရန် စကားဝှက်အသစ် ပေးရမည် ဖြစ်သည်။",
        "resetpass_header": "အကောင့်စကားဝှက်ပြောင်းရန်",
        "retypenew": "စကားဝှက် အသစ်ကို ထပ်ရိုက်ပါ -",
        "resetpass_submit": "စကားဝှက်ကို သတ်မှတ်ပြီးနောက် Log in ဝင်ရန်",
        "changepassword-success": "သင့်စကားဝှက်ကို ပြောင်းလဲပြီးပါပြီ!",
+       "changepassword-throttled": "သင်သည် login ဝင်ရန် အကြိမ်ပေါင်းများစွာ အားထုတ်ခဲ့ပြီးဖြစ်သည်။ ကျေးဇူးပြု၍ ထပ်မဝင်ခင် $1 စောင့်ပေးပါ။",
        "botpasswords": "ဘော့ စကားဝှက်များ",
        "botpasswords-disabled": "ဘော့ စကားဝှက်များကို ပိတ်ထားပါသည်။",
        "botpasswords-existing": "ရှိနှင့်ပြီးသော ဘော့စကားဝှက်များ",
        "resetpass-no-info": "ဤစာမျက်နှာကို တိုက်ရိုက်အသုံးပြုနိုင်ရန်အတွက် Log in ဝင်ထားရပါမည်။",
        "resetpass-submit-loggedin": "စကားဝှက်ပြောင်းရန်",
        "resetpass-submit-cancel": "မလုပ်တော့ပါ",
-       "resetpass-temp-password": "ယာယီစကားဝှက် -",
+       "resetpass-recycled": "သင်၏ လက်ရှိစကားဝှက်ထက် အခြားစကားဝှက်တစ်ခုခုကို ပြောင်းလဲပေးပါ။",
+       "resetpass-temp-emailed": "ယာယီစကားဝှက်ကုဒ်ဖြင့် ဝင်ထားပါသည်၊ အပြီးသတ်ရန် စကားဝှက်အသစ်တစ်ခု ဤနေရာတွင် ဆောင်ရွက်ရပါမည်။",
+       "resetpass-temp-password": "ယာယီစကားဝှက်:",
        "resetpass-expired": "သင်၏ စကားဝှက် သက်တမ်းကုန်သွားပါသည်။ လော့အင်ဝင်ရန် စကားဝှက်အသစ် သတ်မှတ်ပါ။",
        "passwordreset": "စကားဝှက်အသစ် ပြုလုပ်ရန်",
-       "passwordreset-username": "အသုံးပြုသူအမည် :",
-       "passwordreset-email": "အီးမေး လိပ်စာ :",
+       "passwordreset-emaildisabled": "အီးမေးလ် ကြန်အင်လက္ခဏာများကို ဤဝီကီတွင် ပိတ်ထားခဲ့သည်။",
+       "passwordreset-username": "အသုံးပြုသူအမည်:",
+       "passwordreset-domain": "ဒိုမိန်း:",
+       "passwordreset-email": "အီးမေးလ် လိပ်စာ:",
        "passwordreset-emailtitle": "{{SITENAME}} ရှိ အကောင့် အသေးစိတ်",
+       "passwordreset-emailelement": "အသုံးပြုသူအမည်:\n$1\n\nယာယီ စကားဝှက်:\n$2",
        "passwordreset-invalidemail": "တရားမဝင်သော အီးမေးလ်လိပ်စာ",
        "changeemail": "အီးမေးလိပ်စာ ပြင်ဆင် သို့ ဖယ်ရှားရန်",
        "changeemail-oldemail": "လက်ရှိ အီးမေးလ်လိပ်စာ:",
        "changeemail-submit": "အီးမေးလ်ပြောင်းလဲရန်",
        "changeemail-throttled": "သင်သည် login ဝင်ရန် အကြိမ်မြောက်မြားစွာ ပြုလုပ်ခဲ့ပြီးဖြစ်သည်။\nကျေးဇူးပြု၍ ထပ်မဝင်ခင် $1 စောင့်ပေးပါ။",
        "changeemail-nochange": "မတူညီသော အီးမေးလ်လိပ်စာအသစ်ကို ကျေးဇူးပြု၍ ရိုက်ထည့်ပါ။",
+       "resettokens-token-label": "$1 (လက်ရှိတန်ဖိုး: $2)",
        "bold_sample": "စာလုံးမည်း",
        "bold_tip": "စာလုံးမည်း",
        "italic_sample": "စာလုံး အစောင်း",
        "savechanges": "ပြောင်းလဲမှုများကို သိမ်းရန်",
        "publishpage": "စာမျက်နှာကို လွှင့်တင်ရန်",
        "publishchanges": "ပြောင်းလဲမှုများကို လွှင့်တင်ရန်",
+       "savearticle-start": "စာမျက်နှာကို သိမ်းရန်...",
+       "savechanges-start": "ပြောင်းလဲမှုများကို သိမ်းရန်...",
+       "publishpage-start": "စာမျက်နှာကို လွှင့်တင်ရန်...",
+       "publishchanges-start": "ပြောင်းလဲမှုများကို လွှင့်တင်ရန်...",
        "preview": "နမူနာ",
        "showpreview": "န​မူ​နာ​ပြ​ရန်",
        "showdiff": "ပြင်​ဆင်​ထား​သည်​များ​ကို​ ပြရန်",
+       "blankarticle": "<strong>သတိပေးချက်:</strong> သင် ဖန်တီးနေသော စာမျက်နှာသည် ဗလာဖြစ်နေသည်။ အကယ်၍ \"$1\" ကိုထပ်မံနှိပ်ပါက စာမျက်နှာသည် မည်သည့်အကြောင်းအရာမျှမပါဘဲ ဖန်တီးသွားပါလိမ့်မည်။",
        "anoneditwarning": "<strong>သတိပေးချက် - </strong> သင်သည် လော့ဂ်အင် ဝင်မထားပါ။ သင်တည်းဖြတ်မှု ပြုလုပ်ပါက သင့်အိုင်ပီလိပ်စာကို မည်သူမဆို တွေ့မြင်နိုင်မည်။ အကယ်၍ သင် <strong>[$1 လော့ဂ်အင်ဝင်]</strong> သို့မဟုတ် <strong>[$2 အကောင့်တစ်ခု ဖန်တီး]</strong>ပါက၊ သင့်တည်းဖြတ်မှုများသည် သင့်အမည်နှင့် တွဲဖက်မှတ်သားမည် ဖြစ်သည်။",
        "anonpreviewwarning": "သင်သည် logged in ဝင်မထားပါ။ သိမ်းဆည်းမည် ဆိုပါက သင်၏IP အား ဤစာမျက်နှာ မှတ်တမ်းတွင် မှတ်သားထားမည်ဖြစ်ပါသည်။",
+       "missingsummary": "<strong>ပြန်လည်အသိပေးချက်:</strong> သင်သည် တည်းဖြတ်မှုအကျဉ်းချုပ်ကို ရေးသွင်းမထားပါ။ အကယ်၍ \"$1\" ကိုထပ်မံနှိပ်လိုက်ပါက တည်းဖြတ်မှုအကျဉ်းချုပ်မပါဘဲ သိမ်းဆည်းသွားမည်ဖြစ်သည်။",
+       "selfredirect": "<strong>သတိပေးချက်:</strong> သင်သည် ဤစာမျက်နှာကိုပင် ပြန်ညွှန်းနေပါသည်။ ပြန်ညွှန်းအတွက် မှားယွင်းသည့်ဦးတည်ချက်ကို သတ်မှတ်မိသည်မျိုး ဖြစ်နိုင်သည်၊ သို့မဟုတ် မှားယွင်းသော စာမျက်နှာကို တည်းဖြတ်မိသည်မျိုးလည်း ဖြစ်နိုင်သည်။ အကယ်၍ \"$1\" ကိုထပ်မံနှိပ်လိုက်ပါက ပြန်ညွှန်းသည် ဖန်တီးလိုက်မည်သာဖြစ်သည်။",
        "missingcommenttext": "ကျေးဇူးပြု၍ မှတ်ချက်တစ်ခုရေးပါ။",
+       "missingcommentheader": "<strong>ပြန်လည်အသိပေးချက်:</strong> ဤမှတ်ချက်အတွက် အကြောင်းအရာတစ်ခု မထည့်သွင်းထားပါ။ အကယ်၍ \"$1\" ကို ထပ်မံနှိပ်လိုက်ပါက အကြောင်းအရာမပါဘဲ ဖန်တီးသွားမည်ဖြစ်သည်။",
        "summary-preview": "တည်းဖြတ်အကျဉ်းချုပ် နမူနာ:",
        "subject-preview": "အကြောင်းအရာ နမူနာ:",
+       "previewerrortext": "သင်၏ ပြောင်းလဲချက်များကို အစမ်းကြည့်ရန် ဆောင်ရွက်နေစဉ် အမှားတစ်ခု ဖြစ်ပွားခဲ့သည်။",
        "blockedtitle": "အသုံးပြုသူကို ပိတ်ပင်ထားသည်",
        "blockedtext": "<strong>သင်၏ အသုံးပြုသူအမည် သို့မဟုတ် အိုင်ပီလိပ်စာသည် ပိတ်ပင်ခြင်း ခံထားရသည်။</strong>\n\nဤပိတ်ပင်မှုအား $1 က ဆောင်ရွက်ခဲ့သည်။\nအကြောင်းရင်းမှာ <em>$2</em> ဖြစ်သည်။\n\n* ပိတ်ပင်ခြင်း စတင်ချိန်: $8\n* ပိတ်ပင်ခြင်း သက်တမ်းကုန်ချိန်: $6\n* ရည်ရွယ်ရာ blockee: $7\n\nသင်သည် ပိတ်ပင်မှုအတွက် ဆွေးနွေးရန် $1 သို့မဟုတ် အခြား [[{{MediaWiki:Grouppage-sysop}}|စီမံခန့်ခွဲသူ]] အား ဆက်သွယ်နိုင်သည်။\nသင့်အနေဖြင့် [[Special:Preferences|အကောင့်၏ ရွေးချယ်စရာများ]]ထဲတွင် ရေရာသော အီးမေးလိပ်စာအား မထည့်သွင်းထားပါက \"{{int:emailuser}}\" လုပ်ဆောင်ချက်ကို အသုံးပြုနိုင်မည် မဟုတ်ပါ။ အလားတူ ယင်းလုပ်ဆောင်ချက်ကို ပိတ်ပင်မခံရမှ လုပ်ဆောင်နိုင်မည်ဖြစ်သည်။\nသင်၏ လက်ရှိ အိုင်ပီလိပ်စာမှာ $3 ဖြစ်ပြီး၊ ပိတ်ပင်မှုအိုင်ဒီမှာ #$5 ဖြစ်သည်။\nသင်ပြုလုပ်မည့် စုံစမ်းမေးမြန်းမှုများတွင် အထက်ပါ အချက်များ အားလုံး ပါဝင်နေပါစေ။",
        "blockednoreason": "အကြောင်းပြချက် မပေးထားပါ",
        "whitelistedittext": "စာမျက်နှာများကို တည်းဖြတ်ရန် $1ရမည်။",
        "nosuchsectiontitle": "အပိုင်းကို ရှာမရနိုင်ပါ",
        "loginreqtitle": "login ဝင်ထားရန် လိုသည်",
-       "loginreqlink": "log in ဝင်",
+       "loginreqlink": "အကောင့်ဝင်ရန်",
        "loginreqpagetext": "အခြားစာမျက်နှာများကို ကြည့်ရန် $1ရမည်။",
        "accmailtitle": "စကားဝှက်ကို ပို့ပြီးပြီ",
        "newarticle": "(အသစ်)",
        "anontalkpagetext": "----\n<em>ဤသည်မှာ အကောင့်မဖန်တီးသော သို့မဟုတ် အကောင့်မရှိသော အမည်မသိ အသုံးပြုသူတစ်ဦးအတွက် ဆွေးနွေးချက် စာမျက်နှာ ဖြစ်သည်။</em>\nသို့အတွက် ကျွန်ုပ်တို့အနေဖြင့် အိုင်ပီလိပ်စာဂဏန်းကိုသာ သူ/သူမ အားခွဲခြားနိုင်ရန် အသုံးပြုရပါသည်။\nထိုသို့သော အိုင်ပီလိပ်စာများကို အသုံးပြုသူများစွာမှ မျှဝေသုံးစွဲနေနိုင်ပါသည်။\nသင်သည် အမည်မသိ အသုံးပြုသူတစ်ဦးဖြစ်ပြီး မသက်ဆိုင်သော သုံးသပ်ဆွေးနွေးချက်များက သင့်အား အနှောက်အယှက်ဖြစ်စေပါက၊ ကျေးဇူးပြု၍ [[Special:CreateAccount|အကောင့်တစ်ခု ဖန်တီးပါ]] သို့မဟုတ် [[Special:UserLogin|လော့ဂ်အင်ဝင်ရောက်ပြီး]] အခြား အမည်မသိအသုံးပြုသူများနှင့် ရောထွေးနေနိုင်ခြင်းကို ရှောင်ကြဉ်နိုင်ပါသည်။",
        "noarticletext": "ဤစာမျက်နှာတွင် ယခုလက်ရှိတွင် မည်သည့်စာသားမှ မရှိပါ။\nသင်သည် အခြားစာမျက်နှာများတွင် [[Special:Search/{{PAGENAME}}|ဤစာမျက်နှာ၏ ခေါင်းစဉ်ကို ရှာနိုင်သည်]]၊ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ဆက်စပ်ရာ မှတ်တမ်းများကို ရှာနိုင်သည်]၊ သို့မဟုတ် [{{fullurl:{{FULLPAGENAME}}|action=edit}} ဤစာမျက်နှာကို ဖန်တီးနိုင်သည်]</span>။",
        "noarticletext-nopermission": "ဤစာမျက်နှာတွင် ယခုလက်ရှိတွင် မည်သည့်စာသားမှ မရှိပါ။\nသင်သည် အခြားစာမျက်နှာများတွင် [[Special:Search/{{PAGENAME}}|ဤစာမျက်နှာ၏ ခေါင်းစဉ်ကို ရှာနိုင်သည်]]၊ သို့မဟုတ် <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ဆက်စပ်ရာ Logs များကို ရှာနိုင်သည်]</span>။ သို့သော် ဤစာမျက်နှာကို ဖန်တီးရန် သင့်တွင် အခွင့်အရေး မရှိပါ။",
+       "userpage-userdoesnotexist": "အသုံးပြုသူအကောင့် \"$1\" ကို မှတ်ပုံတင် မလုပ်ရသေးပါ။ ဤစာမျက်နှာကို ဖန်တီး/တည်းဖြတ်လိုပါက ကျေးဇူးပြု၍ စစ်ဆေးပေးပါ။",
        "userpage-userdoesnotexist-view": "အသုံးပြုသူအကောင့် \"$1\" သည် မှတ်ပုံမတင်ထားပါ။",
        "blocked-notice-logextract": "ဤအသုံးပြုသူအား လတ်တလောတွင် ပိတ်ပင်ထားသည်။\nနောက်ဆုံးပိတ်ပင်မှု မှတ်တမ်းအား ကိုးကားနိုင်ရန် အောက်တွင် ဖော်ပြထားသည်။",
        "clearyourcache": "<strong>မှတ်ချက်။</strong> သိမ်းဆည်းလိုက်ပြီးသည့်နောက် ပြောင်းလဲမှုများ မြင်ရနိုင်ရန် သင့်အနေဖြင့် ဘရောက်ဇာ၏ cache အား ဖြတ်ကျော်နိုင်ရန် လိုအပ်ပါသည်။\n* <strong>Firefox / Safari:</strong> <em>Reload</em> ကို နှိပ်နေစဉ်အတွင်း <em>Shift</em> ကို ဖိထားပါ၊ သို့မဟုတ် <em>Ctrl-F5</em> သို့ <em>Ctrl-R</em> (Mac တွင် <em>⌘-R</em>) ကို နှိပ်ပါ။\n* <strong>Google Chrome:</strong> <em>Ctrl-Shift-R</em> (Mac တွင် <em>⌘-Shift-R</em>) ကို နှိပ်ပါ။\n* <strong>Internet Explorer:</strong> <em>Refresh</em> ကို နှိပ်နေစဉ်အတွင်း <em>Ctrl</em> ကို ဖိထားပါ၊ သို့မဟုတ် <em>Ctrl-F5</em> ကို နှိပ်ပါ။\n* <strong>Opera:</strong> <em>Menu → Settings</em> (Mac တွင် <em>Opera → Preferences</em>) သို့ သွားပြီး <em>Privacy & security → Clear browsing data → Cached images and files</em> ကို ပြုလုပ်ပါ။",
-       "note": "'''မှတ်ချက် -'''",
+       "updated": "(မွမ်းမံပြီး)",
+       "note": "<strong>မှတ်စု:</strong>",
        "previewnote": "<strong>ဤသည်မှာ နမူနာ ကြည့်နေခြင်းသာဖြစ်ကြောင်း မမေ့ပါနှင့်။</strong>\nသင်ပြောင်းလဲထားသည်များကို မသိမ်းရသေးပါ။",
        "continue-editing": "တည်းဖြတ်ဧရိယာသို့ သွားရန်",
        "editing": "$1 ကို တည်းဖြတ်နေသည်",
        "yourdiff": "ကွဲပြားချက်များ",
        "copyrightwarning": "{{SITENAME}} တွင် ရေးသားမှုအားလုံးကို $2 အောက်တွင် ဖြန့်ဝေရန် ဆုံးဖြတ်ပြီး ဖြစ်သည်ကို ကျေးဇူးပြု၍ သတိပြုပါ။။ (အသေးစိတ်ကို $1 တွင်ကြည့်ပါ။)\nအကယ်၍ သင့်ရေးသားချက်များကို အညှာအတာမရှိ တည်းဖြတ်ခံရခြင်း၊ စိတ်တိုင်းကျ ဖြန့်ဝေခံရခြင်းတို့ကို အလိုမရှိပါက ဤနေရာတွင် မတင်ပါနှင့်။<br />\nသင်သည် ဤဆောင်းပါးကို သင်ကိုယ်တိုင်ရေးသားခြင်း၊ သို့မဟုတ် အများပြည်သူဆိုင်ရာဒိုမိန်းများ၊ ယင်းကဲ့သို့ လွတ်လပ်သည့် ရင်းမြစ်မှ ကူးယူထားခြင်း ဖြစ်ကြောင်းလည်း ဝန်ခံ ကတိပြုပါသည်။\n<strong>မူပိုင်ခွင့်ရှိသော စာ၊ပုံများကို ခွင့်ပြုချက်မရှိဘဲ မတင်ပါနှင့်။</strong>",
        "copyrightwarning2": "{{SITENAME}} တွင် ရေးသားမှုအားလုံးသည် အခြားပုံပိုးသူများ၏ တည်းဖြတ်၊ ပြောင်းလဲ၊ ဖယ်ရှားခံရနိုင်သည်ကို သတိပြုပါ။\nအကယ်၍ သင့်ရေးသားချက်များကို အညှာအတာမရှိ တည်းဖြတ်ခံရခြင်း၊ စိတ်တိုင်းကျ ဖြန့်ဝေခံရခြင်းတို့ကို အလိုမရှိပါက ဤနေရာတွင် မတင်ပါနှင့်။<br />\nသင်သည် ဤဆောင်းပါးကို သင်ကိုယ်တိုင်ရေးသားခြင်း၊ သို့မဟုတ် အများပြည်သူဆိုင်ရာဒိုမိန်းများ၊ ယင်းကဲ့သို့ လွတ်လပ်သည့် ရင်းမြစ်မှ ကူးယူထားခြင်း ဖြစ်ကြောင်းလည်း ဝန်ခံ ကတိပြုပါသည် (အသေးစိတ်ကို $1 တွင်ကြည့်ပါ)။\n<strong>မူပိုင်ခွင့်ရှိသော စာ၊ပုံများကို ခွင့်ပြုချက်မရှိဘဲ မတင်ပါနှင့်။</strong>",
+       "editpage-cannot-use-custom-model": "ဤစာမျက်နှာ၏ မာတိကာမော်ဒယ်ကို မပြောင်းလဲနိုင်ခဲ့ပါ။",
        "protectedpagewarning": "<strong>သတိပေးချက်။ ဤစာမျက်နှာအား စီမံခန့်ခွဲသူအဆင့်ရှိသူများသာ ပြင်ဆင်နိုင်ရန် ကာကွယ်ထားသည်။</strong>\nနောက်ဆုံးမှတ်တမ်းအား ကိုးကားနိုင်ရန် အောက်တွင် ဖော်ပြထားသည်။",
        "semiprotectedpagewarning": "<strong>မှတ်ချက်။</strong> ဤစာမျက်နှာအား အလိုအလျောက် အတည်ပြုထားသော အသုံးပြုသူအဆင့်ရှိသူများသာ တည်းဖြတ်နိုင်ရန် ကာကွယ်ထားသည်။\nနောက်ဆုံးမှတ်တမ်းအား ကိုးကားနိုင်ရန် အောက်တွင် ဖော်ပြထားသည်။",
        "titleprotectedwarning": "<strong>သတိပေးချက်။ ဤစာမျက်နှာကို ကာကွယ်ထားပြီး ဖန်တီးနိုင်ရန်အတွက် [[Special:ListGroupRights|အထူး အခွင့်အရေးများ]]ရှိထားရန် လိုအပ်သည်။</strong>\nနောက်ဆုံးမှတ်တမ်းအား ကိုးကားနိုင်ရန် အောက်တွင် ဖော်ပြထားသည်။",
        "template-protected": "(ကာကွယ်ထားသည်)",
        "template-semiprotected": "(တစ်စိတ်တစ်ပိုင်း ကာကွယ်ထားသည်)",
        "hiddencategories": "ဤစာမျက်နှာသည် {{PLURAL:$1|ဝှက်ထားသော ကဏ္ဍတစ်ခု|ဝှက်ထားသော ကဏ္ဍ $1 ခု}} ၏ အဖွဲ့ဝင် ဖြစ်သည်။",
+       "nocreatetext": "{{SITENAME}} သည် စာမျက်နှာသစ်များ ဖန်တီးနိုင်စွမ်းကို ကန့်သတ်ထားသည်။ သင်သည် နောက်ပြန်သွားပြီး ရှိနှင့်ပြီးသား စာမျက်နှာများကို တည်းဖြတ်နိုင်သည်၊ သို့မဟုတ် [[Special:UserLogin|အကောင့်တစ်ခုထဲဝင်ရောက် သို့ ဖန်တီးနိုင်သည်]]",
        "nocreate-loggedin": "သင်သည် စာမျက်နှာအသစ် ဖန်တီးခွင့်မရှိပါ။",
        "sectioneditnotsupported-title": "ခေါင်းစဉ်ခွဲအလိုက် တည်းဖြတ်ခြင်းကို မထောက်ပံ့ထားပါ",
        "sectioneditnotsupported-text": "အပိုင်းလိုက်တည်းဖြတ်ခြင်းကို ဤစာမျက်နှာတွင် မရနိုင်ပါ။",
        "permissionserrorstext-withaction": "အောက်ပါ အကြောင်းပြချက် {{PLURAL:$1|ခု|ခု}} ကြောင့် $2 အတွက် ခွင့်ပြုချက်မရှိပါ -",
        "recreate-moveddeleted-warn": "'''သတိပေးချက်။ သင်သည် ယခင်က ဖျက်ထားသော စာမျက်နှာတစ်ခုကို ပြန်လည်ဖန်တီးနေသည်။'''\n\nသင့်အနေနှင့် ဤစာမျက်နှာကို ဆက်လက်တည်းဖြတ်ရန် သင့်တော်မည် မသင့်တော်မည်ကို စဉ်းစားသင့်သည်။\nဖျက်ထားခြင်း နှင့် ရွှေ့ထားခြင်းတို့၏ မှတ်တမ်းကို သင့်အတွက် အလွယ်တကူ ကိုးကားနိုင်ရန် ဖော်ပြထားသည်။",
        "moveddeleted-notice": "ဤစာမျက်နှာကို ဖျက်ထားသည်။\nဖျက်ထားခြင်း၊ ကာကွယ်ထားခြင်းနှင့် ရွှေ့ပြောင်းထားခြင်းတို့နှင့် ပတ်သက်သော မှတ်တမ်းကို ကိုးကားနိုင်ရန် အောက်တွင် ဖော်ပြထားသည်။",
+       "moveddeleted-notice-recent": "စိတ်မကောင်းပါ၊ ဤစာမျက်နှာ မကြာသေးခင်က (လွန်ခဲ့သော ၂၄ နာရီအတွင်း) ဖျက်ပစ်ခဲ့သည်။ စာမျက်နှာအတွက် ဖျက်ပစ်ခြင်း၊ ကာကွယ်ခြင်းနှင့် ရွေ့ပြောင်းခြင်း မှတ်တမ်းများကို ကိုးကားချက်အဖြစ် အောက်တွင် ဖော်ပြထားသည်။",
        "log-fulllog": "မှတ်တမ်းအပြည့်အစုံကြည့်ရန်",
        "edit-gone-missing": "စာမျက်နှာကို အပ်ဒိတ်မလုပ်နိုင်ပါ။\nအဖျက်ခံလိုက်ရပုံပေါ်သည်။",
        "edit-conflict": "အငြင်းပွားမှုကို တည်းဖြတ်ရန်။",
        "postedit-confirmation-created": "စာမျက်နှာကို ဖန်တီးပြီးပြီ။",
        "postedit-confirmation-restored": "စာမျက်နှာကို ပြန်လည်ထိန်းသိမ်းပြီးပြီ။",
        "postedit-confirmation-saved": "သင့်တည်းဖြတ်မှုကို သိမ်းဆည်းပြီးပြီ။",
+       "postedit-confirmation-published": "သင်၏တည်းဖြတ်မှုကို လွှင့်တင်ခဲ့သည်။",
        "edit-already-exists": "စာမျက်နှာအသစ်တစ်ခု မဖန်တီးနိုင်ပါ။\nယင်းစာမျက်နှာ တည်ရှိပြီး ဖြစ်သည်။",
+       "defaultmessagetext": "ပုံမှန် အသိပေးချက် စာသား",
+       "invalid-content-data": "မဆီလျော်သော မာတိကာဒေတာ",
+       "content-not-allowed-here": "\"$1\" မာတိကာကို [[$2]] စာမျက်နှာပေါ်တွင် ခွင့်မပြုပါ။",
+       "editpage-invalidcontentmodel-title": "မာတိကာမော်ဒယ်သည် မထောက်ပံ့ထားပါ",
+       "editpage-invalidcontentmodel-text": "မာတိကာမော်ဒယ် \"$1\" သည် မထောက်ပံ့ထားပါ။",
+       "editpage-notsupportedcontentformat-title": "မာတိကာပုံစံသည် မထောက်ပံ့ထားပါ",
+       "editpage-notsupportedcontentformat-text": "မာတိကာပုံစံ $1 အား မာတိကာမော်ဒယ် $2 မှ မထောက်ပံ့ထားပါ။",
        "content-model-wikitext": "ဝီကီစာသား",
        "duplicate-args-category": "တမ်းပလိတ်တွင်းရှိ arguments ထပ်နေသော စာမျက်နှာများ",
        "post-expand-template-inclusion-warning": "'''သတိပေးချက် -''' တမ်းပလိတ်အရွယ်အစား ကြီးလွန်းနေသည်။\nအချို့တမ်းပလိတ်တို့ ပါဝင်မည်မဟုတ်။",
        "parser-template-loop-warning": "တမ်းပလိတ်များ လှည့်ပတ်ဆက်စပ် နေသည်ကို တွေ့ရသည်။ [[$1]]",
        "undo-failure": "ကြားဖြတ် တည်းဖြတ်မှုများကြောင့် တည်းဖြတ်မှုကို နောက်ပြန် မပြင်နိုင်တော့ပါ။",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|ဆွေးနွေး]]) ၏ တည်းဖြတ်မူ $1 ကို ပြန်လည်ပယ်ဖျက်လိုက်သည်",
+       "cantcreateaccount-text": "ဤအိုင်ပီလိပ်စာ (<strong>$1</strong>) မှ အကောင့်ဖန်တီးခြင်းကို [[User:$3|$3]] က ပိတ်ပင်ထားသည်။ \n\n$3 က ပေးထားသော အကြောင်းပြချက်မှာ <em>$2</em>",
+       "cantcreateaccount-range-text": "သင်၏အိုင်ပီလိပ်စာ (<strong>$4</strong>) ပါဝင်သော ဤအိုင်ပီလိပ်စာ (<strong>$1</strong>) မှ အကောင့်ဖန်တီးခြင်းကို [[User:$3|$3]] က ပိတ်ပင်ထားသည်။ \n\n$3 က ပေးထားသော အကြောင်းပြချက်မှာ <em>$2</em>",
        "viewpagelogs": "ဤစာမျက်နှာအတွက် မှတ်တမ်းများကို ကြည့်ရန်",
        "nohistory": "ဤစာမျက်နှာတွင် တည်းဖြတ်မှု ရာဇဝင်မရှိပါ",
        "currentrev": "နောက်ဆုံးမူ",
        "currentrev-asof": "$1 က နောက်ဆုံး တည်းဖြတ်မူ",
        "revisionasof": "$1 ရက်နေ့က မူ",
        "revision-info": "$1 နေ့က {{GENDER:$6|$2}}$7 တည်းဖြတ်သည့်မူ",
-       "previousrevision": "မူဟောင်း",
+       "previousrevision": "← မူဟောင်း",
        "nextrevision": "ပိုသစ်သော တည်းဖြတ်မူ →",
        "currentrevisionlink": "နောက်ဆုံး မူ",
        "cur": "လက်ရှိ",
        "history-show-deleted": "ဖျက်ထားသော မူများသာ",
        "histfirst": "အဟောင်းဆုံး",
        "histlast": "အသစ်ဆုံး",
+       "historysize": "({{PLURAL:$1|1 ဘိုက်|$1 ဘိုက်}})",
        "historyempty": "(ဘာမှမရှိ)",
        "history-feed-title": "မူရာဇဝင်မှတ်တမ်း",
        "history-feed-description": "ဝီကီပေါ်ရှိ ဤစာမျက်နှာ၏ တည်းဖြတ်မှုရာဇဝင်",
        "history-feed-item-nocomment": "$2 က $1",
+       "history-feed-empty": "တောင်းဆိုလိုက်သော စာမျက်နှာ မတည်ရှိပါ။ ယင်းအား ဝီကီမှ ဖျက်ပစ်၊ အမည်ပြောင်းခဲ့သည်မျိုး ဖြစ်နိုင်ပါသည်။ သင့်လျော်သော စာမျက်နှာသစ်များအတွက် [[Special:Search|ဝီကီတွင် ရှာဖွေရန်]] စမ်းကြည့်ပါ။",
        "rev-deleted-comment": "(တည်းဖြတ်မှုအတိုချုပ် ဖယ်ရှားပြီး)",
        "rev-deleted-user": "(အသုံးပြုသူအမည် ဖယ်ရှားပြီး)",
        "rev-deleted-event": "(အသေးစိတ် မှတ်တမ်း ဖယ်ရှားပြီးပြီ)",
        "revdel-restore": "မည်မျှ ရှုမြင်နိုင်သည်ကို ပြောင်းရန်",
        "pagehist": "စာမျက်နှာ မှတ်တမ်း",
        "deletedhist": "ဖျက်ပစ်လိုက်သော မှတ်တမ်း",
+       "revdelete-reason-dropdown": "*ယေဘုယျ ဖျက်ပစ်ခြင်း အကြောင်းပြချက်များ\n** မူပိုင်ခွင့် ချိုးဖောက်မှု\n** မသင့်တော်သောမှတ်ချက် သို့ ပုဂ္ဂိုလ်ရေးအချက်အလက်\n** မသင့်တော်သော အသုံးပြုသူအမည်\n** အသရေဖျက်နိုင်ခြေရှိသော အချက်အလက်",
        "revdelete-otherreason": "အခြားသော/နောက်ထပ် အကြောင်းပြချက် -",
        "revdelete-reasonotherlist": "အခြား အကြောင်းပြချက်",
        "revdelete-edit-reasonlist": "ဖျက်ပစ်လိုက်ရသော အကြောင်းရင်းများကို တည်းဖြတ်ရန်",
        "mergehistory-go": "ပေါင်းစည်းနိုင်သော တည်းဖြတ်မှုများကို ပြရန်",
        "mergehistory-submit": "မူများကို ပေါင်းရန်",
        "mergehistory-empty": "ပေါင်းစည်းနိုင်သော မူများ မရှိပါ။",
+       "mergehistory-fail-invalid-source": "ရင်းမြစ်စာမျက်နှာသည် မဆီလျော်ပါ။",
+       "mergehistory-fail-invalid-dest": "ဦးတည်စာမျက်နှာသည် ဆီလျော်ပါ။",
+       "mergehistory-fail-permission": "ရာဇဝင် ပေါင်းစပ်ရန် ခွင့်ပြုချက်များ မလုံလောက်ပါ။",
+       "mergehistory-fail-self-merge": "ရင်းမြစ်နှင့် ဦးတည်စာမျက်နှာများသည် အတူတူပင်ဖြစ်သည်။",
        "mergehistory-no-source": "ရင်းမြစ်စာမျက်နှာ $1 မတည်ရှိပါ။",
        "mergehistory-no-destination": "သတ်မှတ်ထားသောစာမျက်နှာ $1 မတည်ရှိပါ။",
        "mergehistory-invalid-source": "ရင်းမြစ်စာမျက်နှာသည် တရားဝင်သော ခေါင်းစဉ် ဖြစ်ရမည်။",
        "search-category": "(ကဏ္ဍ $1)",
        "search-file-match": "(ကိုက်ညီသော ဖိုင်အကြောင်းအရာ)",
        "search-suggest": "$1 ဟု ဆိုလိုပါသလား။",
+       "search-rewritten": "$1 အတွက် ရလဒ်များ ပြသခြင်း။ $2 အတွက် ရှာဖွေရန်။",
        "search-interwiki-caption": "ညီအစ်မ ပရောဂျက်များမှ ရလဒ်များ",
        "search-interwiki-default": "$1 မှ ရလဒ်များ -",
        "search-interwiki-more": "(နောက်ထပ်)",
+       "search-interwiki-more-results": "ရလဒ်များ ပို၍",
        "search-relatedarticle": "ဆက်နွယ်သော",
        "searchrelated": "ဆက်နွယ်သော",
        "searchall": "အားလုံး",
        "powersearch-togglelabel": "စစ်ဆေးရန် -",
        "powersearch-toggleall": "အားလုံး",
        "powersearch-togglenone": "အမည်ညွှန်းမရှိ",
+       "powersearch-remember": "နောင်ရှာဖွေမှုများအတွက် ရွေးချယ်မှုကို အမှတ်ရရန်",
        "search-external": "အပြင်တွင် ရှာရန်",
+       "searchdisabled": "{{SITENAME}} ရှာဖွေခြင်းကို ပိတ်ထားပါသည်။ ဤအတောအတွင်း ဂူဂဲလ်မှတဆင့် ရှာဖွေနိုင်သည်။ မှတ်သားရန်မှာ {{SITENAME}} ရှိအကြောင်းအရာ အညွှန်းများသည် ခေတ်နောက်ကျနိုင်သည်။",
+       "search-error": "ရှာဖွေနေစဉ် အမှားတစ်ခု ဖြစ်ပွားခဲ့သည်: $1",
+       "search-warning": "ရှာဖွေနေစဉ် သတိပေးချက်တစ်ခု ဖြစ်ပွားခဲ့သည်: $1",
        "preferences": "​ရွေး​ချယ်​စ​ရာ​များ​",
        "mypreferences": "​ရွေး​ချယ်​စ​ရာ​များ​",
        "prefs-edits": "တည်းဖြတ်မှုအရေအတွက် -",
+       "prefsnologintext2": "သင်၏ အပြင်အဆင်များကို ပြောင်းလဲရန် အကောင့်ထဲဝင်ရောက်ပါ။",
        "prefs-skin": "အသွင်အပြင်",
        "skin-preview": "နမူနာ",
        "datedefault": "မရွေးချယ်",
        "prefs-misc": "အသေးအမွှား",
        "prefs-resetpass": "စကားဝှက် ပြောင်းရန်",
        "prefs-changeemail": "အီးမေးလိပ်စာ ပြင်ဆင် သို့ ဖယ်ရှားရန်",
+       "prefs-setemail": "အီးမေးလ် လိပ်စာ ရိုက်ထည့်ပါ",
        "prefs-email": "အီးမေးအတွက် ရွေးချယ်စရာ",
        "prefs-rendering": "ပုံပန်းသွင်ပြင်",
        "saveprefs": "သိမ်းရန်",
        "restoreprefs": "မူလအပြင်အဆင်အားလုံးသို့ ပြန်ပြောင်းရန် (အပိုင်းအားလုံးတွင်)",
        "prefs-editing": "တည်းဖြတ်ခြင်း",
        "searchresultshead": "ရှာဖွေရန်",
+       "stub-threshold-sample-link": "နမူနာ",
        "stub-threshold-disabled": "ပိတ်ထားသည်",
        "recentchangesdays": "လတ်တလောအပြောင်းအလဲများကို ပြရန်နေ့များ -",
        "recentchangesdays-max": "အများဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}",
        "timezoneregion-indian": "အိန္ဒိယသမုဒ္ဒရာ",
        "timezoneregion-pacific": "ပစိဖိတ်သမုဒ္ဒရာ",
        "allowemail": "ကျွန်ုပ်ထံသို့ အခြားအသုံးပြုသူများ အီးမေးလ်ပေးပို့ခြင်းကို ခွင့်ပြုရန်",
+       "email-allow-new-users-label": "အသစ်စက်စက် အသုံးပြုသူများဆီမှ အီးမေးလ်လက်ခံရန် ခွင့်ပြုမည်",
+       "email-blacklist-label": "ဤအသုံးပြုသူများ မိမိအား အီးမေးလ်ပို့ခြင်းကို ပိတ်ထားမည်",
        "prefs-searchoptions": "ရှာဖွေရန်",
        "prefs-namespaces": "အမည်ညွှန်း",
        "default": "ပုံမှန်အားဖြင့်",
-       "prefs-files": "ဖိုင်",
+       "prefs-files": "ဖိုင်များ",
        "prefs-custom-css": "စိတ်ကြိုက် CSS",
        "prefs-custom-js": "စိတ်ကြိုက် Javascript",
        "prefs-emailconfirm-label": "အီးမေးအတည်ပြုရန်",
-       "youremail": "အီး​မေး -",
+       "youremail": "အီးမေးလ်:",
        "username": "{{GENDER:$1|အသုံးပြုသူအမည်}} -",
        "prefs-memberingroups": "{{PLURAL:$1|အုပ်စု|အုပ်စုများ}}၏ {{GENDER:$2|အဖွဲ့ဝင်}} -",
+       "group-membership-link-with-expiry": "$1 ($2 မတိုင်ခင်)",
        "prefs-registration": "မှတ်ပုံတင်သည့် အချိန် -",
        "yourrealname": "နာမည်ရင်း -",
        "yourlanguage": "ဘာသာစကား:",
        "yournick": "လက်မှတ်အသစ် -",
+       "prefs-help-signature": "ဆွေးနွေးချက်စာမျက်နှာများတွင် မှတ်ချက်ပေးရာ၌ \"<nowiki>~~~~</nowiki>\" ဖြင့် လက်မှတ်ထိုးသင့်ပါသည်၊ ယင်းသည် သင်၏လက်မှတ်နှင့် အချိန်မှတ်တမ်းကို ပြောင်းပေးမည်ဖြစ်သည်။",
        "badsig": "တရားမဝင်သည့် လက်မှတ်အကြမ်း။\nHTML tags ကို စစ်ဆေးပါ။",
        "badsiglength": "သင့်လက်မှတ်သည် ရှည်လွန်းနေပါသည်။\nယင်းသည် စာလုံး {{PLURAL:$1|လုံး|လုံး}}ထက် မရှည်ရပါ။",
        "yourgender": "သင်ဘယ်လို ဖော်ပြစေချင်ပါသလဲ?",
        "gender-unknown": "သင့်အားရည်ညွှန်းရာတွင် ဆော့ဖ်ဝဲလ်သည် ဖြစ်နိုင်ပါက ဘက်မလိုက်သည့် လိင်အသုံးအနှုန်းများကို အသုံးပြုလိမ့်မည်",
        "gender-male": "သူသည် ဝီကီစာမျက်နှာများကို တည်းဖြတ်သည်",
        "gender-female": "သူမသည် ဝီကီစာမျက်နှာများကို တည်းဖြတ်သည်",
-       "email": "အီးမေး",
+       "prefs-help-gender": "ဤအပြင်အဆင်ကို သတ်မှတ်လိုက သတ်မှတ်နိုင်သည်။ ဆော့ဝဲလ်က အခြားသူများကို သင့်အားဖော်ပြရာတွင် သင့်လျော်သော သဒ္ဒါစဉ်အတိုင်း အသုံးပြုပါသည်။ ဤသတင်းအချက်အလက်သည် အများကြည့်နိုင်သောအရာ ဖြစ်ပါလိမ့်မည်။",
+       "email": "အီးမေးလ်",
+       "prefs-help-realname": "နာမည်ရင်းကို ထည့်သွင်းလိုကထည့်နိုင်သည်။ ထည့်သွင်းထားပါက သင်၏လုပ်ဆောင်မှုအတွက် ထည့်သွင်းတွက်ချက်မှုအား သင့်ကိုပေးရာတွင် အသုံးပြုနိုင်သည်။",
        "prefs-help-email": "အီးမေးလ်လိပ်စာ ပေးမည် မပေးမည်မှာ သင့်သဘောသာ ဖြစ်ပါသည်။ သို့သော်လည်း သင် စကားဝှက်ကို မေ့သွားပါက စကားဝှက်ကို reset လုပ်ရန် အီးမေးလ်လိပ်စာ လိုအပ်ပါလိမ့်မည်။",
        "prefs-help-email-others": "သင့်အသုံးပြုသူစာမျက်နှာ သို့မဟုတ် ဆွေးနွေးရန်စာမျက်နှာရှိ လင့်မှတဆင့် သင့်ထံ အခြားသူများ အီးမေးမှဆက်သွယ်ရန်လည်း ရွေးချယ်နိုင်သည်။\nအခြားသူများ သင့်ထံဆက်သွယ်သည့်အခါ သင့်အီးမေးကို သူတို့အား ဖော်ပြမည်မဟုတ်ပါ။",
        "prefs-help-email-required": "အီးမေးလိပ်စာ လိုအပ်ပါသည်။",
        "prefs-dateformat": "နေ့စွဲပုံစံ",
        "prefs-timeoffset": "အချိန် တန်ဖိုး",
        "prefs-advancedediting": "အထွေထွေ ရွေးချယ်စရာများ",
+       "prefs-developertools": "ဆော့ဝဲလ်တီထွင်ဖန်တီးသူ ကိရိယာများ",
        "prefs-editor": "တည်းဖြတ်သူ",
        "prefs-preview": "နမူနာ",
        "prefs-advancedrc": "အဆင့်မြင့် ရွေးချယ်မှု",
        "prefs-displaywatchlist": "ပြသရန် ရွေးချယ်မှု",
        "prefs-tokenwatchlist": "တိုကင်",
        "prefs-diffs": "ကွဲပြားချက်",
+       "prefs-help-prefershttps": "ဤအပြင်အဆင်များသည် နောက်တခါအကောင့်ထဲဝင်ပါက သက်ရောက်မှုရှိလာပါလိမ့်မည်။",
+       "prefswarning-warning": "သင်၏အပြင်အဆင်များအတွက် မသိမ်းဆည်းရသေးသော ပြောင်းလဲမှုများကို လုပ်ဆောင်ခဲ့သည်။ အကယ်၍ \"$1\" ကိုမနှိပ်ဘဲ ဤစာမျက်နှာကို ချန်ထားလိုက်ပါက သင်၏အပြင်အဆင်များသည် မွမ်းမံသွားလိမ့်မည်မဟုတ်ပါ။",
        "userrights": "အသုံးပြုသူ အခွင့်အရေးများ",
        "userrights-lookup-user": "အသုံးပြုသူတစ်ဦးကို ရွေးချယ်ရန်",
        "userrights-user-editname": "အသုံးပြုသူအမည်တစ်ခုကို ထည့်ပါ -",
        "userrights-viewusergroup": "{{GENDER:$1|အသုံးပြုသူ}} အုပ်စုများကို ကြည့်ရန်",
        "saveusergroups": "{{GENDER:$1|အသုံးပြုသူ}}အုပ်စုများကို သိမ်းရန်",
        "userrights-groupsmember": "အဖွဲ့ဝင်",
+       "userrights-groupsmember-auto": "အကြွင်းမဲ့ အဖွဲ့ဝင်:",
        "userrights-groups-help": "ဤအသုံးပြုသူ၏ အုပ်စုများကို အောက်ပါအတိုင်း သင်ပြောင်းလဲနိုင်သည်\n* အမှန်ခြစ်အကွက်သည် ထိုအသုံးပြုသူသည် ယင်းအုပ်စုတွင် ပါဝင်ကြောင်း ဆိုလိုသည်။\n* အမှန်ခြစ်မပါသော အကွက်သည် ထိုအသုံးပြုသူသည် ယင်းအုပ်စုတွင် မပါဝင်ကြောင်း ဆိုလိုသည်။\n* ခရေပွင့် * အမှတ်အသားသည် အုပ်စုတစ်ခုအတွင်းသို့ ထည့်သွင်းပြီးပါက ပြန်လည် ဖယ်ရှားမရနိုင်ကြောင်း (အပြန်အလှန်) ကို ဆိုလိုသည်။\n* သင်္ကေတ # အမှတ်အသားသည် ဤအုပ်စုအဖွဲ့ဝင် သက်တမ်းကို ပြန်လည်ထည့်သွင်းနိုင်ပြီး ရှေ့တိုးပေးရန် မဖြစ်နိုင်ကြောင်း ဖော်ပြသည်။",
        "userrights-reason": "အ​ကြောင်း​ပြ​ချက်:",
+       "userrights-no-interwiki": "အခြားဝီကီများ၌ အသုံးပြုသူ အခွင့်ရေးများကို တည်းဖြတ်ရန် သင့်တွင် ခွင့်ပြုချက်မရှိပါ။",
        "userrights-changeable-col": "သင်ပြောင်းလဲပေးနိုင်သောအုပ်စုများ",
        "userrights-unchangeable-col": "သင်ပြောင်းလဲမပေးနိုင်သောအုပ်စုများ",
+       "userrights-expiry-current": "သက်တမ်းကုန်ချိန် $1",
        "userrights-expiry-none": "သက်တမ်းကုန်ဆုံးခြင်း မရှိ",
+       "userrights-expiry": "သက်တမ်းကုန်လွန်မည်:",
+       "userrights-expiry-othertime": "အခြားအချိန်:",
+       "userrights-expiry-options": "1 ရက်:1 day,၁ ပတ်:1 week,၁ လ:1 month,၃ လ:3 months,၆ လ:6 months,၁ နှစ်:1 year",
+       "userrights-invalid-expiry": "အုပ်စု \"$1\" အတွက် သက်တမ်းကုန်ချိန်မှာ မဆီလျော်ပါ။",
+       "userrights-expiry-in-past": "အုပ်စု \"$1\" အတွက် သက်တမ်းကုန်ချိန်မှာ အတိတ်ကဖြစ်သည်။",
        "group": "အုပ်စု -",
        "group-user": "အသုံးပြုသူများ",
        "group-autoconfirmed": "အလိုအလျောက် အတည်ပြုထားသော အသုံးပြုသူများ",
        "group-bot": "ဘော့များ",
        "group-sysop": "စီမံခန့်ခွဲသူများ",
-       "group-bureaucrat": "ဗျူရိုကရက်",
+       "group-bureaucrat": "ဗျူရိုကရက်များ",
        "group-all": "(အားလုံး)",
        "group-user-member": "{{GENDER:$1|အသုံးပြုသူ}}",
        "group-autoconfirmed-member": "{{GENDER:$1|အလိုအလျောက် အတည်ပြုထားသော အသုံးပြုသူ}}",
        "right-createpage": "စာမျက်နှာများကို ဖန်တီးရန် (ဆွေးနွေးချက်စာမျက်နှာများမဟုတ်)",
        "right-createtalk": "ဆွေးနွေးချက်စာမျက်နှာများ စတင်ရေးသားရန်",
        "right-createaccount": "အသုံးပြုသူအကောင့်အသစ်ကို ဖန်တီးရန်",
+       "right-autocreateaccount": "ပြင်ပအသုံးပြုသူ အကောင့်တစ်ခုဖြင့် အလိုအလျောက် အကောင့်ထဲ ဝင်ရန်",
        "right-minoredit": "တည်းဖြတ်မှုများကို အရေးမကြီးဟု မှတ်သားရန်",
        "right-move": "စာမျက်နှာများကို ရွှေ့ပြောင်းပါ",
        "right-move-subpages": "စာမျက်နှာများကို ယင်းတို့၏စာမျက်နှာအခွဲတို့နှင့်တကွ ရွှေ့ရန်",
+       "right-move-categorypages": "ကဏ္ဍစာမျက်နှာများကို ရွေ့ရန်",
        "right-movefile": "ဖိုင်များရွှေ့ရန်",
        "right-suppressredirect": "စာမျက်နှာများကို ရွှေ့သောအခါ မူရင်းစာမျက်နှာတို့မှ ပြန်ညွှန်းများ မဖန်တီးရန်",
        "right-upload": "ဖိုင်များတင်ရန်",
        "right-hideuser": "အသုံးပြုသူအမည်ကို ပိတ်ပင်ရန်နှင့် ယင်းအမည်ကို အများမမြင်နိုင်အောင် ဝှက်ထားရန်",
        "right-unblockself": "ကိုယ့်ကိုကိုယ် ပြန်မပိတ်ပင်ရန်",
        "right-protect": "ကာကွယ်မှုအဆင့် ပြောင်းလဲရန်နှင့် သွယ်ဖြာ-ကာကွယ်ထားသည့် စာမျက်နှာများကို တည်းဖြတ်ရန်",
+       "right-editcontentmodel": "စာမျက်နှာ၏ မာတိကာမော်ဒယ်ကို ပြင်ဆင်ရန်",
        "right-editusercss": "အခြားအသုံးပြုသူများ၏ CSS ဖိုင်ကို တည်းဖြတ်ရန်",
        "right-edituserjs": "အခြားအသုံးပြုသူများ၏ JavaScript ဖိုင်ကို တည်းဖြတ်ရန်",
+       "right-viewmywatchlist": "သင်၏ကိုယ်ပိုင် စောင့်ကြည့်စာရင်းကို ကြည့်ရန်",
+       "right-viewmyprivateinfo": "သင်၏ကိုယ်ပိုင် ပုဂ္ဂလိကဒေတာကို ကြည့်ရန် (ဥပမာ - အီးမေးလ်လိပ်စာ၊ နာမည်ရင်း)",
+       "right-editmyprivateinfo": "သင်၏ကိုယ်ပိုင် ပုဂ္ဂလိကဒေတာကို ပြင်ရန် (ဥပမာ - အီးမေးလ်လိပ်စာ၊ နာမည်ရင်း)",
+       "right-editmyoptions": "သင်၏ကိုယ်ပိုင် အပြင်အဆင်များကို ပြင်ရန်",
+       "right-markbotedits": "နောက်ပြန်ပြင်သော တည်းဖြတ်မှုများကို ဘော့တည်းဖြတ်မှုအဖြစ် မှတ်သားရန်",
        "right-import": "အခြားဝီကီများမှ စာမျက်နှာများကို ထည့်သွင်းရန်",
        "right-importupload": "Upload တင်လိုက်သော ဖိုင်တစ်ခုမှ စာမျက်နှာများကို ထည့်သွင်းရန်",
        "right-patrol": "အခြားသောတည်းဖြတ်မှုများကို စောင့်ကြည့်နေသည်ဟု မှတ်သားရန်",
        "right-userrights": "အသုံးပြုသူ၏အခွင့်အရေးများအားလုံးကို တည်းဖြတ်ရန်",
        "right-userrights-interwiki": "အခြားဝီကီများမှ အသုံးပြုသူများ၏ အသုံးပြုသူအခွင့်အရေးများကို တည်းဖြတ်ရန်",
        "right-sendemail": "အခြားအသုံးပြုသူများကို အီးမေးပို့ရန်",
+       "grant-group-email": "အီးမေးလ် ပို့ရန်",
        "grant-blockusers": "အသုံးပြုသူများအား ပိတ်ပင်ခြင်းနှင့် ပိတ်ပင်မှု ဖယ်ရှားခြင်း",
+       "grant-createaccount": "အကောင့်များ ဖန်တီးရန်",
+       "grant-createeditmovepage": "စာမျက်နှာများကို ဖန်တီး၊ တည်းဖြတ်၊ ရွေ့ပြောင်းရန်",
+       "grant-editmyoptions": "သင်၏အသုံးပြုသူ အပြင်အဆင်များကို ပြင်ရန်",
        "grant-editmywatchlist": "သင့် စောင့်ကြည့်စာရင်းကို တည်းဖြတ်ရန်",
+       "grant-editpage": "ရှိပြီးသား စာမျက်နှာများကို တည်းဖြတ်ရန်",
+       "grant-editprotected": "ကာကွယ်ထားသော စာမျက်နှာများကို တည်းဖြတ်ရန်",
+       "grant-protect": "ကာကွယ်ထားသော နှင့် မကာကွယ်ထားသော စာမျက်နှာများ",
+       "grant-sendemail": "အခြားအသုံးပြုသူများကို အီးမေးပို့ရန်",
+       "grant-uploadfile": "ဖိုင်အသစ်များ တင်ရန်",
+       "grant-basic": "အခြေခံ ရပိုင်ခွင့်များ",
+       "grant-viewdeleted": "ဖျက်ထားသော ဖိုင်နှင့်စာမျက်နှာများကို ကြည့်ရန်",
+       "grant-viewmywatchlist": "သင့် စောင့်ကြည့်စာရင်းကို ကြည့်ရန်",
        "newuserlogpage": "အသုံးပြုသူအသစ်ရောက်လာခြင်း မှတ်တမ်း",
        "newuserlogpagetext": "ဤသည်မှာ အသုံးပြုသူအသစ် ဖန်တီးမှု မှတ်တမ်း ဖြစ်သည်။",
        "rightslog": "အသုံးပြုသူ၏ အခွင့်အရေးများ မှတ်တမ်း",
        "action-createpage": "ဤစာမျက်နှာကို ဖန်တီးရန်",
        "action-createtalk": "ဤဆွေးနွေးချက်စာမျက်နှာကို ဖန်တီးရန်",
        "action-createaccount": "ဤအသုံးပြုသူအကောင့်ကို ဖန်တီးရန်",
+       "action-history": "ဤစာမျက်နှာ၏ရာဇဝင်ကို ကြည့်ရန်",
        "action-minoredit": "ဤတည်းဖြတ်မှုကို အရေးမကြီးဟု မှတ်သားရန်",
        "action-move": "ဤစာမျက်နှာကို ရွှေ့ပြောင်းရန်",
        "action-move-subpages": "ဤစာမျက်နှာကို ၎င်း၏စာမျက်နှာခွဲများနှင့်တကွ ရွှေ့ရန်",
+       "action-move-categorypages": "ကဏ္ဍစာမျက်နှာများကို ရွေ့ရန်",
        "action-movefile": "ဤဖိုင်ကို ရွှေ့ရန်",
        "action-upload": "ဤဖိုင်ကို Upload တင်ရန်",
        "action-reupload": "ဤရှိပြီးသားဖိုင်ကို ထပ်ရေးရန်",
        "action-userrights": "အသုံးပြုသူ၏အခွင့်အရေးများအားလုံးကို တည်းဖြတ်ရန်",
        "action-userrights-interwiki": "အခြားဝီကီများမှ အသုံးပြုသူများ၏ အသုံးပြုသူအခွင့်အရေးများကို တည်းဖြတ်ရန်",
        "action-sendemail": "အီးမေးများ ပို့ရန်",
+       "action-editmyoptions": "သင်၏ ရွေးချယ်စရာများကို ပြင်ရန်",
        "action-editmywatchlist": "သင့် စောင့်ကြည့်စာရင်းကို တည်းဖြတ်ရန်",
        "action-viewmywatchlist": "သင့် စောင့်ကြည့်စာရင်းကို ကြည့်ရန်",
+       "action-editcontentmodel": "စာမျက်နှာ၏ မာတိကာမော်ဒယ်ကို ပြင်ဆင်ရန်",
        "action-purge": "ဤစာမျက်နှာကို ရှင်းသန့်ရန်",
        "nchanges": "ပြောင်းလဲချက် $1 {{PLURAL:$1|ခု|ခု}}",
+       "enhancedrc-since-last-visit": "{{PLURAL:$1|သင် နောက်ဆုံးရောက်လာခဲ့ကတည်းက}} $1",
        "enhancedrc-history": "ရာဇဝင်",
        "recentchanges": "လတ်တလော အပြောင်းအလဲများ",
        "recentchanges-legend": "လတ်တလော အပြောင်းအလဲများအတွက် ရွေးချယ်စရာများ",
        "rcfilters-legend-heading": "<strong>အတိုကောက်များ စာရင်း:</strong>",
        "rcfilters-other-review-tools": "အခြား ဆန်းစစ်ကိရိယာများ",
        "rcfilters-group-results-by-page": "စာမျက်နှာအလိုက် ရလဒ်များ အုပ်စုဖွဲ့ရန်",
-       "rcfilters-activefilters": "သက်ဝင်နေသာ filter များ",
-       "rcfilters-advancedfilters": "အဆင့်မြင့် filter များ",
+       "rcfilters-activefilters": "သက်ဝင်နေသာ စိစစ်မှုများ",
+       "rcfilters-activefilters-hide": "ဝှက်",
+       "rcfilters-activefilters-show": "ပြ",
+       "rcfilters-advancedfilters": "အဆင့်မြင့် စိစစ်မှုများ",
        "rcfilters-limit-title": "ပြသမည့် ရလဒ်များ",
+       "rcfilters-limit-and-date-label": "$2 $1 {{PLURAL:$1|ပြောင်းလဲမှု|ပြောင်းလဲမှုများ}}",
+       "rcfilters-date-popup-title": "ရှာဖွေရန် အချိန်ကာလ",
        "rcfilters-days-title": "မကြာသေးမီက ရက်များ",
        "rcfilters-hours-title": "မကြာသေးမီက နာရီများ",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|ရက်|ရက်}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|နာရီ|နာရီ}}",
-       "rcfilters-quickfilters": "သိမ်းထားသော filter များ",
+       "rcfilters-highlighted-filters-list": "မီးမောင်းထိုးပြထားသည်: $1",
+       "rcfilters-quickfilters": "သိမ်းထားသော စိစစ်မှုများ",
        "rcfilters-quickfilters-placeholder-title": "မည်သည့် filter မှ မသိမ်းရသေးပါ",
-       "rcfilters-savedqueries-defaultlabel": "သိမ်းထားသော filter များ",
+       "rcfilters-savedqueries-defaultlabel": "သိမ်းထားသော စိစစ်မှုများ",
        "rcfilters-savedqueries-rename": "အမည်ပြန်ပြောင်းရန်",
        "rcfilters-savedqueries-setdefault": "မူလပုံသေအဖြစ် သတ်မှတ်ရန်",
        "rcfilters-savedqueries-unsetdefault": "မူလပုံသေအဖြစ်မှ ဖယ်ရှားရန်",
-       "rcfilters-savedqueries-remove": "á\80\96á\80\9aá\80ºá\80\9bá\80¾á\80¬á\80¸ရန်",
+       "rcfilters-savedqueries-remove": "á\80\96á\80»á\80\80á\80ºရန်",
        "rcfilters-savedqueries-new-name-label": "အမည်",
-       "rcfilters-savedqueries-new-name-placeholder": "filter ၏ ရည်ရွယ်ချက်ကို ဖော်ပြရန်",
-       "rcfilters-savedqueries-apply-label": "filter ဖန်တီးရန်",
-       "rcfilters-savedqueries-apply-and-setdefault-label": "မူလပုံသေ filter ဖန်တီးရန်",
+       "rcfilters-savedqueries-new-name-placeholder": "စိစစ်မှု၏ ရည်ရွယ်ချက်ကို ဖော်ပြရန်",
+       "rcfilters-savedqueries-apply-label": "စိစစ်မှု ဖန်တီးရန်",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "မူလပုံသေ စိစစ်မှုကို ဖန်တီးရန်",
        "rcfilters-savedqueries-cancel-label": "မလုပ်တော့ပါ",
-       "rcfilters-savedqueries-add-new-title": "လက်ရှိ filter အပြင်အဆင်များ သိမ်းရန်",
-       "rcfilters-restore-default-filters": "မူလပုံသေ filter များအတိုင်း ပြန်ထားရန်",
-       "rcfilters-clear-all-filters": "filter များအားလုံး ရှင်းလင်းရန်",
+       "rcfilters-savedqueries-add-new-title": "လက်ရှိ စိစစ်မှုအပြင်အဆင်များကို သိမ်းရန်",
+       "rcfilters-restore-default-filters": "မူလပုံသေ စိစစ်မှုများအတိုင်း ပြန်ထားရန်",
+       "rcfilters-clear-all-filters": "စိစစ်မှုများအားလုံး ရှင်းလင်းရန်",
        "rcfilters-show-new-changes": "နောက်ဆုံး ပြောင်းလဲမှုများကို ကြည့်ရန်",
-       "rcfilters-invalid-filter": "မရေရာသော filter",
+       "rcfilters-search-placeholder": "စိစစ်မှုစနစ် အပြောင်းအလဲများ (စိစစ်စနစ်အမည်အတွက် menu သို့မဟုတ် ရှာဖွေခလုတ်ကို အသုံးပြုပါ)",
+       "rcfilters-invalid-filter": "မရေရာသော စိစစ်မှု",
+       "rcfilters-empty-filter": "သက်ဝင်နေသော စိစစ်မှုစနစ်များ မရှိပါ။ ပံ့ပိုးမှုအားလုံးကို ပြသထားသည်။",
+       "rcfilters-filterlist-title": "စိစစ်မှုများ",
+       "rcfilters-filterlist-whatsthis": "အဲဒါက ဘယ်လိုလုပ်ဆောင်ပါသလဲ?",
+       "rcfilters-filterlist-feedbacklink": "ဤစိစစ်မှုကိရိယာများအကြောင်း မည်ကဲ့သို့ထင်မြင်သနည်း ပြောပြပါ",
+       "rcfilters-highlightbutton-title": "မီးမောင်းထိုးပြထားသော ရလဒ်များ",
        "rcfilters-highlightmenu-title": "အရောင်တစ်ခု ရွေးချယ်ပါ",
+       "rcfilters-highlightmenu-help": "ဤဂုဏ်အင်ကို မီးမောင်းထိုးပြရန် အရောင်တစ်ခုရွေးပါ",
+       "rcfilters-filterlist-noresults": "စိစစ်မှုများ မတွေ့ရှိပါ",
+       "rcfilters-filtergroup-authorship": "ပံ့ပိုးမှု စာပေလက်ရာ",
        "rcfilters-filter-editsbyself-label": "သင်၏ ပြောင်းလဲမှုများ",
        "rcfilters-filter-editsbyself-description": "သင်၏ ဆောင်ရွက်ချက်များ။",
        "rcfilters-filter-editsbyother-label": "အခြားသူများ၏ ပြောင်းလဲမှုများ",
        "rcfilters-filter-humans-description": "လူတည်းဖြတ်သူများ၏ တည်းဖြတ်မှုများ။",
        "rcfilters-filtergroup-reviewstatus": "အခြေအနေ သုံးသပ်ရန်",
        "rcfilters-filter-reviewstatus-unpatrolled-label": "မစောင့်ကြည့်မစစ်ဆေးရသေး",
+       "rcfilters-filter-reviewstatus-manual-label": "လူကိုယ်တိုင် စောင့်ကြပ်စစ်ဆေးပြီး",
+       "rcfilters-filter-reviewstatus-auto-label": "အလိုအလျောက် စောင့်ကြပ်စစ်ဆေးပြီး",
+       "rcfilters-filtergroup-significance": "အရေးပါထင်ရှားမှု",
        "rcfilters-filter-minor-label": "အရေးမကြီးသည့် တည်းဖြတ်မှုများ",
        "rcfilters-filter-minor-description": "အရေးမကြီးဟု မှတ်သားလိုက်သော တည်းဖြတ်မှုများ။",
        "rcfilters-filter-major-label": "အရေးမကြီး မဟုတ်သော တည်းဖြတ်မှုများ",
        "rcfilters-view-tags": "စာတွဲမှတ်ထားသော တည်းဖြတ်မှုများ",
        "rcfilters-view-namespaces-tooltip": "အမည်ညွှန်းအလိုက် ရလဒ်များ စစ်ထုတ်ရန်",
        "rcfilters-view-tags-tooltip": "တည်းဖြတ်စာတွဲများ အသုံးပြု၍ ရလဒ်များ စစ်ထုတ်ရန်",
-       "rcfilters-view-return-to-default-tooltip": "ပင်မ filter မီနူးသို့ ပြန်သွားရန်",
+       "rcfilters-view-return-to-default-tooltip": "ပင်မ စိစစ်မှုမီနူးသို့ ပြန်သွားရန်",
        "rcfilters-view-tags-help-icon-tooltip": "စာတွဲမှတ်ထားသော တည်းဖြတ်မှုများအကြောင်း ပိုမိုလေ့လာရန်",
+       "rcfilters-liveupdates-button": "အချိန်နှင့်တစ်ပြေးညီ မွမ်းမံမှုများ",
+       "rcfilters-liveupdates-button-title-on": "အချိန်နှင့်တစ်ပြေးညီ မွမ်းမံမှုများကို ပိတ်ရန်",
        "rcfilters-liveupdates-button-title-off": "ပြောင်းလဲမှုအသစ် ဖြစ်ပေါ်တိုင်း ပြသရန်",
        "rcfilters-watchlist-markseen-button": "ပြောင်းလဲမှုများအားလုံးကို ကြည့်ရှုပြီးကြောင်း မှတ်သားရန်",
        "rcfilters-watchlist-edit-watchlist-button": "သင့်စောင့်ကြည့်စာရင်းရှိ စာမျက်နှာများစာရင်းအား တည်းဖြတ်ရန်",
        "rcfilters-watchlist-showupdated": "သင်နောက်ဆုံးကြည့်ရှုခဲ့ပြီးနောက် ပြောင်းလဲမှုရှိခဲ့သော စာမျက်နှာများကို <strong>စာလုံးမဲ</strong> ဖြင့် ပြသထားသည်။",
+       "rcfilters-target-page-placeholder": "စာမျက်နှာနာမည် (သို့မဟုတ် ကဏ္ဍ) ရိုက်ထည့်ပါ",
        "rcnotefrom": "အောက်ပါတို့မှာ <strong>$3၊ $4</strong> မှစ၍ {{PLURAL:$5|ပြောင်းလဲမှု|ပြောင်းလဲမှုများ}} ဖြစ်သည်  (<strong>$1</strong> အထိ ပြထား)။",
        "rclistfromreset": "ရက်စွဲရွေးချယ်မှုအား ပြန်စရန်",
        "rclistfrom": "$3 $2 မှစသော အပြောင်းအလဲအသစ်များကို ပြရန်",
        "upload-permitted": "ခွင့်ပြုထားသော ဖိုင် {{PLURAL:$2|အမျိုးအစား|အမျိုးအစားများ}}: $1။",
        "upload-preferred": "အလေးပေးထားသော ဖိုင် {{PLURAL:$2|အမျိုးအစား|အမျိုးအစားများ}}: $1။",
        "upload-prohibited": "တားမြစ်ထားသော ဖိုင် {{PLURAL:$2|အမျိုးအစား|အမျိုးအစားများ}}: $1။",
-       "uploadlogpage": "Upload တင်သည့် မှတ်တမ်း",
+       "uploadlogpage": "ဖိုင်တင်သည့် မှတ်တမ်း",
        "uploadlogpagetext": "အောက်ပါတို့သည် မကြာမီက upload လုပ်ထားသော ဖိုင်စာရင်း ဖြစ်သည်။\nပိုမို၍ ခြုံငုံသုံးသပ်ကြည့်ရှုနိုင်ရန် [[Special:NewFiles|ဖိုင်အသစ်များ ပြခန်း]]ကို ကြည့်ပါ။",
        "filename": "ဖိုင်အမည်",
        "filedesc": "အကျဉ်းချုပ်",
        "largefileserver": "ဤဖိုင်သည် ဆာဗာတွင် ခွင့်ပြုရန်သတ်မှတ်ထားသော ဖိုင်အရွယ်အစားထက် ကြီးနေသည်။",
        "file-exists-duplicate": "ဤဖိုင်သည် အောက်ပါ {{PLURAL:$1|ဖိုင်|ဖိုင်များ}}၏ ထပ်တူပုံပွား ဖြစ်သည် -",
        "uploadwarning": "Upload တင်ရာတွင် သတိပေးချက်",
+       "uploadwarning-text": "ဖိုင်ဖော်ပြချက်ကို အောက်တွင် ပြုပြင်ပြီး ထပ်မံကြိုးစားပါ။",
        "savefile": "ဖိုင်သိမ်းရန်",
        "uploaddisabled": "Upload တင်ခြင်း ပိတ်ထားသည်။",
        "copyuploaddisabled": "URL လင့်မှ Upload တင်ခြင်း ပိတ်ထားသည်။",
        "upload-options": "Upload တင်သည့် ရွေးချယ်မှုများ",
        "watchthisupload": "ဤဖိုင်အား စောင့်ကြည့်ရန်",
        "upload-misc-error": "upload တင်ရာတွင် အမည်မသိ အမှား",
+       "upload-dialog-title": "ဖိုင်​တင်​ရန်​",
+       "upload-dialog-button-cancel": "မလုပ်တော့ပါ",
+       "upload-dialog-button-back": "နောက်သို့",
+       "upload-dialog-button-done": "ပြီးပြီ",
+       "upload-dialog-button-save": "သိမ်းရန်",
+       "upload-dialog-button-upload": "တင်ရန်",
+       "upload-form-label-infoform-title": "အသေးစိတ်",
+       "upload-form-label-infoform-name": "အမည်",
+       "upload-form-label-infoform-description": "ဖော်ပြချက်",
+       "upload-form-label-usage-title": "အသုံးချခြင်း",
+       "upload-form-label-usage-filename": "ဖိုင်အမည်",
+       "upload-form-label-own-work": "ဤအရာသည် ကိုယ်ပိုင်ဖန်တီးမှုဖြစ်သည်",
        "upload-form-label-infoform-categories": "ကဏ္ဍများ",
+       "upload-form-label-infoform-date": "နေ့စွဲ",
+       "backend-fail-notexists": "ဖိုင် \"$1\" မတည်ရှိပါ။",
+       "backend-fail-invalidpath": "\"$1\" သည် ကျိုးကြောင်းညီညွတ်သော သိုလှောင်လမ်းကြောင်းမဟုတ်ပါ။",
+       "backend-fail-delete": "ဖိုင် \"$1\" ကို မဖျက်နိုင်ခဲ့ပါ။",
+       "backend-fail-describe": "ဖိုင် \"$1\" အတွက် မေတာဒေတာကို မပြောင်းလဲနိုင်ခဲ့ပါ။",
+       "backend-fail-alreadyexists": "ဖိုင် \"$1\" ရှိနှင့်ပြီးဖြစ်သည်။",
+       "backend-fail-store": "\"$2\" တွင် \"$1\" ဖိုင်ကို မသိုလှောင်နိုင်ခဲ့ပါ။",
+       "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\" ကို မရေးနိုင်ခဲ့ပါ။",
+       "uploadstash-bad-path": "လမ်းကြောင်း မတည်ရှိပါ။",
+       "uploadstash-bad-path-invalid": "လမ်းကြောင်းသည် ဆီလျော်မှုမရှိပါ။",
        "img-auth-accessdenied": "ဝင်ရောက်ခြင်းကို ငြင်းပယ်လိုက်သည်",
        "img-auth-nofile": "\"$1\" ဟူသည့်ဖိုင် မရှိပါ။",
        "img-auth-streaming": "\"$1\" ကို စထရင်းမင်း ဆွဲနေသည်။",
        "license": "လိုင်စင်သတ်မှတ်ခြင်း -",
        "license-header": "လိုင်စင်သတ်မှတ်ခြင်း",
        "nolicense": "ဘာမှရွေးချယ်မထားပါ",
+       "licenses-edit": "လိုင်စင် ရွေးစရာများကို ပြင်ဆင်ရန်",
        "license-nopreview": "(နမူနာ မရနိုင်ပါ)",
        "upload_source_url": "တရားဝင်၍ အများပြည်သူ သုံးစွဲခွင့်ရှိသော URL လင့်တစ်ခုမှ သင်ရွေးချယ်ထားသည့် File",
        "upload_source_file": "(သင်ရွေးချယ်ထားသော သင့်ကွန်ပျူတာမှ ဖိုင်တစ်ခု)",
+       "listfiles-delete": "ဖျက်",
+       "listfiles-summary": "ဤအထူးစာမျက်နှာသည် တင်ထားသောဖိုင်အားလုံးကို ပြသပေးသည်။",
        "listfiles_search_for": "မီဒီယာအမည်ကို ရှာရန် -",
+       "listfiles-userdoesnotexist": "အသုံးပြုသူအကောင့် \"$1\" သည် မှတ်ပုံမတင်ထားပါ။",
        "imgfile": "ဖိုင်",
        "listfiles": "ဖိုင်စာရင်း",
        "listfiles_thumb": "နမူနာပုံငယ်",
        "listfiles_size": "အရွယ်အစား",
        "listfiles_description": "ဖော်ပြချက်",
        "listfiles_count": "ဗားရှင်းများ",
+       "listfiles-latestversion": "လက်ရှိဗားရှင်း",
+       "listfiles-latestversion-yes": "မှန်",
+       "listfiles-latestversion-no": "မဟုတ်",
        "file-anchor-link": "ဖိုင်",
        "filehist": "ဖိုင်မှတ်တမ်း",
        "filehist-help": "ဖိုင်ကို ယင်းနေ့စွဲ အတိုင်း မြင်နိုင်ရန် နေ့စွဲ/အချိန် တစ်ခုခုပေါ်တွင် ကလစ်နှိပ်ပါ။",
        "filehist-filesize": "ဖိုင်ဆိုက်",
        "filehist-comment": "မှတ်ချက်",
        "imagelinks": "ဖိုင်သုံးစွဲမှု",
-       "linkstoimage": "á\80¤á\80\96á\80­á\80¯á\80\84á\80ºá\80\9eá\80­á\80¯á\80· á\80¡á\80±á\80¬á\80\80á\80ºá\80\95á\80« {{PLURAL:$1|á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80\9cá\80\84á\80·á\80º|á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80\9cá\80\84á\80·á\80º $1 á\80\81á\80¯}} -",
-       "linkstoimage-more": "ဤဖိုင်သို့ {{PLURAL:$1|စာမျက်နှာ အချိတ်အဆက်များ|စာမျက်နှာ အချိတ်အဆက်}} $1 ခု ထက်မက ချိတ်ဆက်ထားသည်။\nအောက်ပါစာရင်းသည် ဤဖိုင်သို့ ချိတ်ဆက်ထားသော {{PLURAL:$1|ပထမ စာမျက်နှာ အချိတ်အဆက်|ပထမ စာမျက်နှာ အချိတ်အဆက်များ}}ကိုသာ ပြသထားသည်။\n[[Special:WhatLinksHere/$2|စာရင်းအပြည့်အစုံ]]လည်း ရရှိနိုင်ပါသည်။",
-       "nolinkstoimage": "á\80¤á\80\96á\80­á\80¯á\80\84á\80ºá\80\9eá\80­á\80¯á\80·á\80\9cá\80\84á\80·á\80ºá\80\91á\80¬á\80¸á\80\9eá\80±á\80¬ á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬မရှိပါ။",
+       "linkstoimage": "á\80¡á\80±á\80¬á\80\80á\80ºá\80\95á\80« {{PLURAL:$1|á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬|$1 á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80\99á\80»á\80¬á\80¸}} á\80\9eá\80\8aá\80º á\80¤á\80\96á\80­á\80¯á\80\84á\80ºá\80\80á\80­á\80¯ á\80¡á\80\9eá\80¯á\80¶á\80¸á\80\95á\80¼á\80¯á\80\91á\80¬á\80¸á\80\9eá\80\8aá\80º:",
+       "linkstoimage-more": "ဤဖိုင်သို့ {{PLURAL:$1|စာမျက်နှာ|စာမျက်နှာများ}} $1 ခုထက်မက အသုံးပြုထားသည်။\nအောက်ပါစာရင်းသည် ဤဖိုင်တစ်ခုတည်းကိုသာ အသုံးပြုထားသော {{PLURAL:$1|ပထမဆုံး စာမျက်နှာ|ပထမဆုံး $1 စာမျက်နှာများ}}ကိုသာ ပြသထားသည်။\n[[Special:WhatLinksHere/$2|စာရင်းအပြည့်အစုံ]]လည်း ရရှိနိုင်ပါသည်။",
+       "nolinkstoimage": "á\80¤á\80\96á\80­á\80¯á\80\84á\80ºá\80\80á\80­á\80¯ á\80¡á\80\9eá\80¯á\80¶á\80¸á\80\95á\80¼á\80¯á\80\91á\80¬á\80¸á\80\9eá\80±á\80¬ á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80\99á\80»á\80¬á\80¸မရှိပါ။",
        "morelinkstoimage": "ဤဖိုင်သို့[[Special:WhatLinksHere/$1|နောက်ထပ်လင့်များ]] ကိုကြည့်ပါ။",
        "linkstoimage-redirect": "$1 (ဖိုင်ပြန်ညွှန်း) $2",
+       "duplicatesoffile": "ဤဖိုင်၏ အောက်ပါ {{PLURAL:$1|ဖိုင်သည်|$1 ဖိုင်များသည်}} ထပ်နေသည်([[Special:FileDuplicateSearch/$2|ပို၍အသေးစိတ်]]):",
        "sharedupload": "ဤဖိုင်သည် $1 မှဖြစ်ပြီး အခြားပရောဂျက်များတွင် သုံးကောင်းသုံးလိမ့်မည်။",
+       "sharedupload-desc-there": "ဤဖိုင်သည် $1 မှဖြစ်ပြီး အခြားပရောဂျက်များတွင်လည်း အသုံးပြုနိုင်သည်။ နောက်ထပ်အချက်အလက်အတွက် [$2 ဖိုင်ဖော်ပြချက် စာမျက်နှာ]ကို ကြည့်ပါ။",
        "sharedupload-desc-here": "ဤဖိုင်သည် $1 မှဖြစ်ပြီး အခြားပရောဂျက်များတွင် သုံးကောင်းသုံးလိမ့်မည်။\nယင်း၏ [$2 ဖိုင်အကြောင်းစာမျက်နှာ] တွင် ဖော်ပြထားချက်ကို အောက်တွင် ပြထားသည်။",
+       "sharedupload-desc-edit": "ဤဖိုင်သည် $1 မှဖြစ်ပြီး အခြားပရောဂျက်များတွင်လည်း အသုံးပြုနိုင်သည်။ [$2 ဖိုင်ဖော်ပြချက် စာမျက်နှာ]ပေါ်ရှိ ဖော်ပြချက်ကို တည်းဖြတ်နိုင်သည်။",
+       "sharedupload-desc-create": "ဤဖိုင်သည် $1 မှဖြစ်ပြီး အခြားပရောဂျက်များတွင်လည်း အသုံးပြုနိုင်သည်။ [$2 ဖိုင်ဖော်ပြချက် စာမျက်နှာ]ပေါ်ရှိ ဖော်ပြချက်ကို တည်းဖြတ်နိုင်သည်။",
        "filepage-nofile": "ဤအမည်ဖြင့် မည်သည့်ဖိုင်မှ မရှိပါ။",
        "filepage-nofile-link": "ဤအမည်ဖြင့် မည်သည့်ဖိုင်မှ မရှိပါ။ သိုရာတွင် ယင်းကို [$1 upload တင်]နိုင်သည်။",
        "uploadnewversion-linktext": "ဤဖိုင်၏ နောက်ဆုံး version ကို upload တင်ရန်",
        "filedelete-nofile": "'''$1''' မရှိပါ။",
        "filedelete-otherreason": "အခြားသော/နောက်ထပ် အကြောင်းပြချက် -",
        "filedelete-reason-otherlist": "အခြား အကြောင်းပြချက်",
+       "filedelete-reason-dropdown": "*ယေဘုယျ ဖျက်ပစ်ခြင်း အကြောင်းပြချက်များ\n** မူပိုင်ခွင့် ချိုးဖောက်\n*** ထပ်နေသောဖိုင်",
        "filedelete-edit-reasonlist": "ဖျက်ပစ်လိုက်ရသော အကြောင်းရင်းများကို တည်းဖြတ်ရန်",
+       "filedelete-maintenance": "ထိန်းပြင်လုပ်နေစဉ် ဖိုင်များ ဖျက်ခြင်း၊ ပြန်လည်ဆယ်ယူခြင်းကို ယာယီပိတ်ထားသည်။",
+       "filedelete-maintenance-title": "ဖိုင်ကို မဖျက်နိုင်ပါ",
        "mimesearch": "MIME ရှာဖွေခြင်း",
        "mimetype": "MIME အမျိုးအစား -",
        "download": "ဒေါင်းလုဒ်",
        "unusedtemplateswlh": "အခြားလင့်ခ်များ",
        "randompage": "ကျပန်းစာမျက်နှာ",
        "randomincategory": "ကဏ္ဍတွင်းရှိ ကျပန်း စာမျက်နှာ",
+       "randomincategory-invalidcategory": "\"$1\" သည် ဆီလျော်သော ကဏ္ဍအမည်မဟုတ်ပါ။",
+       "randomincategory-nopages": "ကဏ္ဍ [[:Category:$1|$1]] ထဲတွင် စာမျက်နှာများ မရှိပါ။",
        "randomincategory-category": "ကဏ္ဍ:",
+       "randomincategory-legend": "ကဏ္ဍထဲရှိ ကျပန်းစာမျက်နှာ",
+       "randomincategory-submit": "သွားပါ",
        "randomredirect": "ကျပန်းပြန်ညွှန်း",
        "randomredirect-nopages": "အမည်ညွှန်း \"$1\" တွင် ပြန်ညွှန်းမရှိပါ။",
        "statistics": "စာရင်းအင်း",
        "statistics-users": "မှတ်ပုံတင်ထားသော အသုံးပြုသူများ",
        "statistics-users-active": "လက်ရှိလုပ်ကိုင်နေသော အသုံးပြုသူများ",
        "statistics-users-active-desc": "နောက်ဆုံး {{PLURAL:$1|ရက်|$1 ရက်}}အတွင်း ဆောင်ရွက်ချက်ရှိသည့် အသုံးပြုသူများ",
+       "pageswithprop": "စာမျက်နှာဂုဏ်အင်တစ်ခုနှင့် စာမျက်နှာများ",
+       "pageswithprop-legend": "စာမျက်နှာဂုဏ်အင်တစ်ခုနှင့် စာမျက်နှာများ",
+       "pageswithprop-text": "ဤစာမျက်နှာသည် တစ်ခုချင်းအလိုက် စာမျက်နှာဂုဏ်အင်ကို အသုံးပြုသည့် စာမျက်နှာများကို စာရင်းပြုစုထားသည်။",
+       "pageswithprop-prop": "ဂုဏ်အင်အမည်:",
+       "pageswithprop-reverse": "ပြောင်းပြန်အစဉ်လိုက် စီရန်",
+       "pageswithprop-sortbyvalue": "ဂုဏ်အင်တန်ဖိုးအလိုက် စီရန်",
+       "pageswithprop-submit": "သွားပါ",
        "doubleredirects": "နှစ်ဆင့်ပြန် ပြန်ညွှန်းများ",
        "double-redirect-fixed-move": "[[$1]] ကို ရွှေ့ပြောင်းပြီးဖြစ်သည်။ ၎င်းအား အလိုအလျောက် ပြင်ဆင်ပြီး [[$2]] သို့ ပြန်ညွှန်းထားသည်။",
        "double-redirect-fixer": "ပြန်ညွှန်းပြင်ဆင်သူ",
        "withoutinterwiki-submit": "ပြ",
        "fewestrevisions": "တည်းဖြတ်မူအနည်းဆုံး စာမျက်နှာများ",
        "nbytes": "$1 {{PLURAL:$1|ဘိုက်|ဘိုက်}}",
+       "ncategories": "$1 {{PLURAL:$1|ကဏ္ဍ|ကဏ္ဍများ}}",
        "nlinks": "{{PLURAL:$1|လင့်|လင့်ခ်များ}} $1",
        "nmembers": "အဖွဲ့ဝင် $1 {{PLURAL:$1|ခု|ခု}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|အဖွဲ့ဝင်|အဖွဲ့ဝင်များ}}",
+       "nrevisions": "$1 {{PLURAL:$1|ပြန်လည်ပြင်ဆင်မှု|ပြန်လည်ပြင်ဆင်မှုများ}}",
+       "nimagelinks": "$1 {{PLURAL:$1|စာမျက်နှာ|စာမျက်နှာများ}}ပေါ်တွင် သုံးထားသည်",
+       "ntransclusions": "$1 {{PLURAL:$1|စာမျက်နှာ|စာမျက်နှာများ}}ပေါ်တွင် သုံးထားသည်",
        "specialpage-empty": "ဤသတင်းပို့ချက်အတွက် ရလဒ်မရှိပါ။",
+       "lonelypages": "မိဘမဲ့ စာမျက်နှာများ",
        "uncategorizedpages": "ကဏ္ဍမခွဲထားသော စာမျက်နှာများ",
        "uncategorizedcategories": "ကဏ္ဍမခွဲထားသော ကဏ္ဍများ",
        "uncategorizedimages": "ကဏ္ဍမခွဲထားသော ဖိုင်များ",
        "mostlinkedcategories": "အများဆုံး လာရောက် ချိတ်ဆက်ထားသည့် ကဏ္ဍများ",
        "mostcategories": "ကဏ္ဍအများဆုံးပါသော စာမျက်နှာများ",
        "mostimages": "အများဆုံး လာရောက်ချိတ်ဆက်ထားသည့် ဖိုင်များ",
+       "mostinterwikis": "အပြန်အလှန်ချိတ်ဆက်ဝီကီအများဆုံးနှင့် စာမျက်နှာများ",
        "mostrevisions": "တည်းဖြတ်မှု အများဆုံး စာမျက်နှာများ",
        "prefixindex": "ရှေ့ဆုံးမှ prefix ပါသော စာမျက်နှာ အားလုံး",
        "prefixindex-submit": "ပြသရန်",
        "deadendpages": "လမ်းဆုံးနေသော (လင့်ခ်မချိတ်ထားသော) စာမျက်နှာများ",
        "deadendpagestext": "အောက်ပါ စာမျက်နှာများသည် {{SITENAME}} တွင် အခြား စာမျက်နှာများသို့ လင့်ခ်ချိတ်ဆက်ထားခြင်း မရှိပါ။",
        "protectedpages": "ကာကွယ်ထားသော စာမျက်နှာများ",
+       "protectedpages-filters": "စိစစ်မှုများ:",
+       "protectedpages-indef": "အနန္တ ကာကွယ်မှုများသာ",
+       "protectedpages-summary": "ဤစာမျက်နှာသည် လတ်တလော ကာကွယ်ထားသော စာမျက်နှာများကို စာရင်းပြုထားသည်။ ဖန်တီးခြင်းမှ ကာကွယ်ထားသည့် ခေါင်းစဉ်များစာရင်းအတွက် [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]ကို ကြည့်ပါ။",
+       "protectedpages-cascade": "အဆင့်ဆင့် ကာကွယ်မှုများသာ",
        "protectedpages-noredirect": "ပြန်ညွှန်းများအား ဝှက်ရန်",
+       "protectedpagesempty": "ဤပါရာမီတာများဖြင့် ကာကွယ်ထားသော လတ်တလော စာမျက်နှာများ မရှိပါ။",
+       "protectedpages-timestamp": "အချိန်တံဆိပ်",
        "protectedpages-page": "စာမျက်နှာ",
+       "protectedpages-expiry": "သက်တမ်းကုန်လွန်မည်",
+       "protectedpages-performer": "အသုံးပြုသူအား ကာကွယ်ခြင်း",
+       "protectedpages-params": "ကာကွယ်မှု ပါရာမီတာများ",
+       "protectedpages-reason": "အကြောင်းပြချက်",
+       "protectedpages-submit": "စာမျက်နှာများကို ပြရန်",
+       "protectedpages-unknown-timestamp": "မသိရှိပါ",
+       "protectedpages-unknown-performer": "အမည်မသိရသော အသုံးပြုသူ",
        "protectedtitles": "ကာကွယ်ထားသော ခေါင်းစဉ်များ",
+       "protectedtitles-summary": "ဤစာမျက်နှာသည် ဖန်တီးခြင်းမှ လတ်တလော ကာကွယ်ထားသော ခေါင်းစဉ်များကို စာရင်းပြုထားသည်။\nရှိနှင့်ပြီးသား စာမျက်နှာများအား ကာကွယ်ထားသည့်စာရင်းအတွက် [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]ကို ကြည့်ပါ။",
+       "protectedtitlesempty": "ဤပါရာမီတာများဖြင့် ကာကွယ်ထားသော လတ်တလော ခေါင်းစဉ်များ မရှိပါ။",
+       "protectedtitles-submit": "ခေါင်းစဉ်များကို ပြရန်",
        "listusers": "အသုံးပြုသူစာရင်း",
        "listusers-editsonly": "တည်းဖြတ်ထားဖူးသော အသုံးပြုသူများကိုသာ ဖော်ပြရန်",
+       "listusers-temporarygroupsonly": "ယာယီအသုံးပြုသူအုပ်စုများထဲရှိ အသုံးပြုသူများကိုသာ ပြရန်",
        "listusers-creationsort": "စတင်ရေးသားသည့်ရက်စွဲအလိုက် စီရန်",
+       "listusers-desc": "ကြီးစဉ်ငယ်လိုက် စီရန်",
        "usereditcount": "တည်းဖြတ်မှု $1 {{PLURAL:$1|ခု|ခု}}",
        "usercreated": "$1 $2 အချိန်တွင် {{GENDER:$3|ဖန်တီးခဲ့သည်}}",
        "newpages": "စာမျက်နှာအသစ်",
        "unusedimagestext": "အောက်ပါဖိုင်များသည် မည်သည့်စာမျက်နှာတွင်မှ သုံးစွဲထားခြင်း မရှိပါ။\nအခြားသော ဝက်ဘ်ဆိုဒ်များမှနေ၍ ဖိုင်တစ်ခုခုသို့ တိုက်ရိုက် URL ဖြင့် တိုက်ရိုက်ချိတ်ဆက်ထားခြင်း ရှိနေနိုင်ပြီး သုံးစွဲနေခြင်းမရှိသော်လည်း ဤနေရာတွင် ဖော်ပြထားနိုင်ကြောင်း ကျေးဇူးပြု၍ မှတ်သားပါ။",
        "pager-newer-n": "{{PLURAL:$1|ပိုသစ်သော တစ်ခု|ပိုသစ်သော $1 ခု}}",
        "pager-older-n": "{{PLURAL:$1|ပိုဟောင်းသော တစ်ခု|ပိုဟောင်းသော $1 ခု}}",
+       "apihelp-no-such-module": "မော်ဂျူး \"$1\" မတွေ့ရှိပါ။",
+       "apisandbox-reset": "ရှင်းလင်း",
+       "apisandbox-retry": "ပြန်လုပ်",
+       "apisandbox-helpurls": "အကူအညီလင့်ခ်များ",
+       "apisandbox-examples": "ဥပမာများ",
+       "apisandbox-dynamic-parameters": "နောက်ထပ် ပါရာမီတာများ",
+       "apisandbox-dynamic-parameters-add-label": "ပါရာမီတာ ပေါင်းထည့်ရန်:",
+       "apisandbox-dynamic-parameters-add-placeholder": "ပါရာမီတာ အမည်",
+       "apisandbox-results": "ရလဒ်များ",
+       "apisandbox-continue": "ဆက်လက်",
+       "apisandbox-continue-clear": "ရှင်းလင်း",
+       "apisandbox-multivalue-all-values": "$1 (တန်ဖိုးများအားလုံး)",
        "booksources": "မှီငြမ်း စာအုပ်များ",
        "booksources-search-legend": "စာအုပ်ရင်းမြစ်များကို ရှာရန်",
        "booksources-search": "ရှာဖွေရန်",
        "speciallogtitlelabel": "ရည်ရွယ်ရာ (ခေါင်းစဉ် သို့ {{ns:user}}:အသုံးပြုသူအတွက် အသုံးပြုအမည်):",
        "log": "မှတ်​တမ်း​များ​",
        "logeventslist-submit": "ပြသရန်",
+       "logeventslist-more-filters": "အခြားသော မှတ်တမ်းများကို ပြရန်:",
+       "logeventslist-patrol-log": "စောင့်ကြပ်စစ်ဆေးမှု မှတ်တမ်း",
+       "logeventslist-tag-log": "စာတွဲ မှတ်တမ်း",
        "all-logs-page": "အများနှင့်ဆိုင်သောမှတ်တမ်းအားလုံး",
        "alllogstext": "{{SITENAME}}၏ ရရှိနိုင်သော မှတ်တမ်းများအားလုံး ပေါင်းစည်းပြသခြင်း ဖြစ်သည်။\nမှတ်တမ်းအမျိုးအစား၊ အသုံးပြုသူအမည် (စာလုံးအကြီးအသေး)၊ သို့မဟုတ် သက်ဆိုင်ရာ စာမျက်နှာ (စာလုံးအကြီးအသေး) ကို ရွေးချယ်ခြင်းဖြင့် ကြည့်ရှုမှုကို အကျဉ်းချုံးနိုင်ပါသည်။",
        "logempty": "မှတ်တမ်းထဲတွင် ကိုက်ညီသော အရာများ မရှိပါ။",
        "showhideselectedlogentries": "ရွေးချယ်ထားသော မှတ်တမ်းများ၏ မြင်နိုင်မှုကို ပြောင်းလဲရန်",
+       "checkbox-select": "ရွေးချယ်: $1",
        "checkbox-all": "အားလုံး",
+       "checkbox-none": "ဘာမှမရှိ",
        "allpages": "စာမျက်နှာအားလုံး",
        "nextpage": "နောက်ထပ်စာမျက်နှာ ($1)",
        "prevpage": "ယခင် စာမျက်နှာ ($1)",
        "activeusers-intro": "ဤသည်မှာ နောက်ဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}အတွင်း တက်ကြွလှုပ်ရှားသည့် အသုံးပြုသူများ စာရင်း ဖြစ်သည်။",
        "activeusers-count": "{{PLURAL:$3|ရက်|$3 ရက်}}အတွင်း {{PLURAL:$1|လုပ်ဆောင်မှု|လုပ်ဆောင်မှု}} $1 ခု",
        "activeusers-from": "ဤမှစသော အသုံးပြုသူများကို ပြရန် -",
+       "activeusers-groups": "ဤအုပ်စုများနှင့်သက်ဆိုင်သော အသုံးပြုသူများကိုပြရန်:",
+       "activeusers-excludegroups": "ဤအုပ်စုများနှင့်သက်ဆိုင်သော အသုံးပြုသူများကို ချန်လှပ်ရန်:",
        "activeusers-noresult": "အသုံးပြုသူ မတွေ့ပါ။",
+       "activeusers-submit": "လတ်တလောအသုံးပြုသူများကို ပြသရန်",
        "listgrouprights": "အသုံးပြုသူအုပ်စု အခွင့်အရေးများ",
+       "listgrouprights-summary": "အောက်ပါတို့သည် ဤဝီကီတွင် သတ်မှတ်ထားသည့် အသုံးပြုသူအုပ်စုစာရင်းများနှင့် ယင်းတို့၏ ဆက်နွယ်သော အခွင့်အရေးများဖြစ်သည်။ သီးသန့်အခွင့်အရေးများအတွက် [[{{MediaWiki:Listgrouprights-helppage}}|ထပ်ဆောင်း သတင်းအချင်အလက်]] ရှိနိုင်ပါသည်။",
+       "listgrouprights-key": "မှတ်ချက်:\n* <span class=\"listgrouprights-granted\">အပ်နှင်းပြီး အခွင့်အရေး</span>\n* <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": "မိမိ၏အကောင့်မှ အုပ်စုအားလုံးကို ဖယ်ရှားရန်",
+       "listgrouprights-namespaceprotection-header": "အမည်ညွှန်း ကန့်သတ်ချက်များ",
        "listgrouprights-namespaceprotection-namespace": "အမည်ညွှန်း",
+       "listgrouprights-namespaceprotection-restrictedto": "အသုံးပြုသူကို တည်းဖြတ်ရန်ခွင့်ပြုသည့် အခွင့်အရေးများ",
+       "listgrants": "အပ်နှင်းမှုများ",
+       "listgrants-summary": "အောက်ပါတို့သည် အသုံးပြုသူအခွင့်အရေးများနှင့် ဆက်နွယ်သော အပ်နှင်းမှုများစာရင်းဖြစ်သည်။ အသုံးပြုသူသည် ပေးအပ်ထားသော ခွင့်ပြုချက်များဖြင့် အတိုင်းအတာတစ်ခုထိ အပလေကေးရှင်းကို ခိုင်းစေနိုင်ပါသည်။ အခွင့်အရေးသည် အသုံးပြုသူ၌ အမှန်တကယ်မရှိသော်လည်း အပလေကေးရှင်းသည် အသုံးပြုသူကိုယ်စား ဆောင်ရွက်ပေးခြင်းဖြစ်သည်။ သီးသန့်အခွင့်အရေးများအတွက် [[{{MediaWiki:Listgrouprights-helppage}}|ထပ်ဆောင်း သတင်းအချက်အလက်]] ရှိနိုင်ပါသည်။",
+       "listgrants-grant": "အပ်နှင်းမှု",
+       "listgrants-rights": "အခွင့်အရေးများ",
        "trackingcategories": "နောက်ယောင်ခံ ကဏ္ဍများ",
        "trackingcategories-msg": "နောက်ယောင်ခံ ကဏ္ဍ",
+       "trackingcategories-nodesc": "ဖော်ပြချက် မရရှိနိုင်ပါ။",
        "mailnologin": "ပို့ရန်လိပ်စာ မရှိပါ",
        "emailuser": "ဤအသုံးပြုသူအား အီးမေးပို့ပါ",
        "emailuser-title-target": "{{GENDER:$1|အသုံးပြုသူ}}ကို အီးမေးပို့ရန်",
+       "emailuser-title-notarget": "အသုံးပြုသူအား အီးမေးလ်ပို့ရန်",
        "defemailsubject": "{{SITENAME}} အသုံးပြုသူ \"$1\" ထံမှ အီးမေး",
        "usermaildisabled": "အသုံးပြုသူအီးမေးကို ပိတ်ထားသည်",
        "noemailtitle": "အီးမေးလိပ်စာ မရှိပါ",
        "watchlistfor2": "$1 အတွက် $2",
        "nowatchlist": "သင့်စောင့်ကြည့်စာရင်းမှာ ဘာမှ မရှိပါ။",
        "watchnologin": "logged in ဝင်မထားပါ",
+       "addwatch": "စောင့်ကြည့်စာရင်းသို့ ပေါင်းထည့်ရန်",
        "addedwatchtext": "\"[[:$1]]\" နှင့် ၎င်း၏ ဆွေးနွေးချက် စာမျက်နှာကို သင်၏ [[Special:Watchlist|စောင့်ကြည့်စာရင်း]]ထဲသို့ ပေါင်းထည့်ပြီးဖြစ်သည်။",
+       "addedwatchtext-talk": "\"[[:$1]]\" နှင့် ယင်း၏ဆက်နွယ် စာမျက်နှာကို သင်၏ [[Special:Watchlist|စောင့်ကြည့်စာရင်း]]ထဲသို့ ပေါင်းထည့်ပြီးဖြစ်သည်။",
+       "addedwatchtext-short": "စာမျက်နှာ \"$1\" အား သင်၏စောင့်ကြည့်စာရင်းသို့ ပေါင်းထည့်လိုက်ပါပြီ။",
+       "removewatch": "စောင့်ကြည့်စာရင်းမှ ဖယ်ရှားရန်",
        "removedwatchtext": "\"[[:$1]]\" နှင့် ၎င်း၏ ဆွေးနွေးချက်စာမျက်နှာကို သင်၏ [[Special:Watchlist|စောင့်ကြည့်စာရင်း]] မှ ဖယ်ထုတ်ပြီး ဖြစ်သည်။",
+       "removedwatchtext-talk": "\"[[:$1]]\" နှင့် ယင်း၏ဆက်နွယ် စာမျက်နှာကို သင်၏ [[Special:Watchlist|စောင့်ကြည့်စာရင်း]]ထဲမှ ဖယ်ရှားပြီးဖြစ်သည်။",
+       "removedwatchtext-short": "စာမျက်နှာ \"$1\" အား သင်၏စောင့်ကြည့်စာရင်းမှ ဖယ်ရှားလိုက်ပါပြီ။",
        "watch": "စောင့်ကြည့်ရန်",
        "watchthispage": "ဤစာမျက်နှာကို စောင့်ကြည့်ရန်",
        "unwatch": "စောင့်မကြည့်ပါနှင့်",
        "unwatchthispage": "စောင့်ကြည့်ခြင်းကို ရပ်တန့်ရန်",
        "notanarticle": "မာတိကာစာမျက်နှာတစ်ခု မဟုတ်",
        "watchlist-details": "သင့်စောင့်ကြည့်စာရင်းတွင် (ဆွေးနွေးချက် စာမျက်နှာများ အပါအဝင်){{PLURAL:$1|စာမျက်နှာ $1 ခု|စာမျက်နှာ $1 ခု}} ရှိသည်။",
+       "wlheader-enotif": "အီးမေးလ် အသိပေးချက်ကို ဖွင့်ထားသည်။",
        "wlheader-showupdated": "သင် နောက်ဆုံးကြည့်ရှုခဲ့ပြီးနောက် ပြောင်းလဲမှုရှိခဲ့သော စာမျက်နှာများကို <strong>စာလုံးမဲ</strong> ဖြင့် ပြသထားသည်",
        "wlnote": "အောက်ပါတို့သည် $3၊ $4 အထိ နောက်ဆုံး {{PLURAL:$2|နာရီ|<strong>$2</strong> နာရီ}}အတွင်း {{PLURAL:$1|နောက်ဆုံးပြောင်းလဲချက် တစ်ခု|နောက်ဆုံးပြောင်းလဲချက်များ <strong>$1</strong> ခု}} ဖြစ်သည်။",
        "wlshowlast": "နောက်ဆုံး $1 နာရီ $2 ရက်  ကိုပြရန်",
        "watchlist-submit": "ပြသရန်",
        "wlshowtime": "ပြသပေးရမည့် အချိန်ကာလ:",
        "wlshowhideminor": "အရေးမကြီးသော ပြင်ဆင်မှုများ",
+       "wlshowhidebots": "ဘော့များ",
        "wlshowhideliu": "မှတ်ပုံတင်ထားသော အသုံးပြုသူများ",
        "wlshowhideanons": "အမည်မသိ အသုံးပြုသူများ",
+       "wlshowhidepatr": "စောင့်ကြပ်တည်းဖြတ်မှုများ",
        "wlshowhidemine": "ကျွန်ုပ်၏ တည်းဖြတ်မှုများ",
        "wlshowhidecategorization": "စာမျက်နှာ ကဏ္ဍထည့်သွင်းခြင်း",
        "watchlist-options": "စောင့်ကြည့်စာရင်းအတွက် ရွေးချယ်စရာများ",
        "watching": "စောင့်ကြည့်လျက်ရှိ...",
        "unwatching": "စောင့်မကြည့်တော့...",
+       "watcherrortext": "\"$1\" အတွက် သင်၏စောင့်ကြည့်စာရင်း အပြင်အဆင်များကို ပြောင်းလဲစဉ် အမှားတစ်ခု ဖြစ်ပွားခဲ့သည်။",
        "enotif_reset": "စာမျက်နှာများအားလုံး ကြည့်ရှုပြီးကြောင်း မှတ်သားရန်",
        "enotif_impersonal_salutation": "{{SITENAME}} အသုံးပြုသူ",
+       "enotif_subject_deleted": "{{SITENAME}} စာမျက်နှာ $1 အား $2 မှ {{GENDER:$2|ဖျက်ပစ်ခဲ့သည်}}",
+       "enotif_subject_created": "{{SITENAME}} စာမျက်နှာ $1 အား $2 မှ {{GENDER:$2|ဖန်တီးခဲ့သည်}}",
+       "enotif_subject_moved": "{{SITENAME}} စာမျက်နှာ $1 အား $2 မှ {{GENDER:$2|ရွေ့ပြောင်းခဲ့သည်}}",
+       "enotif_subject_restored": "{{SITENAME}} စာမျက်နှာ $1 အား $2 မှ {{GENDER:$2|ပြန်လည်ထိန်းသိမ်းခဲ့သည်}}",
+       "enotif_subject_changed": "{{SITENAME}} စာမျက်နှာ $1 အား $2 မှ {{GENDER:$2|ပြောင်းလဲခဲ့သည်}}",
+       "enotif_body_intro_deleted": "{{SITENAME}} စာမျက်နှာ $1 အား $2 မှ $PAGEEDITDATE တွင် {{GENDER:$2|ဖျက်ပစ်ခဲ့သည်}}၊ $3 ကိုကြည့်ပါ။",
+       "enotif_body_intro_created": "{{SITENAME}} စာမျက်နှာ $1 အား $2 မှ $PAGEEDITDATE တွင် {{GENDER:$2|ဖန်တီးခဲ့သည်}}၊ လက်ရှိ ပြန်လည်ပြင်ဆင်ခြင်းအတွက် $3 ကိုကြည့်ပါ။",
+       "enotif_body_intro_moved": "{{SITENAME}} စာမျက်နှာ $1 အား $2 မှ $PAGEEDITDATE တွင် {{GENDER:$2|ရွေ့ပြောင်းခဲ့သည်}}၊ လက်ရှိ ပြန်လည်ပြင်ဆင်ခြင်းအတွက် $3 ကိုကြည့်ပါ။",
+       "enotif_body_intro_restored": "{{SITENAME}} စာမျက်နှာ $1 အား $2 မှ $PAGEEDITDATE တွင် {{GENDER:$2|ပြန်လည်ထိန်းသိမ်းခဲ့သည်}}၊ လက်ရှိ ပြန်လည်ပြင်ဆင်ခြင်းအတွက် $3 ကိုကြည့်ပါ။",
+       "enotif_body_intro_changed": "{{SITENAME}} စာမျက်နှာ $1 အား $2 မှ $PAGEEDITDATE တွင် {{GENDER:$2|ပြောင်းလဲခဲ့သည်}}၊ လက်ရှိ ပြန်လည်ပြင်ဆင်ခြင်းအတွက် $3 ကိုကြည့်ပါ။",
+       "enotif_lastvisited": "သင် နောက်ဆုံးရောက်လာခဲ့ကတည်းက ပြောင်းလဲမှုများအားလုံးအတွက် $1 ကိုကြည့်ပါ",
+       "enotif_lastdiff": "ဤပြောင်းလဲမှုအား ကြည့်ရန် $1 ကို ကြည့်ပါ",
        "enotif_anon_editor": "အမည်မသိ အသုံးပြုသူ $1",
+       "enotif_minoredit": "ဤအရာသည် အရေးမကြီးသောပြင်​ဆင်​မှု ​ဖြစ်​သည်​",
        "created": "ဖန်တီးလိုက်သည်",
        "changed": "ပြောင်းလဲလိုက်သည်",
        "deletepage": "စာမျက်နှာကိုဖျက်ပါ",
        "confirm": "အတည်ပြု",
+       "excontent": "အကြောင်းအရာမှာ: \"$1\"",
        "excontentauthor": "ပါဝင်အကြောင်းအရာမှာ - \"$1\"၊ ဖြစ်ပြီး တစ်ဦးတည်းသော ပံ့ပိုးထားသူမှာ \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|ဆွေးနွေး]])  ဖြစ်သည်",
+       "exbeforeblank": "ဗလာမလုပ်ခင် အကြောင်းအရာမှာ: \"$1\"",
        "delete-confirm": "\"$1\"ကို ဖျက်ပါ",
        "delete-legend": "ဖျက်",
        "historywarning": "<strong>သတိပေးချက်။</strong> သင်ဖျက်ပစ်တော့မည့် စာမျက်နှာတွင် {{PLURAL:$1|တည်းဖြတ်မူ|တည်းဖြတ်မူများ}} $1 ခု ရှိနေသည်-",
        "dellogpage": "ဖျက်ထားသည်များ မှတ်တမ်း",
        "dellogpagetext": "အောက်ပါတို့သည် မကြာမီက ဖျက်ထားမှုများ စာရင်း ဖြစ်သည်။",
        "deletionlog": "ဖျက်ပစ်သည့်မှတ်တမ်း",
+       "log-name-create": "စာမျက်နှာဖန်တီးမှု မှတ်တမ်း",
+       "log-description-create": "အောက်ပါများသည် မကြာသေးခင်က စာမျက်နှာဖန်တီးမှုစာရင်း ဖြစ်သည်။",
+       "logentry-create-create": "$1 က စာမျက်နှာ $3 ကို {{GENDER:$2|ဖန်တီးခဲ့}}သည်",
        "reverted": "ယခင်တည်းဖြတ်မူသို့ နောက်ပြန်ပြင်ပြီးပြီ",
        "deletecomment": "အ​ကြောင်း​ပြ​ချက် -",
        "deleteotherreason": "အခြားသော/နောက်ထပ် အကြောင်းပြချက် -",
        "deletereasonotherlist": "အခြား အကြောင်းပြချက်",
+       "deletereason-dropdown": "* ယေဘုယျ ဖျက်ပစ်ခြင်း အကြောင်းရင်းများ\n** ဆပန်း\n** လက်သရမ်းမှု\n** မူပိုင်ခွင့် ချိုးဖောက်မှု\n** စာရေးသူ တောင်းဆိုမှု\n** ကျိုးပျက်နေသော ပြန်ညွှန်း",
        "delete-edit-reasonlist": "ဖျက်ပစ်ရသော အကြောင်းရင်းများကို တည်းဖြတ်ရန်",
+       "deleteprotected": "ဤစာမျက်နှာသည် ကာကွယ်ထားသောကြောင့် ဖျက်ပစ်၍မရနိုင်ပါ။",
        "deleting-backlinks-warning": "<strong>သတိပေးချက်။</strong> သင်ဖျက်ပစ်တော့မည့် စာမျက်နှာအား [[Special:WhatLinksHere/{{FULLPAGENAME}}|အခြားစာမျက်နှာများမှ]] ချိတ်ဆက်ထားခြင်း သို့မဟုတ် ထည့်သွင်းထားခြင်း ရှိနေသည်။",
+       "rollback": "နောက်ပြန်ပြင် တည်းဖြတ်မှုများ",
        "rollbacklink": "နောက်ပြန် ပြန်သွားရန်",
        "rollbacklinkcount": "{{PLURAL:$1|တည်းဖြတ်မှု|တည်းဖြတ်မှုများ}} $1 ကို နောက်ပြန်ပြင်ရန်",
+       "rollbacklinkcount-morethan": "$1 ထက်ပိုသော {{PLURAL:$1|တည်းဖြတ်မှု|တည်းဖြတ်မှုများ}}ကို နောက်ပြန်ပြင်ရန်",
+       "rollbackfailed": "နောက်ပြန်ပြင်ခြင်း မအောင်မြင်ခဲ့ပါ။",
+       "editcomment": "တည်းဖြတ်မှု အကျဉ်းချုပ်မှာ: <em>$1</em>။",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|ဆွေးနွေး]]) ၏ ပြင်ဆင်မှုများကို [[User:$1|$1]] ၏ နောက်ဆုံးတည်းဖြတ်မူသို့ နောက်ပြန် ပြန်ပြင်ခဲ့သည်",
+       "changecontentmodel": "စာမျက်နှာ၏ မာတိကာမော်ဒယ်ကို ပြောင်းလဲရန်",
+       "changecontentmodel-legend": "မာတိကာမော်ဒယ်ကို ပြောင်းလဲရန်",
+       "changecontentmodel-title-label": "စာမျက်နှာ ခေါင်းစဉ်",
+       "changecontentmodel-model-label": "မာတိကာမော်ဒယ် အသစ်",
+       "changecontentmodel-reason-label": "အ​ကြောင်း​ပြ​ချက်:",
+       "changecontentmodel-submit": "ပြောင်းလဲရန်",
+       "changecontentmodel-success-title": "မာတိကာမော်ဒယ် ပြောင်းလဲခဲ့သည်",
+       "changecontentmodel-success-text": "[[:$1]]၏ မာတိကာအမျိုးအစား ပြောင်းလဲသွားသည်။",
+       "changecontentmodel-cannot-convert": "[[:$1]]ပေါ်ရှိ မာတိကာသည် $2 အမျိူးအစားတစ်ခုသို့ မကူးပြောင်းနိုင်ပါ။",
+       "changecontentmodel-nodirectediting": "$1 မာတိကာမော်ဒယ်သည် တိုက်ရိုက်တည်းဖြတ်မှုကို မထောက်ပံ့ပါ",
+       "changecontentmodel-emptymodels-title": "မည်သည့် မာတိကာမော်ဒယ်မှ မရရှိနိုင်ပါ",
+       "changecontentmodel-emptymodels-text": "[[:$1]]ပေါ်ရှိ မာတိကာသည် မည်သည့်အမျိူးအစားတစ်ခုသို့ မကူးပြောင်းနိုင်ပါ။",
+       "log-name-contentmodel": "မာတိကာမော်ဒယ် ပြောင်းလဲမှုမှတ်တမ်း",
+       "logentry-contentmodel-change-revertlink": "ပြန်ပြောင်းရန်",
+       "logentry-contentmodel-change-revert": "ပြန်ပြောင်းရန်",
        "protectlogpage": "ကာကွယ်မှုများ၏ မှတ်တမ်း",
        "protectlogtext": "အောက်ပါတို့သည် စာမျက်နှာ ကာကွယ်မှုများအတွက် အပြောင်းအလဲ စာရင်း ဖြစ်သည်။\nလက်ရှိ စာမျက်နှာ ကာကွယ်မှုများ စာရင်းအတွက် [[Special:ProtectedPages|ကာကွယ်ထားသော စာမျက်နှာများ စာရင်း]]ကို ကြည့်ပါ။",
        "protectedarticle": "\"[[$1]]\" ကို ကာကွယ်ထားသည်",
        "modifiedarticleprotection": "\"[[$1]]\" ၏ ကာကွယ်မှု အဆင့်ကို ပြောင်းရန်",
+       "unprotectedarticle": "\"[[$1]]\" မှ ကာကွယ်မှုအား ဖယ်ရှားခဲ့သည်",
+       "movedarticleprotection": "\"[[$2]]\" မှ \"[[$1]]\" သို့ ကာကွယ်မှု အပြင်အဆင်များအား ရွေ့ပြောင်းခဲ့သည်။",
+       "protectedarticle-comment": "\"[[$1]]\" ကို {{GENDER:$2|က ကာကွယ်ခဲ့သည်}}",
        "modifiedarticleprotection-comment": "\"[[$1]]\" အတွက် ကာကွယ်မှုအဆင့်ကို {{GENDER:$2|ပြောင်းလဲခဲ့သည်}}",
+       "unprotectedarticle-comment": "\"[[$1]]\" မှ ကာကွယ်မှုကို {{GENDER:$2|ဖယ်ရှားခဲ့သည်}}",
        "protect-title": "\"$1\" ၏ ကာကွယ်မှုအဆင့်ကို ပြောင်းလဲရန်",
+       "protect-title-notallowed": "\"$1\" ၏ ကာကွယ်မှုအဆင့်ကို ကြည့်ရန်",
        "prot_1movedto2": "[[$1]]  မှ​ [[$2]] သို့​",
+       "protect-norestrictiontypes-text": "ကန့်သတ်ချက်အမျိုးအစားများ မရရှိနိုင်သောကြောင့် ဤစာမျက်နှာကို မကာကွယ်နိုင်ပါ။",
+       "protect-norestrictiontypes-title": "မကာကွယ်နိုင်သော စာမျက်နှာ",
        "protect-legend": "ကာကွယ်မှု အတည်ပြုရန်",
        "protectcomment": "အ​ကြောင်း​ပြ​ချက်:",
-       "protectexpiry": "သက်တမ်းကုန်လွန်မည် -",
+       "protectexpiry": "သက်တမ်းကုန်လွန်မည်:",
        "protect_expiry_invalid": "သက်တမ်းကုန်လွန်မည့် အချိန်သည် တရားမဝင်ပါ။",
        "protect_expiry_old": "သက်တမ်းသည် အတိတ်ကာလတွင် ကုန်လွန်ခဲ့ပြီး ဖြစ်သည်။",
        "protect-unchain-permissions": "နောက်ထပ် ကာကွယ်မှု ရွေးချယ်စရာများ ဖော်ပြရန်",
        "protect-text": "'''$1''' စာမျက်နှာအတွက် ကာကွယ်မှုအဆင့်ကို ဤနေရာတွင် ကြည့်ရှုပြောင်းလဲနိုင်သည်။",
+       "protect-locked-blocked": "ပိတ်ပင်ထားစဉ် ကာကွယ်မှုအဆင့်များကို မပြောင်းလဲနိုင်ပါ။ စာမျက်နှာ <strong>$1</strong> အတွက် လက်ရှိအပြင်အဆင်များမှာ:",
+       "protect-locked-dblock": "သက်ဝင်နေသော ဒေတာဘေ့စ် သော့ခတ်ထားမှုကြောင့် ကာကွယ်မှုအဆင့်များကို မပြောင်းလဲနိုင်ပါ။ စာမျက်နှာ <strong>$1</strong> အတွက် လက်ရှိအပြင်အဆင်များမှာ:",
        "protect-locked-access": "သင့်အကောင့်သည် စာမျက်နှာ၏ ကာကွယ်မှုအဆင့်ကို ပြောင်းလဲနိုင်ရန် ခွင့်ပြုချက် မရှိပါ။\nဤသည်မှာ '''$1''' စာမျက်နှာအတွက် လက်ရှိ settings သတ်မှတ်ချက်များ ဖြစ်သည်။",
        "protect-cascadeon": "ပြန်စီစဉ်ခြင်း cascading ကို ကာကွယ်ထားသော အောက်ပါ{{PLURAL:$1|စာမျက်နှာ|စာမျက်နှာများ}} ထည့်သွင်းပါဝင်နေသောကြောင့် ဤစာမျက်နှာကို လက်ရှိတွင် ကာကွယ်ထားသည်။\nဤစာမျက်နှာ၏ ကာကွယ်မှုအဆင့်ကို ပြောင်းလဲမှုများသည် ပြန်စီစဉ်ခြင်း ကာကွယ်ထားမှုကို အကျိုးသက်ရောက်လိမ့်မည် မဟုတ်။",
        "protect-default": "အသုံးပြုသူ အားလုံးကို ခွင့်ပြုရန်",
        "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-existing-expiry": "ရှိနေပြီးသား သက်တမ်းကုန်ချိန်: $3၊ $2",
+       "protect-existing-expiry-infinity": "ရှိနေပြီးသား သက်တမ်းကုန်ချိန်: အနန္တ",
        "protect-otherreason": "အခြားသော/နောက်ထပ် အကြောင်းပြချက် -",
        "protect-otherreason-op": "အခြား အကြောင်းပြချက်",
+       "protect-dropdown": "*ယေဘုယျ ကာကွယ်ရခြင်း အကြောင်းပြချက်များ\n** လက်သရမ်းမှု များပြားခြင်း\n** လိုက်ဖွခြင်း များပြား\n** တည်းဖြတ်မှုစစ်ပွဲအတွက် တန်ပြန်ဆင်ခြင်း\n** လူကြည့်များသော စာမျက်နှာ",
        "protect-edit-reasonlist": "ကာကွယ်ထားရသော အကြောင်းရင်းများကို တည်းဖြတ်ရန်",
        "protect-expiry-options": "၁ နာရီ:1 hour,၁ နေ့:1 day,၁ ပတ်:1 week,၂ ပတ်:2 weeks,၁ လ:1 month,၃ လ:3 months,၆ လ:6 months,၁ နှစ်:1 year,အနန္တ:infinite",
        "restriction-type": "ခွင့်ပြုချက် -",
        "pagesize": "(ဘိုက်)",
        "restriction-edit": "ပြင်ဆင်ရန်",
        "restriction-move": "ရွှေ့ရန်",
-       "restriction-create": "á\80\91á\80½á\80\84á\80º",
-       "restriction-upload": "Upload တင်ရန်",
+       "restriction-create": "á\80\96á\80\94á\80ºá\80\90á\80®á\80¸",
+       "restriction-upload": "ဖိုင်တင်ရန်",
        "restriction-level-sysop": "အပြည့်အဝကာကွယ်ထားသည်။",
        "restriction-level-autoconfirmed": "တစ်စိတ်တစ်ပိုင်း ကာကွယ်ထားသည်",
        "restriction-level-all": "မည်သည့်အဆင့်မဆို",
        "undeleteviewlink": "ကြည့်ရန်",
        "undeleteinvert": "ရွေးချယ်ထားခြင်းကို ပြောင်းပြန်လှန်ရန်",
        "undeletecomment": "အ​ကြောင်း​ပြ​ချက် -",
+       "undelete-header": "မကြာသေးခင်က ဖျက်ထားသည့်စာမျက်နှာများအတွက် [[Special:Log/delete|ဖျက်ထားသည်များ မှတ်တမ်း]]ကို ကြည့်ပါ။",
+       "undelete-search-title": "ဖျက်ပစ်လိုက်သော စာမျက်နှာများကို ရှာရန်",
        "undelete-search-box": "ဖျက်ပစ်သည့် စာမျက်နှာများမှ ရှာရန်",
+       "undelete-search-prefix": "ဤကဲ့သို့ အစပြုသောစာမျက်နှာများကို ပြရန်:",
+       "undelete-search-full": "ဤကဲ့သို့ ခေါင်းစဉ်များပါဝင်သော စာမျက်နှာကိုပြရန်:",
        "undelete-search-submit": "ရှာဖွေရန်",
        "undelete-show-file-submit": "မှန်",
        "namespace": "အမည်ညွှန်း -",
        "mycontris": "ဆောင်ရွက်ချက်များ",
        "anoncontribs": "ဆောင်ရွက်ချက်များ",
        "contribsub2": "{{GENDER:$3|$1}}အတွက် ($2)",
+       "contributions-userdoesnotexist": "အသုံးပြုသူအကောင့် \"$1\" သည် မှတ်ပုံမတင်ထားပါ။",
        "nocontribs": "ဤသတ်မှတ်ချက်များနှင့် ကိုက်ညီသည့် ပြောင်းလဲမှုများ မရှိပါ။",
        "uctop": "(လက်ရှိ)",
        "month": "အဆိုပါ လမှစ၍ ( အဆိုပါလထက်လည်း စောသော) :",
        "year": "အဆိုပါ နှစ်မှစ၍ ( အဆိုပါနှစ်ထက်လည်း စောသော) :",
+       "date": "အဆိုပါရက်စွဲမှစ၍ (ယင်းထက်လည်း စောသော):",
        "sp-contributions-newbies": "အကောင့်အသစ်များ၏ ပံ့ပိုးမှုများကိုသာ ပြရန်",
        "sp-contributions-newbies-sub": "အကောင့်အသစ်များအတွက်",
+       "sp-contributions-newbies-title": "အကောင့်သစ်များအတွက် အသုံးပြုသူပံ့ပိုးမှုများ",
        "sp-contributions-blocklog": "ပိတ်ပင်တားဆီးမှု မှတ်တမ်း",
        "sp-contributions-deleted": "ဖျက်ခံထားရသည့် {{GENDER:$1|အသုံးပြုသူ}} ဆောင်ရွက်ချက်များ",
        "sp-contributions-uploads": "အပ်လုပ်တင်ထားသည်များ",
        "sp-contributions-talk": "ဆွေးနွေး",
        "sp-contributions-userrights": "{{GENDER:$1|အသုံးပြုသူ}}၏ အခွင့်အရေးများကို စီမံခန့်ခွဲခြင်း",
        "sp-contributions-blocked-notice": "ဤအသုံးပြုသူအား လတ်တလောတွင် ပိတ်ပင်ထားသည်။\nနောက်ဆုံးပိတ်ပင်မှု မှတ်တမ်းအား ကိုးကားနိုင်ရန် အောက်တွင် ဖော်ပြထားသည်။",
+       "sp-contributions-blocked-notice-anon": "ဤအိုင်ပီလိပ်စာအား လတ်တလောတွင် ပိတ်ပင်ထားသည်။\nနောက်ဆုံးပိတ်ပင်မှု မှတ်တမ်းအား ကိုးကားနိုင်ရန် အောက်တွင် ဖော်ပြထားသည်။",
        "sp-contributions-search": "ပံ့ပိုးမှုများကို ရှာရန်",
        "sp-contributions-username": "အိုင်ပီလိပ်စာ သို့ အသုံးပြုသူအမည် :",
        "sp-contributions-toponly": "နောက်ဆုံးတည်းဖြတ်မူများသာပြရန်",
        "sp-contributions-newonly": "စာမျက်နှာ ဖန်တီးမှုများသာ ပြသရန်",
        "sp-contributions-hideminor": "အရေးမကြီးသော တည်းဖြတ်မှုများကို ဝှက်ရန်",
        "sp-contributions-submit": "ရှာဖွေရန်",
+       "sp-contributions-outofrange": "မည်သည့်ရလဒ်များ မပြနိုင်ပါ။ တောင်းဆိုထားသော အိုင်ပီအတိုင်းအတာသည် /$1 ၏ CIDR ကန့်သတ်ချက်ထက် ပိုကြီးသည်။",
        "whatlinkshere": "ဘယ်ကလင့်ခ်ထားလဲ",
        "whatlinkshere-title": "\"$1\" သို့ ချိတ်ဆက်ထားသော စာမျက်နှာများ",
        "whatlinkshere-page": "စာမျက်နှာ -",
        "whatlinkshere-hidelinks": "လင့်ခ်များ $1 ခု",
        "whatlinkshere-hideimages": "ဖိုင်အချိတ်အဆက်များ $1 ခု",
        "whatlinkshere-filters": "စိစစ်မှုများ",
+       "whatlinkshere-submit": "သွားပါ",
+       "autoblockid": "အလိုအလျောက်ပိတ်ပင် #$1",
+       "block": "အသုံးပြုသူကို ပိတ်ပင်ရန်",
        "unblock": "အသုံးပြုသူကို ပိတ်ပင်ထားရာမှ ပြန်ဖွင့်ပေးရန်",
        "blockip": "{{GENDER:$1|အသုံးပြုသူ}} ပိတ်ပင်ရန်",
+       "blockiptext": "သတ်မှတ်ထားသော အိုင်ပီလိပ်စာ သို့မဟုတ် အသုံးပြုသူအမည်ကို ရေးသားပိုင်ခွင့်မှ ပိတ်ပင်တားဆီးရန် အောက်ပါပုံစံကို အသုံးပြုပါ။ ဤသည် [[{{MediaWiki:Policy-url}}|မူဝါဒ]] အရ ဖျက်လိုဖျက်ဆီးလုပ်ဆောင်မှုကို ကာကွယ်ရန်အတွက်သာ ဆောင်ရွက်သင့်သည်။ ပိတ်ပင်ရသည့် အကြောင်းပြချက်များကိုလည်း အောက်တွင်\nဖြည့်သွင်းပါ။ အိုင်ပီလိပ်စာ အတိုင်းအတာအလိုက် [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] syntax ကို အသုံးပြု၍ ပိတ်ပင်နိုင်ပါသည်။ အများဆုံး ခွင့်ပြုပမာဏမှာ IPv4 အတွက် /$1 ဖြစ်ပြီး IPv6 အတွက် /$2 ဖြစ်သည်။",
        "ipaddressorusername": "အိုင်ပီလိပ်စာ သို့ အသုံးပြုသူအမည် -",
        "ipbexpiry": "သက်တမ်းကုန်လွန်ရက် -",
        "ipbreason": "အ​ကြောင်း​ပြ​ချက်:",
+       "ipbreason-dropdown": "*ယေဘုယျ ပိတ်ပင်တားဆီးရခြင်း အကြောင်းပြချက်များ\n** မှားယွင်းအချက်အလက်များကို ထည့်သွင်းမှု\n** စာမျက်နှာများမှ အကြောင်းအရာကို ဖယ်ရှားမှု\n** ပြင်ပဆိုဒ်များသို့လင့်ခ်ချိတ်၍ ဖွမှု\n** စာမျက်နှာများတွင် ပေါက်တတ်ကရများ ထည့်သွင်းမှု\n** ခြိမ်းခြောက်ခြင်း အပြုအမူ/အနှောက်အယှက်ပေးခြင်း\n** အကောင့်များစွာကို အလွဲသုံးစားလုပ်မှု\n** လက်ခံနိုင်ဖွယ်မရှိသော အသုံးပြုသူအမည်",
        "ipb-hardblock": "ဤအိုင်ပီလိပ်စာမှ လော့ဂ်အင်ဝင်ထားသော အသုံးပြုသူများကို တည်းဖြတ်ခြင်းမှ တားမြစ်ရန်",
        "ipbcreateaccount": "အကောင့်အသစ်ပြုလုပ်ခြင်းကို တားဆီးရန်",
        "ipbemailban": "အီးမေးပို့ခြင်းမှ အသုံးပြုသူကို တားဆီးရန်",
        "ipbwatchuser": "ဤအသုံးပြုသူ၏ စာမျက်နှာနှင့် ဆွေးနွေးချက်တို့ကို စောင့်ကြည့်ရန်",
        "ipb-disableusertalk": "ပိတ်ပင်ထားစဉ်အတွင်း ဤအသုံးပြုသူအား သူတို့၏ ကိုယ်ပိုင်ဆွေးနွေးချက် စာမျက်နှာကို ပြင်ဆင်ခြင်းမှ ပိတ်ပင်ရန်",
        "ipb-change-block": "အသုံးပြုသူအား ဤအပြင်အဆင်များဖြင့် ထပ်မံပိတ်ပင်ရန်",
+       "ipb-confirm": "ပိတ်ပင်မှုကို အတည်ပြု",
        "badipaddress": "တရားမဝင်သော IP address",
        "blockipsuccesssub": "ပိတ်ပင်ခြင်း အောင်မြင်သည်",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] ကို ပိတ်ပင်ထားပါသည်။<br />\nပိတ်ပင်မှုများကို ပြန်လည်ဆန်းစစ်ရန် [[Special:BlockList|ပိတ်ပင်မှု စာရင်း]]ကို ကြည့်ပါ။",
+       "ipb-blockingself": "သင့်ကိုယ်သင် ပိတ်ပင်တားဆီးတော့မည် ဖြစ်သည်။ ဤသည်ကို လုပ်ဆောင်လိုသည်မှာ သေချာပါသလား။",
+       "ipb-confirmaction": "ဤသည်ကို လုပ်ဆောင်လိုသည်မှာ သေချာပါက အောက်ခြေရှိ \"{{int:ipb-confirm}}\" ကွင်းအား ကျေးဇူးပြု၌ စစ်ဆေးပါ။",
        "ipb-edit-dropdown": "ပိတ်ပင်ရသောအကြောင်းရင်းများ",
        "ipb-unblock-addr": "$1 ကို ပိတ်ထားရာမှ ပြန်ဖွင့်ရန်",
        "ipb-unblock": "အသုံးပြုသူအမည် သို့ IP address ကို ပိတ်ထားရာမှ ပြန်ဖွင့်ပေးရန်",
        "ipb-blocklist": "ရှိနှင့်ပြီးသား ပိတ်ပင်မှုများကို ကြည့်ရန်",
        "ipb-blocklist-contribs": "{{GENDER:$1|$1}} အတွက် ဆောင်ရွက်ချက်များ",
+       "ipb-blocklist-duration-left": "$1 ကျန်ရှိ",
        "unblockip": "အသုံးပြုသူကို ပိတ်ပင်ထားရာမှ ပြန်ဖွင့်ပေးရန်",
        "ipusubmit": "ဤပိတ်ပင်မှုကို ဖယ်ရှားရန်",
        "unblocked": "[[User:$1|$1]] ကို ပိတ်ပင်ထားရာမှ ပြန်ဖွင့်ပေးလိုက်သည်",
+       "unblocked-range": "$1 အား ပိတ်ပင်မှုမှ ပြန်ဖြေပေးလိုက်သည်။",
        "unblocked-id": "$1 ကို ပိတ်ပင်ထားမှုကို ဖယ်ရှာလိုက်သည်",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] အား ပိတ်ပင်မှုမှ ပြန်ဖြေပေးလိုက်သည်။",
        "blocklist": "ပိတ်ပင်ထားသော အသုံးပြုသူများ",
        "autoblocklist": "အလိုအလျောက် ပိတ်ပင်မှုများ",
+       "autoblocklist-submit": "ရှာဖွေရန်",
        "autoblocklist-legend": "အလိုအလျောက် ပိတ်ပင်မှုများ စာရင်း",
        "autoblocklist-localblocks": "ဒေသဆိုင်ရာ {{PLURAL:$1|အလိုအလျောက် ပိတ်ပင်မှု|အလိုအလျောက် ပိတ်ပင်မှုများ}}",
+       "autoblocklist-total-autoblocks": "အလိုအလျက်ပိတ်ပင်မှုများ စုစုပေါင်း: $1",
+       "autoblocklist-empty": "အလိုအလျောက် ပိတ်ပင်ထားမှုစာရင်းသည် ဗလာဖြစ်နေသည်။",
        "autoblocklist-otherblocks": "အခြား {{PLURAL:$1|အလိုအလျောက် ပိတ်ပင်မှု|အလိုအလျောက် ပိတ်ပင်မှုများ}}",
        "ipblocklist": "ပိတ်ပင်ထားသော အသုံးပြုသူများ",
        "ipblocklist-legend": "ပိတ်ပင်ထားသော အသုံးပြုသူတစ်ဦးကို ရှာရန်",
+       "blocklist-userblocks": "အကောင့်ပိတ်ပင်မှုများ ဝှက်",
+       "blocklist-tempblocks": "ယာယီပိတ်ပင်မှုများ ဝှက်",
+       "blocklist-addressblocks": "အိုင်ပီတစ်ခုတည်းပိတ်ပင်မှု ဝှက်",
+       "blocklist-rangeblocks": "အကွာအဝေးလိုက် ပိတ်ပင်မှုများ ဝှက်",
+       "blocklist-timestamp": "အချိန်တံဆိပ်",
+       "blocklist-target": "ပစ်မှတ်",
+       "blocklist-expiry": "သက်တမ်းကုန်လွန်မည်",
+       "blocklist-by": "ပတ်ပင်ထားသည့် အက်ဒမိန်",
+       "blocklist-params": "ပိတ်ပင်မှု ပါရာမီတာများ",
+       "blocklist-reason": "အကြောင်းပြချက်",
        "ipblocklist-submit": "ရှာဖွေရန်",
+       "ipblocklist-localblock": "ဒေသတွင်း ပိတ်ပင်",
        "ipblocklist-otherblocks": "အခြား ပိတ်ပင်ထားမှု{{PLURAL:$1|ခု|ခု}}",
        "infiniteblock": "အကန့်အသတ်မရှိ",
        "expiringblock": "$1 ရက် $2 အချိန်တွင် သက်တမ်းကုန်မည်",
+       "anononlyblock": "အမည်မသိများသာ",
        "noautoblockblock": "အလိုအလျောက်ပိတ်ပင်ခြင်းကို ပိတ်ထားရန်",
        "createaccountblock": "အကောင့်ဖန်တီးခြင်းကို ပိတ်ထားသည်",
        "emailblock": "အီးမေးကို ပိတ်ပင်ထားသည်",
        "blocklist-nousertalk": "မိမိ၏ဆွေးနွေးချက်စာမျက်နှာကို တည်းဖြတ်မရနိုင်ပါ",
        "ipblocklist-empty": "ပိတ်ပင်ထားမှုစာရင်းသည် ဗလာဖြစ်နေသည်။",
+       "ipblocklist-no-results": "တောင်းဆိုလိုက်သော အိုင်ပီလိပ်စာ သို့မဟုတ် အသုံးပြုသူအမည်ကို မပိတ်ပင်ထားပါ။",
        "blocklink": "ပိတ်ပင်",
        "unblocklink": "မပိတ်ပင်တော့ရန်",
        "change-blocklink": "စာကြောင်းအမည် ပြောင်းရန်",
        "contribslink": "ပံ့ပိုး",
+       "emaillink": "အီးမေးလ် ပို့",
+       "autoblocker": "အလိုအလျောက်ပိတ်ပင်ခဲ့သည်။ အကြောင်းမှာ သင်၏အိုင်ပီလိပ်စာအား  \"[[User:$1|$1]]\" မှ မကြာသေးခင်က အသုံးပြုခဲ့သည်။ $1 ၏ ပိတ်ပင်မှုအတွက် ပေးထားသော အကြောင်းပြချက်မှာ \"$2\" ဖြစ်သည်။",
        "blocklogpage": "ပိတ်ပင်တားဆီးမှု မှတ်တမ်း",
        "blocklog-showlog": "ဤအသုံးပြုသူအား ယခင်က ပိတ်ပင်ထားပြီး ဖြစ်သည်။\nပိတ်ပင်မှု မှတ်တမ်းအား ကိုးကားနိုင်ရန် အောက်တွင် ဖော်ပြထားသည်။",
        "blocklogentry": "သက်တမ်း $2 ဖြင့် [[$1]] ကို ပိတ်ပင်လိုက်သည် $3",
        "block-log-flags-noautoblock": "အလိုအလျောက်ပိတ်ပင်ခြင်းကို ပိတ်ထားသည်",
        "block-log-flags-noemail": "အီးမေးကို ပိတ်ပင်ထားသည်",
        "block-log-flags-nousertalk": "မိမိ၏ဆွေးနွေးချက်စာမျက်နှာကို တည်းဖြတ်မရနိုင်ပါ",
+       "block-log-flags-angry-autoblock": "အရည်အသွေးမြှင့် အလိုအလျောက်ပိတ်ပင်မှု လုပ်ဆောင်ခွင့်ပြုထားသည်",
        "block-log-flags-hiddenname": "အသုံးပြုသူအမည် ဝှက်ထားသည်",
+       "range_block_disabled": "အတိုင်းအတာ ပိတ်ပင်မှုဖန်တီးရန် အက်ဒမင်၏စွမ်းရည်မှာ ပိတ်ထားပါသည်။",
        "ipb_expiry_invalid": "သက်တမ်းကုန်လွန်မည့် အချိန်သည် တရားမဝင်ပါ။",
+       "ipb_expiry_old": "သက်တမ်းကုန်လွန်ချိန်မှာ အတိတ်တွင်ဖြစ်သည်။",
+       "ipb_expiry_temp": "ဝှက်ထားသော အသုံးပြုသူအမည်အတွက် ပိတ်ပင်မှုသည် အမြဲတမ်းဖြစ်ရမည်။",
        "ipb_already_blocked": "\"$1\" ကို ပိတ်ပင်ထားပြီး ဖြစ်သည်။",
        "ipb-needreblock": "$1 ကို ပိတ်ပင်ထားပြီး ဖြစ်သည်။ အပြင်အဆင်များကို ပြောင်းလဲလိုပါသလား?",
+       "ipb-otherblocks-header": "အခြား ပိတ်ပင်ထားမှု{{PLURAL:$1|ခု|ခု}}",
+       "unblock-hideuser": "ဤအသုံးပြုသူအား ပိတ်ပင်မှုမှ ပြန်ဖြေမပေးနိုင်ပါ၊ အကြောင်းမှာ သူတို့၏ အသုံးပြုသူအမည်ကို ဝှက်ထားသည်။",
+       "ip_range_invalid": "ဆီလျော်မှုမရှိသော အိုင်ပီအတိုင်းအတာ",
+       "ip_range_toolarge": "/$1 ထက် ပိုကြီးသော အတိုင်းအတာ ပိတ်ပင်မှုများကို ခွင့်မပြုပါ။",
+       "ip_range_exceeded": "အိုင်ပီအတိုင်းအတာသည် ယင်း၏အများဆုံးပမာဏထက် ကျော်လွန်နေသည်။ ခွင့်ပြုထားသော အတိုင်းအတာမှာ /$1 ဖြစ်သည်။",
+       "ip_range_toolow": "အိုင်ပီအတိုင်းအတာများသည် ခွင့်ပြုထားခြင်း မရှိပါ။",
        "proxyblocker": "ပရောက်ဆီ ပိတ်ပင်သူ",
+       "softblockrangesreason": "ဤအိုင်ပီလိပ်စာ ($1) မှ အမည်မသိ ပံ့ပိုးမှုများကို ခွင့်မပြုပါ။ ကျေးဇူးပြု၍ အကောင့်ထဲဝင်ပါ။",
+       "ipbblocked": "အခြားအသုံးပြုသူများကို သင် မပိတ်ပင်နိုင်ပါ။ အကြောင်းမှာ သင်ကိုယ်တိုင် မိမိကိုယ်ကို ပိတ်ပင်ခဲ့သောကြောင့်ဖြစ်သည်။",
+       "ipbnounblockself": "သင်ကိုယ်တိုင် မိမိကိုယ်ကို ပိတ်ပင်မှုမှ ပြန်မဖြေနိုင်ပါ။",
        "move-page": "$1 ကို ရွှေ့ရန်",
        "move-page-legend": "စာမျက်နှာကို ရွှေ့ပြောင်းရန်",
        "movepagetext": "အောက်ပါပုံစံကို အသုံးပြုခြင်းသည် စာမျက်နှာကို အမည်ပြောင်းလဲပေးမည် ဖြစ်ပြီး အမည်သစ်သို့ ယင်း၏ မှတ်တမ်းနှင့်တကွ ရွှေ့ပေးမည် ဖြစ်သည်။\nအမည်ဟောင်းသည် အမည်သစ်သို့ ပြန်ညွှန်းစာမျက်နှာ ဖြစ်လာမည်။\nသင်သည် မူလခေါင်းစဉ်သို့ ပြန်ညွှန်းများကို အလိုအလျောက် အပ်ဒိတ် update လုပ်နိုင်သည်။\nအကယ်၍ မပြုလုပ်လိုပါက [[Special:DoubleRedirects|နှစ်ဆင့်ပြန်ညွှန်းများ]] သို့မဟုတ် [[Special:BrokenRedirects|ပြန်ညွှန်း အပျက်များ]] ကို မှတ်သားရန် မမေ့ပါနှင့်။\nလင့်များ ညွှန်းလိုသည့် နေရာသို့ ညွှန်ပြနေရန် သင့်တွင် တာဝန် ရှိသည်။\n\nအကယ်၍ ခေါင်းစဉ်အသစ်တွင် စာမျက်နှာတစ်ခု ရှိနှင့်ပြီး ဖြစ်ပါက (သို့) ယင်းစာမျက်နှာသည် အလွတ်မဖြစ်ပါက (သို့) ပြန်ညွှန်းတစ်ခု မရှိပါက (သို့) ယခင်က ပြုပြင်ထားသော မှတ်တမ်း မရှိပါက စာမျက်နှာသည် <strong>ရွေ့မည်မဟုတ်</strong> သည်ကို သတိပြုပါ။ \nဆိုလိုသည်မှာ သင်သည် အမှားတစ်ခု ပြုလုပ်မိပါက စာမျက်နှာကို ယခင်အမည်ကို ပြန်လည် ပြောင်းလဲပေးနိုင်သည်။ ရှိပြီသားစာမျက်နှာတစ်ခုကို စာမျက်နှာ အသစ်နှင့် ပြန်အုပ် overwrite ခြင်း မပြုနိုင်။\n\n<strong>မှတ်ချက်။</strong>\nဤသည်မှာ လူဖတ်များသော စာမျက်နှာတစ်ခုဖြစ်ပါက မမျှော်လင့်ထားသော၊ ကြီးမားသော အပြောင်းအလဲတစ်ခု ဖြစ်ပေါ်လာနိုင်သည်။\nထို့ကြောင့် ဆက်လက် မဆောင်ရွက်မီ သင်သည် နောက်ဆက်တွဲ အကျိုးဆက်များကို နားလည်ကြောင်း ကျေးဇူးပြု၍ သေချာပါစေ။",
        "movepagetext-noredirectfixer": "အောက်ပါပုံစံကို အသုံးပြုခြင်းသည် စာမျက်နှာကို အမည်ပြောင်းလဲပေးမည် ဖြစ်ပြီး အမည်သစ်သို့ ယင်း၏ မှတ်တမ်းနှင့်တကွ ရွှေ့ပေးမည် ဖြစ်သည်။\n[[Special:DoubleRedirects|နှစ်ဆင့်ပြန်ညွှန်းများ]] သို့မဟုတ် [[Special:BrokenRedirects|ပြန်ညွှန်း အပျက်များ]] ကို စစ်ဆေးရန် မမေ့ပါနှင့်။\nလင့်ခ်များ ညွှန်းလိုသည့် နေရာသို့ ညွှန်ပြနေရန် သင့်တွင် တာဝန် ရှိသည်။\n\nအကယ်၍ ခေါင်းစဉ်အသစ်တွင် စာမျက်နှာတစ်ခု ရှိနေနှင့်ပြီး ပြန်ညွှန်းတစ်ခု မရှိပါက သို့မဟုတ် ယခင်က ပြုပြင်ထားသော မှတ်တမ်း ရှိနေပါက စာမျက်နှာသည် <strong>ရွေ့မည်မဟုတ်</strong> သည်ကို သတိပြုပါ။ \nဆိုလိုသည်မှာ သင်သည် အမှားတစ်ခု ပြုလုပ်မိပါက စာမျက်နှာကို ယခင်အမည်ကို ပြန်လည် ပြောင်းလဲပေးနိုင်သည်။ ရှိပြီသားစာမျက်နှာတစ်ခုကို စာမျက်နှာ အသစ်နှင့် ပြန်အုပ် overwrite ခြင်း မပြုနိုင်။\n\n<strong>မှတ်ချက်။</strong>\nဤသည်မှာ လူဖတ်များသော စာမျက်နှာတစ်ခုဖြစ်ပါက မမျှော်လင့်ထားသော၊ ကြီးမားသော အပြောင်းအလဲတစ်ခု ဖြစ်ပေါ်လာနိုင်သည်။\nထို့ကြောင့် ဆက်လက် မဆောင်ရွက်မီ သင်သည် နောက်ဆက်တွဲ အကျိုးဆက်များကို နားလည်ကြောင်း ကျေးဇူးပြု၍ သေချာပါစေ။",
        "movepagetalktext": "ဤအကွက်ကို အမှန်ခြစ်လိုက်ခြင်းဖြင့် ဗလာမဟုတ်သော ဆွေးနွေးချက်စာမျက်နှာသည် ရှိနှင့်ပြီး မဟုတ်လျှင် ဆက်နွယ်နေသော ဆွေးနွေးချက် စာမျက်နှာကို ခေါင်းစဉ်အသစ်သို့  အလိုအလျောက် ရွှေ့ပစ်မည် ဖြစ်သည်။\n\nဤကိစ္စရပ်တွင် သင် ဆန္ဒရှိလျှင် စာမျက်နှာကို မိမိကိုယ်တိုင် သွားရောက်ရွှေ့ပြောင်း ပေါင်းစပ်နိုင်သည်။",
+       "movenologintext": "စာမျက်နှာတစ်ခုကို ရွေ့ပြောင်းရန် သင့်အနေဖြင့် မှတ်ပုံတင်ထားသော အသုံးပြုသူနှင့် [[Special:UserLogin|အကောင့်ထဲဝင်]]ထားရပါမည်။",
+       "movenotallowed": "သင့်တွင် စာမျက်နှာများကို ရွေ့ပြောင်းရန် ခွင့်ပြုချက်မရှိပါ။",
+       "movenotallowedfile": "သင့်တွင် ဖိုင်များကို ရွေ့ပြောင်းရန် ခွင့်ပြုချက်မရှိပါ။",
+       "cant-move-user-page": "သင့်တွင် အသုံးပြုသူ စာမျက်နှာများကို ရွေ့ပြောင်းရန် ခွင့်ပြုချက်မရှိပါ။",
+       "cant-move-category-page": "သင့်တွင် ကဏ္ဍစာမျက်နှာများကို ရွေ့ပြောင်းရန် ခွင့်ပြုချက်မရှိပါ။",
+       "cant-move-to-category-page": "သင့်တွင် စာမျက်နှာမှ ကဏ္ဍစာမျက်နှာသို့ ရွေ့ပြောင်းရန် ခွင့်ပြုချက်မရှိပါ။",
+       "cant-move-subpages": "သင့်တွင် စာမျက်နှာခွဲများကို ရွေ့ပြောင်းရန် ခွင့်ပြုချက်မရှိပါ။",
        "newtitle": "ခေါင်းစဉ်အသစ်:",
        "move-watch": "မူရင်းစာမျက်နှာနှင့် ဦးတည်ထားသော စာမျက်နှာတို့ကို စောင့်ကြည့်ရန်",
        "movepagebtn": "စာမျက်နှာကို ရွှေ့ပြောင်းရန်",
        "movepage-moved-redirect": "ပြန်ညွှန်းတစ်ခုကို ဖန်တီးပြီးဖြစ်သည်။",
        "movepage-moved-noredirect": "ပြန်ညွှန်းဖန်တီးခြင်းအား ချေဖျက်ပြီး ဖြစ်သည်။",
        "articleexists": "ထိုအမည်ဖြင့် စာမျက်နှာတစ်ခု ရှိနှင့်ပြီးဖြစ်သည် (သို့) သင်ရွေးလိုက်သော အမည်သည် တရားမဝင်ပါ။\nကျေးဇူးပြု၍ အခြားအမည်တစ်ခုကို ရွေးပေးပါ။",
+       "cantmove-titleprotected": "ဤနေရာသို့ စာမျက်နှာတစ်ခုကို ဖန်တီးရန် ခွင့်ပြုချက်မရှိပါ၊ အကြောင်းမှာ ခေါင်းစဉ်သစ်ကို ဖန်တီးခြင်းမှ ကာကွယ်ခဲ့သောကြောင့်ဖြစ်သည်။",
        "movetalk": "ယှက်နွယ်နေသော ဆွေးနွေးချက်စာမျက်နှာများကို ရွှေ့ရန်",
+       "move-subpages": "စာမျက်နှာခွဲများကို ရွေ့ပြောင်းရန် ($1 ထက်ပို၍)",
+       "move-talk-subpages": "ဆွေးနွေးစာမျက်နှာ၏ စာမျက်နှာခွဲများကို ရွေ့ပြောင်းရန် ($1 ထက်ပို၍)",
        "movepage-page-moved": "စာမျက်နှာ $1 ကို $2 သို့ ရွှေ့ပြီးပြီ ဖြစ်သည်။",
        "movepage-page-unmoved": "စာမျက်နှာ $1 ကို $2 သို့ ရွှေ့မရနိုင်ပါ။",
        "movelogpage": "ရွှေ့ပြောင်းခြင်း မှတ်တမ်း",
        "movelogpagetext": "အောက်ပါတို့သည် စာမျက်နှာ ရွေ့ပြောင်းမှုများ အားလုံး စာရင်း ဖြစ်သည်။",
+       "movesubpage": "{{PLURAL:$1|စာမျက်နှာခွဲ|စာမျက်နှာခွဲများ}}",
+       "movenosubpage": "ဤစာမျက်နှာတွင် စာမျက်နှာခွဲများ မရှိပါ။",
        "movereason": "အ​ကြောင်း​ပြ​ချက် -",
        "revertmove": "ပြောင်းရန်",
        "delete_and_move_confirm": "ဟုတ်ပါသည်။ စာမျက်နှာကို ဖျက်ပါ။",
        "allmessages-filter-all": "အားလုံး",
        "allmessages-filter-modified": "ပြုပြင်ထားသော",
        "allmessages-language": "ဘာသာစကား:",
-       "allmessages-filter-submit": "သွား",
+       "allmessages-filter-submit": "သွားပါ",
+       "allmessages-filter-translate": "ဘာသာပြန်ပါ",
        "thumbnail-more": "ပုံကြီးချဲ့ရန်",
        "filemissing": "ဖိုင်ပျောက်နေသည်",
        "thumbnail_error": "ပုံစံငယ်ဖန်တီးရာတွင် အမှားပြနေသည် - $1",
+       "thumbnail_error_remote": "$1 မှ အမှားမက်ဆေ့: $2",
        "import": "စာမျက်နှာများထည့်သွင်းရန်",
        "import-interwiki-submit": "တင်သွင်းရန်",
        "import-upload-filename": "ဖိုင်အမည် -",
        "importlogpage": "ထည့်သွင်းသည့် မှတ်တမ်း",
        "tooltip-pt-userpage": "{{GENDER:|သင်၏ အသုံးပြုသူ}} စာမျက်နှာ",
        "tooltip-pt-mytalk": "{{GENDER:|သင်၏}} ဆွေးနွေးချက်စာမျက်နှာ",
+       "tooltip-pt-anontalk": "ဤအိုင်ပီလိပ်စာမှ တည်းဖြတ်မှုများအကြောင်း ဆွေးနွေးချက်",
        "tooltip-pt-preferences": "{{GENDER:|သင်၏}} ရွေးချယ်စရာများ",
        "tooltip-pt-watchlist": "အပြောင်းအလဲများအတွက် စောင့်ကြည့်နေသော စာမျက်နှာများ၏ စာရင်း",
        "tooltip-pt-mycontris": "{{GENDER:|သင်၏}} ဆောင်ရွက်ချက်များ စာရင်း",
+       "tooltip-pt-anoncontribs": "ဤအိုင်ပီလိပ်စာမှ ပြုလုပ်ထားသော တည်းဖြတ်မှုများ၏ စာရင်း",
        "tooltip-pt-login": "သင့်အား အကောင့်ဝင်ရန် တိုက်တွန်းပါသည်။ သို့သော် မဖြစ်မနေ လုပ်ဆောင်ရန် မဟုတ်ပါ။",
+       "tooltip-pt-login-private": "ဤဝီကီကို အသုံးပြုရန် အကောင့်ထဲဝင်ဖို့ လိုအပ်သည်",
        "tooltip-pt-logout": "ထွက်​ပါ​",
        "tooltip-pt-createaccount": "အကောင့်တစ်ခုကို ဖန်တီးပြီး ဝင်ရောက်ရန် သင့်အား တိုက်တွန်းပါသည်။ သို့သော် မဖြစ်မနေ မဟုတ်ပါ။",
        "tooltip-ca-talk": "မာတိကာ စာမျက်နှာအတွက် ဆွေးနွေးချက်များ",
        "tooltip-feed-atom": "ဤစာမျက်နှာအတွက် Atom feed",
        "tooltip-t-contributions": "{{GENDER:$1|ဤအသုံးပြုသူ}}၏ ဆောင်ရွက်ချက်များ စာရင်း",
        "tooltip-t-emailuser": "{{GENDER:$1|ဤအသုံးပြုသူထံ}} အီးမေးပေးပို့ရန်",
-       "tooltip-t-upload": "ဖိုင်တင်ရန်",
+       "tooltip-t-info": "ဤစာမျက်နှာအကြောင်း အချက်အလက်ပို၍",
+       "tooltip-t-upload": "ဖိုင်များတင်ရန်",
        "tooltip-t-specialpages": "အထူး စာမျက်နှာများအားလုံး စာရင်း",
        "tooltip-t-print": "ဤစာမျက်နှာ၏ ပရင့်ထုတ်နိုင်သောမူ",
        "tooltip-t-permalink": "ယခုမူအတွက် ပုံသေလိပ်စာ",
        "tooltip-ca-nstab-category": "ကဏ္ဍများကို ကြည့်ရန်",
        "tooltip-minoredit": "အရေးမကြီးသော တည်းဖြတ်မှုအဖြစ် မှတ်သားရန်",
        "tooltip-save": "ပြောင်းလဲထားသည်များကို သိမ်းရန်",
+       "tooltip-publish": "သင်၏ပြောင်းလဲမှုများကို လွှင့်တင်ရန်",
        "tooltip-preview": "သင်ပြင်ထားသည်များကို နမူနာကြည့်ရန်ဖြစ်သည်။ ကျေးဇူးပြု၍ မသိမ်းခင် သုံးပေးပါ။",
        "tooltip-diff": "ဘယ်စာသား ​ပြောင်းလိုက်သည်ကို ြပရန်",
        "tooltip-compareselectedversions": "ရွေးချယ်ထားသော မူနှစ်ခု၏ ကွဲပြားချက်များကို ကြည့်ရန်",
        "tooltip-watch": "ဤစာမျက်နှာကို စောင့်ကြည့်စာရင်းသို့ ပေါင်းထည့်ရန်",
+       "tooltip-watchlistedit-normal-submit": "ခေါင်းစဉ်များကို ဖယ်ရှားရန်",
+       "tooltip-watchlistedit-raw-submit": "စောင့်ကြည့်စာရင်းကို မွမ်းမံရန်",
        "tooltip-recreate": "စာမျက်နှာကို ဖျက်ပစ်လိုက်လျှင်သော်မှ ပြန်လည်ဖန်တီးပါ",
        "tooltip-upload": "Upload တင်ခြင်း စတင်ရန်",
        "tooltip-rollback": "\"နောက်ပြန် ပြန်သွားခြင်း\" သည် ဤစာမျက်နှာ၏ နောက်ဆုံး တည်းဖြတ်မူသို့ ကလစ် တစ်ချက်ဖြင့် ပြန်ပြောင်းပေးသည်။",
        "tooltip-undo": "\"နောက်ပြန် ပြန်သွားခြင်း\" သည် ဤ တည်းဖြတ်ခြင်းကို နောက်ပြန်ပြန်ဆုတ်ပြီး နမူနာပုံနှင့်တကွ တည်းဖြတ်ရန် ပြန်ဖွင့်မည် ဖြစ်သည်။ အဘယ်ကြောင့် နောက်ပြန်သွားသည်ကို အကျဉ်းချုပ် အကြောင်းပြချက် ရေးနိုင်သည်။",
        "tooltip-preferences-save": "ရေးချယ်စရာများကို သိမ်းရန်",
        "tooltip-summary": "အတိုချုပ်ထည့်ရန်",
+       "anonymous": "{{SITENAME}} ၏ အမည်မသိ {{PLURAL:$1|အသုံးပြုသူ|အသုံးပြုသူများ}}",
+       "siteuser": "{{SITENAME}} အသုံးပြုသူ $1",
+       "anonuser": "{{SITENAME}} အမည်မသိ အသုံးပြုသူ $1",
+       "lastmodifiedatby": "ဤစာမျက်နှာကို $1၊ $2 အချိန်တွင် $3 က နောက်ဆုံး ပြင်ဆင်ခဲ့သည်။",
        "others": "အခြား",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|အသုံးပြုသူ}}|အသုံးပြုသူများ}} $1",
+       "anonusers": "{{SITENAME}} အမည်မသိ {{PLURAL:$2|အသုံးပြုသူ|အသုံးပြုသူများ}} $1",
+       "spamprotectiontitle": "စပန်း ကာကွယ်ခြင်း စိစစ်မှု",
        "simpleantispam-label": "Anti-spam စစ်ဆေးခြင်း။\nဤအရာအား <strong>မဖြည့်ပါနှင့်</strong>!",
        "pageinfo-title": "\"$1\" အတွက် အချက်အလက်များ",
        "pageinfo-header-basic": "အခြေခံသတင်းအချက်အလက်",
        "pageinfo-length": "စာမျက်နှာ အလျား (ဘိုက်ဖြင့်)",
        "pageinfo-article-id": "စာမျက်နှာ အိုင်ဒီ",
        "pageinfo-language": "စာမျက်နှာ စာကိုယ် ဘာသာစကား",
+       "pageinfo-language-change": "ပြောင်းလဲရန်",
        "pageinfo-content-model": "စာမျက်နှာ မာတိကာမော်ဒယ်",
+       "pageinfo-content-model-change": "ပြောင်းလဲရန်",
        "pageinfo-robot-policy": "စက်ရုပ်များမှ index ပြုလုပ်ခြင်း",
        "pageinfo-robot-index": "ခွင့်ပြုပြီး",
        "pageinfo-robot-noindex": "ခွင့်မပြုထားပါ",
        "pageinfo-toolboxlink": "စာမျက်နှာ အချက်အလက်များ",
        "pageinfo-contentpage": "မာတိကစာမျက်နှာအဖြစ် ရေတွက်ပြီး",
        "pageinfo-contentpage-yes": "မှန်",
+       "pageinfo-category-info": "ကဏ္ဍ သတင်းအချက်အလက်",
+       "pageinfo-category-total": "အဖွဲ့ဝင်များ စုစုပေါင်းအရေအတွက်",
+       "pageinfo-category-pages": "စာမျက်နှာများ အရေအတွက်",
+       "pageinfo-category-subcats": "ကဏ္ဍခွဲများ အရေအတွက်",
+       "pageinfo-category-files": "ဖိုင်များ အရေအတွက်",
+       "pageinfo-user-id": "အသုံးပြုသူ အိုင်ဒီ",
        "markaspatrolleddiff": "စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားရန်",
        "markaspatrolledtext": "ဤစာမျက်နှာအား စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားရန်",
+       "markaspatrolledtext-file": "ဤဖိုင်ဗားရှင်းအား စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားရန်",
        "markedaspatrolled": "စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားပြီး",
        "markedaspatrolledtext": "[[:$1]] ၏ ရွေးချယ်ထားသော တည်းဖြတ်မူကို စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားပြီးပါပြီ။",
+       "markedaspatrollederror": "စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မမှတ်သားနိုင်ပါ",
+       "markedaspatrollederror-noautopatrol": "သင်၏ကိုယ်ပိုင် ပြောင်းလဲမှုများကို စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားရန် ခွင့်မပြုပါ။",
        "markedaspatrollednotify": "$1 သို့ ဤပြောင်းလဲမှုအား စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားပြီးပါပြီ။",
+       "markedaspatrollederrornotify": "စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားခြင်း မအောင်မြင်ပါ",
        "patrol-log-page": "စောင့်ကြပ်စစ်ဆေးမှု မှတ်တမ်း",
+       "patrol-log-header": "ဤသည် စောင့်ကြပ်စစ်ဆေးထားသော ပြန်လည်ပြင်ဆင်မှုများ၏ မှတ်တမ်းဖြစ်သည်။",
+       "confirm-markpatrolled-button": "အိုကေ",
+       "confirm-markpatrolled-top": "$2 ၏ $3 အား စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားမည်လော။",
        "filedeleteerror-short": "ဖိုင်ဖျက်ရာတွင် အမှားအယွင်း - $1",
        "previousdiff": "← တည်းဖြတ်မူ အဟောင်း",
        "nextdiff": "ပိုသစ်သော တည်းဖြတ်မှု",
        "newimages": "ပုံအသစ်များပြခန်း",
        "newimages-legend": "စိစစ်မှု",
        "newimages-label": "ဖိုင်အမည် (သို့ ယင်း၏အစိတ်အပိုင်း) -",
+       "newimages-user": "အိုင်ပီလိပ်စာ သို့ အသုံးပြုသူအမည်",
+       "newimages-newbies": "အကောင့်အသစ်များ၏ ပံ့ပိုးမှုများကိုသာ ပြရန်",
+       "newimages-mediatype": "မီဒီယာ အမျိုးအစား:",
        "noimages": "ကြည့်စရာဘာမှ မရှိပါ။",
        "ilsubmit": "ရှာဖွေရန်",
        "bydate": "ရက်စွဲဖြင့်",
        "sp-newimages-showfrom": "$1 နေ့ $2 အချိန်ကစသော ဖိုင်အသစ်များကို ပြရန်",
+       "seconds": "{{PLURAL:$1|$1 စက္ကန့်|$1 စက္ကန့်}}",
+       "minutes": "{{PLURAL:$1|$1 မိနစ်|$1 မိနစ်}}",
+       "hours": "{{PLURAL:$1|$1 နာရီ|$1 နာရီ}}",
+       "days": "{{PLURAL:$1|$1 ရက်|$1 ရက်}}",
+       "weeks": "{{PLURAL:$1|$1 ပတ်|$1 ပတ်}}",
+       "months": "{{PLURAL:$1|$1 လ|$1 လ}}",
+       "years": "{{PLURAL:$1|$1 နှစ်|$1 နှစ်}}",
+       "ago": "$1 အကြာက",
+       "just-now": "ယခုလေးတင်",
+       "hours-ago": "$1 {{PLURAL:$1|နာရီ|နာရီ}}အကြာက",
+       "minutes-ago": "$1 {{PLURAL:$1|မိနစ်|မိနစ်}} အကြာက",
+       "seconds-ago": "$1 {{PLURAL:$1|စက္ကန့်|စက္ကန့်}} အကြာက",
+       "monday-at": "တနင်္လာနေ့က $1",
+       "tuesday-at": "အင်္ဂါနေ့က $1",
+       "wednesday-at": "ဗုဒ္ဓဟူးနေ့က $1",
+       "thursday-at": "ကြာသပတေးနေ့က $1",
+       "friday-at": "သောကြာနေ့က $1",
+       "saturday-at": "စနေနေ့က $1",
+       "sunday-at": "တနင်္ဂနွေနေ့က $1",
+       "yesterday-at": "မနေ့က $1",
        "bad_image_list": "ဖောမတ်ပုံစံမှာ အောက်ပါအတိုင်းဖြစ်သည်။\n\nစာရင်းတွင်ထည့်သွင်းထားသော အရာများကိုသာ ထည့်သွင်းစဉ်းစားမည်။ (ခရေပွင့် * ဖြင့်စသော စာကြောင်းများ)\nစာကြောင်း၏ ပထမဆုံး လင့်သည် ဖိုင်ညံ့ ဖြစ်ရမည်။\nယင်းစာကြောင်းတွင်ပင် နောက်ထပ်လာသောလင့်များကို ချွင်းချက်အဖြစ် စဉ်းစားမည်။ ဆိုလိုသည်မှာ ၎င်းလင့်များတွင်လည်း အဆိုပါ ဖိုင်ညံ့ ပါကောင်း ပါဝင်နေမည်။",
-       "metadata": "Metadata",
+       "metadata": "မီတာဒေတာ",
        "metadata-help": "ဤဖိုင်တွင် သတင်းအချက်အလက် အပိုများ ပါဝင်သည်။ ဒီဂျစ်တယ် ကင်မရာ သို့ စကင်နာများက ထည့်ပေါင်းပေးလိုက်ခြင်း ဖြစ်ကောင်းဖြစ်မည်။\nအကယ်၍ ဖိုင်ကို မူရင်းအခြေအနေမှ ပြုပြင်လိုက်ပါက အသေးစိတ်အချို့သည် ပြုပြင်ထားသောဖိုင်တွင် အပြည့်အစုံ ပြန်ပါလာမည်မဟုတ်။",
        "metadata-expand": "ချဲ့ထားသော အသေးစိတ်များကို ပြရန်",
        "metadata-collapse": "ချဲ့ထားသော အသေးစိတ်များကို ပြရန်",
        "exif-gpslatitude": "လတ္တီကျု",
        "exif-gpslongitude": "လောင်ဂျီကျု",
        "exif-gpsaltitude": "အမြင့်",
+       "exif-gpsimgdirection": "ရုပ်ပုံ၏ လမ်းကြောင်း",
        "exif-gpsdatestamp": "ဂျီပီအက်စ်ရက်စွဲ",
+       "exif-objectname": "ခေါင်းစဉ်တို",
+       "exif-contact": "ဆက်သွယ်ရန် လိပ်စာ",
        "exif-languagecode": "ဘာသာစကား",
+       "exif-iimcategory": "ကဏ္ဍ",
+       "exif-cameraownername": "ကင်မရာပိုင်ရှင်",
+       "exif-copyrighted": "မူပိုင်ခွင့် အခြေအနေ",
+       "exif-copyrightowner": "မူပိုင်ခွင့်ပိုင်ရှင်",
+       "exif-disclaimer": "သတိပြုစရာ",
+       "exif-contentwarning": "အကြောင်းအရာ သတိပေးချက်",
        "exif-orientation-1": "ပုံမှန်",
        "exif-componentsconfiguration-0": "မတည်ရှိပါ",
        "exif-subjectdistance-value": "$1 မီတာ",
        "exif-contrast-2": "အပြင်း",
        "exif-saturation-0": "သာမန်",
        "exif-sharpness-0": "ပုံမှန်",
+       "exif-subjectdistancerange-0": "မသိရှိပါ",
        "exif-subjectdistancerange-1": "မက်ကရို",
+       "exif-subjectdistancerange-2": "အနီးကြည့်",
+       "exif-subjectdistancerange-3": "အဝေးကြည့်",
+       "exif-gpslatitude-n": "မြောက်လတ္တီကျု",
+       "exif-gpslatitude-s": "တောင်လတ္တီကျု",
+       "exif-gpslongitude-e": "အရှေ့လောင်ဂျီကျု",
        "exif-gpslongitude-w": "အနောက်လောင်ဂျီကျု",
+       "exif-gpsaltitude-above-sealevel": "ပင်လယ်ရေမျက်နှာပြင်အမြင့် $1 {{PLURAL:$1|မီတာ|မီတာ}}",
+       "exif-gpsaltitude-below-sealevel": "ပင်လယ်ရေမျက်နှာပြင်အောက် $1 {{PLURAL:$1|မီတာ|မီတာ}}",
+       "exif-gpsmeasuremode-2": "နှစ်ဖက်မြင် အတိုင်းအတာ",
+       "exif-gpsmeasuremode-3": "သုံးဖက်မြင် အတိုင်းအတာ",
+       "exif-gpsspeed-k": "တစ်နာရီလျင် ကီလိုမီတာနှုန်း",
        "exif-gpsspeed-m": "တစ်နာရီလျှင် ရှိသည့် မိုင်နှုန်း",
+       "exif-gpsspeed-n": "တစ်နာရီလျင် ရေမိုင်နှုန်း",
+       "exif-gpsdestdistance-k": "ကီလိုမီတာ",
+       "exif-gpsdestdistance-m": "မိုင်",
+       "exif-gpsdestdistance-n": "ရေမိုင်",
+       "exif-gpsdop-excellent": "အထူးကောင်း ($1)",
+       "exif-gpsdop-good": "ကောင်း ($1)",
+       "exif-gpsdop-moderate": "အလယ်အလတ် ($1)",
+       "exif-gpsdop-fair": "အတော်အသင့် ($1)",
+       "exif-gpsdop-poor": "ညံ့ဖျင်း ($1)",
+       "exif-objectcycle-a": "မနက်ပိုင်းသာ",
+       "exif-objectcycle-p": "ညနေပိုင်းသာ",
+       "exif-gpsdirection-m": "သံလိုက်လမ်းကြောင်း",
        "exif-dc-contributor": "ဆောင်ရွက်ပေးထားသူများ",
+       "exif-dc-source": "ရင်းမြစ် မီဒီယာ",
+       "exif-dc-type": "မီဒီယာ အမျိုးအစား",
+       "exif-iimcategory-ace": "အနုပညာ၊ ယဥ်ကျေးမှုနှင့် ဖြေဖျော်ရေး",
+       "exif-iimcategory-clj": "ရာဇဝတ်မှုနှင့် ဥပဒေ",
+       "exif-iimcategory-dis": "ဘေးအန္တရာယ်များနှင့် မတော်တဆမှုများ",
+       "exif-iimcategory-fin": "စီးပွားရေးနှင့် စီးပွားရေးလုပ်ငန်း",
+       "exif-iimcategory-edu": "ပညာရေး",
+       "exif-iimcategory-evn": "ပတ်ဝန်းကျင်",
+       "exif-iimcategory-hth": "ကျန်းမာရေး",
+       "exif-iimcategory-lab": "အလုပ်အကိုင်",
+       "exif-iimcategory-pol": "နိုင်ငံရေး",
+       "exif-iimcategory-rel": "ဘာသာရေးနှင့် ယုံကြည်မှု",
+       "exif-iimcategory-sci": "သိပ္ပံနှင့် နည်းပညာ",
+       "exif-iimcategory-spo": "အားကစား",
+       "exif-iimcategory-wea": "ရာသီဥတု",
+       "exif-urgency-normal": "ပုံမှန် ($1)",
+       "exif-urgency-low": "နိမ့် ($1)",
+       "exif-urgency-high": "မြင့် ($1)",
        "namespacesall": "အားလုံး",
        "monthsall": "အားလုံး",
        "confirmemail": "အီးမေးကိုအတည်ပြုပါ",
        "confirmemail_send": "အတည်ပြုချက်ကုတ်ကို အီးမေးပို့ပေးရန်",
+       "confirmemail_sent": "အတည်ပြုချက် အီးမေးလ် ပို့ပြီး",
+       "confirmemail_needlogin": "သင်၏ အီးမေးလ်လိပ်စာကို အတည်ပြုရန် $1 ပါ။",
+       "confirmemail_loggedin": "သင်၏ အီးမေးလ်လိပ်စာ အတည်ပြုပြီးပါပြီ။",
+       "confirmemail_subject": "{{SITENAME}} အီးမေးလ်လိပ်စာ အတည်ပြုချက်",
+       "invalidateemail": "အီးမေးလ် အတည်ပြုခြင်းကို ပယ်ဖျက်ရန်",
+       "notificationemail_subject_changed": "{{SITENAME}} မှတ်ပုံတင်ထားသော အီးမေးလ်လိပ်စာကို ပြောင်းလဲလိုက်သည်",
+       "notificationemail_subject_removed": "{{SITENAME}} မှတ်ပုံတင်ထားသော အီးမေးလ်လိပ်စာကို ဖယ်ရှားလိုက်သည်",
+       "deletedwhileediting": "<strong>သတိပေးချက်:</strong> ဤစာမျက်နှာကို သင် စတင်တည်းဖြတ်ပြီးနောက် ဖျက်ပစ်ခဲ့သည်။",
        "recreate": "ပြန်လည်ဖန်တီးရန်",
        "confirm_purge_button": "အိုကေ",
        "confirm-purge-top": "ဤစာမျက်နှာ၏ cache အား ရှင်းလင်းမည်လော?",
+       "confirm-watch-button": "အိုကေ",
+       "confirm-watch-top": "ဤစာမျက်နှာကို သင်၏စောင့်ကြည့်စာရင်းသို့ ပေါင်းထည့်မည်လော",
+       "confirm-unwatch-button": "အိုကေ",
+       "confirm-unwatch-top": "ဤစာမျက်နှာကို သင်၏စောင့်ကြည့်စာရင်းမှ ဖယ်ရှားမည်လော",
+       "confirm-rollback-button": "အိုကေ",
        "imgmultipageprev": "← ပြီးခဲ့သော စာမျက်နှာ",
        "imgmultipagenext": "နောက်စာမျက်နှာ →",
        "imgmultigo": "သွားပါ!",
        "imgmultigoto": "စာမျက်နှာ $1 ကို သွားရန်",
        "img-lang-default": "(ပင်မ ဘာသာစကား)",
+       "img-lang-go": "သွားပါ",
+       "ascending_abbrev": "ငယ်စဉ်ကြီးလိုက်",
+       "descending_abbrev": "ကြီးစဉ်ငယ်လိုက်",
        "table_pager_next": "နောက်စာမျက်နှာ",
        "table_pager_prev": "ပြီးခဲ့သော စာမျက်နှာ",
        "table_pager_first": "ပထမဆုံး စာမျက်နှာ",
        "table_pager_last": "နောက်ဆုံးစာမျက်နှာ",
+       "table_pager_limit": "စာမျက်နှာအလိုက် အကြောင်းအရာ $1 ကိုပြရန်",
+       "table_pager_limit_label": "စာမျက်နှာအလိုက် အကြောင်းအရာများ:",
        "table_pager_limit_submit": "သွားပါ",
        "table_pager_empty": "မည်သည့်ရလဒ်မှ မရှိပါ",
        "autosumm-blank": "စာမျက်နှာကို ဗလာလုပ်လိုက်သည်",
+       "autosumm-replace": "အကြောင်းအရာ \"$1\" ဖြင့် အစားထိုးခဲ့သည်",
        "autoredircomment": "စာမျက်နှာကို [[$1]] သို့ ပြန်ညွှန်းလိုက်သည်",
+       "autosumm-removed-redirect": "[[$1]] သို့ ပြန်ညွှန်းကို ဖယ်ရှားခဲ့သည်",
        "autosumm-changed-redirect-target": "ပြန်ညွှန်းကို [[$1]] မှ [[$2]] သို့ ပြောင်းလဲခဲ့သည်",
        "autosumm-new": "\"$1\" အစချီသော စာလုံးတို့နှင့် စာမျက်နှာကို ဖန်တီးလိုက်သည်",
+       "autosumm-newblank": "ဗလာစာမျက်နှာကို ဖန်တီးခဲ့သည်",
        "size-bytes": "$1 {{PLURAL:$1|ဘိုက်|ဘိုက်}}",
        "watchlistedit-normal-title": "စောင့်ကြည့်စာရင်းကို တည်းဖြတ်ရန်",
        "watchlistedit-normal-legend": "စောင့်ကြည့်စာရင်းမှ ခေါင်းစဉ်များကို ဖျက်ရန်",
        "watchlistedit-normal-submit": "ခေါင်းစဉ်များကို ဖယ်ရှားရန်",
        "watchlistedit-normal-done": "{{PLURAL:$1|ခေါင်းစဉ်တစ်ခု|ခေါင်းစဉ် $1 ခုတို့}}ကို သင်၏ စောင့်ကြည့်စာရင်းမှ ဖယ်ရှားပြီးပြီ:",
        "watchlistedit-raw-titles": "ခေါင်းစဉ်များ -",
+       "watchlistedit-raw-submit": "စောင့်ကြည့်စာရင်းကို မွမ်းမံရန်",
+       "watchlistedit-raw-done": "သင်၏ စောင့်ကြည့်စာရင်းကို မွမ်းမံပြီးဖြစ်သည်။",
+       "watchlistedit-raw-added": "ခေါင်းစဉ် {{PLURAL:$1|၁ ခု|$1 ခု}} ပေါင်းထည့်ခဲ့သည်:",
+       "watchlistedit-raw-removed": "ခေါင်းစဉ် {{PLURAL:$1|၁ ခု|$1 ခု}} ဖယ်ရှားခဲ့သည်:",
+       "watchlistedit-clear-title": "စောင့်ကြည့်စာရင်းကို ရှင်းလင်းရန်",
+       "watchlistedit-clear-legend": "စောင့်ကြည့်စာရင်းကို ရှင်းလင်းရန်",
+       "watchlistedit-clear-explain": "သင်၏ စောင့်ကြည့်စာရင်းမှ ဆောင်းပါးများအားလုံး ဖယ်ရှားသွားပါလိမ့်မည်",
+       "watchlistedit-clear-titles": "ခေါင်းစဉ်များ -",
+       "watchlistedit-clear-submit": "စောင့်ကြည့်စာရင်းအား ရှင်းလင်းရန် (ဤသည် အမြဲတမ်း)",
+       "watchlistedit-clear-done": "သင်၏ စောင့်ကြည့်စာရင်းကို ရှင်းလင်းပြီးဖြစ်သည်။",
+       "watchlistedit-clear-jobqueue": "သင်၏ စောင့်ကြည့်စာရင်းကို ရှင်းလင်းနေသည်။ အချိန်အချို့ ကြာနိုင်ပါသည်။",
+       "watchlistedit-clear-removed": "ခေါင်းစဉ် {{PLURAL:$1|၁ ခု|$1 ခု}} ဖယ်ရှားခဲ့သည်:",
+       "watchlistedit-too-many": "ဤနေရာတွင် ပြသရန် စာမျက်နှာများ အများအပြားရှိသည်။",
        "watchlisttools-clear": "စောင့်ကြည့်စာရင်းကို ရှင်းလင်းရန်",
        "watchlisttools-view": "ကိုက်ညီသော အပြောင်းအလဲများကို ကြည့်ရန်",
        "watchlisttools-edit": "စောင့်ကြည့်စာရင်းများကို ကြည့်ပြီး တည်းဖြတ်ပါ။",
        "watchlisttools-raw": "စောင့်ကြည့်စာရင်း အကြမ်းကို တည်းဖြတ်ရန်",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ဆွေးနွေး]])",
+       "timezone-local": "ဒေသတွင်း",
        "duplicate-defaultsort": "'''သတိပေးချက် -''' ပုံမှန် sort key \"$2\" oသည် ယခင်ပုံမှန်ဖြစ်သော sort key \"$1\" ကို override ထပ်ရေးမည်ဖြစ်သည်.",
        "version": "ဗားရှင်း",
        "version-specialpages": "အထူး စာမျက်နှာများ",
+       "version-editors": "တည်းဖြတ်သူများ",
        "version-other": "အခြား",
+       "version-no-ext-name": "[အမည်မရှိ]",
        "version-license": "မီဒီယာဝီကီ လိုင်စင်",
+       "version-ext-license": "လိုင်စင်",
+       "version-skin-colheader-name": "အသွင်အပြင်",
+       "version-ext-colheader-version": "ဗားရှင်း",
+       "version-ext-colheader-license": "လိုင်စင်",
+       "version-ext-colheader-description": "ဖော်ပြချက်",
+       "version-ext-colheader-credits": "စာရေးသူများ",
+       "version-license-title": "$1 အတွက် လိုင်စင်",
+       "version-poweredby-others": "အခြားသော",
+       "version-poweredby-translators": "translatewiki.net ဘာသာပြန်သူများ",
        "version-software": "သွင်းထားသော ဆော့ဝဲ",
        "version-software-product": "ထုတ်ကုန်",
        "version-software-version": "ဗားရှင်း",
+       "version-libraries-version": "ဗားရှင်း",
+       "version-libraries-license": "လိုင်စင်",
+       "version-libraries-description": "ဖော်ပြချက်",
        "redirect": "ဖိုင်၊ အသုံးပြုသူ၊ စာမျက်နှာ၊ တည်းဖြတ်မူ၊ သို့မဟုတ် မှတ်တမ်းအိုင်ဒီ မှ ပြန်ညွှန်းသည်",
        "redirect-summary": "ဤအထူးစာမျက်နှာသည် ဖိုင်တစ်ခု (ပေးထားသော ဖိုင်အမည်)၊ စာမျက်နှာတစ်ခု (ပေးထားသော တည်းဖြတ်မူအိုင်ဒီ သို့ စာမျက်နှာအိုင်ဒီ)၊ အသုံးပြုသူစာမျက်နှာတစ်ခု (ပေးထားသော အသုံးပြုသူဂဏန်းအိုင်ဒီ)၊ သို့မဟုတ် မှတ်တမ်းတစ်ခု (ပေးထားသော မှတ်တမ်းအိုင်ဒီ) ဆီသို့ ပြန်ညွှန်းသည်။ အသုံးပြုပုံ - [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], သို့မဟုတ် [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "သွားပါ",
-       "redirect-lookup": "ရှာဖွေ",
-       "redirect-value": "တန်ဖိုး",
+       "redirect-lookup": "ရှာဖွေ:",
+       "redirect-value": "တန်ဖိုး:",
        "redirect-user": "အသုံးပြုသူ အိုင်ဒီ",
        "redirect-page": "စာမျက်နှာ အိုင်ဒီ",
        "redirect-revision": "စာမျက်နှာ တည်းဖြတ်မူ",
        "redirect-file": "ဖိုင်အမည်",
        "fileduplicatesearch": "နှစ်ခုထပ်နေသောဖိုင်များကို ရှာရန်",
-       "fileduplicatesearch-filename": "ဖိုင်အမည် -",
+       "fileduplicatesearch-filename": "ဖိုင်အမည်:",
        "fileduplicatesearch-submit": "ရှာဖွေရန်",
        "specialpages": "အထူး စာမျက်နှာများ",
        "specialpages-note-restricted": "* ပုံမှန် အထူးစာမျက်နှာများ။\n* <span class=\"mw-specialpagerestricted\">ကန့်သတ်ထားသော အထူးစာမျက်နှာများ။</span>",
        "specialpages-group-maintenance": "ထိန်းသိမ်းမှု အစီရင်ခံချက်များ",
        "specialpages-group-other": "အခြားအထူးစာမျက်နှာများ",
-       "specialpages-group-login": "Log in ဝင်ရန်/ အကောင့် ဖန်တီးရန်",
+       "specialpages-group-login": "အကောင့်ဝင်ရန် / ဖန်တီးရန်",
        "specialpages-group-changes": "လတ်တလော အပြောင်းအလဲနှင့် မှတ်တမ်းများ",
        "specialpages-group-media": "မီဒီယာ အစီရင်ခံချက်များနှင့် Upload တင်ထားသည်များ",
        "specialpages-group-users": "အသုံးပြုသူများနှင့် အခွင့်အရေးများ",
        "specialpages-group-wiki": "ဒေတာနှင့် ကိရိယာများ",
        "specialpages-group-redirects": "အထူးစာမျက်နှာများကို ပြန်ညွှန်းနေသည်",
        "specialpages-group-spam": "စပမ်းကိရိယာများ",
+       "specialpages-group-developer": "ဆော့ဝဲလ်တီထွင်သူ ကိရိယာများ",
        "blankpage": "ဗလာစာမျက်နှာ",
        "intentionallyblankpage": "ဤစာမျက်နှာသည် တမင်ရည်ရွယ်ချက်ရှိရှိ ဗလာထားခဲ့ခြင်း ဖြစ်သည်။",
        "external_image_whitelist": " #ဤစာကြောင်းကို ဤအတိုင်းထားပါ<pre>\n#regular expression fragments ကို(// နှစ်ခုကြားရှိ အစိတ်အပိုင်းသာ) အောက်တွင်ထားပါ\n#ယင်းတို့ကို external (hotlinked) ပုံတို့၏URL များနှင့် တွဲညှိပေးမည်ဖြစ်သည်\n#ကိုက်ညီသည်များကို ပုံအဖြစ်ပြမည်ဖြစ်ပြီး မကိုက်ညီပါက ပုံထံပြန်ညွှန်းသည့် လင့်အဖြစ်သာပြမည်ဖြစ်သည်\n## နှင့်စသော စာကြောင်းများကို ကွန်းမန့်အဖြစ် ယူဆမည်ဖြစ်သည်\n#ဤသည်တွင် အက္ခရာအကြီးအသေး မှန်ကန်ရမည်ဖြစ်သည်\n\n#regex fragments အားလုံးကို စာကြောင်း၏အပေါ်တွင်ထားပါ။ ဤစာကြောင်းကို ဤအတိုင်းထားပါ</pre>",
        "tag-filter": "[[Special:Tags|Tag]] သီးသန့်စစ်ထုတ်ရန် -",
        "tag-filter-submit": "စိစစ်မှု",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|စာတွဲ|စာတွဲများ}}]]: $2)",
+       "tag-mw-contentmodelchange": "မာတိကာမော်ဒယ် ပြောင်းလဲမှု",
        "tag-mw-new-redirect": "ပြန်ညွှန်းအသစ်",
        "tag-mw-removed-redirect": "ပြန်ညွှန်းကို ဖယ်ရှားခဲ့သည်",
        "tag-mw-changed-redirect-target": "ပြန်ညွှန်းကို ပြောင်းလဲခဲ့သည်",
        "tag-mw-replace": "အစားထိုးခဲ့သည်",
        "tag-mw-rollback": "နောက်ပြန် ပြန်ပြင်ခြင်း",
        "tag-mw-undo": "နောက်ပြန် ပြန်ပြင်ခြင်း",
-       "tags-title": "အမည်တွဲ",
+       "tags-title": "အမည်တွဲများ",
        "tags-tag": "အမည်တွဲ အမည်",
        "tags-active-yes": "မှန်",
        "tags-active-no": "မလုပ်ပါ",
+       "tags-source-extension": "ဆော့ဝဲလ်မှ သတ်မှတ်ထားသော",
+       "tags-source-none": "အသုံးမပြုတော့ပါ",
        "tags-edit": "ပြင်ဆင်ရန်",
+       "tags-delete": "ဖျက်",
+       "tags-activate": "စတင်သက်ဝင်စေရန်",
+       "tags-deactivate": "သက်ဝင်ခြင်းမလုပ်တော့ရန်",
        "tags-hitcount": "ပြောင်းလဲချက် $1 {{PLURAL:$1|ခု|ခု}}",
+       "tags-manage-no-permission": "သင့်တွင် အမည်တွဲများ အပြောင်းအလဲကို စီမံရန် ခွင့်ပြုချက်မရှိပါ။",
+       "tags-manage-blocked": "{{GENDER:$1|သင်}}သည် ပိတ်ပင်ခံရစဉ် အမည်တွဲများ အပြောင်းအလဲကို စီမံခွင့်မရှိပါ။",
+       "tags-create-heading": "အမည်တွဲအသစ် ဖန်တီးရန်",
+       "tags-create-tag-name": "အမည်တွဲ အမည်:",
+       "tags-create-reason": "အ​ကြောင်း​ပြ​ချက်:",
+       "tags-create-submit": "ဖန်တီးရန်",
+       "tags-create-already-exists": "အမည်တွဲ \"$1\" ရှိနှင့်ပြီးဖြစ်သည်။",
+       "tags-create-warnings-below": "အမည်တွဲ ဆက်လက်ဖန်တီးရန် ဆန္ဒရှိပါသလား။",
+       "tags-delete-title": "အမည်တွဲကို ဖျက်ရန်",
+       "tags-delete-reason": "အ​ကြောင်း​ပြ​ချက်:",
+       "tags-delete-not-found": "အမည်တွဲ \"$1\" မတည်ရှိပါ။",
+       "tags-delete-no-permission": "သင့်တွင် အမည်တွဲများ အပြောင်းအလဲကို ဖျက်ပစ်ရန် ခွင့်ပြုချက်မရှိပါ။",
+       "tags-activate-title": "အမည်တွဲကို သက်ဝင်စေရန်",
+       "tags-activate-reason": "အ​ကြောင်း​ပြ​ချက်:",
+       "tags-activate-not-found": "အမည်တွဲ \"$1\" မတည်ရှိပါ။",
+       "tags-activate-submit": "စတင်သက်ဝင်စေရန်",
+       "tags-deactivate-title": "အမည်တွဲကို သက်ဝင်ခြင်းမလုပ်တော့ပါ",
+       "tags-deactivate-reason": "အ​ကြောင်း​ပြ​ချက်:",
+       "tags-deactivate-submit": "သက်ဝင်ခြင်းမလုပ်တော့ရန်",
+       "tags-edit-title": "အမည်တွဲများကို တည်းဖြတ်ရန်",
+       "tags-edit-manage-link": "အမည်တွဲများကို စီမံခန့်ခွဲရန်",
+       "tags-edit-existing-tags": "ရှိနှင့်ပြီးသော အမည်တွဲများ:",
+       "tags-edit-existing-tags-none": "<em>ဘာမှမရှိ</em>",
+       "tags-edit-new-tags": "အမည်တွဲ အသစ်များ:",
+       "tags-edit-add": "ဤအမည်တွဲများကို ပေါင်းထည့်ရန်:",
+       "tags-edit-remove": "ဤအမည်တွဲများကို ဖယ်ရှားရန်:",
+       "tags-edit-remove-all-tags": "(အမည်တွဲများအားလုံးကို ဖယ်ရှား)",
+       "tags-edit-chosen-placeholder": "အမည်တွဲများအချို့ကို ရွေးချယ်ရန်",
+       "tags-edit-chosen-no-results": "ကိုက်ညီသော အမည်တွဲများ မတွေ့ရှိပ",
+       "tags-edit-reason": "အ​ကြောင်း​ပြ​ချက်:",
        "comparepages": "စာမျက်နှာများကို နှိုင်းယှဉ်ရန်",
        "compare-page1": "စာမျက်နှာတစ်",
        "compare-page2": "စာမျက်နှာနှစ်",
        "compare-rev1": "မူ တစ်",
        "compare-rev2": "မူ နှစ်",
        "compare-submit": "နှိုင်းယှဉ်ရန်",
+       "diff-form": "ကွဲပြားချက်များ",
+       "diff-form-submit": "ကွဲပြားချက်များကို ပြသရန်",
+       "permanentlink": "ပုံ​သေ​လိပ်​စာ​",
        "dberr-problems": "ဝမ်းနည်းပါသည်။ ဤဆိုက်သည် နည်းပညာပိုင်းဆိုင်ရာ အခက်အခဲများ ကြုံတွေ့နေရပါသည်။",
        "htmlform-required": "ဤတန်ဖိုး လိုအပ်သည်",
        "htmlform-submit": "ထည့်သွင်းရန်",
        "htmlform-reset": "ပြောင်းလဲထားသည်များ မလုပ်တော့ရန်",
        "htmlform-selectorother-other": "အခြား",
+       "htmlform-chosen-placeholder": "လုပ်ဆောင်ချက်တစ်ခု ရွေးချယ်ရန်",
+       "htmlform-cloner-create": "ပို၍ ထပ်ပေါင်းရန်",
+       "htmlform-cloner-delete": "ဖယ်ရှားရန်",
+       "htmlform-cloner-required": "အနည်းဆုံး တန်ဖိုးတစ်ခု လိုအပ်သည်။",
+       "htmlform-title-not-creatable": "\"$1\" ဖန်တီးနိုင်စွမ်းရှိသော စာမျက်နှာခေါင်းစဉ် မဟုတ်ပါ",
+       "htmlform-title-not-exists": "$1 မတည်ရှိပါ။",
+       "htmlform-user-not-exists": "<strong>$1</strong> မတည်ရှိပါ။",
+       "htmlform-user-not-valid": "<strong>$1</strong> သည် ဆီလျော်သော အသုံးပြုသူအမည် မဟုတ်ပါ။",
        "logentry-delete-delete": "$3 စာမျက်နှာကို $1 က {{GENDER:$2|ဖျက်ပစ်ခဲ့သည်}}",
        "logentry-delete-delete_redir": "ပြန်ညွှန်း $3 ကို ထပ်ပိုးရေးသားခြင်းဖြင့် $1 က {{GENDER:$2|ဖျက်ပစ်ခဲ့သည်}}",
        "logentry-delete-restore": "စာမျက်နှာ $3 ($4) ကို $1 က {{GENDER:$2|ပြန်လည်ထိန်းသိမ်းခဲ့သည်}}",
+       "logentry-delete-restore-nocount": "$1 က စာမျက်နှာ $3 ကို {{GENDER:$2|ပြန်လည်ထိန်းသိမ်းခဲ့သည်}}",
+       "restore-count-files": "{{PLURAL: $1|၁ ဖိုင်|$1 ဖိုင်များ}}",
        "logentry-delete-revision": "$3 စာမျက်နှာပေါ်ရှိ {{PLURAL:$5|တည်းဖြတ်မူတစ်ခု|တည်းဖြတ်မူ $5 ခု}}၏ အမြင်ပုံစံကို $1 က {{GENDER:$2|ပြောင်းလဲခဲ့သည်}}: $4",
        "revdelete-content-hid": "အကြောင်းအရာ ဝှက်ခြင်း",
        "revdelete-restricted": "အက်ဒမင်များသို့ ကန့်သတ်ချက်များ သက်ရောက်ရန်",
        "revdelete-unrestricted": "အက်ဒမင်များအတွက် ကန့်သတ်ချက်များကို ဖယ်ရှားရန်",
+       "logentry-block-block": "$1 က {{GENDER:$4|$3}} ကို သက်တမ်းကုန်လွန်ချိန် $5 $6 ဖြင့် {{GENDER:$2|ပိတ်ပင်ခဲ့သည်}}",
+       "logentry-block-unblock": "$1 က {{GENDER:$4|$3}} ကို {{GENDER:$2|ပိတ်ပင်မှုမှ ပြန်ဖြေခဲ့သည်}}",
+       "logentry-block-reblock": "$1 က {{GENDER:$4|$3}} အတွက် ပိတ်ပင်မှုအပြင်အဆင်များကို သက်တမ်းကုန်လွန်ချိန် $5 $6 ဖြင့် {{GENDER:$2|ပြောင်းလဲခဲ့သည်}}",
        "logentry-suppress-block": "{{GENDER:$4|$3}} အား $5 ကြာအောင် $1 က {{GENDER:$2|ပိတ်ပင်ခဲ့သည်}} $6",
+       "logentry-suppress-reblock": "$1 က {{GENDER:$4|$3}} အတွက် ပိတ်ပင်မှုအပြင်အဆင်များကို သက်တမ်းကုန်လွန်ချိန် $5 $6 ဖြင့် {{GENDER:$2|ပြောင်းလဲခဲ့သည်}}",
        "logentry-move-move": "$3 စာမျက်နှာကို $4 သို့ $1က {{GENDER:$2|ရွှေ့ခဲ့သည်}}",
        "logentry-move-move-noredirect": "$3 မှ $4 သို့ စာမျက်နှာကို ပြန်ညွှန်းချန်မထားဘဲ $1 {{GENDER:$2|က ရွှေ့ခဲ့သည်}}",
        "logentry-move-move_redir": "$3 စာမျက်နှာကို $4 သို့ ပြန်ညွှန်းပေါ်ထပ်၍ $1 က {{GENDER:$2|ရွှေ့ခဲ့သည်}}",
        "logentry-move-move_redir-noredirect": "$3 မှ $4 သို့ ပြန်ညွှန်းပေါ်ထပ်အုပ်ကာ ပြန်ညွှန်းချန်မထားဘဲ $1 က {{GENDER:$2|ရွှေ့ခဲ့သည်}}",
        "logentry-patrol-patrol-auto": "စာမျက်နှာ $3 ၏ တည်းဖြတ်မူ $4 အား $1 က စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း အလိုအလျောက် {{GENDER:$2|မှတ်သားခဲ့သည်}}",
+       "logentry-newusers-newusers": "အသုံးပြုသူအကောင့် $1 ကို {{GENDER:$2|ဖန်တီးခဲ့သည်}}",
        "logentry-newusers-create": "အသုံးပြုသူအကောင့် $1 ကို {{GENDER:$2|ဖန်တီးခဲ့သည်}}",
        "logentry-newusers-create2": "အသုံးပြုသူအကောင့် $3 ကို $1 က{{GENDER:$2|ဖန်တီးခဲ့သည်}}",
+       "logentry-newusers-byemail": "အသုံးပြုသူအကောင့် $3 ကို $1 က {{GENDER:$2|ဖန်တီးခဲ့ပြီး}} စကားဝှက်ကို အီးမေးလ်မှ ပို့ခဲ့သည်",
        "logentry-newusers-autocreate": "အသုံးပြုသူအကောင့် $1 ကို အလိုအလျောက် {{GENDER:$2|ဖန်တီးခဲ့သည်}}",
+       "logentry-protect-move_prot": "$1 က ကာကွယ်မှုအပြင်အဆင်များကို $4 မှ $3 သို့ {{GENDER:$2|ရွေ့ပြောင်းခဲ့သည်}}",
+       "logentry-protect-unprotect": "$1 က ကာကွယ်မှုကို $3 မှ {{GENDER:$2|ဖယ်ရှားခဲ့သည်}}",
        "logentry-protect-protect": "$1 က  $3 ကို {{GENDER:$2|ကာကွယ်ခဲ့သည်}} $4",
        "logentry-protect-modify": "$3 အတွက် ကာကွယ်မှုအဆင့်ကို $1 {{GENDER:$2|က ပြောင်းလဲခဲ့သည်}} $4",
        "logentry-rights-rights": "{{GENDER:$6|$3}} အတွက် အုပ်စုအဖွဲ့ဝင် $4 မှ $5 သို့ $1 က {{GENDER:$2|ပြောင်းလဲခဲ့သည်}}",
+       "logentry-rights-rights-legacy": "$1 က $3 အတွက် အုပ်စုအဖွဲ့ဝင်ဖြစ်မှုကို {{GENDER:$2|ပြောင်းလဲခဲ့သည်}}",
+       "logentry-rights-autopromote": "$1 သည် $4 မှ $5 သို့ အလိုအလျောက် {{GENDER:$2|ရာထူးတိုးသွားသည်}}",
        "logentry-upload-upload": "$1 သည် $3 ကို {{GENDER:$2|upload တင်ခဲ့သည်}}",
        "logentry-upload-overwrite": "$3 ၏ ဗားရှင်းအသစ်ကို $1 {{GENDER:$2|upload တင်ခဲ့သည်}}",
+       "log-name-managetags": "အမည်တွဲ စီမံခန့်ခွဲမှု မှတ်တမ်း",
+       "log-name-tag": "စာတွဲ မှတ်တမ်း",
        "rightsnone": "(ဘာမှမရှိ)",
+       "feedback-back": "နောက်သို့",
+       "feedback-cancel": "မလုပ်တော့ပါ",
+       "feedback-close": "ပြီးပြီ",
+       "feedback-dialog-title": "အကြံပေး ပေါင်းထည့်ရန်",
+       "feedback-message": "မက်ဆေ့:",
+       "feedback-subject": "အကြောင်းအရာ:",
+       "feedback-submit": "ထည့်သွင်းရန်",
+       "feedback-thanks-title": "ကျေးဇူးတင်ပါသည်",
        "searchsuggest-search": "{{SITENAME}} တွင် ရှာဖွေရန်",
        "api-error-unknown-warning": "မသိသေးသော သတိပေးချက်: \"$1\"။",
+       "api-error-unknownerror": "အမည်မသိ အမှား - \"$1\"",
+       "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|ထောင်စုနှစ်|ထောင်စုနှစ်များ}}",
+       "limitreport-cputime": "စီပီယူ အချိန်အသုံးပြုမှု",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|စက္ကန့်|စက္ကန့်}}",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|စက္ကန့်|စက္ကန့်}}",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|ဘိုက်|ဘိုက်}}",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|ဘိုက်|ဘိုက်}}",
+       "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|ဘိုက်|ဘိုက်}}",
+       "expand_templates_output": "ရလဒ်",
+       "expand_templates_ok": "အိုကေ",
+       "expand_templates_remove_comments": "မှတ်ချက်များ ဖယ်ရှားရန်",
+       "expand_templates_preview": "ကြိုတင်အစမ်းကြည့်ရှုရန်",
        "pagelanguage": "စာမျက်နှာ ဘာသာစကား ပြောင်းလဲရန်",
        "pagelang-name": "စာမျက်နှာ",
        "pagelang-language": "ဘာသာစကား",
        "pagelang-use-default": "ပင်မ ဘာသာစကားကို အသုံးပြုရန်",
+       "pagelang-select-lang": "ဘာသာစကား ရွေးရန်",
+       "pagelang-reason": "အကြောင်းပြချက်",
+       "pagelang-submit": "ထည့်သွင်းရန်",
+       "pagelang-nonexistent-page": "စာမျက်နှာ $1 မတည်ရှိပါ။",
+       "pagelang-unchanged-language": "စာမျက်နှာ $1 သည် ဘာသာစကား $2 သို့ သတ်မှတ်ပြီးသားဖြစ်သည်။",
        "right-pagelang": "စာမျက်နှာ ဘာသာစကား ပြောင်းလဲရန်",
+       "action-pagelang": "စာမျက်နှာ ဘာသာစကား ပြောင်းလဲရန်",
        "log-name-pagelang": "ဘာသာစကား ပြောင်းလဲမှု မှတ်တမ်း",
        "log-description-pagelang": "ဤအရာသည် စာမျက်နှာ၏ဘာသာစကားများ ပြောင်းလဲမှုမှတ်တမ်း ဖြစ်သည်။",
+       "logentry-pagelang-pagelang": "$1 က $3 ၏ ဘာသာစကားကို $4 မှ $5 သို့  {{GENDER:$2|ပြောင်းလဲခဲ့သည်}}",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (လုပ်ခွင့်ပြုပြီး)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>လုပ်ခွင့်မပြုထားပါ</strong>)",
        "mediastatistics": "မီဒီယာ စာရင်းအင်း",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 ဘိုက်|$1 ဘိုက်}} ($2; $3%)",
+       "mediastatistics-bytespertype": "ဤအပိုင်းအတွက် စုစုပေါင်းဖိုင်အရွယ်အစား: {{PLURAL:$1|$1 ဘိုက်|$1 ဘိုက်}} ($2; $3%)။",
+       "mediastatistics-allbytes": "ဖိုင်အားလုံးအတွက် စုစုပေါင်းဖိုင်အရွယ်အစား: {{PLURAL:$1|$1 ဘိုက်|$1 ဘိုက်}} ($2)။",
+       "mediastatistics-table-count": "ဖိုင်များ အရေအတွက်",
+       "mediastatistics-header-total": "ဖိုင်အားလုံး",
+       "special-characters-group-latin": "လက်တင်",
        "special-characters-group-symbols": "သင်္ကေတများ",
+       "special-characters-group-greek": "ဂရိ",
+       "special-characters-group-arabic": "အာရဗီ",
+       "special-characters-group-hebrew": "ဟီးဘရူး",
+       "special-characters-group-bangla": "ဘင်္ဂလား",
+       "special-characters-group-thai": "ထိုင်း",
+       "special-characters-group-lao": "လာအို",
+       "special-characters-group-khmer": "ခမာ",
+       "mw-widgets-dateinput-no-date": "ရက်စွဲ ရွေးမထားပါ",
+       "mw-widgets-mediasearch-input-placeholder": "မီဒီယာအတွက် ရှာဖွေရန်",
+       "mw-widgets-mediasearch-noresults": "မည်သည့်ရလဒ်မျှ မရပါ",
+       "mw-widgets-titleinput-description-new-page": "စာမျက်နှာ မရှိသေးပါ",
+       "mw-widgets-titleinput-description-redirect": "$1 သို့ ပြန်ညွှန်း",
+       "mw-widgets-categoryselector-add-category-placeholder": "ကဏ္ဍတစ်ခု ထည့်ပေါင်း...",
+       "mw-widgets-usersmultiselect-placeholder": "ပို၍ ထည့်ပေါင်း...",
+       "date-range-from": "နေ့စွဲမှ:",
+       "date-range-to": "နေ့စွဲသို့:",
        "randomrootpage": "ကျပန်း အခြေ စာမျက်နှာ",
+       "log-action-filter-block": "ပိတ်ပင်မှု အမျိုးအစား:",
+       "log-action-filter-contentmodel": "မာတိကာမော်ဒယ် အမျိုးအစား:",
+       "log-action-filter-delete": "ဖျက်ပစ်ခြင်း အမျိုးအစား:",
+       "log-action-filter-move": "ရွေ့ပြောင်းခြင်း အမျိုးအစား:",
        "log-action-filter-newusers": "အကောင့်ဖန်တီးမှု အမျိုးအစား:",
+       "log-action-filter-patrol": "စောင့်ကြပ်စစ်ဆေးခြင်း အမျိုးအစား:",
+       "log-action-filter-protect": "ကာကွယ်ခြင်း အမျိုးအစား:",
+       "log-action-filter-rights": "အခွင့်အရေးပြောင်းလဲမှု အမျိုးအစား:",
        "log-action-filter-all": "အားလုံး",
+       "log-action-filter-block-block": "ပိတ်ပင်",
+       "log-action-filter-contentmodel-change": "မာတိကာမော်ဒယ်၏ ပြောင်းလဲမှု",
+       "log-action-filter-delete-delete": "စာမျက်နှာ ဖျက်ပစ်ခြင်း",
+       "log-action-filter-delete-event": "မှတ်တမ်း ဖျက်ပစ်ခြင်း",
+       "log-action-filter-managetags-create": "အမည်တွဲ ဖန်တီးခြင်း",
+       "log-action-filter-managetags-delete": "အမည်တွဲ ဖျက်ပစ်ခြင်း",
+       "log-action-filter-managetags-activate": "အမည်တွဲ သက်ဝင်စေခြင်း",
+       "log-action-filter-managetags-deactivate": "အမည်တွဲ မသက်ဝင်စေတော့ခြင်း",
        "log-action-filter-newusers-create": "အမည်မသိ အသုံးပြုသူများမှ ဖန်တီးမှု",
        "log-action-filter-newusers-create2": "မှတ်ပုံတင်ထားသော အသုံးပြုသူမှ ဖန်တီးမှု",
        "log-action-filter-newusers-autocreate": "အလိုအလျောက် ဖန်တီးမှု",
        "log-action-filter-newusers-byemail": "အီးမေးလ်မှတဆင့် စကားဝှက်ပို့၍ ဖန်တီးမှု",
+       "log-action-filter-patrol-patrol": "လူဖြင့် စောင့်ကြပ်စစ်ဆေး",
+       "log-action-filter-patrol-autopatrol": "အလိုအလျောက် စောင့်ကြပ်စစ်ဆေး",
+       "log-action-filter-protect-protect": "ကာကွယ်မှု",
+       "log-action-filter-rights-rights": "လူဖြင့် ပြောင်းလဲမှု",
+       "log-action-filter-rights-autopromote": "အလိုအလျောက် ပြောင်းလဲမှု",
+       "authmanager-create-disabled": "အကောင့်ဖန်တီးခြင်းကို ပိတ်ထားသည်။",
+       "authmanager-authplugin-setpass-failed-title": "စကားဝှက်ပြောင်းလဲမှု မအောင်မြင်ပါ",
+       "authmanager-autocreate-noperm": "အလိုအလျာက် အကောင့်ဖန်တီးခြင်းကို ခွင့်မပြုပါ။",
+       "authmanager-autocreate-exception": "ရှေ့ကအမှားများကြောင့် အလိုအလျာက် အကောင့်ဖန်တီးခြင်းကို ယာယီပိတ်ထားသည်။",
+       "authmanager-userdoesnotexist": "အသုံးပြုသူအကောင့် \"$1\" သည် မှတ်ပုံမတင်ထားပါ။",
+       "authmanager-retype-help": "အတည်ပြုရန် စကားဝှက်ထပ်မံရိုက်ပါ။",
+       "authmanager-email-label": "အီးမေးလ်",
+       "authmanager-email-help": "အီးမေးလ် လိပ်စာ",
+       "authmanager-realname-label": "အမည်ရင်း",
+       "authmanager-realname-help": "အသုံးပြုသူ၏ အမည်ရင်း",
+       "authmanager-provider-temporarypassword": "ယာယီစကားဝှက်",
+       "cannotauth-not-allowed-title": "ခွင့်ပြုချက် ငြင်းပယ်လိုက်သည်",
+       "cannotauth-not-allowed": "သင်သည် ဤစာမျက်နှာကို အသုံးပြုခွင့်မရှိပါ",
        "gotointerwiki": "{{SITENAME}} မှ ထွက်ခွာနေသည်",
+       "pagedata-title": "စာမျက်နှာ ဒေတာ",
+       "pagedata-bad-title": "မဆီလျော်သော ခေါင်းစဉ်: $1",
        "passwordpolicies": "စကားဝှက် မူဝါဒများ",
-       "passwordpolicies-summary": "ဤသည်မှာ ဤဝီကီရှိ အသုံးပြုသူအုပ်စုများအတွက် အကျုံးဝင်သော စကားဝှက် မူဝါဒများ ဖြစ်သည်။"
+       "passwordpolicies-summary": "ဤသည်မှာ ဤဝီကီရှိ အသုံးပြုသူအုပ်စုများအတွက် အကျုံးဝင်သော စကားဝှက် မူဝါဒများ ဖြစ်သည်။",
+       "passwordpolicies-group": "အုပ်စု",
+       "passwordpolicies-policies": "မူဝါဒများ",
+       "passwordpolicies-policy-passwordcannotmatchusername": "စကားဝှက်သည် အသုံးပြုသူအမည်နှင့် မတူညီရပါ"
 }
index bc7c9dd..459a65e 100644 (file)
        "ns-specialprotected": "Spesialsider kan ikke redigeres.",
        "titleprotected": "Denne tittelen har blitt låst for oppretting av [[User:$1|$1]].\nDen angitte grunnen er <em>$2</em>.",
        "filereadonlyerror": "Kan ikke endre filen «$1» fordi filsamlingen «$2» er skrivebeskyttet.\n\nSystemadministrator ga følgende begrunnelse: «$3».",
+       "invalidtitle": "Ugyldig tittel",
        "invalidtitle-knownnamespace": "Ugyldig tittel med navnerommet «$2» og teksten «$3»",
        "invalidtitle-unknownnamespace": "Ugyldig tittel med ukjent navneromsnummer $1 og teksten «$2»",
        "exception-nologin": "Ikke innlogget",
        "cachedspecial-refresh-now": "Vis siste.",
        "categories": "Kategorier",
        "categories-submit": "Vis",
-       "categoriespagetext": "Følgende {{PLURAL:$1|kategori|kategorier}} inneholder sider eller media.\n[[Special:UnusedCategories|Ubrukte kategorier]] vises ikke her.\nSe også [[Special:WantedCategories|ønskede kategorier]].",
+       "categoriespagetext": "Følgende {{PLURAL:$1|kategori|kategorier}} eksisterer på wikien, og er muligens {{PLURAL:$1|ubrukt|ubrukte}}.\nSe også [[Special:WantedCategories|ønskede kategorier]].",
        "categoriesfrom": "Vis kategorier fra og med:",
        "deletedcontributions": "Slettede brukerbidrag",
        "deletedcontributions-title": "Slettede brukerbidrag",
        "edit-error-long": "Feil:\n\n$1",
        "revid": "revisjon $1",
        "pageid": "side-ID $1",
+       "interfaceadmin-info": "$1\n\nTillatelse til å redigere CSS, JavaScript og JSON som gjelder hele nettstedet ble nylig utskilt til rettigheten <code>editinterface</code>. Om du ikke forstår hvorfor du får denne feilmeldingen, se [[mw:MediaWiki_1.32/interface-admin]].",
        "rawhtml-notallowed": "&lt;html&gt;-tagger kan ikke brukes utenfor normale sider.",
        "gotointerwiki": "Forlater {{SITENAME}}",
        "gotointerwiki-invalid": "Den gitte tittelen er ugyldig.",
        "passwordpolicies-policy-minimumpasswordlengthtologin": "Passordet må være på minst $1 {{PLURAL:$1|tegn}} for å kunne logge inn",
        "passwordpolicies-policy-passwordcannotmatchusername": "Passordet kan ikke være det samme som brukernavnet",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Passordet kan ikke matche spesifikt svartelistede passord",
-       "passwordpolicies-policy-maximalpasswordlength": "Passordet må være på minst $1 {{PLURAL:$1|tegn}}",
+       "passwordpolicies-policy-maximalpasswordlength": "Passordet kan maksimalt være på $1 {{PLURAL:$1|tegn}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Passordet kan ikke være {{PLURAL:$1|det populære passordet|i lista over $1 populære passord}}",
        "easydeflate-invaliddeflate": "Det gitte innholdet er ikke riktig komprimert"
 }
index 630dc0a..5b810ea 100644 (file)
        "disclaimerpage": "Project:सामान्य अस्वीकारोक्ति",
        "edithelp": "सम्पादन सहायता",
        "helppage-top-gethelp": "सहायता",
-       "mainpage": "à¤\97à¥\83ह पृष्ठ",
-       "mainpage-description": "à¤\97à¥\83ह पृष्ठ",
+       "mainpage": "मà¥\81à¤\96à¥\8dय पृष्ठ",
+       "mainpage-description": "मà¥\81à¤\96à¥\8dय पृष्ठ",
        "policy-url": "Project:निति",
        "portal": "सामाजिक पोर्टल",
        "portal-url": "Project:सामाजिक पोर्टल",
index fff1097..1e731ee 100644 (file)
        "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]].\nDe gegeven reden is <em>$2</em>.",
        "filereadonlyerror": "Het was niet mogelijk het bestand \"$1\" aan te passen omdat de bestandsrepository \"$2\" op dit moment alleen-lezen is.\n\nDe opgegeven reden is \"''$3''\".",
+       "invalidtitle": "Ongeldige titel",
        "invalidtitle-knownnamespace": "Ongeldige titel met naamruimte \"$2\" en tekst \"$3\"",
        "invalidtitle-unknownnamespace": "Ongeldige titel met onbekend naamruimtenummer $1 en tekst \"$2\"",
        "exception-nologin": "Niet aangemeld",
        "diff-paragraph-moved-toold": "Deze paragraaf is verplaatst. Klik om naar de oude locatie te springen.",
        "difference-missing-revision": "{{PLURAL:$2|Eén versie|$2 versies}} van deze verschillen ($1) {{PLURAL:$2|is|zijn}} niet aangetroffen.\n\nDit wordt meestal veroorzaakt door het volgen van een verouderde koppeling verschillen voor een pagina die is verwijderd.\nMeer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
        "searchresults": "Zoekresultaten",
-       "search-filter-title-prefix": "Alleen zoeken naar pagina's waarvan de titel begint met \"$1\"",
-       "search-filter-title-prefix-reset": "Alle zoeken naar alle pagina's",
+       "search-filter-title-prefix": "Alleen pagina's doorzoeken waarvan de titel begint met \"$1\"",
+       "search-filter-title-prefix-reset": "Alle pagina's doorzoeken",
        "searchresults-title": "Zoekresultaten voor \"$1\"",
        "titlematches": "Overeenkomst met onderwerp",
        "textmatches": "Overeenkomst met inhoud",
        "group-autoconfirmed": "autobevestigde gebruikers",
        "group-bot": "bots",
        "group-sysop": "beheerders",
-       "group-interface-admin": "Interfacemoderator",
+       "group-interface-admin": "interfacemoderatoren",
        "group-bureaucrat": "bureaucraten",
        "group-suppress": "toezichthouders",
        "group-all": "(iedereen)",
        "right-editcontentmodel": "Het paginainhoudmodel bewerken",
        "right-editinterface": "De gebruikersinterface bewerken",
        "right-editusercss": "De CSS-bestanden van andere gebruikers bewerken",
-       "right-edituserjson": "De JSONbestanden van andere gebruikers bewerken",
+       "right-edituserjson": "De JSON-bestanden van andere gebruikers bewerken",
        "right-edituserjs": "De JavaScriptbestanden van andere gebruikers bewerken",
        "right-editsitecss": "Wikibrede CSS bewerken",
        "right-editsitejson": "Wikibrede JSON bewerken",
        "filehist-comment": "Opmerking",
        "imagelinks": "Bestandsgebruik",
        "linkstoimage": "Dit bestand wordt op de volgende {{PLURAL:$1|pagina|$1 pagina's}} gebruikt:",
-       "linkstoimage-more": "Er {{PLURAL:$2|is|zijn}} meer dan $1 {{PLURAL:$1|koppeling|koppelingen}} naar dit bestand.\nDe volgende lijst geeft alleen de eerste {{PLURAL:$1|koppeling|$1 koppelingen}} naar dit bestand weer.\nEr is ook een [[Special:WhatLinksHere/$2|volledige lijst]].",
+       "linkstoimage-more": "Meer dan $1 {{PLURAL:$1|pagina gebruikt|pagina's gebruiken}} dit bestand.\nDe volgende lijst geeft alleen de eerste {{PLURAL:$1|pagina|$1 pagina's}} die dit bestand gebruiken weer.\nEr is ook een [[Special:WhatLinksHere/$2|volledige lijst]] beschikbaar.",
        "nolinkstoimage": "Geen enkele pagina gebruikt dit bestand.",
        "morelinkstoimage": "[[Special:WhatLinksHere/$1|Meer koppelingen]] naar dit bestand bekijken.",
        "linkstoimage-redirect": "$1 (bestandsdoorverwijzing) $2",
index 3dd1344..bda58f9 100644 (file)
        "userrights-unchangeable-col": "Grupper du ikkje kan endre",
        "userrights-expiry-current": "Endar $1",
        "userrights-expiry-none": "Aldri",
+       "userrights-expiry": "Endar:",
        "userrights-expiry-othertime": "Anna tid:",
        "userrights-expiry-options": "1 dag:1 day,1 veke:1 week,1 månad:1 month,3 månader:3 months,6 månader:6 months,1 år:1 year",
        "group": "Gruppe:",
        "recentchanges-legend": "Alternativ for siste endringar",
        "recentchanges-summary": "På denne sida ser du dei sist endra sidene i {{SITENAME}}.",
        "recentchanges-noresult": "Ingen endringar i den gjevne perioden passar med kriteria.",
+       "recentchanges-network": "På grunn av ein teknisk feil kunne ikkje resultata lastast inn. Freist å oppdatera sida.",
        "recentchanges-feed-description": "Fylg med på dei siste endringane på denne wikien med dette abonnementet.",
        "recentchanges-label-newpage": "Endringa oppretta ei ny side",
        "recentchanges-label-minor": "Endringa er småplukk",
        "uctop": "(gjeldande)",
        "month": "Månad:",
        "year": "År:",
+       "date": "Frå dato (og tidlegare):",
        "sp-contributions-newbies": "Vis berre bidrag frå nye brukarar",
        "sp-contributions-newbies-sub": "Frå nye brukarkontoar",
        "sp-contributions-newbies-title": "Brukarbidrag av nye brukarar",
        "svg-long-error": "Ugild SVG-fil: $1",
        "show-big-image": "Opphavleg fil",
        "show-big-image-preview": "Storleik på førehandsvising: $1.",
+       "show-big-image-preview-differ": "Storleik på denne $3-førehandsvisinga av denne $2-fila: $1.",
        "show-big-image-other": "{{PLURAL:$2|Anna oppløysing|Andre oppløysingar}}: $1.",
        "show-big-image-size": "$1 × $2 pikslar",
        "file-info-gif-looped": "gjentatt",
        "revdelete-restricted": "la til avgrensingar for administratorar",
        "revdelete-unrestricted": "fjerna avgrensingar for administratorar",
        "logentry-block-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} for $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|oppheva}} blokkeringa av {{GENDER:$4|$3}}",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|endra}} blokkeringsinnstillingar for {{GENDER:$4|$3}} med opphøyrstid $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|fletta}} $3 inn i $4 (versjonar til og med $5)",
        "logentry-move-move": "$1 {{GENDER:$2|flytte}} sida $3 til $4",
        "limitreport-templateargumentsize-value": "$1/$2 byte",
        "limitreport-expansiondepth": "Største utvidingsdjupna",
        "limitreport-expensivefunctioncount": "Tal på dyre analysefunksjonar",
+       "limitreport-unstrip-depth": "Rekursjonsdjupn for «unstrip»",
+       "limitreport-unstrip-size": "Storleik for «unstrip» etter utviding",
        "expandtemplates": "Utvid malar",
        "expand_templates_intro": "Denne sida tek ein tekst og utvider alle malar som er bruka i teksten.\nHo utvider òg alle funksjonar som\n<nowiki>{{</nowiki>#language:…}}, og variablar som\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash; bortimot alt som står i dobbelte klammeparentesar.\nDette gjer ho ved å kalla dei relevante parsersetega frå MediaWiki sjølv.",
        "expand_templates_title": "Konteksttittel, for {{FULLPAGENAME}} etc.:",
index 76c083e..20164c0 100644 (file)
@@ -17,7 +17,7 @@
        "tog-extendwatchlist": "Zaisch alle Ännarunge unn nedd nua die ledschde",
        "tog-showtoolbar": "Weagzaisch fas Schaffe zaische",
        "tog-previewontop": "VoAbligg owwahalwb vum Beawaidungsfenschda zaische",
-       "tog-previewonfirst": "Zaischn VoAbligg baim erschdemol Schaffe",
+       "tog-previewonfirst": "Zaischn Voabligg baim erschdemol Schaffe",
        "tog-oldsig": "Voahonneni Unnaschrifd",
        "tog-uselivepreview": "Uuvazeschada Vorbligg (vasugswais)",
        "tog-showhiddencats": "Zaisch vaschdeglde Grubbe",
        "updated": "(Gännad)",
        "note": "'''Hiwes:'''",
        "previewnote": "'''Deng'g drõõ, dasses nua e Vorschau isch.'''\nDoi Ännarunge sinn noch nedd gschbaischadd worre!",
-       "editing": "Oam $1 schaffe",
+       "editing": "An de Said $1 schaffe",
        "creating": "Magschd $1",
        "editingsection": "$1 schaffe (Deel)",
        "editingcomment": "$1 schaffe (Deel)",
        "filedelete-success": "'''$1''' isch gleschd worre.",
        "filedelete-maintenance-title": "Dadai konnned gleschd werre",
        "download": "Runalaade",
-       "randompage": "Iaschnd n'Adiggl",
+       "randompage": "Iaschnden Adiggl",
        "randomincategory-category": "Sachgrubb:",
        "statistics": "Schdadischdigge",
        "statistics-pages": "Saide",
index c5a4235..d91e6d6 100644 (file)
        "ns-specialprotected": "Stron specjalnych nie można edytować.",
        "titleprotected": "Utworzenie strony o tej nazwie zostało zablokowane przez [[User:$1|$1]].\nUzasadnienie blokady: <em>$2</em>.",
        "filereadonlyerror": "Nie można zmodyfikować pliku „$1”, ponieważ repozytorium plików „$2” jest w trybie tylko do odczytu.\n\nBlokujący go administrator systemu podał następujący powód: „$3”.",
+       "invalidtitle": "Nieprawidłowy tytuł",
        "invalidtitle-knownnamespace": "Nieprawidłowa nazwa \"$3\" w przestrzeni nazw \"$2\"",
        "invalidtitle-unknownnamespace": "Nieprawidłowy tytuł \"$2\" z nieznanym numerem przestrzeni nazw $1",
        "exception-nologin": "Nie jesteś zalogowany/a",
        "right-edit": "Edycja stron",
        "right-createpage": "Tworzenie stron (niebędących stronami dyskusji)",
        "right-createtalk": "Tworzenie stron dyskusji",
-       "right-createaccount": "Tworzenie kont użytkowników",
+       "right-createaccount": "Tworzenie nowych kont użytkowników",
        "right-autocreateaccount": "Automatyczne logowanie za pomocą zewnętrznego konta użytkownika",
        "right-minoredit": "Oznaczanie edycji jako drobnych",
        "right-move": "Przenoszenie stron",
        "right-reupload-shared": "Lokalne nadpisywanie pliku istniejącego w repozytorium mediów",
        "right-upload_by_url": "Przesyłanie plików z adresu URL",
        "right-purge": "Czyszczenie pamięci podręcznej stron bez pytania o potwierdzenie",
-       "right-autoconfirmed": "Wyłączenie z ograniczeń dla użytkowników niezarejestrowanych",
+       "right-autoconfirmed": "Wyłączenie z ograniczeń prędkości zakładanych na IP",
        "right-bot": "Oznaczanie edycji jako wykonanych automatycznie",
        "right-nominornewtalk": "Drobne zmiany na stronach dyskusji użytkowników nie włączają powiadomienia o nowej wiadomości",
        "right-apihighlimits": "Zwiększony limit w zapytaniach wykonywanych poprzez interfejs API",
        "filehist-filesize": "Rozmiar pliku",
        "filehist-comment": "Opis",
        "imagelinks": "Wykorzystanie pliku",
-       "linkstoimage": "{{PLURAL:$1|Poniższa strona odwołuje|Następujące strony odwołują}} się do tego pliku:",
-       "linkstoimage-more": "Więcej niż $1 {{PLURAL:$1|strona linkuje|strony linkują|stron linkuje}} do tego pliku.\nPoniższa lista pokazuje jedynie {{PLURAL:$1|pierwszy link|pierwsze $1 linki|pierwszych $1 linków}} do tego pliku.\nDostępna jest też [[Special:WhatLinksHere/$2|pełna lista]].",
-       "nolinkstoimage": "Żadna strona nie odwołuje się do tego pliku.",
+       "linkstoimage": "{{PLURAL:$1|Poniższa strona korzysta|Następujące strony korzystają}} z tego pliku:",
+       "linkstoimage-more": "Z tego pliku {{PLURAL:$1|korzysta więcej niż jedna strona| korzystają więcej niż $1 strony| korzysta więcej niż $1 stron}}.\nPoniższa lista pokazuje jedynie {{PLURAL:$1|pierwszą z ich|$1 pierwsze z nich|$1 pierwszych z nich}}.\nDostępna jest również [[Special:WhatLinksHere/$2|pełna lista]].",
+       "nolinkstoimage": "Żadna strona nie korzysta z tego pliku.",
        "morelinkstoimage": "Pokaż [[Special:WhatLinksHere/$1|więcej odnośników]] do tego pliku.",
        "linkstoimage-redirect": "$1 (przekierowanie do pliku) $2",
        "duplicatesoffile": "{{PLURAL:$1|Następujący plik jest kopią|Następujące pliki są kopiami}} pliku ([[Special:FileDuplicateSearch/$2|więcej informacji]]):",
        "cachedspecial-refresh-now": "Najpóźniejszy widok.",
        "categories": "Kategorie",
        "categories-submit": "Pokaż",
-       "categoriespagetext": "Strona przedstawia {{PLURAL:$1|kategorię zawierającą|listę kategorii zawierających}} strony lub pliki.\n[[Special:UnusedCategories|Nieużywane kategorie]] zostały ukryte.\nZobacz również [[Special:WantedCategories|brakujące kategorie]].",
+       "categoriespagetext": "Strona przedstawia {{PLURAL:$1|istniejącą kategorię zawierającą|istniejące kategorie}} na wiki. Wymienione są także puste kategorie.\nZobacz również [[Special:WantedCategories|brakujące kategorie]].",
        "categoriesfrom": "Wyświetl kategorie, zaczynając od:",
        "deletedcontributions": "Usunięty wkład użytkownika",
        "deletedcontributions-title": "Usunięty wkład użytkownika",
        "listgrouprights-rights": "Uprawnienia",
        "listgrouprights-helppage": "Help:Uprawnienia grup użytkowników",
        "listgrouprights-members": "(lista członków grupy)",
-       "listgrouprights-addgroup": "Możliwość dodawania do {{PLURAL:$2|grupy|grup:}} $1",
-       "listgrouprights-removegroup": "Możliwość usuwania z {{PLURAL:$2|grupy|grup:}} $1",
+       "listgrouprights-addgroup": "Możliwość dodawania do {{PLURAL:$2|grupy|grup}}: $1",
+       "listgrouprights-removegroup": "Możliwość usuwania z {{PLURAL:$2|grupy|grup}}: $1",
        "listgrouprights-addgroup-all": "Możliwość dodania użytkownika do każdej grupy",
        "listgrouprights-removegroup-all": "Możliwość usunięcia użytkownika z każdej grupy",
        "listgrouprights-addgroup-self": "Możliwość dodania własnego konta do {{PLURAL:$2|grupy|grup:}} $1",
        "group-bureaucrat.css": "/* Umieszczony tutaj kod CSS dotyczyć będzie tylko biurokratów */",
        "common.json": "/* Umieszczony tutaj JSON zostanie załadowany przez każdego użytkownika, podczas każdego ładowania strony. */",
        "common.js": "/* Umieszczony tutaj kod JavaScript zostanie załadowany przez każdego użytkownika, podczas każdego ładowania strony. */",
+       "group-autoconfirmed.js": "/* JavaScript tutaj umieszczony będzie dotyczyć tylko automatycznie zatwierdzonych użytkowników */",
+       "group-bot.js": "/* JavaScript tutaj umieszczony będzie obowiązywał tylko dla botów */",
+       "group-sysop.js": "/* Umieszczony tutaj kod JavaScript dotyczyć będzie tylko administratorów */",
+       "group-bureaucrat.js": "/* Umieszczony tutaj kod JavaScript dotyczyć będzie tylko biurokratów */",
        "anonymous": "{{PLURAL:$1|Anonimowy użytkownik|Anonimowi użytkownicy}} {{GRAMMAR:D.lp|{{SITENAME}}}}",
        "siteuser": "{{GENDER:$2|użytkownik|użytkowniczka}} {{GRAMMAR:D.lp|{{SITENAME}}}} – $1",
        "anonuser": "niezalogowany użytkownik {{GRAMMAR:D.lp|{{SITENAME}}}} – $1",
        "edit-error-long": "Błędy:\n\n$1",
        "revid": "wersja $1",
        "pageid": "ID strony: $1",
+       "interfaceadmin-info": "$1\n\nUprawnienia do edycji CSS/JS/JSON całej witryny zostały wydzielone z dotychczasowego uprawnienia <code>editinterface</code>. Jeżeli nie rozumiesz, dlaczego otrzymujesz ten komunikat, przeczytaj [[mw:MediaWiki_1.32/interface-admin]].",
        "rawhtml-notallowed": "Znaczniki &lt;html&gt; nie mogą być stosowane poza zwykłymi stronami.",
        "gotointerwiki": "Opuszczasz {{SITENAME}}",
        "gotointerwiki-invalid": "Podany tytuł jest nieprawidłowy.",
index 2b5b10e..41b3916 100644 (file)
        "group-autoconfirmed": "تاييد شوي کارنان",
        "group-bot": "روباټونه",
        "group-sysop": "پازوالان",
+       "group-interface-admin": "سيمييز پازوالان",
        "group-bureaucrat": "بيوروکراټان",
        "group-suppress": "ځپوونکي",
        "group-all": "(ټول)",
        "group-autoconfirmed-member": "{{GENDER:$1|تاييد شوی کارن}}",
        "group-bot-member": "{{GENDER:$1|روباټ}}",
        "group-sysop-member": "{{GENDER:$1|پازوال}}",
+       "group-interface-admin-member": "{{GENDER:$1|سيمييز پازوالان}}",
        "group-bureaucrat-member": "{{GENDER:$1|بيوروکراټ}}",
        "group-suppress-member": "{{GENDER:$1|ځپوونکی}}",
        "grouppage-user": "{{ns:project}}:کارنان",
        "grouppage-autoconfirmed": "{{ns:project}}:تاييد شوي کارنان",
        "grouppage-bot": "{{ns:project}}:روباټان",
        "grouppage-sysop": "{{ns:project}}:پازوالان",
+       "grouppage-interface-admin": "{{ns:project}}:سيمييز پازوالان",
        "grouppage-bureaucrat": "{{ns:project}}:بيوروکراټان",
        "grouppage-suppress": "{{ns:project}}:ځپل",
        "right-read": "مخونه لوستل",
index 32896bb..476a8bc 100644 (file)
        "noindex-category": "Páginas não indexadas",
        "broken-file-category": "Páginas com links inválidos para arquivos",
        "categoryviewer-pagedlinks": "($1) ($2)",
+       "category-header-numerals": "$1–$2",
        "about": "Sobre",
        "article": "Página de conteúdo",
        "newwindow": "(abre numa nova janela)",
        "versionrequiredtext": "Esta página requer a versão $1 do MediaWiki para ser utilizada.\nVeja a [[Special:Version|página sobre a versão do sistema]].",
        "ok": "OK",
        "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
        "retrievedfrom": "Disponível em \"$1\"",
        "youhavenewmessages": "{{PLURAL:$3|Você tem}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Você tem}} $1 de {{PLURAL:$3|outro usuário|$3 usuários}} ($2).",
        "ns-specialprotected": "Não é possível editar páginas especiais",
        "titleprotected": "Este título foi protegido, para que não seja criado.\nQuem o protegeu foi [[User:$1|$1]], com a justificativa: <em>$2</em>.",
        "filereadonlyerror": "Não é possível modificar o arquivo \"$1\" porque o repositório do arquivo \"$2\" está em modo somente leitura.\n\nO administrador de sistema que bloqueou ofereceu a seguinte explicação: \"$3\".",
+       "invalidtitle": "Título inválido",
        "invalidtitle-knownnamespace": "Título inválido para o espaço nominal \"$2\" e texto \"$3\"",
        "invalidtitle-unknownnamespace": "Título inválido para o espaço nominal de número desconhecido ($1) e texto \"$2\"",
        "exception-nologin": "Não está autenticado",
        "nocookiesnew": "A conta do usuário foi criada, mas você não foi autenticado.\n{{SITENAME}} utiliza ''cookies'' para autenticar os usuários.\nVocê tem os ''cookies'' desativados no seu navegador.\nPor favor ative-os, depois autentique-se com o seu novo nome de usuário e a sua senha.",
        "nocookieslogin": "Você tem os <i>cookies</i> desativados no seu navegador, e a {{SITENAME}} utiliza <i>cookies</i> para ligar os usuários às suas contas. Por favor os ative e tente novamente.",
        "nocookiesfornew": "A conta de usuário não foi criada porque não foi possível confirmar a sua origem.\nCertifique-se de que tem os cookies ativados, recarregue esta página e tente novamente.",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
        "createacct-loginerror": "A conta foi criada com êxito, mas não pôde ser autenticado automaticamente. Por favor, faça o [[Special:UserLogin|início de sessão manualmente]].",
        "noname": "Você não colocou um nome de usuário válido.",
        "loginsuccesstitle": "Autenticado",
        "template-semiprotected": "(semiprotegida)",
        "hiddencategories": "Esta página pertence a {{PLURAL:$1|uma categoria oculta|$1 categorias ocultas}}:",
        "edittools": "<!-- O texto aqui disponibilizado será exibido abaixo dos formulários de edição e de envio de arquivos. -->",
+       "edittools-upload": "-",
        "nocreatetext": "{{SITENAME}} tem restringida a habilidade de criar novas páginas.\nVolte à tela anterior e edite uma página já existente, ou [[Special:UserLogin|autentique-se ou crie uma conta]].",
        "nocreate-loggedin": "Você não possui permissão para criar novas páginas.",
        "sectioneditnotsupported-title": "Edição por seções não suportada",
        "content-model-text": "texto simples",
        "content-model-javascript": "Javascript",
        "content-model-css": "CSS",
+       "content-model-json": "JSON",
        "content-json-empty-object": "Objeto vazio",
        "content-json-empty-array": "Array vazia",
        "deprecated-self-close-category": "Páginas com etiquetas HTML de autofechamento não válidas",
        "mergehistory-comment": "[[:$1]] fundido em [[:$2]]: $3",
        "mergehistory-same-destination": "As páginas de origem e de destino não podem ser as mesmas",
        "mergehistory-reason": "Motivo:",
+       "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Registro de fusão de históricos",
        "revertmerge": "Desfazer fusão",
        "mergelogpagetext": "Segue-se um registro das mais recentes fusões de históricos de páginas.",
        "youremail": "Seu e-mail:",
        "username": "Nome de {{GENDER:$1|usuário|usuária|usuário(a)}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membro}} {{PLURAL:$1|do grupo|dos grupos}}:",
+       "prefs-memberingroups-type": "$1",
        "group-membership-link-with-expiry": "$1 (até $2)",
        "prefs-registration": "Hora de registro:",
+       "prefs-registration-date-time": "$1",
        "yourrealname": "Nome verdadeiro:",
        "yourlanguage": "Idioma:",
        "yourvariant": "Variante da língua de conteúdo:",
        "saveusergroups": "Salvar grupos {{GENDER:$1|do usuário|da usuária|do(a) usuário(a)}}",
        "userrights-groupsmember": "Membro de:",
        "userrights-groupsmember-auto": "Membro implícito de:",
+       "userrights-groupsmember-type": "$1",
        "userrights-groups-help": "É possível alterar os grupos em que {{GENDER:$1|este usuário|esta usuária|este(a) usuário(a)}} se encontra:\n* Uma caixa de seleção selecionada significa que {{GENDER:$1|o usuário|a usuária|o(a) usuário(a)}} encontra-se no grupo.\n* Uma caixa de seleção não selecionada significa que {{GENDER:$1|o usuário|a usuária|o(a) usuário(a)}} não se encontra no grupo.\n* Um * indica que não pode remover o grupo depois de o adicionar, ou vice-versa.\n* Um # indica que você só pode atrasar o tempo de expiração dos membros deste grupo; você não pode aumentá-lo.",
        "userrights-reason": "Motivo:",
        "userrights-no-interwiki": "Você não tem permissão para alterar privilégios de usuários em outros wikis.",
        "userrights-nodatabase": "O banco de dados $1 não existe ou não é um banco de dados local.",
        "userrights-changeable-col": "Grupos que pode alterar",
        "userrights-unchangeable-col": "Grupos que não pode alterar",
+       "userrights-irreversible-marker": "$1*",
+       "userrights-no-shorten-expiry-marker": "$1#",
        "userrights-expiry-current": "Expira a $1",
        "userrights-expiry-none": "Não expira",
        "userrights-expiry": "Expira em:",
        "action-deletechangetags": "deletar marcações da base de dados",
        "action-purge": "purgar esta página",
        "nchanges": "$1 {{PLURAL:$1|alteração|alterações}}",
+       "ntimes": "$1×",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|desde a última visita}}",
        "enhancedrc-history": "histórico",
        "recentchanges": "Mudanças recentes",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
+       "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|$1 usuário|$1 usuários}} vigiando]",
+       "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} após alterações",
        "newsectionsummary": "/* $1 */ nova seção",
        "rc-enhanced-expand": "Exibir detalhes",
        "filehist-filesize": "Tamanho do arquivo",
        "filehist-comment": "Comentário",
        "imagelinks": "Uso do arquivo",
-       "linkstoimage": "{{PLURAL:$1|A página a seguir tem|As $1 páginas a seguir têm}} link para este arquivo:",
-       "linkstoimage-more": "Mais de $1 {{PLURAL:$1|página|páginas}} tem algum link para este arquivo.\nA lista a seguir mostra apenas {{PLURAL:$1|o primeiro link|os $1 primeiros links}} para este arquivo.\nUma [[Special:WhatLinksHere/$2|listagem completa]] está disponível.",
-       "nolinkstoimage": "Nenhuma página contém links para este arquivo.",
+       "linkstoimage": "{{PLURAL:$1|As seguinte página usa|As seguintes $1 páginas usa}} este arquivo:",
+       "linkstoimage-more": "Mais de $1 {{PLURAL:$1|página usa|páginas usam}} este arquivo.\nA lista a seguir mostra {{PLURAL:$ 1|a primeira página|as primeiras $1 páginas}} que usa apenas este arquivo.\nUma [[Special:WhatLinksHere/$2|lista completa]] está disponível.",
+       "nolinkstoimage": "Não há páginas que usem este arquivo.",
        "morelinkstoimage": "Ver [[Special:WhatLinksHere/$1|mais links]] para este arquivo.",
        "linkstoimage-redirect": "$1 (redirecionamento de arquivo) $2",
        "duplicatesoffile": "{{PLURAL:$1|O seguinte arquivo é duplicado|Os seguintes arquivos são duplicados}} deste arquivo ([[Special:FileDuplicateSearch/$2|mais detalhes]]):",
        "uploadnewversion-linktext": "Enviar uma nova versão deste arquivo",
        "shared-repo-from": "de $1",
        "shared-repo": "um repositório compartilhado",
+       "shared-repo-name-wikimediacommons": "Wikimedia Commons",
        "filepage.css": "/* O CSS aqui inserido será incluído na página de descrição de arquivo local e de wikis externos */",
        "upload-disallowed-here": "Você não pode substituir este arquivo.",
        "filerevert": "Reverter $1",
        "apisandbox-request-selectformat-label": "Mostrar dados do pedido como:",
        "apisandbox-request-format-url-label": "Sequência de consulta de URL",
        "apisandbox-request-url-label": "URL solicitante:",
+       "apisandbox-request-format-json-label": "JSON",
        "apisandbox-request-json-label": "Pedido JSON:",
        "apisandbox-request-time": "Tempo do pedido: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Corrigir token e reenviar",
        "apisandbox-multivalue-all-values": "$1 (Todos os valores)",
        "booksources": "Fontes bibliográficas",
        "booksources-search-legend": "Pesquisar fontes de livros",
+       "booksources-isbn": "ISBN:",
        "booksources-search": "Pesquisar",
        "booksources-text": "É exibida a seguir uma listagem de links para outros sites que vendem livros novos e usados e que possam possuir informações adicionais sobre os livros que você está pesquisando:",
        "booksources-invalid-isbn": "O número ISBN fornecido não parece ser válido; verifique se houve erros ao copiar da fonte original.",
        "listgrouprights-rights": "Privilégios",
        "listgrouprights-helppage": "Help:Privilégios de grupo",
        "listgrouprights-members": "(lista de membros)",
+       "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code>($2)</code></span>",
+       "listgrouprights-right-revoked": "<span class=\"listgrouprights-revoked\">$1 <code>($2)</code></span>",
        "listgrouprights-addgroup": "Podem adicionar {{PLURAL:$2|grupo|grupos}}: $1",
        "listgrouprights-removegroup": "Podem remover {{PLURAL:$2|grupo|grupos}}: $1",
        "listgrouprights-addgroup-all": "Podem adicionar todos os grupos",
        "listgrants-summary": "Esta é uma lista das possíveis concessões de permissões e das respetivas permissões dos usuários que são atribuídas por cada concessão. Os usuários podem autorizar aplicações a utilizar a sua conta, agindo assim em seu nome mas com as permissões limitadas com base nestas concessões. Uma aplicação que age em nome de um usuário não pode utilizar permissões que o utilizador não possui.\nPoderá existir [[{{MediaWiki:Listgrouprights-helppage}}|informação adicional]] sobre as permissões individuais.",
        "listgrants-grant": "Atribuição",
        "listgrants-rights": "Direitos",
+       "listgrants-grant-display": "$1 <code>($2)</code>",
        "trackingcategories": "Categorias de rastreamento",
        "trackingcategories-summary": "Esta página lista categorias de monitoramento que são preenchidas automaticamente pelo software MediaWiki. Seus nomes podem ser alterados através da alteração das mensagens de sistema relevantes no namespace {{ns: 8}}.",
        "trackingcategories-msg": "Categoria de monitoramento",
        "emailuserfooter": "Esta mensagem foi enviada {{GENDER:$1|pelo usuário|pela usuária}} $1 para {{GENDER:$2|$2}} através da opção “{{int:emailuser}}” do projeto {{SITENAME}}. {{GENDER:$2|A sua}} resposta será enviada diretamente para {{GENDER:$1|o|a}} remetente original, e revelar-lhe-á {{GENDER:$2|o seu}} endereço de e-mail.",
        "usermessage-summary": "Deixar mensagem de sistema.",
        "usermessage-editor": "Mensagens de sistema",
+       "usermessage-template": "MediaWiki:UserMessage",
        "watchlist": "Páginas vigiadas",
        "mywatchlist": "Páginas vigiadas",
        "watchlistfor2": "Para $1 $2",
        "protect-fallback": "Permitir apenas os usuários com privilégio de \"$1\"",
        "protect-level-autoconfirmed": "Permitir apenas usuários autoconfirmados",
        "protect-level-sysop": "Permitir apenas administradores",
+       "protect-summary-desc": "[$1=$2] ($3)",
        "protect-summary-cascade": "em cascata",
        "protect-expiring": "expira em $1 (UTC)",
        "protect-expiring-local": "expira $1",
        "undelete-error-long": "Foram encontrados erros ao tentar restaurar o arquivo:\n\n$1",
        "undelete-show-file-confirm": "Você tem certeza de que deseja visualizar um versão eliminada do arquivo \"<nowiki>$1</nowiki>\" das $3 de $2?",
        "undelete-show-file-submit": "Sim",
+       "undelete-revision-row2": "$1 ($2) $3 . . $4 $5 $6 $7 $8",
        "namespace": "Espaço nominal:",
        "invert": "Inverter seleção",
        "tooltip-invert": "Marque esta caixa para esconder as alterações a páginas no espaço nominal selecionado (e no espaço nominal associado, se escolheu fazê-lo)",
        "ip_range_toolow": "Os intervalos de IP não são efetivamente permitidos.",
        "proxyblocker": "Bloqueador de proxy",
        "proxyblockreason": "O seu endereço de IP foi bloqueado por ser um proxy público. Por favor contacte o seu fornecedor do serviço de Internet ou o apoio técnico e informe-os deste problema de segurança grave.",
+       "sorbs": "DNSBL",
        "sorbsreason": "O seu endereço IP encontra-se listado como proxy aberto pela DNSBL utilizada por {{SITENAME}}.",
        "sorbs_create_account_reason": "O seu endereço de IP encontra-se listado como proxy aberto na DNSBL utilizada por {{SITENAME}}. Você não pode criar uma conta",
        "softblockrangesreason": "Contribuições anônimas não são permitidas do seu endereço  IP $1 Por favor, faça login.",
        "tooltip-undo": "\"desfazer\" reverte esta edição e apresenta a página de edição no modo de previsão.\nPermite colocar uma justificativa no sumário da edição.",
        "tooltip-preferences-save": "Salvar preferências",
        "tooltip-summary": "Forneça um breve resumo",
+       "interlanguage-link-title": "$1 – $2",
+       "interlanguage-link-title-nonlang": "$1 – $2",
        "common.css": "/** o código CSS colocado aqui será aplicado a todos os temas */",
+       "print.css": "/* Código CSS colocado aqui afetará as impressões */",
+       "noscript.css": "/* Os estilos CSS colocados aqui afetarão os usuários que tenham o JavaScript desativado */",
+       "group-autoconfirmed.css": "/* Os estilos CSS colocados aqui só afetarão os usuários autoconfirmados */",
+       "group-user.css": "/* Os estilos CSS colocados aqui só afetarão os usuários registados */",
+       "group-bot.css": "/* Os estilos CSS colocados aqui só afetarão robôs */",
+       "group-sysop.css": "/* Os estilos CSS colocados aqui só afetarão os administradores */",
+       "group-bureaucrat.css": "/* Os estilos CSS colocados aqui só afetarão os burocratas */",
        "common.json": "/* Qualquer JSON aqui será carregado para todos os usuários em cada carregamento de página. */",
        "common.js": "/* Códigos JavaScript aqui colocados serão carregados por todos aqueles que acessarem alguma página deste wiki */",
+       "group-autoconfirmed.js": "/* O código JavaScript colocado aqui só será carregado para usuários autoconfirmados */",
+       "group-user.js": "/* O código JavaScript colocado aqui só será carregado para usuários registados */",
+       "group-bot.js": "/* O código JavaScript colocado aqui só será carregado para robôs */",
+       "group-sysop.js": "/* O código JavaScript colocado aqui só será carregado para administradores */",
+       "group-bureaucrat.js": "/* O código JavaScript colocado aqui só será carregado para burocratas */",
        "anonymous": "{{PLURAL:$1|Usuário anônimo|Usuários anônimos}} da {{SITENAME}}",
        "siteuser": "{{GENDER:$2|um usuário|uma usuária|um usuário}} da {{SITENAME}} ($1)",
        "anonuser": "usuário anônimo $1 da {{SITENAME}}",
        "pageinfo-few-watchers": "Menos de  $1  {{PLURAL:$1|vigilante|vigilantes}}",
        "pageinfo-few-visiting-watchers": "Pode haver ou não ser um usuário assistindo visitando edições recentes",
        "pageinfo-redirects-name": "Número de redirecionamentos para esta página",
+       "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Subpáginas desta página",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirecionamento|redirecionamentos}}; $3 {{PLURAL:$3|não redirecionamento|não redirecionamentos}})",
        "pageinfo-firstuser": "Criador da página",
        "mediawarning": "'''Aviso''': Este tipo de arquivo pode conter código malicioso.\nExecutá-lo poderá comprometer a segurança do seu sistema.",
        "imagemaxsize": "Limite de tamanho de imagem:<br />''(para páginas de descrição de arquivos)''",
        "thumbsize": "Tamanho de miniaturas:",
+       "widthheight": "$1 × $2",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|página|páginas}}",
        "file-info": "tamanho: $1, tipo MIME: $2",
        "file-info-size": "$1 × $2 pixels, tamanho: $3, tipo MIME: $4",
        "ilsubmit": "Pesquisar",
        "bydate": "por data",
        "sp-newimages-showfrom": "Mostrar novos arquivos a partir das $2 de $1",
+       "video-dims": "$1, $2 × $3",
        "seconds-abbrev": "$1&nbsp;s",
        "minutes-abbrev": "$1&nbsp;min",
        "hours-abbrev": "$1&nbsp;h",
+       "days-abbrev": "$1 d",
        "seconds": "{{PLURAL:$1|um segundo|$1 segundos}}",
        "minutes": "{{PLURAL:$1|um minuto|$1 minutos}}",
        "hours": "{{PLURAL:$1|uma hora|$1 horas}}",
        "metadata-expand": "Mostrar detalhes adicionais",
        "metadata-collapse": "Esconder detalhes restantes",
        "metadata-fields": "Os campos de metadados de imagens listados nesta mensagem serão incluídos na página de descrição da imagem quando a tabela de metadados estiver recolhida.\nPor padrão, outros campos estarão ocultos.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-langitem": "<strong>$2:</strong> $1",
+       "metadata-langitem-default": "$1",
        "exif-imagewidth": "Largura",
        "exif-imagelength": "Altura",
        "exif-bitspersample": "Bits por componente",
        "exif-exposuretime": "Tempo de exposição",
        "exif-exposuretime-format": "$1 seg ($2)",
        "exif-fnumber": "Número F",
+       "exif-fnumber-format": "f/$1",
        "exif-exposureprogram": "Programa de exposição",
        "exif-spectralsensitivity": "Sensibilidade espectral",
        "exif-isospeedratings": "Taxa de velocidade ISO",
        "exif-lightsource": "Fonte de luz",
        "exif-flash": "Flash",
        "exif-focallength": "Comprimento de foco da lente",
+       "exif-focallength-format": "$1 mm",
        "exif-subjectarea": "Área de sujeito",
        "exif-flashenergy": "Energia do flash",
        "exif-focalplanexresolution": "Resolução do plano focal X",
        "exif-gpsareainformation": "Nome da área do GPS",
        "exif-gpsdatestamp": "Data do GPS",
        "exif-gpsdifferential": "Correção do diferencial do GPS",
+       "exif-coordinate-format": "$1° $2′ $3″ $4",
        "exif-jpegfilecomment": "Comentário de arquivo JPEG",
        "exif-keywords": "Palavras-chave",
        "exif-worldregioncreated": "Região do mundo onde a fotografia foi tirada",
        "exif-personinimage": "Pessoa retratada",
        "exif-originalimageheight": "Altura da imagem antes de ser cortada",
        "exif-originalimagewidth": "Largura da imagem antes de ser cortada",
+       "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
+       "exif-subjectnewscode-value": "$2 ($1)",
        "exif-compression-1": "Sem compressão",
        "exif-compression-2": "CCITT Grupo 3 Codificação run length de Huffman modificado unidimensional",
        "exif-compression-3": "CCITT Grupo 3 codificação de fax",
        "exif-compression-4": "CCITT Grupo 4 codificação de fax",
+       "exif-compression-6": "JPEG (antigo)",
+       "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": "Direitos autorais reservados",
        "exif-copyrighted-false": "Situação de direitos autorais não definido",
+       "exif-photometricinterpretation-0": "Preto e branco (branco é 0)",
        "exif-photometricinterpretation-1": "Preto e branco (Preto é 0)",
+       "exif-photometricinterpretation-2": "RGB",
+       "exif-photometricinterpretation-3": "Palete",
+       "exif-photometricinterpretation-4": "Máscara de transparência",
+       "exif-photometricinterpretation-5": "Separados (provavelmente CMYK)",
+       "exif-photometricinterpretation-6": "YCbCr",
+       "exif-photometricinterpretation-8": "CIE L*a*b*",
+       "exif-photometricinterpretation-9": "CIE L*a*b* (codificação ICC)",
+       "exif-photometricinterpretation-10": "CIE L*a*b* (codificação ITU)",
+       "exif-photometricinterpretation-32803": "Matriz de filtros de cores",
+       "exif-photometricinterpretation-34892": "Linear não processado",
        "exif-unknowndate": "Data desconhecida",
        "exif-orientation-1": "Normal",
        "exif-orientation-2": "Espelhamento horizontal",
        "exif-orientation-8": "Rodado 90° no sentido horário",
        "exif-planarconfiguration-1": "formato irregular",
        "exif-planarconfiguration-2": "formato plano",
+       "exif-xyresolution-i": "$1 ppp",
+       "exif-xyresolution-c": "$1 pt/cm",
+       "exif-colorspace-1": "sRGB",
        "exif-colorspace-65535": "Descalibrada",
        "exif-componentsconfiguration-0": "não existe",
+       "exif-componentsconfiguration-1": "Y",
+       "exif-componentsconfiguration-2": "Cb",
        "exif-exposureprogram-0": "Não definido",
        "exif-exposureprogram-1": "Manual",
        "exif-exposureprogram-2": "Programa normal",
        "confirm-unwatch-top": "Remover esta página das páginas vigiadas?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Reverter edições nesta página?",
+       "semicolon-separator": ";&#32;",
+       "comma-separator": ",&#32;",
+       "colon-separator": ":&#32;",
+       "pipe-separator": "&#32;|&#32;",
+       "word-separator": "&#32;",
+       "ellipsis": "...",
+       "percent": "$1%",
        "quotation-marks": "$1",
        "imgmultipageprev": "← página anterior",
        "imgmultipagenext": "próxima página →",
        "autosumm-changed-redirect-target": "Alvo de redirecionamento alterado de [[$1]] para [[$2]]",
        "autosumm-new": "Criou página com '$1'",
        "autosumm-newblank": "Criar página em branco",
+       "size-bytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "size-kilobytes": "$1 kB",
+       "size-pixel": "$1 {{PLURAL:$1|píxel|píxeis}}",
        "bitrate-kilobits": "$1&nbsp;kb/s",
        "lag-warn-normal": "É possível que as mudanças que sejam mais recentes do que $1 {{PLURAL:$1|segundo|segundos}} não sejam exibidas nesta lista.",
        "lag-warn-high": "Devido a sérios problemas de latência no servidor do banco de dados, as mudanças mais recentes que $1 {{PLURAL:$1|segundo|segundos}} poderão não ser exibidas nesta lista.",
        "version-entrypoints": "URLs dos pontos de entrada",
        "version-entrypoints-header-entrypoint": "Ponto de entrada",
        "version-entrypoints-header-url": "URL",
+       "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Caminho dos artigos]",
+       "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Caminho dos <i>scripts</i>]",
        "version-libraries": "Bibliotecas instaladas",
        "version-libraries-library": "Biblioteca",
        "version-libraries-version": "Versão",
index 6bc4061..2e7fb21 100644 (file)
        "ns-specialprotected": "Não é possível editar páginas especiais.",
        "titleprotected": "Este título foi protegido contra criação por [[User:$1|$1]].\nA justificação dada foi <em>$2</em>.",
        "filereadonlyerror": "Não é possível modificar o ficheiro \"$1\" porque o repositório de ficheiros \"$2\" está em modo de leitura.\n\nO administrador do sistema que efetuou o bloqueio deu a seguinte explicação: \"$3\".",
+       "invalidtitle": "Título inválido",
        "invalidtitle-knownnamespace": "Título inválido com o domínio \"$2\" e texto \"$3\"",
        "invalidtitle-unknownnamespace": "Título inválido com número de domínio $1 desconhecido e texto \"$2\"",
        "exception-nologin": "Não está autenticado",
index 41765df..4b1717d 100644 (file)
        "ns-specialprotected": "Error message displayed when trying to edit a page in the Special namespace",
        "titleprotected": "Used as error message. Parameters:\n* $1 - username; GENDER supported\n* $2 - reason for protection",
        "filereadonlyerror": "Parameters:\n* $1 - file name\n* $2 - file repository name\n* $3 - reason",
+       "invalidtitle": "Displayed when an invalid title was encountered (generally in a list) and there are no details about it to be shown.",
        "invalidtitle-knownnamespace": "Displayed when an invalid title was encountered (generally in a list), but the namespace number is known to exist.\n\nParameters:\n* $1 - (Unused) the namespace number\n* $2 - the namespace name in content language or {{msg-mw|blanknamespace}} for the main namespace\n* $3 - the part of the title after the namespace (e.g. SomeName for the page User:SomeName)",
        "invalidtitle-unknownnamespace": "Displayed when an invalid title was encountered (generally in a list) and the namespace number is unknown.\n\nParameters:\n* $1 - the namespace number\n* $2 - the part of the title after the namespace (e.g. SomeName for the page User:SomeName)",
        "exception-nologin": "Generic page title used on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.\n{{Identical|Not logged in}}",
index e32a7c2..7fdfdbb 100644 (file)
@@ -48,7 +48,7 @@
        "tog-watchlisthideminor": "Scunne le cangiaminde stuèdeche da l'elenghe de le pàggene condrollate",
        "tog-watchlisthideliu": "Scunne le cangiaminde de l'utinde canusciute da l'elenghe de le pàggene condrollate",
        "tog-watchlistreloadautomatically": "Recareche automaticamende l'eleghe de le pàggene condrollate quanne cange 'nu filtre (richieste Javascript)",
-       "tog-watchlistunwatchlinks": "Aggiunge collegaminde dirette pe langià/non langià le eleminde jndr'à le pàggene condrollate (vole 'u JavaScript pe ausà sta funzionalità).",
+       "tog-watchlistunwatchlinks": "Aggiunge marcature dirette ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) pe langià/non langià le cangiaminde a le pàggene (vole 'u JavaScript pe ausà sta funzionalità).",
        "tog-watchlisthideanons": "Scunne le cangiaminde de l'utinde scanusciute da l'elenghe de le pàggene condrollate",
        "tog-watchlisthidepatrolled": "Scunne le cangiaminde condrollate jndr'à l'elenghe de le pàggene condrollate",
        "tog-watchlisthidecategorization": "Scunne 'a categorizzazzione d'a vôsce",
        "missingarticle-rev": "(versione#: $1)",
        "missingarticle-diff": "(Diff: $1, $2)",
        "readonly_lag": "'U database ha state automaticamende blocchete purcè le server de le database ca depennene da 'u master onne sciute in eccezzione",
+       "nonwrite-api-promise-error": "Ha state mannate a 'ndestazione HTTP 'Promise-Non-Write-API-Action', ma 'a richieste ere de 'nu module API de scritture.",
        "internalerror": "Errore inderne",
        "internalerror_info": "Errore inderne: $1",
        "internalerror-fatal-exception": "Eccezzione fatale d'u tipe \"$1\"",
        "cascadeprotected": "Sta pàgene ha state prutette da le cangiaminde, purcè jè ingluse jndr'à {{PLURAL:$1|seguende pàgene, ca jè|le seguende pàggene, ca sonde}} prutette cu l'opzione \"a cascate\":\n$2",
        "namespaceprotected": "Non ge tine 'u permesse pe cangià pàggene d'u neimspeise '''$1'''.",
        "customcssprotected": "Non ge tine 'u permesse pe cangià sta pàgene de CSS, purcè tène otre configurazione personale.",
+       "customjsonprotected": "Non ge tine 'u permesse pe cangià sta pàgene de JSON, purcè tène otre configurazione personale.",
        "customjsprotected": "Non ge tine 'u permesse pe cangià sta pàgene de Javascript, purcè tène otre configurazione personale.",
        "mycustomcssprotected": "Non ge tìne le permesse pe cangià sta pàgene CSS",
        "mycustomjsprotected": "Non ge tìne le permesse pe cangià sta pàgene JavaScript",
        "ns-specialprotected": "Le pàgene speciale no ponne essere cangete.",
        "titleprotected": "Stu titele ha state prutette da 'a ccreazione da [[User:$1|$1]].\n'U mutive jè <em>$2</em>.",
        "filereadonlyerror": "Non ge pozze cangià 'u file \"$1\" purcé l'archivije de le file \"$2\" ste in sola letture.\n\nL'amministratore d'u sisteme ca l'ave bloccate dèje sta spiegazione: \"$3\".",
+       "invalidtitle": "Titole invalide",
        "invalidtitle-knownnamespace": "Titole invalide cu 'u namespace \"$2\" e teste \"$3\"",
        "invalidtitle-unknownnamespace": "Titele invalide cu numere de namespace scanusciute $1 e teste \"$2\"",
        "exception-nologin": "Non ge sì collegate",
        "password-login-forbidden": "L'ause de stu nome utende e passuord onne state vietate.",
        "mailmypassword": "Azzere 'a passuord",
        "passwordremindertitle": "Passuord temboranea nova pe {{SITENAME}}",
-       "passwordremindertext": "Quacchedune (pò essere tu, da quiste indirizze IP $1) ha cerchete 'na nova password pe {{SITENAME}} ($4).\n'Na password temboranea pe l'utende \"$2\" ha state ccrejete e ha state 'mbostete a \"$3\".\nCe quiste ere quidde ca vulive, mo vide ce te colleghe e te scacchie 'na password nova.\n'A password temboranea adda murè 'mbrà {{PLURAL:$5|'nu giurne|$5 giurne}}.\n\nCe quacche otre 'nvece ha fatte sta rechieste, o ce tu t'è recurdate 'a password, e non g'à vuè cu cangè cchiù, allore no sce penzanne a 'stu messagge e continue a ausà 'a vecchia password.",
+       "passwordremindertext": "Quacchedune (da quiste indirizze IP $1) ha cerchete 'na nova password pe {{SITENAME}} ($4).\n'Na password temboranea pe l'utende \"$2\" ha state ccrejete e ha state 'mbostete a \"$3\".\nCe quiste ere quidde ca vulive, mo vide ce te colleghe e te scacchie 'na password nova.\n'A password temboranea adda murè 'mbrà {{PLURAL:$5|'nu giurne|$5 giurne}}.\n\nCe quacche otre 'nvece ha fatte sta rechieste, o ce tu t'è recurdate 'a password, e non g'à vuè cu cangè cchiù, allore no sce penzanne a 'stu messagge e continue a ausà 'a vecchia password.",
        "noemail": "Non ge stonne email reggistrete pe l'utende \"$1\".",
        "noemailcreate": "Tu ha mèttere 'n'indirizze e-mail valide",
        "passwordsent": "'Na nova passuord ha state mannete a l'indirizze e-mail reggistrete pe \"$1\".\nPe piacere, colleghete n'otra vota quanne l'è ricevute.",
        "botpasswords-existing": "Passuord de le bot esistende",
        "botpasswords-createnew": "Ccreje 'na passuord nove pu bot",
        "botpasswords-editexisting": "Cange 'na passuord d'u bot ca esiste ggià",
+       "botpasswords-label-needsreset": "(le password onna essere repristinate)",
        "botpasswords-label-appid": "Nome d'u bot:",
        "botpasswords-label-create": "Ccreje",
        "botpasswords-label-update": "Aggiorne",
        "resetpass-submit-loggedin": "Cange 'a password",
        "resetpass-submit-cancel": "Annulle",
        "resetpass-wrong-oldpass": "'A password temboranée o quedda corrende non g'è valide.\nPò essere ca tu è già cangiate 'a password toje o n'è cercate una nove temboranée.",
-       "resetpass-recycled": "Pe piacere azzere 'a password toje cu 'n'otra password deverse da quedde de mò.",
+       "resetpass-recycled": "Pe piacere cange 'a password toje cu 'n'otra password deverse da quedde de mò.",
        "resetpass-temp-emailed": "Tu è trasute cu 'nu codece email tembaranèe.\nPe spiccià de trasè, tu ha 'mbostà 'na password nove aqquà:",
        "resetpass-temp-password": "Password temboranea:",
        "resetpass-abort-generic": "'U cange de passuord ha state annullate da 'n'estenzione.",
        "resetpass-expired": "'A password toje ha scadute. Pe piacere 'mboste 'a password nove pe trasè.",
-       "resetpass-expired-soft": "'A password toje ha scadute e ave abbesògne de essere azzerate. Pe piacere scacchie 'n'otra password mò, o cazze \"{{int:authprovider-resetpass-skip-label}}\" pe azzerarle cchiù tarde.",
-       "resetpass-validity-soft": "'A password toje non g'è valide: $1\n\nPe piacere scacchie 'na password nove, o cazze \"{{int:authprovider-resetpass-skip-label}}\"pe azzerarle cchiù tarde.",
+       "resetpass-expired-soft": "'A password toje ha scadute e ave abbesògne de essere cangiate. Pe piacere scacchie 'n'otra password mò, o cazze \"{{int:authprovider-resetpass-skip-label}}\" pe cangiale cchiù tarde.",
+       "resetpass-validity-soft": "'A password toje non g'è valide: $1\n\nPe piacere scacchie 'na password nove, o cazze \"{{int:authprovider-resetpass-skip-label}}\" pe cangiale cchiù tarde.",
        "passwordreset": "Azzere 'a passuord",
        "passwordreset-text-one": "Comblete stu module pe azzerà 'a passuord toje.",
        "passwordreset-text-many": "{{PLURAL:$1|Inghie une de le cambe pe azzerà 'a passuord toje.}}",
        "savechanges": "Reggistre le cangiaminde",
        "publishpage": "Pubbleche 'a pàgene",
        "publishchanges": "Pubbleche le cangiaminde",
+       "savearticle-start": "Reggistre 'a vôsce...",
+       "savechanges-start": "Reggistre le cangiaminde...",
+       "publishpage-start": "Pubbleche 'a pàgene...",
+       "publishchanges-start": "Pubbleche le cangiaminde...",
        "preview": "Andeprime",
        "showpreview": "Vide l'andeprime",
        "showdiff": "Fa vedè le cangiaminde",
        "previewerrortext": "'N'errore ha assute quanne ste facive l'andeprime de le cangiaminde.",
        "blockedtitle": "L'utende è blocchete",
        "blockedtext": "<strong>'U nome de l'utende o l'indirizze IP ha state bloccate.</strong>\n\n'U blocche ha state fatte da $1.\n'U mutive date jè <em>$2</em>.\n\n* 'U Blocche accumenze: $8\n* 'U Blocche spicce: $6\n* Tipe de blocche: $7\n\nTu puè condatta $1 o n'otre [[{{MediaWiki:Grouppage-sysop}}|amministratore]] pe 'ngazzarte sus a 'u blocche.\nTu non ge puè ausà 'u strumende \"{{int:emailuser}}\" senza ca mitte n'indirizze email valide jndr'à le\n[[Special:Preferences|preferenze tune]] e ce è state bloccate sus a l'use sue.\nL'IP ca tine mò jè $3 e 'u codece d'u blocche jè #$5.\nPe piacere mitte ste doje 'mbormaziune ce manne 'na richieste de sblocche.",
-       "autoblockedtext": "L'indirizze IP tue ha state automaticamende blocchete purcè ha state ausete da n'otre utende, ca avère state blocchete da $1.\n'U mutive date jè 'u seguende:\n\n:''$2''\n\n* Inizie d'u blocche: $8\n* Scadenze d'u blocche: $6\n* Blocche 'ndise: $7\n\nTu puè cundattà $1 o une de l'otre [[{{MediaWiki:Grouppage-sysop}}|amministrature]] pe parà de stu probbleme.\n\nVide Bbuene ca tu non ge puè ausà 'a funziona \"manne n'e-mail a stu utende\" senze ca tu tìne 'n'indirizze e-mail valide e reggistrete jndr'à seziona [[Special:Preferences|me piace accussì]] e tu non ge sinde blocchete da ausarle.\n\nL'indirizze IP corrende jè $3, e 'u codece d'u blocche jè #$5.\nPe piacere mitte tutte le dettaglie ca ponne essere utile pe le richieste tue.",
+       "autoblockedtext": "L'indirizze IP tue ha state automaticamende blocchete purcè ha state ausete da n'otre utende, ca avère state blocchete da $1.\n'U mutive date jè 'u seguende:\n\n:''$2''\n\n* Inizie d'u blocche: $8\n* Scadenze d'u blocche: $6\n* Blocche 'ndise: $7\n\nTu puè cundattà $1 o une de l'otre [[{{MediaWiki:Grouppage-sysop}}|amministrature]] pe parà de stu probbleme.\n\nVide Bbuene ca tu non ge puè ausà 'a funziona \"manne n'e-mail a stu utende\" senze ca tu tìne 'n'indirizze e-mail valide e reggistrete jndr'à seziona [[Special:Preferences|me piace accussì]] e tu non ge sinde blocchete da ausarle.\n\nL'indirizze IP corrende jè $3, e 'u codece d'u blocche jè #$5.\nPe piacere mitte tutte le dettaglie ca ponne essere utile pe le richieste tune.",
        "blockednoreason": "nisciune mutive",
        "whitelistedittext": "Tu ha $1 pàggene da cangià.",
        "confirmedittext": "Tu a confermà l'indirizze e-mail tue apprime de cangià le pàggene.\nPe piacere mitte e validesce l'indirizze e-mail tue ausanne le [[Special:Preferences|preferenze de l'utende]].",
        "userjspreview": "'''Arrecuerdete ca tu ste vide/teste sulamende in andeprime 'u JavaScript tue.'''\n'''Non g'à state angore reggistrete ninde!'''",
        "sitecsspreview": "'''Arrecuerdete ca tu ste vide sulamende in andeprime 'u CSS tune.'''\n'''Non g'à state angore reggistrate ninde!'''",
        "sitejspreview": "'''Arrecuerdete ca tu ste vide sulamende in andeprime 'u codece JavaScript tune.'''\n'''Non g'à state angore reggistrate ninde!'''",
-       "userinvalidconfigtitle": "'''Attenziò:''' Non ge stè 'nu skin \"$1\".\nArrecuerdete ca jndr'à le file personalizzete .css e .js s'ause scrivere le titele cu le lettere piccenne, pe esembie {{ns:user}}:Foo/vector.css è diverse da {{ns:user}}:Foo/Vector.css.",
+       "userinvalidconfigtitle": "<strong>Attenziò:</strong> Non ge stè 'nu skin \"$1\".\nArrecuerdete ca jndr'à le file personalizzete .css, .json e .js s'ause scrivere le titele cu le lettere piccenne, pe esembie {{ns:user}}:Foo/vector.css è diverse da {{ns:user}}:Foo/Vector.css.",
        "updated": "(Cangiete)",
        "note": "'''Vide Bbuene:'''",
        "previewnote": "'''Arrecuerdete queste è sole 'n'andeprime.'''\nle cangiaminde non g'onne state angore reggistrate!",
        "longpageerror": "'''ERRORE: 'U teste ca tu vuè ccu reggistre è luenghe {{PLURAL:$1|'nu kilobyte|$1 kilobyte}}, invece 'u limite massime jè de {{PLURAL:$2|'nu kilobyte|$2 kilobyte}}.'''\nNon ge puè reggistrà sta pàggene.",
        "readonlywarning": "<strong>FA ATTENZIO': 'U database ha state bloccate pe manutenzione, e allore tu non ge puè reggistrà le cangiaminde ca ste face mò.</strong>\nTu puè fa 'na bella cose, tagghie e 'nzicche le cangiaminde jndr'à 'nu file de teste sus a 'u combiuter tune e pò cchiù tarde le reggistre sus 'a Uicchi.\n\nL'amministratore ca ha bloccate 'u database ha date stu mutive: $1",
        "protectedpagewarning": "'''ATTENZIO': Sta pàgene ha state bloccate e allore sulamende le utinde cu le privilegge de ''sysop'' ponne cangiarle.'''\nL'urteme archivie de le trasute ha state previste aqquà sotte pe referimende:",
-       "semiprotectedpagewarning": "'''Fà attenzione:''' Sta pàgene ha state bloccate accussì sulamende l'utinde reggistrete ponne fà cangiaminde.\nL'urteme archivije de le trasute ha state previste aqquà sotte pe referimende:",
+       "semiprotectedpagewarning": "<strong>Fà attenzione:</strong> Sta pàgene ha state bloccate accussì sulamende l'utinde reggistrete ponne fà cangiaminde.\nL'urteme archivije de le trasute ha state previste aqquà sotte pe referimende:",
        "cascadeprotectedwarning": "<strong>Fa attenziò:</strong> Sta pàgene ha state protette accussì sulamende l'utinde ca tènene le [[Special:ListGroupRights|deritte de amministratore]] a ponne cangià, purcè inglude {{PLURAL:$1|pàgene|pàggene}} prutette a cascate:",
        "titleprotectedwarning": "'''ATTENZIONE: Sta pàgene ha state bloccate accussì sulamende [[Special:ListGroupRights|specifice diritte]] a ponne ccrejà.'''\nL'urteme archivije de le trasute jè provviste sotte pe referimende:",
        "templatesused": "{{PLURAL:$1|Template|Template}} ausate sus 'a sta pàgene:",
        "recentchangesdays": "Sciurne da fà vedè jndr'à le cangiaminde recende:",
        "recentchangesdays-max": "(massime $1 {{PLURAL:$1|sciurne|sciurne}})",
        "recentchangescount": "Numere de cangiaminde da fà vedè pe default:",
-       "prefs-help-recentchangescount": "Quiste 'nglude le urteme cangiaminde, le storie de le pàggene e le archivije.",
+       "prefs-help-recentchangescount": "Numere massime: 1000",
        "prefs-help-watchlist-token2": "Queste jè 'a chiave segrete a le feed d'u web de l'elenghe de le pàggene condrollate tune.\nCengate vò ccu canosce ce pò leggere l'elenghe de le pàggene condrollate tune, accussì non g'ù pò condividere.\nCe è abbesogne, [[Special:ResetTokens|'u puè azzerà]].",
        "savedprefs": "Le preferenze tue onne state aggiornete.",
        "savedrights": "Le gruppe utinde de {{GENDER:$1|$1}} onne state reggistrate.",
        "prefs-files": "Fails",
        "prefs-custom-css": "CSS Personalizzete",
        "prefs-custom-js": "JS Personalizzete",
-       "prefs-common-config": "CSS/JS condivise pe tutte le sfonde:",
+       "prefs-common-config": "CSS/JSON/JavaScript condivise pe tutte le sfonde:",
        "prefs-reset-intro": "Tu puè ausà sta pàgene pe azzerà le preferenze tue a quidde de default d'u site.\nQuiste non ge pò essere annullate.",
        "prefs-emailconfirm-label": "Conferme de l'e-mail:",
        "youremail": "Poste:",
        "grant-createaccount": "Ccreje le cunde utinde",
        "grant-createeditmovepage": "Ccreje, cange e spueste le pàggene",
        "grant-delete": "Scangille pàggene, revisiune e vôsce de l'archivije",
-       "grant-editinterface": "Cange 'u namespace MediaUicchi e le CSS/JavaScript de le utinde",
-       "grant-editmycssjs": "Cange le CSS/JavaScript tune",
+       "grant-editinterface": "Cange 'u namespace MediaUicchi e le JSON d'u site/utinde",
+       "grant-editmycssjs": "Cange le CSS/JSON/JavaScript tune",
        "grant-editmyoptions": "Cange le preferenze tune",
        "grant-editmywatchlist": "Cange le pàggene condrollate tune",
        "grant-editpage": "Cange le pàggene esistende",
        "rcfilters-other-review-tools": "Otre struminde de revisione",
        "rcfilters-group-results-by-page": "Raggruppe le resultate pe pàgene",
        "rcfilters-activefilters": "Filtre attive",
+       "rcfilters-activefilters-hide": "Scunne",
+       "rcfilters-activefilters-show": "Fà 'ndrucà",
+       "rcfilters-activefilters-hide-tooltip": "Scunne l'arèe de le filtre attive",
+       "rcfilters-activefilters-show-tooltip": "Fà 'ndrucà l'arèe de le filtre attive",
        "rcfilters-advancedfilters": "Filtre avanzate",
        "rcfilters-limit-title": "Cangiaminde da 'ndrucà",
+       "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|cangiamende|cangiaminde}}, $2",
        "rcfilters-date-popup-title": "Periode de tiembe da cercà",
        "rcfilters-days-title": "Urteme sciurne",
        "rcfilters-hours-title": "Urteme ore",
        "rcfilters-savedqueries-rename": "Renomene",
        "rcfilters-savedqueries-setdefault": "'Mboste cumme predefinite",
        "rcfilters-savedqueries-unsetdefault": "Live cumme predefinite",
-       "rcfilters-savedqueries-remove": "Live",
+       "rcfilters-savedqueries-remove": "Scangìlle",
        "rcfilters-savedqueries-new-name-label": "Nome",
        "rcfilters-savedqueries-new-name-placeholder": "Dì a ce serve 'u filtre",
        "rcfilters-savedqueries-apply-label": "Ccrèje 'nu filtre",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Ccreje 'nu filtre de base",
        "rcfilters-savedqueries-cancel-label": "Annulle",
        "rcfilters-savedqueries-add-new-title": "Reggìstre le 'mbostaziune de mò d'u filtre",
+       "rcfilters-savedqueries-already-saved": "Ste filtre onne state ggià reggistrate. Cange le 'mbostaziune pe ccrejà 'nu filtre nuève reggistrate.",
        "rcfilters-restore-default-filters": "Repristine le filtre de base",
        "rcfilters-clear-all-filters": "Pulizze tutte le filtre",
        "rcfilters-show-new-changes": "'Ndruche le urteme cangiaminde",
        "lockmanager-fail-closelock": "Non ge pozze achiudere 'u blocche d'u file pe \"$1\".",
        "lockmanager-fail-deletelock": "Non ge pozze scangellà 'u blocche d'u file pe \"$1\".",
        "lockmanager-fail-acquirelock": "Non ge pozze pigghià blocche pe \"$1\".",
-       "lockmanager-fail-openlock": "Non ge pozze aprè 'u blocche d'u file pe \"$1\".",
+       "lockmanager-fail-openlock": "Non ge pozze aprè 'u blocche d'u file pe \"$1\". Assecurate ca 'a cartelle pe le carecaminde ha state configurate bbuene e 'u web server tène le permesse pe scrivere sus. 'Ndruche  https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory per cchiù 'mbormaziune.",
        "lockmanager-fail-releaselock": "Non ge pozze relassà blocche pe \"$1\".",
        "lockmanager-fail-db-bucket": "Non ge pozze condattà 'u database purcé stonne troppe blocche jndr'à $1.",
        "lockmanager-fail-db-release": "Non ge pozze relassà le blocche sus a 'u database $1.",
        "uploadstash-badtoken": "L'esecuzione de sta azione non g'ha riuscite, pò essere purcé le credenziale pe le cangiaminde onne scadute. Pruève arrete.",
        "uploadstash-errclear": "'A pulizie de le file non g'ha riuscite.",
        "uploadstash-refresh": "Aggiorne l'elenghe de le file",
+       "uploadstash-thumbnail": "'ndruche 'a miniature",
        "uploadstash-bad-path-invalid": "Percorse invalide.",
        "uploadstash-bad-path-unknown-type": "Tipe scanusciute \"$1\".",
        "uploadstash-bad-path-unrecognized-thumb-name": "Nome d'a miniature non acchiate.",
        "invalid-chunk-offset": "distanze d'u chunk invalide",
        "img-auth-accessdenied": "Accesse negate",
-       "img-auth-nopathinfo": "No se iacchie PATH_INFO.\n'U server tune non g'è 'mbostate o non ge passe sta 'mbormazione.\nPò essere ca jè basate sus a 'u CGI e non ge pò supportà img_auth.\nVide https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
+       "img-auth-nopathinfo": "No se iacchie 'u percorse d'a 'mbormnazione.\n'U server tune adda essere 'mbostate pe passà sta 'le variabbile REQUEST_URI e/o PATH_INFO.\nCe jè accussì, pruève a abbilità $wgUsePathInfo.\n'Ndruche https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "'U percorse richieste non ge stè jndr'à cartelle de carecamende configurate",
        "img-auth-badtitle": "Non ge se pò costruì 'nu titele valide da \"$1\".",
        "img-auth-nologinnWL": "Tu non ge sì collegate e \"$1\" non ge stè jndr'à lista vianghe.",
        "filehist-comment": "Commende",
        "imagelinks": "Ause d'u file",
        "linkstoimage": "{{PLURAL:$1|sta pàgene apponde |$1 ste pàggene appondene}} a stu fail:",
-       "linkstoimage-more": "Cchiù de $1 {{PLURAL:$1|pàgene se colleghe|pàggene se collegane}} a stu file.<br />\n'A seguende liste face vedè {{PLURAL:$1|'a prima pàgene ca se colleghe|le prime $1 pàggene ca se colleghene}} sulamende a stu file.<br />\n'Na [[Special:WhatLinksHere/$2|liste comblete]] è disponibbele.",
+       "linkstoimage-more": "Cchiù de $1 {{PLURAL:$1|pàgene se colleghe|pàggene se collegane}} a stu file.<br />\n'A seguende liste face vedè {{PLURAL:$1|'a prima pàgene ca se colleghe|le prime $1 pàggene ca se colleghene}} sulamende a stu file.<br />\n'Na [[Special:WhatLinksHere/$2|elenghe comblete]] è disponibbele.",
        "nolinkstoimage": "Non ge stonne pàggene ca appodene a stu fail.",
        "morelinkstoimage": "Vide [[Special:WhatLinksHere/$1|cchiù collegaminde]] a stu file.",
        "linkstoimage-redirect": "$1 (redirezionamende d'u file) $2",
        "doubleredirects": "Ridirezionaminde a doppie",
        "doubleredirectstext": "Sta pàgene elenghe le pàggene ca se ridirezionane sus a otre pàggene de ridirezionaminde.\nOgne righe condene 'nu collegamende a 'u prime e a 'u seconde ridirezionamende pe fà vedè addò arrive 'u seconde ridirezionamende, 'u quale jè normalmende 'a pàgena de destinaziona \"rèale\", addò 'u prime ridirezionamende avesse appondà.\nLe situaziune de <del>ingrocie</del> onne state resolte.",
        "double-redirect-fixed-move": "[[$1]] ha state spustate.\nAvène aggiornate automaticamende e mò s'avène redirette a [[$2]].",
-       "double-redirect-fixed-maintenance": "Aggiuste le doppie redirezionaminde da [[$1]] a [[$2]] jndr'à 'na fatije de manutenzione.",
+       "double-redirect-fixed-maintenance": "Aggiuste le doppie redirezionaminde da [[$1]] a [[$2]] jndr'à 'na fatije de manutenzione",
        "double-redirect-fixer": "Correttore de redirezionaminde",
        "brokenredirects": "Redirezionamninde scuasciete",
        "brokenredirectstext": "Le ridirezionaminde ca seguene appondene a pàggene ca non g'esistene:",
        "deadendpages": "Pàggene senza collegamende",
        "deadendpagestext": "Le pàggene ca seguene non g'appondute a otre pàggene sus a {{SITENAME}}.",
        "protectedpages": "Pàggene prutette",
+       "protectedpages-filters": "Filtre:",
        "protectedpages-indef": "Sulamende protezziune indefinite",
        "protectedpages-summary": "Sta pàgene elenghe le pàggene ca so prutette. Pe 'n'elenghe de le titole ca sò prutette da 'a ccrejazzione, 'ndruche [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Sulamende prutezzione a cascata",
        "protectedtitles-submit": "Fà 'ndrucà le titole",
        "listusers": "Liste de l'utende",
        "listusers-editsonly": "Fà vedè sulamende l'utinde cu cangiaminde fatte",
+       "listusers-temporarygroupsonly": "Fà 'ndrucà sulamende le utinde jndr'à le gruppe de utinde temboranèe",
        "listusers-creationsort": "Arrenghete pe date de ccreazione",
        "listusers-desc": "Arranghe jndr'à 'n'ordine ca scenne",
        "usereditcount": "$1 {{PLURAL:$1|cangiamende|cangiaminde}}",
        "apihelp": "Aijute de l'API",
        "apihelp-no-such-module": "Module \"$1\" none acchiate.",
        "apisandbox": "Sandbox de l'API",
+       "apisandbox-jsonly": "'U JavaScript jè richieste pe ausà 'a sandbox API.",
        "apisandbox-api-disabled": "API non g'è abbiletate sus a stu site.",
        "apisandbox-intro": "Ause sta pàgene pe sperimendà cu le <strong>API de le web service pe MediaUicchi</strong>.\nFà referimende a [[mw:API:Main page| 'a documendazione de l'API]] pe cchiù dettaglie de l'ause de l'API.\nEsembie: [https://www.mediawiki.org/wiki/API#A_simple_example pigghie 'u condenute d'a Pàgene Prengepàle]. Scacchie 'n'azione pe 'ndrucà otre esembie.\n\nVide ca, pure ca queste jè 'na buatte de sabbie tu puè carrescià le cangiaminde de sta pàgene sus 'a uicchi.",
        "apisandbox-submit": "Fà 'na richieste",
        "apisandbox-reset": "Pulizze",
        "apisandbox-retry": "Pruève arrete",
+       "apisandbox-loading": "Stoche a careche le 'mbormaziune pu module API \"$1\"...",
        "apisandbox-examples": "Esembie",
        "apisandbox-dynamic-parameters": "Parametre aggiundive",
        "apisandbox-dynamic-parameters-add-label": "Aggiunge 'u parametre:",
        "cachedspecial-refresh-now": "Vide l'urteme.",
        "categories": "Le Categorije",
        "categories-submit": "Fà 'ndrucà",
-       "categoriespagetext": "{{PLURAL:$1|'A seguende categorije tène|Le seguende categorije tènene}} pàggene o media.\n[[Special:UnusedCategories|Categorije non ausate]] non ge se vèdene aqquà.\nVide pure [[Special:WantedCategories|Categorije cercate]].",
+       "categoriespagetext": "{{PLURAL:$1|'A seguende categorije tène|Le seguende categorije tènene}} pàggene o media.\n'Ndruche pure [[Special:WantedCategories|Categorije cercate]].",
        "categoriesfrom": "Fà vedè le categorije partenne da:",
        "deletedcontributions": "Condrebbute de l'utende scangellete",
        "deletedcontributions-title": "Condrebbute de l'utende scangellate",
        "fix-double-redirects": "Aggiorne ogne redirezionamende ca apponde a 'u titele origginale",
        "move-leave-redirect": "Lasse 'nu ridirezionamende rréte",
        "protectedpagemovewarning": "'''Attenziò:''' Sta pàgene ha state bloccate accussì sulamende l'utinde cu le deritte d'amministratore 'a ponne spustà.\nL'urteme archivije de le trasute ha state mise aqquà sotte pe referimende:",
-       "semiprotectedpagemovewarning": "'''Vide Bbuène:''' Sta pàgene ha state blocchete accussì sulamende l'utinde reggistrate 'a ponne spustà.\nL'urteme archivije de le trasute ha state mise aqquà sotte pe referimende:",
+       "semiprotectedpagemovewarning": "<strong>Vide Bbuène:</strong> Sta pàgene ha state blocchete accussì sulamende l'utinde reggistrate 'a ponne spustà.\nL'urteme archivije de le trasute ha state mise aqquà sotte pe referimende:",
        "move-over-sharedrepo": "[[:$1]] esiste sus a 'n'archivie condivise. Spustanne 'u file sus a stu titole vèje a sovrascrive 'u file condivise.",
        "file-exists-sharedrepo": "'U nome d'u file ca è scacchiate jè già ausate sus a 'n'archivie condivise.\nPe piacere scacchiene 'notre.",
        "export": "Pàggene esportete",
        "version-poweredby-others": "otre",
        "version-poweredby-translators": "tradutture de translatewiki.net",
        "version-credits-summary": "Nuje vulesseme acchià le persone seguende pe le lore condrebbute a [[Special:Version|MediaUicchi]].",
-       "version-license-info": "MediaUicchi jè 'nu softuare libbere, tu 'u puè redestribbuì  e/o cangiarle sotte le termine d'a GNU (Licenze Pubbleche Generale) cumme pubblecate da 'a Free Software Foundation; endrambe le versiune 2 d'a Licenze, o (a scelta toje) 'le versiune cchiù nnove.\n\nMediauicchi jè destribbuite cu 'a speranze ca jè utile, ma SENZE NISCIUNA GARANZIE; senze nemmanghe 'a garanzie imblicite de COMMERCIABBELETÀ o IDONIETÀ PE 'NU SCOPE PARTICOLARE. Vatte a vide 'a GNU (Licenze Pubbleche Generale) pe cchiù 'mbormaziune.\n\nAvisse avè ricevute [{{SERVER}}{{SCRIPTPATH}}/COPYING 'na copie d'a GNU (Licenze Pubbleche Generale)] 'nzieme a stu programme, ce none, scrive a 'a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor , Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html liggele sus a Indernette].",
+       "version-license-info": "MediaUicchi jè 'nu softuare libbere, tu 'u puè redestribbuì  e/o cangiarle sotte le termine d'a GNU (Licenze Pubbleche Generale) cumme pubblecate da 'a Free Software Foundation; endrambe le versiune 2 d'a Licenze, o (a scelta toje) 'le versiune cchiù nnove.\n\nMediauicchi jè destribbuite cu 'a speranze ca jè utile, ma <em>SENZE NISCIUNA GARANZIE</em>; senze nemmanghe 'a garanzie imblicite de <strong>COMMERCIABBELETÀ</strong> o <strong>IDONIETÀ PE 'NU SCOPE PARTICOLARE</strong>. Vatte a vide 'a GNU (Licenze Pubbleche Generale) pe cchiù 'mbormaziune.\n\nAvisse avè ricevute [{{SERVER}}{{SCRIPTPATH}}/COPYING 'na copie d'a GNU (Licenze Pubbleche Generale)] 'nzieme a stu programme, ce none, scrive a 'a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor , Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html liggele sus a Indernette].",
        "version-software": "Softuer installete",
        "version-software-product": "Prodotte",
        "version-software-version": "Versione",
        "limitreport-expansiondepth": "Espanzione massime de profonnetà",
        "limitreport-expensivefunctioncount": "Analizzatore d'u cunde d'a funzione ca coste assaije",
        "expandtemplates": "Template spannute",
-       "expand_templates_intro": "Sta pàgena speciale pigghie quacche teste e spanne tutte le template jndr'à jidde recorsivamende.<br />\nJidde spanne pure le funziune de analise cumme<br />\n<code><nowiki>{{</nowiki>#language:…}}</code>, e variabbele cumme <br />\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.<br />\nIn pratiche tutte quidde ca stè jndr'à le doppie parendesi graffe.<br />",
+       "expand_templates_intro": "Sta pàgena speciale pigghie quacche uicchiteste e spanne tutte le template jndr'à jidde recorsivamende.<br />\nJidde spanne pure le funziune de analise cumme<br />\n<code><nowiki>{{</nowiki>#language:…}}</code>, e variabbele cumme <br />\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.<br />\nIn pratiche tutte quidde ca stè jndr'à le doppie parendesi graffe.<br />",
        "expand_templates_title": "Titele condestuale, pe {{FULLPAGENAME}} ecc.:",
        "expand_templates_input": "Uicchiteste de input:",
        "expand_templates_output": "Resultete",
index 2b4c144..86d9b67 100644 (file)
        "ns-specialprotected": "Страницы пространства имён «{{ns:special}}» не могут правиться.",
        "titleprotected": "Создание страницы с таким заголовком было запрещено участником [[User:$1|$1]].\nУказана следующая причина: <em>$2</em>.",
        "filereadonlyerror": "Не удаётся изменить файл «$1», так как хранилище «$2» находится в режиме «только для чтения».\n\nСистемный администратор, заблокировавший базу, оставил следующее объяснение: «$3».",
+       "invalidtitle": "Недопустимое название",
        "invalidtitle-knownnamespace": "Недопустимый заголовок с пространством имен «$2» и текстом «$3»",
        "invalidtitle-unknownnamespace": "Недопустимый заголовок с неизвестным номером пространства $1 и текстом «$2»",
        "exception-nologin": "Вы не представились системе",
        "virus-badscanner": "Ошибка настройки. Неизвестный сканер вирусов: ''$1''",
        "virus-scanfailed": "ошибка сканирования (код $1)",
        "virus-unknownscanner": "неизвестный антивирус:",
-       "logouttext": "<strong>Вы завершили сеанс работы.</strong>\n\nНекоторые страницы могут продолжить отображаться так, словно вы все ещё не завершили сеанс. Для борьбы с этим явлением обновите кэш браузера.",
+       "logouttext": "<strong>Вы завершили сеанс работы.</strong>\n\nНекоторые страницы могут продолжить отображаться так, как будто вы все ещё не завершили сеанс, пока вы не обновите кэш браузера.",
        "cannotlogoutnow-title": "Невозможно выйти прямо сейчас",
        "cannotlogoutnow-text": "Нельзя выйти во время использования $1.",
        "welcomeuser": "Добро пожаловать, $1!",
        "right-suppressredirect": "подавление перенаправлений при переименовании страниц",
        "right-upload": "загрузка файлов",
        "right-reupload": "перезапись существующих файлов",
-       "right-reupload-own": "перезапись файлов тем же участником",
+       "right-reupload-own": "перезапись файлов, загруженных тем же участником",
        "right-reupload-shared": "подмена файлов из общих хранилищ локальными",
        "right-upload_by_url": "загрузка файлов с адреса URL",
        "right-purge": "очистка кэша страниц без подтверждения",
        "right-autoconfirmed": "обход ограничений скорости на IP-адрес",
        "right-bot": "автоматический процесс",
        "right-nominornewtalk": "малые правки на страницах обсуждений участников не создают для них уведомление о новом сообщении",
-       "right-apihighlimits": "уменьшение ограничений на выполнение API-запросов",
+       "right-apihighlimits": "использование высших ограничений при выполнении API-запросов",
        "right-writeapi": "использование API для записи",
        "right-delete": "удаление страниц",
        "right-bigdelete": "удаление страниц с длинными историями изменений",
        "right-protect": "изменение уровня защиты страниц и правка каскадно защищённых страниц",
        "right-editprotected": "правка страниц, защищённых как «{{int:protect-level-sysop}}»",
        "right-editsemiprotected": "правка страниц, защищённых как «{{int:protect-level-autoconfirmed}}»",
-       "right-editcontentmodel": "Ñ\80едакÑ\82иÑ\80ование ÐºÐ¾Ð½Ñ\82енÑ\82ной Ð¼Ð¾Ð´ÐµÐ»Ð¸ страницы",
+       "right-editcontentmodel": "Ñ\80едакÑ\82иÑ\80ование Ð¼Ð¾Ð´ÐµÐ»Ð¸ Ñ\81одеÑ\80жимого страницы",
        "right-editinterface": "изменение пользовательского интерфейса",
        "right-editusercss": "правка CSS-файлов других участников",
        "right-edituserjson": "правка JSON-файлов других участников",
        "right-editmyuserjson": "редактирование своих пользовательских JSON-файлов",
        "right-editmyuserjs": "редактирование своих пользовательских JavaScript-файлов",
        "right-viewmywatchlist": "просмотр своего списка наблюдения",
-       "right-editmywatchlist": "редактирование своего списка наблюдения",
+       "right-editmywatchlist": "редактирование своего списка наблюдения; некоторые действия будут добавлять страницы даже без такого права",
        "right-viewmyprivateinfo": "просмотр собственных личных данных (например, адрес электронной почты, настоящее имя)",
        "right-editmyprivateinfo": "правка собственных личных данных (например, адрес электронной почты, настоящее имя)",
        "right-editmyoptions": "редактирование собственных настроек",
        "right-noratelimit": "обход ограничений скорости",
        "right-import": "импорт страниц из других вики",
        "right-importupload": "импорт страниц через загрузку файлов",
-       "right-patrol": "паÑ\82Ñ\80Ñ\83лиÑ\80ование Ð¿Ñ\80авок",
-       "right-autopatrol": "авÑ\82омаÑ\82иÑ\87еÑ\81кое Ð¿Ð°Ñ\82Ñ\80Ñ\83лиÑ\80ование Ð¿Ñ\80авок",
+       "right-patrol": "оÑ\82меÑ\82ка Ð¿Ñ\80авок Ð´Ñ\80Ñ\83гиÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ников ÐºÐ°Ðº Ð¾Ñ\82паÑ\82Ñ\80Ñ\83лиÑ\80ованнÑ\8bÑ\85",
+       "right-autopatrol": "авÑ\82омаÑ\82иÑ\87еÑ\81каÑ\8f Ð¾Ñ\82меÑ\82ка Ñ\81обÑ\81Ñ\82веннÑ\8bÑ\85 Ð¿Ñ\80авок ÐºÐ°Ðº Ð¿Ð°Ñ\82Ñ\80Ñ\83лиÑ\80ованнÑ\8bÑ\85",
        "right-patrolmarks": "просмотр отметок о патрулировании в свежих правках",
        "right-unwatchedpages": "просмотр списка ненаблюдаемых страниц",
        "right-mergehistory": "объединение историй страниц",
        "filehist-filesize": "Размер файла",
        "filehist-comment": "Примечание",
        "imagelinks": "Использование файла",
-       "linkstoimage": "{{PLURAL:$1|Следующая $1 страница ссылается|Следующие $1 страницы ссылаются|Следующие $1 страниц ссылаются}} на данный файл:",
-       "linkstoimage-more": "Более $1 {{PLURAL:$1|страницы|страниц}} ссылаются на этот файл.\nВ данном списке {{PLURAL:$1|представлена только $1 ссылка|представлены только $1 ссылки|представлены только $1 ссылок}} на этот файл.\nДоступен также [[Special:WhatLinksHere/$2|полный список]].",
-       "nolinkstoimage": "Ð\9dеÑ\82 Ñ\81Ñ\82Ñ\80аниÑ\86, Ð²ÐºÐ»Ñ\8eÑ\87ающих этот файл.",
+       "linkstoimage": "{{PLURAL:$1|Следующая $1 страница использует|Следующие $1 страницы используют|Следующие $1 страниц используют}} данный файл:",
+       "linkstoimage-more": "Более $1 {{PLURAL:$1|страницы|страниц}} используют этот файл.\nВ данном списке {{PLURAL:$1|представлена только $1 страница, использующая|представлены только $1 страницы, использующие|представлены только $1 страниц, использующих}} этот файл.\nДоступен также [[Special:WhatLinksHere/$2|полный список]].",
+       "nolinkstoimage": "Ð\9dеÑ\82 Ñ\81Ñ\82Ñ\80аниÑ\86, Ð¸Ñ\81полÑ\8cзÑ\83ющих этот файл.",
        "morelinkstoimage": "Просмотреть [[Special:WhatLinksHere/$1|остальные ссылки]] на этот файл.",
        "linkstoimage-redirect": "$1 (файловое перенаправление) $2",
        "duplicatesoffile": "{{PLURAL:$1|Следующий файл является дубликатом|Следующие $1 файла являются дубликатами|Следующие $1 файлов являются дубликатами}} этого файла ([[Special:FileDuplicateSearch/$2|подробности]]):",
        "edit-error-long": "Ошибки:\n\n$1",
        "revid": "версия $1",
        "pageid": "ID страницы $1",
+       "interfaceadmin-info": "$1\n\nПрава на редактирование общесайтных CSS/JS/JSON были недавно вынесены из права <code>editinterface</code>. Если вы не понимаете, почему вы наткнулись на эту ошибку, см. [[mw:MediaWiki_1.32/interface-admin]].",
        "rawhtml-notallowed": "&lt;html&gt; теги могут быть использованы только в пределах обычных страниц.",
        "gotointerwiki": "Покидаем {{grammar:accusative|{{SITENAME}}}}...",
        "gotointerwiki-invalid": "Указан некорректный заголовок.",
index 282761a..7ae0ac8 100644 (file)
                        "Manik Soren",
                        "Ramjit Tudu",
                        "R Ashwani Banjan Murmu",
-                       "Fagunkoyel Hansdah"
+                       "Fagunkoyel Hansdah",
+                       "Subasmurmu",
+                       "Amire80",
+                       "Dulal Kisku"
                ]
        },
        "tog-underline": "ᱡᱚᱱᱚᱲ ᱞᱟᱛᱟᱨᱨᱮ ᱫᱟᱜᱽ ᱩᱫᱩᱜᱽᱢᱮ:",
@@ -40,7 +43,7 @@
        "tog-minordefault": "ᱮᱛᱦᱚᱵᱨᱮ ᱥᱟᱱᱟᱢ ᱥᱟᱯᱲᱟᱣᱠᱩ ᱦᱩᱰᱤᱧ ᱞᱮᱠᱟᱛᱮ ᱪᱤᱱᱦᱟᱹ ᱠᱟᱜ ᱢᱮ",
        "tog-previewontop": "ᱥᱟᱯᱲᱟᱣ ᱵᱟᱠᱥᱳ ᱞᱟᱦᱟᱨᱮ ᱩᱱᱩᱫᱩᱜ ᱩᱫᱩᱜᱽ ᱢᱮ",
        "tog-previewonfirst": "ᱯᱟᱹᱦᱤᱞ ᱥᱟᱯᱲᱟᱣ ᱨᱮ ᱩᱱᱩᱫᱩᱜ ᱩᱫᱩᱜᱽ ᱢᱮ",
-       "tog-enotifwatchlistpages": "ᱡᱟᱸᱦᱟᱸ ᱥᱟᱦᱴᱟ ᱥᱮ ᱨᱮᱫ ᱤᱧᱟᱜ ᱧᱮᱞᱚᱜ ᱛᱟᱹᱞᱠᱟᱹ ᱨᱮ ᱢᱮᱱᱟᱜ-ᱟ ᱚᱱᱟᱠᱩ ᱵᱚᱫᱚᱞ ᱞᱮᱱ ᱠᱷᱟᱡ E-mail ᱟᱹᱧᱢᱮ",
+       "tog-enotifwatchlistpages": "ᱡᱟᱸᱦᱟᱸ ᱥᱟᱦᱴᱟ ᱥᱮ ᱨᱮᱫ ᱤᱧᱟᱜ ᱧᱮᱞᱚᱜ ᱛᱟᱹᱞᱠᱟᱹ ᱨᱮ ᱢᱮᱱᱟᱜ-ᱟ ᱚᱱᱟᱠᱩ ᱵᱚᱫᱚᱞ ᱞᱮᱱ ᱠᱷᱟᱡ ᱤ-ᱢᱮᱞ ᱟᱹᱧᱢᱮ",
        "tog-enotifusertalkpages": "ᱤ-ᱢᱮᱞ ᱟᱹᱧᱢᱮ ᱛᱤᱱᱨᱮ ᱤᱧᱟᱜ ᱨᱚᱲ ᱥᱟᱦᱴᱟ ᱵᱚᱫᱚᱞᱜ-ᱟ",
        "tog-enotifminoredits": "ᱥᱟᱦᱴᱟ ᱟᱨ ᱨᱮᱫ ᱠᱩ ᱦᱩᱰᱤᱧ ᱥᱟᱯᱲᱟᱣ ᱞᱮᱱ ᱠᱷᱟᱡ ᱦᱚᱸ E-mail ᱟᱹᱧᱢᱮ",
        "tog-enotifrevealaddr": "ᱰᱷᱟᱹᱨᱣᱟᱜ ᱥᱟᱦᱴᱟᱨᱮ ᱤᱧᱟᱜ e-mail ᱴᱷᱤᱠᱱᱟ ᱥᱚᱫᱚᱨ ᱦᱩᱭᱩᱜ ᱢᱟ",
@@ -53,6 +56,7 @@
        "tog-watchlisthidebots": "ᱧᱮᱞᱚᱜ ᱛᱟᱹᱞᱠᱟᱹ ᱠᱷᱚᱱ ᱵᱚᱴ ᱥᱟᱯᱲᱟᱣᱠᱩ ᱩᱠᱩᱭᱢᱮ",
        "tog-watchlisthideminor": "ᱧᱮᱞᱚᱜ ᱛᱟᱹᱞᱠᱟᱹ ᱠᱷᱚᱱ ᱦᱩᱰᱤᱧ ᱥᱟᱯᱲᱟᱣᱠᱩ ᱩᱠᱩᱭᱢᱮ",
        "tog-watchlisthideliu": "ᱧᱮᱞᱚᱜ ᱛᱟᱹᱞᱠᱟᱹ ᱠᱷᱚᱱ ᱵᱚᱞᱚ ᱟᱠᱟᱱ ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱜ ᱥᱟᱯᱲᱟᱣᱠᱩ ᱩᱠᱩᱭᱢᱮ",
+       "tog-watchlistreloadautomatically": "ᱡᱚᱠᱷᱚᱱ ᱯᱷᱤᱞᱴᱚᱨ ᱵᱚᱫᱚᱞᱚᱜᱼᱟ ᱧᱮᱞᱼᱛᱟᱹᱞᱠᱟ. ᱟᱡ ᱛᱮᱜᱮ ᱞᱟᱫᱮ ᱨᱩᱣᱟᱹᱲ ᱢᱮ (ᱡᱟᱵᱷᱟᱪᱤᱠᱤ ᱞᱟᱹᱠᱛᱤᱼᱟ)",
        "tog-watchlisthideanons": "ᱧᱮᱞᱚᱜ ᱛᱟᱹᱞᱠᱟᱹ ᱠᱷᱚᱱ ᱵᱟᱭ ᱵᱚᱞᱚ ᱟᱠᱟᱱ ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱜ ᱥᱟᱯᱲᱟᱣᱠᱩ ᱩᱠᱩᱭᱢᱮ",
        "tog-watchlisthidepatrolled": "ᱧᱮᱞᱚᱜ ᱛᱟᱹᱞᱠᱟᱹ ᱠᱷᱚᱱ ᱵᱤᱰᱟᱹᱣᱮᱱ ᱥᱟᱯᱲᱟᱣᱠᱩ ᱩᱠᱩᱭᱢᱮ",
        "tog-watchlisthidecategorization": "ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱛᱷᱚᱠ ᱠᱚ ᱫᱟᱱᱟᱝ",
@@ -60,6 +64,8 @@
        "tog-diffonly": "ᱯᱷᱟᱨᱟᱠ ᱨᱮᱭᱟᱜ ᱞᱟᱛᱟᱨ ᱥᱟᱦᱴᱟᱨᱮ ᱵᱟᱵᱚᱛᱠᱩ ᱵᱟᱝ ᱩᱫᱩᱜᱚᱜ ᱢᱟ",
        "tog-showhiddencats": "ᱩᱠᱩ ᱛᱷᱚᱠᱠᱩ ᱩᱫᱩᱜᱽᱢᱮ",
        "tog-norollbackdiff": "rollback ᱛᱟᱭᱚᱢ ᱛᱮ ᱯᱷᱟᱨᱟᱠ ᱟᱞᱚᱢ ᱩᱫᱩᱜᱟ",
+       "tog-useeditwarning": "ᱡᱚᱠᱷᱚᱱ ᱤᱧ ᱥᱟᱯᱲᱟᱣ ᱥᱟᱦᱴᱟ ᱵᱟᱝ ᱨᱟᱠᱷᱟ ᱠᱟᱛᱮᱫᱤᱧ ᱵᱚᱫᱚᱞᱼᱟ ᱥᱚᱱᱛᱚᱨᱤᱧ ᱢᱮ",
+       "tog-prefershttps": "ᱞᱮᱛᱟᱲ ᱵᱚᱞᱚᱱ ᱡᱚᱠᱷᱚᱱ ᱢᱚᱦᱚᱡᱩᱫ ᱠᱷᱚᱸᱡᱟ ᱵᱮᱵᱷᱟᱨ ᱢᱮ",
        "underline-always": "ᱥᱟᱨᱟ ᱜᱷᱟᱹᱲᱤᱡ",
        "underline-never": "ᱛᱤᱥ ᱦᱚᱸ ᱵᱟᱝ",
        "underline-default": "ᱦᱟᱨᱛᱟ ᱥᱮ ᱵᱨᱟᱣᱡᱟᱨ ᱪᱮᱛᱞᱮᱠᱟ ᱛᱟᱸᱦᱮᱸᱠᱟᱱᱟ ᱚᱝᱠᱟᱜᱮ",
@@ -92,7 +98,7 @@
        "september": "ᱥᱮᱯᱴᱮᱢᱵᱚᱨ",
        "october": "ᱚᱠᱴᱚᱵᱚᱨ",
        "november": "ᱱᱚᱵᱷᱮᱢᱵᱚᱨ",
-       "december": "ᱰᱤᱥᱮᱢᱵá±\9fᱨ",
+       "december": "ᱰᱤᱥᱮᱢᱵá±\9aᱨ",
        "january-gen": "ᱡᱟᱱᱩᱣᱟᱨᱤ",
        "february-gen": "ᱯᱷᱮᱵᱽᱨᱩᱣᱟᱨᱤ",
        "march-gen": "ᱢᱟᱨᱪ",
        "anontalk": "ᱨᱚᱲ",
        "navigation": "ᱟᱹᱪᱩᱨᱵᱟᱲᱟ",
        "and": "&#32;ᱟᱨ",
-       "faq": "FAQ",
+       "faq": "ᱵᱹᱞᱹᱠᱹ",
        "actions": "ᱠᱟᱹᱢᱤᱠᱩ",
        "namespaces": "ᱧᱤᱛᱩᱢ ᱡᱟᱜᱟ",
        "variants": "ᱮᱴᱟᱜᱠᱳ",
        "pool-errorunknown": "ᱵᱟᱝ ᱵᱟᱰᱟᱭ ᱦᱩᱲᱟᱹᱜ",
        "poolcounter-usage-error": "ᱵᱮᱵᱷᱟᱨᱟᱜ ᱦᱩᱲᱟᱹᱜᱺ $1",
        "aboutsite": "{{SITENAME}} ᱵᱟᱵᱚᱛ",
-       "aboutpage": "Project: ᱵᱟᱵᱚᱛ",
+       "aboutpage": "Project:ᱵᱟᱵᱚᱛ",
        "copyright": "ᱩᱱᱩᱫᱩᱜ ᱫᱚ ᱧᱟᱢᱚᱜ-ᱟ $1 ᱞᱮᱠᱟᱛᱮ  ᱵᱟᱝᱠᱷᱟᱱ ᱚᱞ ᱛᱟᱦᱮᱱᱟ",
-       "copyrightpage": "{{ns:project}}: ᱮᱠᱛᱤᱭᱟᱨ",
+       "copyrightpage": "{{ns:project}}:ᱮᱠᱛᱤᱭᱟᱨ",
        "currentevents": "ᱱᱤᱛᱚᱜ ᱠᱷᱚᱵᱚᱨ",
-       "currentevents-url": "Project: ᱱᱤᱛᱚᱜ ᱠᱷᱚᱵᱚᱨᱠᱳ",
+       "currentevents-url": "Project:ᱱᱤᱛᱚᱜ ᱠᱷᱚᱵᱚᱨᱠᱳ",
        "disclaimers": "ᱫᱟᱹᱵᱤ ᱵᱟᱱᱩᱜᱠᱳ",
-       "disclaimerpage": "Project: ᱥᱟᱫᱷᱟᱨᱚᱱ ᱫᱟᱹᱵᱤ ᱵᱟᱱᱩᱜᱠᱩ",
+       "disclaimerpage": "Project:ᱥᱟᱫᱷᱟᱨᱚᱱ ᱫᱟᱹᱵᱤ ᱵᱟᱱᱩᱜᱠᱩ",
        "edithelp": "ᱥᱟᱯᱲᱟᱣ ᱜᱚᱸᱲᱚᱸ",
        "helppage-top-gethelp": "ᱜᱚᱸᱲᱚᱸ",
        "mainpage": "ᱢᱩᱬᱩᱛ ᱥᱟᱦᱴᱟ",
        "portal": "ᱜᱩᱥᱴᱤ ᱵᱚᱞᱚᱜ ᱫᱩᱭᱟᱹᱨ",
        "portal-url": "Project:ᱠᱷᱩᱴ ᱵᱚᱞᱚᱱ ᱦᱚᱨ",
        "privacy": "ᱩᱠᱩ ᱮᱠᱛᱤᱭᱟᱨ",
-       "privacypage": "Project: ᱩᱠᱩ ᱮᱠᱛᱤᱭᱟᱨ",
+       "privacypage": "Project:ᱩᱠᱩ ᱮᱠᱛᱤᱭᱟᱨ",
        "badaccess": "ᱟᱹᱭᱫᱟᱹᱨᱤ ᱦᱩᱲᱟᱹᱜ",
        "badaccess-group0": "ᱟᱢ ᱫᱚ ᱚᱠᱟ ᱠᱟᱹᱢᱤ ᱞᱟᱹᱜᱤᱛ ᱮᱢ ᱟᱨᱚᱡᱽ ᱟᱠᱟᱛ, ᱚᱱᱟ ᱠᱟᱹᱢᱤ ᱯᱩᱨᱟᱹᱣ ᱞᱟᱹᱜᱤᱛᱛᱮ ᱟᱹᱭᱫᱟᱹᱨᱤ ᱫᱚ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾",
        "badaccess-groups": "ᱟᱢ ᱫᱚ ᱚᱠᱟ ᱠᱟᱹᱢᱤᱢ ᱢᱮᱱᱡᱚᱝᱠᱟᱱ ᱚᱱᱟ ᱫᱚ ᱠᱷᱟᱹᱞᱤ {{PLURAL:$2 ᱨᱟᱹᱥᱤᱭᱟᱹᱠᱚᱨᱮ ᱱᱚᱣᱟ ᱨᱟᱹᱥᱤᱭᱟᱹ ᱨᱮᱭᱟᱜ ᱢᱤᱫᱴᱮᱱ ᱨᱮ}} ᱢᱤᱫᱴᱮᱱ ᱵᱮᱵᱷᱟᱨᱤᱡ ᱥᱟᱯᱲᱟᱣ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ: $1᱾",
        "versionrequired": "ᱢᱤᱰᱤᱭᱟ ᱩᱭᱠᱤ ᱨᱮᱭᱟᱜ $1 ᱱᱟᱣᱟ ᱵᱷᱟᱨᱥᱚᱱ ᱡᱟᱹᱨᱩᱲᱟ",
-       "versionrequiredtext": "Version $1 of ᱢᱤᱰᱤᱭᱟ ᱣᱤᱠᱤ ᱫᱚ ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱵᱮᱵᱷᱟᱨ ᱞᱟᱜᱟᱣᱭᱟ᱾\nᱧᱮᱞᱢᱮ [[Special:Version|version page]]᱾",
+       "versionrequiredtext": "ᱵᱷᱟᱨᱥᱚᱱ $1 ᱨᱮᱱᱟᱜ ᱢᱤᱰᱤᱭᱟ ᱣᱤᱠᱤ ᱫᱚ ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱵᱮᱵᱷᱟᱨ ᱞᱟᱜᱟᱣᱭᱟ᱾\nᱧᱮᱞᱢᱮ [[Special:Version|ᱵᱷᱟᱨᱥᱚᱱ ᱥᱟᱦᱴᱟ]]᱾",
        "ok": "ᱴᱷᱤᱠ ᱜᱮᱭᱟ",
        "retrievedfrom": "\"$1\" ᱠᱷᱚᱱ ᱧᱟᱢ ᱟᱹᱜᱩᱭ",
        "youhavenewmessages": "{{PLURAL:$3|ᱟᱢᱟᱜ ᱢᱮᱱᱟᱜ-ᱟ}} $1 ($2)᱾",
        "editold": "ᱥᱟᱯᱲᱟᱣ",
        "viewsourceold": "ᱯᱷᱮᱰᱟᱛ ᱧᱮᱞ",
        "editlink": "ᱥᱟᱯᱲᱟᱣ",
-       "viewsourcelink": "ᱯᱷᱮᱰá±\9fá±\9b á±¦á±\9aᱨ á±§á±®á±\9eᱢᱮ",
+       "viewsourcelink": "ᱯᱷᱮᱰᱟᱛ ᱧᱮᱞᱢᱮ",
        "editsectionhint": "ᱥᱟᱯᱲᱟᱣ ᱡᱟᱭᱜᱟ: $1",
        "toc": "ᱩᱱᱩᱫᱩᱜ",
        "showtoc": "ᱥᱚᱫᱚᱨ",
        "confirmable-yes": "ᱦᱮᱸ",
        "confirmable-no": "ᱵᱟᱝ",
        "thisisdeleted": "ᱧᱮᱞ ᱥᱮ ᱨᱩᱭᱟᱹᱲ ᱫᱚᱲᱦᱟ $1?",
-       "viewdeleted": "$1 á±§á±®á±\9eᱢᱮ",
+       "viewdeleted": "$1 á±§á±®á±\9eá±\9fá±¢?",
        "restorelink": "{{PLURAL:$1 ᱢᱤᱫᱴᱮᱱ ᱚᱪᱚᱜ ᱜᱤᱰᱤ ᱥᱟᱯᱲᱟᱣ $1 ᱜᱟᱱ ᱩᱫᱩᱜᱽ ᱜᱤᱰᱤ ᱥᱟᱯᱲᱟᱣ}}",
        "feedlinks": "ᱟᱡᱚ:",
        "feed-invalid": "ᱜᱟᱨᱦᱟᱠ feed ᱨᱮᱭᱟᱜ ᱨᱚᱠᱚᱢ ᱫᱚ ᱚᱝᱞᱮᱠᱟᱛᱮ ᱵᱟᱝᱠᱟᱱᱟ᱾",
        "feed-unavailable": "ᱥᱤᱱᱰᱤᱠᱮᱥᱚᱱ ᱟᱡᱚ ᱠᱩᱫᱚ ᱵᱟᱝ ᱧᱟᱢᱚᱜ ᱠᱟᱱᱟ",
-       "site-rss-feed": "$1 RSS feed",
+       "site-rss-feed": "$1 ᱨᱥᱥ ᱯᱷᱤᱰ",
        "site-atom-feed": " $1 ᱡᱚᱢ ᱚᱪᱚ",
-       "page-rss-feed": "\"$1\" RSS feed",
+       "page-rss-feed": "\"$1\" ᱨᱥᱥ ᱯᱷᱤᱰ",
        "page-atom-feed": " $1 ᱡᱚᱢ ᱚᱪᱚ",
        "red-link-title": "$1 (ᱱᱤᱭᱟᱹ ᱥᱟᱦᱴᱟ ᱫᱚ ᱵᱟᱹᱱᱩᱜ-ᱟ)",
        "sort-descending": "ᱩᱞᱴᱟᱹᱣᱛᱮ ᱥᱟᱡᱟᱣ",
        "sort-ascending": "ᱥᱟᱢᱴᱟᱣ ᱛᱮ",
        "nstab-main": "ᱥᱟᱦᱴᱟ",
        "nstab-user": "ᱵᱮᱵᱦᱟᱹᱨᱤᱭᱟᱹᱜ ᱥᱟᱦᱴᱟ",
-       "nstab-media": "Media ᱥᱟᱦᱴᱟ",
+       "nstab-media": "ᱢᱤᱰᱤᱭᱟ ᱥᱟᱦᱴᱟ",
        "nstab-special": "ᱚᱥᱚᱠᱟᱭᱛᱮᱭᱟᱜ ᱥᱟᱦᱴᱟ",
        "nstab-project": "ᱯᱨᱚᱡᱮᱠᱴ ᱥᱟᱦᱴᱟ",
        "nstab-image": "ᱨᱮᱫ",
        "nospecialpagetext": "<strong>ᱟᱢ ᱫᱚ ᱡᱟᱦᱟᱸ ᱥᱟᱦᱴᱟ ᱞᱟᱹᱜᱤᱫ ᱮᱢ ᱱᱮᱦᱚᱨ ᱟᱠᱟᱫᱟ ᱚᱱᱟᱫᱚ ᱵᱟᱹᱱᱩᱜ-ᱟ </strong>\nᱡᱟᱦᱟᱸ ᱥᱟᱦᱴᱟᱠᱩ ᱱᱚᱸᱰᱮ ᱢᱮᱱᱟᱜ-ᱟ ᱚᱱᱟᱨᱮᱱᱟᱜ ᱛᱟᱹᱞᱠᱟᱹ ᱱᱚᱸᱰᱮᱢ ᱧᱟᱢᱟ [[Special:SpecialPages|{{int:specialpages}}]]᱾",
        "error": "ᱦᱩᱲᱟᱹᱜ",
        "databaseerror": "ᱰᱟᱴᱟᱵᱮᱡᱽ ᱦᱩᱲᱟᱹᱜ",
+       "databaseerror-textcl": "ᱰᱟᱴᱟᱵᱮᱡᱽ ᱥᱮᱱᱫᱽᱨᱟ ᱵᱟᱹᱲᱤᱡ ᱟᱠᱟᱱᱟ᱾",
        "databaseerror-query": "ᱠᱩᱠᱞᱤ: $1",
        "databaseerror-function": "ᱠᱟᱹᱢᱤ: $1",
        "databaseerror-error": "ᱦᱩᱲᱟᱹᱜ: $1",
        "viewyourtext": "ᱟᱢ ᱫᱚ <strong>'''ᱟᱢᱟᱜ ᱥᱟᱯᱲᱟᱣ</strong>''' ᱥᱟᱦᱴᱟ ᱧᱮᱞ ᱟᱨ ᱮᱢ ᱠᱚᱯᱤ ᱦᱟᱛᱟᱣ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ:",
        "protectedinterface": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱨᱮᱭᱟᱜ ᱵᱟᱵᱚᱛᱠᱚ ᱫᱚ ᱣᱤᱠᱤ ᱥᱚᱯᱷᱴᱚᱭᱟᱨ ᱨᱮᱭᱟᱜ ᱢᱤᱫᱴᱮᱱ ᱤᱱᱴᱟᱨᱯᱷᱮᱥ ᱠᱷᱚᱵᱚᱨᱮ ᱮᱢᱟ, ᱚᱱᱟᱛᱮ ᱱᱚᱣᱟ ᱫᱟ ᱨᱩᱠᱷᱤᱭᱟᱹ ᱫᱚᱦᱚ ᱦᱩᱭᱠᱟᱱᱟ᱾",
        "cascadeprotected": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱫᱚ ᱥᱟᱯᱲᱟᱣ ᱠᱷᱚᱱ ᱨᱩᱠᱷᱤᱭᱟᱹᱨᱮ ᱢᱮᱱᱟᱜ-ᱟ, ᱠᱟᱨᱚᱱ ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱫᱚ ᱞᱟᱛᱟᱨ ᱨᱮᱭᱟᱜ {{PLURAL:$1 ᱜᱟᱱ ᱥᱟᱦᱴᱟ ᱨᱮᱭᱟᱜ ᱜᱟᱱ ᱥᱟᱦᱴᱟ ᱨᱮᱭᱟᱜ}} ᱵᱷᱤᱛᱨᱤᱨᱮ, ᱚᱠᱟ ᱥᱟᱦᱴᱟ ᱫᱚ (cascading) ᱛᱮ ᱨᱩᱠᱷᱤᱭᱟᱹ ᱢᱮᱱᱟᱜ-ᱟ:\n$2",
-       "namespaceprotected": "ᱥᱟᱦᱴᱟ ᱡᱚᱱᱚᱲ ᱞᱟᱹᱜᱤᱛ ᱟᱢᱟᱜ ᱟᱹᱭᱫᱟᱹᱨᱤ ᱫᱚ ᱵᱟᱹᱱᱩᱜ ᱛᱟᱢᱟ '''$1''' ᱧᱩᱛᱩᱢ ᱡᱟᱭᱜᱟ᱾",
+       "namespaceprotected": "ᱥᱟᱦᱴᱟ ᱡᱚᱱᱚᱲ ᱞᱟᱹᱜᱤᱛ ᱟᱢᱟᱜ ᱟᱹᱭᱫᱟᱹᱨᱤ ᱫᱚ ᱵᱟᱹᱱᱩᱜ ᱛᱟᱢᱟ <strong>$1</strong> ᱧᱩᱛᱩᱢ ᱡᱟᱭᱜᱟ᱾",
+       "customcssprotected": "ᱱᱤᱭᱟᱹ CSS ᱥᱟᱠᱟᱢ ᱥᱟᱯᱲᱟᱣ ᱵᱟᱝ ᱜᱟᱱᱚᱜ ᱛᱟᱢᱟ, ᱪᱮᱫᱟᱜ ᱥᱮ ᱱᱤᱭᱟᱹ ᱫᱚ ᱮᱴᱟᱜ ᱦᱚᱲ ᱟᱭᱟᱜ ᱥᱮᱴᱤᱜ ᱨᱮᱭ ᱫᱚᱦᱚ ᱟᱠᱟᱫᱟ᱾",
+       "mycustomcssprotected": "ᱱᱤᱭᱟᱹ CSS ᱥᱟᱠᱟᱢ ᱥᱟᱯᱲᱟᱣ ᱵᱟᱝ ᱜᱟᱱᱚᱜ ᱛᱟᱢᱟ᱾",
+       "mycustomjsprotected": "ᱱᱤᱭᱟᱹ JavaScript ᱥᱟᱠᱟᱢ ᱥᱟᱯᱲᱟᱣ ᱵᱟᱝ ᱜᱟᱱᱚᱜ ᱛᱟᱢᱟ᱾",
+       "mypreferencesprotected": "ᱟᱢᱟᱜ ᱠᱩᱥᱤᱠᱚ ᱥᱟᱯᱲᱟᱣ ᱵᱟᱝ ᱜᱟᱱᱚᱜ ᱛᱟᱢᱟ᱾",
        "ns-specialprotected": "ᱟᱥᱚᱠᱟᱭ ᱛᱮᱭᱟᱜ ᱥᱟᱦᱴᱟᱠᱚ ᱥᱟᱯᱲᱟᱣ ᱨᱮᱭᱟᱜ ᱟᱹᱭᱫᱟᱹᱨᱤ ᱫᱚ ᱟᱢᱟᱜ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾",
        "exception-nologin": "ᱵᱟᱢ ᱵᱚᱞᱚ ᱟᱠᱟᱱᱟ",
        "exception-nologin-text": "ᱫᱟᱭᱟᱠᱟᱛᱮ ᱵᱚᱞᱚᱱ ᱢᱮ ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟ ᱨᱮ ᱡᱟᱦᱟᱸᱱ ᱠᱟᱹᱢᱤ ᱞᱟᱹᱜᱤᱫ",
-       "virus-badscanner": "Vul konfigareson: baṅ orom vairas skenar: \"$1\"",
-       "virus-scanfailed": "Esken baṅ hoelena (Code $1)",
-       "virus-unknownscanner": "Baṅ urum anṭvayras:",
+       "virus-badscanner": "ᱵᱟᱹᱲᱤᱡ ᱠᱚᱱᱯᱷᱤᱜᱟᱨᱮᱥᱚᱱ: ᱵᱟᱝ ᱩᱨᱩᱢ ᱵᱷᱟᱭᱨᱟᱥ ᱮᱥᱠᱮᱱᱟᱨ: \"$1\"",
+       "virus-scanfailed": "ᱮᱥᱠᱮᱱ ᱵᱟᱝ ᱦᱩᱭᱞᱮᱱᱟ (Code $1)",
+       "virus-unknownscanner": "ᱵᱟᱝ ᱩᱨᱩᱢ ᱮᱱᱴᱤᱵᱷᱟᱭᱨᱟᱥ:",
        "cannotlogoutnow-title": "ᱱᱤᱛ ᱚᱰᱚᱠ ᱵᱟᱭ ᱜᱟᱱᱚᱜ ᱠᱟᱱᱟ",
        "cannotlogoutnow-text": "ᱚᱰᱚᱠᱚᱜ ᱫᱚ ᱵᱟᱭ ᱜᱟᱱᱚᱜᱼᱟ ᱡᱚᱠᱷᱚᱱ $1 ᱵᱮᱵᱷᱟᱨᱚᱜ ᱠᱟᱱᱟ",
        "welcomeuser": "ᱥᱟᱹᱜᱩᱱ ᱫᱟᱨᱟᱢ, $1!",
        "cannotloginnow-text": "ᱵᱚᱞᱚᱱ ᱫᱚ ᱵᱟᱭ ᱜᱟᱱᱚᱜᱼᱟ ᱡᱚᱠᱷᱚᱱ $1 ᱵᱮᱵᱷᱟᱨᱚᱜ ᱠᱟᱱᱟ",
        "cannotcreateaccount-title": "ᱮᱠᱟᱶᱩᱴ ᱵᱟᱝ ᱛᱮᱭᱟᱨᱞᱮᱱᱟ",
        "yourdomainname": "ᱟᱢᱟᱜ ᱧᱩᱛᱩᱢ:",
-       "externaldberror": "Hoe daṛeyaḱa jahan bahre reaḱ jacaeaḱ ḍaṭabes vul hoeakana se amaḱ bahre reaḱ ekaunṭ do nahaḱ halot aguire ạidạri bạnuḱa.",
+       "externaldberror": "ᱦᱩᱭ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ ᱡᱟᱸᱦᱟᱸᱱ ᱵᱟᱨᱦᱮ ᱨᱮᱭᱟᱜ ᱡᱟᱪᱟᱭᱤᱡ ᱰᱟᱴᱟᱵᱮᱥ ᱵᱷᱩᱞ ᱦᱩᱭᱠᱟᱱᱟ ᱥᱮ ᱟᱢᱟᱜ ᱵᱟᱨᱦᱮ ᱨᱮᱭᱟᱜ ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱷᱟ ᱫᱚ ᱱᱟᱦᱟᱜ ᱦᱟᱞᱚᱛ ᱨᱩᱣᱟᱹᱲ ᱟᱹᱭᱫᱟᱹᱨᱤ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾",
        "login": "ᱵᱚᱞᱚᱜ ᱢᱮ",
+       "login-security": "ᱟᱢᱟᱜ ᱩᱯᱲᱩᱢ ᱵᱤᱰᱟᱹᱣ ᱢᱮ",
        "nav-login-createaccount": "ᱵᱚᱞᱚᱜ ᱫᱩᱣᱟᱹᱨ / ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱟ ᱛᱮᱭᱟᱨᱢᱮ",
        "logout": "ᱚᱰᱚᱠᱚᱜ ᱢᱮ",
        "userlogout": "ᱚᱰᱚᱠᱚᱜ ᱢᱮ",
        "notloggedin": "ᱵᱟᱢ ᱵᱚᱞᱚ ᱟᱠᱟᱱᱟ",
        "userlogin-noaccount": "ᱠᱷᱟᱛᱟ ᱵᱟᱹᱱᱩᱜ ᱛᱟᱢᱟ?",
-       "userlogin-joinproject": "á± á±·á±\9aᱸᱡá±\9f {{SITENAME}}",
+       "userlogin-joinproject": "ᱥᱮá±\9eᱮᱫá±\9aá±\9c á±¢á±® {{SITENAME}} á±¨á±®",
        "createaccount": "ᱠᱷᱟᱛᱟ ᱛᱮᱭᱟᱨᱢᱮ",
        "userlogin-resetpassword-link": "ᱟᱢᱟᱜ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱦᱤᱲᱤᱧ ᱠᱮᱫᱟᱢ?",
        "userlogin-helplink2": "ᱵᱚᱞᱚᱜ ᱠᱷᱟᱹᱛᱤᱨ ᱜᱚᱸᱲᱚᱸ",
+       "userlogin-loggedin": "ᱟᱢ ᱫᱚ {{GENDER:$1|$1}} ᱞᱮᱠᱟᱛᱮ ᱵᱚᱞᱚᱜᱮ ᱢᱮᱱᱟᱢᱟ᱾ ᱮᱴᱟᱜ ᱦᱚᱲ ᱞᱮᱠᱟᱛᱮ ᱵᱚᱞᱚ ᱞᱟᱹᱜᱤᱫ ᱞᱟᱛᱟᱨ ᱨᱮᱱᱟᱜ ᱯᱷᱚᱨᱢ ᱵᱮᱣᱦᱟᱨ ᱢᱮ᱾",
+       "userlogin-reauth": "ᱟᱢ {{GENDER:$1|$1}} ᱠᱟᱱᱟᱢ ᱚᱱᱟ ᱵᱤᱰᱟᱹᱣ ᱞᱟᱹᱜᱤᱫ ᱛᱮ ᱫᱚᱥᱟᱨ ᱛᱮ ᱵᱚᱞᱚᱜ ᱢᱮ᱾",
        "userlogin-createanother": "ᱮᱴᱟᱜ ᱠᱷᱟᱛᱟ ᱛᱮᱭᱟᱨᱢᱮ",
        "createacct-emailrequired": "ᱤᱢᱮᱞ ᱵᱩᱴᱟᱹ",
        "createacct-emailoptional": "ᱤᱢᱮᱞ ᱴᱷᱤᱠᱱᱟ (ᱟᱢᱠᱩᱥᱤ)",
        "createacct-benefit-body1": "{{PLURAL:$1|ᱥᱟᱯᱲᱟᱣ|ᱥᱟᱯᱲᱟᱣᱠᱚ}}",
        "createacct-benefit-body2": "{{PLURAL:$1|ᱥᱟᱦᱴᱟ|ᱥᱟᱦᱴᱟᱠᱳ}}",
        "createacct-benefit-body3": "ᱱᱮᱛᱟᱨ {{PLURAL:$1|ᱮᱱᱮᱢᱤᱭᱟᱹ|ᱮᱱᱮᱢᱤᱭᱟᱹᱠᱚ}}",
-       "badretype": "Am do okaṭaḱ oku nambarkom em keda ona do baṅ milạolena.",
-       "userexists": "Laṛcaṛicaḱ ńutum em hoyena ona do beohar hoyakana.\nDayakatet́ eṭagaḱ ńutum bachaome.",
+       "badretype": "ᱟᱢ ᱫᱚ ᱚᱠᱟᱴᱟᱜ ᱩᱠᱩ ᱱᱚᱢᱵᱚᱨᱠᱚᱢ ᱮᱢ ᱠᱟᱫᱟ ᱚᱱᱟ ᱫᱚ ᱵᱟᱝ ᱢᱤᱞᱟᱹᱜ ᱠᱟᱱᱟ᱾",
+       "userexists": "ᱞᱟᱲᱪᱟᱹᱨᱤᱡ ᱧᱩᱛᱩᱢ ᱮᱢ ᱦᱩᱭᱱᱟ ᱚᱱᱟ ᱫᱚ ᱵᱮᱵᱷᱟᱨ ᱦᱩᱭ ᱟᱠᱟᱱᱟ᱾\nᱫᱟᱭᱟᱠᱟᱛᱮᱛ ᱮᱴᱟᱜ-ᱟ ᱧᱩᱛᱩᱢ ᱵᱟᱪᱷᱟᱣᱢᱮ᱾",
        "loginerror": "ᱵᱷᱤᱛᱨᱤ ᱵᱚᱞᱚᱜ ᱦᱩᱲᱟᱹᱜ",
        "createacct-error": "ᱠᱷᱟᱛᱟ ᱛᱮᱭᱟᱨ ᱦᱩᱲᱟᱹᱜ",
        "createaccounterror": "ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱟ ᱵᱟᱝ ᱛᱮᱭᱟᱨᱠᱟᱱᱟ: $1",
        "nocookiesnew": "ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱜ ᱦᱤᱥᱟᱹᱵ ᱛᱮᱭᱟᱨ ᱦᱩᱭ ᱞᱮᱱᱟ, ᱢᱮᱱᱠᱷᱟᱱ ᱟᱢᱫᱚ ᱱᱤᱛ ᱫᱷᱟᱹᱵᱤᱡ ᱵᱟᱢ ᱵᱚᱞᱚᱣᱠᱟᱱᱟ᱾ {{SITENAME}} ᱨᱮ ᱠᱩᱠᱤᱠᱚ ᱵᱮᱵᱦᱟᱨ ᱠᱟᱛᱮ ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱜ ᱦᱤᱥᱟᱹᱵᱨᱮ ᱵᱚᱞᱚᱣᱟ᱾\nᱟᱢᱟᱜ ᱠᱩᱠᱤᱠᱚ ᱵᱚᱸᱫᱚ ᱦᱩᱭᱠᱟᱱᱟ᱾\nᱫᱟᱭᱟᱠᱟᱛᱮ ᱠᱩᱠᱤᱠᱚ ᱡᱷᱤᱡ ᱢᱮ, ᱚᱱᱟ ᱛᱟᱭᱚᱢ ᱟᱢᱟᱜ ᱱᱟᱣᱟ ᱵᱮᱵᱦᱟᱨᱤᱡ ᱧᱤᱛᱩᱢ ᱟᱨ ᱩᱠᱩ ᱮᱞᱥᱚᱝ ᱵᱮᱵᱦᱟᱨ ᱠᱟᱛᱮᱡ ᱱᱚᱣᱟ ᱦᱤᱥᱟᱹᱵᱨᱮ ᱵᱚᱞᱚᱜᱢᱮ᱾",
-       "nocookieslogin": "{{SITENAME}} re kuki hotete beoharićaḱ bhitri boloḱ do hoyoḱa. Amaḱ sendrare kuki bondo menaḱa. Kuki cạlu kate arhõ kurumuṭuimẽ.",
+       "nocookieslogin": "{{SITENAME}} ᱫᱚ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱵᱚᱞᱚᱜ ᱞᱟᱹᱜᱤᱫ ᱠᱩᱠᱤᱡᱽ ᱠᱚᱭ ᱵᱮᱵᱷᱟᱨᱟ ᱾\nᱟᱢ ᱠᱩᱠᱤᱡᱽ ᱮᱢ ᱵᱚᱸᱫᱽ ᱟᱠᱟᱫᱼᱟ ᱾\nᱚᱱᱟᱠᱚ ᱦᱚᱨ ᱟᱲᱟᱜᱟᱜ ᱢᱮ ᱟᱨ ᱫᱚᱲᱦᱟ ᱵᱤᱰᱟᱹᱣ ᱾",
        "nocookiesfornew": "Beoharićaḱ ekaunṭ do baṅ tear akana, Cedaḱ je noa ńamoḱ jaega babote ale do bale uruma.\nAle do baḍae ocolem amaḱ kuki doe kạmikana, sakam do arhõ rakaṕ lạgit́te kurumuṭuemẽ.",
-       "noname": "Am do asol beoharićaḱ ńutum ṭhikte bam emakada.",
-       "loginsuccesstitle": "ᱵᱷᱤá±\9bᱨᱤ á±µá±\9aá± á±\9fá±\9c á±«á±\9a á±¢á±\9aᱡᱽá±\9bá±®á±\9cá±® á±¯á±©á±¨á±\9fᱹᱣᱱá±\9f",
-       "loginsuccess": "'''Am do nitge \"$1\" ńutumte {{SITENAME}} rem bolo akana.'''",
+       "noname": "ᱟᱢ ᱥᱩᱦᱤᱛ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱧᱩᱛᱩᱢ ᱵᱟᱢ ᱟᱫᱮᱨ ᱟᱠᱟᱫᱼᱟ ᱾",
+       "loginsuccesstitle": "á±µá±\9aá±\9eá±\9a á±\9fᱠᱮᱱá±\9fá±¢",
+       "loginsuccess": "<strong>ᱟᱢ ᱫᱚ ᱱᱤᱛᱜᱮ \"$1\" ᱧᱩᱛᱩᱢᱛᱮ {{SITENAME}} ᱨᱮᱢ ᱵᱚᱞᱚ ᱟᱠᱟᱱᱟ᱾</strong>",
        "nosuchuser": "\"$1\" ᱧᱩᱛᱩᱢᱟᱱ ᱡᱟᱸᱦᱟᱱ ᱵᱮᱵᱷᱟᱨᱤᱡ ᱵᱟᱹᱱᱩᱭᱟ᱾ ᱵᱮᱵᱷᱟᱨᱤᱡ ᱧᱩᱛᱩᱢ ᱫᱚ ᱵᱩᱠᱨᱩᱜᱮᱭᱟ᱾ ᱟᱢᱟᱜ ᱵᱟᱱᱟᱱᱠᱩ  ᱧᱮᱞᱢᱮ, ᱥᱮ [[Special:CreateAccount|ᱱᱟᱣᱟ ᱢᱤᱫᱴᱮᱱ ᱮᱠᱟᱶᱩᱴ ᱛᱮᱭᱟᱨᱢᱮ]]᱾",
-       "nosuchusershort": "\"$1\" ńutuman jahãe beoharko do banuḱkoa. Ńutum reaḱ banan biḍaomẽ.",
-       "nouserspecified": "Am do pusṭaote laṛcaṛićaḱ ńutum em hoyoḱtama.",
-       "login-userblocked": "Nui laṛcaṛic doe esetgea. bhitri boloḱ ạidạri bań emoḱ kana.",
-       "wrongpassword": "ᱵᱮᱷá±\9fᱨᱤᱭá±\9fá±\9c á±§á±©á±\9bᱩᱢ á±¥á±® á±©á± á±© á±±á±\9fᱢᱵá±\9fᱨ á±µá±\9fá±\9d á±¢á±¤á±\9eá±\9fá±¹á±\9c á± á±\9fá±±á±\9fá±¾ ᱫᱚᱲᱦᱟᱛᱮ ᱠᱩᱨᱩᱢᱩᱴᱩᱭᱢᱮ᱾",
-       "wrongpasswordempty": "Em hoyen oku nambar do cetge banuḱa.\nDaya katet́ arhõ kurumuṭuyme.",
-       "passwordtooshort": "Uku nambar do {{PLURAL:$1 1 horop reaḱ $1 horop reaḱ}} mudre hoyoḱ jạruṛa.",
-       "password-name-match": "Amaḱ oku nambar do amaḱ ńutum khon eṭaḱ hoyoḱ jạruṛtama.",
-       "password-login-forbidden": "Noa laṛcaṛicaḱ ńutum ar oku nambar do ạnlekate baṅkana.",
+       "nosuchusershort": "\"$1\" ᱧᱩᱛᱩᱢᱟᱱ ᱡᱟᱸᱦᱟᱸᱭ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹᱠᱳ ᱫᱚ ᱵᱟᱹᱱᱩᱜ ᱠᱳᱣᱟ᱾\nᱧᱩᱛᱩᱢ ᱨᱮᱭᱟᱜ ᱵᱟᱱᱟᱱ ᱵᱤᱰᱟᱹᱣᱢᱮ᱾",
+       "nouserspecified": "ᱟᱢ ᱫᱚ ᱯᱩᱥᱴᱟᱹᱣᱛᱮ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱜ ᱧᱩᱛᱩᱢ ᱮᱢ ᱦᱩᱭᱩᱛᱟᱢᱟ᱾",
+       "login-userblocked": "ᱱᱩᱭ ᱵᱮᱵᱷᱟᱨᱤᱭᱟ ᱫᱚᱭ ᱮᱥᱮᱫᱜᱮᱭᱟ᱾ ᱵᱷᱤᱛᱨᱤ ᱵᱚᱞᱚᱜ ᱟᱹᱭᱫᱟᱹᱨᱤ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾",
+       "wrongpassword": "á±\9fᱫᱮᱨá±\9fá± á±\9fᱫ á±µá±®á±·á±\9fᱨᱤᱭá±\9fá±¹ á±§á±©á±\9bᱩᱢ á±¥á±® á±«á±\9fá±±á±\9fá±\9d á±¥á±\9fá±µá±\9fᱫᱽ á±¦á±©á±²á±\9fá±¹á±\9c á±\9cᱮᱭá±\9fá±¾\nᱫᱚᱲᱦᱟᱛᱮ ᱠᱩᱨᱩᱢᱩᱴᱩᱭᱢᱮ᱾",
+       "wrongpasswordempty": "ᱮᱢ ᱦᱩᱭᱮᱱ ᱩᱠᱩ ᱱᱚᱢᱵᱚᱨ ᱨᱮ ᱫᱚ ᱪᱮᱫ ᱜᱮ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾\nᱫᱟᱭᱟᱠᱟᱛᱮ ᱟᱨᱦᱚᱸ ᱠᱩᱨᱩᱢᱩᱴᱩᱭᱢᱮ᱾",
+       "passwordtooshort": "ᱩᱠᱩ ᱱᱚᱢᱵᱚᱨ ᱫᱚ {{PLURAL:$1 1 ᱦᱚᱨᱚᱯ ᱨᱮᱭᱟᱜ $1 ᱦᱚᱨᱚᱯ ᱨᱮᱭᱟᱜ}} ᱢᱩᱫᱨᱮ ᱦᱩᱭᱩᱜ ᱡᱟᱹᱨᱩᱲᱟ᱾",
+       "password-name-match": "ᱟᱢᱟᱜ ᱩᱠᱩ ᱱᱚᱢᱵᱚᱨ ᱫᱚ ᱟᱢᱟᱜ ᱧᱩᱛᱩᱢ ᱠᱷᱚᱱ ᱮᱴᱟᱜ ᱦᱩᱭᱩᱜ ᱡᱟᱹᱨᱩᱲᱟ᱾",
+       "password-login-forbidden": "ᱱᱚᱣᱟ ᱵᱮᱵᱷᱟᱨᱤᱭᱟ ᱧᱩᱛᱩᱢ ᱟᱨ ᱩᱠᱩ ᱱᱚᱢᱵᱚᱨ ᱫᱚ ᱮᱠᱟᱞᱛᱮ ᱵᱟᱝ ᱜᱟᱱᱚᱜ-ᱟ᱾",
        "mailmypassword": "ᱱᱟᱣᱟᱛᱮ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱮᱢ",
-       "passwordremindertitle": "á±±á±\9fá±£á±\9f á±±á±¤á±\9b á±\9eá±\9fá±¹á±\9cᱤá±\9b ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ {{SITENAME}} ᱞᱟᱹᱜᱤᱛ ᱛᱮ",
-       "noemail": "\"$1\" beoharić lạgit́te do jahan e-mail ṭhikana rukhiyạ doho bạnuḱa.",
-       "noemailcreate": "Am do mitṭen jewet e-mail ṭhikạna em jaruṛ menaḱtama.",
-       "passwordsent": "\"$1\" ṭhikạnate resṭariyen e-mail lạgit́te mitṭen oku nambar em hoyena.\nDaya kate ńam porte arhõ bhitri boloḱme.",
+       "passwordremindertitle": "á±±á±\9fá±£á±\9f á± á±\9fᱹᱢᱤᱪá±\9aá±²á±\9f ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ {{SITENAME}} ᱞᱟᱹᱜᱤᱛ ᱛᱮ",
+       "noemail": "\"$1\" ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱞᱟᱹᱜᱤᱫᱛᱮ ᱫᱚ ᱤ-ᱢᱮᱞ ᱴᱷᱤᱠᱟᱱᱟ ᱨᱩᱠᱷᱤᱭᱟᱹ ᱫᱚᱦᱚ ᱵᱟᱹᱱᱩᱜᱼᱟ᱾",
+       "noemailcreate": "ᱟᱢ ᱫᱚ ᱢᱤᱫᱴᱮᱱ ᱡᱤᱣᱟᱹᱛ ᱤ-ᱢᱮᱞ ᱴᱷᱤᱠᱟᱱᱟ ᱮᱢ ᱡᱟᱹᱨᱩᱲ ᱢᱮᱱᱟᱜ ᱛᱟᱢᱟ᱾",
+       "passwordsent": "ᱢᱤᱫ ᱱᱟᱶᱟ ᱫᱟᱱᱟᱝᱥᱟᱵᱟᱫᱽ \"$1\" ᱞᱟᱹᱜᱤᱫ ᱨᱤᱥᱴᱨᱤ ᱟᱠᱟᱱ ᱤᱢᱮᱞ ᱨᱮ ᱠᱳᱞ ᱮᱱᱟ ᱾\nᱧᱟᱢ ᱠᱮᱫ ᱛᱟᱭᱚᱢ ᱫᱚᱲᱦᱟ ᱵᱚᱞᱚᱱ ᱢᱮ ᱾",
        "blocked-mailpassword": "ᱟᱢᱟᱜ IP ᱴᱷᱤᱠᱟᱹᱱᱟ ᱠᱷᱚᱱ ᱥᱟᱯᱲᱟᱣ ᱰᱚᱱᱫᱽ ᱜᱮᱭᱟ᱾ ᱚᱱᱟᱛᱮ ᱱᱚᱣᱟ ᱴᱷᱤᱠᱟᱹᱱᱟ ᱵᱟᱝ ᱵᱮᱵᱷᱟᱨ ᱠᱟᱛᱮ ᱩᱠᱩ ᱱᱟᱢᱵᱟᱨ ᱨᱩᱣᱟᱹᱲ ᱵᱟᱝ ᱦᱩᱭᱩᱜ-ᱟ᱾",
-       "mailerror": "E-mail kulte eṭkẽṭõrẽ: $1",
+       "mailerror": "E-mail ᱠᱩᱞᱛᱮ ᱮᱴᱠᱮᱴᱚᱸᱲᱮ: $1",
        "emailauthenticated": "ᱟᱢᱟᱜ ᱤ-ᱢᱮᱞ ᱴᱷᱤᱠᱟᱹᱱᱟ ᱫᱚ $2 ᱛᱟᱹᱨᱤᱠᱷ ᱨᱮᱭᱟᱜ $3 ᱨᱮ ᱡᱟᱹᱦᱤᱨᱮᱱᱟ᱾",
        "emailnotauthenticated": "ᱟᱢᱟᱜ e-mail ᱨᱮᱭᱟᱜ ᱴᱷᱤᱠᱟᱹᱱᱟ ᱫᱚ <strong> ᱱᱤᱛ ᱦᱚᱸ ᱵᱟᱝ ᱡᱟᱹᱪᱟᱹᱭ ᱟᱠᱟᱱᱟ </strong> ᱞᱟᱛᱟᱨ ᱨᱮᱭᱟᱜ features ᱞᱟᱹᱜᱤᱛᱛᱮ ᱡᱟᱸᱦᱟᱸᱱ e-mail ᱫᱚ ᱵᱟᱝᱠᱩᱞᱟᱠᱳ᱾",
-       "noemailprefs": "Noa features ko kạmie ocoy lạgit́te mit́ṭen e-mail ṭhikạna dohoe hoyoḱa.",
-       "emailconfirmlink": "Amaḱ e-mail ṭhikana do sạriyme.",
-       "invalidemailaddress": "Noa e-mail ṭhikạna do baṅ hataoa, karon noa formeṭ do pusṭạote baṅ em akana. Dayakate pusṭao formeṭte ṭhikạna emmẽ, se khet do khạliemẽ.",
-       "cannotchangeemail": "Ekaunṭ e-mail ṭhikạnakodo noa wiki re baṅ bodoloḱ kana.",
-       "emaildisabled": "Noa sayeṭre do e-mail em subita bạnuḱa.",
+       "noemailprefs": "ᱱᱚᱣᱟ ᱯᱷᱤᱪᱟᱨᱥ ᱠᱳ ᱠᱟᱹᱢᱤ ᱚᱪᱚᱭᱛᱮ ᱢᱤᱫᱴᱮᱱ e-mail ᱴᱷᱤᱠᱟᱱᱟ ᱫᱚᱦᱚᱭ ᱦᱩᱭᱩᱜ-ᱟ᱾",
+       "emailconfirmlink": "ᱟᱢᱟᱜ ᱤᱢᱮᱞ ᱵᱩᱴᱟᱹ ᱥᱟᱹᱨᱤᱢᱮ",
+       "invalidemailaddress": "ᱱᱚᱣᱟ e-mail ᱴᱷᱤᱠᱟᱱᱟ ᱫᱚ ᱵᱟᱝ ᱦᱟᱛᱟᱣᱚᱜ-ᱟ, ᱠᱟᱨᱚᱱ ᱱᱚᱣᱟ ᱯᱷᱚᱨᱢᱮᱴ ᱫᱚ ᱯᱩᱥᱴᱟᱹᱣᱛᱮ ᱵᱟᱝ ᱮᱢ ᱟᱠᱟᱱᱟ᱾ \nᱫᱟᱭᱟᱠᱟᱛᱮ ᱯᱩᱥᱴᱟᱹᱣ ᱯᱷᱚᱨᱢᱮᱴᱛᱮ ᱴᱷᱤᱠᱟᱱᱟ ᱮᱢ ᱢᱮ, ᱥᱮ ᱠᱷᱟᱹᱞᱤ ᱫᱚᱦᱚᱭᱢᱮ᱾",
+       "cannotchangeemail": "ᱮᱠᱟᱶᱩᱴ ᱤᱢᱮᱞ ᱴᱷᱤᱠᱟᱹᱱᱟ ᱫᱚ ᱱᱚᱣᱟ ᱣᱤᱠᱤ ᱨᱮ ᱵᱟᱝ ᱵᱚᱫᱚᱞᱚᱜ ᱠᱟᱱᱟ᱾",
+       "emaildisabled": "ᱱᱚᱣᱟ ᱥᱟᱭᱤᱴᱨᱮ ᱫᱚ e-mail ᱮᱢ ᱥᱩᱵᱤᱫᱟ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾",
        "accountcreated": "ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱟ ᱛᱮᱭᱟᱨᱱᱟ",
-       "accountcreatedtext": "$1 ᱞᱟᱹᱜᱤᱛᱛᱮ ᱮᱠᱟᱣᱱᱴ ᱫᱚ ᱵᱮᱱᱟᱣᱮᱱᱟ᱾",
+       "accountcreatedtext": "ᱱᱤᱭᱟᱹ ᱵᱮᱵᱷᱟᱨᱤᱭᱟ ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱟ ᱫᱚ [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) ᱵᱮᱱᱟᱣᱱᱟ᱾",
        "createaccount-title": "{{SITENAME}} ᱞᱟᱹᱜᱤᱛᱛᱮ ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱟ ᱛᱮᱭᱟᱨ",
-       "createaccount-text": "Okoe co am lạgit́te mitṭen ekaunṭko amaḱ e-mail ṭhikạna lạgit {{SITENAME}} re ($4) ńutum \"$2\", oku nambar \"$3\".\nAm do mesagem baṅ daṛeyaḱa, judi noa ekaunṭ do vulge benaolen khan.",
-       "login-throttled": "ᱟᱢ ᱫᱚ ᱢᱤᱫᱜᱷᱟᱹᱲᱤ ᱞᱟᱦᱟᱨᱮ ᱟᱭᱢᱟ ᱫᱷᱟᱣ ᱵᱚᱞᱚᱜᱮᱢ ᱠᱩᱨᱩᱢᱩᱴᱩ ᱠᱮᱫᱟ᱾ \nᱟᱨᱦᱚᱸ ᱠᱩᱨᱩᱢᱩᱴᱩᱭ ᱞᱟᱦᱟᱨᱮ ᱫᱟᱭᱟᱠᱟᱛᱮ ᱛᱷᱟᱲᱟᱜᱟᱱ ᱛᱟᱸᱜᱤᱭᱢᱮ᱾",
+       "createaccount-text": "ᱚᱠᱚᱭ ᱪᱚ ᱟᱢ ᱞᱟᱹᱜᱤᱛᱛᱮ ᱢᱤᱫᱴᱮᱱ ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱟ ᱟᱢᱟᱜ e-mail ᱴᱷᱤᱠᱟᱱᱟ ᱞᱟᱹᱜᱤᱛ {{SITENAME}} ᱨᱮ ($4) ᱧᱩᱛᱩᱢ \"$2\", ᱩᱠᱩ ᱱᱚᱢᱵᱚᱨ\"$3\"᱾\nᱟᱢ ᱫᱚ ᱱᱮᱛᱚᱜ ᱵᱚᱞᱚᱜ ᱢᱮ ᱟᱨ ᱟᱢᱟᱜ ᱩᱠᱩ ᱱᱚᱢᱵᱚᱨ ᱵᱟᱫᱟᱞ ᱢᱮ᱾\n\nᱟᱢ ᱫᱚ ᱱᱤᱭᱟ ᱠᱷᱚᱵᱚᱨᱮᱢ ᱵᱟᱫᱽ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ ᱡᱩᱫᱤ ᱱᱤᱭᱟᱹ ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱷᱟ ᱵᱷᱩᱞᱛᱮ ᱵᱮᱱᱟᱣᱞᱮᱱ ᱠᱷᱟᱱ᱾",
+       "login-throttled": "ᱟᱢ ᱫᱚ ᱢᱤᱫᱜᱷᱟᱹᱲᱤ ᱞᱟᱦᱟᱨᱮ ᱟᱭᱢᱟ ᱫᱷᱟᱣ ᱵᱚᱞᱚᱜᱮᱢ ᱠᱩᱨᱩᱢᱩᱴᱩ ᱠᱮᱫᱟ᱾ \nᱟᱨᱦᱚᱸ ᱠᱩᱨᱩᱢᱩᱴᱩᱭ ᱞᱟᱦᱟᱨᱮ ᱫᱟᱭᱟᱠᱟᱛᱮ $1 ᱛᱟᱸᱜᱤᱭᱢᱮ᱾",
        "login-abort-generic": "ᱟᱢᱟᱜ ᱵᱷᱤᱛᱨᱤ ᱵᱚᱠᱟᱜ ᱫᱚ ᱵᱟᱝ ᱦᱩᱭᱞᱮᱱᱟ - ᱵᱟᱫᱽᱱᱟ",
        "loginlanguagelabel": "ᱯᱟᱹᱨᱥᱤ: $1",
        "pt-login": "ᱵᱚᱞᱚᱜ ᱫᱩᱭᱟᱹᱨ",
        "pt-login-button": "ᱵᱚᱞᱚᱜ ᱢᱮ",
        "pt-login-continue-button": "ᱞᱮᱛᱟᱲ ᱵᱚᱞᱚ ᱠᱚᱜᱼᱢᱮ",
-       "pt-createaccount": "á±´á±·á±\9fá±­ á±µá±®á±±á±\9fá±£ᱢᱮ",
+       "pt-createaccount": "ᱮᱠá±\9fᱶᱩᱴ á±\9bᱮᱭá±\9fᱨᱢᱮ",
        "pt-userlogout": "ᱚᱰᱚᱠᱚᱜ ᱢᱮ",
-       "user-mail-no-addy": "Jahan e-mail ṭhikana bạgi kate e-mail kul kurumuṭu hoena.",
+       "user-mail-no-addy": "ᱡᱟᱸᱦᱟᱸᱱ e-mail ᱴᱷᱤᱠᱟᱱᱟ ᱵᱟᱹᱜᱤ ᱠᱟᱛᱮ e-mail ᱠᱩᱞ ᱠᱩᱨᱩᱢᱩᱴᱩ ᱦᱩᱭᱮᱱᱟ᱾",
        "changepassword": "ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱵᱚᱫᱚᱞ",
        "resetpass_header": "ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱟ ᱨᱮᱱᱟᱜ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱵᱚᱫᱚᱞ",
        "oldpassword": "ᱢᱟᱨᱮᱭᱟᱜ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ:",
        "botpasswords-label-resetpassword": "ᱱᱟᱣᱟᱛᱮ ᱫᱟᱱᱟᱝᱥᱟᱵᱟᱫᱽ ᱮᱢ",
        "botpasswords-label-grants-column": "ᱦᱩᱭᱠᱟᱱ",
        "botpasswords-bad-appid": "ᱵᱚᱴ ᱧᱤᱛᱩᱢ \"$1\" ᱵᱟᱝ ᱴᱷᱤᱠᱟ᱾",
-       "botpasswords-created-title": "á±µá±\9aá±´ á±©á± á±© á±«á±\9fá±±á±\9fá±\9d á±¥á±\9fá±µá±\9fᱫᱽ á±\9bᱮᱭá±\9fᱨᱱᱟ",
+       "botpasswords-created-title": "á±µá±\9aá±´ á±«á±\9fá±±á±\9fá±\9d á±¥á±\9fá±µá±\9fᱫᱽ á±\9bᱮᱭá±\9fᱨᱮᱱᱟ",
        "botpasswords-updated-title": "ᱵᱚᱴ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱩᱛᱷᱱᱟᱹᱣ",
        "botpasswords-deleted-title": "ᱵᱚᱴ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱢᱩᱪᱷᱟᱹᱣᱱᱟ",
        "resetpass_forbidden": "ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱵᱟᱝ ᱵᱚᱫᱚᱞᱜ-ᱟ",
        "resetpass_forbidden-reason": "ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱵᱟᱝ ᱵᱚᱫᱚᱞᱚᱜ-ᱟ: $1",
-       "resetpass-no-info": "Noa sakam sojhete laṛcaṛ lạgit́te am do bhitri boloḱ hoyoḱtama.",
+       "resetpass-no-info": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱥᱚᱡᱷᱮᱛᱮ ᱞᱟᱲᱪᱟᱲ ᱞᱟᱹᱜᱤᱫᱛᱮ ᱟᱢ ᱫᱚ ᱵᱷᱤᱛᱨᱤ ᱵᱚᱞᱚᱜ ᱦᱩᱭᱩᱜᱛᱟᱢᱟ᱾",
        "resetpass-submit-loggedin": "ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱵᱚᱫᱚᱞ",
        "resetpass-submit-cancel": "ᱵᱟᱫᱽ",
        "resetpass-temp-password": "ᱱᱮᱛᱚᱜ ᱞᱟᱹᱜᱤᱛ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ:",
        "passwordreset": "ᱱᱟᱣᱟᱛᱮ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱮᱢ",
-       "passwordreset-disabled": "Noa wikire amaḱ uku nambar nãwãte em lạgit subita do bando gea.",
+       "passwordreset-disabled": "ᱱᱚᱣᱟ ᱣᱤᱠᱤ ᱨᱮ ᱟᱢᱟᱜ ᱩᱠᱩ ᱱᱚᱢᱵᱚᱨ ᱱᱟᱣᱟᱛᱮ ᱮᱢ ᱞᱟᱹᱜᱤᱛ ᱥᱩᱵᱤᱫᱟ ᱫᱚ ᱵᱚᱱᱫ ᱜᱮᱭᱟ᱾",
        "passwordreset-username": "ᱵᱮᱵᱦᱟᱨᱤᱡ ᱧᱩᱛᱩᱢ:",
        "passwordreset-domain": "ᱧᱩᱛᱩᱢ:",
        "passwordreset-email": "ᱤᱢᱮᱞ ᱵᱩᱴᱟᱹ:",
-       "passwordreset-emailtitle": "{{SITENAME}} sayeṭre beoharićaḱ purạo thutiko",
+       "passwordreset-emailtitle": "{{SITENAME}} ᱨᱮ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱜ ᱯᱩᱨᱟᱹᱣ ᱛᱷᱩᱛᱷᱤᱠᱳ",
        "passwordreset-emailelement": "ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱜ ᱧᱩᱛᱩᱢ: \n$1\n\nᱢᱤᱫ ᱜᱷᱟᱹᱲᱤ ᱞᱟᱹᱜᱤᱛ ᱫᱟᱱᱟᱝ ᱱᱟᱵᱟᱫᱽ: \n$2",
        "passwordreset-emailsentemail": "ᱱᱚᱣᱟ ᱤᱢᱮᱞ ᱴᱷᱤᱠᱟᱹᱱᱟ ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱟ ᱥᱟᱶᱛᱮ ᱢᱮᱥᱟ ᱢᱮᱱᱟᱜ ᱠᱷᱟᱡ ᱩᱠᱩ ᱱᱚᱢᱵᱚᱨ ᱫᱤᱥᱟᱹ ᱨᱩᱣᱟᱹᱲ  ᱤᱢᱮᱞ ᱫᱚ ᱠᱩᱞᱮᱱᱟ᱾",
        "changeemail": "ᱤᱢᱮᱞ ᱴᱷᱤᱠᱱᱟ ᱵᱚᱫᱚᱞ ᱢᱮ ᱥᱮ ᱚᱪᱚᱜᱽ ᱢᱮ",
        "changeemail-header": "e-mail ᱴᱷᱤᱠᱟᱹᱱᱟ ᱵᱚᱫᱚᱞ ᱞᱟᱹᱜᱤᱛᱛᱮ ᱱᱤᱭᱟᱹ ᱯᱷᱚᱨᱢ ᱯᱩᱨᱳᱱᱢᱮ᱾ ᱡᱟᱸᱦᱟᱸᱱ email ᱡᱩ ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱟ ᱨᱮ ᱢᱮᱥᱟ ᱢᱮᱱᱟᱜ-ᱟ ᱚᱱᱟᱠᱩ ᱚᱪᱚᱜ ᱞᱟᱹᱜᱤᱛ email ᱴᱷᱤᱠᱟᱹᱱᱟ ᱚᱞ ᱡᱟᱜᱟ ᱫᱚ ᱯᱷᱟᱠᱟ ᱫᱚᱦᱚᱭᱢᱮ᱾",
-       "changeemail-no-info": "Noa sakam sojhete laṛcaṛ lạgit́te am do bhitri boloḱ hoyoḱtama.",
+       "changeemail-no-info": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱥᱚᱡᱽᱦᱮᱛᱮ ᱞᱟᱲᱪᱟᱲ ᱞᱟᱹᱜᱤᱛᱛᱮ ᱟᱢ ᱫᱚ ᱵᱷᱤᱛᱨᱤ ᱵᱚᱞᱚᱜ ᱦᱩᱭᱩᱜᱛᱟᱢᱟ᱾",
        "changeemail-oldemail": "ᱱᱮᱛᱚᱜ-ᱟᱜ ᱤᱢᱮᱞ ᱴᱷᱤᱠᱟᱹᱱᱟ",
        "changeemail-newemail": "ᱱᱟᱣᱟ ᱤᱢᱮᱞ ᱵᱩᱴᱟᱹ:",
        "changeemail-none": "(ᱪᱮᱫ ᱦᱚᱸ ᱵᱟᱹᱱᱩᱜ-ᱟ)",
        "link_sample": "ᱡᱚᱱᱚᱲ ᱴᱟᱭᱴᱮᱞ",
        "link_tip": "ᱵᱷᱤᱛᱨᱤ ᱡᱚᱱᱚᱲ",
        "extlink_sample": "http://www.example.com ᱡᱚᱱᱚᱲ ᱴᱟᱭᱴᱮᱞ",
-       "extlink_tip": "á±µá±\9fᱨᱦᱮ á±¨á±®á±±á±\9fá±\9c á±¡á±\9aá±±á±\9aá±² (ᱫᱤᱥá±\9fᱹᱭᱢᱮ http://prefix)",
+       "extlink_tip": "á±µá±\9fᱨᱦᱮ á±¡á±\9aá±±á±\9aá±² (ᱫᱤᱥá±\9fᱹᱭᱢᱮ http:// prefix)",
        "headline_sample": "ᱵᱚᱦᱚᱜ ᱨᱮᱱᱟᱜ ᱚᱞ",
        "headline_tip": "ᱞᱮᱵᱷᱮᱞ ᱒ ᱦᱮᱰᱞᱟᱭᱤᱱ",
        "nowiki_sample": "ᱵᱮᱜᱚᱨ ᱯᱷᱚᱨᱢᱮᱴ ᱚᱞᱠᱩ ᱵᱷᱚᱨᱟᱣᱢᱮ",
        "showpreview": "ᱧᱮᱞᱡᱚᱝ ᱩᱫᱩᱜᱽᱢᱮ",
        "showdiff": "ᱵᱚᱫᱚᱞᱠᱩ ᱩᱫᱩᱜᱽ ᱢᱮ",
        "anoneditwarning": "<strong>ᱦᱩᱥᱤᱭᱟᱹᱨ:</strong> ᱟᱢ ᱵᱟᱢ ᱵᱚᱞᱚᱣᱟᱠᱟᱱᱟ ᱾ ᱡᱩᱫᱤ ᱟᱢ ᱡᱟᱦᱟᱸᱱᱟᱜ ᱥᱟᱯᱲᱟᱣᱟᱢ ᱟᱢᱟᱜ IP ᱵᱩᱴᱟᱹ ᱥᱚᱫᱚᱨ ᱛᱟᱦᱮᱸᱱᱟ ᱾ ᱡᱩᱫᱤ ᱟᱢ [$1 ᱵᱚᱞᱚᱱᱟᱢ]</strong> ᱟᱨᱵᱟᱝ <strong>[$2 ᱠᱷᱟᱛᱟ ᱛᱮᱭᱟᱨᱟᱢ]</strong>, ᱟᱢᱟᱜ ᱥᱟᱯᱲᱟᱣ ᱫᱚ ᱩᱫᱩᱜᱚᱜ-ᱟ ᱟᱢᱟᱜ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱧᱩᱛᱩᱢ, ᱥᱟᱶᱛᱮ ᱮᱴᱟᱜ ᱥᱩᱵᱤᱫᱷᱟ ᱠᱚ ᱾",
-       "anonpreviewwarning": "\"Am do bhitri bam bolo akana. Noa sakamre amaḱ kạmiko jạre IP ṭhiikạ̣nare rukhiyạ ḱa.\"",
+       "anonpreviewwarning": "\"ᱟᱢ ᱫᱚ ᱵᱷᱤᱛᱨᱤ ᱵᱟᱢ ᱵᱚᱞᱚ ᱟᱠᱟᱱᱟ᱾ ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱨᱮ ᱟᱢᱟᱜ ᱠᱟᱹᱢᱤᱠᱳ ᱡᱟᱨᱮ IP ᱴᱷᱤᱠᱟᱱᱟ ᱨᱮ ᱨᱩᱠᱷᱤᱭᱟᱹ ᱠᱟᱜ᱾\"",
        "missingcommenttext": "ᱫᱟᱭᱟ ᱠᱟᱛᱮ ᱟᱢᱟᱜ ᱠᱟᱛᱷᱟ ᱵᱚᱞᱚᱭ ᱢᱮ᱾",
        "summary-preview": "ᱜᱩᱴ ᱠᱟᱛᱷᱟ ᱩᱱᱩᱫᱩᱜ:",
        "subject-preview": "ᱜᱩᱴᱠᱟᱛᱷᱟ ᱩᱱᱩᱫᱩᱜ:",
        "nosuchsectiontitle": "ᱛᱷᱚᱠ ᱵᱟᱝ ᱧᱟᱢᱞᱮᱱᱟ",
        "loginreqtitle": "ᱵᱚᱞᱚᱜ ᱡᱟᱹᱨᱩᱲᱟ",
        "loginreqlink": "ᱵᱚᱞᱚᱜ ᱢᱮ",
-       "loginreqpagetext": "Eṭagaḱ sakamko ńel lạgit́te do am $1 hoyoḱ jạruṛtama.",
+       "loginreqpagetext": "ᱮᱴᱟᱜ ᱥᱟᱦᱴᱟᱠᱳ ᱧᱮᱞ ᱞᱟᱹᱜᱤᱛᱛᱮ ᱫᱚ ᱟᱢ $1 ᱦᱩᱭᱩᱜ ᱡᱟᱹᱨᱩᱲᱛᱟᱢᱟ᱾",
        "accmailtitle": "ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱠᱩᱞ ᱦᱩᱭᱱᱟ",
-       "accmailtext": "[[User talk:$1 $1]] ᱞᱟᱹᱜᱤᱛᱛᱮ ᱟᱪᱛᱮ ᱵᱮᱱᱟᱣᱮᱱ ᱩᱠᱩ ᱱᱚᱢᱵᱚᱨ ᱫᱚ $2 ᱠᱩᱞ  ᱦᱩᱭᱮᱱᱟ᱾\nᱵᱷᱤᱛᱨᱤ ᱵᱚᱞᱚ ᱠᱟᱛᱮ ᱱᱚᱣᱟ ᱱᱟᱣᱟ ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱟ ᱞᱟᱹᱜᱤᱛ ᱩᱠᱩ ᱱᱚᱢᱵᱚᱨ \"[[Special:ChangePassword Change password]]\" ᱥᱟᱦᱴᱟ ᱠᱷᱚᱱᱮᱢ ᱵᱚᱫᱚᱞ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ᱾",
+       "accmailtext": "[[User talk:$1|$1]] ᱞᱟᱹᱜᱤᱫᱛᱮ ᱟᱡᱛᱮ ᱵᱮᱱᱟᱣᱮᱱ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱫᱚ $2 ᱴᱷᱮᱱ ᱠᱳᱞ  ᱦᱩᱭᱮᱱᱟ᱾ ᱱᱚᱶᱟ ᱫᱚ <em>[[Special:ChangePassword|ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱵᱚᱫᱚᱞ]]<em> ᱥᱟᱦᱴᱟ ᱵᱚᱞᱚ ᱠᱟᱛᱮᱢ ᱵᱚᱫᱚᱞ ᱫᱟᱲᱮᱭᱟᱜᱼᱟ᱾",
        "newarticle": "(ᱱᱟᱣᱟᱱᱟᱜ)",
        "newarticletext": "ᱟᱢ ᱚᱠᱟ ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱡᱚᱱᱟᱲᱮᱢ ᱯᱟᱸᱡᱟᱸ ᱟᱹᱜᱩᱭᱫᱟ ᱚᱱᱚ ᱫᱚ ᱵᱟᱱᱩᱜ-ᱟ᱾\nᱚᱱᱟ ᱥᱟᱦᱴᱟ ᱛᱮᱭᱟᱨ ᱞᱟᱹᱜᱤᱛ ᱛᱮ, ᱞᱟᱛᱟᱨ ᱵᱟᱠᱥᱚ ᱵᱷᱤᱛᱨᱤᱨᱮ ᱚᱞ ᱮᱦᱚᱵ ᱢᱮ (ᱟᱨᱦᱚᱸ ᱡᱟᱹᱥᱛᱤ ᱵᱟᱰᱟᱭ ᱞᱟᱹᱜᱤᱛᱴᱮ [$1 ᱜᱚᱸᱲᱚᱸ ᱥᱟᱦᱴᱟ] ᱯᱟᱸᱡᱚᱸᱭᱢᱮ)᱾\nᱟᱢ ᱵᱷᱩᱞᱛᱮ ᱱᱚᱸᱰᱮᱢ ᱦᱮᱡ ᱟᱠᱟᱱ ᱠᱷᱟᱡ, ᱟᱢᱟᱜ ᱵᱨᱟᱣᱡᱟᱨ ᱨᱮᱱᱟᱜ '''ᱛᱟᱭᱚᱢ''' ᱵᱟᱴᱚᱱ ᱞᱤᱱᱢᱮ᱾",
        "anontalkpagetext": "----\n\n<em>ᱱᱚᱶᱟ ᱫᱚ ᱜᱟᱞᱚᱪ ᱥᱟᱦᱴᱟ ᱠᱟᱱᱟ ᱩᱠᱩᱧᱩᱛᱩᱢ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱠᱚᱣᱟᱜ ᱡᱟᱦᱟᱸᱭ ᱫᱚ ᱠᱷᱟᱛᱟ ᱵᱟᱭ ᱛᱮᱭᱟᱨ ᱟᱠᱟᱫᱟ ᱱᱤᱛ ᱦᱟᱹᱵᱤᱡ, ᱟᱨᱵᱟᱝ ᱡᱟᱦᱟᱸᱭ ᱵᱮᱵᱷᱟᱨ ᱟᱠᱟᱫᱟ ᱱᱚᱶᱟ ᱾</em>\nᱚᱱᱟᱛᱮ ᱟᱞᱮ ᱮᱞᱮᱞ IP ᱞᱮ ᱵᱮᱵᱷᱟᱨᱮᱜ-ᱟ ᱩᱱᱤ ᱪᱤᱱᱦᱟᱹᱣ ᱞᱟᱹᱜᱤᱫ ᱾\nᱚᱱᱠᱟᱱ IP ᱵᱩᱴᱟᱹ ᱫᱚ ᱦᱟᱹᱴᱤᱧ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ ᱛᱤᱢᱤᱱ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱫᱟᱨᱟᱭᱛᱮ ᱾\nᱡᱩᱫᱤ ᱟᱢ ᱩᱠᱩᱧᱩᱛᱩᱢ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱠᱟᱱᱟᱢ ᱟᱨ ᱵᱷᱟᱹᱵᱤᱭᱮᱜ-ᱟᱢ ᱵᱟᱝ ᱡᱚᱲᱟᱣᱟᱱ ᱠᱟᱛᱷᱟ ᱟᱢᱮ ᱩᱫᱩᱜᱢᱮ ᱠᱟᱱᱟ, ᱮᱱᱠᱷᱟᱱ  [[Special:CreateAccount|ᱠᱷᱟᱛᱟ ᱛᱮᱭᱟᱨᱢᱮ]] ᱟᱨᱵᱟᱝ [[Special:UserLogin|ᱞᱚᱜᱤᱱ]] ᱢᱮ ᱫᱟᱨᱟᱭ ᱵᱷᱮᱣᱱᱟ ᱠᱚ ᱥᱟᱦᱟᱭ ᱞᱟᱹᱜᱤᱫ ᱮᱴᱟᱜ ᱩᱠᱩᱧᱩᱛᱩᱢ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱠᱚ ᱥᱟᱶ ᱾",
        "noarticletext": "ᱱᱮᱛᱚᱜ ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟᱨᱮ ᱪᱮᱫᱜᱮ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾\nᱮᱴᱟᱜ ᱥᱟᱦᱴᱟᱨᱮᱢ [[Special:Search/{{PAGENAME}}|ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟ ᱧᱩᱛᱩᱢ ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ᱡᱚᱲᱟᱣᱟᱱ ᱞᱚᱜᱽ ᱠᱚ ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟ ᱥᱟᱯᱲᱟᱣ ᱢᱮ]</span>.",
        "noarticletext-nopermission": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟᱨᱮ ᱱᱤᱛᱚᱜ ᱪᱮᱫᱜᱮ ᱚᱞ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾\n\nᱟᱢ [[Special:Search/{{PAGENAME}}|ᱱᱚᱭᱟ ᱥᱟᱦᱴᱟᱨᱮᱱᱟᱜ ᱧᱤᱛᱩᱢᱮᱢ ᱥᱮᱸᱫᱽᱨᱟ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ]] ᱮᱴᱟᱜ ᱥᱟᱦᱴᱟ ᱠᱚᱨᱮᱦᱚᱸ,\nᱟᱨᱵᱟᱝ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>.",
-       "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" ńutuman jahãe beoharićaḱ ekaunṭ do baṅ resṭri hoeakana. Daya kate biḍạo katet́ ńelmẽ noa sakam do benoa/sompadonem menet́ kana se baṅ.",
+       "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" ᱧᱩᱛᱩᱢᱟᱱ ᱡᱟᱸᱦᱟᱸᱭ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱜ ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱷᱟ ᱫᱚ ᱵᱟᱝ ᱨᱮᱥᱴᱨᱤ ᱦᱩᱭ ᱟᱠᱟᱱᱟ᱾\nᱫᱟᱭᱟᱠᱟᱛᱮ ᱵᱤᱰᱟᱹᱣ ᱠᱟᱛᱮᱛ ᱧᱮᱞᱢᱮ ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱫᱚ ᱵᱮᱱᱟᱣ/ᱥᱟᱯᱲᱟᱣ ᱢᱮᱱᱮᱫ ᱠᱟᱱᱟ ᱥᱮ ᱵᱟᱝ᱾",
        "userpage-userdoesnotexist-view": "ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱜ \"$1\" ᱮᱠᱟᱣᱱᱴ ᱫᱚ ᱵᱟᱝ ᱨᱮᱥᱴᱨᱤ ᱟᱠᱟᱱᱟ᱾",
        "blocked-notice-logextract": "ᱱᱩᱭ ᱵᱮᱵᱦᱟᱨᱤᱡ ᱫᱚ ᱱᱮᱛᱚᱜ ᱮ ᱥᱮᱥᱫᱜᱮᱭᱟ᱾\nᱨᱮᱯᱷᱟᱨᱮᱱᱥ ᱞᱟᱹᱜᱤᱛᱛᱮ ᱱᱟᱣᱟᱱᱟᱜ ᱵᱚᱞᱚᱜ ᱠᱩᱨᱩᱢᱩᱴᱩ ᱞᱟᱛᱟᱨᱨᱮ ᱮᱢ ᱦᱩᱭᱱᱟ:",
        "clearyourcache": "<strong>Note:</strong> After saving, you may have to bypass your browser's cache to see the changes.\n* <strong>Firefox / Safari:</strong> Hold <em>Shift</em> while clicking <em>Reload</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> on a Mac)\n* <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)\n* <strong>Internet Explorer:</strong> Hold <em>Ctrl</em> while clicking <em>Refresh</em>, or press <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Go to <em>Menu → Settings</em> (<em>Opera → Preferences</em> on a Mac) and then to <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
        "defaultmessagetext": "ᱯᱩᱭᱞᱩ ᱚᱞᱠᱟᱱ ᱠᱷᱚᱵᱚᱨ",
        "content-model-wikitext": "ᱣᱤᱠᱤ-ᱚᱞ",
        "content-model-text": "ᱥᱚᱢᱟᱱ ᱚᱞ",
-       "post-expand-template-inclusion-warning": "\"Sontoroḱme\" Noa format do lạṭu geya.\nThoṛa format do noare banuḱana.",
-       "post-expand-template-inclusion-category": "Sakamko oka borḍre noa tahẽna ona doe paromkeda",
-       "post-expand-template-argument-warning": "'''Sontoroḱmẽ:''' Noa sakamre komse kom mitṭen forma joṛao menaḱa ạḍi lạṭute pasnao akana.\nOnate noa ạrgumenṭkodo bạgi giḍi hoena.",
+       "content-model-javascript": "ᱡᱟᱵᱷᱟᱥᱠᱤᱯᱴ",
+       "content-json-empty-object": "ᱥᱟᱢᱟᱱ ᱵᱟᱹᱱᱩᱜᱼᱟ",
+       "post-expand-template-inclusion-warning": "<strong>ᱥᱚᱱᱛᱚᱨᱚᱜᱢᱮ</strong> ᱱᱚᱣᱟ ᱯᱷᱚᱨᱢᱮᱴ ᱫᱚ ᱞᱟᱹᱴᱩ ᱜᱮᱭᱟ᱾ \nᱛᱷᱚᱲᱟ ᱯᱷᱚᱨᱢᱮᱴ ᱫᱚ ᱱᱟᱣᱨᱮ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾",
+       "post-expand-template-inclusion-category": "ᱥᱟᱦᱴᱟ ᱫᱚ ᱚᱠᱟ ᱪᱷᱟᱸᱪ ᱨᱮ ᱛᱟᱸᱦᱮᱱ ᱚᱱᱟ ᱫᱚ ᱯᱟᱨᱚᱢᱠᱮᱫᱟᱭ",
+       "post-expand-template-argument-warning": "'''ᱥᱚᱱᱛᱚᱨᱚᱜᱢᱮ:''' ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱠᱚᱢᱥᱮ ᱠᱚᱢ ᱢᱤᱫᱴᱮᱱ ᱯᱷᱚᱨᱢᱟ ᱡᱚᱲᱟᱣ ᱢᱮᱱᱟᱜ-ᱟ ᱟᱹᱰᱤ ᱞᱟᱹᱴᱩᱛᱮ ᱯᱟᱥᱱᱟᱣ ᱟᱠᱟᱱᱟ᱾\nᱚᱱᱟᱛᱮ ᱱᱚᱣᱟ ᱜᱟᱞᱢᱟᱨᱟᱣ ᱠᱚᱫᱚ ᱜᱮᱫ ᱜᱤᱰᱤ ᱦᱩᱭᱱᱟ᱾",
        "post-expand-template-argument-category": "Pages containing omitted template arguments",
        "undo-failure": "ᱥᱟᱯᱲᱟᱣᱠᱚ ᱵᱟᱭ ᱟᱹᱪᱩᱨ ᱨᱩᱣᱟᱹᱲᱚᱜ-ᱟ ᱛᱟᱞᱟ-ᱢᱟᱞᱟ ᱥᱟᱯᱲᱟᱣ ᱵᱤᱨᱚᱫᱽ ᱤᱫᱤᱠᱟᱛᱮ |",
        "viewpagelogs": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱨᱮᱭᱟᱜ ᱞᱚᱜᱽᱠᱚ ᱧᱮᱞᱢᱮ",
        "nohistory": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱥᱟᱯᱲᱟᱣ ᱱᱟᱜᱟᱢ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾",
        "currentrev": "ᱱᱮᱛᱟᱨ ᱧᱮᱞ",
        "currentrev-asof": "ᱱᱟᱣᱟ ᱧᱮᱞ ᱞᱮᱠᱟᱛᱮ $1",
-       "revisionasof": "Revision as of $1",
-       "revision-info": "Revision as of $1 by {{GENDER:$6|$2}}$7",
+       "revisionasof": "$1 ᱧᱮᱞᱟᱹᱨᱩ ᱞᱮᱠᱟᱛᱮ",
+       "revision-info": "{{GENDER:$6|$2}}$7 ᱫᱟᱨᱟᱭᱛᱮ $1 ᱨᱮᱱᱟᱜ ᱧᱮᱞᱟᱹᱨᱩ",
        "previousrevision": "ᱯᱟᱹᱦᱤᱞ ᱯᱟᱲᱦᱟᱣ ᱨᱩᱣᱟᱹᱲ",
        "nextrevision": "ᱱᱟᱣᱟᱛᱮ ᱧᱮᱞ ᱨᱩᱣᱟᱹᱲ →",
        "currentrevisionlink": "ᱱᱮᱛᱟᱨ ᱧᱮᱞ",
        "search-file-match": "(ᱢᱤᱫᱩᱜᱟᱜ ᱨᱮᱫ ᱩᱱᱩᱫᱩᱜ)",
        "search-suggest": "ᱪᱮᱫ ᱮᱢ ᱢᱮᱱ ᱚᱪᱚᱭᱮᱫᱟ: $1",
        "search-interwiki-caption": "ᱥᱟᱶᱛᱮᱱ ᱯᱨᱚᱡᱮᱠᱴ ᱠᱷᱚᱱ ᱚᱨᱡᱚ",
-       "search-interwiki-default": "Results from $1:",
+       "search-interwiki-default": "$1 ᱠᱷᱚᱱ ᱚᱨᱡᱚ:",
        "search-interwiki-more": "(ᱵᱟᱹᱲᱛᱤ)",
        "search-interwiki-more-results": "ᱵᱟᱹᱲᱛᱤ ᱚᱨᱡᱚᱠᱚ",
        "search-relatedarticle": "ᱥᱟᱹᱜᱟᱹᱭᱟᱱ",
        "skin-preview": "ᱧᱮᱞ ᱵᱤᱰᱟᱹᱣ",
        "datedefault": "ᱠᱩᱥᱤ ᱵᱟᱹᱱᱩᱜ-ᱟ",
        "prefs-user-pages": "ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱜ ᱥᱟᱦᱴᱟᱠᱚ",
+       "prefs-rc": "ᱨᱚᱠᱟ ᱵᱚᱫᱚᱞᱠᱚ",
+       "prefs-watchlist": "ᱧᱮᱞᱟᱜ ᱞᱤᱥᱴᱤ",
+       "prefs-editwatchlist": "ᱧᱮᱞᱟᱜ ᱞᱤᱥᱴᱤ ᱥᱟᱯᱲᱟᱣ",
+       "prefs-editwatchlist-label": "ᱟᱢᱟᱜ ᱧᱮᱞᱟᱜ ᱞᱤᱥᱴᱤᱨᱮ ᱟᱫᱮᱨᱟᱜ ᱠᱚ ᱥᱟᱯᱲᱟᱣ",
+       "prefs-editwatchlist-edit": "ᱟᱢᱟᱜ ᱧᱮᱞᱟᱜ ᱞᱤᱥᱴᱤᱨᱮ ᱧᱮᱞ ᱟᱨ ᱥᱟᱛᱟᱢ ᱚᱪᱚᱜ",
        "prefs-resetpass": "ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱵᱚᱫᱚᱞ",
        "prefs-changeemail": "ᱤᱢᱮᱞ ᱴᱷᱤᱠᱟᱱᱟ ᱵᱚᱫᱚᱞ ᱥᱮ ᱜᱮᱫ ᱜᱤᱰᱤᱭᱢᱮ",
        "prefs-setemail": "ᱤᱢᱮᱞ ᱵᱩᱴᱟᱹ ᱡᱚᱲᱟᱣᱢᱮ",
+       "prefs-rendering": "ᱧᱮᱞᱚᱪᱚ",
        "saveprefs": "ᱨᱩᱠᱷᱤᱭᱟᱹᱭᱢᱮ",
        "searchresultshead": "ᱥᱮᱸᱫᱽᱨᱟ",
        "timezonelegend": "ᱮᱞᱟᱠᱟ ᱚᱠᱛᱚᱺ",
        "timezoneregion-indian": "ᱥᱤᱧᱚᱛ ᱢᱟᱦᱟᱫᱚᱨᱭᱟ",
        "timezoneregion-pacific": "ᱯᱮᱥᱤᱯᱷᱤᱠ ᱢᱟᱦᱟᱫᱚᱨᱭᱟ",
        "prefs-searchoptions": "ᱥᱮᱸᱫᱽᱨᱟ",
+       "default": "ᱡᱟᱭᱞᱮᱠᱟ",
        "prefs-files": "ᱨᱮᱫᱠᱚ",
        "youremail": "Email:",
        "username": "{{GENDER:$1|ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱜ ᱧᱩᱛᱩᱢ}}:",
        "yournick": "ᱱᱟᱶᱟ ᱥᱩᱦᱤ:",
        "gender-male": "ᱵᱟᱵᱟ ᱦᱚᱲ ᱣᱤᱠᱤ ᱥᱟᱦᱴᱟ ᱠᱩᱭ ᱥᱟᱯᱲᱟᱣ ᱠᱮᱫᱟ",
        "gender-female": "ᱜᱚᱜᱚ ᱦᱚᱲ ᱣᱤᱠᱤ ᱥᱟᱦᱴᱟ ᱠᱩᱭ ᱥᱟᱯᱲᱟᱣ ᱠᱮᱫᱟ",
-       "email": "Email",
-       "prefs-help-email": "E-mail á¹­hikana do bạá¹\9btitege, menkhan uku namber nãwãte benao jạruá¹\9ba, am do amaḱ uku nomborem hiá¹\9b\84 keda.",
-       "prefs-help-email-others": "Am são e-mail hotete jogajog dohoy lạgitte mitṭen joṛao se amaḱ katha roṛaḱ sakam bachao jońme.\nAmaḱ e-mail ṭhikạna do bań cabaḱa tinre onko do ko beohara",
+       "email": "ᱤᱢᱮᱞ",
+       "prefs-help-email": "E-mail á±´á±·á±¤á± á±\9fá±±á±\9f á±«á±\9a á±µá±\9fᱹᱨá±\9bᱤ á±\9bá±®á±\9cá±®, á±¢á±®á±±á± á±·á±\9fá±± á±©á± á±© á±±á±\9aᱢᱵá±\9aᱨ á±±á±\9fá±£á±\9fá±\9bá±® á±µá±®á±±á±\9fá±£ á±¡á±\9fᱹᱨᱩᱲá±\9f, á±\9fá±¢ á±«á±\9a á±\9fá±¢á±\9fá±\9c á±©á± á±© á±±á±\9aᱢᱵá±\9aᱨ á±®á±¢ á±¦á±¤á±²á±¤á±§ á± á±®á±«á±\9fá±¾",
+       "prefs-help-email-others": "ᱟᱢ ᱥᱟᱶ ᱤ-ᱢᱮᱞ ᱦᱚᱛᱮᱛᱮ ᱥᱟᱹᱜᱟᱹᱭ ᱫᱚᱦᱚᱭ ᱞᱟᱹᱜᱤᱛᱛᱮ ᱢᱤᱫᱴᱮᱱ ᱡᱚᱲᱟᱣ ᱥᱮ ᱟᱢᱟᱜ ᱠᱟᱛᱷᱟ ᱨᱚᱲᱟᱜ ᱥᱟᱦᱴᱟ ᱵᱟᱪᱷᱟᱣ ᱡᱚᱝᱢᱮ᱾\nᱟᱢᱟᱜ ᱤ-ᱢᱮᱞ ᱴᱷᱤᱠᱟᱱᱟ ᱫᱚ ᱵᱟᱝ ᱪᱟᱵᱟᱠᱚᱜ ᱛᱤᱱᱨᱮ ᱩᱝᱠᱩ ᱫᱚ ᱠᱳ ᱵᱮᱵᱷᱟᱨᱚᱜ-ᱟ᱾",
        "prefs-signature": "ᱥᱩᱦᱤ",
        "prefs-editor": "ᱥᱟᱯᱲᱮᱛ",
        "prefs-preview": "ᱧᱮᱞ ᱵᱤᱰᱟᱹᱣ",
+       "prefs-diffs": "ᱵᱷᱮᱯᱮᱫ",
        "userrights": "ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱜ ᱟᱹᱭᱫᱟᱹᱨᱤ ᱠᱩ",
        "userrights-lookup-user": "ᱢᱤᱫᱴᱮᱱ ᱵᱮᱵᱦᱟᱨᱤ ᱴᱷᱤᱠᱤ ᱢᱮ",
        "userrights-user-editname": "ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱜ ᱧᱤᱛᱩᱢ ᱵᱚᱞᱚᱭ ᱢᱮ:",
        "userrights-editusergroup": "ᱥᱟᱯᱲᱟᱣ {{GENDER:$1|ᱵᱮᱵᱦᱟᱨᱤ}} ᱜᱟᱶᱛᱟᱠᱩ",
        "saveusergroups": "ᱨᱩᱠᱷᱤᱭᱟᱹ {{GENDER:$1|ᱵᱮᱵᱦᱟᱨᱤ}} ᱜᱟᱶᱛᱟᱠᱩ",
        "userrights-reason": "ᱚᱡᱮ:",
+       "userrights-expiry-current": "$1 ᱪᱟᱵᱟᱜᱼᱟ",
+       "userrights-expiry-none": "ᱵᱟᱭ ᱪᱟᱵᱟᱜᱼᱟ",
+       "userrights-expiry": "ᱪᱟᱵᱟᱜᱼᱟᱺ",
+       "userrights-expiry-existing": "ᱪᱟᱵᱟᱜ ᱠᱟᱱ ᱚᱠᱛᱚ :$3,$2",
+       "userrights-expiry-othertime": "ᱮᱴᱟᱜ ᱚᱠᱛᱚᱺ",
+       "userrights-expiry-options": "᱑ ᱢᱟᱦᱟᱸ:᱑ ᱢᱟᱦᱟᱸ,᱑ ᱦᱟᱯᱛᱟ:᱑ ᱦᱟᱯᱛᱟ, ᱑ ᱪᱟᱸᱫᱚ:᱑ ᱪᱟᱸᱫᱚ, ᱓ ᱪᱟᱸᱫᱚ:᱓ ᱪᱟᱸᱫᱚ, ᱖ ᱪᱟᱸᱫᱚ:᱖ᱪᱟᱸᱫᱚ, ᱑ ᱥᱮᱨᱢᱟ:᱑ ᱥᱮᱨᱢᱟ",
        "group-bot": "ᱵᱚᱴᱠᱚ",
        "group-sysop": "ᱟᱰᱢᱤᱱᱤᱥᱴᱨᱮᱴᱚᱨ",
+       "group-user-member": "{{GENDER:$1|ᱵᱚᱵᱷᱟᱨᱤᱭᱟᱹ}}",
        "grouppage-bot": "{{ns:project}}:ᱵᱚᱴᱠᱚ",
        "grouppage-sysop": "{{ns:project}}:ᱯᱟᱨᱜᱟᱱᱟᱠᱚ",
        "right-read": "ᱥᱟᱦᱴᱟᱠᱩ ᱯᱟᱲᱦᱟᱣᱢᱮ",
-       "right-edit": "ᱥᱟᱦᱴᱟᱠᱩ ᱥᱟᱯᱲᱟᱣ",
-       "right-createpage": "Sakamko benoamẽ (Okako do galmarao sakamko baṅkan)",
+       "right-edit": "ᱥᱟᱦᱴᱟᱠᱩ ᱥᱟᱯᱲᱟᱣ ᱢᱮ",
+       "right-createpage": "ᱥᱟᱦᱴᱟ ᱵᱮᱱᱟᱣᱢᱮ (ᱚᱠᱟᱠᱳ ᱫᱚ ᱜᱟᱞᱢᱟᱨᱟᱣ ᱥᱟᱦᱴᱟᱠᱳ ᱱᱟᱝᱠᱷᱟᱱ)",
        "right-createtalk": "ᱜᱟᱞᱢᱟᱨᱟᱣ ᱥᱟᱦᱴᱟᱠᱩ ᱵᱮᱱᱟᱣᱢᱮ",
        "right-createaccount": "ᱱᱟᱶᱟ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱠᱷᱟᱛᱟ ᱛᱮᱭᱟᱨ",
        "right-move": "ᱥᱟᱦᱴᱟᱠᱚ ᱥᱟᱦᱟᱭᱢᱮ",
        "hist": "ᱱᱟᱜᱟᱢ",
        "hide": "ᱫᱟᱱᱟᱝ",
        "show": "ᱧᱮᱞ",
-       "minoreditletter": "m",
-       "newpageletter": "N",
-       "boteditletter": "b",
+       "minoreditletter": "",
+       "newpageletter": "",
+       "boteditletter": "",
        "rc-change-size-new": "$1 {{PLURAL:$1|ᱵᱟᱭᱤᱴ|ᱵᱟᱭᱤᱴᱥ}} ᱵᱚᱫᱚᱞ ᱛᱟᱭᱚᱢ",
        "rc-enhanced-expand": "ᱡᱚᱛᱚ ᱩᱰᱩᱜᱽ ᱢᱮ",
        "rc-enhanced-hide": "ᱡᱚᱛᱚᱭᱟᱜ ᱩᱠᱩᱭᱢᱮ",
        "filehist-current": "ᱱᱤᱛᱚᱜ",
        "filehist-datetime": "ᱢᱟᱹᱦᱤᱛ/ᱚᱠᱛᱚ",
        "filehist-thumb": "ᱴᱤᱯ",
-       "filehist-thumbtext": "Thumbnail for version as of $1",
+       "filehist-thumbtext": "$1 ᱞᱮᱠᱟᱛᱮ ᱛᱷᱚᱢᱵᱽᱱᱮᱞ ᱵᱷᱚᱨᱥᱚᱱ",
        "filehist-nothumb": "ᱵᱟᱹᱱᱩᱜ-ᱟ ᱴᱤᱯ-ᱨᱟᱢᱟ",
        "filehist-user": "ᱵᱮᱵᱷᱟᱨᱤᱡ",
        "filehist-dimensions": "ᱡᱚᱠᱷᱟ",
        "pager-newer-n": "{{PLURAL:$1|1 ᱱᱟᱣᱟᱱᱟᱜ | ᱱᱟᱣᱟᱱᱟᱜ $1}}",
        "pager-older-n": "{{PLURAL:$1|ᱢᱟᱨᱮᱭᱟᱜ 1|ᱢᱟᱨᱮᱭᱟᱜ $1}}",
        "booksources": "ᱯᱚᱛᱚᱵ ᱯᱷᱮᱰᱟᱛ ᱠᱚ",
-       "booksources-search-legend": "ᱯá±\9aá±\9bá±\9aá±µ á±¨á±®á±­á±\9fá±\9c á±¯á±·á±®á±°á±\9fá±\9b á±¦á±\9aᱨ á±\9eá±\9fá±¹á±\9cᱤá±\9b á±¥á±®á±¸á±«á±½á±¨á±\9f",
+       "booksources-search-legend": "ᱯᱚᱛᱚᱵ ᱨᱮᱭᱟᱜ ᱯᱷᱮᱰᱟᱛ ᱥᱮᱸᱫᱽᱨᱟ",
        "booksources-search": "ᱥᱮᱸᱫᱽᱨᱟ",
        "specialloguserlabel": "ᱠᱟᱹᱢᱤᱭᱟᱹ:",
        "speciallogtitlelabel": "ᱡᱚᱥ (ᱧᱩᱛᱩᱢ ᱟᱨᱵᱟᱝ {{ns:user}}:ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱞᱟᱹᱜᱩᱫ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱧᱩᱛᱩᱢ):",
        "listgrouprights-members": "(ᱥᱚᱦᱮᱫᱠᱩᱣᱟᱜ ᱛᱟᱹᱞᱠᱟᱹ)",
        "listgrouprights-addgroup-all": "ᱡᱚᱛᱚ ᱜᱟᱶᱛᱟᱠᱩ ᱥᱮᱞᱮᱫ ᱠᱩ ᱢᱮ",
        "listgrouprights-removegroup-all": "ᱡᱚᱛᱚ ᱜᱟᱶᱛᱟᱠᱩ ᱚᱪᱚᱜ ᱠᱩ ᱢᱮ",
-       "emailuser": "ᱱᱩᱭ á±µá±®á±µá±¦á±\9fᱨᱤᱡ e-mail ᱮᱢᱟᱭᱢᱮ",
-       "noemailtitle": "E-mail ᱴᱷᱤᱠᱟᱹᱱᱟ ᱫᱚ ᱵᱟᱹᱱᱩᱜ-ᱟ",
+       "emailuser": "ᱱᱩᱭ á±µá±®á±µá±¦á±\9fᱨᱤᱭá±\9fá±¹ á±¤á±¢á±®á±\9e ᱮᱢᱟᱭᱢᱮ",
+       "noemailtitle": "ᱤᱢᱮᱞ ᱴᱷᱤᱠᱟᱹᱱᱟ ᱫᱚ ᱵᱟᱹᱱᱩᱜ-ᱟ",
        "emailusername": "ᱵᱮᱵᱦᱟᱨᱤᱡ ᱧᱩᱛᱩᱢᱺ",
        "emailusernamesubmit": "ᱮᱢ",
        "emailfrom": "ᱠᱩᱞᱤᱪ:",
        "istemplate": "ᱥᱮᱞᱮᱫ",
        "isimage": "ᱨᱮᱫ ᱡᱚᱱᱚᱲ",
        "whatlinkshere-prev": "{{PLURAL:$1|ᱞᱟᱦᱟ ᱨᱮᱭᱟᱜ |ᱞᱟᱦᱟ ᱨᱮᱭᱟᱜ$1}}",
-       "whatlinkshere-next": "{{PLURAL:$1 |ᱛᱟᱭᱚᱢ |ᱛᱟᱭᱚᱢ $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|ᱛᱟᱭᱚᱢ|ᱛᱟᱭᱚᱢ $1}}",
        "whatlinkshere-links": "← ᱡᱚᱱᱚᱲᱠᱚ",
        "whatlinkshere-hideredirs": "$1 ᱟᱨᱦᱚᱸ ᱩᱱᱩᱫᱩᱜ",
        "whatlinkshere-hidetrans": "ᱥᱮᱞᱮᱫ $1",
        "ipblocklist": "ᱵᱮᱵᱦᱟᱨᱤᱡ ᱮᱥᱮᱫᱜᱮᱭᱟᱭ",
        "ipblocklist-submit": "ᱥᱮᱸᱫᱽᱨᱟ",
        "infiniteblock": "ᱚᱦᱤᱥᱟᱹᱵᱽ",
-       "emailblock": "E-mail ᱵᱚᱸᱫᱷ ᱜᱮᱭᱟ",
+       "emailblock": "ᱤᱢᱮᱞ ᱵᱚᱸᱫᱷ ᱜᱮᱭᱟ",
        "blocklink": "ᱮᱥᱮᱫᱽ",
        "unblocklink": "ᱵᱟᱝ ᱮᱥᱮᱫ",
        "change-blocklink": "block ᱵᱚᱫᱚᱞ",
        "contribslink": "ᱮᱱᱮᱢ",
-       "emaillink": "E-mail ᱠᱩᱞᱢᱮ",
+       "emaillink": "ᱤᱢᱮᱞ ᱠᱩᱞᱢᱮ",
        "blocklogpage": "ᱠᱩᱞᱩᱯ ᱮᱥᱮᱫ",
        "blocklogentry": "ᱮᱥᱮᱫ [[$1]] ᱥᱟᱶᱛᱮ ᱪᱟᱵᱟᱜ ᱚᱠᱛᱚ ᱚᱠᱟ ᱫᱚ $2 $3",
        "reblock-logentry": "ᱵᱚᱫᱚᱞᱮᱱᱟ ᱵᱚᱸᱫ ᱥᱟᱡᱟᱣᱠᱚ [[$1]] ᱞᱟᱹᱜᱤᱫ ᱪᱟᱵᱟᱜ ᱚᱠᱛᱚ $2 $3 ᱥᱟᱶ",
        "block-log-flags-nocreate": "ᱮᱠᱟᱣᱱᱴ ᱵᱮᱱᱟᱣ ᱵᱚᱱᱫᱷ ᱜᱮᱭᱟ",
-       "block-log-flags-noemail": "E-mail ᱵᱚᱸᱫᱷ ᱜᱮᱭᱟ",
+       "block-log-flags-noemail": "ᱤᱢᱮᱞ ᱵᱚᱸᱫᱷ ᱜᱮᱭᱟ",
        "block-log-flags-hiddenname": "ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱜ ᱧᱩᱛᱩᱢ ᱩᱠᱩ ᱜᱮᱭᱟ",
        "proxyblocker": "ᱯᱨᱚᱠᱥᱤ ᱮᱥᱮᱫᱤᱡ",
        "movepagebtn": "ᱥᱟᱦᱴᱟ ᱩᱪᱟᱹᱲᱢᱮ",
        "export-addcat": "ᱥᱮᱞᱮᱫ",
        "export-addns": "ᱥᱮᱞᱮᱫ",
        "allmessagesname": "ᱧᱩᱛᱩᱢ",
-       "allmessagesdefault": "Bań bhul mesag ol",
+       "allmessagesdefault": "ᱯᱩᱭᱞᱩ ᱚᱞᱠᱟᱱ ᱠᱷᱚᱵᱚᱨ",
        "allmessages-filter-all": "ᱡᱚᱛᱚ",
        "allmessages-language": "ᱯᱟᱹᱨᱥᱤ:",
        "allmessages-filter-submit": "ᱪᱟᱞᱟᱜ ᱢᱮ",
        "allmessages-filter-translate": "ᱛᱚᱨᱡᱚᱢᱟ",
        "thumbnail-more": "ᱞᱟᱹᱴᱩᱭ ᱢᱮ",
-       "thumbnail_error": "Benawakan unuduḱ kạṭuṕ do baṅ ṭhika: $1",
+       "thumbnail_error": "ᱵᱮᱱᱟᱣ ᱟᱠᱟᱱᱟ ᱩᱱᱩᱫᱩᱜ ᱠᱟᱹᱴᱩᱯ ᱫᱚ ᱵᱟᱝ ᱴᱷᱤᱠᱟ: $1",
        "import-upload-filename": "ᱨᱮᱫᱧᱩᱛᱩᱢᱺ",
        "importlogpage": "ᱞᱚᱜᱽ ᱟᱹᱜᱩ",
        "tooltip-pt-userpage": "{{GENDER:|ᱟᱢᱟᱜ ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱹ}} ᱥᱟᱦᱴᱟ",
        "tooltip-ca-talk": "ᱥᱟᱛᱚᱢ ᱥᱟᱦᱴᱟ ᱞᱟᱹᱜᱤᱛ ᱜᱟᱞᱢᱟᱨᱟᱣ",
        "tooltip-ca-edit": "ᱱᱚᱭᱟ ᱥᱟᱦᱴᱟ ᱥᱟᱯᱲᱟᱣᱢᱮ",
        "tooltip-ca-addsection": "ᱱᱟᱣᱟ ᱦᱟᱹᱴᱤᱧ ᱮᱦᱚᱵᱽ ᱢᱮ",
-       "tooltip-ca-viewsource": "á±±á±\9aá±£á±\9f á±¥á±\9fᱦᱴá±\9f á±«á±\9a á± á±©á±\9eᱩᱯ á±\9cᱮᱭá±\9fá±¾\nᱱᱤᱭá±\9fá±¹ á±¨á±®á±±á±\9fá±\9c á±¯á±·á±®á±°á±\9fá±\9b á±¦á±\9aᱨ ᱫᱟᱲᱮᱭᱟᱜ ᱟᱢ",
+       "tooltip-ca-viewsource": "á±±á±\9aá±£á±\9f á±¥á±\9fᱦᱴá±\9f á±«á±\9a á±¨á±\9fá± á±·á±\9f á±\9cᱮᱭá±\9fá±¾\nᱱᱤᱭá±\9fá±¹ á±¨á±®á±±á±\9fá±\9c á±¯á±·á±®á±°á±\9fá±\9b á±§á±®á±\9e ᱫᱟᱲᱮᱭᱟᱜ ᱟᱢ",
        "tooltip-ca-history": "ᱱᱚᱭᱟ ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱮᱱᱟᱝ ᱱᱟᱝ ᱧᱮᱞ ᱨᱩᱟᱹᱲ",
        "tooltip-ca-protect": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱨᱩᱠᱷᱤᱭᱟᱹᱭ ᱢᱮ",
        "tooltip-ca-delete": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱜᱮᱫᱽ ᱢᱮ",
        "tooltip-n-mainpage": "ᱢᱩᱬᱩᱛ ᱥᱟᱦᱴᱟ ᱪᱟᱞᱟᱜᱢᱮ",
        "tooltip-n-mainpage-description": "ᱢᱩᱬᱩᱛ ᱥᱟᱦᱴᱟ ᱪᱟᱞᱟᱜᱢᱮ",
        "tooltip-n-portal": "ᱱᱤᱭᱟᱹ ᱯᱨᱚᱡᱮᱠᱴ ᱠᱷᱟᱹᱛᱤᱨ, ᱪᱮᱛᱮᱢ ᱪᱮᱠᱟ ᱫᱟᱨᱮᱭᱟᱜ-ᱟ,ᱚᱠᱟᱨᱮ ᱥᱮᱸᱫᱽᱨᱟ ᱧᱟᱢᱚᱜ-ᱟ",
-       "tooltip-n-currentevents": "ᱱᱤᱛᱚᱜ events ᱨᱮ ᱡᱚᱥ ᱦᱩᱫᱤᱥ ᱧᱟᱢ ᱢᱮ",
+       "tooltip-n-currentevents": "ᱱᱤᱛᱚᱜ ᱤᱵᱷᱮᱸᱴ ᱨᱮ ᱡᱚᱥ ᱦᱩᱫᱤᱥ ᱧᱟᱢ ᱢᱮ",
        "tooltip-n-recentchanges": "ᱩᱤᱠᱤ ᱨᱮ ᱱᱟᱣᱭᱟ ᱵᱚᱫᱚᱞᱠᱳ ᱨᱮᱭᱟᱜ ᱛᱟᱹᱞᱠᱟᱹ",
        "tooltip-n-randompage": "ᱟᱨᱦᱚᱸ ᱥᱟᱦᱴᱟᱠᱳ ᱩᱫᱩᱜᱽ ᱢᱮ",
        "tooltip-n-help": "ᱥᱮᱸᱫᱽᱨᱟ ᱧᱟᱢ ᱨᱮᱭᱟᱜ ᱡᱟᱜᱟ",
        "show-big-image": "ᱟᱥᱚᱞ ᱨᱮᱫ",
        "show-big-image-preview": "ᱧᱮᱞᱡᱚᱝ ᱨᱮᱱᱟᱜ ᱟᱠᱟᱨ:$1",
        "show-big-image-other": "ᱮᱢᱟᱱ ᱛᱮᱭᱟᱜ {{PLURAL:$2|resolution|resolutions}}: $1",
-       "show-big-image-size": "$1 X $2 Pixels",
+       "show-big-image-size": "$1 × $2 Pixels",
        "ilsubmit": "ᱥᱮᱸᱫᱽᱨᱟ",
        "bydate": "ᱢᱟᱹᱦᱤᱛ ᱛᱮ",
        "monday-at": "ᱚᱛᱮᱢᱟᱦᱟᱸ $1 ᱨᱮ",
        "friday-at": "ᱡᱟᱹᱨᱩᱢ ᱢᱟᱦᱟᱸ $1 ᱨᱮ",
        "saturday-at": "ᱧᱩᱦᱩᱢ ᱢᱟᱦᱟᱸ $1 ᱨᱮ",
        "yesterday-at": "ᱦᱚᱞᱟ $1 ᱨᱮ",
-       "bad_image_list": "Format do latar re leka",
+       "bad_image_list": "ᱯᱷᱚᱨᱢᱮᱴ ᱫᱚ ᱞᱟᱛᱟᱨ ᱨᱮ ᱞᱮᱠᱟ:\n\nᱠᱷᱟᱹᱞᱤ ᱛᱟᱹᱞᱠᱟᱹ ᱟᱭᱴᱮᱢᱠᱳ (ᱞᱟᱭᱤᱱ ᱮᱛᱦᱚᱵᱚ ᱟᱜ *) ᱦᱟᱛᱟᱣᱚᱜ-ᱟ᱾\nᱯᱩᱭᱞᱩ ᱡᱚᱱᱚᱲ ᱞᱟᱭᱤᱱ ᱫᱚ ᱢᱤᱫᱴᱮᱱ ᱵᱟᱹᱲᱤᱡ ᱨᱮᱫ ᱨᱮ᱾\nᱮᱴᱟᱜ subsequent ᱡᱚᱱᱚᱲᱠᱩ ᱚᱱᱟ ᱞᱟᱭᱤᱱ ᱨᱮᱜᱮ ᱦᱟᱛᱟᱣᱚᱜ-ᱟ ᱵᱮᱛᱤᱠᱨᱚᱢ ᱠᱷᱟᱹᱛᱤᱨ, i.e. ᱥᱟᱦᱴᱟᱠᱳ ᱡᱟᱸᱦᱟᱸᱨᱮ ᱨᱮᱫ ᱨᱮᱱᱟᱜ ᱞᱟᱭᱤᱱ ᱠᱩ᱾",
        "metadata": "ᱢᱮᱴᱟ ᱥᱟᱹᱠᱷᱭᱟᱹᱛ",
        "metadata-help": "ᱱᱚᱣᱟ ᱨᱮᱫ ᱨᱮᱫᱚ ᱵᱟᱹᱲᱛᱤ ᱠᱟᱛᱷᱟᱠᱚ ᱢᱮᱱᱟᱜ-ᱟ, ᱯᱟᱥᱮᱡ ᱱᱚᱣᱟ ᱫᱚ ᱰᱤᱡᱤᱴᱟᱞ ᱠᱮᱢᱨᱟ ᱥᱮ ᱮᱥᱠᱮᱱᱟᱨ ᱵᱮᱵᱦᱟᱨ ᱠᱟᱛᱮ ᱰᱤᱡᱤᱴᱟᱞ ᱟᱠᱟᱫᱟᱠᱚ᱾ ᱡᱩᱫᱤ ᱱᱚᱣᱟ ᱨᱮᱫ ᱨᱮᱭᱟᱜ ᱵᱩᱱᱤᱭᱟᱹᱫ ᱠᱷᱚᱱ ᱱᱟᱣᱟ ᱥᱩᱫᱷᱨᱟᱣ ᱞᱮᱱᱠᱷᱟᱱ, ᱯᱟᱥᱮᱡ ᱥᱟᱱᱟᱢᱠᱚ ᱛᱷᱚᱲᱟ ᱵᱟᱝᱠᱩ ᱥᱚᱫᱚᱨᱚᱜ-ᱟ ᱱᱚᱣᱟ ᱨᱮᱫ ᱨᱮᱫᱚ᱾",
        "metadata-fields": "Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.\nOthers will be hidden by default.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "watchlisttools-edit": "ᱧᱮᱞᱢᱮ ᱟᱨ ᱧᱮᱞᱚᱜ ᱛᱟᱹᱞᱠᱟᱹ ᱥᱟᱯᱲᱟᱣᱢᱮ",
        "watchlisttools-raw": "ᱵᱟᱝ ᱯᱩᱨᱟᱣ ᱟᱠᱟᱱ ᱧᱮᱞᱚᱜ ᱛᱟᱹᱞᱠᱟᱹ ᱥᱟᱯᱲᱟᱣᱢᱮ",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ᱜᱟᱞᱢᱟᱨᱟᱣ]])",
-       "duplicate-defaultsort": "'''Sontoroḱmẽ:''' ḍifolṭ sajao reaḱ cạbi: $2 lahare ḍifolṭ sajao reaḱ sakam: ''$1'' e bae luturaḱ kana.",
+       "duplicate-defaultsort": "<strong>ᱥᱚᱱᱛᱚᱨᱚᱜᱢᱮ:</strong> ᱡᱟᱭᱞᱮᱠᱟ ᱥᱟᱡᱟᱣ ᱨᱮᱭᱟᱜ ᱪᱟᱹᱵᱤ: $2 ᱞᱟᱦᱟᱨᱮ ᱡᱟᱭᱞᱮᱠᱟ ᱥᱟᱡᱟᱣ ᱨᱮᱭᱟᱜ ᱥᱟᱦᱴᱟ: ''$1'' ᱮ ᱵᱟᱭ ᱞᱩᱛᱩᱨᱟᱜ ᱠᱟᱱᱟ᱾",
        "redirect": "ᱨᱮᱫ, ᱵᱮᱵᱷᱟᱨᱩᱭᱟᱹ, ᱥᱟᱦᱴᱟ, ᱧᱮᱞ-ᱟᱹᱨᱩ, ᱵᱟᱝᱠᱷᱟᱱ ᱞᱚᱜᱽ ID ᱫᱟᱨᱟᱭᱛᱮ ᱢᱚᱦᱰᱟ",
        "redirect-summary": "ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟ ᱫᱚ ᱢᱚᱦᱰᱟ ᱟ ᱢᱤᱫ ᱨᱮᱫ (ᱮᱢᱟᱠᱟᱱ ᱨᱮᱫᱧᱩᱛᱩᱢ) ᱴᱷᱮᱱ, ᱢᱤᱫ ᱥᱟᱦᱴᱟ (ᱮᱢᱮᱱ ᱟᱹᱨᱩᱣᱟᱜ ID ᱟᱨᱵᱟᱝ ᱥᱟᱦᱴᱟ ID),  ᱢᱤᱫ ᱵᱮᱵᱷᱟᱨᱩᱭᱟᱹ ᱥᱟᱦᱴᱟ (ᱮᱢᱮᱱ ᱮᱞᱩᱠ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ID ), ᱟᱨᱵᱟᱝ ᱢᱤᱫ ᱞᱚᱜᱽ ᱵᱚᱞᱚ (ᱮᱢᱮᱱ ᱞᱚᱜᱽ ID) ᱾ ᱵᱮᱵᱷᱟᱨᱟᱠᱟᱱ: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], ᱟᱨᱵᱟᱝ [[{{#Special:Redirect}}/logid/186]]",
        "redirect-submit": "ᱥᱮᱱᱚᱜ",
        "fileduplicatesearch-submit": "ᱥᱮᱸᱫᱽᱨᱟ",
        "specialpages": "ᱵᱤᱥᱮᱥ ᱥᱟᱦᱴᱟᱠᱚ",
        "external_image_whitelist": "#ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱫᱚ ᱪᱮᱛ ᱞᱮᱠᱟ ᱢᱮᱱᱟᱜ-ᱟ ᱚᱝᱠᱟᱜᱮ ᱫᱚᱦᱚᱭᱢᱮ\n#ᱡᱚᱛᱚ ᱚᱠᱛᱚ ᱨᱮ ᱡᱟᱹᱦᱤᱨᱮᱱ ᱠᱩᱴᱨᱟᱹ ᱞᱟᱛᱟᱨ ᱨᱮ (ᱠᱷᱟᱹᱞᱤ ᱦᱟᱹᱴᱤᱧ //ᱛᱟᱞᱟᱨᱮ) ᱵᱟᱹᱭᱥᱟᱹᱣᱢᱮ\n#ᱱᱚᱣᱟ ᱠᱚ ᱫᱚ ᱵᱟᱨᱦᱮ ᱨᱮᱭᱟᱜ (hotlinked) ᱪᱤᱛᱟᱹᱨ ᱨᱮᱭᱟᱜ URL ᱥᱟᱶᱛᱮ ᱢᱤᱞᱟᱹᱣ ᱦᱩᱭᱩᱜ-ᱟ\n#ᱚᱠᱟᱠᱩ ᱢᱤᱞᱟᱹᱜ-ᱟ, ᱚᱱᱟᱠᱩ ᱫᱚ ᱪᱤᱛᱟᱹᱨ ᱞᱮᱠᱟᱛᱮ ᱩᱫᱩᱜᱚᱜ-ᱟ, ᱵᱟᱝᱠᱷᱟᱱ ᱫᱚ ᱠᱷᱟᱹᱞᱤ ᱪᱤᱛᱟᱨ ᱡᱚᱱᱚᱲ ᱩᱫᱩᱜᱚᱜ-ᱟ\n#ᱱᱚᱣᱟ ᱞᱟᱭᱤᱱ ᱨᱮᱭᱟᱜ ᱮᱛᱦᱚᱵᱨᱮ # ᱢᱮᱱᱟᱜ-ᱟ ᱚᱱᱟ ᱞᱟᱭᱤᱱᱠᱚ ᱢᱮᱱᱠᱚ ᱦᱤᱥᱟᱹᱵᱛᱮ ᱵᱮᱵᱦᱟᱨ ᱦᱩᱭᱩᱜ-ᱟ\n#ᱱᱚᱣᱟ ᱫᱚ ᱨᱤᱢᱡᱷᱟᱹᱣᱜᱮ\n#ᱱᱚᱣᱟ ᱫᱟᱜᱽ ᱪᱮᱛᱟᱱᱨᱮ regex ᱠᱩᱴᱨᱟᱹ ᱵᱟᱹᱭᱥᱟᱹᱣᱢᱮ᱾ ᱱᱚᱣᱟ ᱞᱟᱭᱤᱱ ᱪᱮᱫᱞᱮᱠᱟ ᱢᱮᱱᱟᱜ-ᱟ ᱚᱝᱠᱟᱜᱮ ᱫᱚᱦᱚᱭᱢᱮ</pre>",
-       "tag-filter": "[[Special:Tags|Tag]] ᱪᱷᱟᱹᱠᱱᱤ:",
+       "tag-filter": "[[Special:Tags|ᱜᱚᱛᱟᱣ]] ᱪᱷᱟᱹᱱᱤ:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ᱥᱟᱛᱚᱢ|ᱥᱟᱛᱚᱢᱠᱩ}}]]: $2)",
        "tags-active-yes": "ᱦᱮᱸ",
        "tags-active-no": "ᱵᱟᱝ",
index 07cf146..22d343e 100644 (file)
        "privacy": "ذاتيات پاليسي",
        "privacypage": "Project:ذاتيات پاليسي",
        "badaccess": "اجازتي چُڪَ",
+       "badaccess-groups": "هن عمل کي محدود ڪيو ويو آهي $1 {{PLURAL:$2|جو اختيار رکندڙ|جا اختيار رکندڙن}} لاءِ.",
        "versionrequired": "ذريعات‌وڪي جو ورزن $1 درڪار",
        "versionrequiredtext": "هيءُ صفحو استعمال ڪرڻ لاءِ ذريعات‌وڪي جو ورزن $1 درڪار آهي. وڌيڪ ڄاڻڻ لاءِ [[Special:Version|ورزن بابت صفحو]] ڏسو.",
        "ok": "ٺيڪ",
        "mypreferencesprotected": "توھان کي پنھنجون ترجيحون سنوارڻ جي اجات حاصل ڪانھي.",
        "ns-specialprotected": "خاص صفحا سنواري نٿا سگھجن.",
        "titleprotected": "[[User:$1|$1]] اهڙي عنوان سان صفحو سرجڻ تي روڪ لڳائي ڇڏي آهي. سبب <em>$2</em> ڄاڻايو ويو آهي.",
+       "invalidtitle": "غلط عنوان",
        "exception-nologin": "داخل ٿيل نہ آهيو",
        "virus-unknownscanner": "اڻڄاتل نِس وائرس:",
        "cannotlogoutnow-title": "ھاڻي خارج نٿو ٿي سگھجي",
        "changepassword-throttled": "توهان تازو ئي داخل ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.",
        "botpasswords": "بوٽ جو ڳجھولفظ",
        "botpasswords-disabled": "بوٽ ڳجھالفظ ناقابلِڪار ڪيل آھن.",
+       "botpasswords-existing": "باٽ جا هاڻوڪا پاسورڊَ",
+       "botpasswords-createnew": "باٽ جو نئون پاسورڊ ٺاهيو",
+       "botpasswords-editexisting": "باٽ جي هاڻوڪي پاسورڊ کي سنواريو",
        "botpasswords-label-appid": "باٽ جو نالو:",
        "botpasswords-label-create": "سرجيو",
        "botpasswords-label-update": "تجديد",
        "botpasswords-label-resetpassword": "ڳجھولفظ ٻيھر مقرر ڪريو",
        "botpasswords-label-grants-column": "منظور",
        "botpasswords-bad-appid": "بوٽ نانءُ \"$1\" قابلِڪار ناھي.",
+       "botpasswords-created-title": "باٽ پاسورڊ ٺاهيو ويو آهي",
+       "botpasswords-deleted-title": "باٽ پاسورڊ ڊاٿو ويو",
        "resetpass_forbidden": "ڳجھالفظ بدلائي نٿا سگھجن",
        "resetpass_forbidden-reason": "ڳجھالفظ بدلائي نٿا سگھجن:$1",
        "resetpass-no-info": "هيءُ صفحو پڙهڻ لاءِ داخل ٿيڻ ضروري آهي.",
        "savechanges": "تبديليون سانڍيو",
        "publishpage": "صفحو ڇاپيو",
        "publishchanges": "تبديليون ڇاپيو",
+       "savearticle-start": "صفحو سانڍيو",
+       "savechanges-start": "تبديليون سانڍيو",
+       "publishpage-start": "صفحو ڇاپيو",
+       "publishchanges-start": "تبديليون ڇاپيو",
        "preview": "پيش نگاھ",
        "showpreview": "پيش نگاھ",
        "showdiff": "تبديليون ڏيکاريو",
        "right-override-export-depth": "5ئين اونهائيءَ تائين ڳنڍيل صفحن سميت صفحا برآمديو",
        "right-sendemail": "ٻين واپرائيندڙن ڏانھن برقٽپال موڪليو",
        "right-managechangetags": "[[Special:Tags|ٽيگس]] سرجيو ۽ ڊاهيو.",
+       "grant-group-file-interaction": "ميڊيا سان لھ وچڙ ۾ اچو",
        "grant-group-email": "برقٽپال اماڻيو",
+       "grant-group-other": "گاڏڙ ساڏڙ سرگرمي",
        "grant-blockusers": "واپرائيندڙن کي بندشيو ۽ اڻبندشيو",
        "grant-createaccount": "کاتا کوليو",
        "grant-createeditmovepage": "صفحا سرجيو، سنواريو، ۽ چوريو",
        "grant-editmywatchlist": "پنھنجي نظر ۾ فھرست سنواريو",
+       "grant-editpage": "هاڻوڪن صفحن کي سنواريو",
        "grant-editprotected": "تحفظيل صفحا سنواريو",
        "grant-rollback": "صفحن ۾ ڪيل تبديليون واپس ورايو",
        "grant-sendemail": "ٻين واپرائيندڙن ڏانھن برقٽپال موڪليو",
        "action-viewmywatchlist": "پنهنجي نظر ۾ فھرست ڏسو",
        "action-viewmyprivateinfo": "پنهنجي ذاتي معلومات ڏسو",
        "action-editmyprivateinfo": "پنهنجي ذاتي معلومات سنواريو",
+       "action-purge": "هن صفحي جي صفائي ڪيو",
        "nchanges": "$1 {{PLURAL:$1|تبديلي|تبديليون}}",
        "enhancedrc-history": "سوانح",
        "recentchanges": "تازيون تبديليون",
        "rcfilters-other-review-tools": "نظرثانيءَ جا ٻيا اوزار",
        "rcfilters-group-results-by-page": "صفحي جي لحاظ سان گروھي نتيجا",
        "rcfilters-activefilters": "سرگرم ڇاڻيون",
+       "rcfilters-activefilters-hide": "لڪايو",
+       "rcfilters-activefilters-show": "ڏيکاريو",
        "rcfilters-advancedfilters": "متقدم ڇاڻيون",
        "rcfilters-limit-title": "ڏيکارڻ لاءِ نتيجا",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|تبديلي|$1 تبديليون}}، $2",
        "rcfilters-quickfilters-placeholder-title": "اڃان ڪا به ڇاڻي سانڍيل ناهي",
        "rcfilters-savedqueries-defaultlabel": "سانڍيل ڇاڻيون",
        "rcfilters-savedqueries-rename": "ٻيھر نالو ڏيو",
+       "rcfilters-savedqueries-setdefault": "ڊيفالٽ جي طور تي ڏيکاريو",
+       "rcfilters-savedqueries-remove": "ڊاھيو",
        "rcfilters-savedqueries-new-name-label": "نالو",
        "rcfilters-savedqueries-apply-label": "ڇاڻي سرجيو",
        "rcfilters-savedqueries-cancel-label": "رد",
        "rcfilters-savedqueries-add-new-title": "ھاڻوڪيون ڇاڻين جون ترتيبون سانڍيو",
        "rcfilters-restore-default-filters": "ڏنل ڇاڻيون ريسٽور ڪريو",
+       "rcfilters-clear-all-filters": "سڀئي لڳل ڇاڻيو هٽايو",
        "rcfilters-show-new-changes": "نيون ترين تبديليون ڏيکاريو",
        "rcfilters-search-placeholder": "تبديليون ڇاڻيو (مينيو استعمال ڪريو يا ڇاڻيءَ جي ڳولا ڪريو)",
        "rcfilters-invalid-filter": "ناقابلِڪار ڇاڻي",
        "uploadwarning": "چاڙھ جو چتاءُ",
        "savefile": "فائيل سانڍيو",
        "uploaddisabled": "چاڙھ ناقابلِ ڪار بڻيل.",
+       "uploaddisabledtext": "فائيل چاڙهڻ بند ڪيل آهن.",
        "upload-scripted-pi-callback": "ن فائيل کي اپلوڊ نه ٿو ڪري سگهي جنهن ۾ ايڪس ايم ايل اسٽائيل شيٽ جون پراسيسنگ هدايتون شامل هجن.",
        "uploaded-script-svg": "اسڪرپٽ جوڳو ايليمينٽ ”$1” مليو آهي، اپلوڊ ٿيل ايس وي جي فائيل ۾.",
        "uploaded-hostile-svg": "اپلوڊ ٿيل ايس وي جي فائيل جو غير محفوظ سي ايس ايس ۾ اسٽائيل ايلمينٽ مليو",
        "upload-options": "چاڙھ جا چارا",
        "watchthisupload": "هيءُ فائيل نظر ۾ رکو",
        "upload-file-error": "اندروني چُڪَ",
+       "upload-misc-error": "چارهڻ مهل اَڻڄاتل چُڪ ٿي آهي",
        "upload-http-error": "ايڇ ٽي ٽي پي جي چُڪَ ٿي آهي: $1",
        "upload-dialog-title": "فائيل چاڙهيو",
        "upload-dialog-button-cancel": "رد",
        "backend-fail-opentemp": "عارضي فائيئ کولي نه سگھيو.",
        "backend-fail-read": "فائيل \"$1\" کي پڙهي نه سگھيو.",
        "uploadstash-thumbnail": "ٽِڪِلي ڏسو",
+       "uploadstash-zero-length": "فائيل سڃيو آهي.",
        "img-auth-accessdenied": "دسترس کان جواب",
        "license": "لائيسنسڪاري:",
        "license-header": "لائيسنسڪاري",
        "longpages": "طويل صفحا",
        "deadendpages": "اڻ ڳنڍيندڙ صفحا",
        "protectedpages": "تحفظيل صفحا",
+       "protectedpages-filters": "ڇاڻيون:",
        "protectedpages-noredirect": "چورڻا لڪايو",
        "protectedpages-timestamp": "اوقاتي مُهُرَ",
        "protectedpages-page": "صفحو",
        "apisandbox-examples": "مثال",
        "apisandbox-dynamic-parameters-add-label": "نيمپيما شامل ڪريو",
        "apisandbox-dynamic-parameters-add-placeholder": "نيمپيما نانءُ",
+       "apisandbox-add-multi": "شامل ڪيو",
        "apisandbox-results": "نتيجا",
        "apisandbox-continue": "جاري رکو",
        "booksources": "ڪتابي وسيلا",
        "listgrouprights-addgroup-all": "سڀ گروپَ شامل ڪريو",
        "listgrouprights-removegroup-all": "سڀ گروپ هٽايو",
        "listgrouprights-namespaceprotection-namespace": "نانءُ پولار:",
+       "listgrants": "گرانٽون",
+       "listgrants-grant": "گرانٽ",
        "listgrants-rights": "حق",
        "trackingcategories-name": "پيغام جو نالو",
        "trackingcategories-nodesc": "ڪا به تشريح موجود نه آهي.",
        "watchlist": "نظر ۾ فھرست",
        "mywatchlist": "نظر ۾ فھرست",
        "watchlistfor2": "$1 $2 لاءِ",
+       "watchnologin": "لاگڊ اِن ٿيل ڪونه آهيو",
        "addwatch": "نظر ۾ فھرست ۾ شامل ڪريو",
        "addedwatchtext": "صفحو\"[[:$1]]\" ان جي بحث وارو صفحو اوهان جي [[Special:Watchlist|نظر ۾ فھرست]] ۾ شامل ڪيو ويو آهي.",
        "removewatch": "نظر ۾ فھرست مان ھٽايو",
        "enotif_impersonal_salutation": "{{SITENAME}} واپرائيندڙ",
        "enotif_lastdiff": "هي تبديلي ڏسڻ لاءِ، $1 ڏسو",
        "enotif_anon_editor": "گمنام واپرائيندڙ $1",
+       "enotif_minoredit": "هيءَ ننڍڙي سنوار آهي",
        "created": "ٺهي چڪو",
        "changed": "تبديل ٿي ويو",
        "deletepage": "صفحو ڊاهيو",
        "protect-expiry-options": "1 ڪلاڪ:1 hour,1 ڏينهن:1 day,1 هفتو:1 week,2 هفتو:2 weeks,1 مهينا:1 month,3 مهينا:3 months,6 مهينا:6 months,1 سال:1 year,اڻ کٽ:infinite",
        "restriction-type": "اجازتنامو:",
        "restriction-level": "روڪ سطح:",
+       "minimum-size": "ننڍي ماپ ۾",
+       "maximum-size": "وڌي ماپ ۾:",
        "pagesize": "(بائيٽس)",
        "restriction-edit": "سنواريو",
        "restriction-move": "چوريو",
        "restriction-upload": "چاڙهيو",
        "restriction-level-sysop": "مڪمل طور تحفظيل",
        "restriction-level-autoconfirmed": "نيم تحفظيل",
+       "undelete": "ڊاٺل صفحا ڏسو",
        "viewdeletedpage": "ڊاٺل صفحا ڏسو",
        "undelete-nodiff": "ڪوبہ اڳيون مسودو نہ لڌو",
        "undeletebtn": "بحاليو",
        "export": "صفحا برآمديو",
        "exportall": "سڀ صفحا برآمديو",
        "export-submit": "برآمديو",
+       "export-addcat": "شامل ڪيو",
+       "export-addns": "شامل ڪيو",
        "export-download": "بطور فائيل سانڍيو",
        "export-templates": "سانچا شامل ڪريو",
        "allmessages": "سرشتائي نياپا",
        "thumbnail-more": "وڏو ڪريو",
        "filemissing": "فائيل کٽل",
        "import": "صفحا درآمديو",
+       "import-interwiki-sourcewiki": "وڪيءَ جو ذريعو:",
+       "import-interwiki-sourcepage": "صفحي جو ذريعو:",
+       "import-interwiki-submit": "درآمد ڪيو",
+       "import-mapping-default": "ڊيفالت لوڪيشنز تي درآمد ڪيو:",
+       "import-mapping-namespace": "نالي واري خاني ۾ درآمد ڪيو:",
        "import-upload-filename": "فائيل نانءُ:",
        "import-comment": "تاثر:",
+       "importstart": "صفحا درآمد ٿين پيا...",
        "importlogpage": "درآمد لاگ",
        "tooltip-pt-userpage": "{{GENDER:|توھانجو}} صفحو",
        "tooltip-pt-mytalk": "{{GENDER:|توھانجو}} بحث صفحو",
        "tooltip-t-permalink": "صفحي جي ان نظرثاليءَ ڏانھن مستقل ڳنڍڻو",
        "tooltip-ca-nstab-main": "مواد جي صفحي کي ڏسو",
        "tooltip-ca-nstab-user": "واپرائيندڙ جو صفحو ڏسو",
+       "tooltip-ca-nstab-media": "ميڊيا جو صفحو ڏسو",
        "tooltip-ca-nstab-special": "هيءُ خاص صفحو آهي، ان ۾ ترميم نٿي ڪري سگھجي",
        "tooltip-ca-nstab-project": "رٿائي صفحو ڏسو",
        "tooltip-ca-nstab-image": "ھن فائيل جو صفحو ڏسو",
        "tooltip-ca-nstab-category": "هن زمري جو صفحو ڏسو",
        "tooltip-minoredit": "ان کي هڪ معمولي ترميم ڄاڻايو",
        "tooltip-save": "پنھنجون تبديليون سانڍيو",
+       "tooltip-publish": "پنهنجيون تبديليون ڇاپيو",
        "tooltip-preview": "پنھنجي تبديلين تي نگاھ وجھو. براءِ مھرباني اھو سانڍڻ کان اڳ ڪندا.",
        "tooltip-diff": "لکت ۾ ڪيل پنھنجون تبديليون ڏسو",
        "tooltip-compareselectedversions": "هن صفحي جن ٻن چونڊيل پرتن درميان تفاوت ڏسو.",
        "tooltip-watch": "هيءُ صفحو پنهنجي نظر ۾ فھرست ۾ شامل ڪريو",
+       "tooltip-watchlistedit-normal-submit": "فائيل ھٽايو",
+       "tooltip-watchlistedit-raw-submit": "واچ لسٽ کي اَپڊيٽ ڪيو",
+       "tooltip-upload": "چاڙهڻ شروع ڪيو",
        "tooltip-rollback": "\"واپس ورايو\" ھن صفحي ۾ پوئين ڀاڱيدار جي ڪيل ترميم(ن) کي ھڪ ٽڙڪ سان اڻڪري ٿو",
        "tooltip-undo": "\"اڻڪريو\" هن ترميم کي واپس ڪيو ۽ پيش نگاه ۾ ترميم کي کوليو. اهو اوهان کي تت شامل ڪرڻ جو موقعو ڏيندو.",
        "tooltip-preferences-save": "ترجيحون سانڍيو",
        "pageinfo-magic-words": "جادوئي {{PLURAL:$1|لفظُ|لفظَ}} ($1)",
        "pageinfo-hidden-categories": "لڪيل {{PLURAL:$1|زمرو|زمرا}} ($1)",
        "pageinfo-toolboxlink": "صفحي جي معلومات",
+       "pageinfo-redirectsto-info": "ڄاڻ",
        "pageinfo-contentpage": "موادي صفحي طور ڳڻيو ويندڙ",
        "pageinfo-contentpage-yes": "ها",
        "pageinfo-protect-cascading-yes": "ها",
+       "pageinfo-category-info": "ڪيٽاگريءَ جي باري ۾ ڄاڻ",
        "pageinfo-category-total": "رڪنن جو ڪل تعداد",
+       "pageinfo-category-pages": "صفحن جو تعداد",
        "pageinfo-category-subcats": "ذيلي زمرن جو تعداد",
        "pageinfo-category-files": "صفحن جو تعداد",
+       "pageinfo-user-id": "واهپيندڙ (يوزر) جي سڃاڻپ (آءِ ڊي)",
        "markaspatrolledtext": "ھن صفحي کي گشت ڪيل طور نشان لڳايو",
        "patrol-log-page": "گشت لاگ",
+       "confirm-markpatrolled-button": "ٺيڪ (او ڪي) آهي",
        "previousdiff": "← اڳوڻي ترميم",
        "nextdiff": "نئين تر ترميم →",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|صفحو|صفحا}}",
index 6db5b71..c7b403e 100644 (file)
        "anontalk": "Ságastallan IP-čujuhussii",
        "navigation": "Navigašuvdna",
        "and": "&#32;ja",
+       "variants": "Variánttat",
        "errorpagetitle": "Feaila",
        "returnto": "Máhcat siidui $1.",
        "tagline": "{{SITENAME}}",
        "template-protected": "(suodjáluvvon)",
        "template-semiprotected": "(suodjáluvvon anonyma ja ođđa geavaheddjiin)",
        "edittools": "<!-- Teaksta mii lea dás, čájehuvvo rievdadanskovi vuolábealde. -->",
+       "content-model-wikitext": "wikiteaksta",
        "viewpagelogs": "Čájet dán siiddu loggaid",
        "nohistory": "Dán siiddus ii leat rievdadanhistorjá.",
        "currentrev": "Dálá veršuvdna",
        "page_first": "vuosttas siidu",
        "page_last": "maŋimus siidu",
        "history-fieldset-title": "Bláđe historjjá",
-       "histfirst": "Vuosttas",
-       "histlast": "Maŋimus",
+       "histfirst": "vuosttas",
+       "histlast": "maŋimus",
        "historysize": "($1 stávvala)",
        "historyempty": "(guoros)",
        "history-feed-title": "Rievdadushistorjá",
        "upload-file-error": "Stuorra feaila",
        "upload-misc-error": "Feaila",
        "upload-curl-error6": "Čujuhus ii doaimma",
-       "license": "Liseansa",
+       "license": "Liseansa:",
        "license-header": "Liseansa",
        "nolicense": "Ii liseansa",
        "license-nopreview": "(ovdalgihtii geahččan ii leat vejolaš)",
        "notargettext": "It leat meroštallan mearresiiddu dahje -geavaheaddji, masa dahku laktása.",
        "booksources": "Girjegáldut",
        "booksources-search-legend": "Oza girjegálduid",
+       "booksources-search": "Oza",
        "booksources-text": "Vuolábealde leat liŋkkat olggobeal siidduide, main vuvdojuvvot ođđa ja boares girjjid. Siiddui sáhttá maid leat lassedieđut girjjiin.",
        "specialloguserlabel": "Geavaheaddji:",
        "speciallogtitlelabel": "Mearri",
        "revertpage": "Geavaheaddji [[Special:Contributions/$2|$2]] ([[User_talk:$2|ságastallan]]) rievdadusat sihkkojuvvui ja siidu máhcahuvvui veršuvdnii, man geavaheaddji [[User:$1|$1]] lei dahkan.",
        "rollback-success": "Rievdadusat, maid geavaheaddji ”$1” lei dahkan, sihkojuvvui ja artihkal máhcaduvvui veršuvdnii, man geavaheaddji $2 lei dahkan.",
        "protectlogpage": "Suodjálanlogga",
-       "protectedarticle": "suodjálii siiddu $1",
+       "protectedarticle": "suodjálii siiddu [[$1]]",
        "modifiedarticleprotection": "rievddai siiddu [[$1]] suodjálandási",
        "unprotectedarticle": "heittii siiddu $1 suodjaleami",
        "protect-title": "Siiddu $1 suodjáleapmi",
        "contributions": "Geavaheaddji rievdadusat",
        "contributions-title": "Geavaheaddji $1 rievdadusat",
        "mycontris": "Rievdadusat",
+       "anoncontribs": "Rievdadusat",
        "uctop": "(ođđaseamos)",
        "month": "Mánotbadji",
        "year": "Jahki",
        "sp-contributions-newbies": "Čájet ođđa geavaheddjiid rievdadusaid",
        "sp-contributions-newbies-sub": "Ođđa geavaheddjiid rievdadusat",
        "sp-contributions-blocklog": "cakkastallamat",
+       "sp-contributions-logs": "loggat",
        "sp-contributions-talk": "ságastallan",
        "sp-contributions-userrights": "Geavaheaddjirivttiid stivren",
        "sp-contributions-search": "Oza rievdadusaid",
        "watchlisttools-view": "Čájet rievdadusaid",
        "watchlisttools-edit": "Ođasmahte listtu",
        "version": "Veršuvdna",
+       "redirect-file": "Fiilanamma",
        "specialpages": "Erenomáš siiddut",
        "logentry-delete-delete": "$1 sihkui siiddu $3",
        "logentry-delete-restore": "$1 máhcahii siiddu $3",
        "logentry-move-move": "$1 sirddii siiddu $3 nammii $4",
        "logentry-move-move_redir-noredirect": "$1 sirddii siiddu $3 nammii $4 iige ráhkadan ođđasitstivrema",
        "logentry-newusers-create": "$1 ráhkadii dovddaldaga",
-       "logentry-newusers-autocreate": "Dovddaldat $1 ráhkaduvvui automáhtalaččat",
+       "logentry-newusers-autocreate": "Dovddaldat $1 {{GENDER:$2|ráhkaduvvui}} automáhtalaččat",
        "rightsnone": "(eai rievttit)",
        "searchsuggest-search": "Oza"
 }
index d8a7a88..1e11dbc 100644 (file)
        "userrights": "Postavke korisničkih prava",
        "userrights-lookup-user": "Menadžment korisničkih prava",
        "userrights-user-editname": "Unesi korisničko ime:",
-       "editusergroup": "Menjaj Grupe Korisnika",
+       "editusergroup": "Učitaj korisničke grupe",
        "editinguser": "Mijenjate korisnička prava {{GENDER:$1|korisnika|korisnice}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Uredi korisničke grupe",
        "saveusergroups": "Snimi korisničke grupe",
index 75aa015..4df3c9d 100644 (file)
        "anontalk": "Pogovorna stran",
        "navigation": "Navigacija",
        "and": "&#32;in",
-       "faq": "Najpogostejša vprašanja",
+       "faq": "Pogosta vprašanja",
        "actions": "Dejanja",
        "namespaces": "Imenski prostori",
        "variants": "Različice",
        "ns-specialprotected": "Posebnih strani ni mogoče urejati.",
        "titleprotected": "Uporabnik [[User:$1|$1]] je preprečil ustvarjanje strani s tem naslovom.\nPodan razlog je <em>$2</em>.",
        "filereadonlyerror": "Ne morem spremeniti datoteke »$1«, ker je skladišče datotek »$2« v načinu, ki dovoljuje samo branje.\n\nSistemski skrbnik, ki ga je zaklenil, je podal naslednje pojasnilo: »$3«.",
+       "invalidtitle": "Neveljaven naslov",
        "invalidtitle-knownnamespace": "Neveljaven naslov z imenskim prostorom »$2« in besedilom »$3«",
        "invalidtitle-unknownnamespace": "Neveljaven naslov z neznano številko imenskega prostora $1 in besedilom »$2«",
        "exception-nologin": "Niste prijavljeni",
        "rcfilters-restore-default-filters": "Obnovi privzete filtre",
        "rcfilters-clear-all-filters": "Počisti vse filtre",
        "rcfilters-show-new-changes": "Ogled najnovejših sprememb",
-       "rcfilters-search-placeholder": "Filtrirajte spremembe (uporabite meni ali poiščite ime filtra)",
+       "rcfilters-search-placeholder": "Filtriraj zadnje spremembe (uporabi meni ali vnesi ime filtra)",
        "rcfilters-invalid-filter": "Neveljaven filter",
        "rcfilters-empty-filter": "Ni dejavnih filtrov. Prikazani so vsi prispevki.",
        "rcfilters-filterlist-title": "Filtri",
        "rcfilters-filterlist-whatsthis": "Kako to deluje?",
-       "rcfilters-filterlist-feedbacklink": "Povejte nam, kaj menite o teh orodjih za filtriranje",
+       "rcfilters-filterlist-feedbacklink": "Povej nam, kaj meniš o tem orodju za filtriranje",
        "rcfilters-highlightbutton-title": "Označi rezultate",
-       "rcfilters-highlightmenu-title": "Izberite barvo",
-       "rcfilters-highlightmenu-help": "Izberite barvo za označitev te lastnosti",
+       "rcfilters-highlightmenu-title": "Izberi barvo",
+       "rcfilters-highlightmenu-help": "Izberi barvo za označitev te lastnosti",
        "rcfilters-filterlist-noresults": "Nismo našli nobenega filtra",
        "rcfilters-noresults-conflict": "Našli nismo nobenih rezultatov, ker si merila za iskanje nasprotujejo",
        "rcfilters-state-message-subset": "Ta filter nima učinka, saj njegove rezultate {{PLURAL:$2|vključuje naslednji, širši filter|vključujeta naslednja, širša filtra|vključujejo naslednji, širši filtri}} (označite jih, da razlikujete med njimi): $1",
        "rcfilters-state-message-fullcoverage": "Izbira vseh filtrov v tej skupini je enako kot izbira nobenega, zato ta filter nima učinka. Skupina vključuje: $1",
        "rcfilters-filtergroup-authorship": "Avtorstvo prispevka",
-       "rcfilters-filter-editsbyself-label": "Vaše spremembe",
-       "rcfilters-filter-editsbyself-description": "Vaša lastna urejanja.",
+       "rcfilters-filter-editsbyself-label": "Tvoje spremembe",
+       "rcfilters-filter-editsbyself-description": "Tvoja lastna urejanja.",
        "rcfilters-filter-editsbyother-label": "Spremembe drugih",
-       "rcfilters-filter-editsbyother-description": "Vse spremembe razen vaših.",
+       "rcfilters-filter-editsbyother-description": "Vse spremembe razen tvojih.",
        "rcfilters-filtergroup-userExpLevel": "Prijava in izkušnje uporabnika",
        "rcfilters-filter-user-experience-level-registered-label": "Registrirani",
        "rcfilters-filter-user-experience-level-registered-description": "Prijavljeni uporabniki.",
        "rcfilters-filtergroup-significance": "Pomembnost",
        "rcfilters-filter-minor-label": "Manjša urejanja",
        "rcfilters-filter-minor-description": "Urejanja, ki jih je avtor označil kot manjša.",
-       "rcfilters-filter-major-label": "Nemanjša urejanja",
+       "rcfilters-filter-major-label": "Večja urejanja",
        "rcfilters-filter-major-description": "Urejanja, ki niso označena kot manjša.",
        "rcfilters-filtergroup-watchlist": "Nadzorovane strani",
        "rcfilters-filter-watchlist-watched-label": "Na spisku nadzorov",
        "rcfilters-filter-newpages-label": "Ustvarjanja strani",
        "rcfilters-filter-newpages-description": "Urejanja, ki ustvarijo nove strani.",
        "rcfilters-filter-categorization-label": "Spremembe kategorij",
-       "rcfilters-filter-categorization-description": "Zapisi o straneh, ki so bila dodana ali odstranjena iz kategorij.",
+       "rcfilters-filter-categorization-description": "Zapisi o straneh, ki so bile dodane ali odstranjene iz kategorij.",
        "rcfilters-filter-logactions-label": "Dnevniška dejanja",
        "rcfilters-filter-logactions-description": "Administrativna dejanja, ustvarjanja računov, izbrisi strani, nalaganja ...",
        "rcfilters-hideminor-conflicts-typeofchange-global": "Filter »Manjša urejanja« je v sporu z enim ali več filtri Vrsta spremembe, ker nekaterih vrst urejanj ni možno označiti kot »manjša«. Filtri v sporu so označeni v območju Dejavni filtri zgoraj.",
        "filehist-filesize": "Velikost datoteke",
        "filehist-comment": "Komentar",
        "imagelinks": "Uporaba datoteke",
-       "linkstoimage": "Datoteka je del {{PLURAL:$1|naslednje $1 strani|naslednjih $1 strani}} {{GRAMMAR:rodilnik|{{SITENAME}}}}:",
-       "linkstoimage-more": "Na to datoteko se {{PLURAL:$1|povezuje več kot $1 stran|povezujeta več kot $1 strani|povezujejo več kot $1 strani|povezuje več kot $1 strani}}.\nNaslednji seznam obsega samo {{PLURAL:$1|prvo stran, ki se povezuje|prvi $1 strani, ki se povezujeta|prve $1 strani, ki se povezujejo|prvih $1 strani, ki se povezujejo}} na datoteko.\nNa razpolago je tudi [[Special:WhatLinksHere/$2|popoln seznam]].",
-       "nolinkstoimage": "Z datoteko se ne povezuje nobena stran.",
+       "linkstoimage": "Datoteko {{PLURAL:$1|uporablja naslednja $1 stran|uporabljata naslednji $1 strani|uporabljajo naslednje $1 strani|uporablja naslednjih $1 strani}}:",
+       "linkstoimage-more": "To datoteko {{PLURAL:$1|uporablja več kot $1 stran|uporabljata več kot $1 strani|uporabljajo več kot $1 strani|uporablja več kot $1 strani}}.\nNaslednji seznam obsega samo {{PLURAL:$1|prvo stran, ki uporablja|prvi $1 strani, ki uporabljata|prve $1 strani, ki uporabljajo|prvih $1 strani, ki uporabljajo}} datoteko.\nNa razpolago je tudi [[Special:WhatLinksHere/$2|popoln seznam]].",
+       "nolinkstoimage": "Nobena stran ne uporablja te datoteke.",
        "morelinkstoimage": "Preglejte [[Special:WhatLinksHere/$1|več povezav]] na to datoteko.",
        "linkstoimage-redirect": "$1 (preusmeritev datoteke) $2",
        "duplicatesoffile": "{{PLURAL:$1|Sledeča datoteka je dvojnik|Sledeči datoteki sta dvojnika|Sledeče $1 datoteke so dvojniki|Sledečih $1 datotek so dvojniki}} te datoteke ([[Special:FileDuplicateSearch/$2|več podrobnosti]]):",
        "tag-mw-rollback-description": "Urejanja, ki vrnejo prejšnja urejanja s povezavo za vrnitev",
        "tag-mw-undo": "Razveljavljeno",
        "tag-mw-undo-description": "Urejanja, ki razveljavijo prejšnja urejanja z uporabo povezave za razveljavitev",
-       "tags-title": "Etikete",
-       "tags-intro": "Ta stran navaja etikete, s katerimi lahko programje označi urejanja, in njihov pomen.",
+       "tags-title": "Oznake",
+       "tags-intro": "Ta stran navaja oznake, s katerimi lahko programje označi urejanja, in njihov pomen.",
        "tags-tag": "Ime oznake",
        "tags-display-header": "Prikaz na seznamu sprememb",
        "tags-description-header": "Polni opis pomena",
        "tags-source-header": "Vir",
        "tags-active-header": "Dejavno?",
-       "tags-hitcount-header": "Etiketirane spremembe",
+       "tags-hitcount-header": "Označene spremembe",
        "tags-actions-header": "Dejanja",
        "tags-active-yes": "Da",
        "tags-active-no": "Ne",
index b130857..5b0e814 100644 (file)
        "tog-hidepatrolled": "Сакриј патролиране измене са списка скорашњих измена",
        "tog-newpageshidepatrolled": "Сакриј патролиране странице са списка нових страница",
        "tog-hidecategorization": "Сакриј категоризацију страница",
-       "tog-extendwatchlist": "Прошири списак надгледања за приказ свих измена, не само скорашњих",
+       "tog-extendwatchlist": "Прошири списак надгледања за поглед свих измена, не само скорашњих",
        "tog-usenewrc": "Групиши измене по страници у скорашњим изменама и списку надгледања",
        "tog-numberheadings": "Аутоматски нумериши поднаслове",
-       "tog-showtoolbar": "ТÑ\80ака Ñ\81а алаткама за уређивање",
+       "tog-showtoolbar": "Ð\9fÑ\80икажи Ñ\82Ñ\80акÑ\83 Ñ\81 алаткама за уређивање",
        "tog-editondblclick": "Уреди странице двоструким кликом",
-       "tog-editsectiononrightclick": "Уређивање одељака десним кликом на њихове наслове",
-       "tog-watchcreations": "Додај странице које направим и датотеке које отпремим у мој списак надгледања",
-       "tog-watchdefault": "Додај странице и датотеке које изменим у мој списак надгледања",
-       "tog-watchmoves": "Додај странице и датотеке које преместим у мој списак надгледања",
-       "tog-watchdeletion": "Додај странице и датотеке које обришем у мој списак надгледања",
-       "tog-watchuploads": "Додај датотеке које отпремим у мој списак надгледања",
-       "tog-watchrollback": "Ð\94одаÑ\98 Ñ\81Ñ\82Ñ\80аниÑ\86е Ð½Ð° ÐºÐ¾Ñ\98има Ñ\81ам Ð²Ñ\80аÑ\82ио Ð¸Ð·Ð¼ÐµÐ½Ðµ Ñ\83 мој списак надгледања",
+       "tog-editsectiononrightclick": "Ð\9eмогÑ\83Ñ\9bи Ñ\83ређивање одељака десним кликом на њихове наслове",
+       "tog-watchcreations": "Додај странице које направим и датотеке које отпремим на мој списак надгледања",
+       "tog-watchdefault": "Додај странице и датотеке које уредим на мој списак надгледања",
+       "tog-watchmoves": "Додај странице и датотеке које преместим на мој списак надгледања",
+       "tog-watchdeletion": "Додај странице и датотеке које обришем на мој списак надгледања",
+       "tog-watchuploads": "Додај датотеке које отпремим на мој списак надгледања",
+       "tog-watchrollback": "Ð\94одаÑ\98 Ñ\81Ñ\82Ñ\80аниÑ\86е Ð½Ð° ÐºÐ¾Ñ\98има Ñ\81ам Ð¸Ð·Ð²Ñ\80Ñ\88ио Ð²Ñ\80аÑ\9bаÑ\9aе Ð¸Ð·Ð¼ÐµÐ½Ð° Ð½Ð° мој списак надгледања",
        "tog-minordefault": "Означавај све измене као мање",
        "tog-previewontop": "Прикажи претпреглед пре оквира за уређивање",
        "tog-previewonfirst": "Прикажи претпреглед при првој измени",
        "tog-enotifwatchlistpages": "Пошаљи ми имејл када се промени страница или датотека са мог списка надгледања",
-       "tog-enotifusertalkpages": "Пошаљи ми имејл кад се промени моја страница за разговор",
+       "tog-enotifusertalkpages": "Пошаљи ми имејл кад се промени моја корисничка страница за разговор",
        "tog-enotifminoredits": "Пошаљи ми имејл и код мањих измена страница и датотека",
        "tog-enotifrevealaddr": "Откриј моју имејл адресу у порукама обавештења",
        "tog-shownumberswatching": "Прикажи број корисника који надгледају",
        "tog-watchlisthidebots": "Сакриј измене ботова са списка надгледања",
        "tog-watchlisthideminor": "Сакриј мање измене са списка надгледања",
        "tog-watchlisthideliu": "Сакриј измене пријављених корисника са списка надгледања",
-       "tog-watchlistreloadautomatically": "Ð\90Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð¾Ñ\81вежи Ñ\81пиÑ\81ак Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа ÐºÐ°Ð´ Ð³Ð¾Ð´ Ñ\81е Ñ\84илÑ\82еÑ\80 Ð¸Ð·мени (потребан JavaScript)",
+       "tog-watchlistreloadautomatically": "Ð\90Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð¾Ñ\81вежи Ñ\81пиÑ\81ак Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа ÐºÐ°Ð´ Ð³Ð¾Ð´ Ñ\81е Ñ\84илÑ\82еÑ\80 Ð¿Ñ\80омени (потребан JavaScript)",
        "tog-watchlistunwatchlinks": "Додај везе за директно додавање/уклањање ставки са списка надгледања (потребан JavaScript)",
        "tog-watchlisthideanons": "Сакриј измене анонимних корисника са списка надгледања",
        "tog-watchlisthidepatrolled": "Сакриј патролиране измене са списка надгледања",
        "tog-watchlisthidecategorization": "Сакриј категоризацију страница",
        "tog-ccmeonemails": "Пошаљи ми копије имејлова које пошаљем другим корисницима",
        "tog-diffonly": "Не приказуј садржај странице испод разлика",
-       "tog-showhiddencats": "Скривене категорије",
+       "tog-showhiddencats": "Ð\9fÑ\80икажи Ñ\81кривене категорије",
        "tog-norollbackdiff": "Не приказуј разлику након извршеног враћања",
-       "tog-useeditwarning": "Упозори ме када напуштам страницу са несачуваним изменама",
-       "tog-prefershttps": "Увек користи сигурну везу док сам пријављен.",
+       "tog-useeditwarning": "Упозори ме када напуштам страницу за уређивање с несачуваним променама",
+       "tog-prefershttps": "Увек користи сигурну везу док сам пријављен.",
        "underline-always": "увек",
        "underline-never": "никад",
        "underline-default": "према теми или прегледачу",
        "actions": "Радње",
        "namespaces": "Именски простори",
        "variants": "Варијанте",
-       "navigation-heading": "Ð\9dавигаÑ\86иони Ð¼ÐµÐ½Ð¸",
+       "navigation-heading": "Ð\9cени Ð·Ð° Ð½Ð°Ð²Ð¸Ð³Ð°Ñ\86иÑ\98Ñ\83",
        "errorpagetitle": "Грешка",
        "returnto": "Назад на страницу „$1“.",
        "tagline": "Извор: {{SITENAME}}",
        "create-local": "Додај локални опис",
        "delete": "Обриши",
        "undelete_short": "Врати {{PLURAL:$1|обрисану измену|$1 обрисане измене|$1 обрисаних измена}}",
-       "viewdeleted_short": "Погледај {{PLURAL:$1|обрисану измену|$1 обрисане измене|$1 обрисаних измена}}",
+       "viewdeleted_short": "Погледај {{PLURAL:$1|једну обрисану измену|$1 обрисане измене|$1 обрисаних измена}}",
        "protect": "Заштити",
        "protect_change": "промени",
        "unprotect": "Промени заштиту",
        "talk": "Разговор",
        "views": "Прегледи",
        "toolbox": "Алатке",
-       "tool-link-userrights": "УÑ\80еди {{GENDER:$1|корисничке}} групе",
-       "tool-link-userrights-readonly": "{{GENDER:$1|Корисничке}} групе",
-       "tool-link-emailuser": "Ð\9fоÑ\88аÑ\99и Ð¸Ð¼ÐµÑ\98л {{GENDER:$1|кориснику|корисници}}",
+       "tool-link-userrights": "Ð\9fÑ\80омени {{GENDER:$1|корисничке}} групе",
+       "tool-link-userrights-readonly": "Преглед {{GENDER:$1|корисничких}} група",
+       "tool-link-emailuser": "СлаÑ\9aе Ð¸Ð¼ÐµÑ\98ла {{GENDER:$1|кориснику|корисници}}",
        "imagepage": "Погледај страницу датотеке",
        "mediawikipage": "Погледај страницу поруке",
        "templatepage": "Погледај страницу шаблона",
        "portal-url": "Project:Портал заједнице",
        "privacy": "Политика приватности",
        "privacypage": "Project:Политика приватности",
-       "badaccess": "Ð\93Ñ\80еÑ\88ке Ñ\83 Ð¾Ð²Ð»Ð°Ñ\88Ñ\9bеÑ\9aима",
-       "badaccess-group0": "Ð\9dиÑ\98е Ð\92ам Ð´Ð¾Ð·Ð²Ð¾Ñ\99ено Ð´Ð° Ð¸Ð·Ð²Ñ\80Ñ\88иÑ\82е Ð·Ð°Ñ\85Ñ\82еванÑ\83 Ñ\80адÑ\9aÑ\83.",
+       "badaccess": "Ð\93Ñ\80еÑ\88ка Ñ\83 Ð´Ð¾Ð·Ð²Ð¾Ð»Ð°ма",
+       "badaccess-group0": "Ð\9dиÑ\98е Ð²Ð°Ð¼ Ð´Ð¾Ð·Ð²Ð¾Ñ\99ено Ð´Ð° Ð¸Ð·Ð²Ñ\80Ñ\88иÑ\82е Ñ\80адÑ\9aÑ\83 ÐºÐ¾Ñ\98Ñ\83 Ñ\81Ñ\82е Ð·Ð°Ñ\85Ñ\82евали.",
        "badaccess-groups": "Радња коју сте захтевали је ограничена само корисницима у {{PLURAL:$2|следећој групи|следећим групама}}: $1.",
        "versionrequired": "Потребна је верзија $1 Медијавикија",
-       "versionrequiredtext": "Ð\9fоÑ\82Ñ\80ебно Ñ\98е Ð¸Ð·Ð´Ð°Ñ\9aе $1 Ð\9cедиÑ\98авикиÑ\98а Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82или Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83.\nÐ\9fогледаÑ\98Ñ\82е Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð·Ð° [[Special:Version|издаÑ\9aе]].",
+       "versionrequiredtext": "Ð\9fоÑ\82Ñ\80ебна Ñ\98е Ð²ÐµÑ\80зиÑ\98а $1 Ð\9cедиÑ\98авикиÑ\98а Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82или Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83.\nÐ\9fогледаÑ\98Ñ\82е Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 [[Special:Version|веÑ\80зиÑ\98е]].",
        "ok": "У реду",
        "pagetitle": "$1 — {{SITENAME}}",
        "pagetitle-view-mainpage": "{{SITENAME}}",
        "youhavenewmessages": "{{PLURAL:$3|Имате}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Имате}} $1 од {{PLURAL:$3|другог корисника|$3 корисника}} ($2).",
        "youhavenewmessagesmanyusers": "Имате $1 од много корисника ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|нову поруку|нове поруке|нових порука}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|последња измена|последње измене|последњих измена}}",
+       "newmessageslinkplural": "{{PLURAL:$1|нову поруку|нове поруке|999=нових порука}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|последња измена|999=последње измене}}",
        "youhavenewmessagesmulti": "Имате нове поруке на $1",
        "editsection": "уреди",
        "editold": "уреди",
        "confirmable-no": "Не",
        "thisisdeleted": "Погледај или врати $1?",
        "viewdeleted": "Погледај $1?",
-       "restorelink": "{{PLURAL:$1|обрисану измену|$1 обрисане измене|$1 обрисаних измена}}",
-       "feedlinks": "Ð\94овод:",
-       "feed-invalid": "Ð\9dеиÑ\81пÑ\80авна Ð²Ñ\80Ñ\81Ñ\82а Ð´Ð¾Ð²Ð¾Ð´Ð°.",
-       "feed-unavailable": "Ð\94оводи нису доступни",
-       "site-rss-feed": "$1 RSS довод",
-       "site-atom-feed": "$1 Атом довод",
-       "page-rss-feed": "„$1“ RSS довод",
-       "page-atom-feed": "„$1“ Атом довод",
-       "feed-atom": "Атом",
+       "restorelink": "{{PLURAL:$1|једну обрисану измену|$1 обрисане измене|$1 обрисаних измена}}",
+       "feedlinks": "Фид:",
+       "feed-invalid": "Ð\9dеважеÑ\9bи Ñ\82ип Ð¿Ñ\80иÑ\98аве Ð½Ð° Ñ\84ид.",
+       "feed-unavailable": "Фидови Ñ\81индикаÑ\86иÑ\98е нису доступни",
+       "site-rss-feed": "$1 – RSS фид",
+       "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": "Поређај растуће",
        "nstab-main": "Страница",
-       "nstab-user": "{{GENDER:{{BASEPAGENAME}}|Корисник|Корисница|Корисник}}",
+       "nstab-user": "{{GENDER:{{BASEPAGENAME}}|Корисник|Корисница}}",
        "nstab-media": "Медији",
        "nstab-special": "Посебно",
        "nstab-project": "Пројекат",
        "nstab-category": "Категорија",
        "mainpage-nstab": "Главна страна",
        "nosuchaction": "Нема такве радње",
-       "nosuchactiontext": "Радња наведена у адреси није исправна.\nМожда сте погрешно написали адресу или сте пратили застарелу везу.\nМогуће је и да се ради о грешци у софтверу викија.",
+       "nosuchactiontext": "Радња наведена у URL-у није валидна.\nМожда сте откуцали погрешан URL-а или сте пратили покварену везу.\nОво такође може да указује на грешку у софтверу који користи {{SITENAME}}.",
        "nosuchspecialpage": "Нема такве посебне странице",
-       "nospecialpagetext": "<strong>Ð\9fоÑ\81ебна Ñ\81Ñ\82Ñ\80аниÑ\86а ÐºÐ¾Ñ\98Ñ\83 Ñ\81Ñ\82е Ð·Ð°Ñ\85Ñ\82евали Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82оÑ\98и.</strong>\n\nСпиÑ\81ак Ñ\81виÑ\85 Ð¿Ð¾Ñ\81ебниÑ\85 Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð°Ð»Ð°Ð·Ð¸ Ñ\81е на „[[Special:SpecialPages|{{int:specialpages}}]]”.",
+       "nospecialpagetext": "<strong>Ð\97аÑ\85Ñ\82евали Ñ\81Ñ\82е Ð½ÐµÐ²Ð°Ð»Ð¸Ð´Ð½Ñ\83 Ð¿Ð¾Ñ\81ебнÑ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83.</strong>\n\nСпиÑ\81ак Ð²Ð°Ð»Ð¸Ð´Ð½Ð¸Ñ\85 Ð¿Ð¾Ñ\81ебниÑ\85 Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð¿Ñ\80онаÑ\92е на „[[Special:SpecialPages|{{int:specialpages}}]]”.",
        "error": "Грешка",
        "databaseerror": "Грешка у бази података",
-       "databaseerror-text": "Дошло је до грешке у упиту базе података. Можда је у питању програмска грешка.",
+       "databaseerror-text": "Дошло је до грешке у упиту базе података. \nОво може да указује на грешку у софтверу.",
        "databaseerror-textcl": "Дошло је до грешке у упиту базе података.",
        "databaseerror-query": "Упит: $1",
        "databaseerror-function": "Функција: $1",
        "databaseerror-error": "Грешка: $1",
-       "laggedslavemode": "<strong>Упозорење:</strong> могуће је да страница није ажурирана.",
+       "laggedslavemode": "<strong>Упозорење:</strong> страница можда не садржи скорашња ажурирања.",
        "readonly": "База података је закључана",
        "enterlockreason": "Унесите разлог за закључавање, укључујући и време откључавања",
        "readonlytext": "База података је тренутно закључана, што значи да је није могуће мењати.\n\nСистемски администратор је навео следеће објашњење: $1",
        "readonly_lag": "База података је аутоматски закључана да би се секундарни сервери базе података ускладили с главним.",
        "internalerror": "Унутрашња грешка",
        "internalerror_info": "Интерна грешка: $1",
-       "internalerror-fatal-exception": "ФаÑ\82ална Ð³Ñ\80еÑ\88ка типа „$1“",
+       "internalerror-fatal-exception": "Ð\93Ñ\80еÑ\88ка Ð½ÐµÐ¾Ð±Ñ\80аÑ\92еног Ð¸Ð·Ñ\83зеÑ\82ка типа „$1“",
        "filecopyerror": "Не могу да копирам датотеку „$1“ у „$2“.",
        "filerenameerror": "Не могу да преименујем датотеку „$1“ у „$2“.",
        "filedeleteerror": "Не могу да обришем датотеку „$1“.",
        "delete-hook-aborted": "Брисање је прекинула кука.\nНије дато никакво образложење.",
        "no-null-revision": "Не могу да направим нову празну верзију за страницу „$1“",
        "badtitle": "Неисправан наслов",
-       "badtitletext": "Ð\9dаÑ\81лов Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98е Ð½ÐµÐ¸Ñ\81пÑ\80аван, Ð¿Ñ\80азан Ð¸Ð»Ð¸ Ñ\98е Ð¼ÐµÑ\92Ñ\83Ñ\98езиÑ\87ки Ð¸Ð»Ð¸ Ð¼ÐµÑ\92Ñ\83вики Ð½Ð°Ñ\81лов Ð¿Ð¾Ð³Ñ\80еÑ\88но Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½.\nÐ\9cожда Ñ\81адÑ\80жи Ð·Ð½Ð°ÐºÐ¾Ð²Ðµ који се не могу користити у насловима.",
+       "badtitletext": "Ð\97аÑ\85Ñ\82евани Ð½Ð°Ñ\81лов Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98е Ð½ÐµÐ²Ð°Ð¶ÐµÑ\9bи, Ð¿Ñ\80азан Ð¸Ð»Ð¸ Ñ\98е Ð¿Ð¾Ð³Ñ\80еÑ\88но Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½ Ð¼ÐµÑ\92Ñ\83Ñ\98езиÑ\87ки Ð¸Ð»Ð¸ Ð¼ÐµÑ\92Ñ\83вики Ð½Ð°Ñ\81лов.\nÐ\9cожда Ñ\81адÑ\80жи Ñ\98едан Ð¸Ð»Ð¸ Ð²Ð¸Ñ\88е Ð·Ð½Ð°ÐºÐ¾Ð²Ð° који се не могу користити у насловима.",
        "title-invalid-empty": "Тражено име странице је празно или садржи само назив именског простора.",
        "title-invalid-utf8": "Тражени назив странице садржи неважећи UTF-8 знак.",
        "title-invalid-interwiki": "Тражени наслов странице садржи унутрашњу вики везу која не може бити кориштена у насловима.",
        "namespaceprotected": "Немате дозволу да уређујете странице у именском простору: <strong>$1</strong>.",
        "customcssprotected": "Немате дозволу да мењате ову CSS страницу јер садржи лична подешавања другог корисника.",
        "customjsprotected": "Немате дозволу да мењате ову страницу JavaScript јер садржи лична подешавања другог корисника.",
-       "mycustomcssprotected": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð·Ð° Ð¼ÐµÑ\9aаÑ\9aе Ð¾Ð²Ðµ CSS Ñ\81Ñ\82Ñ\80аниÑ\86е.",
-       "mycustomjsonprotected": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð·Ð° Ð¼ÐµÑ\9aаÑ\9aе Ð¾Ð²Ðµ JSON Ñ\81Ñ\82Ñ\80аниÑ\86е.",
-       "mycustomjsprotected": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð·Ð° Ð¼ÐµÑ\9aаÑ\9aе Ð¾Ð²Ðµ JavaScript Ñ\81Ñ\82Ñ\80аниÑ\86е.",
-       "myprivateinfoprotected": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð·Ð° Ð¼ÐµÑ\9aаÑ\9aе Ð²Ð°Ñ\88иÑ\85 Ð»Ð¸Ñ\87ниÑ\85 Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а.",
-       "mypreferencesprotected": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð·Ð° Ð¼ÐµÑ\9aаÑ\9aе Ð²Ð°Ñ\88иÑ\85 подешавања.",
+       "mycustomcssprotected": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98еÑ\82е Ð¾Ð²Ñ\83 CSS Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83.",
+       "mycustomjsonprotected": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98еÑ\82е Ð¾Ð²Ñ\83 JSON Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83.",
+       "mycustomjsprotected": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98еÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ñ\81 Ñ\98аваÑ\81кÑ\80ипÑ\82ом.",
+       "myprivateinfoprotected": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98еÑ\82е Ñ\81воÑ\98е Ð¿Ñ\80иваÑ\82не Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98е.",
+       "mypreferencesprotected": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98еÑ\82е Ñ\81воÑ\98а подешавања.",
        "ns-specialprotected": "Посебне странице се не могу уређивати.",
        "titleprotected": "Овај назив је [[User:$1|$1]] заштитио од прављења. Разлог: <em>$2</em>.",
        "filereadonlyerror": "Не могу да изменим датотеку „$1“ јер је ризница „$2“ у режиму за читање.\n\nСистемски администратор је навео следеће објашњење: „$3“.",
+       "invalidtitle": "Неважећи наслов",
        "invalidtitle-knownnamespace": "Неисправан наслов с именским простором „$2“ и текстом „$3“",
        "invalidtitle-unknownnamespace": "Неисправан наслов с именским простором бр. $1 и текстом „$2“",
        "exception-nologin": "Нисте пријављени",
        "exception-nologin-text": "Пријавите се да бисте приступили овој страници или радњи.",
        "exception-nologin-text-manual": "Морате бити $1 да бисте приступили овој страници или радњи.",
        "virus-badscanner": "Неисправно подешавање: непознати скенер за вирусе: <em>$1</em>",
-       "virus-scanfailed": "неуспешно скенирање (код $1)",
+       "virus-scanfailed": "скенирање није успело (код $1)",
        "virus-unknownscanner": "непознати антивирус:",
-       "logouttext": "<strong>Сада Ñ\81Ñ\82е Ð¾Ð´Ñ\98авÑ\99ени.</strong>\n\nÐ\97апамÑ\82иÑ\82е Ð´Ð° Ð½ÐµÐºÐµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð½Ð°Ñ\81Ñ\82аве Ð´Ð° Ñ\81е Ð¿Ñ\80иказÑ\83Ñ\98Ñ\83 ÐºÐ°Ð¾ Ð´Ð° Ñ\81Ñ\82е Ñ\98оÑ\88 Ñ\83век Ð¿Ñ\80иÑ\98авÑ\99ени, Ð´Ð¾Ðº Ð½Ðµ Ð¾Ñ\87иÑ\81Ñ\82иÑ\82е Ð¿Ñ\80ивÑ\80еменÑ\83 Ð¼ÐµÐ¼Ð¾Ñ\80иÑ\98Ñ\83 свог прегледача.",
+       "logouttext": "<strong>Сада Ñ\81Ñ\82е Ð¾Ð´Ñ\98авÑ\99ени.</strong>\n\nÐ\97апамÑ\82иÑ\82е Ð´Ð° Ð½ÐµÐºÐµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¼Ð¾Ð³Ñ\83 Ð½Ð°Ñ\81Ñ\82авиÑ\82и Ð´Ð° Ñ\81е Ð¿Ñ\80иказÑ\83Ñ\98Ñ\83 ÐºÐ°Ð¾ Ð´Ð° Ñ\81Ñ\82е Ñ\98оÑ\88 Ñ\83век Ð¿Ñ\80иÑ\98авÑ\99ени, Ñ\81ве Ð´Ð¾Ðº Ð½Ðµ Ð¾Ñ\87иÑ\81Ñ\82иÑ\82е ÐºÐµÑ\88 свог прегледача.",
        "cannotlogoutnow-title": "Одјава тренутно није могућа",
        "cannotlogoutnow-text": "Одјава није могућа током употребе $1.",
        "welcomeuser": "Добро дошли, $1!",
        "cannotlogin-text": "Пријава није могућа",
        "cannotloginnow-title": "Пријава тренутно није могућа",
        "cannotloginnow-text": "Пријава није могућа када се користи $1.",
-       "cannotcreateaccount-title": "Ð\9eÑ\82ваÑ\80аÑ\9aе Ð½Ð°Ð»Ð¾Ð³Ð° Ð½Ð¸Ñ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе",
+       "cannotcreateaccount-title": "Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð¾Ñ\82воÑ\80им Ð½Ð°Ð»Ð¾Ð³е",
        "cannotcreateaccount-text": "Директно прављење налога није омогућено на овом викију.",
        "yourdomainname": "Домен:",
        "password-change-forbidden": "Не можете да промените лозинку на овом викију.",
-       "externaldberror": "Ð\94оÑ\88ло Ñ\98е Ð´Ð¾ Ð³Ñ\80еÑ\88ке Ð¿Ñ\80и Ð¿Ñ\80епознаваÑ\9aÑ\83 Ð±Ð°Ð·Ðµ Ð¿Ð¾Ð´Ð°Ñ\82ака Ð¸Ð»Ð¸ Ð½ÐµÐ¼Ð°Ñ\82е Ð¾Ð²Ð»Ð°Ñ\88Ñ\9bеÑ\9aа да ажурирате свој спољни налог.",
+       "externaldberror": "Ð\94оÑ\88ло Ñ\98е Ð´Ð¾ Ð³Ñ\80еÑ\88ке Ð¿Ñ\80и Ð°Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98и Ð±Ð°Ð·Ðµ Ð¿Ð¾Ð´Ð°Ñ\82ака Ð¸Ð»Ð¸ Ð²Ð°Ð¼ Ð½Ð¸Ñ\98е Ð´Ð¾Ð·Ð²Ð¾Ñ\99ено да ажурирате свој спољни налог.",
        "login": "Пријави ме",
        "login-security": "Верификација вашег индентитета",
        "nav-login-createaccount": "Пријава/регистрација",
        "userlogin-reauth": "Морате се поново пријавити да би верификовали да сте {{GENDER:$1|$1}}.",
        "userlogin-createanother": "Отвори још један налог",
        "createacct-emailrequired": "Имејл адреса",
-       "createacct-emailoptional": "Ð\98меÑ\98л Ð°Ð´Ñ\80еÑ\81а (необавезно)",
+       "createacct-emailoptional": "Ð\98меÑ\98л Ð°Ð´Ñ\80еÑ\81а (опÑ\86ионално)",
        "createacct-email-ph": "Унесите своју имејл адресу",
        "createacct-another-email-ph": "Унесите имејл адресу",
        "createaccountmail": "Користите привремену, случајно створену лозинку и пошаљите на наведену имејл адресу",
        "createaccountmail-help": "Може се користити да се некоме отвори налог без сазнања лозинке.",
-       "createacct-realname": "Ð\9fÑ\80аво Ð¸Ð¼Ðµ (необавезно)",
+       "createacct-realname": "Ð\9fÑ\80аво Ð¸Ð¼Ðµ (опÑ\86ионално)",
        "createacct-reason": "Разлог",
        "createacct-reason-ph": "Зашто правите још један налог?",
-       "createacct-reason-help": "Ð\9fоÑ\80Ñ\83ка ÐºÐ¾Ñ\98а Ñ\81е Ð¿Ñ\80иказÑ\83Ñ\98е Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 Ñ\81Ñ\82ваÑ\80ања корисничких налога",
-       "createacct-submit": "Отвори налог",
+       "createacct-reason-help": "Ð\9fоÑ\80Ñ\83ка ÐºÐ¾Ñ\98а Ñ\81е Ð¿Ñ\80иказÑ\83Ñ\98е Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и Ð¿Ñ\80авÑ\99ења корисничких налога",
+       "createacct-submit": "Отвори свој налог",
        "createacct-another-submit": "Отвори налог",
        "createacct-continue-submit": "Наставите отварање налога",
        "createacct-another-continue-submit": "Наставите отварање налога",
        "createacct-benefit-body3": "недавно {{PLURAL:$1|активни корисник|активна корисника|активних корисника}}",
        "badretype": "Унете лозинке се не поклапају.",
        "usernameinprogress": "Налог за ово корисничко име се већ прави, сачекајте.",
-       "userexists": "Ð\9aоÑ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ Ñ\98е Ð·Ð°Ñ\83зеÑ\82о. Ð\98заберите друго.",
+       "userexists": "УнеÑ\81ено ÐºÐ¾Ñ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ Ñ\98е Ð²ÐµÑ\9b Ñ\83 Ñ\83поÑ\82Ñ\80еби.\nÐ\9eдаберите друго.",
        "loginerror": "Грешка при пријављивању",
        "createacct-error": "Дошло је до грешке при отварању налога",
        "createaccounterror": "Не могу да отворим налог: $1.",
        "wrongpasswordempty": "Нисте унели лозинку. Покушајте поново.",
        "passwordtooshort": "Лозинка мора имати најмање {{PLURAL:$1|један знак|$1 знака|$1 знакова}}.",
        "passwordtoolong": "Лозинке не могу бити дуже од {{PLURAL:$1|$1 знака|$1 знакова}}.",
-       "passwordtoopopular": "ЧеÑ\81Ñ\82о Ð¸Ð·Ð°Ð±Ñ\80ане Ð»Ð¾Ð·Ð¸Ð½ÐºÐµ Ð½Ðµ Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82е. Ð\98заберите лозинку коју је теже погодити.",
+       "passwordtoopopular": "ЧеÑ\81Ñ\82о Ð¾Ð´Ð°Ð±Ñ\80ане Ð»Ð¾Ð·Ð¸Ð½ÐºÐµ Ð½Ðµ Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82е. Ð\9eдаберите лозинку коју је теже погодити.",
        "password-name-match": "Лозинка се мора разликовати од корисничког имена.",
        "password-login-forbidden": "Коришћење овог корисничког имена и лозинке је забрањено.",
        "mailmypassword": "Ресетуј лозинку",
        "passwordremindertitle": "{{SITENAME}} — привремена лозинка",
        "passwordremindertext": "Неко са IP адресе $1 је затражио нову лозинку на викију {{SITENAME}} ($4).\nСтворена је привремена лозинка за {{GENDER:$2|корисника|корисницу|корисника}} $2 која гласи $3.\nУколико је ово ваш захтев, сада се пријавите и поставите нову лозинку.\nПривремена лозинка истиче за {{PLURAL:$5|један дан|$5 дана}}.\n\nАко је неко други затражио промену лозинке, или сте се сетили ваше лозинке и не желите да је мењате, занемарите ову поруку.",
        "noemail": "Не постоји имејл адреса за {{GENDER:$1|корисника|корисницу}} $1.",
-       "noemailcreate": "Ð\9cоÑ\80аÑ\82е Ð½Ð°Ð²ÐµÑ\81Ñ\82и Ð¸Ñ\81пÑ\80авну имејл адресу.",
+       "noemailcreate": "Ð\9cоÑ\80аÑ\82е Ð´Ð° Ð½Ð°Ð²ÐµÐ´ÐµÑ\82е Ð²Ð°Ð»Ð¸Ð´ну имејл адресу.",
        "passwordsent": "Нова лозинка је послата на имејл адресу {{GENDER:$1|корисника|кориснице|корисника}} $1.\nПријавите се пошто је примите.",
-       "blocked-mailpassword": "Ð\92аÑ\88а IP Ð°Ð´Ñ\80еÑ\81а Ð¸Ð¼Ð° Ð·Ð°Ð±Ñ\80анÑ\83 Ñ\83Ñ\80еÑ\92иваÑ\9aа. Ð Ð°Ð´Ð¸ Ñ\81пÑ\80еÑ\87аваÑ\9aа Ð·Ð»Ð¾Ñ\83поÑ\82Ñ\80ебе, Ð½Ð¸Ñ\98е Ð´Ð¾Ð·Ð²Ð¾Ñ\99ено Ð²Ñ\80аÑ\9bаÑ\9aе лозинке са ње.",
+       "blocked-mailpassword": "УÑ\80еÑ\92иваÑ\9aе Ñ\81а Ð²Ð°Ñ\88е IP Ð°Ð´Ñ\80еÑ\81е Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ано. Ð Ð°Ð´Ð¸ Ñ\81пÑ\80еÑ\87аваÑ\9aа Ð·Ð»Ð¾Ñ\83поÑ\82Ñ\80ебе, Ð·Ð°Ð±Ñ\80аÑ\9aена Ñ\98е Ð¸ Ñ\84Ñ\83нкÑ\86иÑ\98а Ð²Ñ\80аÑ\9bаÑ\9aа лозинке са ње.",
        "eauthentsent": "На наведену имејл адресу је послат потврдни код.\nПре него што пошаљемо даљње поруке, пратите упутства с имејла да бисте потврдили да сте Ви отворили налог.",
        "throttled-mailpassword": "Порука за промену лозинке је послата у {{PLURAL:$1|1=последњих сат времена|последња $1 сата|последњих $1 сати}}.\nДа бисмо спречили злоупотребу, подсетник шаљемо само једном у року од {{PLURAL:$1|1=сат времена|$1 сата|$1 сати}}.",
        "mailerror": "Грешка при слању поруке: $1",
        "acct_creation_throttle_hit": "Посетиоци овог викија који користе вашу IP адресу су већ отворили {{PLURAL:$1|1=један налог|$1 налога}} претходни $2, што је највећи дозвољени број у том временском периоду.\nЗбог тога посетиоци с ове IP адресе тренутно не могу отворити више налога.",
-       "emailauthenticated": "Ваша имејл адреса је потврђена на дан $2 у $3.",
+       "emailauthenticated": "Ваша имејл адреса је потврђена на дан $2 у $3 ч.",
        "emailnotauthenticated": "Ваша имејл адреса још увек није потврђена.\nИмејл неће бити послат ни у једном од следећих случајева.",
        "noemailprefs": "Наведите имејл адресу у својим подешавањима за рад ових могућности.",
        "emailconfirmlink": "Потврдите своју имејл адресу",
-       "invalidemailaddress": "Ð\98меÑ\98л Ð°Ð´Ñ\80еÑ\81а Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ\82и Ð¿Ñ\80иÑ\85ваÑ\9bена Ñ\98еÑ\80 Ñ\98е Ð½ÐµÐ¸Ñ\81пÑ\80авног облика.\nУнесите исправну адресу или оставите празно поље.",
+       "invalidemailaddress": "Ð\98меÑ\98л Ð°Ð´Ñ\80еÑ\81а Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ\82и Ð¿Ñ\80иÑ\85ваÑ\9bена Ñ\98еÑ\80 Ñ\98е Ð½ÐµÐ²Ð°Ð»Ð¸Ð´ног облика.\nУнесите исправну адресу или оставите празно поље.",
        "cannotchangeemail": "На овом викију не можете променити имејл адресу налога.",
        "emaildisabled": "Овај сајт не може да шаље имејлове.",
        "accountcreated": "Налог је отворен",
        "login-migrated-generic": "Ваш налог је мигриран и ваше корисничко више не постоји на овом викију.",
        "loginlanguagelabel": "Језик: $1",
        "suspicious-userlogout": "Ваш захтев за одјаву је одбијен јер је послат од стране неисправног прегледача или посредника.",
-       "createacct-another-realname-tip": "Право име није обавезно.\nАко изаберете да га унесете, оно ће бити коришћено за приписивање вашег рада.",
+       "createacct-another-realname-tip": "Право име  је необавезно.\nАко одаберете да га наведете, биће коришћено за приписивање вашег рада.",
        "pt-login": "Пријави ме",
        "pt-login-button": "Пријави ме",
        "pt-login-continue-button": "Настави пријављивање",
        "botpasswords-no-central-id": "Да би сте користили ботовске лозинке, морате бити пријављени на средишњи налог.",
        "botpasswords-existing": "Постојећа лозинка бота",
        "botpasswords-createnew": "Направи нову лозинку за бота",
-       "botpasswords-editexisting": "Ð\98змени Ð¿Ð¾Ñ\81Ñ\82оÑ\98еÑ\9bÑ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83 Ð·Ð° бота",
+       "botpasswords-editexisting": "УÑ\80еди Ð¿Ð¾Ñ\81Ñ\82оÑ\98еÑ\9bÑ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83 бота",
        "botpasswords-label-needsreset": "(лозинку треба ресетовати)",
        "botpasswords-label-appid": "Име бота:",
        "botpasswords-label-create": "Направи",
        "botpasswords-label-grants": "Применљиве дозволе:",
        "botpasswords-label-grants-column": "Одобрено",
        "botpasswords-bad-appid": "Име бота „$1” није валидно.",
-       "botpasswords-insert-failed": "Неуспешно додавање бота \"$1\". Да ли је већ додат?",
-       "botpasswords-update-failed": "Ð\9dиÑ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе Ð°Ð¶Ñ\83Ñ\80иÑ\80аÑ\82и Ð±Ð¾Ñ\82а \"$1\". Да ли је обрисан?",
+       "botpasswords-insert-failed": "Неуспело додавање бота под именом „$1”. Можда је већ додат?",
+       "botpasswords-update-failed": "Ð\9dеÑ\83Ñ\81пело Ð°Ð¶Ñ\83Ñ\80иÑ\80аÑ\9aе Ð±Ð¾Ñ\82а Ð¿Ð¾Ð´ Ð½Ð°Ð·Ð¸Ð²Ð¾Ð¼ â\80\9e$1â\80\9d. Да ли је обрисан?",
        "botpasswords-created-title": "Направљена лозинка бота",
        "botpasswords-created-body": "Лозинка за бота „$1” корисника „$2” је направљена.",
        "botpasswords-updated-title": "Лозинка бота промењена",
        "resetpass-abort-generic": "Промену лозинке је спречио додатак.",
        "resetpass-expired": "Ваша лозинка је истекла. Поставите нову лозинку да бисте се пријавили.",
        "resetpass-expired-soft": "Ваша лозинка је истекла и морате је променити. Поставите нову лозинку или кликните „{{int:authprovider-resetpass-skip-label}}“ да је промените касније.",
-       "resetpass-validity-soft": "Ð\92аÑ\88а Ð»Ð¾Ð·Ð¸Ð½ÐºÐ° Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авна: $1\n\nÐ\9cолимо Ð¸Ð·Ð°Ð±ÐµÑ\80иÑ\82е Ð½Ð¾Ð²Ñ\83 Ð¸Ð»Ð¸ ÐºÐ»Ð¸ÐºÐ½Ð¸Ñ\82е „{{int:authprovider-resetpass-skip-label}}“ да је промените касније.",
-       "passwordreset": "Ð\9eбнавÑ\99ање лозинке",
+       "resetpass-validity-soft": "Ð\92аÑ\88а Ð»Ð¾Ð·Ð¸Ð½ÐºÐ° Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´Ð½Ð°: $1\n\nÐ\98забеÑ\80иÑ\82е Ð½Ð¾Ð²Ñ\83 Ð¾Ð´Ð¼Ð°Ñ\85 Ð¸Ð»Ð¸ ÐºÐ»Ð¸ÐºÐ½Ð¸Ñ\82е Ð½Ð° „{{int:authprovider-resetpass-skip-label}}“ да је промените касније.",
+       "passwordreset": "РеÑ\81еÑ\82овање лозинке",
        "passwordreset-text-one": "Попуните овај образац да бисте добили привремену лозинку на имејл.",
        "passwordreset-text-many": "{{PLURAL:$1|Испуните једно од поља како бисте добили привремену лозинку на имејл.}}",
-       "passwordreset-disabled": "Ð\9eбнавÑ\99ање лозинке је онемогућено на овом викију.",
+       "passwordreset-disabled": "РеÑ\81еÑ\82овање лозинке је онемогућено на овом викију.",
        "passwordreset-emaildisabled": "Имејл је онемогућен на овом викију.",
        "passwordreset-username": "Корисничко име:",
        "passwordreset-domain": "Домен:",
        "passwordreset-email": "Имејл адреса:",
        "passwordreset-emailtitle": "Детаљи налога на викију {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Неко (вероватно Ви, са IP адресе $1) је затражио нову лозинку на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом имејл адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку и наставите користити стару лозинку.",
+       "passwordreset-emailtext-ip": "Неко (вероватно Ви, с IP адресе $1) затражио је ресетовање Ваше \nлозинке за пројекат {{SITENAME}} ($4). Следећи кориснички {{PLURAL:$3|налог је повезан|налози су повезани}} \nс овом имејл адресом:\n\n$2\n\n{{PLURAL:$3|Ова привремена лозинка|Ове привремене лозинке}} ће истећи за {{PLURAL:$5|један дан|$5 дана}}.\nТребате да се пријавите и одаберите нову лозинку одмах. Ако је неко други направио овај \nзахтев или сте се сетили своје првобитне лозинке, а не \nжелите да је промените, можете да занемарите ову поруку и наставите да користите своју стару \nлозинку.",
        "passwordreset-emailtext-user": "{{GENDER:$1|Корисник је затражио|Корисница је затражила}} подсетник о подацима за пријаву на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом имејл адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку.",
        "passwordreset-emailelement": "Корисничко име: \n$1\n\nПривремена лозинка: \n$2",
        "passwordreset-emailsentemail": "Ако је ово имејл адреса повезана са Вашим налогом, подсетник о лозинци ће бити послат на имејл.",
        "resettokens-no-tokens": "Нема жетона за ресетовање.",
        "resettokens-tokens": "Жетони:",
        "resettokens-token-label": "$1 (тренутна вредност: $2)",
-       "resettokens-watchlist-token": "Ð\96еÑ\82он Ð·Ð° Ð²ÐµÐ± Ð´Ð¾Ð²Ð¾Ð´ (Atom/RSS) [[Special:Watchlist|измена на страницама у вашем списку надгледања]]",
+       "resettokens-watchlist-token": "Токен Ð·Ð° Ð²ÐµÐ±-Ñ\84ид (Atom/RSS) [[Special:Watchlist|пÑ\80омена на страницама у вашем списку надгледања]]",
        "resettokens-done": "Жетони су ресетовани",
        "resettokens-resetbutton": "Ресетуј изабране жетоне",
        "bold_sample": "Подебљан текст",
        "extlink_tip": "Спољашња веза (с префиксом http://)",
        "headline_sample": "Текст наслова",
        "headline_tip": "Поднаслов (ниво 2)",
-       "nowiki_sample": "УбаÑ\86иÑ\82е Ð½ÐµÐ¾Ð±Ð»Ð¸ÐºÐ¾Ð²Ð°Ð½ Ñ\82екÑ\81Ñ\82 Ð¾Ð²Ð´Ðµ",
+       "nowiki_sample": "Ð\9eвде Ñ\83меÑ\82ниÑ\82е Ð½ÐµÐ¾Ð±Ð»Ð¸ÐºÐ¾Ð²Ð°Ð½ Ñ\82екÑ\81Ñ\82",
        "nowiki_tip": "Занемари вики обликовање",
        "image_sample": "Пример.jpg",
        "image_tip": "Уграђивање датотеке",
        "media_sample": "Пример.ogg",
        "media_tip": "Веза",
-       "sig_tip": "Ваш потпис са тренутним временом",
+       "sig_tip": "Ваш потпис с временском ознаком",
        "hr_tip": "Водоравна линија (користите ретко)",
        "summary": "Опис измене:",
        "subject": "Тема:",
        "subject-preview": "Преглед теме:",
        "previewerrortext": "Догодила се грешка приликом приказивања ваших измена.",
        "blockedtitle": "Корисник је блокиран",
-       "blockedtext": "<strong>Ð\92аÑ\88е ÐºÐ¾Ñ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ Ð¸Ð»Ð¸ IP Ð°Ð´Ñ\80еÑ\81а Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана.</strong>\n\nÐ\91локиÑ\80аÑ\9aе Ñ\98е {{GENDER:$4|извÑ\80Ñ\88ио|извÑ\80Ñ\88ила}} $1.\nРазлог Ñ\98е <em>$2</em>.\n\n* Ð\9fоÑ\87еÑ\82ак Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа: $8\n* Ð\98Ñ\81Ñ\82ек Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа: $6\n* Ð\91локиÑ\80ани: $7\n\nÐ\9cожеÑ\82е Ð´Ð° Ñ\81е Ð¾Ð±Ñ\80аÑ\82иÑ\82е {{GENDER:$4|коÑ\80иÑ\81никÑ\83|коÑ\80иÑ\81ниÑ\86и}} $1 Ð¸Ð»Ð¸ [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\83]] Ñ\80ади Ð´Ð¸Ñ\81кÑ\83Ñ\81иÑ\98е Ð¾ Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aÑ\83.\nÐ\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82 â\80\9e{{int:emailuser}}â\80\9d Ð¾Ñ\81им Ð°ÐºÐ¾ Ñ\81Ñ\82е Ñ\83нели Ð²Ð°Ð»Ð¸Ð´Ð½Ñ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ñ\83 Ñ\81воÑ\98им [[Special:Preferences|подеÑ\88аваÑ\9aима]] Ð½Ð°Ð»Ð¾Ð³Ð° Ð¸ Ð½Ð¸Ñ\81Ñ\82е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ани Ð¾Ð´ ÐºÐ¾Ñ\80иÑ\88Ñ\9bеÑ\9aа Ð¸Ñ\81Ñ\82е.\nÐ\92аÑ\88а Ñ\82Ñ\80енÑ\83Ñ\82на IP Ð°Ð´Ñ\80еÑ\81а Ñ\98е $3, Ð° ID Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа #$5.\nÐ\9dаведиÑ\82е Ñ\81ве Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98е Ð¾Ð´Ð¾Ð·Ð³Ð¾ Ð¿Ñ\80и Ñ\81Ñ\82ваÑ\80ању било каквих упита.",
-       "autoblockedtext": "Ð\92аÑ\88а IP Ð°Ð´Ñ\80еÑ\81а Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана Ñ\98еÑ\80 Ñ\98Ñ\83 Ñ\98е Ñ\83поÑ\82Ñ\80ебÑ\99авао Ð´Ñ\80Ñ\83ги ÐºÐ¾Ñ\80иÑ\81ник, ÐºÐ¾Ð³Ð° Ñ\98е {{GENDER:$4|блокиÑ\80ао|блокиÑ\80ала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Ð\94аÑ\82Ñ\83м Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа: $8\n* Ð\91локиÑ\80аÑ\9aе Ð¸Ñ\81Ñ\82иÑ\87е: $6\n* Ð\98ме ÐºÐ¾Ñ\80иÑ\81ника: $7\n\nÐ\9eбÑ\80аÑ\82иÑ\82е Ñ\81е {{GENDER:$4|коÑ\80иÑ\81никÑ\83|коÑ\80иÑ\81ниÑ\86и}} $1 Ð¸Ð»Ð¸ [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\83]] Ð´Ð° Ñ\80азÑ\98аÑ\81ниÑ\82е Ñ\81Ñ\82ваÑ\80.\n\nÐ\9dе Ð¼Ð¾Ð¶ÐµÑ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82и Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82 â\80\9e{{int:emailuser}}â\80\9c Ð°ÐºÐ¾ Ð½Ð¸Ñ\81Ñ\82е Ñ\83нели Ð¸Ñ\81пÑ\80авнÑ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ñ\83 [[Special:Preferences|подеÑ\88аваÑ\9aима]].\n\nÐ\92аÑ\88а Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана IP Ð°Ð´Ñ\80еÑ\81а Ñ\98е $3, Ð° ID $5.\nÐ\9dаведиÑ\82е Ñ\81ве Ð¿Ð¾Ð´Ð°Ñ\82ке Ð¸Ð·Ð½Ð°Ð´ Ð¿Ñ\80и Ñ\81Ñ\82ваÑ\80ању било каквих упита.",
+       "blockedtext": "<strong>Ð\92аÑ\88е ÐºÐ¾Ñ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ Ð¸Ð»Ð¸ IP Ð°Ð´Ñ\80еÑ\81а Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана.</strong>\n\nÐ\91локиÑ\80аÑ\9aе Ñ\98е {{GENDER:$4|извÑ\80Ñ\88ио|извÑ\80Ñ\88ила}} $1.\nРазлог Ñ\98е <em>$2</em>.\n\n* Ð\9fоÑ\87еÑ\82ак Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ: $8\n* Ð\9aÑ\80аÑ\98 Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ: $6\n* Ð\91локиÑ\80ани ÐºÐ¾Ñ\80иÑ\81ник: $7\n\nÐ\9cожеÑ\82е Ð´Ð° ÐºÐ¾Ð½Ñ\82акÑ\82иÑ\80аÑ\82е {{GENDER:$4|коÑ\80иÑ\81ника|коÑ\80иÑ\81ниÑ\86Ñ\83}} $1 Ð¸Ð»Ð¸ Ð´Ñ\80Ñ\83гог [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80а]] Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ñ\80азговаÑ\80али Ð¾ Ð±Ð»Ð¾ÐºÐ°Ð´Ð¸.\nÐ\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82 â\80\9e{{int:emailuser}}â\80\9d Ð¾Ñ\81им Ð°ÐºÐ¾ Ñ\81Ñ\82е Ð½Ð°Ð²ÐµÐ»Ð¸ Ð²Ð°Ñ\99анÑ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ñ\83 Ñ\81воÑ\98им [[Special:Preferences|подеÑ\88аваÑ\9aима Ð½Ð°Ð»Ð¾Ð³Ð°]] Ð¸ Ð½Ð¸Ñ\81Ñ\82е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ани Ð¾Ð´ ÐºÐ¾Ñ\80иÑ\88Ñ\9bеÑ\9aа Ð¸Ñ\81Ñ\82е.\nÐ\92аÑ\88а Ñ\82Ñ\80енÑ\83Ñ\82на IP Ð°Ð´Ñ\80еÑ\81а Ñ\98е $3, Ð° ID Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ #$5.\nУкÑ\99Ñ\83Ñ\87иÑ\82е Ñ\81ве Ð³Ð¾Ñ\80Ñ\9aе Ð´ÐµÑ\82аÑ\99е Ð¿Ñ\80и Ð¿Ñ\80авÑ\99ењу било каквих упита.",
+       "autoblockedtext": "Ð\92аÑ\88а IP Ð°Ð´Ñ\80еÑ\81а Ñ\98е Ð°Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана Ñ\98еÑ\80 Ñ\98Ñ\83 Ñ\98е ÐºÐ¾Ñ\80иÑ\81Ñ\82ио Ð´Ñ\80Ñ\83ги ÐºÐ¾Ñ\80иÑ\81ник, ÐºÐ¾Ð³Ð° Ñ\98е {{GENDER:$4|блокиÑ\80ао|блокиÑ\80ала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Ð\9fоÑ\87еÑ\82ак Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ: $8\n* Ð\9aÑ\80аÑ\98 Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ: $6\n* Ð\98ме ÐºÐ¾Ñ\80иÑ\81ника: $7\n\nÐ\9cожеÑ\82е Ð´Ð° ÐºÐ¾Ð½Ñ\82акÑ\82иÑ\80аÑ\82е {{GENDER:$4|коÑ\80иÑ\81ника|коÑ\80иÑ\81ниÑ\86Ñ\83}} $1 Ð¸Ð»Ð¸ Ð´Ñ\80Ñ\83гог [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80а]] Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ñ\80аÑ\81пÑ\80авÑ\99али Ð¾ Ð±Ð»Ð¾ÐºÐ°Ð´Ð¸.\n\nÐ\97апамÑ\82иÑ\82е Ð´Ð° Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82 â\80\9e{{int:emailuser}}â\80\9c Ð¾Ñ\81им Ð°ÐºÐ¾ Ñ\81Ñ\82е Ð½Ð°Ð²ÐµÐ»Ð¸ Ð²Ð°Ñ\99анÑ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ñ\83 Ñ\81воÑ\98им [[Special:Preferences|подеÑ\88аваÑ\9aима]].\n\nÐ\92аÑ\88а Ñ\82Ñ\80енÑ\83Ñ\82на IP Ð°Ð´Ñ\80еÑ\81а Ñ\98е $3, Ð° ID Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ $5.\nУкÑ\99Ñ\83Ñ\87иÑ\82е Ñ\81ве Ð³Ð¾Ñ\80Ñ\9aе Ð´ÐµÑ\82аÑ\99е Ð¿Ñ\80и Ð¿Ñ\80авÑ\99ењу било каквих упита.",
        "blockednoreason": "разлог није наведен",
        "whitelistedittext": "За уређивање странице је потребно да будете $1.",
        "confirmedittext": "Морате да потврдите своју имејл адресу пре уређивања страница.\nПоставите и потврдите имејл адресу преко [[Special:Preferences|подешавања]].",
        "newarticletext": "Дошли сте на страницу која још не постоји.\nДа бисте је направили, почните да куцате у прозор испод овог текста (погледајте [$1 страницу за помоћ]).\nАко сте овде дошли грешком, вратите се на претходну страницу.",
        "anontalkpagetext": "----\n<em>Ово је страница за разговор с анонимним корисником који још нема налог или га не користи.</em>\nЗбог тога морамо да користимо бројчану IP адресу како бисмо га препознали.\nТакву адресу може делити више корисника.\nАко сте анонимни корисник и мислите да су вам упућене примедбе, [[Special:CreateAccount|отворите налог]] или се [[Special:UserLogin|пријавите]] да бисте избегли будућу забуну с осталим анонимним корисницима.",
        "noarticletext": "На овој страници тренутно нема текста.\nМожете [[Special:Search/{{PAGENAME}}|потражити овај наслов]] на другим страницама,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражити сродне извештаје] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} направити ову страницу]</span>.",
-       "noarticletext-nopermission": "Ð\9dа Ð¾Ð²Ð¾Ñ\98 Ñ\81Ñ\82Ñ\80аниÑ\86и Ñ\82Ñ\80енÑ\83Ñ\82но Ð½ÐµÐ¼Ð° Ñ\82екÑ\81Ñ\82а.\nÐ\9cожеÑ\82е [[Special:Search/{{PAGENAME}}|поÑ\82Ñ\80ажиÑ\82и Ð¾Ð²Ð°Ñ\98 Ð½Ð°Ñ\81лов]] Ð½Ð° Ð´Ñ\80Ñ\83гим Ñ\81Ñ\82Ñ\80аниÑ\86ама Ð¸Ð»Ð¸ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Ð¿Ñ\80еÑ\82Ñ\80ажиÑ\82и Ñ\81Ñ\80одне Ð´Ð½ÐµÐ²Ð½Ð¸Ðºе]</span>, али немате дозволу да направите ову страницу.",
-       "missing-revision": "Ð\98змена Ð±Ñ\80. $1 Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и Ð¿Ð¾Ð´ Ð¸Ð¼ÐµÐ½Ð¾Ð¼ â\80\9e{{FULLPAGENAME}}â\80\9c Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82оÑ\98и.\n\nÐ\9eво Ñ\81е Ð¾Ð±Ð¸Ñ\87но Ð´ÐµÑ\88ава ÐºÐ°Ð´Ð° Ð¿Ñ\80аÑ\82иÑ\82е Ð·Ð°Ñ\81Ñ\82аÑ\80елÑ\83 Ð²ÐµÐ·Ñ\83 Ð´Ð¾ Ñ\81Ñ\82Ñ\80аниÑ\86е ÐºÐ¾Ñ\98а Ñ\98е Ð¾Ð±Ñ\80иÑ\81ана.\nÐ\92иÑ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 брисања].",
+       "noarticletext-nopermission": "ТÑ\80енÑ\83Ñ\82но Ð½ÐµÐ¼Ð° Ñ\82екÑ\81Ñ\82а Ð½Ð° Ð¾Ð²Ð¾Ñ\98 Ñ\81Ñ\82Ñ\80аниÑ\86и.\nÐ\9cожеÑ\82е Ð´Ð° [[Special:Search/{{PAGENAME}}|поÑ\82Ñ\80ажиÑ\82е Ð¾Ð²Ð°Ñ\98 Ð½Ð°Ñ\81лов Ñ\81Ñ\82Ñ\80аниÑ\86е]] Ð½Ð° Ð´Ñ\80Ñ\83гим Ñ\81Ñ\82Ñ\80аниÑ\86ама Ð¸Ð»Ð¸ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Ð¿Ñ\80еÑ\82Ñ\80ажиÑ\82е Ñ\81Ñ\80одне ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98е]</span>, али немате дозволу да направите ову страницу.",
+       "missing-revision": "Ð\98змена Ð±Ñ\80. $1 Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и Ð¿Ð¾Ð´ Ð¸Ð¼ÐµÐ½Ð¾Ð¼ â\80\9e{{FULLPAGENAME}}â\80\9c Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82оÑ\98и.\n\nÐ\9eво Ñ\81е Ð¾Ð±Ð¸Ñ\87но Ð´ÐµÑ\88ава ÐºÐ°Ð´Ð° Ð¿Ñ\80аÑ\82иÑ\82е Ð·Ð°Ñ\81Ñ\82аÑ\80елÑ\83 Ð²ÐµÐ·Ñ\83 Ð´Ð¾ Ñ\81Ñ\82Ñ\80аниÑ\86е ÐºÐ¾Ñ\98а Ñ\98е Ð¾Ð±Ñ\80иÑ\81ана.\nÐ\92иÑ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и брисања].",
        "userpage-userdoesnotexist": "Кориснички налог „<nowiki>$1</nowiki>“ није отворен.\nРазмислите да ли заиста желите да направите/уредите ову страницу.",
        "userpage-userdoesnotexist-view": "Кориснички налог „$1“ није отворен.",
        "blocked-notice-logextract": "Овај корисник је тренутно блокиран.\nИзвештај о последњем блокирању можете погледати испод:",
        "editconflict": "Сукобљене измене: $1",
        "explainconflict": "Неко други је у међувремену променио ову страницу.\nГорњи оквир садржи садашњи текст странице.\nВаше измене су приказане у доњем оквиру.\nМораћете да унесете своје промене у садашњи текст странице.\n<strong>Само</strong> ће текст у горњем оквиру за уређивање бити сачуван када кликнете на „$1”.",
        "yourtext": "Ваш текст",
-       "storedversion": "Ускладиштена измена",
+       "storedversion": "Ускладиштена ревизија",
        "editingold": "<strong>Упозорење: уређујете застарелу измену ове странице.</strong>\nАко је сачувате, све новије измене ће бити изгубљене.",
        "unicode-support-fail": "Ваш прегледач не подржава Unicode. Он је неопоходан за уређивање страница, па зато не могу сачувати измену.",
        "yourdiff": "Разлике",
        "editpage-cannot-use-custom-model": "Модел садржаја ове странице се не може променити.",
        "longpageerror": "<strong>Грешка: текст који сте унели је величине {{PLURAL:$1|један килобајт|$1 килобајта}}, што је веће од {{PLURAL:$2|дозвољеног једног килобајта|дозвољена $2 килобајта|дозвољених $2 килобајта}}.</strong>\nСтраница не може бити сачувана.",
        "readonlywarning": "<strong>Упозорење: база података је закључана ради одржавања, тако да тренутно нећете моћи да сачувате измене.</strong>\nМожда бисте желели сачувати текст за касније у некој текстуалној датотеци.\n\nСистемски администратор је навео следеће објашњење: $1",
-       "protectedpagewarning": "<strong>Упозорење: ова страница је заштићена, тако да само корисници с администраторским овлашћењима могу да је мењају.</strong>\nПоследњи запис у дневнику је приказан испод као референца:",
-       "semiprotectedpagewarning": "<strong>Напомена:</strong> ова страница је заштићена, тако да само аутоматски потврђени корисници могу да је уређују.\nПоследњи запис у дневнику је приказан испод као референца:",
+       "protectedpagewarning": "<strong>Упозорење: ова страница је заштићена, тако да само корисници с администраторским овлашћењима могу да је мењају.</strong>\nПоследњи унос у евиденцији је наведен испод као референца:",
+       "semiprotectedpagewarning": "<strong>Напомена:</strong> ова страница је заштићена, тако да само аутоматски потврђени корисници могу да је уређују.\nПоследњи унос у евиденцији је наведен испод као референца:",
        "cascadeprotectedwarning": "<strong>Упозорење:</strong> Ова страница је заштићена тако да је могу уређивати само корисници са [[Special:ListGroupRights|одређеним правима]] (администратори), јер је иста укључена у {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом” заштитом:",
-       "titleprotectedwarning": "<strong>УпозоÑ\80еÑ\9aе: Ð¾Ð²Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°Ñ\88Ñ\82иÑ\9bена, Ñ\82ако Ð´Ð° Ñ\81Ñ\83 Ð¿Ð¾Ñ\82Ñ\80ебна [[Special:ListGroupRights|поÑ\81ебна Ð¿Ñ\80авима]] Ð´Ð° Ñ\81е Ð¾Ð½Ð° Ð½Ð°Ð¿Ñ\80ави.</strong>\nÐ\9fоÑ\81ледÑ\9aи Ð·Ð°Ð¿Ð¸Ñ\81 Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 Ñ\98е Ð¿Ñ\80иказан испод као референца:",
+       "titleprotectedwarning": "<strong>УпозоÑ\80еÑ\9aе: Ð¾Ð²Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°Ñ\88Ñ\82иÑ\9bена, Ñ\82ако Ð´Ð° Ñ\81Ñ\83 Ð¿Ð¾Ñ\82Ñ\80ебна [[Special:ListGroupRights|поÑ\81ебна Ð¿Ñ\80ава]] Ð´Ð° Ñ\81е Ð¾Ð½Ð° Ð½Ð°Ð¿Ñ\80ави.</strong>\nÐ\9fоÑ\81ледÑ\9aи Ñ\83ноÑ\81 Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и Ñ\98е Ð½Ð°Ð²ÐµÐ´Ðµн испод као референца:",
        "templatesused": "{{PLURAL:$1|Шаблон који се користи|Шаблони који се користе}} на овој страници:",
        "templatesusedpreview": "{{PLURAL:$1|Шаблон|Шаблони}} у овом претпрегледу:",
        "templatesusedsection": "{{PLURAL:$1|Шаблон|Шаблони}} у овом одељку:",
        "sectioneditnotsupported-title": "Уређивање одељка није подржано",
        "sectioneditnotsupported-text": "Уређивање одељка није подржано на овој страници.",
        "permissionserrors": "Грешка у дозволи",
-       "permissionserrorstext": "Ð\9dемаÑ\82е Ð¾Ð²Ð»Ð°Ñ\88Ñ\9bеÑ\9aе Ð·Ð° Ð¾Ð²Ñ\83 Ñ\80адÑ\9aÑ\83 Ð¸Ð· {{PLURAL:$1|1=следећег|следећих}} разлога:",
-       "permissionserrorstext-withaction": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð·а $2 из {{PLURAL:$1|следећег|следећих}} разлога:",
+       "permissionserrorstext": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð·Ð° Ð¾Ð²Ñ\83 Ñ\80адÑ\9aÑ\83 Ð¸Ð· {{PLURAL:$1|следећег|следећих}} разлога:",
+       "permissionserrorstext-withaction": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´а $2 из {{PLURAL:$1|следећег|следећих}} разлога:",
        "contentmodelediterror": "Не можете уредити ову измену јер је њен модел садржаја <code>$1</code>, што се разликује од тренутног модела садржаја странице <code>$2</code>.",
        "recreate-moveddeleted-warn": "<strong>Упозорење: поново правите страницу која је претходно обрисана.</strong>\n\nРазмотрите да ли је прикладно да наставите с уређивањем ове странице.\nОвде је наведена историја брисања и премештања с образложењем:",
-       "moveddeleted-notice": "Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð¾Ð±Ñ\80иÑ\81ана.\nÐ\94невник Ð±Ñ\80иÑ\81аÑ\9aа, Ð·Ð°Ñ\88Ñ\82иÑ\82е Ð¸ Ð¿Ñ\80емеÑ\88Ñ\82аÑ\9aа Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98е Ð¿Ñ\80иказан испод као референца.",
+       "moveddeleted-notice": "Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð¾Ð±Ñ\80иÑ\81ана.\nÐ\95виденÑ\86иÑ\98а Ð±Ñ\80иÑ\81аÑ\9aа, Ð·Ð°Ñ\88Ñ\82иÑ\82е Ð¸ Ð¿Ñ\80емеÑ\88Ñ\82аÑ\9aа Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98е Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð° испод као референца.",
        "moveddeleted-notice-recent": "Жао нам је, ова страница је недавно обрисана (у последњих 24 сата).\nИсторија њеног брисања, заштите и премештања налази се испод:",
        "log-fulllog": "Погледај целу историју",
        "edit-hook-aborted": "Измену је прекинула кука.\nНије дато никакво образложење.",
        "edit-gone-missing": "Не могу да ажурирам страницу.\nИзгледа да је обрисана.",
        "edit-conflict": "Сукоб измена.",
-       "edit-no-change": "Ð\92аÑ\88а Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\98е Ð·Ð°Ð½ÐµÐ¼Ð°Ñ\80ена Ñ\98еÑ\80 Ð½Ð¸Ñ\98е Ð±Ð¸Ð»Ð¾ Ð½Ð¸ÐºÐ°ÐºÐ²Ð¸Ñ\85 Ð¸Ð·мена у тексту.",
+       "edit-no-change": "Ð\92аÑ\88а Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\98е Ð·Ð°Ð½ÐµÐ¼Ð°Ñ\80ена Ñ\98еÑ\80 Ð½Ð¸Ñ\98е Ð±Ð¸Ð»Ð¾ Ð½Ð¸ÐºÐ°ÐºÐ²Ð¸Ñ\85 Ð¿Ñ\80омена у тексту.",
        "postedit-confirmation-created": "Страница је направљена.",
        "postedit-confirmation-restored": "Страница је враћена.",
        "postedit-confirmation-saved": "Ваша измена је сачувана.",
        "undo-nochange": "Изгледа да је измена већ поништена.",
        "undo-summary": "Поништена измена $1 {{GENDER:$2|корисника|кориснице}} [[Special:Contribs/$2|$2]] ([[User talk:$2|разговор]])",
        "undo-summary-username-hidden": "Поништи измену $1 скривеног корисника",
-       "cantcreateaccount-text": "Отварање налога с ове ИП адресе (<strong>$1</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
+       "cantcreateaccount-text": "Отварање налога с ове IP адресе (<strong>$1</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
        "cantcreateaccount-range-text": "Отварање налога са IP адреса у распону <strong>$1</strong>, који укључује и вашу IP адресу (<strong>$4</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
-       "viewpagelogs": "Ð\94невниÑ\86и ове странице",
+       "viewpagelogs": "Ð\9fогледаÑ\98 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98е ове странице",
        "nohistory": "Не постоји историја измена ове странице.",
        "currentrev": "Тренутна измена",
        "currentrev-asof": "Тренутна измена на датум $2 у $3",
        "last": "разл",
        "page_first": "прва",
        "page_last": "последња",
-       "histlegend": "Ð\98збоÑ\80 Ñ\80азлика: Ð¸Ð·Ð°Ð±ÐµÑ\80иÑ\82е ÐºÑ\83Ñ\82иÑ\98иÑ\86е Ð¸Ð·Ð¼ÐµÐ½Ð° Ð·Ð° Ñ\83поÑ\80еÑ\92иваÑ\9aе Ð¸ Ð¿Ñ\80иÑ\82иÑ\81ниÑ\82е ÐµÐ½Ñ\82еÑ\80 или дугме на дну.<br />\nОбјашњење: <strong>({{int:cur}})</strong> = разлика с тренутном изменом, <strong>({{int:last}})</strong> = разлика с претходном изменом, <strong>{{int:minoreditletter}}</strong> = мања измена",
+       "histlegend": "Ð\98збоÑ\80 Ñ\80азлика: Ð¾Ð·Ð½Ð°Ñ\87иÑ\82е ÐºÑ\83Ñ\82иÑ\98иÑ\86е Ð¸Ð·Ð¼ÐµÐ½Ð° Ð·Ð° Ñ\83поÑ\80еÑ\92иваÑ\9aе Ð¸ Ð¿Ñ\80иÑ\82иÑ\81ниÑ\82е enter или дугме на дну.<br />\nОбјашњење: <strong>({{int:cur}})</strong> = разлика с тренутном изменом, <strong>({{int:last}})</strong> = разлика с претходном изменом, <strong>{{int:minoreditletter}}</strong> = мања измена",
        "history-fieldset-title": "Претрага измена",
        "history-show-deleted": "Само обрисане измене",
        "histfirst": "најстарије",
        "rev-deleted-comment": "(опис измене уклоњен)",
        "rev-deleted-user": "(корисничко име уклоњено)",
        "rev-deleted-event": "(детаљи уноса уклоњени)",
-       "rev-deleted-user-contribs": "[корисничко име или ИП адреса је уклоњена – измена је сакривена са списка доприноса]",
+       "rev-deleted-user-contribs": "[корисничко име или IP адреса је уклоњена – измена је сакривена са списка доприноса]",
        "rev-deleted-text-permission": "Измена ове странице је '''обрисана'''.\nДетаље можете видети у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
        "rev-suppressed-text-permission": "Измена ове странице је <strong>сакривена</strong>. Више детаља можете наћи у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].",
-       "rev-deleted-text-unhide": "Ð\98змена Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98е <strong>обÑ\80иÑ\81ана</strong>.\nÐ\92иÑ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 брисања].\nИпак можете да [$1 погледате ову измену] ако желите да наставите.",
-       "rev-suppressed-text-unhide": "Ð\98змена Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98е <strong>Ñ\81акÑ\80ивена</strong>.\nÐ\92иÑ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 сакривања].\nИпак можете да [$1 погледате ову измену] ако желите да наставите.",
+       "rev-deleted-text-unhide": "Ð\98змена Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98е <strong>обÑ\80иÑ\81ана</strong>.\nÐ\92иÑ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и брисања].\nИпак можете да [$1 погледате ову измену] ако желите да наставите.",
+       "rev-suppressed-text-unhide": "Ð\98змена Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98е <strong>Ñ\81акÑ\80ивена</strong>.\nÐ\92иÑ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и сакривања].\nИпак можете да [$1 погледате ову измену] ако желите да наставите.",
        "rev-deleted-text-view": "Измена ове странице је '''обрисана'''.\nМожете је погледати; више детаља можете наћи у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
        "rev-suppressed-text-view": "Измена ове странице је '''сакривена'''.\nМожете је погледати; више детаља можете наћи у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].",
        "rev-deleted-no-diff": "Не можете видети ову разлику јер је једна од измена '''обрисана'''.\nДетаљи се налазе у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
        "rev-suppressed-no-diff": "Не можете видети ову разлику јер је једна од измена '''обрисана'''.",
-       "rev-deleted-unhide-diff": "Ð\88една Ð¾Ð´ Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\83 Ð¾Ð²Ð¾Ñ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>обÑ\80иÑ\81ана</strong>.\nÐ\92иÑ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 брисања].\nИпак можете да [$1 погледате ову разлику] ако желите да наставите.",
-       "rev-suppressed-unhide-diff": "Ð\88една Ð¾Ð´ Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\83 Ð¾Ð²Ð¾Ñ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>Ñ\81акÑ\80ивена</strong>.\nÐ\92иÑ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 сакривања].\nИпак можете да [$1 погледате ову разлику] ако желите да наставите.",
-       "rev-deleted-diff-view": "Ð\88една Ð¾Ð´ Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\83 Ð¾Ð²Ð¾Ñ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>обÑ\80иÑ\81ана</strong>.\nÐ\98пак Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ð¾Ð³Ð»ÐµÐ´Ð°Ñ\82е Ð¾Ð²Ñ\83 Ñ\80азликÑ\83; Ð²Ð¸Ñ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 брисања].",
-       "rev-suppressed-diff-view": "Ð\88една Ð¾Ð´ Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\83 Ð¾Ð²Ð¾Ñ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>Ñ\81акÑ\80ивена</strong>.\nÐ\98пак Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ð¾Ð³Ð»ÐµÐ´Ð°Ñ\82е Ð¾Ð²Ñ\83 Ñ\80азликÑ\83; Ð²Ð¸Ñ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 сакривања].",
+       "rev-deleted-unhide-diff": "Ð\88една Ð¾Ð´ Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\83 Ð¾Ð²Ð¾Ñ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>обÑ\80иÑ\81ана</strong>.\nÐ\92иÑ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и брисања].\nИпак можете да [$1 погледате ову разлику] ако желите да наставите.",
+       "rev-suppressed-unhide-diff": "Ð\88една Ð¾Ð´ Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\83 Ð¾Ð²Ð¾Ñ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>Ñ\81акÑ\80ивена</strong>.\nÐ\92иÑ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и сакривања].\nИпак можете да [$1 погледате ову разлику] ако желите да наставите.",
+       "rev-deleted-diff-view": "Ð\88една Ð¾Ð´ Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\83 Ð¾Ð²Ð¾Ñ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>обÑ\80иÑ\81ана</strong>.\nÐ\98пак Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ð¾Ð³Ð»ÐµÐ´Ð°Ñ\82е Ð¾Ð²Ñ\83 Ñ\80азликÑ\83; Ð²Ð¸Ñ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и  брисања].",
+       "rev-suppressed-diff-view": "Ð\88една Ð¾Ð´ Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\83 Ð¾Ð²Ð¾Ñ\98 Ñ\80азлиÑ\86и Ñ\98е <strong>Ñ\81акÑ\80ивена</strong>.\nÐ\98пак Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ð¾Ð³Ð»ÐµÐ´Ð°Ñ\82е Ð¾Ð²Ñ\83 Ñ\80азликÑ\83; Ð²Ð¸Ñ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и сакривања].",
        "rev-delundel": "промени видљивост",
        "rev-showdeleted": "прикажи",
        "revisiondelete": "Брисање/враћање измена",
        "logdelete-selected": "{{PLURAL:$1|Изабрана ставка у историји|Изабране ставке у историји}}:",
        "revdelete-text-text": "Избрисане измене ће и даље бити видљиве у историји странице, али делови њиховог садржаја неће бити јавно доступни.",
        "revdelete-text-file": "Избрисане верзије датотеке ће и даље бити видљиве у историји датотеке, али делови њиховог садржаја неће бити јавно доступни.",
-       "logdelete-text": "Ð\98збÑ\80иÑ\81ани Ñ\83ноÑ\81и Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸Ñ\86има Ñ\9bе Ð¸ Ð´Ð°Ñ\99е Ð±Ð¸Ñ\82и Ð²Ð¸Ð´Ñ\99иви Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸Ñ\86има, Ð°Ð»Ð¸ Ð´ÐµÐ»Ð¾Ð²Ð¸ Ñ\9aиÑ\85овог Ñ\81адÑ\80жаÑ\98а Ð½ÐµÑ\9bе Ð±Ð¸Ñ\82и Ñ\98авно Ð´Ð¾Ñ\81Ñ\82Ñ\83пни.",
+       "logdelete-text": "Ð\9eбÑ\80иÑ\81ани Ð´Ð¾Ð³Ð°Ñ\92аÑ\98и Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98ама Ñ\9bе Ñ\81е Ð¸Ð´Ð°Ñ\99е Ð¿Ð¾Ñ\98авÑ\99иваÑ\82и Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и, Ð°Ð»Ð¸ Ñ\9bе Ð´ÐµÐ»Ð¾Ð²Ð¸ Ñ\9aиÑ\85овог Ñ\81адÑ\80жаÑ\98а Ð±Ð¸Ñ\82и Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пни Ñ\98авноÑ\81Ñ\82и.",
        "revdelete-text-others": "Остали администратори ће и даље моћи да приступе скривеном садржају и врате га, осим ако се поставе додатна ограничења.",
        "revdelete-confirm": "Потврдите да намеравате ово урадити, да разумете последице и да то чините у складу с [[{{MediaWiki:Policy-url}}|правилима]].",
        "revdelete-suppress-text": "Сакривање измена би требало користити <strong>само</strong> у следећим случајевима:\n* злонамерни или погрдни подаци\n* неприкладни лични подаци\n*: <em>кућна адреса и број телефона, број кредитне картице, ЈМБГ итд.</em>",
        "revdelete-hide-image": "Сакриј садржај датотеке",
        "revdelete-hide-name": "Циљ и параметре",
        "revdelete-hide-comment": "Опис измене",
-       "revdelete-hide-user": "Корисничко име/ИП адреса",
+       "revdelete-hide-user": "Корисничко име/IP адреса",
        "revdelete-hide-restricted": "Сакриј податке од администратора и других корисника",
        "revdelete-radio-same": "(не мењај)",
        "revdelete-radio-set": "Сакривено",
        "revdelete-submit": "Примени на {{PLURAL:$1|изабрану измену|изабране измене}}",
        "revdelete-success": "Видљивост измене је ажурирана.",
        "revdelete-failure": "'''Не могу да ажурирам видљивост измене:'''\n$1",
-       "logdelete-success": "Ð\9fоÑ\81Ñ\82авÑ\99ена Ñ\98е Ð²Ð¸Ð´Ñ\99ивоÑ\81Ñ\82 Ñ\83ноÑ\81а Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83.",
+       "logdelete-success": "Ð\9fоÑ\81Ñ\82авÑ\99ена Ñ\98е Ð²Ð¸Ð´Ñ\99ивоÑ\81Ñ\82 Ñ\83ноÑ\81а Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и.",
        "logdelete-failure": "'''Не могу да поставим видљивост историје:'''\n$1",
        "revdel-restore": "промени видљивост",
        "pagehist": "Историја странице",
        "revdelete-reasonotherlist": "Други разлог",
        "revdelete-edit-reasonlist": "Уреди разлоге за брисање",
        "revdelete-offender": "Аутор измене:",
-       "suppressionlog": "Ð\94невник сакривања",
+       "suppressionlog": "Ð\95виденÑ\86иÑ\98а сакривања",
        "suppressionlogtext": "Испод се налази списак брисања и блокирања који укључује садржај сакривен од администратора. Текуће забране и блокирања можете наћи [[Special:BlockList|овде]].",
        "mergehistory": "Споји историје страница",
        "mergehistory-header": "Ова страница вам омогућава да спојите измене неке изворне странице у нову страницу.\nЗапамтите да ће ова измена оставити непромењен садржај историје странице.",
        "mergehistory-empty": "Нема измена за спајање.",
        "mergehistory-done": "$3 {{PLURAL:$3|измена странице $1 је спојена|измене странице $1 су спојене|измена странице $1 је спојено}} у [[:$2]].",
        "mergehistory-fail": "Не могу да спојим историје. Проверите страницу и временске параметре.",
-       "mergehistory-fail-bad-timestamp": "Ð\92Ñ\80еменÑ\81ка Ð¾Ð·Ð½Ð°ÐºÐ° Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авна.",
-       "mergehistory-fail-invalid-source": "Ð\98звоÑ\80на Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авна.",
-       "mergehistory-fail-invalid-dest": "Ð\9eдÑ\80едиÑ\88на Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авна.",
+       "mergehistory-fail-bad-timestamp": "Ð\92Ñ\80еменÑ\81ка Ð¾Ð·Ð½Ð°ÐºÐ° Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´на.",
+       "mergehistory-fail-invalid-source": "Ð\98звоÑ\80на Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´на.",
+       "mergehistory-fail-invalid-dest": "Ð\9eдÑ\80едиÑ\88на Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´на.",
        "mergehistory-fail-no-change": "Спајање историје није спојило ниједну измену. Проверите параметре странице и времена.",
        "mergehistory-fail-permission": "Немате овлашћење за спајање историје.",
        "mergehistory-fail-self-merge": "Изворна и одредишна страница не могу бити исте.",
        "mergehistory-fail-timestamps-overlap": "Изворне измене се преклапају или долазе након одредишних измена.",
-       "mergehistory-fail-toobig": "Ð\9dиÑ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе Ñ\81поÑ\98иÑ\82и историје јер више од $1 {{PLURAL:$1|измене ће бити премештене|измена ће бити премештено}}.",
+       "mergehistory-fail-toobig": "Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð¸Ð·Ð²Ñ\80Ñ\88им Ñ\81паÑ\98аÑ\9aе историје јер више од $1 {{PLURAL:$1|измене ће бити премештене|измена ће бити премештено}}.",
        "mergehistory-no-source": "Изворна страница $1 не постоји.",
        "mergehistory-no-destination": "Одредишна страница $1 не постоји.",
-       "mergehistory-invalid-source": "Ð\98звоÑ\80на Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¼Ð¾Ñ\80а Ð¸Ð¼Ð°Ñ\82и Ð¸Ñ\81пÑ\80аван наслов.",
-       "mergehistory-invalid-destination": "Ð\9eдÑ\80едиÑ\88на Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¼Ð¾Ñ\80а Ð¸Ð¼Ð°Ñ\82и Ð¸Ñ\81пÑ\80аван наслов.",
+       "mergehistory-invalid-source": "Ð\98звоÑ\80на Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¼Ð¾Ñ\80а Ð¸Ð¼Ð°Ñ\82и Ð²Ð°Ð»Ð¸Ð´ан наслов.",
+       "mergehistory-invalid-destination": "Ð\9eдÑ\80едиÑ\88на Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¼Ð¾Ñ\80а Ð´Ð° Ð¸Ð¼Ð° Ð²Ð°Ð¶ÐµÑ\9bи наслов.",
        "mergehistory-autocomment": "Страница [[:$1]] је спојена у [[:$2]]",
        "mergehistory-comment": "Страница [[:$1]] је спојена у [[:$2]]: $3",
        "mergehistory-same-destination": "Изворна и одредишна страница не могу бити исте",
        "mergehistory-reason": "Разлог:",
-       "mergelog": "Ð\94невник спајања",
+       "mergelog": "Ð\95виденÑ\86иÑ\98а спајања",
        "revertmerge": "растави",
        "mergelogpagetext": "Испод је списак најскоријих спајања историја двеју страница.",
        "history-title": "Историја измена странице „$1“",
        "difference-multipage": "(разлике између страница)",
        "lineno": "Ред $1:",
        "compareselectedversions": "Упореди изабране измене",
-       "showhideselectedversions": "Промени видљивост изабраних измена",
+       "showhideselectedversions": "Промени видљивост изабраних ревизија",
        "editundo": "поништи",
        "diff-empty": "(нема разлике)",
        "diff-multi-sameuser": "({{PLURAL:$1|Једна међуизмена истог корисника није приказана|$1 међуизмене истог корисника нису приказане|$1 међуизмена истог корисника није приказано}})",
        "diff-multi-otherusers": "({{PLURAL:$1|Једна међуизмена|$1 међуизмене|$1 међуизмена}} од стране {{PLURAL:$2|још једног корисника није приказана|$2 корисника није приказано}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Није приказана међуизмена|Нису приказане $1 међуизмене|Није приказано $1 међуизмена}} од више од $2 корисника)",
-       "diff-paragraph-moved-tonew": "Ð\9eдломак је премештен. Кликните да пређете на његово ново место.",
-       "diff-paragraph-moved-toold": "Ð\9eдломак је премештен. Кликните да пређете на његово старо место.",
-       "difference-missing-revision": "{{PLURAL:$2|Ð\88една Ð¸Ð·Ð¼ÐµÐ½Ð°|$2 Ð¸Ð·Ð¼ÐµÐ½Ðµ}} Ð¾Ð´ Ð¾Ð²Ðµ Ñ\80азлике ($1) Ð½Ðµ {{PLURAL:$2|поÑ\81Ñ\82оÑ\98и|поÑ\81Ñ\82оÑ\98е}}.\n\nÐ\9eво Ñ\81е Ð¾Ð±Ð¸Ñ\87но Ð´ÐµÑ\88ава ÐºÐ°Ð´Ð° Ð¿Ñ\80аÑ\82иÑ\82е Ð·Ð°Ñ\81Ñ\82аÑ\80елÑ\83 Ð²ÐµÐ·Ñ\83 Ð´Ð¾ Ñ\81Ñ\82Ñ\80аниÑ\86е ÐºÐ¾Ñ\98а Ñ\98е Ð¾Ð±Ñ\80иÑ\81ана.\nÐ\92иÑ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 брисања].",
+       "diff-paragraph-moved-tonew": "Ð\9fаÑ\81Ñ\83Ñ\81 је премештен. Кликните да пређете на његово ново место.",
+       "diff-paragraph-moved-toold": "Ð\9fаÑ\81Ñ\83Ñ\81 је премештен. Кликните да пређете на његово старо место.",
+       "difference-missing-revision": "{{PLURAL:$2|Ð\88една Ð¸Ð·Ð¼ÐµÐ½Ð°|$2 Ð¸Ð·Ð¼ÐµÐ½Ðµ}} Ð¾Ð´ Ð¾Ð²Ðµ Ñ\80азлике ($1) Ð½Ðµ {{PLURAL:$2|поÑ\81Ñ\82оÑ\98и|поÑ\81Ñ\82оÑ\98е}}.\n\nÐ\9eво Ñ\81е Ð¾Ð±Ð¸Ñ\87но Ð´ÐµÑ\88ава ÐºÐ°Ð´Ð° Ð¿Ñ\80аÑ\82иÑ\82е Ð·Ð°Ñ\81Ñ\82аÑ\80елÑ\83 Ð²ÐµÐ·Ñ\83 Ð´Ð¾ Ñ\81Ñ\82Ñ\80аниÑ\86е ÐºÐ¾Ñ\98а Ñ\98е Ð¾Ð±Ñ\80иÑ\81ана.\nÐ\92иÑ\88е Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80онаÑ\92еÑ\82е Ñ\83 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и брисања].",
        "searchresults": "Резултати претраге",
        "searchresults-title": "Резултати претраге за „$1“",
        "titlematches": "Наслов странице одговара",
        "datedefault": "Свеједно",
        "prefs-labs": "Пробне могућности",
        "prefs-user-pages": "Корисничке странице",
-       "prefs-personal": "Ð\9fрофил",
+       "prefs-personal": "Ð\9aоÑ\80иÑ\81ниÑ\87ки Ð¿рофил",
        "prefs-rc": "Скорашње измене",
        "prefs-watchlist": "Списак надгледања",
        "prefs-editwatchlist": "Уређивање списка надгледања",
        "prefs-editwatchlist-label": "Уређивање списка:",
        "prefs-editwatchlist-edit": "уреди списак",
        "prefs-editwatchlist-raw": "уреди сиров списак",
-       "prefs-editwatchlist-clear": "иÑ\81пÑ\80азни Ñ\81пиÑ\81ак",
+       "prefs-editwatchlist-clear": "оÑ\87иÑ\81Ñ\82и Ñ\81пиÑ\81ак Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа",
        "prefs-watchlist-days": "Број дана у списку надгледања:",
        "prefs-watchlist-days-max": "Највише $1 {{PLURAL:$1|дан|дана|дана}}",
        "prefs-watchlist-edits": "Највећи број измена приказаних на списку надгледања:",
        "prefs-watchlist-edits-max": "Највећи број: 1000",
-       "prefs-watchlist-token": "Ð\96еÑ\82он списка надгледања:",
+       "prefs-watchlist-token": "Токен списка надгледања:",
        "prefs-watchlist-managetokens": "Управљај жетонима",
        "prefs-misc": "Друга подешавања",
        "prefs-resetpass": "промени лозинку",
        "prefs-email": "Опције имејла",
        "prefs-rendering": "Изглед",
        "saveprefs": "Сачувај",
-       "restoreprefs": "Врати сва подразумевана подешавања (у свим одељцима)",
+       "restoreprefs": "Врати сва подешавања на подразумеване вредности (у свим одељцима)",
        "prefs-editing": "Уређивање",
        "searchresultshead": "Претрага",
        "stub-threshold": "Праг за обликовање везе као клице ($1):",
        "stub-threshold-disabled": "онемогућено",
        "recentchangesdays": "Број дана у скорашњим изменама:",
        "recentchangesdays-max": "Највише $1 {{PLURAL:$1|дан|дана}}",
-       "recentchangescount": "Ð\9fодÑ\80азÑ\83мевани Ð±Ñ\80оÑ\98 Ð¸Ð·Ð¼ÐµÐ½Ð° Ð·Ð° Ð¿Ñ\80иказ Ñ\83 Ñ\81коÑ\80аÑ\88Ñ\9aим Ð¸Ð·Ð¼ÐµÐ½Ð°Ð¼Ð°, Ð¸Ñ\81Ñ\82оÑ\80иÑ\98ама Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸ Ð´Ð½ÐµÐ²Ð½Ð¸Ñ\86има:",
-       "prefs-help-recentchangescount": "Ð\9dаÑ\98веÑ\9bа број: 1000",
-       "prefs-help-watchlist-token2": "Ово је тајни кључ за веб-довод Вашег списка надгледања. \nСвако ко зна овај кључ биће у могућности да чита Ваш списак надгледања, зато га немојте делити. \nАко је потребно, [[Special:ResetTokens|можете га обновити]].",
+       "recentchangescount": "Ð\9fодÑ\80азÑ\83мевани Ð±Ñ\80оÑ\98 Ð¸Ð·Ð¼ÐµÐ½Ð° Ð·Ð° Ð¿Ñ\80иказ Ñ\83 Ñ\81коÑ\80аÑ\88Ñ\9aим Ð¸Ð·Ð¼ÐµÐ½Ð°Ð¼Ð°, Ð¸Ñ\81Ñ\82оÑ\80иÑ\98ама Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸ ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98ама:",
+       "prefs-help-recentchangescount": "Ð\9dаÑ\98веÑ\9bи број: 1000",
+       "prefs-help-watchlist-token2": "Ово је тајни кључ за веб-фид вашег списка надгледања. \nСвако ко зна овај кључ биће у могућности да чита ваш списак надгледања, зато га немојте делити. \nАко је потребно, [[Special:ResetTokens|можете да га ресетујете]].",
        "savedprefs": "Ваша подешавања су сачувана.",
-       "savedrights": "Корисничке групе за {{GENDER:$1|$1}} су сачуване.",
+       "savedrights": "Корисничке групе {{GENDER:$1|корисника|кориснице}} $1 су сачуване.",
        "timezonelegend": "Временска зона:",
        "localtime": "Локално време:",
        "timezoneuseserverdefault": "подразумеване вредности ($1)",
        "prefs-files": "Датотеке",
        "prefs-custom-css": "прилагођени CSS",
        "prefs-custom-json": "Прилагођени JSON",
-       "prefs-custom-js": "прилагођени Јаваскрипт",
-       "prefs-common-config": "Дељени CSS/JSON/Јаваскрипт за све теме:",
-       "prefs-reset-intro": "Ð\9cожеÑ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82и Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð´Ð° Ð¿Ð¾Ð½Ð¸Ñ\88Ñ\82иÑ\82е Ñ\81воÑ\98а Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа Ð½Ð° Ð¿Ð¾Ð´Ñ\80азÑ\83меване Ð²Ñ\80едноÑ\81Ñ\82и.\nÐ\9eва Ñ\80адÑ\9aа Ñ\81е Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð²Ñ\80аÑ\82ити.",
+       "prefs-custom-js": "прилагођени јаваскрипт",
+       "prefs-common-config": "Дељени CSS/JSON/јаваскрипт за све теме:",
+       "prefs-reset-intro": "Ð\9cожеÑ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82и Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð´Ð° Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ð¾Ñ\81Ñ\82авиÑ\82е Ñ\81воÑ\98а Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа Ð½Ð° Ð¿Ð¾Ð´Ñ\80азÑ\83меване Ð²Ñ\80едноÑ\81Ñ\82и Ñ\81аÑ\98Ñ\82а.\nÐ\9eво Ñ\81е Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¾Ð¿Ð¾Ð·Ð²Ð°ти.",
        "prefs-emailconfirm-label": "Потврда имејла:",
        "youremail": "Имејл:",
        "username": "{{GENDER:$1|Корисничко име}}:",
        "yourvariant": "Варијанта језика:",
        "prefs-help-variant": "Жељена варијанта или правопис за приказ страница са садржајем овог викија.",
        "yournick": "Нови потпис:",
-       "prefs-help-signature": "Ð\9aоменÑ\82аÑ\80и Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86ама Ð·Ð° Ñ\80азговоÑ\80 Ñ\82Ñ\80еба Ð´Ð° Ð±Ñ\83дÑ\83 Ð¿Ð¾Ñ\82пиÑ\81ани Ñ\81а â\80\9e<nowiki>~~~~</nowiki>â\80\9c ÐºÐ¾Ñ\98е Ñ\9bе Ð±Ð¸Ñ\82и Ð¿Ñ\80еÑ\82воÑ\80ено Ñ\83 Ð\92аÑ\88 Ð¿Ð¾Ñ\82пиÑ\81 Ñ\81 Ñ\82Ñ\80енÑ\83Ñ\82ним Ð²Ñ\80еменом.",
-       "badsig": "Ð\9fоÑ\82пиÑ\81 Ñ\98е Ð½ÐµÐ¸Ñ\81пÑ\80аван.\nÐ\9fÑ\80овеÑ\80иÑ\82е Ð¾Ð·Ð½Ð°ÐºÐµ HTML.",
+       "prefs-help-signature": "Ð\9aоменÑ\82аÑ\80и Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86ама Ð·Ð° Ñ\80азговоÑ\80 Ñ\82Ñ\80еба Ð´Ð° Ð±Ñ\83дÑ\83 Ð¿Ð¾Ñ\82пиÑ\81ани Ñ\81а â\80\9e<nowiki>~~~~</nowiki>â\80\9c ÐºÐ¾Ñ\98е Ñ\9bе Ð±Ð¸Ñ\82и Ð¿Ñ\80еÑ\82воÑ\80ено Ñ\83 Ð²Ð°Ñ\88 Ð¿Ð¾Ñ\82пиÑ\81 Ð¸ Ð²Ñ\80еменÑ\81кÑ\83 Ð¾Ð·Ð½Ð°ÐºÑ\83.",
+       "badsig": "Ð\9dеиÑ\81пÑ\80аван Ñ\81иÑ\80ов Ð¿Ð¾Ñ\82пиÑ\81.\nÐ\9fÑ\80овеÑ\80иÑ\82е HTML Ñ\82агове.",
        "badsiglength": "Ваш потпис је предугачак.\nНе сме бити дужи од $1 {{PLURAL:$1|знака|знака|знакова}}.",
        "yourgender": "Како желите да се представите?",
-       "gender-unknown": "Ð\9aад Ð\92ас спомиње, софтвер ће користити родно неутралне речи кад год је то могуће",
+       "gender-unknown": "Ð\9aад Ð²ас спомиње, софтвер ће користити родно неутралне речи кад год је то могуће",
        "gender-male": "Он уређује вики странице",
        "gender-female": "Она уређује вики странице",
-       "prefs-help-gender": "Ð\9fоÑ\81Ñ\82авÑ\99аÑ\9aе Ð¾Ð²Ð¾Ð³ Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа Ñ\98е Ð½ÐµÐ¾Ð±Ð°Ð²ÐµÐ·Ð½Ð¾.\nСоÑ\84Ñ\82веÑ\80 ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð´Ð°Ñ\82Ñ\83 Ð²Ñ\80едноÑ\81Ñ\82 Ð´Ð° Ð±Ð¸ Ð\92ам Ñ\81е Ð¾Ð±Ñ\80аÑ\82ио Ð¸ Ñ\81поменÑ\83о Ð\92ас другима користећи одговарајући граматички род.\nОва информација ће бити јавна.",
+       "prefs-help-gender": "Ð\9fоÑ\81Ñ\82авÑ\99аÑ\9aе Ð¾Ð²Ð¾Ð³ Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа Ñ\98е Ð¾Ð¿Ñ\86ионално.\nСоÑ\84Ñ\82веÑ\80 ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð´Ð°Ñ\82Ñ\83 Ð²Ñ\80едноÑ\81Ñ\82 Ð´Ð° Ð±Ð¸ Ð²Ð°Ð¼ Ñ\81е Ð¾Ð±Ñ\80аÑ\82ио Ð¸ Ñ\81поменÑ\83о Ð²ас другима користећи одговарајући граматички род.\nОва информација ће бити јавна.",
        "email": "Имејл",
-       "prefs-help-realname": "Право име није обавезно.\nАко изаберете да га унесете, оно ће бити коришћено за приписивање вашег рада.",
-       "prefs-help-email": "Имејл адреса није обавезна, али је потребна за обнављање лозинке, ако је заборавите.",
-       "prefs-help-email-others": "ТакоÑ\92е Ð¼Ð¾Ð¶ÐµÑ\82е Ð¸Ð·Ð°Ð±Ñ\80аÑ\82и Ð´Ð° Ð´Ð¾Ð¿Ñ\83Ñ\81Ñ\82иÑ\82е Ð´Ñ\80Ñ\83гима Ð´Ð° Ð\92аÑ\81 ÐºÐ¾Ð½Ñ\82акÑ\82иÑ\80аÑ\98Ñ\83 Ð¿Ñ\80еко Ð¸Ð¼ÐµÑ\98ла Ð¿Ñ\83Ñ\82ем Ð²ÐµÐ·Ðµ Ð½Ð° Ð\92аÑ\88оÑ\98 ÐºÐ¾Ñ\80иÑ\81ниÑ\87коÑ\98 Ñ\81Ñ\82Ñ\80аниÑ\86и Ð¸Ð»Ð¸ Ñ\81Ñ\82Ñ\80аниÑ\86и Ð·Ð° Ñ\80азговоÑ\80.\nÐ\92аÑ\88а Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81а Ð½ÐµÑ\9bе Ð±Ð¸Ñ\82и Ð¿Ñ\80иказана Ð´Ñ\80Ñ\83гим ÐºÐ¾Ñ\80иÑ\81ниÑ\86има ÐºÐ¾Ñ\98и Ð\92ас контактирају.",
+       "prefs-help-realname": "Право име је опционално.\nАко је наведено, биће коришћено за приписивање вашег рада.",
+       "prefs-help-email": "Имејл адреса је опционална, али је потребна за ресетовање лозинке, ако је заборавите.",
+       "prefs-help-email-others": "ТакоÑ\92е Ð¼Ð¾Ð¶ÐµÑ\82е Ð¸Ð·Ð°Ð±Ñ\80аÑ\82и Ð´Ð° Ð´Ð¾Ð¿Ñ\83Ñ\81Ñ\82иÑ\82е Ð´Ñ\80Ñ\83гима Ð´Ð° Ð²Ð°Ñ\81 ÐºÐ¾Ð½Ñ\82акÑ\82иÑ\80аÑ\98Ñ\83 Ð¿Ñ\80еко Ð¸Ð¼ÐµÑ\98ла Ð¿Ñ\83Ñ\82ем Ð²ÐµÐ·Ðµ Ð½Ð° Ð²Ð°Ñ\88оÑ\98 ÐºÐ¾Ñ\80иÑ\81ниÑ\87коÑ\98 Ñ\81Ñ\82Ñ\80аниÑ\86и Ð¸Ð»Ð¸ Ñ\81Ñ\82Ñ\80аниÑ\86и Ð·Ð° Ñ\80азговоÑ\80.\nÐ\92аÑ\88а Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81а Ð½ÐµÑ\9bе Ð±Ð¸Ñ\82и Ð¿Ñ\80иказана Ð´Ñ\80Ñ\83гим ÐºÐ¾Ñ\80иÑ\81ниÑ\86има ÐºÐ¾Ñ\98и Ð²ас контактирају.",
        "prefs-help-email-required": "Потребна је имејл адреса.",
        "prefs-info": "Основне информације",
        "prefs-i18n": "Интернационализација",
        "prefs-advancedwatchlist": "Напредне опције",
        "prefs-displayrc": "Подешавања приказа",
        "prefs-displaywatchlist": "Подешавања приказа",
-       "prefs-tokenwatchlist": "Ð\96еÑ\82он",
+       "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Разлике",
        "prefs-help-prefershttps": "Ова подешавања ће ступити на снагу при следећој пријави.",
-       "prefswarning-warning": "Ð\9fÑ\80оменили Ñ\81Ñ\82е Ð²Ð°Ñ\88а Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа Ð°Ð»Ð¸ Ð½Ð¸Ñ\81Ñ\82е Ð¸Ñ\85 Ñ\98оÑ\88 Ñ\81аÑ\87Ñ\83вали.\nÐ\90ко Ð½Ðµ Ð¿Ñ\80иÑ\82иÑ\81неÑ\82е â\80\9e$1â\80\9c Ð²Ð°Ñ\88а Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа Ñ\9bе Ð±Ð¸Ñ\82и Ð¸Ð·Ð³Ñ\83бÑ\99ена.",
+       "prefswarning-warning": "Ð\9dапÑ\80авили Ñ\81Ñ\82е Ð¿Ñ\80омене Ñ\83 Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aима ÐºÐ¾Ñ\98е Ñ\98оÑ\88 Ñ\83век Ð½Ð¸Ñ\81Ñ\83 Ñ\81аÑ\87Ñ\83ване.\nÐ\90ко Ð½Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð±ÐµÐ· ÐºÐ»Ð¸ÐºÐ° Ð½Ð° â\80\9e$1â\80\9c, Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа Ð½ÐµÑ\9bе Ð´Ð° Ð±Ñ\83дÑ\83 Ð°Ð¶Ñ\83Ñ\80иÑ\80ана.",
        "prefs-tabs-navigation-hint": "Савет: можете користити типке са левом и десном стрелицом за кретање кроз картице.",
        "userrights": "Корисничка права",
-       "userrights-lookup-user": "Ð\98забеÑ\80и корисника",
+       "userrights-lookup-user": "Ð\98збоÑ\80 корисника",
        "userrights-user-editname": "Корисничко име:",
        "editusergroup": "Учитај корисничке групе",
        "editinguser": "Мењате корисничка права {{GENDER:$1|корисника|кориснице}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Промена {{GENDER:$1|корисничких}} група",
        "userrights-viewusergroup": "Преглед {{GENDER:$1|корисничких}} група",
        "saveusergroups": "Сачувај {{GENDER:$1|корисничке}} групе",
-       "userrights-groupsmember": "Члан:",
-       "userrights-groupsmember-auto": "Подразумевано члан и:",
+       "userrights-groupsmember": "Члан група:",
+       "userrights-groupsmember-auto": "{{GENDER:$2|Имплицитан члан|Имплицитна чланица}} група:",
        "userrights-groups-help": "Можете променити групе којима овај корисник припада:\n* Означен квадратић означава да се корисник налази у тој групи.\n* Неозначен квадратић означава да се корисник не налази у тој групи.\n* Звездица (*) означава да не можете уклонити ту групу ако је додате и обратно.\n* Тараба (#) означава да једино можете одложити време истека чланства у тој групи; не можете га убрзати.",
        "userrights-reason": "Разлог:",
-       "userrights-no-interwiki": "Ð\9dемаÑ\82е Ð¾Ð²Ð»Ð°Ñ\88Ñ\9bеÑ\9aа Ð´Ð° Ð¼ÐµÑ\9aате корисничка права на другим викијима.",
+       "userrights-no-interwiki": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98ете корисничка права на другим викијима.",
        "userrights-nodatabase": "База података $1 не постоји или није локална.",
        "userrights-changeable-col": "Групе које можете да промените",
        "userrights-unchangeable-col": "Групе које не можете да промените",
        "userrights-expiry-existing": "Постојеће време истека: $3, $2",
        "userrights-expiry-othertime": "Друго време:",
        "userrights-expiry-options": "1 дан:1 day,1 недеља:1 week,1 месец:1 month,3 месеца:3 months,6 месеци:6 months,1 година:1 year",
-       "userrights-invalid-expiry": "Ð\92Ñ\80еме Ð¸Ñ\81Ñ\82иÑ\86аÑ\9aа Ð³Ñ\80Ñ\83пе â\80\9e$1â\80\9c Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авно.",
+       "userrights-invalid-expiry": "Ð\92Ñ\80еме Ð¸Ñ\81Ñ\82иÑ\86аÑ\9aа Ð³Ñ\80Ñ\83пе â\80\9e$1â\80\9c Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´но.",
        "userrights-expiry-in-past": "Време истицања групе „$1“ је прошло.",
        "userrights-cannot-shorten-expiry": "Не можете убрзати истек чланства у групи „$1”. Само корисници са дозволом да додају или уклоне ову групу могу да убрзају рок истека.",
        "userrights-conflict": "Сукоб промена корисничких права! Молимо проверите ваше измене.",
        "group-autoconfirmed": "Аутоматски потврђени корисници",
        "group-bot": "Ботови",
        "group-sysop": "Администратори",
+       "group-interface-admin": "Администратори интерфејса",
        "group-bureaucrat": "Бирократе",
        "group-suppress": "Ревизори",
        "group-all": "(сви)",
        "group-autoconfirmed-member": "{{GENDER:$1|аутоматски потврђен корисник|аутоматски потврђена корисница}}",
        "group-bot-member": "{{GENDER:$1|бот}}",
        "group-sysop-member": "{{GENDER:$1|администратор|администраторка}}",
+       "group-interface-admin-member": "{{GENDER:$1|администратор интерфејса|администраторка интерфејса}}",
        "group-bureaucrat-member": "{{GENDER:$1|бирократа|бирократкиња}}",
        "group-suppress-member": "{{GENDER:$1|брисач измена}}",
        "grouppage-user": "{{ns:project}}:Корисници",
        "grouppage-autoconfirmed": "{{ns:project}}:Аутоматски потврђени корисници",
        "grouppage-bot": "{{ns:project}}:Ботови",
        "grouppage-sysop": "{{ns:project}}:Администратори",
+       "grouppage-interface-admin": "{{ns:project}}:Администратори интерфејса",
        "grouppage-bureaucrat": "{{ns:project}}:Бирократе",
        "grouppage-suppress": "{{ns:project}}:Ревизор",
        "right-read": "читање страница",
        "right-bot": "сматрање измена као аутоматски процес",
        "right-nominornewtalk": "непоседовање мањих измена на страницама за разговор отвара прозор за нове поруке",
        "right-apihighlimits": "коришћење виших граница за упите из API-ја",
-       "right-writeapi": "могÑ\83Ñ\9bноÑ\81Ñ\82 Ð¿Ð¸Ñ\81аÑ\9aа API-Ñ\98а",
+       "right-writeapi": "коÑ\80иÑ\88Ñ\9bеÑ\9aе API-Ñ\98а Ð·Ð° Ð¿Ð¸Ñ\81аÑ\9aе",
        "right-delete": "брисање страница",
        "right-bigdelete": "брисање страница с великом историјом",
-       "right-deletelogentry": "бÑ\80иÑ\81аÑ\9aе Ð¸ Ð²Ñ\80аÑ\9bаÑ\9aе Ð¾Ð´Ñ\80еÑ\92ениÑ\85 Ñ\81Ñ\82авки Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83",
+       "right-deletelogentry": "бÑ\80иÑ\81аÑ\9aе Ð¸ Ð²Ñ\80аÑ\9bаÑ\9aе Ð¾Ð´Ñ\80еÑ\92ениÑ\85 Ñ\83ноÑ\81а Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и",
        "right-deleterevision": "брисање и враћање одређених измена страница",
        "right-deletedhistory": "прегледање обрисаних ставки историје без повезаног текста",
-       "right-deletedtext": "пÑ\80егледаÑ\9aе Ð¾Ð±Ñ\80иÑ\81аног Ñ\82екÑ\81Ñ\82а Ð¸ Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¸Ð·Ð¼ÐµÑ\92Ñ\83 Ð¾Ð±Ñ\80иÑ\81аниÑ\85 Ð¸Ð·Ð¼ÐµÐ½а",
+       "right-deletedtext": "пÑ\80егледаÑ\9aе Ð¾Ð±Ñ\80иÑ\81аног Ñ\82екÑ\81Ñ\82а Ð¸ Ð¿Ñ\80омена Ð¸Ð·Ð¼ÐµÑ\92Ñ\83 Ð¾Ð±Ñ\80иÑ\81аниÑ\85 Ñ\80евизиÑ\98а",
        "right-browsearchive": "претрага обрисаних страница",
        "right-undelete": "враћање обрисаних страница",
        "right-suppressrevision": "прегледање, скривање и враћање одређених измена страница од свих корисника",
        "right-viewsuppressed": "прегледање измена скривених од свих корисника",
-       "right-suppressionlog": "пÑ\80егледаÑ\9aе Ð¿Ñ\80иваÑ\82ниÑ\85 Ð´Ð½ÐµÐ²Ð½Ð¸Ðºа",
+       "right-suppressionlog": "пÑ\80егледаÑ\9aе Ð¿Ñ\80иваÑ\82ниÑ\85 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98а",
        "right-block": "блокирање даљих измена других корисника",
        "right-blockemail": "блокирање корисника да шаљу имејл",
        "right-hideuser": "блокирање корисничког имена и његово сакривање од јавности",
-       "right-ipblock-exempt": "заобилажење блокирања ИП адресе, аутоматска блокирања и блокирања опсега",
+       "right-ipblock-exempt": "заобилажење IP блокада, самоблокада и блокада опсега",
        "right-unblockself": "одблокирање самог себе",
        "right-protect": "мењање степена заштите и уређивање страница под преносивом заштитом",
        "right-editprotected": "уређивање страница под заштитом „{{int:protect-level-sysop}}“",
        "right-sendemail": "слање имејла другим корисницима",
        "right-managechangetags": "прављење и (де)активирање [[Special:Tags|ознака]]",
        "right-applychangetags": "примењивање [[Special:Tags|ознака]] на нечије измене",
-       "right-changetags": "додаваÑ\9aе Ð¸ Ñ\83клаÑ\9aаÑ\9aе Ñ\80азниÑ\85 [[Special:Tags|ознака]] Ð½Ð° Ð¿Ð¾Ñ\98единаÑ\87ним Ð¸Ð·Ð¼ÐµÐ½Ð°Ð¼Ð° Ð¸ Ñ\83ноÑ\81има Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸Ñ\86има",
+       "right-changetags": "додаваÑ\9aе Ð¸ Ñ\83клаÑ\9aаÑ\9aе Ñ\80азниÑ\85 [[Special:Tags|ознака]] Ð½Ð° Ð¿Ð¾Ñ\98единаÑ\87ним Ð¸Ð·Ð¼ÐµÐ½Ð°Ð¼Ð° Ð¸ Ñ\83ноÑ\81има Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98ама",
        "right-deletechangetags": "брисање [[Special:Tags|ознака]] из базе података",
        "grant-generic": "Скуп права „$1“",
        "grant-group-page-interaction": "Уређивање страница",
        "grant-blockusers": "Блокирање и одблокирање корисника",
        "grant-createaccount": "Отварање налога",
        "grant-createeditmovepage": "Прављење, уређивање и премештање страница",
-       "grant-delete": "Ð\91Ñ\80иÑ\81аÑ\9aе Ñ\81Ñ\82Ñ\80аниÑ\86а, Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¸ Ñ\83ноÑ\81а Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸Ñ\86има",
+       "grant-delete": "Ð\91Ñ\80иÑ\81аÑ\9aе Ñ\81Ñ\82Ñ\80аниÑ\86а, Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¸ Ñ\83ноÑ\81а Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98ама",
        "grant-editinterface": "Уређивање Медијавики именског простора и корисничких CSS/JSON/Јаваскрипт страница",
        "grant-editmycssjs": "Уређивање вашег CSS/JSON/Јаваскрипта",
        "grant-editmyoptions": "Уређивање Ваших подешавања",
        "grant-basic": "Основна права",
        "grant-viewdeleted": "Преглед обрисаних страница и датотека",
        "grant-viewmywatchlist": "Преглед вашег списак надгледања",
-       "grant-viewrestrictedlogs": "Ð\9fÑ\80егледаÑ\9aе Ð¾Ð³Ñ\80аниÑ\87ениÑ\85 Ñ\83ноÑ\81а Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83",
-       "newuserlogpage": "Ð\94невник нових корисника",
-       "newuserlogpagetext": "Ð\9eво Ñ\98е Ð´Ð½ÐµÐ²Ð½Ð¸Ðº нових корисника.",
-       "rightslog": "Ð\94невник корисничких права",
-       "rightslogtext": "Ð\9eво Ñ\98е Ð´Ð½ÐµÐ²Ð½Ð¸Ðº Ð¸Ð·мена корисничких права.",
-       "action-read": "Ñ\87иÑ\82аÑ\9aе Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е",
-       "action-edit": "уређивање ове странице",
-       "action-createpage": "пÑ\80авÑ\99еÑ\9aе Ñ\81Ñ\82Ñ\80аниÑ\86а",
-       "action-createtalk": "пÑ\80авÑ\99еÑ\9aе Ñ\81Ñ\82Ñ\80аниÑ\86а за разговор",
-       "action-createaccount": "оÑ\82ваÑ\80аÑ\9aе Ð¾Ð²Ð¾Ð³ ÐºÐ¾Ñ\80иÑ\81ниÑ\87ког Ð½Ð°Ð»Ð¾Ð³Ð°",
-       "action-autocreateaccount": "аÑ\83Ñ\82омаÑ\82Ñ\81ко Ð¿Ñ\80авÑ\99еÑ\9aе Ð¾Ð²Ð¾Ð³ Ñ\81поÑ\99аÑ\88Ñ\9aег ÐºÐ¾Ñ\80иÑ\81ниÑ\87ког Ð½Ð°Ð»Ð¾Ð³Ð°",
-       "action-history": "гледаÑ\9aе Ð¸Ñ\81Ñ\82оÑ\80иÑ\98е ове странице",
-       "action-minoredit": "ознаÑ\87аваÑ\9aе Ð¾Ð²Ðµ Ð¸Ð·Ð¼ÐµÐ½Ðµ ÐºÐ°Ð¾ Ð¼Ð°Ñ\9aе",
-       "action-move": "пÑ\80емеÑ\88Ñ\82аÑ\9aе Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е",
-       "action-move-subpages": "пÑ\80емеÑ\88Ñ\82аÑ\9aе Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¸ Ñ\9aениÑ\85 Ð¿Ð¾Ð´Ñ\81Ñ\82Ñ\80аниÑ\86а",
-       "action-move-rootuserpages": "пÑ\80емеÑ\88Ñ\82аÑ\9aе Ð¾Ñ\81новниÑ\85 ÐºÐ¾Ñ\80иÑ\81ниÑ\87киÑ\85 Ñ\81Ñ\82Ñ\80аниÑ\86а",
-       "action-move-categorypages": "пÑ\80емеÑ\88Ñ\82аÑ\9aе ÐºÐ°Ñ\82егоÑ\80иÑ\98а",
-       "action-movefile": "пÑ\80емеÑ\88Ñ\82аÑ\9aе Ð¾Ð²Ðµ Ð´Ð°Ñ\82оÑ\82еке",
-       "action-upload": "отпреми ову датотеку",
-       "action-reupload": "замењивање постојеће датотеке",
-       "action-reupload-shared": "постављање ове датотеке на заједничко складиште",
-       "action-upload_by_url": "оÑ\82пÑ\80емаÑ\9aе Ð¾Ð²Ðµ Ð´Ð°Ñ\82оÑ\82еке Ð¿Ñ\80еко Ð²ÐµÐ±-адÑ\80еÑ\81е",
-       "action-writeapi": "пиÑ\81аÑ\9aе API-Ñ\98а",
-       "action-delete": "бÑ\80иÑ\81аÑ\9aе Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е",
-       "action-deleterevision": "бÑ\80иÑ\81аÑ\9aе Ð¸Ð·Ð¼ÐµÐ½Ð°",
-       "action-deletelogentry": "бирсање уноса у дневницима",
-       "action-deletedhistory": "пÑ\80егледаÑ\9aе Ð¾Ð±Ñ\80иÑ\81ане Ð¸Ñ\81Ñ\82оÑ\80иÑ\98е странице",
-       "action-deletedtext": "преглед обрисаног текста измене",
-       "action-browsearchive": "претраживање обрисаних страница",
-       "action-undelete": "вÑ\80аÑ\9bаÑ\9aе Ñ\81Ñ\82Ñ\80аниÑ\86а",
-       "action-suppressrevision": "пÑ\80егледаÑ\9aе Ð¸ Ð²Ñ\80аÑ\9bаÑ\9aе Ñ\81акÑ\80ивениÑ\85 Ð¸Ð·Ð¼ÐµÐ½Ð°",
-       "action-suppressionlog": "пÑ\80егледаÑ\9aе Ð¾Ð²Ðµ Ð¿Ñ\80иваÑ\82не Ð¸Ñ\81Ñ\82оÑ\80ије",
-       "action-block": "блокиÑ\80аÑ\9aе Ð´Ð°Ñ\99иÑ\85 Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¾Ð²Ð¾Ð³ ÐºÐ¾Ñ\80иÑ\81ника",
-       "action-protect": "меÑ\9aаÑ\9aе Ñ\81Ñ\82епена заштите ове странице",
-       "action-rollback": "бÑ\80зо Ð²Ñ\80аÑ\9bаÑ\9aе Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¿Ð¾Ñ\81ледÑ\9aег ÐºÐ¾Ñ\80иÑ\81ника ÐºÐ¾Ñ\98и Ñ\98е Ð¼ÐµÑ\9aао одређену страницу",
-       "action-import": "Ñ\83вожеÑ\9aе Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸Ð· Ð´Ñ\80Ñ\83гиÑ\85 викија",
-       "action-importupload": "Ñ\83вожеÑ\9aе Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸Ð· Ð¾Ñ\82пÑ\80емÑ\99ене датотеке",
-       "action-patrol": "ознаÑ\87аваÑ\9aе Ñ\82Ñ\83Ñ\92иÑ\85 Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¿Ð°Ñ\82Ñ\80олиÑ\80аним",
-       "action-autopatrol": "ознаÑ\87аваÑ\9aе Ñ\81опÑ\81Ñ\82вениÑ\85 Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¿Ð°Ñ\82Ñ\80олиÑ\80аним",
-       "action-unwatchedpages": "пÑ\80егледаÑ\9aе Ñ\81пиÑ\81ка ненадгледаних страница",
-       "action-mergehistory": "Ñ\81паÑ\98аÑ\9aе Ð¸Ñ\81Ñ\82оÑ\80иÑ\98е ове странице",
-       "action-userrights": "уређивање свих корисничких права",
-       "action-userrights-interwiki": "уређивање корисничких права на другим викијима",
-       "action-siteadmin": "закÑ\99Ñ\83Ñ\87аваÑ\9aе Ð¸Ð»Ð¸ Ð¾Ñ\82кÑ\99Ñ\83Ñ\87аваÑ\9aе Ð±Ð°Ð·Ðµ података",
-       "action-sendemail": "Ñ\81лаÑ\9aе Ð¸Ð¼ÐµÑ\98лова",
-       "action-editmyoptions": "уређивање Ваших подешавања",
-       "action-editmywatchlist": "измену сопственог списак надгледања",
-       "action-viewmywatchlist": "преглед вашег списак надгледања",
-       "action-viewmyprivateinfo": "пÑ\80егледаÑ\9aе Ð²Ð°Ñ\88иÑ\85 Ð»Ð¸Ñ\87ниÑ\85 Ð¿Ð¾Ð´Ð°Ñ\82ака",
-       "action-editmyprivateinfo": "уређивање ваших личних података",
-       "action-editcontentmodel": "мењање модела садржаја странице",
-       "action-managechangetags": "прављење и (де)активирање ознака",
-       "action-applychangetags": "додавање ознака на ваше измене",
-       "action-changetags": "додавање и уклањање разних ознака на појединачним изменама и уносима у дневницима",
-       "action-deletechangetags": "Ð\9eбÑ\80иÑ\88и ознаке из базе података",
-       "action-purge": "чишћење привремене меморије ове странице",
+       "grant-viewrestrictedlogs": "Ð\9fÑ\80егледаÑ\9aе Ð¾Ð³Ñ\80аниÑ\87ениÑ\85 Ñ\83ноÑ\81а Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и",
+       "newuserlogpage": "Ð\95виденÑ\86иÑ\98а нових корисника",
+       "newuserlogpagetext": "Ð\9eво Ñ\98е ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98а Ð¾ Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86иÑ\98и нових корисника.",
+       "rightslog": "Ð\95виденÑ\86иÑ\98а корисничких права",
+       "rightslogtext": "Ð\9eво Ñ\98е ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98а Ð¿Ñ\80омена корисничких права.",
+       "action-read": "Ñ\87иÑ\82аÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83",
+       "action-edit": "уређујете ову страницу",
+       "action-createpage": "напÑ\80авиÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83",
+       "action-createtalk": "напÑ\80авиÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 за разговор",
+       "action-createaccount": "напÑ\80авиÑ\82е Ð¾Ð²Ð°Ñ\98 ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки Ð½Ð°Ð»Ð¾Ð³",
+       "action-autocreateaccount": "аÑ\83Ñ\82омаÑ\82Ñ\81ки Ð½Ð°Ð¿Ñ\80авиÑ\82е Ð¾Ð²Ð°Ñ\98 Ñ\81поÑ\99аÑ\88Ñ\9aи ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки Ð½Ð°Ð»Ð¾Ð³",
+       "action-history": "гледаÑ\82е Ð¸Ñ\81Ñ\82оÑ\80иÑ\98Ñ\83 ове странице",
+       "action-minoredit": "ознаÑ\87иÑ\82е Ð¾Ð²Ñ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83 ÐºÐ°Ð¾ Ð¼Ð°Ñ\9aÑ\83",
+       "action-move": "пÑ\80емеÑ\81Ñ\82иÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83",
+       "action-move-subpages": "пÑ\80емеÑ\81Ñ\82иÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð¸ Ñ\9aене Ð¿Ð¾Ð´Ñ\81Ñ\82Ñ\80аниÑ\86е",
+       "action-move-rootuserpages": "пÑ\80емеÑ\88Ñ\82аÑ\82е Ð¾Ñ\81новне ÐºÐ¾Ñ\80иÑ\81ниÑ\87ке Ñ\81Ñ\82Ñ\80аниÑ\86е",
+       "action-move-categorypages": "пÑ\80емеÑ\88Ñ\82аÑ\82е ÐºÐ°Ñ\82егоÑ\80иÑ\98е",
+       "action-movefile": "пÑ\80емеÑ\81Ñ\82иÑ\82е Ð¾Ð²Ñ\83 Ð´Ð°Ñ\82оÑ\82екÑ\83",
+       "action-upload": "отпремите ову датотеку",
+       "action-reupload": "замењујете ову постојећу датотеку",
+       "action-reupload-shared": "премостите ову датотеку са заједничког складишта",
+       "action-upload_by_url": "оÑ\82пÑ\80емиÑ\82е Ð¾Ð²Ñ\83 Ð´Ð°Ñ\82оÑ\82екÑ\83 Ð¿Ñ\83Ñ\82ем Ð£Ð Ð\9b-а",
+       "action-writeapi": "коÑ\80иÑ\81Ñ\82иÑ\82е API Ð·Ð° Ð¿Ð¸Ñ\81аÑ\9aе",
+       "action-delete": "обÑ\80иÑ\88еÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83",
+       "action-deleterevision": "бÑ\80иÑ\88еÑ\82е Ð¸Ð·Ð¼ÐµÐ½Ðµ",
+       "action-deletelogentry": "бришете уносе у евиденцијама",
+       "action-deletedhistory": "пÑ\80егледаÑ\82е Ð¾Ð±Ñ\80иÑ\81анÑ\83 Ð¸Ñ\81Ñ\82оÑ\80иÑ\98Ñ\83 странице",
+       "action-deletedtext": "прегледате обрисани текст измене",
+       "action-browsearchive": "претражујете обрисане странице",
+       "action-undelete": "вÑ\80аÑ\9bаÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86е",
+       "action-suppressrevision": "пÑ\80егледаÑ\82е Ð¸ Ð²Ñ\80аÑ\9bаÑ\82е Ñ\81акÑ\80ивене Ð¸Ð·Ð¼ÐµÐ½Ðµ",
+       "action-suppressionlog": "пÑ\80егледаÑ\82е Ð¾Ð²Ñ\83 Ð¿Ñ\80иваÑ\82нÑ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86ије",
+       "action-block": "блокиÑ\80аÑ\82е Ñ\83Ñ\80еÑ\92иваÑ\9aе Ð¾Ð²Ð¾Ð¼ ÐºÐ¾Ñ\80иÑ\81никÑ\83",
+       "action-protect": "пÑ\80омениÑ\82е Ð½Ð¸Ð²Ð¾Ðµ заштите ове странице",
+       "action-rollback": "бÑ\80зо Ð²Ñ\80аÑ\82иÑ\82е Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð¿Ð¾Ñ\81ледÑ\9aег ÐºÐ¾Ñ\80иÑ\81ника ÐºÐ¾Ñ\98и Ñ\98е Ñ\83Ñ\80еÑ\92ивао одређену страницу",
+       "action-import": "Ñ\83возиÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¸Ð· Ð´Ñ\80Ñ\83гог викија",
+       "action-importupload": "Ñ\83возиÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¿Ñ\83Ñ\82ем Ð¾Ñ\82пÑ\80емаÑ\9aа датотеке",
+       "action-patrol": "ознаÑ\87иÑ\82е Ñ\82Ñ\83Ñ\92е Ð¸Ð·Ð¼ÐµÐ½Ðµ ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80ане",
+       "action-autopatrol": "ознаÑ\87иÑ\82е Ñ\81опÑ\81Ñ\82вене Ð¸Ð·Ð¼ÐµÐ½Ðµ ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80ане",
+       "action-unwatchedpages": "пÑ\80егледаÑ\82е Ñ\81пиÑ\81ак ненадгледаних страница",
+       "action-mergehistory": "Ñ\81паÑ\98аÑ\82е Ð¸Ñ\81Ñ\82оÑ\80иÑ\98Ñ\83 ове странице",
+       "action-userrights": "уређујете сва корисничка права",
+       "action-userrights-interwiki": "уређујете корисничка права корисника на другим викијима",
+       "action-siteadmin": "закÑ\99Ñ\83Ñ\87аваÑ\82е Ð¸Ð»Ð¸ Ð¾Ñ\82кÑ\99Ñ\83Ñ\87аваÑ\82е Ð±Ð°Ð·Ñ\83 података",
+       "action-sendemail": "Ñ\88аÑ\99еÑ\82е Ð¸Ð¼ÐµÑ\98лове",
+       "action-editmyoptions": "уређујете сопствена подешавања",
+       "action-editmywatchlist": "уређујете сопствени списак надгледања",
+       "action-viewmywatchlist": "прегледате сопствени списак надгледања",
+       "action-viewmyprivateinfo": "пÑ\80егледаÑ\82е Ñ\81опÑ\81Ñ\82вене Ð»Ð¸Ñ\87не Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98е",
+       "action-editmyprivateinfo": "уређујете сопствене приватне информације",
+       "action-editcontentmodel": "уређујете модел садржаја странице",
+       "action-managechangetags": "правите и (де)активирате ознаке",
+       "action-applychangetags": "додате ознаке уз сопствене промене",
+       "action-changetags": "додате и уклоните разне ознаке на појединачним изменама и уносима у евиденцијама",
+       "action-deletechangetags": "бÑ\80иÑ\88еÑ\82е ознаке из базе података",
+       "action-purge": "освежите ову страницу",
        "nchanges": "$1 {{PLURAL:$1|измена|измене|измена}}",
        "ntimes": "$1×",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|измена од ваше последње посете}}",
        "recentchanges-timeout": "Ова претрага је истекла. Можда желите да покушате другачије параметре претраге.",
        "recentchanges-network": "Због техничког проблема не могу да учитам резултате. Покушајте да освежите страницу.",
        "recentchanges-notargetpage": "Унесите назив странице како бисте видели сродне измене.",
-       "recentchanges-feed-description": "Пратите скорашње измене уз помоћ овог довода.",
+       "recentchanges-feed-description": "Пратите најновије промене на викију у овом фиду.",
        "recentchanges-label-newpage": "Овом изменом је направљена нова страница",
        "recentchanges-label-minor": "Ово је мања измена",
        "recentchanges-label-bot": "Ову измену је направио бот",
        "rcfilters-filter-newpages-description": "Измене којима се праве нове странице.",
        "rcfilters-filter-categorization-label": "Измене категорија",
        "rcfilters-filter-categorization-description": "Записи о страницама додатим или уклоњеним из категорија.",
-       "rcfilters-filter-logactions-label": "Ð\97абележене радње",
+       "rcfilters-filter-logactions-label": "Ð\95виденÑ\82иÑ\80ане радње",
        "rcfilters-filter-logactions-description": "Административне радње, прављење налога, брисање страница, отпремања…",
        "rcfilters-hideminor-conflicts-typeofchange-global": "Филтер за „мање” измене је у сукобу са једним или више филтера типа измена, зато што одређени типови измена не могу да се означе као „мање”. Сукобљени филтери су означени у подручју Активни филтери, изнад.",
        "rcfilters-hideminor-conflicts-typeofchange": "Одређени типови измена не могу да се означе као „мање”, тако да је овај филтер у сукобу са следећим филтерима типа измена: $1",
        "rcfilters-liveupdates-button-title-off": "Прикажите нове измене уживо",
        "rcfilters-watchlist-markseen-button": "Означи све измене као погледане",
        "rcfilters-watchlist-edit-watchlist-button": "Промени списак надгледаних страница",
-       "rcfilters-watchlist-showupdated": "Ð\98змене Ñ\81Ñ\82Ñ\80аниÑ\86а ÐºÐ¾Ñ\98е Ð½Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\81еÑ\82или Ð¾Ð´ ÐºÐ°Ð´Ð° Ñ\98е Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¸Ð·Ð²Ñ\80Ñ\88ена Ñ\81Ñ\83 <strong>подебÑ\99ане</strong>, Ñ\81а испуњеним ознакама.",
+       "rcfilters-watchlist-showupdated": "Ð\9fÑ\80омене Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86ама ÐºÐ¾Ñ\98е Ð½Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\81еÑ\82или Ð¾Ð´ ÐºÐ°Ð´Ð° Ñ\98е Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¸Ð·Ð²Ñ\80Ñ\88ена Ñ\81Ñ\83 <strong>подебÑ\99ане</strong>, Ñ\81 испуњеним ознакама.",
        "rcfilters-preference-label": "Сакриј побољшану верзију скорашњих измена",
        "rcfilters-preference-help": "Поништава редизајн интерфејса из 2017. и све алатке додате тада и после.",
        "rcfilters-watchlist-preference-label": "Сакриј побољшану верзију списка надгледања",
        "upload_directory_read_only": "Сервер не може да пише по фасцикли за слање ($1).",
        "uploaderror": "Грешка при отпремању",
        "upload-recreate-warning": "'''Упозорење: датотека с тим називом је обрисана или премештена.'''\n\nИсторија брисања и премештања се налази испод:",
-       "uploadtext": "Ð\9aоÑ\80иÑ\81Ñ\82иÑ\82е Ð¾Ð±Ñ\80азаÑ\86 Ð¸Ñ\81под Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¾Ñ\82пÑ\80емили Ð´Ð°Ñ\82оÑ\82еке.\nÐ\97а Ð¿Ñ\80еглед Ð¸Ð»Ð¸ Ð¿Ñ\80еÑ\82Ñ\80агÑ\83 Ð¿Ð¾Ñ\81Ñ\82оÑ\98еÑ\9bиÑ\85 Ð´Ð°Ñ\82оÑ\82ека, Ð¿Ð¾Ð³Ð»ÐµÐ´Ð°Ñ\98Ñ\82е [[Special:FileList|Ñ\81пиÑ\81ак Ð¾Ñ\82пÑ\80емÑ\99ениÑ\85 Ð´Ð°Ñ\82оÑ\82ека]], Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð° Ð¾Ñ\82пÑ\80емаÑ\9aа Ñ\81Ñ\83 Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð° Ñ\83 [[Special:Log/upload|дневникÑ\83 Ð¾Ñ\82пÑ\80емаÑ\9aа]], Ð° Ð±Ñ\80иÑ\81аÑ\9aа Ñ\83 [[Special:Log/delete|дневникÑ\83 брисања]].\n\nДатотеку додајете на жељену страницу користећи следеће обрасце:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Слика.jpg]]</nowiki></code>''' за верзију слике у пуној величини\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Слика.png|200п|мини|лево|опис]]</nowiki></code>''' за верзију слике с величином од 200 пиксела која је приказана у засебном оквиру, заједно с описом.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Датотека.ogg]]</nowiki></code>''' за директно повезивање с датотеком без њеног приказивања",
+       "uploadtext": "Ð\9aоÑ\80иÑ\81Ñ\82иÑ\82е Ð¾Ð±Ñ\80азаÑ\86 Ð¸Ñ\81под Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¾Ñ\82пÑ\80емили Ð´Ð°Ñ\82оÑ\82еке.\nÐ\97а Ð¿Ñ\80еглед Ð¸Ð»Ð¸ Ð¿Ñ\80еÑ\82Ñ\80агÑ\83 Ð¿Ð¾Ñ\81Ñ\82оÑ\98еÑ\9bиÑ\85 Ð´Ð°Ñ\82оÑ\82ека, Ð¿Ð¾Ð³Ð»ÐµÐ´Ð°Ñ\98Ñ\82е [[Special:FileList|Ñ\81пиÑ\81ак Ð¾Ñ\82пÑ\80емÑ\99ениÑ\85 Ð´Ð°Ñ\82оÑ\82ека]], Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð° Ð¾Ñ\82пÑ\80емаÑ\9aа Ñ\81Ñ\83 Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð° Ñ\83 [[Special:Log/upload|евиденÑ\86иÑ\98и Ð¾Ñ\82пÑ\80емаÑ\9aа]], Ð° Ð±Ñ\80иÑ\81аÑ\9aа Ñ\83 [[Special:Log/delete|евиденÑ\86иÑ\98и брисања]].\n\nДатотеку додајете на жељену страницу користећи следеће обрасце:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Слика.jpg]]</nowiki></code>''' за верзију слике у пуној величини\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Слика.png|200п|мини|лево|опис]]</nowiki></code>''' за верзију слике с величином од 200 пиксела која је приказана у засебном оквиру, заједно с описом.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Датотека.ogg]]</nowiki></code>''' за директно повезивање с датотеком без њеног приказивања",
        "upload-permitted": "Дозвољени {{PLURAL:$2|тип|типови}} датотека: $1.",
        "upload-preferred": "Препоручени {{PLURAL:$2|тип|типови}} датотека: $1.",
        "upload-prohibited": "Забрањени {{PLURAL:$2|тип|типови}} датотека: $1.",
-       "uploadlogpage": "Ð\94невник отпремања",
+       "uploadlogpage": "Ð\95виденÑ\86иÑ\98а отпремања",
        "uploadlogpagetext": "Испод је списак скорашњих слања.\nПогледајте [[Special:NewFiles|галерију нових датотека]] за лепши преглед.",
        "filename": "Назив датотеке",
        "filedesc": "Опис",
        "php-uploaddisabledtext": "Отпремање датотека је онемогућено у PHP-у.\nПроверите подешавања file_uploads.",
        "uploadscripted": "Датотека садржи HTML или скриптни код који може бити погрешно протумачен од стране прегледача.",
        "upload-scripted-pi-callback": "Датотека која садржи инструкције за обраду XML стилског облика се не може отпремити.",
-       "upload-scripted-dtd": "Ð\9dиÑ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе Ð¾Ñ\82пÑ\80емаÑ\9aе SVG Ð´Ð°Ñ\82оÑ\82ека које садрже нестандардну DTD декларацију.",
+       "upload-scripted-dtd": "Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð¾Ñ\82пÑ\80емим SVG Ð´Ð°Ñ\82оÑ\82еке које садрже нестандардну DTD декларацију.",
        "uploaded-script-svg": "Пронађен скриптни елеменат „$1“ у постављеној SVG датотеци.",
        "uploaded-hostile-svg": "Пронађен небезбедан CSS у стилском елементу постављене SVG датотеке.",
        "uploaded-event-handler-on-svg": "Није дозвољено постављање атрибута који контролишу догађаје <code>$1=\"$2\"</code> у SVG датотекама.",
        "uploaded-href-unsafe-target-svg": "Пронађен href са несигурним подацима: URI одредиште <code>&lt;$1 $2=\"$3\"&gt;</code> у постављеној SVG датотеци.",
        "uploaded-animate-svg": "Пронађена „animate“ ознака која можда мења href користећи се „from“ атрибутом <code>&lt;$1 $2=\"$3\"&gt;</code> у постављеној SVG датотеци.",
        "uploadscriptednamespace": "Ова SVG датотека садржи погрешан именски простор „<nowiki>$1</nowiki>“",
-       "uploadinvalidxml": "Ð\9dиÑ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе Ñ\80аÑ\88Ñ\87ланиÑ\82и XML Ð¾Ñ\82пÑ\80емÑ\99ене Ð´Ð°Ñ\82оÑ\82еке.",
+       "uploadinvalidxml": "Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\80аÑ\88Ñ\87ланим XML Ñ\83 Ð¾Ñ\82пÑ\80емÑ\99еноÑ\98 Ð´Ð°Ñ\82оÑ\82еÑ\86и.",
        "uploadvirus": "Датотека садржи вирус!\nДетаљи: $1",
        "uploadjava": "Датотека је формата ZIP који садржи јава .class елемент.\nСлање јава датотека није дозвољено јер оне могу изазвати заобилажење сигурносних ограничења.",
        "upload-source": "Изворна датотека",
        "upload-file-error": "Унутрашња грешка",
        "upload-file-error-text": "Дошло је до унутрашње грешке при отварању привремене датотеке на серверу.\nКонтактирајте [[Special:ListUsers/sysop|администратора]].",
        "upload-misc-error": "Непозната грешка при слању датотеке",
-       "upload-misc-error-text": "Непозната грешка при слању датотеке.\nПроверите да ли је адреса исправна и покушајте поново.\nАко се проблем не реши, контактирајте [[Special:ListUsers/sysop|администратора]].",
+       "upload-misc-error-text": "Непозната грешка при отпремању датотеке.\nПроверите да ли је адреса валидна и покушајте поново.\nАко се проблем не реши, контактирајте [[Special:ListUsers/sysop|администратора]].",
        "upload-too-many-redirects": "Адреса садржи превише преусмерења",
        "upload-http-error": "Дошло је до HTTP грешке: $1",
        "upload-copy-upload-invalid-domain": "Примерци отпремања нису доступни на овом домену.",
        "backend-fail-notexists": "Датотека $1 не постоји.",
        "backend-fail-hashes": "Не могу да добијем дисперзије датотеке за упоређивање.",
        "backend-fail-notsame": "Већ постоји неистоветна датотека – $1.",
-       "backend-fail-invalidpath": "$1 Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авна путања за складиштење.",
+       "backend-fail-invalidpath": "$1 Ð½Ð¸Ñ\98е Ð²Ð°Ð¶ÐµÑ\9bа путања за складиштење.",
        "backend-fail-delete": "Не могу да обришем датотеку „$1”.",
        "backend-fail-describe": "Не могу да променим метаподатке за датотеку „$1“.",
        "backend-fail-alreadyexists": "Датотека $1 већ постоји.",
        "lockmanager-fail-closelock": "Не могу да затворим катанац за „$1“.",
        "lockmanager-fail-deletelock": "Не могу да обришем катанац за „$1“.",
        "lockmanager-fail-acquirelock": "Не могу да се закључам за „$1“.",
-       "lockmanager-fail-openlock": "Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð¾Ñ\82воÑ\80им ÐºÐ°Ñ\82анаÑ\86 Ð·Ð° â\80\9e$1â\80\9c. Ð£Ð²ÐµÑ\80иÑ\82е Ñ\81е Ð´Ð° Ñ\98е Ð\92аÑ\88 Ð´Ð¸Ñ\80екÑ\82оÑ\80иÑ\98Ñ\83м Ð·Ð° Ð¾Ñ\82пÑ\80емаÑ\9aе Ð¸Ñ\81пÑ\80авно ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80иÑ\81ан Ð¸ Ð´Ð° Ð\92аш веб-сервер има дозволу да пише у том директоријуму. Погледајте https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory за више информација.",
+       "lockmanager-fail-openlock": "Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð¾Ñ\82воÑ\80им ÐºÐ°Ñ\82анаÑ\86 Ð·Ð° â\80\9e$1â\80\9c. Ð£Ð²ÐµÑ\80иÑ\82е Ñ\81е Ð´Ð° Ñ\98е Ð²Ð°Ñ\88 Ð´Ð¸Ñ\80екÑ\82оÑ\80иÑ\98Ñ\83м Ð·Ð° Ð¾Ñ\82пÑ\80емаÑ\9aе Ð¸Ñ\81пÑ\80авно ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80иÑ\81ан Ð¸ Ð´Ð° Ð²аш веб-сервер има дозволу да пише у том директоријуму. Погледајте https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory за више информација.",
        "lockmanager-fail-releaselock": "Не могу да ослободим катанац за „$1“.",
        "lockmanager-fail-db-bucket": "Не могу да контактирам с довољно катанаца у канти $1.",
        "lockmanager-fail-db-release": "Не могу да ослободим катанце у бази $1.",
        "uploadstash-thumbnail": "погледај минијатуру",
        "uploadstash-exception": "Не могу сачувати датотеку у складиште ($1): „$2“.",
        "uploadstash-bad-path": "Путања не постоји.",
-       "uploadstash-bad-path-invalid": "Ð\9fÑ\83Ñ\82аÑ\9aа Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авна.",
+       "uploadstash-bad-path-invalid": "Ð\9fÑ\83Ñ\82аÑ\9aа Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´на.",
        "uploadstash-bad-path-unknown-type": "Непознат тип „$1“.",
        "uploadstash-bad-path-unrecognized-thumb-name": "Непрепознато име минијатуре.",
        "uploadstash-bad-path-bad-format": "Кључ „$1“ није у одговарајућем облику.",
        "http-curl-error": "Грешка при отварању адресе: $1",
        "http-bad-status": "Дошло је до проблема током захтева HTTP: $1 $2",
        "upload-curl-error6": "Не могу да приступим адреси",
-       "upload-curl-error6-text": "Не могу да приступим наведеној адреси.\nПроверите да ли је адреса исправна и доступна.",
+       "upload-curl-error6-text": "Не могу да приступим наведеном URL-у.\nПроверите да ли је URL исправан и доступан.",
        "upload-curl-error28": "Отпремање је истекло",
        "upload-curl-error28-text": "Сервер не одговара на упит.\nПроверите да ли сајт ради, мало осачекајте и покушајте поново.\nПробајте касније када буде мање оптерећење.",
        "license": "Лиценца:",
        "filedelete-maintenance-title": "Не могу да обришем датотеку",
        "mimesearch": "MIME претрага",
        "mimesearch-summary": "Ова страница омогућава филтрирање датотека према њиховим MIME типовима.\nУлазни подаци: contenttype/subtype или contenttype/*, нпр. <code>image/jpeg</code>.",
-       "mimetype": "MIME врста:",
+       "mimetype": "MIME тип:",
        "download": "преузми",
        "unwatchedpages": "Ненадгледане странице",
        "listredirects": "Списак преусмерења",
        "nlinks": "$1 {{PLURAL:$1|веза|везе|веза}}",
        "nmembers": "$1 {{PLURAL:$1|члан|члана|чланова}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|члан|члана|чланова}}",
-       "nrevisions": "$1 {{PLURAL:$1|измена|измене|измена}}",
+       "nrevisions": "$1 {{PLURAL:$1|ревизија|ревизије|ревизија}}",
        "nimagelinks": "Користи се на $1 {{PLURAL:$1|страници|странице|страница}}",
        "ntransclusions": "користи се на $1 {{PLURAL:$1|страници|странице|страница}}",
        "specialpage-empty": "Нема резултата за овај извештај.",
        "protectedpages-cascade": "Само преносиве заштите",
        "protectedpages-noredirect": "Сакриј преусмерења",
        "protectedpagesempty": "Нема заштићених страница с овим параметрима.",
-       "protectedpages-timestamp": "Време и датум",
+       "protectedpages-timestamp": "Временска ознака",
        "protectedpages-page": "Страница",
        "protectedpages-expiry": "Истиче",
        "protectedpages-performer": "Заштитио",
-       "protectedpages-params": "Ð\9dиво заштите",
+       "protectedpages-params": "Ð\9fаÑ\80амеÑ\82Ñ\80и заштите",
        "protectedpages-reason": "Разлог",
        "protectedpages-submit": "Прикажи странице",
        "protectedpages-unknown-timestamp": "нема",
        "apisandbox-dynamic-parameters-add-placeholder": "Назив параметра",
        "apisandbox-dynamic-error-exists": "Параметар под називом \"$1\" већ постоји.",
        "apisandbox-deprecated-parameters": "Застарели параметри",
-       "apisandbox-fetch-token": "Ð\90Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð¿Ð¾пуни токен",
+       "apisandbox-fetch-token": "Ð\90Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð¸Ñ\81пуни токен",
        "apisandbox-add-multi": "Додај",
-       "apisandbox-submit-invalid-fields-title": "Ð\9dека Ð¿Ð¾Ñ\99а Ð½Ð¸Ñ\81Ñ\83 Ð¸Ñ\81пÑ\80авна",
+       "apisandbox-submit-invalid-fields-title": "Ð\9dека Ð¿Ð¾Ñ\99а Ð½Ð¸Ñ\81Ñ\83 Ð²Ð°Ð»Ð¸Ð´на",
        "apisandbox-submit-invalid-fields-message": "Молимо Вас поправите означена поља и покушајте поново.",
        "apisandbox-results": "Резултати",
        "apisandbox-sending-request": "Слање API захтева...",
        "apisandbox-request-format-json-label": "JSON",
        "apisandbox-request-json-label": "Затражите JSON:",
        "apisandbox-request-time": "Време за извршавање захтјева: {{PLURAL:$1|$1 милисекунда|$1 милисекунде|$1 милисекунди}}",
-       "apisandbox-results-fixtoken": "Исправи жетон и пошаљи поново",
-       "apisandbox-results-fixtoken-fail": "Ð\9dиÑ\81ам Ñ\83Ñ\81пео Ð´Ð° Ð´Ð¾Ð±Ð¸Ñ\98ем Ð¶ÐµÑ\82он â\80\9e$1â\80\9c.",
+       "apisandbox-results-fixtoken": "Исправи токен и пошаљи поново",
+       "apisandbox-results-fixtoken-fail": "Ð\9dеÑ\83Ñ\81пело Ð´Ð¾Ð±Ð¸Ñ\98аÑ\9aе â\80\9e$1â\80\9c Ñ\82окена.",
        "apisandbox-alert-page": "Поља на страници су неисправна.",
        "apisandbox-alert-field": "Вредност овог поља је неисправна.",
        "apisandbox-continue": "Настави",
        "booksources-isbn": "ISBN:",
        "booksources-search": "Претражи",
        "booksources-text": "Испод се налази списак веза ка сајтовима који се баве продајом нових и половних књига, а који би могли имати додатне податке о књигама које тражите:",
-       "booksources-invalid-isbn": "Ð\9dаведени ISBN Ð±Ñ\80оÑ\98 Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80аван. Ð\9fÑ\80овеÑ\80иÑ\82е Ð´Ð° Ð½Ð¸Ñ\98е Ð´Ð¾Ñ\88ло Ð´Ð¾ Ð³Ñ\80еÑ\88ке Ð¿Ñ\80и Ñ\83множавању из првобитног извора.",
+       "booksources-invalid-isbn": "Ð\9dаведени ISBN Ð±Ñ\80оÑ\98 Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´Ð°Ð½. Ð\9fÑ\80овеÑ\80иÑ\82е Ð´Ð° Ð½Ð¸Ñ\98е Ð´Ð¾Ñ\88ло Ð´Ð¾ Ð³Ñ\80еÑ\88ке Ð¿Ñ\80и ÐºÐ¾Ð¿Ð¸Ñ\80ању из првобитног извора.",
        "magiclink-tracking-rfc": "Странице с магичним RFC везама",
        "magiclink-tracking-pmid": "Странице с магичним PMID везама",
        "magiclink-tracking-isbn": "Странице са ISBN магичним везама",
        "specialloguserlabel": "Извршилац:",
        "speciallogtitlelabel": "Циљ (наслов или {{ns:user}}:корисничко име):",
-       "log": "Ð\94невниÑ\86и",
+       "log": "Ð\95виденÑ\86иÑ\98е",
        "logeventslist-submit": "Прикажи",
        "logeventslist-more-filters": "Приказ додатних дневника:",
-       "logeventslist-patrol-log": "Ð\94невник патролирања",
-       "logeventslist-tag-log": "Ð\94невник ознака",
-       "all-logs-page": "Сви Ñ\98авни Ð´Ð½ÐµÐ²Ð½Ð¸Ñ\86и",
-       "alllogstext": "СкÑ\83пни Ð¿Ñ\80иказ Ñ\81виÑ\85 Ð´Ð¾Ñ\81Ñ\82Ñ\83пниÑ\85 Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а Ð¾Ð²Ð¾Ð³ Ð²Ð¸ÐºÐ¸Ñ\98а.\nÐ\9cожеÑ\82е Ñ\81Ñ\83зиÑ\82и Ð¿Ñ\80иказ Ð¾Ð´Ð°Ð±Ð¸Ñ\80Ñ\83Ñ\9bи Ð²Ñ\80Ñ\81Ñ\82Ñ\83 Ð¸Ñ\81Ñ\82оÑ\80иÑ\98е, ÐºÐ¾Ñ\80иÑ\81ниÑ\87ког Ð¸Ð¼ÐµÐ½Ð° Ð¸Ð»Ð¸ Ñ\82Ñ\80ажене Ñ\81Ñ\82Ñ\80аниÑ\86е.",
-       "logempty": "Ð\9dема Ð¿Ñ\80онаÑ\92ениÑ\85 Ñ\83ноÑ\81а Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83.",
+       "logeventslist-patrol-log": "Ð\95виденÑ\86иÑ\98а патролирања",
+       "logeventslist-tag-log": "Ð\95виденÑ\86иÑ\98а ознака",
+       "all-logs-page": "Све Ñ\98авне ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98е",
+       "alllogstext": "СкÑ\83пни Ð¿Ñ\80иказ Ñ\81виÑ\85 Ð´Ð¾Ñ\81Ñ\82Ñ\83пниÑ\85 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98а Ñ\81а Ð¾Ð²Ð¾Ð³ Ð²Ð¸ÐºÐ¸Ñ\98а.\nÐ\9cожеÑ\82е Ñ\81Ñ\83зиÑ\82и Ð¿Ñ\80иказ Ð¸Ð·Ð°Ð±Ð¸Ñ\80аÑ\9aем Ñ\82ипа ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98е, ÐºÐ¾Ñ\80иÑ\81ниÑ\87ког Ð¸Ð¼ÐµÐ½Ð° (оÑ\81еÑ\82Ñ\99иво Ð½Ð° Ð¼Ð°Ð»Ð° Ð¸ Ð²ÐµÐ»Ð¸ÐºÐ° Ñ\81лова) Ð¸Ð»Ð¸ Ñ\82Ñ\80ажене Ñ\81Ñ\82Ñ\80аниÑ\86е (Ñ\82акоÑ\92е Ð¾Ñ\81еÑ\82Ñ\99иво Ð½Ð° Ð¼Ð°Ð»Ð° Ð¸ Ð²ÐµÐ»Ð¸ÐºÐ° Ñ\81лова).",
+       "logempty": "Ð\9dема Ð¿Ñ\80онаÑ\92ениÑ\85 Ñ\83ноÑ\81а Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и.",
        "log-title-wildcard": "Претражи наслове који почињу са овим текстом",
        "showhideselectedlogentries": "Прикажи/сакриј изабране догађаје",
-       "log-edit-tags": "УÑ\80еди Ð¾Ð·Ð½Ð°ÐºÐµ Ð¸Ð·Ð°Ð±Ñ\80аниÑ\85 Ñ\83ноÑ\81а Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸Ñ\86има",
+       "log-edit-tags": "УÑ\80еди Ð¾Ð·Ð½Ð°ÐºÐµ Ð¸Ð·Ð°Ð±Ñ\80аниÑ\85 Ñ\83ноÑ\81а Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98ама",
        "checkbox-select": "Изабери: $1",
        "checkbox-all": "Све",
        "checkbox-none": "Ништа",
        "usermaildisabled": "Кориснички имејл је онемогућен",
        "usermaildisabledtext": "Не можете да шаљете имејлове другим корисницима на овом викију",
        "noemailtitle": "Нема имејл адресе",
-       "noemailtext": "Ð\9eваÑ\98 ÐºÐ¾Ñ\80иÑ\81ник Ð½Ð¸Ñ\98е Ð½Ð°Ð²ÐµÐ¾ Ð¸Ñ\81пÑ\80авну имејл адресу.",
+       "noemailtext": "Ð\9eваÑ\98 ÐºÐ¾Ñ\80иÑ\81ник Ð½Ð¸Ñ\98е Ð½Ð°Ð²ÐµÐ¾ Ð²Ð°Ð»Ð¸Ð´ну имејл адресу.",
        "nowikiemailtext": "Овај корисник је одлучио да не прима имејлове од других корисника.",
        "emailnotarget": "Непостојеће или неисправно корисничко име примаоца.",
        "emailtarget": "Унос корисничког имена примаоца",
        "emailusername": "Корисничко име:",
        "emailusernamesubmit": "Пошаљи",
-       "email-legend": "Ð\9fоÑ\88аÑ\99и Ð¸Ð¼ÐµÑ\98л Ð´Ñ\80Ñ\83гом ÐºÐ¾Ñ\80иÑ\81никÑ\83",
+       "email-legend": "СлаÑ\9aе Ð¸Ð¼ÐµÑ\98ла Ð´Ñ\80Ñ\83гом ÐºÐ¾Ñ\80иÑ\81никÑ\83 Ð¿Ñ\80оÑ\98екÑ\82а {{SITENAME}}",
        "emailfrom": "Од:",
        "emailto": "За:",
        "emailsubject": "Наслов:",
        "emailmessage": "Порука:",
        "emailsend": "Пошаљи",
        "emailccme": "Пошаљи ми копију поруке на мој имејл.",
-       "emailccsubject": "Ð\9aопиÑ\98а Ð²Ð°Ñ\88е Ð¿Ð¾Ñ\80Ñ\83ке ÐºÐ¾Ñ\80иÑ\81никÑ\83 $1: $2",
+       "emailccsubject": "Ð\9aопиÑ\98а Ð¿Ð¾Ñ\80Ñ\83ке ÐºÐ¾Ñ\80иÑ\81никÑ\83\86и $1: $2",
        "emailsent": "Имејл је послат",
        "emailsenttext": "Ваша имејл порука је послата.",
        "emailuserfooter": "Овај имејл је {{GENDER:$1|послао|послала}} $1 {{GENDER:$2|кориснику|корисници}} $2 помоћу опције „{{int:emailuser}}“ на викију {{SITENAME}}. Ако одговорите на овај имејл, {{GENDER:$2|Ваш}} имејл ће бити непосредно прослеђен ка {{GENDER:$1|првобитном пошиљаоцу}}, чиме ћете {{GENDER:$2|му|јој}} открити {{GENDER:$2|своју}} имејл адресу.",
        "watchlist": "Списак надгледања",
        "mywatchlist": "Списак надгледања",
        "watchlistfor2": "За $1 $2",
-       "nowatchlist": "Ð\92аÑ\88 Ñ\81пиÑ\81ак Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа Ñ\98е Ð¿Ñ\80азан.",
+       "nowatchlist": "Ð\9dемаÑ\82е Ð½Ð¸Ñ\88Ñ\82а Ð½Ð° Ñ\81вом Ñ\81пиÑ\81кÑ\83 Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа.",
        "watchlistanontext": "Морате бити пријављени да бисте гледали и уређивали ставке на вашем списку надгледања.",
        "watchnologin": "Нисте пријављени",
        "addwatch": "Додај на списак надгледања",
-       "addedwatchtext": "СÑ\82Ñ\80аниÑ\86а â\80\9e[[:$1]]â\80\9c Ð¸ Ñ\9aена Ñ\81Ñ\82Ñ\80аниÑ\86а Ð·Ð° Ñ\80азговоÑ\80 Ñ\98е Ð´Ð¾Ð´Ð°Ñ\82а Ð½Ð° Ð\92аш [[Special:Watchlist|списак надгледања]].",
-       "addedwatchtext-talk": "СÑ\82Ñ\80аниÑ\86а â\80\9e[[:$1]]â\80\9d Ð¸ Ñ\9aена Ð¿Ñ\80идÑ\80Ñ\83жена Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð´Ð¾Ð´Ð°Ñ\82а Ð½Ð° Ð\92аш [[Special:Watchlist|списак надгледања]]",
+       "addedwatchtext": "СÑ\82Ñ\80аниÑ\86а â\80\9e[[:$1]]â\80\9c Ð¸ Ñ\9aена Ñ\81Ñ\82Ñ\80аниÑ\86а Ð·Ð° Ñ\80азговоÑ\80 Ñ\98е Ð´Ð¾Ð´Ð°Ñ\82а Ð½Ð° Ð²аш [[Special:Watchlist|списак надгледања]].",
+       "addedwatchtext-talk": "СÑ\82Ñ\80аниÑ\86а â\80\9e[[:$1]]â\80\9d Ð¸ Ñ\9aена Ð¿Ñ\80идÑ\80Ñ\83жена Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð´Ð¾Ð´Ð°Ñ\82а Ð½Ð° Ð²аш [[Special:Watchlist|списак надгледања]]",
        "addedwatchtext-short": "Страница „$1“ је додата на Ваш списак надгледања.",
        "removewatch": "Уклони са списка надгледања",
        "removedwatchtext": "Страница „[[:$1]]“ и њена страница за разговор је уклоњена са Вашег [[Special:Watchlist|списка надгледања]].",
        "unwatchthispage": "Прекини надгледање",
        "notanarticle": "Није страница са садржајем",
        "notvisiblerev": "Измена је обрисана",
-       "watchlist-details": "Ð\9dа Ð\92аÑ\88ем Ñ\81пиÑ\81кÑ\83 Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа {{PLURAL:$1|Ñ\98е $1 Ñ\81Ñ\82Ñ\80аниÑ\86а|Ñ\81Ñ\83 $1 Ñ\81Ñ\82Ñ\80аниÑ\86е|Ñ\98е $1 Ñ\81Ñ\82Ñ\80аниÑ\86а}} (плус странице за разговор).",
+       "watchlist-details": "Ð\98маÑ\82е {{PLURAL:$1|$1 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83|$1 Ñ\81Ñ\82Ñ\80аниÑ\86е|$1 Ñ\81Ñ\82Ñ\80аниÑ\86а}} Ð½Ð° Ñ\81вом Ñ\81пиÑ\81кÑ\83 Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа (плус странице за разговор).",
        "wlheader-enotif": "Обавештење имејлом је омогућено.",
        "wlheader-showupdated": "Странице које су измењене откад сте их последњи пут посетили су <strong>подебљане</strong>.",
        "wlnote": "Испод {{PLURAL:$1|је последња измена|су последње <strong>$1</strong> измене|је последњих <strong>$1</strong> измена}} у {{PLURAL:$2|претходном сату|претходна <strong>$2</strong> сата|претходних <strong>$2</strong> сати}}, закључно са $3, $4.",
        "enotif_body_intro_moved": "Страницу $1 на {{SITENAME}} {{GENDER:$2|преместио|преместила}} је $2 дана $PAGEEDITDATE Тренутна измена налази се на  $3.",
        "enotif_body_intro_restored": "Страницу $1 на {{SITENAME}} {{GENDER:$2|вратио|вратила}} је $2 дана $PAGEEDITDATE Тренутна измена налази се на $3.",
        "enotif_body_intro_changed": "Страницу $1 на {{SITENAME}} {{GENDER:$2|променио|променила}} је $2 дана $PAGEEDITDATE Тренутна измена налази се на $3.",
-       "enotif_lastvisited": "Ð\97а Ñ\81ве Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð¾Ð´ Ð²Ð°Ñ\88е последње посете, погледајте $1.",
+       "enotif_lastvisited": "Ð\97а Ñ\81ве Ð¿Ñ\80омене Ð¾Ð´ последње посете, погледајте $1.",
        "enotif_lastdiff": "Да бисте видели ову измену, погледајте $1.",
        "enotif_anon_editor": "анониман корисник $1",
        "enotif_body": "Поштовани $WATCHINGUSERNAME,\n \t\n$PAGEINTRO $NEWPAGE\n\nОпис: $PAGESUMMARY $PAGEMINOREDIT\n\nКонтакт:\nмејл: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\n\nНеће бити других обавештења у случају даљих измена уколико не посетите ову страницу када сте пријављени.\nМожете и да поништите подешавања обавештења за све странице у вашем списку надгледања.\n\nСрдачан поздрав, {{SITENAME}}\n\n--\nДа бисте променили подешавања имејл обавештења, посетите\n{{canonicalurl:{{#special:Preferences}}}}\n\nДа бисте променили подешавања списка надгледања, посетите\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nДа бисте уклонили ову страницу са списка надгледања, посетите\n$UNWATCHURL\n\nПодршка и даља помоћ:\n$HELPPAGE",
        "actioncomplete": "Радња је завршена",
        "actionfailed": "Радња није успела",
        "deletedtext": "Страница „$1“ је обрисана.\nПогледајте ''$2'' за више детаља.",
-       "dellogpage": "Ð\94невник брисања",
-       "dellogpagetext": "Испод је списак последњих брисања.",
-       "deletionlog": "дневник брисања",
-       "log-name-create": "Ð\94невник прављења страница",
+       "dellogpage": "Ð\95виденÑ\86иÑ\98а брисања",
+       "dellogpagetext": "Испод је списак скорашњих брисања.",
+       "deletionlog": "евиденÑ\86иÑ\98а брисања",
+       "log-name-create": "Ð\95виденÑ\86иÑ\98а прављења страница",
        "log-description-create": "Испод је списак скорашњих прављења страница.",
        "logentry-create-create": "$1 је {{GENDER:$2|направио|направила}} страницу $3",
        "reverted": "Враћено на ранију измену",
        "deletecomment": "Разлог:",
        "deleteotherreason": "Други/додатни разлог:",
        "deletereasonotherlist": "Други разлог",
-       "deletereason-dropdown": "*Најчешћи разлози за брисање\n** Спам\n** Захтев аутора\n** Кршење ауторских права\n** Вандализам",
+       "deletereason-dropdown": "* Уобичајени разлози за брисање\n** Непожељан садржај\n** Вандализам\n** Кршење ауторских права\n** Захтев аутора\n** Покварено преусмерење",
        "delete-edit-reasonlist": "Уреди разлоге брисања",
        "delete-toobig": "Ова страница има велику историју, преко $1 {{PLURAL:$1|измене|измене|измена}}.\nБрисање таквих страница је ограничено да би се спречило случајно оптерећење сервера.",
        "delete-warning-toobig": "Ова страница има велику историју, преко $1 {{PLURAL:$1|измене|изменe|измена}}.\nЊено брисање може пореметити базу података, стога поступајте с опрезом.",
        "rollbacklink": "врати",
        "rollbacklinkcount": "врати $1 {{PLURAL:$1|измену|измене|измена}}",
        "rollbacklinkcount-morethan": "врати више од $1 {{PLURAL:$1|измене|измене|измена}}",
-       "rollbackfailed": "Ð\9dеÑ\83Ñ\81пеÑ\88но Ð²Ñ\80аÑ\9bаÑ\9aе",
+       "rollbackfailed": "Ð\92Ñ\80аÑ\9bаÑ\9aе Ð½Ð¸Ñ\98е Ñ\83Ñ\81пело",
        "rollback-missingparam": "Недостаје потребан параметар на захтеву.",
-       "rollback-missingrevision": "Не могу учитати податке о измени.",
+       "rollback-missingrevision": "Не могу да учитам податке о измени.",
        "cantrollback": "Не могу да вратим измену.\nПоследњи аутор је уједно и једини.",
        "alreadyrolled": "Враћање последње измене странице [[:$1]] од стране {{GENDER:$2|корисника|кориснице|корисника}} [[User:$2|$2]] ([[User talk:$2|разговор]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) није успело; неко други је у међувремену изменио или вратио страницу.\n\nПоследњу измену је {{GENDER:$3|направио|направила|направио}} [[User:$3|$3]] ([[User talk:$3|разговор]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Опис измене: <em>$1</em>.",
        "changecontentmodel-nodirectediting": "Модел садржаја $1 не подржава изравно уређивање",
        "changecontentmodel-emptymodels-title": "Нема доступних модела садржаја",
        "changecontentmodel-emptymodels-text": "Модел садржаја странице [[:$1]] се не може претворити ни у једну другу врсту.",
-       "log-name-contentmodel": "Ð\94невник промене модела садржаја",
+       "log-name-contentmodel": "Ð\95виденÑ\86иÑ\98а промене модела садржаја",
        "log-description-contentmodel": "Ова страница приказује измене у моделима садржаја страница и странице које су направљене са моделом садржаја који се разликује од подразумеваног.",
        "logentry-contentmodel-new": "$1 је {{GENDER:$2|направио|направила}} страницу $3 с нестандардним моделом садржаја „$5“",
        "logentry-contentmodel-change": "$1 је {{GENDER:$2|променио|променила}} модел садржаја странице $3 из „$4“ у „$5“",
        "logentry-contentmodel-change-revertlink": "врати",
        "logentry-contentmodel-change-revert": "врати",
-       "protectlogpage": "Ð\94невник заштите",
+       "protectlogpage": "Ð\95виденÑ\86иÑ\98а заштите",
        "protectlogtext": "Испод је списак заштићених страница.\nПогледајте [[Special:ProtectedPages|списак заштићених страница]] за више детаља.",
        "protectedarticle": "је {{GENDER:|заштитио|заштитила}} страницу „[[$1]]“",
-       "modifiedarticleprotection": "је {{GENDER:|променио|променила}} степен заштите странице „[[$1]]“",
+       "modifiedarticleprotection": "је {{GENDER:|променио|променила}} ниво заштите странице „[[$1]]“",
        "unprotectedarticle": "је скинуо заштиту са странице „[[$1]]“",
        "movedarticleprotection": "је преместио подешавања заштите са „[[$2]]“ на „[[$1]]“",
        "protectedarticle-comment": "{{GENDER:$2|Заштићена}} страница [[$1]]",
-       "modifiedarticleprotection-comment": "{{GENDER:$2|Промењен}} ниво заштите [[$1]]",
+       "modifiedarticleprotection-comment": "је {{GENDER:$2|променио|променила}} ниво заштите странице „[[$1]]”",
        "unprotectedarticle-comment": "{{GENDER:$2|Скинута}} заштита са [[$1]]",
-       "protect-title": "СÑ\82епен Ð·Ð°Ñ\88Ñ\82иÑ\82е Ð·Ð° „$1“",
+       "protect-title": "Ð\9fÑ\80омена Ñ\81Ñ\82епена Ð·Ð°Ñ\88Ñ\82иÑ\82е Ð·Ð° Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 „$1“",
        "protect-title-notallowed": "Преглед степена заштите за „$1“",
        "prot_1movedto2": "је преместио [[$1]] на [[$2]]",
        "protect-badnamespace-title": "Незаштитљив именски простор",
        "protect-legend": "Подешавања заштите",
        "protectcomment": "Разлог:",
        "protectexpiry": "Истиче:",
-       "protect_expiry_invalid": "Време истека је неисправно.",
+       "protect_expiry_invalid": "Време истека није важеће.",
        "protect_expiry_old": "Време истека је старије од тренутног времена.",
        "protect-unchain-permissions": "Откључај даљња подешавања заштите",
-       "protect-text": "Овде можете да погледате и промените степен заштите за страницу '''$1'''.",
+       "protect-text": "Овде можете да погледате и промените ниво заштите странице <strong>$1</strong>.",
        "protect-locked-blocked": "Не можете мењати степене заштите док сте блокирани.\nОво су тренутна подешавања странице '''$1''':",
        "protect-locked-dblock": "Степени заштите се не могу мењати јер је активна база података закључана.\nОво су подешавања странице '''$1''':",
-       "protect-locked-access": "Ð\9dемаÑ\82е Ð¾Ð²Ð»Ð°Ñ\88Ñ\9bеÑ\9aа Ð·Ð° Ð¼ÐµÑ\9aаÑ\9aе Ñ\81Ñ\82епена заштите странице.\nОво су тренутна подешавања странице '''$1''':",
-       "protect-cascadeon": "Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ñ\82Ñ\80енÑ\83Ñ\82но Ð·Ð°Ñ\88Ñ\82иÑ\9bена Ñ\98еÑ\80 Ñ\81е Ð½Ð°Ð»Ð°Ð·Ð¸ Ð½Ð° {{PLURAL:$1|Ñ\81Ñ\82Ñ\80аниÑ\86и ÐºÐ¾Ñ\98а Ð¸Ð¼Ð°|Ñ\81Ñ\82Ñ\80аниÑ\86ама ÐºÐ¾Ñ\98е Ð¸Ð¼Ð°Ñ\98Ñ\83}} Ð¿Ñ\80еноÑ\81ивÑ\83 Ð·Ð°Ñ\88Ñ\82иÑ\82Ñ\83.\nÐ\9cожеÑ\82е Ð´Ð° Ð¿Ñ\80омениÑ\82е Ñ\81Ñ\82епен Ð·Ð°Ñ\88Ñ\82иÑ\82е, Ð°Ð»Ð¸ Ñ\82о Ð½ÐµÑ\9bе Ñ\83Ñ\82иÑ\86аÑ\82и на преносиву заштиту.",
+       "protect-locked-access": "Ð\92аÑ\88 Ð½Ð°Ð»Ð¾Ð³ Ð½ÐµÐ¼Ð° Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð·Ð° Ð¼ÐµÑ\9aаÑ\9aе Ð½Ð¸Ð²Ð¾а заштите странице.\nОво су тренутна подешавања странице '''$1''':",
+       "protect-cascadeon": "Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ñ\82Ñ\80енÑ\83Ñ\82но Ð·Ð°Ñ\88Ñ\82иÑ\9bена Ñ\98еÑ\80 Ñ\98е Ñ\83кÑ\99Ñ\83Ñ\87ена Ñ\83 {{PLURAL:$1|Ñ\81ледеÑ\9bÑ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 ÐºÐ¾Ñ\98а Ð¸Ð¼Ð°|Ñ\81ледеÑ\9bе Ñ\81Ñ\82Ñ\80аниÑ\86е ÐºÐ¾Ñ\98е Ð¸Ð¼Ð°Ñ\98Ñ\83}} Ñ\83кÑ\99Ñ\83Ñ\87енÑ\83 Ð¿Ñ\80еноÑ\81ивÑ\83 Ð·Ð°Ñ\88Ñ\82иÑ\82Ñ\83.\nÐ\9fÑ\80омене Ð½Ð¸Ð²Ð¾Ð° Ð·Ð°Ñ\88Ñ\82иÑ\82е Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ð½ÐµÑ\9bе Ð´Ð° Ñ\83Ñ\82иÑ\87Ñ\83 на преносиву заштиту.",
        "protect-default": "Допуштено свим корисницима",
        "protect-fallback": "Дозвољено само корисницима са дозволом „$1“",
        "protect-level-autoconfirmed": "Допуштено само аутоматски потврђеним корисницима",
        "protect-expiring": "истиче $1 (UTC)",
        "protect-expiring-local": "истиче $1",
        "protect-expiry-indefinite": "неодређено",
-       "protect-cascade": "Заштити све странице које су укључене у ову (преносива заштита)",
-       "protect-cantedit": "Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð¼ÐµÑ\9aаÑ\82и Ñ\81Ñ\82епене Ð·Ð°Ñ\88Ñ\82иÑ\82е Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98еÑ\80 Ð½ÐµÐ¼Ð°Ñ\82е Ð¾Ð²Ð»Ð°Ñ\88Ñ\9bеÑ\9aа Ð·Ð° Ñ\83Ñ\80еÑ\92иваÑ\9aе.",
+       "protect-cascade": "Заштити странице које су укључене у ову (преносива заштита)",
+       "protect-cantedit": "Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¼ÐµÑ\9aаÑ\82е Ð½Ð¸Ð²Ð¾ Ð·Ð°Ñ\88Ñ\82иÑ\82е Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\98еÑ\80 Ð½ÐµÐ¼Ð°Ñ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ñ\98е Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98еÑ\82е.",
        "protect-othertime": "Друго време:",
        "protect-othertime-op": "друго време",
        "protect-existing-expiry": "Постојеће време истека: $2 у $3",
        "protect-edit-reasonlist": "Уреди разлоге заштићивања",
        "protect-expiry-options": "1 сат:1 hour,1 дан:1 day,1 недеља:1 week,2 недеље:2 weeks,1 месец:1 month,3 месеца:3 months,6 месеци:6 months,1 година:1 year,трајно:infinite",
        "restriction-type": "Дозвола:",
-       "restriction-level": "Ð\9dиво Ð·Ð°Ñ\88Ñ\82иÑ\82е:",
+       "restriction-level": "Ð\9dиво Ð¾Ð³Ñ\80аниÑ\87еÑ\9aа:",
        "minimum-size": "Најмања величина",
        "maximum-size": "Највећа величина:",
        "pagesize": "(бајтови)",
        "restriction-level-sysop": "потпуно заштићено",
        "restriction-level-autoconfirmed": "полузаштићено",
        "restriction-level-all": "сви нивои",
-       "undelete": "Ð\9fÑ\80иказ обрисаних страница",
+       "undelete": "Ð\9fÑ\80еглед обрисаних страница",
        "undeletepage": "Преглед и враћање обрисаних страница",
        "undeletepagetitle": "'''Следећи садржај се састоји од обрисаних измена странице [[:$1|$1]]'''.",
        "viewdeletedpage": "Приказ обрисаних страница",
        "undeleteinvert": "Обрни избор",
        "undeletecomment": "Разлог:",
        "cannotundelete": "Враћање једне или свих није успело:\n$1",
-       "undeletedpage": "<strong>СÑ\82Ñ\80аниÑ\86а $1 Ñ\98е Ð²Ñ\80аÑ\9bена</strong>\n\nÐ\9fогледаÑ\98Ñ\82е [[Special:Log/delete|дневник брисања]] за записе о скорашњим брисањима и враћањима.",
-       "undelete-header": "Ð\9fогледаÑ\98Ñ\82е [[Special:Log/delete|иÑ\81Ñ\82оÑ\80иÑ\98аÑ\82 брисања]] за недавно обрисане странице.",
+       "undeletedpage": "<strong>СÑ\82Ñ\80аниÑ\86а $1 Ñ\98е Ð²Ñ\80аÑ\9bена</strong>\n\nÐ\9fогледаÑ\98Ñ\82е [[Special:Log/delete|евиденÑ\86иÑ\98Ñ\83 брисања]] за записе о скорашњим брисањима и враћањима.",
+       "undelete-header": "Ð\9fогледаÑ\98Ñ\82е [[Special:Log/delete|евиденÑ\86иÑ\98Ñ\83 брисања]] за недавно обрисане странице.",
        "undelete-search-title": "Претрага обрисаних страница",
        "undelete-search-box": "Претражи обрисане странице",
        "undelete-search-prefix": "Прикажи странице које почињу са:",
        "undelete-search-full": "Прикажи наслове који садрже:",
        "undelete-search-submit": "Претражи",
-       "undelete-no-results": "Ð\9eдговаÑ\80аÑ\98Ñ\83Ñ\9bа Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 Ð±Ñ\80иÑ\81аÑ\9aа Ð½Ð¸Ñ\98е Ð¿Ñ\80онаÑ\92ена.",
+       "undelete-no-results": "Ð\9dиÑ\98е Ð¿Ñ\80онаÑ\92ена Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ\80аÑ\98Ñ\83Ñ\9bа Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\83 Ð°Ñ\80Ñ\85иви Ð±Ñ\80иÑ\81аÑ\9aа.",
        "undelete-filename-mismatch": "Не могу да вратим измену датотеке од $1: назив датотеке се не поклапа",
        "undelete-bad-store-key": "Не могу да вратим измену датотеке од $1: датотека је недостајала пре брисања.",
        "undelete-cleanup-error": "Грешка при брисању некоришћене архиве „$1“.",
        "namespace_association": "Повезани именски простор",
        "tooltip-namespace_association": "Означите ову кутијицу да бисте укључили и разговор или именски простор теме која је повезана са изабраним именским простором",
        "blanknamespace": "(главни)",
-       "contributions": "{{GENDER:$1|Кориснички}} доприноси",
+       "contributions": "Доприноси {{GENDER:$1|корисника|кориснице}}",
        "contributions-title": "Доприноси {{GENDER:$1|корисника|кориснице}} $1",
        "mycontris": "Доприноси",
        "anoncontribs": "Доприноси",
        "month": "од месеца (и раније):",
        "year": "од године (и раније):",
        "date": "Од датума (и раније):",
-       "sp-contributions-newbies": "Ð\9fÑ\80икажи Ñ\81амо Ð´Ð¾Ð¿Ñ\80иноÑ\81е Ð½Ð¾Ð²Ð¸Ñ\85 ÐºÐ¾Ñ\80иÑ\81ника",
+       "sp-contributions-newbies": "Ð\9fÑ\80икажи Ñ\81амо Ð´Ð¾Ð¿Ñ\80иноÑ\81е Ð½Ð¾Ð²Ð¸Ñ\85 Ð½Ð°Ð»Ð¾Ð³а",
        "sp-contributions-newbies-sub": "За нове кориснике",
        "sp-contributions-newbies-title": "Доприноси нових корисника",
-       "sp-contributions-blocklog": "дневник блокирања",
-       "sp-contributions-suppresslog": "обрисани {{GENDER:$1|кориснички}} доприноси",
+       "sp-contributions-blocklog": "евиденÑ\86иÑ\98а блокирања",
+       "sp-contributions-suppresslog": "обрисани доприноси {{GENDER:$1|корисника|кориснице}}",
        "sp-contributions-deleted": "обрисани доприноси {{GENDER:$1|корисника|кориснице}}",
        "sp-contributions-uploads": "отпремања",
-       "sp-contributions-logs": "дневниÑ\86и",
+       "sp-contributions-logs": "евиденÑ\86иÑ\98е",
        "sp-contributions-talk": "разговор",
        "sp-contributions-userrights": "управљање правима {{GENDER:$1|корисника|кориснице}}",
-       "sp-contributions-blocked-notice": "Ð\9eваÑ\98 ÐºÐ¾Ñ\80иÑ\81ник Ñ\98е Ñ\82Ñ\80енÑ\83Ñ\82но Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан. \nÐ\98Ñ\81под Ñ\81Ñ\83 Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¸ Ð¿Ð¾Ñ\81ледÑ\9aи Ð·Ð°Ð¿Ð¸Ñ\81и Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа:",
-       "sp-contributions-blocked-notice-anon": "Ова ИП адреса је тренутно блокирана.\nИспод су наведени последњи записи у дневнику блокирања:",
+       "sp-contributions-blocked-notice": "Ð\9eваÑ\98 ÐºÐ¾Ñ\80иÑ\81ник Ñ\98е Ñ\82Ñ\80енÑ\83Ñ\82но Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан. \nÐ\9fоÑ\81ледÑ\9aи Ñ\83ноÑ\81 Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа Ñ\98е Ð½Ð°Ð²ÐµÐ´ÐµÐ½ Ð¸Ñ\81под ÐºÐ°Ð¾ Ñ\80еÑ\84еÑ\80енÑ\86а:",
+       "sp-contributions-blocked-notice-anon": "Ова IP адреса је тренутно блокирана.\nПоследњи унос у евиденцији блокирања је наведен испод као референца:",
        "sp-contributions-search": "Претрага доприноса",
-       "sp-contributions-username": "ИП адреса или корисничко име:",
+       "sp-contributions-username": "IP адреса или корисничко име:",
        "sp-contributions-toponly": "Само најновије измене",
        "sp-contributions-newonly": "Само измене којима су направљене нове странице",
        "sp-contributions-hideminor": "Сакриј мање измене",
        "whatlinkshere-filters": "Филтери",
        "whatlinkshere-submit": "Иди",
        "autoblockid": "Аутоматско блокирање #$1",
-       "block": "Ð\91локиÑ\80аÑ\98 корисника",
+       "block": "Ð\91локиÑ\80аÑ\9aе корисника",
        "unblock": "Деблокирање корисника",
-       "blockip": "Ð\91локиÑ\80аÑ\98 {{GENDER:$1|коÑ\80иÑ\81ника|коÑ\80иÑ\81ниÑ\86Ñ\83}}",
+       "blockip": "Ð\91локиÑ\80аÑ\9aе {{GENDER:$1|коÑ\80иÑ\81ника|коÑ\80иÑ\81ниÑ\86е}}",
        "blockiptext": "Користите доњи образац да бисте забранили приступ за писање с одређене IP адресе или корисничког имена.\nОво би требало да вршите само ради спречавања вандализма, у складу са [[{{MediaWiki:Policy-url}}|смерницама]].\nИзаберите конкретан разлог испод (пример: навођење конкретних страница које су вандализоване). Можете блокирати опсеге IP адреса помоћу [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] синтаксе, највећи дозвољени опсег за IPv4 је /$1 односно /$2 за IPv6.",
        "ipaddressorusername": "IP адреса или корисничко име:",
        "ipbexpiry": "Истиче:",
        "ipbreason": "Разлог:",
        "ipbreason-dropdown": "*Најчешћи разлози за блокирање\n** Уношење лажних информација\n** Уклањање садржаја са страница\n** Постављање веза до спољашњих сајтова\n** Уношење бесмислица у странице\n** Непристојно понашање\n** Употреба више налога\n** Неприхватљиво корисничко име",
-       "ipb-hardblock": "Ð\9eнемогÑ\83Ñ\9bи Ð¿Ñ\80иÑ\98авÑ\99еним ÐºÐ¾Ñ\80иÑ\81ниÑ\86има Ð´Ð° Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98Ñ\83 Ñ\81 Ð¾Ð²Ðµ Ð\98Ð\9f адресе",
+       "ipb-hardblock": "СпÑ\80еÑ\87и Ð¿Ñ\80иÑ\98авÑ\99ене ÐºÐ¾Ñ\80иÑ\81нике Ð´Ð° Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98Ñ\83 Ñ\81 Ð¾Ð²Ðµ IP адресе",
        "ipbcreateaccount": "Онемогући отварање налога",
        "ipbemailban": "Спречи корисника да шаље имејлове",
-       "ipbenableautoblock": "Аутоматски блокирај последњу ИП адресу овог корисника и све даљње адресе с којих покуша да уређује",
+       "ipbenableautoblock": "Аутоматски блокирај последњу IP адресу овог корисника и све даљње адресе с којих покуша да уређује",
        "ipbsubmit": "Блокирај овог корисника",
        "ipbother": "Друго време:",
        "ipboptions": "2 сата:2 hours,1 дан:1 day,3 дана:3 days,1 недеља:1 week,2 недеље:2 weeks,1 месец:1 month,3 месеца:3 months,6 месеци:6 months,1 година:1 year,трајно:infinite",
        "ipbhidename": "Сакриј корисничко име са измена и спискова",
        "ipbwatchuser": "Надгледај корисничке странице и странице за разговор овог корисника",
        "ipb-disableusertalk": "Онемогући кориснику да уређује своју страницу за разговор",
-       "ipb-change-block": "Ð\9fоново Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\98 ÐºÐ¾Ñ\80иÑ\81ника Ñ\81 Ð¾Ð²Ð¸Ð¼ Ð¿Ð¾Ñ\81Ñ\82авкама",
+       "ipb-change-block": "Ð\9fоновно Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\98 ÐºÐ¾Ñ\80иÑ\81ника Ñ\81 Ð¾Ð²Ð¸Ð¼ Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aима",
        "ipb-confirm": "Потврди блокирање",
-       "badipaddress": "Ð\9dеиÑ\81пÑ\80авна IP адреса",
+       "badipaddress": "Ð\9dеважеÑ\9bа IP адреса",
        "blockipsuccesssub": "Блокирање је успело",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] је {{GENDER:$1|блокиран|блокирана|блокиран}}.<br />\nБлокирања можете да погледате [[Special:BlockList|овде]].",
        "ipb-blockingself": "Овом радњом ћете блокирати себе! Јесте ли сигурни да то желите?",
        "ipb-blocklist-contribs": "Доприноси за {{GENDER:$1|$1}}",
        "ipb-blocklist-duration-left": "преостало: $1",
        "unblockip": "Деблокирај корисника",
-       "unblockiptext": "Ð\9aоÑ\80иÑ\81Ñ\82иÑ\82е Ð¾Ð±Ñ\80азаÑ\86 Ð¸Ñ\81под Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð²Ñ\80аÑ\82или Ð¿Ñ\80аво Ð¿Ð¸Ñ\81аÑ\9aа Ð±Ð»Ð¾ÐºÐ¸Ñ\80аноÑ\98 Ð\98Ð\9f адреси или корисничком имену.",
+       "unblockiptext": "Ð\9aоÑ\80иÑ\81Ñ\82иÑ\82е Ð´Ð¾Ñ\9aи Ð¾Ð±Ñ\80азаÑ\86 Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð²Ñ\80аÑ\82или Ð¿Ñ\80аво Ð¿Ð¸Ñ\81аÑ\9aа Ñ\80аниÑ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80аноÑ\98 IP адреси или корисничком имену.",
        "ipusubmit": "Уклони ову блокаду",
        "unblocked": "[[User:$1|$1]] је деблокиран",
        "unblocked-range": "$1 је деблокиран",
        "ipblocklist-legend": "Проналажење блокираног корисника",
        "blocklist-userblocks": "Сакриј блокирања налога",
        "blocklist-tempblocks": "Сакриј привремена блокирања",
-       "blocklist-addressblocks": "СакÑ\80иÑ\98 Ð¿Ð¾Ñ\98единаÑ\87на Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа Ð\98Ð\9f Ð°Ð´Ñ\80еÑ\81е",
+       "blocklist-addressblocks": "СакÑ\80иÑ\98 Ð¿Ð¾Ñ\98единаÑ\87не Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ IP-а",
        "blocklist-rangeblocks": "Сакриј блокирања опсега",
-       "blocklist-timestamp": "Време и датум",
+       "blocklist-timestamp": "Временска ознака",
        "blocklist-target": "Корисник",
        "blocklist-expiry": "Истиче",
        "blocklist-by": "Блокирао",
        "change-blocklink": "промени блокаду",
        "contribslink": "доприноси",
        "emaillink": "пошаљи имејл",
-       "autoblocker": "Аутоматски сте блокирани јер делите ИП адресу с корисником/цом [[User:$1|$1]].\nРазлог блокирања: „$2“",
-       "blocklogpage": "Ð\94невник блокирања",
+       "autoblocker": "Аутоматски сте блокирани јер делите IP адресу с корисником/цом [[User:$1|$1]].\nРазлог блокирања корисника/це $1 је „$2“",
+       "blocklogpage": "Ð\95виденÑ\86иÑ\98а блокирања",
        "blocklog-showlog": "{{GENDER:$1|Овај корисник је раније блокиран|Ова корисница је раније блокирана}}.\nИсторија блокирања се налази испод:",
        "blocklog-showsuppresslog": "{{GENDER:$1|Овај корисник је раније блокиран и сакривен|Ова корисница је раније блокирана и сакривена}}.\nИсторија сакривања се налази испод:",
        "blocklogentry": "је блокирао [[$1]] са временом истицања од $2 $3",
        "reblock-logentry": "{{GENDER:|је променио|је променила}} подешавања за блокирање {{GENDER:$1|корисника|кориснице}} [[$1]] са временом истека од $2 ($3)",
-       "blocklogtext": "Ð\9eво Ñ\98е Ð´Ð½ÐµÐ²Ð½Ð¸Ðº Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа Ð¸ Ð´ÐµÐ±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа ÐºÐ¾Ñ\80иÑ\81ника.\nÐ\90Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð±Ð»Ð¾ÐºÐ¸Ñ\80ане Ð\98Ð\9f Ð°Ð´Ñ\80еÑ\81е Ð½Ð¸Ñ\81Ñ\83 Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ðµ.\nТекÑ\83Ñ\9bе Ð·Ð°Ð±Ñ\80ане Ð¸ Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа Ð¼Ð¾Ð¶ÐµÑ\82е Ð½Ð°Ñ\9bи [[Special:BlockList|овде]].",
+       "blocklogtext": "Ð\9eво Ñ\98е ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98а Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа Ð¸ Ð´ÐµÐ±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа ÐºÐ¾Ñ\80иÑ\81ника.\nÐ\90Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð±Ð»Ð¾ÐºÐ¸Ñ\80ане IP Ð°Ð´Ñ\80еÑ\81е Ð½Ð¸Ñ\81Ñ\83 Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ðµ.\nÐ\9fогледаÑ\98Ñ\82е [[Special:BlockList|Ñ\81пиÑ\81ак Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа]] Ð·Ð° Ñ\81пиÑ\81ак Ñ\82Ñ\80енÑ\83Ñ\82ниÑ\85 Ð·Ð°Ð±Ñ\80ана Ð¸ Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа.",
        "unblocklogentry": "је деблокирао $1",
        "block-log-flags-anononly": "само анонимни корисници",
        "block-log-flags-nocreate": "онемогућено отварање налога",
        "block-log-flags-nousertalk": "забрањено уређивање сопствене странице за разговор",
        "block-log-flags-angry-autoblock": "проширено аутоматско блокирање је омогућено",
        "block-log-flags-hiddenname": "корисничко име је сакривено",
-       "range_block_disabled": "Ð\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\81ка Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82 Ð·Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aе Ñ\80аÑ\81пона Ð\98Ð\9f Ð°Ð´Ñ\80еÑ\81а је онемогућена.",
-       "ipb_expiry_invalid": "Време истека је неисправно.",
+       "range_block_disabled": "Ð\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\81ка Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82 Ð·Ð° Ð¿Ñ\80авÑ\99еÑ\9aе Ð¾Ð¿Ñ\81ега Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ је онемогућена.",
+       "ipb_expiry_invalid": "Време истека није важеће.",
        "ipb_expiry_old": "Време истека је у прошлости.",
        "ipb_expiry_temp": "Сакривене блокаде корисника морају бити трајне.",
        "ipb_hide_invalid": "Не могу да потиснем овај налог; има више од {{PLURAL:$1|једне измене|$1 измена}}.",
        "ipb-otherblocks-header": "{{PLURAL:$1|Друге блокаде}}",
        "unblock-hideuser": "Не можете деблокирати овог корисника јер је његово корисничко име сакривено.",
        "ipb_cant_unblock": "Грешка: блокада $1 не постоји. Можда је корисник деблокиран.",
-       "ipb_blocked_as_range": "Ð\93Ñ\80еÑ\88ка: IP Ð°Ð´Ñ\80еÑ\81а $1 Ð½Ð¸Ñ\98е Ð´Ð¸Ñ\80екÑ\82но Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана Ð¸ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð´ÐµÐ±Ð»Ð¾ÐºÐ¸Ñ\80а.\nÐ\9eна Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана ÐºÐ°Ð¾ Ð´ÐµÐ¾ Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ $2, ÐºÐ¾Ñ\98а Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ\82и Ð´ÐµÐ±Ð»Ð¾ÐºÐ¸Ñ\80ана.",
-       "ip_range_invalid": "Ð\9dеиÑ\81пÑ\80аван Ñ\80аÑ\81пон IP Ð°Ð´Ñ\80еÑ\81а.",
-       "ip_range_toolarge": "Ð\9eпÑ\81ежна Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа Ð²ÐµÑ\9bа Ð¾Ð´ /$1 Ð½Ð¸Ñ\81Ñ\83 Ð´Ð¾Ð·Ð²Ð¾Ñ\99ена.",
-       "ip_range_toolow": "IP-опсези нису дозвољени.",
+       "ipb_blocked_as_range": "Ð\93Ñ\80еÑ\88ка: IP Ð°Ð´Ñ\80еÑ\81а $1 Ð½Ð¸Ñ\98е Ð´Ð¸Ñ\80екÑ\82но Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана Ð¸ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð´ÐµÐ±Ð»Ð¾ÐºÐ¸Ñ\80а.\nÐ\9eна Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана ÐºÐ°Ð¾ Ð´ÐµÐ¾ Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ $2, ÐºÐ¾Ñ\98а Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð´ÐµÐ±Ð»Ð¾ÐºÐ¸Ñ\80а.",
+       "ip_range_invalid": "Ð\9dеважеÑ\9bи Ð¾Ð¿Ñ\81ег IP Ð°Ð´Ñ\80еÑ\81е.",
+       "ip_range_toolarge": "Ð\9eпÑ\81ези Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа Ð²ÐµÑ\9bи Ð¾Ð´ /$1 Ð½Ð¸Ñ\81Ñ\83 Ð´Ð¾Ð·Ð²Ð¾Ñ\99ени.",
+       "ip_range_toolow": "IP опсези нису дозвољени.",
        "proxyblocker": "Блокер посредника",
-       "proxyblockreason": "Ваша ИП адреса је блокирана јер представља отворени посредник.\nОбратите се вашем добављачу интернет услуга или техничку подршку и обавестите их о овом озбиљном безбедносном проблему.",
+       "proxyblockreason": "Ваша IP адреса је блокирана јер представља отворени посредник.\nОбратите се вашем добављачу интернет услуга или техничку подршку и обавестите их о овом озбиљном безбедносном проблему.",
        "sorbs": "DNSBL",
-       "sorbsreason": "Ваша ИП адреса је наведена као отворени посредник у DNSBL-у који користи {{SITENAME}}.",
-       "sorbs_create_account_reason": "Ваша ИП адреса је наведена као отворени посредник у DNSBL-у који користи {{SITENAME}}.\nНе можете да отворите налог.",
+       "sorbsreason": "Ваша IP адреса је наведена као отворени посредник у DNSBL-у који користи {{SITENAME}}.",
+       "sorbs_create_account_reason": "Ваша IP адреса је наведена као отворени посредник у DNSBL-у који користи {{SITENAME}}.\nНе можете да отворите налог.",
        "cant-see-hidden-user": "Корисник којег покушавате да блокирате је већ блокиран и сакривен.\nС обзиром на то да немате права за сакривање корисника, не можете да погледате нити уредите корисничку блокаду.",
        "ipbblocked": "Не можете забранити или вратити приступ другим корисницима јер сте и сами блокирани",
        "ipbnounblockself": "Није вам дозвољено да деблокирате себе",
        "movenologintext": "Морате да будете регистровани и [[Special:UserLogin|пријављени]] да бисте премештали странице.",
        "movenotallowed": "Немате дозволу да премештате странице.",
        "movenotallowedfile": "Немате дозволу да премештате датотеке.",
-       "cant-move-user-page": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð·Ð° Ð¿Ñ\80емеÑ\88Ñ\82аÑ\9aе Ð¾Ñ\81новниÑ\85 ÐºÐ¾Ñ\80иÑ\81ниÑ\87киÑ\85 Ñ\81Ñ\82Ñ\80аниÑ\86а (осим подстраница).",
-       "cant-move-to-user-page": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð·Ð° Ð¿Ñ\80емеÑ\88Ñ\82аÑ\9aе Ñ\81Ñ\82Ñ\80аниÑ\86е Ð½Ð° Ð²Ð°Ñ\88Ñ\83 корисничку страницу (осим на корисничку подстраницу).",
+       "cant-move-user-page": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ð¿Ñ\80емеÑ\88Ñ\82аÑ\82е ÐºÐ¾Ñ\80иÑ\81ниÑ\87ке Ñ\81Ñ\82Ñ\80аниÑ\86е (осим подстраница).",
+       "cant-move-to-user-page": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ð¿Ñ\80емеÑ\81Ñ\82иÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð½Ð° корисничку страницу (осим на корисничку подстраницу).",
        "cant-move-category-page": "Немате дозволу да премештате странице категорија.",
        "cant-move-to-category-page": "Немате дозволу да преместите страницу на страницу категорије.",
        "cant-move-subpages": "Немате дозволу да премештате подстранице.",
        "movepage-moved": "'''„$1“ је премештена на „$2“'''",
        "movepage-moved-redirect": "Преусмерење је направљено.",
        "movepage-moved-noredirect": "Стварање преусмерења је онемогућено.",
-       "articleexists": "Страница с тим именом већ постоји, или је име неисправно.\nИзаберите друго име.",
+       "articleexists": "Страница с тим именом већ постоји или име које сте одабрали није важеће.\nОдаберите друго.",
        "cantmove-titleprotected": "Не можете да преместите страницу на то место јер је жељени наслов заштићен од стварања",
        "movetalk": "Премести и страницу за разговор",
        "move-subpages": "Премести и подстранице (до $1)",
        "movepage-page-moved": "Страница $1 је премештена на $2.",
        "movepage-page-unmoved": "Страница $1 не може да се премести на $2.",
        "movepage-max-pages": "Највише $1 {{PLURAL:$1|страница је премештена|странице су премештене|страница је премештено}} и више не може да буде аутоматски премештено.",
-       "movelogpage": "Ð\94невник премештања",
+       "movelogpage": "Ð\95виденÑ\86иÑ\98а премештања",
        "movelogpagetext": "Испод се налази списак премештања страница.",
        "movesubpage": "{{PLURAL:$1|Подстраница|Подстранице}}",
        "movesubpagetext": "Ова страница има $1 {{PLURAL:$1|подстраницу приказану|подстранице приказане|подстраница приказаних}} испод.",
        "selfmove": "Наслов је истоветан;\nне можете преместити страницу преко саме себе.",
        "immobile-source-namespace": "Не могу преместити странице у именски простор „$1“.",
        "immobile-target-namespace": "Не могу преместити странице у именски простор „$1“.",
-       "immobile-target-namespace-iw": "Ð\9cеÑ\92Ñ\83вики Ð²ÐµÐ·Ð° Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авно одредиште за премештање странице.",
+       "immobile-target-namespace-iw": "Ð\9cеÑ\92Ñ\83вики Ð²ÐµÐ·Ð° Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´но одредиште за премештање странице.",
        "immobile-source-page": "Ова страница се не може преместити.",
        "immobile-target-page": "Не могу да преместим на жељени наслов.",
        "bad-target-model": "Жељено одредиште користи другачији модел садржаја. Не могу да претворим из $1 у $2.",
        "imagenocrossnamespace": "Датотека се не може преместити у именски простор који не припада датотекама.",
        "nonfile-cannot-move-to-file": "Не-датотеке не можете преместити у именски простор за датотеке",
        "imagetypemismatch": "Екстензија нове датотеке се не поклапа с њеном врстом",
-       "imageinvalidfilename": "ЦиÑ\99ани Ð½Ð°Ð·Ð¸Ð² Ð´Ð°Ñ\82оÑ\82еке Ñ\98е Ð½ÐµÐ¸Ñ\81пÑ\80аван",
+       "imageinvalidfilename": "ЦиÑ\99ано Ð¸Ð¼Ðµ Ð´Ð°Ñ\82оÑ\82еке Ñ\98е Ð½ÐµÐ²Ð°Ð¶ÐµÑ\9bе",
        "fix-double-redirects": "Ажурирајте сва преусмерења која воде до првобитног наслова",
        "move-leave-redirect": "Остави преусмерење",
-       "protectedpagemovewarning": "'''Упозорење:''' ова страница је заштићена, тако да само корисници с администраторским овлашћењима могу да је преместе.\nПоследњи запис у дневнику је приказан испод као референца:",
-       "semiprotectedpagemovewarning": "<strong>Напомена:</strong> ова страница је заштићена, тако да само аутоматски потврђени корисници могу да је преместе.\nПоследњи запис у дневнику је приказан испод као референца:",
+       "protectedpagemovewarning": "'''Упозорење:''' ова страница је заштићена, тако да само корисници с администраторским овлашћењима могу да је преместе.\nПоследњи унос у евиденцији је наведен испод као референца:",
+       "semiprotectedpagemovewarning": "<strong>Напомена:</strong> ова страница је заштићена, тако да само аутоматски потврђени корисници могу да је преместе.\nПоследњи унос у евиденцији је наведен испод као референца:",
        "move-over-sharedrepo": "[[:$1]] се налази на дељеном складишту. Ако преместите датотеку на овај наслов, то ће заменити дељену датотеку.",
        "file-exists-sharedrepo": "Наведени назив датотеке се већ користи у дељеном складишту.\nИзаберите други назив.",
        "export": "Извоз страница",
-       "exporttext": "Ð\9cожеÑ\82е Ð¸Ð·Ð²ÐµÑ\81Ñ\82и Ñ\82екÑ\81Ñ\82 Ð¸ Ð¸Ñ\81Ñ\82оÑ\80иÑ\98Ñ\83 Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¾Ð´Ñ\80еÑ\92ене Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¸Ð»Ð¸ Ð³Ñ\80Ñ\83пе Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\83 Ñ\84оÑ\80маÑ\82Ñ\83 XML.\nÐ\9eво Ð¾Ð½Ð´Ð° Ð¼Ð¾Ð¶Ðµ Ð±Ð¸Ñ\82и Ñ\83везено Ñ\83 Ð´Ñ\80Ñ\83ги Ð²Ð¸ÐºÐ¸ ÐºÐ¾Ñ\98и ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð\9cедиÑ\98авики Ñ\81оÑ\84Ñ\82веÑ\80 Ð¿Ñ\80еко [[Special:Import|Ñ\81Ñ\82Ñ\80аниÑ\86е Ð·Ð° Ñ\83воз]].\n\nÐ\94а Ð±Ð¸Ñ\81Ñ\82е Ð¸Ð·Ð²ÐµÐ·Ð»Ð¸ Ñ\81Ñ\82Ñ\80аниÑ\86е, Ñ\83неÑ\81иÑ\82е Ð½Ð°Ð·Ð¸Ð²Ðµ Ñ\83 Ð¾ÐºÐ²Ð¸Ñ\80Ñ\83 Ð¸Ñ\81под, Ñ\81 Ñ\98едним Ð½Ð°Ñ\81ловом Ð¿Ð¾ Ñ\80едÑ\83, Ð¸ Ð¸Ð·Ð°Ð±ÐµÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ð¶ÐµÐ»Ð¸Ñ\82е Ñ\82екÑ\83Ñ\9bÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð¸ Ñ\81ве Ð¾Ñ\81Ñ\82але, Ð¸Ð»Ð¸ Ñ\81амо Ñ\82екÑ\83Ñ\9bу измену с подацима о последњој измени.\n\nУ другом случају, можете користити и везу, на пример [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] за страницу [[{{MediaWiki:Mainpage}}]].",
+       "exporttext": "Ð\9cожеÑ\82е Ð´Ð° Ð¸Ð·Ð²ÐµÐ·ÐµÑ\82е Ñ\82екÑ\81Ñ\82 Ð¸ Ð¸Ñ\81Ñ\82оÑ\80иÑ\98Ñ\83 Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¾Ð´Ñ\80еÑ\92ене Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¸Ð»Ð¸ Ñ\81кÑ\83па Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\83клÑ\99ениÑ\85 Ñ\83 XML Ñ\84оÑ\80маÑ\82Ñ\83.\nÐ\9eво Ð¾Ð½Ð´Ð° Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð±Ñ\83де Ñ\83везено Ñ\83 Ð´Ñ\80Ñ\83ги Ð²Ð¸ÐºÐ¸ ÐºÐ¾Ñ\98и ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð\9cедиÑ\98авики Ñ\81оÑ\84Ñ\82веÑ\80 Ð¿Ñ\80еко [[Special:Import|Ñ\81Ñ\82Ñ\80аниÑ\86е Ð·Ð° Ñ\83воз]].\n\nÐ\94а Ð±Ð¸Ñ\81Ñ\82е Ð¸Ð·Ð²ÐµÐ·Ð»Ð¸ Ñ\81Ñ\82Ñ\80аниÑ\86е, Ñ\83неÑ\81иÑ\82е Ð½Ð°Ð·Ð¸Ð²Ðµ Ñ\83 Ð¾ÐºÐ²Ð¸Ñ\80Ñ\83 Ð¸Ñ\81под, Ñ\81 Ñ\98едним Ð½Ð°Ñ\81ловом Ð¿Ð¾ Ñ\80едÑ\83, Ð¸ Ð¸Ð·Ð°Ð±ÐµÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ð¶ÐµÐ»Ð¸Ñ\82е Ñ\82Ñ\80енÑ\83Ñ\82нÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð¸ Ñ\81ве Ð¾Ñ\81Ñ\82але, Ð¸Ð»Ð¸ Ñ\81амо Ñ\82Ñ\80енÑ\83Ñ\82ну измену с подацима о последњој измени.\n\nУ другом случају, можете користити и везу, на пример [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] за страницу [[{{MediaWiki:Mainpage}}]].",
        "exportall": "Извези све странице",
        "exportcuronly": "Укључи само текућу измену, не целу историју",
        "exportnohistory": "----\n'''Напомена:''' извоз пуне историје страница преко овог обрасца је онемогућено из техничких разлога.",
        "filemissing": "Недостаје датотека",
        "thumbnail_error": "Грешка при стварању минијатуре: $1",
        "thumbnail_error_remote": "Порука о грешци из $1:\n$2",
-       "djvu_page_error": "DjVu Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пна",
+       "djvu_page_error": "DjVu Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð²Ð°Ð½ Ð¾Ð¿Ñ\81ега",
        "djvu_no_xml": "Не могу да преузмем XML за DjVu датотеку.",
        "thumbnail-temp-create": "Не могу да направим привремену датотеку минијатуре",
        "thumbnail-dest-create": "Не могу да сачувам минијатуру у одредишту",
        "thumbnail_image-failure-limit": "Било је превише скорашњих неуспешних покушаја ($1 или више) рендеровања ове минијатуре. Покушајте поново касније.",
        "import": "Увоз страница",
        "importinterwiki": "Увоз са другог викија",
-       "import-interwiki-text": "Изаберите вики и наслов странице за увоз.\nДатуми и имена уредника ће бити сачувани.\nСве радње при увозу с других викија су забележене у [[Special:Log/import|дневнику увоза]].",
+       "import-interwiki-text": "Изаберите вики и наслов странице за увоз.\nДатуми измена и имена уредника ће бити сачувани.\nСве радње при увозу с других викија су евидентиране у [[Special:Log/import|евиденцији увоза]].",
        "import-interwiki-sourcewiki": "Изворна вики:",
        "import-interwiki-sourcepage": "Изворна страница:",
        "import-interwiki-history": "Копирај све верзије историје за ову страницу",
        "importnopages": "Нема страница за увоз.",
        "imported-log-entries": "{{PLURAL:$1|Увезена је $1 ставка извештаја|Увезене су $1 ставке извештаја|Увезено је $1 ставки извештаја}}.",
        "importfailed": "Неуспешан увоз: <nowiki>$1</nowiki>",
-       "importunknownsource": "Непозната врста за увоз",
+       "importunknownsource": "Непознат изворни тип увоза",
        "importnoprefix": "Није наведен међувики префикс",
        "importcantopen": "Не могу да отворим датотеку за увоз.",
        "importbadinterwiki": "Неисправна међувики веза",
        "import-options-wrong": "{{PLURAL:$2|Погрешна опција|Погрешне опције}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Наведена основна страница има неисправан наслов.",
        "import-rootpage-nosubpage": "Именски простор „$1“ основне странице не дозвољава подстранице.",
-       "importlogpage": "Ð\94невник увоза",
+       "importlogpage": "Ð\95виденÑ\86иÑ\98а увоза",
        "importlogpagetext": "Административни увози страница с историјама измена с других викија.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|измена увезена|измене увезене|измена увезено}}",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|измена увезена|измене увезене|измена увезено}} из $2",
-       "javascripttest": "Ð\88аваÑ\81кÑ\80ипÑ\82 Ñ\82еÑ\81Ñ\82",
+       "javascripttest": "ТеÑ\81Ñ\82иÑ\80аÑ\9aе Ñ\98аваÑ\81кÑ\82ипÑ\82а",
        "javascripttest-pagetext-unknownaction": "Непозната радња „$1“.",
        "javascripttest-qunit-intro": "Погледајте [$1 документацију за тестирање] на mediawiki.org.",
        "tooltip-pt-userpage": "{{GENDER:|Ваша}} корисничка страница",
-       "tooltip-pt-anonuserpage": "Корисничка страница за ИП адресу с које уређујете",
+       "tooltip-pt-anonuserpage": "Корисничка страница за IP адресу с које уређујете",
        "tooltip-pt-mytalk": "{{GENDER:|Ваша}} страница за разговор",
        "tooltip-pt-anontalk": "Разговор о изменама са ове IP адресе",
        "tooltip-pt-preferences": "{{GENDER:|Ваша}} подешавања",
        "tooltip-n-help": "Место где можете да научите нешто",
        "tooltip-t-whatlinkshere": "Списак свих вики страница које воде овде",
        "tooltip-t-recentchangeslinked": "Скорашње измене на страницама које су повезане са овом страницом",
-       "tooltip-feed-rss": "RSS довод ове странице",
-       "tooltip-feed-atom": "Атом довод ове странице",
+       "tooltip-feed-rss": "RSS фид за ову страницу",
+       "tooltip-feed-atom": "Atom фид за ову страницу",
        "tooltip-t-contributions": "Списак доприноса {{GENDER:$1|овог корисника|ове кориснице|овог корисника}}",
        "tooltip-t-emailuser": "Пошаљите имејл {{GENDER:$1|овом кориснику|овој корисници}}",
        "tooltip-t-info": "Више информација о овој страници",
        "spam_reverting": "Враћам на последњу измену која не садржи везе до $1",
        "spam_blanking": "Све измене садрже везе до $1. Чистим",
        "spam_deleting": "Све измене садрже везе до $1. Бришем",
-       "simpleantispam-label": "Ð\90нÑ\82и-Ñ\81пам Ð¿Ñ\80овеÑ\80а. \n<strong>Ð\9dе</strong> Ð¿Ð¾Ð¿Ñ\83Ñ\9aаваÑ\98 Ð¾Ð²Ð¾ Ñ\83нÑ\83Ñ\82Ñ\80а!",
+       "simpleantispam-label": "Ð\9fÑ\80овеÑ\80а Ð¿Ñ\80оÑ\82ив Ð½ÐµÐ¶ÐµÑ\99еног Ñ\81адÑ\80жаÑ\98а. \n<strong>Ð\9dе</strong> Ð¿Ð¾Ð¿Ñ\83Ñ\9aаваÑ\98Ñ\82е Ð¾Ð²Ð¾!",
        "pageinfo-title": "Информације за „$1“",
        "pageinfo-not-current": "Нажалост, немогуће је прибавити ове податке за старије измене.",
        "pageinfo-header-basic": "Основне информације",
        "markedaspatrollederror-noautopatrol": "Не можете да означите своје измене као патролиране.",
        "markedaspatrollednotify": "Ова измена на страници „$1” означена је као патролирана.",
        "markedaspatrollederrornotify": "Означавање ове измене патролираном није успело.",
-       "patrol-log-page": "Ð\94невник патролирања",
-       "patrol-log-header": "Ð\9eво Ñ\98е Ð´Ð½ÐµÐ²Ð½Ð¸Ðº патролираних измена.",
+       "patrol-log-page": "Ð\95виденÑ\86иÑ\98а патролирања",
+       "patrol-log-header": "Ð\9eво Ñ\98е ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98а патролираних измена.",
        "confirm-markpatrolled-button": "У реду",
        "confirm-markpatrolled-top": "Означити измену $3 странице $2 патролираном?",
        "deletedrevision": "Обрисана стара измена $1.",
        "filedelete-archive-read-only": "Сервер не може да пише по складишној фасцикли ($1).",
        "previousdiff": "← Старија измена",
        "nextdiff": "Новија измена →",
-       "mediawarning": "<strong>Упозорење:</strong> ова врста датотеке може садржати штетан код.\nАко га покренете, Ваш рачунар може бити угрожен.",
+       "mediawarning": "<strong>Упозорење:</strong> овај тип датотеке може да садржи штетан код.\nЊеговим извршавањем можете да угрозите ваш систем.",
        "imagemaxsize": "Ограничење величине слике:<br /><em>(на страницама за опис датотека)</em>",
        "thumbsize": "Величина минијатуре:",
        "widthheight": "$1 × $2",
        "svg-long-desc": "SVG датотека, номинално $1 × $2 пиксела, величина: $3",
        "svg-long-desc-animated": "Анимирана SVG датотека, номинално: $1 × $2 пиксела, величина: $3",
        "svg-long-error": "Неисправна SVG датотека: $1",
-       "show-big-image": "Ð\98звоÑ\80на датотека",
+       "show-big-image": "Ð\9fÑ\80вобиÑ\82на датотека",
        "show-big-image-preview": "Величина овог приказа: $1.",
        "show-big-image-preview-differ": "Величина $3 прегледа за ову $2 датотеку је $1.",
        "show-big-image-other": "$2 {{PLURAL:$2|друга резолуција|друге резолуције|других резолуција}}: $1.",
        "newimages-legend": "Филтер",
        "newimages-label": "Назив датотеке (или њен део):",
        "newimages-user": "IP адреса или корисничко име",
-       "newimages-newbies": "Ð\9fÑ\80икажи Ñ\81амо Ð´Ð¾Ð¿Ñ\80иноÑ\81е Ð½Ð¾Ð²Ð¸Ñ\85 ÐºÐ¾Ñ\80иÑ\81ника",
+       "newimages-newbies": "Ð\9fÑ\80икажи Ñ\81амо Ð´Ð¾Ð¿Ñ\80иноÑ\81е Ð½Ð¾Ð²Ð¸Ñ\85 Ð½Ð°Ð»Ð¾Ð³а",
        "newimages-showbots": "Прикажи датотеке које су послали ботови",
        "newimages-hidepatrolled": "Сакриј патролирана отпремања",
-       "newimages-mediatype": "Ð\92Ñ\80Ñ\81Ñ\82а датотеке:",
+       "newimages-mediatype": "Тип датотеке:",
        "noimages": "Нема ништа.",
        "gallery-slideshow-toggle": "минијатуре",
        "ilsubmit": "Претражи",
        "exif-focalplaneresolutionunit": "Јединица за резолуцију фокусне равни",
        "exif-subjectlocation": "Положај објекта",
        "exif-exposureindex": "Попис експозиције",
-       "exif-sensingmethod": "Ð\92Ñ\80Ñ\81Ñ\82а сензора",
+       "exif-sensingmethod": "Ð\9dаÑ\87ин сензора",
        "exif-filesource": "Изворна датотека",
-       "exif-scenetype": "Ð\92Ñ\80Ñ\81Ñ\82а сцене",
+       "exif-scenetype": "Тип сцене",
        "exif-customrendered": "Прилагођена обрада слика",
        "exif-exposuremode": "Режим експозиције",
        "exif-whitebalance": "Бела равнотежа",
        "exif-digitalzoomratio": "Однос дигиталног увеличања",
        "exif-focallengthin35mmfilm": "Жаришна даљина за филм од 35 мм",
-       "exif-scenecapturetype": "Ð\92Ñ\80Ñ\81Ñ\82а снимања сцена",
+       "exif-scenecapturetype": "Тип снимања сцена",
        "exif-gaincontrol": "Контрола сцене",
        "exif-contrast": "Контраст",
        "exif-saturation": "Засићеност",
        "exif-iimsupplementalcategory": "Допунске категорије",
        "exif-datetimeexpires": "Не користи након",
        "exif-datetimereleased": "Објављено",
-       "exif-originaltransmissionref": "Ð\98звоÑ\80ни Ð¿Ñ\80еноÑ\81 ÐºÐ¾Ð´Ð° Ð»Ð¾ÐºÐ°Ñ\86иÑ\98е",
+       "exif-originaltransmissionref": "Ð\9fÑ\80вобиÑ\82ни ÐºÐ¾Ð´ Ð»Ð¾ÐºÐ°Ñ\86иÑ\98е Ð¿Ñ\80еноÑ\81а",
        "exif-identifier": "Назнака",
        "exif-lens": "Коришћени објектив",
        "exif-serialnumber": "Серијски број камере",
        "exif-disclaimer": "Одрицање одговорности",
        "exif-contentwarning": "Упозорење о садржају",
        "exif-giffilecomment": "Коментар на датотеку GIF",
-       "exif-intellectualgenre": "Ð\92Ñ\80Ñ\81Ñ\82а ставке",
+       "exif-intellectualgenre": "Тип ставке",
        "exif-subjectnewscode": "Код предмета",
        "exif-scenecode": "IPTC код сцене",
        "exif-event": "Приказани догађај",
        "namespacesall": "сви",
        "monthsall": "све",
        "confirmemail": "Потврда имејл адресе",
-       "confirmemail_noemail": "Ð\9dиÑ\81Ñ\82е Ñ\83нели Ð¸Ñ\81пÑ\80авну имејл адресу у [[Special:Preferences|подешавањима]].",
-       "confirmemail_text": "{{SITENAME}} Ð·Ð°Ñ\85Ñ\82ева Ð´Ð° Ð¿Ð¾Ñ\82вÑ\80диÑ\82е Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð¿Ñ\80е Ð½ÐµÐ³Ð¾ Ñ\88Ñ\82о Ð¿Ð¾Ñ\87неÑ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82и Ð¸Ð¼ÐµÑ\98ла.\nÐ\9aликниÑ\82е Ð½Ð° Ð´Ñ\83гме Ð¸Ñ\81под Ð·Ð° Ñ\81лаÑ\9aе Ð¿Ð¾Ñ\80Ñ\83ке Ð½Ð° Ð²Ð°Ñ\88Ñ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83.\nУ Ð¿Ð¾Ñ\80Ñ\83Ñ\86и Ñ\9bе Ñ\81е Ð½Ð°Ð»Ð°Ð·Ð¸Ñ\82и Ð²ÐµÐ·Ð° Ñ\81 Ð¿Ð¾Ñ\82вÑ\80дним ÐºÐ¾Ð´Ð¾Ð¼;\nÑ\83неÑ\81иÑ\82е Ñ\98е Ñ\83 Ð¿Ñ\80егледаÑ\87 Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ð´Ð° Ñ\98е Ð²Ð°Ñ\88а Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81а Ð¸Ñ\81пÑ\80авна.",
+       "confirmemail_noemail": "Ð\9dиÑ\81Ñ\82е Ñ\83нели Ð²Ð°Ð»Ð¸Ð´ну имејл адресу у [[Special:Preferences|подешавањима]].",
+       "confirmemail_text": "{{SITENAME}} Ð·Ð°Ñ\85Ñ\82ева Ð´Ð° Ð¿Ð¾Ñ\82вÑ\80диÑ\82е Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð¿Ñ\80е Ð½ÐµÐ³Ð¾ Ñ\88Ñ\82о Ð¿Ð¾Ñ\87неÑ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82и Ð¸Ð¼ÐµÑ\98ла.\nÐ\9aликниÑ\82е Ð½Ð° Ð´Ñ\83гме Ð¸Ñ\81под Ð·Ð° Ñ\81лаÑ\9aе Ð¿Ð¾Ñ\80Ñ\83ке Ð½Ð° Ð²Ð°Ñ\88Ñ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83.\nУ Ð¿Ð¾Ñ\80Ñ\83Ñ\86и Ñ\9bе Ñ\81е Ð½Ð°Ð»Ð°Ð·Ð¸Ñ\82и Ð²ÐµÐ·Ð° Ñ\81 Ð¿Ð¾Ñ\82вÑ\80дним ÐºÐ¾Ð´Ð¾Ð¼;\nÑ\83неÑ\81иÑ\82е Ñ\98е Ñ\83 Ð¿Ñ\80егледаÑ\87 Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ð´Ð° Ñ\98е Ð²Ð°Ñ\88а Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81а Ð²Ð°Ð¶ÐµÑ\9bа.",
        "confirmemail_pending": "Потврдни код вам је већ послат. Ако сте управо отворили налог, онда вероватно треба да сачекате неколико минута да пристигне, пре него што поново затражите нови код.",
        "confirmemail_send": "Пошаљи потврдни код",
        "confirmemail_sent": "Потврдна порука је послата.",
        "confirmemail_success": "Ваша имејл адреса је потврђена.\nСада можете да се [[Special:UserLogin|пријавите]] и уживате у викију.",
        "confirmemail_loggedin": "Ваша имејл адреса је сада потврђена.",
        "confirmemail_subject": "{{SITENAME}} – потврда имејл адресе",
-       "confirmemail_body": "Ð\9dеко, Ð²ÐµÑ\80оваÑ\82но Ð²Ð¸, Ñ\81а Ð\98Ð\9f Ð°Ð´Ñ\80еÑ\81е $1,\nоÑ\82воÑ\80ио Ñ\98е Ð½Ð°Ð»Ð¾Ð³ â\80\9e$2â\80\9c Ñ\81а Ð¾Ð²Ð¾Ð¼ Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81ом Ð½Ð° Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83 {{SITENAME}}.\n\nÐ\94а Ð¿Ð¾Ñ\82вÑ\80диÑ\82е Ð´Ð° Ð¾Ð²Ð°Ñ\98 Ð½Ð°Ð»Ð¾Ð³ Ñ\81Ñ\82ваÑ\80но Ð¿Ñ\80ипада Ð²Ð°Ð¼Ð° Ð¸ Ð´Ð° Ð°ÐºÑ\82ивиÑ\80аÑ\82е\nмогÑ\83Ñ\9bноÑ\81Ñ\82и Ð¸Ð¼ÐµÑ\98ла Ð½Ð° Ð²Ð¸ÐºÐ¸Ñ\98у {{SITENAME}}, отворите ову везу у прегледачу:\n\n$3\n\nУколико налог *не* припада вама, пратите везу\nда откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче у $4.",
-       "confirmemail_body_changed": "Ð\9dеко, Ð²ÐµÑ\80оваÑ\82но Ð²Ð¸, Ñ\81а Ð\98Ð\9f Ð°Ð´Ñ\80еÑ\81е $1,\nпÑ\80оменио Ñ\98е Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð½Ð°Ð»Ð¾Ð³Ð° â\80\9e$2â\80\9c Ñ\83 Ð¾Ð²Ñ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð½Ð° Ð²Ð¸ÐºÐ¸Ñ\98у {{SITENAME}}.\n\nДа бисте потврдили да овај налог стварно припада вама и поново активирали могућности имејла, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $6 у $7",
-       "confirmemail_body_set": "Ð\9dеко, Ð²ÐµÑ\80оваÑ\82но Ð²Ð¸, Ñ\81а Ð\98Ð\9f адресе $1,\nпроменио је имејл адресу налога „$2“ у ову адресу на {{SITENAME}}.\n\nДа бисмо потврдили да овај налог стварно припада вама и поново активирали\nмогућности имејла на {{SITENAME}}, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $4.",
+       "confirmemail_body": "Ð\9dеко, Ð²ÐµÑ\80оваÑ\82но Ð\92и, Ñ\81 IP Ð°Ð´Ñ\80еÑ\81е $1,\nоÑ\82воÑ\80ио Ñ\98е Ð½Ð°Ð»Ð¾Ð³ â\80\9e$2â\80\9c Ñ\81 Ð¾Ð²Ð¾Ð¼ Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81ом Ð½Ð° Ð¿Ñ\80оÑ\98екÑ\82Ñ\83 {{SITENAME}}.\n\nÐ\94а Ð¿Ð¾Ñ\82вÑ\80диÑ\82е Ð´Ð° Ð¾Ð²Ð°Ñ\98 Ð½Ð°Ð»Ð¾Ð³ Ñ\81Ñ\82ваÑ\80но Ð¿Ñ\80ипада Ð²Ð°Ð¼Ð° Ð¸ Ð´Ð° Ð°ÐºÑ\82ивиÑ\80аÑ\82е\nмогÑ\83Ñ\9bноÑ\81Ñ\82и Ð¸Ð¼ÐµÑ\98ла Ð½Ð° Ð¿Ñ\80оÑ\98екÑ\82у {{SITENAME}}, отворите ову везу у прегледачу:\n\n$3\n\nУколико налог *не* припада вама, пратите везу\nда откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче у $4.",
+       "confirmemail_body_changed": "Ð\9dеко, Ð²ÐµÑ\80оваÑ\82но Ð\92и, Ñ\81 IP Ð°Ð´Ñ\80еÑ\81е $1,\nпÑ\80оменио Ñ\98е Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð½Ð°Ð»Ð¾Ð³Ð° â\80\9e$2â\80\9c Ñ\83 Ð¾Ð²Ñ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð½Ð° Ð¿Ñ\80оÑ\98екÑ\82у {{SITENAME}}.\n\nДа бисте потврдили да овај налог стварно припада вама и поново активирали могућности имејла, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $6 у $7",
+       "confirmemail_body_set": "Ð\9dеко, Ð²ÐµÑ\80оваÑ\82но Ð\92и, Ñ\81 IP адресе $1,\nпроменио је имејл адресу налога „$2“ у ову адресу на {{SITENAME}}.\n\nДа бисмо потврдили да овај налог стварно припада вама и поново активирали\nмогућности имејла на {{SITENAME}}, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $4.",
        "confirmemail_invalidated": "Потврда имејл адресе је отказана",
        "invalidateemail": "Отказивање потврде имејла",
        "notificationemail_body_changed": "Неко, вероватно Ви је променио имејл адресу налога из $2“ у „$3“ са IP адресе $1 на сајту {{SITENAME}}.\n\nАко ово нисте били Ви, одмах обавестите администраторе сајта.",
-       "notificationemail_body_removed": "Неко, вероватно Ви са ИП адресе $1 је уклонио имејл адресу за налог „$2“ на {{SITENAME}}.\n\n\nАко ово нисте били Ви, одмах обавестите администраторе сајта.",
+       "notificationemail_body_removed": "Неко, вероватно Ви, с IP адресе $1, \nуклонио је имејл адресу за налог „$2“ на {{SITENAME}}.\n\nАко ово нисте били Ви, контактирајте администраторе сајта одмах.",
        "scarytranscludedisabled": "[Међувики укључивање шаблона је онемогућено]",
        "scarytranscludefailed": "[Добављање шаблона за $1 није успело]",
        "scarytranscludefailed-httpstatus": "[Не могу да преузмем шаблон $1: HTTP $2]",
        "unit-pixel": "п",
        "confirm-purge-title": "Освежи ову страницу",
        "confirm_purge_button": "У реду",
-       "confirm-purge-top": "Ð\9eÑ\87иÑ\81Ñ\82иÑ\82и Ð¿Ñ\80ивÑ\80еменÑ\83 Ð¼ÐµÐ¼Ð¾Ñ\80иÑ\98Ñ\83 ове странице?",
-       "confirm-purge-bottom": "Ова радња чисти привремену меморију и приказује најновију измену.",
+       "confirm-purge-top": "Ð\9eÑ\87иÑ\81Ñ\82иÑ\82и ÐºÐµÑ\88 ове странице?",
+       "confirm-purge-bottom": "Освежавање странице чисти кеш и намеће најновију измену.",
        "confirm-watch-button": "У реду",
        "confirm-watch-top": "Додати ову страницу у списак надгледања?",
        "confirm-unwatch-button": "У реду",
        "watchlistedit-normal-explain": "Наслови на вашем списку надгледања су приказани испод.\nДа бисте уклонили наслов, означите квадратић до њега и кликните на „{{int:Watchlistedit-normal-submit}}“.\nМожете и да [[Special:EditWatchlist/raw|уредите сиров списак]].",
        "watchlistedit-normal-submit": "Уклони наслове",
        "watchlistedit-normal-done": "{{PLURAL:$1|1=Једна страница је уклоњена|$1 странице су уклоњене|$1 страница је уклоњено}} с вашег списка надгледања:",
-       "watchlistedit-raw-title": "Ð\98змени сиров списак надгледања",
-       "watchlistedit-raw-legend": "Ð\98змени сиров списак надгледања",
+       "watchlistedit-raw-title": "УÑ\80еди сиров списак надгледања",
+       "watchlistedit-raw-legend": "УÑ\80еди сиров списак надгледања",
        "watchlistedit-raw-explain": "Наслови са списка надгледања су приказани испод и могу се уређивати додавањем или уклањањем ставки са списка;\nједан наслов по реду.\nКада завршите, кликните на „{{int:Watchlistedit-raw-submit}}“.\nМожете да [[Special:EditWatchlist|користите и обичан уређивач]].",
        "watchlistedit-raw-titles": "Наслови:",
        "watchlistedit-raw-submit": "Ажурирај списак",
        "watchlistedit-raw-done": "Ваш списак надгледања је ажуриран.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1=Додат је један наслов|Додата су $1 наслова|Додато је $1 наслова}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 наслов је уклоњен|Уклоњена су $1 наслова|Уклоњено је $1 наслова}}:",
-       "watchlistedit-clear-title": "Ð\9fÑ\80ажÑ\9aење списка надгледања",
-       "watchlistedit-clear-legend": "Ð\98Ñ\81пÑ\80азни Ñ\81пиÑ\81ак надгледања",
+       "watchlistedit-clear-title": "ЧиÑ\88Ñ\9bење списка надгледања",
+       "watchlistedit-clear-legend": "ЧиÑ\88Ñ\9bеÑ\9aе Ñ\81пиÑ\81ка надгледања",
        "watchlistedit-clear-explain": "Сви наслови ће бити уклоњени из вашег списка надгледања.",
        "watchlistedit-clear-titles": "Наслови:",
-       "watchlistedit-clear-submit": "Ð\98Ñ\81пÑ\80азни списак надгледања (Ово је неповратно!)",
+       "watchlistedit-clear-submit": "Ð\9eÑ\87иÑ\81Ñ\82и списак надгледања (Ово је неповратно!)",
        "watchlistedit-clear-done": "Ваш списак надгледања је испражњен.",
        "watchlistedit-clear-removed": "{{PLURAL:$1|1 наслов је уклоњен|$1 наслова су уклоњена|$1 наслова је уклоњено}}:",
        "watchlistedit-too-many": "Има превише страница за приказ овде.",
-       "watchlisttools-clear": "иÑ\81пÑ\80азни списак надгледања",
+       "watchlisttools-clear": "оÑ\87иÑ\81Ñ\82и списак надгледања",
        "watchlisttools-view": "прикажи сродне измене",
        "watchlisttools-edit": "прикажи и уреди списак надгледања",
-       "watchlisttools-raw": "измени сиров списак надгледања",
+       "watchlisttools-raw": "уреди сиров списак надгледања",
        "iranian-calendar-m1": "Фарвардин",
        "iranian-calendar-m2": "Ордибехешт",
        "iranian-calendar-m3": "Хордад",
        "redirect-page": "ID странице",
        "redirect-revision": "Измена странице",
        "redirect-file": "Назив датотеке",
-       "redirect-logid": "ID Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÐ°",
+       "redirect-logid": "ID ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98е",
        "redirect-not-exists": "Вредност није пронађена",
        "fileduplicatesearch": "Претражи дупликате",
        "fileduplicatesearch-summary": "Претрага дуплираних датотека према хеш вредности.",
        "specialpages-group-maintenance": "Извештаји одржавања",
        "specialpages-group-other": "Остале посебне странице",
        "specialpages-group-login": "Пријава / регистрација",
-       "specialpages-group-changes": "СкоÑ\80аÑ\88Ñ\9aе Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð¸ Ð´Ð½ÐµÐ²Ð½Ð¸Ñ\86и",
+       "specialpages-group-changes": "СкоÑ\80аÑ\88Ñ\9aе Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð¸ ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98е",
        "specialpages-group-media": "Извештаји о мултимедијалном садржају и отпремања",
        "specialpages-group-users": "Корисници и корисничка права",
        "specialpages-group-highuse": "Најчешће коришћене странице",
        "tags-deactivate-reason": "Разлог:",
        "tags-deactivate-not-allowed": "Није могуће деактивирати ознаку „$1“.",
        "tags-deactivate-submit": "Декативирај",
-       "tags-update-no-permission": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð·Ð° Ð´Ð¾Ð´Ð°Ð²Ð°Ñ\9aе Ð¸Ð»Ð¸ Ñ\83клаÑ\9aаÑ\9aе Ð¾Ð·Ð½Ð°ÐºÐµ Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¸Ð· Ð·Ð°Ñ\81ебниÑ\85 Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¸Ð»Ð¸ Ñ\83ноÑ\81а Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83.",
+       "tags-update-no-permission": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ð´Ð¾Ð´Ð°Ñ\82е Ð¸Ð»Ð¸ Ñ\83клониÑ\82е Ð¾Ð·Ð½Ð°ÐºÐµ Ð¿Ñ\80омена Ð¸Ð· Ð¿Ð¾Ñ\98единаÑ\87ниÑ\85 Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¸Ð»Ð¸ Ñ\83ноÑ\81а Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и.",
        "tags-update-blocked": "Не можете додавати нити уклањати ознаке измена док {{GENDER:$1|сте}} блокирани.",
        "tags-update-add-not-allowed-one": "Није дозвољено да се ознака „$1” додаје ручно.",
        "tags-edit-title": "Уреди ознаке",
        "compare-title-not-exists": "Наведени наслов не постоји.",
        "compare-revision-not-exists": "Наведена измена не постоји.",
        "diff-form": "Разлике",
-       "diff-form-oldid": "ID Ñ\81Ñ\82аÑ\80е Ð¸Ð·Ð¼ÐµÐ½Ðµ (необавезно)",
+       "diff-form-oldid": "ID Ñ\81Ñ\82аÑ\80е Ð¸Ð·Ð¼ÐµÐ½Ðµ (опÑ\86ионално)",
        "diff-form-revid": "ID измене или разлике",
        "diff-form-submit": "Прикажи разлике",
        "permanentlink": "Трајна веза",
        "dberr-outofdate": "Имајте на уму да њихови примерци нашег садржаја могу бити застарели.",
        "dberr-cachederror": "Ово је привремено меморисан примерак стране који можда није ажуран.",
        "htmlform-invalid-input": "Пронађени су проблеми у вашем уносу",
-       "htmlform-select-badoption": "Ð\9dаведена Ð²Ñ\80едноÑ\81Ñ\82 Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авна опција.",
+       "htmlform-select-badoption": "Ð\92Ñ\80едноÑ\81Ñ\82 ÐºÐ¾Ñ\98Ñ\83 Ñ\81Ñ\82е Ð½Ð°Ð²ÐµÐ»Ð¸ Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´на опција.",
        "htmlform-int-invalid": "Наведена вредност није цели број.",
        "htmlform-float-invalid": "Наведена вредност није број.",
        "htmlform-int-toolow": "Наведена вредност је испод минимума од $1",
        "htmlform-date-placeholder": "ГГГГ-ММ-ДД",
        "htmlform-time-placeholder": "ЧЧ:ММ:СС",
        "htmlform-datetime-placeholder": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",
+       "htmlform-date-invalid": "Вредност коју сте навели није препознати датум. Покушајте да користите формат ГГГГ-ММ-ДД.",
+       "htmlform-time-invalid": "Вредност коју сте навели није препознато време. Покушајте да користите формат ЧЧ:ММ:СС.",
+       "htmlform-datetime-invalid": "Вредност коју сте навели није препознати датум и време. Покушајте да користите формат ГГГГ-ММ-ДД ЧЧ:ММ:СС.",
+       "htmlform-date-toolow": "Вредност коју сте навели је пре најранијег дозвољеног датума – $1.",
+       "htmlform-date-toohigh": "Вредност коју сте навели је после крајњег дозвољеног датума – $1.",
+       "htmlform-time-toolow": "Вредност коју сте навели је пре најранијег дозвољеног времена – $1.",
        "htmlform-title-badnamespace": "[[:$1]] није у именском простору „{{ns:$2}}“.",
        "htmlform-title-not-creatable": "Страница „$1“ се не може направити",
        "htmlform-title-not-exists": "$1 не постоји.",
        "htmlform-user-not-exists": "<strong>$1</strong> не постоји.",
-       "htmlform-user-not-valid": "<strong>$1</strong> Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авно корисничко име.",
+       "htmlform-user-not-valid": "<strong>$1</strong> Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´но корисничко име.",
        "logentry-delete-delete": "$1 је {{GENDER:$2|обрисао|обрисала}} страницу $3",
        "logentry-delete-delete_redir": "$1 је {{GENDER:$2|обрисао|обрисала}} преусмерење $3 преписивањем",
        "logentry-delete-restore": "$1 је {{GENDER:$2|вратио|вратила}} страницу $3 ($4)",
        "logentry-delete-restore-nocount": "$1 је {{GENDER:$2|вратио|вратила}} страницу $3",
        "restore-count-revisions": "{{PLURAL:$1|1 измена|$1 измене|$1 измена}}",
        "restore-count-files": "{{PLURAL:$1|1 датотека|$1 датотеке|$1 датотека}}",
-       "logentry-delete-event": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|1=догађаја|$5 догађаја}} у дневнику $3: $4",
+       "logentry-delete-event": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|догађаја|$5 догађаја}} у евиденцији на страници „$3”: $4",
        "logentry-delete-revision": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|1=једне измене|$5 измене|$5 измена}} на страници $3: $4",
-       "logentry-delete-event-legacy": "$1 Ñ\98е {{GENDER:$2|пÑ\80оменио|пÑ\80оменила}} Ð²Ð¸Ð´Ñ\99ивоÑ\81Ñ\82 Ð´Ð¾Ð³Ð°Ñ\92аÑ\98а Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 $3",
+       "logentry-delete-event-legacy": "$1 Ñ\98е {{GENDER:$2|пÑ\80оменио|пÑ\80оменила}} Ð²Ð¸Ð´Ñ\99ивоÑ\81Ñ\82 Ð´Ð¾Ð³Ð°Ñ\92аÑ\98а Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и â\80\9e$3â\80\9d",
        "logentry-delete-revision-legacy": "$1 је {{GENDER:$2|променио|променила}} видљивост измена на страници $3",
        "logentry-suppress-delete": "$1 је {{GENDER:$2|потиснуо|потиснула}} страницу $3",
-       "logentry-suppress-event": "$1 Ñ\98е Ñ\82аÑ\98но {{GENDER:$2|пÑ\80оменио|пÑ\80оменила}} Ð²Ð¸Ð´Ñ\99ивоÑ\81Ñ\82 {{PLURAL:$5|догаÑ\92аÑ\98а|$5 Ð´Ð¾Ð³Ð°Ñ\92аÑ\98а}} Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 $3: $4",
+       "logentry-suppress-event": "$1 Ñ\98е Ñ\82аÑ\98но {{GENDER:$2|пÑ\80оменио|пÑ\80оменила}} Ð²Ð¸Ð´Ñ\99ивоÑ\81Ñ\82 {{PLURAL:$5|догаÑ\92аÑ\98а|$5 Ð´Ð¾Ð³Ð°Ñ\92аÑ\98а}} Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и â\80\9e$3â\80\9d: $4",
        "logentry-suppress-revision": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|измене|$5 измена}} на страници $3: $4",
-       "logentry-suppress-event-legacy": "$1 Ñ\98е Ð¿Ð¾Ñ\82аÑ\98но {{GENDER:$2|пÑ\80оменио|пÑ\80оменила}} Ð²Ð¸Ð´Ñ\99ивоÑ\81Ñ\82 Ð´Ð¾Ð³Ð°Ñ\92аÑ\98а Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83 $3",
+       "logentry-suppress-event-legacy": "$1 Ñ\98е Ð¿Ð¾Ñ\82аÑ\98но {{GENDER:$2|пÑ\80оменио|пÑ\80оменила}} Ð²Ð¸Ð´Ñ\99ивоÑ\81Ñ\82 Ð´Ð¾Ð³Ð°Ñ\92аÑ\98а Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и â\80\9e$3â\80\9d",
        "logentry-suppress-revision-legacy": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост измена на страници $3",
        "revdelete-content-hid": "садржај је сакривен",
        "revdelete-summary-hid": "опис измене је сакривен",
        "logentry-newusers-newusers": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог",
        "logentry-newusers-create": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог",
        "logentry-newusers-create2": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог $3",
-       "logentry-newusers-byemail": "$1 Ñ\98е {{GENDER:$2|напÑ\80авио|напÑ\80авила}} кориснички налог $3 и лозинка је послата на имејл",
+       "logentry-newusers-byemail": "$1 Ñ\98е {{GENDER:$2|оÑ\82воÑ\80ио|оÑ\82воÑ\80ила}} кориснички налог $3 и лозинка је послата на имејл",
        "logentry-newusers-autocreate": "Кориснички налог $1 је аутоматски {{GENDER:$2|отворен}}",
        "logentry-protect-move_prot": "$1 је {{GENDER:$2|преместио|преместила}} подешавања заштите са $4 на $3",
        "logentry-protect-unprotect": "$1 je {{GENDER:$2|скинуо|скинула}} заштиту са странице $3",
        "logentry-protect-protect": "$1 је {{GENDER:$2|заштитио|заштитила}} $3 $4",
        "logentry-protect-protect-cascade": "$1 је {{GENDER:$2|заштитио|заштитила}} $3 $4 [преносива заштита]",
-       "logentry-protect-modify": "$1 је {{GENDER:$2|променио|променила}} степен заштите за $3 $4",
-       "logentry-protect-modify-cascade": "$1 је {{GENDER:$2|променио|променила}} степен заштите за $3 $4 [преносива заштита]",
+       "logentry-protect-modify": "$1 је {{GENDER:$2|променио|променила}} ниво заштите странице „$3” $4",
+       "logentry-protect-modify-cascade": "$1 је {{GENDER:$2|променио|променила}} ниво заштите странице „$3” $4 [преносива заштита]",
        "logentry-rights-rights": "$1 је {{GENDER:$2|променио|променила}} чланство групе за {{GENDER:$6|$3}} из $4 у $5",
        "logentry-rights-rights-legacy": "$1 је {{GENDER:$2|променио|променила}} чланство групе за $3",
        "logentry-rights-autopromote": "$1 је аутоматски {{GENDER:$2|унапређен|унапређена}} из $4 у $5",
        "logentry-upload-upload": "$1 је {{GENDER:$2|отпремио|отпремила}} $3",
        "logentry-upload-overwrite": "$1 је {{GENDER:$2|отпремио|отпремила}} нову верзију $3",
        "logentry-upload-revert": "$1 је {{GENDER:$2|отпремио|отпремила}} $3",
-       "log-name-managetags": "Ð\94невник Ñ\83Ñ\80еÑ\92иваÑ\9aа Ð¾Ð·Ð½Ð°Ðºа",
-       "log-description-managetags": "Ð\9eваÑ\98 Ð´Ð½ÐµÐ²Ð½Ð¸Ðº Ñ\81адÑ\80жи Ñ\81пиÑ\81ак Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\83 Ð²ÐµÐ·Ð¸ [[Special:Tags|ознака]]. Ð\94невник Ñ\81адÑ\80жи Ñ\81амо Ñ\80адÑ\9aе Ð¸Ð·Ð²Ñ\80Ñ\88ене Ð¾Ð´ Ñ\81Ñ\82Ñ\80ане Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80а, Ñ\83ноÑ\81и Ð·Ð° Ð¾Ð·Ð½Ð°ÐºÐµ Ð½Ð°Ð¿Ñ\80авÑ\99ене Ð¸Ð»Ð¸ Ð¾Ð±Ñ\80иÑ\81ане Ð¾Ð´ Ñ\81Ñ\82Ñ\80ане Ð²Ð¸ÐºÐ¸ Ñ\81оÑ\84Ñ\82веÑ\80а Ñ\81е Ð½Ðµ Ð½Ð°Ð»Ð°Ð·Ðµ Ñ\83 Ð¾Ð²Ð¾Ð¼ Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83.",
+       "log-name-managetags": "Ð\95виденÑ\86иÑ\98а Ñ\83пÑ\80авÑ\99аÑ\9aа Ð¾Ð·Ð½Ð°ÐºÐ°Ð¼а",
+       "log-description-managetags": "Ð\9dа Ð¾Ð²Ð¾Ñ\98 Ñ\81Ñ\82Ñ\80аниÑ\86и Ñ\81е Ð½Ð°Ð»Ð°Ð·Ð¸ Ñ\81пиÑ\81ак Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\83 Ð²ÐµÐ·Ð¸ [[Special:Tags|ознака]]. Ð\95виденÑ\86иÑ\98а Ñ\81адÑ\80жи Ñ\81амо Ñ\80адÑ\9aе ÐºÐ¾Ñ\98е Ñ\81Ñ\83 Ñ\80Ñ\83Ñ\87но Ð¸Ð·Ð²Ñ\80Ñ\88или Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80и; Ñ\83ноÑ\81и Ð·Ð° Ð¾Ð·Ð½Ð°ÐºÐµ ÐºÐ¾Ñ\98е Ñ\98е Ð½Ð°Ð¿Ñ\80авио Ð¸Ð»Ð¸ Ð¾Ð±Ñ\80иÑ\81ао Ð²Ð¸ÐºÐ¸ Ñ\81оÑ\84Ñ\82веÑ\80а Ñ\81е Ð½Ðµ Ð½Ð°Ð»Ð°Ð·Ðµ Ñ\83 Ð¾Ð²Ð¾Ñ\98 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и.",
        "logentry-managetags-create": "$1 је {{GENDER:$2|направио|направила}} ознаку „$4“",
-       "logentry-managetags-delete": "$1 је {{GENDER:$2|обрисао|обрисала}} ознаку „$4“ (уклоњена је из $5 {{PLURAL:$5|измене или дневника|измена и/или дневника}})",
+       "logentry-managetags-delete": "$1 је {{GENDER:$2|обрисао|обрисала}} ознаку „$4“ (уклоњена је из $5 {{PLURAL:$5|измене или уноса у евиденцији|измена и/или уноса у евиденцији}})",
        "logentry-managetags-activate": "$1 је {{GENDER:$2|активирао|активирала}} ознаку „$4“ за употребу од стране корисника и ботова",
        "logentry-managetags-deactivate": "$1 је {{GENDER:$2|деактивирао|деактивирала}} ознаку „$4“ за употребу од стране корисника и ботова",
-       "log-name-tag": "Ð\94невник ознака",
-       "log-description-tag": "Овај дневник приказује додавање/уклањање [[Special:Tags|ознака]] на појединачне измене или уносе у дневницима. Овај дневник не приказује означавање када су она део уређивања, брисања или неке друге радње.",
+       "log-name-tag": "Ð\95виденÑ\86иÑ\98а ознака",
+       "log-description-tag": "Ова страница приказује када су корисници додали/уклонили [[Special:Tags|ознаке]] с појединачних измена или уноса у евиденцијама. Евиденција не приказује радње означавања када су се догодиле приликом уређивања, брисања или сличне радње.",
        "rightsnone": "(нема)",
        "rightslogentry-temporary-group": "$1 (привремено, до $2)",
        "feedback-adding": "Додајем повратну информацију на страницу…",
        "feedback-useragent": "Кориснички агент:",
        "searchsuggest-search": "Претрага",
        "searchsuggest-containing": "садржи...",
-       "api-error-badtoken": "Унутрашња грешка: неисправан жетон.",
+       "api-error-badtoken": "Унутрашња грешка: неисправан токен.",
        "api-error-emptypage": "Стварање нових празних страница није дозвољено.",
        "api-error-publishfailed": "Унутрашња грешка: сервер није успео да објави привремену датотеку.",
        "api-error-stashfailed": "Унутрашња грешка: сервер не може да сачува привремену датотеку.",
        "pagelang-unchanged-language": "Страница $1  је већ постављена на језик $2.",
        "pagelang-db-failed": "База података није успела променити језик странице.",
        "right-pagelang": "мењање језика странице",
-       "action-pagelang": "промену језика странице",
-       "log-name-pagelang": "Ð\94невник промене језика",
-       "log-description-pagelang": "Ð\9eво Ñ\98е Ð´Ð½ÐµÐ²Ð½Ð¸Ðº Ð¸Ð·мена у језицима страница.",
+       "action-pagelang": "промените језик странице",
+       "log-name-pagelang": "Ð\95виденÑ\86иÑ\98а промене језика",
+       "log-description-pagelang": "Ð\9eво Ñ\98е ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98а Ð¿Ñ\80омена у језицима страница.",
        "logentry-pagelang-pagelang": "$1 је {{GENDER:$2|променио|променила}} језик странице $3 из $4 у $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (омогућена)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>онемогућена</strong>)",
        "json-warn-trailing-comma": "$1 {{PLURAL:$1|пратећа тачка је уклоњена|пратеће тачке су уклоњене|пратећих тачки је уклоњено}} из JSON-a",
        "json-error-unknown": "Догодио се проблем с JSON-ом. Грешка: $1",
        "json-error-depth": "Прекорачена је највећа дубина",
-       "json-error-state-mismatch": "Ð\9dевалидан или покварени JSON",
+       "json-error-state-mismatch": "Ð\9dеважеÑ\9bи или покварени JSON",
        "json-error-ctrl-char": "Грешка контролног симбола, могуће је да је неисправно енкодиран",
        "json-error-syntax": "Грешка у синтакси",
        "json-error-utf8": "Малформирани UTF-8 знаци, могуће је да су неисправно енкодирани",
        "log-action-filter-contentmodel": "Тип промене модела садржаја:",
        "log-action-filter-delete": "Тип брисања:",
        "log-action-filter-import": "Тип увоза:",
-       "log-action-filter-managetags": "Тип Ñ\83Ñ\80еÑ\92иваÑ\9aа Ð¾Ð·Ð½Ð°Ðºа:",
+       "log-action-filter-managetags": "Тип Ñ\80адÑ\9aе Ñ\83пÑ\80авÑ\99аÑ\9aа Ð¾Ð·Ð½Ð°ÐºÐ°Ð¼а:",
        "log-action-filter-move": "Тип премештања:",
        "log-action-filter-newusers": "Тип новог налога:",
        "log-action-filter-patrol": "Тип патролирања:",
-       "log-action-filter-protect": "Тип закључавања:",
+       "log-action-filter-protect": "Тип заштите:",
        "log-action-filter-rights": "Тип промене корисничких права:",
        "log-action-filter-suppress": "Врста скривања:",
        "log-action-filter-upload": "Тип отпремања:",
        "log-action-filter-delete-delete": "брисање странице",
        "log-action-filter-delete-delete_redir": "преснимавање преусмерења",
        "log-action-filter-delete-restore": "враћање странице",
-       "log-action-filter-delete-event": "брисање уноса у дневницима",
+       "log-action-filter-delete-event": "брисање евиденције",
        "log-action-filter-delete-revision": "брисање измене",
        "log-action-filter-import-interwiki": "Међувики увоз",
        "log-action-filter-import-upload": "Увоз постављањем XML-а",
        "log-action-filter-protect-move_prot": "премештање заштите",
        "log-action-filter-rights-rights": "ручно",
        "log-action-filter-rights-autopromote": "аутоматски",
-       "log-action-filter-suppress-event": "СкÑ\80иваÑ\9aе Ñ\83ноÑ\81а Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÑ\83",
+       "log-action-filter-suppress-event": "СкÑ\80иваÑ\9aе Ñ\83ноÑ\81а Ñ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86иÑ\98и",
        "log-action-filter-suppress-revision": "Скривање измене",
        "log-action-filter-suppress-delete": "Скривање странице",
        "log-action-filter-suppress-block": "Скривање корисника блокирањем",
        "authmanager-authn-not-in-progress": "Аутентификација није у току или је дошло до губитка података о сесији. Почните испочетка.",
        "authmanager-authn-no-primary": "Не могу да проверим пружене акредитиве.",
        "authmanager-authn-no-local-user": "Пружени акредитиви нису повезани ни са једним корисником на овом викију.",
-       "authmanager-authn-no-local-user-link": "Ð\9fÑ\80Ñ\83жени Ñ\81Ñ\83 Ð¸Ñ\81пÑ\80авни акредитиви, али нису повезани ни с једним корисником на овом викију. Пријавите се на неки други начин или направите нови кориснички налог, што ће Вам дати могућност да повежете претходне акредитиве на нови налог.",
+       "authmanager-authn-no-local-user-link": "Ð\9fÑ\80Ñ\83жени Ñ\81Ñ\83 Ð²Ð°Ð¶ÐµÑ\9bи акредитиви, али нису повезани ни с једним корисником на овом викију. Пријавите се на неки други начин или направите нови кориснички налог, што ће Вам дати могућност да повежете претходне акредитиве на нови налог.",
        "authmanager-authn-autocreate-failed": "Не могу да аутоматски направим локални налог: $1",
        "authmanager-change-not-supported": "Не могу да променим пружене акредитиве јер их ништа не би користило.",
        "authmanager-create-disabled": "Онемогућено прављење налога.",
        "authprovider-confirmlink-request-label": "Рачуни који се требају повезати",
        "authprovider-confirmlink-success-line": "$1: Успешно повезано.",
        "authprovider-confirmlink-failed": "Не могу да повежем налог у потпуности: $1",
-       "authprovider-confirmlink-ok-help": "Наставите након приказивања порука за неуспешно повезивање.",
+       "authprovider-confirmlink-ok-help": "Наставите након приказивања порука за неуспело повезивање.",
        "authprovider-resetpass-skip-label": "Прескочи",
        "authprovider-resetpass-skip-help": "Прескочите ресетовање лозинке.",
        "authform-nosession-login": "Аутентификација је успела, али Ваш прегледач не може да „запамти” да сте пријављени.\n\n$1",
        "authform-nosession-signup": "Налог је направљен, али Ваш прегледач не може да „запамти” да сте пријављени.\n\n$1",
-       "authform-newtoken": "Недостаје жетон. $1",
-       "authform-notoken": "Недостаје жетон",
-       "authform-wrongtoken": "Погрешан жетон",
+       "authform-newtoken": "Недостаје токен. $1",
+       "authform-notoken": "Недостаје токен",
+       "authform-wrongtoken": "Погрешан токен",
        "specialpage-securitylevel-not-allowed-title": "Није дозвољено",
        "specialpage-securitylevel-not-allowed": "Жао нам је, није Вам дозвољено да користите ову страницу јер не могу да потврдим Ваш идентитет.",
        "authpage-cannot-login": "Не могу започети пријаву.",
        "cannotauth-not-allowed": "Није Вам дозвољено да користите ову страницу",
        "changecredentials": "Промена акредитива",
        "changecredentials-submit": "Промени",
-       "changecredentials-invalidsubpage": "â\80\9e$1â\80\9c Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авна врста акредитива.",
+       "changecredentials-invalidsubpage": "â\80\9e$1â\80\9c Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´на врста акредитива.",
        "changecredentials-success": "Ваши акредитиви су промењени.",
        "removecredentials": "Уклањање акредитива",
        "removecredentials-submit": "Уклањање акредитива",
-       "removecredentials-invalidsubpage": "â\80\9e$1â\80\9c Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авна врста акредитива.",
+       "removecredentials-invalidsubpage": "â\80\9e$1â\80\9c Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´на врста акредитива.",
        "removecredentials-success": "Ваши акредитиви су уклоњени.",
-       "credentialsform-provider": "Ð\92Ñ\80Ñ\81Ñ\82а акредитива:",
+       "credentialsform-provider": "Тип акредитива:",
        "credentialsform-account": "Назив налога:",
        "cannotlink-no-provider-title": "Нема налога за повезивање",
        "cannotlink-no-provider": "Нема налога за повезивање.",
        "unlinkaccounts-success": "Налог је обједињен.",
        "userjsispublic": "Напомена: JavaScript подстранице не би требале садржавати поверљиве информације будући да су видљиве другим корисницима.",
        "usercssispublic": "Напомена: CSS подстранице не би требале садржавати поверљиве информације будући да су видљиве другим корисницима.",
-       "restrictionsfield-badip": "Ð\9dеиÑ\81пÑ\80авна Ð\98Ð\9f адреса или опсег: $1",
-       "restrictionsfield-label": "Дозвољени ИП-опсези:",
+       "restrictionsfield-badip": "Ð\9dеважеÑ\9bа IP адреса или опсег: $1",
+       "restrictionsfield-label": "Дозвољени IP опсези:",
        "edit-error-short": "Грешка: $1",
        "edit-error-long": "Грешке:\n\n$1",
        "revid": "измена $1",
        "undelete-cantcreate": "Не можете повратити ову страницу јер нема постојеће странице са овим именом и немате дозволу да направите ову страницу.",
        "pagedata-title": "Подаци странице",
        "pagedata-not-acceptable": "Није пронађен одговарајући облик. Подржане MIME-врсте: $1",
-       "pagedata-bad-title": "Ð\9dевалидан наслов: $1.",
+       "pagedata-bad-title": "Ð\9dеважеÑ\9bи наслов: $1.",
        "passwordpolicies": "Правила за лозинке",
        "passwordpolicies-group": "Група",
        "passwordpolicies-policies": "Правила",
index 2fdfea5..85a67bf 100644 (file)
        "ns-specialprotected": "Specialsidor kan inte redigeras.",
        "titleprotected": "Denna sidtitel har skyddats från att skapas av [[User:$1|$1]].\nDen angivna anledningen är <em>$2</em>.",
        "filereadonlyerror": "Det går inte att ändra filen \"$1\", eftersom fildatabasen \"$2\" är i skrivskyddat läge.\n\nDen systemadministratör som låste den angav följande anledning: \"$3\".",
+       "invalidtitle": "Ogiltig titel",
        "invalidtitle-knownnamespace": "Ogiltig titel med namnrymden \"$2\" och texten \"$3\"",
        "invalidtitle-unknownnamespace": "Ogiltig titel med okänt namnrymdsnummer $1 och texten \"$2\"",
        "exception-nologin": "Inte inloggad",
        "filehist-filesize": "Filstorlek",
        "filehist-comment": "Kommentar",
        "imagelinks": "Filanvändning",
-       "linkstoimage": "Följande {{PLURAL:$1|sida|$1 sidor}} länkar till den här filen:",
-       "linkstoimage-more": "Mer än {{PLURAL:$1|en sida|$1 sidor}} länkar till den här filen.\nFöljande lista visar bara {{PLURAL:$1|den första sidan|de $1 första sidorna}} som länkar till filen.\nDet finns en [[Special:WhatLinksHere/$2|fullständig lista]].",
-       "nolinkstoimage": "Inga sidor länkar till den här filen.",
+       "linkstoimage": "Följande {{PLURAL:$1|sida|$1 sidor}} använder den här filen:",
+       "linkstoimage-more": "Mer än {{PLURAL:$1|en sida|$1 sidor}} använder den här filen.\nFöljande lista visar bara {{PLURAL:$1|den första sidan|de $1 första sidorna}} som använder filen.\nDet finns en [[Special:WhatLinksHere/$2|fullständig lista]].",
+       "nolinkstoimage": "Inga sidor använder den här filen.",
        "morelinkstoimage": "Visa [[Special:WhatLinksHere/$1|fler länkar]] till den här filen.",
        "linkstoimage-redirect": "$1 (filomdirigering) $2",
        "duplicatesoffile": "Följande {{PLURAL:$1|fil är en dubblett|filer är dubbletter}} till den här filen ([[Special:FileDuplicateSearch/$2|mer detaljer]]):",
index fb6aa0d..a0e1e10 100644 (file)
        "imagelinks": "Matumizi ya faili",
        "linkstoimage": "{{PLURAL:$1|Ukurasa huu umeunganishwa|Kurasa hizi $1 zimeunganishwa}} na faili hili:",
        "linkstoimage-more": "Zipo {{PLURAL:$1|kurasa|kurasa}} zaidi ya $1 zinazounga na faili hili.\nOrodha inayofuata inaonyesha {{PLURAL:$1|kiungo cha kwanza|viungo $1 vya kwanza}} tu vinavyoungana na faili hili.\n[[Special:WhatLinksHere/$2|Orodha nzima]] inapatikana.",
-       "nolinkstoimage": "Hakuna kurasa zozote zilizounganishwa na faili hii.",
+       "nolinkstoimage": "Hakuna kurasa zozote zinazotumia faili hii.",
        "morelinkstoimage": "Tazama [[Special:WhatLinksHere/$1|viungo vingine]] vinavyoelekeza faili hili.",
        "linkstoimage-redirect": "$1 (elekezo la faili) $2",
        "duplicatesoffile": "{{PLURAL:$1|Faili linalofuata ni nakala ya|Mafaili $1 yanayofuata ni nakala za}} faili hili ([[Special:FileDuplicateSearch/$2|maelezo mengine]]):",
index f92970e..bcb7cea 100644 (file)
        "savechanges": "மாற்றங்களைச் சேமி",
        "publishpage": "பக்கத்தைப் பதிப்பிடுக",
        "publishchanges": "மாற்றங்களைப் பதிப்பிடுக",
+       "savearticle-start": "பக்கத்தைச் சேமி..",
+       "savechanges-start": "மாற்றங்களைச் சேமிக்கவும்...",
+       "publishpage-start": "மாற்றங்களைப் பதிப்பிடுக…",
        "publishchanges-start": "மாற்றங்களைப் பதிப்பிடுக…",
        "preview": "முன்தோற்றம்",
        "showpreview": "முன்தோற்றம் காட்டு",
        "diff-multi-manyusers": "({{PLURAL:$2|பயனரால்|$2 பயனர்களால்}} செய்யப்பட்ட {{PLURAL:$1|ஒரு இடைப்பட்ட திருத்தம்|$1 இடைப்பட்ட திருத்தங்கள்}}  காட்டப்படவில்லை.)",
        "difference-missing-revision": "இந்த வேறுபாட்டின் ($1) {{PLURAL:$2|ஒரு திருத்தம்|$2 திருத்தங்கள்}} {{PLURAL:$2|கண்டறியப்பட்டது|கண்டறியப்பட்டன}}.\n\nஇது வழக்கமாக அழிக்கப்பட்ட பக்கத்தின் ஒரு காலவதியான வேறுபாட்டு இணைப்பு காரணமாக ஏற்படுகிறது.\nமேலும் விவரங்களை [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} நீக்கல் பதிவில்] காணலாம்.",
        "searchresults": "தேடல் முடிவுகள்",
+       "search-filter-title-prefix-reset": "அணைத்துப் பக்கங்களில் தேடவும்",
        "searchresults-title": "\"$1\" இற்கான தேடல் முடிவுகள்",
        "titlematches": "கட்டுரைத் தலைப்புப் பொருந்துகிறது",
        "textmatches": "கட்டுரை உரை பொருந்துகிறது",
        "search-file-match": "(கோப்பு உள்ளடக்கத்துடன் பொருந்துகிறது)",
        "search-suggest": "நீங்கள் கருதியது இதையா: $1",
        "search-rewritten": "$1-இற்கான முடிவுகள் காட்டப்படுகின்றன. $2-இற்கு பதிலாக தேடப்படுகிறது.",
-       "search-interwiki-caption": "உறவுத் திட்டங்கள்",
+       "search-interwiki-caption": "à®\89றவà¯\81தà¯\8d à®¤à®¿à®\9fà¯\8dà®\9fà®\99à¯\8dà®\95ளிலà¯\8d à®\87à®°à¯\81நà¯\8dதà¯\81 à®®à¯\81à®\9fிவà¯\81à®\95ளà¯\8d",
        "search-interwiki-default": "$1 தளத்திலிருந்து முடிவுகள்:",
        "search-interwiki-more": "(மேலும்)",
        "search-interwiki-more-results": "மேலும் முடிவுகள்",
index 3f4351b..23ad3fb 100644 (file)
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>అచేతనం</strong>)",
        "mediastatistics": "మాధ్యమ గణాంకాలు",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 బైటు|$1 బైట్లు}} ($2; $3%)",
+       "mediastatistics-bytespertype": "ఈ విభాగంలో మొత్తం దస్త్రాల పరిమాణం: {{PLURAL:$1|$1 బైటు|$1 బైట్లు}} ($2; $3%).",
+       "mediastatistics-allbytes": "మొత్తం దస్త్రాలన్నింటి మొత్తం పరిమాణం: {{PLURAL:$1|$1 బైటు|$1 బైట్లు}} ($2).",
        "mediastatistics-table-mimetype": "MIME రకం",
        "mediastatistics-table-extensions": "సంభావ్యత గల పొడిగింతలు",
        "mediastatistics-table-count": "దస్త్రాల సంఖ్య",
        "special-characters-group-thai": "థాయి",
        "special-characters-group-lao": "లావో",
        "special-characters-group-khmer": "ఖ్మెర్",
+       "special-characters-group-canadianaboriginal": "కెనడియన్ ఎబొరిజినల్",
        "special-characters-title-endash": "ఎన్ డాష్",
        "special-characters-title-emdash": "ఎమ్ డాష్",
        "special-characters-title-minus": "మైనస్ గుర్తు",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "కూకీ-ఆధారిత సెషన్లు",
        "log-action-filter-block": "నిరోధపు రకం:",
        "log-action-filter-delete": "తొలగింపు రకం:",
+       "log-action-filter-import": "Type of import:",
+       "log-action-filter-managetags": "Type of tag management action:",
        "log-action-filter-move": "తరలింపు రకం:",
+       "log-action-filter-newusers": "Type of account creation:",
        "log-action-filter-all": "అన్నీ",
        "log-action-filter-managetags-create": "ట్యాగు సృష్టి",
        "log-action-filter-managetags-delete": "ట్యాగు తొలగింపు",
index 5a70fa6..e41b212 100644 (file)
        "minoredit": "Ин вироиши хурд аст",
        "watchthis": "Назар кардани ин саҳифа",
        "savearticle": "Саҳифа захира шавад",
+       "savechanges": "Захира кардан",
        "preview": "Пешнамоиш",
-       "showpreview": "Пеш намоиш",
+       "showpreview": "Пешнамоиш",
        "showdiff": "Намоиши тағйирот",
        "anoneditwarning": "'''Огоҳӣ:''' Шумо вуруд накардаед. Агар ягон вироиши кунед нишонаи IP Шумо ба ҳама намоён хоҳад буд. Агар Шумо <strong>[$1 ворид шавед]</strong> ё <strong>[$2 ҳисоберо эҷод кунед]</strong>, вироишоти Шумо ба номи корбариатон ҳамроҳ бо дигар бартариҳо муталиқ хоҳад шуд.",
        "anonpreviewwarning": "<em>Шумо вориди нашудаед. Захиракунӣ IP нишонаи шуморо дар таърихи вироиши ин саҳифа захира хоҳад кард.</em>",
index b340648..0616922 100644 (file)
@@ -99,7 +99,8 @@
                        "Botansahin",
                        "Catrope",
                        "Hedda",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "TmY e12"
                ]
        },
        "tog-underline": "Bağlantıların altını çizme:",
        "subcategories": "Alt kategoriler",
        "category-media-header": "\"$1\" kategorisindeki ortam dosyaları",
        "category-empty": "<em>Şu anda bu kategoride herhangi bir sayfa ya da ortam dosyası bulunmuyor.</em>",
-       "hidden-categories": "{{PLURAL:$1|Gizli kategori|Gizli kategori}}",
+       "hidden-categories": "{{PLURAL:$1|Gizli kategori|Gizli kategoriler}}",
        "hidden-category-category": "Gizli kategoriler",
        "category-subcat-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki $1 alt kategori dâhil toplam $2 alt kategori vardır.}}",
        "category-subcat-count-limited": "Bu kategori aşağıdaki $1 alt kategoriye sahiptir.",
        "print": "Yazdır",
        "view": "Görüntüle",
        "view-foreign": "$1 üzerinde gör",
-       "edit": "Değiştir",
+       "edit": "Düzenle",
        "edit-local": "Yerel açıklamayı düzenle",
        "create": "Oluştur",
        "create-local": "Yerel açıklama ekle",
        "currentevents-url": "Project:Güncel olaylar",
        "disclaimers": "Sorumluluk reddi",
        "disclaimerpage": "Project:Genel sorumluluk reddi",
-       "edithelp": "Değişiklik yardımı",
+       "edithelp": "Düzenleme yardımı",
        "helppage-top-gethelp": "Yardım",
        "mainpage": "Anasayfa",
        "mainpage-description": "Anasayfa",
        "hr_tip": "Yatay çizgi (çok sık kullanmayın)",
        "summary": "Özet:",
        "subject": "Konu:",
-       "minoredit": "Bu küçük bir değişiklik",
+       "minoredit": "Bu bir küçük değişiklik",
        "watchthis": "Bu sayfayı izle",
        "savearticle": "Sayfayı kaydet",
        "savechanges": "Değişiklikleri kaydet",
        "group-autoconfirmed": "Otomatik onaylanmış kullanıcılar",
        "group-bot": "Botlar",
        "group-sysop": "Hizmetliler",
+       "group-interface-admin": "Arayüz yöneticisi",
        "group-bureaucrat": "Bürokratlar",
        "group-suppress": "Gözetmenler",
        "group-all": "(hepsi)",
        "group-autoconfirmed-member": "{{GENDER:$1|otomatik onaylanmış kullanıcı}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|hizmetli}}",
+       "group-interface-admin-member": "arayüz yöneticisi",
        "group-bureaucrat-member": "{{GENDER:$1|bürokrat}}",
        "group-suppress-member": "{{GENDER:$1|gözetmen}}",
        "grouppage-user": "{{ns:project}}:Kullanıcılar",
        "grouppage-autoconfirmed": "{{ns:project}}:Otomatik onaylanmış kullanıcılar",
        "grouppage-bot": "{{ns:project}}:Botlar",
        "grouppage-sysop": "{{ns:project}}:Hizmetliler",
+       "grouppage-interface-admin": "Project:Arayüz yöneticileri",
        "grouppage-bureaucrat": "{{ns:project}}:Bürokratlar",
        "grouppage-suppress": "{{ns:project}}:Gözetmen",
        "right-read": "Sayfaları oku",
        "right-editusercss": "Diğer kullanıcıların CSS dosyalarında değişiklik yap",
        "right-edituserjson": "Diğer kullanıcıların JSON dosyalarını düzenle",
        "right-edituserjs": "Diğer kullanıcıların JS dosyalarında değişiklik yap",
+       "right-editsitecss": "Sitewide CSS düzenle",
+       "right-editsitejson": "Sitewide JSON'u düzenle",
+       "right-editsitejs": "Sitewide JavaScript'i düzenle",
        "right-editmyusercss": "Kendi kullanıcı CSS dosyaları düzenle",
        "right-editmyuserjson": "Kendi kullanıcı JSON dosyalarını düzenle",
        "right-editmyuserjs": "Kendi kullanıcı JavaScript dosyalarını düzenle",
        "recentchanges-notargetpage": "Bu sayfa ile ilgili değişiklikleri görmek için yukarıdaya bir sayfa adı girin.",
        "recentchanges-feed-description": "Bu beslemede, viki'de yapılan en son değişiklikleri takip edin.",
        "recentchanges-label-newpage": "Bu değişiklikle yeni bir sayfa oluşturuldu",
-       "recentchanges-label-minor": "Bu küçük bir değişiklik",
+       "recentchanges-label-minor": "Bu bir küçük değişiklik",
        "recentchanges-label-bot": "Bu değişiklik bir bot tarafından yapıldı",
        "recentchanges-label-unpatrolled": "Bu değişiklik henüz gözlenmemiş",
        "recentchanges-label-plusminus": "Sayfa boyutundaki değişikliğin bayt bazında değeri",
        "rcfilters-watchlist-markseen-button": "Tüm değişiklikleri görüldü olarak işaretle",
        "rcfilters-watchlist-edit-watchlist-button": "İzlenen sayfaların listesini düzenle",
        "rcfilters-watchlist-showupdated": "Gerçekleştirilen değişikliklerden bu yana ziyaret etmediğiniz sayfalarda yapılan değişiklikler <strong>koyu</strong> renktedir.",
-       "rcfilters-preference-label": "Son Değişikliklerin geliştirilmiş sürümünü gizle",
-       "rcfilters-watchlist-preference-label": "İzleme Listesinin geliştirilmiş sürümünü gizle",
+       "rcfilters-preference-label": "Son değişikliklerin geliştirilmiş sürümünü gizle",
+       "rcfilters-preference-help": "2017 arayüz tasarımını ve bu andan sonra eklenen tüm araçları geri alır.",
+       "rcfilters-watchlist-preference-label": "İzleme listesinin geliştirilmiş sürümünü gizle",
+       "rcfilters-watchlist-preference-help": "2017 arayüz tasarımını ve bu andan sonra eklenen tüm araçları geri alır.",
        "rcfilters-target-page-placeholder": "Bir sayfa (ya da kategori) adı girin",
        "rcnotefrom": "<strong>$3, $4</strong> tarihinden itibaren yapılan {{PLURAL:$5|değişiklik|değişiklik}} aşağıdadır (<strong>$1</strong> tarhine kadar olanlar gösterilmektedir).",
        "rclistfrom": "$3 $2 tarihinden itibaren yeni değişiklikleri göster",
        "uploadwarning": "Yükleme uyarısı",
        "uploadwarning-text": "Lütfen aşağıdaki dosya açıklamasını değiştirin ve tekrar deneyin.",
        "savefile": "Dosyayı kaydet",
-       "uploaddisabled": "Geçici olarak şu anda herhangi bir dosya yüklenmez. Biraz sonra bir daha deneyiniz.",
+       "uploaddisabled": "Geçici olarak şu anda bu wiki'ye herhangi bir dosya yüklenemez. Lütfen daha sonra bir daha deneyiniz.",
        "copyuploaddisabled": "URL ile yükleme devre dışı.",
        "uploaddisabledtext": "Dosya yüklemeleri devredışı bırakılmıştır.",
        "php-uploaddisabledtext": "PHP dosyası yüklemeleri devre dışıdır. Lütfen file_uploads ayarını kontrol edin.",
        "enotif_lastdiff": "Bu değişikliği görmek için, $1 sayfasına bakınız.",
        "enotif_anon_editor": "anonim kullanıcı $1",
        "enotif_body": "Sayın $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nEditörün girdiği özet: $PAGESUMMARY $PAGEMINOREDIT\n\nEditörün iletişim bilgileri:\ne-posta: $PAGEEDITOR_EMAIL\nviki: $PAGEEDITOR_WIKI\n\nBahsi geçen sayfayı oturum açarak ziyaret edinceye kadar sayfayla ilgili başka bildirim gönderilmeyecektir. Ayrıca izleme listenizdeki tüm sayfaların bildirim durumlarını sıfırlayabilirsiniz.\n\n{{SITENAME}} bildirim sistemi\n\n--\nE-posta bildirim ayarlarınızı değiştirmek için aşağıdaki sayfayı ziyaret ediniz:\n{{canonicalurl:{{#special:Preferences}}}}\n\nİzleme listesi ayarlarınızı değiştirmek için aşağıdaki sayfayı ziyaret ediniz:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nSayfayı izleme listenizden silmek için aşağıdaki sayfayı ziyaret ediniz:\n$UNWATCHURL\n\nGeri bildirim ve daha fazla yardım için:\n$HELPPAGE",
-       "enotif_minoredit": "Bu küçük bir değişiklik",
+       "enotif_minoredit": "Bu bir küçük değişiklik",
        "created": "oluşturuldu",
        "changed": "değiştirildi",
        "deletepage": "Sayfayı sil",
index ea93a9f..1621af6 100644 (file)
        "password-login-forbidden": "Бу кулланучы исемен һәм серсүзне куллану тыелган",
        "mailmypassword": "Серсүзне бетерү",
        "passwordremindertitle": "{{SITENAME}} кулланучысына вакытлы серсүз тапшыру",
-       "passwordremindertext": "Кемдер (бәлки, сездер, IP адресы: $1)  {{grammar:genitive|{{SITENAME}}}} ($4) өчен яңа серсүз соратты. $2 кулланучысы өчен яңа вакытлыча серсүз: $3. Әгәр бу сез булган булсагыз, системага керегез һәм яңа серсүз сайлагыз. Сезнең вакытлыча серсүз гамәлдә $5 {{PLURAL:$5|көн}} булачак.\n\nӘгәр сез серсүзне алмаштыруны сорамаган булсагыз яки, оныткан очракта, исегезгә төшергән булсагыз, бу хәбәргә игътибар бирмичә, иске серсүзегезне куллануны дәвам итегез.",
+       "passwordremindertext": "Кемдер ($1 IP адресылы)  {{grammar:genitive|{{SITENAME}}}} ($4) өчен яңа серсүз соратты. $2 кулланучысы өчен яңа вакытлыча серсүз: $3. Әгәр бу сез булган булсагыз, системага керегез һәм яңа серсүз сайлагыз. Сезнең вакытлыча серсүз гамәлдә $5 {{PLURAL:$5|көн}} булачак.\n\nӘгәр сез серсүзне алмаштыруны сорамаган булсагыз яки, оныткан очракта, исегезгә төшергән булсагыз, бу хәбәргә игътибар бирмичә, иске серсүзегезне куллануны дәвам итегез.",
        "noemail": "$1 исемле кулланучы өчен электрон почта адресы язылмаган.",
        "noemailcreate": "Сез дөрес e-mail адресы күрсәтергә тиеш",
        "passwordsent": "Яңа серсүз $1 исемле кулланучының электрон почта адресына җибәрелде.\n\nЗинһар, серсүзне алгач, системага яңадан керегез.",
        "subject-preview": "Башисемне алдан карау:",
        "blockedtitle": "Кулланучы тыелды",
        "blockedtext": "<strong>Сезнең хисап язмагыз яки IP адресыгыз тыелган.</strong>\n\nТыючы идарәче: $1.\nКүрсәтелгән сәбәп: <em>$2</em>.\n\n* Тыю башланган вакыт: $8\n* Тыю ахыры: $6\n* Тыелулар саны: $7\n\nСез $1 яки башка [[{{MediaWiki:Grouppage-sysop}}|идарәчегә]] тыю буенча сорауларыгызны җибәрә аласыз.\nИсегездә тотыгыз: әгәр сез теркәлмәгән һәм электрон почта адресыгызны [[Special:Preferences|көйләнмәләрдә]] дәлилләмәгән булсагыз, сез бирелгән «{{int:emailuser}}» мөмкинчелекне куллана алмаячаксыз. Шулай ук тыю вакытында сезнең хат җибәрү мөмкинлегегезне чикләгән булырга да мөмкиннәр.\nСезнең IP адресыгыз — $3, тыю таныклыгы — $5.\nЗинһар, хатларда бу мәгълүматны күрсәтергә онытмагыз.",
-       "autoblockedtext": "Сезнең IP адресыгыз, аның тыелган кулланучы тарафыннан кулланылуы сәбәпле, автомат рәвештә тыелды.\nУл кулланучыны тыючы идарәче: $1. Күрсәтелгән сәбәп:\n\n:''$2''\n\n* Тыю башланган вакыт: $8\n* Тыю ахыры: $6\n* Тыелулар саны: $7\n\nСез $1 яки башка [[{{MediaWiki:Grouppage-sysop}}|идарәчегә]] тыю буенча сорауларыгызны җибәрә аласыз.\nИсегездә тотыгыз: әгәр сез теркәлмәгән һәм электрон почта адресыгызны дәлилләмәгән булсагыз ([[Special:Preferences|дәлилләү өчен шәхси көйләүләр монда]]), идарәчегә хат җибәрә алмыйсыз. Шулай ук тыю вакытында сезнең хат җибәрү мөмкинлегегезне чикләгән булырга да мөмкиннәр.\nСезнең IP адресы — $3, тыю идентификаторы — #$5.\nХатларда бу мәгълүматны күрсәтергә онытмагыз.",
+       "autoblockedtext": "Сезнең IP адресыгыз, аның тыелган кулланучы тарафыннан кулланылуы сәбәпле, автомат рәвештә тыелды.\nУл кулланучыны тыючы идарәче: $1. Күрсәтелгән сәбәп:\n\n:<em>$2</em>\n\n* Тыю башланган вакыт: $8\n* Тыю ахыры: $6\n* Тыелулар саны: $7\n\nСез $1 яки башка [[{{MediaWiki:Grouppage-sysop}}|идарәчегә]] тыю буенча сорауларыгызны җибәрә аласыз.\n\nИсегездә тотыгыз: әгәр сез [[Special:Preferences|көйләнмәләрдә]] электрон почта адресыгызны  күрсәтмәгән яки дәлилләмәгән булсагыз, шулай ук  сез блокта булсагыз хат җибәреп булмаячак һәм  сез \"{{int:emailuser}}\" мөмкинлеген куллана алмаячаксыз.\n\nСезнең IP адрес — $3, тыю идентификаторы — #$5.\nХатларда бу мәгълүматны күрсәтергә онытмагыз.",
        "blockednoreason": "сәбәп күрсәтелмәгән",
        "whitelistedittext": "Сез битләрне үзгәртү өчен $1 тиеш.",
        "confirmedittext": "Битләрне үзгәртү алдыннан сез электрон почта адресыгызны дәлилләргә тиеш.\nСез моны [[Special:Preferences|көйләүләр битендә]] башкара аласыз.",
        "userjspreview": "'''Бу бары тик JavaScript файлын алдан карау гына, ул әле сакланмаган!'''",
        "sitecsspreview": "'''онытмагыз, бу бары тик CSS-файлны алдан карау гына.'''\n'''Ул әле сакланмаган!'''",
        "sitejspreview": "'''Бу бары тик JavaScript файлын алдан карау гына.'''\n'''Ул әле сакланмаган!'''",
-       "userinvalidconfigtitle": "'''Игътибар:''' \"$1\" бизәү темасы табылмады. Кулланучының .css һәм .js битләре исемнәре бары тик кечкенә (юл) хәрефләрдән генә торырга тиеш икәнен онытмагыз. Мисалга: {{ns:user}}:Foo/vector.css, ә {{ns:user}}:Foo/Vector.css түгел!",
+       "userinvalidconfigtitle": "<strong>Игътибар:</strong> \"$1\" бизәү темасы табылмады. Кулланучының .css, .json һәм .js битләре исемнәре бары тик кечкенә (юл) хәрефләрдән генә торырга тиеш икәнен онытмагыз. Мисалга: {{ns:user}}:Foo/vector.css, ә {{ns:user}}:Foo/Vector.css түгел!",
        "updated": "(Яңартылды)",
        "note": "'''Искәрмә:'''",
        "previewnote": "<strong>Исегездә тотыгыз, бу алдан карау гына.</strong>\nТәзәтмәләрегез әлегә сакланмаган!",
        "longpageerror": "<strong>ХАТА: сакланучы текст зурлыгы - $1 {{PLURAL:$1|килобайт}}, бу $2 {{PLURAL:$2|килобайт}} чигеннән күбрәк. Бит саклана алмый.</strong>",
        "readonlywarning": "<strong>Кисәтү: мәгълүматлар базасында техник эшләр башкарыла, сезнең үзгәртүләр хәзер үк саклана алмый.</strong>\nБез сезгә әлеге текстны, югалмас өчен, берәр файлга сакларга тәкъдим итәбез.\n\nМәгълүматлар базасын япкан идарәче күрсәткән сәбәп: $1",
        "protectedpagewarning": "'''Кисәтү: сез бу битне үзгәртә алмыйсыз, бу хокукка идарәчеләр гына ия.'''\nТүбәндә көндәлекнең  соңгы язуы бирелгән:",
-       "semiprotectedpagewarning": "'''Кисәтү:''' бу бит якланган. Аны теркәлгән кулланучылар гына үзгәртә ала.\nАста бу битне күзәтү көндәлеге бирелгән:",
+       "semiprotectedpagewarning": "<strong>Кисәтү:</strong> бу бит якланган. Аны авторасланган кулланучылар гына үзгәртә ала.\nАста бу битнең күзәтү көндәлегендә булган соңгы язмасы бирелгән:",
        "cascadeprotectedwarning": "<strong>Кисәтү:</strong> Бу битне идарәчеләр гына үзгәртә ала., чөнки бит {{PLURAL:$1|каскадлы яклау исемлегенә кертелгән}}:",
        "titleprotectedwarning": "'''Кисәтү: Мондый исемле бит якланган, аны үзгәртү өчен [[Special:ListGroupRights|тиешле хокукка]] ия булу зарур.'''\nАста күзәтү көндәлегендәге соңгы язма бирелгән:",
        "templatesused": "Бу биттә кулланылган {{PLURAL:$1|1=калып|калыплар}} :",
        "prefs-watchlist-days": "Күзәтү исемлегендә күрсәтелгән көннәр саны:",
        "prefs-watchlist-days-max": "Иң күбе $1 {{PLURAL:$1|1=көн|көн}}",
        "prefs-watchlist-edits": "Киңәйтелгән күзәтү исемлегендә күрсәтелүче төзәтмәләрнең максималь саны:",
-       "prefs-watchlist-edits-max": "Ð\9cакÑ\81имÑ\83м Ñ\81ан: 1000",
+       "prefs-watchlist-edits-max": "Ð\98Ò£ ÐºÒ¯Ð±Ðµ: 1000",
        "prefs-watchlist-token": "Күзәтү исемлеге токены:",
        "prefs-watchlist-managetokens": "Токеннар беләр идарә итү",
        "prefs-misc": "Башка көйләнмәләр",
        "prefs-resetpass": "Серсүзне үзгәртү",
        "prefs-changeemail": "Электрон әрҗә адресын үзгәртү яисә бетерү",
        "prefs-setemail": "Электрон почта адресын көйләү",
-       "prefs-email": "E-mail көйләнмәләре",
+       "prefs-email": "Электрон почта көйләнмәләре",
        "prefs-rendering": "Күренеш",
        "saveprefs": "Саклау",
        "restoreprefs": "Башлангыч көйләнмәләрне кире кайтару",
        "recentchangesdays": "Соңгы үзгәртүләрне күрсәтүче көннәр саны:",
        "recentchangesdays-max": "(иң күбе $1 {{PLURAL:$1|көн}})",
        "recentchangescount": "Төп буларак кулланучы үзгәртүләр саны:",
-       "prefs-help-recentchangescount": "Ð\9cакÑ\81имÑ\83м Ñ\81ан: 1000",
+       "prefs-help-recentchangescount": "Ð\98Ò£ ÐºÒ¯Ð±Ðµ: 1000",
        "prefs-help-watchlist-token2": "Бу сезнең кузәтү исемлеге өчен ясалган веб-агымының серле ачкычы.\nАны белгән һәркем сезнең күзәтү исемлегегезне карый ала, шуңа да башкаларга аны күрсәтмәгез. [[Special:ResetTokens|Ачкычны ташларга теләсәгез, әлеге юрамага басыгыз]].",
        "savedprefs": "Көйләнмәләрегез сакланды.",
        "timezonelegend": "Сәгать поясы:",
        "timezoneregion-indian": "Һинд океаны",
        "timezoneregion-pacific": "Тын океан",
        "allowemail": "Башка кулланучыларга миңа хатлар язарга рөхсәт итү",
+       "email-allow-new-users-label": "Яңа кулланучылардан да электрон хатлар алуны рөхсәт итү",
+       "email-blacklist-label": "Әлеге кулланучыларга минем электрон почтага хат җибәрүне тыярга:",
        "prefs-searchoptions": "Эзләү",
        "prefs-namespaces": "Исемнәр мәйданы",
        "default": "килешү буенча",
        "prefs-editor": "Мөхәррир",
        "prefs-preview": "Алдан карау",
        "prefs-advancedrc": "Киңәйтелгән көйләүләр",
+       "prefs-opt-out": "Яхшыртулардан баш тарту",
        "prefs-advancedrendering": "Киңәйтелгән көйләүләр",
        "prefs-advancedsearchoptions": "Киңәйтелгән көйләүләр",
        "prefs-advancedwatchlist": "Киңәйтелгән көйләүләр",
        "userrights-changeable-col": "Сезнең тарафтан үзгәртелми торган төркемнәр",
        "userrights-unchangeable-col": "Сезнең тарафтан үзгәртелми торган төркемнәр",
        "userrights-irreversible-marker": "$1*",
+       "userrights-expiry-current": "$1 тәмамлана",
+       "userrights-expiry-none": "Чикләүсез",
        "userrights-expiry": "Бетә:",
+       "userrights-expiry-existing": "Хәзерге тәмамлану вакыты: $2 $3",
        "userrights-expiry-othertime": "Башка вакыт:",
        "userrights-expiry-options": "1 көн:1 day,1 атна:1 week,1 ай:1 month,3 ай:3 months,6 ай:6 months,1 ел:1 year",
+       "userrights-invalid-expiry": "«$1» төркеме өчен тәмамлану вакыты дөрес күрсәтеләгән.",
        "userrights-conflict": "Кулланучы хокукларын үзгәртү конфликты! Төзәтмәләрегезне тикшерегез, аннары кабатлагыз.",
        "group": "Төркем:",
        "group-user": "Кулланучылар",
        "group-autoconfirmed-member": "{{GENDER:$1|авторасланган кулланучы}}",
        "group-bot-member": "{{GENDER:$1|бот}}",
        "group-sysop-member": "{{GENDER:$1|идарәче}}",
+       "group-interface-admin-member": "{{GENDER:$1|интерфейс идарәчесе}}",
        "group-bureaucrat-member": "{{GENDER:$1|бюрократ}}",
        "group-suppress-member": "{{GENDER:$1|назир}}",
        "grouppage-user": "{{ns:project}}:Кулланучылар",
        "grouppage-autoconfirmed": "{{ns:project}}:Авторасланган кулланучылар",
        "grouppage-bot": "{{ns:project}}:Ботлар",
        "grouppage-sysop": "{{ns:project}}:Идарәчеләр",
+       "grouppage-interface-admin": "{{ns:project}}:Интерфейс идарәчесе",
        "grouppage-bureaucrat": "{{ns:project}}:Бюрократлар",
        "grouppage-suppress": "{{ns:project}}:Назирләр",
        "right-read": "Битләрне карау",
        "right-browsearchive": "Бетерелгән битләрне эзләү",
        "right-undelete": "Битләрне торгызу",
        "right-suppressionlog": "Шәхси журналларны карау",
+       "right-unblockself": "Үзеңне блоктан алу",
        "right-editinterface": "Кулланучы интерфейсын үзгәртү",
        "grant-group-email": "Хатлар җибәрү",
        "grant-uploadfile": "Яңа файллар йөкләү",
        "recentchanges-submit": "Күрсәт",
        "rcfilters-legend-heading": "<strong>Кыскартулар тезмәсе:&nbsp;</strong>",
        "rcfilters-activefilters": "Актив фильтрлар",
+       "rcfilters-activefilters-hide": "Яшер",
+       "rcfilters-activefilters-show": "Күрсәт",
        "rcfilters-limit-title": "Күрсәтү өчен үзгәртүләр",
        "rcfilters-days-title": "Соңгы көннәр",
        "rcfilters-hours-title": "Соңгы сәгатьләр",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|сәгать}}",
        "rcfilters-quickfilters": "Сакланган фильтрлар",
        "rcfilters-quickfilters-placeholder-title": "Әлегә сакланылган фильтрлар юк",
+       "rcfilters-savedqueries-rename": "Исемен үзгәртергә",
        "rcfilters-savedqueries-remove": "Бетерү",
        "rcfilters-savedqueries-new-name-label": "Исем",
+       "rcfilters-savedqueries-apply-label": "Фильтр кую",
        "rcfilters-savedqueries-cancel-label": "Баш тарту",
        "rcfilters-savedqueries-add-new-title": "Хәзерге фильтр көйләнмәләрен саклау",
        "rcfilters-clear-all-filters": "Барлык филтерләрне чистарту",
        "rcfilters-search-placeholder": "Фильтрланы соңгы үзгәртү (карау яисә кертүне башлау)",
+       "rcfilters-invalid-filter": "Яраксыз фильтр",
+       "rcfilters-filterlist-title": "Фильтрлар",
        "rcfilters-filterlist-feedbacklink": "Әлеге фильтрлау кораллары турында турында фикер калдырыгыз",
        "rcfilters-filtergroup-authorship": "Үзгәртүләрнең авторлыгы",
        "rcfilters-filter-editsbyself-label": "Сезнең үзгәртүләр",
        "rcfilters-filter-humans-label": "Кеше (бот түгел)",
        "rcfilters-filter-humans-description": "Кешеләр ясаган үзгәртүләр.",
        "rcfilters-filtergroup-reviewstatus": "Тикшерү статусы",
+       "rcfilters-filter-reviewstatus-auto-label": "Автотикшеренүчеләр",
+       "rcfilters-filtergroup-significance": "Мәгънәсе",
        "rcfilters-filter-minor-label": "Кече үзгәртүләр",
        "rcfilters-filter-minor-description": "«Кече үзгәртү» дип тамгаланган үзгәртүләр",
        "rcfilters-filter-major-label": "Гади үзгәртүләр",
        "rcfilters-filter-major-description": "«Кече» дип тамгаланмаган үзгәртүләр",
        "rcfilters-filtergroup-watchlist": "Күзәтү исемлегегездәге битләр",
+       "rcfilters-filter-watchlist-watched-label": "Күзәтү исемлегендә",
        "rcfilters-filtergroup-changetype": "Үзгәртү төре",
        "rcfilters-filter-pageedits-label": "Бит үзгәртүләре",
        "rcfilters-filter-newpages-label": "Бит төзүләре",
        "rcfilters-liveupdates-button": "Автоматик яңарту",
        "rcfilters-watchlist-markseen-button": "Бар үзгәртүләрне каралган дип билгеләргә",
        "rcfilters-watchlist-edit-watchlist-button": "Күзәтү исемлегегезне үзгәртү",
+       "rcfilters-preference-label": "«Соңгы үзгәртүләр» битенең яңа юрамасын яшерү",
        "rcnotefrom": "Астарак <strong>$3, $4</strong> өчен {{PLURAL:$5|үзгәртүләр күрсәтелгән}} (<strong>$1</strong> артык түгел).",
        "rclistfrom": "$3 $2 башлап яңа үзгәртүләрне күрсәт",
        "rcshowhideminor": "кече үзгәртүләрне $1",
        "filewasdeleted": "Мондый исемле файл бетерелгән булган инде. Зинһар,яңадан йөкләү алдыннан $1 карагыз",
        "filename-bad-prefix": "Файлның исеме '''«$1»''' дип башлана. Зинһар, файлны тасвирлаучы исем бирегез.",
        "filename-prefix-blacklist": " #<!-- ничек бар шулай калдырыгыз --> <pre>\n# Синтаксис төбәндәгечә:\n#   *  «#» дип башланган барлык нәрсә дә комментарий дип аталачак\n#   * Һәрбер буш рәт — файлның исеменең префиксы, цифрлы камера бирүче исем\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # кайсыбер кәрәзле телефоннар\nIMG # барлык\nJD # Jenoptik\nMGP # Pentax\nPICT # төрле\n #</pre> <!-- ничек бар шулай калдырыгыз -->",
+       "upload-proto-error": "Протокол дөрес түгел",
+       "upload-file-error": "Эчке хата",
+       "upload-misc-error": "Билгесез йөкләү хатасы",
        "upload-dialog-title": "Файл йөкләү",
        "upload-dialog-button-cancel": "Баш тарту",
        "upload-dialog-button-back": "Артка",
        "tags-deactivate": "сүндерү",
        "tags-hitcount": "$1 {{PLURAL:$1|үзгәртү}}",
        "tags-create-submit": "Төзү",
+       "tags-deactivate-submit": "Өзергә",
        "comparepages": "Битләрне чагыштыру",
        "compare-page1": "Беренче сәхифә",
        "compare-page2": "Икенче сәхифә",
index d75c43c..b5d8c64 100644 (file)
        "group-autoconfirmed-member": "{{GENDER:$1|автопідтверджений користувач|автопідтверджена користувачка}}",
        "group-bot-member": "{{GENDER:$1|бот}}",
        "group-sysop-member": "{{GENDER:$1|адміністратор|адміністраторка}}",
-       "group-interface-admin-member": "{{GENDER:$1|адміністратор інтерфейсу}}",
+       "group-interface-admin-member": "{{GENDER:$1|адміністратор інтерфейсу|адміністраторка інтерфейсу}}",
        "group-bureaucrat-member": "{{GENDER:$1|бюрократ|бюрократка}}",
        "group-suppress-member": "{{GENDER:$1|подавлювач|подавлювачка}}",
        "grouppage-user": "{{ns:project}}:Користувачі",
        "right-autoconfirmed": "без обмежень швидкості за IP",
        "right-bot": "автоматична обробка",
        "right-nominornewtalk": "незначні редагування на сторінках обговорень користувачів не викликають попередження про нові повідомлення",
-       "right-apihighlimits": "розширення обмежень на виконання API-запитів",
+       "right-apihighlimits": "використання вищих лімітів в API-запитах",
        "right-writeapi": "використання API для запису",
        "right-delete": "вилучення сторінок",
        "right-bigdelete": "вилучення сторінок з великою історією",
        "expiringblock": "закінчиться $1 $2",
        "anononlyblock": "тільки анонімів",
        "noautoblockblock": "автоблокування вимкнене",
-       "createaccountblock": "Створення облікових записів заблоковане",
+       "createaccountblock": "створення облікових записів заблоковане",
        "emailblock": "листи заборонені",
        "blocklist-nousertalk": "не може редагувати свою сторінку обговорення",
        "ipblocklist-empty": "Список блокувань порожній.",
        "print.css": "/* Розміщений тут CSS-код буде використаний для друкованої версії */",
        "noscript.css": "/* Розміщений тут CSS-код буде використаний для користувачів у яких вимкнено JavaScript */",
        "group-autoconfirmed.css": "/* Розміщений тут CSS-код буде використаний для автопідтверджених користувачів */",
+       "group-user.css": "/* CSS, прописані тут, вплинуть лише на зареєстрованих користувачів */",
        "group-bot.css": "/* Розміщений тут CSS-код буде використаний тільки для ботів */",
        "group-sysop.css": "/* Розміщений тут CSS-код буде використаний тільки для адміністраторів */",
        "group-bureaucrat.css": "/* Розміщений тут CSS-код буде використаний тільки для бюрократів */",
        "common.json": "/* Будь-який JSON тут завантажуватиметься для всіх користувачів при кожному завантаженні сторінки. */",
        "common.js": "/* Розміщений тут код JavaScript буде завантажений всім користувачам при зверненні до будь-якої сторінки */",
        "group-autoconfirmed.js": "/* Розміщений тут код JavaScript буде завантажений тільки для автопідтверджених користувачів */",
+       "group-user.js": "/* JS, прописана тут, вплине лише на зареєстрованих користувачів */",
        "group-bot.js": "/* Розміщений тут код JavaScript буде завантажений тільки для ботів */",
        "group-sysop.js": "/* Розміщений тут код JavaScript буде завантажений тільки для адміністраторів */",
        "group-bureaucrat.js": "/* Розміщений тут код JavaScript буде завантажений тільки для бюрократів */",
index 29e111e..ca421c9 100644 (file)
        "rcfilters-watchlist-showupdated": "تبدیلیوں کے رونما ہونے کے بعد جن صفحات کو آپ نے نہیں دیکھا وہ <strong>جلی</strong> حرفوں میں ٹھوس علامتوں کے ساتھ نظر آئیں گے۔",
        "rcfilters-preference-label": "حالیہ تبدیلیوں کا اصلاح شدہ نسخہ چھپائیں",
        "rcfilters-preference-help": "سنہ 2017ء کے انٹرفیس کو واپس لایا گیا ہے اور تمام آلات کو شامل کیا گیا ہے۔",
+       "rcfilters-watchlist-preference-label": "زیر نظر فہرست کے ترقی یافتہ نسخہ کو چھپائیں",
+       "rcfilters-watchlist-preference-help": "اسے فعال کرنے کے بعد 2017ء کا نسخہ واپس نافذ ہو جائے گا اور بعد میں شامل کیے جانے والے آلات بھی غیر فعال ہو جائیں گے۔",
        "rcfilters-filter-showlinkedfrom-label": "سے منسلک صفحات پر تبدیلیاں دکھائیں",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>صفحات سے منسلک</strong> چنندہ صفحہ",
        "rcfilters-filter-showlinkedto-label": "صفحات",
index 5df0228..0473e43 100644 (file)
@@ -84,7 +84,7 @@
        "tog-watchlisthidepatrolled": "Ẩn sửa đổi đã tuần tra trong danh sách theo dõi",
        "tog-watchlisthidecategorization": "Ẩn việc xếp thể loại",
        "tog-ccmeonemails": "Gửi bản sao cho tôi khi gửi thư điện tử cho người khác",
-       "tog-diffonly": "Không hiển thị nội dung trang dưới phần so sánh phiên bản",
+       "tog-diffonly": "Ẩn nội dung trang dưới phần so sánh phiên bản",
        "tog-showhiddencats": "Hiển thị thể loại ẩn",
        "tog-norollbackdiff": "Bỏ qua bản so sánh sau khi lùi sửa",
        "tog-useeditwarning": "Cảnh báo khi tôi thoát trang sửa đổi mà chưa lưu trang",
        "redirectedfrom": "(đổi hướng từ $1)",
        "redirectpagesub": "Trang đổi hướng",
        "redirectto": "Đổi hướng đến:",
-       "lastmodifiedat": "Trang này được sửa đổi lần cuối lúc $2 $1.",
+       "lastmodifiedat": "Trang này được sửa đổi lần cuối vào $1 lúc $2.",
        "viewcount": "Trang này đã được đọc {{PLURAL:$1|một|$1}} lần.",
        "protectedpage": "Trang bị khóa",
        "jumpto": "Bước tới:",
        "tooltip-pt-login": "Đăng nhập sẽ có lợi hơn, tuy nhiên không bắt buộc.",
        "tooltip-pt-login-private": "Bạn cần phải đăng nhập để sử dụng wiki này",
        "tooltip-pt-logout": "Đăng xuất",
-       "tooltip-pt-createaccount": "Khuyến khích bạn mở tài khoản và đăng nhập; tuy nhiên, không phải bắt buộc phải có tài khoản",
+       "tooltip-pt-createaccount": "Khuyến khích bạn mở tài khoản và đăng nhập; tuy nhiên, không bắt buộc phải có tài khoản",
        "tooltip-ca-talk": "Thảo luận về trang này",
        "tooltip-ca-edit": "Sửa đổi trang này",
        "tooltip-ca-addsection": "Bắt đầu một đề mục mới",
        "tooltip-t-contributions": "Danh sách đóng góp của {{GENDER:$1|người này}}",
        "tooltip-t-emailuser": "Gửi thư cho {{GENDER:$1|người dùng này}}",
        "tooltip-t-info": "Thêm chi tiết về trang này",
-       "tooltip-t-upload": "Tải hình ảnh hoặc tập tin lên",
+       "tooltip-t-upload": "Tải tập tin lên",
        "tooltip-t-specialpages": "Danh sách các trang đặc biệt",
        "tooltip-t-print": "Bản để in ra của trang",
        "tooltip-t-permalink": "Liên kết thường trực đến phiên bản này của trang",
index dfd60de..3ab8c74 100644 (file)
        "recentchanges-legend-heading": "<strong>Ledjinde:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vey eto l' [[Special:NewPages|djivêye des nouvès pådjes]])",
        "recentchanges-submit": "Vey",
+       "rcfilters-legend-heading": "<strong>Djivêye des acourtixheures:</strong>",
+       "rcfilters-group-results-by-page": "Rigrouper les rzultats d' ene minme pådje",
+       "rcfilters-activefilters": "Passetes en alaedje",
+       "rcfilters-activefilters-hide": "Catchî",
+       "rcfilters-activefilters-show": "Mostrer",
+       "rcfilters-limit-title": "Rizultats a mostrer",
+       "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|candjmint|candjmints}}, $2",
+       "rcfilters-date-popup-title": "Termene a cweri dvins",
+       "rcfilters-days-title": "Dierins djoûs",
+       "rcfilters-hours-title": "Dierinnès eures",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|djoû|djoûs}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|eure|eures}}",
+       "rcfilters-quickfilters": "Passetes schapêyes",
+       "rcfilters-filterlist-title": "Passetes",
+       "rcfilters-filter-editsbyself-label": "Vos candjmints",
+       "rcfilters-filter-editsbyself-description": "Les candjmints ki c' est vos-minme k' els a fwait.",
+       "rcfilters-filter-editsbyother-label": "Candjmint des ôtes",
+       "rcfilters-filter-editsbyother-description": "Tos les candjmints såf les cis da vosse.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Uzeus edjîstrés avou moens di 10 candjmints ou moens di cwate djoûs d' activité.",
+       "rcfilters-filter-user-experience-level-experienced-description": "Uzeus edjîstrés avou pus di 500 candjmints et 30 djoûs d' activité.",
+       "rcfilters-filter-bots-description": "Candjmints fwaits avou des usteyes otomatikes.",
+       "rcfilters-filter-humans-label": "Djin (nén robot)",
+       "rcfilters-filter-humans-description": "Candjmints fwaits pa des uzeus k' c' est des vraiyès djins.",
+       "rcfilters-filter-minor-label": "Pitits candjmints",
+       "rcfilters-filter-major-label": "Candjmints nén ptits",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Candjmints nén co veyous",
+       "rcfilters-filter-watchlistactivity-unseen-description": "Candjmints so des pådjes ki vos n' avoz nén co vizité dispoy ki l' candjmint a stî fwait.",
+       "rcfilters-filter-watchlistactivity-seen-label": "Candjmints ddja veyous",
+       "rcfilters-filter-watchlistactivity-seen-description": "Candjmints so des pådjes ki vos avoz ddja vizité dispoy ki l' candjmint a stî fwait.",
+       "rcfilters-filtergroup-changetype": "Sôre di candjmint",
+       "rcfilters-filter-pageedits-label": "Candjmints d' pådje",
+       "rcfilters-filter-pageedits-description": "Candjmints do contnou wiki, des berdelaedjes, des discrijhaedjes di categoreyes…",
+       "rcfilters-filter-newpages-label": "Ahivaedjes",
+       "rcfilters-filter-newpages-description": "Ahivaedjes di novelès pådjes.",
+       "rcfilters-filter-categorization-label": "Categorijhaedjes",
+       "rcfilters-filter-categorization-description": "Djournå des pådjes ki sont radjoutêyes ou rsaetcheyes des categoreyes",
+       "rcfilters-filter-logactions-label": "Accions ezès djournås",
+       "rcfilters-filter-logactions-description": "Accions di manaedjaedje, ahivaedje di contes, disfaçaedje di pådjes, eberwetaedjes di fitchîs...",
+       "rcfilters-filter-lastrevision-label": "Dierinne modêye",
+       "rcfilters-filter-lastrevision-description": "Seulmint l' dierin candjmint fwait so tchaeke pådje.",
+       "rcfilters-filter-excluded": "Esclu",
        "rcnotefrom": "Chal pa dzo {{PLURAL:$5|li candjmint fwait|les candjmints fwaits}} dispoy li <strong>$3, $4</strong> (afitchîs disk a <strong>$1</strong>).",
        "rclistfrom": "Mostrer les candjmints k' i gn a yeu a pårti do $3 $2",
        "rcshowhideminor": "$1 candjmints mineurs",
        "rcshowhidebots-show": "Mostrer",
        "rcshowhidebots-hide": "Catchî",
        "rcshowhideliu": "$1 uzeus edjîstrés",
+       "rcshowhideliu-show": "Vey",
        "rcshowhideliu-hide": "Catchî",
        "rcshowhideanons": "$1 uzeus anonimes",
        "rcshowhideanons-show": "Mostrer",
        "seconds": "$1 segonde{{PLURAL:$1||s}}",
        "minutes": "$1 munute{{PLURAL:$1||s}}",
        "hours": "$1 eures{{PLURAL:$1||s}}",
-       "days": "$1 djoû{{PLURAL:$1||s}}",
+       "days": "{{PLURAL:$1|$1 djoû|$1 djoûs}}",
        "ago": "i gn a $1",
        "bad_image_list": "Li fôrmat est l' shuvant:\n\nSeulmint les intrêyes di djivêye (dj' ô bén, les royes ki cmincèt avou ene sitoele «*») sont acontêyes.\nLi prumî loén d' ene roye doet esse on loyén viè on fitchî k' on vout bloker si eployaedje.\nLes ôtes loyéns dnés sol minme roye sont veyous come des foû-rîle, dj' ô bén les pådjes wice ki l' fitchî pout esse eployî",
        "metadata": "Meta-dnêyes",
        "exif-gpsspeed-k": "km/h",
        "exif-gpsspeed-m": "miles/h",
        "exif-gpsspeed-n": "nuks",
+       "exif-gpsdestdistance-k": "Kilometes",
        "namespacesall": "tos",
        "monthsall": "tos",
        "confirmemail": "Acertinaedje di l' adresse emile",
index 9cf7059..8e7d4db 100644 (file)
        "stub-threshold-disabled": "閂咗",
        "recentchangesdays": "最近更改中嘅顯示日數:",
        "recentchangesdays-max": "最多 $1 日",
-       "recentchangescount": "預設顯示嘅編輯數:",
+       "recentchangescount": "喺最近修改、版歷史同日誌度預設顯示嘅編輯數:",
        "prefs-help-recentchangescount": "最大數目:1000",
        "prefs-help-watchlist-token2": "呢個係網上訂閱你個監視清單嘅密匙。\n任何人只要知道個密匙,就會睇到你個監視清單,所以唔好畀人知。\n如果有需要嘅話,[[Special:ResetTokens|你可以重設佢]]。",
        "savedprefs": "你嘅喜好設定已經儲存。",
        "grant-createaccount": "開戶口",
        "grant-createeditmovepage": "開版、改版同搬版",
        "grant-delete": "刪版、修訂同日誌紀錄",
-       "grant-editinterface": "改 MediaWiki 空間名同用戶 CSS/JSON/JavaScript",
+       "grant-editinterface": "改MediaWiki空間名同成個網站/用戶嘅JSON",
        "grant-editmycssjs": "改你嘅用戶CSS/JSON/JavaScript",
        "grant-editmyoptions": "改你嘅用戶設定",
        "grant-editmywatchlist": "改你嘅監視清單",
        "upload-too-many-redirects": "個URL有太多跳轉",
        "upload-http-error": "一個HTTP錯誤發生咗: $1",
        "upload-copy-upload-invalid-domain": "從嗰個域名度冇複製上傳功能",
+       "upload-dialog-disabled": "呢個wiki停用咗用呢個對話框來上載檔案嘅功能。",
        "upload-dialog-title": "上載檔案",
        "upload-dialog-button-cancel": "取消",
        "upload-dialog-button-back": "返轉頭",
        "uploadstash-errclear": "清除檔案唔成功。",
        "uploadstash-refresh": "更新檔案清單",
        "uploadstash-thumbnail": "睇縮圖",
+       "uploadstash-bad-path-unknown-type": "未知嘅類型「$1」。",
        "invalid-chunk-offset": "非法偏移塊",
        "img-auth-accessdenied": "拒絕通行",
        "img-auth-nopathinfo": "PATH_INFO唔見咗。\n你嘅伺服器重未設定呢個資料。\n佢可能係CGI為本,唔支援img_auth。\n睇吓 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization 。",
        "http-timed-out": "HTTP請求已過時。",
        "http-curl-error": "擷取URL嗰陣出錯:$1",
        "http-bad-status": "當做緊HTTP請求嗰陣出現咗問題:$1 $2",
+       "http-internal-error": "HTTP内部錯。",
        "upload-curl-error6": "唔可以到嗰個URL",
        "upload-curl-error6-text": "輸入嘅URL唔能夠去到。請重新檢查個URL係正確嘅同埋個網站係已經上綫。",
        "upload-curl-error28": "上載遇時",
        "unwatchedpages": "未監視嘅頁面",
        "listredirects": "彈嚟彈去一覽",
        "listduplicatedfiles": "重覆檔案一覽",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]]同[[$3|{{PLURAL:$2|另外$2個檔案重複}}]]。",
        "unusedtemplates": "未用嘅模",
        "unusedtemplatestext": "呢一頁列示喺{{ns:template}}空間名未包括喺其它頁面嘅全部頁面。請記得喺刪除佢哋之前檢查其它連結到呢個模嘅頁面。",
        "unusedtemplateswlh": "其它連結",
        "apisandbox-reset": "清除",
        "apisandbox-retry": "再試過",
        "apisandbox-examples": "範例",
+       "apisandbox-deprecated-parameters": "停用嘅參數",
        "apisandbox-results": "結果",
        "apisandbox-request-url-label": "請求URL:",
        "apisandbox-request-json-label": "請求JSON:",
index fd74026..35e7097 100644 (file)
        "readonly_lag": "ⵜⴰⵙⵉⵍⴰ ⵏ ⵓⵙⴼⴽⴰ ⵜⵜⵡⴰⵔⴳⵍ ⵙ ⵡⵓⵔⵎⴰⵏ ⵃⵎⴰ ⴰⴷ ⵉⵥⴹⵉⵔⵏ ⵉⵎⴰⴽⴽⴰⵢⵏ ⵉⵙⵉⵏⴰⵏⵏ ⴰⴷ ⵍⴽⵎⵏ ⴰⵎⴰⴽⴽⴰⵢ ⴰⴷⵙⵍⴰⵏ",
        "internalerror": "ⴰⵣⴳⴰⵍ ⴰⴳⵏⵙⴰⵏ",
        "internalerror_info": "ⴰⵣⴳⴰⵍ ⴰⴳⵏⵙⴰⵏ : $1",
+       "filecopyerror": "ⵓⵔ ⵢⴰⵍⵍⴼⵓⵙ ⵓⵙⵙⵏⵖⵍ ⵏ ⵓⴼⴰⵢⵍⵓ \"$1\" ⵖⵔ \"$2\".",
        "filedeleteerror": "ⵓⵔ ⵜⴰⵍⵍⴼⵓⵙ ⵜⵓⴽⴽⵙⴰ ⵏ ⵓⴼⴰⵢⵍⵓ « $1 ».",
        "directorycreateerror": "ⵓⵔ ⵢⴰⵍⵍⴼⵓⵙ ⵓⵙⵏⵓⵍⴼⵓ ⵏ ⵓⴽⴰⵔⴰⵎ « $1 ».",
        "directoryreadonlyerror": "ⴰⴽⴰⵔⴰⵎ « $1 » ⵉⴳⴰ ⵖⴰⵙ ⵉ ⵜⵖⵔⵉ.",
        "actionthrottledtext": "ⴰⵎⵓⵔ ⵏⵏⴽ, ⴰⵔⵎ ⴷⵉⵖ ⴷⴼⴼⵉⵔ ⵢⴰⵏ ⵉⵎⵉⴽⴽ ⵏ ⵜⵓⵙⴷⵉⴷⵉⵏ.",
        "viewsourcetext": "ⵜⵣⵎⵔⴷ ⴰⴷ ⵜⵥⵔⴷ ⴷ ⴰⴷ ⵜⵙⵙⵏⵖⵍⴷ ⴰⵙⴰⴳⵎ ⵏ ⵜⴰⵙⵏⴰ ⴰⴷ",
        "exception-nologin": "ⵓⵔ ⵢⵓⴷⵉⴼ",
+       "exception-nologin-text": "ⴰⵎⵓⵔ ⵏⴽ ⴽⵛⵎ ⴼⴰⴷ ⴰ ⵜⵉⵥⴹⵓⵔⵜ ⴰⴷ ⵜⴽⵛⵎⴷ ⵙ ⵜⴰⵙⵏⴰ ⴰⴷ ⵏⵖ ⵜⵉⴳⴰⵡⵜ ⴰⴷ.",
+       "cannotlogoutnow-title": "ⵓⵔ ⵢⴰⵍⵍⴼⵓⵙ ⵡⵓⴼⵓⵖ ⴷⵖⵉⴽⴽ",
        "welcomeuser": "ⴰⵏⵙⵓⴼ, $1!",
        "yourname": "ⵉⵙⵎ ⵏ ⵓⵙⵎⵔⴰⵙ",
        "userlogin-yourname": "ⵉⵙⵎ ⵏ ⵓⵙⵎⵔⴰⵙ",
        "userlogin-yourpassword": "ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ",
        "userlogin-yourpassword-ph": "ⵙⵙⴽⵛⵎ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ ⵏⵏⴽ",
        "createacct-yourpassword-ph": "ⵙⵙⴽⵛⵎ ⴽⵔⴰ ⵏ ⵜⴳⵓⵔⵉ ⵏ ⵓⵣⴰⵔⵢ",
+       "yourpasswordagain": "ⴰⵔⴰ ⴷⴰⵖ ⵜⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ:",
        "createacct-yourpasswordagain": "ⵙⵙⵍⴽⵏ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ",
        "createacct-yourpasswordagain-ph": "ⵙⵙⴽⵛⵎ ⴷⴰⵖ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ",
        "userlogin-remembermypassword": "ⴰⴷⵊ ⵉⵢⵉ ⴽⵛⵎⵖ",
        "noemailcreate": "ⵉⵍⵍⴰ ⴼⵍⵍⴰⴽ ⴰⴷ ⵜⴼⴽⴷ ⴰⵏⵙⴰ ⴰⵍⵉⴽⵟⵕⵓⵏⵉ ⵉⵙⵖⵥⵏⵏ",
        "passwordsent": "ⵢⴰⵜ ⵜⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ ⵜⴰⵎⴰⵢⵏⵓⵜ ⵜⵢⴰⵣⴰⵏⵏ ⵙ ⵡⴰⵏⵙⴰ ⴰⵍⵉⴽⵟⵕⵓⵏⵉ ⵏ ⵓⵏⵙⵙⵎⵔⵙ \"$1\".\nⴰⵎⵓⵔ ⵏⴽ ⴽⵛⵎ ⴷⴰⵖ ⴽⵓⴷ ⵏⵏⴰ ⴽⵏ ⵜⵍⴽⵎ.",
        "blocked-mailpassword": "ⴰⵏⵙⴰ ⵏ IP ⵏⴽ ⵉⵜⵜⵡⴰⴷⴳⵍ ⵖⴼ ⵓⵙⵏⴼⵍ. ⵃⵎⴰ ⴰ ⵏⵙⵙⵉⵏⴼ ⴳⴰⵔ ⴰⵙⵙⵎⵔⵙ ⵓⵔ ⵜⵓⴼⵉⵜ ⴰ ⵜⵙⵎⵔⵙⴷ IP ⴰⴷ ⴳ ⵜⵔⴰⵔⵉⵜ ⵏ ⵜⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ.",
+       "emailconfirmlink": "ⵙⵙⵏⵜⵎ ⴰⵏⵙⴰ ⵏ ⵉⵎⴰⵢⵍ ⵏⵏⴽ",
+       "accountcreated": "ⵉⵜⵜⵓⵙⵏⵓⵍⴼⴰ ⵓⵎⵉⴹⴰⵏ",
+       "accountcreatedtext": "ⴰⵎⵉⴹⴰⵏ ⵏ ⵓⵙⵎⵔⴰⵙ ⵏ [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|ⵎⵙⴰⵡⴰⵍ]]) ⵉⵜⵜⵓⵙⵏⵓⵍⴼⴰ.",
+       "createaccount-title": "ⴰⵙⵏⵓⵍⴼⵓ ⵏ ⵓⵎⵉⴹⴰⵏ ⵉ {{SITENAME}}",
        "loginlanguagelabel": "ⵜⵓⵜⵍⴰⵢⵜ: $1",
        "pt-login": "ⴽⵛⵎ",
        "pt-login-button": "ⴽⵛⵎ",
+       "pt-login-continue-button": "ⴹⴼⵔ ⴰⴽⵛⵛⵓⵎ",
        "pt-createaccount": "ⵙⵏⴼⵍⵓⵍ ⴰⵎⵉⴹⴰⵏ",
        "pt-userlogout": "ⴼⴼⵖ",
+       "changepassword": "ⵙⵏⴼⵍ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ",
+       "resetpass_announce": "ⴰⴼⴰⴷ ⴰⴷ ⵜⵙⵎⴷⵜ ⴰⴽⵛⵛⵓⵎ, ⵉⵍⵍⴰ ⴼⵍⵍⴰⴽ ⴰⴷ ⵜⵙⴽⵔⵜ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ ⵜⴰⵎⴰⵢⵏⵓⵜ.",
        "resetpass_header": "ⵙⵏⴼⵍ ⵜⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ",
        "oldpassword": "ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ ⵜⴰⵇⴱⵓⵔⵜ",
        "newpassword": "ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ ⵜⴰⵎⴰⵢⵏⵓⵜ",
        "minoredit": "ⵡⴰ ⴷ ⴰⵙⵏⴼⵍ ⵓⵎⵥⵉⵢ",
        "watchthis": "ⵎⵎⴰⵜⵔ ⵜⴰⵙⵏⴰ ⴰⴷ",
        "savearticle": "ⵃⴹⵓ ⵜⴰⵙⵏⴰ",
+       "publishpage": "ⴼⵙⵔ ⵜⴰⵙⵏⴰ",
        "publishchanges": "ⴼⵙⵔ ⵉⵙⵏⴼⵍⵏ",
        "savearticle-start": "ⵃⴹⵓ ⵜⴰⵙⵏⴰ",
        "savechanges-start": "ⵃⴹⵓ ⵉⵙⵏⴼⵍⵏ",
        "diff-multi-sameuser": "({{PLURAL:$1|ⴽⵔⴰ ⵏ ⵓⵣⵣⵔⴰⵢ ⵉⵏⵏⵓⵎⵎⵙⵏ ⵉⵙⴽⵔ ⵓⵏⵙⵙⵎⵔⵙ ⵉⴳⴰⵏ ⵢⴰⵏ ⵓⵔ ⵜⴻⵜⵜⵓⵙⴽⴰⵏ|$1 ⴽⵔⴰ ⵏ ⵉⵣⵣⵔⴰⵢⵏ ⵉⵏⵏⵓⵎⵎⵙⵏ ⵉⵙⴽⵔ ⵓⵏⵙⵙⵎⵔⵙ ⵉⴳⴰⵏ ⵢⴰⵏ ⵓⵔ ⵜⵜⵓⵙⴽⴰⵏⴻⵏⵜ}})",
        "diff-multi-otherusers": "({{PLURAL:$1|ⵢⴰⵏ ⵓⵣⵣⵔⴰⵢ ⴰⵎⵏⵏⵓⵎⵎⵙ|$1 ⵏ ⵉⵣⵣⵔⴰⵢⵏ ⵉⵎⵏⵏⵓⵎⵎⵙⵏ}} ⵏ {{PLURAL:$2|ⵢⴰⵏ ⵓⵏⵙⵙⵎⵔⵙ ⵢⴰⴹⵏ|$2 ⵏ ⵉⵏⵙⵙⵎⵔⵙⵏ}} ⵓⵔ ⵉⵜⵜⵓⵙⴽⴰⵏⴻⵏ).",
        "searchresults": "ⵜⵉⵢⴰⴼⵓⵜⵉⵏ ⵏ ⵓⵔⵣⵣⵓ",
+       "search-filter-title-prefix-reset": "ⵔⵣⵓ ⵅⴼ ⵎⴰⵕⵕⴰ ⵜⴰⵙⵏⵉⵡⵉⵏ",
        "searchresults-title": "ⵜⵉⵢⴰⴼⵓⵜⵉⵏ ⵏ ⵓⵔⵣⵣⵓ ⵖⴼ \"$1\"",
        "prevn": "{{PLURAL:$1|$1}} ⵉⵎⵣⵡⵓⵔⴰ",
        "nextn": "{{PLURAL:$1|$1}} ⴰⵎⴹⴼⵉⵔ",
        "right-siteadmin": "ⵔⴳⵍ ⵏⵖ ⵔⵣⵎ ⵜⴰⵙⵉⵍⴰ ⵏ ⵉⵙⴼⴽⴰ",
        "right-override-export-depth": "ⵙⵉⴼⴹ ⵜⴰⵙⵏⵉⵡⵉⵏ ⴰⴽⴷ ⵜⴰⵙⵏⵉⵡⵉⵏ ⴷⵉⵜⵙⵏⵜ ⵉⵇⵇⵏⵏ ⴰⵔ ⵜⵉⵖⴱⵉ ⵏ 5",
        "right-sendemail": "ⴰⵣⵏ ⵜⴰⵎⵢⴰⵣⴰⵏⵜ ⵜⴰⵍⵉⴽⵟⵕⵓⵏⵉⵜ ⵉ ⵉⵏⵙⵙⵎⵔⵙⵏ ⵢⴰⴹⵏⵉⵏ",
-       "right-managechangetags": "ⵙⵏⴼⵍ ⴷ ⵙⵡⵓⵔⵉ'ⵙⴱⴷ) [[Special:Tags|ⵉⵔⵛⵓⵎⵏ]]",
+       "right-managechangetags": "ⵙⵏⴼⵍⵓⵍ ⴷ ⵙⵡⵓⵔⵉ(ⵙⴱⴷ) [[Special:Tags|ⵉⵔⵛⵓⵎⵏ]]",
        "right-applychangetags": "ⵙⵏⵉⵙ [[Special:Tags|ⵉⵔⵛⵓⵎⵏ]] ⴰⴽⴷ ⵉⵙⵏⴼⵍⵏ ⵏⵙⵏ",
        "right-changetags": "ⵔⵏⵓ ⴷ ⴽⴽⵙ ⵙ ⵓⵏⴰⵎⴽ ⴰⵏⴼⴳⵓⵔⴰⵏ [[Special:Tags|ⵉⵔⵛⵓⵎⵏ]] ⴳ ⵉⵎⵣⵣⵔⴰⵢⵏ ⵓⴼⵔⵉⴷⵏ ⴷ ⵉⵙⴽⵛⵓⵎⵏ ⵏ ⵜⵎⵙⴽⵜⵉⵜ",
        "right-deletechangetags": "ⴽⴽⵙ [[Special:Tags|ⵉⵔⵛⵓⵎⵏ]] ⵙⴳ ⵜⵙⵉⵍⴰ ⵏ ⵉⵙⴼⴽⴰ",
        "action-reupload": "ⵚⵚⴼⴹ ⴰⴼⴰⵢⵍⵓ ⵍⵍⵉ ⵢⴰⴷ ⵍⵍⵉ ⵉⵍⵍⴰⵏ",
        "action-delete": "ⴽⴽⵙ ⵜⴰⵙⵏⴰ ⴰⴷ",
        "action-deleterevision": "ⴽⴽⵙ ⴰⵣⵣⵔⴰⵢ ⴰⴷ",
-       "action-deletelogentry": "ⴽⴽâµ\99 âµ\9câ´°âµ\8eâµ\99â´½âµ\9câµ\89âµ\9c âµ\8f âµ\89âµ\99â´½âµ\9bâ´°âµ\8e",
+       "action-deletelogentry": "ⴽⴽâµ\99 âµ\89âµ\99â´½âµ\9bâ´°âµ\8eâµ\8f âµ\8f âµ\9câ´°âµ\8eâµ\99âµ\99â´½âµ\9câµ\89âµ\9c",
        "action-deletedhistory": "ⵥⵕ ⴰⵎⵣⵔⵓⵢ ⵏ ⴽⵔⴰ ⵏ ⵜⴰⵙⵏⴰ ⵉⵜⵜⵡⴰⴽⴽⵙⵏ",
        "action-deletedtext": "ⵥⵕ ⴰⵎⵣⵔⵓⵢ ⵏ ⵉⵣⵣⵔⴰⵢⵏ ⵉⵜⵜⵡⴰⴽⴽⵙⵏ",
        "action-browsearchive": "ⵔⵣⵓ ⵖⴼ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵍⵍⵉ ⵉⵜⵜⵡⴰⴽⴽⵙⵏ",
        "action-undelete": "ⵔⴰⵔ ⴷ ⵜⴰⵙⵏⵉⵡⵉⵏ",
        "action-suppressrevision": "ⴰⵏⵏⴰⵢ ⴷ ⵔⴰⵔ ⴷ ⵉⵣⵣⵔⴰⵢⵏ ⵉⵏⵜⵍⵏ",
-       "action-suppressionlog": "ⵙⴽⵏ ⵜⴰⵎⵙⴽⵜⵉⵜ ⴰⴷ ⵜⵓⵙⵍⵉⴳⵜ",
+       "action-suppressionlog": "âµ\99â´½âµ\8f âµ\9câ´°âµ\8eâµ\99âµ\99â´½âµ\9câµ\89âµ\9c â´°â´· âµ\9câµ\93âµ\99âµ\8dâµ\89â´³âµ\9c",
        "action-block": "ⴳⴷⵍ ⴰⵏⵙⵙⵎⵔⴰⵙⵏ ⴰⴷ ⵖⴼ ⵓⵙⵙⵏⴼⵍ",
        "action-protect": "ⵙⵏⴼⵍ ⴰⵙⵡⵉⵔ ⵏ ⵡⴰⵔⴰⵢ ⵏ ⵜⴰⵙⵏⴰ ⴰⴷ",
        "action-rollback": "ⵙⵓⵔⵔⵉ ⵉⵙⵏⴼⵍⵏ ⵏ ⵓⵏⵙⵙⵎⵔⵙ ⴰⵎⴳⴳⴰⵔⵓ ⵍⵍⵉ ⵉⵙⵏⴼⵍⵏ ⴽⵔⴰ ⵏ ⵜⴰⵙⵏⴰ ⵙⵜⴼⵙⵙⵉ",
index 5e80398..10922a6 100644 (file)
        "ns-specialprotected": "特殊页面不可编辑。",
        "titleprotected": "此标题已被[[User:$1|$1]]保护以防止创建。理由是<em>$2</em>。",
        "filereadonlyerror": "因为媒体库“$2”处于只读模式而无法修改文件“$1”。\n\n锁定数据库的系统管理员做出如下解释:“$3”。",
+       "invalidtitle": "无效标题",
        "invalidtitle-knownnamespace": "使用名字空间“$2”和文本“$3”的无效标题",
        "invalidtitle-unknownnamespace": "使用未知名字空间编号$1和文本“$2”的无效标题",
        "exception-nologin": "未登录",
        "filehist-filesize": "文件大小",
        "filehist-comment": "备注",
        "imagelinks": "文件用途",
-       "linkstoimage": "以下$1个页面链接至本文件:",
-       "linkstoimage-more": "超过$1个{{PLURAL:$1|页面链接至}}本文件。下面的列表只显示链接至本文件的{{PLURAL:$1|首个页面|前$1个页面}}。[[Special:WhatLinksHere/$2|完整列表]]。",
-       "nolinkstoimage": "没有页面链接到本文件。",
+       "linkstoimage": "以下{{PLURAL:$1|页面使用|$1个页面使用}}本文件:",
+       "linkstoimage-more": "超过$1个{{PLURAL:$1|页面使用}}本文件。下面的列表只显示使用本文件的{{PLURAL:$1|首个页面|前$1个页面}}。[[Special:WhatLinksHere/$2|完整列表]]。",
+       "nolinkstoimage": "没有页面使用本文件。",
        "morelinkstoimage": "查看连接到这个文件的[[Special:WhatLinksHere/$1|更多链接]]。",
        "linkstoimage-redirect": "$1(文件重定向)$2",
        "duplicatesoffile": "以下{{PLURAL:$1|文件|$1个文件}}是本文件的副本([[Special:FileDuplicateSearch/$2|更多细节]]):",
        "cachedspecial-refresh-now": "查看最新的。",
        "categories": "分类",
        "categories-submit": "显示",
-       "categoriespagetext": "以下{{PLURAL:$1|分类包含}}页面或媒体文件。[[Special:UnusedCategories|未使用分类]]不在这里显示。另请见[[Special:WantedCategories|需要的分类]]。",
+       "categoriespagetext": "以下{{PLURAL:$1|分类}}在wiki存在,并且可能被也可能未被使用。另见[[Special:WantedCategories|需要的分类]]。",
        "categoriesfrom": "显示分类开始于:",
        "deletedcontributions": "被删除的用户贡献",
        "deletedcontributions-title": "被删除的用户贡献",
index 03e8851..3d4a69c 100644 (file)
        "ns-specialprotected": "特殊頁面無法編輯。",
        "titleprotected": "此標題已經被 [[User:$1|$1]] 保護以防止建立,原因是 <em>$2</em>。",
        "filereadonlyerror": "無法修改檔案 \"$1\" 因為檔案庫 \"$2\" 目前處於唯讀模式。\n\n鎖定的系統管理員說明:\"$3\"。",
+       "invalidtitle": "無效標題",
        "invalidtitle-knownnamespace": "命名空間 \"$2\" 與名稱 \"$3\" 是無效的標題",
        "invalidtitle-unknownnamespace": "不明的命名空間編號 $1 與名稱 \"$2\" 是無效的標題",
        "exception-nologin": "未登入",
        "recentchanges-summary": "追蹤 Wiki 中此頁面的近期變更。",
        "recentchanges-noresult": "於指定時間內沒有符合條件的變更。",
        "recentchanges-timeout": "此搜尋已逾時。您可以採用不同的搜尋參數試試。",
-       "recentchanges-network": "由於技術方面的錯誤,沒有結果被載入。請嘗試重新整理頁面。",
+       "recentchanges-network": "由於技術錯誤,沒有載入任何結果。請嘗試重新整理頁面。",
        "recentchanges-notargetpage": "在上方輸入頁面名稱來查看相關於該頁面的變更。",
        "recentchanges-feed-description": "追蹤 Wiki 中此摘要的近期變更。",
        "recentchanges-label-newpage": "該編輯建立了新頁面",
        "upload-form-label-infoform-categories": "分類",
        "upload-form-label-infoform-date": "日期",
        "upload-form-label-own-work-message-generic-local": "我確定我上傳的檔案已遵守下列 {{SITENAME}} 的服務條款與授權條款。",
-       "upload-form-label-not-own-work-message-generic-local": "若您無法同意遵守 {{SITENAME}} 的政策上傳檔案,請關閉此對話框並嘗試其他方法。",
+       "upload-form-label-not-own-work-message-generic-local": "若您無法同意遵守{{SITENAME}}的政策上傳檔案,請關閉此對話框並嘗試其他方法。",
        "upload-form-label-not-own-work-local-generic-local": "您也可嘗試[[Special:Upload|預設的上傳頁面]]。",
        "upload-form-label-own-work-message-generic-foreign": "我明白我將上傳此檔案到一個共享的儲存庫,我確認已遵守本站的服務條款與授權政策。",
        "upload-form-label-not-own-work-message-generic-foreign": "若您無法同意遵守共享儲存庫的政策上傳檔案,請關閉此對話框並嘗試其他方法。",
        "watchlistanontext": "請先登入以檢視或修改在監視清單的項目。",
        "watchnologin": "尚未登入",
        "addwatch": "新增至監視清單",
-       "addedwatchtext": "已於[[Special:Watchlist|您的監視清單]]新增頁面 \"[[:$1]]\" 及其討論頁面。\n未來對此頁面及其關聯的對話頁面的變更將會在此清單中列出。",
+       "addedwatchtext": "「[[:$1]]」及其討論頁已加入至您的[[Special:Watchlist|監視列表]]中。",
        "addedwatchtext-talk": "\"[[:$1]]\" 及相關的頁面已加入至您的 [[Special:Watchlist|監視清單]]。",
        "addedwatchtext-short": "已於您的監視清單新增頁面 \"$1\"。",
        "removewatch": "從監視清單中移除",
        "blocklog-showsuppresslog": "此使用者先前被封鎖並且隱藏過。\n以下為禁止顯示紀錄以供參考:",
        "blocklogentry": "已封鎖 [[$1]] 的期限至 $2 $3",
        "reblock-logentry": "變更 [[$1]] 的封鎖設定,到期時間為 $2 $3",
-       "blocklogtext": "此為使用者的封鎖及取消封鎖動作的記錄。\n未列出自動封鎖的 IP 位址。\n請參考 [[Special:BlockList|封鎖清單]] 中的目前正在作業的阻止與封鎖。",
+       "blocklogtext": "此為使用者的封鎖及取消封鎖動作的記錄。未列出自動封鎖的IP位址。請參考[[Special:BlockList|封鎖清單]]中的目前正在作業的阻止與封鎖。",
        "unblocklogentry": "已解除封鎖 $1",
        "block-log-flags-anononly": "僅限匿名使用者",
        "block-log-flags-nocreate": "停用帳號建立",
        "anonusers": "{{SITENAME}} 匿名{{PLURAL:$2|使用者}} $1",
        "creditspage": "頁面製作群",
        "nocredits": "此頁面沒有製作群資訊。",
-       "spamprotectiontitle": "垃圾訊息過濾程式",
+       "spamprotectiontitle": "垃圾連結過濾器",
        "spamprotectiontext": "您輸入文字內容已被垃圾訊息過濾程式禁止儲存,可能因您的內容包含了已封鎖的外部連結。",
        "spamprotectionmatch": "以下文字內容觸發垃圾訊息過濾程式:$1",
        "spambot_username": "MediaWiki 垃圾訊息清理",
index 5db2062..759faf4 100644 (file)
@@ -77,6 +77,7 @@ $specialPageAliases = [
        'AllMyUploads'              => [ '모든내올린파일', '모든내파일' ],
        'Allpages'                  => [ '모든문서' ],
        'ApiHelp'                   => [ 'Api도움말' ],
+       'ApiSandbox'                => [ 'Api연습장' ],
        'Ancientpages'              => [ '오래된문서' ],
        'AutoblockList'             => [ '자동차단목록' ],
        'Badtitle'                  => [ '잘못된제목', '인식불가제목', '잘못된이름', '인식불가이름' ],
@@ -159,6 +160,7 @@ $specialPageAliases = [
        'Recentchanges'             => [ '최근바뀜' ],
        'Recentchangeslinked'       => [ '링크최근바뀜' ],
        'Redirect'                  => [ '넘겨주기' ],
+       'RemoveCredentials'         => [ '자격증명삭제', '자격증명제거' ],
        'ResetTokens'               => [ '토큰재설정' ],
        'Revisiondelete'            => [ '특정판삭제' ],
        'RunJobs'                   => [ '작업실행' ],
@@ -174,6 +176,7 @@ $specialPageAliases = [
        'Uncategorizedpages'        => [ '분류안된문서' ],
        'Uncategorizedtemplates'    => [ '분류안된틀' ],
        'Undelete'                  => [ '삭제취소', '삭제된문서' ],
+       'UnlinkAccounts'            => [ '계정연결해제' ],
        'Unlockdb'                  => [ 'DB잠금해제', 'DB잠금취소' ],
        'Unusedcategories'          => [ '안쓰는분류', '쓰이지않는분류' ],
        'Unusedimages'              => [ '안쓰는파일', '안쓰는그림', '쓰이지않는파일', '쓰이지않는그림' ],
diff --git a/languages/messages/MessagesMnw.php b/languages/messages/MessagesMnw.php
new file mode 100644 (file)
index 0000000..eea4896
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+/** Mon (ဘာသာ မန်)
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ */
+
+$fallback = 'my';
index 4ae1d9d..9dbb838 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Santali (sat)
+/** ᱥᱟᱱᱛᱟᱲᱤ (Santali)
  *
  * To improve a translation please visit https://translatewiki.net
  *
index 901e2aa..27276aa 100644 (file)
 $fallback = 'ur, pnb';
 
 $rtl = true;
+
+$digitTransformTable = [
+       '0' => '۰', # &#x06f0;
+       '1' => '۱', # &#x06f1;
+       '2' => '۲', # &#x06f2;
+       '3' => '۳', # &#x06f3;
+       '4' => '۴', # &#x06f4;
+       '5' => '۵', # &#x06f5;
+       '6' => '۶', # &#x06f6;
+       '7' => '۷', # &#x06f7;
+       '8' => '۸', # &#x06f8;
+       '9' => '۹', # &#x06f9;
+       '%' => '٪', # &#x066a;
+];
index bd107f5..59706d5 100644 (file)
@@ -55,11 +55,11 @@ $datePreferenceMigrationMap = [
 $dateFormats = [
        'dmy time' => 'H:i',
        'dmy date' => 'j xg Y',
-       'dmy both' => 'H:i، j xg Y',
+       'dmy both' => 'H:i, j xg Y',
 
        'persian time' => 'H:i',
        'persian date' => 'xij xiF xiY',
-       'persian both' => 'H:i، xij xiF xiY',
+       'persian both' => 'H:i, xij xiF xiY',
 
        'ISO 8601 time' => 'xnH:xni:xns',
        'ISO 8601 date' => 'xnY-xnm-xnd',
index d919249..286bd8f 100644 (file)
@@ -85,6 +85,9 @@ abstract class Maintenance {
        // This is the list of arguments that were actually passed
        protected $mArgs = [];
 
+       // Allow arbitrary options to be passed, or only specified ones?
+       protected $mAllowUnregisteredOptions = false;
+
        // Name of the script currently running
        protected $mSelf;
 
@@ -210,6 +213,16 @@ abstract class Maintenance {
         */
        abstract public function execute();
 
+       /**
+        * Checks to see if a particular option in supported.  Normally this means it
+        * has been registered by the script via addOption.
+        * @param string $name The name of the option
+        * @return bool true if the option exists, false otherwise
+        */
+       protected function supportsOption( $name ) {
+               return isset( $this->mParams[$name] );
+       }
+
        /**
         * Add a parameter to the script. Will be displayed on --help
         * with the associated description
@@ -238,8 +251,8 @@ abstract class Maintenance {
        }
 
        /**
-        * Checks to see if a particular param exists.
-        * @param string $name The name of the param
+        * Checks to see if a particular option exists.
+        * @param string $name The name of the option
         * @return bool
         */
        protected function hasOption( $name ) {
@@ -289,6 +302,15 @@ abstract class Maintenance {
                unset( $this->mParams[$name] );
        }
 
+       /**
+        * Sets whether to allow unregistered options, which are options passed to
+        * a script that do not match an expected parameter.
+        * @param bool $allow Should we allow?
+        */
+       protected function setAllowUnregisteredOptions( $allow ) {
+               $this->mAllowUnregisteredOptions = $allow;
+       }
+
        /**
         * Set the description text.
         * @param string $text The text of the description
@@ -974,6 +996,15 @@ abstract class Maintenance {
                                $die = true;
                        }
                }
+               if ( !$this->mAllowUnregisteredOptions ) {
+                       # Check for unexpected options
+                       foreach ( $this->mOptions as $opt => $val ) {
+                               if ( !$this->supportsOption( $opt ) ) {
+                                       $this->error( "Unexpected option $opt!" );
+                                       $die = true;
+                               }
+                       }
+               }
 
                if ( $die ) {
                        $this->maybeHelp( true );
index e1eef07..04aee80 100644 (file)
@@ -162,4 +162,18 @@ abstract class Benchmarker extends Maintenance {
                        $this->lang->formatSize( memory_get_peak_usage( true ) )
                ) );
        }
+
+       /**
+        * @since 1.32
+        * @param string $file Path to file (maybe compressed with gzip)
+        * @return string Contents of file
+        */
+       protected function loadFile( $file ) {
+               $content = file_get_contents( $file );
+               // Detect GZIP compression header
+               if ( substr( $content, 0, 2 ) === "\037\213" ) {
+                       $content = gzdecode( $content );
+               }
+               return $content;
+       }
 }
diff --git a/maintenance/benchmarks/australia-untidy.html.gz b/maintenance/benchmarks/australia-untidy.html.gz
deleted file mode 100644 (file)
index 148481d..0000000
Binary files a/maintenance/benchmarks/australia-untidy.html.gz and /dev/null differ
index a7d998d..8e2acb2 100644 (file)
@@ -61,15 +61,6 @@ class BenchmarkCSSMin extends Benchmarker {
                        ],
                ] );
        }
-
-       private function loadFile( $file ) {
-               $css = file_get_contents( $file );
-               // Detect GZIP compression header
-               if ( substr( $css, 0, 2 ) === "\037\213" ) {
-                       $css = gzdecode( $css );
-               }
-               return $css;
-       }
 }
 
 $maintClass = BenchmarkCSSMin::class;
diff --git a/maintenance/benchmarks/benchmarkJavaScriptMinifier.php b/maintenance/benchmarks/benchmarkJavaScriptMinifier.php
new file mode 100644 (file)
index 0000000..bb75660
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Benchmark
+ * @author Timo Tijhof
+ */
+
+require_once __DIR__ . '/Benchmarker.php';
+
+/**
+ * Maintenance script that benchmarks JavaScriptMinifier.
+ *
+ * @ingroup Benchmark
+ */
+class BenchmarkJavaScriptMinifier extends Benchmarker {
+       protected $defaultCount = 10;
+
+       public function __construct() {
+               parent::__construct();
+               $this->addDescription( 'Benchmark for JavaScriptMinifier.' );
+               $this->addOption( 'file', 'Path to JavaScript file (may be gzipped)', false, true );
+       }
+
+       public function execute() {
+               $file = $this->getOption( 'file', __DIR__ . '/jsmin/jquery-3.2.1.js.gz' );
+               $filename = basename( $file );
+               $content = $this->loadFile( $file );
+               if ( $content === false ) {
+                       $this->fatalError( 'Unable to open input file' );
+               }
+
+               $this->bench( [
+                       "minify ($filename)" => [
+                               'function' => [ JavaScriptMinifier::class, 'minify' ],
+                               'args' => [ $content ],
+                       ],
+               ] );
+       }
+}
+
+$maintClass = BenchmarkJavaScriptMinifier::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
index f2939b3..e9a30f9 100644 (file)
@@ -1,11 +1,13 @@
 <?php
 
-require __DIR__ . '/../Maintenance.php';
+use MediaWiki\MediaWikiServices;
 
-class BenchmarkTidy extends Maintenance {
+require __DIR__ . '/Benchmarker.php';
+
+class BenchmarkTidy extends Benchmarker {
        public function __construct() {
                parent::__construct();
-               $this->addOption( 'file', 'A filename which contains the input text', true, true );
+               $this->addOption( 'file', 'Path to file containing the input text', false, true );
                $this->addOption( 'driver', 'The Tidy driver name, or false to use the configured instance',
                        false,  true );
                $this->addOption( 'tidy-config', 'JSON encoded value for the tidy configuration array',
@@ -13,7 +15,8 @@ class BenchmarkTidy extends Maintenance {
        }
 
        public function execute() {
-               $html = file_get_contents( $this->getOption( 'file' ) );
+               $file = $this->getOption( 'file', __DIR__ . '/tidy/australia-untidy.html.gz' );
+               $html = $this->loadFile( $file );
                if ( $html === false ) {
                        $this->fatalError( "Unable to open input file" );
                }
@@ -35,8 +38,7 @@ class BenchmarkTidy extends Maintenance {
        }
 
        private function benchmark( $driver, $html ) {
-               global $wgContLang;
-
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                $times = [];
                $innerCount = 10;
                $outerCount = 10;
@@ -44,7 +46,7 @@ class BenchmarkTidy extends Maintenance {
                        $t = microtime( true );
                        for ( $i = 0; $i < $innerCount; $i++ ) {
                                $driver->tidy( $html );
-                               print $wgContLang->formatSize( memory_get_usage( true ) ) . "\n";
+                               print $contLang->formatSize( memory_get_usage( true ) ) . "\n";
                        }
                        $t = ( ( microtime( true ) - $t ) / $innerCount ) * 1000;
                        $times[] = $t;
@@ -67,10 +69,9 @@ class BenchmarkTidy extends Maintenance {
                print "Median: $median ms\n";
                print "Mean: $mean ms\n";
                print "Maximum: $max ms\n";
-               print "Memory usage: " .
-                       $wgContLang->formatSize( memory_get_usage( true ) ) . "\n";
+               print "Memory usage: " .  $contLang->formatSize( memory_get_usage( true ) ) . "\n";
                print "Peak memory usage: " .
-                       $wgContLang->formatSize( memory_get_peak_usage( true ) ) . "\n";
+                       $contLang->formatSize( memory_get_peak_usage( true ) ) . "\n";
        }
 }
 
diff --git a/maintenance/benchmarks/benchmarkTitleValue.php b/maintenance/benchmarks/benchmarkTitleValue.php
new file mode 100644 (file)
index 0000000..c60f4bb
--- /dev/null
@@ -0,0 +1,136 @@
+<?php
+/**
+ * Copyright (C) 2018 Kunal Mehta <legoktm@member.fsf.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+use MediaWiki\MediaWikiServices;
+
+require_once __DIR__ . '/Benchmarker.php';
+
+/**
+ * Maintenance script that benchmarks TitleValue vs Title.
+ *
+ * @ingroup Benchmark
+ */
+class BenchmarkTitleValue extends Benchmarker {
+
+       /**
+        * @var TitleFormatter
+        */
+       private $titleFormatter;
+       /**
+        * @var TitleParser
+        */
+       private $titleParser;
+
+       /**
+        * @var string
+        */
+       private $dbKey = 'FooBar';
+       /**
+        * @var TitleValue
+        */
+       private $titleValue;
+       /**
+        * @var Title
+        */
+       private $title;
+
+       /**
+        * @var string
+        */
+       private $toParse;
+
+       public function __construct() {
+               parent::__construct();
+               $this->addDescription( 'Benchmark TitleValue vs Title.' );
+       }
+
+       public function execute() {
+               $this->titleFormatter = MediaWikiServices::getInstance()->getTitleFormatter();
+               $this->titleParser = MediaWikiServices::getInstance()->getTitleParser();
+               $this->titleValue = $this->constructTitleValue();
+               $this->title = $this->constructTitle();
+               $this->toParse = 'Category:FooBar';
+               $this->bench( [
+                       [
+                               'function' => [ $this, 'constructTitleValue' ],
+                       ],
+                       [
+                               'function' => [ $this, 'constructTitle' ],
+                       ],
+                       [
+                               'function' => [ $this, 'constructTitleSafe' ],
+                       ],
+                       [
+                               'function' => [ $this, 'getPrefixedTextTitleValue' ],
+                       ],
+                       [
+                               'function' => [ $this, 'getPrefixedTextTitle' ],
+                       ],
+                       [
+                               'function' => [ $this, 'parseTitleValue' ],
+                               'setup' => [ $this, 'randomize' ],
+                       ],
+                       [
+                               'function' => [ $this, 'parseTitle' ],
+                               'setup' => [ $this, 'randomize' ],
+                       ],
+               ] );
+       }
+
+       /**
+        * Use a different dbKey each time to avoid influence of Title caches
+        */
+       protected function randomize() {
+               $this->dbKey = ucfirst( wfRandomString( 10 ) );
+       }
+
+       protected function constructTitleValue() {
+               return new TitleValue( NS_CATEGORY, $this->dbKey );
+       }
+
+       protected function constructTitle() {
+               return Title::makeTitle( NS_CATEGORY, $this->dbKey );
+       }
+
+       protected function constructTitleSafe() {
+               return Title::makeTitleSafe( NS_CATEGORY, $this->dbKey );
+       }
+
+       protected function getPrefixedTextTitleValue() {
+               // This is really showing TitleFormatter aka MediaWikiTitleCodec perf
+               return $this->titleFormatter->getPrefixedText( $this->titleValue );
+       }
+
+       protected function getPrefixedTextTitle() {
+               return $this->title->getPrefixedText();
+       }
+
+       protected function parseTitleValue() {
+               // This is really showing TitleParser aka MediaWikiTitleCodec perf
+               $this->titleParser->parseTitle( 'Category:' . $this->dbKey, NS_MAIN );
+       }
+
+       protected function parseTitle() {
+               Title::newFromText( 'Category:' . $this->dbKey );
+       }
+}
+
+$maintClass = BenchmarkTitleValue::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/benchmarks/jsmin/jquery-3.2.1.js.gz b/maintenance/benchmarks/jsmin/jquery-3.2.1.js.gz
new file mode 100644 (file)
index 0000000..2e8e9b2
Binary files /dev/null and b/maintenance/benchmarks/jsmin/jquery-3.2.1.js.gz differ
diff --git a/maintenance/benchmarks/tidy/australia-untidy.html.gz b/maintenance/benchmarks/tidy/australia-untidy.html.gz
new file mode 100644 (file)
index 0000000..148481d
Binary files /dev/null and b/maintenance/benchmarks/tidy/australia-untidy.html.gz differ
index bf7a22d..d613352 100644 (file)
@@ -39,6 +39,20 @@ INSERT DATA {
 
 SPARQL;
 
+       /**
+        * Delete query
+        */
+       const SPARQL_DELETE = <<<SPARQLD
+DELETE {
+?category ?x ?y
+} WHERE {
+   VALUES ?category {
+     %s
+   }
+};
+
+SPARQLD;
+
        /**
         * Delete/Insert query
         */
@@ -102,8 +116,8 @@ SPARQLDI;
                global $wgRCMaxAge;
 
                $this->initialize();
-
                $startTS = new MWTimestamp( $this->getOption( "start" ) );
+
                $endTS = new MWTimestamp( $this->getOption( "end" ) );
                $now = new MWTimestamp();
 
@@ -150,6 +164,18 @@ SPARQLDI;
                fwrite( $output, $this->updateTS( $this->endTS ) );
        }
 
+       /**
+        * Get the text of SPARQL INSERT DATA clause
+        * @return string
+        */
+       private function getInsertRdf() {
+               $rdfText = $this->getRdf();
+               if ( !$rdfText ) {
+                       return "";
+               }
+               return sprintf( self::SPARQL_INSERT, $rdfText );
+       }
+
        /**
         * Get SPARQL for updating set of categories
         * @param IDatabase $dbr
@@ -167,9 +193,8 @@ SPARQLDI;
                        $this->writeParentCategories( $dbr, $pages );
                }
 
-               return "# $mark\n" . sprintf( self::SPARQL_DELETE_INSERT,
-                               $this->getRdf(),
-                               implode( ' ', $deleteUrls ) );
+               return "# $mark\n" . sprintf( self::SPARQL_DELETE, implode( ' ', $deleteUrls ) ) .
+                       $this->getInsertRdf();
        }
 
        /**
@@ -483,7 +508,7 @@ SPARQL;
 
                        $this->writeParentCategories( $dbr, $pages );
 
-                       fwrite( $output, sprintf( self::SPARQL_INSERT, $this->getRdf() ) );
+                       fwrite( $output, $this->getInsertRdf() );
                }
        }
 
@@ -510,7 +535,7 @@ SPARQL;
                        }
 
                        $this->writeParentCategories( $dbr, $pages );
-                       fwrite( $output, sprintf( self::SPARQL_INSERT, $this->getRdf() ) );
+                       fwrite( $output, $this->getInsertRdf() );
                }
        }
 
index 2b47056..1b49f0e 100644 (file)
@@ -29,6 +29,8 @@
  * @ingroup Maintenance
  */
 
+use MediaWiki\MediaWikiServices;
+
 require_once __DIR__ . '/cleanupTable.inc';
 
 /**
@@ -71,12 +73,10 @@ class CleanupCaps extends TableCleanup {
        }
 
        protected function processRowToUppercase( $row ) {
-               global $wgContLang;
-
                $current = Title::makeTitle( $row->page_namespace, $row->page_title );
                $display = $current->getPrefixedText();
                $lower = $row->page_title;
-               $upper = $wgContLang->ucfirst( $row->page_title );
+               $upper = MediaWikiServices::getInstance()->getContentLanguage()->ucfirst( $row->page_title );
                if ( $upper == $lower ) {
                        $this->output( "\"$display\" already uppercase.\n" );
 
@@ -109,12 +109,10 @@ class CleanupCaps extends TableCleanup {
        }
 
        protected function processRowToLowercase( $row ) {
-               global $wgContLang;
-
                $current = Title::makeTitle( $row->page_namespace, $row->page_title );
                $display = $current->getPrefixedText();
                $upper = $row->page_title;
-               $lower = $wgContLang->lcfirst( $row->page_title );
+               $lower = MediaWikiServices::getInstance()->getContentLanguage()->lcfirst( $row->page_title );
                if ( $upper == $lower ) {
                        $this->output( "\"$display\" already lowercase.\n" );
 
index 90364e2..305a41d 100644 (file)
@@ -25,6 +25,8 @@
  * @ingroup Maintenance
  */
 
+use MediaWiki\MediaWikiServices;
+
 require_once __DIR__ . '/cleanupTable.inc';
 
 /**
@@ -46,8 +48,6 @@ class CleanupImages extends TableCleanup {
        }
 
        protected function processRow( $row ) {
-               global $wgContLang;
-
                $source = $row->img_name;
                if ( $source == '' ) {
                        // Ye olde empty rows. Just kill them.
@@ -64,11 +64,13 @@ class CleanupImages extends TableCleanup {
                // We also have some HTML entities there
                $cleaned = Sanitizer::decodeCharReferences( $cleaned );
 
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+
                // Some are old latin-1
-               $cleaned = $wgContLang->checkTitleEncoding( $cleaned );
+               $cleaned = $contLang->checkTitleEncoding( $cleaned );
 
                // Many of remainder look like non-normalized unicode
-               $cleaned = $wgContLang->normalize( $cleaned );
+               $cleaned = $contLang->normalize( $cleaned );
 
                $title = Title::makeTitleSafe( NS_FILE, $cleaned );
 
index 234e1b1..7f0e340 100644 (file)
@@ -45,9 +45,8 @@ class TitleCleanup extends TableCleanup {
         * @param object $row
         */
        protected function processRow( $row ) {
-               global $wgContLang;
                $display = Title::makeName( $row->page_namespace, $row->page_title );
-               $verified = $wgContLang->normalize( $display );
+               $verified = MediaWikiServices::getInstance()->getContentLanguage()->normalize( $display );
                $title = Title::newFromText( $verified );
 
                if ( !is_null( $title )
index 5e3aee7..8e4a353 100644 (file)
@@ -29,6 +29,8 @@
  * @ingroup Maintenance
  */
 
+use MediaWiki\MediaWikiServices;
+
 require_once __DIR__ . '/cleanupTable.inc';
 
 /**
@@ -58,10 +60,9 @@ class CleanupWatchlist extends TableCleanup {
        }
 
        protected function processRow( $row ) {
-               global $wgContLang;
                $current = Title::makeTitle( $row->wl_namespace, $row->wl_title );
                $display = $current->getPrefixedText();
-               $verified = $wgContLang->normalize( $display );
+               $verified = MediaWikiServices::getInstance()->getContentLanguage()->normalize( $display );
                $title = Title::newFromText( $verified );
 
                if ( $row->wl_user == 0 || is_null( $title ) || !$title->equals( $current ) ) {
index 8232d52..bb1443f 100644 (file)
@@ -24,7 +24,7 @@
 require_once __DIR__ . '/Maintenance.php';
 
 // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
-global $optionsWithArgs, $optionsWithoutArgs;
+global $optionsWithArgs, $optionsWithoutArgs, $allowUnregisteredOptions;
 
 if ( !isset( $optionsWithArgs ) ) {
        $optionsWithArgs = [];
@@ -32,19 +32,25 @@ if ( !isset( $optionsWithArgs ) ) {
 if ( !isset( $optionsWithoutArgs ) ) {
        $optionsWithoutArgs = [];
 }
+if ( !isset( $allowUnregisteredOptions ) ) {
+       $allowUnregisteredOptions = false;
+}
 
 class CommandLineInc extends Maintenance {
        public function __construct() {
                // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
-               global $optionsWithArgs, $optionsWithoutArgs;
+               global $optionsWithArgs, $optionsWithoutArgs, $allowUnregisteredOptions;
 
                parent::__construct();
+
                foreach ( $optionsWithArgs as $name ) {
                        $this->addOption( $name, '', false, true );
                }
                foreach ( $optionsWithoutArgs as $name ) {
                        $this->addOption( $name, '', false, false );
                }
+
+               $this->setAllowUnregisteredOptions( $allowUnregisteredOptions );
        }
 
        /**
index 8cd0297..af60eaa 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Maintenance
  */
 
+use MediaWiki\MediaWikiServices;
+
 require_once __DIR__ . '/Maintenance.php';
 
 /**
@@ -75,8 +77,6 @@ class ConvertLinks extends Maintenance {
                        return;
                }
 
-               global $wgContLang;
-
                # counters etc
                $numBadLinks = $curRowsRead = 0;
 
@@ -153,7 +153,8 @@ class ConvertLinks extends Maintenance {
                        foreach ( $res as $row ) {
                                $title = $row->cur_title;
                                if ( $row->cur_namespace ) {
-                                       $title = $wgContLang->getNsText( $row->cur_namespace ) . ":$title";
+                                       $title = MediaWikiServices::getInstance()->getContentLanguage()->
+                                               getNsText( $row->cur_namespace ) . ":$title";
                                }
                                $ids[$title] = $row->cur_id;
                                $curRowsRead++;
index cd9ef11..89885d2 100644 (file)
@@ -19,6 +19,8 @@
  * @ingroup Maintenance
  */
 
+use MediaWiki\MediaWikiServices;
+
 require_once __DIR__ . '/Maintenance.php';
 
 /**
@@ -44,15 +46,14 @@ class DeleteEqualMessages extends Maintenance {
         * @param array &$messageInfo
         */
        protected function fetchMessageInfo( $langCode, array &$messageInfo ) {
-               global $wgContLang;
-
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                if ( $langCode ) {
                        $this->output( "\n... fetching message info for language: $langCode" );
-                       $nonContLang = true;
+                       $nonContentLanguage = true;
                } else {
                        $this->output( "\n... fetching message info for content language" );
-                       $langCode = $wgContLang->getCode();
-                       $nonContLang = false;
+                       $langCode = $contLang->getCode();
+                       $nonContentLanguage = false;
                }
 
                /* Based on SpecialAllmessages::reallyDoQuery #filter=modified */
@@ -60,12 +61,12 @@ class DeleteEqualMessages extends Maintenance {
                $l10nCache = Language::getLocalisationCache();
                $messageNames = $l10nCache->getSubitemList( 'en', 'messages' );
                // Normalise message names for NS_MEDIAWIKI page_title
-               $messageNames = array_map( [ $wgContLang, 'ucfirst' ], $messageNames );
+               $messageNames = array_map( [ $contLang, 'ucfirst' ], $messageNames );
 
                $statuses = AllMessagesTablePager::getCustomisedStatuses(
-                       $messageNames, $langCode, $nonContLang );
+                       $messageNames, $langCode, $nonContentLanguage );
                // getCustomisedStatuses is stripping the sub page from the page titles, add it back
-               $titleSuffix = $nonContLang ? "/$langCode" : '';
+               $titleSuffix = $nonContentLanguage ? "/$langCode" : '';
 
                foreach ( $messageNames as $key ) {
                        $customised = isset( $statuses['pages'][$key] );
index 95dd4da..05db622 100644 (file)
@@ -127,6 +127,7 @@ TEXT
                        'first pageid written for the first %s (required) and the last pageid written for the ' .
                        'second %s if it exists.', false, true, false, true ); // This can be specified multiple times
                $this->addOption( 'quiet', 'Don\'t dump status reports to stderr.' );
+               $this->addOption( 'full', 'Dump all revisions of every page' );
                $this->addOption( 'current', 'Base ETA on number of pages in database instead of all revisions' );
                $this->addOption( 'spawn', 'Spawn a subprocess for loading text records' );
                $this->addOption( 'buffersize', 'Buffer size in bytes to use for reading the stub. ' .
@@ -705,7 +706,6 @@ TEXT
         * @throws MWException
         */
        private function getTextDb( $id ) {
-               global $wgContLang;
                if ( !isset( $this->db ) ) {
                        throw new MWException( __METHOD__ . "No database available" );
                }
@@ -718,7 +718,8 @@ TEXT
                        return false;
                }
                $stripped = str_replace( "\r", "", $text );
-               $normalized = $wgContLang->normalize( $stripped );
+               $normalized = MediaWikiServices::getInstance()->getContentLanguage()->
+                       normalize( $stripped );
 
                return $normalized;
        }
@@ -797,8 +798,6 @@ TEXT
        }
 
        private function getTextSpawnedOnce( $id ) {
-               global $wgContLang;
-
                $ok = fwrite( $this->spawnWrite, "$id\n" );
                // $this->progress( ">> $id" );
                if ( !$ok ) {
@@ -853,7 +852,8 @@ TEXT
 
                // Do normalization in the dump thread...
                $stripped = str_replace( "\r", "", $text );
-               $normalized = $wgContLang->normalize( $stripped );
+               $normalized = MediaWikiServices::getInstance()->getContentLanguage()->
+                       normalize( $stripped );
 
                return $normalized;
        }
index ff3e2fc..70fdebf 100644 (file)
@@ -26,6 +26,8 @@
  * @see http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd
  */
 
+use MediaWiki\MediaWikiServices;
+
 require_once __DIR__ . '/Maintenance.php';
 
 /**
@@ -316,7 +318,7 @@ class GenerateSitemap extends Maintenance {
         * Main loop
         */
        public function main() {
-               global $wgContLang;
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
 
                fwrite( $this->findex, $this->openIndex() );
 
@@ -327,7 +329,7 @@ class GenerateSitemap extends Maintenance {
                        $length = $this->limit[0];
                        $i = $smcount = 0;
 
-                       $fns = $wgContLang->getFormattedNsText( $namespace );
+                       $fns = $contLang->getFormattedNsText( $namespace );
                        $this->output( "$namespace ($fns)\n" );
                        $skippedRedirects = 0; // Number of redirects skipped for that namespace
                        foreach ( $res as $row ) {
@@ -358,10 +360,10 @@ class GenerateSitemap extends Maintenance {
                                $length += strlen( $entry );
                                $this->write( $this->file, $entry );
                                // generate pages for language variants
-                               if ( $wgContLang->hasVariants() ) {
-                                       $variants = $wgContLang->getVariants();
+                               if ( $contLang->hasVariants() ) {
+                                       $variants = $contLang->getVariants();
                                        foreach ( $variants as $vCode ) {
-                                               if ( $vCode == $wgContLang->getCode() ) {
+                                               if ( $vCode == $contLang->getCode() ) {
                                                        continue; // we don't want default variant
                                                }
                                                $entry = $this->fileEntry(
index 965906f..9834473 100644 (file)
@@ -24,6 +24,8 @@
  * @ingroup Maintenance
  */
 
+use MediaWiki\MediaWikiServices;
+
 require_once __DIR__ . '/Maintenance.php';
 
 /**
@@ -131,13 +133,13 @@ TEXT
        }
 
        private function getNsIndex( $namespace ) {
-               global $wgContLang;
-               $result = $wgContLang->getNsIndex( $namespace );
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               $result = $contLang->getNsIndex( $namespace );
                if ( $result !== false ) {
                        return $result;
                }
                $ns = intval( $namespace );
-               if ( strval( $ns ) === $namespace && $wgContLang->getNsText( $ns ) !== false ) {
+               if ( strval( $ns ) === $namespace && $contLang->getNsText( $ns ) !== false ) {
                        return $ns;
                }
                $this->fatalError( "Unknown namespace text / index specified: $namespace" );
index 2c7cd68..7913aab 100644 (file)
@@ -35,7 +35,9 @@
        </script>
        <script>
                // Mock startup.js
-               var mwNow = Date.now;
+               window.$VARS = {
+                       baseModules: []
+               };
 
                function startUp() {
                        mw.config = new mw.Map();
index 543ee06..949ce48 100644 (file)
@@ -20,7 +20,7 @@
  *
  * @file
  * @ingroup MaintenanceLanguage
- * @todo Make this more useful, right now just dumps $wgContLang
+ * @todo Make this more useful, right now just dumps content language
  */
 
 require_once __DIR__ . '/../Maintenance.php';
index 71241e7..075d6f2 100644 (file)
@@ -104,14 +104,15 @@ class NamespaceDupes extends Maintenance {
         * @return bool
         */
        private function checkAll( $options ) {
-               global $wgContLang, $wgNamespaceAliases, $wgCapitalLinks;
+               global $wgNamespaceAliases, $wgCapitalLinks;
 
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                $spaces = [];
 
                // List interwikis first, so they'll be overridden
                // by any conflicting local namespaces.
                foreach ( $this->getInterwikiList() as $prefix ) {
-                       $name = $wgContLang->ucfirst( $prefix );
+                       $name = $contLang->ucfirst( $prefix );
                        $spaces[$name] = 0;
                }
 
@@ -122,7 +123,7 @@ class NamespaceDupes extends Maintenance {
                                $spaces[$name] = $ns;
                        }
                }
-               foreach ( $wgContLang->getNamespaces() as $ns => $name ) {
+               foreach ( $contLang->getNamespaces() as $ns => $name ) {
                        if ( $name !== '' ) {
                                $spaces[$name] = $ns;
                        }
@@ -130,7 +131,7 @@ class NamespaceDupes extends Maintenance {
                foreach ( $wgNamespaceAliases as $name => $ns ) {
                        $spaces[$name] = $ns;
                }
-               foreach ( $wgContLang->getNamespaceAliases() as $name => $ns ) {
+               foreach ( $contLang->getNamespaceAliases() as $name => $ns ) {
                        $spaces[$name] = $ns;
                }
 
@@ -138,17 +139,17 @@ class NamespaceDupes extends Maintenance {
                // since we're doing case-sensitive searches in the db.
                foreach ( $spaces as $name => $ns ) {
                        $moreNames = [];
-                       $moreNames[] = $wgContLang->uc( $name );
-                       $moreNames[] = $wgContLang->ucfirst( $wgContLang->lc( $name ) );
-                       $moreNames[] = $wgContLang->ucwords( $name );
-                       $moreNames[] = $wgContLang->ucwords( $wgContLang->lc( $name ) );
-                       $moreNames[] = $wgContLang->ucwordbreaks( $name );
-                       $moreNames[] = $wgContLang->ucwordbreaks( $wgContLang->lc( $name ) );
+                       $moreNames[] = $contLang->uc( $name );
+                       $moreNames[] = $contLang->ucfirst( $contLang->lc( $name ) );
+                       $moreNames[] = $contLang->ucwords( $name );
+                       $moreNames[] = $contLang->ucwords( $contLang->lc( $name ) );
+                       $moreNames[] = $contLang->ucwordbreaks( $name );
+                       $moreNames[] = $contLang->ucwordbreaks( $contLang->lc( $name ) );
                        if ( !$wgCapitalLinks ) {
                                foreach ( $moreNames as $altName ) {
-                                       $moreNames[] = $wgContLang->lcfirst( $altName );
+                                       $moreNames[] = $contLang->lcfirst( $altName );
                                }
-                               $moreNames[] = $wgContLang->lcfirst( $name );
+                               $moreNames[] = $contLang->lcfirst( $name );
                        }
                        foreach ( array_unique( $moreNames ) as $altName ) {
                                if ( $altName !== $name ) {
index d7decc1..fad4e7d 100644 (file)
@@ -30,6 +30,7 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IMaintainableDatabase;
 
 /**
@@ -97,8 +98,6 @@ class Orphans extends Maintenance {
                );
                $orphans = $result->numRows();
                if ( $orphans > 0 ) {
-                       global $wgContLang;
-
                        $this->output( "$orphans orphan revisions...\n" );
                        $this->output( sprintf(
                                "%10s %10s %14s %20s %s\n",
@@ -107,10 +106,11 @@ class Orphans extends Maintenance {
 
                        foreach ( $result as $row ) {
                                $comment = $commentStore->getComment( 'rev_comment', $row )->text;
+                               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                                if ( $comment !== '' ) {
-                                       $comment = '(' . $wgContLang->truncateForVisual( $comment, 40 ) . ')';
+                                       $comment = '(' . $contLang->truncateForVisual( $comment, 40 ) . ')';
                                }
-                               $rev_user_text = $wgContLang->truncateForVisual( $row->rev_user_text, 20 );
+                               $rev_user_text = $contLang->truncateForVisual( $row->rev_user_text, 20 );
                                # pad $rev_user_text to 20 characters.  Note that this may
                                # yield poor results if $rev_user_text contains combining
                                # or half-width characters.  Alas.
index cf2fe54..d9a247c 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use MediaWiki\MediaWikiServices;
+
 /**
  * Parse some wikitext.
  *
@@ -103,9 +106,7 @@ class CLIParser extends Maintenance {
        }
 
        protected function initParser() {
-               global $wgParserConf;
-               $parserClass = $wgParserConf['class'];
-               $this->parser = new $parserClass();
+               $this->parser = MediaWikiServices::getInstance()->getParserFactory()->create();
        }
 
        /**
index 2503ed2..d5d27ad 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Maintenance
  */
 
+use MediaWiki\MediaWikiServices;
+
 $optionsWithoutArgs = [ 'verbose' ];
 require_once __DIR__ . '/commandLine.inc';
 
@@ -123,8 +125,7 @@ class PPFuzzTester {
                // This resolves a few differences between the old preprocessor and the
                // XML-based one, which doesn't like illegals and converts line endings.
                // It's done by the MW UI, so it's a reasonably legitimate thing to do.
-               global $wgContLang;
-               $s = $wgContLang->normalize( $s );
+               $s = MediaWikiServices::getInstance()->getContentLanguage()->normalize( $s );
 
                return $s;
        }
index 713492a..c0de334 100644 (file)
@@ -32,6 +32,7 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IMaintainableDatabase;
 
 /**
@@ -193,11 +194,10 @@ class ImageBuilder extends Maintenance {
        }
 
        function addMissingImage( $filename, $fullpath ) {
-               global $wgContLang;
-
                $timestamp = $this->dbw->timestamp( $this->getRepo()->getFileTimestamp( $fullpath ) );
 
-               $altname = $wgContLang->checkTitleEncoding( $filename );
+               $altname = MediaWikiServices::getInstance()->getContentLanguage()->
+                       checkTitleEncoding( $filename );
                if ( $altname != $filename ) {
                        if ( $this->dryrun ) {
                                $filename = $altname;
index 070fad8..adfc2f8 100644 (file)
@@ -11,8 +11,8 @@
   "devDependencies": {
     "deepmerge": "1.3.2",
     "eslint": "5.0.1",
-    "eslint-config-wikimedia": "0.6.0",
-    "eslint-plugin-qunit": "3.2.1",
+    "eslint-config-wikimedia": "0.7.2",
+    "eslint-plugin-qunit": "3.3.1",
     "grunt": "1.0.3",
     "grunt-banana-checker": "0.6.0",
     "grunt-contrib-copy": "1.0.0",
index c63eb96..710d54a 100644 (file)
@@ -136,14 +136,29 @@ return [
                ],
        ],
 
-       /* jQuery */
+       /* Base modules */
+       // These modules' dependencies MUST also be included in StartUpModule::getBaseModules().
+       // These modules' dependencies MUST be dependency-free (having dependencies would cause recursion).
 
        'jquery' => [
                'scripts' => [
                        'resources/lib/jquery/jquery.js',
                        'resources/lib/jquery/jquery.migrate.js',
                ],
-               'raw' => true,
+               'targets' => [ 'desktop', 'mobile' ],
+       ],
+       'mediawiki.base' => [
+               'scripts' => [
+                       // This MUST be kept in sync with maintenance/jsduck/eg-iframe.html
+                       'resources/src/mediawiki.base/mediawiki.errorLogger.js',
+                       'resources/src/mediawiki.base/mediawiki.base.js',
+               ],
+               'dependencies' => 'jquery',
+               'targets' => [ 'desktop', 'mobile' ],
+       ],
+       'mediawiki.legacy.wikibits' => [
+               'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
+               'dependencies' => 'jquery',
                'targets' => [ 'desktop', 'mobile' ],
        ],
 
@@ -832,15 +847,6 @@ return [
        ],
 
        /* MediaWiki */
-
-       'mediawiki.base' => [
-               // Keep in sync with maintenance/jsduck/eg-iframe.html
-               'scripts' => [
-                       'resources/src/mediawiki.base/mediawiki.errorLogger.js',
-                       'resources/src/mediawiki.base/mediawiki.base.js',
-               ],
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
        'mediawiki.apihelp' => [
                'styles' => 'resources/src/mediawiki.apihelp.css',
                'targets' => [ 'desktop' ],
@@ -2389,10 +2395,6 @@ return [
                        'resources/src/mediawiki.legacy/oldshared.css' => [ 'media' => 'screen' ]
                ],
        ],
-       'mediawiki.legacy.wikibits' => [
-               'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
 
        /* MediaWiki UI */
 
@@ -2959,6 +2961,10 @@ return [
                'class' => ResourceLoaderOOUIImageModule::class,
                'themeImages' => 'icons-editing-advanced',
        ],
+       'oojs-ui.styles.icons-editing-citation' => [
+               'class' => ResourceLoaderOOUIImageModule::class,
+               'themeImages' => 'icons-editing-citation',
+       ],
        'oojs-ui.styles.icons-editing-core' => [
                'class' => ResourceLoaderOOUIImageModule::class,
                'themeImages' => 'icons-editing-core',
index 342229e..0bb8e48 100644 (file)
-/**\r
-Copyright (c) 2013, Specialisterne.\r
-http://specialisterne.com/dk/\r
-All rights reserved.\r
-Authors:\r
-Jacob Christian Munch-Andersen\r
-\r
-Redistribution and use in source and binary forms, with or without\r
-modification, are permitted provided that the following conditions are met:\r
-\r
-1. Redistributions of source code must retain the above copyright notice, this\r
-   list of conditions and the following disclaimer.\r
-2. Redistributions in binary form must reproduce the above copyright notice,\r
-   this list of conditions and the following disclaimer in the documentation\r
-   and/or other materials provided with the distribution.\r
-\r
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\r
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\r
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-**/\r
-// For information and latest version see: https://github.com/Jacob-Christian-Munch-Andersen/Easy-Deflate\r
-(function(){\r
-\r
-var zip={};\r
-function UTF8encode(str){\r
-       var out=[];\r
-       var a;\r
-       var c,c2;\r
-       for(a=0;a<str.length;a++){\r
-               c=str.charCodeAt(a);\r
-               if(c<128){\r
-                       out.push(c);\r
-               }\r
-               else if(c<2048){\r
-                       out.push((c >> 6)+192);\r
-                       out.push((c & 63)+128);\r
-               }\r
-               else if(c<65536){\r
-                       if(c>=0xD800 && c<0xDC00){\r
-                               a++;\r
-                               if(a>=str.length){\r
-                                       return null;\r
-                               }\r
-                               c2=str.charCodeAt(a);\r
-                               if(c2>=0xDC00 && c2<0xE000){\r
-                                       c=65536+(c-0xD800)*1024+c2-0xDC00;\r
-                                       out.push((c >> 18)+240);\r
-                                       out.push(((c >> 12) & 63)+128);\r
-                                       out.push(((c >> 6) & 63)+128);\r
-                                       out.push((c & 63)+128);\r
-                               }\r
-                               else{\r
-                                       return null;\r
-                               }\r
-                       }\r
-                       else if(c>=0xDC00 && c<0xE000){\r
-                               return null;\r
-                       }\r
-                       else{\r
-                               out.push((c >> 12)+224);\r
-                               out.push(((c >> 6) & 63)+128);\r
-                               out.push((c & 63)+128);\r
-                       }\r
-               }\r
-               else{\r
-                       return null;\r
-               }\r
-       }\r
-       return new Uint8Array(out);\r
-}\r
-function UTF8decodeA(arrarr){\r
-       var result="";\r
-       var intermediate;\r
-       var minvalue;\r
-       var missing=0;\r
-       var a,b;\r
-       var arr;\r
-       var c;\r
-       var lower,upper;\r
-       for(a=0;a<arrarr.length;a++){\r
-               arr=arrarr[a];\r
-               for(b=0;b<arr.length;b++){\r
-                       c=arr[b];\r
-                       if(missing){\r
-                               if(c>127 && c<192){\r
-                                       intermediate=intermediate*64+c-128;\r
-                                       missing--;\r
-                                       if(!missing){\r
-                                               if(intermediate>=minvalue){\r
-                                                       if(intermediate>=65536){\r
-                                                               if(intermediate>0x10FFFF){\r
-                                                                       return null;\r
-                                                               }\r
-                                                               upper=(intermediate-65536)>>10;\r
-                                                               lower=intermediate%1024;\r
-                                                               result+=String.fromCharCode(upper+0xD800,lower+0xDC00);\r
-                                                       }\r
-                                                       else{\r
-                                                               result+=String.fromCharCode(intermediate);\r
-                                                       }\r
-                                               }\r
-                                               else{\r
-                                                       return null;\r
-                                               }\r
-                                       }\r
-                               }\r
-                               else{\r
-                                       return null;\r
-                               }\r
-                       }\r
-                       else if(c<128){\r
-                               result+=String.fromCharCode(c);\r
-                       }\r
-                       else if(c>191 && c<248){\r
-                               if(c<224){\r
-                                       intermediate=c-192;\r
-                                       minvalue=128;\r
-                                       missing=1;\r
-                               }\r
-                               else if(c<240){\r
-                                       intermediate=c-224;\r
-                                       minvalue=2048;\r
-                                       missing=2;\r
-                               }\r
-                               else{\r
-                                       intermediate=c-240;\r
-                                       minvalue=65536;\r
-                                       missing=3;\r
-                               }\r
-                       }\r
-                       else{\r
-                               return null;\r
-                       }\r
-               }\r
-       }\r
-       if(missing){\r
-               return null;\r
-       }\r
-       return result;\r
-}\r
-function deflate(str){\r
-       var a,c;\r
-       var readlen=50000;\r
-       var resulta=[];\r
-       var results="";\r
-       var b,d;\r
-       var zipper=new zip.Deflater(9);\r
-       for(a=0;a<str.length;a+=readlen){\r
-               d=UTF8encode(str.substr(a,readlen));\r
-               if(d===null){ //This error may be due to a 4 byte charachter being split, retry with a string that is 1 longer to fix it.\r
-                       d=UTF8encode(str.substr(a,readlen+1));\r
-                       a+=1;\r
-                       if(d===null){\r
-                               return null;\r
-                       }\r
-               }\r
-               b=zipper.append(d);\r
-               if(b.length!==0){\r
-                       resulta.push(b);\r
-               }\r
-       }\r
-       b=zipper.flush();\r
-       if(b.length!==0){\r
-               resulta.push(b);\r
-       }\r
-       for(a=0;a<resulta.length;a++){\r
-               for(c=0;c<resulta[a].length;c++){\r
-                       results+=String.fromCharCode(resulta[a][c]);\r
-               }\r
-       }\r
-       return "rawdeflate,"+btoa(results);\r
-}\r
-function inflate(dfl){\r
-       var unzipper=new zip.Inflater();\r
-       var resulta=[];\r
-       var dfls;\r
-       var a,c;\r
-       var b,d;\r
-       if(dfl.slice(0,11)!="rawdeflate,"){\r
-               return null;\r
-       }\r
-       try{\r
-               dfls=atob(dfl.slice(11));\r
-       }\r
-       catch(e){\r
-               return null;\r
-       }\r
-       try{\r
-               for(a=0;a<dfls.length;a+=50000){\r
-                       b=new Uint8Array(Math.min(50000,dfls.length-a));\r
-                       for(c=0;c<b.length;c++){\r
-                               b[c]=dfls.charCodeAt(c+a);\r
-                       }\r
-                       d=unzipper.append(b);\r
-                       if(d.length){\r
-                               resulta.push(d);\r
-                       }\r
-               }\r
-               return UTF8decodeA(resulta);\r
-       }\r
-       catch(e){\r
-               return null;\r
-       }\r
-}\r
-\r
-window.EasyDeflate = {\r
-       'zip': zip,\r
-       'inflate': inflate,\r
-       'deflate': deflate\r
-};\r
-\r
-})();
\ No newline at end of file
+/**
+Copyright (c) 2013, Specialisterne.
+http://specialisterne.com/dk/
+All rights reserved.
+Authors:
+Jacob Christian Munch-Andersen
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**/
+// For information and latest version see: https://github.com/Jacob-Christian-Munch-Andersen/Easy-Deflate
+(function(){
+
+var zip={};
+function UTF8encode(str){
+       var out=[];
+       var a;
+       var c,c2;
+       for(a=0;a<str.length;a++){
+               c=str.charCodeAt(a);
+               if(c<128){
+                       out.push(c);
+               }
+               else if(c<2048){
+                       out.push((c >> 6)+192);
+                       out.push((c & 63)+128);
+               }
+               else if(c<65536){
+                       if(c>=0xD800 && c<0xDC00){
+                               a++;
+                               if(a>=str.length){
+                                       return null;
+                               }
+                               c2=str.charCodeAt(a);
+                               if(c2>=0xDC00 && c2<0xE000){
+                                       c=65536+(c-0xD800)*1024+c2-0xDC00;
+                                       out.push((c >> 18)+240);
+                                       out.push(((c >> 12) & 63)+128);
+                                       out.push(((c >> 6) & 63)+128);
+                                       out.push((c & 63)+128);
+                               }
+                               else{
+                                       return null;
+                               }
+                       }
+                       else if(c>=0xDC00 && c<0xE000){
+                               return null;
+                       }
+                       else{
+                               out.push((c >> 12)+224);
+                               out.push(((c >> 6) & 63)+128);
+                               out.push((c & 63)+128);
+                       }
+               }
+               else{
+                       return null;
+               }
+       }
+       return new Uint8Array(out);
+}
+function UTF8decodeA(arrarr){
+       var result="";
+       var intermediate;
+       var minvalue;
+       var missing=0;
+       var a,b;
+       var arr;
+       var c;
+       var lower,upper;
+       for(a=0;a<arrarr.length;a++){
+               arr=arrarr[a];
+               for(b=0;b<arr.length;b++){
+                       c=arr[b];
+                       if(missing){
+                               if(c>127 && c<192){
+                                       intermediate=intermediate*64+c-128;
+                                       missing--;
+                                       if(!missing){
+                                               if(intermediate>=minvalue){
+                                                       if(intermediate>=65536){
+                                                               if(intermediate>0x10FFFF){
+                                                                       return null;
+                                                               }
+                                                               upper=(intermediate-65536)>>10;
+                                                               lower=intermediate%1024;
+                                                               result+=String.fromCharCode(upper+0xD800,lower+0xDC00);
+                                                       }
+                                                       else{
+                                                               result+=String.fromCharCode(intermediate);
+                                                       }
+                                               }
+                                               else{
+                                                       return null;
+                                               }
+                                       }
+                               }
+                               else{
+                                       return null;
+                               }
+                       }
+                       else if(c<128){
+                               result+=String.fromCharCode(c);
+                       }
+                       else if(c>191 && c<248){
+                               if(c<224){
+                                       intermediate=c-192;
+                                       minvalue=128;
+                                       missing=1;
+                               }
+                               else if(c<240){
+                                       intermediate=c-224;
+                                       minvalue=2048;
+                                       missing=2;
+                               }
+                               else{
+                                       intermediate=c-240;
+                                       minvalue=65536;
+                                       missing=3;
+                               }
+                       }
+                       else{
+                               return null;
+                       }
+               }
+       }
+       if(missing){
+               return null;
+       }
+       return result;
+}
+function deflate(str){
+       var a,c;
+       var readlen=50000;
+       var resulta=[];
+       var results="";
+       var b,d;
+       var zipper=new zip.Deflater(9);
+       for(a=0;a<str.length;a+=readlen){
+               d=UTF8encode(str.substr(a,readlen));
+               if(d===null){ //This error may be due to a 4 byte charachter being split, retry with a string that is 1 longer to fix it.
+                       d=UTF8encode(str.substr(a,readlen+1));
+                       a+=1;
+                       if(d===null){
+                               return null;
+                       }
+               }
+               b=zipper.append(d);
+               if(b.length!==0){
+                       resulta.push(b);
+               }
+       }
+       b=zipper.flush();
+       if(b.length!==0){
+               resulta.push(b);
+       }
+       for(a=0;a<resulta.length;a++){
+               for(c=0;c<resulta[a].length;c++){
+                       results+=String.fromCharCode(resulta[a][c]);
+               }
+       }
+       return "rawdeflate,"+btoa(results);
+}
+function inflate(dfl){
+       var unzipper=new zip.Inflater();
+       var resulta=[];
+       var dfls;
+       var a,c;
+       var b,d;
+       if(dfl.slice(0,11)!="rawdeflate,"){
+               return null;
+       }
+       try{
+               dfls=atob(dfl.slice(11));
+       }
+       catch(e){
+               return null;
+       }
+       try{
+               for(a=0;a<dfls.length;a+=50000){
+                       b=new Uint8Array(Math.min(50000,dfls.length-a));
+                       for(c=0;c<b.length;c++){
+                               b[c]=dfls.charCodeAt(c+a);
+                       }
+                       d=unzipper.append(b);
+                       if(d.length){
+                               resulta.push(d);
+                       }
+               }
+               return UTF8decodeA(resulta);
+       }
+       catch(e){
+               return null;
+       }
+}
+
+window.EasyDeflate = {
+       'zip': zip,
+       'inflate': inflate,
+       'deflate': deflate
+};
+
+})();
index 8257d85..bcd9c5c 100644 (file)
@@ -93,7 +93,7 @@
                                        'camino', 'chrome', 'firefox', 'iceweasel', 'netscape', 'konqueror', 'lynx', 'msie', 'opera',
                                        'safari', 'ipod', 'iphone', 'blackberry', 'ps3', 'rekonq', 'android'
                                ],
-                               // Tanslations for conforming browser names
+                               // Translations for conforming browser names
                                nameTranslations = [],
                                // Names of known layout engines
                                layouts = ['gecko', 'konqueror', 'msie', 'trident', 'edge', 'opera', 'webkit'],
index 992a734..711e424 100644 (file)
@@ -3,6 +3,9 @@
  * Copyright jQuery Foundation and other contributors
  *
  * Patched for MediaWiki:
+ * - Qualify the global lookup for 'jQuery' as 'window.jQuery',
+ *   because within mw.loader.implement() for 'jquery', the closure
+ *   specifies '$' and 'jQuery', which are undefined.
  * - Add mw.track instrumentation for statistics.
  * - Disable jQuery.migrateTrace by default. They are slow and
  *   redundant given console.warn() already provides a trace.
@@ -20,7 +23,8 @@
        } else {
 
                // Browser globals
-               factory( jQuery, window );
+               // PATCH: Qualify jQuery lookup as window.jQuery. --Krinkle
+               factory( window.jQuery, window );
        }
 } )( function( jQuery, window ) {
 "use strict";
index 64d394c..6287126 100644 (file)
 
                                // Get the CSS class names, could be done elsewhere
                                sortCSS = [ config.cssAsc, config.cssDesc ];
-                               // Messages tell the the user what the *next* state will be
+                               // Messages tell the user what the *next* state will be
                                // so are in reverse order to the CSS classes.
                                sortMsg = [ mw.msg( 'sort-descending' ), mw.msg( 'sort-ascending' ) ];
 
 
                                        // Build the cache for the tbody cells
                                        // to share between calculations for this sort action.
-                                       // Re-calculated each time a sort action is performed due to possiblity
+                                       // Re-calculated each time a sort action is performed due to possibility
                                        // that sort values change. Shouldn't be too expensive, but if it becomes
                                        // too slow an event based system should be implemented somehow where
                                        // cells get event .change() and bubbles up to the <table> here
index f19c3c2..2281136 100644 (file)
@@ -30,7 +30,7 @@
        ul.mw-collapsible:before,
        .mw-collapsible-toggle-li {
                /*
-               Rather than inherit any margins from the the general li selector - make sure this is explicit
+               Rather than inherit any margins from the general li selector - make sure this is explicit
                to avoid reflows
                */
                display: list-item;
index c02af98..1d0aa67 100644 (file)
                 * @return {string}
                 */
                text = function ( s ) {
-                       if ( s !== null && s !== undefined ) {
-                               return s.replace( /_/g, ' ' );
-                       } else {
-                               return '';
-                       }
+                       return s.replace( /_/g, ' ' );
                },
 
                /**
index 1c3dde6..9536b67 100644 (file)
@@ -22,7 +22,8 @@
                mwLoaderTrack = mw.track,
                trackCallbacks = $.Callbacks( 'memory' ),
                trackHandlers = [],
-               hasOwn = Object.prototype.hasOwnProperty;
+               hasOwn = Object.prototype.hasOwnProperty,
+               queue;
 
        /**
         * Object constructor for messages.
        // Alias $j to jQuery for backwards compatibility
        // @deprecated since 1.23 Use $ or jQuery instead
        mw.log.deprecate( window, '$j', $, 'Use $ or jQuery instead.' );
+
+       // Process callbacks for Grade A that require modules.
+       // Plain ones were already processed by startup.js.
+       queue = window.RLQ;
+       // Redefine publicly to capture any late arrivals
+       window.RLQ = {
+               push: function ( entry ) {
+                       mw.loader.using( entry[ 0 ], entry[ 1 ] );
+               }
+       };
+       while ( queue[ 0 ] ) {
+               window.RLQ.push( queue.shift() );
+       }
 }() );
index b39fb82..ac33b84 100644 (file)
@@ -24,7 +24,7 @@
 /* Overwriting OOUI is no fun */
 .mw-feedbackDialog-feedback-form .oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-header {
        min-width: 4.2em;
-       width: 10%;
+       width: 20%;
 }
 .mw-feedbackDialog-feedback-form .oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
        width: 80%;
index eafa13d..acec9ca 100644 (file)
@@ -240,11 +240,6 @@ div.floatleft {
        border: 0;
 }
 
-div.floatleft p,
-div.floatright p {
-       font-style: italic;
-}
-
 .center {
        text-align: center;
 }
index ac65ac7..1eb92ef 100644 (file)
@@ -67,11 +67,6 @@ div.floatleft {
        margin: 0.3em 0.5em 0.5em 0;
 }
 
-/* @noflip */
-div.floatleft p {
-       font-style: italic;
-}
-
 /* table standards */
 table.rimage {
        float: right;
index 52438ca..5af001e 100644 (file)
        /**
         * Create filter data from a number, for the filters that are numerical value
         *
-        * @param {Number} num Number
-        * @param {Number} numForDisplay Number for the label
+        * @param {number} num Number
+        * @param {number} numForDisplay Number for the label
         * @return {Object} Filter data
         */
        mw.rcfilters.Controller.prototype._createFilterDataFromNumber = function ( num, numForDisplay ) {
index c918df8..9724927 100644 (file)
                }
        };
 
+       // Import i18n messages from config
+       mw.messages.set( mw.config.get( 'wgStructuredChangeFiltersMessages' ) );
+
        // Early execute of init
        if ( document.readyState === 'interactive' || document.readyState === 'complete' ) {
                rcfilters.init();
index 890856a..2957080 100644 (file)
@@ -117,20 +117,12 @@ table.floatright {
        margin: 0 0 0.5em 0.5em;
 }
 
-div.floatright p {
-       font-style: italic;
-}
-
 /* @noflip */
 div.floatleft,
 table.floatleft {
        margin: 0 0.5em 0.5em 0;
 }
 
-div.floatleft p {
-       font-style: italic;
-}
-
 /* Thumbnails */
 div.thumb {
        margin-bottom: 0.5em;
index 8ec2735..7265399 100644 (file)
 
        /* tablet and up */
 
-       @media only screen and ( min-width: @deviceWidthTablet ) {
+       @media only screen and ( min-width: @width-breakpoint-tablet ) {
 
                #mw-interwiki-results {
                        width: 30%;
index 1db8904..9eea6f3 100644 (file)
                }() );
        }
 
-       /**
-        * Former public initialisation. Now a no-op function.
-        *
-        * @method util_init
-        * @deprecated since 1.30
-        */
-       mw.log.deprecate( util, 'init', $.noop, 'Remove the call of mw.util.init().', 'mw.util.init' );
-
        $( init );
 
        mw.util = util;
index 8d42c0f..f9a69b8 100644 (file)
@@ -7,6 +7,7 @@
  * @alternateClassName mediaWiki
  * @singleton
  */
+/* global $VARS */
 
 ( function () {
        'use strict';
                                 */
                                jobs = [],
 
+                               /**
+                                * @private
+                                * @property {Array} baseModules
+                                */
+                               baseModules = $VARS.baseModules,
+
                                /**
                                 * For #addEmbeddedCSS() and #addLink()
                                 *
                         * @return {string} Hash of concatenated version hashes.
                         */
                        function getCombinedVersion( modules ) {
-                               var hashes = modules.map( function ( module ) {
-                                       return registry[ module ].version;
-                               } );
-                               return fnv132( hashes.join( '' ) );
+                               var hashes = modules.reduce( function ( result, module ) {
+                                       return result + registry[ module ].version;
+                               }, '' );
+                               return fnv132( hashes );
                        }
 
                        /**
                                return true;
                        }
 
+                       /**
+                        * Determine whether all direct and base dependencies are in state 'ready'
+                        *
+                        * @private
+                        * @param {string} module Name of the module to be checked
+                        * @return {boolean} True if all direct/base dependencies are in state 'ready'; false otherwise
+                        */
+                       function allWithImplicitReady( module ) {
+                               return allReady( registry[ module ].dependencies ) &&
+                                       ( baseModules.indexOf( module ) !== -1 || allReady( baseModules ) );
+                       }
+
                        /**
                         * Determine whether all dependencies are in state 'ready', which means we may
                         * execute the module or job now.
                         * @param {string} module Name of module that entered one of the states 'ready', 'error', or 'missing'.
                         */
                        function handlePending( module ) {
-                               var j, job, hasErrors, m, stateChange;
+                               var j, job, hasErrors, m, stateChange, fromBaseModule;
 
                                if ( registry[ module ].state === 'error' || registry[ module ].state === 'missing' ) {
+                                       fromBaseModule = baseModules.indexOf( module ) !== -1;
                                        // If the current module failed, mark all dependent modules also as failed.
                                        // Iterate until steady-state to propagate the error state upwards in the
                                        // dependency tree.
                                                stateChange = false;
                                                for ( m in registry ) {
                                                        if ( registry[ m ].state !== 'error' && registry[ m ].state !== 'missing' ) {
-                                                               if ( anyFailed( registry[ m ].dependencies ) ) {
+                                                               // Always propagate errors from base modules to regular modules (implicit dependency).
+                                                               // Between base modules or regular modules, consider direct dependencies only.
+                                                               if (
+                                                                       ( fromBaseModule && baseModules.indexOf( m ) === -1 ) ||
+                                                                       anyFailed( registry[ m ].dependencies )
+                                                               ) {
                                                                        registry[ m ].state = 'error';
                                                                        stateChange = true;
                                                                }
                                        }
                                }
 
+                               // The current module became 'ready'.
                                if ( registry[ module ].state === 'ready' ) {
-                                       // The current module became 'ready'. Set it in the module store, and recursively execute all
-                                       // dependent modules that are loaded and now have all dependencies satisfied.
+                                       // Save it to the module store.
                                        mw.loader.store.set( module, registry[ module ] );
+                                       // Recursively execute all dependent modules that were already loaded
+                                       // (waiting for execution) and no longer have unsatisfied dependencies.
                                        for ( m in registry ) {
-                                               if ( registry[ m ].state === 'loaded' && allReady( registry[ m ].dependencies ) ) {
+                                               // Base modules may have dependencies amongst eachother to ensure correct
+                                               // execution order. Regular modules wait for all base modules.
+                                               if ( registry[ m ].state === 'loaded' && allWithImplicitReady( m ) ) {
                                                        // eslint-disable-next-line no-use-before-define
                                                        execute( m );
                                                }
                                if ( !unresolved ) {
                                        unresolved = new StringSet();
                                }
+
+                               // Add base modules
+                               if ( baseModules.indexOf( module ) === -1 ) {
+                                       baseModules.forEach( function ( baseModule ) {
+                                               if ( resolved.indexOf( baseModule ) === -1 ) {
+                                                       resolved.push( baseModule );
+                                               }
+                                       } );
+                               }
+
                                // Tracks down dependencies
                                deps = registry[ module ].dependencies;
+                               unresolved.add( module );
                                for ( i = 0; i < deps.length; i++ ) {
                                        if ( resolved.indexOf( deps[ i ] ) === -1 ) {
                                                if ( unresolved.has( deps[ i ] ) ) {
                                                        );
                                                }
 
-                                               unresolved.add( module );
                                                sortDependencies( deps[ i ], resolved, unresolved );
                                        }
                                }
                        /**
                         * Queue the loading and execution of a script for a particular module.
                         *
+                        * This does for debug mode what runScript() does for production.
+                        *
                         * @private
                         * @param {string} src URL of the script
                         * @param {string} moduleName Name of currently executing module
                         */
                        function queueModuleScript( src, moduleName, callback ) {
                                pendingRequests.push( function () {
-                                       if ( hasOwn.call( registry, moduleName ) ) {
-                                               // Emulate runScript() part of execute()
+                                       // Keep in sync with execute()/runScript().
+                                       if ( moduleName !== 'jquery' && hasOwn.call( registry, moduleName ) ) {
                                                window.require = mw.loader.require;
                                                window.module = registry[ moduleName ].module;
                                        }
                         */
                        function domEval( code ) {
                                var script = document.createElement( 'script' );
+                               if ( mw.config.get( 'wgCSPNonce' ) !== false ) {
+                                       script.nonce = mw.config.get( 'wgCSPNonce' );
+                               }
                                script.text = code;
                                document.head.appendChild( script );
                                script.parentNode.removeChild( script );
                                                if ( Array.isArray( script ) ) {
                                                        nestedAddScript( script, markModuleReady, 0 );
                                                } else if ( typeof script === 'function' ) {
-                                                       // Pass jQuery twice so that the signature of the closure which wraps
-                                                       // the script can bind both '$' and 'jQuery'.
-                                                       script( window.$, window.$, mw.loader.require, registry[ module ].module );
+                                                       // Keep in sync with queueModuleScript() for debug mode
+                                                       if ( module === 'jquery' ) {
+                                                               // This is a special case for when 'jquery' itself is being loaded.
+                                                               // - The standard jquery.js distribution does not set `window.jQuery`
+                                                               //   in CommonJS-compatible environments (Node.js, AMD, RequireJS, etc.).
+                                                               // - MediaWiki's 'jquery' module also bundles jquery.migrate.js, which
+                                                               //   in a CommonJS-compatible environment, will use require('jquery'),
+                                                               //   but that can't work when we're still inside that module.
+                                                               script();
+                                                       } else {
+                                                               // Pass jQuery twice so that the signature of the closure which wraps
+                                                               // the script can bind both '$' and 'jQuery'.
+                                                               script( window.$, window.$, mw.loader.require, registry[ module ].module );
+                                                       }
                                                        markModuleReady();
 
                                                } else if ( typeof script === 'string' ) {
                                        // The module may already have been marked as erroneous
                                        if ( registry[ name ].state !== 'error' && registry[ name ].state !== 'missing' ) {
                                                registry[ name ].state = 'loaded';
-                                               if ( allReady( registry[ name ].dependencies ) ) {
+                                               if ( allWithImplicitReady( name ) ) {
                                                        execute( name );
                                                }
                                        }
                                /**
                                 * Change the state of one or more modules.
                                 *
-                                * @param {string|Object} module Module name or object of module name/state pairs
-                                * @param {string} state State name
+                                * @param {Object|string} modules Object of module name/state pairs
                                 */
-                               state: function ( module, state ) {
-                                       var m;
-
-                                       if ( typeof module === 'object' ) {
-                                               for ( m in module ) {
-                                                       mw.loader.state( m, module[ m ] );
+                               state: function ( modules ) {
+                                       var module, state;
+                                       for ( module in modules ) {
+                                               state = modules[ module ];
+                                               if ( !hasOwn.call( registry, module ) ) {
+                                                       mw.loader.register( module );
+                                               }
+                                               registry[ module ].state = state;
+                                               if ( state === 'ready' || state === 'error' || state === 'missing' ) {
+                                                       // Make sure pending modules depending on this one get executed if their
+                                                       // dependencies are now fulfilled!
+                                                       handlePending( module );
                                                }
-                                               return;
-                                       }
-                                       if ( !hasOwn.call( registry, module ) ) {
-                                               mw.loader.register( module );
-                                       }
-                                       registry[ module ].state = state;
-                                       if ( state === 'ready' || state === 'error' || state === 'missing' ) {
-                                               // Make sure pending modules depending on this one get executed if their
-                                               // dependencies are now fulfilled!
-                                               handlePending( module );
                                        }
                                },
 
index 7a50d94..b2d86e2 100644 (file)
@@ -3,7 +3,7 @@
  *
  * - Beware: This file MUST parse without errors on even the most ancient of browsers!
  */
-
+/* eslint-disable vars-on-top, no-unmodified-loop-condition */
 /* global mw, isCompatible, $VARS, $CODE */
 
 /**
@@ -79,17 +79,17 @@ window.isCompatible = function ( str ) {
        );
 };
 
-// Conditional script injection
 ( function () {
-       var NORLQ, script;
+       var NORLQ;
+       // Handle Grade C
        if ( !isCompatible() ) {
-               // Undo class swapping in case of an unsupported browser.
-               // See ResourceLoaderClientHtml::getDocumentAttributes().
+               // Undo speculative Grade A <html> class. See ResourceLoaderClientHtml::getDocumentAttributes().
                document.documentElement.className = document.documentElement.className
                        .replace( /(^|\s)client-js(\s|$)/, '$1client-nojs$2' );
 
-               NORLQ = window.NORLQ || [];
-               while ( NORLQ.length ) {
+               // Process any callbacks for Grade C
+               NORLQ = window.NORLQ;
+               while ( NORLQ && NORLQ[ 0 ] ) {
                        NORLQ.shift()();
                }
                window.NORLQ = {
@@ -98,9 +98,8 @@ window.isCompatible = function ( str ) {
                        }
                };
 
-               // Clear and disable the other queue
+               // Clear and disable the Grade A queue
                window.RLQ = {
-                       // No-op
                        push: function () {}
                };
 
@@ -117,22 +116,27 @@ window.isCompatible = function ( str ) {
 
                mw.config.set( $VARS.configuration );
 
-               // Must be after mw.config.set because these callbacks may use mw.loader which
-               // needs to have values 'skin', 'debug' etc. from mw.config.
-               // eslint-disable-next-line vars-on-top
-               var RLQ = window.RLQ || [];
-               while ( RLQ.length ) {
-                       RLQ.shift()();
-               }
-               window.RLQ = {
-                       push: function ( fn ) {
+               // Process callbacks for Grade A
+               // Must be after registrations and mw.config.set, which mw.loader depends on.
+               var queue = window.RLQ;
+               // Redefine push(), but keep type as array for storing callbacks that require modules.
+               window.RLQ = [];
+               /* global RLQ */
+               RLQ.push = function ( fn ) {
+                       if ( typeof fn === 'function' ) {
                                fn();
+                       } else {
+                               // This callback requires a module, handled in mediawiki.base.
+                               RLQ[ RLQ.length ] = fn;
                        }
                };
+               while ( queue && queue[ 0 ] ) {
+                       // Re-use our push()
+                       RLQ.push( queue.shift() );
+               }
 
-               // Clear and disable the other queue
+               // Clear and disable the Grade C queue
                window.NORLQ = {
-                       // No-op
                        push: function () {}
                };
        }
@@ -144,14 +148,5 @@ window.isCompatible = function ( str ) {
        // This embeds mediawiki.js, which defines 'mw' and 'mw.loader'.
        $CODE.defineLoader();
 
-       script = document.createElement( 'script' );
-       script.src = $VARS.baseModulesUri;
-       script.onload = function () {
-               // Clean up
-               script.onload = null;
-               script = null;
-               // Callback
-               startUp();
-       };
-       document.head.appendChild( script );
+       mw.requestIdleCallback( startUp );
 }() );
index fd308b2..4b0edb1 100644 (file)
@@ -1,16 +1,19 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Base class that store and restore the Language objects
  */
 abstract class MediaWikiLangTestCase extends MediaWikiTestCase {
        protected function setUp() {
-               global $wgLanguageCode, $wgContLang;
+               global $wgLanguageCode;
 
-               if ( $wgLanguageCode != $wgContLang->getCode() ) {
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               if ( $wgLanguageCode != $contLang->getCode() ) {
                        throw new MWException( "Error in MediaWikiLangTestCase::setUp(): " .
-                               "\$wgLanguageCode ('$wgLanguageCode') is different from " .
-                               "\$wgContLang->getCode() (" . $wgContLang->getCode() . ")" );
+                               "\$wgLanguageCode ('$wgLanguageCode') is different from content language code (" .
+                               $contLang->getCode() . ")" );
                }
 
                parent::setUp();
index 3565311..310ba29 100644 (file)
@@ -275,7 +275,7 @@ abstract class MediaWikiTestCase extends PHPUnit\Framework\TestCase {
         *        MediaWikiServices.
         * @return MediaWikiServices
         */
-       protected static function resetGlobalServices( Config $bootstrapConfig = null ) {
+       private static function resetGlobalServices( Config $bootstrapConfig = null ) {
                $oldServices = MediaWikiServices::getInstance();
                $oldConfigFactory = $oldServices->getConfigFactory();
                $oldLoadBalancerFactory = $oldServices->getDBLoadBalancerFactory();
diff --git a/tests/phpunit/autoload.ide.php b/tests/phpunit/autoload.ide.php
deleted file mode 100644 (file)
index f8a745e..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-
-/**
- * This file is PHPUnit autoload file for PhpStorm IDE and other JetBrains IDEs.
- *
- * This file should be set in `Languages and frameworks > PHP > PhpUnit`
- * select `Use Composer autoloader` and set `Path to script` to `<path to this file>`.
- * After that, tests can be run in PhpStorm using Right-click > Run or `Ctrl + Shift + F10`.
- * Also, tests can be run with debugger very easily.
- *
- * This file basically does almost the same thing as `tests/phpunit/phpunit.php`, except that all
- * code is going to be executed inside some function, so some hacks needed to make old code to be
- * executed as if it was executed on top of the execution stack.
- *
- * PS: Mostly it is copy-paste from `phpunit.php` and `doMaintenance.php`.
- *
- * @file
- */
-
-// Set a flag which can be used to detect when other scripts have been entered
-// through this entry point or not.
-use MediaWiki\MediaWikiServices;
-
-global $argv;
-$argv[1] = '--wiki';
-$argv[2] = getenv( 'WIKI_NAME' ) ?: 'wiki';
-
-require_once __DIR__ . "/phpunit.php";
-
-// Get an object to start us off
-/** @var Maintenance $maintenance */
-$maintenance = new PHPUnitMaintClass();
-
-// Basic sanity checks and such
-$maintenance->setup();
-
-// We used to call this variable $self, but it was moved
-// to $maintenance->mSelf. Keep that here for b/c
-$self = $maintenance->getName();
-# Start the autoloader, so that extensions can derive classes from core files
-require_once "$IP/includes/AutoLoader.php";
-
-$requireOnceGlobalsScope = function ( $file ) use ( $self ) {
-       foreach ( array_keys( $GLOBALS ) as $varName ) {
-               eval( sprintf( 'global $%s;', $varName ) );
-       }
-
-       require_once $file;
-
-       unset( $file );
-       $definedVars = get_defined_vars();
-       foreach ( $definedVars as $varName => $value ) {
-               eval( sprintf( 'global $%s; $%s = $value;', $varName, $varName ) );
-       }
-};
-
-// Some other requires
-$requireOnceGlobalsScope( "$IP/includes/Defines.php" );
-$requireOnceGlobalsScope( "$IP/includes/DefaultSettings.php" );
-$requireOnceGlobalsScope( "$IP/includes/GlobalFunctions.php" );
-
-foreach ( array_keys( $GLOBALS ) as $varName ) {
-       eval( sprintf( 'global $%s;', $varName ) );
-}
-
-# Load composer's autoloader if present
-if ( is_readable( "$IP/vendor/autoload.php" ) ) {
-       require_once "$IP/vendor/autoload.php";
-}
-
-if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
-       # Use a callback function to configure MediaWiki
-       call_user_func( MW_CONFIG_CALLBACK );
-} else {
-       // Require the configuration (probably LocalSettings.php)
-       require $maintenance->loadSettings();
-}
-
-if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
-       if (
-               $wgLocalisationCacheConf['storeClass'] === false
-               && (
-                       $wgLocalisationCacheConf['store'] == 'db'
-                       || ( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory )
-               )
-       ) {
-               $wgLocalisationCacheConf['storeClass'] = LCStoreNull::class;
-       }
-}
-
-$maintenance->finalSetup();
-// Some last includes
-$requireOnceGlobalsScope( "$IP/includes/Setup.php" );
-
-// Initialize main config instance
-$maintenance->setConfig( MediaWikiServices::getInstance()->getMainConfig() );
-
-// Sanity-check required extensions are installed
-$maintenance->checkRequiredExtensions();
-
-// A good time when no DBs have writes pending is around lag checks.
-// This avoids having long running scripts just OOM and lose all the updates.
-$maintenance->setAgentAndTriggers();
index d7ec83a..d1a6a62 100644 (file)
@@ -1,7 +1,12 @@
 # Changes
 DELETE {
 ?category ?x ?y
-} INSERT {
+} WHERE {
+   VALUES ?category {
+     <http://acme.test/wiki/Category:Changed_category>
+   }
+};
+INSERT DATA {
 
 <http://acme.test/wiki/Category:Changed_category> a mediawiki:Category ;
        rdfs:label "Changed category" ;
@@ -9,8 +14,4 @@ DELETE {
        mediawiki:subcategories "2"^^xsd:integer ;
        mediawiki:isInCategory <http://acme.test/wiki/Category:Parent_of_30> .
 
-} WHERE {
-   VALUES ?category {
-     <http://acme.test/wiki/Category:Changed_category>
-   }
 };
index 7fb642d..043d9c3 100644 (file)
@@ -1,8 +1,6 @@
 # Deletes
 DELETE {
 ?category ?x ?y
-} INSERT {
-
 } WHERE {
    VALUES ?category {
      <http://acme.test/wiki/Category:Test> <http://acme.test/wiki/Category:Test_2>
index c9f284e..d22bc47 100644 (file)
@@ -1,7 +1,12 @@
 # Moves
 DELETE {
 ?category ?x ?y
-} INSERT {
+} WHERE {
+   VALUES ?category {
+     <http://acme.test/wiki/Category:Test> <http://acme.test/wiki/Category:MovedTo> <http://acme.test/wiki/Category:Test_2> <http://acme.test/wiki/Category:Test_3> <http://acme.test/wiki/Category:Test_4>
+   }
+};
+INSERT DATA {
 
 <http://acme.test/wiki/Category:MovedTo> a mediawiki:Category ;
        rdfs:label "MovedTo" ;
@@ -17,8 +22,4 @@ DELETE {
 
 <http://acme.test/wiki/Category:AlsoMoved> mediawiki:isInCategory <http://acme.test/wiki/Category:Parent_of_5> .
 
-} WHERE {
-   VALUES ?category {
-     <http://acme.test/wiki/Category:Test> <http://acme.test/wiki/Category:MovedTo> <http://acme.test/wiki/Category:Test_2> <http://acme.test/wiki/Category:Test_3> <http://acme.test/wiki/Category:Test_4>
-   }
 };
diff --git a/tests/phpunit/data/media/comma_separated_viewbox.svg b/tests/phpunit/data/media/comma_separated_viewbox.svg
new file mode 100644 (file)
index 0000000..9e7329d
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox=" 0, 0 ,349.46883 , 405.12272 ">
+</svg>
index c41361c..f9b592e 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\ScopedCallback;
 use Wikimedia\TestingAccessWrapper;
 
@@ -23,8 +24,7 @@ class CommentStoreTest extends MediaWikiLangTestCase {
         * @return CommentStore
         */
        protected function makeStore( $stage ) {
-               global $wgContLang;
-               $store = new CommentStore( $wgContLang, $stage );
+               $store = new CommentStore( MediaWikiServices::getInstance()->getContentLanguage(), $stage );
                return $store;
        }
 
index c383be6..250d49d 100644 (file)
@@ -72,26 +72,21 @@ class ContentSecurityPolicyTest extends MediaWikiTestCase {
        public function testMakeCSPDirectives(
                $policy,
                $expectedFull,
-               $expectedReport,
-               $expectedRestricted
+               $expectedReport
        ) {
                $actualFull = $this->csp->makeCSPDirectives( $policy, ContentSecurityPolicy::FULL_MODE );
                $actualReport = $this->csp->makeCSPDirectives(
                        $policy, ContentSecurityPolicy::REPORT_ONLY_MODE
                );
-               $actualRestricted = $this->csp->makeCSPDirectives(
-                       $policy, ContentSecurityPolicy::FULL_MODE_RESTRICTED
-               );
                $policyJson = formatJson::encode( $policy );
                $this->assertEquals( $expectedFull, $actualFull, "full: " . $policyJson );
                $this->assertEquals( $expectedReport, $actualReport, "report: " . $policyJson );
-               $this->assertEquals( $expectedRestricted, $actualRestricted, "restricted: " . $policyJson );
        }
 
        public function providerMakeCSPDirectives() {
                // @codingStandardsIgnoreStart Generic.Files.LineLength
                return [
-                       [ false, '', '', '' ],
+                       [ false, '', '' ],
                        [
                                [ 'useNonces' => false ],
                                "script-src 'unsafe-eval' 'self' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
@@ -102,85 +97,71 @@ class ContentSecurityPolicyTest extends MediaWikiTestCase {
                                true,
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
-                               "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
                        ],
                        [
                                [],
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
-                               "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
                         ],
                        [
                                [ 'script-src' => [ 'http://example.com', 'http://something,else.com' ] ],
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' http://example.com http://something%2Celse.com 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' http://example.com http://something%2Celse.com 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
-                               "script-src 'unsafe-eval' 'self' http://example.com http://something%2Celse.com sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
                        ],
                        [
                                [ 'unsafeFallback' => false ],
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
-                               "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
                        ],
                        [
                                [ 'unsafeFallback' => true ],
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
-                               "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
                        ],
                        [
                                [ 'default-src' => false ],
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
-                               "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
                        ],
                        [
                                [ 'default-src' => true ],
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
-                               "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'",
                        ],
                        [
                                [ 'default-src' => [ 'https://foo.com', 'http://bar.com', 'baz.de' ] ],
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
-                               "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org https://foo.com http://bar.com baz.de sister-site.somewhere.com *.wikipedia.org 'unsafe-inline'",
                        ],
                        [
                                [ 'includeCORS' => false ],
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
-                               "script-src 'unsafe-eval' 'self'; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
                        ],
                        [
                                [ 'includeCORS' => false, 'default-src' => true ],
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline'; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
-                               "script-src 'unsafe-eval' 'self'; default-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org; style-src 'self' data: blob: https://upload.wikimedia.org https://commons.wikimedia.org 'unsafe-inline'",
                        ],
                        [
                                [ 'includeCORS' => true ],
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
-                               "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
                        ],
                        [
                                [ 'report-uri' => false ],
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
-                               "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
                        ],
                        [
                                [ 'report-uri' => true ],
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri /w/api.php?action=cspreport&format=json&reportonly=1&",
-                               "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
                        ],
                        [
                                [ 'report-uri' => 'https://example.com/index.php?foo;report=csp' ],
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri https://example.com/index.php?foo%3Breport=csp",
                                "script-src 'unsafe-eval' 'self' 'nonce-secret' 'unsafe-inline' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'; report-uri https://example.com/index.php?foo%3Breport=csp",
-                               "script-src 'unsafe-eval' 'self' sister-site.somewhere.com *.wikipedia.org; default-src * data: blob:; style-src * data: blob: 'unsafe-inline'",
                        ],
                ];
        }
index 216d92c..55d8fbb 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @group Editing
  *
@@ -14,6 +16,9 @@ class EditPageTest extends MediaWikiLangTestCase {
        protected function setUp() {
                parent::setUp();
 
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               $this->setContentLang( $contLang );
+
                $this->setMwGlobals( [
                        'wgExtraNamespaces' => [
                                12312 => 'Dummy',
@@ -391,7 +396,7 @@ class EditPageTest extends MediaWikiLangTestCase {
 
                $page = $this->assertEdit( 'EditPageTest_testUpdatePage', "zero", null, $edit,
                        EditPage::AS_SUCCESS_UPDATE, $text,
-                       "expected successfull update with given text" );
+                       "expected successful update with given text" );
                $this->assertGreaterThan( 0, $checkIds[0], "First event rev ID set" );
 
                $this->forceRevisionDate( $page, '20120101000000' );
@@ -404,7 +409,7 @@ class EditPageTest extends MediaWikiLangTestCase {
 
                $this->assertEdit( 'EditPageTest_testUpdatePage', null, null, $edit,
                        EditPage::AS_SUCCESS_UPDATE, $text,
-                       "expected successfull update with given text" );
+                       "expected successful update with given text" );
                $this->assertGreaterThan( 0, $checkIds[1], "Second edit hook rev ID set" );
                $this->assertGreaterThan( $checkIds[0], $checkIds[1], "Second event rev ID is higher" );
        }
@@ -418,7 +423,7 @@ class EditPageTest extends MediaWikiLangTestCase {
 
                $page = $this->assertEdit( 'EditPageTest_testTrxUpdatePage', "zero", null, $edit,
                        EditPage::AS_SUCCESS_UPDATE, $text,
-                       "expected successfull update with given text" );
+                       "expected successful update with given text" );
 
                $this->forceRevisionDate( $page, '20120101000000' );
 
@@ -444,7 +449,7 @@ class EditPageTest extends MediaWikiLangTestCase {
 
                $this->assertEdit( 'EditPageTest_testTrxUpdatePage', null, null, $edit,
                        EditPage::AS_SUCCESS_UPDATE, $text,
-                       "expected successfull update with given text" );
+                       "expected successful update with given text" );
 
                $text = "three";
                $edit = [
@@ -454,7 +459,7 @@ class EditPageTest extends MediaWikiLangTestCase {
 
                $this->assertEdit( 'EditPageTest_testTrxUpdatePage', null, null, $edit,
                        EditPage::AS_SUCCESS_UPDATE, $text,
-                       "expected successfull update with given text" );
+                       "expected successful update with given text" );
 
                wfGetDB( DB_MASTER )->commit( __METHOD__ );
 
@@ -529,7 +534,7 @@ hello
 
                $this->assertEdit( 'EditPageTest_testSectionEdit', $base, null, $edit,
                        EditPage::AS_SUCCESS_UPDATE, $expected,
-                       "expected successfull update of section" );
+                       "expected successful update of section" );
        }
 
        public static function provideAutoMerge() {
@@ -670,7 +675,7 @@ hello
 
                // first edit
                $this->assertEdit( 'EditPageTest_testAutoMerge', null, 'Adam', $adamsEdit,
-                       EditPage::AS_SUCCESS_UPDATE, null, "expected successfull update" );
+                       EditPage::AS_SUCCESS_UPDATE, null, "expected successful update" );
 
                // second edit
                $this->assertEdit( 'EditPageTest_testAutoMerge', null, 'Berta', $bertasEdit,
index a5d3570..af10b9c 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Test class for Export methods.
  *
@@ -20,7 +22,6 @@ class ExportTest extends MediaWikiLangTestCase {
         * @covers WikiExporter::pageByTitle
         */
        public function testPageByTitle() {
-               global $wgContLang;
                $pageTitle = 'UTPage';
 
                $exporter = new WikiExporter(
@@ -51,7 +52,8 @@ class ExportTest extends MediaWikiLangTestCase {
                        }
                }
 
-               $actualNamespaces = (array)$wgContLang->getNamespaces();
+               $actualNamespaces = (array)MediaWikiServices::getInstance()->getContentLanguage()->
+                       getNamespaces();
                $actualNamespaces = array_values( $actualNamespaces );
                $this->assertEquals( $actualNamespaces, $xmlNamespaces );
 
index 413c1a2..c838fc3 100644 (file)
@@ -1,23 +1,9 @@
 <?php
 
-use Mediawiki\Http\HttpRequestFactory;
-use MediaWiki\Interwiki\InterwikiLookup;
-use MediaWiki\Linker\LinkRenderer;
-use MediaWiki\Linker\LinkRendererFactory;
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Preferences\PreferencesFactory;
 use MediaWiki\Services\DestructibleService;
 use MediaWiki\Services\SalvageableService;
 use MediaWiki\Services\ServiceDisabledException;
-use MediaWiki\Shell\CommandFactory;
-use MediaWiki\Storage\BlobStore;
-use MediaWiki\Storage\BlobStoreFactory;
-use MediaWiki\Storage\NameTableStore;
-use MediaWiki\Storage\RevisionFactory;
-use MediaWiki\Storage\RevisionLookup;
-use MediaWiki\Storage\RevisionStore;
-use MediaWiki\Storage\RevisionStoreFactory;
-use MediaWiki\Storage\SqlBlobStore;
 
 /**
  * @covers MediaWiki\MediaWikiServices
@@ -307,70 +293,18 @@ class MediaWikiServicesTest extends MediaWikiTestCase {
        }
 
        public function provideGetService() {
-               // NOTE: This should list all service getters defined in ServiceWiring.php.
-               return [
-                       'BootstrapConfig' => [ 'BootstrapConfig', Config::class ],
-                       'ConfigFactory' => [ 'ConfigFactory', ConfigFactory::class ],
-                       'MainConfig' => [ 'MainConfig', Config::class ],
-                       'SiteStore' => [ 'SiteStore', SiteStore::class ],
-                       'SiteLookup' => [ 'SiteLookup', SiteLookup::class ],
-                       'StatsdDataFactory' => [ 'StatsdDataFactory', IBufferingStatsdDataFactory::class ],
-                       'PerDbNameStatsdDataFactory' =>
-                               [ 'PerDbNameStatsdDataFactory', IBufferingStatsdDataFactory::class ],
-                       'InterwikiLookup' => [ 'InterwikiLookup', InterwikiLookup::class ],
-                       'EventRelayerGroup' => [ 'EventRelayerGroup', EventRelayerGroup::class ],
-                       'SearchEngineFactory' => [ 'SearchEngineFactory', SearchEngineFactory::class ],
-                       'SearchEngineConfig' => [ 'SearchEngineConfig', SearchEngineConfig::class ],
-                       'SkinFactory' => [ 'SkinFactory', SkinFactory::class ],
-                       'DBLoadBalancerFactory' => [ 'DBLoadBalancerFactory', Wikimedia\Rdbms\LBFactory::class ],
-                       'DBLoadBalancer' => [ 'DBLoadBalancer', Wikimedia\Rdbms\LoadBalancer::class ],
-                       'WatchedItemStore' => [ 'WatchedItemStore', WatchedItemStore::class ],
-                       'WatchedItemQueryService' => [ 'WatchedItemQueryService', WatchedItemQueryService::class ],
-                       'CryptRand' => [ 'CryptRand', CryptRand::class ],
-                       'CryptHKDF' => [ 'CryptHKDF', CryptHKDF::class ],
-                       'MediaHandlerFactory' => [ 'MediaHandlerFactory', MediaHandlerFactory::class ],
-                       'Parser' => [ 'Parser', Parser::class ],
-                       'ParserCache' => [ 'ParserCache', ParserCache::class ],
-                       'GenderCache' => [ 'GenderCache', GenderCache::class ],
-                       'LinkCache' => [ 'LinkCache', LinkCache::class ],
-                       'LinkRenderer' => [ 'LinkRenderer', LinkRenderer::class ],
-                       'LinkRendererFactory' => [ 'LinkRendererFactory', LinkRendererFactory::class ],
-                       '_MediaWikiTitleCodec' => [ '_MediaWikiTitleCodec', MediaWikiTitleCodec::class ],
-                       'MimeAnalyzer' => [ 'MimeAnalyzer', MimeAnalyzer::class ],
-                       'TitleFormatter' => [ 'TitleFormatter', TitleFormatter::class ],
-                       'TitleParser' => [ 'TitleParser', TitleParser::class ],
-                       'ProxyLookup' => [ 'ProxyLookup', ProxyLookup::class ],
-                       'MainObjectStash' => [ 'MainObjectStash', BagOStuff::class ],
-                       'MainWANObjectCache' => [ 'MainWANObjectCache', WANObjectCache::class ],
-                       'LocalServerObjectCache' => [ 'LocalServerObjectCache', BagOStuff::class ],
-                       'VirtualRESTServiceClient' => [ 'VirtualRESTServiceClient', VirtualRESTServiceClient::class ],
-                       'ShellCommandFactory' => [ 'ShellCommandFactory', CommandFactory::class ],
-                       'BlobStoreFactory' => [ 'BlobStoreFactory', BlobStoreFactory::class ],
-                       'BlobStore' => [ 'BlobStore', BlobStore::class ],
-                       '_SqlBlobStore' => [ '_SqlBlobStore', SqlBlobStore::class ],
-                       'RevisionStore' => [ 'RevisionStore', RevisionStore::class ],
-                       'RevisionStoreFactory' => [ 'RevisionStoreFactory', RevisionStoreFactory::class ],
-                       'RevisionLookup' => [ 'RevisionLookup', RevisionLookup::class ],
-                       'RevisionFactory' => [ 'RevisionFactory', RevisionFactory::class ],
-                       'ContentModelStore' => [ 'ContentModelStore', NameTableStore::class ],
-                       'SlotRoleStore' => [ 'SlotRoleStore', NameTableStore::class ],
-                       'HttpRequestFactory' => [ 'HttpRequestFactory', HttpRequestFactory::class ],
-                       'CommentStore' => [ 'CommentStore', CommentStore::class ],
-                       'ChangeTagDefStore' => [ 'ChangeTagDefStore', NameTableStore::class ],
-                       'ConfiguredReadOnlyMode' => [ 'ConfiguredReadOnlyMode', ConfiguredReadOnlyMode::class ],
-                       'ReadOnlyMode' => [ 'ReadOnlyMode', ReadOnlyMode::class ],
-                       'UploadRevisionImporter' => [ 'UploadRevisionImporter', UploadRevisionImporter::class ],
-                       'OldRevisionImporter' => [ 'OldRevisionImporter', OldRevisionImporter::class ],
-                       'WikiRevisionOldRevisionImporterNoUpdates' =>
-                               [ 'WikiRevisionOldRevisionImporterNoUpdates', ImportableOldRevisionImporter::class ],
-                       'ExternalStoreFactory' => [ 'ExternalStoreFactory', ExternalStoreFactory::class ],
-                       'PreferencesFactory' => [ 'PreferencesFactory', PreferencesFactory::class ],
-                       'ActorMigration' => [ 'ActorMigration', ActorMigration::class ],
-                       'ConfigRepository' => [ 'ConfigRepository', \MediaWiki\Config\ConfigRepository::class ],
-                       'MagicWordFactory' => [ 'MagicWordFactory', MagicWordFactory::class ],
-                       'ContentLanguage' => [ 'ContentLanguage', Language::class ],
-                       'PasswordFactory' => [ 'PasswordFactory', PasswordFactory::class ],
-               ];
+               global $IP;
+               $serviceList = require "$IP/includes/ServiceWiring.php";
+               $ret = [];
+               foreach ( $serviceList as $name => $callback ) {
+                       $fun = new ReflectionFunction( $callback );
+                       if ( !$fun->hasReturnType() ) {
+                               throw new MWException( 'All service callbacks must have a return type defined, ' .
+                                       "none found for $name" );
+                       }
+                       $ret[$name] = [ $name, $fun->getReturnType()->__toString() ];
+               }
+               return $ret;
        }
 
        /**
@@ -401,7 +335,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase {
        public function testDefaultServiceWiringServicesHaveTests() {
                global $IP;
                $testedServices = array_keys( $this->provideGetService() );
-               $allServices = array_keys( include $IP . '/includes/ServiceWiring.php' );
+               $allServices = array_keys( require "$IP/includes/ServiceWiring.php" );
                $this->assertEquals(
                        [],
                        array_diff( $allServices, $testedServices ),
@@ -409,4 +343,24 @@ class MediaWikiServicesTest extends MediaWikiTestCase {
                );
        }
 
+       public function testGettersAreSorted() {
+               $methods = ( new ReflectionClass( MediaWikiServices::class ) )
+                       ->getMethods( ReflectionMethod::IS_STATIC | ReflectionMethod::IS_PUBLIC );
+
+               $names = array_map( function ( $method ) {
+                       return $method->getName();
+               }, $methods );
+               $serviceNames = array_map( function ( $name ) {
+                       return "get$name";
+               }, array_keys( $this->provideGetService() ) );
+               $names = array_values( array_filter( $names, function ( $name ) use ( $serviceNames ) {
+                       return in_array( $name, $serviceNames );
+               } ) );
+
+               $sortedNames = $names;
+               sort( $sortedNames );
+
+               $this->assertSame( $sortedNames, $names,
+                       'Please keep service getters sorted alphabetically' );
+       }
 }
index 87a7dff..cb234b2 100644 (file)
  *
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
-class MediaWikiVersionFetcherTest extends PHPUnit\Framework\TestCase {
+class MediaWikiVersionFetcherTest extends MediaWikiTestCase {
 
        use MediaWikiCoversValidator;
 
        public function testReturnsResult() {
+               global $wgVersion;
                $versionFetcher = new MediaWikiVersionFetcher();
-               $this->assertInternalType( 'string', $versionFetcher->fetchVersion() );
+               $this->assertSame( $wgVersion, $versionFetcher->fetchVersion() );
        }
 
 }
index 3e3d04a..d75c0e5 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-use Wikimedia\ObjectFactory;
+use MediaWiki\MediaWikiServices;
 use Wikimedia\TestingAccessWrapper;
 
 /**
@@ -401,14 +401,12 @@ class MessageTest extends MediaWikiLangTestCase {
        }
 
        public function testRawHtmlInMsg() {
-               global $wgParserConf;
                $this->setMwGlobals( 'wgRawHtml', true );
                // We have to reset the core hook registration.
                // to register the html hook
                MessageCache::destroyInstance();
                $this->setMwGlobals( 'wgParser',
-                       ObjectFactory::constructClassInstance( $wgParserConf['class'], [ $wgParserConf ] )
-               );
+                       MediaWikiServices::getInstance()->getParserFactory()->create() );
 
                $msg = new RawMessage( '<html><script>alert("xss")</script></html>' );
                $txt = '<span class="error">&lt;html&gt; tags cannot be' .
index 57b42f6..ff4c198 100644 (file)
@@ -1386,7 +1386,7 @@ abstract class RevisionDbTestBase extends MediaWikiTestCase {
         */
        public function testNewKnownCurrent() {
                // Setup the services
-               $this->resetGlobalServices();
+               $this->overrideMwServices();
                $cache = new WANObjectCache( [ 'cache' => new HashBagOStuff() ] );
                $this->setService( 'MainWANObjectCache', $cache );
                $db = wfGetDB( DB_MASTER );
diff --git a/tests/phpunit/includes/ServiceWiringTest.php b/tests/phpunit/includes/ServiceWiringTest.php
new file mode 100644 (file)
index 0000000..74e8e1b
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * @coversNothing
+ */
+class ServiceWiringTest extends MediaWikiTestCase {
+       public function testServicesAreSorted() {
+               global $IP;
+               $services = array_keys( require "$IP/includes/ServiceWiring.php" );
+               $sortedServices = $services;
+               sort( $sortedServices );
+
+               $this->assertSame( $sortedServices, $services,
+                       'Please keep services sorted alphabetically' );
+       }
+}
index 3a1f078..c7f83de 100644 (file)
@@ -94,8 +94,6 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
         * @covers \MediaWiki\Storage\DerivedPageDataUpdater::getCanonicalParserOptions()
         */
        public function testGetCanonicalParserOptions() {
-               global $wgContLang;
-
                $user = $this->getTestUser()->getUser();
                $page = $this->getPage( __METHOD__ );
 
@@ -109,7 +107,8 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                $updater->prepareContent( $user, $update, false );
 
                $options1 = $updater->getCanonicalParserOptions();
-               $this->assertSame( $wgContLang, $options1->getUserLangObj() );
+               $this->assertSame( MediaWikiServices::getInstance()->getContentLanguage(),
+                       $options1->getUserLangObj() );
 
                $speculativeId = call_user_func( $options1->getSpeculativeRevIdCallback(), $page->getTitle() );
                $this->assertSame( $parentRev->getId() + 1, $speculativeId );
index 1958333..76bd59a 100644 (file)
@@ -28,7 +28,6 @@ trait McrReadNewSchemaOverride {
        }
 
        /**
-        * @override MediaWikiTestCase::getSchemaOverrides
         * @return array[]
         */
        protected function getSchemaOverrides( IMaintainableDatabase $db ) {
index 7275f90..cdcba4f 100644 (file)
@@ -28,7 +28,6 @@ trait McrWriteBothSchemaOverride {
        }
 
        /**
-        * @override MediaWikiTestCase::getSchemaOverrides
         * @return array[]
         */
        protected function getSchemaOverrides( IMaintainableDatabase $db ) {
index 5d516e8..bb72a57 100644 (file)
@@ -27,7 +27,6 @@ trait PreMcrSchemaOverride {
        }
 
        /**
-        * @override MediaWikiTestCase::getSchemaOverrides
         * @return array[]
         */
        protected function getSchemaOverrides( IMaintainableDatabase $db ) {
index 93aef34..b59282d 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 class TimeAdjustTest extends MediaWikiLangTestCase {
        protected function setUp() {
                parent::setUp();
@@ -11,13 +13,12 @@ class TimeAdjustTest extends MediaWikiLangTestCase {
         * @covers Language::userAdjust
         */
        public function testUserAdjust( $date, $localTZoffset, $expected ) {
-               global $wgContLang;
-
                $this->setMwGlobals( 'wgLocalTZoffset', $localTZoffset );
 
                $this->assertEquals(
                        $expected,
-                       strval( $wgContLang->userAdjust( $date, '' ) ),
+                       strval( MediaWikiServices::getInstance()->getContentLanguage()->
+                               userAdjust( $date, '' ) ),
                        "User adjust {$date} by {$localTZoffset} minutes should give {$expected}"
                );
        }
index 6600aa2..63803cc 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @group Database
  *
@@ -67,6 +69,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
 
                        $this->user = $this->userUser;
                }
+               $this->overrideMwServices();
        }
 
        protected function setUserPerm( $perm ) {
@@ -99,8 +102,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
         * @covers Title::checkQuickPermissions
         */
        public function testQuickPermissions() {
-               global $wgContLang;
-               $prefix = $wgContLang->getFormattedNsText( NS_PROJECT );
+               $prefix = MediaWikiServices::getInstance()->getContentLanguage()->
+                       getFormattedNsText( NS_PROJECT );
 
                $this->setUser( 'anon' );
                $this->setTitle( NS_TALK );
@@ -643,9 +646,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
         * @covers Title::checkPageRestrictions
         */
        public function testPageRestrictions() {
-               global $wgContLang;
-
-               $prefix = $wgContLang->getFormattedNsText( NS_PROJECT );
+               $prefix = MediaWikiServices::getInstance()->getContentLanguage()->
+                       getFormattedNsText( NS_PROJECT );
 
                $this->setTitle( NS_MAIN );
                $this->title->mRestrictionsLoaded = true;
index f9ffeae..d585240 100644 (file)
@@ -449,7 +449,7 @@ class TitleTest extends MediaWikiTestCase {
                # Format:
                # - expected
                # - Title name
-               # - wgContLang (expected in most case)
+               # - content language (expected in most cases)
                # - wgLang (on some specific pages)
                # - wgDefaultLanguageVariant
                # - Optional message
diff --git a/tests/phpunit/includes/api/ApiQueryDisabledTest.php b/tests/phpunit/includes/api/ApiQueryDisabledTest.php
new file mode 100644 (file)
index 0000000..52f1fdf
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * @group API
+ * @group medium
+ *
+ * @covers ApiQueryDisabled
+ */
+class ApiQueryDisabledTest extends ApiTestCase {
+       public function testDisabled() {
+               $this->mergeMwGlobalArrayValue( 'wgAPIPropModules',
+                       [ 'categories' => 'ApiQueryDisabled' ] );
+
+               $data = $this->doApiRequest( [
+                       'action' => 'query',
+                       'prop' => 'categories',
+               ] );
+
+               $this->assertArrayHasKey( 'warnings', $data[0] );
+               $this->assertArrayHasKey( 'categories', $data[0]['warnings'] );
+               $this->assertArrayHasKey( 'warnings', $data[0]['warnings']['categories'] );
+
+               $this->assertEquals( 'The "categories" module has been disabled.',
+                       $data[0]['warnings']['categories']['warnings'] );
+       }
+}
index 7170e55..0c5d026 100644 (file)
@@ -38,7 +38,6 @@ class AuthManagerTest extends \MediaWikiTestCase {
                parent::setUp();
 
                $this->setMwGlobals( [ 'wgAuth' => null ] );
-               $this->stashMwGlobals( [ 'wgHooks' ] );
        }
 
        /**
@@ -48,11 +47,10 @@ class AuthManagerTest extends \MediaWikiTestCase {
         * @return object $mock->expects( $expect )->method( ... ).
         */
        protected function hook( $hook, $expect ) {
-               global $wgHooks;
                $mock = $this->getMockBuilder( __CLASS__ )
                        ->setMethods( [ "on$hook" ] )
                        ->getMock();
-               $wgHooks[$hook] = [ $mock ];
+               $this->setTemporaryHook( $hook, $mock );
                return $mock->expects( $expect )->method( "on$hook" );
        }
 
@@ -613,42 +611,35 @@ class AuthManagerTest extends \MediaWikiTestCase {
                );
        }
 
-       public function testSetDefaultUserOptions() {
+       /**
+        * @dataProvider provideSetDefaultUserOptions
+        */
+       public function testSetDefaultUserOptions(
+               $contLang, $useContextLang, $expectedLang, $expectedVariant
+       ) {
                $this->initializeManager();
 
+               $this->setContentLang( $contLang );
                $context = \RequestContext::getMain();
                $reset = new ScopedCallback( [ $context, 'setLanguage' ], [ $context->getLanguage() ] );
                $context->setLanguage( 'de' );
-               $this->setContentLang( 'zh' );
-
-               $user = \User::newFromName( self::usernameForCreation() );
-               $user->addToDatabase();
-               $oldToken = $user->getToken();
-               $this->managerPriv->setDefaultUserOptions( $user, false );
-               $user->saveSettings();
-               $this->assertNotEquals( $oldToken, $user->getToken() );
-               $this->assertSame( 'zh', $user->getOption( 'language' ) );
-               $this->assertSame( 'zh', $user->getOption( 'variant' ) );
 
                $user = \User::newFromName( self::usernameForCreation() );
                $user->addToDatabase();
                $oldToken = $user->getToken();
-               $this->managerPriv->setDefaultUserOptions( $user, true );
+               $this->managerPriv->setDefaultUserOptions( $user, $useContextLang );
                $user->saveSettings();
                $this->assertNotEquals( $oldToken, $user->getToken() );
-               $this->assertSame( 'de', $user->getOption( 'language' ) );
-               $this->assertSame( 'zh', $user->getOption( 'variant' ) );
-
-               $this->setContentLang( 'fr' );
+               $this->assertSame( $expectedLang, $user->getOption( 'language' ) );
+               $this->assertSame( $expectedVariant, $user->getOption( 'variant' ) );
+       }
 
-               $user = \User::newFromName( self::usernameForCreation() );
-               $user->addToDatabase();
-               $oldToken = $user->getToken();
-               $this->managerPriv->setDefaultUserOptions( $user, true );
-               $user->saveSettings();
-               $this->assertNotEquals( $oldToken, $user->getToken() );
-               $this->assertSame( 'de', $user->getOption( 'language' ) );
-               $this->assertSame( null, $user->getOption( 'variant' ) );
+       public function provideSetDefaultUserOptions() {
+               return [
+                       [ 'zh', false, 'zh', 'zh' ],
+                       [ 'zh', true, 'de', 'zh' ],
+                       [ 'fr', true, 'de', null ],
+               ];
        }
 
        public function testForcePrimaryAuthenticationProviders() {
@@ -2380,7 +2371,8 @@ class AuthManagerTest extends \MediaWikiTestCase {
                $wgGroupPermissions['*']['createaccount'] = true;
                $wgGroupPermissions['*']['autocreateaccount'] = false;
 
-               \ObjectCache::$instances[__METHOD__] = new \HashBagOStuff();
+               $this->mergeMwGlobalArrayValue( 'wgObjectCaches',
+                       [ __METHOD__ => [ 'class' => 'HashBagOStuff' ] ] );
                $this->setMwGlobals( [ 'wgMainCacheType' => __METHOD__ ] );
 
                // Set up lots of mocks...
index b03eeba..1edb935 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @group Database
  * @group Cache
@@ -10,6 +12,7 @@ class MessageCacheTest extends MediaWikiLangTestCase {
        protected function setUp() {
                parent::setUp();
                $this->configureLanguages();
+               MessageCache::destroyInstance();
                MessageCache::singleton()->enable();
        }
 
@@ -57,12 +60,10 @@ class MessageCacheTest extends MediaWikiLangTestCase {
         * @param string|null $content Content of the created page, or null for a generic string
         */
        protected function makePage( $title, $lang, $content = null ) {
-               global $wgContLang;
-
                if ( $content === null ) {
                        $content = $lang;
                }
-               if ( $lang !== $wgContLang->getCode() ) {
+               if ( $lang !== MediaWikiServices::getInstance()->getContentLanguage()->getCode() ) {
                        $title = "$title/$lang";
                }
 
@@ -100,11 +101,9 @@ class MessageCacheTest extends MediaWikiLangTestCase {
        }
 
        public function testReplaceMsg() {
-               global $wgContLang;
-
                $messageCache = MessageCache::singleton();
                $message = 'go';
-               $uckey = $wgContLang->ucfirst( $message );
+               $uckey = MediaWikiServices::getInstance()->getContentLanguage()->ucfirst( $message );
                $oldText = $messageCache->get( $message ); // "Ausführen"
 
                $dbw = wfGetDB( DB_MASTER );
index 406bc96..b01a7db 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @group ContentHandler
  * @group Database
@@ -115,9 +117,8 @@ class TextContentTest extends MediaWikiLangTestCase {
         * @covers TextContent::preSaveTransform
         */
        public function testPreSaveTransform( $text, $expected ) {
-               global $wgContLang;
-
-               $options = ParserOptions::newFromUserAndLang( $this->context->getUser(), $wgContLang );
+               $options = ParserOptions::newFromUserAndLang( $this->context->getUser(),
+                       MediaWikiServices::getInstance()->getContentLanguage() );
 
                $content = $this->newContent( $text );
                $content = $content->preSaveTransform(
@@ -143,8 +144,8 @@ class TextContentTest extends MediaWikiLangTestCase {
         * @covers TextContent::preloadTransform
         */
        public function testPreloadTransform( $text, $expected ) {
-               global $wgContLang;
-               $options = ParserOptions::newFromUserAndLang( $this->context->getUser(), $wgContLang );
+               $options = ParserOptions::newFromUserAndLang( $this->context->getUser(),
+                       MediaWikiServices::getInstance()->getContentLanguage() );
 
                $content = $this->newContent( $text );
                $content = $content->preloadTransform( $this->context->getTitle(), $options );
index 4bb1ed2..b4b2948 100644 (file)
@@ -80,8 +80,7 @@ class WikitextContentHandlerTest extends MediaWikiLangTestCase {
         * @covers WikitextContentHandler::makeRedirectContent
         */
        public function testMakeRedirectContent( $title, $expected ) {
-               global $wgContLang;
-               $wgContLang->resetNamespaces();
+               MediaWikiServices::getInstance()->getContentLanguage()->resetNamespaces();
 
                MediaWikiServices::getInstance()->resetServiceForTesting( 'MagicWordFactory' );
 
index 687c7e0..91255eb 100644 (file)
@@ -442,4 +442,19 @@ just a test"
                        // @todo more...?
                ];
        }
+
+       /**
+        * @covers WikitextContent::preSaveTransform
+        * @covers WikitextContent::fillParserOutput
+        */
+       public function testHadSignature() {
+               $titleObj = Title::newFromText( __CLASS__ );
+
+               $content = new WikitextContent( '~~~~' );
+               $pstContent = $content->preSaveTransform(
+                       $titleObj, $this->getTestUser()->getUser(), new ParserOptions()
+               );
+
+               $this->assertTrue( $pstContent->getParserOutput( $titleObj )->getFlag( 'user-signature' ) );
+       }
 }
index 5a748cc..2c4e6b4 100644 (file)
@@ -311,6 +311,20 @@ class LoadBalancerTest extends MediaWikiTestCase {
                                $lb->getAnyOpenConnection( $i, $lb::CONN_TRX_AUTOCOMMIT ) );
                        $this->assertEquals( $conn2,
                                $lb->getConnection( $i, [], false, $lb::CONN_TRX_AUTOCOMMIT ) );
+
+                       $conn2->startAtomic( __METHOD__ );
+                       try {
+                               $lb->getConnection( $i, [], false, $lb::CONN_TRX_AUTOCOMMIT );
+                               $conn2->endAtomic( __METHOD__ );
+                               $this->fail( "No exception thrown." );
+                       } catch ( DBUnexpectedError $e ) {
+                               $this->assertEquals(
+                                       'Wikimedia\Rdbms\LoadBalancer::openConnection: ' .
+                                       'CONN_TRX_AUTOCOMMIT handle has a transaction.',
+                                       $e->getMessage()
+                               );
+                       }
+                       $conn2->endAtomic( __METHOD__ );
                }
 
                $lb->closeAll();
index 04aecc9..ef333f9 100644 (file)
@@ -667,7 +667,7 @@ class CSSMinTest extends MediaWikiTestCase {
        }
 
        /**
-        * Seperated because they are currently broken (T37492)
+        * Separated because they are currently broken (T37492)
         *
         * @group Broken
         * @dataProvider provideStringCases
index 6105678..16048bf 100644 (file)
@@ -4,6 +4,19 @@ class JavaScriptMinifierTest extends PHPUnit\Framework\TestCase {
 
        use MediaWikiCoversValidator;
 
+       protected function tearDown() {
+               parent::tearDown();
+               // Reset
+               $this->setMaxLineLength( 1000 );
+       }
+
+       private function setMaxLineLength( $val ) {
+               $classReflect = new ReflectionClass( JavaScriptMinifier::class );
+               $propertyReflect = $classReflect->getProperty( 'maxLineLength' );
+               $propertyReflect->setAccessible( true );
+               $propertyReflect->setValue( JavaScriptMinifier::class, $val );
+       }
+
        public static function provideCases() {
                return [
 
@@ -152,9 +165,6 @@ class JavaScriptMinifierTest extends PHPUnit\Framework\TestCase {
                        ],
                        [ "if(1)/a /g.exec('Pa ss');", "if(1)/a /g.exec('Pa ss');" ],
 
-                       // newline insertion after 1000 chars: break after the "++", not before
-                       [ str_repeat( ';', 996 ) . "if(x++);", str_repeat( ';', 996 ) . "if(x++\n);" ],
-
                        // Unicode letter characters should pass through ok in identifiers (T33187)
                        [ "var KaŝSkatolVal = {}", 'var KaŝSkatolVal={}' ],
 
@@ -203,40 +213,154 @@ class JavaScriptMinifierTest extends PHPUnit\Framework\TestCase {
                );
        }
 
-       public static function provideExponentLineBreaking() {
+       public static function provideLineBreaker() {
                return [
                        [
-                               // This one gets interpreted all together by the prior code;
-                               // no break at the 'E' happens.
-                               '1.23456789E55',
+                               // Regression tests for T34548.
+                               // Must not break between 'E' and '+'.
+                               'var name = 1.23456789E55;',
+                               [
+                                       'var',
+                                       'name',
+                                       '=',
+                                       '1.23456789E55',
+                                       ';',
+                               ],
+                       ],
+                       [
+                               'var name = 1.23456789E+5;',
+                               [
+                                       'var',
+                                       'name',
+                                       '=',
+                                       '1.23456789E+5',
+                                       ';',
+                               ],
+                       ],
+                       [
+                               'var name = 1.23456789E-5;',
+                               [
+                                       'var',
+                                       'name',
+                                       '=',
+                                       '1.23456789E-5',
+                                       ';',
+                               ],
                        ],
                        [
-                               // This one breaks under the bad code; splits between 'E' and '+'
-                               '1.23456789E+5',
+                               // Must not break before '++'
+                               'if(x++);',
+                               [
+                                       'if',
+                                       '(',
+                                       'x++',
+                                       ')',
+                                       ';',
+                               ],
                        ],
                        [
-                               // This one breaks under the bad code; splits between 'E' and '-'
-                               '1.23456789E-5',
+                               // Regression test for T201606.
+                               // Must not break between 'return' and Expression.
+                               // Was caused by bad state after '{}' in property value.
+                               <<<JAVASCRIPT
+                       call( function () {
+                               try {
+                               } catch (e) {
+                                       obj = {
+                                               key: 1 ? 0 : {}
+                                       };
+                               }
+                               return name === 'input';
+                       } );
+JAVASCRIPT
+                               ,
+                               [
+                                       'call',
+                                       '(',
+                                       'function',
+                                       '(',
+                                       ')',
+                                       '{',
+                                       'try',
+                                       '{',
+                                       '}',
+                                       'catch',
+                                       '(',
+                                       'e',
+                                       ')',
+                                       '{',
+                                       'obj',
+                                       '=',
+                                       '{',
+                                       'key',
+                                       ':',
+                                       '1',
+                                       '?',
+                                       '0',
+                                       ':',
+                                       '{',
+                                       '}',
+                                       '}',
+                                       ';',
+                                       '}',
+                                       // The return Statement:
+                                       //     return [no LineTerminator here] Expression
+                                       'return name',
+                                       '===',
+                                       "'input'",
+                                       ';',
+                                       '}',
+                                       ')',
+                                       ';',
+                               ]
+                       ],
+                       [
+                               // Regression test for T201606.
+                               // Must not break between 'return' and Expression.
+                               // FIXME: Cause?
+                               <<<JAVASCRIPT
+call( {
+       key: 1 ? 0 : function () {
+               return this;
+       }
+} );
+JAVASCRIPT
+                               ,
+                               [
+                                       'call',
+                                       '(',
+                                       '{',
+                                       'key',
+                                       ':',
+                                       '1',
+                                       '?',
+                                       '0',
+                                       ':',
+                                       'function',
+                                       '(',
+                                       ')',
+                                       '{',
+                                       'return', 'this', // FIXME
+                                       ';',
+                                       '}',
+                                       '}',
+                                       ')',
+                                       ';',
+                               ]
                        ],
                ];
        }
 
        /**
-        * @dataProvider provideExponentLineBreaking
+        * @dataProvider provideLineBreaker
         * @covers JavaScriptMinifier::minify
         */
-       public function testExponentLineBreaking( $num ) {
-               // Long line breaking was being incorrectly done between the base and
-               // exponent part of a number, causing a syntax error. The line should
-               // instead break at the start of the number. (T34548)
-               $prefix = 'var longVarName' . str_repeat( '_', 973 ) . '=';
-               $suffix = ',shortVarName=0;';
-
-               $input = $prefix . $num . $suffix;
-               $expected = $prefix . "\n" . $num . $suffix;
-
-               $minified = JavaScriptMinifier::minify( $input );
-
-               $this->assertEquals( $expected, $minified, "Line breaks must not occur in middle of exponent" );
+       public function testLineBreaker( $code, array $expectedLines ) {
+               $this->setMaxLineLength( 1 );
+               $actual = JavaScriptMinifier::minify( $code );
+               $this->assertEquals(
+                       array_merge( [ '' ], $expectedLines ),
+                       explode( "\n", $actual )
+               );
        }
 }
index a06ef62..7147c6f 100644 (file)
@@ -214,4 +214,54 @@ class MapCacheLRUTest extends PHPUnit\Framework\TestCase {
                $this->assertEquals( 1983, $cache->getField( 'MPs', 'Edwina Currie' ) );
                $this->assertEquals( 1970, $cache->getField( 'MPs', 'Neil Kinnock' ) );
        }
+
+       /**
+        * @covers MapCacheLRU::has()
+        * @covers MapCacheLRU::get()
+        * @covers MapCacheLRU::set()
+        * @covers MapCacheLRU::hasField()
+        * @covers MapCacheLRU::getField()
+        * @covers MapCacheLRU::setField()
+        */
+       public function testInvalidKeys() {
+               $cache = MapCacheLRU::newFromArray( [], 3 );
+
+               try {
+                       $cache->has( 3.4 );
+                       $this->fail( "No exception" );
+               } catch ( UnexpectedValueException $e ) {
+                       $this->assertRegExp( '/must be string or integer/', $e->getMessage() );
+               }
+               try {
+                       $cache->get( false );
+                       $this->fail( "No exception" );
+               } catch ( UnexpectedValueException $e ) {
+                       $this->assertRegExp( '/must be string or integer/', $e->getMessage() );
+               }
+               try {
+                       $cache->set( 3.4, 'x' );
+                       $this->fail( "No exception" );
+               } catch ( UnexpectedValueException $e ) {
+                       $this->assertRegExp( '/must be string or integer/', $e->getMessage() );
+               }
+
+               try {
+                       $cache->hasField( 'x', 3.4 );
+                       $this->fail( "No exception" );
+               } catch ( UnexpectedValueException $e ) {
+                       $this->assertRegExp( '/must be string or integer/', $e->getMessage() );
+               }
+               try {
+                       $cache->getField( 'x', false );
+                       $this->fail( "No exception" );
+               } catch ( UnexpectedValueException $e ) {
+                       $this->assertRegExp( '/must be string or integer/', $e->getMessage() );
+               }
+               try {
+                       $cache->setField( 'x', 3.4, 'x' );
+                       $this->fail( "No exception" );
+               } catch ( UnexpectedValueException $e ) {
+                       $this->assertRegExp( '/must be string or integer/', $e->getMessage() );
+               }
+       }
 }
index 1cbd86f..3e93794 100644 (file)
@@ -19,8 +19,6 @@
  */
 
 /**
- * @uses XhprofData
- * @uses AutoLoader
  * @copyright © 2014 Wikimedia Foundation and contributors
  * @since 1.25
  */
@@ -154,7 +152,6 @@ class XhprofDataTest extends PHPUnit\Framework\TestCase {
        /**
         * @covers XhprofData::getCallers
         * @covers XhprofData::getCallees
-        * @uses XhprofData
         */
        public function testEdges() {
                $xhprofData = $this->getXhprofDataFixture();
@@ -170,7 +167,6 @@ class XhprofDataTest extends PHPUnit\Framework\TestCase {
 
        /**
         * @covers XhprofData::getCriticalPath
-        * @uses XhprofData
         */
        public function testCriticalPath() {
                $xhprofData = $this->getXhprofDataFixture();
index 662bb96..22aa667 100644 (file)
@@ -1569,6 +1569,44 @@ class WANObjectCacheTest extends PHPUnit\Framework\TestCase {
                $wanCache->resetCheckKey( 'test' );
        }
 
+       public function testEpoch() {
+               $bag = new HashBagOStuff();
+               $cache = new WANObjectCache( [ 'cache' => $bag, 'pool' => 'testcache-hash' ] );
+               $key = $cache->makeGlobalKey( 'The whole of the Law' );
+
+               $now = microtime( true );
+               $cache->setMockTime( $now );
+
+               $cache->set( $key, 'Do what thou Wilt' );
+               $cache->touchCheckKey( $key );
+
+               $then = $now;
+               $now += 30;
+               $this->assertEquals( 'Do what thou Wilt', $cache->get( $key ) );
+               $this->assertEquals( $then, $cache->getCheckKeyTime( $key ), 'Check key init', 0.01 );
+
+               $cache = new WANObjectCache( [
+                       'cache' => $bag,
+                       'pool' => 'testcache-hash',
+                       'epoch' => $now - 3600
+               ] );
+               $cache->setMockTime( $now );
+
+               $this->assertEquals( 'Do what thou Wilt', $cache->get( $key ) );
+               $this->assertEquals( $then, $cache->getCheckKeyTime( $key ), 'Check key kept', 0.01 );
+
+               $now += 30;
+               $cache = new WANObjectCache( [
+                       'cache' => $bag,
+                       'pool' => 'testcache-hash',
+                       'epoch' => $now + 3600
+               ] );
+               $cache->setMockTime( $now );
+
+               $this->assertFalse( $cache->get( $key ), 'Key rejected due to epoch' );
+               $this->assertEquals( $now, $cache->getCheckKeyTime( $key ), 'Check key reset', 0.01 );
+       }
+
        /**
         * @dataProvider provideAdaptiveTTL
         * @covers WANObjectCache::adaptiveTTL()
index 6fbb474..7aef246 100644 (file)
@@ -26,6 +26,17 @@ class SVGMetadataExtractorTest extends MediaWikiTestCase {
                $this->assertMetadata( $infile, $expected );
        }
 
+       /**
+        * @dataProvider provideSvgUnits
+        */
+       public function testScaleSVGUnit( $inUnit, $expected ) {
+               $this->assertEquals(
+                       $expected,
+                       SVGReader::scaleSVGUnit( $inUnit ),
+                       'SVG unit conversion and scaling failure'
+               );
+       }
+
        function assertMetadata( $infile, $expected ) {
                try {
                        $data = SVGMetadataExtractor::getMetadata( $infile );
@@ -123,6 +134,16 @@ class SVGMetadataExtractorTest extends MediaWikiTestCase {
                                        'translations' => []
                                ],
                        ],
+                       [
+                               "$base/comma_separated_viewbox.svg",
+                               [
+                                       'width' => 512,
+                                       'height' => 594,
+                                       'originalWidth' => '100%',
+                                       'originalHeight' => '100%',
+                                       'translations' => []
+                               ],
+                       ],
                ];
        }
 
@@ -152,4 +173,34 @@ class SVGMetadataExtractorTest extends MediaWikiTestCase {
                        ],
                ];
        }
+
+       public static function provideSvgUnits() {
+               return [
+                       [ '1' , 1 ],
+                       [ '1.1' , 1.1 ],
+                       [ '0.1' , 0.1 ],
+                       [ '.1' , 0.1 ],
+                       [ '1e2' , 100 ],
+                       [ '1E2' , 100 ],
+                       [ '+1' , 1 ],
+                       [ '-1' , -1 ],
+                       [ '-1.1' , -1.1 ],
+                       [ '1e+2' , 100 ],
+                       [ '1e-2' , 0.01 ],
+                       [ '10px' , 10 ],
+                       [ '10pt' , 10 * 1.25 ],
+                       [ '10pc' , 10 * 15 ],
+                       [ '10mm' , 10 * 3.543307 ],
+                       [ '10cm' , 10 * 35.43307 ],
+                       [ '10in' , 10 * 90 ],
+                       [ '10em' , 10 * 16 ],
+                       [ '10ex' , 10 * 12 ],
+                       [ '10%' , 51.2 ],
+                       [ '10 px' , 10 ],
+                       // Invalid values
+                       [ '1e1.1', 10 ],
+                       [ '10bp', 10 ],
+                       [ 'p10', null ],
+               ];
+       }
 }
diff --git a/tests/phpunit/includes/parser/ParserFactoryTest.php b/tests/phpunit/includes/parser/ParserFactoryTest.php
new file mode 100644 (file)
index 0000000..f37bdfc
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * @covers ParserFactory
+ */
+class ParserFactoryTest extends MediaWikiTestCase {
+       /**
+        * For backwards compatibility, all parameters to the parser constructor are optional and
+        * default to the appropriate global service, so it's easy to forget to update ParserFactory to
+        * actually pass the parameters it's supposed to.
+        */
+       public function testConstructorArgNum() {
+               $factoryConstructor = new ReflectionMethod( 'ParserFactory', '__construct' );
+               $instanceConstructor = new ReflectionMethod( 'Parser', '__construct' );
+               // Subtract one for the ParserFactory itself
+               $this->assertSame( $instanceConstructor->getNumberOfParameters() - 1,
+                       $factoryConstructor->getNumberOfParameters(),
+                       'Parser and ParserFactory constructors have an inconsistent number of parameters. ' .
+                       'Did you add a parameter to one and not the other?' );
+       }
+
+       public function testAllArgumentsWerePassed() {
+               $factoryConstructor = new ReflectionMethod( 'ParserFactory', '__construct' );
+               $mocks = [];
+               foreach ( $factoryConstructor->getParameters() as $param ) {
+                       $type = (string)$param->getType();
+                       if ( $type === 'array' ) {
+                               $val = [ 'porcupines will tell me your secrets' . count( $mocks ) ];
+                       } elseif ( class_exists( $type ) || interface_exists( $type ) ) {
+                               $val = $this->createMock( $type );
+                       } elseif ( $type === '' ) {
+                               // Optimistically assume a string is okay
+                               $val = 'I will de-quill them first' . count( $mocks );
+                       } else {
+                               $this->fail( "Unrecognized parameter type $type in ParserFactory constructor" );
+                       }
+                       $mocks[] = $val;
+               }
+
+               $factory = new ParserFactory( ...$mocks );
+               $parser = $factory->create();
+
+               foreach ( ( new ReflectionObject( $parser ) )->getProperties() as $prop ) {
+                       $prop->setAccessible( true );
+                       foreach ( $mocks as $idx => $mock ) {
+                               if ( $prop->getValue( $parser ) === $mock ) {
+                                       unset( $mocks[$idx] );
+                               }
+                       }
+               }
+
+               $this->assertCount( 0, $mocks, 'Not all arguments to the ParserFactory constructor were ' .
+                       'found in Parser member variables' );
+       }
+}
index 29f1c8c..8c17780 100644 (file)
@@ -45,9 +45,9 @@ class ParserOptionsTest extends MediaWikiTestCase {
        public function testNewCanonical() {
                $wgUser = $this->getMutableTestUser()->getUser();
                $wgLang = Language::factory( 'fr' );
-               $wgContLang = Language::factory( 'qqx' );
+               $contLang = Language::factory( 'qqx' );
 
-               $this->setContentLang( $wgContLang );
+               $this->setContentLang( $contLang );
                $this->setMwGlobals( [
                        'wgUser' => $wgUser,
                        'wgLang' => $wgLang,
@@ -80,13 +80,12 @@ class ParserOptionsTest extends MediaWikiTestCase {
                $this->assertSame( $user, $popt->getUser() );
                $this->assertSame( $lang, $popt->getUserLangObj() );
 
-               // Passing 'canonical' uses an anon and $wgContLang, and ignores
-               // any passed $userLang
+               // Passing 'canonical' uses an anon and $contLang, and ignores any passed $userLang
                $popt = ParserOptions::newCanonical( 'canonical' );
                $this->assertTrue( $popt->getUser()->isAnon() );
-               $this->assertSame( $wgContLang, $popt->getUserLangObj() );
+               $this->assertSame( $contLang, $popt->getUserLangObj() );
                $popt = ParserOptions::newCanonical( 'canonical', $lang2 );
-               $this->assertSame( $wgContLang, $popt->getUserLangObj() );
+               $this->assertSame( $contLang, $popt->getUserLangObj() );
 
                // Passing an IContextSource uses the user and lang from it, and ignores
                // any passed $userLang
index 7707395..560b921 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use MediaWiki\MediaWikiServices;
+
 /**
  * Basic tests for Parser::getPreloadText
  * @author Antoine Musso
@@ -42,10 +45,9 @@ class ParserPreloadTest extends MediaWikiTestCase {
        private $title;
 
        protected function setUp() {
-               global $wgContLang;
-
                parent::setUp();
-               $this->testParserOptions = ParserOptions::newFromUserAndLang( new User, $wgContLang );
+               $this->testParserOptions = ParserOptions::newFromUserAndLang( new User,
+                       MediaWikiServices::getInstance()->getContentLanguage() );
 
                $this->testParser = new Parser();
                $this->testParser->Options( $this->testParserOptions );
index c415b58..6b3e05d 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @covers Preprocessor
  *
@@ -42,9 +44,9 @@ class PreprocessorTest extends MediaWikiTestCase {
        ];
 
        protected function setUp() {
-               global $wgContLang;
                parent::setUp();
-               $this->mOptions = ParserOptions::newFromUserAndLang( new User, $wgContLang );
+               $this->mOptions = ParserOptions::newFromUserAndLang( new User,
+                       MediaWikiServices::getInstance()->getContentLanguage() );
 
                $this->mPreprocessors = [];
                foreach ( self::$classNames as $className ) {
index bc09adc..06da7a5 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @group Database
  * @group Parser
@@ -45,8 +47,8 @@ class TagHooksTest extends MediaWikiTestCase {
        }
 
        private function getParserOptions() {
-               global $wgContLang;
-               $popt = ParserOptions::newFromUserAndLang( new User, $wgContLang );
+               $popt = ParserOptions::newFromUserAndLang( new User,
+                       MediaWikiServices::getInstance()->getContentLanguage() );
                return $popt;
        }
 
@@ -54,8 +56,7 @@ class TagHooksTest extends MediaWikiTestCase {
         * @dataProvider provideValidNames
         */
        public function testTagHooks( $tag ) {
-               global $wgParserConf;
-               $parser = new Parser( $wgParserConf );
+               $parser = MediaWikiServices::getInstance()->getParserFactory()->create();
 
                $parser->setHook( $tag, [ $this, 'tagCallback' ] );
                $parserOutput = $parser->parse(
@@ -73,8 +74,7 @@ class TagHooksTest extends MediaWikiTestCase {
         * @expectedException MWException
         */
        public function testBadTagHooks( $tag ) {
-               global $wgParserConf;
-               $parser = new Parser( $wgParserConf );
+               $parser = MediaWikiServices::getInstance()->getParserFactory()->create();
 
                $parser->setHook( $tag, [ $this, 'tagCallback' ] );
                $parser->parse(
@@ -89,8 +89,7 @@ class TagHooksTest extends MediaWikiTestCase {
         * @dataProvider provideValidNames
         */
        public function testFunctionTagHooks( $tag ) {
-               global $wgParserConf;
-               $parser = new Parser( $wgParserConf );
+               $parser = MediaWikiServices::getInstance()->getParserFactory()->create();
 
                $parser->setFunctionTagHook( $tag, [ $this, 'functionTagCallback' ], 0 );
                $parserOutput = $parser->parse(
@@ -108,8 +107,7 @@ class TagHooksTest extends MediaWikiTestCase {
         * @expectedException MWException
         */
        public function testBadFunctionTagHooks( $tag ) {
-               global $wgParserConf;
-               $parser = new Parser( $wgParserConf );
+               $parser = MediaWikiServices::getInstance()->getParserFactory()->create();
 
                $parser->setFunctionTagHook(
                        $tag,
index 80b9838..7afdd0a 100644 (file)
@@ -51,7 +51,6 @@ abstract class PasswordTestCase extends MediaWikiTestCase {
         * parameter (a password) should match.
         * @return array
         * @throws MWException
-        * @abstract
         */
        public static function providePasswordTests() {
                throw new MWException( "Not implemented" );
index 296691d..43c678e 100644 (file)
@@ -3,7 +3,6 @@
 use MediaWiki\Auth\AuthManager;
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Preferences\DefaultPreferencesFactory;
-use Wikimedia\ObjectFactory;
 use Wikimedia\TestingAccessWrapper;
 
 /**
@@ -38,13 +37,13 @@ class DefaultPreferencesFactoryTest extends MediaWikiTestCase {
 
        public function setUp() {
                parent::setUp();
-               global $wgParserConf;
                $this->context = new RequestContext();
                $this->context->setTitle( Title::newFromText( self::class ) );
-               $this->setMwGlobals( 'wgParser',
-                       ObjectFactory::constructClassInstance( $wgParserConf['class'], [ $wgParserConf ] )
-               );
-               $this->config = MediaWikiServices::getInstance()->getMainConfig();
+
+               $services = MediaWikiServices::getInstance();
+
+               $this->setMwGlobals( 'wgParser', $services->getParserFactory()->create() );
+               $this->config = $services->getMainConfig();
        }
 
        /**
index 784fed0..1da6fb3 100644 (file)
@@ -1,4 +1,6 @@
 <?php
+
+use MediaWiki\MediaWikiServices;
 use Wikimedia\ScopedCallback;
 
 /**
@@ -142,8 +144,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
        public function testConflictResolution(
                $test, $aliasesList, $alias, $expectedName, $expectedAlias, $expectWarnings
        ) {
-               global $wgContLang;
-               $lang = clone $wgContLang;
+               $lang = clone MediaWikiServices::getInstance()->getContentLanguage();
                $lang->mExtendedSpecialPageAliases = $aliasesList;
                $this->setContentLang( $lang );
                $this->setMwGlobals( 'wgSpecialPages',
index 84fa71a..bcd3d84 100644 (file)
@@ -35,7 +35,7 @@ class SpecialMyLanguageTest extends MediaWikiTestCase {
         * @param string $userLang
         */
        public function testFindTitle( $expected, $subpage, $langCode, $userLang ) {
-               $this->setMwGlobals( 'wgLanguageCode', $langCode );
+               $this->setContentLang( $langCode );
                $special = new SpecialMyLanguage();
                $special->getContext()->setLanguage( $userLang );
                // Test with subpages both enabled and disabled
index b20557f..a5ebaa5 100644 (file)
@@ -257,6 +257,11 @@ class RemexDriverTest extends MediaWikiTestCase {
                        '<i><blockquote>x</i></blockquote>',
                        '<i></i><blockquote><p><i>x</i></p></blockquote>',
                ],
+               [
+                       'p-wrap ended by reparenting (T200827)',
+                       '<i><blockquote><p></i>',
+                       '<i></i><blockquote><p><i></i></p><p><i></i></p></blockquote>',
+               ],
        ];
 
        public function provider() {
index c97bdaf..8ccacfc 100644 (file)
@@ -103,9 +103,9 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
         * @covers LanguageConverter::getUserVariant
         */
        public function testGetPreferredVariantUserOptionForForeignLanguage() {
-               global $wgContLang, $wgUser;
+               global $wgUser;
 
-               $wgContLang = Language::factory( 'en' );
+               $this->setContentLang( 'en' );
                $wgUser = new User;
                $wgUser->load(); // from 'defaults'
                $wgUser->mId = 1;
@@ -122,9 +122,9 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
         * @covers LanguageConverter::getURLVariant
         */
        public function testGetPreferredVariantHeaderUserVsUrl() {
-               global $wgContLang, $wgRequest, $wgUser;
+               global $wgRequest, $wgUser;
 
-               $wgContLang = Language::factory( 'tg-latn' );
+               $this->setContentLang( 'tg-latn' );
                $wgRequest->setVal( 'variant', 'tg' );
                $wgUser = User::newFromId( "admin" );
                $wgUser->setId( 1 );
@@ -150,9 +150,9 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
         * @covers LanguageConverter::getURLVariant
         */
        public function testGetPreferredVariantDefaultLanguageVsUrlVariant() {
-               global $wgDefaultLanguageVariant, $wgRequest, $wgContLang;
+               global $wgDefaultLanguageVariant, $wgRequest;
 
-               $wgContLang = Language::factory( 'tg-latn' );
+               $this->setContentLang( 'tg-latn' );
                $wgDefaultLanguageVariant = 'tg';
                $wgRequest->setVal( 'variant', null );
                $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
index c215b99..9357451 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace MediaWiki\Tests\Maintenance;
 
+use MediaWiki\MediaWikiServices;
 use DumpBackup;
 use ManualLogEntry;
 use Title;
@@ -145,8 +146,6 @@ class BackupDumperLoggerTest extends DumpTestCase {
        }
 
        function testPlain() {
-               global $wgContLang;
-
                // Preparing the dump
                $fname = $this->getNewTempFile();
 
@@ -165,8 +164,9 @@ class BackupDumperLoggerTest extends DumpTestCase {
                $this->assertLogItem( $this->logId1, "BackupDumperLogUserA",
                        $this->userId1, null, "type", "subtype", "PageA" );
 
-               $this->assertNotNull( $wgContLang, "Content language object validation" );
-               $namespace = $wgContLang->getNsText( NS_TALK );
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               $this->assertNotNull( $contLang, "Content language object validation" );
+               $namespace = $contLang->getNsText( NS_TALK );
                $this->assertInternalType( 'string', $namespace );
                $this->assertGreaterThan( 0, strlen( $namespace ) );
                $this->assertLogItem( $this->logId2, "BackupDumperLogUserB",
@@ -181,8 +181,6 @@ class BackupDumperLoggerTest extends DumpTestCase {
        }
 
        function testXmlDumpsBackupUseCaseLogging() {
-               global $wgContLang;
-
                $this->checkHasGzip();
 
                // Preparing the dump
@@ -218,8 +216,9 @@ class BackupDumperLoggerTest extends DumpTestCase {
                $this->assertLogItem( $this->logId1, "BackupDumperLogUserA",
                        $this->userId1, null, "type", "subtype", "PageA" );
 
-               $this->assertNotNull( $wgContLang, "Content language object validation" );
-               $namespace = $wgContLang->getNsText( NS_TALK );
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               $this->assertNotNull( $contLang, "Content language object validation" );
+               $namespace = $contLang->getNsText( NS_TALK );
                $this->assertInternalType( 'string', $namespace );
                $this->assertGreaterThan( 0, strlen( $namespace ) );
                $this->assertLogItem( $this->logId2, "BackupDumperLogUserB",
index 7cf042d..d83dedb 100755 (executable)
@@ -29,6 +29,7 @@ class PHPUnitMaintClass extends Maintenance {
 
        public function __construct() {
                parent::__construct();
+               $this->setAllowUnregisteredOptions( true );
                $this->addOption(
                        'with-phpunitclass',
                        'Class name of the PHPUnit entry point to use',
index e6d2511..a1bd20a 100644 (file)
@@ -1,8 +1,7 @@
 {
        "extends": [
-               "../../.eslintrc.json",
-               "plugin:qunit/recommended",
-               "plugin:qunit/two"
+               "wikimedia/qunit",
+               "../../.eslintrc.json"
        ],
        "env": {
                "qunit": true
                "operator-linebreak": 0,
                "quote-props": [ "error", "as-needed" ],
                "valid-jsdoc": 0,
-               "qunit/no-assert-equal": "error",
-               "qunit/no-early-return": "error",
-               "qunit/no-negated-ok": "error",
                "qunit/require-expect": 0,
                "qunit/resolve-async": 0
-       },
-       "plugins": [ "qunit" ]
+       }
 }
index 3b710c4..2238fce 100644 (file)
@@ -103,7 +103,7 @@ if ( isset( $_GET['modules'] ) ) {
                                . '} );';
                } else {
                        // Default
-                       $response .= 'mw.loader.state(' . json_encode( $module ) . ', "missing" );' . "\n";
+                       $response .= 'mw.loader.state(' . json_encode( [ $module => 'missing' ] ) . ');' . "\n";
                }
        }
 }
index 2865cbb..e49110f 100644 (file)
@@ -90,7 +90,7 @@
                [ '1', false, 1, 'A super malformed IP Address' ],
                [ 'Just text', false, -Infinity, 'A line with just text' ],
                [ '45.238.27.109Postfix', false, 45238027109, 'An IP address with a connected postfix' ],
-               [ '45.238.27.109 postfix', false, 45238027109, 'An IP address with a seperated postfix' ]
+               [ '45.238.27.109 postfix', false, 45238027109, 'An IP address with a separated postfix' ]
        ];
        parserTest( 'IPv4', 'IPAddress', ipv4 );
 
index c415953..65765f2 100644 (file)
                );
        } );
 
+       QUnit.test( 'RLQ.push', function ( assert ) {
+               /* global RLQ */
+               var loaded = 0,
+                       done = assert.async();
+               mw.loader.testCallback = function () {
+                       loaded++;
+                       delete mw.loader.testCallback;
+               };
+               mw.loader.implement( 'test.rlq-push', [ QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/mwLoaderTestCallback.js' ) ] );
+
+               RLQ.push( [ 'test.rlq-push', function () {
+                       assert.strictEqual( loaded, 1, 'Load the required module' );
+                       done();
+               } ] );
+       } );
+
 }( mediaWiki ) );
index de593d5..1a1affa 100644 (file)
                var done = assert.async();
 
                mw.loader.register( [
-                       [ 'test.circle1', '0', [ 'test.circle2' ] ],
-                       [ 'test.circle2', '0', [ 'test.circle3' ] ],
-                       [ 'test.circle3', '0', [ 'test.circle1' ] ]
+                       [ 'test.set.circleA', '0', [ 'test.set.circleB' ] ],
+                       [ 'test.set.circleB', '0', [ 'test.set.circleC' ] ],
+                       [ 'test.set.circleC', '0', [ 'test.set.circleA' ] ]
                ] );
-               mw.loader.using( 'test.circle3' ).then(
+               mw.loader.using( 'test.set.circleC' ).then(
                        function done() {
                                assert.ok( false, 'Unexpected resolution, expected error.' );
                        },
                mw.redefineFallbacksForTest();
 
                mw.loader.register( [
-                       [ 'test.shim.circle1', '0', [ 'test.shim.circle2' ] ],
-                       [ 'test.shim.circle2', '0', [ 'test.shim.circle3' ] ],
-                       [ 'test.shim.circle3', '0', [ 'test.shim.circle1' ] ]
+                       [ 'test.shim.circleA', '0', [ 'test.shim.circleB' ] ],
+                       [ 'test.shim.circleB', '0', [ 'test.shim.circleC' ] ],
+                       [ 'test.shim.circleC', '0', [ 'test.shim.circleA' ] ]
                ] );
-               mw.loader.using( 'test.shim.circle3' ).then(
+               mw.loader.using( 'test.shim.circleC' ).then(
                        function done() {
                                assert.ok( false, 'Unexpected resolution, expected error.' );
                        },
        QUnit.test( '.load() - Error: Circular dependency', function ( assert ) {
                var capture = [];
                mw.loader.register( [
-                       [ 'test.circleA', '0', [ 'test.circleB' ] ],
-                       [ 'test.circleB', '0', [ 'test.circleC' ] ],
-                       [ 'test.circleC', '0', [ 'test.circleA' ] ]
+                       [ 'test.load.circleA', '0', [ 'test.load.circleB' ] ],
+                       [ 'test.load.circleB', '0', [ 'test.load.circleC' ] ],
+                       [ 'test.load.circleC', '0', [ 'test.load.circleA' ] ]
                ] );
                this.sandbox.stub( mw, 'track', function ( topic, data ) {
                        capture.push( {
                        } );
                } );
 
-               mw.loader.load( 'test.circleC' );
+               mw.loader.load( 'test.load.circleC' );
                assert.deepEqual(
                        [ {
                                topic: 'resourceloader.exception',
-                               error: 'Circular reference detected: test.circleB -> test.circleC',
+                               error: 'Circular reference detected: test.load.circleB -> test.load.circleC',
                                source: 'resolve'
                        } ],
                        capture,
                );
        } );
 
+       QUnit.test( '.load() - Error: Circular dependency (direct)', function ( assert ) {
+               var capture = [];
+               mw.loader.register( [
+                       [ 'test.load.circleDirect', '0', [ 'test.load.circleDirect' ] ]
+               ] );
+               this.sandbox.stub( mw, 'track', function ( topic, data ) {
+                       capture.push( {
+                               topic: topic,
+                               error: data.exception && data.exception.message,
+                               source: data.source
+                       } );
+               } );
+
+               mw.loader.load( 'test.load.circleDirect' );
+               assert.deepEqual(
+                       [ {
+                               topic: 'resourceloader.exception',
+                               error: 'Circular reference detected: test.load.circleDirect -> test.load.circleDirect',
+                               source: 'resolve'
+                       } ],
+                       capture,
+                       'Detect a direct self-dependency'
+               );
+       } );
+
        QUnit.test( '.using() - Error: Unregistered', function ( assert ) {
                var done = assert.async();
 
                assert.strictEqual( mw.loader.getState( 'test.module7' ), 'registered', 'Expected "registered" state for test.module7' );
                assert.strictEqual( mw.loader.getState( 'test.module8' ), 'loaded', 'Expected "loaded" state for test.module8' );
                assert.strictEqual( mw.loader.getState( 'test.module9' ), 'registered', 'Expected "registered" state for test.module9' );
-               mw.loader.state( 'test.module7', 'missing' );
+               mw.loader.state( { 'test.module7': 'missing' } );
                assert.strictEqual( mw.loader.getState( 'test.module7' ), 'missing', 'Expected "missing" state for test.module7' );
                assert.strictEqual( mw.loader.getState( 'test.module8' ), 'error', 'Expected "error" state for test.module8' );
                assert.strictEqual( mw.loader.getState( 'test.module9' ), 'error', 'Expected "error" state for test.module9' );
                        },
                        function ( e, dependencies ) {
                                assert.strictEqual( Array.isArray( dependencies ), true, 'Expected array of dependencies' );
-                               assert.deepEqual( dependencies, [ 'test.module7' ], 'Error callback called with module test.module7' );
+                               assert.deepEqual(
+                                       dependencies,
+                                       [ 'jquery', 'mediawiki.base', 'test.module7' ],
+                                       'Error callback called with module test.module7'
+                               );
                        }
                );
                mw.loader.using(
                                dependencies.sort();
                                assert.deepEqual(
                                        dependencies,
-                                       [ 'test.module7', 'test.module8', 'test.module9' ],
+                                       [ 'jquery', 'mediawiki.base', 'test.module7', 'test.module8', 'test.module9' ],
                                        'Error callback called with all three modules as dependencies'
                                );
                        }
                        },
                        function ( e, badmodules ) {
                                assert.ok( true, 'Error handler should be invoked.' );
-                               // As soon as server spits out state('testMissing', 'missing');
+                               // As soon as server sets state of 'testMissing' to 'missing'
                                // it will bubble up and trigger the error callback.
                                // Therefor the badmodules array is not testUsesMissing or testUsesNestedMissing.
                                assert.deepEqual( badmodules, [ 'testMissing' ], 'Bad modules as expected.' );