From: jenkins-bot Date: Thu, 20 Sep 2018 22:31:11 +0000 (+0000) Subject: Merge "user: Allow "CAS update failed" exceptions to be normalised" X-Git-Tag: 1.34.0-rc.0~4037 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=6f3d5a5204770b7e9076ec0c956631c32a9e1114;hp=65f714e1e679127c4d38a40e7b23da8cee2195d6 Merge "user: Allow "CAS update failed" exceptions to be normalised" --- diff --git a/.eslintrc.json b/.eslintrc.json index 4630e071e5..c0767517ea 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -8,8 +8,6 @@ "module": false, "mw": false, "$": false, - "mediaWiki": false, - "jQuery": false, "OO": false }, "rules": { diff --git a/.gitattributes b/.gitattributes index 786c09f0e5..81b7a33173 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,6 +5,7 @@ *~ export-ignore #*# export-ignore .* export-ignore +*.htaccess -export-ignore package.json export-ignore README.mediawiki export-ignore Gemfile* export-ignore diff --git a/.phpcs.xml b/.phpcs.xml index bd0ab82da3..2bce5b2a59 100644 --- a/.phpcs.xml +++ b/.phpcs.xml @@ -2,14 +2,12 @@ - - diff --git a/HISTORY b/HISTORY index bc74a6b700..46650366e5 100644 --- a/HISTORY +++ b/HISTORY @@ -2,6 +2,32 @@ Change notes from older releases. For current info see RELEASE-NOTES-1.32. = MediaWiki 1.31 = +== MediaWiki 1.31.1 == + +This is a security and maintenance release of the MediaWiki 1.31 branch. + +=== Changes since MediaWiki 1.31.0 === +* (T169545, CVE-2018-0503) SECURITY: $wgRateLimits entry for 'user' overrides + 'newbie'. +* (T194605, CVE-2018-0505) SECURITY: BotPasswords can bypass CentralAuth's + account lock. +* (T199029, CVE-2018-13258) SECURITY: Tarball was missing .htaccess files. +* (T197229) Bundle Nuke extension, it was accidentally omitted. +* (T193995) Fix undefined patchPath() method call in parser tests. +* (T198687) Fix various selectFields methods to use the string 'NULL', not null. +* Special:BotPasswords now requires reauthentication. +* (T191608, T187638) Add 'logid' parameter to Special:Log. +* (T193829) Indicate when a Bot Password needs reset. +* (T198037) GitInfo: Don't try shelling out if it's disabled. +* (T151415) Log email changes. +* (T197206) Fix performance regression when multiple DB used without caching. +* (T197030) PHPSessionHandler: Suppress headers warnings in initialize(). +* (T182377, T196793) Exif: Guard against uncountable tag values. +* (T200861) Fix total breakage of SQLite web upgrade. +* (T200864) Fix pingback over-reporting on non-MySQL databases +* (T202550) Unbreak SpecialListusersHeaderForm and SpecialListusersHeader + hooks. + == MediaWiki 1.31.0 == === Changes since MediaWiki 1.31.0-rc.2 === @@ -488,6 +514,43 @@ There's usually someone online in #mediawiki on irc.freenode.net. = MediaWiki 1.30 = +== MediaWiki 1.30.1 == + +This is a security and maintenance release of the MediaWiki 1.30 branch. + +=== Changes since MediaWiki 1.30.0 === +* (T169545, CVE-2018-0503) SECURITY: $wgRateLimits entry for 'user' overrides + 'newbie'. +* (T194605, CVE-2018-0505) SECURITY: BotPasswords can bypass CentralAuth's + account lock. +* (T87572) Make FormatMetadata::flattenArrayReal() work for an associative array. +* Updated composer/spdx-licenses from 1.1.4 to 1.3.0 (development dependency). +* (T189567) the CLI installer (maintenance/install.php) learned to detect and + include extensions. Pass --with-extensions to enable that feature. +* (T190503) Let built-in web server (maintenance/dev) handle .php requests. +* (T167507) selenium: Run Chrome headlessly. +* selenium: Pass -no-sandbox to Chrome under Docker. +* (T179190) selenium: Move logic for running tests from package.json to selenium.sh +* (T192584) Stop incorrectly passing USE INDEX to RecentChange::newFromConds(). +* Add default edit rate limit of 90 edits/minute for all users. +* (T186565) Fix PHP Notice from `ob_end_flush()` in `FileRepo::streamFile()`. +* oojs/oojs-ui updated to remove an unnecessary dependancy. +* (T196125) php-memcached 3.0 (provided with PHP 7.0) is now supported. +* (T118683) Fix exception from &$user deref on HHVM in the TitleMoveComplete hook. +* (T196672) The mtime of extension.json files is now able to be zero +* (T180403) Validate $length in padleft/padright parser functions. +* (T143790) Make $wgEmailConfirmToEdit only affect edit actions. +* (T193995) Fix undefined patchPath() method call in parser tests. +* Special:BotPasswords now requires reauthentication. +* (T191608, T187638) Add 'logid' parameter to Special:Log. +* (T193829) Indicate when a Bot Password needs reset. +* (T151415) Log email changes. +* (T200861) Fix total breakage of SQLite web upgrade. +* (T202550) Unbreak SpecialListusersHeaderForm and SpecialListusersHeader + hooks. +* (T190539) Explicitly require Postgres 9.1. +* (T118420) Unbreak Oracle installer. + == MediaWiki 1.30.0 == === Changes since MediaWiki 1.30.0-rc.0 === @@ -751,6 +814,49 @@ changes to languages because of Phabricator reports. = MediaWiki 1.29 = +== MediaWiki 1.29.3 == + +This is a security and maintenance release of the MediaWiki 1.29 branch. + +=== Changes since 1.29.2 === +* (T169545, CVE-2018-0503) SECURITY: $wgRateLimits entry for 'user' overrides + 'newbie'. +* (T194605, CVE-2018-0505) SECURITY: BotPasswords can bypass CentralAuth's + account lock. +* (T180551) Fix LanguageSrTest for language converter +* (T180552) Fix langauge converter parser test with self-close tags +* (T180537) Remove $wgAuth usage from wrapOldPasswords.php +* (T180485) InputBox: Have inputbox langconvert certain attributes +* (T161732, T181547) Upgraded Moment.js from v2.15.0 to v2.19.3. +* (T172927) Drop vendor from MW release branch +* (T87572) Make FormatMetadata::flattenArrayReal() work for an associative array +* Updated composer/spdx-licenses from 1.1.4 to 1.3.0 (development dependency). +* (T189567) the CLI installer (maintenance/install.php) learned to detect and + include extensions. Pass --with-extensions to enable that feature. +* (T182381) Mask deprecated call in WatchedItemUnitTest +* (T190503) Let built-in web server (maintenance/dev) handle .php requests. +* The karma qunit tests would fail on some configuration due to headers already + sent. Check headers_sent() before sending cpPosTime headers +* (T167507) selenium: Run Chrome headlessly. +* selenium: Pass -no-sandbox to Chrome under Docker +* (T191247) Use MediaWiki\SuppressWarnings around trigger_error('') instead @ +* (T75174, T161041) Unit test ChangesListSpecialPageTest::testFilterUserExpLevel + fails under SQLite. +* (T192584) Stop incorrectly passing USE INDEX to RecentChange::newFromConds(). +* (T179190) selenium: Move test running logic from package.json to selenium.sh. +* (T117839, T193200) PDFHandler: Fix for pdfinfo changes in poppler-utils 0.48. +* Add default edit rate limit of 90 edits/minute for all users. +* (T196125) php-memcached 3.0 (provided with PHP 7.0) is now supported. +* (T196672) The mtime of extension.json files is now able to be zero +* (T180403) Validate $length in padleft/padright parser functions. +* (T143790) Make $wgEmailConfirmToEdit only affect edit actions. +* (T194237) Special:BotPasswords now requires reauthentication. +* (T191608, T187638) Add 'logid' parameter to Special:Log. +* (T176097) resourceloader: Disable a flaky MessageBlobStoreTest case +* (T193829) Indicate when a Bot Password needs reset. +* (T151415) Log email changes. +* (T118420) Unbreak Oracle installer. + == MediaWiki 1.29.2 == This is a security and maintenance release of the MediaWiki 1.29 branch. @@ -1526,6 +1632,34 @@ There's usually someone online in #mediawiki on irc.freenode.net. = MediaWiki 1.27 = +== MediaWiki 1.27.5 == + +This is a security and maintenance release of the MediaWiki 1.27 branch. + +=== Changes since 1.27.4 === +* (T169545, CVE-2018-0503) SECURITY: $wgRateLimits entry for 'user' overrides + 'newbie'. +* (T194605, CVE-2018-0505) SECURITY: BotPasswords can bypass CentralAuth's + account lock. +* Upgraded Moment.js from v2.8.4 to v2.19.3. +* (T160298) Fixed Special:ActiveUsers due to bad backport. +* (T87572) Make FormatMetadata::flattenArrayReal() work for an associative array. +* Updated list of SPDX licenses for extensions. +* (T189567) the CLI installer (maintenance/install.php) learned to detect and + include extensions. Pass --with-extensions to enable that feature. +* (T192584) Stop incorrectly passing USE INDEX to RecentChange::newFromConds(). +* Add default edit rate limit of 90 edits/minute for all users. +* (T196125) php-memcached 3.0 (provided with PHP 7.0) is now supported. +* (T196672) The mtime of extension.json files is now able to be zero. +* (T118683) Fix exception from &$user deref on HHVM in the TitleMoveComplete hook. +* (T180403) Validate $length in padleft/padright parser functions. +* (T143790) Make $wgEmailConfirmToEdit only affect edit actions. +* Special:BotPasswords now requires reauthentication. +* (T191608, T187638) Add 'logid' parameter to Special:Log. +* (T193829) Indicate when a Bot Password needs reset. +* (T151415) Log email changes. +* (T118420) Unbreak Oracle installer. + == MediaWiki 1.27.4 == This is a security and maintenance release of the MediaWiki 1.27 branch. diff --git a/RELEASE-NOTES-1.32 b/RELEASE-NOTES-1.32 index 041b3d73db..9f0bc1b777 100644 --- a/RELEASE-NOTES-1.32 +++ b/RELEASE-NOTES-1.32 @@ -36,6 +36,10 @@ production. (e.g. MediaWiki:Common.js), CSS or JSON was separated from 'editinterface' and is available under 'editsitejs'/'editsitecss'/'editsitejson'. Having 'editinterface' is still necessary to edit such pages. +* $wgMultiContentRevisionSchemaMigrationStage now defaults to writing both the + old and the new schema, but reading the new schema, so Multi-Content Revisions + (MCR) are now functional per default. The new default value of the setting is + SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW. ==== Removed configuration ==== * $wgEnableAPI and $wgEnableWriteAPI – These settings, deprecated in 1.31, @@ -290,11 +294,23 @@ because of Phabricator reports. Define $wgProfiler via LocalSettings.php instead. * The mw.loader.addSource() is now considered a private method, and no longer supports the `id, url` signature. Use the `Object` parameter instead. +* The backwards-compatibility code in HTMLForm to add a drop-down control to an + option that is not set to be a drop-down if the "mw-chosen" class is present, + is now removed. * Several collations were removed. They were workarounds for bugs in the ICU library and they are no longer needed (as of ICU 57.1): * 'uppercase-se' (NorthernSamiUppercaseCollation) - use 'uca-se' instead * 'xx-uca-et' (CollationEt) - use 'uca-et' instead * 'xx-uca-fa' (CollationFa) - use 'uca-fa' instead +* The hooks 'SpecialRecentChangesFilters' & 'SpecialWatchlistFilters' deprecated + in 1.23 were removed. Instead, use 'ChangesListSpecialPageStructuredFilters'. + The ChangesListSpecialPage code for these legacy hooks, and their use in + SpecialRecentchanges.php and SpecialWatchlist, was also removed: + * ChangesListSpecialPage->getCustomFilters() + * ChangesListSpecialPage->getFilterGroupDefinitionFromLegacyCustomFilters() + * ChangesListSpecialPage::customFilters +* The global function wfUseMW, deprecated since 1.26, has now been removed. Use + the "requires" property of static extension registration instead. === Deprecations in 1.32 === * HTMLForm::setSubmitProgressive() is deprecated. No need to call it. Submit @@ -417,6 +433,24 @@ because of Phabricator reports. 'help', 'help-message', 'help-messages' instead. * (T197179) HTMLFormField::getNotices() is now deprecated. * The jquery.localize module is now deprecated. Use jquery.i18n instead. +* The SecondaryDataUpdates hook was deprecated in favor of RevisionDataUpdates, + or overriding ContentHandler::getSecondaryDataUpdates (T194038). +* The WikiPageDeletionUpdates hook was deprecated in favor of + PageDeletionDataUpdates, or overriding ContentHandler::getDeletionDataUpdates + (T194038). +* Content::getSecondaryDataUpdates has been deprecated in favor of + ContentHandler::getSecondaryDataUpdates() for overriding by extensions + (T194038). + Application logic should call WikiPage::doSecondaryDataUpdates() (T194037). +* Content::getDeletionUpdates has been deprecated in favor of + ContentHandler::getDeletionUpdates() for overriding by extensions (T194038). + Application logic should call WikiPage::doSecondaryDataUpdates() (T194037). +* (T198214) Old Tidy-related configuration settings, which were soft-deprecated + in MediaWiki 1.26, have now been hard deprecated. This affects $wgUseTidy, + $wgTidyBin, $wgTidyConf, $wgTidyOpts, $wgTidyInternal, and $wgDebugTidy. Use + $wgTidyConfig instead. +* All Tidy configurations other than Remex have been deprecated; future parsers + will not emit compatible output for these configurations. === Other changes in 1.32 === * (T198811) The following tables have had their UNIQUE indexes turned into @@ -427,6 +461,11 @@ because of Phabricator reports. `'help-inline' => false`. * The archive table's ar_rev_id field is now unique. * Special:BotPasswords now requires reauthentication. +* (T174023) Multi-Content Revision (MCR) capabilities were introduced into the + storage layer and have basic support for display. No user interface exists + yet for creating or managing content in slots beides the main slot. See + for more + information. * … == Compatibility == diff --git a/autoload.php b/autoload.php index b52dfb734f..67285d0a89 100644 --- a/autoload.php +++ b/autoload.php @@ -897,6 +897,7 @@ $wgAutoloadLocalClasses = [ 'MediaWiki\\ProcOpenError' => __DIR__ . '/includes/exception/ProcOpenError.php', 'MediaWiki\\Revision\\RenderedRevision' => __DIR__ . '/includes/Revision/RenderedRevision.php', 'MediaWiki\\Revision\\RevisionRenderer' => __DIR__ . '/includes/Revision/RevisionRenderer.php', + 'MediaWiki\\Revision\\SlotRenderingProvider' => __DIR__ . '/includes/Revision/SlotRenderingProvider.php', 'MediaWiki\\Search\\ParserOutputSearchDataExtractor' => __DIR__ . '/includes/search/ParserOutputSearchDataExtractor.php', 'MediaWiki\\ShellDisabledError' => __DIR__ . '/includes/exception/ShellDisabledError.php', 'MediaWiki\\Site\\MediaWikiPageNameNormalizer' => __DIR__ . '/includes/site/MediaWikiPageNameNormalizer.php', diff --git a/composer.json b/composer.json index bd3a696823..e99fe8193f 100644 --- a/composer.json +++ b/composer.json @@ -62,7 +62,7 @@ "jakub-onderka/php-parallel-lint": "0.9.2", "jetbrains/phpstorm-stubs": "dev-master#38ff1a581b297f7901e961b8c923862ea80c3b96", "justinrainbow/json-schema": "~5.2", - "mediawiki/mediawiki-codesniffer": "21.0.0", + "mediawiki/mediawiki-codesniffer": "22.0.0", "monolog/monolog": "~1.22.1", "nikic/php-parser": "3.1.3", "seld/jsonlint": "1.7.1", diff --git a/docs/design.txt b/docs/design.txt deleted file mode 100644 index 5c04addef3..0000000000 --- a/docs/design.txt +++ /dev/null @@ -1,106 +0,0 @@ -design.txt - -This is a brief overview of the new design. - -More thorough and up-to-date information is available on the documentation -wiki at https://www.mediawiki.org/ - -Primary classes: - - User - Encapsulates the state of the user viewing/using the site. Can be queried - for things like the user's settings, name, etc. Handles the details of - getting and saving to the "user" table of the database, and dealing with - sessions and cookies. - - OutputPage - Encapsulates the entire HTML page that will be sent in response to any - server request. It is used by calling its functions to add text, headers, - etc., in any order, and then calling output() to send it all. It could be - easily changed to send incrementally if that becomes useful, but I prefer - the flexibility. This should also do the output encoding. The system - allocates a global one in $wgOut. - - Title - Represents the title of an article, and does all the work of translating - among various forms such as plain text, URL, database key, etc. For - convenience, and for historical reasons, it also represents a few features - of articles that don't involve their text, such as access rights. - See also title.txt. - - Article - Encapsulates access to the "page" table of the database. The object - represents a an article, and maintains state such as text (in Wikitext - format), flags, etc. - - Revision - Encapsulates individual page revision data and access to the - revision/text/blobs storage system. Higher-level code should never touch - text storage directly; this class mediates it. - - Skin - Encapsulates a "look and feel" for the wiki. All of the functions that - render HTML, and make choices about how to render it, are here, and are - called from various other places when needed (most notably, - OutputPage::addWikiText()). The StandardSkin object is a complete - implementation, and is meant to be subclassed with other skins that may - override some of its functions. The User object contains a reference to a - skin (according to that user's preference), and so rather than having a - global skin object we just rely on the global User and get the skin with - $wgUser->getSkin(). - See also skin.txt. - - Language - Represents the language used for incidental text, and also has some - character encoding functions and other locale stuff. The current user - interface language is instantiated as $wgLang, and the local content - language as $wgContLang; be sure to use the *correct* language object - depending upon the circumstances. - See also language.txt. - - Parser - Class used to transform wikitext to html. - - LinkCache - Keeps information on existence of articles. See linkcache.txt. - -Naming/coding conventions: - - These are meant to be descriptive, not dictatorial; I won't presume to tell - you how to program, I'm just describing the methods I chose to use for myself. - If you do choose to follow these guidelines, it will probably be easier for - you to collaborate with others on the project, but if you want to contribute - without bothering, by all means do so (and don't be surprised if I reformat - your code). - - - I have the code indented with tabs to save file size and so that users can - set their tab stops to any depth they like. I use 4-space tab stops, which - work well. I also use K&R brace matching style. I know that's a religious - issue for some, so if you want to use a style that puts opening braces on - the next line, that's OK too, but please don't use a style where closing - braces don't align with either the opening brace on its own line or the - statement that opened the block--that's confusing as hell. - - - Certain functions and class members are marked with /* private */, rather - than being marked as such. This is a hold-over from PHP 4, which didn't - support proper visibilities. You should not access things marked in this - manner outside the class/inheritance line as this code is subjected to be - updated in a manner that enforces this at some time in the near future, and - things will break. New code should use the standard method of setting - visibilities as normal. - - - Globals are particularly evil in PHP; it sets a lot of them automatically - from cookies, query strings, and such, leading to namespace conflicts; when - a variable name is used in a function, it is silently declared as a new - local masking the global, so you'll get weird error because you forgot the - global declaration; lack of static class member variables means you have to - use globals for them, etc. Evil, evil. - - I think I've managed to pare down the number of globals we use to a scant - few dozen or so, and I've prefixed them all with "wg" so you can spot errors - better (odds are, if you see a "wg" variable being used in a function that - doesn't declare it global, that's probably an error). - - Other conventions: Top-level functions are wfFuncname(), names of session - variables are wsName, cookies wcName, and form field values wpName ("p" for - "POST"). diff --git a/docs/distributors.txt b/docs/distributors.txt index 729dffa3a1..f2af458937 100644 --- a/docs/distributors.txt +++ b/docs/distributors.txt @@ -174,8 +174,6 @@ perhaps configure it to use them (see Configuration section of this document): "$wgAntivirus = 'clamav';". * DjVuLibre: Allows processing of DjVu files. To enable this, set "$wgDjvuDump = 'djvudump'; $wgDjvuRenderer = 'ddjvu'; $wgDjvuTxt = 'djvutxt';". - * HTML Tidy: Fixes errors in HTML at runtime. Can be enabled with - "$wgUseTidy = true;". * ImageMagick: For resizing images. "$wgUseImageMagick = true;" will enable it. PHP's GD can also be used, but ImageMagick is preferable. * HTTP cache such as Varnish or Squid: can provide a drastic speedup and a diff --git a/docs/hooks.txt b/docs/hooks.txt index cce50e058c..82238142b0 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -2546,6 +2546,12 @@ $originalRevId: if the edit restores or repeats an earlier revision (such as a (Used to be called $baseRevId.) $undidRevId: the rev ID (or 0) this edit undid +'PageDeletionDataUpdates': Called when constructing a list of DeferrableUpdate to be +executed when a page is deleted. +$title The Title of the page being deleted. +$revision A RevisionRecord representing the page's current revision at the time of deletion. +&$updates A list of DeferrableUpdate that can be manipulated by the hook handler. + 'PageHistoryBeforeList': When a history page list is about to be constructed. &$article: the article that the history is loading for $context: RequestContext object @@ -2919,6 +2925,13 @@ called after the addition of 'qunit' and MediaWiki testing resources. added to any module. &$ResourceLoader: object +'RevisionDataUpdates': Called when constructing a list of DeferrableUpdate to be +executed to record secondary data about a revision. +$title The Title of the page the revision belongs to +$renderedRevision a RenderedRevision object representing the new revision and providing access + to the RevisionRecord as well as ParserOutput of that revision. +&$updates A list of DeferrableUpdate that can be manipulated by the hook handler. + 'RevisionRecordInserted': Called after a revision is inserted into the database. $revisionRecord: the RevisionRecord that has just been inserted. @@ -2978,9 +2991,9 @@ result augmentors. Note that lists should be in the format name => object and the names in both lists should be distinct. -'SecondaryDataUpdates': Allows modification of the list of DataUpdates to -perform when page content is modified. Currently called by -AbstractContent::getSecondaryDataUpdates. +'SecondaryDataUpdates': DEPRECATED! Use RevisionDataUpdates or override +ContentHandler::getSecondaryDataUpdates instead. +Allows modification of the list of DataUpdates to perform when page content is modified. $title: Title of the page that is being edited. $oldContent: Content object representing the page's content before the edit. $recursive: bool indicating whether DataUpdates should trigger recursive @@ -3320,14 +3333,6 @@ use this to change some selection criteria or substitute a different title. &$title: If the hook returns false, a Title object to use instead of the result from the normal query -'SpecialRecentChangesFilters': DEPRECATED since 1.23! Use -ChangesListSpecialPageStructuredFilters instead. -Called after building form options at RecentChanges. -$special: the special page object -&$filters: associative array of filter definitions. The keys are the HTML - name/URL parameters. Each key maps to an associative array with a 'msg' - (message key) and a 'default' value. - 'SpecialRecentChangesPanel': Called when building form options in SpecialRecentChanges. &$extraOpts: array of added items, to which can be added @@ -3442,14 +3447,6 @@ Special:Upload. $wgVersion: Current $wgVersion for you to use &$versionUrl: Raw url to link to (eg: release notes) -'SpecialWatchlistFilters': DEPRECATED since 1.23! Use -ChangesListSpecialPageStructuredFilters instead. -Called after building form options at Watchlist. -$special: the special page object -&$filters: associative array of filter definitions. The keys are the HTML - name/URL parameters. Each key maps to an associative array with a 'msg' - (message key) and a 'default' value. - 'SpecialWatchlistGetNonRevisionTypes': Called when building sql query for SpecialWatchlist. Allows extensions to register custom values they have inserted to rc_type so they can be returned as part of the watchlist. @@ -4054,10 +4051,9 @@ dumps. One, and only one hook should set this, and return false. &$opts: Options to use for the query &$join: Join conditions -'WikiPageDeletionUpdates': manipulate the list of DeferrableUpdates to be -applied when a page is deleted. Called in WikiPage::getDeletionUpdates(). Note -that updates specific to a content model should be provided by the respective -Content's getDeletionUpdates() method. +'WikiPageDeletionUpdates': DEPRECATED! Use PageDeletionDataUpdates or +override ContentHandler::getDeletionDataUpdates instead. +Manipulates the list of DeferrableUpdates to be applied when a page is deleted. $page: the WikiPage $content: the Content to generate updates for, or null in case the page revision could not be loaded. The delete will succeed despite this. diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index c9932d68a4..5482f6a4e3 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -132,14 +132,14 @@ class AutoLoader { 'MediaWiki\\Auth\\' => __DIR__ . '/auth/', 'MediaWiki\\Edit\\' => __DIR__ . '/edit/', 'MediaWiki\\EditPage\\' => __DIR__ . '/editpage/', - 'MediaWiki\\Linker\\' => __DIR__ .'/linker/', - 'MediaWiki\\Preferences\\' => __DIR__ .'/preferences/', - 'MediaWiki\\Services\\' => __DIR__ .'/services/', - 'MediaWiki\\Session\\' => __DIR__ .'/session/', - 'MediaWiki\\Shell\\' => __DIR__ .'/shell/', - 'MediaWiki\\Sparql\\' => __DIR__ .'/sparql/', - 'MediaWiki\\Storage\\' => __DIR__ .'/Storage/', - 'MediaWiki\\Tidy\\' => __DIR__ .'/tidy/', + 'MediaWiki\\Linker\\' => __DIR__ . '/linker/', + 'MediaWiki\\Preferences\\' => __DIR__ . '/preferences/', + 'MediaWiki\\Services\\' => __DIR__ . '/services/', + 'MediaWiki\\Session\\' => __DIR__ . '/session/', + 'MediaWiki\\Shell\\' => __DIR__ . '/shell/', + 'MediaWiki\\Sparql\\' => __DIR__ . '/sparql/', + 'MediaWiki\\Storage\\' => __DIR__ . '/Storage/', + 'MediaWiki\\Tidy\\' => __DIR__ . '/tidy/', ]; } } diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 702ea54f6a..d335dccac0 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -3288,7 +3288,7 @@ $wgUseMediaWikiUIEverywhere = false; * * @since 1.32 */ -$wgOOUIPreferences = false; +$wgOOUIPreferences = true; /** * Whether to label the store-to-database-and-show-to-others button in the editor @@ -4267,17 +4267,26 @@ $wgAllowImageTag = false; * library; historically, Dave Raggett's "HTML Tidy" was typically used. * See https://www.w3.org/People/Raggett/tidy/ * + * Setting this to null is deprecated. + * * If this is null and $wgUseTidy is true, the deprecated configuration * parameters will be used instead. * * If this is null and $wgUseTidy is false, a pure PHP fallback will be used. + * (Equivalent to setting `$wgTidyConfig['driver'] = 'disabled'`.) * * Keys are: * - driver: May be: + * - RemexHtml: Use the RemexHtml library in PHP * - RaggettInternalHHVM: Use the limited-functionality HHVM extension + * Deprecated since 1.32. * - RaggettInternalPHP: Use the PECL extension + * Deprecated since 1.32. * - RaggettExternal: Shell out to an external binary (tidyBin) - * - RemexHtml: Use the RemexHtml library in PHP + * Deprecated since 1.32. + * - disabled: Disable tidy pass and use a hacky pure PHP workaround + * (this is what setting $wgUseTidy to false used to do) + * Deprecated since 1.32. * * - tidyConfigFile: Path to configuration file for any of the Raggett drivers * - debugComment: True to add a comment to the output with warning messages @@ -4288,37 +4297,38 @@ $wgTidyConfig = [ 'driver' => 'RemexHtml' ]; /** * Set this to true to use the deprecated tidy configuration parameters. - * @deprecated use $wgTidyConfig + * @deprecated since 1.26, use $wgTidyConfig['driver'] = 'disabled' */ $wgUseTidy = false; /** * The path to the tidy binary. - * @deprecated Use $wgTidyConfig['tidyBin'] + * @deprecated since 1.26, use $wgTidyConfig['tidyBin'] */ $wgTidyBin = 'tidy'; /** * The path to the tidy config file - * @deprecated Use $wgTidyConfig['tidyConfigFile'] + * @deprecated since 1.26, use $wgTidyConfig['tidyConfigFile'] */ $wgTidyConf = $IP . '/includes/tidy/tidy.conf'; /** * The command line options to the tidy binary - * @deprecated Use $wgTidyConfig['tidyCommandLine'] + * @deprecated since 1.26, use $wgTidyConfig['tidyCommandLine'] */ $wgTidyOpts = ''; /** * Set this to true to use the tidy extension - * @deprecated Use $wgTidyConfig['driver'] + * @deprecated since 1.26, use $wgTidyConfig['driver'] */ $wgTidyInternal = extension_loaded( 'tidy' ); /** * Put tidy warnings in HTML comments * Only works for internal tidy. + * @deprecated since 1.26, use $wgTidyConfig['debugComment'] */ $wgDebugTidy = false; @@ -4833,7 +4843,7 @@ $wgReservedUsernames = [ 'Maintenance script', // Maintenance scripts which perform editing, image import script 'Template namespace initialisation script', // Used in 1.2->1.3 upgrade 'ScriptImporter', // Default user name used by maintenance/importSiteScripts.php - 'Unknown user', // Used in WikiImporter when importing revisions with no author + 'Unknown user', // Used in WikiImporter and RevisionStore for revisions with no author 'msg:double-redirect-fixer', // Automatic double redirect fix 'msg:usermessage-editor', // Default user for leaving user messages 'msg:proxyblocker', // For $wgProxyList and Special:Blockme (removed in 1.22) @@ -8998,7 +9008,7 @@ $wgCommentTableSchemaMigrationStage = MIGRATION_OLD; * @since 1.32 * @var int An appropriate combination of SCHEMA_COMPAT_XXX flags. */ -$wgMultiContentRevisionSchemaMigrationStage = SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD; +$wgMultiContentRevisionSchemaMigrationStage = SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW; /** * Actor table schema migration stage. diff --git a/includes/EditPage.php b/includes/EditPage.php index 64b2f013dc..f1f0572bac 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -1689,7 +1689,7 @@ class EditPage { // is if an extension hook aborted from inside ArticleSave. // Render the status object into $this->hookError // FIXME this sucks, we should just use the Status object throughout - $this->hookError = '
' ."\n" . $status->getWikiText() . + $this->hookError = '
' . "\n" . $status->getWikiText() . '
'; return true; } diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index 4f121107e2..336cb89e99 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -2503,38 +2503,6 @@ function wfUsePHP( $req_ver ) { } } -/** - * This function works like "use VERSION" in Perl except it checks the version - * of MediaWiki, the program will die with a backtrace if the current version - * of MediaWiki is less than the version provided. - * - * This is useful for extensions which due to their nature are not kept in sync - * with releases - * - * Note: Due to the behavior of PHP's version_compare() which is used in this - * function, if you want to allow the 'wmf' development versions add a 'c' (or - * any single letter other than 'a', 'b' or 'p') as a post-fix to your - * targeted version number. For example if you wanted to allow any variation - * of 1.22 use `wfUseMW( '1.22c' )`. Using an 'a' or 'b' instead of 'c' will - * not result in the same comparison due to the internal logic of - * version_compare(). - * - * @see perldoc -f use - * - * @deprecated since 1.26, use the "requires" property of extension.json - * @param string|int|float $req_ver The version to check, can be a string, an integer, or a float - * @throws MWException - */ -function wfUseMW( $req_ver ) { - global $wgVersion; - - wfDeprecated( __FUNCTION__, '1.26' ); - - if ( version_compare( $wgVersion, (string)$req_ver, '<' ) ) { - throw new MWException( "MediaWiki $req_ver required--this is only $wgVersion" ); - } -} - /** * Return the final portion of a pathname. * Reimplemented because PHP5's "basename()" is buggy with multibyte text. diff --git a/includes/Revision/RenderedRevision.php b/includes/Revision/RenderedRevision.php index ba40a81f14..fa16c61304 100644 --- a/includes/Revision/RenderedRevision.php +++ b/includes/Revision/RenderedRevision.php @@ -42,7 +42,7 @@ use Wikimedia\Assert\Assert; * * @since 1.32 */ -class RenderedRevision { +class RenderedRevision implements SlotRenderingProvider { /** * @var Title diff --git a/includes/Revision/SlotRenderingProvider.php b/includes/Revision/SlotRenderingProvider.php new file mode 100644 index 0000000000..740f0f2c9f --- /dev/null +++ b/includes/Revision/SlotRenderingProvider.php @@ -0,0 +1,32 @@ + bool: Whether the caller is interested in output HTML (as opposed + * to just meta-data). Default is to generate HTML. + * + * @throws SuppressedDataException if the content is not accessible for the audience + * specified in the constructor. + * @return ParserOutput + */ + public function getSlotParserOutput( $role, array $hints = [] ); + +} diff --git a/includes/Storage/DerivedPageDataUpdater.php b/includes/Storage/DerivedPageDataUpdater.php index 99c31b2d69..e34e406f1d 100644 --- a/includes/Storage/DerivedPageDataUpdater.php +++ b/includes/Storage/DerivedPageDataUpdater.php @@ -27,12 +27,14 @@ use CategoryMembershipChangeJob; use Content; use ContentHandler; use DataUpdate; +use DeferrableUpdate; use DeferredUpdates; use Hooks; use IDBAccessObject; use InvalidArgumentException; use JobQueueGroup; use Language; +use LinksDeletionUpdate; use LinksUpdate; use LogicException; use MediaWiki\Edit\PreparedEdit; @@ -165,8 +167,7 @@ class DerivedPageDataUpdater implements IDBAccessObject { * * Contains the following fields: * - oldRevision (RevisionRecord|null): the revision that was current before the change - * associated with this update. Might not be set, use getOldRevision() instead of direct - * access. + * associated with this update. Might not be set, use getParentRevision(). * - oldId (int|null): the id of the above revision. 0 if there is no such revision (the change * was about creating a new page); null if not known (that should not happen). * - oldIsRedirect (bool|null): whether the page was a redirect before the change. Lazy-loaded, @@ -183,6 +184,11 @@ class DerivedPageDataUpdater implements IDBAccessObject { */ private $slotsUpdate = null; + /** + * @var RevisionRecord|null + */ + private $parentRevision = null; + /** * @var RevisionRecord|null */ @@ -456,29 +462,34 @@ class DerivedPageDataUpdater implements IDBAccessObject { } /** - * Returns the revision that was current before the edit. This would be null if the edit - * created the page, or the revision's parent for a regular edit, or the revision itself - * for a null-edit. - * Only defined after calling grabCurrentRevision() or prepareContent() or prepareUpdate()! + * Returns the parent revision of the new revision wrapped by this update. + * If the update is a null-edit, this will return the parent of the current (and new) revision. + * This will return null if the revision wrapped by this update created the page. + * Only defined after calling prepareContent() or prepareUpdate()! * - * @return RevisionRecord|null the revision that was current before the edit, or null if - * the edit created the page. + * @return RevisionRecord|null the parent revision of the new revision, or null if + * the update created the page. */ - private function getOldRevision() { - $this->assertHasPageState( __METHOD__ ); + private function getParentRevision() { + $this->assertPrepared( __METHOD__ ); - // If 'oldRevision' is not set, load it! - // Useful if $this->oldPageState is initialized by prepareUpdate. - if ( !array_key_exists( 'oldRevision', $this->pageState ) ) { - /** @var int $oldId */ - $oldId = $this->pageState['oldId']; - $flags = $this->useMaster() ? RevisionStore::READ_LATEST : 0; - $this->pageState['oldRevision'] = $oldId - ? $this->revisionStore->getRevisionById( $oldId, $flags ) - : null; + if ( $this->parentRevision ) { + return $this->parentRevision; } - return $this->pageState['oldRevision']; + if ( !$this->pageState['oldId'] ) { + // If there was no current revision, there is no parent revision, + // since the page didn't exist. + return null; + } + + $oldId = $this->revision->getParentId(); + $flags = $this->useMaster() ? RevisionStore::READ_LATEST : 0; + $this->parentRevision = $oldId + ? $this->revisionStore->getRevisionById( $oldId, $flags ) + : null; + + return $this->parentRevision; } /** @@ -495,8 +506,8 @@ class DerivedPageDataUpdater implements IDBAccessObject { * @note After prepareUpdate() was called, grabCurrentRevision() will throw an exception * to avoid confusion, since the page's current revision is then the new revision after * the edit, which was presumably passed to prepareUpdate() as the $revision parameter. - * Use getOldRevision() instead to access the revision that used to be current before the - * edit. + * Use getParentRevision() instead to access the revision that is the parent of the + * new revision. * * @return RevisionRecord|null the page's current revision, or null if the page does not * yet exist. @@ -834,6 +845,8 @@ class DerivedPageDataUpdater implements IDBAccessObject { // prepareUpdate() is redundant for null-edits $this->doTransition( 'has-revision' ); + } else { + $this->parentRevision = $parentRevision; } } @@ -969,7 +982,7 @@ class DerivedPageDataUpdater implements IDBAccessObject { $this->assertPrepared( __METHOD__ ); if ( !$this->slotsUpdate ) { - $old = $this->getOldRevision(); + $old = $this->getParentRevision(); $this->slotsUpdate = RevisionSlotsUpdate::newFromRevisionSlots( $this->revision->getSlots(), $old ? $old->getSlots() : null @@ -1077,7 +1090,7 @@ class DerivedPageDataUpdater implements IDBAccessObject { } else { throw new LogicException( 'Trying to re-use DerivedPageDataUpdater with revision ' - .$revision->getId() + . $revision->getId() . ', but it\'s already bound to revision ' . $this->revision->getId() ); @@ -1138,7 +1151,7 @@ class DerivedPageDataUpdater implements IDBAccessObject { if ( !$this->user->equals( $user ) ) { throw new LogicException( 'The Revision provided has a mismatching actor: expected ' - .$this->user->getName() + . $this->user->getName() . ', got ' . $user->getName() ); @@ -1252,34 +1265,103 @@ class DerivedPageDataUpdater implements IDBAccessObject { /** * @param bool $recursive * - * @return DataUpdate[] + * @return DeferrableUpdate[] */ public function getSecondaryDataUpdates( $recursive = false ) { - // TODO: MCR: getSecondaryDataUpdates() needs a complete overhaul to avoid DataUpdates - // from different slots overwriting each other in the database. Plan: - // * replace direct calls to Content::getSecondaryDataUpdates() with calls to this method - // * Construct LinksUpdate here, on the combined ParserOutput, instead of in AbstractContent - // for each slot. - // * Pass $slot into getSecondaryDataUpdates() - probably be introducing a new duplicate - // version of this function in ContentHandler. - // * The new method gets the PreparedEdit, but no $recursive flag (that's for LinksUpdate) - // * Hack: call both the old and the new getSecondaryDataUpdates method here; Pass - // the per-slot ParserOutput to the old method, for B/C. - // * Hack: If there is more than one slot, filter LinksUpdate from the DataUpdates - // returned by getSecondaryDataUpdates, and use a LinksUpdated for the combined output - // instead. - // * Call the SecondaryDataUpdates hook here (or kill it - its signature doesn't make sense) - - $content = $this->getSlots()->getContent( 'main' ); - - // NOTE: $output is the combined output, to be shown in the default view. + if ( $this->isContentDeleted() ) { + // This shouldn't happen, since the current content is always public, + // and DataUpates are only needed for current content. + return []; + } + $output = $this->getCanonicalParserOutput(); - $updates = $content->getSecondaryDataUpdates( - $this->getTitle(), null, $recursive, $output + // Construct a LinksUpdate for the combined canonical output. + $linksUpdate = new LinksUpdate( + $this->getTitle(), + $output, + $recursive ); - return $updates; + $allUpdates = [ $linksUpdate ]; + + // NOTE: Run updates for all slots, not just the modified slots! Otherwise, + // info for an inherited slot may end up being removed. This is also needed + // to ensure that purges are effective. + $renderedRevision = $this->getRenderedRevision(); + foreach ( $this->getSlots()->getSlotRoles() as $role ) { + $slot = $this->getRawSlot( $role ); + $content = $slot->getContent(); + $handler = $content->getContentHandler(); + + $updates = $handler->getSecondaryDataUpdates( + $this->getTitle(), + $content, + $role, + $renderedRevision + ); + $allUpdates = array_merge( $allUpdates, $updates ); + + // TODO: remove B/C hack in 1.32! + // NOTE: we assume that the combined output contains all relevant meta-data for + // all slots! + $legacyUpdates = $content->getSecondaryDataUpdates( + $this->getTitle(), + null, + $recursive, + $output + ); + + // HACK: filter out redundant and incomplete LinksUpdates + $legacyUpdates = array_filter( $legacyUpdates, function ( $update ) { + return !( $update instanceof LinksUpdate ); + } ); + + $allUpdates = array_merge( $allUpdates, $legacyUpdates ); + } + + // XXX: if a slot was removed by an earlier edit, but deletion updates failed to run at + // that time, we don't know for which slots to run deletion updates when purging a page. + // We'd have to examine the entire history of the page to determine that. Perhaps there + // could be a "try extra hard" mode for that case that would run a DB query to find all + // roles/models ever used on the page. On the other hand, removing slots should be quite + // rare, so perhaps this isn't worth the trouble. + + // TODO: consolidate with similar logic in WikiPage::getDeletionUpdates() + $wikiPage = $this->getWikiPage(); + $parentRevision = $this->getParentRevision(); + foreach ( $this->getRemovedSlotRoles() as $role ) { + // HACK: we should get the content model of the removed slot from a SlotRoleHandler! + // For now, find the slot in the parent revision - if the slot was removed, it should + // always exist in the parent revision. + $parentSlot = $parentRevision->getSlot( $role, RevisionRecord::RAW ); + $content = $parentSlot->getContent(); + $handler = $content->getContentHandler(); + + $updates = $handler->getDeletionUpdates( + $this->getTitle(), + $role + ); + $allUpdates = array_merge( $allUpdates, $updates ); + + // TODO: remove B/C hack in 1.32! + $legacyUpdates = $content->getDeletionUpdates( $wikiPage ); + + // HACK: filter out redundant and incomplete LinksDeletionUpdate + $legacyUpdates = array_filter( $legacyUpdates, function ( $update ) { + return !( $update instanceof LinksDeletionUpdate ); + } ); + + $allUpdates = array_merge( $allUpdates, $legacyUpdates ); + } + + // TODO: hard deprecate SecondaryDataUpdates in favor of RevisionDataUpdates in 1.33! + Hooks::run( + 'RevisionDataUpdates', + [ $this->getTitle(), $renderedRevision, &$allUpdates ] + ); + + return $allUpdates; } /** @@ -1425,7 +1507,7 @@ class DerivedPageDataUpdater implements IDBAccessObject { WikiPage::onArticleEdit( $title, $legacyRevision, $this->getTouchedSlotRoles() ); } - $oldRevision = $this->getOldRevision(); + $oldRevision = $this->getParentRevision(); $oldLegacyRevision = $oldRevision ? new Revision( $oldRevision ) : null; // TODO: In the wiring, register a listener for this on the new PageEventEmitter @@ -1484,7 +1566,9 @@ class DerivedPageDataUpdater implements IDBAccessObject { } foreach ( $updates as $update ) { - $update->setCause( $causeAction, $causeAgent ); + if ( $update instanceof DataUpdate ) { + $update->setCause( $causeAction, $causeAgent ); + } if ( $update instanceof LinksUpdate ) { $update->setRevision( $legacyRevision ); $update->setTriggeringUser( $triggeringUser ); diff --git a/includes/Storage/RevisionStore.php b/includes/Storage/RevisionStore.php index 8e66906287..61b428f13c 100644 --- a/includes/Storage/RevisionStore.php +++ b/includes/Storage/RevisionStore.php @@ -525,11 +525,11 @@ class RevisionStore $slot = $rev->getSlot( $role, RevisionRecord::RAW ); Assert::postcondition( $slot->getContent() !== null, - $role . ' slot must have content' + $role . ' slot must have content' ); Assert::postcondition( $slot->hasRevision(), - $role . ' slot must have a revision associated' + $role . ' slot must have a revision associated' ); } @@ -1711,8 +1711,8 @@ class RevisionStore $row->ar_actor ?? null ); } catch ( InvalidArgumentException $ex ) { - wfWarn( __METHOD__ . ': ' . $ex->getMessage() ); - $user = new UserIdentityValue( 0, '', 0 ); + wfWarn( __METHOD__ . ': ' . $title->getPrefixedDBkey() . ': ' . $ex->getMessage() ); + $user = new UserIdentityValue( 0, 'Unknown user', 0 ); } $db = $this->getDBConnectionRefForQueryFlags( $queryFlags ); @@ -1759,8 +1759,8 @@ class RevisionStore $row->rev_actor ?? null ); } catch ( InvalidArgumentException $ex ) { - wfWarn( __METHOD__ . ': ' . $ex->getMessage() ); - $user = new UserIdentityValue( 0, '', 0 ); + wfWarn( __METHOD__ . ': ' . $title->getPrefixedDBkey() . ': ' . $ex->getMessage() ); + $user = new UserIdentityValue( 0, 'Unknown user', 0 ); } $db = $this->getDBConnectionRefForQueryFlags( $queryFlags ); diff --git a/includes/Title.php b/includes/Title.php index ca62e0e0de..bbc1d63145 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -1665,7 +1665,7 @@ class Title implements LinkTarget { if ( $nsText === false ) { // See T165149. Awkward, but better than erroneously linking to the main namespace. $nsText = MediaWikiServices::getInstance()->getContentLanguage()-> - getNsText( NS_SPECIAL ) . ":Badtitle/NS{$this->mNamespace}"; + getNsText( NS_SPECIAL ) . ":Badtitle/NS{$this->mNamespace}"; } $p .= $nsText . ':'; diff --git a/includes/WebRequest.php b/includes/WebRequest.php index 327dd54c0d..ed10615b0c 100644 --- a/includes/WebRequest.php +++ b/includes/WebRequest.php @@ -856,7 +856,7 @@ class WebRequest { * @return string */ public function getFullRequestURL() { - return wfGetServerUrl( PROTO_CURRENT ) . $this->getRequestURL(); + return wfGetServerUrl( PROTO_CURRENT ) . $this->getRequestURL(); } /** diff --git a/includes/actions/RollbackAction.php b/includes/actions/RollbackAction.php index 9d336e4613..dc7b00ea41 100644 --- a/includes/actions/RollbackAction.php +++ b/includes/actions/RollbackAction.php @@ -151,7 +151,6 @@ class RollbackAction extends FormlessAction { ); $de->showDiff( '', '' ); } - return; } protected function getDescription() { diff --git a/includes/api/ApiLogin.php b/includes/api/ApiLogin.php index 0248f25ef6..14491da19f 100644 --- a/includes/api/ApiLogin.php +++ b/includes/api/ApiLogin.php @@ -132,7 +132,8 @@ class ApiLogin extends ApiBase { $loginType = 'BotPassword'; } elseif ( !$botLoginData[2] || $status->hasMessage( 'login-throttled' ) || - $status->hasMessage( 'botpasswords-needs-reset' ) + $status->hasMessage( 'botpasswords-needs-reset' ) || + $status->hasMessage( 'botpasswords-locked' ) ) { $authRes = 'Failed'; $message = $status->getMessage(); diff --git a/includes/api/ApiQueryAllDeletedRevisions.php b/includes/api/ApiQueryAllDeletedRevisions.php index 830df59351..bae68855f9 100644 --- a/includes/api/ApiQueryAllDeletedRevisions.php +++ b/includes/api/ApiQueryAllDeletedRevisions.php @@ -76,7 +76,7 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase { if ( !is_null( $params[$param] ) ) { $p = $this->getModulePrefix(); $this->dieWithError( - [ 'apierror-invalidparammix-cannotusewith', $p.$param, "{$p}user" ], + [ 'apierror-invalidparammix-cannotusewith', $p . $param, "{$p}user" ], 'invalidparammix' ); } @@ -86,7 +86,7 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase { if ( !is_null( $params[$param] ) ) { $p = $this->getModulePrefix(); $this->dieWithError( - [ 'apierror-invalidparammix-mustusewith', $p.$param, "{$p}user" ], + [ 'apierror-invalidparammix-mustusewith', $p . $param, "{$p}user" ], 'invalidparammix' ); } diff --git a/includes/api/ApiQueryInfo.php b/includes/api/ApiQueryInfo.php index 0cf6b04c82..3b7b00de80 100644 --- a/includes/api/ApiQueryInfo.php +++ b/includes/api/ApiQueryInfo.php @@ -522,7 +522,7 @@ class ApiQueryInfo extends ApiQueryBase { } if ( $this->params['testactions'] ) { - $limit = $this->getMain()->canApiHighLimits() ? self::LIMIT_SML1 : self::LIMIT_SML2; + $limit = $this->getMain()->canApiHighLimits() ? self::LIMIT_SML2 : self::LIMIT_SML1; if ( $this->countTestedActions >= $limit ) { return null; // force a continuation } diff --git a/includes/api/i18n/ar.json b/includes/api/i18n/ar.json index f9f8435fe7..d6af2f16b2 100644 --- a/includes/api/i18n/ar.json +++ b/includes/api/i18n/ar.json @@ -65,18 +65,28 @@ "apihelp-compare-param-fromid": "رقم الصفحة الأول للمقارنة.", "apihelp-compare-param-fromrev": "أول مراجعة للمقارنة.", "apihelp-compare-param-frompst": "قم بإجراء تحويل ما قبل الحفظ على fromtext-{slot}.", - "apihelp-compare-param-fromtext": "استخدم هذا النص بدلا من محتوى المراجعة المحدد بواسطة fromtitle، fromid أو fromrev.", - "apihelp-compare-param-fromcontentmodel": "نموذج محتوى fromtext، إذا لم يتم توفيره، فسيتم تخمينه استنادا إلى الوسائط الأخرى.", - "apihelp-compare-param-fromcontentformat": "تنسيق محتوى تسلسل fromtext.", + "apihelp-compare-param-fromslots": "تجاوز محتوى المراجعة المحددة بواسطة fromtitle أو fromid أو fromrev.\n\nيحدد هذا الوسيط الفتحات المراد تعديلها، استخدم fromtext-{slot} وfromcontentmodel-{slot} وfromcontentformat-{slot} لتحديد محتوى لكل فتحة.", + "apihelp-compare-param-fromtext-{slot}": "نص الفتحة المحددة، إذا تم حذفها، تتم إزالة الفتحة من المراجعة.", + "apihelp-compare-param-fromsection-{slot}": "عندما يكون fromtext-{slot} هو محتوى قسم واحد، فهذا هو رقم القسم، سيتم دمجه في المراجعة المحددة بواسطة fromtitle أو fromid أو fromrev كما لو كانت لتعديل القسم.", + "apihelp-compare-param-fromcontentmodel-{slot}": "نموذج محتوى fromtext-{slot}، إذا لم يتم توفيره، فسيتم تخمينه استنادا إلى الوسائط الأخرى.", + "apihelp-compare-param-fromcontentformat-{slot}": "تنسيق تسلسل محتوى fromtext-{slot}.", + "apihelp-compare-param-fromtext": "حدد fromslots=main واستخدم fromtext-main كبديل.", + "apihelp-compare-param-fromcontentmodel": "حدد fromslots=main واستخدم fromcontentmodel-main كبديل.", + "apihelp-compare-param-fromcontentformat": "حدد fromslots=main واستخدم fromcontentformat-main كبديل.", "apihelp-compare-param-fromsection": "استخدم فقط القسم المحدد في المحتوى 'من' المحدد.", "apihelp-compare-param-totitle": "العنوان الثاني للمقارنة.", "apihelp-compare-param-toid": "رقم الصفحة الثاني للمقارنة.", "apihelp-compare-param-torev": "المراجعة الثانية للمقارنة.", "apihelp-compare-param-torelative": "استخدم مراجعة متعلقة بالمراجعة المحددة من fromtitle أو fromid أو fromrev، سيتم تجاهل جميع خيارات 'إلى' الأخرى.", "apihelp-compare-param-topst": "قم بإجراء تحويل ما قبل الحفظ على totext.", - "apihelp-compare-param-totext": "استخدم هذا النص بدلا من محتوى المراجعة المحدد بواسطة totitle أو toid أو torev.", - "apihelp-compare-param-tocontentmodel": "نموذج محتوى totext، إذا لم يتم توفيره، فسيتم تخمينه استنادا إلى الوسائط الأخرى.", - "apihelp-compare-param-tocontentformat": "تنسيق محتوى تسلسل totext.", + "apihelp-compare-param-toslots": "تجاوز محتوى المراجعة المحددة بواسطة totitle أو toid أو torev.\n\nيحدد هذا الوسيط الفتحات المراد تعديلها، استخدم totext-{slot} وtocontentmodel-{slot} وtocontentformat-{slot} لتحديد محتوى لكل فتحة.", + "apihelp-compare-param-totext-{slot}": "نص الفتحة المحددة، إذا تم حذفه، تتم إزالة الفتحة من المراجعة.", + "apihelp-compare-param-tosection-{slot}": "عندما يكون totext-{slot} هو محتوى قسم واحد، فهذا هو رقم القسم، سيتم دمجه في المراجعة المحددة بواسطة totitle أو toid أو torev كما لو كانت لتعديل القسم.", + "apihelp-compare-param-tocontentmodel-{slot}": "نموذج محتوى totext-{slot}، إذا لم يتم توفيره، فسيتم تخمينه استنادا إلى الوسائط الأخرى.", + "apihelp-compare-param-tocontentformat-{slot}": "تنسيق تسلسل محتوى totext-{slot}.", + "apihelp-compare-param-totext": "حدد toslots=main واستخدم totext-main كبديل.", + "apihelp-compare-param-tocontentmodel": "حدد toslots=main واستخدم tocontentmodel-main كبديل.", + "apihelp-compare-param-tocontentformat": "حدد toslots=main واستخدم tocontentformat-main كبديل.", "apihelp-compare-param-tosection": "استخدم فقط القسم المحدد في المحتوى 'إلى' المحدد.", "apihelp-compare-param-prop": "أية قطعة من المعلومات للحصول عليها.", "apihelp-compare-paramvalue-prop-diff": "HTML الفرق.", @@ -88,6 +98,7 @@ "apihelp-compare-paramvalue-prop-comment": "التعليق على المراجعات 'من' و'إلى'.", "apihelp-compare-paramvalue-prop-parsedcomment": "التعليق المحلل على المراجعات 'من' و'إلى'.", "apihelp-compare-paramvalue-prop-size": "حجم المراجعات 'من' و'إلى'.", + "apihelp-compare-param-slots": "إرجاع فرق فردي لهذه الفتحات، بدلا من فرق واحد مشترك لجميع فتحات.", "apihelp-compare-example-1": "إنشاء فرق بين المراجعة 1 و2.", "apihelp-createaccount-summary": "انشاء حساب مستخدم جديد", "apihelp-createaccount-param-preservestate": "إذا تم عرض [[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]] بشكل صحيح لـhasprimarypreservedstate، فقد تم تعليم طلبات primary-required لكي يجب حذفها، إذا عرضت قيمة غير فارغة لـpreservedusername فيجب استخدام اسم المستخدم هذا للوسيط username.", @@ -865,6 +876,8 @@ "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "يضيف بادئة الإنترويكي.", "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "يضيف عنوان الإنترويكي.", "apihelp-query+iwbacklinks-param-dir": "الاتجاه للإدراج فيه.", + "apihelp-query+iwbacklinks-example-simple": "الحصول على الصفحات التي تصل إلى [[wikibooks:Test]].", + "apihelp-query+iwbacklinks-example-generator": "الحصول على معلومات عن الصفحات التي تصل إلى [[wikibooks:Test]].", "apihelp-query+iwlinks-summary": "يعرض جميع روابط الإنترويكي من الصفحات المحددة.", "apihelp-query+iwlinks-param-url": "ما إذا كنت تريد الحصول على المسار الكامل (لا يمكن استخدامه مع $1prop).", "apihelp-query+iwlinks-param-prop": "الخصائص الإضافية التي يمكنك الحصول عليها لكل رابط بين اللغات:", @@ -1066,6 +1079,7 @@ "apihelp-query+revisions+base-paramvalue-prop-tags": "وسوم للمراجعة.", "apihelp-query+revisions+base-paramvalue-prop-roles": "أدرج أدوار فتحة المحتوى الموجودة في المراجعة.", "apihelp-query+revisions+base-paramvalue-prop-parsetree": "استخدم [[Special:ApiHelp/expandtemplates|action=expandtemplates]] أو [[Special:ApiHelp/parse|action=parse]] بدلا من ذلك، شجرة تحليل XML لمحتوى المراجعة (تتطلب نموذج المحتوى $1).", + "apihelp-query+revisions+base-param-slots": "أي الفتحات المراجعة لتعيد البيانات، عندما يتم تضمين الخصائص ذات الصلة بالفتحات في $1props، إذا تم حذفها، فسيتم إرجاع البيانات من فتحة main بتنسيق متوافق مع الإصدارات السابقة.", "apihelp-query+revisions+base-param-limit": "الحد من عدد المراجعات التي سيتم إرجاعها.", "apihelp-query+revisions+base-param-expandtemplates": "استخدم [[Special:ApiHelp/expandtemplates|action=expandtemplates]] بدلا من ذلك، قم بتوسيع القوالب في محتوى المراجعة (يتطلب $1prop=content).", "apihelp-query+revisions+base-param-generatexml": "استخدم [[Special:ApiHelp/expandtemplates|action=expandtemplates]] أو [[Special:ApiHelp/parse|action=parse]] بدلا من ذلك، قم بتوليد شجرة تحليل XML لمحتوى المراجعة (تتطلب $1prop=content).", @@ -1440,9 +1454,11 @@ "apihelp-json-param-callback": "إذا تم تحديده، فسيقوم بإخراج الإخراج في استدعاء دالة معينة، للسلامة; سيتم تقييد جميع البيانات الخاصة بالمستخدم.", "apihelp-json-param-utf8": "إذا تم تحديده، يقوم بترميز معظم (وليس كل) الأحرف غير ASCII كـUTF-8 بدلا من استبدالها بتسلسلات الهروب السداسية العشرية، افتراضي عندما لا يكون formatversion 1.", "apihelp-json-param-ascii": "إذا تم تحديده، يشفر كل غير ASCII باستخدام تسلسلات الهروب السداسية العشرية، افتراضي عندما يكون formatversion 1.", + "apihelp-json-param-formatversion": "تنسيق الإخراج: \n;1:تنسيق متوافق مع الإصدارات السابقة (مصفوفات منطقية بتنسيق XML، ومفاتيح * لعقد المحتوى، وما إلى ذلك).\n;2:التنسيق الحديث التجريبي، التفاصيل قد تتغير!\n;الأحدث: استخدم أحدث تنسيق (حاليا 2)، قد يتغير دون سابق إنذار.", "apihelp-jsonfm-summary": "بيانات الإخراج بتنسيق JSON (الطباعة بـHTML).", "apihelp-none-summary": "عدم إخراج أي شيء.", "apihelp-php-summary": "بيانات الإخراج بتنسيق PHP المتسلسل.", + "apihelp-php-param-formatversion": "تنسيق الإخراج: \n;1:تنسيق متوافق مع الإصدارات السابقة (مصفوفات منطقية بتنسيق XML، ومفاتيح * لعقد المحتوى، وما إلى ذلك).\n;2:التنسيق الحديث التجريبي، التفاصيل قد تتغير!\n;الأحدث: استخدم أحدث تنسيق (حاليا 2)، قد يتغير دون سابق إنذار.", "apihelp-phpfm-summary": "بيانات الإخراج بتنسيق JSON (الطباعة بـHTML).", "apihelp-rawfm-summary": "بيانات الإخراج، بما في ذلك عناصر تصحيح الأخطاء، بتنسيق JSON (الطباعة بـHTML).", "apihelp-xml-summary": "بيانات الإخراج بتنسيق XML.", @@ -1579,9 +1595,13 @@ "apierror-changeauth-norequest": "فشل في إنشاء طلب التغيير.", "apierror-chunk-too-small": "الحد الأدنى لحجم القطعة هو $1 {{PLURAL:$1|بايت}} للقطع غير النهائية.", "apierror-cidrtoobroad": "لا يُقبَل مدى $1 CIDR أكبر من /$2.", + "apierror-compare-maintextrequired": "الوسيط $1text-main مطلوب عندما يكون $1slots يحتوي على main (لا يمكن حذف الفتحة الرئيسية).", "apierror-compare-no-title": "لا يمكن الحفظ المسبق للحفظ بدون عنوان; حاول تحديد fromtitle أو totitle.", "apierror-compare-nosuchfromsection": "لا يوجد قسم $1 في المحتوى 'من'.", "apierror-compare-nosuchtosection": "لا يوجد قسم $1 في المحتوى 'إلى'.", + "apierror-compare-nofromrevision": "ليس 'من' مراجعة، حدد fromrev أو fromtitle أو fromid.", + "apierror-compare-notext": "لا يمكن استخدام الوسيط $1 بدون $2.", + "apierror-compare-notorevision": "ليس 'إلى' مراجعة، حدد torev أو totitle أو toid.", "apierror-compare-relative-to-nothing": "لا توجد مراجعة 'من' لـtorelative لتكون نسبة.", "apierror-contentserializationexception": "فشل تسلسل المحتوى: $1", "apierror-contenttoobig": "يتجاوز المحتوى الذي أدخلته حد حجم المقالة البالغ $1 {{PLURAL:$1|كيلوبايت}}.", @@ -1629,6 +1649,7 @@ "apierror-mimesearchdisabled": "تم تعطيل بحث MIME في وضع Miser.", "apierror-missingcontent-pageid": "محتوى مفقود لمعرف الصفحة $1.", "apierror-missingcontent-revid": "محتوى مفقود لمعرف المراجعة $1.", + "apierror-missingcontent-revid-role": "محتوى مفقود لمعرف المراجعة $1 للدور $2.", "apierror-missingparam-at-least-one-of": "مطلوب {{PLURAL:$2|الوسيط|واحد على الأقل من الوسائط}} $1.", "apierror-missingparam-one-of": "مطلوب {{PLURAL:$2|الوسيط|واحد على الأقل من الوسائط}} $1.", "apierror-missingparam": "يجب تعيين الوسيط $1.", @@ -1743,6 +1764,7 @@ "apiwarn-deprecation-login-botpw": "تم إيقاف تسجيل الدخول إلى الحساب الرئيسي عبر action=login وقد يتوقف عن العمل دون سابق إنذار، لمتابعة تسجيل الدخول باستخدام action=login; راجع [[Special:BotPasswords]]، لمتابعة استخدام تسجيل الدخول إلى الحساب الرئيسي بأمان; راجع action=clientlogin.", "apiwarn-deprecation-login-nobotpw": "تم إيقاف تسجيل الدخول إلى الحساب الرئيسي عبر action=login، وقد يتوقف عن العمل دون سابق إنذار، لتسجيل الدخول بأمان; راجع action=clientlogin.", "apiwarn-deprecation-login-token": "تم إيقاف عمل رمز مميز عبر action=login ;استخدم action=query&meta=tokens&type=login بدلا من ذلك.", + "apiwarn-deprecation-missingparam": "نظرا لعدم تحديد $1; تم استخدام تنسيق قديم للإخراج، تم إيقاف هذا التنسيق، وسيتم دائما استخدام التنسيق الجديد في المستقبل.", "apiwarn-deprecation-parameter": "تم إيقاف الوسيط $1.", "apiwarn-deprecation-parse-headitems": "تم إيقاف prop=headitems منذ ميدياويكي 1.28; استخدم prop=headhtml عند إنشاء مستندات HTML جديدة، أو prop=modules|jsconfigvars عند تحديث مستند من جانب العميل.", "apiwarn-deprecation-purge-get": "تم إيقاف استخدام action=purge عبر GET; استخدم POST بدلا من ذلك.", @@ -1762,6 +1784,7 @@ "apiwarn-parse-nocontentmodel": "لم يتم إعطاء title أو contentmodel، على افتراض $1.", "apiwarn-parse-revidwithouttext": "تم استخدام revid بدون text، وتم طلب خصائص الصفحة المحللة، هل تقصد استخدام oldid بدلا من revid؟", "apiwarn-parse-titlewithouttext": "تم استخدام title بدون text، وتم طلب خصائص الصفحة المحللة، هل تقصد استخدام page بدلا من title؟", + "apiwarn-redirectsandrevids": "لا يمكن استخدام دقة تحويلة مع الوسيط revids، أية تحويلات لنقطة revids لم يتم حلها.", "apiwarn-tokennotallowed": "الإجراء \"$1\" غير مسموح به للمستخدم الحالي.", "apiwarn-tokens-origin": "قد لا يتم الحصول على الرموز عند عدم تطبيق السياسة الأصلية.", "apiwarn-truncatedresult": "تم اقتطاع هذه النتيجة لأنها قد تكون أكبر من حد الـ$1 بايت.", diff --git a/includes/api/i18n/ja.json b/includes/api/i18n/ja.json index 802283374a..d943e47148 100644 --- a/includes/api/i18n/ja.json +++ b/includes/api/i18n/ja.json @@ -63,8 +63,8 @@ "apihelp-compare-param-fromtitle": "比較する1つ目のページ名。", "apihelp-compare-param-fromid": "比較する1つ目のページID。", "apihelp-compare-param-fromrev": "比較する1つ目の版。", - "apihelp-compare-param-frompst": "fromtextに保存前変換を行います。", - "apihelp-compare-param-fromtext": "fromtitle, fromid or fromrev で指定された版の内容の代わりに、このテキストを使用します。", + "apihelp-compare-param-frompst": "fromtext-{slot}に保存前変換を行います。", + "apihelp-compare-param-fromtext": "fromslots=mainを指定し、代わりにfromtext-main を使用してください。", "apihelp-compare-param-fromcontentmodel": "fromtextのコンテンツモデル。指定されていない場合は、他のパラメータに基づいて推測されます。", "apihelp-compare-param-fromsection": "'from' の内容のうち指定された節のみを使用します。", "apihelp-compare-param-totitle": "比較する2つ目のページ名。", @@ -826,7 +826,7 @@ "apihelp-query+revisions+base-paramvalue-prop-size": "その版の長さ (バイト) 。", "apihelp-query+revisions+base-paramvalue-prop-comment": "その版の利用者によるコメント。", "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "その版の利用者による、構文解析されたコメント。", - "apihelp-query+revisions+base-paramvalue-prop-content": "その版のテキスト。", + "apihelp-query+revisions+base-paramvalue-prop-content": "各リビジョンスロットの内容。", "apihelp-query+revisions+base-paramvalue-prop-tags": "その版のタグ。", "apihelp-query+revisions+base-param-limit": "返す版の数を制限する。", "apihelp-query+search-summary": "全文検索を行います。", diff --git a/includes/api/i18n/nb.json b/includes/api/i18n/nb.json index 8edddda330..5e30c1a094 100644 --- a/includes/api/i18n/nb.json +++ b/includes/api/i18n/nb.json @@ -53,7 +53,7 @@ "apihelp-clearhasmsg-example-1": "Fjern hasmsg-flagget for aktuell bruker.", "apihelp-clientlogin-summary": "Logg inn på wikien med den interaktive flyten.", "apihelp-clientlogin-example-login": "Start prosessen med å logge inn til wikien som bruker Example med passord ExamplePassword.", - "apihelp-clientlogin-example-login2": "Fortsett å logge inn etter en UI-respons for tofaktor-autentisering, ved å oppgi en OATHToken på 987654.", + "apihelp-clientlogin-example-login2": "Fortsett å logge inn etter en UI-respons for totrinns pålogging, ved å oppgi en OATHToken på 987654.", "apihelp-compare-summary": "Hent forskjellen mellom to sider.", "apihelp-compare-extended-description": "Et revisjonsnummer, en sidetittel eller en side-ID for både «fra» og «til» må sendes.", "apihelp-compare-param-fromtitle": "Første tittel å sammenligne.", diff --git a/includes/api/i18n/zh-hant.json b/includes/api/i18n/zh-hant.json index ae4659515e..55c0671c18 100644 --- a/includes/api/i18n/zh-hant.json +++ b/includes/api/i18n/zh-hant.json @@ -241,6 +241,7 @@ "apihelp-options-example-complex": "重置所有偏好設定,然後再設定 skin 與 nickname。", "apihelp-paraminfo-summary": "獲得有關 API 模組的資訊。", "apihelp-paraminfo-param-helpformat": "說明字串的格式。", + "apihelp-paraminfo-param-formatmodules": "格式模組名稱清單(format 參數的值)。請改用 $1modules 。", "apihelp-paraminfo-example-1": "顯示 [[Special:ApiHelp/parse|action=parse]]、[[Special:ApiHelp/jsonfm|format=jsonfm]]、[[Special:ApiHelp/query+allpages|action=query&list=allpages]]、和 [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]] 的資訊。", "apihelp-paraminfo-example-2": "顯示 [[Special:ApiHelp/query|action=query]] 所有子模組的資訊。", "apihelp-parse-summary": "解析內容併回傳解析器輸出。", @@ -343,6 +344,7 @@ "apihelp-query+allimages-param-to": "要停止列舉的圖片標題。僅能與 $1sort=name 一起使用。", "apihelp-query+allimages-param-start": "要開始列舉的時間戳記。僅能與 $1sort=timestamp 一起使用。", "apihelp-query+allimages-param-end": "要停止列舉的時間戳記。僅能與 $1sort=timestamp 一起使用。", + "apihelp-query+allimages-param-prefix": "搜尋所有以此值為開頭的圖片。僅能與 $1sort=name 一起使用。", "apihelp-query+allimages-param-minsize": "限制圖片至少要有這樣多的位元組。", "apihelp-query+allimages-param-maxsize": "限制圖片最多只能這樣多的位元組。", "apihelp-query+allimages-param-sha1": "圖片的 SHA1 雜湊值。覆蓋 $1sha1base36。", @@ -434,6 +436,7 @@ "apihelp-query+allusers-example-Y": "列出以Y開頭的使用者。", "apihelp-query+authmanagerinfo-summary": "取得目前身分核對狀態的資訊。", "apihelp-query+backlinks-summary": "找出連結至指定頁面的所有頁面。", + "apihelp-query+backlinks-param-title": "要搜尋的標題。不能與 $1pageid 一起使用。", "apihelp-query+backlinks-param-pageid": "要搜尋的頁面 ID。不能與 $1title 一起使用。", "apihelp-query+backlinks-param-namespace": "要列舉的命名空間。", "apihelp-query+backlinks-param-dir": "列出時所採用的方向。", @@ -451,6 +454,8 @@ "apihelp-query+blocks-paramvalue-prop-userid": "添加已封鎖使用者的使用者 ID。", "apihelp-query+blocks-paramvalue-prop-by": "添加進行封鎖中的使用者之使用者名稱。", "apihelp-query+blocks-paramvalue-prop-byid": "添加進行封鎖中的使用者之使用者 ID。", + "apihelp-query+blocks-paramvalue-prop-timestamp": "添加當封鎖生效的時間戳記。", + "apihelp-query+blocks-paramvalue-prop-expiry": "添加當封鎖到期的時間戳記。", "apihelp-query+blocks-paramvalue-prop-reason": "添加封鎖的原因。", "apihelp-query+blocks-example-simple": "列出封鎖。", "apihelp-query+blocks-example-users": "列出使用者 Alice 與 Bob 的封鎖。", @@ -470,6 +475,8 @@ "apihelp-query+categorymembers-paramvalue-prop-timestamp": "添加在頁面有被包含時的時間戳記。", "apihelp-query+categorymembers-param-limit": "回傳的頁面數量上限。", "apihelp-query+categorymembers-param-sort": "作為排序順序的屬性。", + "apihelp-query+categorymembers-param-start": "起始列出的時間戳記。僅能與 $1sort=timestamp 一起使用。", + "apihelp-query+categorymembers-param-end": "結束列出的時間戳記。僅能與 $1sort=timestamp 一起使用。", "apihelp-query+categorymembers-param-startsortkey": "請改用 $1starthexsortkey。", "apihelp-query+categorymembers-param-endsortkey": "請改用 $1endhexsortkey。", "apihelp-query+categorymembers-example-simple": "取得在 Category:Physics 裡前 10 項的頁面。", @@ -661,6 +668,7 @@ "apihelp-query+logevents-paramvalue-prop-userid": "添加承擔日誌事件的使用者 ID。", "apihelp-query+logevents-paramvalue-prop-timestamp": "添加日誌事件的時間戳記。", "apihelp-query+logevents-paramvalue-prop-comment": "添加日誌事件的註釋。", + "apihelp-query+logevents-paramvalue-prop-parsedcomment": "添加日誌事件的解析註釋。", "apihelp-query+logevents-paramvalue-prop-details": "列出日誌事件的額外詳細資訊。", "apihelp-query+logevents-paramvalue-prop-tags": "列出日誌事件的標籤。", "apihelp-query+logevents-param-type": "篩選僅為此類型的日誌項目。", @@ -673,6 +681,7 @@ "apihelp-query+logevents-param-tag": "僅列出以此標籤所標記的事件項目。", "apihelp-query+logevents-param-limit": "要回傳的事件項目總數。", "apihelp-query+logevents-example-simple": "列出近期日誌事件。", + "apihelp-query+pagepropnames-summary": "列出所有在 wiki 使用的頁面屬性名稱。", "apihelp-query+pagepropnames-param-limit": "回傳的名稱數量上限。", "apihelp-query+pagepropnames-example-simple": "取得前 10 個屬性名稱。", "apihelp-query+pageprops-example-simple": "取得頁面 Main Page 與 MediaWiki 的屬性。", @@ -688,14 +697,21 @@ "apihelp-query+prefixsearch-param-limit": "回傳的結果數量上限。", "apihelp-query+prefixsearch-param-offset": "要略過的結果數量。", "apihelp-query+prefixsearch-example-simple": "搜尋開頭為 meaning 的頁面標題。", + "apihelp-query+prefixsearch-param-profile": "搜尋要使用的配置。", "apihelp-query+protectedtitles-param-namespace": "僅列出這些命名空間的標題。", "apihelp-query+protectedtitles-param-level": "僅列出具有這些保護層級的標題。", "apihelp-query+protectedtitles-param-limit": "要回傳的頁面總數。", "apihelp-query+protectedtitles-param-prop": "要取得的屬性。", + "apihelp-query+protectedtitles-paramvalue-prop-user": "添加做出添加保護操作的使用者。", + "apihelp-query+protectedtitles-paramvalue-prop-userid": "添加做出添加保護操作的使用者 ID。", + "apihelp-query+protectedtitles-paramvalue-prop-comment": "添加保護的註釋。", + "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "添加保護的解析註釋。", "apihelp-query+protectedtitles-paramvalue-prop-level": "添加保護層級。", "apihelp-query+protectedtitles-example-simple": "列出已保護的標題。", + "apihelp-query+querypage-summary": "取得透過特殊頁面 QueryPage-based 所提供的清單。", "apihelp-query+querypage-param-page": "特殊頁面的名稱。註:區分大小寫。", "apihelp-query+querypage-param-limit": "回傳的結果數量。", + "apihelp-query+querypage-example-ancientpages": "回傳來自 [[Special:Ancientpages]] 的結果。", "apihelp-query+random-summary": "取得隨機頁面集合", "apihelp-query+random-param-namespace": "僅回傳在這些命名空間的頁面。", "apihelp-query+random-param-redirect": "請改用 $1filterredir=redirects。", @@ -710,6 +726,8 @@ "apihelp-query+recentchanges-param-excludeuser": "不要列出由該使用者作出的更改。", "apihelp-query+recentchanges-param-tag": "僅列出以此標籤所標記的更改。", "apihelp-query+recentchanges-param-prop": "包含的額外資訊部份:", + "apihelp-query+recentchanges-paramvalue-prop-comment": "添加編輯的註釋。", + "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "添加編輯的解析註釋。", "apihelp-query+recentchanges-paramvalue-prop-flags": "添加編輯的標籤。", "apihelp-query+recentchanges-paramvalue-prop-timestamp": "添加編輯的時間戳記。", "apihelp-query+recentchanges-paramvalue-prop-title": "添加編輯的頁面標題。", @@ -742,8 +760,11 @@ "apihelp-query+revisions-example-first5-user": "取得 Main Page 裡由使用者 MediaWiki default 所做出的最早前 5 筆修訂。", "apihelp-query+revisions+base-paramvalue-prop-ids": "修訂 ID。", "apihelp-query+revisions+base-paramvalue-prop-flags": "修訂標籤(小修改)。", + "apihelp-query+revisions+base-paramvalue-prop-timestamp": "修訂的時間戳記。", "apihelp-query+revisions+base-paramvalue-prop-user": "做出修訂的使用者。", + "apihelp-query+revisions+base-paramvalue-prop-userid": "修訂創建者的使用者 ID", "apihelp-query+revisions+base-paramvalue-prop-size": "修訂的長度(位元組)。", + "apihelp-query+revisions+base-paramvalue-prop-sha1": "修訂的 SHA-1(base 16)。", "apihelp-query+revisions+base-paramvalue-prop-tags": "修訂標籤。", "apihelp-query+revisions+base-param-limit": "限制所回傳的修訂數量。", "apihelp-query+search-summary": "執行全文搜尋。", @@ -768,13 +789,16 @@ "apihelp-query+search-param-limit": "要回傳的頁面總數。", "apihelp-query+search-param-interwiki": "若可用的話,在搜尋裡包含跨 wiki 結果。", "apihelp-query+search-param-backend": "是否搜尋使用的後端,若否則為預設。", + "apihelp-query+search-param-sort": "設定回傳結果的排序。", "apihelp-query+search-example-simple": "搜尋 meaning。", "apihelp-query+search-example-text": "搜尋 meaning 的文字。", "apihelp-query+siteinfo-summary": "回傳有關站台的一般資訊。", "apihelp-query+siteinfo-param-prop": "要取得的資訊:", "apihelp-query+siteinfo-paramvalue-prop-general": "全面系統資訊。", "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "特殊頁面別名清單。", + "apihelp-query+siteinfo-param-showalldb": "列出所有資料庫伺服器,不是只有最延遲的那台。", "apihelp-query+siteinfo-param-numberingroup": "列出在使用者群組裡的使用者數目。", + "apihelp-query+siteinfo-param-inlanguagecode": "用於本地化語言的語言代碼(盡可能)與外觀名稱。", "apihelp-query+siteinfo-example-simple": "索取站台資訊。", "apihelp-query+siteinfo-example-interwiki": "索取本地端跨 wiki 前綴的清單。", "apihelp-query+siteinfo-example-replag": "檢查目前的響應延遲。", @@ -810,13 +834,16 @@ "apihelp-query+usercontribs-paramvalue-prop-title": "添加標題與頁面的命名空間 ID。", "apihelp-query+usercontribs-paramvalue-prop-timestamp": "添加編輯的時間戳記。", "apihelp-query+usercontribs-paramvalue-prop-comment": "添加編輯的註釋。", - "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "添加編輯的已解析註解。", + "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "添加編輯的解析註釋。", "apihelp-query+usercontribs-paramvalue-prop-size": "添加編輯的新大小。", "apihelp-query+usercontribs-paramvalue-prop-flags": "添加編輯的標籤。", "apihelp-query+usercontribs-paramvalue-prop-patrolled": "標記已巡查編輯。", "apihelp-query+usercontribs-paramvalue-prop-autopatrolled": "標記自動巡查編輯。", "apihelp-query+usercontribs-paramvalue-prop-tags": "列出編輯的標籤。", + "apihelp-query+usercontribs-param-tag": "僅列出以此標籤所標記的修訂。", + "apihelp-query+usercontribs-param-toponly": "僅列出最新修訂的更改。", "apihelp-query+usercontribs-example-user": "顯示使用者 Example 的貢獻。", + "apihelp-query+usercontribs-example-ipprefix": "顯示所有來自於前綴為 192.0.2. 的 IP 地址貢獻。", "apihelp-query+userinfo-summary": "取得目前使用者的資訊。", "apihelp-query+userinfo-param-prop": "要包含的資訊部份:", "apihelp-query+userinfo-paramvalue-prop-groups": "列出目前使用者所隸屬的所有群組。", @@ -835,6 +862,9 @@ "apihelp-query+users-paramvalue-prop-rights": "列出各使用者所擁有的權限。", "apihelp-query+users-paramvalue-prop-editcount": "添加使用者的編輯數。", "apihelp-query+users-paramvalue-prop-registration": "添加使用者的註冊時間戳記。", + "apihelp-query+users-param-users": "要獲取的使用者清單。", + "apihelp-query+users-param-userids": "要獲取的使用者 ID 清單。", + "apihelp-query+users-param-token": "請改用 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。", "apihelp-query+watchlist-param-start": "起始列舉的時間戳記。", "apihelp-query+watchlist-param-end": "結束列舉的時間戳記。", "apihelp-query+watchlist-param-user": "此列出由該使用者作出的更改。", @@ -846,6 +876,9 @@ "apihelp-query+watchlist-paramvalue-prop-flags": "添加編輯的標籤。", "apihelp-query+watchlist-paramvalue-prop-user": "添加有做出編輯的使用者。", "apihelp-query+watchlist-paramvalue-prop-userid": "添加有做出編輯的使用者 ID。", + "apihelp-query+watchlist-paramvalue-prop-comment": "添加編輯的註釋。", + "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "添加編輯的解析註釋。", + "apihelp-query+watchlist-paramvalue-prop-timestamp": "添加編輯的時間戳記。", "apihelp-query+watchlist-paramvalue-prop-tags": "列出項目的標籤。", "apihelp-query+watchlist-param-type": "要顯示的更改類型:", "apihelp-query+watchlist-paramvalue-type-edit": "一般頁面編輯。", @@ -867,9 +900,16 @@ "apihelp-revisiondelete-param-hide": "各修訂所要隱藏的內容。", "apihelp-revisiondelete-param-show": "各修訂所要取消隱藏的內容。", "apihelp-revisiondelete-param-reason": "刪除或取消刪除的原因。", + "apihelp-revisiondelete-param-tags": "在刪除日誌裡套用到項目的標籤。", "apihelp-rollback-summary": "撤修頁面的最後一次編輯。", + "apihelp-rollback-param-tags": "套用到回退的標籤。", + "apihelp-rollback-param-summary": "自定義編輯摘要。若為空,則使用預設摘要。", + "apihelp-rollback-param-watchlist": "無條件使用設置將頁面加入或移除目前使用者的監視清單或者是不更改監視清單。", "apihelp-setnotificationtimestamp-param-entirewatchlist": "在所有已監視頁面運作。", + "apihelp-setnotificationtimestamp-example-page": "重新設定用於 Main page 的通知狀態。", + "apihelp-setnotificationtimestamp-example-allpages": "重新設定在 {{ns:user}} 命名空間裡頁面的通知狀態。", "apihelp-setpagelanguage-summary": "更改頁面的語言。", + "apihelp-setpagelanguage-extended-description-disabled": "您不被允許在此 wiki 上變更頁面的語言。\n\n請啟用 [[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]] 來進行此操作。", "apihelp-setpagelanguage-param-reason": "變更的原因。", "apihelp-setpagelanguage-example-language": "更改 Main Page 的語言成巴斯克語。", "apihelp-stashedit-summary": "在分享快取裡預備編輯。", @@ -883,15 +923,19 @@ "apihelp-tokens-summary": "取得資料修改動作的密鑰。", "apihelp-tokens-extended-description": "此模組已因支援 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] 而停用。", "apihelp-unblock-summary": "解除封鎖一位使用者。", + "apihelp-unblock-param-user": "要封鎖的使用者名稱、IP 位址或 IP 範圍。不能與 $1id 或 $1userid 一起使用", + "apihelp-unblock-param-userid": "要封鎖的使用者 ID。不可與 $1id 或 $1user 一同使用。", "apihelp-unblock-param-reason": "解除封鎖的原因。", "apihelp-unblock-param-tags": "在封鎖日誌裡更改套用到項目的標籤。", "apihelp-unblock-example-id": "解除封銷 ID #105。", + "apihelp-undelete-summary": "恢復已刪除頁面的修訂。", "apihelp-undelete-param-title": "要恢復的頁面標題。", "apihelp-undelete-param-reason": "還原的原因。", "apihelp-undelete-param-tags": "在刪除日誌裡更改套用到項目的標籤。", "apihelp-undelete-example-page": "取消刪除頁面 Main Page。", "apihelp-undelete-example-revisions": "取消刪除 Main Page 的兩筆修訂。", "apihelp-unlinkaccount-summary": "移除目前使用者所連結到的第三方帳號。", + "apihelp-upload-summary": "上傳檔案,或取得等待上傳的狀態。", "apihelp-upload-param-filename": "目標檔案名稱。", "apihelp-upload-param-comment": "上傳註釋。如果 $1text 未指定的話,也會作為新檔案用的初始頁面文字。", "apihelp-upload-param-text": "用於新檔案的初始頁面文字。", @@ -930,6 +974,7 @@ "api-format-prettyprint-header-hyperlinked": "這是$1格式的HTML實現。HTML對除錯很有用,但不適合應用程式使用。\n\n指定format參數以更改輸出格式。要查看$1格式的非HTML實現,設置[$3 format=$2]。\n\n參見[[mw:API|完整文件]],或[[Special:ApiHelp/main|API幫助]]以獲取更多信息。", "api-format-prettyprint-status": "此回應將會傳回HTTP狀態$1 $2。", "api-login-fail-badsessionprovider": "當使用$1無法登入。", + "api-login-fail-sameorigin": "當未套用相同原有方針時無法登入。", "api-pageset-param-titles": "要使用的標題清單。", "api-pageset-param-pageids": "要使用的頁面 ID 清單。", "api-pageset-param-revids": "要使用的修訂 ID 清單。", @@ -969,6 +1014,7 @@ "api-help-param-upload": "必須使用 multipart/form-data 以檔案上傳的方式傳送。", "api-help-param-multi-separate": "將幾個值以 | 或 [[Special:ApiHelp/main#main/datatypes|alternative]] 分隔。", "api-help-param-multi-max": "上限值為 {{PLURAL:$1|$1}} (機器人為 {{PLURAL:$2|$2}})。", + "api-help-param-multi-max-simple": "值的最大數量為 {{PLURAL:$1|$1}}。", "api-help-param-multi-all": "要指定所有值,請使用$1。", "api-help-param-default": "預設值:$1", "api-help-param-default-empty": "預設值:(空)", @@ -994,7 +1040,11 @@ "api-help-authmanagerhelper-returnurl": "為第三方身份驗證流程傳回URL,必須為絕對值。需要此值或$1continue兩者之一。\n\n在接收REDIRECT回應時,一般狀況下您將打開瀏覽器或網站瀏覽功能到特定的redirecttarget URL以進行第三方身份驗證流程。當它完成時,第三方會將瀏覽器或網站瀏覽功能送至此URL。您應當提取任何來自URL的查詢或POST參數,並將之作為$1continue請求傳遞至此API模組。", "api-help-authmanagerhelper-continue": "此請求是在先前的UI或REDIRECT回應之後的後續動作。必須為此值或$1returnurl。", "api-help-authmanagerhelper-additional-params": "此模組允許額外參數,取決於可用的身份驗證請求。使用[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]与amirequestsfor=$1(或之前來自此模組的回應,如果合適)以決定可用請求及其使用的欄位。", + "apierror-appendnotsupported": "無法附加到使用內容模組 $1 的頁面。", "apierror-articleexists": "您所嘗試建立的條目剛剛已被創建。", + "apierror-assertbotfailed": "斷言使用者擁有的 bot 權限失效。", + "apierror-assertnameduserfailed": "斷言使用者「$1」出錯。", + "apierror-assertuserfailed": "斷言使用者已登入失敗。", "apierror-autoblocked": "您的 IP 位址已經被自動封鎖,因為它曾經被一名已封鎖的使用者使用過。", "apierror-badgenerator-notgenerator": "模組 $1 不能作為產生器。", "apierror-badgenerator-unknown": "未知的 generator=$1。", @@ -1018,25 +1068,38 @@ "apierror-contentserializationexception": "內容序列化失敗:$1", "apierror-copyuploadbadurl": "不允許從此 URL 來上傳。", "apierror-csp-report": "處理 CSP 報告時錯誤:$1。", + "apierror-emptypage": "不允許建立空白的新頁面。", "apierror-filedoesnotexist": "檔案不存在。", "apierror-filenopath": "無法取得本地端檔案路徑。", "apierror-filetypecannotberotated": "無法旋轉的檔案類型。", "apierror-imageusage-badtitle": "$1的標題必須是檔案。", "apierror-import-unknownerror": "未知的匯入錯誤:$1", "apierror-invalidcategory": "您所輸入的分類名稱無效。", + "apierror-invalidlang": "用於參數 $1 的語言代碼無效。", + "apierror-invalidoldimage": "oldimage 參數含有無效格式。", + "apierror-invalidparammix-cannotusewith": "參數 $1 不能與 $2 一起使用。", + "apierror-invalidparammix-mustusewith": "$1 參數僅能與 $2 一起使用。", "apierror-invalidparammix": "{{PLURAL:$2|參數}} $1 不能一起使用。", "apierror-invalidsha1base36hash": "所提供的 SHA1Base36 雜湊無效。", "apierror-invalidsha1hash": "所提供的 SHA1 雜湊無效。", "apierror-invalidtitle": "錯誤標題「$1」。", + "apierror-invalidurlparam": "$1urlparam 的值無效($2=$3)。", "apierror-invaliduser": "無效的使用者名稱「$1」。", "apierror-invaliduserid": "使用者 ID $1 無效。", + "apierror-maxbytes": "參數 $1 不能大於 $2 {{PLURAL:$2|位元組|位元組}}", + "apierror-maxchars": "參數 $1 不能多於 $2 個{{PLURAL:$2|字元|字元}}", + "apierror-maxlag-generic": "正等待資料庫伺服器:已延遲 $1 {{PLURAL:$1|秒|秒}}。", + "apierror-maxlag": "正等待$2:已延遲 $1 {{PLURAL:$1|秒|秒}}。", + "apierror-mimesearchdisabled": "MIME 搜尋在 Miser 模式裡被停用。", "apierror-missingcontent-pageid": "遺失頁面 ID 為 $1 的內容。", "apierror-missingcontent-revid": "遺失修訂 ID 為 $1 的內容。", + "apierror-missingparam-one-of": "{{PLURAL:$2|參數|參數其一}} $1 為必要。", "apierror-missingparam": "$1參數必須被設定。", "apierror-missingrev-pageid": "沒有頁面 ID 為 $1 的目前修訂。", "apierror-missingrev-title": "沒有標題為$1的目前修訂。", "apierror-missingtitle": "您所指定的頁面不存在。", "apierror-missingtitle-byname": "頁面$1不存在。", + "apierror-moduledisabled": "模組 $1 已停用。", "apierror-mustbeloggedin-changeauth": "必須登入,才能變更身分核對資取。", "apierror-mustbeloggedin-generic": "您必須登入。", "apierror-mustbeloggedin-linkaccounts": "您必須登入到連結帳號。", diff --git a/includes/cache/localisation/LocalisationCache.php b/includes/cache/localisation/LocalisationCache.php index 9cf7acf6f1..d0381cf04d 100644 --- a/includes/cache/localisation/LocalisationCache.php +++ b/includes/cache/localisation/LocalisationCache.php @@ -838,17 +838,23 @@ class LocalisationCache { } # Fill in the fallback if it's not there already - if ( is_null( $coreData['fallback'] ) ) { - $coreData['fallback'] = $code === 'en' ? false : 'en'; - } - if ( $coreData['fallback'] === false ) { - $coreData['fallbackSequence'] = []; + if ( ( is_null( $coreData['fallback'] ) || $coreData['fallback'] === false ) && $code === 'en' ) { + $coreData['fallback'] = false; + $coreData['originalFallbackSequence'] = $coreData['fallbackSequence'] = []; } else { - $coreData['fallbackSequence'] = array_map( 'trim', explode( ',', $coreData['fallback'] ) ); + if ( !is_null( $coreData['fallback'] ) ) { + $coreData['fallbackSequence'] = array_map( 'trim', explode( ',', $coreData['fallback'] ) ); + } else { + $coreData['fallbackSequence'] = []; + } $len = count( $coreData['fallbackSequence'] ); - # Ensure that the sequence ends at en - if ( $coreData['fallbackSequence'][$len - 1] !== 'en' ) { + # Before we add the 'en' fallback for messages, keep a copy of + # the original fallback sequence + $coreData['originalFallbackSequence'] = $coreData['fallbackSequence']; + + # Ensure that the sequence ends at 'en' for messages + if ( !$len || $coreData['fallbackSequence'][$len - 1] !== 'en' ) { $coreData['fallbackSequence'][] = 'en'; } } diff --git a/includes/changes/ChangesListBooleanFilter.php b/includes/changes/ChangesListBooleanFilter.php index fc37882c02..c781d717cc 100644 --- a/includes/changes/ChangesListBooleanFilter.php +++ b/includes/changes/ChangesListBooleanFilter.php @@ -29,13 +29,6 @@ use Wikimedia\Rdbms\IDatabase; * @since 1.29 */ class ChangesListBooleanFilter extends ChangesListFilter { - // This can sometimes be different on Special:RecentChanges - // and Special:Watchlist, due to the double-legacy hooks - // (SpecialRecentChangesFilters and SpecialWatchlistFilters) - - // but there will be separate sets of ChangesListFilterGroup and ChangesListFilter instances - // for those pages (it should work even if they're both loaded - // at once, but that can't happen). /** * Main unstructured UI i18n key * diff --git a/includes/content/Content.php b/includes/content/Content.php index 000bff2d64..bb3fb107d7 100644 --- a/includes/content/Content.php +++ b/includes/content/Content.php @@ -284,13 +284,8 @@ interface Content { * made to replace information about the old content with information about * the new content. * - * This default implementation calls - * $this->getParserOutput( $content, $title, null, null, false ), - * and then calls getSecondaryDataUpdates( $title, $recursive ) on the - * resulting ParserOutput object. - * - * Subclasses may implement this to determine the necessary updates more - * efficiently, or make use of information about the old content. + * @deprecated since 1.32, call and override + * ContentHandler::getSecondaryDataUpdates instead. * * @note Implementations should call the SecondaryDataUpdates hook, like * AbstractContent does. @@ -481,8 +476,10 @@ interface Content { * the current state of the database. * * @since 1.21 + * @deprecated since 1.32, call and override + * ContentHandler::getDeletionUpdates instead. * - * @param WikiPage $page The deleted page + * @param WikiPage $page The page the content was deleted from. * @param ParserOutput|null $parserOutput Optional parser output object * for efficient access to meta-information about the content object. * Provide if you have one handy. diff --git a/includes/content/ContentHandler.php b/includes/content/ContentHandler.php index 7a378b3bea..fab043a2ba 100644 --- a/includes/content/ContentHandler.php +++ b/includes/content/ContentHandler.php @@ -28,6 +28,7 @@ use Wikimedia\Assert\Assert; use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; +use MediaWiki\Revision\SlotRenderingProvider; use MediaWiki\Search\ParserOutputSearchDataExtractor; /** @@ -1410,4 +1411,75 @@ abstract class ContentHandler { return $parserOutput; } + /** + * Returns a list of DeferrableUpdate objects for recording information about the + * given Content in some secondary data store. + * + * Application logic should not call this method directly. Instead, it should call + * DerivedPageDataUpdater::getSecondaryDataUpdates(). + * + * @note Implementations must not return a LinksUpdate instance. Instead, a LinksUpdate + * is created by the calling code in DerivedPageDataUpdater, on the combined ParserOutput + * of all slots, not for each slot individually. This is in contrast to the old + * getSecondaryDataUpdates method defined by AbstractContent, which returned a LinksUpdate. + * + * @note Implementations should not call $content->getParserOutput, they should call + * $slotOutput->getSlotRendering( $role, false ) instead if they need to access a ParserOutput + * of $content. This allows existing ParserOutput objects to be re-used, while avoiding + * creating a ParserOutput when none is needed. + * + * @param Title $title The title of the page to supply the updates for + * @param Content $content The content to generate data updates for. + * @param string $role The role (slot) in which the content is being used. Which updates + * are performed should generally not depend on the role the content has, but the + * DeferrableUpdates themselves may need to know the role, to track to which slot the + * data refers, and to avoid overwriting data of the same kind from another slot. + * @param SlotRenderingProvider $slotOutput A provider that can be used to gain access to + * a ParserOutput of $content by calling $slotOutput->getSlotParserOutput( $role, false ). + * @return DeferrableUpdate[] A list of DeferrableUpdate objects for putting information + * about this content object somewhere. The default implementation returns an empty + * array. + * @since 1.32 + */ + public function getSecondaryDataUpdates( + Title $title, + Content $content, + $role, + SlotRenderingProvider $slotOutput + ) { + return []; + } + + /** + * Returns a list of DeferrableUpdate objects for removing information about content + * in some secondary data store. This is used when a page is deleted, and also when + * a slot is removed from a page. + * + * Application logic should not call this method directly. Instead, it should call + * WikiPage::getSecondaryDataUpdates(). + * + * @note Implementations must not return a LinksDeletionUpdate instance. Instead, a + * LinksDeletionUpdate is created by the calling code in WikiPage. + * This is in contrast to the old getDeletionUpdates method defined by AbstractContent, + * which returned a LinksUpdate. + * + * @note Implementations should not rely on the page's current content, but rather the current + * state of the secondary data store. + * + * @param Title $title The title of the page to supply the updates for + * @param string $role The role (slot) in which the content is being used. Which updates + * are performed should generally not depend on the role the content has, but the + * DeferrableUpdates themselves may need to know the role, to track to which slot the + * data refers, and to avoid overwriting data of the same kind from another slot. + * + * @return DeferrableUpdate[] A list of DeferrableUpdate objects for putting information + * about this content object somewhere. The default implementation returns an empty + * array. + * + * @since 1.32 + */ + public function getDeletionUpdates( Title $title, $role ) { + return []; + } + } diff --git a/includes/exception/MWException.php b/includes/exception/MWException.php index b3e9422b8d..652a87dcfc 100644 --- a/includes/exception/MWException.php +++ b/includes/exception/MWException.php @@ -73,15 +73,23 @@ class MWException extends Exception { * @return string Message with arguments replaced */ public function msg( $key, $fallback /*[, params...] */ ) { + global $wgSitename; $args = array_slice( func_get_args(), 2 ); + $res = false; if ( $this->useMessageCache() ) { try { - return wfMessage( $key, $args )->text(); + $res = wfMessage( $key, $args )->text(); } catch ( Exception $e ) { } } - return wfMsgReplaceArgs( $fallback, $args ); + if ( $res === false ) { + $res = wfMsgReplaceArgs( $fallback, $args ); + // If an exception happens inside message rendering, + // {{SITENAME}} sometimes won't be replaced. + $res = preg_replace( '/\{\{SITENAME\}\}/', $wgSitename, $res ); + } + return $res; } /** @@ -154,6 +162,16 @@ class MWException extends Exception { global $wgOut, $wgSitename; if ( $this->useOutputPage() ) { $wgOut->prepareErrorPage( $this->getPageTitle() ); + // Manually set the html title, since sometimes + // {{SITENAME}} does not get replaced for exceptions + // happening inside message rendering. + $wgOut->setHTMLTitle( + $this->msg( + 'pagetitle', + "$1 - $wgSitename", + $this->getPageTitle() + ) + ); $wgOut->addHTML( $this->getHTML() ); diff --git a/includes/exception/MWExceptionRenderer.php b/includes/exception/MWExceptionRenderer.php index 49cf71e624..1f1cabeae1 100644 --- a/includes/exception/MWExceptionRenderer.php +++ b/includes/exception/MWExceptionRenderer.php @@ -197,12 +197,17 @@ class MWExceptionRenderer { * @return string Message with arguments replaced */ private static function msg( $key, $fallback /*[, params...] */ ) { + global $wgSitename; $args = array_slice( func_get_args(), 2 ); try { - return wfMessage( $key, $args )->text(); + $res = wfMessage( $key, $args )->text(); } catch ( Exception $e ) { - return wfMsgReplaceArgs( $fallback, $args ); + $res = wfMsgReplaceArgs( $fallback, $args ); + // If an exception happens inside message rendering, + // {{SITENAME}} sometimes won't be replaced. + $res = preg_replace( '/\{\{SITENAME\}\}/', $wgSitename, $res ); } + return $res; } /** diff --git a/includes/gallery/PackedImageGallery.php b/includes/gallery/PackedImageGallery.php index d1c945528d..7aa8c78893 100644 --- a/includes/gallery/PackedImageGallery.php +++ b/includes/gallery/PackedImageGallery.php @@ -107,6 +107,5 @@ class PackedImageGallery extends TraditionalImageGallery { * @param int $num */ public function setPerRow( $num ) { - return; } } diff --git a/includes/htmlform/fields/HTMLMultiSelectField.php b/includes/htmlform/fields/HTMLMultiSelectField.php index 2038606597..e9ecc40f10 100644 --- a/includes/htmlform/fields/HTMLMultiSelectField.php +++ b/includes/htmlform/fields/HTMLMultiSelectField.php @@ -22,8 +22,7 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable $this->mParams['disabled-options'] = []; } - // For backwards compatibility, also handle the old way with 'cssclass' => 'mw-chosen' - if ( isset( $params['dropdown'] ) || strpos( $this->mClass, 'mw-chosen' ) !== false ) { + if ( isset( $params['dropdown'] ) ) { $this->mClass .= ' mw-htmlform-dropdown'; } diff --git a/includes/htmlform/fields/HTMLTextField.php b/includes/htmlform/fields/HTMLTextField.php index d988c29ba1..60c63d6a07 100644 --- a/includes/htmlform/fields/HTMLTextField.php +++ b/includes/htmlform/fields/HTMLTextField.php @@ -85,18 +85,19 @@ class HTMLTextField extends HTMLFormField { 'type', 'min', 'max', - 'pattern', - 'title', 'step', - 'list', + 'title', 'maxlength', 'tabindex', 'disabled', 'required', 'autofocus', - 'multiple', 'readonly', 'autocomplete', + // Only used in HTML mode: + 'pattern', + 'list', + 'multiple', ]; $attribs += $this->getAttributes( $allowedParams ); @@ -153,17 +154,22 @@ class HTMLTextField extends HTMLFormField { # @todo Enforce pattern, step, required, readonly on the server side as # well $allowedParams = [ + 'type', + 'min', + 'max', + 'step', + 'title', + 'maxlength', + 'tabindex', + 'disabled', + 'required', 'autofocus', + 'readonly', + 'autocomplete', + // Only used in OOUI mode: 'autosize', - 'disabled', 'flags', 'indicator', - 'maxlength', - 'readonly', - 'required', - 'tabindex', - 'type', - 'autocomplete', ]; $attribs += OOUI\Element::configFromHtmlAttributes( diff --git a/includes/installer/i18n/bg.json b/includes/installer/i18n/bg.json index 8f0bdd5e13..3805dfa71e 100644 --- a/includes/installer/i18n/bg.json +++ b/includes/installer/i18n/bg.json @@ -23,9 +23,9 @@ "config-session-expired": "Срокът на валидност на данните от сесията са изтекли.\nПродължителността на сесиите е настроена на $1.\nТова може да бъде увеличено чрез настройване на session.gc_maxlifetime в php.ini.\nНеобходимо е рестартиране на инсталационния процес.", "config-no-session": "Данните за сесията бяха загубени!\nПроверете вашия php.ini и се уверете, че на session.save_path е настроена подходящата директория.", "config-your-language": "Вашият език:", - "config-your-language-help": "Избиране на език за използване по време на инсталацията.", + "config-your-language-help": "Избор на език за използване по време на инсталацията.", "config-wiki-language": "Език на уикито:", - "config-wiki-language-help": "Избиране на език, на който ще е основното съдържание на уикито.", + "config-wiki-language-help": "Избор на език, на който ще е основното съдържание на уикито.", "config-back": "← Връщане", "config-continue": "Продължаване →", "config-page-language": "Език", @@ -50,16 +50,16 @@ "config-sidebar": "* [https://www.mediawiki.org Сайт на МедияУики]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Наръчник на потребителя]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Наръчник на администратора]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ ЧЗВ]\n----\n* Документация\n* Бележки за версията\n* Авторски права\n* Обновяване", "config-env-good": "Средата беше проверена.\nИнсталирането на МедияУики е възможно.", "config-env-bad": "Средата беше проверена.\nНе е възможна инсталация на МедияУики.", - "config-env-php": "Инсталирана е версия на PHP $1.", + "config-env-php": "PHP $1 е инсталирано.", "config-env-hhvm": "HHVM $1 е инсталиран.", "config-unicode-using-intl": "Използване на разширението [https://pecl.php.net/intl intl PECL] за нормализация на Уникод.", "config-unicode-pure-php-warning": "Внимание: [https://pecl.php.net/intl Разширението intl PECL] не е налично за справяне с нормализацията на Уникод, превключване към по-бавното изпълнение на чист PHP.\nАко сайтът е с голям трафик, препоръчително е да се запознаете с [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормализацията на Уникод].", "config-unicode-update-warning": "Предупреждение: Инсталираната версия на Обвивката за нормализация на Unicode използва по-старата версия на библиотеката на [http://site.icu-project.org/ проекта ICU].\nНеобходимо е да [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations инсталирате по-нова версия], в случай че сте загрижени за използването на Unicode.", "config-no-db": "Не може да бъде открит подходящ драйвер за база данни! Необходимо е да инсталирате драйвер за база данни за PHP.\n{{PLURAL:$2|Поддържа се следния тип|Поддържат се следните типове}} бази от данни: $1.\n\nАко сами сте компилирали PHP, преконфигурирайте го с включен клиент за база данни, например чрез използване на ./configure --with-mysqli.\nАко сте инсталирали PHP от пакет за Debian или Ubuntu, необходимо е също така да инсталирате и модула php-mysql.", "config-outdated-sqlite": "Внимание: имате инсталиран SQLite $1, а минималната допустима версия е $2. SQLite ще бъде недостъпна за ползване.", - "config-no-fts3": "'''Предупреждение''': SQLite е компилирана без [//sqlite.org/fts3.html модула FTS3], затова възможностите за търсене няма да са достъпни.", + "config-no-fts3": "Предупреждение: SQLite е компилирана без [//sqlite.org/fts3.html модула FTS3], затова възможностите за търсене няма да са достъпни.", "config-pcre-old": "Фатална грешка: Изисква се PCRE версия $1 или по-нова.\nИзпълнимият файл на PHP е свързан с PCRE версия $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/Повече информация за PCRE].", - "config-pcre-no-utf8": "'''Фатално''': Модулът PCRE на PHP изглежда е компилиран без поддръжка на PCRE_UTF8.\nЗа да функционира правилно, МедияУики изисква поддръжка на UTF-8.", + "config-pcre-no-utf8": "Фатално: Модулът PCRE на PHP изглежда е компилиран без поддръжка на PCRE_UTF8.\nЗа да функционира правилно, МедияУики изисква поддръжка на UTF-8.", "config-memory-raised": "memory_limit на PHP е $1, увеличаване до $2.", "config-memory-bad": "Внимание: memory_limit на PHP е $1.\nСтойността вероятно е твърде ниска.\nВъзможно е инсталацията да се провали!", "config-apc": "[https://secure.php.net/apc APC] е инсталиран", @@ -73,19 +73,19 @@ "config-imagemagick": "Открит е ImageMagick: $1.\nПреоразмеряването на картинки ще бъде включено ако качването на файлове бъде разрешено.", "config-gd": "Открита е вградена графичната библиотека GD.\nАко качването на файлове бъде включено, ще бъде включена възможността за преоразмеряване на картинки.", "config-no-scaling": "Не са открити библиотеките GD или ImageMagick.\nПреоразмеряването на картинки ще бъде изключено.", - "config-no-uri": "'''Грешка:''' Не може да се определи текущия адрес.\nИнсталация беше прекратена.", + "config-no-uri": "Грешка: Не може да се определи текущия адрес.\nИнсталация беше прекратена.", "config-no-cli-uri": "Внимание: Не е зададен параметър --scriptpath, стойност по подразбиране: $1.", - "config-using-server": "Използване на сървърното име \"$1\".", - "config-using-uri": "Използване на сървърния адрес (URL) \"$1$2\".", + "config-using-server": "Използване на сървърното име „$1“.", + "config-using-uri": "Използване на сървърния адрес (URL) „$1$2“.", "config-uploads-not-safe": "Внимание: Папката по подразбиране за качване $1 е уязвима от изпълнение на зловредни скриптове.\nВъпреки че МедияУики извършва проверка за заплахи в сигурността на всички качени файлове, силно препоръчително е да се [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security затвори тази уязвимост в сигурността] преди разрешаване за качване на файлове.", "config-no-cli-uploads-check": "Предупреждение: Директорията по подразбиране за качване на файлове ($1) не е проверена за уязвимости при изпълнение на произволен скрипт по време на инсталацията от командния ред.", "config-brokenlibxml": "Вашата система използва комбинация от версии на PHP и libxml2, които са с много грешки и могат да причинят скрити повреди на данните в МедияУики или други уеб приложения.\nНеобходимо е обновяване до libxml2 2.7.3 или по-нова версия ([https://bugs.php.net/bug.php?id=45996 докладвана грешка при PHP]).\nИнсталацията беше прекратена.", "config-suhosin-max-value-length": "Suhosin е инсталиран и ограничава дължината GET параметъра length на $1 байта. Компонентът на МедияУики ResourceLoader ще може да пренебрегне частично това ограничение, но това ще намали производителността. По възможност е препоръчително да се настрои suhosin.get.max_value_length на 1024 или по-голяма стойност в php.ini и в LocalSettings.php да се настрои $wgResourceLoaderMaxQueryLength със същата стойност.", "config-using-32bit": "Внимание: изглежда, че системата Ви работи с 32-битови числа. Това [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit не се препоръчва].", "config-db-type": "Тип на базата от данни:", - "config-db-host": "Хост на базата от данни:", + "config-db-host": "Сървър на базата от данни:", "config-db-host-help": "Ако базата от данни е на друг сървър, в кутията се въвежда името на хоста или IP адреса.\n\nАко се използва споделен уеб хостинг, доставчикът на услугата би трябвало да е предоставил в документацията си коректния хост.\n\nАко инсталацията протича на Windows-сървър и се използва MySQL, използването на \"localhost\" може да е неприемливо. В такива случаи се използва \"127.0.0.1\" за локален IP адрес.\n\nПри използване на PostgreSQL, това поле се оставя празно, за свързване чрез Unix socket.", - "config-db-host-oracle": "TNS на базата данни:", + "config-db-host-oracle": "TNS на базата от данни:", "config-db-host-oracle-help": "Въведете валидно [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; файлът tnsnames.ora трябва да бъде видим за инсталацията.
Ако използвате клиентска библиотека версия 10g или по-нова можете да използвате метода [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].", "config-db-wiki-settings": "Идентифициране на това уики", "config-db-name": "Име на базата от данни:", @@ -107,7 +107,7 @@ "config-db-port": "Порт на базата от данни:", "config-db-schema": "Схема за МедияУики", "config-db-schema-help": "Схемата по-горе обикновено е коректна.\nПромени се извършват ако наистина е необходимо.", - "config-pg-test-error": "Невъзможно свързване с базата данни '''$1''': $2", + "config-pg-test-error": "Невъзможно свързване с базата данни $1: $2", "config-sqlite-dir": "Директория за данни на SQLite:", "config-sqlite-dir-help": "SQLite съхранява всички данни в един файл.\n\nПо време на инсталацията уеб сървърът трябва да има права за писане в посочената директория.\n\nТя не трябва да е достъпна през уеб, затова не е там, където са PHP файловете.\n\nИнсталаторът ще съхрани заедно с нея файл .htaccess, но ако този метод пропадне, някой може да придобие достъп до суровите данни от базата от данни.\nТова включва сурови данни за потребителите (адреси за е-поща, хеширани пароли), както и изтрити версии на страници и друга чувствителна и с ограничен достъп информация от и за уикито.\n\nБазата от данни е препоръчително да се разположи на друго място, например в /var/lib/mediawiki/yourwiki.", "config-oracle-def-ts": "Таблично пространство по подразбиране:", @@ -150,9 +150,9 @@ "config-can-upgrade": "В базата от данни има таблици за МедияУики.\nЗа надграждането им за MediaWiki $1, натиска се Продължаване.", "config-upgrade-done": "Обновяването приключи.\n\nВече е възможно [$1 да използвате уикито].\n\nАко е необходимо, възможно е файлът LocalSettings.php да бъде създаден отново чрез натискане на бутона по-долу.\nТова не е препоръчително действие, освен ако не срещате затруднения с уикито.", "config-upgrade-done-no-regenerate": "Обновяването приключи.\n\nВече е възможно [$1 да използвате уикито].", - "config-regenerate": "Създаване на LocalSettings.php →", + "config-regenerate": "Повторно създаване на LocalSettings.php →", "config-show-table-status": "Заявката SHOW TABLE STATUS не сполучи!", - "config-unknown-collation": "'''Предупреждение:''' Базата от данни използва неразпозната колация.", + "config-unknown-collation": "Предупреждение: Базата от данни използва неразпозната колация.", "config-db-web-account": "Сметка за уеб достъп до базата от данни", "config-db-web-help": "Избиране на потребителско име и парола, които уеб сървърът ще използва да се свързва с базата от данни при обичайната работа на уикито.", "config-db-web-account-same": "Използване на същата сметка като при инсталацията.", @@ -186,7 +186,7 @@ "config-admin-password-confirm": "Парола (повторно):", "config-admin-help": "Въвежда се предпочитаното потребителско име, например „Иванчо Иванчев“.\nТова ще е потребителското име, което администраторът ще използва за влизане в уикито.", "config-admin-name-blank": "Необходимо е да бъде въведено потребителско име на администратора.", - "config-admin-name-invalid": "Посоченото потребителско име \"$1\" е невалидно.\nНеобходимо е да се посочи друго.", + "config-admin-name-invalid": "Посоченото потребителско име „$1“ е невалидно.\nНеобходимо е да се посочи друго.", "config-admin-password-blank": "Въведете парола за администраторската сметка.", "config-admin-password-mismatch": "Двете въведени пароли не съвпадат.", "config-admin-email": "Адрес за електронна поща:", @@ -309,6 +309,7 @@ "config-nofile": "Файлът „$1“ не може да бъде открит. Да не е бил изтрит?", "config-extension-link": "Знаете ли, че това уики поддържа [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions разширения]?\n\nМожете да разгледате [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category разширенията по категория] или [https://www.mediawiki.org/wiki/Extension_Matrix Матрицата на разширенията] за пълен списък на разширенията.", "config-skins-screenshots": "$1 (снимки на екрана: $2)", + "config-extensions-requires": "$1 (изисква $2)", "config-screenshot": "снимка на екран", "mainpagetext": "МедияУики беше успешно инсталирано.", "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/Localisation#Translation_resources Локализиране на МедияУики]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Научете как да се справяте със спама във вашето уики]" diff --git a/includes/installer/i18n/nap.json b/includes/installer/i18n/nap.json index e391609344..8183ed7c34 100644 --- a/includes/installer/i18n/nap.json +++ b/includes/installer/i18n/nap.json @@ -61,6 +61,7 @@ "config-memory-raised": "'O valore 'e PHP memory_limit è $1, aumentato a $2.", "config-memory-bad": "Attenziò: 'o valore 'e PHP memory_limit è $1.\nProbabbilmente troppo basso.\n'A installazione se putesse scassà!", "config-apc": "[https://secure.php.net/apc APC] è installato", + "config-apcu": "[https://secure.php.net/apcu APCu] è installato", "config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache] è installato", "config-no-cache-apcu": "Attenziò: [https://secure.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] o [https://www.iis.net/downloads/microsoft/wincache-extension WinCache] nun so' state truvate.\n'A funziona caching 'e ll'oggette non è apicciata.", "config-mod-security": "Attenziò: 'O servitore web vuosto téne [https://modsecurity.org/ mod_security]/mod_security2 appicciato. Ce stanno tante mpustaziune commune ca 'o facessero causà prubbleme a MediaWiki e ll'ati software ca permettessero ll'utente 'e pubbrecà cuntenute.\nSi putite, stutate sta funziona. Sinò, riferite 'a [https://modsecurity.org/documentation/ documentaziona ncopp' 'o mod_security] o cuntattate 'o host vuosto pe' ve dà supporto quanno se scummogliasse cocch'errore.", @@ -78,6 +79,7 @@ "config-no-cli-uploads-check": "Attenziò: 'a cartella predefinita p' 'e carreche ($1) nun è stata cuntrullata p' 'a vulnerabbelità ncopp'a l'esecuzione arbitraria 'e script pe' tramente ca se fà l'installazione 'a linea 'e commando.", "config-brokenlibxml": "'O sistema vuosto ave na combinazione 'e verziune 'e PHP e libxml2 nguacchiata ca putesse scassà 'e date 'e MediaWiki 'n manera annascunnusa e pure l'ati apprecaziune p' 'o web.\nAgghiurnate a libxml2 2.7.3 o cchiù muderno ([https://bugs.php.net/bug.php?id=45996 'o bug studiato d' 'o lato PHP]).\nInstallaziona spezzata.", "config-suhosin-max-value-length": "Suhosin è installato e miette lemmeto 'o parametro GET length a $1 byte.\n'O componente MediaWiki ResourceLoader funzionarrà aggirann'a stu lemmeto, ma luvanno prestaziune.\nSi pussibile, avit'a mpustà suhosin.get.max_value_length a 1024 o cchiù auto 'n php.ini, e mpustà $wgResourceLoaderMaxQueryLength a 'o stesso valore 'n LocalSettings.php.", + "config-using-32bit": "Attenziò: 'o sistema vuosto pare c'ausasse nummere sane 'e 32-bit. Chest' [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit è scunzigliat].", "config-db-type": "Tipo 'e database:", "config-db-host": "Host d' 'o database:", "config-db-host-help": "Si 'o server database vuosto stà mpizzato dint' 'a nu server differente, miette 'o nomme d' 'o host o l'indirizzo IP sujo.\n\nSi state ausanno nu servizio spartuto web hosting, 'aggenzia 'e hosting v'avess'a dà 'o nomme buono 'e nomme host dint' 'a documentaziona suoja.\n\nSi state installanno chisto dint'a nu server Windows cu MySQL, ausanno \"localhost\" può darse ca nun funziona p' 'o nomme server. Si chisto nun funziona, mettite \"127.0.0.1\" p' 'o ndirizzo locale vuosto.\n\nSi state ausanno PostgreSQL, lassate abbacante stu campo pe' v'accucchià cu nu socket Unix.", @@ -111,12 +113,12 @@ "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])", - "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] è nu sistema canusciuto 'e database open source ca fosse n'alternativa a MySQL. Putess'avé cocch'errore p'arricettà, e nun è cunzigliato 'e ll'ausà dint'a n'ambiente 'e produziona. ([https://secure.php.net/manual/en/pgsql.installation.php Comme s'avess'a cumpilà PHP cu suppuorto PostgreSQL])", - "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] è nu sistema 'e database leggero, ca fosse assaje buono suppurtato. ([http://www.php.net/manual/en/pdo.installation.php Comme cumpilà PHP cu suppuorto SQLite], aùsa PDO)", - "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] è nu database 'e na fraveca commerciale. ([http://www.php.net/manual/en/oci8.installation.php Comme cumpilà PHP cu suppuorto OCI8])", + "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] è '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 MariaDB cumpatibbele. ([https://secure.php.net/manual/en/mysqli.installation.php Comme s'adda fà pe' cumpilà PHP cu suppuorto MySQL])", + "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] è nu sistema canusciuto 'e database open source ca fosse n'alternativa a MySQL.\n([https://secure.php.net/manual/en/pgsql.installation.php Comme s'avess'a cumpilà PHP cu suppuorto PostgreSQL])", + "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] è nu sistema 'e database leggero, ca fosse assaje buono suppurtato.\n([https://secure.php.net/manual/en/pdo.installation.php Comme cumpilà PHP cu suppuorto SQLite], aùsa PDO)", + "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] è nu database 'e na fraveca commerciale. ([https://secure.php.net/manual/en/oci8.installation.php Comme cumpilà PHP cu suppuorto OCI8])", "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] è nu database 'e na fraveca commerciale p' 'o Windows. ([https://secure.php.net/manual/en/sqlsrv.installation.php Comme cumpilà PHP cu suppuorto SQLSRV])", - "config-header-mysql": "Mpustaziune MySQL", + "config-header-mysql": "Mpustaziune MariaDB/MySQL", "config-header-postgres": "Mpustaziune PostgreSQL", "config-header-sqlite": "Mpustaziune SQLite", "config-header-oracle": "Mpustaziune Oracle", @@ -155,7 +157,7 @@ "config-db-web-create": "Crìa 'o cunto si nun esiste ancora", "config-db-web-no-create-privs": "'O cunto ausato pe' ne fà l'installazione nun tene diritte necessarie pe' ne putè crià n'atu cunto.\n'O cunto zegnàto ccà adda esistere già.", "config-mysql-engine": "Mutore d'astipo:", - "config-mysql-innodb": "InnoDB", + "config-mysql-innodb": "InnoDB (fosse 'o cunzigliato)", "config-mysql-myisam": "MyISAM", "config-mysql-myisam-dep": "Attenziò: avite scigliuto MyISAM comm' 'o mutore 'archiviaziona MySQL, ca nun è raccummannato pe' l'ausà cu MediaWiki, pecché:\n* supporta debolmente 'a concorrenza p' 'o blocco d' 'a tabbella\n* è cchiù inchine 'a corruzione 'e l'ati mutore\n* 'o codece 'e base 'e MediaWiki nun gestisce sempe MyISAM comme l'avess'a gistiunà\n\nSi ll'installazione vosta MySQL suppuorta InnoDB, è autamente raccummandato ca si scigliesse a 'o posto suo.\nSi 'a installazione MySQL nun suppurtasse InnoDB, forse è 'o mumento 'e ll'agghiurnà.", "config-mysql-only-myisam-dep": "Attenziò: MyISAM è l'uneco mutore p'astipà date ca se trova mo' a disposizione p' 'o MySQL dint'a sta macchina, e nun fosse raccumandato 'e s'ausà cu MediaWiki, pecché:\n* suppurtasse minimamente concorrenza pe' bbìa 'e bluccà tabbelle\n* è cchiù facile ca jesse a se scassà cchiù 'e l'ati mutore\n* 'o codece MediaWiki nun maniasse sempe MyISAM comme l'avesse 'e manià\n\nL'installazione MySQL nun suppurtasse InnoDB, può darse ca chist'è 'o mumento pe' ve ll'agghiurnà.", @@ -193,6 +195,8 @@ "config-subscribe": "Mettiteve dint' 'a [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailing list 'e ll'annunciazione 'e verziune d' 'o software rilassate].", "config-subscribe-help": "Chest'è na mailing list a basso traffeco ca se dedicasse a se ffà annunzie 'e verziune nove, piglianno pure mpurtante nutarelle ca riguardassero 'a sicurezza.\nFosse cunzigliato 'e se nzegnà e s'agghiurnà l'installazione 'e MediaWiki quanno na verziona nova fosse pubbreca.", "config-subscribe-noemail": "Vuje avite tentato 'e ve trasì dint' 'a mailing list addedecata a se fà annunzie ncopp' 'e verziune nove senza ve dà n'indirizzo email.\nNzertanno n'indirizzo email se vulite affettuà l'iscrizione dint'a mailing list.", + "config-pingback": "Sparte 'e date 'e st'installazione ch' 'e sviluppature 'e MediaWiki.", + "config-pingback-help": "Si vuje sciglite st'opzione, MediaWiki cuntattasse spisso https://www.mediawiki.org ch' 'e date 'e base e st'istanza MediaWiki. Dint' 'a sta categoria 'e date, tràseno, p'esempie, 'o tipo 'e sistema, 'a virziona 'e PHP e database 'e backend scigliuto. 'A Wikimedia Foundation spartisse sti date ch' 'e sviluppature Mediawiki p' 'a puté aiutà a guidà 'e fatiche 'e sviluppo future. P' 'o sistema d' 'o vuosto 'e date se mannan'accussì:\n
$1
", "config-almost-done": "Avite quase fernuto!\nMo' putite zumpà 'a parta r' 'a configurazione e sempricemente installà 'a wiki.", "config-optional-continue": "Spiate cchiù dimanne.", "config-optional-skip": "Me so' scucciato già, installa surtanto 'o wiki.", @@ -241,7 +245,7 @@ "config-cache-options": "Mpustaziune p' 'a cache d'oggette:", "config-cache-help": "'O caching 'uggette s'ausa pe' puté migliurà 'a velocità 'e MediaWiki a fforza 'e ffà caching d' 'e date cchiù spisso ausàte.\nE Mezze a gruosse site se songo ncuraggiate a ll'appiccià chiste, e site piccerilli vedarranno migliuramente pure.", "config-cache-none": "Nisciuna memorizzazione n cache (nisciuna funziunalità è luvata, ma 'a velocità se putesse ffà a meno dint' 'e wiki cchiù gruosse)", - "config-cache-accel": "Mettere 'n cache oggette PHP (APC, XCache o WinCache)", + "config-cache-accel": "Mettere 'n cache oggette PHP (APC, APCu o WinCache)", "config-cache-memcached": "Aúsa 'o Memcached (richiede cchiù mpustaziune 'installazione e configuraziona)", "config-memcached-servers": "Server memcached:", "config-memcached-help": "Elenco 'e ll'indirizzi IP p' 'e putè ausà p' 'o Memcached.\nS'avess'a specificà uno pe' riga e scrivere 'a porta 'e trasuta. P'esempio:\n 127.0.0.1:11211\n 192.168.1.25:1234", @@ -291,14 +295,20 @@ "config-install-subscribe-fail": "Nun se pò sottoscrivere mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL nun è installato e allow_url_fopen nun è disponibbele.", "config-install-mainpage": "Crianno 'a paggena prencepale ch' 'e cuntenute predefinite", + "config-install-mainpage-exists": "'A paggena principale esiste già, è zumpata", "config-install-extension-tables": "Crianno tabelle pe' estenziune appicciate", "config-install-mainpage-failed": "Nun se pò nzertà 'a paggena prencepale: $1", - "config-install-done": "Cumplimente!\nAvite installato MediaWiki apposto.\n\n'O prugramma 'installazione ha generato nu file LocalSettings.php ca cuntene tuttuquante 'e mpustaziune.\n\nAvit'a scarrecà chisto e 'o nzertà dint' 'a cartella bbase d' 'o wiki vuosto ('a stessa addò fosse prisente l' index.php). 'A scarreca avess'a partì automaticamente.\n\nSi nu download nun s'avviasse, o si è stato annullato, putite riavvià cliccanno ncopp' 'o cullegamento 'e seguito:\n\n$3\n\nNota: si ascite mò 'a ll'installazione senza manco scarrecà 'o file 'e configurazione che s'è criato, po chesto nun sarrà cchiù dispunibbele.\n\nQuanno fosse tutto fernuto allora [$2 trasite dint' 'o wiki vuosto].", + "config-install-done": "Cumplimente!\nAvite installato MediaWiki.\n\n'O prugramma 'installazione ha generato nu file LocalSettings.php ca cuntene tuttuquante 'e mpustaziune.\n\nAvit'a scarrecà chisto e 'o nzertà dint' 'a cartella bbase d' 'o wiki vuosto ('a stessa addò fosse prisente l' index.php). 'A scarreca avess'a partì automaticamente.\n\nSi nu download nun s'avviasse, o si è stato annullato, putite riavvià cliccanno ncopp' 'o cullegamento 'e seguito:\n\n$3\n\nNota: si ascite mò 'a ll'installazione senza manco scarrecà 'o file 'e configurazione che s'è criato, po chesto nun sarrà cchiù dispunibbele.\n\nQuanno fosse tutto fernuto allora [$2 trasite dint' 'o wiki vuosto].", + "config-install-done-path": "Cumplimente!\nAvite installato MediaWiki.\n\n'O prugramma 'installazione ha generato nu file LocalSettings.php ca cuntene tuttuquante 'e mpustaziune.\n\nAvit'a scarrecà chisto, e l'avit'azzeccà dint' 'o $4. 'A scarreca avess'a partì automaticamente.\n\nSi nu download nun s'avviasse, o si è stato annullato, putite riavvià cliccanno ncopp' 'o cullegamento 'e seguito:\n\n$3\n\nNota: si ascite mò 'a ll'installazione senza manco scarrecà 'o file 'e configurazione che s'è criato, po chesto nun sarrà cchiù dispunibbele.\n\nQuanno fosse tutto fernuto allora [$2 trasite dint' 'o wiki vuosto].", + "config-install-success": "Avite installato MediaWiki apposto. Mo' putite vedé ncopp'a <$1$2> 'o wiki vuosto.\nSi avite cocche dubbio, vedite 'e trasí dint' 'a l'elenco 'e quistione FAQ:\n o vedite 'e cuntattà cocche forum 'e suppuorto dint' 'a chilla paggena.", "config-download-localsettings": "Scarreca LocalSettings.php", "config-help": "ajùto", "config-help-tooltip": "cliccà pe' 'o spannere", "config-nofile": "'O file \"$1\" nun se trova. Forse è stato scancellato?", "config-extension-link": "'O sapevate ch' 'o wiki vuosto suppurtasse 'e [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions estensiune]?\n\nPutite navigà nfra chiste [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category estensiune pe' categurìa].", - "mainpagetext": "MediaWiki è stato nstallato.", - "mainpagedocfooter": "Iate a cunzultà [https://meta.wikimedia.org/wiki/Help:Contents User's Guide] pe' n'avé nfurmaziune ncopp' 'o modo aùso d' 'o software wiki.\n\n== P'accummincià ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Elenco 'e mpustaziune pe' sta configuraziona]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ 'e Mediawiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Elenco 'e nutizie 'e Mediawiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localizzazzione 'e MediaWiki p' 'a lengua vuosta]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Mparate a cumbattere 'o spammo dint' 'a wiki d' 'a vosta]" + "config-skins-screenshots": "$1 (screenshots: $2)", + "config-extensions-requires": "$1 (vuless' 'o $2)", + "config-screenshot": "screenshot", + "mainpagetext": "MediaWiki è stato installato.", + "mainpagedocfooter": "Iate a cunzultà [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User's Guide] pe' n'avé nfurmaziune ncopp' 'o modo aùso d' 'o software wiki.\n\n== P'accummincià ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Elenco 'e mpustaziune pe' sta configuraziona]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ 'e Mediawiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Elenco 'e nutizie 'e Mediawiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localizzazzione 'e MediaWiki p' 'a lengua vuosta]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Mparate a cumbattere 'o spammo dint' 'a wiki d' 'a vosta]" } diff --git a/includes/installer/i18n/roa-tara.json b/includes/installer/i18n/roa-tara.json index fcdaf00a55..0a59f1008b 100644 --- a/includes/installer/i18n/roa-tara.json +++ b/includes/installer/i18n/roa-tara.json @@ -40,18 +40,18 @@ "config-db-password": "Password d'u database:", "config-db-port": "Porte d'u database:", "config-db-schema": "Scheme pe MediaUicchi:", - "config-type-mysql": "MySQL (o combatibbile)", + "config-type-mysql": "MariaDFB, MySQL, o combatibbile", "config-type-postgres": "PostgreSQL", "config-type-sqlite": "SQLite", "config-type-oracle": "Oracle", "config-type-mssql": "Microsoft SQL Server", - "config-header-mysql": "'Mbostaziune de MySQL", + "config-header-mysql": "'Mbostaziune de MariaDB/MySQL", "config-header-postgres": "'Mbostaziune de PostgreSQL", "config-header-sqlite": "'Mbostaziune de SQLite", "config-header-oracle": "'Mbostaziune de Oracle", "config-header-mssql": "'Mbostaziune de Microsoft SQL Server", "config-invalid-db-type": "Tipe de database invalide.", - "config-mysql-innodb": "InnoDB", + "config-mysql-innodb": "InnoDB (conzigliate)", "config-mysql-myisam": "MyISAM", "config-ns-generic": "Proggette", "config-admin-email": "Indirizze e-mail:", diff --git a/includes/jobqueue/JobQueueDB.php b/includes/jobqueue/JobQueueDB.php index 689326e8b6..0b85fbe8be 100644 --- a/includes/jobqueue/JobQueueDB.php +++ b/includes/jobqueue/JobQueueDB.php @@ -264,8 +264,6 @@ class JobQueueDB extends JobQueue { if ( $flags & self::QOS_ATOMIC ) { $dbw->endAtomic( $method ); } - - return; } /** diff --git a/includes/libs/virtualrest/ParsoidVirtualRESTService.php b/includes/libs/virtualrest/ParsoidVirtualRESTService.php index 73ecc9dc26..3f8a11b324 100644 --- a/includes/libs/virtualrest/ParsoidVirtualRESTService.php +++ b/includes/libs/virtualrest/ParsoidVirtualRESTService.php @@ -181,7 +181,7 @@ class ParsoidVirtualRESTService extends VirtualRESTService { unset( $req['query']['oldid'] ); } } elseif ( $reqType === 'transform' ) { - $req['url'] .= 'transform/'. $parts[3] . '/to/' . $parts[5]; + $req['url'] .= 'transform/' . $parts[3] . '/to/' . $parts[5]; // the title if ( isset( $parts[6] ) ) { $req['url'] .= '/' . $parts[6]; diff --git a/includes/media/JpegHandler.php b/includes/media/JpegHandler.php index 287c198c57..91bed4a82c 100644 --- a/includes/media/JpegHandler.php +++ b/includes/media/JpegHandler.php @@ -259,13 +259,13 @@ class JpegHandler extends ExifBitmapHandler { // Make a regex out of the source data to match it to an array of color // spaces in a case-insensitive way - $colorSpaceRegex = '/'.preg_quote( $data[0], '/' ).'/i'; + $colorSpaceRegex = '/' . preg_quote( $data[0], '/' ) . '/i'; if ( empty( preg_grep( $colorSpaceRegex, $colorSpaces ) ) ) { // We can't establish that this file matches the color space, don't process it return false; } - $profileRegex = '/'.preg_quote( $data[1], '/' ).'/i'; + $profileRegex = '/' . preg_quote( $data[1], '/' ) . '/i'; if ( empty( preg_grep( $profileRegex, $oldProfileStrings ) ) ) { // We can't establish that this file has the expected ICC profile, don't process it return false; diff --git a/includes/page/Article.php b/includes/page/Article.php index 7404f83e47..6a42d58c28 100644 --- a/includes/page/Article.php +++ b/includes/page/Article.php @@ -355,7 +355,7 @@ class Article implements Page { if ( $this->mRevision !== null ) { // Revision title doesn't match the page title given? if ( $this->mPage->getId() != $this->mRevision->getPage() ) { - $function = get_class( $this->mPage ). '::newFromID'; + $function = get_class( $this->mPage ) . '::newFromID'; $this->mPage = $function( $this->mRevision->getPage() ); } } @@ -817,6 +817,7 @@ class Article implements Page { // Note that the ArticleViewHeader hook is allowed to set $outputDone to a // ParserOutput instance. $pOutput = ( $outputDone instanceof ParserOutput ) + // phpcs:ignore MediaWiki.Usage.NestedInlineTernary.UnparenthesizedTernary -- FIXME T203805 ? $outputDone // object fetched by hook : $this->mParserOutput ?: null; // ParserOutput or null, avoid false @@ -2155,7 +2156,7 @@ class Article implements Page { /** * Lightweight method to get the parser output for a page, checking the parser cache - * and so on. Doesn't consider most of the stuff that WikiPage::view is forced to + * and so on. Doesn't consider most of the stuff that Article::view() is forced to * consider, so it's not appropriate to use there. * * @since 1.16 (r52326) for LiquidThreads @@ -2304,8 +2305,13 @@ class Article implements Page { * Call to WikiPage function for backwards compatibility. * @see WikiPage::doDeleteUpdates */ - public function doDeleteUpdates( $id, Content $content = null ) { - return $this->mPage->doDeleteUpdates( $id, $content ); + public function doDeleteUpdates( + $id, + Content $content = null, + $revision = null, + User $user = null + ) { + $this->mPage->doDeleteUpdates( $id, $content, $revision, $user ); } /** diff --git a/includes/page/ImageHistoryList.php b/includes/page/ImageHistoryList.php index 1f87d93360..0a07c6884f 100644 --- a/includes/page/ImageHistoryList.php +++ b/includes/page/ImageHistoryList.php @@ -266,7 +266,7 @@ class ImageHistoryList extends ContextSource { } else { $row .= '' . Linker::formatComment( $description, $this->title ) . ''; + '">' . Linker::formatComment( $description, $this->title ) . ''; } $rowClass = null; diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index bf21a56708..74e31791e9 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -29,6 +29,7 @@ use MediaWiki\Storage\PageUpdater; use MediaWiki\Storage\RevisionRecord; use MediaWiki\Storage\RevisionSlotsUpdate; use MediaWiki\Storage\RevisionStore; +use MediaWiki\Storage\SlotRecord; use Wikimedia\Assert\Assert; use Wikimedia\Rdbms\FakeResultWrapper; use Wikimedia\Rdbms\IDatabase; @@ -2820,15 +2821,21 @@ class WikiPage implements Page, IDBAccessObject { * Do some database updates after deletion * * @param int $id The page_id value of the page being deleted - * @param Content|null $content Optional page content to be used when determining + * @param Content|null $content Page content to be used when determining * the required updates. This may be needed because $this->getContent() * may already return null when the page proper was deleted. - * @param Revision|null $revision The latest page revision + * @param RevisionRecord|Revision|null $revision The current page revision at the time of + * deletion, used when determining the required updates. This may be needed because + * $this->getRevision() may already return null when the page proper was deleted. * @param User|null $user The user that caused the deletion */ public function doDeleteUpdates( $id, Content $content = null, Revision $revision = null, User $user = null ) { + if ( $id !== $this->getId() ) { + throw new InvalidArgumentException( 'Mismatching page ID' ); + } + try { $countable = $this->isCountable(); } catch ( Exception $ex ) { @@ -2843,7 +2850,9 @@ class WikiPage implements Page, IDBAccessObject { ) ); // Delete pagelinks, update secondary indexes, etc - $updates = $this->getDeletionUpdates( $content ); + $updates = $this->getDeletionUpdates( + $revision ? $revision->getRevisionRecord() : $content + ); foreach ( $updates as $update ) { DeferredUpdates::addUpdate( $update ); } @@ -3545,32 +3554,68 @@ class WikiPage implements Page, IDBAccessObject { * updates should remove any information about this page from secondary data * stores such as links tables. * - * @param Content|null $content Optional Content object for determining the - * necessary updates. + * @param RevisionRecord|Content|null $rev The revision being deleted. Also accepts a Content + * object for backwards compatibility. * @return DeferrableUpdate[] */ - public function getDeletionUpdates( Content $content = null ) { - if ( !$content ) { - // load content object, which may be used to determine the necessary updates. - // XXX: the content may not be needed to determine the updates. + public function getDeletionUpdates( $rev = null ) { + if ( !$rev ) { + wfDeprecated( __METHOD__ . ' without a RevisionRecord', '1.32' ); + try { - $content = $this->getContent( Revision::RAW ); + $rev = $this->getRevisionRecord(); } catch ( Exception $ex ) { // If we can't load the content, something is wrong. Perhaps that's why // the user is trying to delete the page, so let's not fail in that case. // Note that doDeleteArticleReal() will already have logged an issue with // loading the content. + wfDebug( __METHOD__ . ' failed to load current revision of page ' . $this->getId() ); } } - if ( !$content ) { - $updates = []; + if ( !$rev ) { + $slotContent = []; + } elseif ( $rev instanceof Content ) { + wfDeprecated( __METHOD__ . ' with a Content object instead of a RevisionRecord', '1.32' ); + + $slotContent = [ 'main' => $rev ]; } else { - $updates = $content->getDeletionUpdates( $this ); + $slotContent = array_map( function ( SlotRecord $slot ) { + return $slot->getContent( Revision::RAW ); + }, $rev->getSlots()->getSlots() ); } - Hooks::run( 'WikiPageDeletionUpdates', [ $this, $content, &$updates ] ); - return $updates; + $allUpdates = [ new LinksDeletionUpdate( $this ) ]; + + // NOTE: once Content::getDeletionUpdates() is removed, we only need to content + // model here, not the content object! + // TODO: consolidate with similar logic in DerivedPageDataUpdater::getSecondaryDataUpdates() + /** @var Content $content */ + foreach ( $slotContent as $role => $content ) { + $handler = $content->getContentHandler(); + + $updates = $handler->getDeletionUpdates( + $this->getTitle(), + $role + ); + $allUpdates = array_merge( $allUpdates, $updates ); + + // TODO: remove B/C hack in 1.32! + $legacyUpdates = $content->getDeletionUpdates( $this ); + + // HACK: filter out redundant and incomplete LinksDeletionUpdate + $legacyUpdates = array_filter( $legacyUpdates, function ( $update ) { + return !( $update instanceof LinksDeletionUpdate ); + } ); + + $allUpdates = array_merge( $allUpdates, $legacyUpdates ); + } + + Hooks::run( 'PageDeletionDataUpdates', [ $this->getTitle(), $rev, &$allUpdates ] ); + + // TODO: hard deprecate old hook in 1.33 + Hooks::run( 'WikiPageDeletionUpdates', [ $this, $content, &$allUpdates ] ); + return $allUpdates; } /** diff --git a/includes/parser/MWTidy.php b/includes/parser/MWTidy.php index 5788986f2e..a73c28cdba 100644 --- a/includes/parser/MWTidy.php +++ b/includes/parser/MWTidy.php @@ -71,6 +71,7 @@ class MWTidy { $config = $wgTidyConfig; } elseif ( $wgUseTidy ) { // b/c configuration + wfDeprecated( '$wgUseTidy', '1.26' ); $config = [ 'tidyConfigFile' => $wgTidyConf, 'debugComment' => $wgDebugTidy, @@ -86,6 +87,7 @@ class MWTidy { $config['driver'] = 'RaggettExternal'; } } else { + wfDeprecated( '$wgTidyConfig = null and $wgUseTidy = false', '1.26' ); return false; } self::$instance = self::factory( $config ); diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php index 7d5a362b38..dc2bb0c6b3 100644 --- a/includes/parser/Parser.php +++ b/includes/parser/Parser.php @@ -292,8 +292,8 @@ class Parser { self::EXT_LINK_URL_CLASS . '*)\p{Zs}*([^\]\\x00-\\x08\\x0a-\\x1F\\x{FFFD}]*?)\]/Su'; if ( isset( $conf['preprocessorClass'] ) ) { $this->mPreprocessorClass = $conf['preprocessorClass']; - } elseif ( defined( 'HPHP_VERSION' ) ) { - # Preprocessor_Hash is much faster than Preprocessor_DOM under HipHop + } elseif ( wfIsHHVM() ) { + # Under HHVM Preprocessor_Hash is much faster than Preprocessor_DOM $this->mPreprocessorClass = Preprocessor_Hash::class; } elseif ( extension_loaded( 'domxml' ) ) { # PECL extension that conflicts with the core DOM extension (T15770) diff --git a/includes/parser/Preprocessor_Hash.php b/includes/parser/Preprocessor_Hash.php index 0326499a7a..6d6dd8937b 100644 --- a/includes/parser/Preprocessor_Hash.php +++ b/includes/parser/Preprocessor_Hash.php @@ -1088,7 +1088,7 @@ class PPFrame_Hash implements PPFrame { } elseif ( is_array( $contextNode ) ) { // Node descriptor array if ( count( $contextNode ) !== 2 ) { - throw new MWException( __METHOD__. + throw new MWException( __METHOD__ . ': found an array where a node descriptor should be' ); } list( $contextName, $contextChildren ) = $contextNode; @@ -1786,7 +1786,7 @@ class PPNode_Hash_Tree implements PPNode { $class = self::class; } } else { - throw new MWException( __METHOD__.': invalid node descriptor' ); + throw new MWException( __METHOD__ . ': invalid node descriptor' ); } return new $class( $store, $index ); } @@ -2206,7 +2206,7 @@ class PPNode_Hash_Attr implements PPNode { public function __construct( array $store, $index ) { $descriptor = $store[$index]; if ( $descriptor[PPNode_Hash_Tree::NAME][0] !== '@' ) { - throw new MWException( __METHOD__.': invalid name in attribute descriptor' ); + throw new MWException( __METHOD__ . ': invalid name in attribute descriptor' ); } $this->name = substr( $descriptor[PPNode_Hash_Tree::NAME], 1 ); $this->value = $descriptor[PPNode_Hash_Tree::CHILDREN][0]; diff --git a/includes/resourceloader/ResourceLoader.php b/includes/resourceloader/ResourceLoader.php index 9764549e84..604a140de5 100644 --- a/includes/resourceloader/ResourceLoader.php +++ b/includes/resourceloader/ResourceLoader.php @@ -1162,8 +1162,8 @@ MESSAGE; } } else { if ( $states ) { - // Keep default escaping of slashes (e.g. "") for ResourceLoaderClientHtml. - $this->errors[] = 'Problematic modules: ' . json_encode( $states, JSON_PRETTY_PRINT ); + $this->errors[] = 'Problematic modules: ' + . self::encodeJsonForScript( $states ); } } @@ -1223,7 +1223,7 @@ MESSAGE; if ( self::inDebugMode() ) { $scripts = new XmlJsCode( "function ( $, jQuery, require, module ) {\n{$scripts->value}\n}" ); } else { - $scripts = new XmlJsCode( 'function($,jQuery,require,module){'. $scripts->value . '}' ); + $scripts = new XmlJsCode( 'function($,jQuery,require,module){' . $scripts->value . '}' ); } } elseif ( !is_string( $scripts ) && !is_array( $scripts ) ) { throw new MWException( 'Invalid scripts error. Array of URLs or string of code expected.' ); @@ -1292,6 +1292,35 @@ MESSAGE; return $out; } + /** + * Wrapper around json_encode that avoids needless escapes, + * and pretty-prints in debug mode. + * + * @internal + * @since 1.32 + * @param bool|string|array $data + * @return string JSON + */ + public static function encodeJsonForScript( $data ) { + // Keep output as small as possible by disabling needless escape modes + // that PHP uses by default. + // However, while most module scripts are only served on HTTP responses + // for JavaScript, some modules can also be embedded in the HTML as inline + // scripts. This, and the fact that we sometimes need to export strings + // containing user-generated content and labels that may genuinely contain + // a sequences like "", we need to encode either '/' or '<'. + // By default PHP escapes '/'. Let's escape '<' instead which is less common + // and allows URLs to mostly remain readable. + $jsonFlags = JSON_UNESCAPED_SLASHES | + JSON_UNESCAPED_UNICODE | + JSON_HEX_TAG | + JSON_HEX_AMP; + if ( self::inDebugMode() ) { + $jsonFlags |= JSON_PRETTY_PRINT; + } + return json_encode( $data, $jsonFlags ); + } + /** * 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: @@ -1317,31 +1346,6 @@ MESSAGE; ); } - /** - * Returns JS code which calls the script given by $script. The script will - * be called with local variables name, version, dependencies and group, - * which will have values corresponding to $name, $version, $dependencies - * and $group as supplied. - * - * @param string $name Module name - * @param string $version Module version hash - * @param array $dependencies List of module names on which this module depends - * @param string $group Group which the module is in. - * @param string $source Source of the module, or 'local' if not foreign. - * @param string $script JavaScript code - * @return string JavaScript code - */ - public static function makeCustomLoaderScript( $name, $version, $dependencies, - $group, $source, $script - ) { - $script = str_replace( "\n", "\n\t", trim( $script ) ); - return Xml::encodeJsCall( - "( function ( name, version, dependencies, group, source ) {\n\t$script\n} )", - [ $name, $version, $dependencies, $group, $source ], - self::inDebugMode() - ); - } - private static function isEmptyObject( stdClass $obj ) { foreach ( $obj as $key => $value ) { return false; @@ -1378,69 +1382,56 @@ MESSAGE; /** * Returns JS code which calls mw.loader.register with the given - * parameters. Has three calling conventions: - * - * - ResourceLoader::makeLoaderRegisterScript( $name, $version, - * $dependencies, $group, $source, $skip - * ): - * Register a single module. + * parameter. * - * - ResourceLoader::makeLoaderRegisterScript( [ $name1, $name2 ] ): - * Register modules with the given names. + * @par Example + * @code * - * - ResourceLoader::makeLoaderRegisterScript( [ + * ResourceLoader::makeLoaderRegisterScript( [ * [ $name1, $version1, $dependencies1, $group1, $source1, $skip1 ], * [ $name2, $version2, $dependencies1, $group2, $source2, $skip2 ], * ... * ] ): - * Registers modules with the given names and parameters. + * @endcode * - * @param string $name Module name - * @param string|null $version Module version hash - * @param array|null $dependencies List of module names on which this module depends - * @param string|null $group Group which the module is in - * @param string|null $source Source of the module, or 'local' if not foreign - * @param string|null $skip Script body of the skip function + * @internal + * @since 1.32 + * @param array $modules Array of module registration arrays, each containing + * - string: module name + * - string: module version + * - array|null: List of dependencies (optional) + * - string|null: Module group (optional) + * - string|null: Name of foreign module source, or 'local' (optional) + * - string|null: Script body of a skip function (optional) * @return string JavaScript code */ - public static function makeLoaderRegisterScript( $name, $version = null, - $dependencies = null, $group = null, $source = null, $skip = null - ) { - if ( is_array( $name ) ) { + public static function makeLoaderRegisterScript( array $modules ) { + // Optimisation: Transform dependency names into indexes when possible + // to produce smaller output. They are expanded by mw.loader.register on + // the other end using resolveIndexedDependencies(). + $index = []; + foreach ( $modules as $i => &$module ) { // Build module name index - $index = []; - foreach ( $name as $i => &$module ) { - $index[$module[0]] = $i; - } - - // Transform dependency names into indexes when possible, they will be resolved by - // mw.loader.register on the other end - foreach ( $name as &$module ) { - if ( isset( $module[2] ) ) { - foreach ( $module[2] as &$dependency ) { - if ( isset( $index[$dependency] ) ) { - $dependency = $index[$dependency]; - } + $index[$module[0]] = $i; + } + foreach ( $modules as &$module ) { + if ( isset( $module[2] ) ) { + foreach ( $module[2] as &$dependency ) { + if ( isset( $index[$dependency] ) ) { + // Replace module name in dependency list with index + $dependency = $index[$dependency]; } } } + } - array_walk( $name, [ 'self', 'trimArray' ] ); + array_walk( $modules, [ 'self', 'trimArray' ] ); - return Xml::encodeJsCall( - 'mw.loader.register', - [ $name ], - self::inDebugMode() - ); - } else { - $registration = [ $name, $version, $dependencies, $group, $source, $skip ]; - self::trimArray( $registration ); - return Xml::encodeJsCall( - 'mw.loader.register', - $registration, - self::inDebugMode() - ); - } + return Xml::encodeJsCall( + 'mw.loader.register', + [ $modules ], + self::inDebugMode() + ); } /** @@ -1491,7 +1482,7 @@ MESSAGE; public static function makeInlineCodeWithModule( $modules, $script ) { // Adds an array to lazy-created RLQ return '(window.RLQ=window.RLQ||[]).push([' - . json_encode( $modules ) . ',' + . self::encodeJsonForScript( $modules ) . ',' . 'function(){' . trim( $script ) . '}' . ']);'; } diff --git a/includes/resourceloader/ResourceLoaderClientHtml.php b/includes/resourceloader/ResourceLoaderClientHtml.php index 8d0836640f..5c072bfdec 100644 --- a/includes/resourceloader/ResourceLoaderClientHtml.php +++ b/includes/resourceloader/ResourceLoaderClientHtml.php @@ -304,7 +304,10 @@ class ResourceLoaderClientHtml { // Inline RLQ: Load general modules if ( $data['general'] ) { $chunks[] = ResourceLoader::makeInlineScript( - Xml::encodeJsCall( 'mw.loader.load', [ $data['general'] ] ), + 'RLPAGEMODULES=' + . ResourceLoader::encodeJsonForScript( $data['general'] ) + . ';' + . 'mw.loader.load(RLPAGEMODULES);', $nonce ); } diff --git a/includes/resourceloader/ResourceLoaderImage.php b/includes/resourceloader/ResourceLoaderImage.php index 0adbd0cb38..d9c369dd02 100644 --- a/includes/resourceloader/ResourceLoaderImage.php +++ b/includes/resourceloader/ResourceLoaderImage.php @@ -140,13 +140,9 @@ class ResourceLoaderImage { if ( isset( $desc['lang'][$contextLang] ) ) { return $this->basePath . '/' . $desc['lang'][$contextLang]; } - $fallbacks = Language::getFallbacksFor( $contextLang ); + $fallbacks = Language::getFallbacksFor( $contextLang, Language::STRICT_FALLBACKS ); foreach ( $fallbacks as $lang ) { - // Images will fallback to 'default' instead of 'en', except for 'en-*' variants - if ( - ( $lang !== 'en' || substr( $contextLang, 0, 3 ) === 'en-' ) && - isset( $desc['lang'][$lang] ) - ) { + if ( isset( $desc['lang'][$lang] ) ) { return $this->basePath . '/' . $desc['lang'][$lang]; } } diff --git a/includes/resourceloader/ResourceLoaderSkinModule.php b/includes/resourceloader/ResourceLoaderSkinModule.php index 2455596233..e0fbeeed20 100644 --- a/includes/resourceloader/ResourceLoaderSkinModule.php +++ b/includes/resourceloader/ResourceLoaderSkinModule.php @@ -117,7 +117,7 @@ class ResourceLoaderSkinModule extends ResourceLoaderFileModule { } // Because PHP can't have floats as array keys - uksort( $logosPerDppx, function ( $a , $b ) { + uksort( $logosPerDppx, function ( $a, $b ) { $a = floatval( $a ); $b = floatval( $b ); // Sort from smallest to largest (e.g. 1x, 1.5x, 2x) diff --git a/includes/resourceloader/ResourceLoaderStartUpModule.php b/includes/resourceloader/ResourceLoaderStartUpModule.php index 8140c2c8c0..e4a753fc16 100644 --- a/includes/resourceloader/ResourceLoaderStartUpModule.php +++ b/includes/resourceloader/ResourceLoaderStartUpModule.php @@ -404,16 +404,9 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { $mwLoaderCode .= file_get_contents( "$IP/resources/src/startup/profiler.js" ); } - // Keep output as small as possible by disabling needless escapes that PHP uses by default. - // This is not HTML output, only used in a JS response. - $jsonFlags = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE; - if ( ResourceLoader::inDebugMode() ) { - $jsonFlags |= JSON_PRETTY_PRINT; - } - // Perform replacements for mediawiki.js $mwLoaderPairs = [ - '$VARS.baseModules' => json_encode( $this->getBaseModules(), $jsonFlags ), + '$VARS.baseModules' => ResourceLoader::encodeJsonForScript( $this->getBaseModules() ), ]; $profilerStubs = [ '$CODE.profileExecuteStart();' => 'mw.loader.profiler.onExecuteStart( module );', @@ -432,13 +425,11 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { // Perform string replacements for startup.js $pairs = [ - '$VARS.wgLegacyJavaScriptGlobals' => json_encode( - $this->getConfig()->get( 'LegacyJavaScriptGlobals' ), - $jsonFlags + '$VARS.wgLegacyJavaScriptGlobals' => ResourceLoader::encodeJsonForScript( + $this->getConfig()->get( 'LegacyJavaScriptGlobals' ) ), - '$VARS.configuration' => json_encode( - $this->getConfigSettings( $context ), - $jsonFlags + '$VARS.configuration' => ResourceLoader::encodeJsonForScript( + $this->getConfigSettings( $context ) ), // Raw JavaScript code (not JSON) '$CODE.registrations();' => trim( $this->getModuleRegistrations( $context ) ), diff --git a/includes/specialpage/ChangesListSpecialPage.php b/includes/specialpage/ChangesListSpecialPage.php index caa039b5e9..43b4e98663 100644 --- a/includes/specialpage/ChangesListSpecialPage.php +++ b/includes/specialpage/ChangesListSpecialPage.php @@ -69,9 +69,6 @@ abstract class ChangesListSpecialPage extends SpecialPage { /** @var FormOptions */ protected $rcOptions; - /** @var array */ - protected $customFilters; - // Order of both groups and filters is significant; first is top-most priority, // descending from there. // 'showHideSuffix' is a shortcut to and avoid spelling out @@ -84,8 +81,7 @@ abstract class ChangesListSpecialPage extends SpecialPage { * * Groups are displayed to the user in the structured UI. However, if necessary, * all of the filters in a group can be configured to only display on the - * unstuctured UI, in which case you don't need a group title. This is done in - * getFilterGroupDefinitionFromLegacyCustomFilters, for example. + * unstuctured UI, in which case you don't need a group title. * * @var array $filterGroupDefinitions */ @@ -987,11 +983,7 @@ abstract class ChangesListSpecialPage extends SpecialPage { Hooks::run( 'ChangesListSpecialPageStructuredFilters', [ $this ] ); - $unstructuredGroupDefinition = - $this->getFilterGroupDefinitionFromLegacyCustomFilters( - $this->getCustomFilters() - ); - $this->registerFiltersFromDefinitions( [ $unstructuredGroupDefinition ] ); + $this->registerFiltersFromDefinitions( [] ); $userExperienceLevel = $this->getFilterGroup( 'userExpLevel' ); $registered = $userExperienceLevel->getFilter( 'registered' ); @@ -1074,32 +1066,6 @@ abstract class ChangesListSpecialPage extends SpecialPage { } } - /** - * Get filter group definition from legacy custom filters - * - * @param array $customFilters Custom filters from legacy hooks - * @return array Group definition - */ - protected function getFilterGroupDefinitionFromLegacyCustomFilters( array $customFilters ) { - // Special internal unstructured group - $unstructuredGroupDefinition = [ - 'name' => 'unstructured', - 'class' => ChangesListBooleanFilterGroup::class, - 'priority' => -1, // Won't display in structured - 'filters' => [], - ]; - - foreach ( $customFilters as $name => $params ) { - $unstructuredGroupDefinition['filters'][] = [ - 'name' => $name, - 'showHide' => $params['msg'], - 'default' => $params['default'], - ]; - } - - return $unstructuredGroupDefinition; - } - /** * @return array The legacy show/hide toggle filters */ @@ -1245,21 +1211,6 @@ abstract class ChangesListSpecialPage extends SpecialPage { return $output; } - /** - * Get custom show/hide filters using deprecated ChangesListSpecialPageFilters - * hook. - * - * @return array Map of filter URL param names to properties (msg/default) - */ - protected function getCustomFilters() { - if ( $this->customFilters === null ) { - $this->customFilters = []; - Hooks::run( 'ChangesListSpecialPageFilters', [ $this, &$this->customFilters ], '1.29' ); - } - - return $this->customFilters; - } - /** * Fetch values for a FormOptions object from the WebRequest associated with this instance. * diff --git a/includes/specialpage/LoginSignupSpecialPage.php b/includes/specialpage/LoginSignupSpecialPage.php index e94f3db72c..bf6c9bbfe9 100644 --- a/includes/specialpage/LoginSignupSpecialPage.php +++ b/includes/specialpage/LoginSignupSpecialPage.php @@ -1127,7 +1127,7 @@ abstract class LoginSignupSpecialPage extends AuthManagerSpecialPage { if ( !$signupendMsg->isDisabled() ) { $usingHTTPS = $this->getRequest()->getProtocol() === 'https'; $signupendText = ( $usingHTTPS && !$signupendHttpsMsg->isBlank() ) - ? $signupendHttpsMsg ->parse() : $signupendMsg->parse(); + ? $signupendHttpsMsg->parse() : $signupendMsg->parse(); $fieldDefinitions['signupend'] = [ 'type' => 'info', 'raw' => true, diff --git a/includes/specials/SpecialFilepath.php b/includes/specials/SpecialFilepath.php index c18faa12d3..618fd1da48 100644 --- a/includes/specials/SpecialFilepath.php +++ b/includes/specials/SpecialFilepath.php @@ -41,12 +41,17 @@ class SpecialFilepath extends RedirectSpecialPage { public function getRedirect( $par ) { $file = $par ?: $this->getRequest()->getText( 'file' ); + $redirect = null; if ( $file ) { - $argument = "file/$file"; - } else { - $argument = 'file'; + $redirect = SpecialPage::getSafeTitleFor( 'Redirect', "file/$file" ); } - return SpecialPage::getSafeTitleFor( 'Redirect', $argument ); + if ( $redirect === null ) { + // The user input is empty or an invalid title, + // redirect to form of Special:Redirect with the invalid value prefilled + $this->mAddedRedirectParams['wpvalue'] = $file; + $redirect = SpecialPage::getSafeTitleFor( 'Redirect', 'file' ); + } + return $redirect; } protected function getGroupName() { diff --git a/includes/specials/SpecialRecentchanges.php b/includes/specials/SpecialRecentchanges.php index 983f74cd82..3e8bf1202c 100644 --- a/includes/specials/SpecialRecentchanges.php +++ b/includes/specials/SpecialRecentchanges.php @@ -225,20 +225,6 @@ class SpecialRecentChanges extends ChangesListSpecialPage { } } - /** - * Get all custom filters - * - * @return array Map of filter URL param names to properties (msg/default) - */ - protected function getCustomFilters() { - if ( $this->customFilters === null ) { - $this->customFilters = parent::getCustomFilters(); - Hooks::run( 'SpecialRecentChangesFilters', [ $this, &$this->customFilters ], '1.23' ); - } - - return $this->customFilters; - } - /** * Process $par and put options found in $opts. Used when including the page. * diff --git a/includes/specials/SpecialRedirect.php b/includes/specials/SpecialRedirect.php index e827911382..1b2bda9a93 100644 --- a/includes/specials/SpecialRedirect.php +++ b/includes/specials/SpecialRedirect.php @@ -68,37 +68,44 @@ class SpecialRedirect extends FormSpecialPage { /** * Handle Special:Redirect/user/xxxx (by redirecting to User:YYYY) * - * @return string|null Url to redirect to, or null if $mValue is invalid. + * @return Status A good status contains the url to redirect to */ function dispatchUser() { if ( !ctype_digit( $this->mValue ) ) { - return null; + // Message: redirect-not-numeric + return Status::newFatal( $this->getMessagePrefix() . '-not-numeric' ); } $user = User::newFromId( (int)$this->mValue ); $username = $user->getName(); // load User as side-effect if ( $user->isAnon() ) { - return null; + // Message: redirect-not-exists + return Status::newFatal( $this->getMessagePrefix() . '-not-exists' ); } $userpage = Title::makeTitle( NS_USER, $username ); - return $userpage->getFullURL( '', false, PROTO_CURRENT ); + return Status::newGood( $userpage->getFullURL( '', false, PROTO_CURRENT ) ); } /** * Handle Special:Redirect/file/xxxx * - * @return string|null Url to redirect to, or null if $mValue is not found. + * @return Status A good status contains the url to redirect to */ function dispatchFile() { - $title = Title::makeTitleSafe( NS_FILE, $this->mValue ); - - if ( !$title instanceof Title ) { - return null; + try { + $title = Title::newFromTextThrow( $this->mValue, NS_FILE ); + if ( $title && !$title->inNamespace( NS_FILE ) ) { + // If the given value contains a namespace enforce file namespace + $title = Title::newFromTextThrow( Title::makeName( NS_FILE, $this->mValue ) ); + } + } catch ( MalformedTitleException $e ) { + return Status::newFatal( $e->getMessageObject() ); } $file = wfFindFile( $title ); if ( !$file || !$file->exists() ) { - return null; + // Message: redirect-not-exists + return Status::newFatal( $this->getMessagePrefix() . '-not-exists' ); } // Default behavior: Use the direct link to the file. $url = $file->getUrl(); @@ -116,48 +123,52 @@ class SpecialRedirect extends FormSpecialPage { } } - return $url; + return Status::newGood( $url ); } /** * Handle Special:Redirect/revision/xxx * (by redirecting to index.php?oldid=xxx) * - * @return string|null Url to redirect to, or null if $mValue is invalid. + * @return Status A good status contains the url to redirect to */ function dispatchRevision() { $oldid = $this->mValue; if ( !ctype_digit( $oldid ) ) { - return null; + // Message: redirect-not-numeric + return Status::newFatal( $this->getMessagePrefix() . '-not-numeric' ); } $oldid = (int)$oldid; if ( $oldid === 0 ) { - return null; + // Message: redirect-not-exists + return Status::newFatal( $this->getMessagePrefix() . '-not-exists' ); } - return wfAppendQuery( wfScript( 'index' ), [ + return Status::newGood( wfAppendQuery( wfScript( 'index' ), [ 'oldid' => $oldid - ] ); + ] ) ); } /** * Handle Special:Redirect/page/xxx (by redirecting to index.php?curid=xxx) * - * @return string|null Url to redirect to, or null if $mValue is invalid. + * @return Status A good status contains the url to redirect to */ function dispatchPage() { $curid = $this->mValue; if ( !ctype_digit( $curid ) ) { - return null; + // Message: redirect-not-numeric + return Status::newFatal( $this->getMessagePrefix() . '-not-numeric' ); } $curid = (int)$curid; if ( $curid === 0 ) { - return null; + // Message: redirect-not-exists + return Status::newFatal( $this->getMessagePrefix() . '-not-exists' ); } - return wfAppendQuery( wfScript( 'index' ), [ + return Status::newGood( wfAppendQuery( wfScript( 'index' ), [ 'curid' => $curid - ] ); + ] ) ); } /** @@ -165,19 +176,21 @@ class SpecialRedirect extends FormSpecialPage { * (by redirecting to index.php?title=Special:Log&logid=xxx) * * @since 1.27 - * @return string|null Url to redirect to, or null if $mValue is invalid. + * @return Status A good status contains the url to redirect to */ function dispatchLog() { $logid = $this->mValue; if ( !ctype_digit( $logid ) ) { - return null; + // Message: redirect-not-numeric + return Status::newFatal( $this->getMessagePrefix() . '-not-numeric' ); } $logid = (int)$logid; if ( $logid === 0 ) { - return null; + // Message: redirect-not-exists + return Status::newFatal( $this->getMessagePrefix() . '-not-exists' ); } $query = [ 'title' => 'Special:Log', 'logid' => $logid ]; - return wfAppendQuery( wfScript( 'index' ), $query ); + return Status::newGood( wfAppendQuery( wfScript( 'index' ), $query ) ); } /** @@ -186,41 +199,39 @@ class SpecialRedirect extends FormSpecialPage { * or do nothing (if $mValue wasn't set) allowing the form to be * displayed. * - * @return bool True if a redirect was successfully handled. + * @return Status|bool True if a redirect was successfully handled. */ function dispatch() { // the various namespaces supported by Special:Redirect switch ( $this->mType ) { case 'user': - $url = $this->dispatchUser(); + $status = $this->dispatchUser(); break; case 'file': - $url = $this->dispatchFile(); + $status = $this->dispatchFile(); break; case 'revision': - $url = $this->dispatchRevision(); + $status = $this->dispatchRevision(); break; case 'page': - $url = $this->dispatchPage(); + $status = $this->dispatchPage(); break; case 'logid': - $url = $this->dispatchLog(); + $status = $this->dispatchLog(); break; default: - $url = null; + $status = null; break; } - if ( $url ) { - $this->getOutput()->redirect( $url ); + if ( $status && $status->isGood() ) { + $this->getOutput()->redirect( $status->getValue() ); return true; } if ( !is_null( $this->mValue ) ) { $this->getOutput()->setStatusCode( 404 ); - // Message: redirect-not-exists - $msg = $this->getMessagePrefix() . '-not-exists'; - return Status::newFatal( $msg ); + return $status; } return false; diff --git a/includes/specials/SpecialWatchlist.php b/includes/specials/SpecialWatchlist.php index 908183d25a..432cfcc2f9 100644 --- a/includes/specials/SpecialWatchlist.php +++ b/includes/specials/SpecialWatchlist.php @@ -289,20 +289,6 @@ class SpecialWatchlist extends ChangesListSpecialPage { } } - /** - * Get all custom filters - * - * @return array Map of filter URL param names to properties (msg/default) - */ - protected function getCustomFilters() { - if ( $this->customFilters === null ) { - $this->customFilters = parent::getCustomFilters(); - Hooks::run( 'SpecialWatchlistFilters', [ $this, &$this->customFilters ], '1.23' ); - } - - return $this->customFilters; - } - /** * Fetch values for a FormOptions object from the WebRequest associated with this instance. * diff --git a/includes/specials/forms/PreferencesFormOOUI.php b/includes/specials/forms/PreferencesFormOOUI.php index a5171e36b8..bf4d9af80e 100644 --- a/includes/specials/forms/PreferencesFormOOUI.php +++ b/includes/specials/forms/PreferencesFormOOUI.php @@ -172,7 +172,7 @@ class PreferencesFormOOUI extends OOUIHTMLForm { 'div', [ 'class' => - 'oo-ui-widget oo-ui-widget-enabled oo-ui-optionWidget '. + 'oo-ui-widget oo-ui-widget-enabled oo-ui-optionWidget ' . 'oo-ui-tabOptionWidget oo-ui-labelElement' . ( $i === 0 ? ' oo-ui-optionWidget-selected' : '' ) ], @@ -193,7 +193,7 @@ class PreferencesFormOOUI extends OOUIHTMLForm { [ 'class' => 'oo-ui-layout oo-ui-panelLayout oo-ui-indexLayout-tabPanel' ], Html::rawElement( 'div', - [ 'class' => 'oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget '. + [ 'class' => 'oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget ' . 'oo-ui-selectWidget-depressed oo-ui-tabSelectWidget' ], implode( $fakeTabs ) ) diff --git a/includes/tidy/RaggettBase.php b/includes/tidy/RaggettBase.php index ccef56b34c..ed91735804 100644 --- a/includes/tidy/RaggettBase.php +++ b/includes/tidy/RaggettBase.php @@ -4,6 +4,9 @@ namespace MediaWiki\Tidy; use MWException; +/** + * @deprecated since 1.32, use RemexDriver + */ abstract class RaggettBase extends TidyDriverBase { /** * Generic interface for wrapping and unwrapping HTML for Dave Raggett's tidy. diff --git a/includes/tidy/RaggettExternal.php b/includes/tidy/RaggettExternal.php index 2809ea47d4..0b485c7cc6 100644 --- a/includes/tidy/RaggettExternal.php +++ b/includes/tidy/RaggettExternal.php @@ -2,6 +2,9 @@ namespace MediaWiki\Tidy; +/** + * @deprecated since 1.32, use RemexDriver + */ class RaggettExternal extends RaggettBase { /** * Spawn an external HTML tidy process and get corrected markup back from it. diff --git a/includes/tidy/RaggettInternalHHVM.php b/includes/tidy/RaggettInternalHHVM.php index 65d37f4f07..1681dc45e4 100644 --- a/includes/tidy/RaggettInternalHHVM.php +++ b/includes/tidy/RaggettInternalHHVM.php @@ -2,6 +2,9 @@ namespace MediaWiki\Tidy; +/** + * @deprecated since 1.32, use RemexDriver + */ class RaggettInternalHHVM extends RaggettBase { /** * Use the HTML tidy extension to use the tidy library in-process, diff --git a/includes/tidy/RaggettInternalPHP.php b/includes/tidy/RaggettInternalPHP.php index e7724b0164..c1050cc222 100644 --- a/includes/tidy/RaggettInternalPHP.php +++ b/includes/tidy/RaggettInternalPHP.php @@ -2,6 +2,9 @@ namespace MediaWiki\Tidy; +/** + * @deprecated since 1.32, use RemexDriver + */ class RaggettInternalPHP extends RaggettBase { /** * Use the HTML tidy extension to use the tidy library in-process, diff --git a/includes/tidy/RaggettWrapper.php b/includes/tidy/RaggettWrapper.php index b793a58af7..855282d342 100644 --- a/includes/tidy/RaggettWrapper.php +++ b/includes/tidy/RaggettWrapper.php @@ -15,6 +15,7 @@ use Parser; * duplicated. Perhaps we should create an abstract marker hiding class. * * @ingroup Parser + * @deprecated since 1.32 */ class RaggettWrapper { diff --git a/includes/user/BotPassword.php b/includes/user/BotPassword.php index 2228feb3fe..5762120053 100644 --- a/includes/user/BotPassword.php +++ b/includes/user/BotPassword.php @@ -470,6 +470,10 @@ class BotPassword implements IDBAccessObject { return Status::newFatal( 'nosuchuser', $name ); } + if ( $user->isLocked() ) { + return Status::newFatal( 'botpasswords-locked' ); + } + // Throttle $throttle = null; if ( !empty( $wgPasswordAttemptThrottle ) ) { diff --git a/includes/user/User.php b/includes/user/User.php index d61c29d6b4..aaa7663948 100644 --- a/includes/user/User.php +++ b/includes/user/User.php @@ -1011,10 +1011,10 @@ class User implements IDBAccessObject, UserIdentity { // Should these be merged into the title char list? $unicodeBlacklist = '/[' . '\x{0080}-\x{009f}' . # iso-8859-1 control chars - '\x{00a0}' . # non-breaking space + '\x{00a0}' . # non-breaking space '\x{2000}-\x{200f}' . # various whitespace '\x{2028}-\x{202f}' . # breaks and control chars - '\x{3000}' . # ideographic space + '\x{3000}' . # ideographic space '\x{e000}-\x{f8ff}' . # private use ']/u'; if ( preg_match( $unicodeBlacklist, $name ) ) { @@ -2166,10 +2166,6 @@ class User implements IDBAccessObject, UserIdentity { if ( isset( $limits['user'] ) ) { $userLimit = $limits['user']; } - // limits for newbie logged-in users - if ( $isNewbie && isset( $limits['newbie'] ) ) { - $keys[$cache->makeKey( 'limiter', $action, 'user', $id )] = $limits['newbie']; - } } // limits for anons and for newbie logged-in users @@ -2201,6 +2197,11 @@ class User implements IDBAccessObject, UserIdentity { } } + // limits for newbie logged-in users (override all the normal user limits) + if ( $id !== 0 && $isNewbie && isset( $limits['newbie'] ) ) { + $userLimit = $limits['newbie']; + } + // Set the user limit key if ( $userLimit !== false ) { list( $max, $period ) = $userLimit; diff --git a/includes/watcheditem/WatchedItemStore.php b/includes/watcheditem/WatchedItemStore.php index 6e907deef8..6b0c2aab11 100644 --- a/includes/watcheditem/WatchedItemStore.php +++ b/includes/watcheditem/WatchedItemStore.php @@ -407,6 +407,11 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac array $targetsWithVisitThresholds, $minimumWatchers = null ) { + if ( $targetsWithVisitThresholds === [] ) { + // No titles requested => no results returned + return []; + } + $dbr = $this->getConnectionRef( DB_REPLICA ); $conds = $this->getVisitingWatchersCondition( $dbr, $targetsWithVisitThresholds ); diff --git a/includes/widget/search/FullSearchResultWidget.php b/includes/widget/search/FullSearchResultWidget.php index af1e02754c..66fc030ca4 100644 --- a/includes/widget/search/FullSearchResultWidget.php +++ b/includes/widget/search/FullSearchResultWidget.php @@ -107,7 +107,7 @@ class FullSearchResultWidget implements SearchResultWidget { ""; } - return "
  • {$html}
  • "; + return "
  • {$html}
  • "; } /** diff --git a/languages/Language.php b/languages/Language.php index 85daa14821..5897241039 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -33,6 +33,25 @@ use CLDRPluralRuleParser\Evaluator; * @ingroup Language */ class Language { + /** + * Return autonyms in fetchLanguageName(s). + * @since 1.32 + */ + const AS_AUTONYMS = null; + + /** + * Return all known languages in fetchLanguageName(s). + * @since 1.32 + */ + const ALL = 'all'; + + /** + * Return in fetchLanguageName(s) only the languages for which we have at + * least some localisation. + * @since 1.32 + */ + const SUPPORTED = 'mwfile'; + /** * @var LanguageConverter */ @@ -61,6 +80,18 @@ class Language { static public $mLangObjCache = []; + /** + * Return a fallback chain for messages in getFallbacksFor + * @since 1.32 + */ + const MESSAGES_FALLBACKS = 0; + + /** + * Return a strict fallback chain in getFallbacksFor + * @since 1.32 + */ + const STRICT_FALLBACKS = 1; + static public $mWeekdayMsgs = [ 'sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday' @@ -809,16 +840,16 @@ class Language { /** * Get an array of language names, indexed by code. * @param null|string $inLanguage Code of language in which to return the names - * Use null for autonyms (native names) + * Use self::AS_AUTONYMS for autonyms (native names) * @param string $include One of: - * 'all' all available languages + * self::ALL all available languages * 'mw' only if the language is defined in MediaWiki or wgExtraLanguageNames (default) - * 'mwfile' only if the language is in 'mw' *and* has a message file + * self::SUPPORTED only if the language is in 'mw' *and* has a message file * @return array Language code => language name (sorted by key) * @since 1.20 */ - public static function fetchLanguageNames( $inLanguage = null, $include = 'mw' ) { - $cacheKey = $inLanguage === null ? 'null' : $inLanguage; + public static function fetchLanguageNames( $inLanguage = self::AS_AUTONYMS, $include = 'mw' ) { + $cacheKey = $inLanguage === self::AS_AUTONYMS ? 'null' : $inLanguage; $cacheKey .= ":$include"; if ( self::$languageNameCache === null ) { self::$languageNameCache = new HashBagOStuff( [ 'maxKeys' => 20 ] ); @@ -835,18 +866,21 @@ class Language { /** * Uncached helper for fetchLanguageNames * @param null|string $inLanguage Code of language in which to return the names - * Use null for autonyms (native names) + * Use self::AS_AUTONYMS for autonyms (native names) * @param string $include One of: - * 'all' all available languages + * self::ALL all available languages * 'mw' only if the language is defined in MediaWiki or wgExtraLanguageNames (default) - * 'mwfile' only if the language is in 'mw' *and* has a message file + * self::SUPPORTED only if the language is in 'mw' *and* has a message file * @return array Language code => language name (sorted by key) */ - private static function fetchLanguageNamesUncached( $inLanguage = null, $include = 'mw' ) { + private static function fetchLanguageNamesUncached( + $inLanguage = self::AS_AUTONYMS, + $include = 'mw' + ) { global $wgExtraLanguageNames, $wgUsePigLatinVariant; // If passed an invalid language code to use, fallback to en - if ( $inLanguage !== null && !self::isValidCode( $inLanguage ) ) { + if ( $inLanguage !== self::AS_AUTONYMS && !self::isValidCode( $inLanguage ) ) { $inLanguage = 'en'; } @@ -871,7 +905,7 @@ class Language { } } - if ( $include === 'all' ) { + if ( $include === self::ALL ) { ksort( $names ); return $names; } @@ -882,7 +916,7 @@ class Language { $returnMw[$coreCode] = $names[$coreCode]; } - if ( $include === 'mwfile' ) { + if ( $include === self::SUPPORTED ) { $namesMwFile = []; # We do this using a foreach over the codes instead of a directory # loop so that messages files in extensions will work correctly. @@ -905,12 +939,17 @@ class Language { /** * @param string $code The code of the language for which to get the name - * @param null|string $inLanguage Code of language in which to return the name (null for autonyms) - * @param string $include 'all', 'mw' or 'mwfile'; see fetchLanguageNames() + * @param null|string $inLanguage Code of language in which to return the name + * (SELF::AS_AUTONYMS for autonyms) + * @param string $include See fetchLanguageNames() * @return string Language name or empty * @since 1.20 */ - public static function fetchLanguageName( $code, $inLanguage = null, $include = 'all' ) { + public static function fetchLanguageName( + $code, + $inLanguage = self::AS_AUTONYMS, + $include = self::ALL + ) { $code = strtolower( $code ); $array = self::fetchLanguageNames( $inLanguage, $include ); return !array_key_exists( $code, $array ) ? '' : $array[$code]; @@ -4561,15 +4600,29 @@ class Language { * * @since 1.19 * @param string $code Language code - * @return array Non-empty array, ending in "en" + * @param int $mode Fallback mode, either MESSAGES_FALLBACKS (which always falls back to 'en'), + * or STRICT_FALLBACKS (whic honly falls back to 'en' when explicitly defined) + * @throws MWException + * @return array List of language codes */ - public static function getFallbacksFor( $code ) { + public static function getFallbacksFor( $code, $mode = self::MESSAGES_FALLBACKS ) { if ( $code === 'en' || !self::isValidBuiltInCode( $code ) ) { return []; } - // For unknown languages, fallbackSequence returns an empty array, - // hardcode fallback to 'en' in that case. - return self::getLocalisationCache()->getItem( $code, 'fallbackSequence' ) ?: [ 'en' ]; + switch ( $mode ) { + case self::MESSAGES_FALLBACKS: + // For unknown languages, fallbackSequence returns an empty array, + // hardcode fallback to 'en' in that case as English messages are + // always defined. + return self::getLocalisationCache()->getItem( $code, 'fallbackSequence' ) ?: [ 'en' ]; + case self::STRICT_FALLBACKS: + // Use this mode when you don't want to fallback to English unless + // explicitly defined, for example when you have language-variant icons + // and an international language-independent fallback. + return self::getLocalisationCache()->getItem( $code, 'originalFallbackSequence' ); + default: + throw new MWException( "Invalid fallback mode \"$mode\"" ); + } } /** diff --git a/languages/classes/LanguageKk.php b/languages/classes/LanguageKk.php index dc8a9f892f..4184508bdb 100644 --- a/languages/classes/LanguageKk.php +++ b/languages/classes/LanguageKk.php @@ -329,21 +329,18 @@ class KkConverter extends LanguageConverter { $text = preg_replace( $pat, $rep, $text ); } return $text; - break; case 'kk-latn': case 'kk-tr': foreach ( $this->mCyrl2Latn as $pat => $rep ) { $text = preg_replace( $pat, $rep, $text ); } return $text; - break; case 'kk-cyrl': case 'kk-kz': foreach ( $this->mLatn2Cyrl as $pat => $rep ) { $text = preg_replace( $pat, $rep, $text ); } return $text; - break; default: return $text; } diff --git a/languages/data/CrhExceptions.php b/languages/data/CrhExceptions.php index fcba6dc1dc..92c1f86e5a 100644 --- a/languages/data/CrhExceptions.php +++ b/languages/data/CrhExceptions.php @@ -104,9 +104,9 @@ class CrhExceptions { # load C2L and L2C bidirectional affix mappings $this->addMappings( $this->prefixMapping, - $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/'.self::WB, '/u' ); + $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/' . self::WB, '/u' ); $this->addMappings( $this->suffixMapping, - $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/', self::WB.'/u' ); + $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/', self::WB . '/u' ); # tack on one-way mappings to the ends of the prefix and suffix patterns $this->Cyrl2LatnPatterns += $this->Cyrl2LatnRegexes; @@ -388,8 +388,8 @@ class CrhExceptions { 'му([иэИЭ])' => 'mü$1', # originally L2C, here swapped - 'роль$1' => 'rol([^ü]|'.self::WB.')', - 'усть$1' => 'üst([^ü]|'.self::WB.')', + 'роль$1' => 'rol([^ü]|' . self::WB . ')', + 'усть$1' => 'üst([^ü]|' . self::WB . ')', # more prefixes 'ком-кок' => 'köm-kök', @@ -410,80 +410,80 @@ class CrhExceptions { // TODO: refactor upper/lower/first capital whole words without // regexes into simpler list - '/'.self::WB.'КъЮШ'.self::WB.'/u' => 'QYŞ', - '/'.self::WB.'ЮШ'.self::WB.'/u' => 'YŞ', - - '/'.self::WB.'кок'.self::WB.'/u' => 'kök', - '/'.self::WB.'Кок'.self::WB.'/u' => 'Kök', - '/'.self::WB.'КОК'.self::WB.'/u' => 'KÖK', - '/'.self::WB.'ком-кок'.self::WB.'/u' => 'köm-kök', - '/'.self::WB.'Ком-кок'.self::WB.'/u' => 'Köm-kök', - '/'.self::WB.'КОМ-КОК'.self::WB.'/u' => 'KÖM-KÖK', - - '/'.self::WB.'коп'.self::WB.'/u' => 'köp', - '/'.self::WB.'Коп'.self::WB.'/u' => 'Köp', - '/'.self::WB.'КОП'.self::WB.'/u' => 'KÖP', - - '/'.self::WB.'курк'.self::WB.'/u' => 'kürk', - '/'.self::WB.'Курк'.self::WB.'/u' => 'Kürk', - '/'.self::WB.'КУРК'.self::WB.'/u' => 'KÜRK', - - '/'.self::WB.'ог'.self::WB.'/u' => 'ög', - '/'.self::WB.'Ог'.self::WB.'/u' => 'Ög', - '/'.self::WB.'ОГ'.self::WB.'/u' => 'ÖG', - - '/'.self::WB.'юрип'.self::WB.'/u' => 'yürip', - '/'.self::WB.'Юрип'.self::WB.'/u' => 'Yürip', - '/'.self::WB.'ЮРИП'.self::WB.'/u' => 'YÜRÄ°P', - - '/'.self::WB.'юз'.self::WB.'/u' => 'yüz', - '/'.self::WB.'Юз'.self::WB.'/u' => 'Yüz', - '/'.self::WB.'ЮЗ'.self::WB.'/u' => 'YÜZ', - - '/'.self::WB.'юк'.self::WB.'/u' => 'yük', - '/'.self::WB.'Юк'.self::WB.'/u' => 'Yük', - '/'.self::WB.'ЮК'.self::WB.'/u' => 'YÜK', - - '/'.self::WB.'буюп'.self::WB.'/u' => 'büyüp', - '/'.self::WB.'Буюп'.self::WB.'/u' => 'Büyüp', - '/'.self::WB.'БУЮП'.self::WB.'/u' => 'BÜYÜP', - - '/'.self::WB.'буюк'.self::WB.'/u' => 'büyük', - '/'.self::WB.'Буюк'.self::WB.'/u' => 'Büyük', - '/'.self::WB.'БУЮК'.self::WB.'/u' => 'BÜYÜK', - - '/'.self::WB.'джонк'.self::WB.'/u' => 'cönk', - '/'.self::WB.'Джонк'.self::WB.'/u' => 'Cönk', - '/'.self::WB.'ДЖОНК'.self::WB.'/u' => 'CÖNK', - '/'.self::WB.'джонкю'.self::WB.'/u' => 'cönkü', - '/'.self::WB.'Джонкю'.self::WB.'/u' => 'Cönkü', - '/'.self::WB.'ДЖОНКЮ'.self::WB.'/u' => 'CÖNKÜ', - - '/'.self::WB.'куркчи/u' => 'kürkçi', - '/'.self::WB.'Куркчи/u' => 'Kürkçi', - '/'.self::WB.'КУРКЧИ/u' => 'KÜRKÇI', - - '/'.self::WB.'устке'.self::WB.'/u' => 'üstke', - '/'.self::WB.'Устке'.self::WB.'/u' => 'Üstke', - '/'.self::WB.'УСТКЕ'.self::WB.'/u' => 'ÜSTKE', - '/'.self::WB.'устте'.self::WB.'/u' => 'üstte', - '/'.self::WB.'Устте'.self::WB.'/u' => 'Üstte', - '/'.self::WB.'УСТТЕ'.self::WB.'/u' => 'ÜSTTE', - '/'.self::WB.'усттен'.self::WB.'/u' => 'üstten', - '/'.self::WB.'Усттен'.self::WB.'/u' => 'Üstten', - '/'.self::WB.'УСТТЕН'.self::WB.'/u' => 'ÜSTTEN', + '/' . self::WB . 'КъЮШ' . self::WB . '/u' => 'QYŞ', + '/' . self::WB . 'ЮШ' . self::WB . '/u' => 'YŞ', + + '/' . self::WB . 'кок' . self::WB . '/u' => 'kök', + '/' . self::WB . 'Кок' . self::WB . '/u' => 'Kök', + '/' . self::WB . 'КОК' . self::WB . '/u' => 'KÖK', + '/' . self::WB . 'ком-кок' . self::WB . '/u' => 'köm-kök', + '/' . self::WB . 'Ком-кок' . self::WB . '/u' => 'Köm-kök', + '/' . self::WB . 'КОМ-КОК' . self::WB . '/u' => 'KÖM-KÖK', + + '/' . self::WB . 'коп' . self::WB . '/u' => 'köp', + '/' . self::WB . 'Коп' . self::WB . '/u' => 'Köp', + '/' . self::WB . 'КОП' . self::WB . '/u' => 'KÖP', + + '/' . self::WB . 'курк' . self::WB . '/u' => 'kürk', + '/' . self::WB . 'Курк' . self::WB . '/u' => 'Kürk', + '/' . self::WB . 'КУРК' . self::WB . '/u' => 'KÜRK', + + '/' . self::WB . 'ог' . self::WB . '/u' => 'ög', + '/' . self::WB . 'Ог' . self::WB . '/u' => 'Ög', + '/' . self::WB . 'ОГ' . self::WB . '/u' => 'ÖG', + + '/' . self::WB . 'юрип' . self::WB . '/u' => 'yürip', + '/' . self::WB . 'Юрип' . self::WB . '/u' => 'Yürip', + '/' . self::WB . 'ЮРИП' . self::WB . '/u' => 'YÜRÄ°P', + + '/' . self::WB . 'юз' . self::WB . '/u' => 'yüz', + '/' . self::WB . 'Юз' . self::WB . '/u' => 'Yüz', + '/' . self::WB . 'ЮЗ' . self::WB . '/u' => 'YÜZ', + + '/' . self::WB . 'юк' . self::WB . '/u' => 'yük', + '/' . self::WB . 'Юк' . self::WB . '/u' => 'Yük', + '/' . self::WB . 'ЮК' . self::WB . '/u' => 'YÜK', + + '/' . self::WB . 'буюп' . self::WB . '/u' => 'büyüp', + '/' . self::WB . 'Буюп' . self::WB . '/u' => 'Büyüp', + '/' . self::WB . 'БУЮП' . self::WB . '/u' => 'BÜYÜP', + + '/' . self::WB . 'буюк' . self::WB . '/u' => 'büyük', + '/' . self::WB . 'Буюк' . self::WB . '/u' => 'Büyük', + '/' . self::WB . 'БУЮК' . self::WB . '/u' => 'BÜYÜK', + + '/' . self::WB . 'джонк' . self::WB . '/u' => 'cönk', + '/' . self::WB . 'Джонк' . self::WB . '/u' => 'Cönk', + '/' . self::WB . 'ДЖОНК' . self::WB . '/u' => 'CÖNK', + '/' . self::WB . 'джонкю' . self::WB . '/u' => 'cönkü', + '/' . self::WB . 'Джонкю' . self::WB . '/u' => 'Cönkü', + '/' . self::WB . 'ДЖОНКЮ' . self::WB . '/u' => 'CÖNKÜ', + + '/' . self::WB . 'куркчи/u' => 'kürkçi', + '/' . self::WB . 'Куркчи/u' => 'Kürkçi', + '/' . self::WB . 'КУРКЧИ/u' => 'KÜRKÇI', + + '/' . self::WB . 'устке' . self::WB . '/u' => 'üstke', + '/' . self::WB . 'Устке' . self::WB . '/u' => 'Üstke', + '/' . self::WB . 'УСТКЕ' . self::WB . '/u' => 'ÜSTKE', + '/' . self::WB . 'устте' . self::WB . '/u' => 'üstte', + '/' . self::WB . 'Устте' . self::WB . '/u' => 'Üstte', + '/' . self::WB . 'УСТТЕ' . self::WB . '/u' => 'ÜSTTE', + '/' . self::WB . 'усттен' . self::WB . '/u' => 'üstten', + '/' . self::WB . 'Усттен' . self::WB . '/u' => 'Üstten', + '/' . self::WB . 'УСТТЕН' . self::WB . '/u' => 'ÜSTTEN', # отдельно стоящие Ё и Я # stand-alone Ё and Я - '/'.self::WB.'Я'.self::WB.'/u' => 'Ya', - '/'.self::WB.'Ё'.self::WB.'/u' => 'Yo', + '/' . self::WB . 'Я' . self::WB . '/u' => 'Ya', + '/' . self::WB . 'Ё' . self::WB . '/u' => 'Yo', ############################ # относятся к началу слова # # word prefixes # ############################ - '/'.self::WB.'КъЮШн/u' => 'QYŞn', - '/'.self::WB.'ЮШн/u' => 'YŞn', + '/' . self::WB . 'КъЮШн/u' => 'QYŞn', + '/' . self::WB . 'ЮШн/u' => 'YŞn', # need to convert digraphs (гъ, къ, нъ, дж) now to match patterns '/гъ/u' => 'ğ', @@ -496,69 +496,73 @@ class CrhExceptions { '/Д[жЖ]/u' => 'C', # о => ö - '/'.self::WB.'(['.Crh::C_M_CONS.'])о(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' - => '$1ö$2$3$4', - '/'.self::WB.'о(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ö$1$2$3', - '/'.self::WB.'(['.Crh::C_M_CONS.'])О(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' - => '$1Ö$2$3$4', - '/'.self::WB.'О(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ö$1$2$3', - - '/'.self::WB.'(['.Crh::C_M_CONS.'])о(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ö$2$3', - '/'.self::WB.'о(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ö$1$2', - '/'.self::WB.'(['.Crh::C_M_CONS.'])О(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ö$2$3', - '/'.self::WB.'О(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ö$1$2', + '/' . self::WB . '([' . Crh::C_M_CONS . '])о([' . Crh::C_CONS . '])([' . Crh::C_CONS . + '])([еиэюьü])/u' => '$1ö$2$3$4', + '/' . self::WB . 'о([' . Crh::C_CONS . '])([' . Crh::C_CONS . '])([еиэюьü])/u' => 'ö$1$2$3', + '/' . self::WB . '([' . Crh::C_M_CONS . '])О([' . Crh::C_CONS . '])([' . Crh::C_CONS . + '])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ö$2$3$4', + '/' . self::WB . 'О([' . Crh::C_CONS . '])([' . Crh::C_CONS . '])([еиэюьüЕИЭЮЬÜ])/u' + => 'Ö$1$2$3', + + '/' . self::WB . '([' . Crh::C_M_CONS . '])о([' . Crh::C_CONS . '])([еиэюьü])/u' => '$1ö$2$3', + '/' . self::WB . 'о([' . Crh::C_CONS . '])([еиэюьü])/u' => 'ö$1$2', + '/' . self::WB . '([' . Crh::C_M_CONS . '])О([' . Crh::C_CONS . '])([еиэюьüЕИЭЮЬÜ])/u' + => '$1Ö$2$3', + '/' . self::WB . 'О([' . Crh::C_CONS . '])([еиэюьüЕИЭЮЬÜ])/u' => 'Ö$1$2', # ё => yö - '/'.self::WB.'ё(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([ьеюü])/u' => 'yö$1$2$3', - '/'.self::WB.'Ё(['.Crh::C_CONS_LC.'])(['.Crh::C_CONS_LC.'])([ьеюü])/u' => 'Yö$1$2$3', - '/'.self::WB.'Ё(['.Crh::C_CONS_UC.'])(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => 'YÖ$1$2$3', - '/'.self::WB.'ё(['.Crh::C_CONS.'])([ьеюü])/u' => 'yö$1$2', - '/'.self::WB.'Ё(['.Crh::C_CONS_LC.'])([ьеюü])/u' => 'Yö$1$2', - '/'.self::WB.'Ё(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => 'YÖ$1$2', + '/' . self::WB . 'ё([' . Crh::C_CONS . '])([' . Crh::C_CONS . '])([ьеюü])/u' => 'yö$1$2$3', + '/' . self::WB . 'Ё([' . Crh::C_CONS_LC . '])([' . Crh::C_CONS_LC . '])([ьеюü])/u' => 'Yö$1$2$3', + '/' . self::WB . 'Ё([' . Crh::C_CONS_UC . '])([' . Crh::C_CONS_UC . '])([ЬЕЮÜ])/u' => 'YÖ$1$2$3', + '/' . self::WB . 'ё([' . Crh::C_CONS . '])([ьеюü])/u' => 'yö$1$2', + '/' . self::WB . 'Ё([' . Crh::C_CONS_LC . '])([ьеюü])/u' => 'Yö$1$2', + '/' . self::WB . 'Ё([' . Crh::C_CONS_UC . '])([ЬЕЮÜ])/u' => 'YÖ$1$2', # у => ü, ую => üyü - '/'.self::WB.'(['.Crh::C_M_CONS.'])у(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' - => '$1ü$2$3$4', - '/'.self::WB.'у(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ü$1$2$3', - '/'.self::WB.'ую(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'üyü$1$2$3', - '/'.self::WB.'(['.Crh::C_M_CONS.'])У(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' - => '$1Ü$2$3$4', - '/'.self::WB.'У(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ü$1$2$3', - '/'.self::WB.'Ую(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'Üyü$1$2$3', - '/'.self::WB.'УЮ(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ÜYÜ$1$2$3', - - '/'.self::WB.'(['.Crh::C_M_CONS.'])у(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ü$2$3', - '/'.self::WB.'у(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ü$1$2', - '/'.self::WB.'ую(['.Crh::C_CONS.'])([еиэюьü])/u' => 'üyü$1$2', - '/'.self::WB.'(['.Crh::C_M_CONS.'])У(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ü$2$3', - '/'.self::WB.'У(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ü$1$2', - '/'.self::WB.'Ую(['.Crh::C_CONS.'])([еиэюьü])/u' => 'Üyü$1$2', - '/'.self::WB.'УЮ(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ÜYÜ$1$2', + '/' . self::WB . '([' . Crh::C_M_CONS . '])у([' . Crh::C_CONS . '])([' . Crh::C_CONS . + '])([еиэюьü])/u' => '$1ü$2$3$4', + '/' . self::WB . 'у([' . Crh::C_CONS . '])([' . Crh::C_CONS . '])([еиэюьü])/u' => 'ü$1$2$3', + '/' . self::WB . 'ую([' . Crh::C_CONS . '])([' . Crh::C_CONS . '])([еиэюьü])/u' => 'üyü$1$2$3', + '/' . self::WB . '([' . Crh::C_M_CONS . '])У([' . Crh::C_CONS . '])([' . Crh::C_CONS . + '])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ü$2$3$4', + '/' . self::WB . 'У([' . Crh::C_CONS . '])([' . Crh::C_CONS . '])([еиэюьüЕИЭЮЬÜ])/u' + => 'Ü$1$2$3', + '/' . self::WB . 'Ую([' . Crh::C_CONS . '])([' . Crh::C_CONS . '])([еиэюьü])/u' => 'Üyü$1$2$3', + '/' . self::WB . 'УЮ([' . Crh::C_CONS . '])([' . Crh::C_CONS . '])([еиэюьü])/u' => 'ÜYÜ$1$2$3', + + '/' . self::WB . '([' . Crh::C_M_CONS . '])у([' . Crh::C_CONS . '])([еиэюьü])/u' => '$1ü$2$3', + '/' . self::WB . 'у([' . Crh::C_CONS . '])([еиэюьü])/u' => 'ü$1$2', + '/' . self::WB . 'ую([' . Crh::C_CONS . '])([еиэюьü])/u' => 'üyü$1$2', + '/' . self::WB . '([' . Crh::C_M_CONS . '])У([' . Crh::C_CONS . '])([еиэюьüЕИЭЮЬÜ])/u' + => '$1Ü$2$3', + '/' . self::WB . 'У([' . Crh::C_CONS . '])([еиэюьüЕИЭЮЬÜ])/u' => 'Ü$1$2', + '/' . self::WB . 'Ую([' . Crh::C_CONS . '])([еиэюьü])/u' => 'Üyü$1$2', + '/' . self::WB . 'УЮ([' . Crh::C_CONS . '])([еиэюьü])/u' => 'ÜYÜ$1$2', # ю => yü - '/'.self::WB.'([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([ьеюü])/u' + '/' . self::WB . '([аыоуеиёюАЫОУЕИЁЮ]?)ю([' . Crh::C_CONS . '])([' . Crh::C_CONS . '])([ьеюü])/u' => '$1yü$2$3$4', - '/'.self::WB.'([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_LC.'])(['.Crh::C_CONS_LC.'])([ьеюü])/u' + '/' . self::WB . '([АЫОУЕИЁЮ]?)Ю([' . Crh::C_CONS_LC . '])([' . Crh::C_CONS_LC . '])([ьеюü])/u' => '$1Yü$2$3$4', - '/'.self::WB.'([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_UC.'])(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' + '/' . self::WB . '([АЫОУЕИЁЮ]?)Ю([' . Crh::C_CONS_UC . '])([' . Crh::C_CONS_UC . '])([ЬЕЮÜ])/u' => '$1YÜ$2$3$4', - '/'.self::WB.'([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.Crh::C_CONS.'])([ьеюü])/u' => '$1yü$2$3', - '/'.self::WB.'([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_LC.'])([ьеюü])/u' => '$1Yü$2$3', - '/'.self::WB.'([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => '$1YÜ$2$3', + '/' . self::WB . '([аыоуеиёюАЫОУЕИЁЮ]?)ю([' . Crh::C_CONS . '])([ьеюü])/u' => '$1yü$2$3', + '/' . self::WB . '([АЫОУЕИЁЮ]?)Ю([' . Crh::C_CONS_LC . '])([ьеюü])/u' => '$1Yü$2$3', + '/' . self::WB . '([АЫОУЕИЁЮ]?)Ю([' . Crh::C_CONS_UC . '])([ЬЕЮÜ])/u' => '$1YÜ$2$3', # e => ye, я => ya - '/'.self::WB.'е/u' => 'ye', - '/'.self::WB.'Е(['.Crh::C_LC.'cğñqöü])/u' => 'Ye$1', - '/'.self::WB.'Е(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YE$1', - '/'.self::WB.'я/u' => 'ya', - '/'.self::WB.'Я(['.Crh::C_LC.'cğñqöü])/u' => 'Ya$1', - '/'.self::WB.'Я(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YA$1', + '/' . self::WB . 'е/u' => 'ye', + '/' . self::WB . 'Е([' . Crh::C_LC . 'cğñqöü])/u' => 'Ye$1', + '/' . self::WB . 'Е([' . Crh::C_UC . 'CĞÑQÖÜ])/u' => 'YE$1', + '/' . self::WB . 'я/u' => 'ya', + '/' . self::WB . 'Я([' . Crh::C_LC . 'cğñqöü])/u' => 'Ya$1', + '/' . self::WB . 'Я([' . Crh::C_UC . 'CĞÑQÖÜ])/u' => 'YA$1', '/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])е/u' => '$1ye', - '/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е(['.Crh::C_LC.'cğñqöü])/u' => '$1Ye$2', - '/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е(['.Crh::C_UC.'CĞÑQÖÜ])/u' => '$1YE$2', + '/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е([' . Crh::C_LC . 'cğñqöü])/u' => '$1Ye$2', + '/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е([' . Crh::C_UC . 'CĞÑQÖÜ])/u' => '$1YE$2', '/([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])я/u' => '$1ya', - '/([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])Я(['.Crh::C_LC.'cğñqöü])/u' => '$1Ya$2', - '/([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])Я(['.Crh::C_UC.'CĞÑQÖÜ])/u' => '$1YA$2', + '/([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])Я([' . Crh::C_LC . 'cğñqöü])/u' => '$1Ya$2', + '/([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])Я([' . Crh::C_UC . 'CĞÑQÖÜ])/u' => '$1YA$2', ############################### # не зависят от места в слове # @@ -576,19 +580,19 @@ class CrhExceptions { # Ö, Ü 1-й заход: ё, ю после согласных > ö, ü # Ö, Ü 1st instance: ё, ю after consonants > ö, ü - '/(['.Crh::C_CONS.'])ю/u' => '$1ü', - '/(['.Crh::C_CONS.'])Ю/u' => '$1Ü', - '/(['.Crh::C_CONS.'])ё/u' => '$1ö', - '/(['.Crh::C_CONS.'])Ё/u' => '$1Ö', + '/([' . Crh::C_CONS . '])ю/u' => '$1ü', + '/([' . Crh::C_CONS . '])Ю/u' => '$1Ü', + '/([' . Crh::C_CONS . '])ё/u' => '$1ö', + '/([' . Crh::C_CONS . '])Ё/u' => '$1Ö', # остальные вхождения о, у, ё, ю # other occurences of о, у, ё, ю - '/Ё(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YO$1', - '/Ю(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YU$1', + '/Ё([' . Crh::C_UC . 'CĞÑQÖÜ])/u' => 'YO$1', + '/Ю([' . Crh::C_UC . 'CĞÑQÖÜ])/u' => 'YU$1', # Ц & Щ - '/Ц(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'TS$1', - '/Щ(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'ŞÇ$1', + '/Ц([' . Crh::C_UC . 'CĞÑQÖÜ])/u' => 'TS$1', + '/Щ([' . Crh::C_UC . 'CĞÑQÖÜ])/u' => 'ŞÇ$1', ]; $this->Latn2CyrlRegexes = [ @@ -596,31 +600,31 @@ class CrhExceptions { // TODO: refactor upper/lower/first capital whole words without // regexes into simpler list - '/'.self::WB.'an'.self::WB.'/u' => 'ань', - '/'.self::WB.'An'.self::WB.'/u' => 'Ань', - '/'.self::WB.'AN'.self::WB.'/u' => 'АНЬ', - '/'.self::WB.'ange'.self::WB.'/u' => 'аньге', - '/'.self::WB.'Ange'.self::WB.'/u' => 'Аньге', - '/'.self::WB.'ANGE'.self::WB.'/u' => 'АНЬГЕ', - '/'.self::WB.'ande'.self::WB.'/u' => 'аньде', - '/'.self::WB.'Ande'.self::WB.'/u' => 'Аньде', - '/'.self::WB.'ANDE'.self::WB.'/u' => 'АНЬДЕ', - '/'.self::WB.'anki'.self::WB.'/u' => 'аньки', - '/'.self::WB.'Anki'.self::WB.'/u' => 'Аньки', - '/'.self::WB.'ANKÄ°'.self::WB.'/u' => 'АНЬКИ', - '/'.self::WB.'deral'.self::WB.'/u' => 'деръал', - '/'.self::WB.'Deral'.self::WB.'/u' => 'Деръал', - '/'.self::WB.'DERAL'.self::WB.'/u' => 'ДЕРЪАЛ', - '/'.self::WB.'kör'.self::WB.'/u' => 'кёр', - '/'.self::WB.'Kör'.self::WB.'/u' => 'Кёр', - '/'.self::WB.'KÖR'.self::WB.'/u' => 'КЁР', - '/'.self::WB.'mer'.self::WB.'/u' => 'мэр', - '/'.self::WB.'Mer'.self::WB.'/u' => 'Мэр', - '/'.self::WB.'MER'.self::WB.'/u' => 'МЭР', - - '/'.self::WB.'cönk/u' => 'джонк', - '/'.self::WB.'Cönk/u' => 'Джонк', - '/'.self::WB.'CÖNK/u' => 'ДЖОНК', + '/' . self::WB . 'an' . self::WB . '/u' => 'ань', + '/' . self::WB . 'An' . self::WB . '/u' => 'Ань', + '/' . self::WB . 'AN' . self::WB . '/u' => 'АНЬ', + '/' . self::WB . 'ange' . self::WB . '/u' => 'аньге', + '/' . self::WB . 'Ange' . self::WB . '/u' => 'Аньге', + '/' . self::WB . 'ANGE' . self::WB . '/u' => 'АНЬГЕ', + '/' . self::WB . 'ande' . self::WB . '/u' => 'аньде', + '/' . self::WB . 'Ande' . self::WB . '/u' => 'Аньде', + '/' . self::WB . 'ANDE' . self::WB . '/u' => 'АНЬДЕ', + '/' . self::WB . 'anki' . self::WB . '/u' => 'аньки', + '/' . self::WB . 'Anki' . self::WB . '/u' => 'Аньки', + '/' . self::WB . 'ANKÄ°' . self::WB . '/u' => 'АНЬКИ', + '/' . self::WB . 'deral' . self::WB . '/u' => 'деръал', + '/' . self::WB . 'Deral' . self::WB . '/u' => 'Деръал', + '/' . self::WB . 'DERAL' . self::WB . '/u' => 'ДЕРЪАЛ', + '/' . self::WB . 'kör' . self::WB . '/u' => 'кёр', + '/' . self::WB . 'Kör' . self::WB . '/u' => 'Кёр', + '/' . self::WB . 'KÖR' . self::WB . '/u' => 'КЁР', + '/' . self::WB . 'mer' . self::WB . '/u' => 'мэр', + '/' . self::WB . 'Mer' . self::WB . '/u' => 'Мэр', + '/' . self::WB . 'MER' . self::WB . '/u' => 'МЭР', + + '/' . self::WB . 'cönk/u' => 'джонк', + '/' . self::WB . 'Cönk/u' => 'Джонк', + '/' . self::WB . 'CÖNK/u' => 'ДЖОНК', # (y)etsin -> етсин/этсин # note that target starts with CYRILLIC е/Е! @@ -636,67 +640,77 @@ class CrhExceptions { # буква Ё - первый заход # расставляем Ь после согласных - '/'.self::WB.'([yY])ö(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|'.self::WB.')/u' => '$1ö$2ь$3', - '/'.self::WB.'([yY])Ö(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|'.self::WB.')/u' => '$1Ö$2Ь$3', - '/'.self::WB.'AQŞ([^AEI]|'.self::WB.')/u' => 'АКъШ$1', + '/' . self::WB . '([yY])ö([' . Crh::L_N_CONS . '])([aAuU' . Crh::L_CONS . ']|' . self::WB . ')/u' + => '$1ö$2ь$3', + '/' . self::WB . '([yY])Ö([' . Crh::L_N_CONS . '])([aAuU' . Crh::L_CONS . ']|' . self::WB . ')/u' + => '$1Ö$2Ь$3', + '/' . self::WB . 'AQŞ([^AEI]|' . self::WB . ')/u' => 'АКъШ$1', # буква Ю - первый заход # расставляем Ь после согласных - '/'.self::WB.'([yY])ü(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|'.self::WB.')/u' => '$1ü$2ь$3', - '/'.self::WB.'([yY])Ü(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|'.self::WB.')/u' => '$1Ü$2Ь$3', - - '/'.self::WB.'([bcgkpşBCGKPŞ])ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u' - => '$1ö$2ь$3', - '/'.self::WB.'([bcgkpşBCGKPŞ])Ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u' - => '$1Ö$2Ь$3', - '/'.self::WB.'([bcgkpşBCGKPŞ])Ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u' - => '$1Ö$2Ь$3', - '/'.self::WB.'([bcgkpşBCGKPŞ])ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u' + '/' . self::WB . '([yY])ü([' . Crh::L_N_CONS . '])([aAuU' . Crh::L_CONS . ']|' . self::WB . ')/u' => '$1ü$2ь$3', - '/'.self::WB.'([bcgkpşBCGKPŞ])Ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u' - => '$1Ü$2Ь$3', - '/'.self::WB.'([bcgkpşBCGKPŞ])Ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u' + '/' . self::WB . '([yY])Ü([' . Crh::L_N_CONS . '])([aAuU' . Crh::L_CONS . ']|' . self::WB . ')/u' => '$1Ü$2Ь$3', + '/' . self::WB . '([bcgkpşBCGKPŞ])ö([' . Crh::L_N_CONS . '])([' . Crh::L_CONS . ']|' . + self::WB . ')/u' => '$1ö$2ь$3', + '/' . self::WB . '([bcgkpşBCGKPŞ])Ö([' . Crh::L_N_CONS . '])([' . Crh::L_CONS . ']|' . + self::WB . ')/u' => '$1Ö$2Ь$3', + '/' . self::WB . '([bcgkpşBCGKPŞ])Ö([' . Crh::L_N_CONS . '])([' . Crh::L_CONS . ']|' . + self::WB . ')/u' => '$1Ö$2Ь$3', + '/' . self::WB . '([bcgkpşBCGKPŞ])ü([' . Crh::L_N_CONS . '])([' . Crh::L_CONS . ']|' . + self::WB . ')/u' => '$1ü$2ь$3', + '/' . self::WB . '([bcgkpşBCGKPŞ])Ü([' . Crh::L_N_CONS . '])([' . Crh::L_CONS . ']|' . + self::WB . ')/u' => '$1Ü$2Ь$3', + '/' . self::WB . '([bcgkpşBCGKPŞ])Ü([' . Crh::L_N_CONS . '])([' . Crh::L_CONS . ']|' . + self::WB . ')/u' => '$1Ü$2Ь$3', + # ö и ü в начале слова # случаи, когда нужен Ь - '/'.self::WB.'ö(['.Crh::L_N_CONS.'pP])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'ö$1ь$2', - '/'.self::WB.'Ö(['.Crh::L_N_CONS_LC.'p])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'Ö$1ь$2', - '/'.self::WB.'Ö(['.Crh::L_N_CONS_UC.'P])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'Ö$1Ь$2', - '/'.self::WB.'ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'ü$1ь$2', - '/'.self::WB.'Ü(['.Crh::L_N_CONS_LC.'])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'Ü$1ь$2', - '/'.self::WB.'Ü(['.Crh::L_N_CONS_UC.'])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'Ü$1Ь$2', - - '/ts'.self::WB.'/u' => 'ц', - '/şç'.self::WB.'/u' => 'щ', - '/Ş[çÇ]'.self::WB.'/u' => 'Щ', - '/T[sS]'.self::WB.'/u' => 'Ц', + '/' . self::WB . 'ö([' . Crh::L_N_CONS . 'pP])([' . Crh::L_CONS . ']|' . self::WB . ')/u' + => 'ö$1ь$2', + '/' . self::WB . 'Ö([' . Crh::L_N_CONS_LC . 'p])([' . Crh::L_CONS . ']|' . self::WB . ')/u' + => 'Ö$1ь$2', + '/' . self::WB . 'Ö([' . Crh::L_N_CONS_UC . 'P])([' . Crh::L_CONS . ']|' . self::WB . ')/u' + => 'Ö$1Ь$2', + '/' . self::WB . 'ü([' . Crh::L_N_CONS . '])([' . Crh::L_CONS . ']|' . self::WB . ')/u' + => 'ü$1ь$2', + '/' . self::WB . 'Ü([' . Crh::L_N_CONS_LC . '])([' . Crh::L_CONS . ']|' . self::WB . ')/u' + => 'Ü$1ь$2', + '/' . self::WB . 'Ü([' . Crh::L_N_CONS_UC . '])([' . Crh::L_CONS . ']|' . self::WB . ')/u' + => 'Ü$1Ь$2', + + '/ts' . self::WB . '/u' => 'ц', + '/şç' . self::WB . '/u' => 'щ', + '/Ş[çÇ]' . self::WB . '/u' => 'Щ', + '/T[sS]' . self::WB . '/u' => 'Ц', # Ь после Л # add Ь after Л - '/(['.Crh::L_F.'])l(['.Crh::L_CONS_LC.']|'.self::WB.')/u' => '$1ль$2', - '/(['.Crh::L_F_UC.'])L(['.Crh::L_CONS.']|'.self::WB.')/u' => '$1ЛЬ$2', + '/([' . Crh::L_F . '])l([' . Crh::L_CONS_LC . ']|' . self::WB . ')/u' => '$1ль$2', + '/([' . Crh::L_F_UC . '])L([' . Crh::L_CONS . ']|' . self::WB . ')/u' => '$1ЛЬ$2', # относятся к началу слова - '/'.self::WB.'ts/u' => 'ц', - '/'.self::WB.'T[sS]/u' => 'Ц', + '/' . self::WB . 'ts/u' => 'ц', + '/' . self::WB . 'T[sS]/u' => 'Ц', - '/'.self::WB.'şç/u' => 'щ', - '/'.self::WB.'Ş[çÇ]/u' => 'Щ', + '/' . self::WB . 'şç/u' => 'щ', + '/' . self::WB . 'Ş[çÇ]/u' => 'Щ', # Э - '/('.self::WB.'|['.Crh::L_VOW.'аеэяАЕЭЯ])e/u' => '$1э', - '/('.self::WB.'|['.Crh::L_VOW_UC.'АЕЭЯ])E/u' => '$1Э', + '/(' . self::WB . '|[' . Crh::L_VOW . 'аеэяАЕЭЯ])e/u' => '$1э', + '/(' . self::WB . '|[' . Crh::L_VOW_UC . 'АЕЭЯ])E/u' => '$1Э', - '/'.self::WB.'(['.Crh::L_M_CONS.'])ö/u' => '$1о', - '/'.self::WB.'(['.Crh::L_M_CONS.'])Ö/u' => '$1О', - '/'.self::WB.'(['.Crh::L_M_CONS.'])ü/u' => '$1у', - '/'.self::WB.'(['.Crh::L_M_CONS.'])Ü/u' => '$1У', + '/' . self::WB . '([' . Crh::L_M_CONS . '])ö/u' => '$1о', + '/' . self::WB . '([' . Crh::L_M_CONS . '])Ö/u' => '$1О', + '/' . self::WB . '([' . Crh::L_M_CONS . '])ü/u' => '$1у', + '/' . self::WB . '([' . Crh::L_M_CONS . '])Ü/u' => '$1У', - '/'.self::WB.'ö/u' => 'о', - '/'.self::WB.'Ö/u' => 'О', - '/'.self::WB.'ü/u' => 'у', - '/'.self::WB.'Ü/u' => 'У', + '/' . self::WB . 'ö/u' => 'о', + '/' . self::WB . 'Ö/u' => 'О', + '/' . self::WB . 'ü/u' => 'у', + '/' . self::WB . 'Ü/u' => 'У', # некоторые исключения # some exceptions @@ -718,10 +732,10 @@ class CrhExceptions { '/T[sS][iÄ°]([^zZñÑ])/u' => 'ЦИ$1', '/ts([ou])/u' => 'ц$1', '/T[sS]([oOuU])/u' => 'Ц$1', - '/ts(['.Crh::L_CONS.'])/u' => 'ц$1', - '/T[sS](['.Crh::L_CONS.'])/u' => 'Ц$1', - '/(['.Crh::L_CONS.'])ts/u' => '$1ц', - '/(['.Crh::L_CONS.'])T[sS]/u' => '$1Ц', + '/ts([' . Crh::L_CONS . '])/u' => 'ц$1', + '/T[sS]([' . Crh::L_CONS . '])/u' => 'Ц$1', + '/([' . Crh::L_CONS . '])ts/u' => '$1ц', + '/([' . Crh::L_CONS . '])T[sS]/u' => '$1Ц', '/tsиал/u' => 'циал', '/TSИАЛ/u' => 'ЦИАЛ', @@ -730,15 +744,15 @@ class CrhExceptions { '/[ьЬ]([iÄ°])/u' => '$1', # ya & ye - '/(['.Crh::L_CONS.'])ya/u' => '$1ья', - '/(['.Crh::L_CONS.'])Y[aA]/u' => '$1ЬЯ', - '/(['.Crh::L_CONS.'])ye/u' => '$1ье', - '/(['.Crh::L_CONS.'])Y[eE]/u' => '$1ЬЕ', + '/([' . Crh::L_CONS . '])ya/u' => '$1ья', + '/([' . Crh::L_CONS . '])Y[aA]/u' => '$1ЬЯ', + '/([' . Crh::L_CONS . '])ye/u' => '$1ье', + '/([' . Crh::L_CONS . '])Y[eE]/u' => '$1ЬЕ', # расставляем Ь перед Ё # place Ь in front of Ё - '/(['.Crh::L_CONS.'])y[oö]/u' => '$1ьё', - '/(['.Crh::L_CONS.'])Y[oOöÖ]/u' => '$1ЬЁ', + '/([' . Crh::L_CONS . '])y[oö]/u' => '$1ьё', + '/([' . Crh::L_CONS . '])Y[oOöÖ]/u' => '$1ЬЁ', # оставшиеся вхождения yo и yö # remaining occurrences of yo and yö '/y[oö]/u' => 'ё', @@ -746,8 +760,8 @@ class CrhExceptions { # расставляем Ь перед Ю # place Ь in front of Ю - '/(['.Crh::L_CONS.'])y[uü]/u' => '$1ью', - '/(['.Crh::L_CONS.'])Y[uUüÜ]/u' => '$1ЬЮ', + '/([' . Crh::L_CONS . '])y[uü]/u' => '$1ью', + '/([' . Crh::L_CONS . '])Y[uUüÜ]/u' => '$1ЬЮ', # оставшиеся вхождения yu и yü # remaining occurrences of yu and yü '/y[uü]/u' => 'ю', @@ -758,18 +772,18 @@ class CrhExceptions { '/[ьЬ]([aA])/u' => '$1', # дж - '/C(['.Crh::L_UC.Crh::C_UC.'АЕЁЙОУЭЮЯ])/u' => 'ДЖ$1', - '/(['.Crh::L_UC.Crh::C_UC.'АЕЁЙОУЭЮЯ])C/u' => '$1ДЖ', + '/C([' . Crh::L_UC . Crh::C_UC . 'АЕЁЙОУЭЮЯ])/u' => 'ДЖ$1', + '/([' . Crh::L_UC . Crh::C_UC . 'АЕЁЙОУЭЮЯ])C/u' => '$1ДЖ', # гъ, къ, нъ - '/Ğ(['.Crh::L_UC.Crh::C_UC.'])/u' => 'ГЪ$1', - '/(['.Crh::L_UC.Crh::C_UC.'Ъ])Ğ/u' => '$1ГЪ', + '/Ğ([' . Crh::L_UC . Crh::C_UC . '])/u' => 'ГЪ$1', + '/([' . Crh::L_UC . Crh::C_UC . 'Ъ])Ğ/u' => '$1ГЪ', - '/Q(['.Crh::L_UC.Crh::C_UC.'])/u' => 'КЪ$1', - '/(['.Crh::L_UC.Crh::C_UC.'Ъ])Q/u' => '$1КЪ', + '/Q([' . Crh::L_UC . Crh::C_UC . '])/u' => 'КЪ$1', + '/([' . Crh::L_UC . Crh::C_UC . 'Ъ])Q/u' => '$1КЪ', - '/Ñ(['.Crh::L_UC.Crh::C_UC.'])/u' => 'НЪ$1', - '/(['.Crh::L_UC.Crh::C_UC.'Ъ])Ñ/u' => '$1НЪ', + '/Ñ([' . Crh::L_UC . Crh::C_UC . '])/u' => 'НЪ$1', + '/([' . Crh::L_UC . Crh::C_UC . 'Ъ])Ñ/u' => '$1НЪ', ]; } diff --git a/languages/i18n/ar.json b/languages/i18n/ar.json index 6c57d8a87d..48156fe0ab 100644 --- a/languages/i18n/ar.json +++ b/languages/i18n/ar.json @@ -75,7 +75,8 @@ "سامي الرحيلي", "Azouz.anis", "Elbasyouny", - "Omar Ghrida" + "Omar Ghrida", + "AHmed Khaled" ] }, "tog-underline": "سطر تحت الوصلات:", @@ -3639,6 +3640,7 @@ "redirect-file": "اسم ملف", "redirect-logid": "معرف السجل", "redirect-not-exists": "المطلوب غير موجود", + "redirect-not-numeric": "قيمة غير رقمية", "fileduplicatesearch": "بحث عن ملفات مكررة", "fileduplicatesearch-summary": "ابحث عن الملفات المكررة بناء على قيم الهاش.", "fileduplicatesearch-filename": "اسم الملف:", diff --git a/languages/i18n/ast.json b/languages/i18n/ast.json index b1977cfb97..920ae6baf5 100644 --- a/languages/i18n/ast.json +++ b/languages/i18n/ast.json @@ -362,9 +362,9 @@ "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", + "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.", @@ -3466,6 +3466,7 @@ "redirect-file": "Nome del ficheru", "redirect-logid": "ID del rexistru", "redirect-not-exists": "Nun s'alcontró'l valor", + "redirect-not-numeric": "El valor nun ye un númberu", "fileduplicatesearch": "Buscar archivos duplicaos", "fileduplicatesearch-summary": "Busca archivos duplicaos basándose nos sos valores fragmentarios.", "fileduplicatesearch-filename": "Nome del ficheru:", @@ -4023,7 +4024,7 @@ "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 editinterface. Si nun entiendes por qué recibes esti error, por favor llei [[mw:MediaWiki_1.32/interface-admin]].", + "interfaceadmin-info": "$1\n\nLos permisos pa editar los ficheros CSS, JS y JSON globales del sitiu dixebráronse apocayá del permisu editinterface. Si nun entiendes por qué recibes esti error, llei [[mw:MediaWiki_1.32/interface-admin]].", "rawhtml-notallowed": "Les etiquetes <html> nun pueden usase fuera de les páxines normales.", "gotointerwiki": "Dexando {{SITENAME}}", "gotointerwiki-invalid": "El títulu especificáu nun ye válidu.", diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json index 363933571b..596aebd6ed 100644 --- a/languages/i18n/be-tarask.json +++ b/languages/i18n/be-tarask.json @@ -1671,9 +1671,9 @@ "backend-fail-synced": "Стан файла «$1» адрозьніваецца ад стану на ўнутраным сэрвэры сховішча", "backend-fail-connect": "Немагчыма далучыцца да сэрвэра сховішча «$1».", "backend-fail-internal": "Узьнікла невядомая памылка на сэрвэры сховішча «$1».", - "backend-fail-contenttype": "Немагчыма вызначыць тып зьместу файла, які мусіць быць захаваны ў «$1».", + "backend-fail-contenttype": "Немагчыма вызначыць тып зьместу файлу, які павінен быць захаваны ў «$1».", "backend-fail-batchsize": "Cховішча атрымала блёк з $1 {{PLURAL:$1|файлавай апэрацыі|файлавых апэрацыяў|файлавых апэрацыяў}}; абмежаваньне складае $2 {{PLURAL:$2|апэрацыю|апэрацыі|апэрацыяў}}.", - "backend-fail-usable": "Не атрымалася прачытаць ці запісаць файл «$1» з-за недастачы правоў ці адсутнасьці дырэкторыяў або кантэйнэраў.", + "backend-fail-usable": "Не атрымалася прачытаць ці запісаць файл «$1» празь недахоп правоў ці адсутнасьці каталёгаў або кантэйнэраў.", "filejournal-fail-dbconnect": "Не атрымалася злучыцца з базай зьвестак журнала для сховішча «$1».", "filejournal-fail-dbquery": "Не атрымалася абнавіць базу зьвестак журнала для сховішча «$1».", "lockmanager-notlocked": "Немагчыма разблякаваць «$1», які не заблякаваны.", @@ -3471,6 +3471,7 @@ "redirect-file": "Назва файлу", "redirect-logid": "ID журнала", "redirect-not-exists": "Значэньне ня знойдзена", + "redirect-not-numeric": "Значэньне ня лікавае", "fileduplicatesearch": "Пошук дублікатаў файлаў", "fileduplicatesearch-summary": "Пошук аднолькавых файлаў на падставе іх хэшаў.", "fileduplicatesearch-filename": "Назва файла:", diff --git a/languages/i18n/bg.json b/languages/i18n/bg.json index 3be24fbac0..e833d9d6f4 100644 --- a/languages/i18n/bg.json +++ b/languages/i18n/bg.json @@ -650,7 +650,7 @@ "subject-preview": "Предварителен преглед на заглавието:", "previewerrortext": "Възникна грешка при опита за преглед на промените.", "blockedtitle": "Потребителят е блокиран", - "blockedtext": "'''Вашето потребителско име (или IP-адрес) беше блокирано.'''\n\nБлокирането е извършено от $1. Посочената причина е: ''$2''\n\n*Начало на блокирането: $8\n*Край на блокирането: $6\n*Блокирането се отнася за: $7\n\nМожете да се свържете с $1 или с някой от останалите [[{{MediaWiki:Grouppage-sysop}}|администратори]], за да обсъдите блокирането.\n\nМожете да използвате услугата „Пращане писмо на потребител“ само ако не ви е забранена употребата ѝ и ако сте посочили валидна електронна поща в [[Special:Preferences|настройките]] си.\n\nВашият IP адрес е $3, а номерът на блокирането е $5. Включвайте едно от двете или и двете във всяко запитване, което правите.", + "blockedtext": "'''Вашето потребителско име (или IP-адрес) беше блокирано.'''\n\nБлокирането е извършено от $1. Посочената причина е: ''$2''\n\n*Начало на блокирането: $8\n*Край на блокирането: $6\n*Блокирането се отнася за: $7\n\nМожете да се свържете с $1 или с някой от останалите [[{{MediaWiki:Grouppage-sysop}}|администратори]], за да обсъдите блокирането.\n\nМожете да използвате услугата „{{int:emailuser}}“ само ако не ви е забранена употребата ѝ и ако сте посочили валидна електронна поща в [[Special:Preferences|настройките]] си.\n\nВашият IP адрес е $3, а номерът на блокирането е $5. Включвайте едно от двете или и двете във всяко запитване, което правите.", "autoblockedtext": "IP-адресът ви беше блокиран автоматично, защото е бил използван от друг потребител, който е бил блокиран от $1.\nПосочената причина е:\n\n:''$2''\n\n* Начало на блокирането: $8\n* Край на блокирането: $6\n* Блокирането се отнася за: $7\n\nМожете да се свържете с $1 или с някой от останалите [[{{MediaWiki:Grouppage-sysop}}|администратори]], за да обсъдите блокирането.\n\nМожете да използвате услугата „Пращане писмо на потребител“ само ако не ви е забранена употребата ѝ и ако сте посочили валидна електронна поща в [[Special:Preferences|настройките]] си.\n\nТекущият ви IP-адрес е $3, а номерът на блокирането ви е $5. Включвайте ги във всяко питане, което правите.", "systemblockedtext": "Вашето потребителско име или IP адрес беше автоматично блокирано от Медия Уики.\nПосочената причина е:\n\n:$2\n\n* Начало на блокирането: $8\n* Край на блокирането: $6\n* Блокирането се отнася за: $7\n\nВашият текущ IP адрес е $3.\nМоля, включете всичките детайли по-горе, ако правите каквито и да е запитвания.", "blockednoreason": "не е указана причина", @@ -1005,7 +1005,7 @@ "recentchangesdays": "Брой дни в последни промени:", "recentchangesdays-max": "(най-много $1 {{PLURAL:$1|ден|дни}})", "recentchangescount": "Брой показвани редакции по подразбиране:", - "prefs-help-recentchangescount": "Това включва последните промени, историите на страниците и дневниците.", + "prefs-help-recentchangescount": "Максимален брой: 1000", "prefs-help-watchlist-token2": "Това е секретният ключ към уеб хранилката на вашия списък за наблюдение.\nВсеки, който го знае, би могъл да прегледа списъка ви за наблюдение, така че не го споделяйте.\nПри нужда можете да го [[Special:ResetTokens|изчистите]].", "prefs-help-tokenmanagement": "Можете да видите и нулирате тайния ключ за Вашата сметка, който може да има достъп до уеб хранилката на Вашия списък за наблюдение. Всеки, който знае ключа, ще може да види Вашия списък за наблюдение, така че не го споделяйте.", "savedprefs": "Настройките ви бяха съхранени.", @@ -1035,7 +1035,7 @@ "prefs-files": "Файлове", "prefs-custom-css": "Личен CSS", "prefs-custom-js": "Личен JS", - "prefs-common-config": "Общи настройки на CSS/JS за всички облици:", + "prefs-common-config": "Общи настройки на CSS/JSON/JavaScript за всички облици:", "prefs-reset-intro": "Тази страница може да се използва за възстановяване на потребителските настройки към стандартните за сайта.\nТова действие е необратимо.", "prefs-emailconfirm-label": "Потвърждаване на адрес за е-поща:", "youremail": "Е-поща:", @@ -1203,8 +1203,8 @@ "right-sendemail": "Изпращане на е-писма до другите потребители", "right-managechangetags": "Създаване и (де)активиране на [[Special:Tags|етикети]]", "right-applychangetags": "Задаване на [[Special:Tags|етикети]] заедно с направените промени", - "right-changetags": "Добавяне и премахване на произволни [[Special:Tags|етикети]] в индивидуални редакции и записи в дневници", - "right-deletechangetags": "Изтриване на [[Special:Tags|етикети]] от базата на данни", + "right-changetags": "Добавяне и премахване на произволни [[Special:Tags|етикети]] на индивидуални редакции и записи в дневници", + "right-deletechangetags": "Изтриване на [[Special:Tags|етикети]] от базата от данни", "grant-group-page-interaction": "Взаимодействие със страници", "grant-group-file-interaction": "Взаимодействие с медийни файлове", "grant-group-watchlist-interaction": "Взаимодействие с вашия списък за наблюдение", @@ -1289,7 +1289,7 @@ "action-editcontentmodel": "редактиране на модела на съдържанието на страница", "action-managechangetags": "създаване и (де)активиране на етикети", "action-applychangetags": "прилагане на етикетите заедно с промените ви", - "action-changetags": "добавяне и премахване на произволни етикети в индивидуални редакции и записи в дневниците", + "action-changetags": "добавяне и премахване на произволни етикети на индивидуални редакции и записи в дневниците", "action-deletechangetags": "изтриване на етикети от базата от данни", "action-purge": "почисти кеша на тази страница", "nchanges": "$1 {{PLURAL:$1|промяна|промени}}", @@ -1786,7 +1786,7 @@ "brokenredirects-edit": "редактиране", "brokenredirects-delete": "изтриване", "withoutinterwiki": "Страници без междуезикови препратки", - "withoutinterwiki-summary": "Следните страници не препращат към версии на други езици:", + "withoutinterwiki-summary": "Следните страници не са свързани с версии на други езици:", "withoutinterwiki-legend": "Представка", "withoutinterwiki-submit": "Показване", "fewestrevisions": "Страници с най-малко редакции", @@ -1919,12 +1919,12 @@ "log": "Дневници", "logeventslist-submit": "Показване", "logeventslist-more-filters": "Показване на още дневници:", - "logeventslist-patrol-log": "Дневник на патрула", + "logeventslist-patrol-log": "Дневник на патрулирането", "logeventslist-tag-log": "Дневник на етикетите", "all-logs-page": "Всички публични дневници", "alllogstext": "Смесено показване на записи от всички налични дневници в {{SITENAME}}.\nМожете да ограничите прегледа, като изберете вид на дневника, потребителско име или определена страница.", "logempty": "Дневникът не съдържа записи, отговарящи на избрания критерий.", - "log-title-wildcard": "Търсене на заглавия, започващи със", + "log-title-wildcard": "Търсене на заглавия, започващи със следния текст", "showhideselectedlogentries": "Промяна на видимостта на избраните записи", "log-edit-tags": "Редактиране на етикетите на избраните записи в дневника", "checkbox-select": "Избор: $1", @@ -1964,7 +1964,7 @@ "listusers-noresult": "Няма намерени потребители.", "listusers-blocked": "(блокиран)", "activeusers": "Списък на активните потребители", - "activeusers-intro": "Това е списък на потребителите, които са демонстрирали някаква активност през {{PLURAL:$1|последния|последните}} $1 {{PLURAL:$1|ден|дни}}.", + "activeusers-intro": "Това е списък на потребителите, които са имали някаква активност през {{PLURAL:$1|последния|последните}} $1 {{PLURAL:$1|ден|дни}}.", "activeusers-count": "$1 {{PLURAL:$1|действие|действия}} за {{PLURAL:$3|последния ден|последните $3 дни}}", "activeusers-from": "Показване на потребителите, започвайки от:", "activeusers-groups": "Показване на потребителите, принадлежащи към групи:", @@ -2007,33 +2007,33 @@ "emailuser-title-target": "Писмо до {{GENDER:$1|потребителя}}", "emailuser-title-notarget": "Изпращане на е-писмо на потребител", "emailpagetext": "Можете да използвате формуляра по-долу, за да изпратите електронно писмо на {{GENDER:$1|този потребител}}.\nАдресът, който се въвели в [[Special:Preferences|настройките си]], ще се появи в полето „От“ на писмото, така че получателят ще е в състояние да ви отговори директно.", - "defemailsubject": "Писмо от потребител $1 в {{SITENAME}}", + "defemailsubject": "Писмо от потребител „$1“ в {{SITENAME}}", "usermaildisabled": "Потребителят не е разрешил да получава електронна поща", "usermaildisabledtext": "Не можете да изпращате електронна поща на други потребители от това уики", "noemailtitle": "Няма електронна поща", "noemailtext": "Този потребител не е посочил валиден адрес за електронна поща.", "nowikiemailtext": "Този потребител е избрал да не получава електронна поща от други потребители.", - "emailnotarget": "Несъществуващ или невалиден получател на е-писмото.", + "emailnotarget": "Несъществуващо или невалидно потребителско име за получател.", "emailtarget": "Въвежда се получателят на е-писмото", "emailusername": "Потребителско име:", "emailusernamesubmit": "Изпращане", "email-legend": "Изпращане на електронно писмо до друг потребител на {{SITENAME}}", "emailfrom": "От:", "emailto": "До:", - "emailsubject": "Относно:", + "emailsubject": "Тема:", "emailmessage": "Съобщение:", "emailsend": "Изпращане", "emailccme": "Изпращане на копие на писмото до автора.", - "emailccsubject": "Копие на писмото ви до $1: $2", + "emailccsubject": "Копие на писмото Ви до $1: $2", "emailsent": "Писмото е изпратено", - "emailsenttext": "Писмото ви беше изпратено.", + "emailsenttext": "Писмото Ви беше изпратено.", "emailuserfooter": "Това писмо беше изпратено от $1 на {{GENDER:$2|$2}} чрез функцията „{{int:emailuser}}“ на {{SITENAME}}. Ако отговорите на писмото, вашето писмо ще бъде изпратено директно на {{GENDER:$1|първоначалния подател}}, показвайки адреса на ел. Ви поща на получателя.", "usermessage-summary": "Оставяне на системно съобщение.", "usermessage-editor": "Системни съобщения", "watchlist": "Списък за наблюдение", "mywatchlist": "Списък за наблюдение", "watchlistfor2": "За $1 $2", - "nowatchlist": "Списъкът ви за наблюдение е празен.", + "nowatchlist": "Списъкът Ви за наблюдение е празен.", "watchlistanontext": "За преглеждане и редактиране на списъка за наблюдение се изисква влизане в системата.", "watchnologin": "Не сте влезли", "addwatch": "Добавяне към списъка за наблюдение", @@ -2168,11 +2168,11 @@ "protectexpiry": "Изтича на:", "protect_expiry_invalid": "Невалиден срок на изтичане.", "protect_expiry_old": "Срокът на изтичане е минал.", - "protect-unchain-permissions": "Позволяване на по-нататъшни възможности за защита", + "protect-unchain-permissions": "Позволяване на допълнителни възможности за защита", "protect-text": "Тук можете да прегледате и промените нивото на защита на страницата $1.", "protect-locked-blocked": "Не можете да променяте нивата на защита на страниците, докато сте блокиран(а).\nТекущите настройки за страницата $1 са:", "protect-locked-dblock": "Нивата на защита на страниците не могат да бъдат променяни, защото базата от данни е заключена.\nЕто текущите настройки за страницата $1:", - "protect-locked-access": "Нямате правото да променяте нивата на защита на страниците. Ето текущите настройки за страницата „'''$1'''“:", + "protect-locked-access": "Нямате правото да променяте нивата на защита на страниците. Ето текущите настройки за страницата $1:", "protect-cascadeon": "Тази страница е защитена против редактиране, защото е включена в {{PLURAL:$1|следната страница, която от своя страна има|следните страници, които от своя страна имат}} каскадна защита.\nМожете да промените нивото на защита на страницата, но това няма да повлияе върху каскадната защита.", "protect-default": "Позволяване за всички потребители", "protect-fallback": "Позволяване само за потребители с права на „$1“", @@ -2212,13 +2212,13 @@ "viewdeletedpage": "Преглед на изтрити страници", "undeletepagetext": "{{PLURAL:$1|Следната страница беше изтрита, но все още се намира в архива и може да бъде възстановена|Следните $1 страници бяха изтрити, но все още се намират в архива и могат да бъдат възстановени}}. Архивът може да се почиства от време на време.", "undelete-fieldset-title": "Възстановяване на версии", - "undeleteextrahelp": "За възстановяване на пълната история на страницата не се слагат отметки и се натиска '''''{{int:undeletebtn}}'''''.\nЗа частично възстановяване се поставят отметки на тези версии на страницата, които трябва да бъдат възстановени, след което се натиска '''''{{int:undeletebtn}}'''''.", + "undeleteextrahelp": "За възстановяване на пълната история на страницата не се слагат отметки и се натиска {{int:undeletebtn}}.\nЗа частично възстановяване се поставят отметки на тези версии на страницата, които трябва да бъдат възстановени, след което се натиска {{int:undeletebtn}}.", "undeleterevisions": "$1 {{PLURAL:$1|версия беше изтрита|версии бяха изтрити}}", "undeletehistory": "Ако възстановите страницата, всички версии ще бъдат върнати в историята.\nАко след изтриването е създадена страница със същото име, възстановените версии ще се появят като по-ранна история, а текущата версия на страницата няма да бъде заменена автоматично. Също така обърнете внимание, че ограниченията, приложени върху версиите, ще се загубят след възстановяването.", "undeleterevdel": "Възстановяването няма да бъде изпълнено, ако би довело до частично изтриване на актуалната версия. В такъв случай актуалната версия не трябва да бъде избирана или пък състоянието ѝ трябва да бъде променено на нормална (нескрита) версия. Версиите на файлове, които нямате право да преглеждате, няма да бъдат възстановени.", "undeletehistorynoadmin": "Тази страница е била изтрита. В резюмето отдолу е посочена причината за това, заедно с информация за потребителите, редактирали страницата преди изтриването ѝ. Конкретното съдържание на изтритите версии е достъпно само за администратори.", "undelete-revision": "Изтрита версия на $1 (към $4, в $5) от $3:", - "undeleterevision-missing": "Неправилна или липсваща версия. Може да сте последвали грешна препратка или указаната версия да е била възстановена или премахната от архива", + "undeleterevision-missing": "Неправилна или липсваща версия.\nМоже да сте последвали грешна препратка или указаната версия да е била възстановена или премахната от архива.", "undelete-nodiff": "Не е открита предишна редакция.", "undeletebtn": "Възстановяване", "undeletelink": "преглед/възстановяване", @@ -2226,18 +2226,18 @@ "undeleteinvert": "Обръщане на избора", "undeletecomment": "Причина:", "cannotundelete": "Една или повече операции по възстановяване се провалиха:\n$1", - "undeletedpage": "'''Страницата „$1“ беше възстановена.'''\n\nМожете да видите последните изтрити и възстановени страници в [[Special:Log/delete|дневника на изтриванията]].", + "undeletedpage": "Страницата $1 беше възстановена\n\nМожете да видите последните изтрити и възстановени страници в [[Special:Log/delete|дневника на изтриванията]].", "undelete-header": "Прегледайте [[Special:Log/delete|дневника на изтриванията]] за текущо изтритите страници.", "undelete-search-title": "Търсене на изтрити страници", "undelete-search-box": "Търсене на изтрити страници", - "undelete-search-prefix": "Показване на страници, започващи със:", + "undelete-search-prefix": "Показване на страници, започващи с:", "undelete-search-full": "Показване на заглавия на страници, съдържащи:", "undelete-search-submit": "Търсене", "undelete-no-results": "Не са намерени страници, отговарящи на търсения критерий.", "undelete-filename-mismatch": "Не е възможно възстановяването на файловата версия с времева отметка $1: несъответствие в името на файла", "undelete-bad-store-key": "Не е възможно възстановяването на файловата версия с времева отметка $1: файлът е липсвал преди изтриването.", "undelete-cleanup-error": "Грешка при изтриване на неизползвания архивен файл „$1“.", - "undelete-missing-filearchive": "Не е възможно възстановяването на файла с ID $1, защото не присъства в базата от данни. Вероятно вече е възстановен.", + "undelete-missing-filearchive": "Не е възможно възстановяването на файла с ID $1, защото не присъства в базата от данни.\nВероятно вече е възстановен.", "undelete-error": "Грешка при възстановяване на страницата", "undelete-error-short": "Грешка при възстановяването на изтрития файл: $1", "undelete-error-long": "Възникнаха грешки при възстановяването на изтрития файл:\n\n$1", @@ -2262,7 +2262,7 @@ "year": "От година (и по-рано):", "date": "От дата (и по-рано):", "sp-contributions-newbies": "Показване само на приносите на нови потребители", - "sp-contributions-newbies-sub": "на нови потребители", + "sp-contributions-newbies-sub": "За нови сметки", "sp-contributions-newbies-title": "Потребителски приноси за нови сметки", "sp-contributions-blocklog": "дневник на блокиранията", "sp-contributions-deleted": "изтрити приноси на {{GENDER:$1|потребител}}", @@ -2301,11 +2301,11 @@ "unblock": "Отблокиране на потребител", "blockip": "Блокиране на {{GENDER:$1|потребител}}", "blockiptext": "Формулярът по-долу се използва, за да се забрани правото на писане на определен IP-адрес или потребителско име.\nТова трябва да се направи само за предотвратяване прояви на вандализъм\nи в съответствие с [[{{MediaWiki:Policy-url}}|политиката за поведение]].\nНеобходимо е да се посочи и причина за блокирането (например заглавия на страници, станали обект на вандализъм).\nМожете да блокирате диапазон от IP-адреси чрез синтаксиса на [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; максималният позволен диапазон е /$1 за IPv4 и /$2 за IPv6.", - "ipaddressorusername": "IP-адрес или потребител:", + "ipaddressorusername": "IP-адрес или потребителско име:", "ipbexpiry": "Срок:", "ipbreason": "Причина:", "ipbreason-dropdown": "* Общи причини за блокиране\n** Въвеждане на невярна информация\n** Премахване на съдържание от страниците\n** Добавяне на спам/нежелани външни препратки\n** Въвеждане на безсмислици в страниците\n** Заплашително поведение/тормоз\n** Злоупотреба с няколко потребителски сметки\n** Неприемливо потребителско име", - "ipb-hardblock": "Спиране на възможността влезли потребители да редактират от този IP адрес", + "ipb-hardblock": "Спиране на възможността влезли потребители да редактират от този IP-адрес", "ipbcreateaccount": "Забрана за създаване на потребителски сметки", "ipbemailban": "Забрана на потребителя да праща е-поща", "ipbenableautoblock": "Автоматично блокиране на последния IP-адрес, използван от потребителя, както и на всички останали адреси, от които се опита да редактира", @@ -2321,8 +2321,8 @@ "blockipsuccesssub": "Блокирането беше успешно", "blockipsuccesstext": "Потребител [[Special:Contributions/$1|$1]] беше блокиран(а).
    \nМожете да прегледате пълния [[Special:BlockList|списък на блокираните потребители]].", "ipb-blockingself": "На път сте да блокирате себе си! Наистина ли желаете да извършите това действие?", - "ipb-confirmhideuser": "На път сте да блокирате потребител, който е \"скрит потребител\". Това действие ще заличи потребителското име от всички списъци и дневници. Наистина ли желаете да направите това?", - "ipb-edit-dropdown": "Причини за блокиране", + "ipb-confirmhideuser": "На път сте да блокирате потребител, който е „скрит потребител“. Това действие ще заличи потребителското име от всички списъци и дневници. Наистина ли желаете да направите това?", + "ipb-edit-dropdown": "Редактиране на причините за блокиране", "ipb-unblock-addr": "Отблокиране на $1", "ipb-unblock": "Отблокиране на потребителско име или IP-адрес", "ipb-blocklist": "Преглед на текущите блокирания", @@ -2344,9 +2344,9 @@ "autoblocklist-empty": "Списъкът на автоматичните блокирания е празен.", "ipblocklist": "Блокирани потребители", "ipblocklist-legend": "Търсене на блокиран потребител", - "blocklist-userblocks": "Скриване на блокирани потребителски сметки", + "blocklist-userblocks": "Скриване блокирането на потребителски сметки", "blocklist-tempblocks": "Скриване на временни блокирания", - "blocklist-addressblocks": "Скриване на отделни блокирани IP адреси", + "blocklist-addressblocks": "Скриване на отделни блокирания на IP адреси", "blocklist-rangeblocks": "Скриване на блокиранията по IP диапазон", "blocklist-timestamp": "Дата и час", "blocklist-target": "Цел", @@ -3162,8 +3162,8 @@ "confirm_purge_button": "Добре", "confirm-purge-top": "Изчистване на складираното копие на страницата?", "confirm-purge-bottom": "Изчистването на страница опреснява кеша и показва последната ѝ версия.", - "confirm-watch-button": "Потвърждаване", - "confirm-watch-top": "Добавяне на страницата в списъка ви за наблюдение?", + "confirm-watch-button": "Добре", + "confirm-watch-top": "Добавяне на страницата в списъка Ви за наблюдение?", "confirm-unwatch-button": "Потвърждаване", "confirm-unwatch-top": "Премахване на страницата от списъка Ви за наблюдение?", "confirm-rollback-button": "OK", diff --git a/languages/i18n/bn.json b/languages/i18n/bn.json index 7115f8ae51..66849a17b4 100644 --- a/languages/i18n/bn.json +++ b/languages/i18n/bn.json @@ -386,9 +386,9 @@ "customcssprotected": "আপনার এই সিএসএস পাতাটি সম্পাদনা করার অনুমতি নেই, কারণ এ পাতায় অন্য ব্যবহারকারীর নিজস্ব সেটিংস রয়েছে।", "customjsonprotected": "আপনার এই JSON পাতাটি সম্পাদনা করার অনুমতি নেই কারণ এই পাতায় অন্য ব্যবহারকারীর নিজস্ব সেটিংস রয়েছে।", "customjsprotected": "আপনার এই জাভাস্ক্রিপ্ট পাতাটি সম্পাদনা করার অনুমতি নেই, কারণ এ পাতায় অন্য ব্যবহারকারীর নিজস্ব সেটিংস রয়েছে।", - "sitecssprotected": "আপনার এই CSS পাতাটি সম্পাদনা করার অনুমতি নেই কারণ এটি সমস্ত পরিদর্শককে প্রভাবিত করতে পারে", - "sitejsonprotected": "আপনার এই JSON পাতাটি সম্পাদনা করার অনুমতি নেই কারণ এটি সমস্ত পরিদর্শককে প্রভাবিত করতে পারে", - "sitejsprotected": "আপনার এই জাভাস্ক্রিপ্ট পাতাটি সম্পাদনা করার অনুমতি নেই কারণ এটি সমস্ত পরিদর্শককে প্রভাবিত করতে পারে", + "sitecssprotected": "আপনার এই CSS পাতাটি সম্পাদনা করার অনুমতি নেই কারণ এটি সমস্ত পরিদর্শককে প্রভাবিত করতে পারে।", + "sitejsonprotected": "আপনার এই JSON পাতাটি সম্পাদনা করার অনুমতি নেই কারণ এটি সমস্ত পরিদর্শককে প্রভাবিত করতে পারে।", + "sitejsprotected": "আপনার এই জাভাস্ক্রিপ্ট পাতাটি সম্পাদনা করার অনুমতি নেই কারণ এটি সমস্ত পরিদর্শককে প্রভাবিত করতে পারে।", "mycustomcssprotected": "আপনার এই সিএসএস পাতাটি সম্পাদনা করার অনুমতি নেই।", "mycustomjsonprotected": "আপনার এই JSON পাতাটি সম্পাদনা করার অনুমতি নেই।", "mycustomjsprotected": "আপনার এই জাভাস্ক্রিপ্ট পাতাটি সম্পাদনা করার অনুমতি নেই।", @@ -3368,6 +3368,7 @@ "confirm-unwatch-top": "এই পাতাটি আপনার নজরতালিকা থেকে সরিয়ে ফেলতে ইচ্ছুক?", "confirm-rollback-button": "ঠিক আছে", "confirm-rollback-top": "এই পাতায় করা সম্পাদনাগুলি প্রত্যাবর্তন করবেন?", + "mcrundofailed": "পূর্বাবস্থায় ফেরা ব্যর্থ হয়েছে", "quotation-marks": "\"$1\"", "imgmultipageprev": "← পূর্ববর্তী পাতা", "imgmultipagenext": "পরবর্তী পাতা →", diff --git a/languages/i18n/cdo.json b/languages/i18n/cdo.json index 57ef3c8b59..1224672835 100644 --- a/languages/i18n/cdo.json +++ b/languages/i18n/cdo.json @@ -559,6 +559,7 @@ "currentrev": "最新版本", "currentrev-asof": "$1 muōi-muōi siŏh-huôi biĕng-cĭk", "revisionasof": "$1 gì bēng-buōng", + "revision-info": "Găk $1 iù {{GENDER:$6|$2}} có̤ gì biĕng-cĭk $7", "previousrevision": "← Gá-gô gì bēng-buōng", "nextrevision": "加新其版本→", "currentrevisionlink": "最新版本", @@ -660,6 +661,7 @@ "yourrealname": "真實姓名:", "yourlanguage": "語言:", "yournick": "新其簽名:", + "badsig": "Nguòng-sṳ̄ chiĕng-miàng ô dâng.\nGái káng-lâ HTML biēu-chiĕng.", "email": "電批", "prefs-help-email": "電子郵件地址是愛寫就寫其,但是如果汝𣍐記密碼咯,密碼重置其時候需要茲。", "prefs-help-email-others": "汝也會使選擇讓其他其用戶通過汝其用戶頁面或者討論頁面懸頂其鏈接,使電子郵件來聯繫汝。其他其用戶聯繫汝其辰候,汝其電子郵件地址𣍐顯示出來。", @@ -733,6 +735,7 @@ "boteditletter": "^", "rc-change-size-new": "Siŭ-gāi ī-hâiu biéng có̤ $1 cê-ciék", "rc-enhanced-hide": "囥起細節", + "rc-old-title": "Kī-tàu hô̤ lā̤ „$1“", "recentchangeslinked": "相關其改變", "recentchangeslinked-feed": "相關其改變", "recentchangeslinked-toolbox": "Sŏng-guăng gì gāi-biéng", @@ -876,6 +879,8 @@ "unwatch": "伓使監視", "unwatchthispage": "停止監視", "watchlist-details": "Nṳ̄ gì găng-sê-dăng {{PLURAL:$1|ô $1 gó|dŭ liāng ô $1 gó}} hiĕk-miêng (bău-guák tō̤-lâung-hiĕk).", + "wlheader-enotif": "Ī-gĭng kŭi kó̤ diêng-piĕ tŭng-dĭ.", + "wlheader-showupdated": "Ṳ̀-guō ô diê-siŏh-hiĕk, găk nṳ̄ muōi-muōi siŏh-huòi káng guó cī-hâiu, bô ké̤ṳk nè̤ng gāi kó̤, hī-siŏh-hiĕk gì biĕu-dà̤ cêu-sê cū-tā̤.", "wlshowlast": "顯示最$1點鐘$2日", "watchlist-options": "監視單選項", "watching": "監視...", @@ -895,6 +900,7 @@ "deletecomment": "原因:", "rollback": "再修改轉去", "rollbacklink": "duōng", + "rollbacklinkcount": "Huòi-tó̤i $1 huòi biĕng-cĭk", "rollbackfailed": "轉𣍐去", "cantrollback": "𣍐使恢復修改;最後其貢獻者是茲蜀頁其唯一其作者。", "alreadyrolled": "𣍐使回滾最後蜀回[[User:$2|$2]] ([[User talk:$2|討論]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])其[[:$1]]編輯;\n有其他儂已經編輯過了或者茲蜀頁已經乞回滾過了。\n\n最後蜀回茲蜀頁其修改是[[User:$3|$3]] ([[User talk:$3|討論]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])改其。", @@ -1070,6 +1076,7 @@ "tooltip-feed-atom": "Cī-siŏh-hiĕk gì Atom lài-nguòng", "tooltip-t-contributions": "{{GENDER:$1|茲蜀隻用戶}}其貢獻單單", "tooltip-t-emailuser": "向{{GENDER:$1|茲蜀隻用戶}}寄電批", + "tooltip-t-info": "Cī-siŏh-hiĕk gì gó-sâ̤ séng-sék", "tooltip-t-upload": "Siông-diòng ùng-giông", "tooltip-t-specialpages": "Cuòng-buô dĕk-sṳ̀-hiĕk dăng-dăng", "tooltip-t-print": "Cī-hiĕk â̤ páh-éng gì bēng-buōng", @@ -1194,6 +1201,7 @@ "watchlisttools-view": "看相關改變", "watchlisttools-edit": "看共修改監視單", "watchlisttools-raw": "修改原始監視單", + "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|tō̤-lâung]])", "redirect": "Áng ùng-giông, ê̤ṳng-hô, hiĕk-miêng siŭ-gāi, nĭk-cé ID kó̤ tṳ̀ng-dêng-hióng", "redirect-submit": "Kó̤", "redirect-lookup": "Sìng-tō̤:", diff --git a/languages/i18n/ckb.json b/languages/i18n/ckb.json index b97674be68..75940d2834 100644 --- a/languages/i18n/ckb.json +++ b/languages/i18n/ckb.json @@ -998,7 +998,7 @@ "userrights-expiry-in-past": "کاتی بەسەرچوون بۆ گرووپی «$1» لە ڕابردوودایە.", "group": "گرووپ:", "group-user": "بەکارھێنەران", - "group-autoconfirmed": "بەکارھێنەرە خۆبەخۆ پەسندکراوەکان", + "group-autoconfirmed": "بەکارھێنەرانی پەسەندکراوی خۆگەڕ", "group-bot": "بۆتەکان", "group-sysop": "بەڕێوەبەران", "group-interface-admin": "بەڕێوەبەرانی ڕووکار", @@ -1006,14 +1006,14 @@ "group-suppress": "چاودێرەکان", "group-all": "(ھەموو)", "group-user-member": "{{GENDER:$1|بەکارھێنەر}}", - "group-autoconfirmed-member": "{{GENDER:$1|بەکارھێنەرە خۆبەخۆ پەسندکراوەکان}}", + "group-autoconfirmed-member": "{{GENDER:$1|بەکارھێنەرانی پەسەندکراوی خۆگەڕ}}", "group-bot-member": "بۆت", "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-autoconfirmed": "{{ns:project}}:بەکارھێنەرانی پەسەندکراوی خۆگەڕ", "grouppage-bot": "{{ns:project}}:بۆت", "grouppage-sysop": "{{ns:project}}:بەڕێوەبەران", "grouppage-interface-admin": "{{ns:project}}:بەڕێوەبەرانی ڕووکار", @@ -1253,6 +1253,9 @@ "rcfilters-liveupdates-button": "نوێکردنەوەی زیندوو", "rcfilters-watchlist-edit-watchlist-button": "دەستکاریکردنی پێڕستی پەڕە چاودێریکراوەکانت", "rcfilters-watchlist-showupdated": "ئەو پەڕانەی دەستکاریکراون و لەکاتی دەستکاریکردنەکەوە سەردانت نەکردوونەتەوە بە تۆخ دەردەکەون، بە نیشانی پڕکراوەوە.", + "rcfilters-preference-label": "گەڕاندنەوەی وەشانی نوێی دوایین گۆڕانکارییەکان", + "rcfilters-watchlist-preference-label": "شاردنەوەی وەشانی نوێی پێڕستی چاودێری", + "rcfilters-watchlist-preference-help": "ئەم ھەڵبژاردەیە وەشانی نوێی ڕووکار و ھەموو ئامرازەکانی لەو کاتەوە زیاد کراون دەگەڕێنێتەوە.", "rcnotefrom": "ژێرەوە {{PLURAL:$5|گۆڕانکارییەکەیە|گۆڕانکارییەکانە}} لە $3، $4ەوە (ھەتا $1 نیشان دراوە).", "rclistfromreset": "گەڕاندنەوەی ھەڵبژاردەی بەروار", "rclistfrom": "گۆڕانکارییە نوێکان نیشان بدە بە دەستپێکردن لە $3 $2", @@ -2831,6 +2834,7 @@ "specialpages-group-wiki": "دراوەکان و ئامرازەکان", "specialpages-group-redirects": "پەڕە تایبەتەکانی ڕەوانەکردن", "specialpages-group-spam": "ئامرازەکانی سپەم", + "specialpages-group-developer": "ئامرازەکانی بەرھەمھێنەر", "blankpage": "پەڕەی واڵا", "intentionallyblankpage": "ئەم پەڕەیە لەقەست واڵا ھێڵراوەتەوە.", "external_image_whitelist": " #ئەم دێڕ ھەر بەم جۆرە کە ھەیە بەجێبێڵە
    \n#کەرتەکانی regular expression (تەنیا ئە بەشە کە لە نێوان // دا دێت) لە خوارەوە دابنێ\n#These will be matched with the URLs of external (hotlinked) images\n#Those that match will be displayed as images, otherwise only a link to the image will be shown\n#ئەو دێڕانە بە # دەست پێدەکەن وەک شرۆڤە (comments) مامەڵەیان لەگەڵ دەکرێ\n#بە گەورە و بچووکی پیتەکان ھەستیارە (case-insensitive)\n\n#گشت کەرتەکانی regex لە سەرەوەی ئەم دێرەدا دابنێ. ئەم دێڕ ھەر بەم جۆرە کە ھەیە بەجێبێڵە
    ", diff --git a/languages/i18n/cs.json b/languages/i18n/cs.json index 9271047ec8..8bc287d31c 100644 --- a/languages/i18n/cs.json +++ b/languages/i18n/cs.json @@ -3548,6 +3548,7 @@ "redirect-file": "Jméno souboru", "redirect-logid": "ID protokolovacího záznamu", "redirect-not-exists": "Hodnota nenalezena", + "redirect-not-numeric": "Hodnota není číslo", "fileduplicatesearch": "Hledání duplicitních souborů", "fileduplicatesearch-summary": "Hledání duplicitních souborů podle jejich hašů.", "fileduplicatesearch-filename": "Jméno souboru:", diff --git a/languages/i18n/da.json b/languages/i18n/da.json index a0da0e19fe..7a2358c99b 100644 --- a/languages/i18n/da.json +++ b/languages/i18n/da.json @@ -1154,6 +1154,7 @@ "group-autoconfirmed": "Registrerede brugere", "group-bot": "Robotter", "group-sysop": "Administratorer", + "group-interface-admin": "Grænsesnitadministratorer", "group-bureaucrat": "Bureaukrater", "group-suppress": "Undertrykkere", "group-all": "(alle)", @@ -1518,6 +1519,7 @@ "recentchanges-page-added-to-category": "[[:$1]] tilføjet til kategori", "recentchanges-page-added-to-category-bundled": "[[:$1]] tilføjet til kategorien, [[Special:WhatLinksHere/$1|denne side er inkluderet i andre sider]]", "recentchanges-page-removed-from-category": "[[:$1]] fjernet fra kategori", + "autochange-username": "Automatisk MediaWiki-ændring", "upload": "Læg en fil op", "uploadbtn": "Læg en fil op", "reuploaddesc": "Tilbage til formularen til at lægge filer op.", @@ -1681,6 +1683,7 @@ "uploadstash-bad-path-invalid": "Stien er ugyldig.", "uploadstash-bad-path-unknown-type": "Ukendt type »$1«.", "uploadstash-file-not-found-no-object": "Kunne ikke oprette lokalt filobjekt for miniaturebillede.", + "uploadstash-file-too-large": "Kan ikke behandle en fil der er større end $1 bytes.", "uploadstash-not-logged-in": "Ingen bruger er logget ind, filer skal tilhøre brugere.", "uploadstash-wrong-owner": "Filen ($1) tilhører ikke den nuværende bruger.", "uploadstash-no-such-key": "Ingen sådan nøgle ($1), kan ikke fjerne.", @@ -3596,6 +3599,7 @@ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}", "limitreport-expansiondepth": "Største udvidelsesdybde", "limitreport-expensivefunctioncount": "Antal dyre parserfunktioner", + "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|byte|bytes}}", "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{{#language:…}} og variabler så som \n{{CURRENTDAY}}\nFaktisk udfolder den stort set alt i dobbelte tuborgklammer.", "expand_templates_title": "Sammenhængstitel, for {{FULLPAGENAME}} osv.:", @@ -3681,6 +3685,7 @@ "log-action-filter-move": "Flyttetype:", "log-action-filter-patrol": "Patruljeringstype:", "log-action-filter-protect": "Beskyttelsestype:", + "log-action-filter-rights": "Type af rettighedændring:", "log-action-filter-all": "Alle", "log-action-filter-block-block": "Blokering", "log-action-filter-block-reblock": "Ændring af blokering", @@ -3714,6 +3719,7 @@ "authform-notoken": "Mangler nøgle", "authform-wrongtoken": "Forkert nøgle", "specialpage-securitylevel-not-allowed-title": "Ikke tilladt", + "authpage-cannot-login": "Kunne ikke starte login.", "cannotauth-not-allowed-title": "Adgang nægtet", "cannotauth-not-allowed": "Du har ikke tilladelse til at bruge denne side", "removecredentials": "Fjern akkreditiver", diff --git a/languages/i18n/de-ch.json b/languages/i18n/de-ch.json index 0b44ae2b08..768ca98fdd 100644 --- a/languages/i18n/de-ch.json +++ b/languages/i18n/de-ch.json @@ -13,7 +13,8 @@ "FriedhelmW", "J. 'mach' wust", "Macofe", - "Marcell0" + "Marcell0", + "L*E*D" ] }, "tog-hideminor": "Kleine Änderungen in den «Letzten Änderungen» ausblenden", @@ -21,6 +22,7 @@ "tog-newpageshidepatrolled": "Kontrollierte Seiten bei den «Neuen Seiten» ausblenden", "tog-usenewrc": "Seitenbezogene Gruppierung in den «Letzten Änderungen» und auf der Beobachtungsliste", "tog-minordefault": "Eigene Änderungen standardmässig als minim markieren", + "tuesday": "Dienstag", "january": "Januar", "february": "Februar", "march": "März", @@ -56,19 +58,28 @@ "searchbutton": "Suche", "searcharticle": "Gehe", "printableversion": "Druckbare Version", + "permalink": "Permanenter Link", "edit": "Bearbeiten", "talkpagelinktext": "Diskussion", "personaltools": "Meine Werkzeuge", "talk": "Diskussion", "views": "Ansichten", "toolbox": "Werkzeuge", + "otherlanguages": "In anderen Sprachen", + "lastmodifiedat": "Diese Seite wurde zuletzt am $1 um $2 Uhr bearbeitet.", "jumpto": "Wechseln zu:", "jumptonavigation": "Navigation", "jumptosearch": "Suche", "aboutsite": "Über {{SITENAME}}", "aboutpage": "Project:Über_{{SITENAME}}", + "currentevents": "Aktuelle Ereignisse", + "currentevents-url": "Project:Aktuelle Ereignisse", "disclaimers": "Impressum", "disclaimerpage": "Project:Impressum", + "mainpage": "Hauptseite", + "mainpage-description": "Hauptseite", + "portal": "Gemeinschaftsportal", + "portal-url": "Project:Gemeinschaftsportal", "privacy": "Datenschutz", "privacypage": "Project:Datenschutz", "badaccess-groups": "Diese Aktion ist auf Benutzer beschränkt, die {{PLURAL:$2|der Gruppe|einer der Gruppen}} «$1» angehören.", @@ -79,6 +90,8 @@ "page-rss-feed": "RSS-Feed für «$1»", "page-atom-feed": "Atom-Feed für «$1»", "red-link-title": "$1 (Seite nicht vorhanden)", + "nstab-main": "Seite", + "mainpage-nstab": "Hauptseite", "missing-article": "Der Text von «$1» $2 wurde nicht in der Datenbank gefunden.\n\nDie Seite ist möglicherweise gelöscht oder verschoben worden.\n\nFalls dies nicht zutrifft, hast du eventuell einen Fehler in der Software gefunden. Bitte melde dies einem [[Special:ListUsers/sysop|Administrator]] unter Nennung der URL.", "filecopyerror": "Die Datei «$1» konnte nicht nach «$2» kopiert werden.", "filerenameerror": "Die Datei «$1» konnte nicht nach «$2» umbenannt werden.", @@ -143,6 +156,7 @@ "mergehistory-autocomment": "«[[:$1]]» vereinigt nach «[[:$2]]»", "mergehistory-comment": "«[[:$1]]» vereinigt nach «[[:$2]]»: $3", "history-title": "$1: Versionsgeschichte", + "lineno": "Zeile $1:", "searchresults-title": "Suchergebnisse für «$1»", "searchmenu-exists": "'''Es gibt eine Seite, die den Namen «[[:$1]]» hat.'''", "searchmenu-new": "Erstelle die Seite «[[:$1]]» in diesem Wiki. {{PLURAL:$2|0=|Siehe auch die über deine Suche gefundene Seite.|Siehe auch die gefundenen Suchergebnisse.}}", @@ -164,10 +178,12 @@ "right-viewmyprivateinfo": "Eigene private Daten ansehen (beispielsweise E-Mail-Adresse, richtiger Name)", "right-editmyprivateinfo": "Eigene private Daten bearbeiten (beispielsweise E-Mail-Adresse, richtiger Name)", "right-override-export-depth": "Exportiere Seiten einschliesslich verlinkter Seiten bis zu einer Tiefe von 5", + "recentchanges": "Letzte Änderungen", "recentchanges-label-plusminus": "Die Änderung der Seitengrösse in Bytes", "rc-change-size-new": "$1 {{PLURAL:$1|Byte|Bytes}} nach der Änderung", "rc-old-title": "ursprünglich erstellt als «$1»", "recentchangeslinked-title": "Änderungen an Seiten, die von «$1» verlinkt sind", + "upload": "Datei hochladen", "uploadtext": "Benutze dieses Formular, um neue Dateien hochzuladen.\n\nGehe zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].\n\nUm ein '''Bild''' in einer Seite zu verwenden, nutze einen Link in der folgenden Form:\n* '''[[{{ns:file}}:Datei.jpg]]''' – für ein Vollbild\n* '''[[{{ns:file}}:Datei.png|200px|thumb|left|Alternativer Text]]''' – für ein 200px breites Bild innerhalb einer Box, mit «Alternativer Text» als Bildbeschreibung\n* '''[[{{ns:media}}:Datei.ogg]]''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei", "illegalfilename": "Der Dateiname «$1» enthält mindestens ein nicht erlaubtes Zeichen. Bitte benenne die Datei um und versuche, sie erneut hochzuladen.", "filename-toolong": "Dateinamen dürfen nicht grösser als 240 Byte sein.", @@ -222,6 +238,7 @@ "filedelete-success-old": "Von der Datei '''«[[Media:$1|$1]]»''' wurde die Version vom $2, $3 Uhr gelöscht.", "filedelete-nofile": "'''«$1»''' ist nicht vorhanden.", "filedelete-nofile-old": "Es gibt von '''«$1»''' keine archivierte Version mit den angegebenen Attributen.", + "randompage": "Zufällige Seite", "randompage-nopages": "Es sind keine Seiten {{PLURAL:$2|im folgenden Namensraum|in den folgenden Namensräumen}} enthalten: «$1»", "randomredirect-nopages": "Im Namensraum «$1» sind keine Weiterleitungen vorhanden.", "alllogstext": "Dies ist die kombinierte Anzeige aller in {{SITENAME}} geführten Logbücher.\nDie Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seitentitels eingeschränkt werden (Gross-/Kleinschreibung muss beachtet werden).", @@ -264,6 +281,7 @@ "undelete-show-file-confirm": "Bist du sicher, dass du eine gelöschte Version der Datei «$1» vom $2, $3 Uhr sehen willst?", "blanknamespace": "(Seiten)", "contributions-title": "Benutzerbeiträge von «$1»", + "whatlinkshere": "Links auf diese Seite", "whatlinkshere-title": "Seiten, die auf «$1» verlinken", "linkshere": "Die folgenden Seiten verlinken auf '''«$2»''':", "nolinkshere": "Keine Seite verlinkt auf '''«$2»'''.", @@ -298,15 +316,27 @@ "import-error-interwiki": "Die Seite «$1» wurde nicht importiert, da deren Name für externe Links (Interwiki) reserviert ist.", "import-error-special": "Die Seite «$1» wurde nicht importiert, da sie zu einem besonderen Namensraum gehört, in dem keine Seiten möglich sind.", "import-error-invalid": "Seite «$1» wurde nicht importiert, da deren Name ungültig ist.", + "tooltip-pt-login": "Sich anzumelden wird gerne gesehen, ist jedoch nicht zwingend erforderlich.", "tooltip-pt-createaccount": "Wir ermutigen dich ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht zwingend erforderlich.", + "tooltip-ca-edit": "Diese Seite bearbeiten", + "tooltip-ca-history": "Frühere Versionen dieser Seite", "tooltip-search": "{{SITENAME}} durchsuchen", "tooltip-search-go": "Gehe zur Seite mit diesem exakten Namen, falls diese existiert.", "tooltip-search-fulltext": "Durchsuche die Seiten nach diesem Text", "tooltip-p-logo": "Hauptseite aufsuchen", + "tooltip-n-mainpage-description": "Hauptseite besuchen", + "tooltip-n-portal": "Über das Projekt, was du tun kannst, wo was zu finden ist", + "tooltip-n-currentevents": "Hintergrundinformationen zu aktuellen Ereignissen finden", "tooltip-n-recentchanges": "Liste der letzten Änderungen in diesem Wiki", + "tooltip-n-randompage": "Zufällige Seite aufrufen", "tooltip-n-help": "Der Platz um herauszufinden", + "tooltip-t-whatlinkshere": "Eine Liste aller Seiten, die hierher verlinken", + "tooltip-t-recentchangeslinked": "Letzte Änderungen an Seiten, die von hier verlinkt sind", "tooltip-t-emailuser": "Ein E-Mail an diesen Benutzer senden", + "tooltip-t-upload": "Dateien hochladen", "tooltip-t-specialpages": "Liste aller Spezialseiten", + "tooltip-t-print": "Druckansicht dieser Seite", + "tooltip-t-permalink": "Dauerhafter Link zu dieser Seitenversion", "pageinfo-title": "Informationen zu «$1»", "pageinfo-toolboxlink": "Informationen zur Seite", "markedaspatrollederror": "Markierung als «kontrolliert» nicht möglich.", @@ -352,7 +382,7 @@ "external_image_whitelist": " #Diese Zeile nicht verändern.
    \n#Untenstehend können Fragmente regulärer Ausdrücke (der Teil zwischen den //) eingegeben werden.\n#Diese werden mit den URLs von Bildern aus externen Quellen verglichen.\n#Ein positiver Vergleich führt zur Anzeige des Bildes, andernfalls wird das Bild nur als Link angezeigt.\n#Zeilen, die mit einem # beginnen, werden als Kommentar behandelt.\n#Es wird nicht zwischen Gross- und Kleinschreibung unterschieden.\n\n#Fragmente regulärer Ausdrücke nach dieser Zeile eintragen. Diese Zeile nicht verändern.
    ", "feedback-bugornote": "Sofern Du detailliert ein technisches Problem beschreiben möchtest, melde bitte [$1 einen Fehler].\nAnderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kommentar wird, zusammen mit deinem Benutzernamen und der Version des von Dir verwendeten Webbrowsers sowie Betriebssystems, auf der Seite «[$3 $2]» hinzugefügt.", "feedback-thanks": "Vielen Dank. Deine Rückmeldung wurde auf der Seite «[$2 $1]» gespeichert.", - "searchsuggest-search": "Suche", + "searchsuggest-search": "{{SITENAME}} durchsuchen", "api-error-unknown-warning": "Unbekannte Warnung: «$1»", "api-error-unknownerror": "Unbekannter Fehler: «$1»" } diff --git a/languages/i18n/de.json b/languages/i18n/de.json index 7bf7807717..8b1de77242 100644 --- a/languages/i18n/de.json +++ b/languages/i18n/de.json @@ -3577,6 +3577,7 @@ "redirect-file": "Datei", "redirect-logid": "Logbucheintrag", "redirect-not-exists": "Der Wert wurde nicht gefunden", + "redirect-not-numeric": "Der Wert ist nicht numerisch", "fileduplicatesearch": "Dateiduplikatsuche", "fileduplicatesearch-summary": "Suche nach Dateiduplikaten auf Basis ihres Hashwertes.", "fileduplicatesearch-filename": "Dateiname:", diff --git a/languages/i18n/en.json b/languages/i18n/en.json index 18dc51aab4..4d28bd6354 100644 --- a/languages/i18n/en.json +++ b/languages/i18n/en.json @@ -566,6 +566,7 @@ "botpasswords-invalid-name": "The username specified does not contain the bot password separator (\"$1\").", "botpasswords-not-exist": "User \"$1\" does not have a bot password named \"$2\".", "botpasswords-needs-reset": "The bot password for bot name \"$2\" of {{GENDER:$1|user}} \"$1\" must be reset.", + "botpasswords-locked": "You cannot login with a bot password as your account is locked.", "resetpass_forbidden": "Passwords cannot be changed", "resetpass_forbidden-reason": "Passwords cannot be changed: $1", "resetpass-no-info": "You must be logged in to access this page directly.", @@ -1400,8 +1401,8 @@ "rcfilters-activefilters": "Active filters", "rcfilters-activefilters-hide": "Hide", "rcfilters-activefilters-show": "Show", - "rcfilters-activefilters-hide-tooltip": "Hide Active Filters area", - "rcfilters-activefilters-show-tooltip": "Show Active Filters area", + "rcfilters-activefilters-hide-tooltip": "Hide Active filters area", + "rcfilters-activefilters-show-tooltip": "Show Active filters area", "rcfilters-advancedfilters": "Advanced filters", "rcfilters-limit-title": "Results to show", "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|change|changes}}, $2", @@ -1413,7 +1414,7 @@ "rcfilters-highlighted-filters-list": "Highlighted: $1", "rcfilters-quickfilters": "Saved filters", "rcfilters-quickfilters-placeholder-title": "No filters saved yet", - "rcfilters-quickfilters-placeholder-description": "To save your filter settings and reuse them later, click the bookmark icon in the Active Filter area, below.", + "rcfilters-quickfilters-placeholder-description": "To save your filter settings and reuse them later, click the bookmark icon in the Active filters area, below.", "rcfilters-savedqueries-defaultlabel": "Saved filters", "rcfilters-savedqueries-rename": "Rename", "rcfilters-savedqueries-setdefault": "Set as default", @@ -3898,6 +3899,7 @@ "redirect-file": "Filename", "redirect-logid": "Log ID", "redirect-not-exists": "Value not found", + "redirect-not-numeric": "Value not numeric", "fileduplicatesearch": "Search for duplicate files", "fileduplicatesearch-summary": "Search for duplicate files based on hash values.", "fileduplicatesearch-filename": "Filename:", diff --git a/languages/i18n/es.json b/languages/i18n/es.json index 15cab0585f..76962ef3ae 100644 --- a/languages/i18n/es.json +++ b/languages/i18n/es.json @@ -190,7 +190,7 @@ "tog-editsectiononrightclick": "Permitir las modificaciones de sección al hacer clic derecho en sus títulos", "tog-watchcreations": "Añadir a mi lista de seguimiento las páginas que cree y los archivos que suba", "tog-watchdefault": "Añadir a mi lista de seguimiento las páginas y archivos que edite", - "tog-watchmoves": "Añadir las páginas y archivos que mueva a mi lista de seguimiento", + "tog-watchmoves": "Añadir a mi lista de seguimiento las páginas y archivos que mueva", "tog-watchdeletion": "Añadir las páginas y archivos que borre a mi lista de seguimiento", "tog-watchuploads": "Añadir a mi lista de seguimiento los archivos nuevos que suba", "tog-watchrollback": "Añadir a mi lista de seguimiento las páginas en las que haya realizado una reversión", @@ -2380,7 +2380,7 @@ "actioncomplete": "Se ha realizado la acción", "actionfailed": "Ha fallado la acción", "deletedtext": "«$1» ha sido borrado.\nVéase $2 para un registro de los borrados recientes.", - "dellogpage": "Registro de borrado", + "dellogpage": "Registro de borrados", "dellogpagetext": "A continuación se muestra una lista de los borrados más recientes.", "deletionlog": "registro de borrados", "log-name-create": "Registro de creación de páginas", @@ -4197,7 +4197,7 @@ "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 editinterface. Si no comprendes por qué recibes este error, por favor lee [[mw:MediaWiki_1.32/interface-admin]].", + "interfaceadmin-info": "$1\n\nLos permisos para editar los archivos con formato CSS, JS y JSON en todo el sitio han sido recientemente separados del permiso editinterface. 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 <html> si no es en las páginas normales.", "gotointerwiki": "Salir de {{SITENAME}}", "gotointerwiki-invalid": "El título especificado no es válido.", diff --git a/languages/i18n/eu.json b/languages/i18n/eu.json index 7230cae43e..cfd0594f6f 100644 --- a/languages/i18n/eu.json +++ b/languages/i18n/eu.json @@ -391,6 +391,7 @@ "ns-specialprotected": "Ezin dira {{ns:special}} izen-tarteko orrialdeak editatu.", "titleprotected": "[[User:$1|$1]]ek izenburu hau sortzea ekidin zuen.\nEmandako arrazoia $2 izan zen.", "filereadonlyerror": "Ezin izan da \"$1\" fitxategia aldatu, \"$2\" fitxategi bilduma irakrutzeko-bakarrik moduan dagoelako.\n\nBlokeoa ezarri zuen sistema administratzaileak honako arrazoia eman zuen: \"$3\".", + "invalidtitle": "Balio gabeko izenburua", "invalidtitle-knownnamespace": "Izenburua gaizki dago \"$2\" izen eremuan eta \"$3\" testuan", "invalidtitle-unknownnamespace": "Izenburua gaizki dago \"$1\" izen eremuan ezezagunean eta \"$2\" testuan", "exception-nologin": "Saioa hasi gabe", @@ -3384,7 +3385,7 @@ "autosumm-blank": "Orritik eduki guztia ezabatuta", "autosumm-replace": "Orriaren edukiaren ordez, «$1» jarri da", "autoredircomment": "«[[$1]]» orrira birzuzendua", - "autosumm-removed-redirect": "[[$1]]-ra birbideraketa ezabatua", + "autosumm-removed-redirect": "«[[$1]]» orrira zeraman birbideratzea ezabatu da", "autosumm-changed-redirect-target": "Birbideraketaren helburua «[[$1]]» orritik «[[$2]]» orrira aldatu da", "autosumm-new": "Orria sortu da. Edukia: $1", "autosumm-newblank": "Orrialde zuria sortu da", @@ -3514,7 +3515,7 @@ "tag-mw-contentmodelchange-description": "Orri baten [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel change the content model] aldaketak", "tag-mw-new-redirect": "Birbideratze berria", "tag-mw-new-redirect-description": "Birbideratze berri bat sortzen duten aldaketak edo birbidaltzeko orrialdea aldatzen dutenak", - "tag-mw-removed-redirect": "Birbideraketa ezabatua", + "tag-mw-removed-redirect": "Birbideratzea ezabatu da", "tag-mw-removed-redirect-description": "Existitzen den birbidaltze bati ez birbidaltzeko bihurtzen duten aldaketak", "tag-mw-changed-redirect-target": "Birbideraketaren helburua aldatu da", "tag-mw-changed-redirect-target-description": "Birbideraketa baten helburua eraldatzen duten aldaketak", diff --git a/languages/i18n/fi.json b/languages/i18n/fi.json index 5b3f6e8af1..2c09e0b4e3 100644 --- a/languages/i18n/fi.json +++ b/languages/i18n/fi.json @@ -3541,6 +3541,7 @@ "redirect-file": "Tiedostonimi", "redirect-logid": "Lokin tunnistenumero", "redirect-not-exists": "Arvoa ei löytynyt", + "redirect-not-numeric": "Arvo ei numeerinen", "fileduplicatesearch": "Kaksoiskappaleiden haku", "fileduplicatesearch-summary": "Etsii tiedoston kaksoiskappaleita hajautusarvon perusteella.", "fileduplicatesearch-filename": "Tiedostonimi", @@ -4098,6 +4099,7 @@ "edit-error-long": "Virheet:\n\n$1", "revid": "versio $1", "pageid": "sivun tunnistenumero $1", + "interfaceadmin-info": "$1\n\nSivustonlaajuisten CSS/JS/JSON-tiedostojen muokkaamisoikeus erotettiin äskettäin editinterface-oikeudesta. Jos et ymmärrä, miksi saat tämän virheen, katso [[mw:MediaWiki_1.32/interface-admin]].", "rawhtml-notallowed": "<html> komentoa ei voida käyttää normaalien sivujen ulkopuolella.", "gotointerwiki": "Lähdössä {{GRAMMAR:elative|{{SITENAME}}}}", "gotointerwiki-invalid": "Annettu otsikko on virheellinen.", diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json index 2582776256..f60c1365fc 100644 --- a/languages/i18n/fr.json +++ b/languages/i18n/fr.json @@ -3733,6 +3733,7 @@ "redirect-file": "Nom du fichier", "redirect-logid": "ID de journal", "redirect-not-exists": "Valeur non trouvée", + "redirect-not-numeric": "Valeur non numérique", "fileduplicatesearch": "Recherche de doublons", "fileduplicatesearch-summary": "Recherche des copies de fichiers identiques d'après leur empreinte de hachage.", "fileduplicatesearch-filename": "Nom du fichier :", diff --git a/languages/i18n/gcr.json b/languages/i18n/gcr.json index 3d501ac80d..974ddf40d2 100644 --- a/languages/i18n/gcr.json +++ b/languages/i18n/gcr.json @@ -5,16 +5,16 @@ ] }, "tog-underline": "Soulignman dé lyannaj :", - "tog-hideminor": "Maské modifikasyon minò andan modifikasyon résant", - "tog-hidepatrolled": "Maské modifikasyon ki rouli andan modifikasyon résant", + "tog-hideminor": "Maské modifikasyon minò-ya annan modifikasyon résan-yan", + "tog-hidepatrolled": "Maské modifikasyon-yan ki rouli annan modifikasyon résan-yan", "tog-newpageshidepatrolled": "Maské paj ki rouli andan lis dé nouvèl paj", "tog-hidecategorization": "Maské katégorizasyon dé paj", - "tog-extendwatchlist": "Étann lis di swivi pou afiché tout modifikasyon é pa inikman pli résant", - "tog-usenewrc": "Groupé chanjman-yan pa paj andan modifikasyon-yan résant ké lis di swivi-a", + "tog-extendwatchlist": "Étann lis di swivi pou afiché tout modifikasyon-yan é pa inikman pli résan-yan", + "tog-usenewrc": "Groupé chanjman-yan pa paj annan modifikasyon résan-yan é lis di swivi-a", "tog-numberheadings": "Niméroté otomatikman tit di sèksyon", "tog-showtoolbar": "Afiché bar di zouti di édisyon", "tog-editondblclick": "Modifyé paj-ya ké roun doub-klik", - "tog-editsectiononrightclick": "Aktivé modifikasyon-an dé sèksyon pa roun klik drèt asou tit di sèksyon", + "tog-editsectiononrightclick": "Agtivé modifikasyon-an dé sègsyon pa roun klik drèt asou tit-ya di sègsyon", "tog-watchcreations": "Ajouté à mo lis di swivi paj-ya ki mo kréyé é fiché-ya ki mo ka enpòrté", "tog-watchdefault": "Ajouté à mo lis di swivi paj-ya ké fiché-ya ki mo ka modifyé", "tog-watchmoves": "Ajouté paj-ya ké fiché-ya ki mo ka déplasé annan mo lis di swivi", @@ -39,7 +39,7 @@ "tog-watchlisthideliu": "Maské modifikasyon-yan ki fè pa dé itilizatò annan lis di swivi", "tog-watchlistreloadautomatically": "Roucharjé otomatikman lis di swivi-a lò lòpsyon di filtraj sa modifyé (JavaScript réki)", "tog-watchlistunwatchlinks": "Ajouté dé markèr dirèk ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) pou paj-ya swivi ké dé chanjman (JavaScript sa nésésèr pou itilizé fonksyonalité-a)", - "tog-watchlisthideanons": "Maské modifikasyon-yan di itilizatò anonim annan lis di swivi", + "tog-watchlisthideanons": "Maské modifikasyon-yan di itilizatò annonnim annan lis di swivi-a", "tog-watchlisthidepatrolled": "Maské modifikasyon-yan ki rouli annan lis di swivi", "tog-watchlisthidecategorization": "Maské katégorizasyon dé paj", "tog-ccmeonemails": "• Voyé mo roun kopi dé kouryé ki mo ka voyé pou ròt itilizatò", @@ -181,7 +181,7 @@ "viewdeleted_short": "Wè {{PLURAL:$1|roun modifikasyon souprimé|$1 modifikasyon souprimé}}", "protect": "Protéjé", "protect_change": "modifyé", - "unprotect": "Chanjé protèksyon-an", + "unprotect": "Chanjé protègsyon-an", "newpage": "Nouvèl paj", "talkpagelinktext": "diskisyon", "specialpage": "Paj èspésyal", @@ -198,7 +198,7 @@ "viewhelppage": "Wè paj di lèd", "categorypage": "Wè paj di katégori", "viewtalkpage": "Wè paj di diskisyon", - "otherlanguages": "Annan rounòt langaj", + "otherlanguages": "Annan ròt lanng", "redirectedfrom": "(Roudirijé dipi $1)", "redirectpagesub": "Paj di roudirègsyon", "redirectto": "Roudirijé bò'd :", @@ -304,7 +304,7 @@ "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 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 :
    $1", - "missing-article": "Baz-a di data pa trouvé tègs-a di roun paj ki li té divèt trouvé, ki entitilé « $1 » $2.\n\nJénéralman, sala ka sirvini an swivan roun lyannaj bò'd roun dif ki périmen oben bò'd listorik-a di roun paj ki souprimen.\n\nSi a pa sa ki la, zòt pitèt trouvé roun annonmanli annan progranm-an.\nSouplé, signalé li à roun [[Special:ListUsers/sysop|administratò]] é pa bliyé di endiké li URL-a di paj-a.", + "missing-article": "Baz-a di data pa trouvé tègs-a di roun paj ki li té divèt trouvé, ki entitilé « $1 » $2.\n\nJénéralman, sala ka sirvini an swivan roun lyannaj bò'd roun dif ki périmen oben bò'd listorik-a di roun paj ki siprimen.\n\nSi a pa sa ki la, zòt pitèt trouvé roun annonmanli 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 data té otonmatikman vérouyé pannan ki sèrvò-ya ségondèr ka réyaligné yé kò asou sèrvò prensipal-a", @@ -350,7 +350,7 @@ "protectedinterface": "Sa paj ka fourni tègs di lentèrfas pou lojisyèl-a asou sa wiki é sa protéjé pou évité abi-ya.\nPou ajouté oben modifyé dé anmòrfwézaj asou tout wiki, souplé, itilizé [https://translatewiki.net/ translatewiki.net], projè-a di réjyonnalizasyon di MediaWiki.", "editinginterface": "Panga : zòt ka modifiyé oun paj ki itilizé pou kréyé tègs-a di lentèrfas-a di lojisyèl.\nChanjman-yan asou sa paj ké répèrkité yé kò asou laparans-a di lentèrfas itilizatò-a pou ròt itilizatò-ya di sa wiki.", "translateinterface": "Pou ajouté oben modifyé dé anmòrfwézaj pou tout wiki, souplé, itilizé [https://translatewiki.net/ translatewiki.net], projè-a di lokalizasyon lengwistik di MediaWiki.", - "cascadeprotected": "Sa paj protéjé kont modifikasyon-yan pas li sa transkliz pa {{PLURAL:$1|paj-a ki ka swiv, ki té protéjé|paj-ya ki ka swiv, ki té protéjé}} ké lòpsyon « protèksyon an kaskad » aktivé :\n$2", + "cascadeprotected": "Sa paj protéjé kont modifikasyon-yan pas li sa transkliz pa {{PLURAL:$1|paj-a ki ka swiv, ki té protéjé|paj-ya ki ka swiv, ki té protéjé}} ké lòpsyon « protègsyon an kaskad » agtivé :\n$2", "namespaceprotected": "Zòt pa gen pèrmisyon-an di modifyé paj-ya di lèspas di non « $1 ».", "customcssprotected": "Zòt pa gen pèrmisyon-an di modifyé sa féy di stil CSS, pas li ka kontni paramèt pèrsonèl di rounòt itilizatò.", "customjsonprotected": "Zòt pa gen drwè di modifyé sa paj JSON pas li ka kontni paramèt pèrsonèl di rounòt itilizatò.", @@ -395,7 +395,7 @@ "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.", + "cannotcreateaccount-text": "Kréyasyon-an dirèk di kont itilizatò pa fika agtivé asou sa wiki.", "yourdomainname": "Zòt domenn :", "password-change-forbidden": "Zòt pa pouvé modifyé mo di pas asou sa wiki.", "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.", @@ -430,7 +430,7 @@ "createacct-benefit-heading": "{{SITENAME}} sa ékri pa dé moun kou zòt.", "createacct-benefit-body1": "modifikasyon{{PLURAL:$1|}}", "createacct-benefit-body2": "paj{{PLURAL:$1|}}", - "createacct-benefit-body3": "{{PLURAL:$1|kontribitò résant}}", + "createacct-benefit-body3": "{{PLURAL:$1|kontribitò résan}}", "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.", @@ -439,7 +439,7 @@ "createaccounterror": "Enposib di kréyé kont-a : $1", "nocookiesnew": "Kont itilizatò-a 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ò.", + "nocookiesfornew": "Kont itilizatò-a pa té fika kréyé, pas nou pa té pouvé idantifyé so lorijin.\nVérifyé ki zòt agtivé témwen-yan (''cookies''), roucharjé paj-a é éséyé òkò.", "nocookiesforlogin": "{{int:nocookieslogin}}", "createacct-loginerror": "Kont-a byen té 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.", @@ -517,7 +517,7 @@ "botpasswords-label-delete": "Souprimé", "botpasswords-label-resetpassword": "Réyinisyalizé mo di pas", "botpasswords-label-grants": "Drwè aplikab :", - "botpasswords-help-grants": "Otorizasyon-yan ka pèrmèt di aksédé o drwè ki déja akòrdé à zòt kont itilizatò. Aktivé roun otorizasyon isi ka fourni laksè à pyès drwè ki zòt kont itilizatò pa gen dayò. Wè [[Special:ListGrants|tablo dé otorizasyon]] pou plis d’enfòrmasyon.", + "botpasswords-help-grants": "Lotorizasyon-yan ka pèrmèt di agsédé o drwè ki déja akòrdé à zòt kont itilizatò. Agtivé roun lotorizasyon isi ka fourni lagsè à pyès drwè ki zòt kont itilizatò péké ganyen dayò. Wè [[Special:ListGrants|tablo dé lotorizasyon]] pou plis di lenfòrmasyon.", "botpasswords-label-grants-column": "Akòrdé", "botpasswords-bad-appid": "Non-an di robo « $1 » pa valid.", "botpasswords-insert-failed": "Échèk di ajou-a di non di robo « $1 ». Ès i té ja ajouté ?", @@ -625,7 +625,7 @@ "permissionserrors": "Éròr di pèrmisyon", "permissionserrorstext-withaction": "Zòt pa pouvé $2, pou {{PLURAL:$1|rézon swivant}} :", "recreate-moveddeleted-warn": "Panga : zòt ka roukréyé oun paj ki té présédaman souprimé.\n\nAsouré-zòt ki li sa pertinan di pourswiv modifikasyon-yan asou sa paj.\nJournal dé souprésyon é dé déplasman pou sa paj sa afiché anba à tit di enfòrmasyon :", - "moveddeleted-notice": "Sa paj té souprimé. \nJournal dé souprésyon, dé protèksyon é dé déplasman di paj-a sa afiché anba pou référans.", + "moveddeleted-notice": "Sa paj té siprimen. \nJournal-ya dé siprésyon, dé protègsyon é dé déplasman pou paj-a sa afiché anba pou référans.", "content-model-wikitext": "wikitèks", "undo-failure": "Sa modifikasyon pa pouvé défèt : sala ké antré an konfli ké modifikasyon entèrmédjèr-ya.", "viewpagelogs": "Wè opérasyon-yan asou sa paj", @@ -637,10 +637,10 @@ "currentrevisionlink": "Wè vèrsyon atchwèl-a", "cur": "atch", "last": "dif", - "histlegend": "Sélèksyon di diff : koché bouton radjo-ya dé vèrsyon à konparé é apiyé asou antré oben asou bouton-an ki anba.
    \nLéjann : ({{int:cur}}) = diférans ké dannyé vèrsyon-an, ({{int:last}}) = diférans ké vèrsyon présédant-a, {{int:minoreditletter}} = modifikasyon minò.", + "histlegend": "Sélègsyon di diff : koché bouton radjo-ya dé vèrsyon à konparé é apiyé asou antré oben asou bouton-an ki anba.
    \nLéjann : ({{int:cur}}) = diférans ké dannyé vèrsyon-an, ({{int:last}}) = diférans ké vèrsyon présédan-an, {{int:minoreditletter}} = modifikasyon minò.", "history-fieldset-title": "Sasé dé révizyon", "histfirst": "Pli ansyenn", - "histlast": "Pli résant", + "histlast": "Pli résan-yan", "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", @@ -693,8 +693,8 @@ "action-edit": "modifyé sa paj", "action-createaccount": "kréyé sa kont itilizatò", "enhancedrc-history": "listorik", - "recentchanges": "Modifikasyon résant", - "recentchanges-legend": "Lòpsyon dé modifikasyon résant", + "recentchanges": "Modifikasyon résan", + "recentchanges-legend": "Lòpsyon dé modifikasyon résan", "recentchanges-summary": "Swiv chanjman-yan pli résan wiki asou sa paj.", "recentchanges-noresult": "Pyès modifikasyon ka korèsponn à sa kritèr asou péryòd endiké.", "recentchanges-feed-description": "Swivé dannyé modifikasyon-yan di wiki andan sa flux.", @@ -716,7 +716,7 @@ "rcshowhideliu": "$1 itilizatò anréjistré", "rcshowhideliu-show": "Afiché", "rcshowhideliu-hide": "Maské", - "rcshowhideanons": "$1 itilizatò anonim-ya", + "rcshowhideanons": "$1 itilizatò annonnim-yan", "rcshowhideanons-show": "Afiché", "rcshowhideanons-hide": "Maské", "rcshowhidepatr": "$1 modifikasyon sirvéyé", @@ -776,7 +776,7 @@ "listusers": "Lis dé itilizatò", "newpages": "Nouvèl paj", "move": "Rounonmen", - "pager-newer-n": "{{PLURAL:$1|1 pli résant|$1}}", + "pager-newer-n": "{{PLURAL:$1|1 pli résan|$1}}", "pager-older-n": "{{PLURAL:$1|1 pli ansyenn|$1}}", "booksources": "Ouvraj di référans", "booksources-search-legend": "Sasé parmi dé ouvraj di référans", @@ -809,14 +809,14 @@ "dellogpage": "Journal dé souprésyon", "rollbacklink": "révoké", "rollbacklinkcount": "révoké $1 {{PLURAL:$1|modifikasyon}}", - "protectlogpage": "Journal dé protèksyon", + "protectlogpage": "Journal dé protègsyon", "protectedarticle": "protéjé « [[$1]] »", - "modifiedarticleprotection": "modifyé nivo di protèksyon di « [[$1]] »", + "modifiedarticleprotection": "modifyé nivo-a di protègsyon di « [[$1]] »", "protect-default": "Otorizé tout itilizatò-ya", "restriction-edit": "Modifyé", "restriction-move": "Rounonmen", "namespace": "Lèspas di non", - "invert": "Envèrsé sélèksyon-an", + "invert": "Envèrsé sélègsyon-an", "tooltip-invert": "Koché sa kaz pou kaché modifikasyon-yan dé paj annan lèspas di non sélèksyoné (ké lèspas di non asosyé si koché)", "namespace_association": "Lèspas di non asosyé", "tooltip-namespace_association": "Koché sa kaz pou enkli égalman lèspas di non di diskisyon oben di sijè, ki asosyé à lèspas di non ki sélèksyoné", @@ -895,11 +895,11 @@ "tooltip-n-mainpage-description": "Paj prensipal jénéral", "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-recentchanges": "Lis dé modifikasyon résan asou wiki-a", "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-t-recentchangeslinked": "Lis dé modifikasyon résan ki lyannen ké sa paj", "tooltip-feed-atom": "Flux Atom pou sa paj", "tooltip-t-contributions": "Wè lis dé kontribisyon di {{GENDER:$1|sa itilizatò|sa itilizatris}}", "tooltip-t-emailuser": "Voyé roun kouryé à {{GENDER:$1|sa itilizatò|sa itilizatris}}", @@ -928,13 +928,13 @@ "pageinfo-title": "Enfòrmasyon pou « $1 »", "pageinfo-header-basic": "Enfòrmasyon di baz", "pageinfo-header-edits": "Listorik dé modifikasyon", - "pageinfo-header-restrictions": "Protèksyon di paj-a", + "pageinfo-header-restrictions": "Protègsyon di paj-a", "pageinfo-header-properties": "Propriyété di paj-a", "pageinfo-display-title": "Tit afiché", "pageinfo-default-sort": "Klé di tri pa défo", "pageinfo-length": "Tay di paj-a (an ògtè)", "pageinfo-article-id": "Niméro di paj-a", - "pageinfo-language": "Langaj di kontni di paj-a", + "pageinfo-language": "Lanng di kontni di paj-a", "pageinfo-content-model": "Modèl di kontni di paj-a", "pageinfo-robot-policy": "Endèksasyon pa robo", "pageinfo-robot-index": "Otorizé", @@ -950,8 +950,8 @@ "pageinfo-lasttime": "Dat di dannyé modifikasyon", "pageinfo-edits": "Nonm total di modifikasyon", "pageinfo-authors": "Nonm total di otò distenk", - "pageinfo-recent-edits": "Nonm di modifikasyon résant (annan dannyé $1)", - "pageinfo-recent-authors": "Nonm di otò distenk résant", + "pageinfo-recent-edits": "Nonm di modifikasyon résan (annan dannyé-ya $1)", + "pageinfo-recent-authors": "Nonm di lotò distenk résan", "pageinfo-magic-words": "{{PLURAL:$1|Mo majik}} ($1)", "pageinfo-hidden-categories": "{{PLURAL:$1|Katégori kaché|}} ($1)", "pageinfo-templates": "{{PLURAL:$1|Modèl enkli}} ($1)", @@ -988,6 +988,7 @@ "exif-exposureprogram-1": "Manniyèl", "namespacesall": "tout", "monthsall": "tout", + "confirm-purge-title": "Prijé sa paj", "imgmultipagenext": "paj swivant →", "imgmultigo": "Aksédé !", "imgmultigoto": "Alé koté paj $1", diff --git a/languages/i18n/gl.json b/languages/i18n/gl.json index d964196644..4f8282a6d4 100644 --- a/languages/i18n/gl.json +++ b/languages/i18n/gl.json @@ -382,9 +382,9 @@ "customcssprotected": "Non ten os permisos necesarios para modificar esta páxina de CSS, dado que contén a configuración persoal doutro usuario.", "customjsonprotected": "Non ten os permisos necesarios para modificar esta páxina JSON xa que contén a configuración persoal doutro usuario.", "customjsprotected": "Non ten os permisos necesarios para modificar esta páxina de JavaScript, dado que contén a configuración persoal doutro usuario.", - "sitecssprotected": "Non ten permiso para editar esta páxina CSS xa que pode afectar a tódolos visitantes", - "sitejsonprotected": "Non ten permiso para editar esta páxina JSON xa que pode afectar a tódolos visitantes", - "sitejsprotected": "Non ten permiso para editar esta páxina JavaScript xa que pode afectar a tódolos visitantes", + "sitecssprotected": "Non ten permiso para editar esta páxina CSS xa que isto pode afectar a tódolos visitantes.", + "sitejsonprotected": "Non ten permiso para editar esta páxina JSON xa que isto pode afectar a tódolos visitantes.", + "sitejsprotected": "Non ten permiso para editar esta páxina JavaScript xa que isto pode afectar a tódolos visitantes.", "mycustomcssprotected": "Non ten os permisos necesarios para editar esta páxina de CSS.", "mycustomjsonprotected": "Non ten permisos para editar esta páxina JSON.", "mycustomjsprotected": "Non ten os permisos necesarios para editar esta páxina de JavaScript.", @@ -3560,6 +3560,7 @@ "redirect-file": "Nome de ficheiro", "redirect-logid": "Identificador de rexistro", "redirect-not-exists": "Non se atopou o valor", + "redirect-not-numeric": "Valor non numérico", "fileduplicatesearch": "Procurar ficheiros duplicados", "fileduplicatesearch-summary": "Procurar ficheiros duplicados a partir do valor de hash (un mecanismo de comprobación).", "fileduplicatesearch-filename": "Nome do ficheiro:", @@ -4117,7 +4118,7 @@ "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 os ficheiros CSS/JS/JSON separáronse recentemente do dereito editinterface. Se non comprende porqué está vendo este erro, vexa [[mw:MediaWiki_1.32/interface-admin]].", + "interfaceadmin-info": "$1\n\nOs permisos para editar os ficheiros CSS/JS/JSON globais separáronse recentemente do dereito editinterface. Se non comprende porqué está vendo este erro, vexa [[mw:MediaWiki_1.32/interface-admin]].", "rawhtml-notallowed": "As marcas <html> non poden usarse fóra das páxinas normais.", "gotointerwiki": "Deixando {{SITENAME}}", "gotointerwiki-invalid": "O título especificado non é válido.", diff --git a/languages/i18n/gsw.json b/languages/i18n/gsw.json index 7554e128d6..0e4d71fd8a 100644 --- a/languages/i18n/gsw.json +++ b/languages/i18n/gsw.json @@ -638,7 +638,7 @@ "token_suffix_mismatch": "'''Dyyni Bearbeitig isch zruckgwise wore, wel Dyy Browser Zeiche im Bearbeite-Token verstimmlet het.\nS Spichere cha dr Inhalt vu dr Syte hii mache. Des git s e mänkmol, wänn eber e anonyme Proxy-Dienscht brucht, wu Fähler macht.'''", "edit_form_incomplete": "'''Dr Inhalt vum Bearbeitigsformular isch nit vollständig zum Server chuu. Bitte prief Dyy Bearbeitigen uf Vollständigkeit un versuech s nomol.'''", "editing": "Bearbeite vo «$1»", - "creating": "Am Aalege vu „$1“", + "creating": "„$1“ aalege", "editingsection": "Bearbeite vo «$1» (Absatz)", "editingcomment": "Bearbeite vu $1 (Neje Abschnitt)", "editconflict": "Bearbeitigs-Konflikt: «$1»", diff --git a/languages/i18n/he.json b/languages/i18n/he.json index fc7756e75b..924077c9e3 100644 --- a/languages/i18n/he.json +++ b/languages/i18n/he.json @@ -3587,6 +3587,7 @@ "redirect-file": "שם קובץ", "redirect-logid": "מזהה יומן", "redirect-not-exists": "הערך לא נמצא", + "redirect-not-numeric": "הערך אינו מספרי", "fileduplicatesearch": "חיפוש קבצים כפולים", "fileduplicatesearch-summary": "חיפוש קבצים כפולים על בסיס ערכי הגיבוב שלהם.", "fileduplicatesearch-filename": "קובץ:", diff --git a/languages/i18n/hr.json b/languages/i18n/hr.json index a28d22adb4..1557e56b5b 100644 --- a/languages/i18n/hr.json +++ b/languages/i18n/hr.json @@ -1283,6 +1283,8 @@ "rcfilters-activefilters": "Aktivni filtri", "rcfilters-activefilters-hide": "Skrij", "rcfilters-activefilters-show": "Pokaži", + "rcfilters-activefilters-hide-tooltip": "Sakrij aktivne filtre", + "rcfilters-activefilters-show-tooltip": "Pokaži aktivne filtre", "rcfilters-advancedfilters": "Napredni filtri", "rcfilters-limit-title": "Rezultata za prikaz", "rcfilters-limit-and-date-label": "{{PLURAL:$1|$1 izmjena|$1 izmjene|$1 izmjena}}, $2", @@ -1391,6 +1393,9 @@ "rcfilters-preference-help": "Vraća natrag stanje prije redizajna sučelja 2017., te svih oruđa dodanih tada i poslije toga.", "rcfilters-watchlist-preference-label": "Sakrij poboljšanu inačicu popisa praćenja", "rcfilters-watchlist-preference-help": "Vraća natrag stanje prije redizajna sučelja 2017., te svih oruđa dodanih tada i poslije toga.", + "rcfilters-filter-showlinkedfrom-label": "Prikaži promjene na povezanim stranicama", + "rcfilters-filter-showlinkedfrom-option-label": "Stranice na koje se povezuje izabrana stranica", + "rcfilters-filter-showlinkedto-option-label": "Stranice koje povezuju na izabranu stranicu", "rcnotefrom": "Ispod {{PLURAL:$5|je izmjena|su izmjene}} od $3, $4 (prikazano ih do $1).", "rclistfromreset": "Vrati na zadano izbor datuma", "rclistfrom": "Prikaži nove promjene počevši od $3 $2", diff --git a/languages/i18n/hu.json b/languages/i18n/hu.json index 3e79a2eb76..6f2dac31f1 100644 --- a/languages/i18n/hu.json +++ b/languages/i18n/hu.json @@ -1223,6 +1223,9 @@ "right-editusercss": "más felhasználók CSS fájljainak szerkesztése", "right-edituserjson": "Más felhasználók JSON fájljainak szerkesztése", "right-edituserjs": "más felhasználók JS fájljainak szerkesztése", + "right-editsitecss": "CSS-lapok szerkesztése", + "right-editsitejson": "JSON-lapok szerkesztése", + "right-editsitejs": "JavaScript-lapok szerkesztése", "right-editmyusercss": "Saját szerkesztői CSS-fájlok szerkesztése", "right-editmyuserjson": "Saját szerkesztői JSON-fájlok szerkesztése", "right-editmyuserjs": "saját szerkesztői JavaScript-fájlok szerkesztése", @@ -1264,10 +1267,11 @@ "grant-createaccount": "fiókok létrehozása", "grant-createeditmovepage": "lapok létrehozása, szerkesztése és átnevezése", "grant-delete": "lapok, lapváltozatok és naplóbejegyzések törlése", - "grant-editinterface": "MediaWiki-névtér és felhasználói CSS/JSON/JavaScript szerkesztése", + "grant-editinterface": "MediaWiki-névtér és JSON-lapok szerkesztése", "grant-editmycssjs": "Felhasználói CSS-ed/JSON-od/JavaScripted szerkesztése", "grant-editmyoptions": "felhasználói beállításaid módosítása", "grant-editmywatchlist": "figyelőlista szerkesztése", + "grant-editsiteconfig": "CSS/JS-lapok szerkesztése", "grant-editpage": "létező lapok szerkesztése", "grant-editprotected": "védett lapok szerkesztése", "grant-highvolume": "nagy mennyiségű szerkesztés", @@ -1807,9 +1811,9 @@ "filehist-filesize": "Fájlméret", "filehist-comment": "Megjegyzés", "imagelinks": "Fájlhasználat", - "linkstoimage": "Az alábbi {{PLURAL:$1|lap hivatkozik|lapok hivatkoznak}} erre a fájlra:", - "linkstoimage-more": "Több mint $1 oldal hivatkozik erre a fájlra.\nA következő lista csak az {{PLURAL:$1|első linket|első $1 linket}} tartalmazza.\nA teljes lista [[Special:WhatLinksHere/$2|ezen a lapon]] található meg.", - "nolinkstoimage": "Erre a fájlra nem hivatkozik lap.", + "linkstoimage": "Az alábbi {{PLURAL:$1|lap használja|lapok használják}} ezt a fájlt:", + "linkstoimage-more": "Több mint $1 oldal használja ezt a fájlt.\nA következő lista csak a fájlt használó {{PLURAL:$1|első|első $1}} lapot mutatja.\nA teljes lista [[Special:WhatLinksHere/$2|ezen a lapon]] található meg.", + "nolinkstoimage": "Ezt a fájlt nem használja egyetlen lap sem.", "morelinkstoimage": "[[Special:WhatLinksHere/$1|További hivatkozások]] megtekintése", "linkstoimage-redirect": "$1 (fájlátirányítás) $2", "duplicatesoffile": "A következő {{PLURAL:$1|fájl|$1 fájl}} ennek a fájlnak a duplikátuma ([[Special:FileDuplicateSearch/$2|további részletek]]):", @@ -3367,6 +3371,7 @@ "confirm-rollback-top": "Visszavonod a változtatásokat?", "confirm-mcrundo-title": "Egy változtatás visszavonva", "mcrundofailed": "A visszavonás nem sikerült", + "mcrundo-missingparam": "Kötelező paraméterek hiányoznak a kérésből.", "ellipsis": "…", "quotation-marks": "„$1”", "imgmultipageprev": "← előző oldal", @@ -4039,6 +4044,7 @@ "edit-error-long": "Hibák:\n\n$1", "revid": "$1 változat", "pageid": "$1 lapazonosító", + "interfaceadmin-info": "$1\n\nA CSS/JS/JSON lapok szerkesztéséhez szükséges jogosultság a közelmúltban elválasztásra került a editinterface jogtól. Amennyiben nem érted, miért látod ezt az üzenetet, [[mw:MediaWiki_1.32/interface-admin|itt tudhatsz meg többet]].", "rawhtml-notallowed": "<html> címkék nem használhatók normál lapokon kívül.", "gotointerwiki": "{{SITENAME}} elhagyása", "gotointerwiki-invalid": "A megadott cím érvénytelen.", diff --git a/languages/i18n/hy.json b/languages/i18n/hy.json index d6c6350201..d759491d93 100644 --- a/languages/i18n/hy.json +++ b/languages/i18n/hy.json @@ -1799,6 +1799,7 @@ "tooltip-feed-atom": "Այս էջի Ատոմ սնուցումը", "tooltip-t-contributions": "Դիտել {{GENDER:$1|այս մասնակցի}} ներդրումների ցանկը", "tooltip-t-emailuser": "Ուղարկել էլ․ նամակ {{GENDER:$1|այս մասնակցին}}", + "tooltip-t-info": "Վիճակագրական տվյալներ էջի մասին", "tooltip-t-upload": "Բեռնել ֆայլեր", "tooltip-t-specialpages": "Բոլոր սպասարկող էջերի ցանկը", "tooltip-t-print": "Այս էջի տպելու տարբերակ", diff --git a/languages/i18n/io.json b/languages/i18n/io.json index 0c1916f6ed..7df629bc27 100644 --- a/languages/i18n/io.json +++ b/languages/i18n/io.json @@ -362,6 +362,8 @@ "customcssprotected": "Vu ne es permisita redaktar ita CSS pagino nam ol kontenas personal ajustaji di altra uzero.", "customjsonprotected": "Vu ne havas permiso por redaktar ica pagino JSON pro ke ol kontenas personal ajustaji di altra uzero.", "customjsprotected": "Vu ne es permisita redaktar ita JavaScript pagino nam ol kontenas personal ajustaji di altra uzero.", + "sitecssprotected": "Vu ne havas permiso pri redaktar ica pagino CSS pro ol povus afektor omna viziteri.", + "sitejsonprotected": "Vu ne povas redaktar ica JSON (JavaScript Object Notation), pro ol povas afektar omna viziteri.", "sitejsprotected": "Vu ne povas redaktar ica JavaScript, pro ol povas afektar omna viziteri.", "mycustomcssprotected": "Vu ne es permisita redaktar ita CSS pagino.", "mycustomjsonprotected": "Vu ne es permisita redaktar ita pagino JSON.", @@ -523,14 +525,19 @@ "botpasswords-label-delete": "Efacar", "botpasswords-label-resetpassword": "Sendez nova pasovorto per e-posto", "botpasswords-label-grants": "Uzebla grantaji:", + "botpasswords-help-grants": "Permisas aceso al yuri quin vua uzero-konto ja havas. Permisar ulo hike furnisos nula altra aceso por altra yuri quin vua konto altramaniere ne havus. Videz la [[Special:ListGrants|tabelo pri permisi]] por plusa informi.", "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-update-failed": "Ne povis rinomizar la 'bot' nomizita \"$1\". Kad ol efacesis?", "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", "botpasswords-updated-body": "La pasovorto por la 'bot' nomizita \"$1\" del {{GENDER:$2|uzero}} \"$2\" kreesis.", "botpasswords-deleted-title": "La pasovorto por la 'bot' efacesis", + "botpasswords-deleted-body": "La pasovorto por la 'bot' nomizita \"$1\" del {{GENDER:$2|uzero}} \"$2\" kreesis.", + "botpasswords-not-exist": "L'uzero \"$1\" ne havas pasovorto nomizita \"$2\" por lua 'bot'.", + "botpasswords-needs-reset": "La pasovorto por la 'bot' nomizita \"$1\" dal {{GENDER:$2|uzero}} \"$2\" mustas rikreesar.", "resetpass_forbidden": "La pasovorti ne povas chanjesar", "resetpass_forbidden-reason": "Pasovorti ne povas chanjesar: $1", "resetpass-no-info": "Vu mustas enirar la konto por acesar ita pagino direte.", @@ -547,13 +554,16 @@ "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-emaildisabled": "La funcioni di e-posto (e-mail) blokusesis en ica Wiki.", "passwordreset-username": "Uzantonomo:", "passwordreset-domain": "Interreto-domeno:", "passwordreset-email": "E-postal adreso:", "passwordreset-emailtitle": "Detali pri la konto en {{SITENAME}}", "passwordreset-emailtext-ip": "Ulu (probable vu, de la IP-adresO $1) demandis la remplaso di la pasovorto por {{SITENAME}} ($4). La sequanta {{PLURAL:$3|konto|konti}} esas asociita kun ta adreso di e-posto:\n\n$2\n\nIca tempala {{PLURAL:$3| pasovorto|pasovorti}} perdos la valideso pos {{PLURAL:$5|un dio|$5 dii}}.\nTu mustas facar 'log in' e selektar nova pasovorto nemediate. Se altra persono facis ica demando, o se vu rimemoris l'antea pasovorto e ne pluse bezonas modifikor ol, vu povas ignorar ica mesajo e durar l'uzo dil antea pasovorto.", + "passwordreset-emailtext-user": "Ulu (posible vu, de la IP-adreso $1) demandis la remplaso di la pasovorto por {{SITENAME}} ($4). La sequanta {{PLURAL:$3|konto|konti}} esas asociita kun ta adreso di e-posto:\n\n$2\n\nIca tempala {{PLURAL:$3| pasovorto|pasovorti}} perdos la valideso pos {{PLURAL:$5|un dio|$5 dii}}.\nTu mustas facar 'log in' e selektar nova pasovorto nemediate. Se altra persono facis ica demando, o se vu rimemoris l'antea pasovorto e ne pluse bezonas modifikor ol, vu povas ignorar ica mesajo e durar l'uzo dil antea pasovorto.", "passwordreset-emailelement": "Uzantonomo:\n$1\n\nProvizora pasovorto:\n$2", "passwordreset-emailsentemail": "Se ica e-posto esas asociita kun vua konto, do la nova pasovorto sendesos a vu per e-posto.", + "passwordreset-emailsentusername": "Se ica e-posto esas asociita kun vua konto, do la nova pasovorto sendesos a vu per e-posto.", "passwordreset-nocaller": "Ula demandero mustas furnisesar", "passwordreset-nosuchcaller": "La demandero ne existas: $1", "passwordreset-invalidemail": "Ne-valida e-posto-adreso", @@ -637,9 +647,15 @@ "noarticletext-nopermission": "Til nun ne existas texto en ica pagino.\nVu povas [[Special:Search/{{PAGENAME}}|serchar ica titulo]] en altra pagini, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serchar en la relata registri], o [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaktar ica pagino], tamen vu ne havas permiso por krear ica pagino.", "userpage-userdoesnotexist": "Uzeronomo \"$1\" ne registragesis.\nVoluntez konfirmar se vu volas krear/redaktar ica pagino.", "userpage-userdoesnotexist-view": "L'uzeronomo \"$1\" ne enrejistresis.", + "blocked-notice-logextract": "Ica uzero nun esas blokusita.\nLa lasta protokolo pri blokuso esas videbla adinfre, por refero:", "clearyourcache": "Atencez: Pos registragar, vu probable mustas renovigar la tempala-magazino di vua navigilo por vidar la chanji.\n* Firefox / Safari:Tenez Shift kliktante Reload, o presez sive Ctrl-F5 sive Ctrl-R (⌘-R ye Mac);\n* Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R en komputeri Mac)\n* Internet Explorer: Tenez Ctrl kliktante Refresh, o presez Ctrl-F5\n* Opera: Irez a Menu → Settings (Opera → Preferences ye komputeri Mac) e pose a Privacy & security → Clear browsing data → Cached images and files.", + "usercssyoucanpreview": "Sugestajo: Uzez la butono \"{{int:showpreview}}\" por probar vua nova stilo CSS ante konservar ol.", + "userjsonyoucanpreview": "Sugestajo: Uzes la butono \"{{int:showpreview}}\" por provar vua nova JSON ante konservar ol.", + "userjsyoucanpreview": "Sugestajo: Uzes la butono \"{{int:showpreview}}\" por probar vua JavaScript ante konservar ol.", "usercsspreview": "'''Memorez ke vu nur previdas vua uzero-CSS.'''\n'''Ol ne registragesis ankore!'''", + "userjsonpreview": "Memorez ke vu nur previdas vua JSON (JavaScript Object Notation). Ol ankore ne konservesis!", "userjspreview": "'''Memorez ke vu nur previdas vua JavaScript di uzero. Ol ne registragesis ankore!'''", + "sitecsspreview": "Memorez ke vu nur previdas vua uzero-CSS. Ol ankore ne konservesis!", "updated": "(Aktualigita)", "note": "'''Noto:'''", "previewnote": "Atencez ke ico esas nur prevido. Ol ne registragesis ankore!", @@ -1723,6 +1739,7 @@ "autosumm-blank": "Pagino vakuigesis", "autosumm-replace": "Kontenajo remplasigesis kun '$1'", "autoredircomment": "Ridirektas a [[$1]]", + "autosumm-changed-redirect-target": "Chanjis la ridirektilo de [[$1]] a [[$2]]", "autosumm-new": "Pagino kreesis kun '$1'", "autosumm-newblank": "Kreita vakua pagino", "watchlistedit-normal-title": "Modifikez surveyo-listo", diff --git a/languages/i18n/it.json b/languages/i18n/it.json index f7e84411b4..b6541f82fc 100644 --- a/languages/i18n/it.json +++ b/languages/i18n/it.json @@ -3552,6 +3552,7 @@ "redirect-file": "Nome del file", "redirect-logid": "ID registro", "redirect-not-exists": "Valore non trovato", + "redirect-not-numeric": "Valore non numerico", "fileduplicatesearch": "Ricerca dei file duplicati", "fileduplicatesearch-summary": "Ricerca di eventuali duplicati del file in base al valore di ''hash''.", "fileduplicatesearch-filename": "Nome del file:", diff --git a/languages/i18n/ja.json b/languages/i18n/ja.json index b0b566c5fb..a351ededdd 100644 --- a/languages/i18n/ja.json +++ b/languages/i18n/ja.json @@ -92,7 +92,8 @@ "Yusuke1109", "Afaz", "Oxbqskeptzwizkgdcxakhnrb", - "Suyama" + "Suyama", + "고솜" ] }, "tog-underline": "リンクの下線:", @@ -2086,6 +2087,7 @@ "apisandbox-dynamic-parameters-add-label": "引数の追加", "apisandbox-dynamic-parameters-add-placeholder": "引数名", "apisandbox-dynamic-error-exists": "引数名 \"$1\" は既に存在しています。", + "apisandbox-templated-parameter-reason": "この[[Special:ApiHelp/main#main/templatedparams|テンプレートパラメータ]]は、$2の{{PLURAL:$1|値}}に基づいて提供されます。", "apisandbox-deprecated-parameters": "廃止予定の引数", "apisandbox-fetch-token": "トークンを自動入力します", "apisandbox-add-multi": "追加", @@ -3746,6 +3748,7 @@ "redirect-file": "ファイル名", "redirect-logid": "記録 ID", "redirect-not-exists": "値が見つかりません", + "redirect-not-numeric": "値が数字ではありません", "fileduplicatesearch": "重複ファイルの検索", "fileduplicatesearch-summary": "重複ファイルをハッシュ値に基づいて検索します。", "fileduplicatesearch-filename": "ファイル名:", @@ -4000,10 +4003,10 @@ "logentry-managetags-deactivate": "$1 がタグ \"$4\" の利用者およびボットによる使用を{{GENDER:$2|無効化しました}}。", "log-name-tag": "タグ記録", "log-description-tag": "このページには、個々の版または記録項目から、いつ利用者が[[Special:Tags|タグ]]を追加または削除したかが記録されます。編集、削除、または同様の操作の一部として発生したタグ付けは記録には表示されません。", - "logentry-tag-update-add-revision": "$1 がページ $3 の版 $4 に{{PLURAL:$7|タグ}} $6 を{{GENDER:$2|追加しました}}", - "logentry-tag-update-add-logentry": "$1 がページ $3 の記録項目 $5 に{{PLURAL:$7|タグ}} $6 を{{GENDER:$2|追加しました}}", + "logentry-tag-update-add-revision": "$1 がページ「$3」の版 $4 に{{PLURAL:$7|タグ}} $6 を{{GENDER:$2|追加しました}}", + "logentry-tag-update-add-logentry": "$1 がページ「$3」の記録項目 $5 に{{PLURAL:$7|タグ}} $6 を{{GENDER:$2|追加しました}}", "logentry-tag-update-remove-revision": "$1 がページ $3 の版 $4 から{{PLURAL:$9|タグ}} $8 を{{GENDER:$2|除去しました}}", - "logentry-tag-update-remove-logentry": "$1 がページ $3 の記録項目 $5 から{{PLURAL:$9|タグ}} $8 を{{GENDER:$2|除去しました}}", + "logentry-tag-update-remove-logentry": "$1 がページ「$3」の記録項目 $5 から{{PLURAL:$9|タグ}} $8 を{{GENDER:$2|除去しました}}", "logentry-tag-update-revision": "$1 がページ「$3」の版 $4 のタグを{{GENDER:$2|更新しました}} ($6 を{{PLURAL:$7|追加}}、$8 を{{PLURAL:$9|削除}})", "logentry-tag-update-logentry": "$1 がページ「$3」の記録項目 $5 のタグを{{GENDER:$2|更新しました}} ($6 を{{PLURAL:$7|追加}}、$8 を{{PLURAL:$9|削除}})", "rightsnone": "(なし)", @@ -4067,6 +4070,7 @@ "limitreport-expensivefunctioncount-value": "$1/$2", "limitreport-unstrip-depth": "\"unstrip\" を再帰的に実行する回数", "limitreport-unstrip-depth-value": "$1/$2", + "limitreport-unstrip-size": "展開後読み込み量を解除する", "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|バイト}}", "expandtemplates": "テンプレートを展開", "expand_templates_intro": "この特別ページは、入力したウィキテキストに含まれるすべてのテンプレートを再帰的に展開します。\n{{#language:…}} のようなパーサー関数や、\n{{CURRENTDAY}} のような変数も展開します。\nつまり、二重中括弧で囲まれたものほぼすべてを展開します。", @@ -4311,7 +4315,7 @@ "edit-error-long": "エラー:\n\n\n\n$1", "revid": "版 $1", "pageid": "ページID $1", - "interfaceadmin-info": "$1\n\nサイト全体のCSS/JavaScriptの編集権限は、最近editinterface 権限から分離されました。なぜこのエラーが表示されるのかわからない場合は、[[mw:MediaWiki_1.32/interface-admin]]をご覧ください。", + "interfaceadmin-info": "$1\n\nサイト全体のCSS/JavaScriptの編集権限は、最近editinterface 権限から分離されました。なぜこのエラーが表示されたのかわからない場合は、[[mw:MediaWiki_1.32/interface-admin]]をご覧ください。", "rawhtml-notallowed": "<html>タグは通常ページ以外では使用できません。", "gotointerwiki": "{{SITENAME}}を離れる", "gotointerwiki-invalid": "指定したページは無効です。", @@ -4319,6 +4323,7 @@ "undelete-cantedit": "このページを編集する許可がないため復元できません。", "undelete-cantcreate": "同名のページが存在せず、このページを作成する許可がないため復元できません。", "pagedata-title": "ページ・データ", + "pagedata-text": "このページは、ページへのデータインターフェースを提供します。サブページの構文を使用して、URLにページタイトルを入力してください。\n* コンテンツのネゴシエーションは、クライアントのAcceptヘッダーに基づいて適用されます。つまり、ページデータはクライアントが優先する形式で提供されます。", "pagedata-not-acceptable": "該当する形式が見つかりません。対応している MIME タイプ: $1", "pagedata-bad-title": "「$1」は無効なページ名です。", "unregistered-user-config": "セキュリティ上の理由から、JavaScript、CSSおよびJSONの利用者サブページは、登録されていない利用者に対しては読み込みできません。", @@ -4331,5 +4336,6 @@ "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": "提供されたコンテンツが適切に圧縮されていません" } diff --git a/languages/i18n/jv.json b/languages/i18n/jv.json index 083fd5f458..7b0c6a5c22 100644 --- a/languages/i18n/jv.json +++ b/languages/i18n/jv.json @@ -37,7 +37,7 @@ "tog-watchmoves": "Wuwuh kaca lan barkas lih-lihanku menyang pawawanganku", "tog-watchdeletion": "Wuwuh kaca lan barkas busakanku menyang pawawanganku", "tog-watchuploads": "Wuwuh barkas anyar unggahanku menyang pawawanganku", - "tog-watchrollback": "Wuwuh kaca sing takpulihaké menyang pawawanganku", + "tog-watchrollback": "Wuwuh kaca kang dakpulihaké menyang pawawanganku", "tog-minordefault": "Tengeri kabèh besutan minangka besutan cilik sacara baku", "tog-previewontop": "Deleng pratuduh sadurungé mbesut kothak", "tog-previewonfirst": "Delelng pratuduh nalika mbesut pisanan", @@ -60,7 +60,7 @@ "tog-watchlisthidecategorization": "Dhelikaké kategorisasi kaca", "tog-ccmeonemails": "Kirimi aku turunan layang-èl sing takkirim menyang wong liya", "tog-diffonly": "Aja tuduhaké isiné kaca sangisoré bédané besutan", - "tog-showhiddencats": "Tuduhaké kategori sing didhelikaké", + "tog-showhiddencats": "Tuduhaké kategori kang ndhelik", "tog-norollbackdiff": "Aja tuduhaké béda sawisé ngayahi bebalèn", "tog-useeditwarning": "Élingaké kula yèn ninggal kaca besutan sadurungé nyimpen", "tog-prefershttps": "Tansah nganggo sambungan sing aman nalika mlebu log", @@ -152,6 +152,8 @@ "index-category": "Kaca kaindhèks", "noindex-category": "Kaca ora kaindhèks", "broken-file-category": "Kaca mawa pranala barkas rusak", + "categoryviewer-pagedlinks": "($1) ($2)", + "category-header-numerals": "$1–$2", "about": "Bab", "article": "Kaca isi", "newwindow": "(buka mawa jendhéla anyar)", @@ -251,6 +253,9 @@ "versionrequired": "Dibutuhaké MediaWiki vèrsi $1", "versionrequiredtext": "MediaWiki vèrsi $1 dibutuhaké kanggo nggunakaké kaca iki. Mangga mirsani [[Special:Version|kaca iki]]", "ok": "Oké", + "pagetitle": "$1 - {{SITENAME}}", + "pagetitle-view-mainpage": "{{SITENAME}}", + "backlinksubtitle": "← $1", "retrievedfrom": "Dijupuk saka \"$1\"", "youhavenewmessages": "{{PLURAL:$3|Panjenengan duwé}} $1 ($2).", "youhavenewmessagesfromusers": "{{PLURAL:$4|Panjenengan duwé}} $1 saka {{PLURAL:$3|panganggo liya|$3 panganggo}} ($2).", @@ -282,6 +287,7 @@ "site-atom-feed": "Lebon atom $1", "page-rss-feed": "\"$1\" ''RSS Feed''", "page-atom-feed": "Pakan atom \"$1\"", + "feed-atom": "Atom", "red-link-title": "$1 (kaca ora ana)", "sort-descending": "Urutaké medhun", "sort-ascending": "Urutaké munggah", @@ -311,7 +317,7 @@ "readonly": "Umpak data kagembok", "enterlockreason": "Isi alesan ngreksa, kalebu rencana kapan pareksané bakal dibukak", "readonlytext": "Juru administrasi sistem sing ngunci iku medhar mangkéné: $1", - "missing-article": "Basis data ora bisa nemokaké tèks kaca sing kuduné ana, yaiku \"$1\" $2.\nBab iki bisasané disebabaké déning pranala daluwarsa menyang revisi sadurungé kaca sing wis dibusak.\nYèn dudu iki panyebabé, panjenengan manawa bisa nemokaké kasalahan (''bug'') jroning piranti alus (''software''). Mangga dilapuraké bab iki menyang [[Special:ListUsers/sysop|administrator]], kanthi nyebutaké alamat URL sing dituju", + "missing-article": "Basish dhatahé ora bisa nemokaké tulisan ing siji kaca kang kuduné ana, ya iku \"$1\" $2.\n\nMasalah iki sok ana amarga panjenengan ngeklik pranala sajarah kang lawas ing kaca kang wis kabusek.\n\nManawa ora amarga iku, panjenengan bokmanawa nemu ama ing piranti alusé.\nSumangga lapuraké ama mau menyang [[Special:ListUsers/sysop|pangurus]], kanthi nulisaké URL-é.", "missingarticle-rev": "(owahan#: $1)", "missingarticle-diff": "(Béda: $1, $2)", "readonly_lag": "Database wis dikunci mawa otomatis sawetara database sékundhèr lagi nglakoni sinkronisasi mawa database utama", @@ -332,16 +338,16 @@ "delete-hook-aborted": "Pambusakan dibatalaké déning ''hook''.\nOra ana alesané.", "no-null-revision": "Ora isa nggawe revisi 'null' anyar kanggo kaca \"$1\"", "badtitle": "Sesirah ala", - "badtitletext": "Sesirahing kaca sing disuwun ora trep, kosong, utawa salah nggayut menyang sesirah antarabasa utawa antarawiki.\nMungkin tulisané ngandhut pralambang cacah siji utawa luwih sing ora kena dianggo tumraping sesirah.", - "title-invalid-empty": "Sesirah kaca sing dikarepaké kosong utawa mung ngemu jenengé mandala-aran.", - "title-invalid-utf8": "Sesirah kaca sing dikarepaké ngemu reroncèn UTF-8 sing ora sah.", - "title-invalid-interwiki": "Sesirah kaca sing dikarepaké ngemu pranala interwiki sing ora bisa dicakaké dadi sesirah", + "badtitletext": "Sesirah kaca kang panjenengan suwun ora trep, kosong, utawa salah nggayut menyang sesirah antarabasa utawa antarawiki.\nTulisané bokmanawa ngemu karakter kang ora kena kaanggo ing sesirah.", + "title-invalid-empty": "Sesirah kaca kang panjenengan karsakaké kosong utawa mung ngemu jenengé mandala aran.", + "title-invalid-utf8": "Sesirah kaca kang panjenengan karsakaké ngemu reroncèn UTF-8 kang ora trep.", + "title-invalid-interwiki": "Sesirah kaca kang panjenengan karsakaké ngemu pranala interwiki kang ora bisa katrapaké ing sesirah.", "title-invalid-talk-namespace": "Sesirah kaca kang dikarepaké ngener ing kaca parembugan kang ora ana.", - "title-invalid-characters": "Sesirah kaca sing dikarepaké ngemu karakter sing ora sah: \"$1\".", + "title-invalid-characters": "Sesirah kaca kang panjenengan karsakaké ngemu karakter kang ora trep: \"$1\".", "title-invalid-relative": "Sesirah ngemu alamat rélatif. Sesirah kaca relatif (./, ../) iku ora sah amarga ora bisa ditekani lumantar pangluru.", - "title-invalid-magic-tilde": "Sesirah kaca sing dikarepaké ngemu reroncèn tilda (~~~) sing ora sah.", - "title-invalid-too-long": "Sesirah kaca sing dikarepaké kedawan. Kuduné ora munjuli $1 bèt sarana kodhé UTF-8.", - "title-invalid-leading-colon": "Sesirah kaca sing dikarepaké ngemu titik loro sing ora sah ing ngarepé.", + "title-invalid-magic-tilde": "Sesirah kaca kang panjenengan karsakaké ngemu reroncèn tildhe (~~~) kang ora trep.", + "title-invalid-too-long": "Sesirah kaca kang panjenengan karsakaké kedawan. Sesirahé ora kena munjuli {{PLURAL:$1|bèt|bèt}} ing pangodhe UTF-8.", + "title-invalid-leading-colon": "Sesirah kaca kang panjenengan karsakaké ngemu titik loro kang ora trep ing arepé.", "perfcached": "Dhata ing ngisor iki kasimpen ing telih lan mungkin durung dianyari. Paling akèh ana {{PLURAL:$1|sakasil|$1 kasil}} ing telih iku.", "perfcachedts": "Dhata ing ngisor iki kasimpen ing telih, lan pungkasan dianyari $1. Paling akèh ana {{PLURAL:$4|sakasil|$4 kasil}} ing telih iku.", "querypage-no-updates": "Update saka kaca iki lagi dipatèni. Data sing ana ing kéné saiki ora bisa bakal dibalèni unggah manèh.", @@ -353,7 +359,7 @@ "viewsourcetext": "Panjenengan bisa ndeleng lan nurun sumberé kaca iki.", "viewyourtext": "Panjenengan bisa ndeleng lan nurun sumberé besutané panjenengan menyang kaca iki.", "protectedinterface": "Kaca iki isiné tèks antarmuka sing dienggo software lan wis dikunci kanggo menghindari kasalahan.", - "editinginterface": "Pélik: Panjenengan lagi mbesut kaca sing kanggo ngisèni tèks mukantarané piranti alus.\nOwahan tumrap kaca iki bakal mrabawani cakriké mukantarané panganggo liya ing wiki iki.", + "editinginterface": "Pepéling: Panjenengan lagi mbesut kaca kang ngemu tulisan kanggo mukantarané piranti alus.\nNgowahi kaca iki bakal mrabawani cakrik mukantarané panganggo liya ing wiki iki.", "translateinterface": "Saperlu nambah utawa ngowah pertalan tumrap kabèh wiki, mangga anggoa [https://translatewiki.net/ translatewiki.net] minangka proyèk panglokaling MediaWiki.", "cascadeprotected": "Kaca iki wis direksa saka besutan amarga katransklusi ing {{PLURAL:$1|kaca, sing|kaca-kaca, sing}} kareksa mawa pilihan \"runut\" murub:\n$2", "namespaceprotected": "Panjenengan ora duwé idin kanggo mbesut kaca ing mandala aran $1.", @@ -429,7 +435,7 @@ "createacct-benefit-heading": "{{SITENAME}} digawé déning wong-wong kaya panjenengan.", "createacct-benefit-body1": "{{PLURAL:$1|besutan}}", "createacct-benefit-body2": "{{PLURAL:$1|kaca}}", - "createacct-benefit-body3": "{{PLURAL:$1|sing nyumbang}} mentas waé", + "createacct-benefit-body3": "{{PLURAL:$1|kang nyumbang}} mentas waé", "badretype": "Tembung wadi sing panjenengan isèkaké ora gathuk.", "usernameinprogress": "Panggawéning akun tumrap jeneng panganggo iki tembé lumaku.\nEntèni sadhéla.", "userexists": "Jeneng panganggo sing dilebokaké lagi dianggo.\nMangga pilih jeneng liya.", @@ -506,6 +512,7 @@ "botpasswords-existing": "Tembung wadiné bot sing cumepak", "botpasswords-createnew": "Gawé anyar tembung wadiné bot", "botpasswords-editexisting": "Besut tembung wadiné bot sing anyar", + "botpasswords-label-needsreset": "(tembung wadi kudu panjenengan ambali setèl)", "botpasswords-label-appid": "Jeneng bot:", "botpasswords-label-create": "Gawé", "botpasswords-label-update": "Anyari", @@ -576,6 +583,9 @@ "savechanges": "Simpen owahan", "publishpage": "Babar kaca", "publishchanges": "Babar owahan", + "savearticle-start": "Simpen kaca...", + "savechanges-start": "Simpen owahan...", + "publishpage-start": "Babar kaca...", "publishchanges-start": "Babar owahan...", "preview": "Pratuduh", "showpreview": "Deleng pratuduh", @@ -585,7 +595,7 @@ "missingsummary": "Pangéling-éling: Panjenengan ora ngisèni ringkesané besutan.\nManawa panjenengan mencèt \"$1\" manèh, besutané panjengan bakal kasimpen tanpa katerangan.", "selfredirect": "Pepéling: Panjenengan ngalih kaca iki menyang kaca iki dhéwé.\nPanjenengan mungkin salah wènèh paraning alihan utawa salah mbesut kaca.\nYèn panjenengan ngeklik \"$1\" manèh, kaca alihan bakal digawé.", "missingcommenttext": "Mangga awèh tanggepan.", - "missingcommentheader": "'''Pangéling:''' Sampéyan durung nyadhiyakaké judhul/jejer kanggo tanggepan iki.\nYèn Sampéyan klik \"$1\" manèh, suntingan Sampéyan bakal kasimpen tanpa kuwi.", + "missingcommentheader": "Pangéling-éling: Panjenengan durung mènèhi subyèk tumrap tanggapan iki.\nManawa panjenengan ngeklik \"$1\" manèh, besutané panjenengan bakal kasimpen tanpa subyèk.", "summary-preview": "Pratuduh ringkesan besutan:", "subject-preview": "Pratuduh jejer:", "previewerrortext": "Ana masalah nalika njajal mratuduhaké owahané panjenengan.", @@ -646,13 +656,14 @@ "semiprotectedpagewarning": "Cathetan: Kaca iki pinuju direksa, mula mung panganggo sing kadhaftar sing bisa mbesut.\nÈntri log pungkasan cumepak ana ing ngisor kanggo rujukan:", "cascadeprotectedwarning": "Pènget: Kaca iki wis direksa saéngga mung panganggo kanthi hak pangurus waé sing bisa mbesut amarga kaca iki katranklusi ing {{PLURAL:$1|kaca|kaca-kaca}} sing kareksa runut ngisor iki:", "titleprotectedwarning": "'''Pènget: Kaca iki wis dikunci saéngga perlu [[Special:ListGroupRights|hak mligi]] kanggo gawéné.'''\nEntri cathetan pungkasan disadiakake ing ngisor kanggo referensi:", - "templatesused": "{{PLURAL:$1|Cithakan}} sing dienggo ing kaca iki:", - "templatesusedpreview": "{{PLURAL:$1|Cithakan}} sing dienggo ing pratuduh iki:", - "templatesusedsection": "{{PLURAL:$1|Cithakan}} sing dienggo ding bagian iki:", + "templatesused": "{{PLURAL:$1|Cithakan}} kang kaanggo ing kaca iki:", + "templatesusedpreview": "{{PLURAL:$1|Cithakan}} kang kaanggo ing pratuduh iki:", + "templatesusedsection": "{{PLURAL:$1|Cithakan}} kang kaanggo ing pérangan iki:", "template-protected": "(kareksa)", "template-semiprotected": "(semu kareksa)", "hiddencategories": "Kaca iki anggotaning {{PLURAL:$1|1 kategori wadi|$1 kategori wadi}}:", "edittools": "", + "edittools-upload": "-", "nocreatetext": "{{SITENAME}} matesi bisané panjenengan nggawé kaca anyar.\nPanjenengan bisa bali lan mbesut kaca sing ana, utawa [[Special:UserLogin|mlebu log utawa nggawé akun]].", "nocreate-loggedin": "Panjenengan ora kagungan idin kanggo nggawé kaca anyar.", "sectioneditnotsupported-title": "Panyuntingan bagéyan ora kasengkuyungan", @@ -679,12 +690,13 @@ "content-model-text": "tulisan barès", "content-model-javascript": "JavaScript", "content-model-css": "CSS", + "content-model-json": "JSON", "expensive-parserfunction-warning": "Pènget: Kaca iki ngandhut kakèhan panggunan fungsi ''parser'' sing larang.\n\nSajatiné kuduné duwé kurang saka {{PLURAL:$2|panggilan|panggilan}}, saiki ana {{PLURAL:$1|$1 panggilan|$1 panggilan}}.", "expensive-parserfunction-category": "Kaca-kaca mawa panggunan fungsi ''parser'' sing kakèhan", "post-expand-template-inclusion-warning": "Pènget: Cithakan klebu ukurané kegedhèn.\nSawetara cithakan bakal dilirwakaké.", - "post-expand-template-inclusion-category": "Kaca-kaca kanthi cithakan klebu ukuran sing ngluwihi wates", + "post-expand-template-inclusion-category": "Kaca mawa ukuran cithakan kang munjuli wates", "post-expand-template-argument-warning": "Pènget: Kaca iki ngandhut saora-orané siji argumen cithakan kanthi ukuran èkspansi sing kegedhèn. Argumèn-argumèn kasebut wis dilirwakaké.", - "post-expand-template-argument-category": "Kaca-kaca kanthi argumèn cithakan sing dilirwakaké", + "post-expand-template-argument-category": "Kaca mawa argumèn cithakan kang kabusek", "parser-template-loop-warning": "Ana ''loop'' cithakan: [[$1]]", "parser-template-recursion-depth-warning": "Wates ''recursion depth'' cithakan wis ngliwati ($1)", "language-converter-depth-warning": "Wates jeroné pangganti basa wis kapunjulen ($1)", @@ -747,7 +759,7 @@ "revisiondelete": "Busak/wurung busak révisi", "revdelete-nooldid-title": "Révisi tujuan ora trep", "revdelete-nooldid-text": "Panjenengan durung mènèhi target revisi kanggo nglakoni fungsi iki.", - "revdelete-no-file": "Barkas sing dipéngini ora ana.", + "revdelete-no-file": "Barkas kang panjenengan karsakaké ora ana.", "revdelete-show-file-confirm": "Apa panjenengan yakin arep mirsani révisi sing wis kabusak saka berkas \"$1\" ing $2, jam $3?", "revdelete-show-file-submit": "Iya", "logdelete-selected": "{{PLURAL:$1|Log kapilih|Log kapilih}} kanggo:", @@ -823,7 +835,7 @@ "difference-title-multipage": "Béda antarané kaca \"$1\" lan \"$2\"", "difference-multipage": "(Prabédhan antar kaca)", "lineno": "Larik $1:", - "compareselectedversions": "Bandhingaké révisi sing kapilih", + "compareselectedversions": "Bandhingaké révisi kang panjenengan pilih", "showhideselectedversions": "Tampilaké/dhelikaké révisi kapilih", "editundo": "wurung", "diff-empty": "(Ora ana béda)", @@ -832,6 +844,7 @@ "diff-multi-manyusers": "({{PLURAL:$1|Siji révisi langsung|$1 révisi langsung}} déning {{PLURAL:$2|panganggo|panganggo}} $2 ora katuduhaké)", "difference-missing-revision": "{{PLURAL:$2|Sak pambenahan|$2 pambenahan}} saka prabédan iki ($1) {{PLURAL:$2|ora ditemokaké|ora ditemokaké}}.\n\nIki biasané kasebab pranala prabedan sing wis ora kanggo saka kaca isi wis dibusak.\nRinciané bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log busak].", "searchresults": "Kasiling golèk", + "search-filter-title-prefix-reset": "Golèk kabèh kaca", "searchresults-title": "Kasiling golèk \"$1\"", "titlematches": "Sesirah kaca cocog", "textmatches": "Tèks artikel sing cocog", @@ -860,7 +873,7 @@ "search-section": "(pérangan $1)", "search-category": "(kategori $1)", "search-file-match": "(cocog karo isi barkas)", - "search-suggest": "Apa sing panjenengan karepaké iki: $1", + "search-suggest": "Apa kang panjenengan karsakaké iki: $1", "search-rewritten": "Tuduhaké kasilé $1, nanging golèkaké $2.", "search-interwiki-caption": "Kasil saka proyèk-proyèk sababon", "search-interwiki-default": "Wohing panggolèk $1:", @@ -903,7 +916,7 @@ "prefs-editwatchlist-clear": "Resiki pawawanganing sampéyan", "prefs-watchlist-days": "Cacahé dina sing dituduhaké ing dhaftar pangawasan:", "prefs-watchlist-days-max": "Maksimum $1 {{PLURAL:$1|dina|dina}}", - "prefs-watchlist-edits": "Cacahé suntingan maksimum sing dituduhaké ing dhaftar pangawasan sing luwih jangkep:", + "prefs-watchlist-edits": "Cacah maksimum owahan kang kapacak ing pawawangan:", "prefs-watchlist-edits-max": "Gunggung maksimum: 1000", "prefs-watchlist-token": "Tokening pawawangan:", "prefs-misc": "Liya-liya", @@ -955,8 +968,10 @@ "youremail": "Layang-èl:", "username": "{{GENDER:$1|Jeneng panganggo}}:", "prefs-memberingroups": "{{GENDER:$2|Anggota}} saka {{PLURAL:$1|golongan}}:", + "prefs-memberingroups-type": "$1", "group-membership-link-with-expiry": "$1 (tekan $2)", "prefs-registration": "Wektu régistrasi:", + "prefs-registration-date-time": "$1", "yourrealname": "Jeneng asli:", "yourlanguage": "Basa sing dianggo:", "yourvariant": "Werna basa isi:", @@ -1004,12 +1019,15 @@ "saveusergroups": "Simpen golongan {{GENDER:$1|panganggo}}", "userrights-groupsmember": "Anggota saka:", "userrights-groupsmember-auto": "Anggota implisit saka:", + "userrights-groupsmember-type": "$1", "userrights-groups-help": "Panjenengan bisa ngowahi grup-grup sing ana panganggoné iki.\n* Kothak sing dicenthang tegesé panganggo iki ana sajroné grup iku.\n* Kothak sing ora dicenthang tegesé panganggo iku ora ana ing grup iku.\n* Tandha bintang * tegesé panjenengan ora bisa ngilangi grup iku yèn wis tau nambah, utawa sawalikané.", "userrights-reason": "Alesan:", "userrights-no-interwiki": "Panjenengan ora ana hak kanggo ngowahi hak panganggo ing wiki liyané.", "userrights-nodatabase": "Basis data $1 ora ana utawa ora lokal.", "userrights-changeable-col": "Grup sing bisa panjenengan owahi", "userrights-unchangeable-col": "Grup sing ora bisa diowahi panjenengan", + "userrights-irreversible-marker": "$1*", + "userrights-no-shorten-expiry-marker": "$1#", "userrights-expiry-current": "Kadaluwarsa $1", "userrights-expiry-none": "Ora kadaluwarsa", "userrights-expiry": "Kadaluwarsa:", @@ -1069,7 +1087,7 @@ "right-deleterevision": "Busak lan wurung busak owahan tinamtuné kaca", "right-deletedhistory": "Ndeleng sajarah èntri-èntri kabusak, tanpa bisa ndeleng apa sing dibusak", "right-deletedtext": "Deleng tèks sing dibusak lan owah-owahan antarané révisi sing dibusak", - "right-browsearchive": "Golèk kaca-kaca sing wis dibusak", + "right-browsearchive": "Golèk kaca kang wis kabusek", "right-undelete": "Wurung busak kaca", "right-suppressrevision": "Deleng, dhelikaké, lan wurung dhelikaké owahan tinamtu kaca-kacané panganggo sembarang", "right-viewsuppressed": "Deleng owahan sing didhelikaké saka panganggo sembarang", @@ -1079,9 +1097,9 @@ "right-hideuser": "Blokir jeneng panganggo, lan delikna saka umum", "right-ipblock-exempt": "Bypass pamblokiran IP, pamblokiran otomatis lan pamblokiran rangkéan", "right-unblockself": "Bukak blokirané dhéwéké", - "right-protect": "Owahi tataran rereksan lan besut kaca sing direksa-runtun", - "right-editprotected": "Besut kaca sing direksa kanthi \"{{int:protect-level-sysop}}\"", - "right-editsemiprotected": "Owah kaca-kaca sing direksa dadi \"{{int:protect-level-autoconfirmed}}\"", + "right-protect": "Owahi tataran rereksan lan besut kaca kang direksa-runtun", + "right-editprotected": "Besut kaca kang kareksa \"{{int:protect-level-sysop}}\"", + "right-editsemiprotected": "Owah kaca kang kareksa \"{{int:protect-level-autoconfirmed}}\"", "right-editcontentmodel": "Besut modhèl kontèn kaca", "right-editinterface": "Besut antarmuka panganggo", "right-editusercss": "Besut barkas-barkas CSS panganggo liya", @@ -1101,7 +1119,7 @@ "right-patrol": "Tandhani besutané wong liya yèn wis kapriksa", "right-autopatrol": "Gawé supaya suntingan-suntingan ditandhani minangka wis dipatroli", "right-patrolmarks": "Ndeleng tandha-tandha patroli owah-owahan anyar", - "right-unwatchedpages": "Tuduhna daftar kaca-kaca sing ora diawasi", + "right-unwatchedpages": "Deleng pratélan kaca kang ora ingawasan", "right-mergehistory": "Gabung sajarah kaca", "right-userrights": "Besut kabèh hak panganggo", "right-userrights-interwiki": "Besut hak-haking panganggo asal wiki jaba", @@ -1125,8 +1143,8 @@ "grant-editmycssjs": "Besut CSS/JavaScript panganggomu", "grant-editmyoptions": "Besut préferènsi panganggomu", "grant-editmywatchlist": "Besut pawawangané panjenengan", - "grant-editpage": "Besut kaca sing ana", - "grant-editprotected": "Besut kaca sing direksa", + "grant-editpage": "Besut kaca kang ana", + "grant-editprotected": "Besut kaca kang kareksa", "grant-highvolume": "Besutan gedhi", "grant-oversight": "Dhelikaké panganggo dalah révisiné", "grant-patrol": "Awasi owahané kaca", @@ -1137,7 +1155,7 @@ "grant-uploadeditmovefile": "Unggah, ganti, lan lih barkas", "grant-uploadfile": "Unggah barkas anyar", "grant-basic": "Hak pokok", - "grant-viewdeleted": "Deleng barkas lan kaca sing dibusak", + "grant-viewdeleted": "Deleng barkas lan kaca kang kabusek", "grant-viewmywatchlist": "Deleng pawawangané panjenengan", "grant-viewrestrictedlogs": "Deleng isian log sing winates", "newuserlogpage": "Log panganggo anyar", @@ -1167,7 +1185,7 @@ "action-deletelogentry": "busak isian log", "action-deletedhistory": "deleng sajarah sing dibusak sawijiné kaca", "action-deletedtext": "deleng tèks révisi sing dibusak", - "action-browsearchive": "nggolèki kaca-kaca sing wis dibusak", + "action-browsearchive": "golèk kaca kang wis kabusek", "action-undelete": "wurung busak kaca", "action-suppressrevision": "tinjo lan balèkaké révisi sing didhelikaké", "action-suppressionlog": "deleng log priangga iki", @@ -1178,7 +1196,7 @@ "action-importupload": "impor kaca iki saka pamunggahan berkas", "action-patrol": "nandhani besutan wong liya yèn wis kapriksa", "action-autopatrol": "nandhani besutané panjenengan dhéwé yèn wis kapriksa", - "action-unwatchedpages": "deleng pratélan kaca sing ingawasan", + "action-unwatchedpages": "deleng pratélan kaca kang ingawasan", "action-mergehistory": "nggabungaké sajarah kaca iki", "action-userrights": "besut kabèh hak panganggo", "action-userrights-interwiki": "besut hak aksès panganggo ing wiki liyané", @@ -1196,6 +1214,7 @@ "action-deletechangetags": "busak tag saka sasana dhata", "action-purge": "buwang kaca iki", "nchanges": "$1 {{PLURAL:$1|pangowahan|owah-owahan}}", + "ntimes": "$1×", "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|saka keri dhewe mrene}}", "enhancedrc-history": "sajarah", "recentchanges": "Owahan-owahan anyar", @@ -1212,15 +1231,22 @@ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (uga delengen [[Special:NewPages|pratélané kaca-kaca anyar]])", "recentchanges-legend-plusminus": "(''±123'')", "recentchanges-submit": "Tuduhaké", + "rcfilters-tag-remove": "Busek '$1'", "rcfilters-legend-heading": "Pratélané cekakan:", "rcfilters-other-review-tools": "Piranti pamriksa liyané", "rcfilters-group-results-by-page": "Golongaké kasilé miturut kacané", "rcfilters-activefilters": "Saringan murub", + "rcfilters-activefilters-hide": "Dhelikaké", + "rcfilters-activefilters-show": "Tuduhaké", "rcfilters-advancedfilters": "Saringan lanjutan", "rcfilters-limit-title": "Kasil kang arep dituduhaké", + "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|owahan|owahan}}, $2", + "rcfilters-date-popup-title": "Dawané wektu kang arep panjenengan golèki", "rcfilters-days-title": "Dina-dina sing mentas waé", "rcfilters-hours-title": "Jam-jam sing mentas waé", "rcfilters-days-show-days": "$1 {{PLURAL:$1|dina|dina}}", + "rcfilters-days-show-hours": "$1 {{PLURAL:$1|jam|jam}}", + "rcfilters-highlighted-filters-list": "Kasuwur: $1", "rcfilters-quickfilters": "Saringan sumimpen", "rcfilters-quickfilters-placeholder-title": "Durung ana saringan kang kasimpen", "rcfilters-quickfilters-placeholder-description": "Saperlu nyimpen setèlaning saringan lan nganggo setèlan iku manèh ing tembé, kliken ikon markah buku ing babagan Saringan Murub ing ngisor.", @@ -1230,11 +1256,15 @@ "rcfilters-savedqueries-unsetdefault": "Wutung ndadèkaké baku", "rcfilters-savedqueries-remove": "Busak", "rcfilters-savedqueries-new-name-label": "Jeneng", + "rcfilters-savedqueries-new-name-placeholder": "Wedharaké ancasé saringané", "rcfilters-savedqueries-apply-label": "Gawé saringan", + "rcfilters-savedqueries-apply-and-setdefault-label": "Gawé saringan baku", "rcfilters-savedqueries-cancel-label": "Wurung", "rcfilters-savedqueries-add-new-title": "Simpen setèlané saringan sing saiki", + "rcfilters-savedqueries-already-saved": "Saringan iki wis kasimpen. Ganti setèlané panjenengan saperlu nggawé Saringan Kasimpen kang anyar.", "rcfilters-restore-default-filters": "Pulihaké saringan gawan", "rcfilters-clear-all-filters": "Resiki kabèh saringan", + "rcfilters-show-new-changes": "Deleng owah-owahan anyar dhéwé", "rcfilters-search-placeholder": "Owah-owahan saringan (anggo menu utawa golèk jeneng saringan)", "rcfilters-invalid-filter": "Saringan ora sah", "rcfilters-empty-filter": "Ora ana saringan sing aktif. Kabèh sumbangan katuduhaké.", @@ -1251,13 +1281,13 @@ "rcfilters-filter-editsbyself-description": "Pisumbangé panjenengan dhéwé.", "rcfilters-filter-editsbyother-label": "Owah-owahané liyan", "rcfilters-filter-editsbyother-description": "Kabèh owahan kajaba duwèké panjenengan.", - "rcfilters-filtergroup-userExpLevel": "Tataran pangalaman (mung kanggo panganggo kadhaftar)", + "rcfilters-filtergroup-userExpLevel": "Pandhaftaran lan pangalaman pangguna", "rcfilters-filter-user-experience-level-registered-label": "Kadhaftar", - "rcfilters-filter-user-experience-level-registered-description": "Pambesut sing mlebu log.", + "rcfilters-filter-user-experience-level-registered-description": "Pambesut kang mlebu log.", "rcfilters-filter-user-experience-level-unregistered-label": "Ora kadhaftar", - "rcfilters-filter-user-experience-level-unregistered-description": "Pambesut sing ora mlebu log.", + "rcfilters-filter-user-experience-level-unregistered-description": "Pambesut kang ora mlebu log.", "rcfilters-filter-user-experience-level-newcomer-label": "Wong neneka anyar", - "rcfilters-filter-user-experience-level-newcomer-description": "Kurang saka 10 besutan lan 4 dina kagiyatan.", + "rcfilters-filter-user-experience-level-newcomer-description": "Pambesut kadhartar mawa besutan kurang saka 10 utawa aktif kurang saka 4 dina.", "rcfilters-filter-user-experience-level-learner-label": "Wong sinau", "rcfilters-filter-user-experience-level-learner-description": "Luwih akèh pangalamané tinimbang \"Wong neneka anyar\" nanging durung ngèmperi \"Panganggo kawakan\".", "rcfilters-filter-user-experience-level-experienced-label": "Panganggo kawakan", @@ -1274,7 +1304,7 @@ "rcfilters-filter-minor-description": "Besutan sing ditandhani pangriptané minangka besutan cilik.", "rcfilters-filter-major-label": "Besutan ora cilik", "rcfilters-filter-major-description": "Besutan sing ora ditandhani minangka besutan cilik.", - "rcfilters-filtergroup-watchlist": "Kaca sing ana ing pawawangan", + "rcfilters-filtergroup-watchlist": "Kaca ing pawawangan", "rcfilters-filter-watchlist-watched-label": "Ana ing Pawawangan", "rcfilters-filter-watchlist-watched-description": "Owahané kaca-kaca ing Pawawangané panjenengan.", "rcfilters-filter-watchlist-watchednew-label": "Owah-owahané Pawawangan anyar", @@ -1358,9 +1388,9 @@ "uploaderror": "Kaluputan pangunggahan berkas", "upload-recreate-warning": "'''Pèngetan: Berkas mawa jeneng kuwi wis dibusak utawa disingkiraké.'''\n\nLog pambusakan lan panyingkiran saka kaca iki sumadhiya nèng kéné:", "uploadtext": "Anggonen formulir ngisor iki saperlu ngunggah barkas.\nKanggo ndeleng utawa nggolèki barkas sing wis diunggah sadurungé, panjenengan menyanga [[Special:FileList|pratélan barkas unggahan]]. Barkas unggahan ulang uga kacathet ing [[Special:Log/upload|log unggah]], déné barkas busakan ing [[Special:Log/delete|log busak]].\n\nKanggo muwuhi barkas ing kaca, anggonen pranala kanthi formulir ing ngisor iki, pilih salah siji:\n* [[{{ns:file}}:File.jpg]] saperlu nganggo barkasé kanthi vèrsi sing wutuh\n* [[{{ns:file}}:File.png|200px|thumb|left|alt text]] saperlu nganggo barkasé kanthi amba 200 piksel déné ana ing njeron kothak lan kapacak ing sisih kiwané kaca mawa \"alt text\" minangka katerangané\n* [[{{ns:media}}:File.ogg]] saperlu nggayutaké langsung barkasé tanpa mitontonaké barkasé dhéwé", - "upload-permitted": "{{PLURAL:$2|Jinis}} barkas sing diidinaké: $1.", - "upload-preferred": "{{PLURAL:$2|Jinis}} barkas sing diprayogakaké: $1.", - "upload-prohibited": "{{PLURAL:$2|Jinis}} barkas sing dilarang: $1.", + "upload-permitted": "{{PLURAL:$2|Jinis}} barkas kang kaolèhaké: $1.", + "upload-preferred": "{{PLURAL:$2|Jinis}} barkas kang kaprayogakaké: $1.", + "upload-prohibited": "{{PLURAL:$2|Jinis}} barkas kang kalarang: $1.", "uploadlogpage": "Log unggah", "uploadlogpagetext": "Ing ngisor iki kapacak log pangunggahan berkas sing anyar dhéwé.\nMangga mirsani [[Special:NewFiles|galeri berkas-berkas anyar]] kanggo pratélan visual.", "filename": "Jeneng barkas", @@ -1381,8 +1411,8 @@ "filetype-unwanted-type": "'''\".$1\"''' klebu jenis berkas sing ora diidinaké.\nLuwih becik {{PLURAL:$3|jinis berkas|Jinis-jinis berkas}} $2.", "filetype-banned-type": "\".$1\" {{PLURAL:$4|dudu jinis barkas sing diidinaké}}.\n{{PLURAL:$3|Jinis barkas}} sing diidinaké $2.", "filetype-missing": "Berkas ini ora duwé ekstènsi (contoné \".jpg\").", - "empty-file": "Barkas sing panjenengan kirim kosong.", - "file-too-large": "Barkas sing panjenengan kirim kagedhèn.", + "empty-file": "Barkas kang panjenengan lebokaké kosong.", + "file-too-large": "Barkas kang panjenengan lebokaké kagedhèn.", "filename-tooshort": "Jeneng barkas kecendhèken.", "filetype-banned": "Barkas jinis iki dilarang.", "verification-error": "Barkas iki ora lulus vèrifikasi.", @@ -1486,7 +1516,7 @@ "lockmanager-fail-svr-acquire": "Ora bisa ngentokaké gembok nèng sasana $1.", "lockmanager-fail-svr-release": "Ora bisa nguculaké gembok neng sasana $1.", "zip-file-open-error": "Ana masalah nalika mbukak barkas kanggo pamriksan ZIP.", - "zip-wrong-format": "Barkas sing diisèkaké dudu barkas ZIP.", + "zip-wrong-format": "Barkas kang panjenengan lebokaké dudu barkas ZIP.", "zip-bad": "Berkas rusak utawa berkas ZIP sing ora bisa diwaca.\nKuwi ora bisa kapriksa kanthi patut kanggo kamanan.", "zip-unsupported": "Berkasé kuwi berkas ZIP sing nganggo piranti ZIP sing ora kasengkuyung déning MediaWiki.\nKuwi ora bisa kapriksa kanthi patut kanggo kamanan.", "uploadstash": "Unggah pandhelikan", @@ -1524,7 +1554,7 @@ "licenses-edit": "Besut pilihan lisènsi", "license-nopreview": "(Pratuduh ora ana)", "upload_source_url": "(barkas sing panjenengan pilih saka URL sing trep tur bisa diaksès umum)", - "upload_source_file": "(barkas sing panjenengan pilih saka komputeré panjenengan)", + "upload_source_file": "(barkas kang panjenengan pilih saka komputer)", "listfiles-delete": "busak", "listfiles-summary": "Kaca mirunggan iki nuduhaké kabèh barkas sing kaunggah.", "listfiles_search_for": "Golèk jeneng gambar:", @@ -1604,15 +1634,15 @@ "mimesearch-summary": "Kaca iki nyedyaké fasilitas nyaring berkas miturut tipe MIME-né. Lebokna: contenttype/subtype, contoné image/jpeg.", "mimetype": "Tipe MIME:", "download": "undhuh", - "unwatchedpages": "Kaca sing ora diawasi", + "unwatchedpages": "Kaca kang ora ingawasan", "listredirects": "Daftar pengalihan", - "unusedtemplates": "Cithakan sing ora kanggo", + "unusedtemplates": "Cithakan kang ora kanggo", "unusedtemplatestext": "Kaca iki ngamot kabèh kaca ing bilik jeneng {{ns:template}} sing ora dianggo ing kaca ngendi waé.\nPriksanen dhisik pranala-pranala menyang cithakan iki sadurungé mbusak.", "unusedtemplateswlh": "pranala liya-liyané", "randompage": "Kaca sembarang", "randompage-nopages": "Ora ana kaca ing {{PLURAL:$2||}}bilik jeneng iki:$1.", "randomincategory": "Sembarang kaca ing kategori", - "randomincategory-invalidcategory": "\"$1\" dudu jeneng kategori sing apik.", + "randomincategory-invalidcategory": "\"$1\" dudu jeneng kategori kang trep.", "randomincategory-nopages": "Ora ana kaca ing kategori [[:Category:$1|$1]].", "randomincategory-category": "Kategori:", "randomincategory-legend": "Sembarang kaca ing kategori", @@ -1635,21 +1665,21 @@ "statistics-users-active-desc": "Panganggo sing ngayahi aktivitas jroning {{PLURAL:$1|dia|$1 dina}} pungkasan", "pageswithprop": "Kaca mawa properti kaca", "pageswithprop-legend": "Kaca mawa properti kaca", - "pageswithprop-text": "Kaca iki mratélakaké kaca-kaca sing nganggo properti kaca mirunggan.", + "pageswithprop-text": "Kaca iki ngemu pratélan kaca kang nganggo properti kaca kang mirunggan.", "pageswithprop-prop": "Arané ubarampé:", "pageswithprop-submit": "Nuju", "pageswithprop-prophidden-long": "nilai properti teks dawa didhelikake ($1 kilobita)", "pageswithprop-prophidden-binary": "nilai properti biner didhelikake ($1 kilobita)", - "doubleredirects": "Alihan sing dhobel", - "doubleredirectstext": "Kaca iki ngandhut daftar kaca sing ngalih ing kaca pangalihan liyané.\nSaben baris ngandhut pranala menyang pangalihan kapisan lan kapindho, sarta tujuan saka pangalihan kapindho, sing biasané kaca tujuan sing \"sajatiné\", yakuwi pangalihan kapisan kuduné dialihaké menyang kaca tujuan iku.\nJeneng sing wis dicorèk tegesé wis rampung didandani.", + "doubleredirects": "Alihan kang dhobel", + "doubleredirectstext": "Kaca iki ngemu pratélan kaca kang ngener kaca alihan liyané.\nSaben larik ngemu pranala menyang kaca alihan kapisan lan kapindho, sarta jujuganing kaca alihan kapindho, kang adaté minagka kaca jujugan kang \"sajatiné\", ya iku kaca kang kuduné dadi jujugané kaca alihan kapisan.\nÈntri kang kacorèk tegesé wis kadandani.", "double-redirect-fixed-move": "[[$1]] wis kapindhahaké, saiki dadi kaca peralihan menyang [[$2]]", "double-redirect-fixed-maintenance": "Otomatis ndandani lih-lihan dhobel saka [[$1]] nyang [[$2]] nalika ana opèn-opènan.", "double-redirect-fixer": "Révisi pangalihan", - "brokenredirects": "Alihan sing rusak", - "brokenredirectstext": "Pengalihan ing ngisor iki tumuju menyang kaca sing ora ana:", + "brokenredirects": "Alihan kang rusak", + "brokenredirectstext": "Kaca alihan ing isor iki ngener kaca kang ora ana:", "brokenredirects-edit": "besut", "brokenredirects-delete": "busak", - "withoutinterwiki": "Kaca sing tanpa pranala basa", + "withoutinterwiki": "Kaca kang tanpa pranala basa", "withoutinterwiki-summary": "Kaca-kaca ing ngisor iki ora nggayut nyang vèrsi basa liyané.", "withoutinterwiki-legend": "Préfiks", "withoutinterwiki-submit": "Tuduhna", @@ -1664,25 +1694,25 @@ "nimagelinks": "Kanggo nèng {{PLURAL:$1|kaca|kaca}}", "ntransclusions": "kanggo nèng $1 {{PLURAL:$1|kaca|kaca}}", "specialpage-empty": "Ora ana sing perlu dilaporaké.", - "lonelypages": "Kaca sing lola", + "lonelypages": "Kaca kang lola", "lonelypagestext": "Kaca-kaca ing ngisor iki ora ana sing nyambung menyang kaca liyané ing {{SITENAME}}.", - "uncategorizedpages": "Kaca sing tanpa kategori", - "uncategorizedcategories": "Kategori sing tanpa kategori", - "uncategorizedimages": "Barkas sing tanpa kategori", - "uncategorizedtemplates": "Cithakan sing durung diwèhi kategori", - "unusedcategories": "Kategori sing ora kanggo", - "unusedimages": "Barkas sing ora kanggo", - "wantedcategories": "Kategori sing dipéngini", - "wantedpages": "Kaca sing dipéngini", + "uncategorizedpages": "Kaca kang tanpa kategori", + "uncategorizedcategories": "Kategori kang tanpa kategori", + "uncategorizedimages": "Barkas kang tanpa kategori", + "uncategorizedtemplates": "Cithakan kang durung kawènèhan kategori", + "unusedcategories": "Kategori kang ora kanggo", + "unusedimages": "Barkas kang ora kanggo", + "wantedcategories": "Kategori kang kapéngini", + "wantedpages": "Kaca kang kapéngini", "wantedpages-badtitle": "Sesirah ora sah ing omboyakan kasil: $1", - "wantedfiles": "Barkas sing dipéngini", - "wantedfiletext-cat": "Berkas iki dianggo nanging ora ana. Berkas saka panyimpenan asing mungkin kadaptar tinimbang ana kasunyatan. Saben ''positip salah'' bakal diorèk. Lan, kaca sing nyartakaké berkas sing ora ana bakal kadaptar nèng [[:$1]].", + "wantedfiles": "Barkas kang kapéngini", + "wantedfiletext-cat": "Barkas iki kaanggo, nanging ora ana. Barkas saka panyimpenan manca bokamanawa kacathet, sanajan ora ana. Saben ayahan kang salah, sanajan saka niyat kang becik, bakal kacorèk. Kaca kang ngemu barkas kang ora ana bakal kacathet ing [[:$1]].", "wantedfiletext-nocat": "Berkas iki dianggo nanging ora ana. Berkas saka panyimpenan asing mungkin kadaptar tinimbang ana kasunyatan. Saben ''positip salah'' bakal diorèk.", - "wantedtemplates": "Cithakan sing dipéngini", - "mostlinked": "Kaca sing kerep dhéwé dituju", - "mostlinkedcategories": "Kategori sing kerep dhéwé dienggo", + "wantedtemplates": "Cithakan kang kapéngini", + "mostlinked": "Kaca kang akèh kajujug", + "mostlinkedcategories": "Kategori kang kerep dhéwé kajujug", "mostlinkedtemplates": "Kaca paling akèh transklusi", - "mostcategories": "Kaca sing kategoriné akèh dhéwé", + "mostcategories": "Kaca kang kategoriné akèh dhéwé", "mostimages": "Barkas akèh dhéwé dienggo pranala", "mostinterwikis": "Kaca mawa interwiki paling akèh", "mostrevisions": "Kaca mawa pangowahan sing akèh dhéwé", @@ -1690,11 +1720,11 @@ "prefixindex-namespace": "Kabèh kaca mawa ater-ater (bilik jeneng $1)", "prefixindex-submit": "Tuduhaké", "prefixindex-strip": "Busak ater-ater saka pratélan", - "shortpages": "Kaca sing cekak", - "longpages": "Kaca sing dawa", - "deadendpages": "Kaca sing buntu", + "shortpages": "Kaca kang cendhak", + "longpages": "Kaca kang dawa", + "deadendpages": "Kaca kang buntu", "deadendpagestext": "Kaca-kaca ing ngisor iki ora nggayut nyang kaca liya ing {{SITENAME}}.", - "protectedpages": "Kaca sing direksa", + "protectedpages": "Kaca kang kareksa", "protectedpages-indef": "Namung rereksan tanpa watesan wektu", "protectedpages-cascade": "Amung kaca rineksan kang runtut", "protectedpages-noredirect": "Dhelikna alihan", @@ -1719,15 +1749,15 @@ "newpages": "Kaca anyar", "newpages-submit": "Tuduhaké", "newpages-username": "Jeneng panganggo:", - "ancientpages": "Kaca sing lawas dhéwé", + "ancientpages": "Kaca kang lawas dhéwé", "move": "Lih", "movethispage": "Lih kaca iki", "unusedimagestext": "Berkas-berkas sing kapacak iki ana nanging ora dienggo ing kaca apa waé.\nTulung digatèkaké yèn situs wèb liyané mbok-menawa bisa nyambung ing sawijining berkas sacara langsung mawa URL langsung, lan berkas-berkas kaya mengkéné iku mbok-menawa ana ing daftar iki senadyan ora dienggo aktif manèh.", - "unusedcategoriestext": "Kategori iki ana senadyan ora ana artikel utawa kategori liyané sing nganggo.", + "unusedcategoriestext": "Kaca kategori iki ana sanajan ora ana artikel utawa kategori liyané kang nganggo.", "notargettitle": "Ora ana sasaran", "notargettext": "Panjenengan ora nemtokaké kaca utawa panganggo tujuan fungsi iki.", "nopagetitle": "Kaca tujuan ora ditemokaké", - "nopagetext": "Kaca sing panjenengan tuju ora ditemokaké.", + "nopagetext": "Kaca jujugan kang panjenengan karsakaké ora ana.", "pager-newer-n": "{{PLURAL:$1|1 luwih anyar|$1 luwih anyar}}", "pager-older-n": "{{PLURAL:$1|1 luwih lawas|$1 luwih lawas}}", "suppress": "Dhelikaké", @@ -1752,6 +1782,7 @@ "apisandbox-dynamic-error-exists": "Paramèter aran \"$1\" wis ana.", "apisandbox-deprecated-parameters": "Paramèter lawas", "apisandbox-fetch-token": "Isi otomatis tokené", + "apisandbox-add-multi": "Wuwuh", "apisandbox-submit-invalid-fields-title": "Sawenèh babagan ora trep", "apisandbox-submit-invalid-fields-message": "Jajal dandanana babagan sing ditandhani lan jajalen manèh.", "apisandbox-results": "Kasil", @@ -1760,6 +1791,7 @@ "apisandbox-results-error": "Ana masalah nalika ngamot wangsulan kanggo panyuwuné API: $1.", "apisandbox-request-selectformat-label": "Tuduhaké dhata suwunan minangka:", "apisandbox-request-url-label": "URL dikarepaké:", + "apisandbox-request-format-json-label": "JSON", "apisandbox-request-json-label": "Nyuwun JSON:", "apisandbox-request-time": "Suwéné panyuwunan: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Dandanana tokené lan balènana numpuk", @@ -1774,19 +1806,21 @@ "apisandbox-multivalue-all-values": "$1 (Kabèh aji)", "booksources": "Sumber buku", "booksources-search-legend": "Golèk sumber buku", + "booksources-isbn": "ISBN:", "booksources-search": "Golèk", "booksources-text": "Ing ngisor iki kapacak daftar pranala menyang situs liyané sing ngadol buku anyar lan bekas, lan mbok-menawa uga ndarbèni informasi sabanjuré ngenani buku-buku sing lagi panjenengan golèki:", "booksources-invalid-isbn": "ISBN sing diwènèhaké katonané ora trep; priksanen bokmanawa ana masalah nalika nurun sumber asli.", - "magiclink-tracking-rfc": "Kaca sing nganggo pranala ajaib RFC", + "magiclink-tracking-rfc": "Kaca kang nganggo pranala RFC", "magiclink-tracking-rfc-desc": "Kaca iki nganggo pranala ajaib RFC. Delengen [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] ngenani carané boyongan.", - "magiclink-tracking-pmid": "Kaca sing nganggo pranala ajaib PMID", - "magiclink-tracking-isbn": "Kaca sing nganggo pranala ajaib ISBN", + "magiclink-tracking-pmid": "Kaca kang nganggo pranala PMID", + "magiclink-tracking-isbn": "Kaca kang nganggo pranala ISBN", "specialloguserlabel": "Panampil:", "speciallogtitlelabel": "Paran (sesirah utawa {{ns:user}}:jeneng panganggo):", "log": "Log", "logeventslist-submit": "Tuduhaké", + "logeventslist-tag-log": "Log tenger", "all-logs-page": "Kabèh log umum", - "alllogstext": "Pitontonan gabungan log-log sing ana ing {{SITENAME}}.\nPanjenengan bisa nyiyutaké sesawangané kanthi milih sawijining jinis log, jeneng panganggo (sènsitif-case), utawa kaca sing gegayutan (uga sènsitif-case).", + "alllogstext": "Pitontonan gabungan log-log ing {{SITENAME}}.\nPanjenengan bisa nyiyutaké sesawangané kanthi milih siji jinis log, jeneng panganggo (sènsitif kapitalisasi), utawa kaca kang kaprabawan (uga sènsitif kapitalisasi).", "logempty": "Ora tinemu wiji kang cocog ing log", "log-title-wildcard": "Golèk sesirah sing diwiwiti tulisan iki", "showhideselectedlogentries": "Owah pakatonané èntri log sing dipilih", @@ -1798,7 +1832,7 @@ "allpages": "Kabèh kaca", "nextpage": "Kaca sabanjuré ($1)", "prevpage": "Kaca sadurungé ($1)", - "allpagesfrom": "Pitontonaké kaca sing diwiwiti:", + "allpagesfrom": "Pitontonaké kaca kang kawiwitan:", "allpagesto": "Tampilaké kaca dipungkasi ing:", "allarticles": "Kabèh kaca", "allinnamespace": "Kabèh kaca (mandala aran $1)", @@ -1813,7 +1847,7 @@ "categories": "Kategori", "categories-submit": "Tuduhaké", "categoriespagetext": "{{PLURAL:$1|kategori ing ngisor iki ngandhut|kategori ing ngisor iki ngandhut}} kaca utawa media.\n[[Special:UnusedCategories|Kategori sing ora dianggo]] ora ditampilaké ing kéné.\nDeleng uga [[Special:WantedCategories|kategori sing diperlokaké]].", - "categoriesfrom": "Tuduhaké kategori-kategori sing diwiwiti:", + "categoriesfrom": "Tuduhaké kategori kang kawiwitan:", "deletedcontributions": "Pisumbanging panganggo sing dibusak", "deletedcontributions-title": "Pisumbanging panganggo sing dibusak", "sp-deletedcontributions-contribs": "pasumbang", @@ -1857,9 +1891,12 @@ "listgrants": "Idin", "listgrants-grant": "Idin", "listgrants-rights": "Hak", + "listgrants-grant-display": "$1 ($2)", "trackingcategories": "Kategori panglacak", "trackingcategories-msg": "Kategori panglacak", "trackingcategories-name": "Jeneng layang", + "trackingcategories-nodesc": "Ora ana wedharané.", + "trackingcategories-disabled": "Kategori ora kaurubaké", "mailnologin": "Ora ana alamat kirim", "mailnologintext": "Panjenengan kudu [[Special:UserLogin|mlebu log]] lan duwé alamat layang-èl sing trep ing [[Special:Preferences|pilalané]] panjenengan kanggo nglayangi panganggo liyané.", "emailuser": "Kirimi panganggo iki layang-èl", @@ -1889,6 +1926,7 @@ "emailuserfooter": "Layang-e iki dikirimaké déning $1 marang $2 migunakaké fungsi \"Layangpanganggo\" ing {{SITENAME}}.", "usermessage-summary": "Tinggalaké layang sistem.", "usermessage-editor": "Pawartaning layang sistem", + "usermessage-template": "MediaWiki:UserMessage", "watchlist": "Pawawangan", "mywatchlist": "Pawawangan", "watchlistfor2": "Kanggo $1 $2", @@ -1907,7 +1945,7 @@ "notvisiblerev": "Révisi wis dibusak", "watchlist-details": "{{PLURAL:$1|Kaca cacah $1|Kaca cacah $1}} ana ing Pawawangané panjenengan (kalebu kaca-kaca parembugan).", "wlheader-enotif": "Wara-wara layang-èl diurubaké.", - "wlheader-showupdated": "Kaca-kaca sing wis owah wiwit ditiliki panjenengan kaping pungkasan, dituduhaké mawa '''aksara kandel'''", + "wlheader-showupdated": "Kaca kang wis owah kawit wektu pungkasan panjenengan priksa katuduhaké mawa hurup kandel.", "wlnote": "Ing ngisor iki {{PLURAL:$1|owahan pungkasan|$1 owahan pungkasan}} ing dalem {{PLURAL:$2|jam|$2 jam}} pungkasan, rikala $3, $4.", "wlshowlast": "Tuduhaké $1 jam $2 dina pungkasan", "watchlist-hide": "Dhelikaké", @@ -1924,7 +1962,7 @@ "watching": "Ngawasi...", "unwatching": "Ngilangi pangawasan...", "watcherrortext": "Ana masalah nalika ngganti setèlan pawawangané panjenengan tumrap \"$1\".", - "enotif_reset": "Tandhanana kabèh kaca sing wis ditiliki", + "enotif_reset": "Tandhani kabèh kaca kang wis daktiliki", "enotif_impersonal_salutation": "Panganggo {{SITENAME}}", "enotif_subject_deleted": "Halaman $1 di {{SITENAME}} telah dihapus oleh {{gender:$2|$2}}", "enotif_subject_created": "Halaman $1 di {{SITENAME}} telah dibuat oleh {{gender:$2|$2}}", @@ -1940,6 +1978,7 @@ "enotif_lastdiff": "Saperlu ndeleng owahan iki, tilikana $1", "enotif_anon_editor": "panganggo anonim $1", "enotif_body": "Sing minulya $WATCHINGUSERNAME,\n\nKaca $PAGETITLE ing {{SITENAME}} wis $CHANGEDORCREATED ing $PAGEEDITDATE déning $PAGEEDITOR, mangga mirsani $PAGETITLE_URL kanggo vèrsi pungkasan.\n\n$NEWPAGE\n\nSajarah suntingan: $PAGESUMMARY $PAGEMINOREDIT\n\nHubungana panyunting:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nKita ora bakal ngandhani manèh yèn diowahi manèh, kejaba panjenengan wis mirsani kaca iku. Panjenengan uga bisa mbusak tandha notifikasi kanggo kabèh kaca pangawasan ing daftar pangawasan panjenengan.\n\n Sistém notifikasi {{SITENAME}}\n\n--\nKanggo ngowahi préferènsi ing daftar pangawasan panjenengan, mangga mirsani\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nUmpan balik lan pitulung sabanjuré:\n$HELPPAGE", + "enotif_minoredit": "Iki besutan cilik", "created": "kadamel", "changed": "kaubah", "deletepage": "Busak kaca", @@ -1958,6 +1997,9 @@ "dellogpage": "Log busak", "dellogpagetext": "Ing ngisor iki kapacak log pambusakan kaca sing anyar dhéwé.", "deletionlog": "log busak", + "log-name-create": "Log panggawéning kaca", + "log-description-create": "Ing isor iki pratélan kaca kang mentas kagawé.", + "logentry-create-create": "$1 {{GENDER:$2|nggawé}} kaca $3", "reverted": "Dibalèkaké ing revisi sadurungé", "deletecomment": "Alesan:", "deleteotherreason": "Alesan liya utawa tambahan:", @@ -1967,7 +2009,7 @@ "delete-toobig": "Kaca iki darbé sajarah besutan sing dawa, punjul $1 {{PLURAL:$1|owahan}}.\nMbusak kaca sing kaya mangkono wis ora diidinaké kanggo njagani supaya ora ana sing rusak ing {{SITENAME}}.", "delete-warning-toobig": "Kaca iki duwé sajarah besut sing dawa, punjul $1 {{PLURAL:$1|révisi}}.\nMbusak kaca iki bisa ngrusak lakuné basis dhata ing {{SITENAME}};\nkudu diayahi kanthi ngati-ati.", "deleteprotected": "Panjenengan ora bisa mbusak kaca iki amarga direksa.", - "deleting-backlinks-warning": "'''Awas:''' Kaca liyane mungkin ana sing nautake ing kaca sing arep sampeyan busak.", + "deleting-backlinks-warning": "Pepéling: [[Special:WhatLinksHere/{{FULLPAGENAME}}|Ana kaca liya]] kang nggayut utawa tranklud marang kaca kang arep panjenengan busek.", "rollback": "Pulihaké besutan", "rollbacklink": "balèkaké", "rollbacklinkcount": "balèkaké $1 {{PLURAL:$1|besutan|besutan}}", @@ -2355,7 +2397,7 @@ "thumbnail_dest_directory": "Ora bisa nggawé dirèktori tujuan", "thumbnail_image-type": "Tipe gambar ora didhukung", "thumbnail_gd-library": "Konfigurasi pustaka GD ora pepak: fungsi $1 ilang", - "thumbnail_image-missing": "Barkas sing kayané ilang: $1", + "thumbnail_image-missing": "Barkasé kayané ora ana: $1", "import": "Impor kaca", "importinterwiki": "Impor saka wiki liya", "import-interwiki-text": "Pilih sawijining wiki lan irah-irahan kaca sing arep diimpor.\nTanggal révisi lan jeneng panyunting bakal dilestarèkaké.\nKabèh aktivitas impor transwiki bakal dilog ing [[Special:Log/import|log impor]].", @@ -2412,7 +2454,7 @@ "tooltip-pt-mytalk": "Kaca parembugané {{GENDER:|panjenengan}}", "tooltip-pt-anontalk": "Parembug ing besutan-besutan saka alamat IP iki", "tooltip-pt-preferences": "Pilalané {{GENDER:|panjenengan}}", - "tooltip-pt-watchlist": "Pratélaning kaca sing panjenengan awasi owah-owahané", + "tooltip-pt-watchlist": "Pratélan kaca kang panjenengan awasi owah-owahané", "tooltip-pt-mycontris": "Pratélaning pisumbangé {{GENDER:|panjenengan}}", "tooltip-pt-anoncontribs": "Pratélan besutané alamat IP iki", "tooltip-pt-login": "Panjenengan prayogané mlebu log, sanajan ora kudu", @@ -2513,10 +2555,10 @@ "pageinfo-robot-policy": "Diindhèks déning robot", "pageinfo-robot-index": "Éntuk", "pageinfo-robot-noindex": "Ora éntuk", - "pageinfo-watchers": "Cacahing sing ngawasi kaca", + "pageinfo-watchers": "Cacahé kang ngawasi kaca", "pageinfo-visiting-watchers": "Cacahé pandeleng kaca sing nekani besutan anyar", "pageinfo-few-watchers": "{{PLURAL:$1|Kang ndeleng|Kang ndeleng}} kurang saka $1", - "pageinfo-redirects-name": "Cacahing alihan menyang kaca iki", + "pageinfo-redirects-name": "Cacahé alihan menyang kaca iki", "pageinfo-subpages-name": "Cacahing anak kaca saka kaca iki", "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|alihan|alihan}}; $3 {{PLURAL:$3|non-alihan|non-alihan}})", "pageinfo-firstuser": "Kang nggawé kaca", @@ -2526,7 +2568,7 @@ "pageinfo-edits": "Gunggunging besutan", "pageinfo-authors": "Gunggung kang nganggit", "pageinfo-recent-edits": "Cacahé besutan saiki (ing dalem $1 pungkasan)", - "pageinfo-recent-authors": "Cacahing sing nganggit dinané iki", + "pageinfo-recent-authors": "Cacahé kang nulis sawatara wektu iki", "pageinfo-magic-words": "{{PLURAL:$1|Tembung|Tembung}} mujarab ($1)", "pageinfo-hidden-categories": "{{PLURAL:$1|Kategori}} ndhelik ($1)", "pageinfo-templates": "{{PLURAL:$1|Cithakan|Cithakan}} transklusi ($1)", diff --git a/languages/i18n/kjp.json b/languages/i18n/kjp.json index 9776999752..d88229ff34 100644 --- a/languages/i18n/kjp.json +++ b/languages/i18n/kjp.json @@ -5,6 +5,9 @@ "Rul1902" ] }, + "underline-always": "ကိုဲၜၠင်", + "underline-never": "ၮင်းဖိုင့်အေႋ", + "editfont-serif": "ခေါဟ်ထိင်ႋပါ့ဖောင့်", "sunday": "အ်ုတုက်", "monday": "အ်ုစန်", "tuesday": "အ်ုညာႋ", @@ -55,6 +58,20 @@ "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": "ကဏ္ဍကါင်ဖါသယ်", @@ -70,39 +87,68 @@ "about": "အ်ုကျံင်", "newwindow": "(ဝင်းဒိုးသင့်လ်ုၮါင်းဝယ် မ်ုပုဂ်ထုင်း)", "cancel": "မာလှ်ေအေး", + "moredotdotdot": "ၰိုဲမေံၜၠာ်...", + "morenotlisted": "စ်ုရင့်ယိုဝ် ဍုဂ်ပါင်အေ့ယာႋ။", + "mypage": "လက်မေံသး", "mytalk": "ဆ်ုခၠါန်ကင်ကာ", + "anontalk": "ဆ်ုခၠါင်ကင်ကာ", "navigation": "ပ်ုယုံ့", "and": " လ်ု", + "faq": "ဆ်ုအင်းစာအးသယ်လ်ုဖး", + "actions": "ဆ်ုသုဂ်ကၠယ်လ်ုဖး", "namespaces": "အ်ုမၠိင်ထိုဝ်", "variants": "အးမိင်အးစိင်လုက်ဆိင့်", "navigation-heading": "ၮဲဖၠေမီနူး", + "errorpagetitle": "ဆ်ုမး", "returnto": "$1 အိုဝ် မ်ုက္ဍာထါင်။", "tagline": "{{SITENAME}} ခဝ့်", "help": "မာၜိုင်မာဆိုင်", "search": "အင်းၰူ့", "searchbutton": "အင်းၰူ့", + "go": "လေဝ်", "searcharticle": "လေဝ်", "history": "ဃွှာန့်မေင်ႋစိင်", "history_short": "မေင်ႋစိင်", + "history_small": "မေင်ႋစိင်", + "updatedmarker": "လေဝ်ယောဝ်ႋဝေ့အ်ုလါင်ခါင့်ခါ့ အင်းတင်ထဝေ့", "printableversion": "လေဝ်", "permalink": "ဆ်ုသုဂ်ကၠယ်သီ့", + "print": "ထုဂ်ထင်းလိက်", "view": "မ်ုယောဝ်ႋ", "view-foreign": "မ်ုယောဝ်ႋ $1 ဝယ်", "edit": "အင်ႋတင်ႋ", + "edit-local": "အှ်လင်ကၠယ် ဆ်ုတုဂ်ကၠယ် မ်ုအင်းတင်လင်", "create": "ပ္တုံထံင်း", "create-local": "အှ်လင်ကၠယ် ဆ်ုတုဂ်ကၠယ် မ်ုဆူ့ဍုဂ်လင်", "delete": "ထုဂ်ဆိင့်", + "undelete_short": "{{PLURAL:$1|ဆ်ုအင်းတင်လ်ုၮါင်း|ဆ်ုအင်းတင် $1 ၮါင်းၮှ်}}အိုဝ် လ်ုထုက်ဆိင့်လိုင်ၜး", + "viewdeleted_short": "{{PLURAL:$1|ထုဂ်ဆိင့်ခၞိက်ဆ်ုအင်းတင်လ်ုၮါင်း|ထုဂ်ဆိင့်ခၞိက် ဆ်ုအင်းတင် $1 ၮါင်း}}ၮှ် မ်ုယောဝ်ႋ", + "protect": "ခ်ုဝုင်ႋလာႋ", + "protect_change": "မ်ုအင်းလယ်", + "unprotect": "ဝီးၜါ်ထ မ်ုအင်းလယ်", "newpage": "လိက်မေံသင့်", "talkpagelinktext": "ဆ်ုခၠါင်ကင်ကာ", + "specialpage": "လိက်မေံခေါဟ်", "personaltools": "ဟ်ုဆ်ုမာ ဆ်ုဖၠင့်", "talk": "လဝ်ထာင်ကင်ကာ", "views": "ဟ်ုဍးအ်ုလာၯင်သယ်အး", "toolbox": "ခြီခြာ့သယ်", + "tool-link-userrights": "{{GENDER:$1|ၮင့်ဆါႋ}}ကုံလွာဲသယ်လ်ုဖး မ်ုအင်းလယ်", + "tool-link-userrights-readonly": "{{GENDER:$1|ၮင့်ဆါႋ}}ကုံလွာဲသယ်လ်ုဖး မ်ုယောဝ်ႋ", + "tool-link-emailuser": "ယိုဝ်{{GENDER:$1|ၮင့်ဆါႋ}}ၮှ် မ်ုသုံ့အီမေံႋ", + "imagepage": "မ်ုယောဝ်ႋဖိုင့်လိက်မေံ", + "mediawikipage": "မ်ုယောဝ်ႋလိက်မေံဖိုဟ်", + "templatepage": "တာင်ႋပ်ုလိတ်သယ် မ်ုယောဝ်ႋ", + "viewhelppage": "မ်ုယောဝ်ႋဖိုင့်လိက်မေံ", + "categorypage": "အ်ုဆုဂ်တုဂ်လိက်မေံသယ် မ်ုယောဝ်ႋ", + "viewtalkpage": "မ်ုယောဝ်ႋ လဝ်ခၠါင်ဆ်ုခၠါင်", "otherlanguages": "လိက်ဆ်ုခၠါင် အ်ုၯာၯံင်သယ်", "redirectedfrom": "($1 ခဝ့် ပ်ုယုံ့ထာ့)", "redirectpagesub": "ထါင်ၮဲအ်ုထိုဝ် လိက်မေံၜၠါ်", "redirectto": "က္ဍာထိုဝ်ၜုဂ် -", "lastmodifiedat": "လိက်မေံယိုဝ် $1၊ $2 အ်ုခါ့ ဆ်ုအင်ႋတင်ႋထာ့ဝေ့လှ်။", + "viewcount": "လိက်မေံယိုဝ် {{PLURAL:$1|လ်ုၜၠင်|$1 ၜၠင်}} အွးလင်ထ။", + "protectedpage": "လိက်မေံဆ်ုဝီးၜါ်", "jumpto": "မ်ုၯယ့်ထါင်ယိုဝ်", "jumptonavigation": "ပ်ုယုံ့", "jumptosearch": "အင်းၯူ့", @@ -114,7 +160,7 @@ "disclaimers": "တင်ဆ်ုခၠါင်", "disclaimerpage": "Project:ကိုဝ်မိင်ကိုဝ်စိင် ၜးတ်ုဒှ်", "edithelp": "အင်ႋတင်ႋ ဆ်ုမာၜိုင်", - "mainpage": "လိက်မေံယာ့", + "mainpage": "လိက်မေံၜၠါ်ခေါဟ်", "mainpage-description": "လက်မေံယာ့", "portal": "အ်ုထိုဝ်အ်ုမေံလင်ႋ", "portal-url": "Project:အ်ုထိုဝ်အ်ုမေံလင်ႋ", diff --git a/languages/i18n/ko.json b/languages/i18n/ko.json index 9945fe5a20..91d54777ed 100644 --- a/languages/i18n/ko.json +++ b/languages/i18n/ko.json @@ -3539,6 +3539,7 @@ "redirect-file": "파일 이름", "redirect-logid": "기록 ID", "redirect-not-exists": "값을 찾을 수 없습니다", + "redirect-not-numeric": "값이 숫자가 아닙니다", "fileduplicatesearch": "중복된 파일 검색", "fileduplicatesearch-summary": "파일 해시값을 이용해 중복 파일을 검색합니다.", "fileduplicatesearch-filename": "파일 이름:", diff --git a/languages/i18n/lez.json b/languages/i18n/lez.json index 5b501c8285..5cd97ceb36 100644 --- a/languages/i18n/lez.json +++ b/languages/i18n/lez.json @@ -16,7 +16,8 @@ "Умар", "아라", "Amire80", - "Stjn" + "Stjn", + "Raa555" ] }, "tog-underline": "ЭлячӀунрин кӀаникай цӀар чӀугун", @@ -903,7 +904,7 @@ "file-info-size": "$1 × $2 пикселар, файлдин кьадар: $3, MIME жуьре: $4", "file-nohires": "Идалайни хъсан ери авайд туш", "svg-long-desc": "SVG файл, номилдаказ $1 $2 × пикселяр, файлдин кьадар: $3", - "show-big-image": "ЦӀарафа хвена тунвай жергедай", + "show-big-image": "Двулдин файл", "show-big-image-size": "$1 × $2 пиксел", "bad_image_list": "Формат гьихьтинди хьана кlанда:\n\nCиягьда авай анжах (* лишандихъ галаз эгечIзавай цIарарин) элементар гьисабдиз къачуда.\nЦlарцIе авай сад лагьай элячIун ттун патал къадагъа алай шикилдиз элячIун хьана кlанзава.\nГьар са цlарцIе авай гьар са ахпагьан элячIунар кьетIендинбур хьиз кьабулда, мисал яз, суьрет тваз мумкинвал авай ччинар.", "metadata": "Метамалуматар", diff --git a/languages/i18n/lt.json b/languages/i18n/lt.json index d65c445a78..0fdcede079 100644 --- a/languages/i18n/lt.json +++ b/languages/i18n/lt.json @@ -1898,6 +1898,7 @@ "protectedtitles-submit": "Rodyti pavadinimus", "listusers": "Naudotojų sąrašas", "listusers-editsonly": "Rodyti tik keitimus atlikusius naudotojus", + "listusers-temporarygroupsonly": "Rodyti tik laikinųjų vartotojų grupių naudotojus", "listusers-creationsort": "Rodyti pagal paskyros sukūrimo datą", "listusers-desc": "Išdėstyti abėcėline tvarka", "usereditcount": "$1 {{PLURAL:$1|keitimas|keitimai|keitimų}}", diff --git a/languages/i18n/lv.json b/languages/i18n/lv.json index dcd8560c8f..e2ded5c056 100644 --- a/languages/i18n/lv.json +++ b/languages/i18n/lv.json @@ -372,6 +372,7 @@ "mypreferencesprotected": "Jums nav tiesību rediģēt savus iestatījumus.", "ns-specialprotected": "Nevar izmainīt īpašās lapas.", "titleprotected": "Šī lapa ir aizsargāta pret izveidošanu. To aizsargāja [[User:$1|$1]].\nNorādītais iemesls bija $2.", + "invalidtitle": "Nekorekts nosaukums", "invalidtitle-knownnamespace": "Nederīgs nosaukums ar vārdtelpu \"$2\" un tekstu \"$3\"", "invalidtitle-unknownnamespace": "Nederīgs nosaukums ar nezināmu vārdtelpas numuru \"$1\" un tekstu \"$2\"", "exception-nologin": "Neesat pieslēdzies", @@ -997,7 +998,7 @@ "grouppage-bureaucrat": "{{ns:project}}:Birokrāti", "grouppage-suppress": "{{ns:project}}:Cenzētāji", "right-read": "Lasīt lapas", - "right-edit": "Izmainīt lapas", + "right-edit": "Labot lapas", "right-createpage": "Izveidot lapas (kuras nav diskusiju lapas)", "right-createtalk": "Izveidot diskusiju lapas", "right-createaccount": "Izveidot jaunus dalībnieka kontus", @@ -1152,6 +1153,8 @@ "rcfilters-other-review-tools": "Citi pārskatīšanas rīki", "rcfilters-group-results-by-page": "Grupēt rezultātus pēc lapas", "rcfilters-activefilters": "Aktīvie filtri", + "rcfilters-activefilters-hide": "Paslēpt", + "rcfilters-activefilters-show": "Parādīt", "rcfilters-advancedfilters": "Paplašinātie filtri", "rcfilters-limit-title": "Rādāmie rezultāti", "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|izmaiņas|izmaiņa|izmaiņas}}, $2", @@ -1167,7 +1170,7 @@ "rcfilters-savedqueries-rename": "Pārsaukt", "rcfilters-savedqueries-setdefault": "Uzstādīt kā noklusēto", "rcfilters-savedqueries-unsetdefault": "Noņemt kā noklusēto", - "rcfilters-savedqueries-remove": "Noņemt", + "rcfilters-savedqueries-remove": "Dzēst", "rcfilters-savedqueries-new-name-label": "Nosaukums", "rcfilters-savedqueries-new-name-placeholder": "Apraksti filtra būtību", "rcfilters-savedqueries-apply-label": "Izveidot filtru", @@ -1248,6 +1251,7 @@ "rcfilters-watchlist-edit-watchlist-button": "Labot manu uzraugāmo lapu sarakstu", "rcfilters-watchlist-showupdated": "Izmaiņas lapās, kuras nav apmeklētas kopš izmaiņu veikšanas, ir trekninātā rakstā.", "rcfilters-preference-label": "Paslēpt uzlaboto pēdējo izmaiņu versiju", + "rcfilters-target-page-placeholder": "Ievadi lapas nosaukumu (vai kategoriju)", "rcnotefrom": "Zemāk {{PLURAL:$5|redzamas izmaiņas|redzama izmaiņa|redzamas izmaiņas}} kopš $3, $4 (parādītas ne vairāk kā $1).", "rclistfromreset": "Atiestatīt datuma izvēli", "rclistfrom": "Parādīt jaunas izmaiņas kopš $3 $2", @@ -1472,9 +1476,9 @@ "filehist-filesize": "Faila izmērs", "filehist-comment": "Komentārs", "imagelinks": "Faila lietojums", - "linkstoimage": "{{PLURAL:$1|Šajās $1 lapās ir saites|Šajā lapā ir saite|Šajās $1 lapās ir saites}} uz šo failu:", + "linkstoimage": "Šo failu izmanto {{PLURAL:$1|šajās $1 lapās|šajā $1 lapā|šajās $1 lapās}}:", "linkstoimage-more": "Uz šo failu ir saites vairāk nekā $1 {{PLURAL:$1|lapās|lapā|lapās}}.\nŠajā sarakstā ir tikai {{PLURAL:$1|pirmās $1 saistītās lapas|pirmā $1 saistītā lapa|pirmās $1 saistītās lapas}} uz šo failu.\nPieejams arī [[Special:WhatLinksHere/$2|pilns saraksts]].", - "nolinkstoimage": "Nevienā lapā nav norāžu uz šo attēlu.", + "nolinkstoimage": "Šo failu neizmanto nevienā lapā.", "morelinkstoimage": "Skatīt [[Special:WhatLinksHere/$1|vairāk saites]] uz šo failu.", "linkstoimage-redirect": "$1 (faila pāradresācija) $2", "duplicatesoffile": "{{PLURAL:$1|1=Šis fails ir šī faila dublikāts|Šie $1 faili ir šī faila dublikāti|Šis $1 fails ir šī faila dublikāts|Šie $1 faili ir šī faila dublikāti}} ([[Special:FileDuplicateSearch/$2|vairāk informācijas]]):", @@ -3016,6 +3020,7 @@ "expandtemplates": "Izvērst veidnes", "expand_templates_output": "Rezultāts", "expand_templates_ok": "Labi", + "expand_templates_remove_comments": "Noņemt komentārus", "expand_templates_remove_nowiki": "Cenzēt iezīmes rezultātā", "expand_templates_preview": "Pirmskats", "pagelanguage": "Mainīt lapas valodu", diff --git a/languages/i18n/mk.json b/languages/i18n/mk.json index c3737f448e..91203e9738 100644 --- a/languages/i18n/mk.json +++ b/languages/i18n/mk.json @@ -1158,14 +1158,14 @@ "grouppage-interface-admin": "{{ns:project}}:Администратори на посредникот", "grouppage-bureaucrat": "{{ns:project}}:Бирократи", "grouppage-suppress": "{{ns:project}}:Притајување", - "right-read": "Читање страници", + "right-read": "Читање на страници", "right-edit": "Уредување на страници", "right-createpage": "Создавање на страници (кои не се разговорни страници)", "right-createtalk": "Создавање на разговорни страници", "right-createaccount": "Создавање на нови кориснички сметки", "right-autocreateaccount": "Автоматска најава со надворешна корисничка сметка", "right-minoredit": "Означување на уредувањата како ситни", - "right-move": "Преместување страници", + "right-move": "Преместување на страници", "right-move-subpages": "Преместување на страници со нивните потстраници", "right-move-rootuserpages": "Преместување на основни кориснички страници", "right-move-categorypages": "Преместување на категориски страници", @@ -1179,7 +1179,7 @@ "right-purge": "Бришење од опслужувачки меѓусклад на страницата без барање потврда за тоа", "right-autoconfirmed": "Без ограничувања на стапки за IP-адреса", "right-bot": "Третиран како автоматски процес", - "right-nominornewtalk": "Ситните уредувања да не поттикнуваат потсетник за нова порака", + "right-nominornewtalk": "Ситните уредувања на разговорни страници да не поттикнуваат потсетник за нова порака", "right-apihighlimits": "Користење на помалку ограничени барања од извршникот", "right-writeapi": "Можност за запишување во извршникот", "right-delete": "Бришење страници", @@ -1269,7 +1269,7 @@ "grant-basic": "Основни права", "grant-viewdeleted": "Преглед на избришани податотеки и страници", "grant-viewmywatchlist": "Преглед на вашите набљудувања", - "grant-viewrestrictedlogs": "Погл. ограничени дневнички ставки", + "grant-viewrestrictedlogs": "Преглед на ограничени дневнички ставки", "newuserlogpage": "Дневник на регистрирања на корисници", "newuserlogpagetext": "Ова е дневник на регистрирани корисници.", "rightslog": "Дневник на корисничките права", @@ -3628,6 +3628,7 @@ "redirect-file": "Име на податотека", "redirect-logid": "Назнака на дневникот", "redirect-not-exists": "Вредноста не е најдена", + "redirect-not-numeric": "Вредноста не е бројчена", "fileduplicatesearch": "Барање на дуплирани податотеки", "fileduplicatesearch-summary": "Пребарување на дуплирани податотеки по тарабни вредности.", "fileduplicatesearch-filename": "Податотека:", diff --git a/languages/i18n/mni.json b/languages/i18n/mni.json index 28d4714f9f..d8267439f3 100644 --- a/languages/i18n/mni.json +++ b/languages/i18n/mni.json @@ -524,6 +524,7 @@ "postedit-confirmation-saved": "ꯅꯪꯒꯤ ꯁꯦꯝꯒꯠꯄꯗꯨ ꯇꯨꯡꯁꯤꯟꯈꯔꯦ ꯫", "postedit-confirmation-published": "ꯅꯪꯒꯤ ꯁꯦꯝꯒꯠꯄꯗꯨ ꯐꯣꯡꯗꯣꯛꯈꯔꯦ ꯫", "content-model-wikitext": "ꯋꯤꯀꯤ ꯋꯥꯍꯩ ꯋꯥꯇꯥ", + "content-model-javascript": "ꯖꯥꯕꯥ ꯃꯌꯦꯛ", "content-json-empty-object": "ꯑꯍꯥꯡꯕꯥ ꯄꯣꯠꯁꯛ", "viewpagelogs": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤꯒꯤ ꯅꯧꯅ ꯆꯪꯉꯨ", "currentrev-asof": "$1 ꯒꯤ ꯅꯧꯅꯥ ꯑꯃꯨꯛꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ ꯃꯤꯠꯌꯦꯡ", @@ -533,6 +534,7 @@ "nextrevision": "ꯑꯅꯧꯕꯥ ꯑꯃꯨꯛꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ", "currentrevisionlink": "ꯈꯋꯥꯏꯗꯒꯤ ꯅꯧꯅꯥ ꯑꯃꯨꯛ ꯌꯦꯡꯕꯥ", "cur": "ꯍꯧ", + "next": "ꯃꯊꯪ", "last": "ꯃꯃꯥꯡꯒꯤ", "page_first": "ꯑꯍꯥꯟꯕ", "page_last": "ꯑꯔꯣꯏꯕ", @@ -543,8 +545,13 @@ "history-feed-title": "ꯄꯨꯋꯥꯔꯤ ꯑꯃꯨꯛ ꯍꯟꯅ ꯌꯦꯡꯕ", "history-feed-item-nocomment": "$2 ꯗ$1", "rev-delundel": "ꯑꯍꯣꯡꯕꯥ ꯎꯍꯟꯂꯤꯕꯥ", + "rev-showdeleted": "ꯎꯨꯠꯂꯨ", + "revisiondelete": "ꯀꯛꯊꯠꯄ/ꯀꯛꯊꯠꯇꯕ ꯑꯃꯨꯛꯍꯟꯅ ꯌꯦꯡꯕ", "revdelete-show-file-submit": "ꯍꯣꯏ", + "revdelete-radio-set": "ꯑꯔꯣꯠꯄ", "revdelete-radio-unset": "ꯎꯍꯟꯕ", + "pagehist": "ꯂꯃꯥꯏꯒꯤ ꯄꯨꯋꯥꯔꯤ", + "deletedhist": "ꯀꯛꯊꯠꯈꯤꯕꯒꯤ ꯄꯨꯋꯥꯔꯤ", "mergelog": "ꯂꯣꯒ ꯄꯨꯟꯁꯤꯟꯕ", "history-title": "Revision history of \"$1\"", "difference-title": "$1 ꯒꯤ ꯑꯃꯨꯛꯍꯟꯕꯥ ꯈꯦꯠꯅꯕꯥꯒꯤ ꯃꯔꯛ", diff --git a/languages/i18n/mnw.json b/languages/i18n/mnw.json index b51843c428..48ed4cc28d 100644 --- a/languages/i18n/mnw.json +++ b/languages/i18n/mnw.json @@ -2,13 +2,18 @@ "@metadata": { "authors": [ "Dr Lotus Black", - "Htawmonzel" + "Htawmonzel", + "Aue Nai" ] }, "tog-underline": "လေန် မတာပၞောန်သၟဝ်", "tog-hideminor": "ပၞုက် အရာမပလေဝ်ဒါန်လဝ် ကိစ္စဟွံဇၞော် နူကဵု ပြဟ်ဟ်ဏအ်", "tog-hidepatrolled": "ပၞုက် အရာမပလေဝ်ဒါန်လဝ် ကိစ္စဇၞော်ဇၞော် နူကဵု ပြဟ်ဟ်ဏအ်", "tog-hidecategorization": "ပၞုက် အရာမဖျေဟ်ကဏ္ဍ ကုမုက်လိက်", + "tog-showhiddencats": "ထ္ၜးကဆံၚ်မပၞုက်လဝ်", + "tog-prefershttps": "လၟိုန်သုၚ်စောဲကေတ် လာၚ်မမၞုံဂီုကၠီု အခိၚ်မလုပ်လံက်အေန်", + "underline-always": "လၟိုန်အခါ", + "underline-never": "မွဲလှေ်ဟွံမွဲ", "sunday": "တ္ၚဲအဒိုက်", "monday": "တ္ၚဲစန်", "tuesday": "တ္ၚဲအၚာ", @@ -59,57 +64,107 @@ "oct": "အံက်", "nov": "နဝ်", "dec": "ဒဳ", + "january-date": "ဇန်နဝါရဳ $1", + "february-date": "ဖေဖဝ်ရဳ$1", + "march-date": "မာတ် $1\nဒါန်ပေၚ်အာ ၁၀ တုဲ ညတအ်ပလံၚ်နၚ်\nသွက်အခေါၚ်ချူဒါန်ပ္ဍဲမုက်လိက်ဂှ်\nတၚ်ဂုဏ်ရ။", + "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": "ကဏ္ဍလစှ်ေဂမၠိုင်", "category-media-header": "မဳဒဳယာ စပ်ကဵု ကဏ္ဍ \"$1\"", "category-empty": "ကဏ္ဍဏအ် ပြဟ်ဟ်ဏအ် ဟွံမဲ ကု မုက်လိက် ဟွံသေင်မ္ဂး ပရူမွဲမွဲဏီရ", "hidden-categories": "{{PLURAL:$1|ကဏ္ဍ မပၞုက်|ကဏ္ဍ မပၞုက်ဂမၠိုင်}}", + "hidden-category-category": "ကဆံၚ် မပၞုက်လဝ်", "category-subcat-count": "{{PLURAL:$2|ကဏ္ဍဏအ်ဂှ် ကဏ္ဍလစှ်ေ နွံဆ အတိုင်ဗွဲသၟဝ်ဝွံရ၊၊|ကဏ္ဍဏအ် နွံဆအတိုင် ဗွဲသၟဝ်ဝွံရ၊၊ {{PLURAL:$1|ကဏ္ဍလစှ်ေ|$1 ကဏ္ဍလစှ်ေဂမၠိုင်}}, ပၞောဝ်ကဵု $2 သီုဖအိုတ်}}", + "category-subcat-count-limited": "ကဆံၚ်(အဇာ)ဝွံ နွံအတိုၚ်ဗွဲသၟဝ် {{PLURAL:$1|ကဆံၚ်ပါ်|$1ကဆံၚ်ပါ်ဂမၠိုၚ်}}", "category-article-count": "{{PLURAL:$2|ကဏ္ဍဏအ် နွံဆၜိုတ် အတိုင်ဗွဲသၟဝ်ဏအ်ရ.| ဗွဲသၟဝ်ဏအ်ဂှ် {{PLURAL:$1| ဒှ်လၟိဟ် မုက်လိက်| ဒှ်လၟိဟ် မုက်လိက်ဂမၠိုင် $1 }} စပ် ကုကဏ္ဍဏအ်ရ၊၊ သီုဖအိုတ် နွံ $2}}", + "category-article-count-limited": "အတိုၚ်ဗွဲသၟဝ်{{PLURAL:$1|မုက်ဂှ်|$1 မုက်တအ်}} ပ္ဍဲကဆံၚ်မလၟုဟ်.", "category-file-count": "{{PLURAL:$2|ကဏ္ဍဏအ် နွံဆၜိုတ် ဝှာင်|အတိုင် ဗွဲသၟဝ်ဏအ်ရ {{PLURAL:$1|ဝှာင် ဂှ်|$1 ဝှာင်တအ် ဂှ်}} ပ္ဍဲကဏ္ဍဏအ် သီုဖအိုတ် နွံ $2 ၊၊}}", + "category-file-count-limited": "အတိုၚ်ဗွဲသၟဝ်{{PLURAL:$1|ဝှာၚ်|$1 ဝှာၚ်ဂမၠိုၚ်}} ပ္ဍဲကဆံၚ်မလၟုဟ်.", "listingcontinuesabbrev": "ဆက်", + "index-category": "မုက်လိက်မစၞောန်လဝ်", "noindex-category": "မုက်လိက် မသက္ကုလိက်", "broken-file-category": "မုက်လိက် နကဵုလေန် ဝှာင်မလီုလာ်ဂမၠိုင်", "about": "ပရူ", + "article": "မုက်လိက် မာတိကာဂမၠိုင်", "newwindow": "(ပံက် ပ္ဍဲ မုက်ဗတင် တၟိ)", "cancel": "တးပဲါ", + "moredotdotdot": "ထပ်...", + "morenotlisted": "စရၚ်ဏအ်ဒဒှ်ဍိုက်ပေၚ်မံၚ်ယျ", + "mypage": "မုက်လိက်", "mytalk": "ဓရီုကျာ", + "anontalk": "ဓရီုကျာ", "navigation": "သ္ၚိအင်", "and": " ကေုာံ", + "faq": "FAQ", + "actions": "ကၠောန်", "namespaces": "ဒၞာဲယၟု", "variants": "မူတၞဟ်", "navigation-heading": "သ္ၚိအင် မေန်နူ", + "errorpagetitle": "ဗၠေတ်", "returnto": "ကလေင်အာ ဇရေင် $1", "tagline": "နူ {{SITENAME}}", "help": "ရီု", "search": "ဂၠာဲ", "searchbutton": "ဂၠာဲ", + "go": "အာ", "searcharticle": "အာ", "history": "ဝှာင် လၟေင်အပြံင်အလှာဲ", "history_short": "အရာမဗှ်လဝ်တုဲ", + "history_small": "လၟေင်မပြံင်လှာဲလဝ်", "printableversion": "မူလိက် မပြေန်ပ္တိတ်ဂွံ", "permalink": "ဌာန်ဒတန်လေန် လၟိုန်", + "print": "ပတိတ်", "view": "ဗဗဵု", "view-foreign": "ဗဵု ပ္ဍဲ $1", "edit": "ပလေဝ်ဒါန်", + "edit-local": "စုတ် ပရူပရာဒေသ", "create": "ခၞံကၠောန်", "create-local": "စုတ် ပရူပရာဒေသ", "delete": "ပလီု", + "protect": "စဵုဒၞာ", + "protect_change": "ပြံင်လှာဲ", + "unprotect": "ပရေင်စဵုဒၞာ မုက်လိက်", "newpage": "မုက်လိက် တၟိ", "talkpagelinktext": "ဓရီုကျာ", + "specialpage": "မုက်လိက် တၟေင်", "personaltools": "ကြိယာ သွက်ပူဂဵု", "talk": "သဳကၠဳ", "views": "ထ္ၜး", "toolbox": "ကြိယာ", + "tool-link-userrights": "ပြံၚ်{{GENDER:$1|ညးလွပ်}} ဂကောံဂမၠိုၚ်", + "tool-link-userrights-readonly": "ရံၚ်{{GENDER:$1|ညးလွပ်}} ဂကောံဂမၠိုၚ်", + "tool-link-emailuser": "ပလံၚ်လိက်ဣဏံ{{GENDER:$1|ညးလွပ်}}", + "imagepage": "ဗဵု မုက်လိက် ဝှာင်", + "mediawikipage": "ဗဵု မုက်လိက် ဓရီုကျာ", + "templatepage": "ဗဵု မုက်လိက် တာန်ပလုက်", + "viewhelppage": "ဗဵု မုက်လိက် ရီုဗၚ်", + "categorypage": "ဗဵု မုက်လိက်ကဏ္ဍ", + "viewtalkpage": "ဗဵု မသဳကၠဳ", "otherlanguages": "နကဵု အရေဝ်ဘာသာ တၞဟ်", "redirectedfrom": "(ကလေင်ထ္ၜး နူ $1)", "redirectpagesub": "မုက်လိက် ကလေင်ပညုင်", "redirectto": "ကလေင်စၞောန်ပညုင်လဝ် နူကဵု-", "lastmodifiedat": "မုက်လိက်ဏအ် လက္ကရဴအိုတ် ပလေဝ်ဒါန်လဝ် ပ္ဍဲ $1 ပ္ဍဲ $2", + "viewcount": "မုက်လိက်ဏအ်ဂှ် ဒ:ဒုၚ်လုပ်လဝ်တုဲ{{PLURAL:$1|မွဲအလန်|$1 ဂၠိုၚ်ကဵုအလန်}}", + "protectedpage": "မုက်လိက် စဵုဒၞဲါလဝ်", "jumpto": "ဒံင် လုပ်", "jumptonavigation": "သ္ၚိအင်", "jumptosearch": "ဂၠာဲ", + "pool-timeout": "အခိၚ်အိုတ်အာယျ မၚ်မံၚ်သွက်ဂွံလုပ်", + "pool-errorunknown": "ဟွံတီ ဗီုလဵုဗၠေတ်", + "pool-servererror": "ပရေၚ်ကမၠောန်မအောန်ကဵုဆိုက်ဗ္ဒက်ဂှ် ဟွံသၟဟ်အစောန် ($1)", + "poolcounter-usage-error": "သုၚ်စောဲ ဗၠေတ်:$1", "aboutsite": "ပရူ {{SITENAME}}", "aboutpage": "Project:ပရူ", "copyright": "လိက်ဂှ် မံက် ပ္ဍဲ $1 ယဝ်ရတင်ယောင်ယာ မွဲမွဲ ဟွံမွဲမ္ဂး၊၊", @@ -119,12 +174,17 @@ "disclaimers": "ဒဒှ်မဟွံဆက်စပ်", "disclaimerpage": "Project:ဒဒှ်မဟွံဆက်စပ် နာနာ", "edithelp": "အရီုအဗင် ပ္ဍဲအရာမပလေဝ်ဒါန်", + "helppage-top-gethelp": "ရီု", "mainpage": "မုက်လိက်တမ်", "mainpage-description": "မုက်လိက်တမ်", + "policy-url": "Project:မူဝါဒ", "portal": "ပါင်မုက် ဂကောံ", "portal-url": "Project:ပါင်မုက် ဂကောံ", "privacy": "ပဝ်လသဳ မဆေင်ကဵု အခေါင်အရာပူဂဵု", "privacypage": "Project:ပဝ်လသဳ အခေါင်ပူဂဵု", + "badaccess": "တင်သၠးအခေါင် ဗၠေတ်", + "badaccess-group0": "ညးလွဟ် ဟွံကလိဂွံအခေါၚ်သွက်ဂွံပသောၚ်သ္အး ကမၠောန်ညးလွဟ်မအာတ်လဝ်အခေါၚ်ဂှ်", + "ok": "ခိုဟ်", "retrievedfrom": "ကလေင်သီကေတ်လဝ် နူ \"$1\"", "youhavenewmessages": "{{PLURAL:$3|မၞး ကလိဂွံ}} $1 ($2).", "youhavenewmessagesfromusers": "{{PLURAL:$4|မၞး ကလိဂွံ}} $1 နူ {{PLURAL:$3| မဒှ် ညးလွပ်တၞဟ်မွဲ|$3 ညးလွပ်ဂမၠိုင်}} ($2).", @@ -137,6 +197,15 @@ "viewsourcelink": "ထ္ၜး တမ်ရိုဟ်", "editsectionhint": "ဒၞာဲ မပလေဝ်ဒါန် - $1", "toc": "မာတိကာ", + "showtoc": "ထ္ၜး", + "hidetoc": "ဗဒန်", + "collapsible-collapse": "ဒေါမ်", + "collapsible-expand": "သၠဲ", + "confirmable-confirm": "ဒှ်{{GENDER:$1|ညးလွပ်}} ချိုတ်ပၠိုတ်ဟာ", + "confirmable-yes": "ယွံ", + "confirmable-no": "ဟအှ်ေ", + "thisisdeleted": "ဗဵု ဟွံသေၚ် ကလၚ်စွံ $1 ဟာ", + "viewdeleted": "ဗဵု $1 ဟာ", "site-atom-feed": "$1 ဒၞာဲ ဗလးပတိတ်", "page-atom-feed": "\"$1\" ဒၞာဲ ဗလးပတိတ်", "red-link-title": "$1(မုက်လဝ်ဏအ် ဟွံပြာကတ်)", @@ -151,38 +220,104 @@ "mainpage-nstab": "မုက်လိက်တမ်", "nosuchspecialpage": "မုက်လိက် တၟေင် ညံင်ရဴဏအ် ဟွံမဲ", "nospecialpagetext": "မၞး အာတ်မိက်လဝ် မုက်လိက်တၟေင် မဟွံမဲမွဲရ၊၊\n\nစရင် မုက်လိက်တၟေင် မနွံတအ်ဂှ် ဂွံဆဵုကေတ် ပ္ဍဲ [[Special:SpecialPages|{{int:specialpages}}]].", + "error": "ဗၠေတ်", + "databaseerror-function": "ကမၠောန်: $1", + "databaseerror-error": "ဗၠေတ်: $1", "badtitle": "က္ဍိုပ်လိက် ဟွံခိုဟ်", "badtitletext": "မုက်လိက် မအာတ်မိက်လဝ်ဂှ် ဟွံသၟဟ်အစောမ်၊ သၠာတ်သၠးဒၟံင် ဟွံသေင်မ္ဂး ဆက်စၠောအ်လေန်လဝ် ကုအရေဝ်ဘာသာနာနာ ဟွံသေင်မ္ဂး က္ဍိုပ်လိက် အပ္ဍဲအကြာဝဳကဳ ဟွံဒးရ၊၊\nဟိုတ်နူ စကာလဝ် မလိက် နဒဒှ်က္ဍိုပ်လိက်ဟွံဂွံ ပါလုပ်ဒၟံင် မွဲမ ဟွံသေင်မ္ဂး မဂၠိုင် ကုမ လေဝ် ဒှ်မာန်ရ၊၊", "viewsource": "ထ္ၜး တမ်ရိုဟ်", "viewsource-title": "ဗဵု တမ်ရိုဟ် သွက် $1", "viewsourcetext": "မၞး ဗဵု ကေုာံ စၠောအ်ကပ်ပဳကေတ် တမ်ရိုဟ် မုက်လိက်ဏအ် ဂွံရ၊၊", + "exception-nologin": "ဟွံ လုပ်လံက်အေန်လဝ်", + "welcomeuser": "ဒုၚ်တၠုၚ်,$1", + "welcomecreation-msg": "အကံက်မၞးခၞံကၠောန်တုဲယျ.\nမၞးပြံၚ်ကေတ်ဒြပ်မၞး{{SITENAME}}[[Special:စိတ်လုပ်စ|စိုတ်လုပ်စဂမၠိုၚ်]]ယဝ်မၞးနွံပၟိက်မ္ဂး.", + "yourname": "ယၟုညးလွပ်:", "userlogin-yourname": "ယၟုညးလွပ်", "userlogin-yourname-ph": "စုတ် ယၟုညးလွပ်", + "createacct-another-username-ph": "စုတ် ယၟုညးလွပ်", + "yourpassword": "မအက္ခရ်ဓလုက်", "userlogin-yourpassword": "မလိက်ပၞုက်", "userlogin-yourpassword-ph": "စုတ် မလိက်ပၞုက် မၞးညိ", "createacct-yourpassword-ph": "စုတ် မလိက်ပၞုက် မွဲညိ", + "yourpasswordagain": "ကလေၚ်တက် မအက္ခရ်ဓလုက်:", "createacct-yourpasswordagain": "ပဒတန် မလိက်ပၞုက်ညိ", "createacct-yourpasswordagain-ph": "စုတ် မလိက်ပၞုက် မွဲဝါပၠန်ညိ", "userlogin-remembermypassword": "လုပ်လံက်အေန်လဝ် အဲညိ၊၊", + "userlogin-signwithsecure": "သုၚ်စောဲလာၚ်ဆက်စၠောံမနွံကဵုဂီုကၠီုညိ", + "cannotlogin-title": "လုပ်လံက်အေန်ဟွံဂွံ", + "cannotlogin-text": "လုပ် လံက်အေန်ဂှ် ဒှ်ဟွံမာန်.", + "cannotloginnow-title": "လၟုဟ် လုပ်ဇၟိက်ဟွံဂွံ", + "cannotloginnow-text": "အဃောသုၚ်စောဲဒၟံၚ်$1ဂှ် လုပ်ဇၟိက်လံက်အေန် ဟွံဂွံ.", + "cannotcreateaccount-title": "ခၞံဗဒှ် အကံက် ဟွံဂွံ", + "cannotcreateaccount-text": "ခၞံကၠောန်အံက်တၟိဂှ် ဂွံဟွံမာန်ပ္ဍဲဝဳကဳဏအ်.", + "yourdomainname": "ဒိုမိန်မၞး :", + "password-change-forbidden": "မၞးလှာဲကေတ်မအက္ခရ်ပၞုက်ဂမၠိုၚ်ဟွံဂွံလ္တူဝဳကဳဏအ်.", "login": "လုပ်လံက်အေန်", + "login-security": "သ္ပဒတန်လက်သဏ်ဇကုညိ", + "nav-login-createaccount": "လုပ်ဇၟိက်/ခၞံကၠောန် အကံက်", + "logout": "တိတ်", + "userlogout": "တိတ်", + "notloggedin": "ဟွံ လုပ်လံက်အေန်လဝ်", "userlogin-noaccount": "ဟွံကလိဂွံ အကံက်ဏီ?", "userlogin-joinproject": "လုပ်ပံင်တောဲ {{SITENAME}}", "createaccount": "ခၞံကၠောန် အကံက်", "userlogin-resetpassword-link": "ဝိုတ်စ မလိက်ပၞုက် မၞးဟာ?", "userlogin-helplink2": "အရီုအဗင် သွက်ဂွံ လုပ်လံက်အေန်", + "userlogin-loggedin": "မၞးလုပ်မံၚ်လံက်အေန်တုဲဒၟံၚ်ညံၚ်{{GENDER:$1|$1}}\nသုၚ်စောဲကေတ်ဗီုပြၚ်သၟတ်သ္ဂောံလုပ်လံက်ပ္ဍဲညံၚ်ညးလွဟ်တၞဟ်.", + "userlogin-reauth": "မၞးထေက်ကဵုလံက်အေန်မွဲဝါပၠန်သွက်ဂွံသ္ပဒတန်ဒဒှ်ရမၞးဂှ် {{GENDER:$1|$1}}", + "userlogin-createanother": "ခၞံကၠောန် အကံက်တၞဟ်", + "createacct-emailrequired": "ဌာန်အဳမေလ်တအ်", "createacct-emailoptional": "ဌာန်ဒၟံင် အဳမေဝ် (သ္ဒးစုတ်ဟေင်)", "createacct-email-ph": "စုတ် ဌာန်ဒၟံင် အဳမေဝ် မၞးညိ", + "createacct-another-email-ph": "စုတ် ဌာန်ဒၟံင် အဳမေဝ်", + "createaccountmail": "သုၚ်စောဲကေတ်မအက္ခရ်ပၞုက်ဆဆဵုမွဲ တုဲ ပလံၚ်ဏာဍေံသွက်ဌာန်ဒတန်အဳမေလ်မစေအ်ဗိုတ်", + "createaccountmail-help": "သုၚ်စောဲကေတ်မာန် သ္ဂောံခၞံကၠောန်အကံက်သွက်ပူဂိုလ်တၞဟ် သီုဟွံမွဲကဵု အက္ခရ်ပၞုက်မကတ်လ္ၚတ်ဒၟံၚ်", + "createacct-realname": "ယၟု ဍာံ (optional)", + "createacct-reason": "ဟိုတ်", + "createacct-reason-ph": "မုဟိုတ်မၞးဂွံခၞံကၠောန်အကံက်တၞဟ်ခြာရော", "createacct-submit": "ခၞံကၠောန် အကံက် မၞးညိ", + "createacct-another-submit": "ခၞံကၠောန် အကံက်", "createacct-benefit-heading": "{{SITENAME}} ဂှ် ကၠောန်လဝ် နကဵု မၞိဟ် ညံင်ရဴမၞးကီုရ၊၊", "createacct-benefit-body1": "{{PLURAL:$1|တင်ပလေဝ်ဒါန်|တင်ပလေဝ်ဒါန်ဂမၠိုင်}}", "createacct-benefit-body2": "{{PLURAL:$1|မုက်လိက်|မုက်လိက်ဂမၠိုင်}}", "createacct-benefit-body3": "ခြာဟွံလအ် {{PLURAL:$1|ညးမခၞံကၠောန်|ညးမခၞံကၠောန်ဂမၠိုင်}}", + "loginsuccesstitle": "လံက်အေန်တုဲ", + "loginsuccess": "လၟုဟ်မၞးဂှ်လံက်အေန်လဝ်ပ္ဍဲသွက်{{SITNAME}}ညံၚ်\"$1\" .", + "accountcreated": "ခၞံကၠောန်အကံက်တုဲ", + "accountcreatedtext": "အကံက်ညးလွပ်သွက် [[{{ns:ညးလွပ်}}:$1|$1]],([[{{ns:ဓရီုကျာ ညးလွပ်}}:$1|ဓရီုကျာ]]) ခၞံကၠောန်တုဲယျ.", + "createaccount-title": "ခၞံကၠောန်အကံက်သွက်{{SITENAME}}", + "createaccount-text": "ညးမမိက်ကဵုမွဲခၞံကၠောန်လဝ်အကံက်သွက်အီမေလ်မၞး ပ္ဍဲ {{SITENAME}} ($4) မၞုံလဝ်ယၟု \"$2\", နကဵုအက္ခရ်ပၞုက်\"$3\".\nမၞးထေက်ကဵုလံက်အေန်တုဲ လှာဲထောံမအက္ခရ်ပၞုက်မၞ: လၟုဟ်ညိ.\nမၞးမထေက်ကဵုပမဇ္ဇျဟ်လိက်ဏံရ,ယဝ်အကံက်မခၞံကၠောန်လဝ်မဆောတ်ယောၚ်မ္ဂး.\n\nYou may ignore this message, if this account was created in error.", + "login-throttled": "မၞးကၠောန်သ္ပဂစာန်လံက်အေန်တုဲကၠုၚ်ဂှ် အတန်ဗွဲမဂၠိုၚ်ရ.\nသ္ပဂုဏ်တုဲမၚ်$1 ကိုပ်ကၠာနူဟွံဂစာန်မွဲအတန်ပၠန်.", "loginlanguagelabel": "အရေဝ်ဘာသာ- $1", "pt-login": "လုပ်လံက်အေန်", "pt-login-button": "လုပ်လံက်အေန်", + "pt-login-continue-button": "ဆက် လုပ်လံက်အေန်", "pt-createaccount": "ခၞံကၠောန် အကံက်", "pt-userlogout": "တိတ်", + "changepassword": "လှာဲအက္ခရ်ပၞုက်", + "resetpass_announce": "သ္ဂောံတုဲဒှ် လုပ်လံက်အေန်, မၞးထေက်ဒဆိၚ်ကေတ် မအက္ခရ်ဗၞုက်တၟိ.", + "resetpass_header": "လှာဲမက္ခရ်ပၞုက်အကံက်", + "oldpassword": "မက္ခရ်ပၞုက်တြေံ:", + "newpassword": "မလိက်ပၞုက် တၟိ", + "retypenew": "ကလေၚ်တက် မအက္ခရ်ဓလုက်:", + "resetpass_submit": "ချိၚ်မလိက်ပၞုက် တုဲ လုပ်ဇၟိက်", + "changepassword-success": "မအက္ခရ်ပၞုက်မၞးဂှ် ပြံၚ်အာတုဲယျ!", + "changepassword-throttled": "မၞးကၠောန်သ္ပဂစာန်လံက်အေန်တုဲကၠုၚ်ဂှ် အတန်ဗွဲမဂၠိုၚ်ရ.\nသ္ပဂုဏ်တုဲမၚ်$1 ကိုပ်ကၠာနူဟွံဂစာန်မွဲအတန်ပၠန်.", + "botpasswords": "Bot အက္ခရ်ပၞုက်", + "botpasswords-disabled": "Bot မက္ခရ်ပၞုက်တအ်ဂှ် ဂွံဟွံမာန်.", + "botpasswords-label-appid": "ယၟု Bot:", + "botpasswords-label-create": "ခၞံကၠောန်", + "botpasswords-label-update": "ပခိုဟ်လဟဵု", + "botpasswords-label-cancel": "တးပဲါ", + "botpasswords-label-delete": "ဇိုတ်", + "botpasswords-label-resetpassword": "ကလေင်စုတ် မလိက်ပၞုက်", + "botpasswords-label-grants": "ဂရမ်မကလိဂွံမာန်:", + "botpasswords-bad-appid": "ယၟု bot \"$1\" ဂှ်ဟွံကိတ်ညဳ.", + "resetpass-submit-cancel": "တးပဲါ", "passwordreset": "ကလေင်စုတ် မလိက်ပၞုက်", + "passwordreset-username": "ယၟုညးလွပ်:", + "passwordreset-email": "ဌာန်အဳမေလ်တအ်", + "passwordreset-emailtitle": "ခၞံကၠောန်အကံက်သွက်{{SITENAME}}", "bold_sample": "မလိက် တီု", "bold_tip": "မလိက် တီု", "italic_sample": "မလိက်ဓစေင်", @@ -200,15 +335,30 @@ "sig_tip": "စၟတ်တဲ မၞး နကဵု တဆိပ်အခိင်", "hr_tip": "လာင် ဗွဲလနေင်", "summary": "သကေမ်", + "subject": "ပရူပရာ\nဒါန်ပေၚ်အာ ၁၀၀၀ တုဲညးပလံၚ်နၚ် အခေါၚ်ခၞံမုက်လိက်ဏအ်။\nတၚ်ဂုဏ်ရ။", "minoredit": "ဣဏအ်ဂှ် ဒှ်အရာ မပလေဝ်ဒါန် ညိည", "watchthis": "မင်မဲ မုက်လိက်ဏအ်", "savearticle": "ဂိုင်သိပ် မုက်လိက်", + "savechanges": "သီဂိုၚ်မပြံၚ်လှာဲတအ်", + "publishpage": "မုက်လိက်တက်တြး", + "publishchanges": "ပတိတ်တြး ပြံင်လှာဲအာ", + "savearticle-start": "ဂိုင်သိပ် မုက်လိက်", + "savechanges-start": "သီဂိုၚ်မပြံၚ်လှာဲတအ်", + "publishpage-start": "ပတိတ်တြး မုက်လိက်...", + "publishchanges-start": "ပတိတ်တြး ပြံင်လှာဲအာ", "preview": "နမူနာ", "showpreview": "ထ္ၜး နမူနာ", "showdiff": "ထ္ၜး အရာမပြံင်လှာဲ", "anoneditwarning": "သတိ မၞး ဟွံဂွံ လုပ်လံက်အေန်လဝ်ရ၊၊ IP address မၞး မံက်ဒၟံင်ရောင် ယဝ်ရ မၞးကၠောန်သ္ပ ပရေင်ပလေဝ်ပလေတ်မွဲမွဲမ္ဂး၊၊ ယဝ်ရ [$1 လုပ်လံက်အေန်] ဟွံသေင်မ္ဂး [$2 ခၞံကၠောန် အကံက်မွဲ]မ္ဂး၊ ပရေင်ပလေဝ်ဒါန်မၞး တြးပတိတ် နကဵု ယၟုသုင်စောဲ မၞးရောင်၊၊", + "blockedtitle": "ညးလွပ်ဂှ်ကၟာတ်အာယျ", "blockedtext": "ယၟုညးလွပ် ဟွံသေင်မ္ဂး ဌာန်ဒၟံင်အာင်ဒဳမၞး ဒးဒုင်ကၟာတ်စဵုဒၞာလဝ်\n\nပွမကၟာတ်စဵုဒၞာဂှ် ကၠောန်လဝ် နကဵု $1.\nဟိုတ်မဂွံကၟာတ်စဵုဒၞာဂှ် $2.\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ယဝ်ရ မၞးမိက်ဂွံ သၟာန်မ္ဂး တင်ဂၞင် ဗွဲလတူတအ် သီုဖအိုတ်ဂှ် ဗၟံက်ထ္ၜးကဵုညိ၊၊", + "autoblockedtext": "ယၟုညးလွပ် ဟွံသေင်မ္ဂး ဌာန်ဒၟံင်အာင်ဒဳမၞး ဒးဒုင်ကၟာတ်စဵုဒၞာလဝ်\n\nပွမကၟာတ်စဵုဒၞာဂှ် ကၠောန်လဝ် နကဵု $1.\nဟိုတ်မဂွံကၟာတ်စဵုဒၞာဂှ် $2.\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ယဝ်ရ မၞးမိက်ဂွံ သၟာန်မ္ဂး တင်ဂၞင် ဗွဲလတူတအ် သီုဖအိုတ်ဂှ် ဗၟံက်ထ္ၜးကဵုညိ၊၊", + "whitelistedittext": "သ္ပဂုဏ်တုဲ$1 သ္ဂောံဒါန်မုက်လိက်တအ်.", + "confirmedittext": "မၞးထေက်ကဵုဒးသ္ပဒတန်ကဵု ဌာန်ဒတန်အဳမေလ်မၞးကိုပ်ကၠာနူဟွံဒါန်မုက်တအ်.\nသ္ပဂုဏ်တုဲ ချိၚ်ကေုာံဒတန် ဌာန်ဒတန်အဳမေလ်မၞး နူမၞး[[Special:ပၟိက်ဂၞပ်စိုတ်| ပၟိက်ဂၞပ်စိုတ်ညးလွပ်]].", + "loginreqtitle": "နွံပၟိက်ကဵု လံက်အေန်", "loginreqlink": "လုပ်လံက်အေန်", + "loginreqpagetext": " သ္ပဂုဏ်တုဲ $1 သ္ဂောံဗဵုမုက်လိက်တၞဟ်တအ်.", + "accmailtitle": "ပြံၚ်ဏာ မအက္ခရ်ဗၞုက်", "newarticletext": "မၞး စိုပ်အာ ဇရေင် မုက်လိက်လေန် မဟွံဂွံကၠောန်လဝ်ဏီရ၊၊\nသွက်ဂွံ ခၞံကၠောန် မုက်လိက်ဏအ်ဂှ် ပ္ဍဲခံက်အင် ဗွဲသၟဝ်ဏအ်ဂှ် စတက်စုတ် မလိက်ညိ\n(မိက်ဂွံ ဆက်တီ ပရူဏအ်မ္ဂး ဆက်ကျောဝ် ပ္ဍဲ[$1မုက်လိက်အရီုအဗင်]ညိ)။ ဟိုတ်နူဗၠေတ်တုဲ မၞး စိုပ်ကၠုင် ပ္ဍဲဒၞာဲဏအ်မ္ဂး ဍဵု back တုဲ ကလေင်အာ ဒၞာဲတြေံညိ၊၊", "anontalkpagetext": "----\nမုက်လိက်ဏအ်ဂှ် ဒှ်ဒၞာဲ သွက်မၞိဟ် မဟွံဗမံက်ယၟု၊ မၞိဟ်ဟွံဂွံကၠောန်လဝ် အကံက်တအ်ဏီ ဂွံပတိုန်လညာတ် ပါ်ပဲါရ၊၊\nဟိုတ်ဂှ်ရ ပိုယ်ဒးစကာ မဂၞန် IP address သွက်ဂွံ တီညးတအ်ရ၊၊ IP address ဗီုဏအ်မွဲမွဲဂှ် ပါ်ပရအ်ဂွံ ညးလွပ် ဗွဲမဂၠိုင်ရ၊၊ ယဝ်ရ မၞးဂှ် ဒှ်ညးလွပ် မဟွံဗမံက်ယၟုမွဲ စှ်ေစိုတ် တင်ဂလာန်တအ်ဏအ်ဂှ် ဒှ်ဟွံထေက်မ္ဂး ပဂုန်တုဲ [[Special:CreateAccount|ခၞံကၠောန် အကံက်မွဲ]] ဟွံသေင်မ္ဂး [[Special:UserLogin|လုပ်လံက်အေန်]] သွက်ဂွံ ဝေင်ပဲါ ညးလွပ် မဟွံဗမံက်ယၟုတအ်တၞဟ်တအ်ရ၊၊", "noarticletext": "ပ္ဍဲမုက်လိက်ဏအ် လိက်ဟွံမွဲဏီရ၊၊\nမၞး ဂၠာဲကေတ် [[Special:Search/{{PAGENAME}}|search for this page title]] ပ္ဍဲမုက်လိက်တၞဟ်မ္ဂး ကလိဂွံမာန်ရောင်၊၊\n[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nဟွံသေင်မ္ဂး [{{fullurl:{{FULLPAGENAME}}|action=edit}} ခၞံကၠောန် လိက်မုက်ဏအ်ညိ၊၊].", diff --git a/languages/i18n/mr.json b/languages/i18n/mr.json index b3fd486ca9..47a072252f 100644 --- a/languages/i18n/mr.json +++ b/languages/i18n/mr.json @@ -658,7 +658,7 @@ "subject-preview": "विषयाची झलक:", "previewerrortext": "आपल्या बदलांची झलक बघण्याचे प्रयत्नादरम्यान त्रुटी उद्भवली.", "blockedtitle": "हा सदस्य प्रतिबंधित आहे", - "blockedtext": "'''तुमचे सदस्यनाव अथवा IP पत्ता ब्लॉक केलेला आहे.'''\n\nहा ब्लॉक $1 यांनी केलेला आहे.\nयासाठी ''$2'' हे कारण दिलेले आहे.\n\n* ब्लॉकची सुरूवात: $8\n* ब्लॉकचा शेवट: $6\n* कुणाला ब्लॉक करायचे आहे: $7\n\nतुम्ही ह्या ब्लॉक संदर्भातील चर्चेसाठी $1 अथवा [[{{MediaWiki:Grouppage-sysop}}|प्रबंधकांशी]] संपर्क करू शकता.\nतुम्ही जोवर वैध ई-मेल पत्ता आपल्या [[Special:Preferences|'माझ्या पसंती']] पानावर देत नाही तोवर तुम्ही ’सदस्याला ई-मेल पाठवा’ हा दुवा वापरू शकत नाही. तसेच असे करण्यापासून आपल्याला ब्लॉक केलेले नाही.\nतुमचा सध्याचा IP पत्ता $3 हा आहे, व तुमचा ब्लॉक क्रमांक #$5 हा आहे.\nकृपया या संदर्भातील चर्चेमध्ये वरील सर्व तपशिल उद्घृत करा.", + "blockedtext": "तुमचे सदस्यनाव अथवा IP पत्ता ब्लॉक केलेला आहे.\n\nहा ब्लॉक $1 यांनी केलेला आहे.\nयासाठी $2 हे कारण दिलेले आहे.\n\n* ब्लॉकची सुरूवात: $8\n* ब्लॉकचा शेवट: $6\n* कुणाला ब्लॉक करायचे आहे: $7\n\nतुम्ही ह्या ब्लॉक संदर्भातील चर्चेसाठी $1 अथवा [[{{MediaWiki:Grouppage-sysop}}|प्रबंधकांशी]] संपर्क करू शकता.\nतुम्ही जोवर वैध ई-मेल पत्ता आपल्या [[Special:Preferences|'माझ्या पसंती']] पानावर देत नाही तोवर तुम्ही ’सदस्याला ई-मेल पाठवा’ हा दुवा वापरू शकत नाही. तसेच असे करण्यापासून आपल्याला ब्लॉक केलेले नाही.\nतुमचा सध्याचा IP पत्ता $3 हा आहे, व तुमचा ब्लॉक क्रमांक #$5 हा आहे.\nकृपया या संदर्भातील चर्चेमध्ये वरील सर्व तपशिल उद्घृत करा.", "autoblockedtext": "तुमचा आंतरजालीय अंकपत्ता आपोआप स्थगित केला आहे कारण तो इतर अशा सदस्याने वापरला, ज्याला $1ने प्रतिबंधित केले.\nआणि दिलेले कारण खालील प्रमाणे आहे\n:''$2''\nब्लॉकची सुरूवात: $8\nब्लॉकचा शेवट: $6\nकुणाला ब्लॉक करायचे आहे: $7\n\nतुम्ही $1शी संपर्क करू शकता किंवा इतर [[{{MediaWiki:Grouppage-sysop}}|प्रबंधकां पैकी]] एकाशी स्थगनाबद्दल चर्चा करू शकता.\n\n[[Special:Preferences|सदस्य पसंतीत]]त शाबीत विपत्र पत्ता नमूद असल्या शिवाय आणि तुम्हाला तो वापरण्या पासून प्रतिबंधित केले असल्यास तुम्ही \"या सदस्यास विपत्र पाठवा\" सुविधा वापरू शकणार नाही.\nतुमचा सध्याचा IP पत्ता $3 हा आहे, व तुमचा ब्लॉक क्रमांक #$5 हा आहे. \nतुमचा स्थगन क्र $5 आहे. कृपया या संदर्भातील चर्चेमध्ये वरील सर्व तपशिल उद्घृत करा.", "blockednoreason": "कारण दिलेले नाही", "whitelistedittext": "लेखांचे संपादन करण्यासाठी आधी $1 करा.", @@ -672,7 +672,7 @@ "accmailtext": "[[User talk:$1|$1]] यांसाठी अनियतक्रमाने निर्मित केलेला परवलीचा शब्द $2 यांना पाठवण्यात आला आहे.\n\nया नवीन खात्यासाठीचा परवलीचा शब्द,सनोंद-प्रवेश घेतल्यावर [[Special:ChangePassword|परवलीचा शब्द बदला]] येथे बदलता येईल.", "newarticle": "(नवीन लेख)", "newarticletext": "आपण सध्या अस्तित्त्वात नसलेल्या पानाच्या दुव्याचा मागोवा घेत आला आहात.\nहे पान नव्याने तयार करण्यासाठी खालील पेटीत टंकन करणे सुरु करा(अधिक माहितीसाठी [$1 साहाय्य पान] बघा).\n\nजर आपण येथे चुकून आला असाल तर ब्राउझरच्या परत(बॅक) कळीवर टिचकी द्या.", - "anontalkpagetext": "हे चर्चापान अशा अज्ञात सदस्यासाठी आहे, ज्यांनी खाते तयार केलेले नाही किंवा त्याचा वापर करत नाहीत. \nत्यांच्या ओळखीसाठी आम्ही आंतरजाल अंकपत्ता वापरतो आहोत. असा अंकपत्ता बऱ्याच लोकांचा एकच असू शकतो. \nजर आपण अज्ञात सदस्य असाल आणि आपल्याला काही अप्रासंगिक संदेश मिळाला असेल तर कृपया [[Special:CreateAccount| खाते तयार करा]] किंवा [[Special:CreateAccount|सनोंद-प्रवेश करा]] ज्यामुळे, पुढे असे गैरसमज होणार नाहीत.", + "anontalkpagetext": "हे चर्चापान अशा अज्ञात सदस्यासाठी आहे, ज्यांनी खाते तयार केलेले नाही किंवा त्याचा वापर करत नाहीत. \nत्यांच्या ओळखीसाठी आम्ही आंतरजाल अंकपत्ता वापरतो आहोत. असा अंकपत्ता बऱ्याच लोकांचा एकच असू शकतो. \nजर आपण अज्ञात सदस्य असाल आणि आपल्याला काही अप्रासंगिक संदेश मिळाला असेल तर कृपया [[Special:CreateAccount| खाते तयार करा]] किंवा [[Special:CreateAccount|सनोंद-प्रवेश करा]] ज्यामुळे, पुढे असे गैरसमज होणार नाहीत.", "noarticletext": "या लेखात सध्या काहीही मजकूर नाही.\nतुम्ही विकिपीडियावरील इतर लेखांमध्ये या [[Special:Search/{{PAGENAME}}| मथळ्याचा शोध घेऊ शकता]], [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} इतर नोंदी शोधा],\nकिंवा हा लेख [{{fullurl:{{FULLPAGENAME}}|action=edit}}तयार करू शकता].", "noarticletext-nopermission": "सध्या या लेखात काहीही मजकूर नाही.\nतुम्ही विकिपीडियावरील इतर लेखांमध्ये [[Special:Search/{{PAGENAME}}| या मथळ्याचा शोध घेऊ शकता]], [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAME}}}}आपण या लेखाच्या इतर नोंदी शोधा],परंतु, आपणास हा लेख लिहीण्याची परवानगी देण्यात येउ शकत नाही.", "missing-revision": "\"{{FULLPAGENAME}}\" या लेखाचे #$1 हे संस्करण अस्तित्वात नाही.वगळल्या गेलेल्या लेखपानाच्या जुन्या इतिहास-दुव्याचे अनुसरण केल्यामुळे असे होते.याबाबत विस्तृत माहिती [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} वगळलेल्या नोंदी]येथे बघता येईल.", @@ -1457,7 +1457,7 @@ "recentchangeslinked-feed": "या पृष्ठासंबंधीचे बदल", "recentchangeslinked-toolbox": "या पृष्ठासंबंधीचे बदल", "recentchangeslinked-title": "\"$1\" च्या संदर्भातील बदल", - "recentchangeslinked-summary": "हे पृष्ठ एखाद्या विशिष्ट पानाशी, (किंवा एखाद्या विशिष्ट वर्गात असणाऱ्या पानांशी), जोडलेल्या पानांवरील बदल दर्शविते.\nआपल्या [[Special:Watchlist|निरीक्षणसूचीत]] ही पाने ठळक दिसतील.", + "recentchangeslinked-summary": "हे पृष्ठ एखाद्या विशिष्ट पानाशी, (किंवा एखाद्या विशिष्ट वर्गात असणाऱ्या पानांशी), जोडलेल्या पानांवरील बदल दर्शविते.एखाद्या वर्गातील पाने पाहाण्यासाठी तो वर्ग लिहा\nआपल्या [[Special:Watchlist|निरीक्षणसूचीत]] ही पाने ठळक दिसतील.", "recentchangeslinked-page": "पृष्ठ नाव:", "recentchangeslinked-to": "याऐवजी दिलेल्या पानाला जोडलेल्या पानांवरील बदल दाखवा", "recentchanges-page-added-to-category": "[[:$1]] हे पान या वर्गास जोडले", @@ -1686,7 +1686,7 @@ "imagelinks": "संचिका वापर", "linkstoimage": "खालील {{PLURAL:$1|पान चित्राशी जोडले आहे|$1 पाने चित्रांशी जोडली आहेत}}:", "linkstoimage-more": "या संचिके ला $1 {{PLURAL:$1|पान जोडले|पाने जोडली}} आहेत.\nखालील यादी या संचिके ला जोडलेल्या {{PLURAL:$1|पहिल्या पानाचा दुवा |पहिल्या $1 पानांचे दुवे }}दर्शविते.\n[[Special:WhatLinksHere/$2|संपुर्ण यादी]] उपलब्ध आहे.", - "nolinkstoimage": "या चित्राशी जोडलेली पृष्ठे नाही आहेत.", + "nolinkstoimage": "या चित्राशी जोडलेली पृष्ठे नाहीत.", "morelinkstoimage": "या संचिकेचे [[Special:WhatLinksHere/$1|अधिक दुवे]] पहा.", "linkstoimage-redirect": "$1 (संचिका पुनर्निर्देशन) $2", "duplicatesoffile": "खालील संचिका या दिलेल्या {{PLURAL:$1|संचिकेची प्रत आहे|$1 संचिकांच्या प्रती आहेत}}. [[Special:FileDuplicateSearch/$2|अधिक माहिती]]", diff --git a/languages/i18n/my.json b/languages/i18n/my.json index 33c715ddc2..9712ebf7c2 100644 --- a/languages/i18n/my.json +++ b/languages/i18n/my.json @@ -567,7 +567,7 @@ "loginreqpagetext": "အခြားစာမျက်နှာများကို ကြည့်ရန် $1ရမည်။", "accmailtitle": "စကားဝှက်ကို ပို့ပြီးပြီ", "newarticle": "(အသစ်)", - "newarticletext": "သင်သည် မရှိသေးသော စာမျက်နှာလင့် ကို ရောက်လာခြင်းဖြစ်သည်။\nစာမျက်နှာအသစ်စတင်ရန် အောက်မှ သေတ္တာထဲတွင် စတင်ရိုက်ထည့်ပါ (နောက်ထပ် သတင်းအချက်အလက်များအတွက်[$1 အကူအညီ စာမျက်နှာ]ကို ကြည့်ပါ)။\nမတော်တဆရောက်လာခြင်း ဖြစ်ပါက ဘရောက်ဆာ၏ နောက်ပြန်ပြန်သွားသော back ခလုတ်ကို နှိပ်ပါ။", + "newarticletext": "သင်သည် မရှိသေးသော စာမျက်နှာလင့် ကို ရောက်လာခြင်းဖြစ်သည်။\nစာမျက်နှာအသစ်စတင်ရန် အောက်မှ သေတ္တာထဲတွင် စတင်ရိုက်ထည့်ပါ (နောက်ထပ် သတင်းအချက်အလက်များအတွက် [$1 အကူအညီ စာမျက်နှာ]ကို ကြည့်ပါ)။\nမတော်တဆရောက်လာခြင်း ဖြစ်ပါက ဘရောက်ဆာ၏ နောက်ပြန်ပြန်သွားသော back ခလုတ်ကို နှိပ်ပါ။", "anontalkpagetext": "----\nဤသည်မှာ အကောင့်မဖန်တီးသော သို့မဟုတ် အကောင့်မရှိသော အမည်မသိ အသုံးပြုသူတစ်ဦးအတွက် ဆွေးနွေးချက် စာမျက်နှာ ဖြစ်သည်။\nသို့အတွက် ကျွန်ုပ်တို့အနေဖြင့် အိုင်ပီလိပ်စာဂဏန်းကိုသာ သူ/သူမ အားခွဲခြားနိုင်ရန် အသုံးပြုရပါသည်။\nထိုသို့သော အိုင်ပီလိပ်စာများကို အသုံးပြုသူများစွာမှ မျှဝေသုံးစွဲနေနိုင်ပါသည်။\nသင်သည် အမည်မသိ အသုံးပြုသူတစ်ဦးဖြစ်ပြီး မသက်ဆိုင်သော သုံးသပ်ဆွေးနွေးချက်များက သင့်အား အနှောက်အယှက်ဖြစ်စေပါက၊ ကျေးဇူးပြု၍ [[Special:CreateAccount|အကောင့်တစ်ခု ဖန်တီးပါ]] သို့မဟုတ် [[Special:UserLogin|လော့ဂ်အင်ဝင်ရောက်ပြီး]] အခြား အမည်မသိအသုံးပြုသူများနှင့် ရောထွေးနေနိုင်ခြင်းကို ရှောင်ကြဉ်နိုင်ပါသည်။", "noarticletext": "ဤစာမျက်နှာတွင် ယခုလက်ရှိတွင် မည်သည့်စာသားမှ မရှိပါ။\nသင်သည် အခြားစာမျက်နှာများတွင် [[Special:Search/{{PAGENAME}}|ဤစာမျက်နှာ၏ ခေါင်းစဉ်ကို ရှာနိုင်သည်]]၊ [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ဆက်စပ်ရာ မှတ်တမ်းများကို ရှာနိုင်သည်]၊ သို့မဟုတ် [{{fullurl:{{FULLPAGENAME}}|action=edit}} ဤစာမျက်နှာကို ဖန်တီးနိုင်သည်]။", "noarticletext-nopermission": "ဤစာမျက်နှာတွင် ယခုလက်ရှိတွင် မည်သည့်စာသားမှ မရှိပါ။\nသင်သည် အခြားစာမျက်နှာများတွင် [[Special:Search/{{PAGENAME}}|ဤစာမျက်နှာ၏ ခေါင်းစဉ်ကို ရှာနိုင်သည်]]၊ သို့မဟုတ် [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ဆက်စပ်ရာ မှတ်တမ်းများကို ရှာနိုင်သည်]။ သို့သော် ဤစာမျက်နှာကို ဖန်တီးရန် သင့်တွင် အခွင့်အရေး မရှိပါ။", @@ -586,6 +586,7 @@ "editingsection": "$1 (အပိုင်း) ကို ပြင်ဆင်နေသည်။", "editingcomment": "$1 (အပိုင်းသစ်) ကို ပြင်ဆင်နေသည်။", "editconflict": "အငြင်းပွားမှုကို တည်းဖြတ်ရန် - $1", + "explainconflict": "သင် စတင်တည်းဖြတ်ကတည်းက တစ်စုံတစ်ယောက်မှ ဤစာမျက်နှာကို ပြောင်းလဲခဲ့သည်။ အပေါ်ပိုင်းဧရိယာတွင် လက်ရှိတည်ရှိနေသော စာမျက်နှာစာသား ပါဝင်သည်။ သင်၏ပြောင်းလဲချက်များကို အောက်ပိုင်းစာသားဧရိယာတွင် ပြသပေးထားသည်။ သင်၏ပြောင်းလဲချက်များကို ရှိနှင့်ပြီးသားစာသားတွင် ပေါင်းစပ်ရမည်ဖြစ်ပါသည်။ \"$1\" ကို သင်နှိပ်လိုက်ပါက အပေါ်ပိုင်းဧရိယာရှိ စာသားသာလျင် သိမ်းဆည်းသွားမည်ဖြစ်ပါသည်။", "yourtext": "သင့်စာသား", "storedversion": "သိမ်းဆည်းထားသောမူ", "yourdiff": "ကွဲပြားချက်များ", @@ -634,6 +635,7 @@ "post-expand-template-argument-warning": "'''သတိပေးချက် -''' ဤစာမျက်နှာတွင် ပမာဏအားဖြင့် ကြီးမားကျယ်ပြန့်သော template argument တစ်ခုပါဝင်သည်။\nယင်း arguments များကို ဖယ်ထုတ်လိုက်သည်။", "post-expand-template-argument-category": "ဖယ်ထုတ်ထားသော template arguments များပါဝင်သည့် စာမျက်နှာများ", "parser-template-loop-warning": "တမ်းပလိတ်များ လှည့်ပတ်ဆက်စပ် နေသည်ကို တွေ့ရသည်။ [[$1]]", + "undo-success": "တည်းဖြတ်မှုကို နောက်ပြန်ဆုတ်နိုင်ပါသည်။ သင် လုပ်ဆောင်လိုသည့်အရာကို အတည်ပြုစစ်ဆေးနိုင်ရန် အောက်တွင်ပြထားသော နှိုင်းယှဉ်ချက်ကို စစ်ဆေးပါ၊ ပြီးလျင် နောက်သို့ပြန်ပြင်ရန် ပြောင်းလဲမှုများကို သိမ်းဆည်းပါ။", "undo-failure": "ကြားဖြတ် တည်းဖြတ်မှုများကြောင့် တည်းဖြတ်မှုကို နောက်ပြန် မပြင်နိုင်တော့ပါ။", "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|ဆွေးနွေး]]) ၏ တည်းဖြတ်မူ $1 ကို ပြန်လည်ပယ်ဖျက်လိုက်သည်", "cantcreateaccount-text": "ဤအိုင်ပီလိပ်စာ ($1) မှ အကောင့်ဖန်တီးခြင်းကို [[User:$3|$3]] က ပိတ်ပင်ထားသည်။ \n\n$3 က ပေးထားသော အကြောင်းပြချက်မှာ $2", @@ -651,7 +653,7 @@ "next": "နောက်ထပ်", "last": "ယခုမတိုင်မီ", "page_first": "ပထမဆုံး", - "page_last": "အနောက်ဆုံး", + "page_last": "နောက်ဆုံး", "histlegend": "တည်းဖြတ်မူများကို နှိုင်းယှဉ်ရန် radio boxes လေးများကို မှတ်သားပြီးနောက် Enter ရိုက်ချပါ သို့ အောက်ခြေမှ ခလုတ်ကို နှိပ်ပါ။
    \nLegend: ({{int:cur}}) = နောက်ဆုံးမူနှင့် ကွဲပြားချက် ({{int:last}}) = ယင်းရှေ့မူနှင့် ကွဲပြားချက်, {{int:minoreditletter}} = အရေးမကြီးသော ပြုပြင်မှု.", "history-fieldset-title": "ယခင်မူများ ရှာဖွေရန်", "history-show-deleted": "ဖျက်ထားသော မူများသာ", @@ -1163,6 +1165,8 @@ "rcfilters-watchlist-markseen-button": "ပြောင်းလဲမှုများအားလုံးကို ကြည့်ရှုပြီးကြောင်း မှတ်သားရန်", "rcfilters-watchlist-edit-watchlist-button": "သင့်စောင့်ကြည့်စာရင်းရှိ စာမျက်နှာများစာရင်းအား တည်းဖြတ်ရန်", "rcfilters-watchlist-showupdated": "သင်နောက်ဆုံးကြည့်ရှုခဲ့ပြီးနောက် ပြောင်းလဲမှုရှိခဲ့သော စာမျက်နှာများကို စာလုံးမဲ ဖြင့် ပြသထားသည်။", + "rcfilters-preference-label": "လတ်တလောအပြောင်းအလဲများ၏ မွမ်းမံထားသောဗားရှင်းကို ဝှက်ရန်", + "rcfilters-watchlist-preference-label": "စောင့်ကြည့်စာရင်း၏ မွမ်းမံထားသောဗားရှင်းကို ဝှက်ရန်", "rcfilters-target-page-placeholder": "စာမျက်နှာနာမည် (သို့မဟုတ် ကဏ္ဍ) ရိုက်ထည့်ပါ", "rcnotefrom": "အောက်ပါတို့မှာ $3၊ $4 မှစ၍ {{PLURAL:$5|ပြောင်းလဲမှု|ပြောင်းလဲမှုများ}} ဖြစ်သည် ($1 အထိ ပြထား)။", "rclistfromreset": "ရက်စွဲရွေးချယ်မှုအား ပြန်စရန်", @@ -1510,6 +1514,8 @@ "booksources": "မှီငြမ်း စာအုပ်များ", "booksources-search-legend": "စာအုပ်ရင်းမြစ်များကို ရှာရန်", "booksources-search": "ရှာဖွေရန်", + "booksources-text": "အောက်ပါတို့သည် အသုံးပြုပြီးသားနှင့် စာအုပ်သစ်များကို ရောင်းချသော အခြားဆိုဒ်လင့်ခ်များစာရင်းဖြစ်သည်၊ သင်ရှာဖွေနေသော စာအုပ်များနှင့်ပတ်သက်သည့် အခြားသတင်းအချက်အလက်လည်း ရှိနိုင်ပါသည်:", + "booksources-invalid-isbn": "ပေးထားသော ISBN မှာ ဆီလျော်သည့်ပုံစံ မရှိပါ၊ မူလရင်းမြစ်မှ ကော်ပီကူးခြင်းအမှားများအတွက် စစ်ဆေးကြည့်ပါ။", "specialloguserlabel": "ဆောင်ရွက်သူ -", "speciallogtitlelabel": "ရည်ရွယ်ရာ (ခေါင်းစဉ် သို့ {{ns:user}}:အသုံးပြုသူအတွက် အသုံးပြုအမည်):", "log": "မှတ်​တမ်း​များ​", @@ -1798,7 +1804,7 @@ "nocontribs": "ဤသတ်မှတ်ချက်များနှင့် ကိုက်ညီသည့် ပြောင်းလဲမှုများ မရှိပါ။", "uctop": "(လက်ရှိ)", "month": "အဆိုပါ လမှစ၍ ( အဆိုပါလထက်လည်း စောသော) :", - "year": "အဆိုပါ နှစ်မှစ၍ ( အဆိုပါနှစ်ထက်လည်း စောသော) :", + "year": "အဆိုပါ နှစ်မှစ၍ (အဆိုပါနှစ်ထက်လည်း စောသော):", "date": "အဆိုပါရက်စွဲမှစ၍ (ယင်းထက်လည်း စောသော):", "sp-contributions-newbies": "အကောင့်အသစ်များ၏ ပံ့ပိုးမှုများကိုသာ ပြရန်", "sp-contributions-newbies-sub": "အကောင့်အသစ်များအတွက်", @@ -2314,6 +2320,7 @@ "exif-dc-contributor": "ဆောင်ရွက်ပေးထားသူများ", "exif-dc-source": "ရင်းမြစ် မီဒီယာ", "exif-dc-type": "မီဒီယာ အမျိုးအစား", + "exif-rating-rejected": "ငြင်းပယ်ခဲ့သည်", "exif-iimcategory-ace": "အနုပညာ၊ ယဥ်ကျေးမှုနှင့် ဖြေဖျော်ရေး", "exif-iimcategory-clj": "ရာဇဝတ်မှုနှင့် ဥပဒေ", "exif-iimcategory-dis": "ဘေးအန္တရာယ်များနှင့် မတော်တဆမှုများ", @@ -2540,6 +2547,8 @@ "restore-count-files": "{{PLURAL: $1|၁ ဖိုင်|$1 ဖိုင်များ}}", "logentry-delete-revision": "$3 စာမျက်နှာပေါ်ရှိ {{PLURAL:$5|တည်းဖြတ်မူတစ်ခု|တည်းဖြတ်မူ $5 ခု}}၏ အမြင်ပုံစံကို $1 က {{GENDER:$2|ပြောင်းလဲခဲ့သည်}}: $4", "revdelete-content-hid": "အကြောင်းအရာ ဝှက်ခြင်း", + "revdelete-summary-hid": "တည်းဖြတ်မှုအကျဉ်းချုပ် ဝှက်ထားခြင်း", + "revdelete-uname-hid": "အသုံးပြုသူအမည် ဝှက်ခြင်း", "revdelete-restricted": "အက်ဒမင်များသို့ ကန့်သတ်ချက်များ သက်ရောက်ရန်", "revdelete-unrestricted": "အက်ဒမင်များအတွက် ကန့်သတ်ချက်များကို ဖယ်ရှားရန်", "logentry-block-block": "$1 က {{GENDER:$4|$3}} ကို သက်တမ်းကုန်လွန်ချိန် $5 $6 ဖြင့် {{GENDER:$2|ပိတ်ပင်ခဲ့သည်}}", @@ -2679,6 +2688,7 @@ "authmanager-realname-label": "အမည်ရင်း", "authmanager-realname-help": "အသုံးပြုသူ၏ အမည်ရင်း", "authmanager-provider-temporarypassword": "ယာယီစကားဝှက်", + "authprovider-resetpass-skip-label": "ကျော်ရန်", "cannotauth-not-allowed-title": "ခွင့်ပြုချက် ငြင်းပယ်လိုက်သည်", "cannotauth-not-allowed": "သင်သည် ဤစာမျက်နှာကို အသုံးပြုခွင့်မရှိပါ", "edit-error-short": "အမှား - $1", @@ -2691,5 +2701,6 @@ "passwordpolicies-summary": "ဤသည်မှာ ဤဝီကီရှိ အသုံးပြုသူအုပ်စုများအတွက် အကျုံးဝင်သော စကားဝှက် မူဝါဒများ ဖြစ်သည်။", "passwordpolicies-group": "အုပ်စု", "passwordpolicies-policies": "မူဝါဒများ", + "passwordpolicies-policy-minimalpasswordlength": "စကားဝှက်တွင် အနည်းဆုံး {{PLURAL:$1|စကားလုံး|စကားလုံးများ}} $1 ခုရှိရမည်။", "passwordpolicies-policy-passwordcannotmatchusername": "စကားဝှက်သည် အသုံးပြုသူအမည်နှင့် မတူညီရပါ" } diff --git a/languages/i18n/nan.json b/languages/i18n/nan.json index 2fe2bc0842..379fa5c23f 100644 --- a/languages/i18n/nan.json +++ b/languages/i18n/nan.json @@ -914,6 +914,7 @@ "deletecomment": "Lí-iû:", "rollback": "Kā siu-kái ká tńg khì", "rollbacklink": "ká tńg khì", + "rollbacklinkcount": "Ká tńg $1 kái {{PLURAL:$1|pian-chi̍p|pian-chi̍p}}", "rollbackfailed": "Ká bē tńg khì", "cantrollback": "Bô-hoat-tō· kā siu-kái ká-tńg--khì; téng ūi kòng-hiàn-chiá sī chit ia̍h î-it ê chok-chiá.", "alreadyrolled": "Bô-hoat-tō· kā [[User:$2|$2]] ([[User talk:$2|Thó-lūn]]) tùi [[:$1]] ê siu-kái ká-tńg-khì; í-keng ū lâng siu-kái a̍h-sī ká-tńg chit ia̍h. Téng 1 ūi siu-kái-chiá sī [[User:$3|$3]] ([[User talk:$3|Thó-lūn]]).", diff --git a/languages/i18n/nap.json b/languages/i18n/nap.json index bc1eb578c8..68cea82a1e 100644 --- a/languages/i18n/nap.json +++ b/languages/i18n/nap.json @@ -364,8 +364,9 @@ "customcssprotected": "Nun v'è permesso 'a cagnà sta paggena CSS, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.", "customjsonprotected": "Nun v'è permesso 'a cagnà sta paggena JSON, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.", "customjsprotected": "Nun v'è permesso 'a cagnà sta paggena JavaScript, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.", - "sitecssprotected": "Nun téne premmesse pe' puté cagnà sta paggena CSS pecché putesse dà prubbleme a 'e vvisite", - "sitejsonprotected": "Nun téne premmesse pe' puté cagnà sta paggena JSON pecché putesse dà prubbleme a 'e vvisite", + "sitecssprotected": "Nun téne premmesse pe' puté cagnà sta paggena CSS pecché putesse dà prubbleme a 'e vvisite.", + "sitejsonprotected": "Nun téne premmesse pe' puté cagnà sta paggena JSON pecché putesse dà prubbleme a 'e vvisite.", + "sitejsprotected": "Nun téne premmesse pe' puté cagnà sta paggena JavaScript pecché putesse dà prubbleme a 'e vvisite.", "mycustomcssprotected": "Nun v'è permesso 'a cagnà sta paggena CSS.", "mycustomjsonprotected": "Nun v'è permesso 'a cagnà sta paggena JSON.", "mycustomjsprotected": "Nun v'è licenzia pe cagnà sta paggena JavaScript.", @@ -917,8 +918,11 @@ "diff-multi-otherusers": "({{PLURAL:$1|Na virzione ntermedia|$1 verziune ntermedie}} 'a {{PLURAL:$2|n'at'utente|$2 n'ati ddoj'utente}} nun è mmustata)", "diff-multi-manyusers": "({{PLURAL:$1|Na virzione ntermedia|$1 verziune ntermedie}} 'a cchiù 'e $2 {{PLURAL:$2|utente|utente}} nun è mmustata)", "diff-paragraph-moved-tonew": "'O paragrafo è stato spustat. Facite clic pe' puté cagnà dint'a nova posiziona.", + "diff-paragraph-moved-toold": "'O paragrafo è stato spustat. Facite clic pe' puté cagnà dint' 'o posto viecchio.", "difference-missing-revision": "{{PLURAL:$2|Na virziona|$2 verziune}} 'e sta differenza ($1) {{PLURAL:$2|nun è stata truvata|nun so' state truvate}}.\n\nChest'è succiesso quanno s'è secutato nu diff obsoleto a na paggena scancellata.\n'E dettaglie se ponno truvà dint'a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 'o riggistro 'e scancellamiente].", "searchresults": "Risultato d''a recerca", + "search-filter-title-prefix": "Ascià surtanto dint' 'e paggene c' 'o titolo c'accumencia pe' \"$1\"", + "search-filter-title-prefix-reset": "Ascìa tutt' 'e paggene", "searchresults-title": "Ascià risultate ppe \"$1\"", "titlematches": "Currispunnenze d' 'o titolo d' 'e paggene", "textmatches": "Currispunnenze d' 'o testo d' 'e paggene", @@ -990,9 +994,10 @@ "prefs-editwatchlist-clear": "Sbacanta l'elenco 'e paggene cuntrullate", "prefs-watchlist-days": "Nummero 'e juorne 'a mmustà dint'a l'elenco 'e cuntrollo:", "prefs-watchlist-days-max": "Massimo $1 {{PLURAL:$1|juorno|juorne}}", - "prefs-watchlist-edits": "Numero massimo 'e cagnamiente 'a mmustà ch' 'e funziune avanzate:", + "prefs-watchlist-edits": "Numero massimo 'e cagnamiente 'a mmustà dint' a l'elenco 'e paggene cuntrullate:", "prefs-watchlist-edits-max": "Nummero massimo: 1000", "prefs-watchlist-token": "Token 'e l'elenco 'e cuntrollo:", + "prefs-watchlist-managetokens": "Gestisce 'e tokén", "prefs-misc": "Varje", "prefs-resetpass": "Cagna 'a password", "prefs-changeemail": "Cagna o lèva l'indirizzo e-mail", @@ -1008,9 +1013,10 @@ "stub-threshold-disabled": "Stutato", "recentchangesdays": "Nummero 'e juorne a mmustà dint'a l'urdeme cagnamiente:", "recentchangesdays-max": "Massimo $1 {{PLURAL:$1|juorno|juorne}}", - "recentchangescount": "Nummero predefinito 'e cagnamiente 'a mmustà:", - "prefs-help-recentchangescount": "Chesto ntenne ll'urdeme cagnamiente, 'e cronologgie 'e paggena, e riggistre.", - "prefs-help-watchlist-token2": "Chest'è 'a chiave segreta pe se ffà 'o feed web 'e l'elenco 'e cuntrolo d' 'o vuosto.\nSi coccheruno 'a cunoscesse, allora putesse vedé l'elenco 'e cuntrollo, picciò nun 'a spartite. [[Special:ResetTokens|Cliccate ccà se tenite necessità d' 'a rimpizzà]].", + "recentchangescount": "Nummero predefinito 'e cagnamiente 'a mmustà dint' 'e paggene 'e cagnamiente 'e mo, cronologgie e riggistre:", + "prefs-help-recentchangescount": "Nummero massimo: 1000", + "prefs-help-watchlist-token2": "Chest'è 'a chiave segreta pe se ffà 'o feed web 'e l'elenco 'e cuntrolo d' 'o vuosto.\nSi coccheruno 'a cunoscesse, allora putesse vedé l'elenco vuost' 'e cuntrollo, picciò nun 'a spartite.\nSi ve serve, [[Special:ResetTokens|facite clic ccà p' 'a rimpizzà]].", + "prefs-help-tokenmanagement": "Putite vedé e mpustà n'ata vota 'a chiave segreta pe' l'utenza d' 'a vosta pe' ve puté fà trasì dint' 'o feed web 'e paggene cuntrullate 'a vuje. Chi canuscesse sta chiave putesse leggere 'e paggene cuntrullate vuoste, picciò, tenit' 'a mente e nun 'a spartí.", "savedprefs": "'E preferenze songo state sarvate.", "savedrights": "'E dritte 'e gruppe 'utente {{GENDER:$1|$1}} sto state sarvate.", "timezonelegend": "Fuso orario:", @@ -1030,13 +1036,16 @@ "timezoneregion-indian": "Oceano Indiano", "timezoneregion-pacific": "Oceano Pacifeco", "allowemail": "Abbìa 'a ricezione 'e mmasciate mannate 'a l'ati utente", + "email-allow-new-users-label": "Abbìa 'a ricezione 'e mmasciate 'a l'ati utente nuove nuove", + "email-blacklist-label": "Nun permettere chist' utente 'e me mannà masciate:", "prefs-searchoptions": "Ascìa", "prefs-namespaces": "Namespace", "default": "predefinito", "prefs-files": "File", "prefs-custom-css": "CSS personalizzato", + "prefs-custom-json": "JSON personalizzato", "prefs-custom-js": "JavaScript personalizzato", - "prefs-common-config": "CSS/JavaScript spartuto pe' tutt' 'e skin:", + "prefs-common-config": "CSS/JSON/JavaScript spartuto pe' tutt' 'e skin:", "prefs-reset-intro": "Putisse ausà sta paggena pe' rimpizzà 'e preferenze proprie comme chille predefinite d' 'o sito.\nL'operazione nun se può annullà.", "prefs-emailconfirm-label": "Cunferma 'e ll'e-mail:", "youremail": "E-mail:", @@ -1068,9 +1077,11 @@ "prefs-dateformat": "Furmato data", "prefs-timeoffset": "Ore 'e differenza", "prefs-advancedediting": "Opziune generale", + "prefs-developertools": "Strumiente p' 'e sviluppature", "prefs-editor": "Editore", "prefs-preview": "Anteprimma", "prefs-advancedrc": "Opziune avanzate", + "prefs-opt-out": "Stuta miglioramente", "prefs-advancedrendering": "Opziune avanzate", "prefs-advancedsearchoptions": "Opziune avanzate", "prefs-advancedwatchlist": "Opziune avanzate", @@ -1113,6 +1124,7 @@ "group-autoconfirmed": "Utente autocunfermate", "group-bot": "Bot", "group-sysop": "Ammenistrature", + "group-interface-admin": "Ammenistrature 'e ll'interfaccia", "group-bureaucrat": "Burocrate", "group-suppress": "Soppressure", "group-all": "(tutte)", @@ -1120,12 +1132,14 @@ "group-autoconfirmed-member": "{{GENDER:$1|utente autocunfermato|utente autocunfermata|utente autocunfermato/a}}", "group-bot-member": "{{GENDER:$1|bot}}", "group-sysop-member": "{{GENDER:$1|ammenistratore|ammenistratrice|ammenistratore/trice}}", + "group-interface-admin-member": "{{GENDER:$1|ammenistratore|ammenistratrice|ammenistratore/trice}} 'e ll'interfaccia", "group-bureaucrat-member": "{{GENDER:$1|burocrate}}", "group-suppress-member": "{{GENDER:$1|suppressure|supprimitrice}}", "grouppage-user": "{{ns:project}}:Utente", "grouppage-autoconfirmed": "{{ns:project}}:Utente autocunfermate", "grouppage-bot": "{{ns:project}}:Bot", "grouppage-sysop": "{{ns:project}}:Ammenistrature", + "grouppage-interface-admin": "{{ns:project}}:Ammenistrature 'e ll'interfaccia", "grouppage-bureaucrat": "{{ns:project}}:Burocrate", "grouppage-suppress": "{{ns:project}}:Suppressure", "right-read": "Liegge paggene", @@ -1174,8 +1188,13 @@ "right-editcontentmodel": "Cagna 'o modello 'e cuntenute 'e na paggena", "right-editinterface": "Modifeca 'a nterfaccia utente", "right-editusercss": "Cagna 'e file CSS 'e l'at'utente", + "right-edituserjson": "Cagna 'e file JSON 'e l'at'utente", "right-edituserjs": "Cagna 'e file JS e l'at'utente", + "right-editsitecss": "Cagna 'e CSS p' 'o sito sano", + "right-editsitejson": "Cagna 'e JSON p' 'o sito sano", + "right-editsitejs": "Cagna 'e JavaScript p' 'o sito sano", "right-editmyusercss": "Cagna 'e proprie file CSS", + "right-editmyuserjson": "Cagna 'e proprie file JSON", "right-editmyuserjs": "Cagna 'e proprie file JavaScript", "right-viewmywatchlist": "Vide l'elenco 'e cuntrollo proprio", "right-editmywatchlist": "Cagna l'elenco 'e cuntrollo proprio. Vedete ca cocch'azione putesse jògnere ancora paggene senza stu deritto.", @@ -1215,10 +1234,11 @@ "grant-createaccount": "Crìa cunte", "grant-createeditmovepage": "Créa, cagna e móve paggene", "grant-delete": "Scancella paggene, verziune, trasute 'e riggistro", - "grant-editinterface": "Cagna 'o namespace MediaWiki e CSS/JavaScript 'e ll'utente", - "grant-editmycssjs": "Cagna 'e CSS/JavaScript 'e ll'utenza d' 'a vosta", + "grant-editinterface": "Cagna 'o namespace MediaWiki 'e ll'utente/JSON p' 'o sito sano", + "grant-editmycssjs": "Cagna 'e CSS/JSON/JavaScript 'e ll'utenza d' 'a vosta", "grant-editmyoptions": "Cagna 'e preferenze utente proprie", "grant-editmywatchlist": "Cagna l'elenco 'e cuntrolo 'o tuojo", + "grant-editsiteconfig": "Cagna 'e CSS/JS p' 'o sito sano", "grant-editpage": "Cagna 'e paggene esistente", "grant-editprotected": "Cagna 'e paggine prutette", "grant-highvolume": "Cagnamiente massive", @@ -1258,7 +1278,9 @@ "action-writeapi": "usa l'API 'n scrittura", "action-delete": "scancèlla chesta paggena", "action-deleterevision": "scancellà 'e verziune", + "action-deletelogentry": "scancellà riggistro", "action-deletedhistory": "vide 'a cronologgia scancellata 'e sta paggena", + "action-deletedtext": "vide 'a verziona d' 'o testo scancellato", "action-browsearchive": "ascìa dint' 'e paggene scancellate", "action-undelete": "arripiglia chesta paggena", "action-suppressrevision": "rivedé e arripiglià 'e cagnamiente annascunnute", @@ -1276,6 +1298,7 @@ "action-userrights-interwiki": "cagna 'e deritte 'e ll'utente int'a l'ati wiki", "action-siteadmin": "blocca o sblocca 'o database", "action-sendemail": "manna e-mail", + "action-editmyoptions": "cagna 'e preferenze proprie", "action-editmywatchlist": "cagna l'elenco 'e cuntrolo 'o tuojo", "action-viewmywatchlist": "vide l'elenco 'e cuntrollo proprio", "action-viewmyprivateinfo": "vide 'e date perzunale", @@ -1293,6 +1316,9 @@ "recentchanges-legend": "Opzione urdeme cagnamiénte", "recentchanges-summary": "Ncopp'a chesta paggena song' appresentate ll'urdeme cagnamiente fatte ê cuntenute d\"o sito.", "recentchanges-noresult": "Nisciuno cagnamiento dint'o periodo dato ca soddisfà sti criterie.", + "recentchanges-timeout": "Sta ricerca è ammaturata mo. Si tu vulisse, putisse tentà n'ati parametre 'e cerca.", + "recentchanges-network": "Pe' bbìa 'e n'errore tecnico, nun se pò carecà nisciuno risultato. Facite agghiurnamento d' 'a paggena.", + "recentchanges-notargetpage": "Azzeccate ncoppa 'o nomme 'e na paggena pe' puté vedé 'e cagnamiente 'e chesta paggena.", "recentchanges-feed-description": "Ncoppa chistu feed song' appresentate ll'urdeme cagnamiente fatte ê cuntenute d\"o sito.", "recentchanges-label-newpage": "Chisto cagno ha criato na paggena nova", "recentchanges-label-minor": "Chisto è nu cagnamiénto piccerillo", @@ -1302,6 +1328,44 @@ "recentchanges-legend-heading": "Liggenda:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide [[Special:NewPages|'e paggene nove]])", "recentchanges-submit": "Faje vedé", + "rcfilters-tag-remove": "Léva '$1'", + "rcfilters-legend-heading": "Elenco abbreviaziune:", + "rcfilters-other-review-tools": "Ate strumiente 'e cuntrollo", + "rcfilters-group-results-by-page": "Arricetta risultate pe' paggena", + "rcfilters-activefilters": "Filtre appicciate", + "rcfilters-activefilters-hide": "Annascunne", + "rcfilters-activefilters-show": "Faje vedé", + "rcfilters-activefilters-hide-tooltip": "Annascunne l'area 'e filtre appicciate", + "rcfilters-activefilters-show-tooltip": "Fà vedé l'area 'e filtre appicciate", + "rcfilters-advancedfilters": "Filtre avanzate", + "rcfilters-limit-title": "Risultate 'a fà vedé", + "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|cagnamiento|cagnamiente}}, $2", + "rcfilters-date-popup-title": "Periodo 'e tiempo a cercà", + "rcfilters-days-title": "Ùrdeme juorne", + "rcfilters-hours-title": "Ùrdeme ore", + "rcfilters-days-show-days": "$1 {{PLURAL:$1|juorno|juorne}}", + "rcfilters-days-show-hours": "$1 {{PLURAL:$1|ora|ore}}", + "rcfilters-highlighted-filters-list": "Evidenziato: $1", + "rcfilters-quickfilters": "Filtre riggistrate", + "rcfilters-quickfilters-placeholder-title": "Nisciuno filtro riggistrato", + "rcfilters-savedqueries-defaultlabel": "Filtre riggistrate", + "rcfilters-savedqueries-rename": "Renommena", + "rcfilters-savedqueries-setdefault": "Mpustà comme predefinito", + "rcfilters-savedqueries-unsetdefault": "Léva cumme predefinito", + "rcfilters-savedqueries-remove": "Scancèlla", + "rcfilters-savedqueries-new-name-label": "Nomme", + "rcfilters-savedqueries-apply-label": "Crea filtro", + "rcfilters-savedqueries-cancel-label": "Scancella", + "rcfilters-clear-all-filters": "Pulezza tutt' 'e filtre", + "rcfilters-show-new-changes": "Vide 'e cagnamiente cchiù nnove", + "rcfilters-invalid-filter": "Filtro invalido", + "rcfilters-filterlist-title": "Filtre", + "rcfilters-filterlist-whatsthis": "Cumme funzionano?", + "rcfilters-highlightbutton-title": "Evidenzia risultate", + "rcfilters-filterlist-noresults": "Nisciuno filtro truvato", + "rcfilters-filtergroup-authorship": "Autore d' 'o cuntribbuto", + "rcfilters-filtergroup-lastRevision": "Ùrdeme verziune", + "rcfilters-filter-lastrevision-label": "Verzione 'e mmo", "rcnotefrom": "Ccà abbascio {{PLURAL:$5|è alencato 'o cagnamiento appurtato|song' alincate 'e cagnamiente appurtate}} 'a $3, $4 (mmustate nfin'a $1).", "rclistfrom": "Faje vedé 'e cagnamiénte fatte a partì 'a $3 $2", "rcshowhideminor": "$1 'e cagnamiénte piccerille", diff --git a/languages/i18n/nb.json b/languages/i18n/nb.json index 359d8b78cb..05206d840e 100644 --- a/languages/i18n/nb.json +++ b/languages/i18n/nb.json @@ -3546,6 +3546,7 @@ "redirect-file": "Filnavn", "redirect-logid": "Logg-ID", "redirect-not-exists": "Verdi er ikke funnet", + "redirect-not-numeric": "Verdien er ikke numerisk", "fileduplicatesearch": "Søk etter duplikatfiler", "fileduplicatesearch-summary": "Søk etter duplikatfiler basert på dets hash-verdi.", "fileduplicatesearch-filename": "Filnavn:", diff --git a/languages/i18n/nl.json b/languages/i18n/nl.json index 5831b8232e..01ba67ea51 100644 --- a/languages/i18n/nl.json +++ b/languages/i18n/nl.json @@ -2635,7 +2635,7 @@ "move-page-legend": "Pagina hernoemen", "movepagetext": "Door middel van het onderstaande formulier kunt u een pagina hernoemen.\nDe geschiedenis gaat mee naar de nieuwe pagina.\n* De oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\n* Koppelingen naar de oude pagina worden niet aangepast.\n* De pagina's die doorverwijzen naar de oorspronkelijke paginanaam worden automatisch bijgewerkt.\nAls u dit niet wenst, controleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan alleen hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\n\nOpmerking:\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.", "movepagetext-noredirectfixer": "Door middel van het onderstaande formulier kunt u een pagina en alle bijbehorende oude versies hernoemen.\nDe oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\nControleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan alleen hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\nU kunt dus een pagina die per ongeluk is hernoemd terug hernoemen en u kunt een bestaande pagina niet overschrijven. \n\nOpmerking:\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.", - "movepagetalktext": "Als u het onderstaande vinkje selecteert, krijgt de bijbehorende overlegpagina automatisch een andere naam, tenzij de overlegpagina onder de nieuwe naam al bestaat.\n\nIn dit geval moet u de pagina handmatig hernoemen of samenvoegen.", + "movepagetalktext": "Als u deze optie inschakelt krijgt de bijbehorende overlegpagina automatisch een andere naam, tenzij de overlegpagina onder de nieuwe naam al bestaat.\n\nIn dit geval moet u de pagina handmatig hernoemen of samenvoegen.", "moveuserpage-warning": "'''Waarschuwing:''' u gaat een gebruikerspagina hernoemen. Houd er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.", "movecategorypage-warning": "Waarschuwing: U staat op het punt een categoriepagina te hernoemen. Houdt u er rekening mee dat alleen de categoriepagina zelf hernoemd wordt; pagina's in de oude categorie worden niet automatisch naar de nieuwe verplaatst.", "movenologintext": "U moet [[Special:UserLogin|aangemeld]] zijn om een pagina te hernoemen.", @@ -3559,6 +3559,7 @@ "redirect-file": "Bestandsnaam", "redirect-logid": "Logboekregel-ID", "redirect-not-exists": "Waarde niet gevonden", + "redirect-not-numeric": "Waarde is geen nummer", "fileduplicatesearch": "Duplicaatbestanden zoeken", "fileduplicatesearch-summary": "Duplicaatbestanden zoeken op basis van de hashwaarde.", "fileduplicatesearch-filename": "Bestandsnaam:", @@ -4116,7 +4117,7 @@ "edit-error-long": "Fouten:\n\n$1", "revid": "versie $1", "pageid": "Pagina-ID $1", - "interfaceadmin-info": "$1\n\nRechten voor het bewerken van wikibrede CSS/JS/JSON bestanden zijn recentelijk gescheiden van het editinterface recht. Als u niet begrijpt waarom u deze foutmelding te zien krijgt, ga dan naar [[mw:MediaWiki_1.32/interface-admin]].", + "interfaceadmin-info": "$1\n\nRechten voor het bewerken van wikibrede CSS/JS/JSON-bestanden zijn recentelijk gescheiden van het editinterface recht. Als u niet begrijpt waarom u deze foutmelding te zien krijgt, ga dan naar [[mw:MediaWiki_1.32/interface-admin]].", "rawhtml-notallowed": "<html> tags kunnen alleen op normale pagina's geplaatst worden.", "gotointerwiki": "{{SITENAME}} verlaten", "gotointerwiki-invalid": "De opgegeven titel is ongeldig.", diff --git a/languages/i18n/nn.json b/languages/i18n/nn.json index 71640d54e9..b3fc56c9e1 100644 --- a/languages/i18n/nn.json +++ b/languages/i18n/nn.json @@ -1235,6 +1235,10 @@ "rcfilters-filter-bots-description": "Endringar gjorde med automatiske verktøy.", "rcfilters-filter-humans-label": "Menneske (ikkje robot)", "rcfilters-filter-humans-description": "Endringar gjorde av menneske.", + "rcfilters-filtergroup-reviewstatus": "Granskingsstode", + "rcfilters-filter-reviewstatus-unpatrolled-description": "Endringar som ikkje er manuelt eller automatisk merkte som patruljerte.", + "rcfilters-filter-reviewstatus-manual-description": "Endringar som manuelt er merkte som patruljerte.", + "rcfilters-filter-reviewstatus-auto-description": "Endringar av vidarekomne brukarar som automatisk får arbeidet sitt merkt som patruljert.", "rcfilters-filtergroup-significance": "Vekt", "rcfilters-filter-minor-label": "Småplukk", "rcfilters-filter-minor-description": "Endringar merkte som småplukk av forfattaren.", @@ -2483,6 +2487,7 @@ "pageinfo-category-files": "Tal filer", "markaspatrolleddiff": "Merk som patruljert", "markaspatrolledtext": "Merk innhaldssida som patruljert", + "markaspatrolledtext-file": "Merk filversjonen som patruljert", "markedaspatrolled": "Merk som patruljert", "markedaspatrolledtext": "Den valde versjonen av [[:$1]] er vorten merkt som patruljert.", "rcpatroldisabled": "Siste-endringar-patruljering er deaktivert", @@ -2494,6 +2499,7 @@ "markedaspatrollederrornotify": "Det gjekk ikkje å merkja endringa som patruljert.", "patrol-log-page": "Patruljeringslogg", "patrol-log-header": "Dette er ein logg over patruljerte sideversjonar.", + "confirm-markpatrolled-top": "Merk versjon $3 av $2 som patruljert?", "deletedrevision": "Slett gammal versjon $1", "filedeleteerror-short": "Feil ved sletting av fila: $1", "filedeleteerror-long": "Det vart ein feil under filslettinga av:\n\n$1", @@ -2531,6 +2537,10 @@ "newimages-summary": "Denne spesialsida syner dei sist opplasta filene.", "newimages-legend": "Filnamn", "newimages-label": "Filnamn (eller ein del av det):", + "newimages-user": "IP-adresse eller brukarnamn", + "newimages-newbies": "Berre vis opplastingar frå nye kontoar", + "newimages-showbots": "Vis opplastingar av robotar", + "newimages-hidepatrolled": "Gøym patruljerte opplastingar", "noimages": "Her er ingen filer som kan visast.", "ilsubmit": "Søk", "bydate": "etter dato", @@ -3269,6 +3279,8 @@ "mediastatistics-table-extensions": "Mogelege filendingar", "mediastatistics-table-count": "Tal filer", "mediastatistics-header-unknown": "Ukjende", + "mediastatistics-header-bitmap": "Bitmap-bilete", + "mediastatistics-header-drawing": "Teikningar (vektorbilete)", "mediastatistics-header-audio": "Lyd", "mediastatistics-header-video": "Videoar", "mediastatistics-header-multimedia": "Rike media", diff --git a/languages/i18n/or.json b/languages/i18n/or.json index 1751fdd5b4..340a33a44e 100644 --- a/languages/i18n/or.json +++ b/languages/i18n/or.json @@ -2868,7 +2868,7 @@ "version-skin-colheader-name": "ସ୍କିନ", "version-ext-colheader-version": "ସଂସ୍କରଣ", "version-ext-colheader-license": "ଲାଇସେନ୍ସ", - "version-ext-colheader-description": "ବର୍ଣନା", + "version-ext-colheader-description": "ବର୍ଣ୍ଣନା", "version-ext-colheader-credits": "ଲେଖକମାନେ", "version-license-title": "$1 ପାଇଁ ଲାଇସେନ୍ସ", "version-license-not-found": "ଏହି ଏକ୍ସଟେନସନରେ କୌଣସି ସବିଶେଷ ସୂଚନା ନାହିଁ ।", diff --git a/languages/i18n/pfl.json b/languages/i18n/pfl.json index 20164c0b58..3aa864ae49 100644 --- a/languages/i18n/pfl.json +++ b/languages/i18n/pfl.json @@ -366,7 +366,7 @@ "note": "'''Hiwes:'''", "previewnote": "'''Deng'g drõõ, dasses nua e Vorschau isch.'''\nDoi Ännarunge sinn noch nedd gschbaischadd worre!", "editing": "An de Said $1 schaffe", - "creating": "Magschd $1", + "creating": "$1 aaleche", "editingsection": "$1 schaffe (Deel)", "editingcomment": "$1 schaffe (Deel)", "editconflict": "Schdraid ums Ännare: $1", diff --git a/languages/i18n/pl.json b/languages/i18n/pl.json index 1e73153253..f92f2ea901 100644 --- a/languages/i18n/pl.json +++ b/languages/i18n/pl.json @@ -1266,7 +1266,7 @@ "right-suppressionlog": "Podgląd rejestru ukrywania", "right-block": "Blokowanie użytkownikom możliwości edycji", "right-blockemail": "Blokowanie użytkownikom możliwości wysyłania wiadomości", - "right-hideuser": "Blokowanie użytkownika, niewidoczne publicznie", + "right-hideuser": "Blokowanie użytkownika i ukrywanie od publiczności", "right-ipblock-exempt": "Obejście blokad, automatycznych blokad i blokad zakresów adresów IP", "right-unblockself": "Odblokowanie samego siebie", "right-protect": "Zmiana poziomu zabezpieczenia i edycja stron zabezpieczonych kaskadowo", diff --git a/languages/i18n/pt-br.json b/languages/i18n/pt-br.json index 9a0b8f6710..1f5dadee34 100644 --- a/languages/i18n/pt-br.json +++ b/languages/i18n/pt-br.json @@ -3644,6 +3644,7 @@ "redirect-file": "Nome do arquivo", "redirect-logid": "ID de log", "redirect-not-exists": "Valor não encontrado", + "redirect-not-numeric": "Valor não numérico", "fileduplicatesearch": "Procurar por arquivos duplicados", "fileduplicatesearch-summary": "Procure por arquivos duplicados tendo por base seu valor \"hash\".", "fileduplicatesearch-filename": "Nome do arquivo:", @@ -4201,7 +4202,7 @@ "edit-error-long": "Erros:\n$1", "revid": "revisão $1", "pageid": "ID da página $1", - "interfaceadmin-info": "$1\n\nAs permissões de edição de arquivos CSS/JS/JSON que afetam todo o ''site'' foram recentemente separadas do privilégio editinterface. Se não compreende porque está a receber este erro, consulte [[mw:MediaWiki_1.32/interface-admin]].", + "interfaceadmin-info": "$1\n\nAs permissões para edição de arquivos CSS/JS/JSON em todo o site foram separadas recentemente do direito editinterface. Se você não entende porque está recebendo este erro, veja [[mw:MediaWiki_1.32/interface-admin]].", "rawhtml-notallowed": "As tags <html> não podem ser usadas fora das páginas normais.", "gotointerwiki": "Saindo {{SITENAME}}", "gotointerwiki-invalid": "O título especificado é inválido.", diff --git a/languages/i18n/pt.json b/languages/i18n/pt.json index 3fe7135259..a02bd931d5 100644 --- a/languages/i18n/pt.json +++ b/languages/i18n/pt.json @@ -3560,6 +3560,7 @@ "redirect-file": "Nome do ficheiro", "redirect-logid": "Identificador da entrada do registo", "redirect-not-exists": "Valor não encontrado", + "redirect-not-numeric": "Valor não numérico", "fileduplicatesearch": "Pesquisa de ficheiros duplicados", "fileduplicatesearch-summary": "Pesquisa de ficheiros duplicados baseada no resumo criptográfico.", "fileduplicatesearch-filename": "Nome do ficheiro:", diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json index 4bb5fc411e..cf4446db59 100644 --- a/languages/i18n/qqq.json +++ b/languages/i18n/qqq.json @@ -768,6 +768,7 @@ "botpasswords-invalid-name": "Error message when a username lacking the separator character is passed to BotPassword. Parameters:\n* $1 - The separator character.", "botpasswords-not-exist": "Error message when a username exists but does not a bot password for the given \"bot name\". Parameters:\n* $1 - username\n* $2 - bot name", "botpasswords-needs-reset": "Error message when a bot password exists but needs to be reset. Parameters:\n* $1 - username\n* $2 - bot name", + "botpasswords-locked": "Shown in the event that the underlying account is locked", "resetpass_forbidden": "Used as error message in changing password. Maybe the external auth plugin won't allow local password changes.", "resetpass_forbidden-reason": "Like {{msg-mw|resetpass_forbidden}} but the auth provider gave a reason.\n\nParameters:\n* $1 - reason given by auth provider", "resetpass-no-info": "Error message for [[Special:ChangePassword]].\n\nParameters:\n* $1 (unused) - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description", @@ -4100,6 +4101,7 @@ "redirect-file": "Description of lookup type for [[Special:Redirect]].\n{{Identical|Filename}}", "redirect-logid": "Description of lookup type for [[Special:Redirect]].\n{{Identical|Log ID}}", "redirect-not-exists": "Used as error message in [[Special:Redirect]]", + "redirect-not-numeric": "Used as error message in [[Special:Redirect]]", "fileduplicatesearch": "Name of special page [[Special:FileDuplicateSearch]].", "fileduplicatesearch-summary": "Summary of [[Special:FileDuplicateSearch]]", "fileduplicatesearch-filename": "Input form of [[Special:FileDuplicateSearch]]:\n\n{{Identical|Filename}}", diff --git a/languages/i18n/roa-tara.json b/languages/i18n/roa-tara.json index 7fdfdbb120..cf05767936 100644 --- a/languages/i18n/roa-tara.json +++ b/languages/i18n/roa-tara.json @@ -364,7 +364,11 @@ "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.", + "sitecssprotected": "Non ge tìne le permesse pe cangià sta pàgene CSS purcé pò avè effette sus a tutte le visitature.", + "sitejsonprotected": "Non ge tìne le permesse pe cangià sta pàgene JSON purcé pò avè effette sus a tutte le visitature.", + "sitejsprotected": "Non ge tìne le permesse pe cangià sta pàgene JavaScript purcé pò avè effette sus a tutte le visitature.", "mycustomcssprotected": "Non ge tìne le permesse pe cangià sta pàgene CSS", + "mycustomjsonprotected": "Non ge tìne le permesse pe cangià sta pàgene JSON.", "mycustomjsprotected": "Non ge tìne le permesse pe cangià sta pàgene JavaScript", "myprivateinfoprotected": "Non ge tìne le permesse pe cangià le 'mbormaziune private tune.", "mypreferencesprotected": "Non ge tìne le permesse pe cangià le preferenze tune.", diff --git a/languages/i18n/ru.json b/languages/i18n/ru.json index 9d90fb4f8c..aec7c7b54f 100644 --- a/languages/i18n/ru.json +++ b/languages/i18n/ru.json @@ -410,7 +410,7 @@ "sort-descending": "Упорядочить по убыванию", "sort-ascending": "Упорядочить по возрастанию", "nstab-main": "Статья", - "nstab-user": "Участник", + "nstab-user": "{{GENDER:{{ROOTPAGENAME}}|Участник|Участница}}", "nstab-media": "Мультимедиа", "nstab-special": "Служебная страница", "nstab-project": "О проекте", @@ -843,8 +843,8 @@ "permissionserrorstext-withaction": "У вас нет прав на выполнение действия «$2» по {{PLURAL:$1|1=следующей причине|следующим причинам}}:", "contentmodelediterror": "Вы не можете редактировать эту версию, поскольку модель её содержания — $1, отличающаяся от текущей модели содержания страницы — $2.", "recreate-moveddeleted-warn": "Внимание: Вы пытаетесь воссоздать страницу, которая ранее удалялась.\n\nПроверьте, действительно ли вам нужно воссоздавать эту страницу.\nНиже для справки приведены журналы удаления и переименований этой страницы.", - "moveddeleted-notice": "Эта страница была удалена.\nНиже для справки приведены журналы удаления, защиты и перемещения для этой страницы.", - "moveddeleted-notice-recent": "К сожалению, эта страница была недавно удалена (в течение последних 24 часов).\nНиже для справки приведены журналы удаления, защиты и перемещения для этой страницы.", + "moveddeleted-notice": "Эта страница была удалена.\nНиже для справки приведены журналы удаления, защиты и переименования для этой страницы.", + "moveddeleted-notice-recent": "К сожалению, эта страница была недавно удалена (в течение последних 24 часов).\nНиже для справки приведены журналы удаления, защиты и переименования для этой страницы.", "log-fulllog": "Просмотреть журнал целиком", "edit-hook-aborted": "Правка отменена процедурой-перехватчиком.\nДополнительных разъяснений не приведено.", "edit-gone-missing": "Невозможно обновить страницу.\nВероятно, она была удалена.", @@ -3792,6 +3792,7 @@ "redirect-file": "Название файла", "redirect-logid": "ID журнала", "redirect-not-exists": "Значение не найдено", + "redirect-not-numeric": "Значение не числовое", "fileduplicatesearch": "Поиск одинаковых файлов", "fileduplicatesearch-summary": "Поиск одинаковых файлов по хэш-коду.", "fileduplicatesearch-filename": "Имя файла:", diff --git a/languages/i18n/rue.json b/languages/i18n/rue.json index 1a81188139..e8a9b6efce 100644 --- a/languages/i18n/rue.json +++ b/languages/i18n/rue.json @@ -935,6 +935,7 @@ "right-move": "Переменованя сторінок", "right-move-subpages": "Переменованя сторінок і їх підсторінок", "right-move-rootuserpages": "Переменованя корінёвых сторінок хоснователїв", + "right-move-categorypages": "Переменованя сторінок катеґорій", "right-movefile": "Переменовати файлы", "right-suppressredirect": "Нестворіня напрямлїня про переменоваю сторінкы", "right-upload": "Наладовованя файлів", @@ -993,6 +994,7 @@ "right-siteadmin": "Замыкана і одомыканя датабазы", "right-override-export-depth": "Експорт сторінок включаючі звязаны сторінкы з глубков до 5", "right-sendemail": "Посыланя пошты іншым хоснователям", + "right-applychangetags": "Придаваня [[Special:Tags|значок]] до властных змін", "newuserlogpage": "Лоґ вытварянь хоснователїв", "newuserlogpagetext": "Тото є список ново реґістрованых хоснователїв.", "rightslog": "Лоґ хосновательскых прав", @@ -1006,6 +1008,7 @@ "action-move": "Переменовати тоту сторінку", "action-move-subpages": "переменованя той сторінкы зо вшыткыма єй підсторінками", "action-move-rootuserpages": "переменовати корінёвы сторінкы хостователїв", + "action-move-categorypages": "переменованя сторінок катеґорій", "action-movefile": "переменовати тот файл", "action-upload": "наладовати тот файл", "action-reupload": "переписати тот екзістуючій файл", diff --git a/languages/i18n/skr-arab.json b/languages/i18n/skr-arab.json index 55a27ed57b..5630e92f90 100644 --- a/languages/i18n/skr-arab.json +++ b/languages/i18n/skr-arab.json @@ -564,7 +564,7 @@ "prefs-info": "بنیادی معلومات", "prefs-i18n": "بین الاقوامیت", "prefs-signature": "دستخط", - "prefs-dateformat": "تاریخ دی ترتیب", + "prefs-dateformat": "تریخ دی ترتیب", "prefs-timeoffset": "وقت دی ترتیب", "prefs-advancedediting": "عام آپشن", "prefs-editor": "خانہ ترمیم", @@ -725,7 +725,7 @@ "upload-form-label-usage-filename": "فائل دا ناں", "upload-form-label-own-work": "یہ میݙا ذاتی کم ہے", "upload-form-label-infoform-categories": "ونکیاں", - "upload-form-label-infoform-date": "تاریخ", + "upload-form-label-infoform-date": "تریخ", "backend-fail-delete": "مِسَل \"$1\" کوں مٹایا نی ونڄ سڳیا۔", "license": "اجازت نامہ:", "license-header": "اجازہ کاری", @@ -733,7 +733,7 @@ "imgfile": "فائل", "listfiles": "فائل لسٹ", "listfiles_thumb": "تھمب نیل", - "listfiles_date": "تاریخ", + "listfiles_date": "تریخ", "listfiles_name": "ناں", "listfiles_user": "ورتݨ والا", "listfiles_size": "حجم", @@ -744,7 +744,7 @@ "listfiles-latestversion-no": "کو", "file-anchor-link": "فائل", "filehist": "فائل دا تاریخچہ", - "filehist-help": "کہیں خاص ویلے تے تاریخ کوں فائل کین٘ویں نظردی ہائی، ݙیکھݨ کیتے اوں ویلے تے کلک کرو۔", + "filehist-help": "کہیں خاص ویلے تے تریخ کوں فائل کین٘ویں نظردی ہائی، ݙیکھݨ کیتے اوں ویلے تے کلک کرو۔", "filehist-deleteall": "سارے مٹاؤ", "filehist-deleteone": "مٹاؤ", "filehist-revert": "واپس", @@ -1013,9 +1013,9 @@ "pageinfo-redirects-name": "رجوعاں دی تعداد", "pageinfo-subpages-name": "ایں ورقے دے ذیلی ورقیاں دی تعداد", "pageinfo-firstuser": "ورقہ ساز", - "pageinfo-firsttime": "ورقہ بݨݨ دی تاریخ", + "pageinfo-firsttime": "ورقہ بݨݨ دی تریخ", "pageinfo-lastuser": "چھیکڑی ترمیم کنندہ", - "pageinfo-lasttime": "چھیکڑی ترمیم دی تاریخ", + "pageinfo-lasttime": "چھیکڑی ترمیم دی تریخ", "pageinfo-edits": "ترامیم دی مجموعی تعداد", "pageinfo-authors": "مختلف مصنفین دی تعداد", "pageinfo-recent-edits": "حالیہ ترامیم دی تعداد (گزشتہ $1 وچ)", @@ -1045,13 +1045,13 @@ "exif-orientation": "اورینٹیشن", "exif-xresolution": "افقی ریزولوشن", "exif-yresolution": "عمودی ریزولیشن", - "exif-datetime": "فائل بدلݨ دی تاریخ تے ویلا", + "exif-datetime": "فائل بدلݨ دی تریخ تے ویلا", "exif-make": "کیمرہ ساز کمپنی", "exif-model": "کیمرے دا ماڈل", "exif-software": "مستعمل سافٹ ویئر", "exif-exifversion": "اکزیف ورژن", "exif-colorspace": "رنگ فضا", - "exif-datetimeoriginal": "ڈیٹا بݨاوݨ دی تاریخ تے ویلا", + "exif-datetimeoriginal": "ڈیٹا بݨاوݨ دی تریخ تے ویلا", "exif-datetimedigitized": "ڈجیٹائزنگ دا ویلہ تے تریخ", "exif-orientation-1": "عام", "namespacesall": "یکے", diff --git a/languages/i18n/sl.json b/languages/i18n/sl.json index be9789d549..a265794db9 100644 --- a/languages/i18n/sl.json +++ b/languages/i18n/sl.json @@ -3464,6 +3464,7 @@ "redirect-file": "Ime datoteke", "redirect-logid": "ID dnevnika", "redirect-not-exists": "Vrednosti ni mogoče najti", + "redirect-not-numeric": "Vrednost ni številska", "fileduplicatesearch": "Iskanje podvojenih datotek", "fileduplicatesearch-summary": "Iskanje podvojenih datotek, ki temelji na podlagi njenih hashvrednosti.", "fileduplicatesearch-filename": "Ime datoteke:", diff --git a/languages/i18n/sr-ec.json b/languages/i18n/sr-ec.json index bef87ba17b..084077eff2 100644 --- a/languages/i18n/sr-ec.json +++ b/languages/i18n/sr-ec.json @@ -171,7 +171,7 @@ "category-file-count": "{{PLURAL:$2|1=Ова категорија садржи само следећу датотеку.|{{PLURAL:$1|1=Следећа датотека је|Следеће $1 датотеке су|Следећих $1 датотека је}} у овој категорији, од укупно $2.}}", "category-file-count-limited": "{{PLURAL:$1|1=Следећа датотека је|Следеће $1 датотеке су|Следећих $1 датотека је}} у овој категорији.", "listingcontinuesabbrev": "наст.", - "index-category": "Пописане странице", + "index-category": "Индексиране странице", "noindex-category": "Непописане странице", "broken-file-category": "Странице са неисправним везама до датотека", "categoryviewer-pagedlinks": "$1 ($2)", @@ -197,7 +197,7 @@ "tagline": "Извор: {{SITENAME}}", "help": "Помоћ", "search": "Претрага", - "search-ignored-headings": " #
    \n# Наслови који ће бити занемарени при претрази.\n# Промене су видљиве одмах након што се страница са насловом попише.\n# Можете изнудити поновно пописивање „нултом” изменом.\n# Синтакса је следећа:\n#  * Сваки ред који започиње знаком „#” је коментар.\n#  * Сваки не празни ред је тачан наслов који ће бити занемарен, с тим да се разликују мала и велика слова и све остало\nРеференце\nСпољашње везе\nТакође погледајте\n #
    ", + "search-ignored-headings": " #
    \n# Наслови који ће бити занемарени при претрази.\n# Промене су видљиве одмах након што се страница са насловом индексира.\n# Можете изнудити поновно индексирање „нултом” изменом.\n# Синтакса је следећа:\n#  * Сваки ред који започиње знаком „#” је коментар.\n#  * Сваки не празни ред је тачан наслов који ће бити занемарен, с тим да се разликују мала и велика слова и све остало\nРеференце\nСпољашње везе\nТакође погледајте\n #
    ", "searchbutton": "Претражи", "go": "Иди", "searcharticle": "Иди", @@ -508,7 +508,7 @@ "acct_creation_throttle_hit": "Посетиоци овог викија који користе вашу IP адресу су већ отворили {{PLURAL:$1|1=један налог|$1 налога}} претходни $2, што је највећи дозвољени број у том временском периоду.\nЗбог тога посетиоци с ове IP адресе тренутно не могу отворити више налога.", "emailauthenticated": "Ваша имејл-адреса је потврђена на дан $2 у $3 ч.", "emailnotauthenticated": "Ваша имејл-адреса још није потврђена.\nНиједан имејл неће да буде послат ни у једном од следећих случајева.", - "noemailprefs": "Наведите имејл-адресу у својим подешавањима за оспособљавање ових могућности.", + "noemailprefs": "Наведите имејл-адресу у подешавањима за оспособљавање ових функција.", "emailconfirmlink": "Потврдите своју имејл-адресу", "invalidemailaddress": "Имејл-адреса не може да буде прихваћена јер је у неважећем облику.\nУнесите исправну адресу или оставите празно поље.", "cannotchangeemail": "Имејл-адресе налога не могу да се промене на овом викију.", @@ -573,7 +573,7 @@ "resetpass-no-info": "Морате бити пријављени да бисте приступили овој страници.", "resetpass-submit-loggedin": "Промени лозинку", "resetpass-submit-cancel": "Откажи", - "resetpass-wrong-oldpass": "Неважећа привремена или актуелна лозинка.\nМожда сте већ променили лозинку или сте захтевали нову привремену лозинку.", + "resetpass-wrong-oldpass": "Неважећа привремена или тренутна лозинка.\nМожда сте већ променили лозинку или сте захтевали нову привремену лозинку.", "resetpass-recycled": "Унели сте садашњу лозинку, да бисте променили лозинку морате унети нову.", "resetpass-temp-emailed": "Пријавили сте се са привременим кодом из имејла.\nДа бисте завршили пријављивање морате поставити нову лозинку овде:", "resetpass-temp-password": "Привремена лозинка:", @@ -605,7 +605,7 @@ "changeemail-no-info": "Морате бити пријављени да бисте приступили овој страници.", "changeemail-oldemail": "Актуелна имејл-адреса:", "changeemail-newemail": "Нова имејл-адреса:", - "changeemail-newemail-help": "Ово поље би требало да оставите празно ако желите да уклоните вашу имејл адресу. Нећете бити у могућности да ресетујете заборављену лозинку и нећете примати мејлове од овог викија ако је имејл адреса уклоњена.", + "changeemail-newemail-help": "Ово поље треба да оставите празно ако желите да уклоните своју имејл-адресу. Нећете бити у могућности да ресетујете заборављену лозинку и нећете примати имејлове са овог викија ако је имејл-адреса уклоњена.", "changeemail-none": "(ништа)", "changeemail-password": "Ваша лозинка за пројекат {{SITENAME}}:", "changeemail-submit": "Промени имејл", @@ -663,8 +663,8 @@ "subject-preview": "Преглед теме:", "previewerrortext": "Дошло је до грешке при покушају прегледа промена.", "blockedtitle": "Корисник је блокиран", - "blockedtext": "Ваше корисничко име или IP адреса је блокирана.\n\nБлокаду је {{GENDER:$4|извршио|извршила}} $1.\nРазлог је $2.\n\n* Почетак блокаде: $8\n* Истек блокаде: $6\n* Блокирани: $7\n\nМожете да контактирате {{GENDER:$4|корисника|корисницу}} $1 или другог [[{{MediaWiki:Grouppage-sysop}}|администратора]] да бисте дискутовали о блокади.\nНе можете да користите могућност „{{int:emailuser}}” осим ако сте навели валидну имејл адресу у својим [[Special:Preferences|подешавањима налога]] и нисте блокирани од коришћења исте.\nВаша актуелна IP адреса је $3, а ID блокаде #$5.\nНаведите све горње детаље при прављењу било каквих упита.", - "autoblockedtext": "Ваша IP адреса је аутоматски блокирана јер ју је користио други корисник, кога је {{GENDER:$4|блокирао|блокирала}} $1.\nРазлог:\n\n:$2\n\n* Почетак блокаде: $8\n* Крај блокаде: $6\n* Име корисника: $7\n\nМожете да контактирате {{GENDER:$4|корисника|корисницу}} $1 или другог [[{{MediaWiki:Grouppage-sysop}}|администратора]] да бисте расправљали о блокади.\n\nЗапамтите да не можете да користите могућност „{{int:emailuser}}“ осим ако сте навели ваљану имејл адресу у својим [[Special:Preferences|подешавањима]].\n\nВаша актуелна IP адреса је $3, а ID блокаде $5.\nУкључите све горње детаље при прављењу било каквих упита.", + "blockedtext": "Ваше корисничко име или IP адреса је блокирана.\n\nБлокаду је {{GENDER:$4|извршио|извршила}} $1.\nРазлог је $2.\n\n* Почетак блокаде: $8\n* Истек блокаде: $6\n* Блокирани: $7\n\nМожете да контактирате {{GENDER:$4|корисника|корисницу}} $1 или другог [[{{MediaWiki:Grouppage-sysop}}|администратора]] да бисте дискутовали о блокади.\nНе можете да користите функцију „{{int:emailuser}}” осим ако сте навели валидну имејл-адресу у својим [[Special:Preferences|подешавањима налога]] и нисте блокирани од коришћења исте.\nВаша тренутна IP адреса је $3, а ID блокаде #$5.\nНаведите све горње детаље при прављењу било каквих упита.", + "autoblockedtext": "Ваша IP адреса је аутоматски блокирана јер ју је користио други корисник, кога је {{GENDER:$4|блокирао|блокирала}} $1.\nРазлог:\n\n:$2\n\n* Почетак блокаде: $8\n* Крај блокаде: $6\n* Име корисника: $7\n\nМожете да контактирате {{GENDER:$4|корисника|корисницу}} $1 или другог [[{{MediaWiki:Grouppage-sysop}}|администратора]] да бисте расправљали о блокади.\n\nЗапамтите да не можете да користите функцију „{{int:emailuser}}“ осим ако сте навели важећу имејл-адресу у својим [[Special:Preferences|подешавањима]].\n\nВаша тренутна IP адреса је $3, а ID блокаде $5.\nУкључите све горње детаље при прављењу било каквих упита.", "blockednoreason": "разлог није наведен", "whitelistedittext": "$1 да бисте уређивали странице.", "confirmedittext": "Морате да потврдите своју имејл адресу пре уређивања страница.\nПоставите и потврдите имејл адресу преко [[Special:Preferences|подешавања]].", @@ -847,7 +847,7 @@ "rev-showdeleted": "прикажи", "revisiondelete": "Брисање/враћање измена", "revdelete-nooldid-title": "Неважећа одредишна измена", - "revdelete-nooldid-text": "Нисте навели одредишну измену на којој треба да се изврши ова функција, та измена не постоји, или покушавате да сакријете актуелну измену.", + "revdelete-nooldid-text": "Нисте навели одредишну измену на којој треба да се изврши ова функција, та измена не постоји, или покушавате да сакријете тренутну измену.", "revdelete-no-file": "Тражена датотека не постоји.", "revdelete-show-file-confirm": "Јесте ли сигурни да желите да видите избрисану измену датотеке „$1“ од $2; $3?", "revdelete-show-file-submit": "Да", @@ -881,20 +881,20 @@ "revdel-restore": "промени видљивост", "pagehist": "Историја странице", "deletedhist": "Избрисана историја", - "revdelete-hide-current": "Грешка при сакривању ставке од $1, $2: Ово је актуелна измена.\nНе може да буде сакривена.", + "revdelete-hide-current": "Грешка при сакривању ставке од $1, $2: Ово је тренутна измена.\nНе може да буде сакривена.", "revdelete-show-no-access": "Грешка при приказивању ставке од $1, $2: означена је као „ограничена“.\nНемате приступ до ње.", "revdelete-modify-no-access": "Грешка при мењању ставке од $1, $2: означена је као „ограничена“.\nНемате приступ до ње.", "revdelete-modify-missing": "Грешка при мењању ИБ ставке $1: она не постоји у бази података.", "revdelete-no-change": "Упозорење: ставка од $1, $2 већ поседује затражена подешавања видљивости.", "revdelete-concurrent-change": "Грешка при мењању ставке од $1, $2: њен статус је у међувремену променио други корисник.\nПроверите дневник.", - "revdelete-only-restricted": "Грешка при сакривању ставке од $1, $2: не можете сакрити ставке од администратора без избора других могућности видљивости.", + "revdelete-only-restricted": "Грешка при сакривању ставке од дана $1, $2: Не можете сакрити ставке од приказа администраторима без избора једне од других опција видљивости.", "revdelete-reason-dropdown": "*Уобичајени разлози за брисање\n** Кршење ауторског права\n** Неприкладан коментар или лични подаци\n** Неприкладно корисничко име\n** Увредљиви подаци", "revdelete-otherreason": "Други/додатни разлог:", "revdelete-reasonotherlist": "Други разлог", "revdelete-edit-reasonlist": "Уреди разлоге за брисање", "revdelete-offender": "Аутор измене:", "suppressionlog": "Дневник сакривања", - "suppressionlogtext": "Испод се налази списак брисања и блокирања који укључује садржај сакривен од администратора. Погледајте [[Special:BlockList|списак блокирања]] за списак актуелних операција забрана и блокирања.", + "suppressionlogtext": "Испод се налази списак брисања и блокирања који укључује садржај сакривен од администратора. Погледајте [[Special:BlockList|списак блокирања]] за списак тренутних операција забрана и блокирања.", "mergehistory": "Спајање историја странице", "mergehistory-header": "Ова страница вам омогућава да спојите измене неке изворне странице у нову страницу.\nЗапамтите да ће ова промена оставити непромењен садржај историје странице.", "mergehistory-box": "Споји измене две странице:", @@ -993,7 +993,7 @@ "powersearch-togglenone": "Ништа", "powersearch-remember": "Запамти избор за будуће претраге", "search-external": "Спољашња претрага", - "searchdisabled": "Претрага је онемогућена.\nУ међувремену можете тражити преко Гугла.\nУпамтите да његови пописи овог викија могу бити застарели.", + "searchdisabled": "Претрага је онемогућена.\nУ међувремену можете тражити преко Гугла.\nУпамтите да његови индекси овог викија могу бити застарели.", "search-error": "Дошло је до грешке приликом претраге: $1", "search-warning": "Упозорење приликом претраге: $1", "preferences": "Подешавања", @@ -1003,7 +1003,7 @@ "prefs-skin": "Тема", "skin-preview": "прегледај", "datedefault": "Свеједно", - "prefs-labs": "Пробне могућности", + "prefs-labs": "Експерименталне функције", "prefs-user-pages": "Корисничке странице", "prefs-personal": "Кориснички профил", "prefs-rc": "Скорашње измене", @@ -1365,7 +1365,7 @@ "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|промена|промене|промена}}, $2", "rcfilters-date-popup-title": "Временски период за претрагу", "rcfilters-days-title": "Недавни дани", - "rcfilters-hours-title": "Скорашњи сати", + "rcfilters-hours-title": "Недавни сати", "rcfilters-days-show-days": "$1 {{PLURAL:$1|дан|дана}}", "rcfilters-days-show-hours": "$1 {{PLURAL:$1|сат|сата}}", "rcfilters-highlighted-filters-list": "Истакнуто: $1", @@ -1595,7 +1595,7 @@ "file-thumbnail-no": "Име датотеке почиње са $1.\nИзгледа да се ради о слици умањене величине (сличица).\nАко имате ову слику у пуној резолуцији, отпремите је, у противном, промените име датотеке.", "fileexists-forbidden": "Датотека с овим називом већ постоји и не може се заменити.\nАко и даље желите да пошаљете датотеку, вратите се и изаберите други назив.\n[[File:$1|thumb|center|$1]]", "fileexists-shared-forbidden": "Датотека са овим именом већ постоји у заједничкој остави.\nАко још увек желите да отпремите датотеку, вратите се и користите ново име.\n[[File:$1|thumb|center|$1]]", - "fileexists-no-change": "Датотека је дупликат актуелне верзије [[:$1]].", + "fileexists-no-change": "Датотека је дупликат тренутне верзије [[:$1]].", "fileexists-duplicate-version": "Датотека је дупликат {{PLURAL:$2|старе верзије|старих верзија}} [[:$1]].", "file-exists-duplicate": "Ово је дупликат {{PLURAL:$1|следеће датотеке|следећих датотека}}:", "file-deleted-duplicate": "Датотека која је идентична овој ([[:$1]]) је раније била избрисана.\nТребате да проверите историју брисања те датотеке пре него што наставите са њеним поновним оптремањем.", @@ -1658,7 +1658,7 @@ "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|подразумевану страницу за отпремање]].", "backend-fail-stream": "Не могу да емитујем датотеку $1.", "backend-fail-backup": "Не могу да направим резерву датотеке $1.", @@ -1700,7 +1700,7 @@ "zip-file-open-error": "Дошло је до грешке при отварању датотеке за проверу ZIP архиве.", "zip-wrong-format": "Наведена датотека није формата ZIP.", "zip-bad": "Датотека је оштећена или је нечитљива ZIP датотека.\nБезбедносна провера не може да се изврши како треба.", - "zip-unsupported": "Датотека је формата ZIP који користи могућности које не подржава Медијавики.\nБезбедносна провера не може да се изврши како треба.", + "zip-unsupported": "Датотека је формата ZIP који користи функције ZIP које Медијавики не подржава.\nНе може се правилно проверити у вези безбедности.", "uploadstash": "Отпремање низа датотека", "uploadstash-summary": "Ова страница пружа приступ датотекама које су отпремљене или се отпремају, али још нису објављене. Ове датотеке нису видљиве никоме, осим кориснику који их је отпремио.", "uploadstash-clear": "Очисти сакривене датотеке", @@ -1724,7 +1724,7 @@ "uploadstash-file-not-found-not-exists": "Не могу наћи путању или ово није обична датотека.", "uploadstash-file-too-large": "Не могу послужити датотеку већу од $1 {{PLURAL:$1|бајта|бајтова}}", "uploadstash-not-logged-in": "Нико није пријављен. Датотеке морају припадати корисницима.", - "uploadstash-wrong-owner": "Ова датотека ($1) не припада актуелном кориснику.", + "uploadstash-wrong-owner": "Ова датотека ($1) не припада тренутном кориснику.", "uploadstash-no-such-key": "Нема таквог кључа ($1). Не могу уклонити.", "uploadstash-no-extension": "Додатак је празан.", "uploadstash-zero-length": "Датотека је празна", @@ -1781,7 +1781,7 @@ "filehist-deleteall": "избриши све", "filehist-deleteone": "избриши", "filehist-revert": "врати", - "filehist-current": "актуелна", + "filehist-current": "тренутна", "filehist-datetime": "Датум/време", "filehist-thumb": "Сличица", "filehist-thumbtext": "Минијатура за верзију на дан $1", @@ -2058,7 +2058,7 @@ "allpages-bad-ns": "{{SITENAME}} нема именски простор „$1“.", "allpages-hide-redirects": "Сакриј преусмерења", "cachedspecial-viewing-cached-ttl": "Гледате кеширану верзију ове странице, која може бити стара и до $1.", - "cachedspecial-viewing-cached-ts": "Гледате кеширану верзију ове странице, која можда није потпуно актуелна.", + "cachedspecial-viewing-cached-ts": "Гледате кеширану верзију ове странице, која можда није потпуно тренутна.", "cachedspecial-refresh-now": "Погледај најновију.", "categories": "Категоријe", "categories-submit": "Прикажи", @@ -2297,9 +2297,9 @@ "protect_expiry_old": "Време истека је у прошлости.", "protect-unchain-permissions": "Откључај даљња подешавања заштите", "protect-text": "Овде можете да погледате и промените ниво заштите странице $1.", - "protect-locked-blocked": "Не можете да мењате нивое заштите док сте блокирани.\nОво су актуелна подешавања странице '''$1''':", - "protect-locked-dblock": "Нивои заштите се не могу мењати јер је активна база података закључана.\nОво су актуелна подешавања странице '''$1''':", - "protect-locked-access": "Ваш налог нема дозволу да мења нивое заштите странице.\nОво су актуелна подешавања странице '''$1''':", + "protect-locked-blocked": "Не можете да мењате нивое заштите док сте блокирани.\nОво су тренутна подешавања странице $1:", + "protect-locked-dblock": "Нивои заштите се не могу мењати јер је активна база података закључана.\nОво су тренутна подешавања странице $1:", + "protect-locked-access": "Ваш налог нема дозволу да мења нивое заштите странице.\nОво су тренутна подешавања странице $1:", "protect-cascadeon": "Ова страница је тренутно заштићена јер је укључена у {{PLURAL:$1|следећу страницу која има|следеће странице које имају}} укључену преносиву заштиту.\nПромене нивоа заштите ове странице неће да утичу на преносиву заштиту.", "protect-default": "Допуштено свим корисницима", "protect-fallback": "Дозвољено само корисницима са дозволом „$1“", @@ -2386,7 +2386,7 @@ "contribsub2": "За {{GENDER:$3|$1}} ($2)", "contributions-userdoesnotexist": "Кориснички налог „$1“ није отворен.", "nocontribs": "Нису пронађене промене које одговарају овим критеријумима.", - "uctop": "(актуелна)", + "uctop": "(тренутна)", "month": "од месеца (и раније):", "year": "од године (и раније):", "date": "Од датума (и раније):", @@ -2451,7 +2451,7 @@ "blockipsuccesssub": "Блокирање је успело", "blockipsuccesstext": "[[Special:Contributions/$1|$1]] је {{GENDER:$1|блокиран|блокирана}}.
    \nПогледајте [[Special:BlockList|списак]] за преглед блокада.", "ipb-blockingself": "Блокираћете самог себе! Заиста то желите?", - "ipb-confirmhideuser": "Управо ћете блокирати корисника с укљученом могућношћу „сакриј корисника“. Овим ће корисничко име бити сакривено у свим списковима и извештајима. Желите ли то да урадите?", + "ipb-confirmhideuser": "Управо ћете блокирати корисника са укљученом функцијом „сакриј корисника”. Овим ће корисничко име бити сакривено у свим списковима и уносима у дневнику. Заиста желите то да урадите?", "ipb-confirmaction": "Ако сте сигурни да желите наставити означите поље „{{int:ipb-confirm}}“ на дну странице.", "ipb-edit-dropdown": "Уреди разлоге блокирања", "ipb-unblock-addr": "Деблокирај $1", @@ -2509,7 +2509,7 @@ "blocklog-showsuppresslog": "{{GENDER:$1|Овај корисник је раније блокиран и сакривен|Ова корисница је раније блокирана и сакривена}}.\nДневник сакривања је наведен испод као референца:", "blocklogentry": "је блокирао [[$1]] са временом истицања од $2 $3", "reblock-logentry": "је {{GENDER:|променио|променила}} подешавања блокирања за {{GENDER:$1|корисника|корисницу}} [[$1]] са временом истека од $2 ($3)", - "blocklogtext": "Ово је дневник радњи блокирања и деблокирања корисника.\nАутоматски блокиране IP адресе нису наведене.\nПогледајте [[Special:BlockList|списак блокирања]] за списак актуелних операција забрана и блокирања.", + "blocklogtext": "Ово је дневник радњи блокирања и деблокирања корисника.\nАутоматски блокиране IP адресе нису наведене.\nПогледајте [[Special:BlockList|списак блокирања]] за списак тренутних операција забрана и блокирања.", "unblocklogentry": "је деблокирао $1", "block-log-flags-anononly": "само анонимни корисници", "block-log-flags-nocreate": "онемогућено отварање налога", @@ -2618,9 +2618,9 @@ "move-over-sharedrepo": "[[:$1]] се налази на дељеном складишту. Ако преместите датотеку на овај наслов, то ће заменити дељену датотеку.", "file-exists-sharedrepo": "Наведени назив датотеке се већ користи у дељеном складишту.\nИзаберите други назив.", "export": "Извоз страница", - "exporttext": "Можете да извезете текст и историју измена одређене странице или скупа страница уклљених у XML формату.\nОво онда може да буде увезено у други вики који користи Медијавики софтвер преко [[Special:Import|странице за увоз]].\n\nДа бисте извезли странице, унесите називе у оквиру испод, с једним насловом по реду, и изаберите да ли желите актуелну измену и све остале, или само актуелну измену с подацима о последњој измени.\n\nУ другом случају, можете користити и везе, на пример [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] за страницу [[{{MediaWiki:Mainpage}}]].", + "exporttext": "Можете да извезете текст и историју измена одређене странице или скупа страница уклљених у XML формату.\nОво онда може да буде увезено у други вики који користи Медијавики софтвер преко [[Special:Import|странице за увоз]].\n\nДа бисте извезли странице, унесите називе у оквиру испод, с једним насловом по реду, и изаберите да ли желите тренутну измену и све остале, или само тренутну измену с подацима о последњој измени.\n\nУ другом случају, можете користити и везе, на пример [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] за страницу [[{{MediaWiki:Mainpage}}]].", "exportall": "Извези све странице", - "exportcuronly": "Укључи само актуелну измену, не целу историју", + "exportcuronly": "Укључи само тренутну измену, не целу историју", "exportnohistory": "----\n'''Напомена:''' извоз пуне историје страница преко овог обрасца је онемогућено из техничких разлога.", "exportlistauthors": "Укључи целокупан списак доприносилаца за сваку страницу", "export-submit": "Извези", @@ -2723,7 +2723,7 @@ "tooltip-pt-anontalk": "Дискусија о уређивањима са ове IP адресе", "tooltip-pt-preferences": "{{GENDER:|Ваша}} подешавања", "tooltip-pt-watchlist": "Списак страница које надгледате", - "tooltip-pt-mycontris": "Списак {{GENDER:|Ваших}} доприноса", + "tooltip-pt-mycontris": "Списак {{GENDER:|ваших}} доприноса", "tooltip-pt-anoncontribs": "Списак измена направљених са ове IP адресе", "tooltip-pt-login": "Предлажемо вам да се пријавите, иако то није обавезно", "tooltip-pt-login-private": "Морате да се пријавите да бисте користили овај Вики", @@ -2881,7 +2881,7 @@ "markedaspatrolled": "Означено као патролирано", "markedaspatrolledtext": "Изабрана измена странице [[:$1]] означена је као патролирана.", "rcpatroldisabled": "Патролирање скорашњих измена је онемогућено", - "rcpatroldisabledtext": "Могућност патролирања скорашњих измена је актуелно онемогућена.", + "rcpatroldisabledtext": "Функција патролирања скорашњих измена је тренутно онемогућена.", "markedaspatrollederror": "Не могу да означим као патролирано.", "markedaspatrollederrortext": "Морате навести измену да бисте је означили као патролирану.", "markedaspatrollederror-noautopatrol": "Не можете да означите своје промене као патролиране.", @@ -3048,7 +3048,7 @@ "exif-pixelxdimension": "Ширина слике", "exif-pixelydimension": "Висина слике", "exif-usercomment": "Кориснички коментари", - "exif-relatedsoundfile": "Повезани звучни запис", + "exif-relatedsoundfile": "Сродне звучне датотеке", "exif-datetimeoriginal": "Датум и време сликања", "exif-datetimedigitized": "Датум и време дигитализације", "exif-subsectime": "Део секунде у којем је сликано", @@ -3078,7 +3078,7 @@ "exif-focalplaneyresolution": "Резолуција фокусне равни Y", "exif-focalplaneresolutionunit": "Јединица за резолуцију фокусне равни", "exif-subjectlocation": "Положај објекта", - "exif-exposureindex": "Попис експозиције", + "exif-exposureindex": "Индекс експозиције", "exif-sensingmethod": "Начин сензора", "exif-filesource": "Изворна датотека", "exif-scenetype": "Тип сцене", @@ -3387,20 +3387,20 @@ "monthsall": "све", "confirmemail": "Потврда имејл-адресе", "confirmemail_noemail": "Нисте поставили важећу имејл-адресу у [[Special:Preferences|корисничким подешавањима]].", - "confirmemail_text": "{{SITENAME}} захтева да потврдите имејл адресу пре него што почнете да користите могућности имејла.\nКликните на дугме испод за слање поруке на вашу адресу.\nУ поруци ће се налазити веза са потврдним кодом;\nунесите је у прегледач да бисте потврдили да је ваша имејл адреса важећа.", + "confirmemail_text": "{{SITENAME}} захтева да проверите ваљаност имејл-адресе пре него што почнете да користите функцију имејла.\nАктивирајте дугме испод да бисте послали мејл за потврду на своју адресу.\nМејл ће укључивати везу са кодом;\nучитајте везу у свом прегледачу да бисте потврдили да је ваша имејл-адреса важећа.", "confirmemail_pending": "Код за потврду вам је већ послат имејлом.\nАко сте недавно отворили налог, можда треба да сачекате неколико минута да пристигне пре него што поново затражите нови код.", "confirmemail_send": "Пошаљи код за потврду", "confirmemail_sent": "Потврдна порука је послата.", - "confirmemail_oncreate": "Послат је код за потврду на вашу имејл адресу.\nОвај код није потребан за пријављивање, али вам треба да бисте укључили могућности имејла на викију.", + "confirmemail_oncreate": "Кôд за потврду је послат на вашу имејл-адресу.\nОвај кôд није неопходан за пријављивање, али ћете морати да га наведете пре омогућавања било каквих функција заснованих на имејлу на викију.", "confirmemail_sendfailed": "{{SITENAME}} не може да пошаље имејл потврду.\nПроверите да ли је имејл адреса правилно написана.\n\nГрешка: $1", "confirmemail_invalid": "Неважећи код за потврду.\nКод је можда истекао.", "confirmemail_needlogin": "Морате бити $1 да бисте потврдили своју имејл-адресу.", "confirmemail_success": "Ваша имејл-адреса је потврђена.\nСада можете да се [[Special:UserLogin|пријавите]] и уживате у викију.", "confirmemail_loggedin": "Ваша имејл-адреса је сада потврђена.", "confirmemail_subject": "{{SITENAME}} – потврда имејл-адресе", - "confirmemail_body": "Неко, вероватно Ви, са IP адресе $1,\nрегистровао је налог „$2“ са овом имејл адресом на пројекту {{SITENAME}}.\n\nДа бисте потврдили да овај налог стварно припада вама и активирали могућности имејла на пројекту {{SITENAME}}, отворите ова у прегледачу:\n\n$3\n\nАко ви *нисте* регистровали налог, пратите ову везу\nда бисте отказали потврду имејл адресе:\n\n$5\n\nОвај код за потврду истиче у $4.", - "confirmemail_body_changed": "Неко, вероватно Ви, с IP адресе $1,\nпроменио је имејл адресу налога „$2“ у ову адресу на пројекту {{SITENAME}}.\n\nДа бисте потврдили да овај налог стварно припада вама и поново активирали могућности имејла, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај код за потврду истиче $6 у $7", - "confirmemail_body_set": "Неко, вероватно Ви, с IP адресе $1,\nпроменио је имејл адресу налога „$2“ у ову адресу на {{SITENAME}}.\n\nДа бисмо потврдили да овај налог стварно припада вама и поново активирали\nмогућности имејла на {{SITENAME}}, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај код за потврду истиче $4.", + "confirmemail_body": "Неко, вероватно Ви, са IP адресе $1,\nрегистровао је налог „$2“ са овом имејл адресом на пројекту {{SITENAME}}.\n\nДа бисте потврдили да овај налог стварно припада вама и активирали функцију имејла на пројекту {{SITENAME}}, отворите ова у прегледачу:\n\n$3\n\nАко ви *нисте* регистровали налог, пратите ову везу\nда бисте отказали потврду имејл адресе:\n\n$5\n\nОвај код за потврду истиче у $4.", + "confirmemail_body_changed": "Неко, вероватно Ви, с IP адресе $1,\nпроменио је имејл адресу налога „$2“ у ову адресу на пројекту {{SITENAME}}.\n\nДа бисте потврдили да овај налог стварно припада вама и поново активирали функцију имејла, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај код за потврду истиче $6 у $7", + "confirmemail_body_set": "Неко, вероватно Ви, с IP адресе $1,\nпроменио је имејл адресу налога „$2“ у ову адресу на {{SITENAME}}.\n\nДа бисмо потврдили да овај налог стварно припада вама и поново активирали\nфункцију имејла на {{SITENAME}}, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај код за потврду истиче $4.", "confirmemail_invalidated": "Потврда имејл адресе је отказана", "invalidateemail": "Отказивање потврде имејла", "notificationemail_subject_changed": "Регистрована имејл адреса на пројекту {{SITENAME}} је промењена", @@ -3517,7 +3517,7 @@ "watchlistedit-clear-removed": "{{PLURAL:$1|1 наслов је уклоњен|$1 наслова су уклоњена|$1 наслова је уклоњено}}:", "watchlistedit-too-many": "Има превише страница за приказ овде.", "watchlisttools-clear": "очисти списак надгледања", - "watchlisttools-view": "погледај релевантне промене", + "watchlisttools-view": "погледај сродне промене", "watchlisttools-edit": "погледај и уреди списак надгледања", "watchlisttools-raw": "уреди сиров списак надгледања", "iranian-calendar-m1": "Фарвардин", @@ -3638,6 +3638,7 @@ "redirect-file": "Назив датотеке", "redirect-logid": "ID дневника", "redirect-not-exists": "Вредност није пронађена", + "redirect-not-numeric": "Вредност није нумеричка", "fileduplicatesearch": "Претрага дупликата датотека", "fileduplicatesearch-summary": "Претрага дуплираних датотека према хеш вредности.", "fileduplicatesearch-filename": "Назив датотеке:", @@ -3986,7 +3987,7 @@ "mediastatistics-header-unknown": "Непознато", "mediastatistics-header-bitmap": "Битмап слике", "mediastatistics-header-drawing": "Цртежи (векторске слике)", - "mediastatistics-header-audio": "Звук", + "mediastatistics-header-audio": "Звучни снимци", "mediastatistics-header-video": "Видеи", "mediastatistics-header-multimedia": "Обогаћени медији", "mediastatistics-header-office": "Канцеларија", @@ -4099,7 +4100,7 @@ "authmanager-authn-not-in-progress": "Потврда идентитета није у току или је дошло до губитка података о сесији. Почните испочетка.", "authmanager-authn-no-primary": "Не могу да проверим пружене акредитиве.", "authmanager-authn-no-local-user": "Пружени акредитиви нису повезани ни са једним корисником на овом викију.", - "authmanager-authn-no-local-user-link": "Пружени су важећи акредитиви, али нису повезани ни с једним корисником на овом викију. Пријавите се на неки други начин или направите нови кориснички налог, што ће вам дати могућност да повежете претходне акредитиве на нови налог.", + "authmanager-authn-no-local-user-link": "Пружени акредитиви су важећи, али нису повезани ни са једним корисником на овом викију. Пријавите се на неки други начин или отворите нови кориснички налог, што ће вам дати опцију да повежете претходне акредитиве на нови налог.", "authmanager-authn-autocreate-failed": "Не могу да аутоматски направим локални налог: $1", "authmanager-change-not-supported": "Не могу да променим пружене акредитиве јер их ништа не би користило.", "authmanager-create-disabled": "Отварање налога је онемогућено.", diff --git a/languages/i18n/sr-el.json b/languages/i18n/sr-el.json index 7aefc630c1..57b246feec 100644 --- a/languages/i18n/sr-el.json +++ b/languages/i18n/sr-el.json @@ -567,7 +567,7 @@ "resetpass-no-info": "Morate biti prijavljeni da biste pristupili ovoj stranici.", "resetpass-submit-loggedin": "Promeni lozinku", "resetpass-submit-cancel": "Otkaži", - "resetpass-wrong-oldpass": "Nevažeća privremena ili aktuelna lozinka.\nMožda ste već promenili lozinku ili ste zahtevali novu privremenu lozinku.", + "resetpass-wrong-oldpass": "Nevažeća privremena ili trenutna lozinka.\nMožda ste već promenili lozinku ili ste zahtevali novu privremenu lozinku.", "resetpass-recycled": "Uneli ste sadašnju lozinku, da biste promenili lozinku morate uneti novu.", "resetpass-temp-emailed": "Prijavili ste se sa privremenim kodom iz imejla.\nDa biste završili prijavljivanje morate postaviti novu lozinku ovde:", "resetpass-temp-password": "Privremena lozinka:", @@ -657,8 +657,8 @@ "subject-preview": "Pregled teme:", "previewerrortext": "Došlo je do greške pri pokušaju pregleda promena.", "blockedtitle": "Korisnik je blokiran", - "blockedtext": "Vaše korisničko ime ili IP adresa je blokirana.\n\nBlokiranje je {{GENDER:$4|izvršio|izvršila}} $1.\nRazlog je $2.\n\n* Početak blokiranja: $8\n* Istek blokiranja: $6\n* Blokirani: $7\n\nMožete da kontaktirate {{GENDER:$4|korisnika|korisnicu}} $1 ili drugog [[{{MediaWiki:Grouppage-sysop}}|administratora]] da biste razgovarali o blokiranju.\nNe možete da koristite mogućnost „{{int:emailuser}}” osim ako ste naveli validnu imejl adresu u svojim [[Special:Preferences|podešavanjima naloga]] i niste blokirani od korišćenja iste.\nVaša aktuelna IP adresa je $3, a ID blokade #$5.\nNavedite sve gornje detalje pri pravljenju bilo kakvih upita.", - "autoblockedtext": "Vaša IP adresa je automatski blokirana jer ju je koristio drugi korisnik, koga je {{GENDER:$4|blokirao|blokirala}} $1.\nRazlog:\n\n:$2\n\n* Početak blokade: $8\n* Kraj blokade: $6\n* Ime korisnika: $7\n\nMožete da kontaktirate {{GENDER:$4|korisnika|korisnicu}} $1 ili drugog [[{{MediaWiki:Grouppage-sysop}}|administratora]] da biste raspravljali o blokadi.\n\nZapamtite da ne možete da koristite mogućnost „{{int:emailuser}}“ osim ako ste naveli valjanu imejl adresu u svojim [[Special:Preferences|podešavanjima]].\n\nVaša aktuelna IP adresa je $3, a ID blokade $5.\nUključite sve gornje detalje pri pravljenju bilo kakvih upita.", + "blockedtext": "Vaše korisničko ime ili IP adresa je blokirana.\n\nBlokiranje je {{GENDER:$4|izvršio|izvršila}} $1.\nRazlog je $2.\n\n* Početak blokiranja: $8\n* Istek blokiranja: $6\n* Blokirani: $7\n\nMožete da kontaktirate {{GENDER:$4|korisnika|korisnicu}} $1 ili drugog [[{{MediaWiki:Grouppage-sysop}}|administratora]] da biste razgovarali o blokiranju.\nNe možete da koristite mogućnost „{{int:emailuser}}” osim ako ste naveli validnu imejl adresu u svojim [[Special:Preferences|podešavanjima naloga]] i niste blokirani od korišćenja iste.\nVaša trenutna IP adresa je $3, a ID blokade #$5.\nNavedite sve gornje detalje pri pravljenju bilo kakvih upita.", + "autoblockedtext": "Vaša IP adresa je automatski blokirana jer ju je koristio drugi korisnik, koga je {{GENDER:$4|blokirao|blokirala}} $1.\nRazlog:\n\n:$2\n\n* Početak blokade: $8\n* Kraj blokade: $6\n* Ime korisnika: $7\n\nMožete da kontaktirate {{GENDER:$4|korisnika|korisnicu}} $1 ili drugog [[{{MediaWiki:Grouppage-sysop}}|administratora]] da biste raspravljali o blokadi.\n\nZapamtite da ne možete da koristite mogućnost „{{int:emailuser}}“ osim ako ste naveli valjanu imejl adresu u svojim [[Special:Preferences|podešavanjima]].\n\nVaša trenutna IP adresa je $3, a ID blokade $5.\nUključite sve gornje detalje pri pravljenju bilo kakvih upita.", "blockednoreason": "nije naveden razlog", "whitelistedittext": "Za uređivanje stranice je potrebno da budete $1.", "confirmedittext": "Morate da potvrdite svoju imejl adresu pre uređivanja stranica.\nPostavite i potvrdite imejl adresu preko [[Special:Preferences|podešavanja]].", @@ -841,7 +841,7 @@ "rev-showdeleted": "prikaži", "revisiondelete": "Brisanje/vraćanje izmena", "revdelete-nooldid-title": "Nevažeća odredišna izmena", - "revdelete-nooldid-text": "Niste naveli odredišnu izmenu na kojoj treba da se izvrši ova funkcija, ta izmena ne postoji, ili pokušavate da sakrijete aktuelnu izmenu.", + "revdelete-nooldid-text": "Niste naveli odredišnu izmenu na kojoj treba da se izvrši ova funkcija, ta izmena ne postoji, ili pokušavate da sakrijete trenutnu izmenu.", "revdelete-no-file": "Tražena datoteka ne postoji.", "revdelete-show-file-confirm": "Jeste li sigurni da želite da vidite izbrisanu izmenu datoteke „$1“ od $2; $3?", "revdelete-show-file-submit": "Da", @@ -875,7 +875,7 @@ "revdel-restore": "promeni vidljivost", "pagehist": "Istorija stranice", "deletedhist": "Izbrisana istorija", - "revdelete-hide-current": "Greška pri sakrivanju stavke od $1, $2: Ovo je aktuelna izmena.\nNe može da bude sakrivena.", + "revdelete-hide-current": "Greška pri sakrivanju stavke od $1, $2: Ovo je trenutna izmena.\nNe može da bude sakrivena.", "revdelete-show-no-access": "Greška pri prikazivanju stavke od $1, $2: označena je kao „ograničena“.\nNemate pristup do nje.", "revdelete-modify-no-access": "Greška pri menjanju stavke od $1, $2: označena je kao „ograničena“.\nNemate pristup do nje.", "revdelete-modify-missing": "Greška pri menjanju IB stavke $1: ona ne postoji u bazi podataka.", @@ -888,7 +888,7 @@ "revdelete-edit-reasonlist": "Uredi razloge za brisanje", "revdelete-offender": "Autor izmene:", "suppressionlog": "Evidencija sakrivanja", - "suppressionlogtext": "Ispod se nalazi spisak brisanja i blokiranja koji uključuje sadržaj sakriven od administratora. Pogledajte [[Special:BlockList|spisak blokiranja]] za spisak aktuelnih operacija zabrana i blokiranja.", + "suppressionlogtext": "Ispod se nalazi spisak brisanja i blokiranja koji uključuje sadržaj sakriven od administratora. Pogledajte [[Special:BlockList|spisak blokiranja]] za spisak trenutnih operacija zabrana i blokiranja.", "mergehistory": "Spajanje istorija stranice", "mergehistory-header": "Ova stranica vam omogućava da spojite izmene neke izvorne stranice u novu stranicu.\nZapamtite da će ova promena ostaviti nepromenjen sadržaj istorije stranice.", "mergehistory-box": "Spoji izmene dve stranice:", @@ -1195,7 +1195,7 @@ "right-undelete": "vraćanje izbrisanih stranica", "right-suppressrevision": "pregledanje, skrivanje i vraćanje određenih izmena stranica od svih korisnika", "right-viewsuppressed": "pregledanje izmena skrivenih od svih korisnika", - "right-suppressionlog": "pregledanje privatnih evidencija", + "right-suppressionlog": "pregledanje privatnih dnevnika", "right-block": "blokiranje daljih izmena drugih korisnika", "right-blockemail": "blokiranje korisnika da šalju imejl", "right-hideuser": "blokiranje korisničkog imena i njegovo sakrivanje od javnosti", @@ -1272,7 +1272,7 @@ "newuserlogpage": "Evidencija novih korisnika", "newuserlogpagetext": "Ovo je dnevnik o registraciji novih korisnika.", "rightslog": "Evidencija korisničkih prava", - "rightslogtext": "Ovo je evidencija promena korisničkih prava.", + "rightslogtext": "Ovo je dnevnik promena korisničkih prava.", "action-read": "čitate ovu stranicu", "action-edit": "uređujete ovu stranicu", "action-createpage": "napravite ovu stranicu", @@ -1589,7 +1589,7 @@ "file-thumbnail-no": "Ime datoteke počinje sa $1.\nIzgleda da se radi o slici umanjene veličine (sličica).\nAko imate ovu sliku u punoj rezoluciji, otpremite je, u protivnom, promenite ime datoteke.", "fileexists-forbidden": "Datoteka s ovim nazivom već postoji i ne može se zameniti.\nAko i dalje želite da pošaljete datoteku, vratite se i izaberite drugi naziv.\n[[File:$1|thumb|center|$1]]", "fileexists-shared-forbidden": "Datoteka sa ovim imenom već postoji u zajedničkoj ostavi.\nAko još uvek želite da otpremite datoteku, vratite se i koristite novo ime.\n[[File:$1|thumb|center|$1]]", - "fileexists-no-change": "Datoteka je duplikat aktuelne verzije [[:$1]].", + "fileexists-no-change": "Datoteka je duplikat trenutne verzije [[:$1]].", "fileexists-duplicate-version": "Datoteka je duplikat {{PLURAL:$2|stare verzije|starih verzija}} [[:$1]].", "file-exists-duplicate": "Ovo je duplikat {{PLURAL:$1|sledeće datoteke|sledećih datoteka}}:", "file-deleted-duplicate": "Datoteka koja je identična ovoj ([[:$1]]) je ranije bila izbrisana.\nTrebate da proverite istoriju brisanja te datoteke pre nego što nastavite sa njenim ponovnim optremanjem.", @@ -1718,7 +1718,7 @@ "uploadstash-file-not-found-not-exists": "Ne mogu naći putanju ili ovo nije obična datoteka.", "uploadstash-file-too-large": "Ne mogu poslužiti datoteku veću od $1 {{PLURAL:$1|bajta|bajtova}}", "uploadstash-not-logged-in": "Niko nije prijavljen. Datoteke moraju pripadati korisnicima.", - "uploadstash-wrong-owner": "Ova datoteka ($1) ne pripada aktuelnom korisniku.", + "uploadstash-wrong-owner": "Ova datoteka ($1) ne pripada trenutnom korisniku.", "uploadstash-no-such-key": "Nema takvog ključa ($1). Ne mogu ukloniti.", "uploadstash-no-extension": "Dodatak je prazan.", "uploadstash-zero-length": "Datoteka je prazna", @@ -1775,7 +1775,7 @@ "filehist-deleteall": "izbriši sve", "filehist-deleteone": "izbriši", "filehist-revert": "vrati", - "filehist-current": "aktuelna", + "filehist-current": "trenutna", "filehist-datetime": "Datum/vreme", "filehist-thumb": "Sličica", "filehist-thumbtext": "Minijatura za verziju na dan $1", @@ -2291,9 +2291,9 @@ "protect_expiry_old": "Vreme isteka je u prošlosti.", "protect-unchain-permissions": "Otključaj daljnja podešavanja zaštite", "protect-text": "Ovde možete da pogledate i promenite nivo zaštite stranice $1.", - "protect-locked-blocked": "Ne možete da menjate nivoe zaštite dok ste blokirani.\nOvo su aktuelna podešavanja stranice '''$1''':", - "protect-locked-dblock": "Nivoi zaštite se ne mogu menjati jer je aktivna baza podataka zaključana.\nOvo su aktuelna podešavanja stranice '''$1''':", - "protect-locked-access": "Vaš nalog nema dozvolu da menja nivoe zaštite stranice.\nOvo su aktuelna podešavanja stranice '''$1''':", + "protect-locked-blocked": "Ne možete da menjate nivoe zaštite dok ste blokirani.\nOvo su trenutna podešavanja stranice '''$1''':", + "protect-locked-dblock": "Nivoi zaštite se ne mogu menjati jer je aktivna baza podataka zaključana.\nOvo su trenutna podešavanja stranice '''$1''':", + "protect-locked-access": "Vaš nalog nema dozvolu da menja nivoe zaštite stranice.\nOvo su trenutna podešavanja stranice '''$1''':", "protect-cascadeon": "Ova stranica je trenutno zaštićena jer je uključena u {{PLURAL:$1|sledeću stranicu koja ima|sledeće stranice koje imaju}} uključenu prenosivu zaštitu.\nPromene nivoa zaštite ove stranice neće da utiču na prenosivu zaštitu.", "protect-default": "Dopušteno svim korisnicima", "protect-fallback": "Dozvoljeno samo korisnicima sa dozvolom „$1“", @@ -2380,18 +2380,18 @@ "contribsub2": "Za {{GENDER:$3|$1}} ($2)", "contributions-userdoesnotexist": "Korisnički nalog „$1“ nije otvoren.", "nocontribs": "Nisu pronađene promene koje odgovaraju ovim kriterijumima.", - "uctop": "(aktuelna)", + "uctop": "(trenutna)", "month": "od meseca (i ranije):", "year": "od godine (i ranije):", "date": "Od datuma (i ranije):", "sp-contributions-newbies": "Prikaži samo doprinose novih naloga", "sp-contributions-newbies-sub": "Za nove korisnike", "sp-contributions-newbies-title": "Doprinosi novih korisnika", - "sp-contributions-blocklog": "evidencija blokiranja", + "sp-contributions-blocklog": "dnevnik blokiranja", "sp-contributions-suppresslog": "izbrisani doprinosi {{GENDER:$1|korisnika|korisnice}}", "sp-contributions-deleted": "izbrisani doprinosi {{GENDER:$1|korisnika|korisnice}}", "sp-contributions-uploads": "otpremanja", - "sp-contributions-logs": "evidencije", + "sp-contributions-logs": "dnevnici", "sp-contributions-talk": "razgovor", "sp-contributions-userrights": "upravljanje pravima {{GENDER:$1|korisnika|korisnice}}", "sp-contributions-blocked-notice": "Ovaj korisnik je trenutno blokiran. \nPoslednji unos u evidenciji blokiranja je naveden ispod kao referenca:", @@ -2503,7 +2503,7 @@ "blocklog-showsuppresslog": "{{GENDER:$1|Ovaj korisnik je ranije blokiran i sakriven|Ova korisnica je ranije blokirana i sakrivena}}.\nIstorija sakrivanja se nalazi ispod:", "blocklogentry": "je blokirao [[$1]] sa vremenom isticanja od $2 $3", "reblock-logentry": "{{GENDER:|je promenio|je promenila}} podešavanja za blokiranje {{GENDER:$1|korisnika|korisnice}} [[$1]] sa vremenom isteka od $2 ($3)", - "blocklogtext": "Ovo je dnevnik radnji blokiranja i deblokiranja korisnika.\nAutomatski blokirane IP adrese nisu navedene.\nPogledajte [[Special:BlockList|spisak blokiranja]] za spisak aktuelnih operacija zabrana i blokiranja.", + "blocklogtext": "Ovo je dnevnik radnji blokiranja i deblokiranja korisnika.\nAutomatski blokirane IP adrese nisu navedene.\nPogledajte [[Special:BlockList|spisak blokiranja]] za spisak trenutnih operacija zabrana i blokiranja.", "unblocklogentry": "je deblokirao $1", "block-log-flags-anononly": "samo anonimni korisnici", "block-log-flags-nocreate": "onemogućeno otvaranje naloga", @@ -2612,9 +2612,9 @@ "move-over-sharedrepo": "[[:$1]] se nalazi na deljenom skladištu. Ako premestite datoteku na ovaj naslov, to će zameniti deljenu datoteku.", "file-exists-sharedrepo": "Navedeni naziv datoteke se već koristi u deljenom skladištu.\nIzaberite drugi naziv.", "export": "Izvoz stranica", - "exporttext": "Možete da izvezete tekst i istoriju izmena određene stranice ili skupa stranica uklljenih u XML formatu.\nOvo onda može da bude uvezeno u drugi viki koji koristi Medijaviki softver preko [[Special:Import|stranice za uvoz]].\n\nDa biste izvezli stranice, unesite nazive u okviru ispod, s jednim naslovom po redu, i izaberite da li želite aktuelnu izmenu i sve ostale, ili samo aktuelnu izmenu s podacima o poslednjoj izmeni.\n\nU drugom slučaju, možete koristiti i link, na primer [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] za stranicu [[{{MediaWiki:Mainpage}}]].", + "exporttext": "Možete da izvezete tekst i istoriju izmena određene stranice ili skupa stranica uklljenih u XML formatu.\nOvo onda može da bude uvezeno u drugi viki koji koristi Medijaviki softver preko [[Special:Import|stranice za uvoz]].\n\nDa biste izvezli stranice, unesite nazive u okviru ispod, s jednim naslovom po redu, i izaberite da li želite trenutnu izmenu i sve ostale, ili samo trenutnu izmenu s podacima o poslednjoj izmeni.\n\nU drugom slučaju, možete koristiti i link, na primer [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] za stranicu [[{{MediaWiki:Mainpage}}]].", "exportall": "Izvezi sve stranice", - "exportcuronly": "Uključi samo aktuelnu izmenu, ne celu istoriju", + "exportcuronly": "Uključi samo trenutnu izmenu, ne celu istoriju", "exportnohistory": "----\n'''Napomena:''' izvoz pune istorije stranica preko ovog obrasca je onemogućeno iz tehničkih razloga.", "exportlistauthors": "Uključi celokupan spisak doprinosilaca za svaku stranicu", "export-submit": "Izvezi", @@ -2875,7 +2875,7 @@ "markedaspatrolled": "Označeno kao patrolirano", "markedaspatrolledtext": "Izabrana izmena stranice [[:$1]] označena je kao patrolirana.", "rcpatroldisabled": "Patroliranje skorašnjih izmena je onemogućeno", - "rcpatroldisabledtext": "Mogućnost patroliranja skorašnjih izmena je aktuelno onemogućena.", + "rcpatroldisabledtext": "Mogućnost patroliranja skorašnjih izmena je trenutno onemogućena.", "markedaspatrollederror": "Ne mogu da označim kao patrolirano.", "markedaspatrollederrortext": "Morate navesti izmenu da biste je označili kao patroliranu.", "markedaspatrollederror-noautopatrol": "Ne možete da označite svoje promene kao patrolirane.", @@ -3646,7 +3646,7 @@ "specialpages-group-maintenance": "Izveštaji održavanja", "specialpages-group-other": "Ostale posebne stranice", "specialpages-group-login": "Prijava / registracija", - "specialpages-group-changes": "Nedavne promene i evidencije", + "specialpages-group-changes": "Nedavne promene i dnevnici", "specialpages-group-media": "Izveštaji o multimedijalnom sadržaju i otpremanja", "specialpages-group-users": "Korisnici i korisnička prava", "specialpages-group-highuse": "Najčešće korišćene stranice", diff --git a/languages/i18n/sv.json b/languages/i18n/sv.json index 622880df94..d8139a7919 100644 --- a/languages/i18n/sv.json +++ b/languages/i18n/sv.json @@ -3542,6 +3542,7 @@ "redirect-file": "Filnamn", "redirect-logid": "Logg-ID", "redirect-not-exists": "Värdet hittades inte", + "redirect-not-numeric": "Värdet är inte numeriskt", "fileduplicatesearch": "Sök efter dubblettfiler", "fileduplicatesearch-summary": "Sök efter dubblettfiler baserat på filernas hash-värden.", "fileduplicatesearch-filename": "Filnamn:", diff --git a/languages/i18n/ta.json b/languages/i18n/ta.json index c4590dcf91..e2a152bdbf 100644 --- a/languages/i18n/ta.json +++ b/languages/i18n/ta.json @@ -53,7 +53,8 @@ "Rakeshonwiki", "Kaartic", "Fitoschido", - "Matěj Suchánek" + "Matěj Suchánek", + "UY Scuti" ] }, "tog-underline": "அடிக்கோடிட்டத்தை இணை:", diff --git a/languages/i18n/tr.json b/languages/i18n/tr.json index 0701ffb009..6cc0d7bd86 100644 --- a/languages/i18n/tr.json +++ b/languages/i18n/tr.json @@ -518,7 +518,7 @@ "createacct-emailoptional": "E-posta adresi (isteğe bağlı)", "createacct-email-ph": "E-posta adresinizi girin", "createacct-another-email-ph": "E-posta adresinizi girin", - "createaccountmail": "Geçici bir rastgele şifre kullanabilir ve bu şifreyi belirtilen e-posta adresine gönderebilirsiniz", + "createaccountmail": "Geçici bir rastgele parola kullanabilir ve bu parolayı belirtilen e-posta adresine gönderebilirsiniz", "createaccountmail-help": "Parolayı öğrenmeden başka bir kişi için hesap oluşturmak amacıyla kullanılabilir.", "createacct-realname": "Gerçek adı (isteğe bağlı)", "createacct-reason": "Gerekçe", @@ -538,8 +538,8 @@ "loginerror": "Oturum açma hatası.", "createacct-error": "Hesap oluşturma hatası", "createaccounterror": "Hesap oluşturulamıyor: $1", - "nocookiesnew": "Kullanıcı hesabı oluşturuldu ama oturum açamadınız.\nOturum açmak için {{SITENAME}} çerezleri kullanır.\nÇerez kullanımı devredışı.\nLütfen çerez kullanımını açınız ve yeni kullanıcı adınız ve şifrenizle oturum açınız.", - "nocookieslogin": "{{SITENAME}} sitesinde oturum açabilmek için çerezlerinizin açık olması gerekiyor. Sizin çerezleriniz kapalı. Lütfen açınız ve bir daha deneyiniz.", + "nocookiesnew": "Kullanıcı hesabı oluşturuldu, ama oturum açmış durumda değilsiniz.\n{{SITENME}}, kullanıcı oturumlarını açmak için tanımlama bilgilerinden yararlanır.\nTanımlama bilgilerini devre dışı bıraktınız.\nLütfen etkinleştirin ve ardından yeni kullanıcı adı ve parolanızla oturum açın.", + "nocookieslogin": "{{SITENAME}}, kullanıcı oturumlarını açmak için tanımlama bilgilerinden yararlanır.\nTanımlama bilgilerini devre dışı bıraktınız.\nLütfen etkinleştirip yeniden deneyin.", "nocookiesfornew": "Kullanıcı hesabı oluşturulamadı, sorunun kaynağını da tespit edemedik.\nÇerezlerin açık olduğundan emin olun ve bu sayfayı yeniden yükleyip tekrar deneyin.", "createacct-loginerror": "Hesap başarılı şekilde oluşturuldu ancak otomatik olarak oturumunuz açılmadı. Lütfen [[Special:UserLogin|manuel giriş]] sayfasına gidin.", "noname": "Geçerli bir kullanıcı adı girmediniz.", @@ -553,7 +553,7 @@ "wrongpasswordempty": "Boş parola girdiniz. Lütfen tekrar deneyiniz.", "passwordtooshort": "Parolalar en az {{PLURAL:$1|1 karakter|$1 karakter}} uzunluğunda olmalı.", "passwordtoolong": "Parolalar $1 karakterden uzun olamaz.", - "passwordtoopopular": "Yaygın olarak seçilen şifreler kullanılamaz. Lütfen tahmin edilmesi daha zor bir şifre seçin.", + "passwordtoopopular": "Yaygın olarak seçilen parolalar kullanılamaz. Lütfen tahmin edilmesi daha zor bir parola seçin.", "password-name-match": "Parolanız kullanıcı adınızdan farklı olmalıdır.", "password-login-forbidden": "Bu kullanıcı adı ve parolanın kullanımı yasaklanmıştır.", "mailmypassword": "Parolayı sıfırla", @@ -577,7 +577,7 @@ "accountcreated": "Hesap açıldı", "accountcreatedtext": "[[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|msj]]) için kullanıcı hesabı oluşturuldu.", "createaccount-title": "{{SITENAME}} için hesap oluşturma", - "createaccount-text": "Birisi {{SITENAME}} sitesinde ($4) sizin e-posta adresinizi kullarak, şifresi \"$3\" olan, \"$2\" isimli bir hesap oluşturdu.\n\nSiteye giriş yapmalı ve parolanızı değiştirmelisiniz.\n\nEğer kullanıcı hesabını yanlışlıkla oluşturmuş iseniz, bu mesajı yoksayabilirsiniz.", + "createaccount-text": "Birisi {{SITENAME}} sitesinde ($4) sizin e-posta adresinizi kullarak, parolası \"$3\" olan, \"$2\" isimli bir hesap oluşturdu.\n\nSiteye giriş yapmalı ve parolanızı değiştirmelisiniz.\n\nEğer kullanıcı hesabını yanlışlıkla oluşturmuş iseniz, bu mesajı yoksayabilirsiniz.", "login-throttled": "Yakın zamanda çok fazla oturum açma girişiminde bulundunuz.\nLütfen yeniden denemeden önce $1 süreyle bekleyin.", "login-abort-generic": "Giriş başarısız - Durduruldu", "login-migrated-generic": "Hesabınız aktarılmış ve kullanıcı adınız artık bu vikide yok.", @@ -603,7 +603,7 @@ "changepassword-success": "Parolanız değiştirildi!", "changepassword-throttled": "Çok fazla yeni oturum açma girişiminde bulundunuz.\nLütfen tekrar denemeden önce $1 bekleyin.", "botpasswords": "Bot parolaları", - "botpasswords-summary": "Bot şifreleri, hesabın ana giriş kimlik bilgilerini kullanmadan API aracılığıyla bir kullanıcı hesabına erişime izin verir. Bir bot şifresi ile giriş yaptığınızda mevcut kullanıcı hakları kısıtlanabilir.\n\nBunu neden yapmak isteyebileceğinizi bilmiyorsanız, yapmayınız. Hiç kimse sizden bunlardan birini üretip onlara vermenizi istememelidir.", + "botpasswords-summary": "Bot parolaları, hesabın ana giriş kimlik bilgilerini kullanmadan API aracılığıyla bir kullanıcı hesabına erişime izin verir. Bir bot parolası ile giriş yaptığınızda mevcut kullanıcı hakları kısıtlanabilir.\n\nBunu neden yapmak isteyebileceğinizi bilmiyorsanız, yapmayınız. Hiç kimse sizden bunlardan birini üretip onlara vermenizi istememelidir.", "botpasswords-disabled": "Bot parolaları devre dışı.", "botpasswords-no-central-id": "Bot parolaları kullanmak için, merkezi bir hesap ile oturum açmalısınız.", "botpasswords-existing": "Mevcut bot parolaları", @@ -628,11 +628,11 @@ "botpasswords-updated-body": "\"$2\" adlı {{GENDER:$2|kullanıcının}} \"$1\" adlı botunun bot parolası güncellendi.", "botpasswords-deleted-title": "Bot parolası silindi", "botpasswords-deleted-body": "\"$2\" adlı {{GENDER:$2|kullanıcının}} \"$1\" adlı botunun bot parolası silindi.", - "botpasswords-newpassword": "$1 ile giriş yapılan yeni parola: $2. Lütfen bunu ileride başvurmak için kaydedin.
    (Kullanıcı adının, nihai kullanıcı adıyla aynı olmasını gerektiren eski botlar için kullanıcı adı olarak $3 ve şifre olarak da $4 kullanabilirsiniz.)", + "botpasswords-newpassword": "$1 ile giriş yapılan yeni parola: $2. Lütfen bunu ileride başvurmak için kaydedin.
    (Kullanıcı adının, nihai kullanıcı adıyla aynı olmasını gerektiren eski botlar için kullanıcı adı olarak $3 ve parola olarak da $4 kullanabilirsiniz.)", "botpasswords-no-provider": "BotPasswordsSessionProvider kullanılamaz.", "botpasswords-restriction-failed": "Bot parolası kısıtlamaları bu oturum açma işlemini önlemektedir.", "botpasswords-invalid-name": "Belirtilen kullanıcı adı bot parolası ayırıcısı içermiyor (\"$1\").", - "botpasswords-not-exist": "\"$1\" kullanıcısının \"$2\" adında bir bot şifresine sahip değil.", + "botpasswords-not-exist": "\"$1\" kullanıcısının \"$2\" adında bir bot parolasına sahip değil.", "botpasswords-needs-reset": "\"$1\" {{GENDER:$1|kullanıcısına}} ait \"$2\" adlı bot için bot parolası sıfırlanmalı.", "resetpass_forbidden": "Parolalar değiştirilememektedir", "resetpass_forbidden-reason": "Parolalar değiştirilemez: $1", @@ -656,14 +656,14 @@ "passwordreset-domain": "Domain:", "passwordreset-email": "E-posta adresi:", "passwordreset-emailtitle": "{{SITENAME}} hesap detayları", - "passwordreset-emailtext-ip": "Birisi, (muhtemelen siz, $1 IP adresinden) {{SITENAME}} ($4) için hesap bilgilerinizin \nhatırlatılmasını istedi. Aşağıdaki kullanıcı {{PLURAL:$3|hesabı|hesapları}} bu e-posta adresiyle ilişkili:\n\n$2\n\n{{PLURAL:$3|Bu geçici şifre|Bu geçici şifreler}} {{PLURAL:$5|bir gün|$5 gün}} geçerlidir.\nBu geçici parola ile giriş yapın ve yeni bir şifre seçin. Şifre değişimini siz istemediyseniz veya şifrenizi hatırladıysanız ve artık şifrenizi değiştirmek istemiyorsanız; bu iletiyi önemsemeyerek eski şifrenizi kullanmaya devam edebilirsiniz.", - "passwordreset-emailtext-user": "$1 adlı kullanıcı, {{SITENAME}} ($4) için hesap bilgilerinizin hatırlatılmasını istedi. Aşağıdaki kullanıcı {{PLURAL:$3|hesabı|hesapları}} bu e-posta adresiyle ilişkili:\n\n$2\n\n{{PLURAL:$3|Bu geçici şifre|Bu geçici şifreler}} {{PLURAL:$5|bir gün|$5 gün}} geçerlidir.\nBu geçici parola ile giriş yapın ve yeni bir şifre seçin. Bu talep bir başkasına aitse veya şifrenizi hatırladıysanız ve artık şifrenizi değiştirmek istemiyorsanız; bu iletiyi önemsemeyerek eski şifrenizi kullanmaya devam edebilirsiniz.", + "passwordreset-emailtext-ip": "Birisi ($1 numaralı IP adresini kullanarak muhtemelen siz), {{SITENAME}} ($4) için \nparolanızın sıfırlanmasını istedi. Aşağıdaki kullanıcı {{PLURAL:$3|hesabı|hesapları}} \nbu e-posta adresiyle ilişkilidir:\n\n$2\n\n{{PLURAL:$3|Bu geçici parolanın|Bu geçici parolaların}} süresi {{PLURAL:$5|bir gün|$5 gün}} sonra dolacaktır.\nŞu an oturum açarak yeni bir parola seçmeniz gerekmektedir. Bu istekte bulunan \nbir başkasıysa ya da özgün parolanızı hatırladıysanız ve artık değiştirmek \nistemiyorsanız, bu iletiyi göz ardı edebilir ve eski parolanızı kullanmaya \ndevam edebilirsiniz.", + "passwordreset-emailtext-user": "{{SITENAME}} kullanıcısı $1, {{SITENAME}} ($4) parolanızı sıfırlama isteğinde bulundu.\nAşağıdaki kullanıcı {{PLURAL:$3|hesabı|hesapları}} bu e-posta adresiyle ilişkilidir:\n\n$2\n\n{{PLURAL:$3|Bu geçici parolanın|Bu geçici parolaların}} süresi {{PLURAL:$5|bir gün|$5 gün}} sonra dolacaktır.\nŞu an oturum açarak yeni bir parola seçmeniz gerekmektedir. Bu istekte bulunan \nbir başkasıysa ya da özgün parolanızı hatırladıysanız ve artık değiştirmek \nistemiyorsanız, bu iletiyi göz ardı edebilir ve eski parolanızı kullanmaya devam edebilirsiniz.", "passwordreset-emailelement": "Kullanıcı adı: \n$1\n\nGeçici şifre: \n$2", "passwordreset-emailsentemail": "Eğer bu e-posta adresi hesabınızın bağlı olduğu adres ise, bir parola sıfırlama e-postası gönderilecektir.", "passwordreset-emailsentusername": "Eğer bu e-posta adresi hesabınızın bağlı olduğu adres ise, bir parola sıfırlama e-postası gönderilecektir.", "passwordreset-nocaller": "Bir ziyaretçi sağlanmalıdır", "passwordreset-nosuchcaller": "Ziyaretçi mevcut değil: $1", - "passwordreset-ignored": "Şifre sıfırlama işlenmedi. Belki de herhangi bir sağlayıcı yapılandırılmadı?", + "passwordreset-ignored": "Parola sıfırlama işlenmedi. Belki herhangi bir sağlayıcı yapılandırılmamıştır?", "passwordreset-invalidemail": "Geçersiz e-posta adresi", "passwordreset-nodata": "Ne bir kullanıcı adı ne de bir e-posta adresi verildi.", "changeemail": "E-posta adresini değiştir veya çıkar", @@ -671,7 +671,7 @@ "changeemail-no-info": "Bu sayfaya doğrudan erişmek için oturum açmanız gereklidir.", "changeemail-oldemail": "Mevcut E-posta adresi:", "changeemail-newemail": "Yeni E-posta adresi:", - "changeemail-newemail-help": "E-posta adresinizi silmek istiyorsanız bu alan boş bırakılmalıdır. E-posta adresi silindikten sonra unutulan şifreyi sıfırlayamazsınız ve bu Viki'den e-posta alamazsınız.", + "changeemail-newemail-help": "E-posta adresinizi silmek istiyorsanız bu alan boş bırakılmalıdır. E-posta adresi silindikten sonra unutulan parolayı sıfırlayamazsınız ve bu vikiden e-posta alamazsınız.", "changeemail-none": "(yok)", "changeemail-password": "{{SITENAME}} parolanız:", "changeemail-submit": "E-posta'yı değiştir", @@ -1222,7 +1222,7 @@ "group-interface-admin": "Arayüz yöneticileri", "group-bureaucrat": "Bürokratlar", "group-suppress": "Gözetmenler", - "group-all": "(hepsi)", + "group-all": "(tümü)", "group-user-member": "{{GENDER:$1|kullanıcı}}", "group-autoconfirmed-member": "{{GENDER:$1|otomatik onaylanmış kullanıcı}}", "group-bot-member": "{{GENDER:$1|bot}}", @@ -1250,7 +1250,7 @@ "right-move-categorypages": "Kategori sayfaları taşı", "right-movefile": "Dosyaları taşı", "right-suppressredirect": "Bir sayfayı taşırken eski isimden yönlendirme oluşturma", - "right-upload": "Dosyaları yükle", + "right-upload": "Dosya yükle", "right-reupload": "Mevcut dosyaların üstüne yaz", "right-reupload-own": "Kendisinin yüklediği bir dosyanın üzerine yaz", "right-reupload-shared": "Paylaşılan ortam deposundaki dosyaları yerel olarak geçersiz kıl", @@ -1260,7 +1260,7 @@ "right-bot": "Otomatik bir işlem gibi muamele gör", "right-nominornewtalk": "Kullanıcı tartışma sayfalarında yaptığı küçük değişiklikler kullanıcıya yeni mesaj bildirimiyle bildirilmez", "right-apihighlimits": "API sorgularında yüksek sınır kullan", - "right-writeapi": "API yaz kullanımı", + "right-writeapi": "Yazma API'sini kullan", "right-delete": "Sayfaları sil", "right-bigdelete": "Uzun tarihli sayfaları sil", "right-deletelogentry": "Belirli günlük girdilerini sil ve geri getir", @@ -1306,7 +1306,7 @@ "right-patrolmarks": "Son değişiklikler gözleme işaretlerini gör", "right-unwatchedpages": "İzlenmeyen sayfaların bir listesini gör", "right-mergehistory": "Sayfalarının tarihlerini birleştir", - "right-userrights": "Tüm kullanıcı haklarını değiştirmek", + "right-userrights": "Tüm kullanıcı haklarını değiştir", "right-userrights-interwiki": "Diğer vikilerdeki kullanıcıların kullanıcı haklarını değiştir", "right-siteadmin": "Veritabanını kilitle ve kilidi aç", "right-override-export-depth": "Sayfaları, derinlik 5'e kadar bağlantılı sayfalarla beraber, dışa aktar", @@ -1314,7 +1314,7 @@ "right-managechangetags": "[[Special:Tags|Etiket]] oluşturma ve (de)aktive etme", "right-applychangetags": "Değişiklikleriyle beraber [[Special:Tags|etiketleri]] uygula", "right-changetags": "Tekil sürümler ve günlük kayıtlarına rastgele [[Special:Tags|etiket]] ekleme veya çıkarma", - "right-deletechangetags": "Veritabanından [[Special:Tags|etiketleri]] silin", + "right-deletechangetags": "Veritabanından [[Special:Tags|etiketleri]] sil", "grant-generic": "\"$1\" hak paketi", "grant-group-page-interaction": "Sayfalarla etkileşim kur", "grant-group-file-interaction": "Medya ile etkileşim kur", @@ -3741,15 +3741,15 @@ "expand_templates_preview_fail_html": "{{SITENAME}} işlenmemiş HTML koduna izin verdiği ve oturum verilerinde kayıp yaşandığı için, ön izleme, JavaScript saldırılarına karşı önlem olarak gizlendi.\n\nEğer meşru bir ön izleme girişimi idiyse, tekrar deneyiniz.\nYine de çalışmıyorsa, [[Special:UserLogout|oturum kapamayı]] ve tekrar açmayı deneyin.", "expand_templates_preview_fail_html_anon": "{{SITENAME}} işlenmemiş HTML koduna izin verdiği ve oturum verilerinde kayıp yaşandığı için, ön izleme, JavaScript saldırılarına karşı önlem olarak gizlendi.\n\nEğer meşru bir ön izleme girişimi idiyse, lütfen [[Special:UserLogin|oturum açarak]] tekrar deneyin.", "expand_templates_input_missing": "En azından bazı giriş viki metni sağlamak zorundasınız.", - "pagelanguage": "Sayfa dilini değiştir", + "pagelanguage": "Sayfanın dilini değiştir", "pagelang-name": "Sayfa", "pagelang-language": "Dil", "pagelang-use-default": "Varsayılan dili kullan", "pagelang-select-lang": "Dil seçin", "pagelang-reason": "Sebep", "pagelang-submit": "Gönder", - "right-pagelang": "Sayfa dilini değiştir", - "action-pagelang": "sayfa dilini değiştir", + "right-pagelang": "Sayfanın dilini değiştir", + "action-pagelang": "sayfanın dilini değiştir", "log-name-pagelang": "Dil değişimi günlüğü", "log-description-pagelang": "Bu, sayfalardaki dil değişikliklerinin kayıt günlüğüdür.", "logentry-pagelang-pagelang": "$1, $3 sayfasının dilini $4 dilinden $5 diline {{GENDER:$2|çevirdi}}.", @@ -3862,14 +3862,14 @@ "pageid": "sayfa ID'si $1", "gotointerwiki": "Ayrılınıyor {{SITENAME}}", "pagedata-title": "Sayfa verisi", - "passwordpolicies": "Şifre politikaları", + "passwordpolicies": "Parola politikaları", "passwordpolicies-summary": "Bu, bu vikide tanımlanan kullanıcı grupları için etkili parola ilkelerinin bir listesidir.", "passwordpolicies-group": "Grup", "passwordpolicies-policies": "Politikalar", - "passwordpolicies-policy-minimalpasswordlength": "Şifre en az $1 karakter uzunluğunda olmalı", + "passwordpolicies-policy-minimalpasswordlength": "Parola en az $1 karakter uzunluğunda olmalıdır", "passwordpolicies-policy-minimumpasswordlengthtologin": "Şifre giriş yapabilmek için en az $1 karakter uzunluğunda olmalı", - "passwordpolicies-policy-passwordcannotmatchusername": "Şifre kullanıcı adıyla aynı olamaz", + "passwordpolicies-policy-passwordcannotmatchusername": "Parola kullanıcı adıyla aynı olamaz", "passwordpolicies-policy-passwordcannotmatchblacklist": "Şifre özellikle kara listeye alınmış şifrelerle aynı olamaz", - "passwordpolicies-policy-maximalpasswordlength": "Şifre $1 karakterden az olmalı", - "passwordpolicies-policy-passwordcannotbepopular": "Şifre, $1 popüler şifrenin listesinde olamaz" + "passwordpolicies-policy-maximalpasswordlength": "Parola $1 karakterden kısa olmalı", + "passwordpolicies-policy-passwordcannotbepopular": "Parola, $1 popüler parola listesinde olamaz" } diff --git a/languages/i18n/uk.json b/languages/i18n/uk.json index 99a5b0bee9..9dd9197b9c 100644 --- a/languages/i18n/uk.json +++ b/languages/i18n/uk.json @@ -1232,7 +1232,7 @@ "right-reupload": "перезаписування існуючих файлів", "right-reupload-own": "перезаписування існуючих файлів, завантажених тим самим користувачем", "right-reupload-shared": "підміна файлів зі спільного сховища локальними", - "right-upload_by_url": "Завантаження файлів за URL-адресами", + "right-upload_by_url": "завантаження файлів за URL-адресами", "right-purge": "очищення кешу сторінки без необхідності підтвердження", "right-autoconfirmed": "без обмежень швидкості за IP", "right-bot": "автоматична обробка", @@ -1286,7 +1286,7 @@ "right-mergehistory": "об'єднання історій редагувань сторінок", "right-userrights": "зміна всіх прав користувачів", "right-userrights-interwiki": "зміна прав користувачів у інших вікі", - "right-siteadmin": "Блокування і розблокування бази даних", + "right-siteadmin": "блокування і розблокування бази даних", "right-override-export-depth": "експорт сторінок, включаючи пов'язані сторінки з глибиною до 5", "right-sendemail": "надсилання електронної пошти іншим користувачам", "right-managechangetags": "створення та (де)активування [[Special:Tags|міток]]", diff --git a/languages/i18n/yue.json b/languages/i18n/yue.json index 2c50814d1f..eb5ec222c2 100644 --- a/languages/i18n/yue.json +++ b/languages/i18n/yue.json @@ -385,6 +385,7 @@ "ns-specialprotected": "特別頁係唔可以編輯嘅。", "titleprotected": "呢個標題已經俾[[User:$1|$1]]保護咗防止去開。原因係$2。", "filereadonlyerror": "改唔到檔案 \"$1\",因為檔案庫 \"$2\" 而家係唯讀。\n\n負責鎖嘅系統管理員嘅解釋:\"$3\"。", + "invalidtitle": "冇效嘅標題", "invalidtitle-knownnamespace": "名域 \"$2\" 同版名 \"$3\" 無效嘅標題", "invalidtitle-unknownnamespace": "未知名域號碼 \"$1\" 同版名 \"$2\" 無效嘅標題", "exception-nologin": "未簽到", diff --git a/languages/i18n/zh-hans.json b/languages/i18n/zh-hans.json index ce13ba8b19..a47816c851 100644 --- a/languages/i18n/zh-hans.json +++ b/languages/i18n/zh-hans.json @@ -3624,6 +3624,7 @@ "redirect-file": "文件名", "redirect-logid": "日志ID", "redirect-not-exists": "没找到相应值", + "redirect-not-numeric": "输入的数值并不是数字", "fileduplicatesearch": "搜索重复文件", "fileduplicatesearch-summary": "根据哈希(hash)值搜索重复文件。", "fileduplicatesearch-filename": "文件名:", diff --git a/languages/i18n/zh-hant.json b/languages/i18n/zh-hant.json index 96bfbd7f0b..ec27bf0dbf 100644 --- a/languages/i18n/zh-hant.json +++ b/languages/i18n/zh-hant.json @@ -802,7 +802,7 @@ "permissionserrorstext-withaction": "由於下列{{PLURAL:$1|原因}},您沒有權限進行 $2 的動作:", "contentmodelediterror": "您無法編輯此修訂,因為它的內容模型為$1,與目前使用的頁面內容模型$2不同。", "recreate-moveddeleted-warn": "警告:您正重新建立先前已刪除的頁面。\n\n您應考慮是否繼續編輯此頁。\n在此提供刪除與移動日誌方便作為參考:", - "moveddeleted-notice": "此頁面已刪除。\n下方提供此頁面的刪除、保護和移動日誌以便參考。", + "moveddeleted-notice": "此頁面已遭刪除。\n請參考下方關於此頁面的刪除、保護和移動日誌。", "moveddeleted-notice-recent": "對不起,此頁面剛剛被刪除(在最近24小時內)。頁面的刪除、保護和移動日誌在下方提供以供參考。", "log-fulllog": "檢視完整日誌", "edit-hook-aborted": "編輯已被 Hook 中止。\n且未回應無任何說明。", @@ -3567,6 +3567,7 @@ "redirect-file": "檔案名稱", "redirect-logid": "日誌 ID", "redirect-not-exists": "查無值", + "redirect-not-numeric": "值不是數字", "fileduplicatesearch": "搜尋重複檔案", "fileduplicatesearch-summary": "依據雜湊值 (Hash) 來搜尋重複的檔案。", "fileduplicatesearch-filename": "檔案名稱:", diff --git a/languages/messages/MessagesBi.php b/languages/messages/MessagesBi.php new file mode 100644 index 0000000000..eebe4fdf90 --- /dev/null +++ b/languages/messages/MessagesBi.php @@ -0,0 +1,11 @@ + [ 'UncategorisedCategories' ], 'Uncategorizedimages' => [ 'UncategorisedFiles', 'UncategorisedImages' ], diff --git a/languages/messages/MessagesJam.php b/languages/messages/MessagesJam.php new file mode 100644 index 0000000000..d19904865a --- /dev/null +++ b/languages/messages/MessagesJam.php @@ -0,0 +1,11 @@ + 'Media', + NS_SPECIAL => 'Special', + NS_TALK => 'Collogue', + NS_USER => 'Uiser', + NS_USER_TALK => 'Uiser_collogue', + NS_PROJECT_TALK => '$1_collogue', + NS_FILE => 'File', + NS_FILE_TALK => 'File_collogue', + NS_MEDIAWIKI => 'MediaWiki', + NS_MEDIAWIKI_TALK => 'MediaWiki_collogue', + NS_TEMPLATE => 'Template', + NS_TEMPLATE_TALK => 'Template_collogue', + NS_HELP => 'Help', + NS_HELP_TALK => 'Help_collogue', + NS_CATEGORY => 'Category', + NS_CATEGORY_TALK => 'Category_collogue', +]; diff --git a/maintenance/Maintenance.php b/maintenance/Maintenance.php index b446cc12b7..6219476282 100644 --- a/maintenance/Maintenance.php +++ b/maintenance/Maintenance.php @@ -1669,7 +1669,6 @@ class FakeMaintenance extends Maintenance { protected $mSelf = "FakeMaintenanceScript"; public function execute() { - return; } } diff --git a/maintenance/benchmarks/benchmarkTidy.php b/maintenance/benchmarks/benchmarkTidy.php index e9a30f9b1f..558fec8ceb 100644 --- a/maintenance/benchmarks/benchmarkTidy.php +++ b/maintenance/benchmarks/benchmarkTidy.php @@ -69,7 +69,7 @@ class BenchmarkTidy extends Benchmarker { print "Median: $median ms\n"; print "Mean: $mean ms\n"; print "Maximum: $max ms\n"; - print "Memory usage: " . $contLang->formatSize( memory_get_usage( true ) ) . "\n"; + print "Memory usage: " . $contLang->formatSize( memory_get_usage( true ) ) . "\n"; print "Peak memory usage: " . $contLang->formatSize( memory_get_peak_usage( true ) ) . "\n"; } diff --git a/maintenance/cleanupInvalidDbKeys.php b/maintenance/cleanupInvalidDbKeys.php index b9334348d4..a1820b89aa 100644 --- a/maintenance/cleanupInvalidDbKeys.php +++ b/maintenance/cleanupInvalidDbKeys.php @@ -286,7 +286,6 @@ TEXT } $this->outputStatus( "\n" ); - return; } /** diff --git a/maintenance/compareParsers.php b/maintenance/compareParsers.php index fe6e604d96..b01dde6ee2 100644 --- a/maintenance/compareParsers.php +++ b/maintenance/compareParsers.php @@ -95,9 +95,8 @@ class CompareParsers extends DumpIterator { $this->options = ParserOptions::newFromUser( $user ); if ( $this->hasOption( 'tidy' ) ) { - global $wgUseTidy; - if ( !$wgUseTidy ) { - $this->fatalError( 'Tidy was requested but $wgUseTidy is not set in LocalSettings.php' ); + if ( !MWTidy::isEnabled() ) { + $this->fatalError( 'Tidy was requested but $wgTidyConfig is not set in LocalSettings.php' ); } $this->options->setTidy( true ); } diff --git a/maintenance/createCommonPasswordCdb.php b/maintenance/createCommonPasswordCdb.php index 0aa8ce89f7..7f12252704 100644 --- a/maintenance/createCommonPasswordCdb.php +++ b/maintenance/createCommonPasswordCdb.php @@ -94,7 +94,7 @@ class CreateCommonPasswordCdb extends Maintenance { continue; } if ( isset( $alreadyWritten[$line] ) ) { - $this->output( "Password '$line' already written (line " . ( $i + 1 ) .")\n" ); + $this->output( "Password '$line' already written (line " . ( $i + 1 ) . ")\n" ); $skipped++; continue; } diff --git a/maintenance/dumpIterator.php b/maintenance/dumpIterator.php index e9a6bc58bf..751932d73f 100644 --- a/maintenance/dumpIterator.php +++ b/maintenance/dumpIterator.php @@ -146,12 +146,10 @@ abstract class DumpIterator extends Maintenance { /* Stub function for processing additional options */ public function checkOptions() { - return; } /* Stub function for giving data about what was computed */ public function conclusions() { - return; } /* Core function which does whatever the maintenance script is designed to do */ diff --git a/maintenance/edit.php b/maintenance/edit.php index 60ed2523ef..a279cda0d7 100644 --- a/maintenance/edit.php +++ b/maintenance/edit.php @@ -34,12 +34,14 @@ class EditCLI extends Maintenance { $this->addDescription( 'Edit an article from the command line, text is from stdin' ); $this->addOption( 'user', 'Username', false, true, 'u' ); $this->addOption( 'summary', 'Edit summary', false, true, 's' ); + $this->addOption( 'remove', 'Remove a slot (requires --slot).', false, false ); $this->addOption( 'minor', 'Minor edit', false, false, 'm' ); $this->addOption( 'bot', 'Bot edit', false, false, 'b' ); $this->addOption( 'autosummary', 'Enable autosummary', false, false, 'a' ); $this->addOption( 'no-rc', 'Do not show the change in recent changes', false, false, 'r' ); $this->addOption( 'nocreate', 'Don\'t create new pages', false, false ); $this->addOption( 'createonly', 'Only create new pages', false, false ); + $this->addOption( 'slot', 'Slot role name', false, true ); $this->addArg( 'title', 'Title of article to edit' ); } @@ -48,10 +50,12 @@ class EditCLI extends Maintenance { $userName = $this->getOption( 'user', false ); $summary = $this->getOption( 'summary', '' ); + $remove = $this->hasOption( 'remove' ); $minor = $this->hasOption( 'minor' ); $bot = $this->hasOption( 'bot' ); $autoSummary = $this->hasOption( 'autosummary' ); $noRC = $this->hasOption( 'no-rc' ); + $slot = $this->getOption( 'slot', 'main' ); if ( $userName === false ) { $wgUser = User::newSystemUser( 'Maintenance script', [ 'steal' => true ] ); @@ -78,17 +82,36 @@ class EditCLI extends Maintenance { $page = WikiPage::factory( $title ); - # Read the text - $text = $this->getStdin( Maintenance::STDIN_ALL ); - $content = ContentHandler::makeContent( $text, $title ); + if ( $remove ) { + if ( $slot === 'main' ) { + $this->fatalError( "Cannot remove main slot! Use --slot to specify." ); + } + + $content = false; + } else { + # Read the text + $text = $this->getStdin( Maintenance::STDIN_ALL ); + $content = ContentHandler::makeContent( $text, $title ); + } # Do the edit $this->output( "Saving... " ); - $status = $page->doEditContent( $content, $summary, - ( $minor ? EDIT_MINOR : 0 ) | + $updater = $page->newPageUpdater( $wgUser ); + + $flags = ( $minor ? EDIT_MINOR : 0 ) | ( $bot ? EDIT_FORCE_BOT : 0 ) | ( $autoSummary ? EDIT_AUTOSUMMARY : 0 ) | - ( $noRC ? EDIT_SUPPRESS_RC : 0 ) ); + ( $noRC ? EDIT_SUPPRESS_RC : 0 ); + + if ( $content === false ) { + $updater->removeSlot( $slot ); + } else { + $updater->setContent( $slot, $content ); + } + + $updater->saveRevision( CommentStoreComment::newUnsavedComment( $summary ), $flags ); + $status = $updater->getStatus(); + if ( $status->isOK() ) { $this->output( "done\n" ); $exit = 0; diff --git a/maintenance/includes/DeleteLocalPasswords.php b/maintenance/includes/DeleteLocalPasswords.php index bfbbcdcd7e..02c8bedd4d 100644 --- a/maintenance/includes/DeleteLocalPasswords.php +++ b/maintenance/includes/DeleteLocalPasswords.php @@ -169,7 +169,7 @@ ERROR 'user', 'user_name', [ - 'user_name > ' .$dbw->addQuotes( $lastUsername ), + 'user_name > ' . $dbw->addQuotes( $lastUsername ), ], __METHOD__, [ diff --git a/maintenance/populateChangeTagDef.php b/maintenance/populateChangeTagDef.php index b11b95fd72..7bec25ac97 100644 --- a/maintenance/populateChangeTagDef.php +++ b/maintenance/populateChangeTagDef.php @@ -39,6 +39,7 @@ class PopulateChangeTagDef extends LoggedUpdateMaintenance { true ); $this->addOption( 'populate-only', 'Do not update change_tag_def table' ); + $this->addOption( 'set-user-tags-only', 'Only update ctd_user_defined from valid_tag table' ); } public function execute() { @@ -61,10 +62,15 @@ class PopulateChangeTagDef extends LoggedUpdateMaintenance { __METHOD__ ) ) { + if ( $this->hasOption( 'set-user-tags-only' ) ) { + $this->setUserDefinedTags(); + return true; + } if ( !$this->hasOption( 'populate-only' ) ) { $this->updateCountTag(); } $this->backpopulateChangeTagId(); + $this->setUserDefinedTags(); } else { $this->updateCountTagId(); } @@ -75,6 +81,40 @@ class PopulateChangeTagDef extends LoggedUpdateMaintenance { return true; } + private function setUserDefinedTags() { + $dbr = $this->lbFactory->getMainLB()->getConnection( DB_REPLICA ); + + $userTags = $dbr->selectFieldValues( + 'valid_tag', + 'vt_tag', + [], + __METHOD__ + ); + + if ( empty( $userTags ) ) { + $this->output( "No user defined tags to set, moving on...\n" ); + return; + } + + if ( $this->hasOption( 'dry-run' ) ) { + $this->output( + 'These tags will have ctd_user_defined=1 : ' . implode( ', ', $userTags ) . "\n" + ); + return; + } + + $dbw = $this->lbFactory->getMainLB()->getConnection( DB_MASTER ); + + $dbw->update( + 'change_tag_def', + [ 'ctd_user_defined' => 1 ], + [ 'ctd_name' => $userTags ], + __METHOD__ + ); + $this->lbFactory->waitForReplication(); + $this->output( "Finished setting user defined tags in change_tag_def table\n" ); + } + private function updateCountTagId() { $dbr = $this->lbFactory->getMainLB()->getConnection( DB_REPLICA ); diff --git a/maintenance/resources/foreign-resources.yaml b/maintenance/resources/foreign-resources.yaml index 9beb0e3877..6ac354a051 100644 --- a/maintenance/resources/foreign-resources.yaml +++ b/maintenance/resources/foreign-resources.yaml @@ -1,6 +1,7 @@ ### Format of this file # -# The top-level keys are module names (as registered in Resources.php). +# The top-level keys are directory names (under resources/lib/). +# They should match module names (as registered in Resources.php), but there are exceptions. # Each top-level key holds a resource descriptor that must have one of # the following `type` values: # @@ -10,9 +11,9 @@ # ### Type tar # -# The `src` and `integrity` keys are quired. +# The `src` and `integrity` keys are required. # -# * `src`: Full URL to thes remote resource. +# * `src`: Full URL to the remote resource. # * `integrity`: Cryptographic hash (integrity metadata format per ). # * `dest`: An object mapping paths to files or directory from the remote resource to a destination # in the module directory. The value of key in dest may be omitted, which will extract the key @@ -20,13 +21,13 @@ # ### Type file # -# The `src` and `integrity` keys are quired. +# The `src` and `integrity` keys are required. # -# * `src`: Full URL to thes remote resource. +# * `src`: Full URL to the remote resource. # * `integrity`: Cryptographic hash (integrity metadata format per ). # * `dest`: The name of the file in the module directory. Default: Basename of URL. # -### Type mult-file +### Type multi-file # # The `files` key is required. # @@ -38,6 +39,22 @@ CLDRPluralRuleParser: src: https://raw.githubusercontent.com/santhoshtr/CLDRPluralRuleParser/v1.1.3/src/CLDRPluralRuleParser.js integrity: sha384-Y0qxTEDVQgh+N5In+vLbZLL2H7PEROnicj8vxof0mxR8kXcGysGE6OcF+cS+Ao0u +easy-deflate: + type: multi-file + files: + deflate.js: + src: https://raw.githubusercontent.com/edg2s/Easy-Deflate/7a6056e5302f6f385ff2efa60afda45b4ad81e51/deflate.js + integrity: sha384-sHnZLDSWMUhA2w9ygkzCK8YFvoh/fQKY6lXMbvmrYzjuNURiLB0DZFCDNMpGyZ77 + easydeflate.js: + src: https://raw.githubusercontent.com/edg2s/Easy-Deflate/7a6056e5302f6f385ff2efa60afda45b4ad81e51/easydeflate.js + integrity: sha384-EwPfP2RMkDPa1HkzQsXgzTsy1KEjcIzQPA1HDS/JPHjvEMvVUsCxWwm1oXql/jk2 + inflate.js: + src: https://raw.githubusercontent.com/edg2s/Easy-Deflate/7a6056e5302f6f385ff2efa60afda45b4ad81e51/inflate.js + integrity: sha384-hMg44Hw424mUYvmzKl0JT4J8UU/1YYhTiGRtR0YX/MXNLK9qWTK0d62FBCDGxmxw + README.md: + src: https://raw.githubusercontent.com/edg2s/Easy-Deflate/7a6056e5302f6f385ff2efa60afda45b4ad81e51/README.md + integrity: sha384-6kwcfCLivvqXBZy2ATyya+mTVWLk3eaQyBdC6tbpBtkygnBrM2SNkq3jz/l7IkvP + html5shiv: type: file src: https://raw.githubusercontent.com/aFarkas/html5shiv/3.7.3/src/html5shiv.js diff --git a/maintenance/resources/manageForeignResources.php b/maintenance/resources/manageForeignResources.php index 41e579ba39..aa22c68dd1 100644 --- a/maintenance/resources/manageForeignResources.php +++ b/maintenance/resources/manageForeignResources.php @@ -45,8 +45,8 @@ libraries registered as ResourceLoader modules. See also foreign-resources.yaml. For sources that don't publish an integrity hash, omit "integrity" (or leave empty) and run the "make-sri" action to compute the missing hashes. -This script runs in dry mode by default. Use --update to actually change, remove, -or add files to /resources/lib/. +This script runs in dry-run mode by default. Use --update to actually change, +remove, or add files to resources/lib/. TEXT ); $this->addArg( 'action', 'One of "update", "verify" or "make-sri"', true ); diff --git a/mw-config/config.js b/mw-config/config.js index 99290f4453..74bdcf85b1 100644 --- a/mw-config/config.js +++ b/mw-config/config.js @@ -1,5 +1,5 @@ /* global extDependencyMap */ -( function ( $ ) { +( function () { $( function () { var $label, labelText; @@ -148,4 +148,4 @@ } ); } ); } ); -}( jQuery ) ); +}() ); diff --git a/package.json b/package.json index 4f7523e7e4..b3de15118b 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "devDependencies": { "deepmerge": "1.3.2", "eslint": "5.0.1", - "eslint-config-wikimedia": "0.7.2", + "eslint-config-wikimedia": "0.8.1", "eslint-plugin-qunit": "3.3.1", "grunt": "1.0.3", "grunt-banana-checker": "0.6.0", diff --git a/resources/src/jquery.spinner/spinner.js b/resources/src/jquery.spinner/spinner.js index 9079cc09b7..5024688677 100644 --- a/resources/src/jquery.spinner/spinner.js +++ b/resources/src/jquery.spinner/spinner.js @@ -5,7 +5,7 @@ * * @class jQuery.plugin.spinner */ -( function ( $ ) { +( function () { // Default options for new spinners, // stored outside the function to share between calls. @@ -111,4 +111,4 @@ * @mixins jQuery.plugin.spinner */ -}( jQuery ) ); +}() ); diff --git a/resources/src/jquery.tablesorter/jquery.tablesorter.js b/resources/src/jquery.tablesorter/jquery.tablesorter.js index cbdc2fa9b3..a37bcf7b1d 100644 --- a/resources/src/jquery.tablesorter/jquery.tablesorter.js +++ b/resources/src/jquery.tablesorter/jquery.tablesorter.js @@ -43,7 +43,7 @@ * * @author Christian Bach/christian.bach@polyester.se */ -( function ( $, mw ) { +( function () { var ts, parsers = []; @@ -1281,4 +1281,4 @@ type: 'numeric' } ); -}( jQuery, mediaWiki ) ); +}() ); diff --git a/resources/src/jquery.tipsy/jquery.tipsy.js b/resources/src/jquery.tipsy/jquery.tipsy.js index ddda432f32..a5e51843de 100644 --- a/resources/src/jquery.tipsy/jquery.tipsy.js +++ b/resources/src/jquery.tipsy/jquery.tipsy.js @@ -6,7 +6,7 @@ // * This installation of tipsy includes several local modifications to both Javascript and CSS. // Please be careful when upgrading. -( function ( mw, $ ) { +( function () { function maybeCall(thing, ctx) { return (typeof thing == 'function') ? (thing.call(ctx)) : thing; @@ -278,4 +278,4 @@ } }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/resources/src/jquery/jquery.accessKeyLabel.js b/resources/src/jquery/jquery.accessKeyLabel.js index 674f62cd74..cdc5808ca7 100644 --- a/resources/src/jquery/jquery.accessKeyLabel.js +++ b/resources/src/jquery/jquery.accessKeyLabel.js @@ -3,7 +3,7 @@ * * @class jQuery.plugin.accessKeyLabel */ -( function ( $, mw ) { +( function () { // Cached access key modifiers for used browser var cachedAccessKeyModifiers, @@ -236,4 +236,4 @@ * @mixins jQuery.plugin.accessKeyLabel */ -}( jQuery, mediaWiki ) ); +}() ); diff --git a/resources/src/jquery/jquery.byteLength.js b/resources/src/jquery/jquery.byteLength.js index 5764ae90ad..2e1a338d56 100644 --- a/resources/src/jquery/jquery.byteLength.js +++ b/resources/src/jquery/jquery.byteLength.js @@ -12,7 +12,7 @@ * @param {string} str * @return {number} */ -mediaWiki.log.deprecate( jQuery, 'byteLength', require( 'mediawiki.String' ).byteLength, +mw.log.deprecate( $, 'byteLength', require( 'mediawiki.String' ).byteLength, 'Use require( \'mediawiki.String\' ).byteLength instead.', '$.byteLength' ); /** diff --git a/resources/src/jquery/jquery.checkboxShiftClick.js b/resources/src/jquery/jquery.checkboxShiftClick.js index d99e9f0a8b..63cf28c5b8 100644 --- a/resources/src/jquery/jquery.checkboxShiftClick.js +++ b/resources/src/jquery/jquery.checkboxShiftClick.js @@ -1,7 +1,7 @@ /** * @class jQuery.plugin.checkboxShiftClick */ -( function ( $ ) { +( function () { /** * Enable checkboxes to be checked or unchecked in a row by clicking one, @@ -40,4 +40,4 @@ * @mixins jQuery.plugin.checkboxShiftClick */ -}( jQuery ) ); +}() ); diff --git a/resources/src/jquery/jquery.color.js b/resources/src/jquery/jquery.color.js index 894cf863e8..6df02adf5b 100644 --- a/resources/src/jquery/jquery.color.js +++ b/resources/src/jquery/jquery.color.js @@ -7,7 +7,7 @@ * * - 2011-01-05: Forked for MediaWiki. See also jQuery.colorUtil plugin */ -( function ( $ ) { +( function () { function getColor( elem, attr ) { var color; @@ -52,4 +52,4 @@ }; } ); -}( jQuery ) ); +}() ); diff --git a/resources/src/jquery/jquery.colorUtil.js b/resources/src/jquery/jquery.colorUtil.js index d46d009909..009be1aa73 100644 --- a/resources/src/jquery/jquery.colorUtil.js +++ b/resources/src/jquery/jquery.colorUtil.js @@ -6,7 +6,7 @@ * Mostly based on other plugins and functions (linted and optimized a little). * Sources cited inline. */ -( function ( $ ) { +( function () { /** * @class jQuery.colorUtil * @singleton @@ -265,4 +265,4 @@ }; -}( jQuery ) ); +}() ); diff --git a/resources/src/jquery/jquery.confirmable.js b/resources/src/jquery/jquery.confirmable.js index 7931c8147f..028b4b9184 100644 --- a/resources/src/jquery/jquery.confirmable.js +++ b/resources/src/jquery/jquery.confirmable.js @@ -7,7 +7,7 @@ * * @class jQuery.plugin.confirmable */ -( function ( $ ) { +( function () { var identity = function ( data ) { return data; }; @@ -180,4 +180,4 @@ noTitle: undefined } }; -}( jQuery ) ); +}() ); diff --git a/resources/src/jquery/jquery.confirmable.mediawiki.js b/resources/src/jquery/jquery.confirmable.mediawiki.js index daf23a99c0..aa1e90e14c 100644 --- a/resources/src/jquery/jquery.confirmable.mediawiki.js +++ b/resources/src/jquery/jquery.confirmable.mediawiki.js @@ -4,7 +4,7 @@ * This file serves to inject our localised messages into it. */ -( function ( mw, $ ) { +( function () { $.fn.confirmable.defaultOptions.i18n = { space: mw.message( 'word-separator' ).text(), confirm: mw.message( 'confirmable-confirm', mw.user ).text(), @@ -13,4 +13,4 @@ yesTitle: undefined, noTitle: undefined }; -}( mediaWiki, jQuery ) ); +}() ); diff --git a/resources/src/jquery/jquery.getAttrs.js b/resources/src/jquery/jquery.getAttrs.js index e00298f406..e464c90bd1 100644 --- a/resources/src/jquery/jquery.getAttrs.js +++ b/resources/src/jquery/jquery.getAttrs.js @@ -1,7 +1,7 @@ /** * @class jQuery.plugin.getAttrs */ -( function ( $ ) { +( function () { function serializeControls( controls ) { var i, data = {}, @@ -34,4 +34,4 @@ $.fn.serializeObject = function () { return serializeControls( this.serializeArray() ); }; -}( jQuery ) ); +}() ); diff --git a/resources/src/jquery/jquery.hidpi.js b/resources/src/jquery/jquery.hidpi.js index 7a7109cbc3..025e6c23e1 100644 --- a/resources/src/jquery/jquery.hidpi.js +++ b/resources/src/jquery/jquery.hidpi.js @@ -9,7 +9,7 @@ * * @class jQuery.plugin.hidpi */ -( function ( $ ) { +( function () { /** * Get reported or approximate device pixel ratio. @@ -174,4 +174,4 @@ * @mixins jQuery.plugin.hidpi */ -}( jQuery ) ); +}() ); diff --git a/resources/src/jquery/jquery.highlightText.js b/resources/src/jquery/jquery.highlightText.js index a14e3ebd38..782d7118fd 100644 --- a/resources/src/jquery/jquery.highlightText.js +++ b/resources/src/jquery/jquery.highlightText.js @@ -3,7 +3,7 @@ * TODO: Add a function for restoring the previous text. * TODO: Accept mappings for converting shortcuts like WP: to Wikipedia:. */ -( function ( $, mw ) { +( function () { $.highlightText = { @@ -94,4 +94,4 @@ } ); }; -}( jQuery, mediaWiki ) ); +}() ); diff --git a/resources/src/jquery/jquery.lengthLimit.js b/resources/src/jquery/jquery.lengthLimit.js index 3823395c6b..26f8f9b1f3 100644 --- a/resources/src/jquery/jquery.lengthLimit.js +++ b/resources/src/jquery/jquery.lengthLimit.js @@ -1,7 +1,7 @@ /** * @class jQuery.plugin.lengthLimit */ -( function ( $, mw ) { +( function () { var eventKeys = [ @@ -211,4 +211,4 @@ * @class jQuery * @mixins jQuery.plugin.lengthLimit */ -}( jQuery, mediaWiki ) ); +}() ); diff --git a/resources/src/jquery/jquery.localize.js b/resources/src/jquery/jquery.localize.js index 20dc1b20fe..ab269f0cff 100644 --- a/resources/src/jquery/jquery.localize.js +++ b/resources/src/jquery/jquery.localize.js @@ -1,7 +1,7 @@ /** * @class jQuery.plugin.localize */ -( function ( $, mw ) { +( function () { /** * Gets a localized message, using parameters from options if present. @@ -177,4 +177,4 @@ * @mixins jQuery.plugin.localize */ -}( jQuery, mediaWiki ) ); +}() ); diff --git a/resources/src/jquery/jquery.makeCollapsible.js b/resources/src/jquery/jquery.makeCollapsible.js index 082603a5a0..43b8f0d667 100644 --- a/resources/src/jquery/jquery.makeCollapsible.js +++ b/resources/src/jquery/jquery.makeCollapsible.js @@ -10,7 +10,7 @@ * * @class jQuery.plugin.makeCollapsible */ -( function ( $, mw ) { +( function () { /** * Handler for a click on a collapsible toggler. * @@ -364,4 +364,4 @@ * @mixins jQuery.plugin.makeCollapsible */ -}( jQuery, mediaWiki ) ); +}() ); diff --git a/resources/src/jquery/jquery.mw-jump.js b/resources/src/jquery/jquery.mw-jump.js index 5eae0bec8d..ad1c96dba4 100644 --- a/resources/src/jquery/jquery.mw-jump.js +++ b/resources/src/jquery/jquery.mw-jump.js @@ -1,7 +1,7 @@ /** * JavaScript to show jump links to motor-impaired users when they are focused. */ -jQuery( function ( $ ) { +$( function () { $( '.mw-jump' ).on( 'focus blur', 'a', function ( e ) { // Confusingly jQuery leaves e.type as focusout for delegated blur events diff --git a/resources/src/jquery/jquery.suggestions.js b/resources/src/jquery/jquery.suggestions.js index 35c6a5dfb7..f2d6a044f1 100644 --- a/resources/src/jquery/jquery.suggestions.js +++ b/resources/src/jquery/jquery.suggestions.js @@ -90,7 +90,7 @@ * input or not. */ -( function ( $, mw ) { +( function () { var hasOwn = Object.hasOwnProperty; @@ -775,4 +775,4 @@ * @mixins jQuery.plugin.suggestions */ -}( jQuery, mediaWiki ) ); +}() ); diff --git a/resources/src/jquery/jquery.tabIndex.js b/resources/src/jquery/jquery.tabIndex.js index 5fb28aa34b..dab437d4f0 100644 --- a/resources/src/jquery/jquery.tabIndex.js +++ b/resources/src/jquery/jquery.tabIndex.js @@ -1,7 +1,7 @@ /** * @class jQuery.plugin.tabIndex */ -( function ( $ ) { +( function () { /** * Find the lowest tabindex in use within a selection. @@ -54,4 +54,4 @@ * @mixins jQuery.plugin.tabIndex */ -}( jQuery ) ); +}() ); diff --git a/resources/src/jquery/jquery.textSelection.js b/resources/src/jquery/jquery.textSelection.js index da882708b9..6b4ab979a1 100644 --- a/resources/src/jquery/jquery.textSelection.js +++ b/resources/src/jquery/jquery.textSelection.js @@ -19,7 +19,7 @@ * $textbox.textSelection( 'encapsulateSelection', { pre: '', post: '' } ); * // Result: Textbox contains 'This is bold!', with cursor before the '!' */ -( function ( $ ) { +( function () { /** * Do things to the selection in a `