Merge "Fix up interwiki search results in API"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 4 Dec 2014 05:30:48 +0000 (05:30 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 4 Dec 2014 05:30:48 +0000 (05:30 +0000)
194 files changed:
.jscsrc
.jshintrc
HISTORY
RELEASE-NOTES-1.24 [deleted file]
RELEASE-NOTES-1.25
autoload.php
composer.json
docs/hooks.txt
docs/kss/Makefile
docs/scripts.txt
includes/DefaultSettings.php
includes/Defines.php
includes/EditPage.php
includes/OutputPage.php
includes/PrefixSearch.php
includes/Title.php
includes/User.php
includes/api/ApiBase.php
includes/api/ApiEditPage.php
includes/api/ApiExpandTemplates.php
includes/api/ApiMain.php
includes/api/ApiMove.php
includes/api/ApiOpenSearch.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryPrefixSearch.php
includes/api/ApiQueryTags.php
includes/api/ApiStashEdit.php [new file with mode: 0644]
includes/api/i18n/be-tarask.json
includes/api/i18n/en.json
includes/api/i18n/fr.json
includes/api/i18n/fy.json
includes/api/i18n/he.json
includes/api/i18n/ia.json
includes/api/i18n/ksh.json [new file with mode: 0644]
includes/api/i18n/mk.json
includes/api/i18n/qqq.json
includes/api/i18n/sv.json
includes/api/i18n/zh-hans.json
includes/api/i18n/zh-hant.json
includes/cache/LocalisationCache.php
includes/content/ContentHandler.php
includes/content/JavaScriptContentHandler.php
includes/content/JsonContentHandler.php
includes/db/Database.php
includes/db/LBFactory.php
includes/db/LBFactoryMulti.php
includes/db/LBFactorySingle.php
includes/db/LoadBalancer.php
includes/installer/DatabaseUpdater.php
includes/installer/InstallDocFormatter.php
includes/installer/MysqlUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstallerOutput.php
includes/installer/i18n/el.json
includes/installer/i18n/ksh.json
includes/installer/i18n/nap.json
includes/page/Article.php
includes/page/WikiPage.php
includes/parser/CoreParserFunctions.php
includes/parser/MWTidy.php
includes/parser/Parser.php
includes/profiler/ProfilerXhprof.php
includes/profiler/output/ProfilerOutputDb.php
includes/profiler/output/ProfilerOutputUdp.php
includes/resourceloader/ResourceLoader.php
includes/search/SearchEngine.php
includes/site/SiteListFileCache.php [new file with mode: 0644]
includes/site/SiteListFileCacheBuilder.php [new file with mode: 0644]
includes/site/SiteSQLStore.php
includes/skins/Skin.php
includes/skins/SkinFallbackTemplate.php
includes/skins/SkinTemplate.php
includes/specialpage/SpecialPage.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialExpandTemplates.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialListusers.php
includes/specials/SpecialLog.php
includes/specials/SpecialPagesWithProp.php
includes/specials/SpecialRandomInCategory.php
includes/specials/SpecialRedirect.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialWatchlist.php
includes/templates/Userlogin.php
includes/utils/IP.php
languages/i18n/ar.json
languages/i18n/ba.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/cs.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/fr.json
languages/i18n/frr.json
languages/i18n/fy.json
languages/i18n/gl.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/it.json
languages/i18n/ka.json
languages/i18n/kk-cyrl.json
languages/i18n/ko.json
languages/i18n/ksh.json
languages/i18n/lb.json
languages/i18n/lt.json
languages/i18n/mai.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mt.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pt-br.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/ru.json
languages/i18n/sah.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/vec.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/postgres/update-keys.sql [new file with mode: 0644]
maintenance/rebuildSitesCache.php [new file with mode: 0644]
maintenance/removeInvalidEmails.php [new file with mode: 0644]
opensearch_desc.php
profileinfo.php
resources/Resources.php
resources/lib/oojs-ui/i18n/ca.json
resources/lib/oojs-ui/i18n/hr.json
resources/lib/oojs-ui/oojs-ui-apex.css
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-apex.svg.css
resources/lib/oojs-ui/oojs-ui-mediawiki.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css
resources/lib/oojs-ui/oojs-ui.js
resources/src/jquery/jquery.getAttrs.js
resources/src/mediawiki.action/mediawiki.action.edit.stash.js [new file with mode: 0644]
resources/src/mediawiki.legacy/ajax.js
resources/src/mediawiki.legacy/commonPrint.css
resources/src/mediawiki.less/mediawiki.ui/mixins.less
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki.ui/components/checkbox.less
resources/src/mediawiki.ui/components/forms.less
resources/src/mediawiki.ui/components/icons.less
resources/src/mediawiki.ui/components/images/checked.svg
resources/src/mediawiki.ui/components/images/checked_disabled.png
resources/src/mediawiki.ui/components/images/checked_disabled.svg
resources/src/mediawiki.ui/components/images/ok.png
resources/src/mediawiki.ui/components/images/ok.svg
resources/src/mediawiki.ui/components/images/radio_checked.png [new file with mode: 0644]
resources/src/mediawiki.ui/components/images/radio_checked.svg [new file with mode: 0644]
resources/src/mediawiki.ui/components/images/radio_disabled.png [new file with mode: 0644]
resources/src/mediawiki.ui/components/images/radio_disabled.svg [new file with mode: 0644]
resources/src/mediawiki.ui/components/inputs.less
resources/src/mediawiki.ui/components/radio.less [new file with mode: 0644]
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.searchSuggest.js
tests/frontend/package.json
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/PrefixSearchTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/cache/GenderCacheTest.php
tests/phpunit/includes/cache/LocalisationCacheTest.php
tests/phpunit/includes/content/JsonContentTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/installer/InstallDocFormatterTest.php
tests/phpunit/includes/parser/TagHooksTest.php
tests/phpunit/includes/site/SiteListFileCacheBuilderTest.php [new file with mode: 0644]
tests/phpunit/includes/site/SiteListFileCacheTest.php [new file with mode: 0644]
tests/phpunit/includes/title/MediaWikiTitleCodecTest.php

diff --git a/.jscsrc b/.jscsrc
index b9139b2..2ebd40e 100644 (file)
--- a/.jscsrc
+++ b/.jscsrc
@@ -1,10 +1,8 @@
 {
        "preset": "wikimedia",
 
-       "disallowDanglingUnderscores": null,
        "disallowKeywordsOnNewLine": null,
        "disallowQuotedKeysInObjects": null,
-       "requireCamelCaseOrUpperCaseIdentifiers": null,
        "requireSpacesInsideArrayBrackets": null,
        "validateIndentation": null
 }
index c136dfc..92c8c43 100644 (file)
--- a/.jshintrc
+++ b/.jshintrc
@@ -22,9 +22,5 @@
                "mediaWiki": true,
                "jQuery": false,
                "QUnit": false
-       },
-
-       // Legacy (to be handled by jscs once supported)
-       "camelcase": true,
-       "nomen": true
+       }
 }
diff --git a/HISTORY b/HISTORY
index 7477942..78ece33 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -1,4 +1,688 @@
-Change notes from older releases. For current info see RELEASE-NOTES-1.24.
+Change notes from older releases. For current info see RELEASE-NOTES-1.25.
+
+== MediaWiki 1.24 ==
+
+=== Configuration changes in 1.24 ===
+* MediaWiki will no longer run if register_globals is enabled. It has been
+  deprecated for 5 years now, and was removed in PHP 5.4. For more information
+  about why, see <https://www.mediawiki.org/wiki/register_globals>.
+* MediaWiki now requires PHP's iconv extension. openSUSE users may need to
+  install the php5-iconv package. Users of other systems may need to add
+  extension=iconv.so to php.ini or recompile PHP without --without-iconv.
+* MediaWiki will no longer function if magic quotes are enabled. It has
+  been deprecated for 5 years now, and was removed in PHP 5.4.
+* The server's canonical hostname is available as $wgServerName, which is
+  exposed in both mw.config and ApiQuerySiteInfo.
+* Introduced $wgPagePropsHaveSortkey as a backwards-compatibility switch,
+  for using the old schema of the page_props table, in case the respective
+  schema update was not applied.
+* $wgSearchEverythingOnlyLoggedIn was removed as the 'searcheverything'
+  user option was removed. Use $wgNamespacesToBeSearchedDefault instead or
+  if you used to have $wgDefaultUserOptions['searcheverything'] = 1.
+* $wgMasterWaitTimeout has been deprecated.
+* $wgDBClusterTimeout has been removed.
+* $wgProxyKey has been removed. It is no longer used by MediaWiki core.
+  Ensure $wgSecretKey is set in LocalSettings.php.
+* $wgExtraInterlanguageLinkPrefixes is a new configuration variable that
+  contains an array of interwiki prefixes that should be treated as language
+  prefixes (i.e. turned into interlanguage links when $wgInterwikiMagic is set
+  to true).
+* $wgParserTestRemote has been removed.
+* $wgCountTotalSearchHits has been removed. If you're concerned about efficiency
+  of search, you should use something like CirrusSearch instead of built in
+  search.
+* Users in the 'sysop' group have access to Special:MergeHistory by default.
+* $wgFileStore was removed after having been deprecated in 1.17. Alternative
+  configurations are $wgDeletedDirectory and $wgHashedUploadDirectory.
+* The deprecated $wgUseCommaCount variable has been removed.
+* $wgEnableSorbs and $wgSorbsUrl have been removed.
+* The UserCryptPassword and UserComparePassword hooks are no longer called.
+  Any extensions using them must be updated to use the Password Hashing API.
+* $wgCompiledFiles has been removed.
+* $wgSortSpecialPages was removed, the listing on Special:SpecialPages is
+  now always sorted.
+* $wgSpecialPages may now use callback functions as an alternative to plain class names.
+  This allows more control over constructor parameters.
+* $wgHTCPMulticastAddress, $wgHTCPMulticastRouting and $wgHTCPPort were removed.
+* $wgRC2UDPAddress, $wgRC2UDPInterwikiPrefix, $wgRC2UDPOmitBots, $wgRC2UDPPort
+  and $wgRC2UDPPrefix have been removed.
+* The default password type for MediaWiki has been changed from MD5 to PBKDF2.
+  Password hashes will automatically be updated as users log in. If necessary, the
+  old MD5 hashing can be restored by changing $wgPasswordDefault to 'B'. In addition,
+  there is a maintenance script wrapOldPassword.php that can wrap all passwords in
+  PBKDF2 (or the hashing algorithm of your choice) if you don't want to wait for your
+  users to log in.
+* $wgImportSources can now either be a regular array, or an associative map
+  specifying subprojects on the interwiki map of the target wiki, or a mix of
+  the two. Existing configurations will still work.
+* Users must be able to edit through a page's protection to be able to delete it.
+* The default thumb size ($wgDefaultUserOptions['thumbsize']) is now 300px, up from
+  180px. If you have altered the number of entries in $wgThumbLimits for your wiki, you
+  may need to adjust your default user settings to compensate for the index change.
+* $wgDeferredUpdateList is now deprecated, you should use DeferredUpdates::addUpdate()
+  instead.
+* $wgCanonicalLanguageLinks has been removed. Per Google recommendations, we
+  will not send a rel=canonical pointing to a variant-neutral page, however
+  we will send rel=alternate.
+* $wgResourceLoaderLESSFunctions has been deprecated and will be removed in the future.
+* $wgGoToEdit has been removed. Use the SpecialSearchNogomatch hook for similar
+  functionality.
+
+=== New features in 1.24 ===
+* Added new hook WatchlistEditorBeforeFormRender, allowing subscribers to
+  manipulate the list of pages and/or preload lots of data at once.
+* Added new argument &$link in hook WatchlistEditorBuildRemoveLine, allowing the
+  link to the title to be changed.
+* Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
+  WhatLinksHere entries.
+* Added a new hook, "ContentGetParserOutput", to customize parser output for
+  a given content object.
+* Deprecated the hook "ShowRawCssJs", use "ContentGetParserOutput" instead.
+* HTMLForm's HTMLTextField now supports the 'url' type.
+* HTMLForm fields may now be dynamically hidden based on the values of other
+  fields in the form.
+* HTMLForm now supports multiple copies of an input field or set of input
+  fields, e.g. the form may request "one or more usernames" without having to
+  have the user enter delimited list of names into a text field.
+* Added a new hook, "SidebarBeforeOutput", to allow to edit the structure of
+  the sidebar just before its display.
+* (bug 49156) Added the mediawiki.cookie ResourceLoader module, which wraps
+  jquery.cookie so that getting/setting a cookie is syntactically and
+  functionally similar to using the WebRequest::getCookie() and
+  WebResponse::setcookie() methods.
+* (bug 44740) jQuery upgraded from 1.8.3 to 1.11.1. A new configuration option,
+  $wgIncludejQueryMigrate, also loads the jQuery Migrate hack to let extensions
+  and gadgets use the long-deprecated functions that were removed in jQuery 1.9.
+  This option is turned off by default, and will be removed in MediaWiki 1.25.
+* (bug 47076) jQuery UI upgraded from 1.8.24 to 1.9.2.
+* Changes to content typography (fonts, etc.). See
+  https://www.mediawiki.org/wiki/Typography_refresh for further information.
+* WikitextContent will now render redirects with the expected "redirect"
+  header, rather than as an ordered list. Code calling Article::viewRedirect
+  can probably be changed to no longer special-case redirects.
+* Header font set to a serif font stack. See
+  https://www.mediawiki.org/wiki/Typography_refresh for further information.
+* (bug 65567) Added a new hook, "BeforeHttpsRedirect", to allow cancellation of
+  the HTTP to HTTPS redirect due to forceHTTPS cookie, userRequires, etc. This
+  is only for page views, since this hook doesn't affect UserLogin, OAuth,
+  CentralAuth, etc. ATTENTION: This hook is likely to be removed soon due to
+  overall design of the system.
+* (bug 17367) It is now possible to add pages to your watchlist from
+  Special:UnwatchedPages without reloading the special page.
+* New methods setVolatile and isVolatile are added to PPFrame, so that
+  extensions such as Cite.php can mark that their output is volatile and
+  shouldn't be cached.
+* (bug 52817) Advanced search options are now saved on the search page itself,
+  rather than in a dedicated pane in the preferences panel.
+* (bug 44591) The dropdown actions menu (little triangle next to page tabs) in
+  the Vector skin has gained a label that should make it more discoverable.
+* MWCryptHKDF added for fast, cryptographically secure random number generation
+  that won't deplete openssl's entropy pool.
+* ResourceLoader: File modules can now provide a skip function that uses an
+  inline feature test to bypass loading of the module.
+* (bug 20210) Special pages may now provide autocompletion of their subpage
+  names in search suggestions. Right now the only useful implementation is in
+  Special:Log, but more are to come.
+* Special:MostLinkedTemplates is no longer limited to transclusions from the
+  Template namespace.
+* Skins can now use 'remoteSkinPath' when defining ResourceLoader modules.
+  This works the same as 'remoteExtPath' but is relative to the skins/ folder
+  instead of the extensions/ folder.
+* Added the json2.js polyfill for the ES5 JSON.stringify and JSON.parse methods.
+  Exposed as module "json" with a skip function to optimise loading.
+* Extensions and skins may now use 'namemsg' in $wgExtensionCredits in addition
+  to 'name', to allow for the name to be localizable. 'name' should still be
+  specified for backwards-compatibility and to define the path Special:Version
+  uses to find extension license information.
+* Browser tests are now included to verify basic wiki functionality in developer
+  environments. For details on running tests, see tests/browser/README.mediawiki.
+* Upgrade jStorage to v0.4.10.
+* {{!}} is now a magic word that produces the | character. This removes the need
+  for Template:! for purposes such as passing pipes inside of parameters.
+* (bug 20790) The block log snippet on Special:Contributions and while
+  editing user and user talk pages now works for IP range blocks.
+* (bug 9360) Added ability to change the page language for MediaWiki pages using
+  Special:PageLanguage. All pages are set to wiki language by default.
+  The feature needs to be enabled with $wgPageLanguageUseDB=true and
+  permission needs to be set for 'pagelang'.
+* Upgrade Moment.js to v2.8.3.
+* (bug 67042) Added support for the HTML5 <rtc> tag for East Asian typography.
+* Upgrade Sinon.JS to 1.10.3.
+* Added the es5-shim polyfill for older or non-compliant javascript engines.
+* Upgrade jQuery Cookie to v1.3.1.
+* (bug 20476) Add a "viewsuppressed" user right to be able to view
+  suppressed content but not suppress it ("suppressrevision" right).
+* (bug 66440) The MediaWiki web installer will now allow you to choose the skins
+  to enable (from the ones included in download tarball) and decide which one
+  should be the default.
+* (bug 68085, 68802) Links like [[localInterwikiPrefix:languageCode:pageTitle]],
+  where localInterwikiPrefix is a member of the $wgLocalInterwikis array, will
+  no longer be displayed in the sidebar when $wgInterwikiMagic is true. In a
+  similar way, links like [[localInterwikiPrefix:File:Image.png]] and
+  [[localInterwikiPrefix:Category:Hello]] will now render as regular links, and
+  will not include the file or add the page to the category.
+* New special page, MyLanguage, to redirect users to subpages with localised
+  versions of a page. (Integrated from Extension:Translate)
+* MediaWiki now supports multiple password types, including bcrypt and PBKDF2.
+  The default type can be changed with $wgPasswordDefault and the type
+  configurations can be changed with $wgPasswordConfig.
+* Skins can now define custom styles for default ResourceLoader modules using
+  the $wgResourceModuleSkinStyles global. See the Vector skin for examples.
+* (bug 4488) There is now a preference to watch pages where the user has
+  rollbacked an edit by default.
+* (bug 15484) Users will now be redirected to the login page when they need to
+  log in, rather than being shown a page asking them to log in and having to click
+  another link to actually get to the login page.
+* A JsonContent and JsonContentHandler were added for extensions to extend.
+* (bug 35045) Redirects to sections will now update the URL in browser's address
+  bar using the HTML5 History API. When [[Dog]] redirects to [[Animals#Dog]],
+  the user will now see "Animals#Dog" in their browser instead of "Dog#Dog".
+* API token handling has been rewritten. Any API module using tokens will need
+  to be updated. See the entry below under "Action API internal changes".
+* Added HTMLAutoCompleteSelectField.
+* Added a new hook, "SkinPreloadExistence", to allow extensions to add titles to
+  link existence cache before the page is rendered.
+* Config::set() was moved to its own interface, MutableConfig. GlobalVarConfig::set()
+  is now deprecated, does not implement MutableConfig.
+* A MutableConfig named HashConfig was added, that stores an array of configuration
+  settings.
+* (bug 69418) A MultiConfig implementation was added that supports fallback
+  to multiple Config instances.
+* Update CSSJanus to v1.1.0.
+* Added FormatJson::parse() returning status with result or localized error message
+
+=== Bug fixes in 1.24 ===
+* (bug 50572) MediaWiki:Blockip should support gender
+* (bug 49116) Footer copyright notice is now always displayed in user language
+  rather than content language (same as copyright notice for editing interface).
+* (bug 62258) A bug was fixed in File::getUnscaledThumb when a height
+  restriction was present in the parameters. Images with both the "frame"
+  option and a size specification set will now always ignore the provided
+  size and display an unscaled image, as the documentation has always
+  claimed it would.
+* (bug 39035) Improved Vector skin performance by removing collapsibleNav,
+  which used to collapse some sidebar elements by default.
+  This removes -list id suffixes like p-lang-list: instead of using things like
+  #p-lang-list, you can do #p-lang .body ul.
+* (bug 890) Links in Special:RecentChanges and Special:Watchlist no longer
+  follow redirects to their target pages.
+* Parser now dies early if called recursively, instead of producing subtle bugs.
+* (bug 14323) Redirect pages, when viewed with redirect=no, no longer hide the
+  remaining page content.
+* (bug 52587) Maintenance script deleteBatch.php no longer follows redirects
+  in the file namespace and delete the file on the target page. It will still
+  however delete the redirect page.
+* (bug 22683) {{msgnw:}} and other uses of PPFrame::RECOVER_ORIG will correctly
+  recover the original code of extension tags.
+* (bug 65757) MSSQL: Update script drops unnamed constraints to be prepared
+  for future updates. Because it's doing so heuristically, it may fail or drop
+  wrong constraints.
+* (bug 67870) wfShellExec() cuts off stdout at multiples of 8192 bytes.
+* $wgRunJobsAsync now works with private wikis (e.g. read requires login).
+* (bugs 57238, 65206) Blank pages can now be directly created.
+* (bug 69789) Title::getContentModel() now loads from the database when
+  necessary instead of incorrectly returning the default content model.
+* (bug 69249) wfBaseConvert() now works around PHP Bug #50175 when using GMP.
+* (bug 57909) URLs in the externallinks table will no longer have certain
+  characters decoded in the query string.
+* (bug 67368) LESS mixins like .background-image() correctly flip image
+  references for RTL stylesheets now.
+
+=== Action API changes in 1.24 ===
+* action=parse API now supports prop=modules, which provides the list of
+  ResourceLoader modules that should be used to enhance the parsed content.
+* action=query&meta=siteinfo&siprop=interwikimap returns a new "protorel"
+  field which is true if protocol-relative urls can be used to access
+  a particular interwiki map entry.
+* list=logevents now provides logpage, which is the page ID from the
+  logging table, if ids are requested and the user has the permissions.
+* action=edit now requires that appendtext, prependtext, or section=new be used
+  when using the 'redirect' parameter, to prevent clients accidentally
+  overwriting the target page with the content of the redirect.
+* list=logevents will now return an error if both letitle and leprefix are
+  specified.
+* list=logevents has a new parameter, lenamespace, to allow filtering by
+  namespace.
+* action=expandtemplates has a new parameter, prop, and a new output format.
+  The old format is still used if prop isn't provided, but this is deprecated.
+* meta=userinfo can now return the count of unread pages on the watchlist.
+* list=watchlist can now filter by unread status.
+* The deprecated action=parse&prop=languageshtml has been removed.
+* (bug 48071) action=setnotificationtimestamp no longer throws PHP or database
+  errors when no pages are given.
+* (bug 60734) Actions that use ApiPageSet (e.g. purge, watch,
+  setnotificationtimestamp) will now include continuation information when
+  using a generator.
+* Removed 'props' and 'errors' from action=paraminfo, as they have extremely
+  limited use and are generally inaccurate, unmaintained, and impossible to
+  properly maintain.
+* Formats dbg, dump, txt, wddx, and yaml are now deprecated.
+* action=paraminfo now indicates when a parameter is specifying a submodule.
+* The iwurl parameter to prop=iwlinks is deprecated in favor of iwprop=url, for
+  parallelism with prop=langlinks.
+* All tokens should be fetched from action=query&meta=tokens; all other methods
+  of fetching tokens are deprecated. The value needed for meta=tokens's 'type'
+  parameter for each module is documented in the action=help output and is
+  returned from action=paraminfo.
+* New action ClearHasMsg that can be used to clear HasMsg flag.
+* The cmstartsortkey and cmendsortkey parameters to list=categorymembers are
+  deprecated in favor of cmstarthexsortkey and cmendhexsortkey.
+* (bug 63326) Add blockedtimestamp field to output of blockinfo property for
+  the list=allusers and list=users modules.
+* prop=imageinfo no longer requires iiurlwidth to be set when using iiurlparam.
+* Added prop=linkshere, prop=fileusage, and prop=transcludedin, which are
+  roughly equivalent to list=backlinks, list=imageusage, and list=embeddedin
+  but can work on a list of titles (including titles from a generator).
+* prop=redirects can now filter returned redirects by namespace.
+
+=== Action API internal changes in 1.24 ===
+* Methods for handling continuation are added to ApiResult, so actions other
+  than query that use generators can easily support continuation.
+* $wgAPIModules (and the related $wgAPIFormatModules, $wgAPIMetaModules,
+  $wgAPIPropModules, and $wgAPIListModules settings) now allow API modules
+  to be specified using a "module spec" array instead of a plain class name.
+  A "module spec" is an associative array containing at least the 'class' key
+  for the module's class, and optionally a 'factory' key for the factory function
+  to use for the module. This is intended for extensions that want control over
+  the instantiation of their API modules, to allow for proper dependency
+  injection.
+* A new param type 'submodule' is available. Parameters of this type will take
+  the list of valid values from the module's ApiModuleManager for the group
+  corresponding to the parameter name.
+* The 'APIGetPossibleErrors' and 'APIGetResultProperties' hooks are no longer used.
+* API token handling has been rewritten. Any API module using tokens will need
+  to be updated:
+  * ApiBase::needsToken now returns a token type instead of boolean true when a
+    token is needed. Returning true will throw an exception. See documentation
+    of that method for details.
+  * Information for the 'token' parameter is automatically set by ApiBase
+    getFinalParams and getFinalParamDescription.
+  * ApiBase::getTokenSalt has been removed.
+  * The hooks APIQueryInfoTokens, APIQueryRevisionsTokens,
+    APIQueryRecentChangesTokens, APIQueryUsersTokens, and
+    ApiTokensGetTokenTypes are deprecated, but are still called to support
+    backwards-compatible token access.
+* ApiBase::validateLimit and ApiBase::validateTimestamp are now protected.
+* ApiQueryRedirects was removed; prop=redirects is now implemented by
+  ApiQueryBacklinksProp along with the newly-added prop modules.
+* The following methods have been deprecated and may be removed in a future
+  release:
+  * ApiBase::getResultProperties
+  * ApiBase::getFinalResultProperties
+  * ApiBase::addTokenProperties
+  * ApiBase::getRequireOnlyOneParameterErrorMessages
+  * ApiBase::getRequireMaxOneParameterErrorMessages
+  * ApiBase::getRequireAtLeastOneParameterErrorMessages
+  * ApiBase::getTitleOrPageIdErrorMessage
+  * ApiBase::getPossibleErrors
+  * ApiBase::getFinalPossibleErrors
+  * ApiBase::parseErrors
+  * ApiQuery::setGeneratorContinue
+  * ApiQueryBase::checkRowCount
+  * ApiQueryBase::titleToKey
+  * ApiQueryBase::keyToTitle
+  * ApiQueryBase::keyPartToTitle
+  * ApiQueryInfo::getTokenFunctions
+  * ApiQueryInfo::resetTokenCache
+  * ApiQueryInfo::getEditToken
+  * ApiQueryInfo::getDeleteToken
+  * ApiQueryInfo::getProtectToken
+  * ApiQueryInfo::getMoveToken
+  * ApiQueryInfo::getBlockToken
+  * ApiQueryInfo::getUnblockToken
+  * ApiQueryInfo::getEmailToken
+  * ApiQueryInfo::getImportToken
+  * ApiQueryInfo::getWatchToken
+  * ApiQueryInfo::getOptionsToken
+  * ApiQueryRecentChanges::getTokenFunctions
+  * ApiQueryRecentChanges::getPatrolToken
+  * ApiQueryRevisions::getTokenFunctions
+  * ApiQueryRevisions::getRollbackToken
+  * ApiQueryUsers::getTokenFunctions
+  * ApiQueryUsers::getUserrightsToken
+* The following classes have been deprecated and may be removed in a future
+  release:
+  * ApiFormatDbg
+  * ApiFormatDump
+  * ApiFormatTxt
+  * ApiFormatWddx
+  * ApiFormatYaml
+  * ApiTokens
+* The following class constants have been deprecated and may be removed in a
+  future release:
+  * ApiBase::PROP_ROOT
+  * ApiBase::PROP_LIST
+  * ApiBase::PROP_TYPE
+  * ApiBase::PROP_NULLABLE
+
+=== Languages updated in 1.24 ===
+
+MediaWiki supports over 350 languages. Many localisations are updated
+regularly. Below only new and removed languages are listed, as well as
+changes to languages because of Bugzilla reports.
+
+=== Other changes in 1.24 ===
+* The deprecated jquery.delayedBind ResourceLoader module was removed.
+* The deprecated function mw.util.toggleToc was removed.
+* The Special:Search hooks SpecialSearchGo and SpecialSearchResultsAppend
+  were removed as they were unused.
+* (bug 65477) User::pingLimiter() now has an additional profile point varying
+  by action being used.
+* mediawiki.util.$content no longer supports old versions of the Vector,
+  Monobook, Modern and CologneBlue skins that don't yet implement the "mw-body"
+  and/or "mw-body-primary" class name in their html.
+* Added pp_sortkey column to page_props table, so pages can be efficiently
+  queried and sorted by property value (bug 58032).
+  See $wgPagePropsHaveSortkey if you want to postpone the schema change.
+* BREAKING CHANGE: All four built-in MediaWiki skins (Vector, MonoBook, Modern
+  and Cologne Blue) were moved out of MediaWiki core to their own respective
+  repositories. They will be installed with the release tarball, but you must
+  install them separately if installing MediaWiki from source code. A warning
+  message displayed until you do it should guide you through the process. See
+  also <https://www.mediawiki.org/wiki/Manual:Skin_configuration>.
+* BREAKING CHANGE: Skins built for MediaWiki 1.15 and earlier that do not use
+  the "headelement" template key are no longer supported. Setting
+  $useHeadElement = false; is no longer supported and will not cause old keys
+  like "headlinks", "skinnameclass", etc. to be defined.
+* BREAKING CHANGE: The files commonElements.css, commonContent.css and
+  commonInterface.css (in skins/common/) have been removed. Skins may no longer
+  rely on their presence and include them in their style modules. ResourceLoader
+  modules introduced in MediaWiki 1.23 should be loaded instead:
+  - skins/common/commonElements.css  → 'mediawiki.skinning.elements' module
+  - skins/common/commonContent.css   → 'mediawiki.skinning.content' module
+  - skins/common/commonInterface.css → 'mediawiki.skinning.interface' module
+* The deprecated 'SpecialVersionExtensionTypes' hook was removed.
+* (bug 63891) Add 'X-Robots-Tag: noindex' header in action=render pages.
+* SpecialPage no longer supports the syntax for invoking wfSpecial*() functions.
+  Special pages should subclass SpecialPage and implement the execute() method.
+* (bug 63755) The deprecated constants RC_MOVE and RC_MOVE_OVER_REDIRECT were
+  removed.
+* Special:MostLinkedTemplates has been renamed to Special:MostTranscludedPages.
+* The skin autodiscovery mechanism has been deprecated and will be removed in
+  MediaWiki 1.25. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery
+  for migration guide for creators and users of custom skins that relied on it.
+* ResourceLoaderFileModule#getAllStyleFiles now returns all style files and all
+  skin style files used by the module.
+* Removed getLang() from IContextSource and subclasses. (deprecated since 1.19)
+* Removed setLang() from subclasses of IContextSource. (deprecated since 1.19)
+* Removed WebRequest::escapeAppendQuery(). (deprecated since 1.20)
+* Removed info(), purge(), revert() and rollback() from the Article class; they
+  have since become subclasses of the Action class. (deprecated since 1.19)
+* SearchEngineReplacePrefixesComplete hook was removed.
+* The "jquery.json" module has been deprecated. Use the "json" module instead.
+* Removed HTMLForm::addJS(). (deprecated since 1.18)
+* Removed LogEventsList::showHeader(). (deprecated since 1.19)
+* Removed ImageGalleryBase::useSkin(). (deprecated since 1.18)
+* Removed DatabaseMysqlBase::getLagFromProcesslist(). (deprecated since 1.19)
+* Removed LoadBalancer::closeConnecton(). (deprecated since 1.18)
+* Removed ApiBase::createContext(). (deprecated since 1.19)
+* BREAKING CHANGE: The undocumented Special{$this->getName()}BeforeFormDisplay
+  set of hooks has been removed and replaced by a single new hook
+  SpecialPageBeforeFormDisplay.
+* (bug 65781) Removed block warning on included {{Special:Contributions}}
+* Removed Skin::makeGlobalVariablesScript(). (deprecated since 1.19)
+* Removed MWNamespace::isMain(). (deprecated since 1.19)
+* Removed Preferences::loadOldSearchNs(). (deprecated since 1.19)
+* Removed OutputPage::getStatusMessage(). (deprecated since 1.18)
+* Removed OutputPage::isUserJsAllowed(). (deprecated since 1.18)
+* Removed Title::updateTitleProtection(). (deprecated since 1.19)
+* Removed ParserOptions::setSkin(). (deprecated since 1.19)
+* Removed Title::escapeCanonicalURL(). (deprecated since 1.19)
+* Removed Title::escapeLocalURL(). (deprecated since 1.19)
+* Removed Title::escapeFullURL(). (deprecated since 1.19)
+* Removed User::isValidEmailAddr(). (deprecated since 1.18)
+* Removed Title::getEscapedText(). (deprecated since 1.19)
+* Removed Language::getFallbackLanguageCode(). (deprecated since 1.19)
+* Removed WikiPage::isBigDeletion(). (deprecated since 1.19)
+* Removed MWInit class which contained functions related to a now discontinued
+  PHP compiler called hphpc. (deprecated since 1.22)
+* ApiResult::enableSizeCheck() and disableSizeCheck() are now obsolete.
+* Removed ResourceLoaderGetStartupModules hook. (deprecated since 1.23)
+* Removed getFormFields(), onSubmit() and onSuccess() from FormlessAction, as
+  these were meant specifically for FormAction instead.
+* Removed Action::execute().
+* Removed AjaxAddScript which has been obsolete since ResourceLoader and
+  is unused by any modern extension.
+* Removed maintenance/nextJobDB.php; no longer in use.
+* Removed global function wfViewPrevNext(). (deprecated since 1.19)
+* Removed global function xmlsafe() from Export.php. (moved to OAIRepo extension)
+* Removed Title::userCanRead(). (deprecated since 1.19)
+* Removed maintenance script importTextFile.php. Use edit.php script instead.
+* A _from_namespace field has been added to the templatelinks, pagelinks,
+  and filelinks tables. Run update.php to apply this change to the schema.
+* Removed File::sha1Base36(). (deprecated since 1.19)
+* Removed File::getPropsFromPath(). (deprecated since 1.19)
+* Removed functions blockedPage(), noCreatePermission(), readOnlyPage() and
+  userNotLoggedInPage() from EditPage.php. (deprecated since 1.19)
+* Removed functions getContent(), getPreloadedText(), mergeChangesInto() and
+  setPreloadedText() from EditPage.php. (deprecated since 1.21)
+* Removed global functions wfArrayLookup(), wfArrayMerge(), wfDebugDieBacktrace()
+  and wfTime(). (deprecated since 1.22)
+* Browser support for Internet Explorer 6 and 7 lowered from Grade A to Grade C,
+  meaning that JavaScript is no longer executed in these browser versions.
+* Browser support for Opera 11 lowered from Grade A to Grade C.
+* Removed IEFixes module which existed purely to provide support for MSIE versions
+* Deprecated SpecialPageFactory::getList() in favor of
+  SpecialPageFactory::getNames()
+  below 7 (conditionally loaded only for those browsers).
+* Action::checkCanExecute() no longer has a return value.
+* Removed cleanupForIRC(), loadFromCurRow(), newFromCurRow(), notifyRC2UDP()
+  and sendToUDP() from RecentChange.php. (deprecated since 1.22)
+* Removed EnhancedChangesList::arrow(), sideArrow(), downArrow(), spacerArrow().
+* Removed Xml::namespaceSelector(). (deprecated since 1.19)
+* Removed WikiPage::estimateRevisionCount(). (deprecated since 1.19)
+* MYSQL: Enum item added to "major MIME type" columns.
+  Running update.php on MySQL < v5.1 may result in heavy processing.
+* RSS and Atom feeds generated by MediaWiki no longer include a fallback
+  stylesheet. It was ignored by most browsers these days anyway.
+* SpecialSearchNoResults hook has been removed. SpecialSearchResults is now
+  called unconditionally.
+* TablePager::getBody() is now 'final' and can't be overridden in subclasses.
+* TablePager::getBody() is deprecated, use getBodyOutput() or getFullOutput().
+* Added $outputPage parameter to the SkinTemplateGetLanguageLink hook.
+* log_page for move log entries store the original page ID, rather than that
+  of the new redirect page. This is not retroactive.
+* LCStoreAccel was removed. $wgLocalisationCacheConf can no longer be set to
+  use this store class.
+* Html::infoBox() no longer accepts paths relative to skins/common/images/.
+* Deprecated defunct Skin::getCommonStylePath().
+* Some extensions had their ResourceLoader modules depend on the "mediawiki"
+  and "jquery" modules. In the past, this behavior was undefined, now it will
+  throw an error.
+* Removed BagOStuff::replace(). (deprecated since 1.23)
+* In Linker.php, link(), linkText() and makeBrokenImageLinkObj() now display
+  warnings if their first parameter is not a Title object. Also makeImageLink()
+  now requires a Parser as its first parameter.
+* (bug 67368) LESS functions embed() and embeddable(), added in MediaWiki 1.23
+  and broken by design, have been removed. Use appropriate LESS mixins instead.
+* Removed cssjanus.py from maintenance directory as it was unused.
+* Removed maintenance/purgeOldText.inc and the PurgeRedundantText() function
+  it contained (superseded by Maintenance::purgeRedundantText() in 1.16).
+  The purgeOldText.php maintenance script has been retained.
+* PHPUnit tests can be found by directory discovery, by adding the directory
+  path from your UnitTestsList callback. Older versions of MediaWiki core will
+  barf at this usage.
+
+==== Renamed classes ====
+* CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
+* CLDRPluralRuleConverter_Fragment to CLDRPluralRuleConverterFragment
+* CLDRPluralRuleConverter_Operator to CLDRPluralRuleConverterOperator
+* CLDRPluralRuleEvaluator_Range to CLDRPluralRuleEvaluatorRange
+* CSSJanus_Tokenizer to CSSJanusTokenizer
+* MediaWiki_I18N to MediaWikiI18N
+* Parser_DiffTest to ParserDiffTest
+* RevDel_ArchiveItem to RevDelArchiveItem
+* RevDel_ArchiveList to RevDelArchiveList
+* RevDel_ArchivedFileItem to RevDelArchivedFileItem
+* RevDel_ArchivedFileList to RevDelArchivedFileList
+* RevDel_ArchivedRevisionItem to RevDelArchivedRevisionItem
+* RevDel_FileItem to RevDelFileItem
+* RevDel_FileList to RevDelFileList
+* RevDel_Item to RevDelItem
+* RevDel_List to RevDelList
+* RevDel_LogItem to RevDelLogItem
+* RevDel_LogList to RevDelLogList
+* RevDel_RevisionItem to RevDelRevisionItem
+* RevDel_RevisionList to RevDelRevisionList
+* WebInstaller_Complete to WebInstallerComplete
+* WebInstaller_Copying to WebInstallerCopying
+* WebInstaller_DBConnect to WebInstallerDBConnect
+* WebInstaller_DBSettings to WebInstallerDBSettings
+* WebInstaller_Document to WebInstallerDocument
+* WebInstaller_ExistingWiki to WebInstallerExistingWiki
+* WebInstaller_Install to WebInstallerInstall
+* WebInstaller_Language to WebInstallerLanguage
+* WebInstaller_Name to WebInstallerName
+* WebInstaller_Options to WebInstallerOptions
+* WebInstaller_Readme to WebInstallerReadme
+* WebInstaller_ReleaseNotes to WebInstallerReleaseNotes
+* WebInstaller_Restart to WebInstallerRestart
+* WebInstaller_Upgrade to WebInstallerUpgrade
+* WebInstaller_UpgradeDoc to WebInstallerUpgradeDoc
+* WebInstaller_Welcome to WebInstallerWelcome
+
+==== Removed classes ====
+* IPBlockForm - Use SpecialBlock directly
+* WatchlistEditor - Use SpecialEditWatchlist directly
+* FormatExif - Use FormatMetadata directly
+* RevertFileAction - Use RevertAction directly
+* HistoryPage - Use HistoryAction directly
+* RawPage - Use RawAction directly
+* StubContLang - Use Language::factory() instead
+* XMLReader2 - Use XMLReader directly
+* ResourceLoaderLESSFunctions - No longer in use, not intended for public usage
+
+==== Removed files ====
+The skins/common/ directory, previously containing some assets intended to be
+used by skins and a number of legacy styles and scripts, has been removed. Its
+contents have been deleted or relocated into the resources/ directory. Full list
+of files that are no longer available follows.
+
+* skins/common/ajax.js
+* skins/common/commonContent.css
+* skins/common/commonElements.css
+* skins/common/commonInterface.css
+* skins/common/commonPrint.css
+* skins/common/config-cc.css
+* skins/common/config.css
+* skins/common/config.js
+* skins/common/feed.css
+* skins/common/IEFixes.js
+* skins/common/oldshared.css
+* skins/common/protect.js
+* skins/common/shared.css
+* skins/common/upload.js
+* skins/common/wikibits.js
+* skins/common/images/add.png
+* skins/common/images/ajax-loader.gif
+* skins/common/images/arrow_disabled_first_25.png
+* skins/common/images/arrow_disabled_last_25.png
+* skins/common/images/arrow_disabled_left_25.png
+* skins/common/images/arrow_disabled_right_25.png
+* skins/common/images/arrow_first_25.png
+* skins/common/images/arrow_last_25.png
+* skins/common/images/arrow_left_25.png
+* skins/common/images/arrow_right_25.png
+* skins/common/images/Arr_.png
+* skins/common/images/Arr_d.png
+* skins/common/images/Arr_l.png
+* skins/common/images/Arr_r.png
+* skins/common/images/Arr_u.png
+* skins/common/images/bullet.gif
+* skins/common/images/button_bold.png
+* skins/common/images/button_extlink.png
+* skins/common/images/button_headline.png
+* skins/common/images/button_hr.png
+* skins/common/images/button_image.png
+* skins/common/images/button_italic.png
+* skins/common/images/button_link.png
+* skins/common/images/button_media.png
+* skins/common/images/button_nowiki.png
+* skins/common/images/button_sig.png
+* skins/common/images/button_template.png
+* skins/common/images/cc-0.png
+* skins/common/images/cc-by-nc-sa.png
+* skins/common/images/cc-by-sa.png
+* skins/common/images/cc-by.png
+* skins/common/images/Checker-16x16.png
+* skins/common/images/closewindow.png
+* skins/common/images/closewindow19x19.png
+* skins/common/images/critical-32.png
+* skins/common/images/diffunderline.gif
+* skins/common/images/download-32.png
+* skins/common/images/feed-icon.png
+* skins/common/images/feed-icon.svg
+* skins/common/images/gnu-fdl.png
+* skins/common/images/help-question-hover.gif
+* skins/common/images/help-question.gif
+* skins/common/images/info-32.png
+* skins/common/images/link_icon.gif
+* skins/common/images/magnify-clip-rtl.png
+* skins/common/images/magnify-clip.png
+* skins/common/images/mediawiki.png
+* skins/common/images/nextredirectltr.png
+* skins/common/images/nextredirectrtl.png
+* skins/common/images/poweredby_mediawiki_88x31.png
+* skins/common/images/public-domain.png
+* skins/common/images/question-small.png
+* skins/common/images/question.svg
+* skins/common/images/redirectltr.png
+* skins/common/images/redirectrtl.png
+* skins/common/images/remove.png
+* skins/common/images/spinner.gif
+* skins/common/images/tick-32.png
+* skins/common/images/tipsy-arrow.gif
+* skins/common/images/tooltip_icon.png
+* skins/common/images/warning-32.png
+* skins/common/images/wiki.png
+* skins/common/images/Zoom_sans.gif
+* skins/common/images/ar/button_bold.png
+* skins/common/images/ar/button_headline.png
+* skins/common/images/ar/button_italic.png
+* skins/common/images/ar/button_link.png
+* skins/common/images/ar/button_nowiki.png
+* skins/common/images/be-tarask/button_bold.png
+* skins/common/images/be-tarask/button_italic.png
+* skins/common/images/be-tarask/button_link.png
+* skins/common/images/cyrl/button_bold.png
+* skins/common/images/cyrl/button_italic.png
+* skins/common/images/cyrl/button_link.png
+* skins/common/images/de/button_bold.png
+* skins/common/images/de/button_italic.png
+* skins/common/images/fa/button_bold.png
+* skins/common/images/fa/button_headline.png
+* skins/common/images/fa/button_italic.png
+* skins/common/images/fa/button_link.png
+* skins/common/images/fa/button_nowiki.png
+* skins/common/images/icons/fileicon-c.png
+* skins/common/images/icons/fileicon-cpp.png
+* skins/common/images/icons/fileicon-deb.png
+* skins/common/images/icons/fileicon-djvu.png
+* skins/common/images/icons/fileicon-djvu.xcf
+* skins/common/images/icons/fileicon-dvi.png
+* skins/common/images/icons/fileicon-exe.png
+* skins/common/images/icons/fileicon-h.png
+* skins/common/images/icons/fileicon-html.png
+* skins/common/images/icons/fileicon-iso.png
+* skins/common/images/icons/fileicon-java.png
+* skins/common/images/icons/fileicon-mid.png
+* skins/common/images/icons/fileicon-mov.png
+* skins/common/images/icons/fileicon-o.png
+* skins/common/images/icons/fileicon-ogg.png
+* skins/common/images/icons/fileicon-ogg.xcf
+* skins/common/images/icons/fileicon-pdf.png
+* skins/common/images/icons/fileicon-ps.png
+* skins/common/images/icons/fileicon-psd.png
+* skins/common/images/icons/fileicon-rm.png
+* skins/common/images/icons/fileicon-rpm.png
+* skins/common/images/icons/fileicon-svg.png
+* skins/common/images/icons/fileicon-tar.png
+* skins/common/images/icons/fileicon-tex.png
+* skins/common/images/icons/fileicon-ttf.png
+* skins/common/images/icons/fileicon-txt.png
+* skins/common/images/icons/fileicon.png
+* skins/common/images/ksh/button_S_italic.png
+
 
 == MediaWiki 1.23 ==
 
diff --git a/RELEASE-NOTES-1.24 b/RELEASE-NOTES-1.24
deleted file mode 100644 (file)
index 03cf277..0000000
+++ /dev/null
@@ -1,756 +0,0 @@
-Security reminder: If you have PHP's register_globals option set, you must
-turn it off. MediaWiki will no longer work with it enabled.
-
-== MediaWiki 1.24 ==
-
-THIS IS NOT A RELEASE YET
-
-MediaWiki 1.24 is an alpha-quality branch and is not recommended for use in
-production.
-
-=== Configuration changes in 1.24 ===
-* MediaWiki will no longer run if register_globals is enabled. It has been
-  deprecated for 5 years now, and was removed in PHP 5.4. For more information
-  about why, see <https://www.mediawiki.org/wiki/register_globals>.
-* MediaWiki now requires PHP's iconv extension. openSUSE users may need to
-  install the php5-iconv package. Users of other systems may need to add
-  extension=iconv.so to php.ini or recompile PHP without --without-iconv.
-* MediaWiki will no longer function if magic quotes are enabled. It has
-  been deprecated for 5 years now, and was removed in PHP 5.4.
-* The server's canonical hostname is available as $wgServerName, which is
-  exposed in both mw.config and ApiQuerySiteInfo.
-* Introduced $wgPagePropsHaveSortkey as a backwards-compatibility switch,
-  for using the old schema of the page_props table, in case the respective
-  schema update was not applied.
-* $wgSearchEverythingOnlyLoggedIn was removed as the 'searcheverything'
-  user option was removed. Use $wgNamespacesToBeSearchedDefault instead or
-  if you used to have $wgDefaultUserOptions['searcheverything'] = 1.
-* $wgMasterWaitTimeout has been deprecated.
-* $wgDBClusterTimeout has been removed.
-* $wgProxyKey has been removed. It is no longer used by MediaWiki core.
-  Ensure $wgSecretKey is set in LocalSettings.php.
-* $wgExtraInterlanguageLinkPrefixes is a new configuration variable that
-  contains an array of interwiki prefixes that should be treated as language
-  prefixes (i.e. turned into interlanguage links when $wgInterwikiMagic is set
-  to true).
-* $wgParserTestRemote has been removed.
-* $wgCountTotalSearchHits has been removed. If you're concerned about efficiency
-  of search, you should use something like CirrusSearch instead of built in
-  search.
-* Users in the 'sysop' group have access to Special:MergeHistory by default.
-* $wgFileStore was removed after having been deprecated in 1.17. Alternative
-  configurations are $wgDeletedDirectory and $wgHashedUploadDirectory.
-* The deprecated $wgUseCommaCount variable has been removed.
-* $wgEnableSorbs and $wgSorbsUrl have been removed.
-* The UserCryptPassword and UserComparePassword hooks are no longer called.
-  Any extensions using them must be updated to use the Password Hashing API.
-* $wgCompiledFiles has been removed.
-* $wgSortSpecialPages was removed, the listing on Special:SpecialPages is
-  now always sorted.
-* $wgSpecialPages may now use callback functions as an alternative to plain class names.
-  This allows more control over constructor parameters.
-* $wgHTCPMulticastAddress, $wgHTCPMulticastRouting and $wgHTCPPort were removed.
-* $wgRC2UDPAddress, $wgRC2UDPInterwikiPrefix, $wgRC2UDPOmitBots, $wgRC2UDPPort
-  and $wgRC2UDPPrefix have been removed.
-* The default password type for MediaWiki has been changed from MD5 to PBKDF2.
-  Password hashes will automatically be updated as users log in. If necessary, the
-  old MD5 hashing can be restored by changing $wgPasswordDefault to 'B'. In addition,
-  there is a maintenance script wrapOldPassword.php that can wrap all passwords in
-  PBKDF2 (or the hashing algorithm of your choice) if you don't want to wait for your
-  users to log in.
-* $wgImportSources can now either be a regular array, or an associative map
-  specifying subprojects on the interwiki map of the target wiki, or a mix of
-  the two. Existing configurations will still work.
-* Users must be able to edit through a page's protection to be able to delete it.
-* The default thumb size ($wgDefaultUserOptions['thumbsize']) is now 300px, up from
-  180px. If you have altered the number of entries in $wgThumbLimits for your wiki, you
-  may need to adjust your default user settings to compensate for the index change.
-* $wgDeferredUpdateList is now deprecated, you should use DeferredUpdates::addUpdate()
-  instead.
-* $wgCanonicalLanguageLinks has been removed. Per Google recommendations, we
-  will not send a rel=canonical pointing to a variant-neutral page, however
-  we will send rel=alternate.
-* $wgResourceLoaderLESSFunctions has been deprecated and will be removed in the future.
-* $wgGoToEdit has been removed. Use the SpecialSearchNogomatch hook for similar
-  functionality.
-
-=== New features in 1.24 ===
-* Added new hook WatchlistEditorBeforeFormRender, allowing subscribers to
-  manipulate the list of pages and/or preload lots of data at once.
-* Added new argument &$link in hook WatchlistEditorBuildRemoveLine, allowing the
-  link to the title to be changed.
-* Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
-  WhatLinksHere entries.
-* Added a new hook, "ContentGetParserOutput", to customize parser output for
-  a given content object.
-* Deprecated the hook "ShowRawCssJs", use "ContentGetParserOutput" instead.
-* HTMLForm's HTMLTextField now supports the 'url' type.
-* HTMLForm fields may now be dynamically hidden based on the values of other
-  fields in the form.
-* HTMLForm now supports multiple copies of an input field or set of input
-  fields, e.g. the form may request "one or more usernames" without having to
-  have the user enter delimited list of names into a text field.
-* Added a new hook, "SidebarBeforeOutput", to allow to edit the structure of
-  the sidebar just before its display.
-* (bug 49156) Added the mediawiki.cookie ResourceLoader module, which wraps
-  jquery.cookie so that getting/setting a cookie is syntactically and
-  functionally similar to using the WebRequest::getCookie() and
-  WebResponse::setcookie() methods.
-* (bug 44740) jQuery upgraded from 1.8.3 to 1.11.1. A new configuration option,
-  $wgIncludejQueryMigrate, also loads the jQuery Migrate hack to let extensions
-  and gadgets use the long-deprecated functions that were removed in jQuery 1.9.
-  This option is turned off by default, and will be removed in MediaWiki 1.25.
-* (bug 47076) jQuery UI upgraded from 1.8.24 to 1.9.2.
-* Changes to content typography (fonts, etc.). See
-  https://www.mediawiki.org/wiki/Typography_refresh for further information.
-* WikitextContent will now render redirects with the expected "redirect"
-  header, rather than as an ordered list. Code calling Article::viewRedirect
-  can probably be changed to no longer special-case redirects.
-* Header font set to a serif font stack. See
-  https://www.mediawiki.org/wiki/Typography_refresh for further information.
-* (bug 65567) Added a new hook, "BeforeHttpsRedirect", to allow cancellation of
-  the HTTP to HTTPS redirect due to forceHTTPS cookie, userRequires, etc. This
-  is only for page views, since this hook doesn't affect UserLogin, OAuth,
-  CentralAuth, etc. ATTENTION: This hook is likely to be removed soon due to
-  overall design of the system.
-* (bug 17367) It is now possible to add pages to your watchlist from
-  Special:UnwatchedPages without reloading the special page.
-* New methods setVolatile and isVolatile are added to PPFrame, so that
-  extensions such as Cite.php can mark that their output is volatile and
-  shouldn't be cached.
-* (bug 52817) Advanced search options are now saved on the search page itself,
-  rather than in a dedicated pane in the preferences panel.
-* (bug 44591) The dropdown actions menu (little triangle next to page tabs) in
-  the Vector skin has gained a label that should make it more discoverable.
-* MWCryptHKDF added for fast, cryptographically secure random number generation
-  that won't deplete openssl's entropy pool.
-* ResourceLoader: File modules can now provide a skip function that uses an
-  inline feature test to bypass loading of the module.
-* (bug 20210) Special pages may now provide autocompletion of their subpage
-  names in search suggestions. Right now the only useful implementation is in
-  Special:Log, but more are to come.
-* Special:MostLinkedTemplates is no longer limited to transclusions from the
-  Template namespace.
-* Skins can now use 'remoteSkinPath' when defining ResourceLoader modules.
-  This works the same as 'remoteExtPath' but is relative to the skins/ folder
-  instead of the extensions/ folder.
-* Added the json2.js polyfill for the ES5 JSON.stringify and JSON.parse methods.
-  Exposed as module "json" with a skip function to optimise loading.
-* Extensions and skins may now use 'namemsg' in $wgExtensionCredits in addition
-  to 'name', to allow for the name to be localizable. 'name' should still be
-  specified for backwards-compatibility and to define the path Special:Version
-  uses to find extension license information.
-* Browser tests are now included to verify basic wiki functionality in developer
-  environments. For details on running tests, see tests/browser/README.mediawiki.
-* Upgrade jStorage to v0.4.10.
-* {{!}} is now a magic word that produces the | character. This removes the need
-  for Template:! for purposes such as passing pipes inside of parameters.
-* (bug 20790) The block log snippet on Special:Contributions and while
-  editing user and user talk pages now works for IP range blocks.
-* (bug 9360) Added ability to change the page language for MediaWiki pages using
-  Special:PageLanguage. All pages are set to wiki language by default.
-  The feature needs to be enabled with $wgPageLanguageUseDB=true and
-  permission needs to be set for 'pagelang'.
-* Upgrade Moment.js to v2.8.3.
-* (bug 67042) Added support for the HTML5 <rtc> tag for East Asian typography.
-* Upgrade Sinon.JS to 1.10.3.
-* Added the es5-shim polyfill for older or non-compliant javascript engines.
-* Upgrade jQuery Cookie to v1.3.1.
-* (bug 20476) Add a "viewsuppressed" user right to be able to view
-  suppressed content but not suppress it ("suppressrevision" right).
-* (bug 66440) The MediaWiki web installer will now allow you to choose the skins
-  to enable (from the ones included in download tarball) and decide which one
-  should be the default.
-* (bug 68085, 68802) Links like [[localInterwikiPrefix:languageCode:pageTitle]],
-  where localInterwikiPrefix is a member of the $wgLocalInterwikis array, will
-  no longer be displayed in the sidebar when $wgInterwikiMagic is true. In a
-  similar way, links like [[localInterwikiPrefix:File:Image.png]] and
-  [[localInterwikiPrefix:Category:Hello]] will now render as regular links, and
-  will not include the file or add the page to the category.
-* New special page, MyLanguage, to redirect users to subpages with localised
-  versions of a page. (Integrated from Extension:Translate)
-* MediaWiki now supports multiple password types, including bcrypt and PBKDF2.
-  The default type can be changed with $wgPasswordDefault and the type
-  configurations can be changed with $wgPasswordConfig.
-* Skins can now define custom styles for default ResourceLoader modules using
-  the $wgResourceModuleSkinStyles global. See the Vector skin for examples.
-* (bug 4488) There is now a preference to watch pages where the user has
-  rollbacked an edit by default.
-* (bug 15484) Users will now be redirected to the login page when they need to
-  log in, rather than being shown a page asking them to log in and having to click
-  another link to actually get to the login page.
-* A JsonContent and JsonContentHandler were added for extensions to extend.
-* (bug 35045) Redirects to sections will now update the URL in browser's address
-  bar using the HTML5 History API. When [[Dog]] redirects to [[Animals#Dog]],
-  the user will now see "Animals#Dog" in their browser instead of "Dog#Dog".
-* API token handling has been rewritten. Any API module using tokens will need
-  to be updated. See the entry below under "Action API internal changes".
-* Added HTMLAutoCompleteSelectField.
-* Added a new hook, "SkinPreloadExistence", to allow extensions to add titles to
-  link existence cache before the page is rendered.
-* Config::set() was moved to its own interface, MutableConfig. GlobalVarConfig::set()
-  is now deprecated, does not implement MutableConfig.
-* A MutableConfig named HashConfig was added, that stores an array of configuration
-  settings.
-* (bug 69418) A MultiConfig implementation was added that supports fallback
-  to multiple Config instances.
-* Update CSSJanus to v1.1.0.
-* Added FormatJson::parse() returning status with result or localized error message
-
-=== Bug fixes in 1.24 ===
-* (bug 50572) MediaWiki:Blockip should support gender
-* (bug 49116) Footer copyright notice is now always displayed in user language
-  rather than content language (same as copyright notice for editing interface).
-* (bug 62258) A bug was fixed in File::getUnscaledThumb when a height
-  restriction was present in the parameters. Images with both the "frame"
-  option and a size specification set will now always ignore the provided
-  size and display an unscaled image, as the documentation has always
-  claimed it would.
-* (bug 39035) Improved Vector skin performance by removing collapsibleNav,
-  which used to collapse some sidebar elements by default.
-  This removes -list id suffixes like p-lang-list: instead of using things like
-  #p-lang-list, you can do #p-lang .body ul.
-* (bug 890) Links in Special:RecentChanges and Special:Watchlist no longer
-  follow redirects to their target pages.
-* Parser now dies early if called recursively, instead of producing subtle bugs.
-* (bug 14323) Redirect pages, when viewed with redirect=no, no longer hide the
-  remaining page content.
-* (bug 52587) Maintenance script deleteBatch.php no longer follows redirects
-  in the file namespace and delete the file on the target page. It will still
-  however delete the redirect page.
-* (bug 22683) {{msgnw:}} and other uses of PPFrame::RECOVER_ORIG will correctly
-  recover the original code of extension tags.
-* (bug 65757) MSSQL: Update script drops unnamed constraints to be prepared
-  for future updates. Because it's doing so heuristically, it may fail or drop
-  wrong constraints.
-* (bug 67870) wfShellExec() cuts off stdout at multiples of 8192 bytes.
-* $wgRunJobsAsync now works with private wikis (e.g. read requires login).
-* (bugs 57238, 65206) Blank pages can now be directly created.
-* (bug 69789) Title::getContentModel() now loads from the database when
-  necessary instead of incorrectly returning the default content model.
-* (bug 69249) wfBaseConvert() now works around PHP Bug #50175 when using GMP.
-* (bug 57909) URLs in the externallinks table will no longer have certain
-  characters decoded in the query string.
-* (bug 67368) LESS mixins like .background-image() correctly flip image
-  references for RTL stylesheets now.
-
-=== Action API changes in 1.24 ===
-* action=parse API now supports prop=modules, which provides the list of
-  ResourceLoader modules that should be used to enhance the parsed content.
-* action=query&meta=siteinfo&siprop=interwikimap returns a new "protorel"
-  field which is true if protocol-relative urls can be used to access
-  a particular interwiki map entry.
-* list=logevents now provides logpage, which is the page ID from the
-  logging table, if ids are requested and the user has the permissions.
-* action=edit now requires that appendtext, prependtext, or section=new be used
-  when using the 'redirect' parameter, to prevent clients accidentally
-  overwriting the target page with the content of the redirect.
-* list=logevents will now return an error if both letitle and leprefix are
-  specified.
-* list=logevents has a new parameter, lenamespace, to allow filtering by
-  namespace.
-* action=expandtemplates has a new parameter, prop, and a new output format.
-  The old format is still used if prop isn't provided, but this is deprecated.
-* meta=userinfo can now return the count of unread pages on the watchlist.
-* list=watchlist can now filter by unread status.
-* The deprecated action=parse&prop=languageshtml has been removed.
-* (bug 48071) action=setnotificationtimestamp no longer throws PHP or database
-  errors when no pages are given.
-* (bug 60734) Actions that use ApiPageSet (e.g. purge, watch,
-  setnotificationtimestamp) will now include continuation information when
-  using a generator.
-* Removed 'props' and 'errors' from action=paraminfo, as they have extremely
-  limited use and are generally inaccurate, unmaintained, and impossible to
-  properly maintain.
-* Formats dbg, dump, txt, wddx, and yaml are now deprecated.
-* action=paraminfo now indicates when a parameter is specifying a submodule.
-* The iwurl parameter to prop=iwlinks is deprecated in favor of iwprop=url, for
-  parallelism with prop=langlinks.
-* All tokens should be fetched from action=query&meta=tokens; all other methods
-  of fetching tokens are deprecated. The value needed for meta=tokens's 'type'
-  parameter for each module is documented in the action=help output and is
-  returned from action=paraminfo.
-* New action ClearHasMsg that can be used to clear HasMsg flag.
-* The cmstartsortkey and cmendsortkey parameters to list=categorymembers are
-  deprecated in favor of cmstarthexsortkey and cmendhexsortkey.
-* (bug 63326) Add blockedtimestamp field to output of blockinfo property for
-  the list=allusers and list=users modules.
-* prop=imageinfo no longer requires iiurlwidth to be set when using iiurlparam.
-* Added prop=linkshere, prop=fileusage, and prop=transcludedin, which are
-  roughly equivalent to list=backlinks, list=imageusage, and list=embeddedin
-  but can work on a list of titles (including titles from a generator).
-* prop=redirects can now filter returned redirects by namespace.
-
-=== Action API internal changes in 1.24 ===
-* Methods for handling continuation are added to ApiResult, so actions other
-  than query that use generators can easily support continuation.
-* $wgAPIModules (and the related $wgAPIFormatModules, $wgAPIMetaModules,
-  $wgAPIPropModules, and $wgAPIListModules settings) now allow API modules
-  to be specified using a "module spec" array instead of a plain class name.
-  A "module spec" is an associative array containing at least the 'class' key
-  for the module's class, and optionally a 'factory' key for the factory function
-  to use for the module. This is intended for extensions that want control over
-  the instantiation of their API modules, to allow for proper dependency
-  injection.
-* A new param type 'submodule' is available. Parameters of this type will take
-  the list of valid values from the module's ApiModuleManager for the group
-  corresponding to the parameter name.
-* The 'APIGetPossibleErrors' and 'APIGetResultProperties' hooks are no longer used.
-* API token handling has been rewritten. Any API module using tokens will need
-  to be updated:
-  * ApiBase::needsToken now returns a token type instead of boolean true when a
-    token is needed. Returning true will throw an exception. See documentation
-    of that method for details.
-  * Information for the 'token' parameter is automatically set by ApiBase
-    getFinalParams and getFinalParamDescription.
-  * ApiBase::getTokenSalt has been removed.
-  * The hooks APIQueryInfoTokens, APIQueryRevisionsTokens,
-    APIQueryRecentChangesTokens, APIQueryUsersTokens, and
-    ApiTokensGetTokenTypes are deprecated, but are still called to support
-    backwards-compatible token access.
-* ApiBase::validateLimit and ApiBase::validateTimestamp are now protected.
-* ApiQueryRedirects was removed; prop=redirects is now implemented by
-  ApiQueryBacklinksProp along with the newly-added prop modules.
-* The following methods have been deprecated and may be removed in a future
-  release:
-  * ApiBase::getResultProperties
-  * ApiBase::getFinalResultProperties
-  * ApiBase::addTokenProperties
-  * ApiBase::getRequireOnlyOneParameterErrorMessages
-  * ApiBase::getRequireMaxOneParameterErrorMessages
-  * ApiBase::getRequireAtLeastOneParameterErrorMessages
-  * ApiBase::getTitleOrPageIdErrorMessage
-  * ApiBase::getPossibleErrors
-  * ApiBase::getFinalPossibleErrors
-  * ApiBase::parseErrors
-  * ApiQuery::setGeneratorContinue
-  * ApiQueryBase::checkRowCount
-  * ApiQueryBase::titleToKey
-  * ApiQueryBase::keyToTitle
-  * ApiQueryBase::keyPartToTitle
-  * ApiQueryInfo::getTokenFunctions
-  * ApiQueryInfo::resetTokenCache
-  * ApiQueryInfo::getEditToken
-  * ApiQueryInfo::getDeleteToken
-  * ApiQueryInfo::getProtectToken
-  * ApiQueryInfo::getMoveToken
-  * ApiQueryInfo::getBlockToken
-  * ApiQueryInfo::getUnblockToken
-  * ApiQueryInfo::getEmailToken
-  * ApiQueryInfo::getImportToken
-  * ApiQueryInfo::getWatchToken
-  * ApiQueryInfo::getOptionsToken
-  * ApiQueryRecentChanges::getTokenFunctions
-  * ApiQueryRecentChanges::getPatrolToken
-  * ApiQueryRevisions::getTokenFunctions
-  * ApiQueryRevisions::getRollbackToken
-  * ApiQueryUsers::getTokenFunctions
-  * ApiQueryUsers::getUserrightsToken
-* The following classes have been deprecated and may be removed in a future
-  release:
-  * ApiFormatDbg
-  * ApiFormatDump
-  * ApiFormatTxt
-  * ApiFormatWddx
-  * ApiFormatYaml
-  * ApiTokens
-* The following class constants have been deprecated and may be removed in a
-  future release:
-  * ApiBase::PROP_ROOT
-  * ApiBase::PROP_LIST
-  * ApiBase::PROP_TYPE
-  * ApiBase::PROP_NULLABLE
-
-=== Languages updated in 1.24 ===
-
-MediaWiki supports over 350 languages. Many localisations are updated
-regularly. Below only new and removed languages are listed, as well as
-changes to languages because of Bugzilla reports.
-
-=== Other changes in 1.24 ===
-* The deprecated jquery.delayedBind ResourceLoader module was removed.
-* The deprecated function mw.util.toggleToc was removed.
-* The Special:Search hooks SpecialSearchGo and SpecialSearchResultsAppend
-  were removed as they were unused.
-* (bug 65477) User::pingLimiter() now has an additional profile point varying
-  by action being used.
-* mediawiki.util.$content no longer supports old versions of the Vector,
-  Monobook, Modern and CologneBlue skins that don't yet implement the "mw-body"
-  and/or "mw-body-primary" class name in their html.
-* Added pp_sortkey column to page_props table, so pages can be efficiently
-  queried and sorted by property value (bug 58032).
-  See $wgPagePropsHaveSortkey if you want to postpone the schema change.
-* BREAKING CHANGE: All four built-in MediaWiki skins (Vector, MonoBook, Modern
-  and Cologne Blue) were moved out of MediaWiki core to their own respective
-  repositories. They will be installed with the release tarball, but you must
-  install them separately if installing MediaWiki from source code. A warning
-  message displayed until you do it should guide you through the process. See
-  also <https://www.mediawiki.org/wiki/Manual:Skin_configuration>.
-* BREAKING CHANGE: Skins built for MediaWiki 1.15 and earlier that do not use
-  the "headelement" template key are no longer supported. Setting
-  $useHeadElement = false; is no longer supported and will not cause old keys
-  like "headlinks", "skinnameclass", etc. to be defined.
-* BREAKING CHANGE: The files commonElements.css, commonContent.css and
-  commonInterface.css (in skins/common/) have been removed. Skins may no longer
-  rely on their presence and include them in their style modules. ResourceLoader
-  modules introduced in MediaWiki 1.23 should be loaded instead:
-  - skins/common/commonElements.css  → 'mediawiki.skinning.elements' module
-  - skins/common/commonContent.css   → 'mediawiki.skinning.content' module
-  - skins/common/commonInterface.css → 'mediawiki.skinning.interface' module
-* The deprecated 'SpecialVersionExtensionTypes' hook was removed.
-* (bug 63891) Add 'X-Robots-Tag: noindex' header in action=render pages.
-* SpecialPage no longer supports the syntax for invoking wfSpecial*() functions.
-  Special pages should subclass SpecialPage and implement the execute() method.
-* (bug 63755) The deprecated constants RC_MOVE and RC_MOVE_OVER_REDIRECT were
-  removed.
-* Special:MostLinkedTemplates has been renamed to Special:MostTranscludedPages.
-* The skin autodiscovery mechanism has been deprecated and will be removed in
-  MediaWiki 1.25. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery
-  for migration guide for creators and users of custom skins that relied on it.
-* ResourceLoaderFileModule#getAllStyleFiles now returns all style files and all
-  skin style files used by the module.
-* Removed getLang() from IContextSource and subclasses. (deprecated since 1.19)
-* Removed setLang() from subclasses of IContextSource. (deprecated since 1.19)
-* Removed WebRequest::escapeAppendQuery(). (deprecated since 1.20)
-* Removed info(), purge(), revert() and rollback() from the Article class; they
-  have since become subclasses of the Action class. (deprecated since 1.19)
-* SearchEngineReplacePrefixesComplete hook was removed.
-* The "jquery.json" module has been deprecated. Use the "json" module instead.
-* Removed HTMLForm::addJS(). (deprecated since 1.18)
-* Removed LogEventsList::showHeader(). (deprecated since 1.19)
-* Removed ImageGalleryBase::useSkin(). (deprecated since 1.18)
-* Removed DatabaseMysqlBase::getLagFromProcesslist(). (deprecated since 1.19)
-* Removed LoadBalancer::closeConnecton(). (deprecated since 1.18)
-* Removed ApiBase::createContext(). (deprecated since 1.19)
-* BREAKING CHANGE: The undocumented Special{$this->getName()}BeforeFormDisplay
-  set of hooks has been removed and replaced by a single new hook
-  SpecialPageBeforeFormDisplay.
-* (bug 65781) Removed block warning on included {{Special:Contributions}}
-* Removed Skin::makeGlobalVariablesScript(). (deprecated since 1.19)
-* Removed MWNamespace::isMain(). (deprecated since 1.19)
-* Removed Preferences::loadOldSearchNs(). (deprecated since 1.19)
-* Removed OutputPage::getStatusMessage(). (deprecated since 1.18)
-* Removed OutputPage::isUserJsAllowed(). (deprecated since 1.18)
-* Removed Title::updateTitleProtection(). (deprecated since 1.19)
-* Removed ParserOptions::setSkin(). (deprecated since 1.19)
-* Removed Title::escapeCanonicalURL(). (deprecated since 1.19)
-* Removed Title::escapeLocalURL(). (deprecated since 1.19)
-* Removed Title::escapeFullURL(). (deprecated since 1.19)
-* Removed User::isValidEmailAddr(). (deprecated since 1.18)
-* Removed Title::getEscapedText(). (deprecated since 1.19)
-* Removed Language::getFallbackLanguageCode(). (deprecated since 1.19)
-* Removed WikiPage::isBigDeletion(). (deprecated since 1.19)
-* Removed MWInit class which contained functions related to a now discontinued
-  PHP compiler called hphpc. (deprecated since 1.22)
-* ApiResult::enableSizeCheck() and disableSizeCheck() are now obsolete.
-* Removed ResourceLoaderGetStartupModules hook. (deprecated since 1.23)
-* Removed getFormFields(), onSubmit() and onSuccess() from FormlessAction, as
-  these were meant specifically for FormAction instead.
-* Removed Action::execute().
-* Removed AjaxAddScript which has been obsolete since ResourceLoader and
-  is unused by any modern extension.
-* Removed maintenance/nextJobDB.php; no longer in use.
-* Removed global function wfViewPrevNext(). (deprecated since 1.19)
-* Removed global function xmlsafe() from Export.php. (moved to OAIRepo extension)
-* Removed Title::userCanRead(). (deprecated since 1.19)
-* Removed maintenance script importTextFile.php. Use edit.php script instead.
-* A _from_namespace field has been added to the templatelinks, pagelinks,
-  and filelinks tables. Run update.php to apply this change to the schema.
-* Removed File::sha1Base36(). (deprecated since 1.19)
-* Removed File::getPropsFromPath(). (deprecated since 1.19)
-* Removed functions blockedPage(), noCreatePermission(), readOnlyPage() and
-  userNotLoggedInPage() from EditPage.php. (deprecated since 1.19)
-* Removed functions getContent(), getPreloadedText(), mergeChangesInto() and
-  setPreloadedText() from EditPage.php. (deprecated since 1.21)
-* Removed global functions wfArrayLookup(), wfArrayMerge(), wfDebugDieBacktrace()
-  and wfTime(). (deprecated since 1.22)
-* Browser support for Internet Explorer 6 and 7 lowered from Grade A to Grade C,
-  meaning that JavaScript is no longer executed in these browser versions.
-* Browser support for Opera 11 lowered from Grade A to Grade C.
-* Removed IEFixes module which existed purely to provide support for MSIE versions
-* Deprecated SpecialPageFactory::getList() in favor of
-  SpecialPageFactory::getNames()
-  below 7 (conditionally loaded only for those browsers).
-* Action::checkCanExecute() no longer has a return value.
-* Removed cleanupForIRC(), loadFromCurRow(), newFromCurRow(), notifyRC2UDP()
-  and sendToUDP() from RecentChange.php. (deprecated since 1.22)
-* Removed EnhancedChangesList::arrow(), sideArrow(), downArrow(), spacerArrow().
-* Removed Xml::namespaceSelector(). (deprecated since 1.19)
-* Removed WikiPage::estimateRevisionCount(). (deprecated since 1.19)
-* MYSQL: Enum item added to "major MIME type" columns.
-  Running update.php on MySQL < v5.1 may result in heavy processing.
-* RSS and Atom feeds generated by MediaWiki no longer include a fallback
-  stylesheet. It was ignored by most browsers these days anyway.
-* SpecialSearchNoResults hook has been removed. SpecialSearchResults is now
-  called unconditionally.
-* TablePager::getBody() is now 'final' and can't be overridden in subclasses.
-* TablePager::getBody() is deprecated, use getBodyOutput() or getFullOutput().
-* Added $outputPage parameter to the SkinTemplateGetLanguageLink hook.
-* log_page for move log entries store the original page ID, rather than that
-  of the new redirect page. This is not retroactive.
-* LCStoreAccel was removed. $wgLocalisationCacheConf can no longer be set to
-  use this store class.
-* Html::infoBox() no longer accepts paths relative to skins/common/images/.
-* Deprecated defunct Skin::getCommonStylePath().
-* Some extensions had their ResourceLoader modules depend on the "mediawiki"
-  and "jquery" modules. In the past, this behavior was undefined, now it will
-  throw an error.
-* Removed BagOStuff::replace(). (deprecated since 1.23)
-* In Linker.php, link(), linkText() and makeBrokenImageLinkObj() now display
-  warnings if their first parameter is not a Title object. Also makeImageLink()
-  now requires a Parser as its first parameter.
-* (bug 67368) LESS functions embed() and embeddable(), added in MediaWiki 1.23
-  and broken by design, have been removed. Use appropriate LESS mixins instead.
-* Removed cssjanus.py from maintenance directory as it was unused.
-* Removed maintenance/purgeOldText.inc and the PurgeRedundantText() function
-  it contained (superseded by Maintenance::purgeRedundantText() in 1.16).
-  The purgeOldText.php maintenance script has been retained.
-* PHPUnit tests can be found by directory discovery, by adding the directory
-  path from your UnitTestsList callback. Older versions of MediaWiki core will
-  barf at this usage.
-
-==== Renamed classes ====
-* CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
-* CLDRPluralRuleConverter_Fragment to CLDRPluralRuleConverterFragment
-* CLDRPluralRuleConverter_Operator to CLDRPluralRuleConverterOperator
-* CLDRPluralRuleEvaluator_Range to CLDRPluralRuleEvaluatorRange
-* CSSJanus_Tokenizer to CSSJanusTokenizer
-* MediaWiki_I18N to MediaWikiI18N
-* Parser_DiffTest to ParserDiffTest
-* RevDel_ArchiveItem to RevDelArchiveItem
-* RevDel_ArchiveList to RevDelArchiveList
-* RevDel_ArchivedFileItem to RevDelArchivedFileItem
-* RevDel_ArchivedFileList to RevDelArchivedFileList
-* RevDel_ArchivedRevisionItem to RevDelArchivedRevisionItem
-* RevDel_FileItem to RevDelFileItem
-* RevDel_FileList to RevDelFileList
-* RevDel_Item to RevDelItem
-* RevDel_List to RevDelList
-* RevDel_LogItem to RevDelLogItem
-* RevDel_LogList to RevDelLogList
-* RevDel_RevisionItem to RevDelRevisionItem
-* RevDel_RevisionList to RevDelRevisionList
-* WebInstaller_Complete to WebInstallerComplete
-* WebInstaller_Copying to WebInstallerCopying
-* WebInstaller_DBConnect to WebInstallerDBConnect
-* WebInstaller_DBSettings to WebInstallerDBSettings
-* WebInstaller_Document to WebInstallerDocument
-* WebInstaller_ExistingWiki to WebInstallerExistingWiki
-* WebInstaller_Install to WebInstallerInstall
-* WebInstaller_Language to WebInstallerLanguage
-* WebInstaller_Name to WebInstallerName
-* WebInstaller_Options to WebInstallerOptions
-* WebInstaller_Readme to WebInstallerReadme
-* WebInstaller_ReleaseNotes to WebInstallerReleaseNotes
-* WebInstaller_Restart to WebInstallerRestart
-* WebInstaller_Upgrade to WebInstallerUpgrade
-* WebInstaller_UpgradeDoc to WebInstallerUpgradeDoc
-* WebInstaller_Welcome to WebInstallerWelcome
-
-==== Removed classes ====
-* IPBlockForm - Use SpecialBlock directly
-* WatchlistEditor - Use SpecialEditWatchlist directly
-* FormatExif - Use FormatMetadata directly
-* RevertFileAction - Use RevertAction directly
-* HistoryPage - Use HistoryAction directly
-* RawPage - Use RawAction directly
-* StubContLang - Use Language::factory() instead
-* XMLReader2 - Use XMLReader directly
-* ResourceLoaderLESSFunctions - No longer in use, not intended for public usage
-
-==== Removed files ====
-The skins/common/ directory, previously containing some assets intended to be
-used by skins and a number of legacy styles and scripts, has been removed. Its
-contents have been deleted or relocated into the resources/ directory. Full list
-of files that are no longer available follows.
-
-* skins/common/ajax.js
-* skins/common/commonContent.css
-* skins/common/commonElements.css
-* skins/common/commonInterface.css
-* skins/common/commonPrint.css
-* skins/common/config-cc.css
-* skins/common/config.css
-* skins/common/config.js
-* skins/common/feed.css
-* skins/common/IEFixes.js
-* skins/common/oldshared.css
-* skins/common/protect.js
-* skins/common/shared.css
-* skins/common/upload.js
-* skins/common/wikibits.js
-* skins/common/images/add.png
-* skins/common/images/ajax-loader.gif
-* skins/common/images/arrow_disabled_first_25.png
-* skins/common/images/arrow_disabled_last_25.png
-* skins/common/images/arrow_disabled_left_25.png
-* skins/common/images/arrow_disabled_right_25.png
-* skins/common/images/arrow_first_25.png
-* skins/common/images/arrow_last_25.png
-* skins/common/images/arrow_left_25.png
-* skins/common/images/arrow_right_25.png
-* skins/common/images/Arr_.png
-* skins/common/images/Arr_d.png
-* skins/common/images/Arr_l.png
-* skins/common/images/Arr_r.png
-* skins/common/images/Arr_u.png
-* skins/common/images/bullet.gif
-* skins/common/images/button_bold.png
-* skins/common/images/button_extlink.png
-* skins/common/images/button_headline.png
-* skins/common/images/button_hr.png
-* skins/common/images/button_image.png
-* skins/common/images/button_italic.png
-* skins/common/images/button_link.png
-* skins/common/images/button_media.png
-* skins/common/images/button_nowiki.png
-* skins/common/images/button_sig.png
-* skins/common/images/button_template.png
-* skins/common/images/cc-0.png
-* skins/common/images/cc-by-nc-sa.png
-* skins/common/images/cc-by-sa.png
-* skins/common/images/cc-by.png
-* skins/common/images/Checker-16x16.png
-* skins/common/images/closewindow.png
-* skins/common/images/closewindow19x19.png
-* skins/common/images/critical-32.png
-* skins/common/images/diffunderline.gif
-* skins/common/images/download-32.png
-* skins/common/images/feed-icon.png
-* skins/common/images/feed-icon.svg
-* skins/common/images/gnu-fdl.png
-* skins/common/images/help-question-hover.gif
-* skins/common/images/help-question.gif
-* skins/common/images/info-32.png
-* skins/common/images/link_icon.gif
-* skins/common/images/magnify-clip-rtl.png
-* skins/common/images/magnify-clip.png
-* skins/common/images/mediawiki.png
-* skins/common/images/nextredirectltr.png
-* skins/common/images/nextredirectrtl.png
-* skins/common/images/poweredby_mediawiki_88x31.png
-* skins/common/images/public-domain.png
-* skins/common/images/question-small.png
-* skins/common/images/question.svg
-* skins/common/images/redirectltr.png
-* skins/common/images/redirectrtl.png
-* skins/common/images/remove.png
-* skins/common/images/spinner.gif
-* skins/common/images/tick-32.png
-* skins/common/images/tipsy-arrow.gif
-* skins/common/images/tooltip_icon.png
-* skins/common/images/warning-32.png
-* skins/common/images/wiki.png
-* skins/common/images/Zoom_sans.gif
-* skins/common/images/ar/button_bold.png
-* skins/common/images/ar/button_headline.png
-* skins/common/images/ar/button_italic.png
-* skins/common/images/ar/button_link.png
-* skins/common/images/ar/button_nowiki.png
-* skins/common/images/be-tarask/button_bold.png
-* skins/common/images/be-tarask/button_italic.png
-* skins/common/images/be-tarask/button_link.png
-* skins/common/images/cyrl/button_bold.png
-* skins/common/images/cyrl/button_italic.png
-* skins/common/images/cyrl/button_link.png
-* skins/common/images/de/button_bold.png
-* skins/common/images/de/button_italic.png
-* skins/common/images/fa/button_bold.png
-* skins/common/images/fa/button_headline.png
-* skins/common/images/fa/button_italic.png
-* skins/common/images/fa/button_link.png
-* skins/common/images/fa/button_nowiki.png
-* skins/common/images/icons/fileicon-c.png
-* skins/common/images/icons/fileicon-cpp.png
-* skins/common/images/icons/fileicon-deb.png
-* skins/common/images/icons/fileicon-djvu.png
-* skins/common/images/icons/fileicon-djvu.xcf
-* skins/common/images/icons/fileicon-dvi.png
-* skins/common/images/icons/fileicon-exe.png
-* skins/common/images/icons/fileicon-h.png
-* skins/common/images/icons/fileicon-html.png
-* skins/common/images/icons/fileicon-iso.png
-* skins/common/images/icons/fileicon-java.png
-* skins/common/images/icons/fileicon-mid.png
-* skins/common/images/icons/fileicon-mov.png
-* skins/common/images/icons/fileicon-o.png
-* skins/common/images/icons/fileicon-ogg.png
-* skins/common/images/icons/fileicon-ogg.xcf
-* skins/common/images/icons/fileicon-pdf.png
-* skins/common/images/icons/fileicon-ps.png
-* skins/common/images/icons/fileicon-psd.png
-* skins/common/images/icons/fileicon-rm.png
-* skins/common/images/icons/fileicon-rpm.png
-* skins/common/images/icons/fileicon-svg.png
-* skins/common/images/icons/fileicon-tar.png
-* skins/common/images/icons/fileicon-tex.png
-* skins/common/images/icons/fileicon-ttf.png
-* skins/common/images/icons/fileicon-txt.png
-* skins/common/images/icons/fileicon.png
-* skins/common/images/ksh/button_S_italic.png
-
-== Compatibility ==
-
-MediaWiki 1.24 requires PHP 5.3.2 or later. There is experimental support for
-HHVM 3.3.0.
-
-MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
-support for them is somewhat less mature. There is experimental support for
-Oracle and Microsoft SQL Server.
-
-The supported versions are:
-
-* MySQL 5.0.2 or later
-* PostgreSQL 8.3 or later
-* SQLite 3.3.7 or later
-* Oracle 9.0.1 or later
-* Microsoft SQL Server 2005 (9.00.1399)
-
-== Upgrading ==
-
-1.24 has several database changes since 1.23, and will not work without schema
-updates. Note that due to changes to some very large tables like the revision
-table, the schema update may take quite long (minutes on a medium sized site,
-many hours on a large site).
-
-If upgrading from before 1.11, and you are using a wiki as a commons
-repository, make sure that it is updated as well. Otherwise, errors may arise
-due to database schema changes.
-
-If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
-new database fields are filled with data.
-
-If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to
-1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed
-with MediaWiki 1.21.
-
-Don't forget to always back up your database before upgrading!
-
-See the file UPGRADE for more detailed upgrade instructions.
-
-For notes on 1.23.x and older releases, see HISTORY.
-
-== Online documentation ==
-
-Documentation for both end-users and site administrators is available on
-MediaWiki.org, and is covered under the GNU Free Documentation License (except
-for pages that explicitly state that their contents are in the public domain):
-
-       https://www.mediawiki.org/wiki/Documentation
-
-== Mailing list ==
-
-A mailing list is available for MediaWiki user support and discussion:
-
-       https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
-
-A low-traffic announcements-only list is also available:
-
-       https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
-
-It's highly recommended that you sign up for one of these lists if you're
-going to run a public MediaWiki, so you can be notified of security fixes.
-
-== IRC help ==
-
-There's usually someone online in #mediawiki on irc.freenode.net.
index 0759951..ce825e5 100644 (file)
@@ -16,26 +16,32 @@ production.
   validity must be checked by passing the user-supplied token to
   User::matchEditToken rather than by testing for equality with a
   newly-generated token.
-* (bug 72951) The UserGetLanguageObject hook may be passed any IContextSource
+* (T74951) The UserGetLanguageObject hook may be passed any IContextSource
   for its $context parameter. Formerly it was documented as receiving a
   RequestContext specifically.
 * Profiling was restructured and $wgProfiler now requires an 'output' parameter.
   See StartProfiler.sample for details.
 * $wgMangleFlashPolicy was added to make MediaWiki's mangling of anything that
   might be a flash policy directive configurable.
+* ApiOpenSearch now supports XML output. The OpenSearchXml extension should no
+  longer be used. If extracts and page images are desired, the TextExtracts and
+  PageImages extensions are required.
+* $wgOpenSearchTemplate is deprecated in favor of $wgOpenSearchTemplates.
+* Edits are now prepared via AJAX as users type edit summaries. This behavior
+  can be disabled via $wgAjaxEditStash.
 
 === New features in 1.25 ===
-* (bug 62861) Updated plural rules to CLDR 26. Includes incompatible changes
+* (T64861) Updated plural rules to CLDR 26. Includes incompatible changes
   for plural forms in Russian, Prussian, Tagalog, Manx and several languages
   that fall back to Russian.
-* (bug 58139) ResourceLoaderFileModule now supports language fallback
+* (T60139) ResourceLoaderFileModule now supports language fallback
   for 'languageScripts'.
 * Added a new hook, "ContentAlterParserOutput", to allow extensions to modify the
   parser output for a content object before links update.
-* (bug 35785) Enhanced recent changes and extended watchlist are now default.
+* (T37785) Enhanced recent changes and extended watchlist are now default.
   Documentation: https://meta.wikimedia.org/wiki/Help:Enhanced_recent_changes
   and https://www.mediawiki.org/wiki/Manual:$wgDefaultUserOptions.
-* (bug 67341) SVG images will no longer be base64-encoded when being embedded
+* (T69341) SVG images will no longer be base64-encoded when being embedded
   in CSS. This results in slight size increase before gzip compression (due to
   percent-encoding), but up to 20% decrease after it.
 * Upgrade jStorage to v0.4.12.
@@ -52,11 +58,43 @@ production.
 * The debug logging internals have been overhauled, and are now using the
   PSR-3 interfaces.
 * Update CSSJanus to v1.1.1.
+* Added a hook, "ApiOpenSearchSuggest", to allow extensions to provide extracts
+  and images for ApiOpenSearch output. The semantics are identical to the
+  "OpenSearchXml" hook provided by the OpenSearchXml extension.
+* PrefixSearchBackend hook now has an $offset parameter. Combined with $limit,
+  this allows for pagination of prefix results. Extensions using this hook
+  should implement supporting behavior. Not doing so can result in undefined
+  behavior from API clients trying to continue through prefix results.
+
+==== External libraries ====
+* MediaWiki now requires certain external libraries to be installed. In the past
+  these were bundled inside the git repository of MediaWiki core, but now they
+  need to be installed separately. For users using the tarball, this will be taken
+  care of and no action will be required. Users using git will either need to use
+  composer to fetch dependencies or use the mediawiki/vendor repository which includes
+  all dependencies for MediaWiki core and ones used in Wikimedia deployment. Detailed
+  instructions can be found at <https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries>.
+* The following libraries are now required:
+** psr/log 1.0.0
+*** This library provides the interfaces set by the PSR-3 standard (<http://www.php-fig.org/psr/psr-3/>)
+    which are used by MediaWiki interally by the MWLogger class.
+*** See the structured logging RfC (<https://www.mediawiki.org/wiki/Requests_for_comment/Structured_logging>)
+    for more background information.
+** cssjanus/cssjanus 1.1.1
+*** This library was formerly bundled with MediaWiki core and has now been removed. It automatically
+    flips CSS for RTL support.
+** leafo/lessphp 0.5.0
+*** This library was formerly bundled with MediaWiki core and has now been removed. It compiles LESS
+    files into CSS.
+** cdb/cdb 1.0.0
+*** This library was formerly a part of MediaWiki core, and has now been split out into a separate library.
+    It provides CDB functions which are used in the Interwiki and Localization caches. More information
+    about the library can be found at <https://www.mediawiki.org/wiki/CDB>.
 
 === Bug fixes in 1.25 ===
-* (bug 71003) No additional code will be generated to try to load CSS-embedded
+* (T73003) No additional code will be generated to try to load CSS-embedded
   SVG images in Internet Explorer 6 and 7, as they don't support them anyway.
-* (bug 67021) On Special:BookSources, corrected validation of ISBNs (both
+* (T69021) On Special:BookSources, corrected validation of ISBNs (both
   10- and 13-digit forms) containing "X".
 * Page moving was refactored into a MovePage class. As part of that:
 ** The AbortMove hook was removed.
@@ -70,7 +108,7 @@ production.
    and MovePage::checkPermissions().
 
 === Action API changes in 1.25 ===
-* (bug 65403) XML tag highlighting is now only performed for formats
+* (T67403) XML tag highlighting is now only performed for formats
   "xmlfm" and "wddxfm".
 * action=paraminfo supports generalized submodules (modules=query+value),
   querymodules and formatmodules are deprecated
@@ -98,7 +136,7 @@ production.
 * If the user has the 'deletedhistory' right, action=query's revids parameter
   will now recognize deleted revids.
 * prop=revisions may be used as a generator, generating revids.
-* (bug 66776) format=json results will no longer be corrupted when
+* (T68776) format=json results will no longer be corrupted when
   $wgMangleFlashPolicy is in effect. format=php results will cleanly return an
   error instead of returning invalid serialized data.
 * Generators may now return data for the generated pages when used with
@@ -106,6 +144,12 @@ production.
 * Query page data for generator=search and generator=prefixsearch will now
   include an "index" field, which may be used by the client for sorting the
   search results.
+* ApiOpenSearch now supports XML output.
+* ApiOpenSearch will now output descriptions and URLs as array indexes 2 and 3
+  in JSON format.
+* (T76051) list=tags will now continue correctly.
+* (T76052) list=tags can now indicate whether a tag is defined.
+* (T75522) list=prefixsearch now supports continuation
 
 === Action API internal changes in 1.25 ===
 * ApiHelp has been rewritten to support i18n and paginated HTML output.
@@ -165,7 +209,7 @@ MediaWiki supports over 350 languages. Many localisations are updated
 regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Bugzilla reports.
 
-* (bug 64440) Kazakh (kk) wikis should no longer forcefully reset the user's
+* (T66440) Kazakh (kk) wikis should no longer forcefully reset the user's
   interface language to kk where unexpected.
 
 === Other changes in 1.25 ===
@@ -173,7 +217,7 @@ changes to languages because of Bugzilla reports.
   removed. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for
   migration guide for creators and users of custom skins that relied on it.
 * Javascript variable 'wgFileCanRotate' now only available on Special:Upload.
-* (bug 56257) Set site logo from mediawiki.skinning.interface module instead of
+* (T58257) Set site logo from mediawiki.skinning.interface module instead of
   inline styles in the HTML.
 * Removed ApiQueryUsers::getAutoGroups(). (deprecated since 1.20)
 * Removed XmlDumpWriter::schemaVersion(). (deprecated since 1.20)
@@ -207,6 +251,23 @@ changes to languages because of Bugzilla reports.
 * The mw.api.getToken() method now uses action=query?meta=tokens. This will now
   fail for custom tokens registered only via the deprecated ApiTokensGetTokenTypes
   hook. The ApiQueryTokensRegisterTypes hook should be used for this to work.
+* Added wgRelevantArticleId to the client-side config, for use on special pages.
+* Deprecated the TitleIsCssOrJsPage hook. Superseded by the
+  ContentHandlerDefaultModelFor hook since MediaWiki 1.21.
+* Deprecated the TitleIsWikitextPage hook. Superseded by the
+  ContentHandlerDefaultModelFor hook since MediaWiki 1.21.
+* Changed parsing of variables in schema (.sql) files:
+** The substituted values are no longer parsed. (Formerly, several passes
+   were made for each variable, so depending on the order in which variables
+   were defined, variables might have been found inside encoded values. This
+   is no longer the case.)
+** Variables are no longer string encoded when the /*$var*/ syntax is used.
+   If string encoding is necessary, use the '{$var}' syntax instead.
+** Variable names must only consist of one or more of the characters
+   "A-Za-z0-9_".
+** In source text of the form '{$A}'{$B}' or `{$A}`{$B}`, where variable A
+   does not exist yet variable B does, the latter may not be replaced.
+   However, this difference is unlikely to arise in practice.
 
 == Compatibility ==
 
@@ -247,7 +308,7 @@ Don't forget to always back up your database before upgrading!
 
 See the file UPGRADE for more detailed upgrade instructions.
 
-For notes on 1.23.x and older releases, see HISTORY.
+For notes on 1.24.x and older releases, see HISTORY.
 
 == Online documentation ==
 
index 472d17e..da1c97a 100644 (file)
@@ -120,6 +120,7 @@ $wgAutoloadLocalClasses = array(
        'ApiRollback' => __DIR__ . '/includes/api/ApiRollback.php',
        'ApiRsd' => __DIR__ . '/includes/api/ApiRsd.php',
        'ApiSetNotificationTimestamp' => __DIR__ . '/includes/api/ApiSetNotificationTimestamp.php',
+       'ApiStashEdit' => __DIR__ . '/includes/api/ApiStashEdit.php',
        'ApiTokens' => __DIR__ . '/includes/api/ApiTokens.php',
        'ApiUnblock' => __DIR__ . '/includes/api/ApiUnblock.php',
        'ApiUndelete' => __DIR__ . '/includes/api/ApiUndelete.php',
@@ -917,6 +918,7 @@ $wgAutoloadLocalClasses = array(
        'RebuildLocalisationCache' => __DIR__ . '/maintenance/rebuildLocalisationCache.php',
        'RebuildMessages' => __DIR__ . '/maintenance/rebuildmessages.php',
        'RebuildRecentchanges' => __DIR__ . '/maintenance/rebuildrecentchanges.php',
+       'RebuildSitesCache' => __DIR__ . '/maintenance/rebuildSitesCache.php',
        'RebuildTextIndex' => __DIR__ . '/maintenance/rebuildtextindex.php',
        'RecentChange' => __DIR__ . '/includes/changes/RecentChange.php',
        'RecompressTracked' => __DIR__ . '/maintenance/storage/recompressTracked.php',
@@ -1023,6 +1025,8 @@ $wgAutoloadLocalClasses = array(
        'SiteArray' => __DIR__ . '/includes/site/SiteList.php',
        'SiteConfiguration' => __DIR__ . '/includes/SiteConfiguration.php',
        'SiteList' => __DIR__ . '/includes/site/SiteList.php',
+       'SiteListFileCache' => __DIR__ . '/includes/site/SiteListFileCache.php',
+       'SiteListFileCacheBuilder' => __DIR__ . '/includes/site/SiteListFileCacheBuilder.php',
        'SiteObject' => __DIR__ . '/includes/site/Site.php',
        'SiteSQLStore' => __DIR__ . '/includes/site/SiteSQLStore.php',
        'SiteStats' => __DIR__ . '/includes/SiteStats.php',
index e5ade52..bcd196f 100644 (file)
@@ -40,5 +40,9 @@
        "scripts": {
                "pre-update-cmd": "ComposerHookHandler::onPreUpdate",
                "pre-install-cmd": "ComposerHookHandler::onPreInstall"
+       },
+       "config": {
+               "prepend-autoloader": false,
+               "optimize-autoloader": true
        }
 }
index 1e4be55..062a0c8 100644 (file)
@@ -407,6 +407,18 @@ $module: ApiBase Module object
 &$help: Array of HTML strings to be joined for the output.
 $options: Array Options passed to ApiHelp::getHelp
 
+'ApiOpenSearchSuggest': Called when constructing the OpenSearch results. Hooks
+can alter or append to the array.
+&$results: array of associative arrays. Keys are:
+  - title: Title object.
+  - redirect from: Title or null.
+  - extract: Description for this result.
+  - extract trimmed: If truthy, the extract will not be trimmed to
+    $wgOpenSearchDescriptionLength.
+  - image: Thumbnail for this result. Value is an array with subkeys 'source'
+    (url), 'width', 'height', 'alt', 'align'.
+  - url: Url for the given title.
+
 'APIQueryAfterExecute': After calling the execute() method of an
 action=query submodule. Use this to extend core API modules.
 &$module: Module object
@@ -2154,6 +2166,7 @@ $ns : array of int namespace keys to search in
 $search : search term (not guaranteed to be conveniently normalized)
 $limit : maximum number of results to return
 &$results : out param: array of page names (strings)
+$offset : number of results to offset from the beginning
 
 'PrefixSearchExtractNamespace': Called if core was not able to extract a
 namespace from the search string so that extensions can attempt it.
@@ -2679,7 +2692,8 @@ that can be applied.
 $title: The title in question.
 &$types: The types of protection available.
 
-'TitleIsCssOrJsPage': Called when determining if a page is a CSS or JS page.
+'TitleIsCssOrJsPage': DEPRECATED! Use ContentHandlerDefaultModelFor instead.
+Called when determining if a page is a CSS or JS page.
 $title: Title object that is being checked
 $result: Boolean; whether MediaWiki currently thinks this is a CSS/JS page.
   Hooks may change this value to override the return value of
@@ -2700,7 +2714,8 @@ $result: Boolean; whether MediaWiki currently thinks this page is movable.
   Hooks may change this value to override the return value of
   Title::isMovable().
 
-'TitleIsWikitextPage': Called when determining if a page is a wikitext or should
+'TitleIsWikitextPage': DEPRECATED! Use ContentHandlerDefaultModelFor instead.
+Called when determining if a page is a wikitext or should
 be handled by separate handler (via ArticleViewCustom).
 $title: Title object that is being checked
 $result: Boolean; whether MediaWiki currently thinks this is a wikitext page.
index a28bf3e..31feec1 100644 (file)
@@ -6,7 +6,7 @@ kss: kssnodecheck
        $(eval KSS_RL_TMP := $(shell mktemp /tmp/tmp.XXXXXXXXXX))
 # Keep module names in strict alphabetical order, so CSS loads in the same order as ResourceLoader's addModuleStyles does; this can affect rendering.
 # See OutputPage::makeResourceLoaderLink.
-       @curl -sG "${MEDIAWIKI_LOAD_URL}?modules=mediawiki.legacy.commonPrint|mediawiki.legacy.shared|mediawiki.ui|mediawiki.ui.anchor|mediawiki.ui.button|mediawiki.ui.checkbox|mediawiki.ui.icon|mediawiki.ui.input|mediawiki.ui.text&only=styles" > $(KSS_RL_TMP)
+       @curl -sG "${MEDIAWIKI_LOAD_URL}?modules=mediawiki.legacy.commonPrint|mediawiki.legacy.shared|mediawiki.ui|mediawiki.ui.anchor|mediawiki.ui.button|mediawiki.ui.checkbox|mediawiki.ui.radio|mediawiki.ui.icon|mediawiki.ui.input|mediawiki.ui.text&only=styles" > $(KSS_RL_TMP)
        @node_modules/.bin/kss-node ../../resources/src/mediawiki.ui static/ --css $(KSS_RL_TMP) -t styleguide-template
        @rm $(KSS_RL_TMP)
 
index c6fa674..178bb15 100644 (file)
@@ -34,7 +34,7 @@ Primary scripts:
     To save the profiling information in the database (required to use this
     script), you have to modify StartProfiler.php to use the Profiler class and
     not the stub profiler which is enabled by default.
-    You will also need to set $wgProfileToDatabase to true in LocalSettings.php
+    You will also need to set $wgProfiler['output'] to 'db' in LocalSettings.php
     to force the profiler to save the informations in the database and apply the
     maintenance/archives/patch-profiling.sql patch to the database.
 
index f83c402..e644e09 100644 (file)
@@ -3754,6 +3754,18 @@ $wgInterwikiFallbackSite = 'wiki';
 
 /** @} */ # end of Interwiki caching settings.
 
+/**
+ * @name SiteStore caching settings.
+ * @{
+ */
+
+/**
+ * Specify the file location for the SiteStore json cache file.
+ */
+$wgSitesCacheFile = false;
+
+/** @} */ # end of SiteStore caching settings.
+
 /**
  * If local interwikis are set up which allow redirects,
  * set this regexp to restrict URLs which will be displayed
@@ -5012,6 +5024,13 @@ $wgRateLimits = array(
                'ip' => null,
                'subnet' => null,
        ),
+       'stashedit' => array( // stashing edits into cache before save
+               'anon' => null,
+               'user' => null,
+               'newbie' => null,
+               'ip' => null,
+               'subnet' => null,
+       )
 );
 
 /**
@@ -5366,8 +5385,10 @@ $wgProfileCallTree = false;
 
 /**
  * Should application server host be put into profiling table
+ *
+ * @deprecated set $wgProfiler['perhost'] = true instead
  */
-$wgProfilePerHost = false;
+$wgProfilePerHost = null;
 
 /**
  * Host for UDP profiler.
@@ -5375,14 +5396,18 @@ $wgProfilePerHost = false;
  * The host should be running a daemon which can be obtained from MediaWiki
  * Git at:
  * http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile
+ *
+ * @deprecated set $wgProfiler['udphost'] instead
  */
-$wgUDPProfilerHost = '127.0.0.1';
+$wgUDPProfilerHost = null;
 
 /**
  * Port for UDP profiler.
  * @see $wgUDPProfilerHost
+ *
+ * @deprecated set $wgProfiler['udpport'] instead
  */
-$wgUDPProfilerPort = '3811';
+$wgUDPProfilerPort = null;
 
 /**
  * Format string for the UDP profiler. The UDP profiler invokes sprintf() with
@@ -5392,8 +5417,10 @@ $wgUDPProfilerPort = '3811';
  *
  * @see $wgStatsFormatString
  * @since 1.22
+ *
+ * @deprecated set $wgProfiler['udpformat'] instead
  */
-$wgUDPProfilerFormatString = "%s - %d %f %f %f %f %s\n";
+$wgUDPProfilerFormatString = null;
 
 /**
  * Output debug message on every wfProfileIn/wfProfileOut
@@ -5528,9 +5555,24 @@ $wgSearchHighlightBoundaries = '[\p{Z}\p{P}\p{C}]';
  * PHP wrapper to avoid firing up mediawiki for every keystroke
  *
  * Placeholders: {searchTerms}
+ *
+ * @deprecated since 1.25 Use $wgOpenSearchTemplates['application/x-suggestions+json'] instead
  */
 $wgOpenSearchTemplate = false;
 
+/**
+ * Templates for OpenSearch suggestions, defaults to API action=opensearch
+ *
+ * Sites with heavy load would typically have these point to a custom
+ * PHP wrapper to avoid firing up mediawiki for every keystroke
+ *
+ * Placeholders: {searchTerms}
+ */
+$wgOpenSearchTemplates = array(
+       'application/x-suggestions+json' => false,
+       'application/x-suggestions+xml' => false,
+);
+
 /**
  * Enable OpenSearch suggestions requested by MediaWiki. Set this to
  * false if you've disabled scripts that use api?action=opensearch and
@@ -5545,6 +5587,11 @@ $wgEnableOpenSearchSuggest = true;
  */
 $wgOpenSearchDefaultLimit = 10;
 
+/**
+ * Minimum length of extract in <Description>. Actual extracts will last until the end of sentence.
+ */
+$wgOpenSearchDescriptionLength = 100;
+
 /**
  * Expiry time for search suggestion responses
  */
@@ -6189,6 +6236,8 @@ $wgExtensionMessagesFiles = array();
  * en.json, de.json, etc. Extensions with messages in multiple places may specify an array of
  * message directories.
  *
+ * Message directories in core should be added to LocalisationCache::getMessagesDirs()
+ *
  * @par Simple example:
  * @code
  *    $wgMessagesDirs['Example'] = __DIR__ . '/i18n';
@@ -6204,11 +6253,7 @@ $wgExtensionMessagesFiles = array();
  * @endcode
  * @since 1.23
  */
-$wgMessagesDirs = array(
-       'core' => "$IP/languages/i18n",
-       'api' => "$IP/includes/api/i18n",
-       'oojs-ui' => "$IP/resources/lib/oojs-ui/i18n",
-);
+$wgMessagesDirs = array();
 
 /**
  * Array of files with list(s) of extension entry points to be used in
@@ -6997,6 +7042,12 @@ $wgAjaxUploadDestCheck = true;
  */
 $wgAjaxLicensePreview = true;
 
+/**
+ * Have clients send edits to be prepared when filling in edit summaries.
+ * This gives the server a head start on the expensive parsing operation.
+ */
+$wgAjaxEditStash = true;
+
 /**
  * Settings for incoming cross-site AJAX requests:
  * Newer browsers support cross-site AJAX when the target resource allows requests
index d9e3aab..d0c2226 100644 (file)
@@ -224,6 +224,12 @@ define( 'MW_SUPPORTS_RESOURCE_MODULES', 1 );
 /**@{
  * Allowed values for Parser::$mOutputType
  * Parameter to Parser::startExternalParse().
+ * Use of Parser consts is preferred:
+ * - Parser::OT_HTML
+ * - Parser::OT_WIKI
+ * - Parser::OT_PREPROCESS
+ * - Parser::OT_MSG
+ * - Parser::OT_PLAIN
  */
 define( 'OT_HTML', 1 );
 define( 'OT_WIKI', 2 );
@@ -234,6 +240,9 @@ define( 'OT_PLAIN', 4 );
 
 /**@{
  * Flags for Parser::setFunctionHook
+ * Use of Parser consts is preferred:
+ * - Parser::SFH_NO_HASH
+ * - Parser::SFH_OBJECT_ARGS
  */
 define( 'SFH_NO_HASH', 1 );
 define( 'SFH_OBJECT_ARGS', 2 );
index d106da2..4a013ef 100644 (file)
@@ -144,6 +144,12 @@ class EditPage {
         */
        const AS_IMAGE_REDIRECT_LOGGED = 234;
 
+       /**
+        * Status: user tried to modify the content model, but is not allowed to do that
+        * ( User::isAllowed('editcontentmodel') == false )
+        */
+       const AS_NO_CHANGE_CONTENT_MODEL = 235;
+
        /**
         * Status: can't parse content
         */
@@ -315,6 +321,9 @@ class EditPage {
        /** @var int */
        public $oldid = 0;
 
+       /** @var int */
+       public $parentRevId = 0;
+
        /** @var string */
        public $editintro = '';
 
@@ -875,6 +884,7 @@ class EditPage {
                }
 
                $this->oldid = $request->getInt( 'oldid' );
+               $this->parentRevId = $request->getInt( 'parentRevId' );
 
                $this->bot = $request->getBool( 'bot', true );
                $this->nosummary = $request->getBool( 'nosummary' );
@@ -1384,6 +1394,9 @@ class EditPage {
                                $permission = $this->mTitle->isTalkPage() ? 'createtalk' : 'createpage';
                                throw new PermissionsError( $permission );
 
+                       case self::AS_NO_CHANGE_CONTENT_MODEL:
+                               throw new PermissionsError( 'editcontentmodel' );
+
                        default:
                                // We don't recognize $status->value. The only way that can happen
                                // is if an extension hook aborted from inside ArticleSave.
@@ -1645,6 +1658,15 @@ class EditPage {
                        }
                }
 
+               if ( $this->contentModel !== $this->mTitle->getContentModel()
+                       && !$wgUser->isAllowed( 'editcontentmodel' )
+               ) {
+                       $status->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL );
+                       wfProfileOut( __METHOD__ . '-checks' );
+                       wfProfileOut( __METHOD__ );
+                       return $status;
+               }
+
                if ( wfReadOnly() ) {
                        $status->fatal( 'readonlytext' );
                        $status->value = self::AS_READ_ONLY_PAGE;
@@ -2053,7 +2075,7 @@ class EditPage {
        }
 
        function setHeaders() {
-               global $wgOut, $wgUser;
+               global $wgOut, $wgUser, $wgAjaxEditStash;
 
                $wgOut->addModules( 'mediawiki.action.edit' );
                $wgOut->addModuleStyles( 'mediawiki.action.edit.styles' );
@@ -2066,6 +2088,10 @@ class EditPage {
                        $wgOut->addModules( 'mediawiki.action.edit.editWarning' );
                }
 
+               if ( $wgAjaxEditStash ) {
+                       $wgOut->addModules( 'mediawiki.action.edit.stash' );
+               }
+
                $wgOut->setRobotPolicy( 'noindex,nofollow' );
 
                # Enabled article-related sidebar, toplinks, etc.
@@ -2430,6 +2456,8 @@ class EditPage {
                $wgOut->addHTML( Html::hidden( 'wpAutoSummary', $autosumm ) );
 
                $wgOut->addHTML( Html::hidden( 'oldid', $this->oldid ) );
+               $wgOut->addHTML( Html::hidden( 'parentRevId',
+                       $this->parentRevId ?: $this->mArticle->getRevIdFetched() ) );
 
                $wgOut->addHTML( Html::hidden( 'format', $this->contentFormat ) );
                $wgOut->addHTML( Html::hidden( 'model', $this->contentModel ) );
@@ -2838,7 +2866,7 @@ class EditPage {
                global $wgOut;
                $section = htmlspecialchars( $this->section );
                $wgOut->addHTML( <<<HTML
-<input type='hidden' value="{$section}" name="wpSection" />
+<input type='hidden' value="{$section}" name="wpSection"/>
 <input type='hidden' value="{$this->starttime}" name="wpStarttime" />
 <input type='hidden' value="{$this->edittime}" name="wpEdittime" />
 <input type='hidden' value="{$this->scrolltop}" name="wpScrolltop" id="wpScrolltop" />
index 2936ca3..fb2d6f4 100644 (file)
@@ -366,6 +366,16 @@ class OutputPage extends ContextSource {
                array_push( $this->mMetatags, array( $name, $val ) );
        }
 
+       /**
+        * Returns the current <meta> tags
+        *
+        * @since 1.25
+        * @return array
+        */
+       public function getMetaTags() {
+               return $this->mMetatags;
+       }
+
        /**
         * Add a new \<link\> tag to the page header.
         *
@@ -377,6 +387,16 @@ class OutputPage extends ContextSource {
                array_push( $this->mLinktags, $linkarr );
        }
 
+       /**
+        * Returns the current <link> tags
+        *
+        * @since 1.25
+        * @return array
+        */
+       public function getLinkTags() {
+               return $this->mLinktags;
+       }
+
        /**
         * Add a new \<link\> with "rel" attribute set to "meta"
         *
@@ -398,6 +418,17 @@ class OutputPage extends ContextSource {
                $this->mCanonicalUrl = $url;
        }
 
+       /**
+        * Returns the URL to be used for the <link rel=canonical> if
+        * one is set.
+        *
+        * @since 1.25
+        * @return bool|string
+        */
+       public function getCanonicalUrl() {
+               return $this->mCanonicalUrl;
+       }
+
        /**
         * Get the value of the "rel" attribute for metadata links
         *
index 839fedc..a4e64ee 100644 (file)
@@ -34,11 +34,12 @@ abstract class PrefixSearch {
         * @param string $search
         * @param int $limit
         * @param array $namespaces Used if query is not explicitly prefixed
+        * @param int $offset How many results to offset from the beginning
         * @return array Array of strings
         */
-       public static function titleSearch( $search, $limit, $namespaces = array() ) {
+       public static function titleSearch( $search, $limit, $namespaces = array(), $offset = 0 ) {
                $prefixSearch = new StringPrefixSearch;
-               return $prefixSearch->search( $search, $limit, $namespaces );
+               return $prefixSearch->search( $search, $limit, $namespaces, $offset );
        }
 
        /**
@@ -47,9 +48,10 @@ abstract class PrefixSearch {
         * @param string $search
         * @param int $limit
         * @param array $namespaces Used if query is not explicitly prefixed
+        * @param int $offset How many results to offset from the beginning
         * @return array Array of strings or Title objects
         */
-       public function search( $search, $limit, $namespaces = array() ) {
+       public function search( $search, $limit, $namespaces = array(), $offset = 0 ) {
                $search = trim( $search );
                if ( $search == '' ) {
                        return array(); // Return empty result
@@ -65,7 +67,7 @@ abstract class PrefixSearch {
                                $ns = $namespaces; // no explicit prefix, use default namespaces
                                wfRunHooks( 'PrefixSearchExtractNamespace', array( &$ns, &$search ) );
                        }
-                       return $this->searchBackend( $ns, $search, $limit );
+                       return $this->searchBackend( $ns, $search, $limit, $offset );
                }
 
                // Is this a namespace prefix?
@@ -80,7 +82,7 @@ abstract class PrefixSearch {
                        wfRunHooks( 'PrefixSearchExtractNamespace', array( &$namespaces, &$search ) );
                }
 
-               return $this->searchBackend( $namespaces, $search, $limit );
+               return $this->searchBackend( $namespaces, $search, $limit, $offset );
        }
 
        /**
@@ -88,12 +90,13 @@ abstract class PrefixSearch {
         * @param string $search
         * @param int $limit
         * @param array $namespaces
+        * @param int $offset How many results to offset from the beginning
         *
         * @return array
         */
-       public function searchWithVariants( $search, $limit, array $namespaces ) {
+       public function searchWithVariants( $search, $limit, array $namespaces, $offset = 0 ) {
                wfProfileIn( __METHOD__ );
-               $searches = $this->search( $search, $limit, $namespaces );
+               $searches = $this->search( $search, $limit, $namespaces, $offset );
 
                // if the content language has variants, try to retrieve fallback results
                $fallbackLimit = $limit - count( $searches );
@@ -141,48 +144,125 @@ abstract class PrefixSearch {
         * @param array $namespaces
         * @param string $search
         * @param int $limit
+        * @param int $offset How many results to offset from the beginning
         * @return array Array of strings
         */
-       protected function searchBackend( $namespaces, $search, $limit ) {
+       protected function searchBackend( $namespaces, $search, $limit, $offset ) {
                if ( count( $namespaces ) == 1 ) {
                        $ns = $namespaces[0];
                        if ( $ns == NS_MEDIA ) {
                                $namespaces = array( NS_FILE );
                        } elseif ( $ns == NS_SPECIAL ) {
-                               return $this->titles( $this->specialSearch( $search, $limit ) );
+                               return $this->titles( $this->specialSearch( $search, $limit, $offset ) );
                        }
                }
                $srchres = array();
-               if ( wfRunHooks( 'PrefixSearchBackend', array( $namespaces, $search, $limit, &$srchres ) ) ) {
-                       return $this->titles( $this->defaultSearchBackend( $namespaces, $search, $limit ) );
+               if ( wfRunHooks( 'PrefixSearchBackend', array( $namespaces, $search, $limit, &$srchres, $offset ) ) ) {
+                       return $this->titles( $this->defaultSearchBackend( $namespaces, $search, $limit, $offset ) );
+               }
+               return $this->strings( $this->handleResultFromHook( $srchres, $namespaces, $search, $limit ) );
+       }
+
+       /**
+        * Default search backend does proper prefix searching, but custom backends
+        * may sort based on other algorythms that may cause the exact title match
+        * to not be in the results or be lower down the list.
+        * @param array $srchres results from the hook
+        * @return array munged results from the hook
+        */
+       private function handleResultFromHook( $srchres, $namespaces, $search, $limit ) {
+               // Pick namespace (based on PrefixSearch::defaultSearchBackend)
+               $ns = in_array( NS_MAIN, $namespaces ) ? NS_MAIN : $namespaces[0];
+               $t = Title::newFromText( $search, $ns );
+               if ( !$t || !$t->exists() ) {
+                       // No exact match so just return the search results
+                       return $srchres;
+               }
+               $string = $t->getPrefixedText();
+               $key = array_search( $string, $srchres );
+               if ( $key !== false ) {
+                       // Exact match was in the results so just move it to the front
+                       return $this->pullFront( $key, $srchres );
+               }
+               // Exact match not in the search results so check for some redirect handling cases
+               if ( $t->isRedirect() ) {
+                       $target = $this->getRedirectTarget( $t );
+                       $key = array_search( $target, $srchres );
+                       if ( $key !== false ) {
+                               // Exact match is a redirect to one of the returned matches so pull the
+                               // returned match to the front.  This might look odd but the alternative
+                               // is to put the redirect in front and drop the match.  The name of the
+                               // found match is often more descriptive/better formed than the name of
+                               // the redirect AND by definition they share a prefix.  Hopefully this
+                               // choice is less confusing and more helpful.  But it might not be.  But
+                               // it is the choice we're going with for now.
+                               return $this->pullFront( $key, $srchres );
+                       }
+                       $redirectTargetsToRedirect = $this->redirectTargetsToRedirect( $srchres );
+                       if ( isset( $redirectTargetsToRedirect[ $target ] ) ) {
+                               // The exact match and something in the results list are both redirects
+                               // to the same thing!  In this case we'll pull the returned match to the
+                               // top following the same logic above.  Again, it might not be a perfect
+                               // choice but it'll do.
+                               return $this->pullFront( $redirectTargetsToRedirect[ $target ], $srchres );
+                       }
                } else {
-                       // Default search backend does proper prefix searching, but custom backends
-                       // may sort based on other algorythms that may cause the exact title match
-                       // to not be in the results or be lower down the list.
-
-                       // Pick namespace (based on PrefixSearch::defaultSearchBackend)
-                       $ns = in_array( NS_MAIN, $namespaces ) ? NS_MAIN : $namespaces[0];
-                       $t = Title::newFromText( $search, $ns );
-                       if ( $t ) {
-                               // If text is a valid title and is in the search results
-                               $string = $t->getPrefixedText();
-                               $key = array_search( $string, $srchres );
-                               if ( $key !== false ) {
-                                       // Move it to the front
-                                       $cut = array_splice( $srchres, $key, 1 );
-                                       array_unshift( $srchres, $cut[0] );
-                               } elseif ( $t->exists() ) {
-                                       // Add it in front
-                                       array_unshift( $srchres, $string );
-
-                                       if ( count( $srchres ) > $limit ) {
-                                               array_pop( $srchres );
-                                       }
-                               }
+                       $redirectTargetsToRedirect = $this->redirectTargetsToRedirect( $srchres );
+                       if ( isset( $redirectTargetsToRedirect[ $string ] ) ) {
+                               // The exact match is the target of a redirect already in the results list so remove
+                               // the redirect from the results list and push the exact match to the front
+                               array_splice( $srchres, $redirectTargetsToRedirect[ $string ], 1 );
+                               array_unshift( $srchres, $string );
+                               return $srchres;
                        }
                }
 
-               return $this->strings( $srchres );
+               // Exact match is totally unique from the other results so just add it to the front
+               array_unshift( $srchres, $string );
+               // And roll one off the end if the results are too long
+               if ( count( $srchres ) > $limit ) {
+                       array_pop( $srchres );
+               }
+               return $srchres;
+       }
+
+       /**
+        * @param Array(string) $titles as strings
+        * @return Array(string => int) redirect target prefixedText to index of title in titles
+        *   that is a redirect to it.
+        */
+       private function redirectTargetsToRedirect( $titles ) {
+               $result = array();
+               foreach ( $titles as $key => $titleText ) {
+                       $title = Title::newFromText( $titleText );
+                       if ( !$title || !$title->isRedirect() ) {
+                               continue;
+                       }
+                       $target = $this->getRedirectTarget( $title );
+                       if ( !$target ) {
+                               continue;
+                       }
+                       $result[ $target ] = $key;
+               }
+               return $result;
+       }
+
+       /**
+        * @param int $key key to pull to the front
+        * @return array $array with the item at $key pulled to the front
+        */
+       private function pullFront( $key, $array ) {
+               $cut = array_splice( $array, $key, 1 );
+               array_unshift( $array, $cut[0] );
+               return $array;
+       }
+
+       private function getRedirectTarget( $title ) {
+               $page = WikiPage::factory( $title );
+               if ( !$page->exists() ) {
+                       return null;
+               }
+               return $page->getRedirectTarget()->getPrefixedText();
        }
 
        /**
@@ -190,9 +270,10 @@ abstract class PrefixSearch {
         *
         * @param string $search Term
         * @param int $limit Max number of items to return
+        * @param int $offset Number of items to offset
         * @return array
         */
-       protected function specialSearch( $search, $limit ) {
+       protected function specialSearch( $search, $limit, $offset ) {
                global $wgContLang;
 
                $searchParts = explode( '/', $search, 2 );
@@ -208,7 +289,7 @@ abstract class PrefixSearch {
                        }
                        $special = SpecialPageFactory::getPage( $specialTitle->getText() );
                        if ( $special ) {
-                               $subpages = $special->prefixSearchSubpages( $subpageSearch, $limit );
+                               $subpages = $special->prefixSearchSubpages( $subpageSearch, $limit, $offset );
                                return array_map( function ( $sub ) use ( $specialTitle ) {
                                        return $specialTitle->getSubpage( $sub );
                                }, $subpages );
@@ -240,12 +321,17 @@ abstract class PrefixSearch {
                ksort( $keys );
 
                $srchres = array();
+               $skipped = 0;
                foreach ( $keys as $pageKey => $page ) {
                        if ( $searchKey === '' || strpos( $pageKey, $searchKey ) === 0 ) {
                                // bug 27671: Don't use SpecialPage::getTitleFor() here because it
                                // localizes its input leading to searches for e.g. Special:All
                                // returning Spezial:MediaWiki-Systemnachrichten and returning
                                // Spezial:Alle_Seiten twice when $wgLanguageCode == 'de'
+                               if ( $offset > 0 && $skipped < $offset ) {
+                                       $skipped++;
+                                       continue;
+                               }
                                $srchres[] = Title::makeTitleSafe( NS_SPECIAL, $page );
                        }
 
@@ -266,9 +352,10 @@ abstract class PrefixSearch {
         * @param array $namespaces Namespaces to search in
         * @param string $search Term
         * @param int $limit Max number of items to return
+        * @param int $offset Number of items to skip
         * @return array Array of Title objects
         */
-       protected function defaultSearchBackend( $namespaces, $search, $limit ) {
+       protected function defaultSearchBackend( $namespaces, $search, $limit, $offset ) {
                $ns = array_shift( $namespaces ); // support only one namespace
                if ( in_array( NS_MAIN, $namespaces ) ) {
                        $ns = NS_MAIN; // if searching on many always default to main
@@ -284,7 +371,11 @@ abstract class PrefixSearch {
                                'page_title ' . $dbr->buildLike( $prefix, $dbr->anyString() )
                        ),
                        __METHOD__,
-                       array( 'LIMIT' => $limit, 'ORDER BY' => 'page_title' )
+                       array(
+                               'LIMIT' => $limit,
+                               'ORDER BY' => 'page_title',
+                               'OFFSET' => $offset
+                       )
                );
                $srchres = array();
                foreach ( $res as $row ) {
index f913859..638da08 100644 (file)
@@ -1250,9 +1250,9 @@ class Title {
 
                # @note This hook is also called in ContentHandler::getDefaultModel.
                #   It's called here again to make sure hook functions can force this
-               #   method to return true even outside the mediawiki namespace.
+               #   method to return true even outside the MediaWiki namespace.
 
-               wfRunHooks( 'TitleIsCssOrJsPage', array( $this, &$isCssOrJsPage ) );
+               wfRunHooks( 'TitleIsCssOrJsPage', array( $this, &$isCssOrJsPage ), '1.25' );
 
                return $isCssOrJsPage;
        }
index c4a6127..5348020 100644 (file)
@@ -112,6 +112,7 @@ class User implements IDBAccessObject {
                'deletelogentry',
                'deleterevision',
                'edit',
+               'editcontentmodel',
                'editinterface',
                'editprotected',
                'editmyoptions',
@@ -4475,7 +4476,7 @@ class User implements IDBAccessObject {
                }
                $title = self::getGroupPage( $group );
                if ( $title ) {
-                       $page = $title->getPrefixedText();
+                       $page = $title->getFullText();
                        return "[[$page|$text]]";
                } else {
                        return $text;
index 99c0fb4..f9960d8 100644 (file)
@@ -1042,7 +1042,7 @@ abstract class ApiBase extends ContextSource {
         * @param array $params All supplied parameters for the module
         * @return bool
         */
-       public final function validateToken( $token, array $params ) {
+       final public function validateToken( $token, array $params ) {
                $tokenType = $this->needsToken();
                $salts = ApiQueryTokens::getTokenTypeSalts();
                if ( !isset( $salts[$tokenType] ) ) {
@@ -1638,6 +1638,10 @@ abstract class ApiBase extends ContextSource {
                        'code' => 'missingtitle',
                        'info' => "The article you tried to edit doesn't exist"
                ),
+               'cantchangecontentmodel' => array(
+                       'code' => 'cantchangecontentmodel',
+                       'info' => "You don't have permission to change the content model of a page"
+               ),
                'nosuchrcid' => array(
                        'code' => 'nosuchrcid',
                        'info' => "There is no change with rcid \"\$1\""
index 269b016..c1598c8 100644 (file)
@@ -445,6 +445,9 @@ class ApiEditPage extends ApiBase {
                        case EditPage::AS_NO_CREATE_PERMISSION:
                                $this->dieUsageMsg( 'nocreate-loggedin' );
 
+                       case EditPage::AS_NO_CHANGE_CONTENT_MODEL:
+                               $this->dieUsageMsg( 'cantchangecontentmodel' );
+
                        case EditPage::AS_BLANK_ARTICLE:
                                $this->dieUsageMsg( 'blankpage' );
 
index eea10e9..751be75 100644 (file)
@@ -52,10 +52,19 @@ class ApiExpandTemplates extends ApiBase {
                        $prop = array_flip( $params['prop'] );
                }
 
-               // Create title for parser
-               $title_obj = Title::newFromText( $params['title'] );
-               if ( !$title_obj || $title_obj->isExternal() ) {
-                       $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
+               // Get title and revision ID for parser
+               $revid = $params['revid'];
+               if ( $revid !== null ) {
+                       $rev = Revision::newFromId( $revid );
+                       if ( !$rev ) {
+                               $this->dieUsage( "There is no revision ID $revid", 'missingrev' );
+                       }
+                       $title_obj = $rev->getTitle();
+               } else {
+                       $title_obj = Title::newFromText( $params['title'] );
+                       if ( !$title_obj || $title_obj->isExternal() ) {
+                               $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
+                       }
                }
 
                $result = $this->getResult();
@@ -98,7 +107,7 @@ class ApiExpandTemplates extends ApiBase {
                if ( $prop || $params['prop'] === null ) {
                        $wgParser->startExternalParse( $title_obj, $options, Parser::OT_PREPROCESS );
                        $frame = $wgParser->getPreprocessor()->newFrame();
-                       $wikitext = $wgParser->preprocess( $params['text'], $title_obj, $options, null, $frame );
+                       $wikitext = $wgParser->preprocess( $params['text'], $title_obj, $options, $revid, $frame );
                        if ( $params['prop'] === null ) {
                                // the old way
                                ApiResult::setContent( $retval, $wikitext );
@@ -141,6 +150,9 @@ class ApiExpandTemplates extends ApiBase {
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true,
                        ),
+                       'revid' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
+                       ),
                        'prop' => array(
                                ApiBase::PARAM_TYPE => array(
                                        'wikitext',
index 004bfae..3d04f95 100644 (file)
@@ -54,6 +54,7 @@ class ApiMain extends ApiBase {
                'query' => 'ApiQuery',
                'expandtemplates' => 'ApiExpandTemplates',
                'parse' => 'ApiParse',
+               'stashedit' => 'ApiStashEdit',
                'opensearch' => 'ApiOpenSearch',
                'feedcontributions' => 'ApiFeedContributions',
                'feedrecentchanges' => 'ApiFeedRecentChanges',
@@ -526,6 +527,7 @@ class ApiMain extends ApiBase {
                if ( $matchOrigin ) {
                        $response->header( "Access-Control-Allow-Origin: $originParam" );
                        $response->header( 'Access-Control-Allow-Credentials: true' );
+                       $response->header( 'Access-Control-Allow-Headers: Api-User-Agent' );
                        $this->getOutput()->addVaryHeader( 'Origin' );
                }
 
index c7f40c7..7fb6303 100644 (file)
@@ -166,6 +166,11 @@ class ApiMove extends ApiBase {
                        return $permStatus;
                }
 
+               // Check suppressredirect permission
+               if ( !$this->getUser()->isAllowed( 'suppressredirect' ) ) {
+                       $createRedirect = true;
+               }
+
                return $mp->move( $this->getUser(), $reason, $createRedirect );
        }
 
index 8fa495c..4a9e216 100644 (file)
@@ -3,6 +3,8 @@
  * Created on Oct 13, 2006
  *
  * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ * Copyright © 2008 Brion Vibber <brion@wikimedia.org>
+ * Copyright © 2014 Brad Jorsch <bjorsch@wikimedia.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  */
 class ApiOpenSearch extends ApiBase {
 
+       private $format = null;
+       private $fm = null;
+
        /**
-        * Override built-in handling of format parameter.
-        * Only JSON is supported.
+        * Get the output format
         *
-        * @return ApiFormatBase
+        * @return string
         */
-       public function getCustomPrinter() {
-               $params = $this->extractRequestParams();
-               $format = $params['format'];
-               $allowed = array( 'json', 'jsonfm' );
-               if ( in_array( $format, $allowed ) ) {
-                       return $this->getMain()->createPrinterByName( $format );
+       protected function getFormat() {
+               if ( $this->format === null ) {
+                       $params = $this->extractRequestParams();
+                       $format = $params['format'];
+
+                       $allowedParams = $this->getAllowedParams();
+                       if ( !in_array( $format, $allowedParams['format'][ApiBase::PARAM_TYPE] ) ) {
+                               $format = $allowedParams['format'][ApiBase::PARAM_DFLT];
+                       }
+
+                       if ( substr( $format, -2 ) === 'fm' ) {
+                               $this->format = substr( $format, 0, -2 );
+                               $this->fm = 'fm';
+                       } else {
+                               $this->format = $format;
+                               $this->fm = '';
+                       }
                }
+               return $this->format;
+       }
+
+       public function getCustomPrinter() {
+               switch( $this->getFormat() ) {
+                       case 'json':
+                               return $this->getMain()->createPrinterByName( 'json' . $this->fm );
 
-               return $this->getMain()->createPrinterByName( $allowed[0] );
+                       case 'xml':
+                               $printer = $this->getMain()->createPrinterByName( 'xml' . $this->fm );
+                               $printer->setRootElement( 'SearchSuggestion' );
+                               return $printer;
+
+                       default:
+                               ApiBase::dieDebug( __METHOD__, "Unsupported format '{$this->getFormat()}'" );
+               }
        }
 
        public function execute() {
@@ -51,21 +80,166 @@ class ApiOpenSearch extends ApiBase {
                $namespaces = $params['namespace'];
                $suggest = $params['suggest'];
 
-               // Some script that was loaded regardless of wgEnableOpenSearchSuggest, likely cached.
-               if ( $suggest && !$this->getConfig()->get( 'EnableOpenSearchSuggest' ) ) {
-                       $searches = array();
+               if ( $params['redirects'] === null ) {
+                       // Backwards compatibility, don't resolve for JSON.
+                       $resolveRedir = $this->getFormat() !== 'json';
                } else {
+                       $resolveRedir = $params['redirects'] === 'resolve';
+               }
+
+               $results = array();
+
+               if ( !$suggest || $this->getConfig()->get( 'EnableOpenSearchSuggest' ) ) {
                        // Open search results may be stored for a very long time
                        $this->getMain()->setCacheMaxAge( $this->getConfig()->get( 'SearchSuggestCacheExpiry' ) );
                        $this->getMain()->setCacheMode( 'public' );
+                       $this->search( $search, $limit, $namespaces, $resolveRedir, $results );
+
+                       // Allow hooks to populate extracts and images
+                       wfRunHooks( 'ApiOpenSearchSuggest', array( &$results ) );
 
-                       $searcher = new StringPrefixSearch;
-                       $searches = $searcher->searchWithVariants( $search, $limit, $namespaces );
+                       // Trim extracts, if necessary
+                       $length = $this->getConfig()->get( 'OpenSearchDescriptionLength' );
+                       foreach ( $results as &$r ) {
+                               if ( is_string( $r['extract'] ) && !$r['extract trimmed'] ) {
+                                       $r['extract'] = self::trimExtract( $r['extract'], $length );
+                               }
+                       }
                }
-               // Set top level elements
+
+               // Populate result object
+               $this->populateResult( $search, $results );
+       }
+
+       /**
+        * Perform the search
+        *
+        * @param string $search Text to search
+        * @param int $limit Maximum items to return
+        * @param array $namespaces Namespaces to search
+        * @param bool $resolveRedir Whether to resolve redirects
+        * @param array &$results Put results here
+        */
+       protected function search( $search, $limit, $namespaces, $resolveRedir, &$results ) {
+               // Find matching titles as Title objects
+               $searcher = new TitlePrefixSearch;
+               $titles = $searcher->searchWithVariants( $search, $limit, $namespaces );
+
+               if ( $resolveRedir ) {
+                       // Query for redirects
+                       $db = $this->getDb();
+                       $lb = new LinkBatch( $titles );
+                       $res = $db->select(
+                               array( 'page', 'redirect' ),
+                               array( 'page_namespace', 'page_title', 'rd_namespace', 'rd_title' ),
+                               array(
+                                       'rd_from = page_id',
+                                       'rd_interwiki IS NULL OR rd_interwiki = ' . $db->addQuotes( '' ),
+                                       $lb->constructSet( 'page', $db ),
+                               ),
+                               __METHOD__
+                       );
+                       $redirects = array();
+                       foreach ( $res as $row ) {
+                               $redirects[$row->page_namespace][$row->page_title] =
+                                       array( $row->rd_namespace, $row->rd_title );
+                       }
+
+                       // Bypass any redirects
+                       $seen = array();
+                       foreach ( $titles as $title ) {
+                               $ns = $title->getNamespace();
+                               $dbkey = $title->getDBkey();
+                               $from = null;
+                               if ( isset( $redirects[$ns][$dbkey] ) ) {
+                                       list( $ns, $dbkey ) = $redirects[$ns][$dbkey];
+                                       $from = $title;
+                                       $title = Title::makeTitle( $ns, $dbkey );
+                               }
+                               if ( !isset( $seen[$ns][$dbkey] ) ) {
+                                       $seen[$ns][$dbkey] = true;
+                                       $results[$title->getArticleId()] = array(
+                                               'title' => $title,
+                                               'redirect from' => $from,
+                                               'extract' => false,
+                                               'extract trimmed' => false,
+                                               'image' => false,
+                                               'url' => wfExpandUrl( $title->getFullUrl(), PROTO_CURRENT ),
+                                       );
+                               }
+                       }
+               } else {
+                       foreach ( $titles as $title ) {
+                               $results[$title->getArticleId()] = array(
+                                       'title' => $title,
+                                       'redirect from' => null,
+                                       'extract' => false,
+                                       'extract trimmed' => false,
+                                       'image' => false,
+                                       'url' => wfExpandUrl( $title->getFullUrl(), PROTO_CURRENT ),
+                               );
+                       }
+               }
+       }
+
+       /**
+        * @param string $search
+        * @param array &$results
+        */
+       protected function populateResult( $search, &$results ) {
                $result = $this->getResult();
-               $result->addValue( null, 0, $search );
-               $result->addValue( null, 1, $searches );
+
+               switch ( $this->getFormat() ) {
+                       case 'json':
+                               // http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.1
+                               $result->addValue( null, 0, strval( $search ) );
+                               $terms = array();
+                               $descriptions = array();
+                               $urls = array();
+                               foreach ( $results as $r ) {
+                                       $terms[] = $r['title']->getPrefixedText();
+                                       $descriptions[] = strval( $r['extract'] );
+                                       $urls[] = $r['url'];
+                               }
+                               $result->addValue( null, 1, $terms );
+                               $result->addValue( null, 2, $descriptions );
+                               $result->addValue( null, 3, $urls );
+                               break;
+
+                       case 'xml':
+                               // http://msdn.microsoft.com/en-us/library/cc891508%28v=vs.85%29.aspx
+                               $imageKeys = array(
+                                       'source' => true,
+                                       'alt' => true,
+                                       'width' => true,
+                                       'height' => true,
+                                       'align' => true,
+                               );
+                               $items = array();
+                               foreach ( $results as $r ) {
+                                       $item = array();
+                                       $result->setContent( $item, $r['title']->getPrefixedText(), 'Text' );
+                                       $result->setContent( $item, $r['url'], 'Url' );
+                                       if ( is_string( $r['extract'] ) && $r['extract'] !== '' ) {
+                                               $result->setContent( $item, $r['extract'], 'Description' );
+                                       }
+                                       if ( is_array( $r['image'] ) && isset( $r['image']['source'] ) ) {
+                                               $item['Image'] = array_intersect_key( $r['image'], $imageKeys );
+                                       }
+                                       $items[] = $item;
+                               }
+                               $result->setIndexedTagName( $items, 'Item' );
+                               $result->addValue( null, 'version', '2.0' );
+                               $result->addValue( null, 'xmlns', 'http://opensearch.org/searchsuggest2' );
+                               $query = array();
+                               $result->setContent( $query, strval( $search ) );
+                               $result->addValue( null, 'Query', $query );
+                               $result->addValue( null, 'Section', $items );
+                               break;
+
+                       default:
+                               ApiBase::dieDebug( __METHOD__, "Unsupported format '{$this->getFormat()}'" );
+               }
        }
 
        public function getAllowedParams() {
@@ -84,9 +258,12 @@ class ApiOpenSearch extends ApiBase {
                                ApiBase::PARAM_ISMULTI => true
                        ),
                        'suggest' => false,
+                       'redirects' => array(
+                               ApiBase::PARAM_TYPE => array( 'return', 'resolve' ),
+                       ),
                        'format' => array(
                                ApiBase::PARAM_DFLT => 'json',
-                               ApiBase::PARAM_TYPE => array( 'json', 'jsonfm' ),
+                               ApiBase::PARAM_TYPE => array( 'json', 'jsonfm', 'xml', 'xmlfm' ),
                        )
                );
        }
@@ -101,4 +278,72 @@ class ApiOpenSearch extends ApiBase {
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Opensearch';
        }
+
+       /**
+        * Trim an extract to a sensible length.
+        *
+        * Adapted from Extension:OpenSearchXml, which adapted it from
+        * Extension:ActiveAbstract.
+        *
+        * @param string $text
+        * @param int $len Target length; actual result will continue to the end of a sentence.
+        * @return string
+        */
+       public static function trimExtract( $text, $length ) {
+               static $regex = null;
+
+               if ( $regex === null ) {
+                       $endchars = array(
+                               '([^\d])\.\s', '\!\s', '\?\s', // regular ASCII
+                               '。', // full-width ideographic full-stop
+                               '.', '!', '?', // double-width roman forms
+                               '。', // half-width ideographic full stop
+                       );
+                       $endgroup = implode( '|', $endchars );
+                       $end = "(?:$endgroup)";
+                       $sentence = ".{{$length},}?$end+";
+                       $regex = "/^($sentence)/u";
+               }
+
+               $matches = array();
+               if ( preg_match( $regex, $text, $matches ) ) {
+                       return trim( $matches[1] );
+               } else {
+                       // Just return the first line
+                       $lines = explode( "\n", $text );
+                       return trim( $lines[0] );
+               }
+       }
+
+       /**
+        * Fetch the template for a type.
+        *
+        * @param string $type MIME type
+        * @return string
+        */
+       public static function getOpenSearchTemplate( $type ) {
+               global $wgOpenSearchTemplate, $wgCanonicalServer;
+
+               if ( $wgOpenSearchTemplate && $type === 'application/x-suggestions+json' ) {
+                       return $wgOpenSearchTemplate;
+               }
+
+               $ns = implode( '|', SearchEngine::defaultNamespaces() );
+               if ( !$ns ) {
+                       $ns = "0";
+               }
+
+               switch ( $type ) {
+                       case 'application/x-suggestions+json':
+                               return $wgCanonicalServer . wfScript( 'api' )
+                                       . '?action=opensearch&search={searchTerms}&namespace=' . $ns;
+
+                       case 'application/x-suggestions+xml':
+                               return $wgCanonicalServer . wfScript( 'api' )
+                                       . '?action=opensearch&format=xml&search={searchTerms}&namespace=' . $ns;
+
+                       default:
+                               throw new MWException( __METHOD__ . ": Unknown type '$type'" );
+               }
+       }
 }
index 917332b..5f9fae4 100644 (file)
@@ -200,7 +200,8 @@ class ApiQueryLogEvents extends ApiQueryBase {
                }
 
                // Paranoia: avoid brute force searches (bug 17342)
-               if ( $params['namespace'] !== null || !is_null( $title ) || !is_null( $user ) ) {
+               $hideActions = $params['namespace'] !== null || !is_null( $title ) || !is_null( $params['action'] );
+               if ( $hideActions || !is_null( $user ) ) {
                        if ( !$this->getUser()->isAllowed( 'deletedhistory' ) ) {
                                $titleBits = LogPage::DELETED_ACTION;
                                $userBits = LogPage::DELETED_USER;
@@ -211,7 +212,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                $titleBits = 0;
                                $userBits = 0;
                        }
-                       if ( ( $params['namespace'] !== null || !is_null( $title ) ) && $titleBits ) {
+                       if ( $hideActions && $titleBits ) {
                                $this->addWhere( $db->bitAnd( 'log_deleted', $titleBits ) . " != $titleBits" );
                        }
                        if ( !is_null( $user ) && $userBits ) {
@@ -372,12 +373,18 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        $title = Title::makeTitle( $row->log_namespace, $row->log_title );
                }
 
-               if ( $this->fld_title || $this->fld_ids || $this->fld_details && $row->log_params !== '' ) {
+               if ( $this->fld_title || $this->fld_ids || $this->fld_type
+                       || $this->fld_details && $row->log_params !== ''
+               ) {
                        if ( LogEventsList::isDeleted( $row, LogPage::DELETED_ACTION ) ) {
                                $vals['actionhidden'] = '';
                                $anyHidden = true;
                        }
                        if ( LogEventsList::userCan( $row, LogPage::DELETED_ACTION, $user ) ) {
+
+                               if ( $this->fld_type ) {
+                                       $vals['action'] = $row->log_action;
+                               }
                                if ( $this->fld_title ) {
                                        ApiQueryBase::addTitleInfo( $vals, $title );
                                }
@@ -399,9 +406,8 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        }
                }
 
-               if ( $this->fld_type || $this->fld_action ) {
+               if ( $this->fld_type ) {
                        $vals['type'] = $row->log_type;
-                       $vals['action'] = $row->log_action;
                }
 
                if ( $this->fld_user || $this->fld_userid ) {
index 95f8483..069e30b 100644 (file)
@@ -43,20 +43,21 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
                $search = $params['search'];
                $limit = $params['limit'];
                $namespaces = $params['namespace'];
+               $offset = $params['offset'];
 
                $searcher = new TitlePrefixSearch;
-               $titles = $searcher->searchWithVariants( $search, $limit, $namespaces );
+               $titles = $searcher->searchWithVariants( $search, $limit + 1, $namespaces, $offset );
                if ( $resultPageSet ) {
                        $resultPageSet->populateFromTitles( $titles );
-                       /** @todo If this module gets an 'offset' parameter, use it here */
-                       $offset = 1;
                        foreach ( $titles as $index => $title ) {
-                               $resultPageSet->setGeneratorData( $title, array( 'index' => $index + $offset ) );
+                               $resultPageSet->setGeneratorData( $title, array( 'index' => $index + $offset + 1 ) );
                        }
                } else {
                        $result = $this->getResult();
+                       $count = 0;
                        foreach ( $titles as $title ) {
-                               if ( !$limit-- ) {
+                               if ( ++$count > $limit ) {
+                                       $this->setContinueEnumParameter( 'offset', $offset + $params['limit'] );
                                        break;
                                }
                                $vals = array(
@@ -70,6 +71,7 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
                                }
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
                                if ( !$fit ) {
+                                       $this->setContinueEnumParameter( 'offset', $offset + $count - 1 );
                                        break;
                                }
                        }
@@ -102,6 +104,10 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
                                        ApiBase::PARAM_MAX => 100,
                                        ApiBase::PARAM_MAX2 => 200,
                                ),
+                               'offset' => array(
+                                       ApiBase::PARAM_DFLT => 0,
+                                       ApiBase::PARAM_TYPE => 'integer',
+                               ),
                        );
        }
 
index f3b2652..7f2dc85 100644 (file)
  */
 class ApiQueryTags extends ApiQueryBase {
 
-       /**
-        * @var ApiResult
-        */
-       private $result;
-
-       private $limit;
-       private $fld_displayname = false, $fld_description = false,
-               $fld_hitcount = false;
-
        public function __construct( ApiQuery $query, $moduleName ) {
                parent::__construct( $query, $moduleName, 'tg' );
        }
@@ -49,84 +40,77 @@ class ApiQueryTags extends ApiQueryBase {
 
                $prop = array_flip( $params['prop'] );
 
-               $this->fld_displayname = isset( $prop['displayname'] );
-               $this->fld_description = isset( $prop['description'] );
-               $this->fld_hitcount = isset( $prop['hitcount'] );
-
-               $this->limit = $params['limit'];
-               $this->result = $this->getResult();
+               $fld_displayname = isset( $prop['displayname'] );
+               $fld_description = isset( $prop['description'] );
+               $fld_hitcount = isset( $prop['hitcount'] );
+               $fld_defined = isset( $prop['defined'] );
+
+               $limit = $params['limit'];
+               $result = $this->getResult();
+
+               $definedTags = array_fill_keys( ChangeTags::listDefinedTags(), 0 );
+
+               # Fetch defined tags that aren't past the continuation
+               if ( $params['continue'] !== null ) {
+                       $cont = $params['continue'];
+                       $tags = array_filter( array_keys( $definedTags ), function ( $v ) use ( $cont ) {
+                               return $v >= $cont;
+                       } );
+                       $tags = array_fill_keys( $tags, 0 );
+               } else {
+                       $tags = $definedTags;
+               }
 
+               # Merge in all used tags
                $this->addTables( 'change_tag' );
                $this->addFields( 'ct_tag' );
-
-               $this->addFieldsIf( array( 'hitcount' => 'COUNT(*)' ), $this->fld_hitcount );
-
-               $this->addOption( 'LIMIT', $this->limit + 1 );
+               $this->addFields( array( 'hitcount' => $fld_hitcount ? 'COUNT(*)' : '0' ) );
+               $this->addOption( 'LIMIT', $limit + 1 );
                $this->addOption( 'GROUP BY', 'ct_tag' );
                $this->addWhereRange( 'ct_tag', 'newer', $params['continue'], null );
-
                $res = $this->select( __METHOD__ );
-
-               $ok = true;
-
                foreach ( $res as $row ) {
-                       if ( !$ok ) {
-                               break;
-                       }
-                       $ok = $this->doTag( $row->ct_tag, $this->fld_hitcount ? $row->hitcount : 0 );
+                       $tags[$row->ct_tag] = (int)$row->hitcount;
                }
 
-               // include tags with no hits yet
-               foreach ( ChangeTags::listDefinedTags() as $tag ) {
-                       if ( !$ok ) {
+               # Now make sure the array is sorted for proper continuation
+               ksort( $tags );
+
+               $count = 0;
+               foreach ( $tags as $tagName => $hitcount ) {
+                       if ( ++$count > $limit ) {
+                               $this->setContinueEnumParameter( 'continue', $tagName );
                                break;
                        }
-                       $ok = $this->doTag( $tag, 0 );
-               }
-
-               $this->result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'tag' );
-       }
 
-       private function doTag( $tagName, $hitcount ) {
-               static $count = 0;
-               static $doneTags = array();
+                       $tag = array();
+                       $tag['name'] = $tagName;
 
-               if ( in_array( $tagName, $doneTags ) ) {
-                       return true;
-               }
-
-               if ( ++$count > $this->limit ) {
-                       $this->setContinueEnumParameter( 'continue', $tagName );
-
-                       return false;
-               }
-
-               $tag = array();
-               $tag['name'] = $tagName;
-
-               if ( $this->fld_displayname ) {
-                       $tag['displayname'] = ChangeTags::tagDescription( $tagName );
-               }
-
-               if ( $this->fld_description ) {
-                       $msg = wfMessage( "tag-$tagName-description" );
-                       $tag['description'] = $msg->exists() ? $msg->text() : '';
-               }
+                       if ( $fld_displayname ) {
+                               $tag['displayname'] = ChangeTags::tagDescription( $tagName );
+                       }
 
-               if ( $this->fld_hitcount ) {
-                       $tag['hitcount'] = $hitcount;
-               }
+                       if ( $fld_description ) {
+                               $msg = $this->msg( "tag-$tagName-description" );
+                               $tag['description'] = $msg->exists() ? $msg->text() : '';
+                       }
 
-               $doneTags[] = $tagName;
+                       if ( $fld_hitcount ) {
+                               $tag['hitcount'] = $hitcount;
+                       }
 
-               $fit = $this->result->addValue( array( 'query', $this->getModuleName() ), null, $tag );
-               if ( !$fit ) {
-                       $this->setContinueEnumParameter( 'continue', $tagName );
+                       if ( $fld_defined && isset( $definedTags[$tagName] ) ) {
+                               $tag['defined'] = '';
+                       }
 
-                       return false;
+                       $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $tag );
+                       if ( !$fit ) {
+                               $this->setContinueEnumParameter( 'continue', $tagName );
+                               break;
+                       }
                }
 
-               return true;
+               $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'tag' );
        }
 
        public function getCacheMode( $params ) {
@@ -151,7 +135,8 @@ class ApiQueryTags extends ApiQueryBase {
                                        'name',
                                        'displayname',
                                        'description',
-                                       'hitcount'
+                                       'hitcount',
+                                       'defined',
                                ),
                                ApiBase::PARAM_ISMULTI => true
                        )
@@ -160,7 +145,7 @@ class ApiQueryTags extends ApiQueryBase {
 
        protected function getExamplesMessages() {
                return array(
-                       'action=query&list=tags&tgprop=displayname|description|hitcount'
+                       'action=query&list=tags&tgprop=displayname|description|hitcount|defined'
                                => 'apihelp-query+tags-example-simple',
                );
        }
diff --git a/includes/api/ApiStashEdit.php b/includes/api/ApiStashEdit.php
new file mode 100644 (file)
index 0000000..00f6814
--- /dev/null
@@ -0,0 +1,293 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Prepare and edit in shared cache so that it can be reused on edit
+ *
+ * This endpoint can be called via AJAX as the user focuses on the edit
+ * summary box. By the time of submission, the parse may have already
+ * finished, and can be immediately used on page save. Certain parser
+ * functions like {{REVISIONID}} or {{CURRENTTIME}} may cause the cache
+ * to not be used on edit. Template and files used are check for changes
+ * since the output was generated. The cache TTL is also kept low for sanity.
+ *
+ * @ingroup API
+ * @since 1.25
+ */
+class ApiStashEdit extends ApiBase {
+       public function execute() {
+               global $wgMemc;
+
+               $user = $this->getUser();
+               $params = $this->extractRequestParams();
+
+               $page = $this->getTitleOrPageId( $params );
+               $title = $page->getTitle();
+
+               if ( !ContentHandler::getForModelID( $params['contentmodel'] )
+                       ->isSupportedFormat( $params['contentformat'] )
+               ) {
+                       $this->dieUsage( "Unsupported content model/format", 'badmodelformat' );
+               }
+
+               $text = trim( $params['text'] ); // needed so the key SHA1's match
+               $textContent = ContentHandler::makeContent(
+                       $text, $title, $params['contentmodel'], $params['contentformat'] );
+
+               $page = WikiPage::factory( $title );
+               if ( $page->exists() ) {
+                       // Page exists: get the merged content with the proposed change
+                       $baseRev = Revision::newFromPageId( $page->getId(), $params['baserevid'] );
+                       if ( !$baseRev ) {
+                               $this->dieUsage( "No revision ID {$params['baserevid']}", 'missingrev' );
+                       }
+                       $currentRev = $page->getRevision();
+                       if ( !$currentRev ) {
+                               $this->dieUsage( "No current revision of page ID {$page->getId()}", 'missingrev' );
+                       }
+                       // Merge in the new version of the section to get the proposed version
+                       $editContent = $page->replaceSectionAtRev(
+                               $params['section'],
+                               $textContent,
+                               $params['sectiontitle'],
+                               $baseRev->getId()
+                       );
+                       if ( !$editContent ) {
+                               $this->dieUsage( "Could not merge updated section.", 'replacefailed' );
+                       }
+                       if ( $currentRev->getId() == $baseRev->getId() ) {
+                               // Base revision was still the latest; nothing to merge
+                               $content = $editContent;
+                       } else {
+                               // Merge the edit into the current version
+                               $baseContent = $baseRev->getContent();
+                               $currentContent = $currentRev->getContent();
+                               if ( !$baseContent || !$currentContent ) {
+                                       $this->dieUsage( "Missing content for page ID {$page->getId()}", 'missingrev' );
+                               }
+                               $handler = ContentHandler::getForModelID( $baseContent->getModel() );
+                               $content = $handler->merge3( $baseContent, $editContent, $currentContent );
+                       }
+               } else {
+                       // New pages: use the user-provided content model
+                       $content = $textContent;
+               }
+
+               if ( !$content ) { // merge3() failed
+                       $this->getResult()->addValue( null,
+                               $this->getModuleName(), array( 'status' => 'editconflict' ) );
+                       return;
+               }
+
+               // The user will abort the AJAX request by pressing "save", so ignore that
+               ignore_user_abort( true );
+
+               // Get a key based on the source text, format, and user preferences
+               $key = self::getStashKey( $title, $content, $user );
+               // De-duplicate requests on the same key
+               if ( $user->pingLimiter( 'stashedit' ) ) {
+                       $editInfo = false;
+                       $status = 'ratelimited';
+               } elseif ( $wgMemc->lock( $key, 0, 30 ) ) {
+                       $contentFormat = $content->getDefaultFormat();
+                       $editInfo = $page->prepareContentForEdit( $content, null, $user, $contentFormat );
+                       $wgMemc->unlock( $key );
+                       $status = 'error'; // default
+               } else {
+                       $editInfo = false;
+                       $status = 'busy';
+               }
+
+               if ( $editInfo && $editInfo->output ) {
+                       $parserOutput = $editInfo->output;
+                       // If an item is renewed, mind the cache TTL determined by config and parser functions
+                       $since = time() - wfTimestamp( TS_UNIX, $parserOutput->getTimestamp() );
+                       $ttl = min( $parserOutput->getCacheExpiry() - $since, 5 * 60 );
+                       if ( $ttl > 0 && !$parserOutput->getFlag( 'vary-revision' ) ) {
+                               // Only store what is actually needed
+                               $stashInfo = (object)array(
+                                       'pstContent' => $editInfo->pstContent,
+                                       'output' => $editInfo->output,
+                                       'timestamp' => $editInfo->timestamp
+                               );
+                               $ok = $wgMemc->set( $key, $stashInfo, $ttl );
+                               if ( $ok ) {
+                                       $status = 'stashed';
+                                       wfDebugLog( 'StashEdit', "Cached parser output for key '$key'." );
+                               } else {
+                                       $status = 'error';
+                                       wfDebugLog( 'StashEdit', "Failed to cache parser output for key '$key'." );
+                               }
+                       } else {
+                               $status = 'uncacheable';
+                               wfDebugLog( 'StashEdit', "Uncacheable parser output for key '$key'." );
+                       }
+               }
+
+               $this->getResult()->addValue( null, $this->getModuleName(), array( 'status' => $status ) );
+       }
+
+       /**
+        * Get the temporary prepared edit stash key for a user
+        *
+        * @param Title $title
+        * @param Content $content
+        * @param User $user User to get parser options from
+        * @return string
+        */
+       protected static function getStashKey(
+               Title $title, Content $content, User $user
+       ) {
+               return wfMemcKey( 'prepared-edit',
+                       md5( $title->getPrefixedDBkey() ), // handle rename races
+                       $content->getModel(),
+                       $content->getDefaultFormat(),
+                       sha1( $content->serialize( $content->getDefaultFormat() ) ),
+                       $user->getId() ?: md5( $user->getName() ), // account for user parser options
+                       $user->getId() ? $user->getTouched() : '-' // handle preference change races
+               );
+       }
+
+       /**
+        * Check that a prepared edit is in cache and still up-to-date
+        *
+        * This method blocks if the prepared edit is already being rendered,
+        * waiting until rendering finishes before doing final validity checks.
+        *
+        * The cache is rejected if template or file changes are detected.
+        * Note that foreign template or file transclusions are not checked.
+        *
+        * The result is a map (pstContent,output,timestamp) with fields
+        * extracted directly from WikiPage::prepareContentForEdit().
+        *
+        * @param Title $title
+        * @param Content $content
+        * @param User $user User to get parser options from
+        * @return stdClass|bool Returns false on cache miss
+        */
+       public static function checkCache( Title $title, Content $content, User $user ) {
+               global $wgMemc;
+
+               $key = self::getStashKey( $title, $content, $user );
+               $editInfo = $wgMemc->get( $key );
+               if ( !is_object( $editInfo ) ) {
+                       $start = microtime( true );
+                       // We ignore user aborts and keep parsing. Block on any prior parsing
+                       // so as to use it's results and make use of the time spent parsing.
+                       if ( $wgMemc->lock( $key, 30, 30 ) ) {
+                               $editInfo = $wgMemc->get( $key );
+                               $wgMemc->unlock( $key );
+                               $sec = microtime( true ) - $start;
+                               wfDebugLog( 'StashEdit', "Waited $sec seconds on '$key'." );
+                       }
+               }
+
+               if ( !is_object( $editInfo ) || !$editInfo->output ) {
+                       return false;
+               }
+
+               $time = wfTimestamp( TS_UNIX, $editInfo->output->getTimestamp() );
+               if ( ( time() - $time ) <= 3 ) {
+                       wfDebugLog( 'StashEdit', "Timestamp-based cache hit for key '$key'." );
+                       return $editInfo; // assume nothing changed
+               }
+
+               $dbr = wfGetDB( DB_SLAVE );
+               // Check that no templates used in the output changed...
+               $cWhr = array(); // conditions to find changes/creations
+               $dWhr = array(); // conditions to find deletions
+               foreach ( $editInfo->output->getTemplateIds() as $ns => $stuff ) {
+                       foreach ( $stuff as $dbkey => $revId ) {
+                               $cWhr[] = array( 'page_namespace' => $ns, 'page_title' => $dbkey,
+                                       'page_latest != ' . intval( $revId ) );
+                               $dWhr[] = array( 'page_namespace' => $ns, 'page_title' => $dbkey );
+                       }
+               }
+               $change = $dbr->selectField( 'page', '1', $dbr->makeList( $cWhr, LIST_OR ), __METHOD__ );
+               $n = $dbr->selectField( 'page', 'COUNT(*)', $dbr->makeList( $dWhr, LIST_OR ), __METHOD__ );
+               if ( $change || $n != count( $dWhr ) ) {
+                       wfDebugLog( 'StashEdit', "Stale cache for key '$key'; template changed." );
+                       return false;
+               }
+
+               // Check that no files used in the output changed...
+               $cWhr = array(); // conditions to find changes/creations
+               $dWhr = array(); // conditions to find deletions
+               foreach ( $editInfo->output->getFileSearchOptions() as $name => $options ) {
+                       $cWhr[] = array( 'img_name' => $dbkey,
+                               'img_sha1 != ' . $dbr->addQuotes( strval( $options['sha1'] ) ) );
+                       $dWhr[] = array( 'img_name' => $dbkey );
+               }
+               $change = $dbr->selectField( 'image', '1', $dbr->makeList( $cWhr, LIST_OR ), __METHOD__ );
+               $n = $dbr->selectField( 'image', 'COUNT(*)', $dbr->makeList( $dWhr, LIST_OR ), __METHOD__ );
+               if ( $change || $n != count( $dWhr ) ) {
+                       wfDebugLog( 'StashEdit', "Stale cache for key '$key'; file changed." );
+                       return false;
+               }
+
+               wfDebugLog( 'StashEdit', "Cache hit for key '$key'." );
+
+               return $editInfo;
+       }
+
+       public function getAllowedParams() {
+               return array(
+                       'title' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_REQUIRED => true
+                       ),
+                       'section' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                       ),
+                       'sectiontitle' => array(
+                               ApiBase::PARAM_TYPE => 'string'
+                       ),
+                       'text' => array(
+                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_REQUIRED => true
+                       ),
+                       'contentmodel' => array(
+                               ApiBase::PARAM_TYPE => ContentHandler::getContentModels(),
+                               ApiBase::PARAM_REQUIRED => true
+                       ),
+                       'contentformat' => array(
+                               ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
+                               ApiBase::PARAM_REQUIRED => true
+                       ),
+                       'baserevid' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_REQUIRED => true
+                       )
+               );
+       }
+
+       function needsToken() {
+               return 'csrf';
+       }
+
+       function mustBePosted() {
+               return true;
+       }
+
+       function isInternal() {
+               return true;
+       }
+}
index cfc644b..35f4eaa 100644 (file)
@@ -17,5 +17,7 @@
        "apihelp-main-param-origin": "Пры звароце да API з дапамогай міждамэннага AJAX-запыту (CORS), выстаўце парамэтру значэньне зыходнага дамэну. Ён мусіць быць уключаны ў кожны папярэдні запыт і такім чынам мусіць быць часткай URI-запыту (ня цела POST). Ён мусіць супадаць з адной з крыніц у загалоўку Origin, павінна быць зададзена нешта кшталту http://en.wikipedia.org або https://meta.wikimedia.org. Калі парамэтар не супадае з загалоўкам Origin, будзе вернуты адказ з кодам памылкі 403. Калі парамэтар супадае з загалоўкам Origin і крыніца знаходзіцца ў белым сьпісе, будзе выстаўлены загаловак Access-Control-Allow-Origin.",
        "apihelp-main-param-uselang": "Мова для выкарыстаньня ў перакладах паведамленьняў. Сьпіс кодаў можа быць атрыманы з [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]] з siprop=languages, або трэба вызначыць «user», каб ужываць наладкі мовы цяперашняга карыстальніка, або вызначыць «content», каб ужываць мову зьместу гэтай вікі.",
        "apihelp-block-description": "Блякаваньне ўдзельніка.",
-       "apihelp-block-param-user": "Імя ўдзельніка, IP-адрас або IP-дыяпазон, якія вы хочаце заблякаваць."
+       "apihelp-block-param-user": "Імя ўдзельніка, IP-адрас або IP-дыяпазон, якія вы хочаце заблякаваць.",
+       "apihelp-block-param-expiry": "Час заканчэньня. Можа быць адносным (напрыклад, «5 months» або «2 weeks») ці аблсалютным (напрыклад, «2014-09-18T12:34:56Z»). Калі выстаўлены на «infinite», «indefinite» ці «never», блякаваньне будзе бестэрміновым.",
+       "apihelp-block-param-reason": "Прычына блякаваньня."
 }
index 17b79ff..f7e3a57 100644 (file)
        "apihelp-expandtemplates-description": "Expands all templates in wikitext.",
        "apihelp-expandtemplates-param-title": "Title of page.",
        "apihelp-expandtemplates-param-text": "Wikitext to convert.",
+       "apihelp-expandtemplates-param-revid": "Revision ID, for <nowiki>{{REVISIONID}}</nowiki> and similar variables.",
        "apihelp-expandtemplates-param-prop": "Which pieces of information to get:\n;wikitext:The expanded wikitext.\n;categories:Any categories present in the input that are not represented in the wikitext output.\n;volatile:Whether the output is volatile and should not be reused elsewhere within the page.\n;ttl:The maximum time after which caches of the result should be invalidated.\n;parsetree:The XML parse tree of the input.\nNote that if no values are selected, the result will contain the wikitext, but the output will be in a deprecated format.",
        "apihelp-expandtemplates-param-includecomments": "Whether to include HTML comments in the output.",
        "apihelp-expandtemplates-param-generatexml": "Generate XML parse tree (replaced by $1prop=parsetree).",
        "apihelp-opensearch-param-limit": "Maximum number of results to return.",
        "apihelp-opensearch-param-namespace": "Namespaces to search.",
        "apihelp-opensearch-param-suggest": "Do nothing if [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] is false.",
+       "apihelp-opensearch-param-redirects": "How to handle redirects:\n;return:Return the redirect itself.\n;resolve:Return the target page. May return fewer than $1limit results.\nFor historical reasons, the default is \"return\" for $1format=json and \"resolve\" for other formats.",
        "apihelp-opensearch-param-format": "The format of the output.",
        "apihelp-opensearch-example-te": "Find pages beginning with \"Te\"",
 
        "apihelp-query+prefixsearch-param-search": "Search string.",
        "apihelp-query+prefixsearch-param-namespace": "Namespaces to search.",
        "apihelp-query+prefixsearch-param-limit": "Maximum number of results to return.",
+       "apihelp-query+prefixsearch-param-offset": "Number of results to skip.",
        "apihelp-query+prefixsearch-example-simple": "Search for page titles beginning with \"meaning\"",
 
        "apihelp-query+protectedtitles-description": "List all titles protected from creation.",
 
        "apihelp-query+tags-description": "List change tags.",
        "apihelp-query+tags-param-limit": "The maximum number of tags to list.",
-       "apihelp-query+tags-param-prop": "Which properties to get:\n;name:Adds name of tag.\n;displayname:Adds system message for the tag.\n;description:Adds description of the tag.\n;hitcount:Adds the amount of revisions that have this tag.",
+       "apihelp-query+tags-param-prop": "Which properties to get:\n;name:Adds name of tag.\n;displayname:Adds system message for the tag.\n;description:Adds description of the tag.\n;hitcount:Adds the amount of revisions that have this tag.\n;defined:Indicate whether the tag is defined.",
        "apihelp-query+tags-example-simple": "List available tags",
 
        "apihelp-query+templates-description": "Returns all pages transcluded on the given pages.",
index 4b1cf12..450a5db 100644 (file)
        "apihelp-expandtemplates-description": "Développe tous les modèles en wikitexte.",
        "apihelp-expandtemplates-param-title": "Titre de la page.",
        "apihelp-expandtemplates-param-text": "Wikitexte à convertir.",
+       "apihelp-expandtemplates-param-revid": "ID de révision, pour <nowiki>{{REVISIONID}}</nowiki> et les variables semblables.",
        "apihelp-expandtemplates-param-prop": "Quelles informations récupérer :\n;wikitext:Le wikitexte développé.\n;categories:Toutes les catégories présentes dans l’entrée qui ne sont pas représentées dans le wikitexte de sortie.\n;volatile:Si la sortie est volatile et ne devrait pas être réutilisée ailleurs dans la page.\n;ttl:Le délai maximal après lequel les caches du résultat devraient être invalidés.\n;parsetree:L’arbre d’analyse XML de l’entrée.\nNoter que si aucune valeur n’est sélectionnée, le résultat contiendra le wikitexte, mais la sortie sera dans un format obsolète.",
        "apihelp-expandtemplates-param-includecomments": "S’il faut inclure les commentaires HTML dans la sortie.",
        "apihelp-expandtemplates-param-generatexml": "Générer l’arbre d’analyse XML (remplacé par $1prop=parsetree).",
        "apihelp-opensearch-param-limit": "Nombre maximal de résultats à renvoyer.",
        "apihelp-opensearch-param-namespace": "Espaces de nom à rechercher.",
        "apihelp-opensearch-param-suggest": "Ne rien faire si [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] vaut faux.",
+       "apihelp-opensearch-param-redirects": "Comment gérer les redirections :\n;return:Renvoie la redirection elle-même.\n;resolve:Renvoie la page cible. Peut renvoyer moins de $1limit résultats.\nPour des raisons historiques, la valeur par défaut est « return » pour $1format=json et « resolve » pour les autres formats.",
        "apihelp-opensearch-param-format": "Le format de sortie.",
        "apihelp-opensearch-example-te": "Trouver les pages commençant par « Te »",
        "apihelp-options-description": "Modifier les préférences de l’utilisateur courant.\n\nSeules les options enregistrées dans le cœur ou dans l’une des extensions installées, ou les options avec une clé préfixée par « userjs- » (devant être utilisées dans les scripts utilisateur), peuvent être définies.",
        "apihelp-query+prefixsearch-param-search": "Chaîne de recherche.",
        "apihelp-query+prefixsearch-param-namespace": "Espaces de nom à rechercher.",
        "apihelp-query+prefixsearch-param-limit": "Nombre maximal de résultats à renvoyer.",
+       "apihelp-query+prefixsearch-param-offset": "Nombre de résultats à sauter.",
        "apihelp-query+prefixsearch-example-simple": "Rechercher les titres de page commençant par « meaning »",
        "apihelp-query+protectedtitles-description": "Lister tous les titres protégés en création.",
        "apihelp-query+protectedtitles-param-namespace": "Lister uniquement les titres dans ces espaces de nom.",
        "apihelp-query+stashimageinfo-example-params": "Renvoie les vignettes pour deux fichiers mis en réserve",
        "apihelp-query+tags-description": "Lister les balises de modification.",
        "apihelp-query+tags-param-limit": "Le nombre maximal de balises à lister.",
-       "apihelp-query+tags-param-prop": "Quelles propriétés récupérer :\n;name:Ajoute le nom de la balise.\n;displayname:Ajoute le message système pour la balise.\n;description:Ajoute la description de la balise.\n;hitcount:Ajoute le nombre de révisions qui ont cette balise.",
+       "apihelp-query+tags-param-prop": "Quelles propriétés récupérer :\n;name:Ajoute le nom de la balise.\n;displayname:Ajoute le message système pour la balise.\n;description:Ajoute la description de la balise.\n;hitcount:Ajoute le nombre de révisions qui ont cette balise.\n;defined:Indique si la balise est définie.",
        "apihelp-query+tags-example-simple": "Lister les balises disponibles",
        "apihelp-query+templates-description": "Renvoie toutes les pages incluses dans les pages fournies.",
        "apihelp-query+templates-param-namespace": "Afficher les modèles uniquement dans ces espaces de nom.",
        "apihelp-query+usercontribs-example-ipprefix": "Afficher les contributions de toutes les adresses IP avec le préfixe « 192.0.2. »",
        "apihelp-query+userinfo-description": "Obtenir de l’information sur l’utilisateur courant.",
        "apihelp-query+userinfo-param-prop": "Quelles informations inclure :\n;blockinfo:Marque si l’utilisateur actuel est bloqué, par qui, et pour quelle raison.\n;hasmsg:Ajoute une balise « message » si l’utilisateur actuel a des messages en cours.\n;groups:Liste tous les groupes auxquels appartient l’utilisateur actuel.\n;implicitgroups:Liste tous les groupes dont l’utilisateur actuel est automatiquement membre.\n;rights:Liste tous les droits qu’a l’utilisateur actuel.\n;changeablegroups:Liste les groupes pour lesquels l’utilisateur actuel peut ajouter ou supprimer.\n;options:Liste toutes les préférences qu’a défini l’utilisateur actuel.\n;preferencestoken:OBSOLETE ! Obtient un jeton pour modifier les préférences de l’utilisateur actuel.\n;editcount:Ajoute le compteur de modifications de l’utilisateur actuel.\n;ratelimits:Liste toutes les limites de débit s’appliquant à l’utilisateur actuel.\n;realname:Ajoute le vrai nom de l’utilisateur actuel.\n;email:Ajoute l’adresse de courriel de l’utilisateur et sa date d’authentification.\n;acceptlang:Renvoie en écho l’entête Accept-Language envoyé par le client dans un format structuré.\n;registrationdate:Ajoute la date d’inscription de l’utilisateur.\n;unreadcount:Ajoute le compteur de pages non lues de la liste de suivi de l’utilisateur (au maximum $1 ; renvoie « $2 » s’il y en a plus).",
+       "apihelp-query+userinfo-example-simple": "Obtenir de l’information sur l’utilisateur actuel",
+       "apihelp-query+userinfo-example-data": "Obtenir des informations supplémentaires sur l’utilisateur actuel",
+       "apihelp-query+users-description": "Obtenir des information sur une liste d’utilisateurs",
+       "apihelp-query+users-param-prop": "Quelles informations inclure :\n;blockinfo:Marque si l’utilisateur est bloqué, par qui, et pour quelle raison.\n;groups:Liste tous les groupes auquel appartient chaque utilisateur.\n;implicitgroups:Liste tous les groupes dont un utilisateur est automatiquement membre.\n;rights:Liste tous les droits qu’a un utilisateur.\n;editcount:Ajoute le compteur de modifications de l’utilisateur.\n;registration:Ajoute l’horodatage d’inscription de l’utilisateur.\n;emailable:Marque si l’utilisateur peut et veut recevoir des courriels via [[Special:Emailuser]].\n;gender:Marque le sexe de l’utilisateur. Renvoie « male », « female », ou « unknown ».",
+       "apihelp-query+users-param-users": "Une liste des utilisateurs sur lesquels obtenir de l’information.",
+       "apihelp-query+users-param-token": "Utiliser plutôt [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-query+users-example-simple": "Renvoyer des informations pour [[User:Exemple]]",
+       "apihelp-query+watchlist-description": "Obtenir les modifications récentes des pages dans la liste de suivi de l’utilisateur connecté.",
+       "apihelp-query+watchlist-param-allrev": "Inclure les multiples révisions de la même page dans l’intervalle de temps fourni.",
+       "apihelp-query+watchlist-param-start": "L’horodatage auquel démarrer l’énumération.",
+       "apihelp-query+watchlist-param-end": "L’horodatage auquel arrêter l’énumération.",
+       "apihelp-query+watchlist-param-namespace": "Filtrer les modifications aux seuls espaces de nom fournis.",
+       "apihelp-query+watchlist-param-user": "Lister uniquement les modifications par cet utilisateur.",
+       "apihelp-query+watchlist-param-excludeuser": "Ne pas lister les modifications faites par cet utilisateur.",
+       "apihelp-query+watchlist-param-limit": "Combien de résultats au total renvoyer par demande.",
+       "apihelp-query+watchlist-param-prop": "Quels éléments supplémentaires obtenir :\n;ids:Ajoute les IDs de révision et de page.\n;title:Ajoute le titre de la page.\n;flags:Ajoute les marques de la modification.\n;user:Ajoute l’utilisateur ayant fait la modification.\n;userid:Ajoute l’ID de l’utilisateur ayant fait la modification.\n;comment:Ajoute le commentaire de la modification.\n;parsedcomment:Ajoute le commentaire analysé de la modification.\n;timestamp:Ajoute l’horodatage de la modification.\n;patrol:Marque les modifications patrouillées.\n;sizes:Ajoute les ancienne et nouvelle tailles de la page.\n;notificationtimestamp:Ajoute l’horodatage de quand l’utilisateur a été notifié de la modification la dernière fois.\n;loginfo:Ajoute l’information du journal quand c’est approprié.",
+       "apihelp-query+watchlist-param-show": "Afficher uniquement les éléments qui correspondent à ces critères. Par exemple, pour voir uniquement les modifications mineures faites par des utilisateurs connectés, mettre $1show=minor|!anon.",
+       "apihelp-query+watchlist-param-type": "Quels types de modification afficher :\n;edit:Modifications de page normale.\n;external:Modifications externes.\n;new:Créations de page.\n;log:Entrées du journal.",
+       "apihelp-query+watchlist-param-owner": "Utilisé avec $1token pour accéder à la liste de suivi d’un autre utilisateur.",
+       "apihelp-query+watchlist-param-token": "Un jeton de sécurité (disponible dans les [[Special:Preferences#mw-prefsection-watchlist|préférences]] de l’utilsiateur) pour autoriser l’accès à la liste de suivi d&un autre utilisateur.",
+       "apihelp-query+watchlist-example-simple": "Lister la révision de tête des pages récemment modifiées dans la liste de suivi de l’utilisateur actuel",
+       "apihelp-query+watchlist-example-props": "Chercher des informations supplémentaires sur la révision de tête des pages récemment modifiées de la liste de suivi de l’utilisateur actuel",
+       "apihelp-query+watchlist-example-allrev": "Chercher les informations sur toutes les modifications récentes des pages de la liste de suivi de l’utilisateur actuel",
+       "apihelp-query+watchlist-example-generator": "Chercher l’information de la page sur les pages récemment modifiées de la liste de suivi de l’utilisateur actuel",
+       "apihelp-query+watchlist-example-generator-rev": "Chercher l’information de la révision pour les modifications récentes des pages de la liste de suivi de l’utilisateur actuel",
+       "apihelp-query+watchlist-example-wlowner": "Lister la révision de tête des pages récemment modifiées de la liste de suivi de [[User:Exemple]]",
+       "apihelp-query+watchlistraw-description": "Obtenir toutes les pages de la liste de suivi de l’utilisateur connecté.",
+       "apihelp-query+watchlistraw-param-namespace": "Lister uniquement les pages dans les espaces de nom fournis.",
+       "apihelp-query+watchlistraw-param-limit": "Combien de résultats renvoyer au total par requête.",
+       "apihelp-query+watchlistraw-param-prop": "Quelles propriétés supplémentaires obtenir :\n;changed:Ajoute l’horodatage de la dernière notification de l’utilisateur à propos de la modification.",
+       "apihelp-query+watchlistraw-param-show": "Lister uniquement les éléments correspondant à ces critères.",
+       "apihelp-query+watchlistraw-param-owner": "Utilisé avec $1token pour accéder à la liste de suivi d’un autre utilisateur.",
+       "apihelp-query+watchlistraw-param-token": "Un jeton de sécurité (disponible dans les [[Special:Preferences#mw-prefsection-watchlist|préférences]] de l’utilisateur) pour permettre l’accès à la liste de suivi d’un autre utilisateur.",
        "apihelp-format-example-generic": "Mettre en forme le résultat de la requête dans le format $1",
        "apihelp-dbg-description": "Extraire les données au format de var_export() de PHP.",
        "apihelp-dbgfm-description": "Extraire les données au format de var_export() de PHP (affiché proprement en HTML).",
index b529fa9..05482cf 100644 (file)
@@ -4,8 +4,12 @@
                        "Robin0van0der0vliet"
                ]
        },
+       "apihelp-createaccount-param-name": "Brûkersnamme.",
        "apihelp-login-param-name": "Brûkersnamme.",
        "apihelp-login-param-password": "Wachtwurd.",
        "apihelp-userrights-param-user": "Brûkersnamme.",
+       "api-help-param-default": "Standert: $1",
+       "api-help-param-default-empty": "Standert: <span class=\"apihelp-empty\">(leech)</span>",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(gjin beskriuwing)</span>",
        "api-help-examples": "{{PLURAL:$1|Foarbyld|Foarbylden}}:"
 }
index 5055e05..2774af3 100644 (file)
@@ -20,6 +20,7 @@
        "apihelp-help-description": "הצגת עזרה עבור היחידות שצוינו.",
        "apihelp-help-param-toc": "לכלול תוכן עניינים בפלט HTML.",
        "apihelp-query+categories-param-limit": "כמה קטגוריות להחזיר.",
+       "apihelp-query+prefixsearch-param-offset": "מספר תוצאות לדילוג.",
        "apihelp-query+tokens-example-types": "אחזור אסימון של רשימת המעקב ואסימון של ניטור",
        "apihelp-xml-param-xslt": "אם צוין, מוסיף &lt;xslt&gt; כגליון סגנונות. זה צריך להיות דף ויקי במרחב השם מדיה ויקי ששמו מסתיים ב\".xsl\".",
        "api-format-title": "תוצאה של API של מדיה־ויקי",
index e16e368..f377056 100644 (file)
@@ -5,5 +5,14 @@
                ]
        },
        "apihelp-main-param-action": "Qual action exequer.",
-       "apihelp-main-param-format": "Le formato del resultato."
+       "apihelp-main-param-format": "Le formato del resultato.",
+       "apihelp-main-param-maxlag": "Le latentia maximal pote esser usate quando MediaWiki es installate in un cluster de base de datos replicate. Pro evitar actiones que causa additional latentia de replication de sito, iste parametro pote facer le cliente attender usque le latentia de replication es minus que le valor specificate. In caso de latentia excessive, le codice de error \"maxlag\" es retornate con un message como \"Attende $host: $lag secundas de latentia\".<br />Vide https://www.mediawiki.org/wiki/Manual:Maxlag_parameter pro plus information.",
+       "apihelp-main-param-smaxage": "Fixar le capite s-maxage a iste numero de secundas. Errores nunquam es mittite in cache.",
+       "apihelp-main-param-maxage": "Fixar le capite max-age a iste numero de secundas. Errores nunquam es mittite in cache.",
+       "apihelp-main-param-assert": "Verificar si le usator ha aperite session si mittite a \"user\", o si ha le derecto de usator robot si \"bot\".",
+       "apihelp-main-param-requestid": "Omne valor fornite hic essera includite in le responsa. Pote esser usate pro distinguer requestas.",
+       "apihelp-main-param-servedby": "Includer in le resultato le nomine del host que ha servite le requesta.",
+       "apihelp-main-param-curtimestamp": "Includer le data e hora actual in le resultato.",
+       "apihelp-block-description": "Blocar un usator.",
+       "apihelp-block-param-user": "Nomine de usator, adresse IP o intervallo IP que tu vole blocar."
 }
diff --git a/includes/api/i18n/ksh.json b/includes/api/i18n/ksh.json
new file mode 100644 (file)
index 0000000..3c708a7
--- /dev/null
@@ -0,0 +1,26 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Purodha"
+               ]
+       },
+       "apihelp-main-param-action": "Wat för en Aufjahb.",
+       "apihelp-main-param-format": "Et Fommaht för ußzejävve.",
+       "apihelp-main-param-requestid": "Jehde Aanjahb vun heh weed widder med ußjejovve. Esuh kam_mer einzel Affrohre ussenein hallde.",
+       "apihelp-main-param-servedby": "Donn däm ẞööver, dä et jedonn hät, singe Nahme med ußjävve.",
+       "apihelp-main-param-curtimestamp": "Donn de aktoälle Zigg un et Dattum med ußjävve.",
+       "apihelp-block-description": "Ene Metmaacher schpärre.",
+       "apihelp-block-param-user": "Däm Nahme vun däm Metmaacher, de <i lang=\"en\" xml:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß udder dä Berätt, dä De Schpärre wells.",
+       "apihelp-block-param-reason": "Der Schpärrjrond.",
+       "apihelp-block-param-anononly": "Bloß de nahmelohse Metmaaacher spärre, alsu donn et nahmelohse Beärbeide vun dä <i lang=\"en\" xml:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß verhendere.",
+       "apihelp-block-param-nocreate": "Et Neu-Aanmelde verbeede",
+       "apihelp-block-param-autoblock": "Dun automattesch de läzde <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräß schpärre, di dä Metmaacher jehatt hät, un och all di <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräße, vun wo dä versöhk, jet ze ändere.",
+       "apihelp-block-param-watchuser": "Donn de Metmaachersigg un de Klaafsigg dohzoh op mig Oppaßleß säze.",
+       "apihelp-createaccount-description": "Ene neue Zohjang för ene Metmaacher aanlähje.",
+       "apihelp-createaccount-param-name": "Der Nahme för dä Metmaacher.",
+       "apihelp-createaccount-param-password": "Et Paßwoot (Weed ävver it jebruc un övverjange, wann <code lang=\"en\" xml:lang=\"en\">$1mailpassword</code> jesaz es)",
+       "apihelp-delete-description": "Schmieß en Sigg fott.",
+       "apihelp-delete-param-watch": "Donn die Sigg en Ding Oppassliss opnemme.",
+       "apihelp-delete-param-unwatch": "Schmiiß di Sigg us Dinge Oppassless erus.",
+       "apihelp-delete-example-simple": "Schmiiß de Houpsigg fott"
+}
index a3fc0db..73d4b64 100644 (file)
        "apihelp-expandtemplates-description": "Ги проширува сите шаблони во викитекст.",
        "apihelp-expandtemplates-param-title": "Наслов на страница.",
        "apihelp-expandtemplates-param-text": "Викитекст за претворање.",
+       "apihelp-expandtemplates-param-revid": "Назнака на преработката, за <nowiki>{{REVISIONID}}</nowiki> и слични променливи.",
        "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n;wikitext:The expanded wikitext.\n;categories: Категориите присутно во вносот кои не се претставени во викитекстуалниот извод.\n;volatile: Дали изводот е месно врзан и не треба да се преупотребува на други места во страницата.\n;ttl: Максималното време по кое треба да се поништи меѓускладираниот резултат.\n;parsetree: XML-дрвото на расчленување за изводот.\nИмајте на ум дека ако не изберете никаква вредност, резултатот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
        "apihelp-expandtemplates-param-includecomments": "Дали во изводот да се вклучени HTML-коментари.",
        "apihelp-expandtemplates-param-generatexml": "Создај XML-дрво на расчленување (заменето со $1prop=parsetree).",
        "apihelp-opensearch-param-limit": "Максималниот број на резултати за прикажување.",
        "apihelp-opensearch-param-namespace": "Именски простори за пребарување.",
        "apihelp-opensearch-param-suggest": "Не прави ништо ако [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] е неточно.",
+       "apihelp-opensearch-param-redirects": "Како да се работи со пренасочувања:\n;return: Дај го самото пренасочување.\n;resolve: Дај ја целната страница. Може да даде помалку од $1limit резултати.\nОд историски причини, по основно е „return“ за $1format=json и „resolve“ за други формати.",
        "apihelp-opensearch-param-format": "Формат на изводот.",
        "apihelp-opensearch-example-te": "Најди страници што почнуваат со „Те“",
        "apihelp-options-description": "Смени ги нагодувањата на тековниот корисник.\n\nМожат да се зададат само можностите заведени во јадрото или во едно од воспоставените додатоци, или пак можности со клуч кој ја има претставката „userjs-“ (предвиден за употреба од кориснички скрипти).",
        "apihelp-paraminfo-param-helpformat": "Формат на помошните низи.",
        "apihelp-paraminfo-param-querymodules": "Список на називи на модули за барања (вредност на параметарот prop=, meta= или list=). Користете го „$1modules=query+foo“ наместо „$1querymodules=foo“.",
        "apihelp-paraminfo-param-mainmodule": "Добави информации и за главниот (врховен) модул. Користете го „$1modules=main“ наместо тоа.",
+       "apihelp-paraminfo-param-pagesetmodule": "Дај ги сите информации и за модулот на збирот страници (укажувајќи titles= и сродни).",
+       "apihelp-paraminfo-param-formatmodules": "Список на називи на форматни модули (вредностза параметарот format=). Наместо тоа, користете го „$1modules“.",
        "apihelp-parse-param-summary": "Опис за расчленување.",
        "apihelp-parse-param-preview": "Расчлени во прегледен режим.",
        "apihelp-parse-param-sectionpreview": "Расчлени во прегледен режим на поднасловот (го овозможува и прегледниот режим).",
        "apihelp-query+alldeletedrevisions-param-to": "Запри го исписот на овој наслов.",
        "apihelp-query+alldeletedrevisions-example-user": "Список на последните 50 избришани придонеси на Корисник:Пример",
        "apihelp-query+alldeletedrevisions-example-ns-main": "Список на последните 50 избришани преработки во главниот именски простор",
+       "apihelp-query+allimages-example-B": "Прикажи список на податотеки што почнуваат со буквата „Б“",
+       "apihelp-query+allimages-example-recent": "Прикажи список на неодамна подигнати податотеки сличен на [[Special:NewFiles]]",
+       "apihelp-query+allimages-example-generator": "Прикажи информации за околу 4 податотеки што почнуваат со буквата „Т“",
+       "apihelp-query+alllinks-description": "Наброј ги сите врски што водат кон даден именски простор.",
+       "apihelp-query+alllinks-param-from": "Наслов на врската од која ќе почне набројувањето.",
+       "apihelp-query+alllinks-param-to": "Наслов на врската на која ќе запре набројувањето.",
+       "apihelp-query+alllinks-param-prefix": "Пребарај ги сите сврзани наслови што почнуваат со оваа вредност.",
+       "apihelp-query+alllinks-param-unique": "Прикажувај само различни поврзани наслови. Не може да се користи со $1prop=ids.\nКога се користи како создавач, дава целни страници наместо изворни.",
        "apihelp-query+alllinks-param-namespace": "Именскиот простор што се набројува.",
        "apihelp-query+alllinks-param-limit": "Колку вкупно ставки да се дадат.",
        "apihelp-query+alllinks-param-dir": "Насока на исписот.",
        "apihelp-upload-param-url": "Од која URL-адреса да се преземе податотеката.",
        "apihelp-upload-param-filekey": "Клуч на претходното подигање кое е привремено складирано.",
        "apihelp-upload-param-sessionkey": "Исто што и $1filekey. Се одржува за назадна складност.",
-       "apihelp-upload-param-stash": "Ако е зададено, опслужувачот нема да ја стави податотеката во складиштето за привремено чување.",
+       "apihelp-upload-param-stash": "Ако е зададено, опслужувачот ќе ја стави податотеката на привремено чување наместо да го додаде во складиштето.",
        "apihelp-upload-param-filesize": "Големина на целото подигање.",
        "apihelp-upload-param-offset": "Зафатнина на делот во бајти.",
        "apihelp-upload-param-chunk": "Содржина на делот.",
index fb368e3..0889dc9 100644 (file)
        "apihelp-expandtemplates-description": "{{doc-apihelp-description|expandtemplates}}",
        "apihelp-expandtemplates-param-title": "{{doc-apihelp-param|expandtemplates|title}}",
        "apihelp-expandtemplates-param-text": "{{doc-apihelp-param|expandtemplates|text}}",
+       "apihelp-expandtemplates-param-revid": "{{doc-apihelp-param|expandtemplates|revid}}",
        "apihelp-expandtemplates-param-prop": "{{doc-apihelp-param|expandtemplates|prop}}",
        "apihelp-expandtemplates-param-includecomments": "{{doc-apihelp-param|expandtemplates|includecomments}}",
        "apihelp-expandtemplates-param-generatexml": "{{doc-apihelp-param|expandtemplates|generatexml}}",
        "apihelp-opensearch-param-limit": "{{doc-apihelp-param|opensearch|limit}}",
        "apihelp-opensearch-param-namespace": "{{doc-apihelp-param|opensearch|namespace}}",
        "apihelp-opensearch-param-suggest": "{{doc-apihelp-param|opensearch|suggest}}",
+       "apihelp-opensearch-param-redirects": "{{doc-apihelp-param|opensearch|redirects}}",
        "apihelp-opensearch-param-format": "{{doc-apihelp-param|opensearch|format}}",
        "apihelp-opensearch-example-te": "{{doc-apihelp-example|opensearch}}",
        "apihelp-options-description": "{{doc-apihelp-description|options}}",
        "apihelp-query+prefixsearch-param-search": "{{doc-apihelp-param|query+prefixsearch|search}}",
        "apihelp-query+prefixsearch-param-namespace": "{{doc-apihelp-param|query+prefixsearch|namespace}}",
        "apihelp-query+prefixsearch-param-limit": "{{doc-apihelp-param|query+prefixsearch|limit}}",
+       "apihelp-query+prefixsearch-param-offset": "{{doc-apihelp-param|query+prefixsearch|offset}}",
        "apihelp-query+prefixsearch-example-simple": "{{doc-apihelp-example|query+prefixsearch}}",
        "apihelp-query+protectedtitles-description": "{{doc-apihelp-description|query+protectedtitles}}",
        "apihelp-query+protectedtitles-param-namespace": "{{doc-apihelp-param|query+protectedtitles|namespace}}",
        "apihelp-upload-example-filekey": "{{doc-apihelp-example|upload}}",
        "apihelp-userrights-description": "{{doc-apihelp-description|userrights}}",
        "apihelp-userrights-param-user": "{{doc-apihelp-param|userrights|user}}\n{{Identical|Username}}",
-       "apihelp-userrights-param-userid": "{{doc-apihelp-param|userrights|userid}}",
+       "apihelp-userrights-param-userid": "{{doc-apihelp-param|userrights|userid}}\n{{Identical|User ID}}",
        "apihelp-userrights-param-add": "{{doc-apihelp-param|userrights|add}}",
        "apihelp-userrights-param-remove": "{{doc-apihelp-param|userrights|remove}}",
        "apihelp-userrights-param-reason": "{{doc-apihelp-param|userrights|reason}}",
index 526869a..1475a84 100644 (file)
@@ -3,7 +3,9 @@
                "authors": [
                        "Jopparn",
                        "Lokal Profil",
-                       "WikiPhoenix"
+                       "WikiPhoenix",
+                       "Victorsa",
+                       "Albinomamba"
                ]
        },
        "apihelp-main-param-action": "Vilken åtgärd som ska utföras.",
        "apihelp-block-param-anononly": "Blockera endast anonyma användare (t.ex. inaktivera anonyma redigeringar för denna IP-adress).",
        "apihelp-block-param-nocreate": "Förhindra registrering av användarkonton.",
        "apihelp-block-param-hidename": "Döljer användarnamnet från blockeringsloggen. (Kräver rättigheten \"hideuser\").",
-       "apihelp-block-param-allowusertalk": "Låter användaren redigera sin egen diskussionssida (beror på $wgBlockAllowsUTEdit).",
+       "apihelp-block-param-allowusertalk": "Låt användaren redigera sin egen diskussionssida (beror på $wgBlockAllowsUTEdit).",
        "apihelp-block-param-reblock": "Skriv över befintlig blockering om användaren redan är blockerad.",
        "apihelp-block-param-watchuser": "Bevaka användarens eller IP-adressens användarsida och diskussionssida",
+       "apihelp-compare-param-fromtitle": "Första titeln att jämföra.",
        "apihelp-compare-param-fromid": "Första sid-ID att jämföra.",
        "apihelp-compare-param-fromrev": "Första version att jämföra.",
+       "apihelp-compare-param-totitle": "Andra titeln att jämföra.",
        "apihelp-compare-param-toid": "Andra sid-ID att jämföra.",
        "apihelp-compare-param-torev": "Andra version att jämföra.",
        "apihelp-compare-example-1": "Skapa en diff mellan version 1 och 2",
        "apihelp-createaccount-description": "Skapa ett nytt användarkonto.",
        "apihelp-createaccount-param-name": "Användarnamn.",
        "apihelp-createaccount-param-password": "Lösenord (ignoreras om $1mailpassword angetts).",
+       "apihelp-createaccount-param-domain": "Domän för extern autentisering (frivillig).",
        "apihelp-createaccount-param-email": "Användarens e-postadress (valfritt).",
        "apihelp-createaccount-param-realname": "Användarens riktiga namn (valfritt).",
        "apihelp-createaccount-example-pass": "Skapa användaren \"testuser\" med lösenordet \"test123\"",
        "apihelp-delete-description": "Radera en sida.",
+       "apihelp-delete-param-reason": "Orsak till radering. Om orsak inte ges kommer en orsak att automatiskt genereras och användas.",
        "apihelp-delete-param-watch": "Lägg till sidan i din bevakningslista.",
        "apihelp-delete-param-unwatch": "Ta bort sidan från din bevakningslista.",
        "apihelp-delete-example-simple": "Radera huvudsidan",
        "apihelp-edit-param-summary": "Redigeringssammanfattning. Även avsnittets rubrik när $1section=new och $1sectiontitle inte anges.",
        "apihelp-edit-param-minor": "Mindre redigering.",
        "apihelp-edit-param-bot": "Markera denna redigering som robotredigering.",
+       "apihelp-edit-param-createonly": "Redigera inte sidan om den redan finns.",
+       "apihelp-edit-param-nocreate": "Kasta ett fel om sidan inte finns.",
        "apihelp-edit-param-watch": "Lägg till sidan i din bevakningslista.",
        "apihelp-edit-param-unwatch": "Ta bort sidan från din bevakningslista.",
+       "apihelp-edit-param-redirect": "Åtgärda automatiskt omdirigeringar.",
        "apihelp-edit-example-edit": "Redigera en sida",
        "apihelp-emailuser-description": "Skicka e-post till en användare.",
+       "apihelp-emailuser-param-target": "Användare att skicka e-post till.",
+       "apihelp-emailuser-param-text": "E-postmeddelandets innehåll.",
+       "apihelp-emailuser-param-ccme": "Skicka en kopia av detta e-postmeddelande till mig.",
+       "apihelp-emailuser-example-email": "Skicka ett e-postmeddelande till användaren \"WikiSysop\" med texten \"Content\"",
        "apihelp-expandtemplates-param-title": "Sidans rubrik.",
        "apihelp-expandtemplates-param-text": "Wikitext att konvertera.",
        "apihelp-feedcontributions-param-year": "Från år (och tidigare).",
        "apihelp-feedcontributions-param-month": "Från månad (och tidigare).",
+       "apihelp-feedcontributions-example-simple": "Returnera bidrag för [[User:Example]]",
+       "apihelp-feedrecentchanges-param-days": "Dagar att begränsa resultaten till.",
+       "apihelp-feedrecentchanges-param-limit": "Maximalt antal resultat att returnera.",
        "apihelp-feedrecentchanges-param-hideminor": "Dölj mindre ändringar.",
        "apihelp-feedrecentchanges-param-hidebots": "Dölj robotändringar.",
        "apihelp-feedrecentchanges-param-hideanons": "Dölj ändringar av oinloggade användare.",
        "apihelp-feedrecentchanges-param-target": "Visa endast ändringarna av sidor som den här sidan länkar till.",
        "apihelp-feedrecentchanges-example-simple": "Visa senaste ändringar",
        "apihelp-feedrecentchanges-example-30days": "Visa senaste ändringar för 30 dygn",
+       "apihelp-filerevert-description": "Återställ en fil till en äldre version.",
        "apihelp-filerevert-param-comment": "Ladda upp kommentar.",
+       "apihelp-filerevert-example-revert": "Återställ Wiki.png till versionen från 2011-03-05T15:27:40Z",
+       "apihelp-help-example-main": "Hjälp för huvudmodul",
        "apihelp-help-example-recursive": "All hjälp på en sida",
        "apihelp-help-example-help": "Hjälp för själva hjälpmodulen",
+       "apihelp-imagerotate-description": "Rotera en eller flera bilder.",
+       "apihelp-imagerotate-param-rotation": "Grader att rotera bild medurs.",
+       "apihelp-imagerotate-example-simple": "Rotera [[:File:Example.png]] med 90 grader",
+       "apihelp-imagerotate-example-generator": "Rotera alla bilder i [[:Category:Flip]] med 180 grader",
+       "apihelp-import-param-summary": "Importera sammanfattning.",
+       "apihelp-import-param-xml": "Uppladdad XML-fil.",
+       "apihelp-import-param-interwikisource": "För interwiki-importer: wiki som du vill importera från.",
+       "apihelp-import-param-interwikipage": "För interwiki-importer: sidan som du vill importera.",
+       "apihelp-import-param-fullhistory": "För interwiki-importer: importera hela historiken, inte bara den aktuella versionen.",
+       "apihelp-import-param-templates": "För interwiki-importer: importera även alla mallar som ingår.",
+       "apihelp-import-param-namespace": "För interwiki-importer: importera till denna namnrymd.",
+       "apihelp-import-param-rootpage": "Importera som undersida till denna sida.",
+       "apihelp-import-example-import": "Importera [[meta:Help:Parserfunktioner]] till namnrymd 100 med full historik.",
        "apihelp-login-param-name": "Användarnamn.",
        "apihelp-login-param-password": "Lösenord.",
+       "apihelp-login-param-domain": "Domän (valfritt).",
        "apihelp-login-example-login": "Logga in",
        "apihelp-logout-description": "Logga ut och rensa sessionsdata.",
        "apihelp-logout-example-logout": "Logga ut den aktuella användaren",
        "apihelp-move-description": "Flytta en sida.",
+       "apihelp-move-param-reason": "Orsak till flyttningen.",
+       "apihelp-move-param-movetalk": "Flytta diskussionssidan om den finns.",
        "apihelp-move-param-noredirect": "Skapa inte en omdirigering.",
+       "apihelp-move-param-watch": "Lägg till sidan och omdirigeringen till din bevakningslista.",
+       "apihelp-move-param-unwatch": "Ta bort sidan och omdirigeringen från din bevakningslista.",
+       "apihelp-move-param-ignorewarnings": "Ignorera alla varningar.",
        "apihelp-opensearch-param-search": "Söksträng.",
+       "apihelp-opensearch-param-limit": "Maximalt antal resultat att returnera.",
+       "apihelp-opensearch-param-namespace": "Namnrymder att genomsöka.",
+       "apihelp-opensearch-param-suggest": "Gör ingenting om [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] är falskt.",
+       "apihelp-opensearch-param-format": "Formatet för utdata.",
+       "apihelp-opensearch-example-te": "Hitta sidor som börjar med \"Te\"",
+       "apihelp-options-example-reset": "Återställ alla inställningar",
+       "apihelp-paraminfo-param-helpformat": "Format för hjälpsträngar.",
+       "apihelp-patrol-example-revid": "Patrullera en sidversion",
+       "apihelp-protect-description": "Ändra skyddsnivån för en sida.",
+       "apihelp-protect-example-protect": "Skydda en sida",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Kan endast användas med $3user.",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Kan inte användas med $3user.",
+       "apihelp-query+allfileusages-example-unique": "Lista unika filtitlar",
+       "apihelp-query+allimages-param-sort": "Egenskap att sortera efter.",
+       "apihelp-query+allmessages-param-lang": "Returnera meddelanden på detta språk.",
+       "apihelp-query+allmessages-example-ipb": "Visa meddelanden som börjar med \"ipb-\"",
+       "apihelp-query+allmessages-example-de": "Visa meddelandena \"august\" och \"mainpage\" på tyska",
+       "apihelp-query+allpages-param-filterredir": "Vilka sidor att lista.",
        "apihelp-query+stashimageinfo-description": "Returnerar filinformation för temporära filer.",
        "apihelp-query+stashimageinfo-param-filekey": "Nyckel som identifierar en tidigare uppladdning som lagrats temporärt.",
        "apihelp-query+stashimageinfo-example-simple": "Returnerar information för en temporär fil",
index 4fe99be..b0c3e4f 100644 (file)
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page/zh 文档]\n* [https://www.mediawiki.org/wiki/API:FAQ/zh 常见问题]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts 程序错误与功能请求]\n</div>\n<strong>状态信息:</strong> 本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong> 当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅 https://www.mediawiki.org/wiki/API:Errors_and_warnings 。",
        "apihelp-main-param-action": "要执行的操作。",
        "apihelp-main-param-format": "输出的格式。",
+       "apihelp-main-param-servedby": "包含保存结果请求的主机名。",
        "apihelp-main-param-curtimestamp": "在结果中包括当前时间戳。",
+       "apihelp-main-param-origin": "当通过跨域名AJAX请求(CORS)访问API时,设置此作为起始域名。这必须包括在任何pre-flight请求中,并因此必须是请求的URI的一部分(而不是POST正文)。这必须匹配Origin中的一个起点:从头到底,因此它已经设置为像http://zh.wikipedia.org或https://meta.wikimedia.org的东西。如果此参数不匹配Origin: header,就返回403错误响应。如果此参数匹配Origin: header并且起点被白名单,将设置一个Access-Control-Allow-Origin开头。",
+       "apihelp-main-param-uselang": "用于消息翻译的语言。代码列表可从[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]通过siprop=languages获取,或指定“user”以使用当前用户的语言设置,或指定“content”以使用此wiki的内容语言。",
        "apihelp-block-description": "封禁一位用户。",
        "apihelp-block-param-user": "您要封禁的用户、IP地址或IP地址段。",
        "apihelp-block-param-expiry": "到期时间。可以是相对时间(例如“5个月”或“2周”)或绝对时间(例如“2014-09-18T12:34:56Z”)。如果设置为“infinite”、“indefinite”或“never”,封禁将无限期。",
@@ -44,7 +47,9 @@
        "apihelp-createaccount-param-realname": "用户的真实姓名(可选)。",
        "apihelp-createaccount-param-mailpassword": "如果设置为任何值,将向用户发送一个随机密码。",
        "apihelp-createaccount-param-reason": "将要放在日志中的,关于创建帐户的可选原因。",
+       "apihelp-createaccount-param-language": "要为用户设置为默认值的语言代码(可选,默认为内容语言)。",
        "apihelp-createaccount-example-pass": "创建用户“testuser”和密码“test123”",
+       "apihelp-createaccount-example-mail": "创建用户“testmailuser”并电邮发送一个随机生成的密码",
        "apihelp-delete-description": "删除一个页面。",
        "apihelp-delete-param-title": "你所希望删除的页面的标题。不能与$1pageid一起使用。",
        "apihelp-delete-param-pageid": "你所希望删除的页面的页面ID。不能与$1title一起使用。",
@@ -55,6 +60,8 @@
        "apihelp-delete-example-reason": "删除首页,原因“准备移动”",
        "apihelp-disabled-description": "此模块已禁用。",
        "apihelp-edit-description": "创建和编辑页面。",
+       "apihelp-edit-param-title": "您希望编辑的页面标题。不能与$1pageid一起使用。",
+       "apihelp-edit-param-pageid": "您希望编辑的页面ID。不能与$1title一起使用。",
        "apihelp-edit-param-sectiontitle": "新小节的标题。",
        "apihelp-edit-param-text": "页面内容。",
        "apihelp-edit-param-summary": "编辑摘要。当$1section=new且未设置$1sectiontitle时,还包括小节标题。",
@@ -83,6 +90,7 @@
        "apihelp-expandtemplates-description": "展开维基文本中的所有模板。",
        "apihelp-expandtemplates-param-title": "页面标题。",
        "apihelp-expandtemplates-param-text": "要转换的wiki文本。",
+       "apihelp-expandtemplates-param-revid": "修订版本ID,用于<nowiki>{{REVISIONID}}</nowiki>和类似变体。",
        "apihelp-expandtemplates-example-simple": "展开wiki文本“<nowiki>{{Project:Sandbox}}</nowiki>”",
        "apihelp-feedcontributions-description": "返回用户贡献纲要。",
        "apihelp-feedcontributions-param-feedformat": "纲要的格式。",
        "apihelp-filerevert-param-filename": "目标文件名,不包含前缀“File:”。",
        "apihelp-filerevert-param-comment": "上传评论。",
        "apihelp-filerevert-example-revert": "回退Wiki.png至2011-03-05T15:27:40Z的版本",
+       "apihelp-help-param-helpformat": "帮助的输出格式。",
        "apihelp-help-example-main": "主模块帮助",
        "apihelp-help-example-recursive": "一个页面中的所有帮助",
        "apihelp-help-example-help": "帮助模块本身的帮助",
        "apihelp-query-param-list": "要获取的列表。",
        "apihelp-query-param-meta": "要获取的元数据。",
        "apihelp-query-example-revisions": "获取首页的[[Special:ApiHelp/query+siteinfo|站点信息]]和[[Special:ApiHelp/query+revisions|修订版本]]",
+       "apihelp-query-example-allpages": "获取以“API/”开头的页面的修订版本",
        "apihelp-query+allcategories-description": "枚举所有类别。",
        "apihelp-query+allcategories-param-from": "要作为枚举起始点的类别。",
        "apihelp-query+allcategories-param-to": "要作为枚举终止点的类别。",
        "apihelp-query+alldeletedrevisions-param-to": "列出至此标题为止。",
        "apihelp-query+alldeletedrevisions-param-namespace": "只列出此名字空间的页面。",
        "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "'''注意:'''由于[https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser模式],同时使用$1user和$1namespace将导致继续前返回少于“$1limit”个结果,在极端条件下可能不返回任何结果。",
+       "apihelp-query+alldeletedrevisions-example-user": "列出由User:Example作出的最近50次已删除贡献",
+       "apihelp-query+alldeletedrevisions-example-ns-main": "列出最近50次已删除的主名字空间修订",
        "apihelp-query+allfileusages-param-dir": "罗列所采用的方向。",
        "apihelp-query+allfileusages-example-unique": "列出唯一性的文件标题",
        "apihelp-query+allfileusages-example-unique-generator": "获取所有文件标题,并标记出缺失者",
        "apihelp-query+categories-example-simple": "获取属于[[阿尔伯特·爱因斯坦]]的分类列表",
        "apihelp-query+categories-example-generator": "获取有关用于[[阿尔伯特·爱因斯坦]]的分类的信息",
        "apihelp-query+categoryinfo-example-simple": "获取有关[[:Category:Foo]]和[[:Category:Bar]]的信息",
+       "apihelp-query+categorymembers-description": "在指定的分类中列出所有页面。",
        "apihelp-query+categorymembers-param-sort": "要作为排序方式的属性。",
        "apihelp-query+categorymembers-param-startsortkey": "请改用$1starthexsortkey。",
        "apihelp-query+categorymembers-param-endsortkey": "请改用$1endhexsortkey。",
        "apihelp-query+iwlinks-param-title": "用于搜索的跨wiki链接。必须与$1prefix一起使用。",
        "apihelp-query+iwlinks-example-simple": "从[[首页]]获取跨wiki链接",
        "apihelp-query+langbacklinks-param-lang": "用于语言链接的语言。",
+       "apihelp-query+langbacklinks-param-title": "要搜索的语言链接。必须与$1lang一起使用。",
        "apihelp-query+langbacklinks-example-simple": "获取链接至[[:fr:Test]]的页面",
        "apihelp-query+langbacklinks-example-generator": "获取链接至[[:fr:Test]]的页面的信息",
        "apihelp-query+langlinks-param-limit": "返回多少语言链接。",
+       "apihelp-query+langlinks-param-url": "是否获取完整URL(不能与$1prop一起使用)。",
+       "apihelp-query+langlinks-param-title": "要搜索的链接。必须与$1lang一起使用。",
+       "apihelp-query+langlinks-param-inlanguagecode": "本地化语言名称的语言代码。",
        "apihelp-query+langlinks-example-simple": "从[[首页]]获取跨语言链接",
        "apihelp-query+links-param-limit": "返回多少链接。",
        "apihelp-query+links-example-simple": "从[[首页]]获取链接",
        "apihelp-query+pageswithprop-example-generator": "获取有关前10个使用_&#95;NOTOC_&#95;的页面的信息",
        "apihelp-query+prefixsearch-param-search": "搜索字符串。",
        "apihelp-query+prefixsearch-param-namespace": "搜索的名字空间。",
+       "apihelp-query+prefixsearch-param-offset": "跳过的结果数。",
        "apihelp-query+protectedtitles-param-namespace": "只列出这些名字空间的标题。",
        "apihelp-query+protectedtitles-param-limit": "返回的总计页面数。",
        "apihelp-query+protectedtitles-example-simple": "受保护标题列表",
        "apihelp-query+search-param-interwiki": "搜索结果中包含跨wiki结果,如果可用。",
        "apihelp-query+search-example-simple": "搜索“意义”",
        "apihelp-query+search-example-text": "搜索文本“意义”",
+       "apihelp-query+siteinfo-param-numberingroup": "列出用户组中的用户数。",
        "apihelp-query+siteinfo-example-simple": "获取网站信息",
        "apihelp-query+siteinfo-example-interwiki": "获取本地跨wiki前缀列表",
        "apihelp-query+tags-description": "列出更改标签。",
        "apihelp-userrights-param-remove": "将用户从这些组中移除。",
        "apihelp-userrights-param-reason": "更改原因。",
        "apihelp-userrights-example-user": "将用户FooBot添加至“机器人”用户组,并从“管理员”和“行政员”组移除",
+       "apihelp-userrights-example-userid": "将ID为123的用户加入至“机器人”组,并将其从“管理员”和“行政员”组移除",
+       "apihelp-watch-param-title": "要(取消)监视的页面。也可使用$1titles。",
        "apihelp-watch-example-watch": "监视页面“首页”",
        "apihelp-watch-example-unwatch": "取消监视页面“首页”",
        "apihelp-dbg-description": "输出数据为PHP的var_export()格式。",
+       "apihelp-dbgfm-description": "输出数据为PHP的var_export()格式(HTML优质打印效果)。",
        "apihelp-dump-description": "输出数据为PHP的var_dump()格式。",
+       "apihelp-dumpfm-description": "输出数据为PHP的var_dump()格式(HTML优质打印效果)。",
        "apihelp-json-description": "输出数据为JSON格式。",
+       "apihelp-jsonfm-description": "输出数据为JSON格式(HTML优质打印效果)。",
        "apihelp-none-description": "不输出任何东西。",
        "apihelp-php-description": "输出数据为序列化PHP格式。",
+       "apihelp-phpfm-description": "输出数据为序列化PHP格式(HTML优质打印效果)。",
+       "apihelp-rawfm-description": "输出数据为JSON格式,带调试元素(HTML优质打印效果)。",
        "apihelp-txt-description": "输出数据为PHP的print_r()格式。",
+       "apihelp-txtfm-description": "输出数据为PHP的print_r()格式(HTML优质打印效果)。",
        "apihelp-wddx-description": "输出数据为WDDX格式。",
+       "apihelp-wddxfm-description": "输出数据为WDDX格式(HTML优质打印效果)。",
        "apihelp-xml-description": "输出数据为XML格式。",
+       "apihelp-xmlfm-description": "输出数据为XML格式(HTML优质打印效果)。",
        "apihelp-yaml-description": "输出数据为YAML格式。",
+       "apihelp-yamlfm-description": "输出数据为YAML格式(HTML优质打印效果)。",
        "api-format-title": "MediaWiki API 结果",
        "api-orm-param-props": "要查询的字段。",
        "api-help-title": "MediaWiki API 帮助",
index 7af61ae..05847db 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Cwlin0416",
-                       "Liuxinyu970226"
+                       "Liuxinyu970226",
+                       "LNDDYL"
                ]
        },
        "apihelp-main-param-action": "要執行的動作。",
@@ -53,6 +54,8 @@
        "apihelp-edit-param-sectiontitle": "新章節的標題。",
        "apihelp-edit-param-text": "頁面內容。",
        "apihelp-edit-param-summary": "編輯摘要。 當未設定 $1section=new 與 $1sectiontitle 時也會當做章節標題。",
+       "apihelp-edit-param-minor": "小編輯。",
+       "apihelp-edit-param-notminor": "非小編輯。",
        "apihelp-edit-param-createonly": "若頁面已存在,則不編輯頁面。",
        "apihelp-edit-param-nocreate": "若頁面不存在,則產生錯誤。",
        "apihelp-edit-param-watch": "加入頁面至您的監視清單。",
index 2a3cd38..2c908af 100644 (file)
@@ -36,7 +36,7 @@ use Cdb\Writer as CdbWriter;
  * as grammatical transformation, is done by the caller.
  */
 class LocalisationCache {
-       const VERSION = 2;
+       const VERSION = 3;
 
        /** Configuration associative array */
        private $conf;
@@ -792,6 +792,22 @@ class LocalisationCache {
                return $used;
        }
 
+       /**
+        * Gets the combined list of messages dirs from
+        * core and extensions
+        *
+        * @since 1.25
+        * @return array
+        */
+       protected function getMessagesDirs() {
+               global $wgMessagesDirs, $IP;
+               return array(
+                       'core' => "$IP/languages/i18n",
+                       'api' => "$IP/includes/api/i18n",
+                       'oojs-ui' => "$IP/resources/lib/oojs-ui/i18n",
+               ) + $wgMessagesDirs;
+       }
+
        /**
         * Load localisation data for a given language for both core and extensions
         * and save it to the persistent cache store and the process cache
@@ -799,7 +815,7 @@ class LocalisationCache {
         * @throws MWException
         */
        public function recache( $code ) {
-               global $wgExtensionMessagesFiles, $wgMessagesDirs;
+               global $wgExtensionMessagesFiles;
                wfProfileIn( __METHOD__ );
 
                if ( !$code ) {
@@ -846,6 +862,7 @@ class LocalisationCache {
                }
 
                $codeSequence = array_merge( array( $code ), $coreData['fallbackSequence'] );
+               $messageDirs = $this->getMessagesDirs();
 
                wfProfileIn( __METHOD__ . '-fallbacks' );
 
@@ -854,7 +871,7 @@ class LocalisationCache {
                        $codeSequence,
                        array_fill( 0, count( $codeSequence ), $initialData ) );
                foreach ( $wgExtensionMessagesFiles as $extension => $fileName ) {
-                       if ( isset( $wgMessagesDirs[$extension] ) ) {
+                       if ( isset( $messageDirs[$extension] ) ) {
                                # This extension has JSON message data; skip the PHP shim
                                continue;
                        }
@@ -882,7 +899,7 @@ class LocalisationCache {
                        $csData = $initialData;
 
                        # Load core messages and the extension localisations.
-                       foreach ( $wgMessagesDirs as $dirs ) {
+                       foreach ( $messageDirs as $dirs ) {
                                foreach ( (array)$dirs as $dir ) {
                                        $fileName = "$dir/$csCode.json";
                                        $data = $this->readJSONFile( $fileName );
@@ -949,6 +966,7 @@ class LocalisationCache {
 
                # Add cache dependencies for any referenced globals
                $deps['wgExtensionMessagesFiles'] = new GlobalDependency( 'wgExtensionMessagesFiles' );
+               // $wgMessagesDirs is used in LocalisationCache::getMessagesDirs()
                $deps['wgMessagesDirs'] = new GlobalDependency( 'wgMessagesDirs' );
                $deps['version'] = new ConstantDependency( 'LocalisationCache::VERSION' );
 
index ac41722..9aa42dd 100644 (file)
@@ -214,7 +214,7 @@ abstract class ContentHandler {
                }
 
                // Hook can force JS/CSS
-               wfRunHooks( 'TitleIsCssOrJsPage', array( $title, &$isCssOrJsPage ) );
+               wfRunHooks( 'TitleIsCssOrJsPage', array( $title, &$isCssOrJsPage ), '1.25' );
 
                // Is this a .css subpage of a user page?
                $isJsCssSubpage = NS_USER == $ns
@@ -229,7 +229,7 @@ abstract class ContentHandler {
                $isWikitext = $isWikitext && !$isCssOrJsPage && !$isJsCssSubpage;
 
                // Hook can override $isWikitext
-               wfRunHooks( 'TitleIsWikitextPage', array( $title, &$isWikitext ) );
+               wfRunHooks( 'TitleIsWikitextPage', array( $title, &$isWikitext ), '1.25' );
 
                if ( !$isWikitext ) {
                        switch ( $ext ) {
index 457b83d..d221897 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Content handler for JavaScript pages.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
 /**
  * Content handler for JavaScript pages.
  *
+ * @todo Create a ScriptContentHandler base class, do highlighting stuff there?
+ *
  * @since 1.21
  * @ingroup Content
- * @todo make ScriptContentHandler base class, do highlighting stuff there?
  */
 class JavaScriptContentHandler extends CodeContentHandler {
 
@@ -36,6 +35,9 @@ class JavaScriptContentHandler extends CodeContentHandler {
                parent::__construct( $modelId, array( CONTENT_FORMAT_JAVASCRIPT ) );
        }
 
+       /**
+        * @return string
+        */
        protected function getContentClass() {
                return 'JavaScriptContent';
        }
index 392ce37..b149f52 100644 (file)
@@ -1,15 +1,31 @@
 <?php
 /**
- * JSON Schema Content Handler
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
- * @file
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
  *
- * @author Ori Livneh <ori@wikimedia.org>
- * @author Kunal Mehta <legoktm@gmail.com>
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
  */
 
 /**
+ * Content handler for JSON.
+ *
+ * @author Ori Livneh <ori@wikimedia.org>
+ * @author Kunal Mehta <legoktm@gmail.com>
+ *
  * @since 1.24
+ * @ingroup Content
  */
 class JsonContentHandler extends CodeContentHandler {
 
index fc13eeb..41b70c3 100644 (file)
@@ -1027,22 +1027,11 @@ abstract class DatabaseBase implements IDatabase {
                        $lastError = $this->lastError();
                        $lastErrno = $this->lastErrno();
                        if ( $this->ping() ) {
-                               global $wgRequestTime;
                                wfDebug( "Reconnected\n" );
-                               $sqlx = $wgDebugDumpSqlLength ? substr( $commentedSql, 0, $wgDebugDumpSqlLength )
-                                       : $commentedSql;
-                               $sqlx = strtr( $sqlx, "\t\n", '  ' );
-                               $elapsed = round( microtime( true ) - $wgRequestTime, 3 );
-                               if ( $elapsed < 300 ) {
-                                       # Not a database error to lose a transaction after a minute or two
-                                       wfLogDBError(
-                                               "Connection lost and reconnected after {$elapsed}s, query: $sqlx",
-                                               $this->getLogContext( array(
-                                                       'method' => __METHOD__,
-                                                       'query' => $sqlx,
-                                               ) )
-                                       );
-                               }
+                               $server = $this->getServer();
+                               $msg = __METHOD__ . ": lost connection to $server; reconnected";
+                               wfDebugLog( 'DBPerformance', "$msg:\n" . wfBacktrace( true ) );
+
                                if ( $hadTrx ) {
                                        # Leave $ret as false and let an error be reported.
                                        # Callers may catch the exception and continue to use the DB.
@@ -3907,47 +3896,49 @@ abstract class DatabaseBase implements IDatabase {
         *
         * - '{$var}' should be used for text and is passed through the database's
         *   addQuotes method.
-        * - `{$var}` should be used for identifiers (eg: table and database names),
-        *   it is passed through the database's addIdentifierQuotes method which
+        * - `{$var}` should be used for identifiers (e.g. table and database names).
+        *   It is passed through the database's addIdentifierQuotes method which
         *   can be overridden if the database uses something other than backticks.
-        * - / *$var* / is just encoded, besides traditional table prefix and
-        *   table options its use should be avoided.
+        * - / *_* / or / *$wgDBprefix* / passes the name that follows through the
+        *   database's tableName method.
+        * - / *i* / passes the name that follows through the database's indexName method.
+        * - In all other cases, / *$var* / is left unencoded. Except for table options,
+        *   its use should be avoided. In 1.24 and older, string encoding was applied.
         *
         * @param string $ins SQL statement to replace variables in
         * @return string The new SQL statement with variables replaced
         */
-       protected function replaceSchemaVars( $ins ) {
-               $vars = $this->getSchemaVars();
-               foreach ( $vars as $var => $value ) {
-                       // replace '{$var}'
-                       $ins = str_replace( '\'{$' . $var . '}\'', $this->addQuotes( $value ), $ins );
-                       // replace `{$var}`
-                       $ins = str_replace( '`{$' . $var . '}`', $this->addIdentifierQuotes( $value ), $ins );
-                       // replace /*$var*/
-                       $ins = str_replace( '/*$' . $var . '*/', $this->strencode( $value ), $ins );
-               }
-
-               return $ins;
-       }
-
-       /**
-        * Replace variables in sourced SQL
-        *
-        * @param string $ins
-        * @return string
-        */
        protected function replaceVars( $ins ) {
-               $ins = $this->replaceSchemaVars( $ins );
-
-               // Table prefixes
-               $ins = preg_replace_callback( '!/\*(?:\$wgDBprefix|_)\*/([a-zA-Z_0-9]*)!',
-                       array( $this, 'tableNameCallback' ), $ins );
-
-               // Index names
-               $ins = preg_replace_callback( '!/\*i\*/([a-zA-Z_0-9]*)!',
-                       array( $this, 'indexNameCallback' ), $ins );
-
-               return $ins;
+               $that = $this;
+               $vars = $this->getSchemaVars();
+               return preg_replace_callback(
+                       '!
+                               /\* (\$wgDBprefix|[_i]) \*/ (\w*) | # 1-2. tableName, indexName
+                               \'\{\$ (\w+) }\'                  | # 3. addQuotes
+                               `\{\$ (\w+) }`                    | # 4. addIdentifierQuotes
+                               /\*\$ (\w+) \*/                     # 5. leave unencoded
+                       !x',
+                       function ( $m ) use ( $that, $vars ) {
+                               // Note: Because of <https://bugs.php.net/bug.php?id=51881>,
+                               // check for both nonexistent keys *and* the empty string.
+                               if ( isset( $m[1] ) && $m[1] !== '' ) {
+                                       if ( $m[1] === 'i' ) {
+                                               return $that->indexName( $m[2] );
+                                       } else {
+                                               return $that->tableName( $m[2] );
+                                       }
+                               } elseif ( isset( $m[3] ) && $m[3] !== '' && array_key_exists( $m[3], $vars ) ) {
+                                       return $that->addQuotes( $vars[$m[3]] );
+                               } elseif ( isset( $m[4] ) && $m[4] !== '' && array_key_exists( $m[4], $vars ) ) {
+                                       return $that->addIdentifierQuotes( $vars[$m[4]] );
+                               } elseif ( isset( $m[5] ) && $m[5] !== '' && array_key_exists( $m[5], $vars ) ) {
+                                       return $vars[$m[5]];
+                               } else {
+                                       return $m[0];
+                               }
+                       },
+                       $ins
+               );
        }
 
        /**
@@ -3976,26 +3967,6 @@ abstract class DatabaseBase implements IDatabase {
                return array();
        }
 
-       /**
-        * Table name callback
-        *
-        * @param array $matches
-        * @return string
-        */
-       protected function tableNameCallback( $matches ) {
-               return $this->tableName( $matches[1] );
-       }
-
-       /**
-        * Index name callback
-        *
-        * @param array $matches
-        * @return string
-        */
-       protected function indexNameCallback( $matches ) {
-               return $this->indexName( $matches[1] );
-       }
-
        /**
         * Check to see if a named lock is available. This is non-blocking.
         *
index 2f93ce7..e049a5d 100644 (file)
@@ -27,7 +27,7 @@
  */
 abstract class LBFactory {
        /** @var LBFactory */
-       protected static $instance;
+       private static $instance;
 
        /**
         * Disables all access to the load balancer, will cause all database access
@@ -43,7 +43,7 @@ abstract class LBFactory {
         *
         * @return LBFactory
         */
-       static function &singleton() {
+       public static function &singleton() {
                global $wgLBFactoryConf;
 
                if ( is_null( self::$instance ) ) {
@@ -87,7 +87,7 @@ abstract class LBFactory {
        /**
         * Shut down, close connections and destroy the cached instance.
         */
-       static function destroyInstance() {
+       public static function destroyInstance() {
                if ( self::$instance ) {
                        self::$instance->shutdown();
                        self::$instance->forEachLBCallMethod( 'closeAll' );
@@ -100,7 +100,7 @@ abstract class LBFactory {
         *
         * @param LBFactory $instance
         */
-       static function setInstance( $instance ) {
+       public static function setInstance( $instance ) {
                self::destroyInstance();
                self::$instance = $instance;
        }
@@ -109,7 +109,7 @@ abstract class LBFactory {
         * Construct a factory based on a configuration array (typically from $wgLBFactoryConf)
         * @param array $conf
         */
-       abstract function __construct( array $conf );
+       public abstract function __construct( array $conf );
 
        /**
         * Create a new load balancer object. The resulting object will be untracked,
@@ -118,7 +118,7 @@ abstract class LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancer
         */
-       abstract function newMainLB( $wiki = false );
+       public abstract function newMainLB( $wiki = false );
 
        /**
         * Get a cached (tracked) load balancer object.
@@ -126,7 +126,7 @@ abstract class LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancer
         */
-       abstract function getMainLB( $wiki = false );
+       public abstract function getMainLB( $wiki = false );
 
        /**
         * Create a new load balancer for external storage. The resulting object will be
@@ -137,7 +137,7 @@ abstract class LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancer
         */
-       abstract function newExternalLB( $cluster, $wiki = false );
+       protected abstract function newExternalLB( $cluster, $wiki = false );
 
        /**
         * Get a cached (tracked) load balancer for external storage
@@ -146,7 +146,7 @@ abstract class LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancer
         */
-       abstract function &getExternalLB( $cluster, $wiki = false );
+       public abstract function &getExternalLB( $cluster, $wiki = false );
 
        /**
         * Execute a function for each tracked load balancer
@@ -156,13 +156,13 @@ abstract class LBFactory {
         * @param callable $callback
         * @param array $params
         */
-       abstract function forEachLB( $callback, array $params = array() );
+       public abstract function forEachLB( $callback, array $params = array() );
 
        /**
         * Prepare all tracked load balancers for shutdown
         * STUB
         */
-       function shutdown() {
+       public function shutdown() {
        }
 
        /**
@@ -171,24 +171,16 @@ abstract class LBFactory {
         * @param string $methodName
         * @param array $args
         */
-       function forEachLBCallMethod( $methodName, array $args = array() ) {
-               $this->forEachLB( array( $this, 'callMethod' ), array( $methodName, $args ) );
-       }
-
-       /**
-        * Private helper for forEachLBCallMethod
-        * @param LoadBalancer $loadBalancer
-        * @param string $methodName
-        * @param array $args
-        */
-       function callMethod( $loadBalancer, $methodName, $args ) {
-               call_user_func_array( array( $loadBalancer, $methodName ), $args );
+       private function forEachLBCallMethod( $methodName, array $args = array() ) {
+               $this->forEachLB( function( LoadBalancer $loadBalancer, $methodName, array $args ) {
+                       call_user_func_array( array( $loadBalancer, $methodName ), $args );
+               }, array( $methodName, $args ) );
        }
 
        /**
         * Commit changes on all master connections
         */
-       function commitMasterChanges() {
+       public function commitMasterChanges() {
                $this->forEachLBCallMethod( 'commitMasterChanges' );
        }
 
@@ -196,7 +188,7 @@ abstract class LBFactory {
         * Rollback changes on all master connections
         * @since 1.23
         */
-       function rollbackMasterChanges() {
+       public function rollbackMasterChanges() {
                $this->forEachLBCallMethod( 'rollbackMasterChanges' );
        }
 
@@ -205,7 +197,7 @@ abstract class LBFactory {
         * @since 1.23
         * @return bool
         */
-       function hasMasterChanges() {
+       public function hasMasterChanges() {
                $ret = false;
                $this->forEachLB( function ( $lb ) use ( &$ret ) {
                        $ret = $ret || $lb->hasMasterChanges();
@@ -219,15 +211,15 @@ abstract class LBFactory {
  */
 class LBFactorySimple extends LBFactory {
        /** @var LoadBalancer */
-       protected $mainLB;
+       private $mainLB;
 
        /** @var LoadBalancer[] */
-       protected $extLBs = array();
+       private $extLBs = array();
 
        /** @var ChronologyProtector */
-       protected $chronProt;
+       private $chronProt;
 
-       function __construct( array $conf ) {
+       public function __construct( array $conf ) {
                $this->chronProt = new ChronologyProtector;
        }
 
@@ -235,7 +227,7 @@ class LBFactorySimple extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancer
         */
-       function newMainLB( $wiki = false ) {
+       public function newMainLB( $wiki = false ) {
                global $wgDBservers;
                if ( $wgDBservers ) {
                        $servers = $wgDBservers;
@@ -274,7 +266,7 @@ class LBFactorySimple extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancer
         */
-       function getMainLB( $wiki = false ) {
+       public function getMainLB( $wiki = false ) {
                if ( !isset( $this->mainLB ) ) {
                        $this->mainLB = $this->newMainLB( $wiki );
                        $this->mainLB->parentInfo( array( 'id' => 'main' ) );
@@ -290,7 +282,7 @@ class LBFactorySimple extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancer
         */
-       function newExternalLB( $cluster, $wiki = false ) {
+       protected function newExternalLB( $cluster, $wiki = false ) {
                global $wgExternalServers;
                if ( !isset( $wgExternalServers[$cluster] ) ) {
                        throw new MWException( __METHOD__ . ": Unknown cluster \"$cluster\"" );
@@ -306,7 +298,7 @@ class LBFactorySimple extends LBFactory {
         * @param bool|string $wiki
         * @return array
         */
-       function &getExternalLB( $cluster, $wiki = false ) {
+       public function &getExternalLB( $cluster, $wiki = false ) {
                if ( !isset( $this->extLBs[$cluster] ) ) {
                        $this->extLBs[$cluster] = $this->newExternalLB( $cluster, $wiki );
                        $this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
@@ -324,7 +316,7 @@ class LBFactorySimple extends LBFactory {
         * @param callable $callback
         * @param array $params
         */
-       function forEachLB( $callback, array $params = array() ) {
+       public function forEachLB( $callback, array $params = array() ) {
                if ( isset( $this->mainLB ) ) {
                        call_user_func_array( $callback, array_merge( array( $this->mainLB ), $params ) );
                }
@@ -333,7 +325,7 @@ class LBFactorySimple extends LBFactory {
                }
        }
 
-       function shutdown() {
+       public function shutdown() {
                if ( $this->mainLB ) {
                        $this->chronProt->shutdownLB( $this->mainLB );
                }
@@ -352,26 +344,26 @@ class LBFactorySimple extends LBFactory {
  * LBFactory::enableBackend() to return to normal behavior
  */
 class LBFactoryFake extends LBFactory {
-       function __construct( array $conf ) {
+       public function __construct( array $conf ) {
        }
 
-       function newMainLB( $wiki = false ) {
+       public function newMainLB( $wiki = false ) {
                throw new DBAccessError;
        }
 
-       function getMainLB( $wiki = false ) {
+       public function getMainLB( $wiki = false ) {
                throw new DBAccessError;
        }
 
-       function newExternalLB( $cluster, $wiki = false ) {
+       protected function newExternalLB( $cluster, $wiki = false ) {
                throw new DBAccessError;
        }
 
-       function &getExternalLB( $cluster, $wiki = false ) {
+       public function &getExternalLB( $cluster, $wiki = false ) {
                throw new DBAccessError;
        }
 
-       function forEachLB( $callback, array $params = array() ) {
+       public function forEachLB( $callback, array $params = array() ) {
        }
 }
 
@@ -379,7 +371,7 @@ class LBFactoryFake extends LBFactory {
  * Exception class for attempted DB access
  */
 class DBAccessError extends MWException {
-       function __construct() {
+       public function __construct() {
                parent::__construct( "Mediawiki tried to access the database via wfGetDB(). " .
                        "This is not allowed." );
        }
index 7100615..aa305ab 100644 (file)
@@ -77,82 +77,82 @@ class LBFactoryMulti extends LBFactory {
        // Required settings
 
        /** @var array A map of database names to section names */
-       protected $sectionsByDB;
+       private $sectionsByDB;
 
        /**
         * @var array A 2-d map. For each section, gives a map of server names to
         * load ratios
         */
-       protected $sectionLoads;
+       private $sectionLoads;
 
        /**
         * @var array A server info associative array as documented for
         * $wgDBservers. The host, hostName and load entries will be
         * overridden
         */
-       protected $serverTemplate;
+       private $serverTemplate;
 
        // Optional settings
 
        /** @var array A 3-d map giving server load ratios for each section and group */
-       protected $groupLoadsBySection = array();
+       private $groupLoadsBySection = array();
 
        /** @var array A 3-d map giving server load ratios by DB name */
-       protected $groupLoadsByDB = array();
+       private $groupLoadsByDB = array();
 
        /** @var array A map of hostname to IP address */
-       protected $hostsByName = array();
+       private $hostsByName = array();
 
        /** @var array A map of external storage cluster name to server load map */
-       protected $externalLoads = array();
+       private $externalLoads = array();
 
        /**
         * @var array A set of server info keys overriding serverTemplate for
         * external storage
         */
-       protected $externalTemplateOverrides;
+       private $externalTemplateOverrides;
 
        /**
         * @var array A 2-d map overriding serverTemplate and
         * externalTemplateOverrides on a server-by-server basis. Applies to both
         * core and external storage
         */
-       protected $templateOverridesByServer;
+       private $templateOverridesByServer;
 
        /** @var array A 2-d map overriding the server info by external storage cluster */
-       protected $templateOverridesByCluster;
+       private $templateOverridesByCluster;
 
        /** @var array An override array for all master servers */
-       protected $masterTemplateOverrides;
+       private $masterTemplateOverrides;
 
        /**
         * @var array|bool A map of section name to read-only message. Missing or
         * false for read/write
         */
-       protected $readOnlyBySection = array();
+       private $readOnlyBySection = array();
 
        // Other stuff
 
        /** @var array Load balancer factory configuration */
-       protected $conf;
+       private $conf;
 
        /** @var LoadBalancer[] */
-       protected $mainLBs = array();
+       private $mainLBs = array();
 
        /** @var LoadBalancer[] */
-       protected $extLBs = array();
+       private $extLBs = array();
 
        /** @var string */
-       protected $lastWiki;
+       private $lastWiki;
 
        /** @var string */
-       protected $lastSection;
+       private $lastSection;
 
        /**
         * @param array $conf
         * @throws MWException
         */
-       function __construct( array $conf ) {
+       public function __construct( array $conf ) {
                $this->chronProt = new ChronologyProtector;
                $this->conf = $conf;
                $required = array( 'sectionsByDB', 'sectionLoads', 'serverTemplate' );
@@ -186,7 +186,7 @@ class LBFactoryMulti extends LBFactory {
         * @param bool|string $wiki
         * @return string
         */
-       function getSectionForWiki( $wiki = false ) {
+       private function getSectionForWiki( $wiki = false ) {
                if ( $this->lastWiki === $wiki ) {
                        return $this->lastSection;
                }
@@ -206,7 +206,7 @@ class LBFactoryMulti extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancer
         */
-       function newMainLB( $wiki = false ) {
+       public function newMainLB( $wiki = false ) {
                list( $dbName, ) = $this->getDBNameAndPrefix( $wiki );
                $section = $this->getSectionForWiki( $wiki );
                $groupLoads = array();
@@ -229,7 +229,7 @@ class LBFactoryMulti extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancer
         */
-       function getMainLB( $wiki = false ) {
+       public function getMainLB( $wiki = false ) {
                $section = $this->getSectionForWiki( $wiki );
                if ( !isset( $this->mainLBs[$section] ) ) {
                        $lb = $this->newMainLB( $wiki, $section );
@@ -247,7 +247,7 @@ class LBFactoryMulti extends LBFactory {
         * @throws MWException
         * @return LoadBalancer
         */
-       function newExternalLB( $cluster, $wiki = false ) {
+       protected function newExternalLB( $cluster, $wiki = false ) {
                if ( !isset( $this->externalLoads[$cluster] ) ) {
                        throw new MWException( __METHOD__ . ": Unknown cluster \"$cluster\"" );
                }
@@ -267,7 +267,7 @@ class LBFactoryMulti extends LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancer
         */
-       function &getExternalLB( $cluster, $wiki = false ) {
+       public function &getExternalLB( $cluster, $wiki = false ) {
                if ( !isset( $this->extLBs[$cluster] ) ) {
                        $this->extLBs[$cluster] = $this->newExternalLB( $cluster, $wiki );
                        $this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
@@ -285,7 +285,7 @@ class LBFactoryMulti extends LBFactory {
         * @param array $groupLoads
         * @return LoadBalancer
         */
-       function newLoadBalancer( $template, $loads, $groupLoads ) {
+       private function newLoadBalancer( $template, $loads, $groupLoads ) {
                $servers = $this->makeServerArray( $template, $loads, $groupLoads );
                $lb = new LoadBalancer( array(
                        'servers' => $servers,
@@ -302,7 +302,7 @@ class LBFactoryMulti extends LBFactory {
         * @param array $groupLoads
         * @return array
         */
-       function makeServerArray( $template, $loads, $groupLoads ) {
+       private function makeServerArray( $template, $loads, $groupLoads ) {
                $servers = array();
                $master = true;
                $groupLoadsByServer = $this->reindexGroupLoads( $groupLoads );
@@ -344,7 +344,7 @@ class LBFactoryMulti extends LBFactory {
         * @param array $groupLoads
         * @return array
         */
-       function reindexGroupLoads( $groupLoads ) {
+       private function reindexGroupLoads( $groupLoads ) {
                $reindexed = array();
                foreach ( $groupLoads as $group => $loads ) {
                        foreach ( $loads as $server => $load ) {
@@ -360,7 +360,7 @@ class LBFactoryMulti extends LBFactory {
         * @param bool|string $wiki
         * @return array
         */
-       function getDBNameAndPrefix( $wiki = false ) {
+       private function getDBNameAndPrefix( $wiki = false ) {
                if ( $wiki === false ) {
                        global $wgDBname, $wgDBprefix;
 
@@ -377,7 +377,7 @@ class LBFactoryMulti extends LBFactory {
         * @param callable $callback
         * @param array $params
         */
-       function forEachLB( $callback, array $params = array() ) {
+       public function forEachLB( $callback, array $params = array() ) {
                foreach ( $this->mainLBs as $lb ) {
                        call_user_func_array( $callback, array_merge( array( $lb ), $params ) );
                }
@@ -386,7 +386,7 @@ class LBFactoryMulti extends LBFactory {
                }
        }
 
-       function shutdown() {
+       public function shutdown() {
                foreach ( $this->mainLBs as $lb ) {
                        $this->chronProt->shutdownLB( $lb );
                }
index 03b7fbe..a41dadf 100644 (file)
  */
 class LBFactorySingle extends LBFactory {
        /** @var LoadBalancerSingle */
-       protected $lb;
+       private $lb;
 
        /**
         * @param array $conf An associative array with one member:
         *  - connection: The DatabaseBase connection object
         */
-       function __construct( array $conf ) {
+       public function __construct( array $conf ) {
                $this->lb = new LoadBalancerSingle( $conf );
        }
 
@@ -40,7 +40,7 @@ class LBFactorySingle extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancerSingle
         */
-       function newMainLB( $wiki = false ) {
+       public function newMainLB( $wiki = false ) {
                return $this->lb;
        }
 
@@ -48,7 +48,7 @@ class LBFactorySingle extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancerSingle
         */
-       function getMainLB( $wiki = false ) {
+       public function getMainLB( $wiki = false ) {
                return $this->lb;
        }
 
@@ -57,7 +57,7 @@ class LBFactorySingle extends LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancerSingle
         */
-       function newExternalLB( $cluster, $wiki = false ) {
+       protected function newExternalLB( $cluster, $wiki = false ) {
                return $this->lb;
        }
 
@@ -66,7 +66,7 @@ class LBFactorySingle extends LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancerSingle
         */
-       function &getExternalLB( $cluster, $wiki = false ) {
+       public function &getExternalLB( $cluster, $wiki = false ) {
                return $this->lb;
        }
 
@@ -74,7 +74,7 @@ class LBFactorySingle extends LBFactory {
         * @param string|callable $callback
         * @param array $params
         */
-       function forEachLB( $callback, array $params = array() ) {
+       public function forEachLB( $callback, array $params = array() ) {
                call_user_func_array( $callback, array_merge( array( $this->lb ), $params ) );
        }
 }
@@ -84,12 +84,12 @@ class LBFactorySingle extends LBFactory {
  */
 class LoadBalancerSingle extends LoadBalancer {
        /** @var DatabaseBase */
-       protected $db;
+       private $db;
 
        /**
         * @param array $params
         */
-       function __construct( array $params ) {
+       public function __construct( array $params ) {
                $this->db = $params['connection'];
                parent::__construct( array( 'servers' => array( array(
                        'type' => $this->db->getType(),
@@ -106,7 +106,7 @@ class LoadBalancerSingle extends LoadBalancer {
         *
         * @return DatabaseBase
         */
-       function reallyOpenConnection( $server, $dbNameOverride = false ) {
+       protected function reallyOpenConnection( $server, $dbNameOverride = false ) {
                return $this->db;
        }
 }
index 4e11af2..07645bd 100644 (file)
@@ -67,7 +67,7 @@ class LoadBalancer {
         *   loadMonitor       Name of a class used to fetch server lag and load.
         * @throws MWException
         */
-       function __construct( array $params ) {
+       public function __construct( array $params ) {
                if ( !isset( $params['servers'] ) ) {
                        throw new MWException( __CLASS__ . ': missing servers parameter' );
                }
@@ -117,7 +117,7 @@ class LoadBalancer {
         *
         * @return LoadMonitor
         */
-       function getLoadMonitor() {
+       private function getLoadMonitor() {
                if ( !isset( $this->mLoadMonitor ) ) {
                        $class = $this->mLoadMonitorClass;
                        $this->mLoadMonitor = new $class( $this );
@@ -131,7 +131,7 @@ class LoadBalancer {
         * @param mixed $x
         * @return mixed
         */
-       function parentInfo( $x = null ) {
+       public function parentInfo( $x = null ) {
                return wfSetVar( $this->mParentInfo, $x );
        }
 
@@ -144,7 +144,7 @@ class LoadBalancer {
         * @param array $weights
         * @return bool|int|string
         */
-       function pickRandom( array $weights ) {
+       public function pickRandom( array $weights ) {
                return ArrayUtils::pickRandom( $weights );
        }
 
@@ -153,7 +153,7 @@ class LoadBalancer {
         * @param bool|string $wiki Wiki to get non-lagged for
         * @return bool|int|string
         */
-       function getRandomNonLagged( array $loads, $wiki = false ) {
+       private function getRandomNonLagged( array $loads, $wiki = false ) {
                # Unset excessively lagged servers
                $lags = $this->getLagTimes( $wiki );
                foreach ( $lags as $i => $lag ) {
@@ -202,7 +202,7 @@ class LoadBalancer {
         * @throws MWException
         * @return bool|int|string
         */
-       function getReaderIndex( $group = false, $wiki = false ) {
+       public function getReaderIndex( $group = false, $wiki = false ) {
                global $wgReadOnly, $wgDBtype;
 
                # @todo FIXME: For now, only go through all this for mysql databases
@@ -364,7 +364,7 @@ class LoadBalancer {
         * @param int $i
         * @return DatabaseBase|bool False on failure
         */
-       function getAnyOpenConnection( $i ) {
+       public function getAnyOpenConnection( $i ) {
                foreach ( $this->mConns as $conns ) {
                        if ( !empty( $conns[$i] ) ) {
                                return reset( $conns[$i] );
@@ -594,7 +594,7 @@ class LoadBalancer {
         *
         * @access private
         */
-       function openConnection( $i, $wiki = false ) {
+       public function openConnection( $i, $wiki = false ) {
                wfProfileIn( __METHOD__ );
                if ( $wiki !== false ) {
                        $conn = $this->openForeignConnection( $i, $wiki );
@@ -640,7 +640,7 @@ class LoadBalancer {
         * @param string $wiki Wiki ID to open
         * @return DatabaseBase
         */
-       function openForeignConnection( $i, $wiki ) {
+       private function openForeignConnection( $i, $wiki ) {
                wfProfileIn( __METHOD__ );
                list( $dbName, $prefix ) = wfSplitWikiID( $wiki );
                if ( isset( $this->mConns['foreignUsed'][$i][$wiki] ) ) {
@@ -706,7 +706,7 @@ class LoadBalancer {
         * @access private
         * @return bool
         */
-       function isOpen( $index ) {
+       private function isOpen( $index ) {
                if ( !is_integer( $index ) ) {
                        return false;
                }
@@ -724,7 +724,7 @@ class LoadBalancer {
         * @throws MWException
         * @return DatabaseBase
         */
-       function reallyOpenConnection( $server, $dbNameOverride = false ) {
+       protected function reallyOpenConnection( $server, $dbNameOverride = false ) {
                if ( !is_array( $server ) ) {
                        throw new MWException( 'You must update your load-balancing configuration. ' .
                                'See DefaultSettings.php entry for $wgDBservers.' );
@@ -789,7 +789,7 @@ class LoadBalancer {
        /**
         * @return int
         */
-       function getWriterIndex() {
+       private function getWriterIndex() {
                return 0;
        }
 
@@ -799,7 +799,7 @@ class LoadBalancer {
         * @param string $i
         * @return bool
         */
-       function haveIndex( $i ) {
+       public function haveIndex( $i ) {
                return array_key_exists( $i, $this->mServers );
        }
 
@@ -809,7 +809,7 @@ class LoadBalancer {
         * @param string $i
         * @return bool
         */
-       function isNonZeroLoad( $i ) {
+       public function isNonZeroLoad( $i ) {
                return array_key_exists( $i, $this->mServers ) && $this->mLoads[$i] != 0;
        }
 
@@ -818,7 +818,7 @@ class LoadBalancer {
         *
         * @return int
         */
-       function getServerCount() {
+       public function getServerCount() {
                return count( $this->mServers );
        }
 
@@ -828,7 +828,7 @@ class LoadBalancer {
         * @param string $i
         * @return string
         */
-       function getServerName( $i ) {
+       public function getServerName( $i ) {
                if ( isset( $this->mServers[$i]['hostName'] ) ) {
                        return $this->mServers[$i]['hostName'];
                } elseif ( isset( $this->mServers[$i]['host'] ) ) {
@@ -843,7 +843,7 @@ class LoadBalancer {
         * @param int $i
         * @return array|bool
         */
-       function getServerInfo( $i ) {
+       public function getServerInfo( $i ) {
                if ( isset( $this->mServers[$i] ) ) {
                        return $this->mServers[$i];
                } else {
@@ -857,7 +857,7 @@ class LoadBalancer {
         * @param int $i
         * @param array $serverInfo
         */
-       function setServerInfo( $i, array $serverInfo ) {
+       public function setServerInfo( $i, array $serverInfo ) {
                $this->mServers[$i] = $serverInfo;
        }
 
@@ -865,7 +865,7 @@ class LoadBalancer {
         * Get the current master position for chronology control purposes
         * @return mixed
         */
-       function getMasterPos() {
+       public function getMasterPos() {
                # If this entire request was served from a slave without opening a connection to the
                # master (however unlikely that may be), then we can fetch the position from the slave.
                $masterConn = $this->getAnyOpenConnection( 0 );
@@ -891,7 +891,7 @@ class LoadBalancer {
        /**
         * Close all open connections
         */
-       function closeAll() {
+       public function closeAll() {
                foreach ( $this->mConns as $conns2 ) {
                        foreach ( $conns2 as $conns3 ) {
                                /** @var DatabaseBase $conn */
@@ -913,7 +913,7 @@ class LoadBalancer {
         * If you use $conn->close() directly, the load balancer won't update its state.
         * @param DatabaseBase $conn
         */
-       function closeConnection( $conn ) {
+       public function closeConnection( $conn ) {
                $done = false;
                foreach ( $this->mConns as $i1 => $conns2 ) {
                        foreach ( $conns2 as $i2 => $conns3 ) {
@@ -935,7 +935,7 @@ class LoadBalancer {
        /**
         * Commit transactions on all open connections
         */
-       function commitAll() {
+       public function commitAll() {
                foreach ( $this->mConns as $conns2 ) {
                        foreach ( $conns2 as $conns3 ) {
                                /** @var DatabaseBase[] $conns3 */
@@ -951,7 +951,7 @@ class LoadBalancer {
        /**
         *  Issue COMMIT only on master, only if queries were done on connection
         */
-       function commitMasterChanges() {
+       public function commitMasterChanges() {
                // Always 0, but who knows.. :)
                $masterIndex = $this->getWriterIndex();
                foreach ( $this->mConns as $conns2 ) {
@@ -971,7 +971,7 @@ class LoadBalancer {
         * Issue ROLLBACK only on master, only if queries were done on connection
         * @since 1.23
         */
-       function rollbackMasterChanges() {
+       public function rollbackMasterChanges() {
                // Always 0, but who knows.. :)
                $masterIndex = $this->getWriterIndex();
                foreach ( $this->mConns as $conns2 ) {
@@ -991,7 +991,7 @@ class LoadBalancer {
         * @return bool Whether a master connection is already open
         * @since 1.24
         */
-       function hasMasterConnection() {
+       public function hasMasterConnection() {
                return $this->isOpen( $this->getWriterIndex() );
        }
 
@@ -1001,7 +1001,7 @@ class LoadBalancer {
         * @since 1.23
         * @return bool
         */
-       function hasMasterChanges() {
+       public function hasMasterChanges() {
                // Always 0, but who knows.. :)
                $masterIndex = $this->getWriterIndex();
                foreach ( $this->mConns as $conns2 ) {
@@ -1022,14 +1022,14 @@ class LoadBalancer {
         * @param mixed $value
         * @return mixed
         */
-       function waitTimeout( $value = null ) {
+       public function waitTimeout( $value = null ) {
                return wfSetVar( $this->mWaitTimeout, $value );
        }
 
        /**
         * @return bool
         */
-       function getLaggedSlaveMode() {
+       public function getLaggedSlaveMode() {
                return $this->mLaggedSlaveMode;
        }
 
@@ -1038,7 +1038,7 @@ class LoadBalancer {
         * @param null|bool $mode
         * @return bool
         */
-       function allowLagged( $mode = null ) {
+       public function allowLagged( $mode = null ) {
                if ( $mode === null ) {
                        return $this->mAllowLagged;
                }
@@ -1050,7 +1050,7 @@ class LoadBalancer {
        /**
         * @return bool
         */
-       function pingAll() {
+       public function pingAll() {
                $success = true;
                foreach ( $this->mConns as $conns2 ) {
                        foreach ( $conns2 as $conns3 ) {
@@ -1071,7 +1071,7 @@ class LoadBalancer {
         * @param callable $callback
         * @param array $params
         */
-       function forEachOpenConnection( $callback, array $params = array() ) {
+       public function forEachOpenConnection( $callback, array $params = array() ) {
                foreach ( $this->mConns as $conns2 ) {
                        foreach ( $conns2 as $conns3 ) {
                                foreach ( $conns3 as $conn ) {
@@ -1092,7 +1092,7 @@ class LoadBalancer {
         * @param bool|string $wiki Wiki ID, or false for the default database
         * @return array ( host, max lag, index of max lagged host )
         */
-       function getMaxLag( $wiki = false ) {
+       public function getMaxLag( $wiki = false ) {
                $maxLag = -1;
                $host = '';
                $maxIndex = 0;
@@ -1121,7 +1121,7 @@ class LoadBalancer {
         * @param string|bool $wiki
         * @return int[] Map of (server index => seconds)
         */
-       function getLagTimes( $wiki = false ) {
+       public function getLagTimes( $wiki = false ) {
                if ( $this->getServerCount() <= 1 ) {
                        return array( 0 => 0 ); // no replication = no lag
                }
@@ -1152,7 +1152,7 @@ class LoadBalancer {
         * @param DatabaseBase $conn
         * @return int
         */
-       function safeGetLag( $conn ) {
+       public function safeGetLag( $conn ) {
                if ( $this->getServerCount() == 1 ) {
                        return 0;
                } else {
@@ -1163,7 +1163,7 @@ class LoadBalancer {
        /**
         * Clear the cache for slag lag delay times
         */
-       function clearLagTimeCache() {
+       public function clearLagTimeCache() {
                $this->mProcCache->clear( 'slave_lag' );
        }
 }
@@ -1177,13 +1177,13 @@ class LoadBalancer {
  */
 class DBConnRef implements IDatabase {
        /** @var LoadBalancer */
-       protected $lb;
+       private $lb;
 
        /** @var DatabaseBase|null */
-       protected $conn;
+       private $conn;
 
        /** @var array|null */
-       protected $params;
+       private $params;
 
        /**
         * @param LoadBalancer $lb
@@ -1207,7 +1207,7 @@ class DBConnRef implements IDatabase {
                return call_user_func_array( array( $this->conn, $name ), $arguments );
        }
 
-       function __destruct() {
+       public function __destruct() {
                if ( $this->conn !== null ) {
                        $this->lb->reuseConnection( $this->conn );
                }
index dac4337..a5540db 100644 (file)
@@ -1058,6 +1058,31 @@ abstract class DatabaseUpdater {
                }
        }
 
+       /**
+        * Enable profiling table when it's turned on
+        */
+       protected function doEnableProfiling() {
+               global $wgProfiler;
+
+               if ( !$this->doTable( 'profiling' ) ) {
+                       return true;
+               }
+
+               $profileToDb = false;
+               if ( isset( $wgProfiler['output'] ) ) {
+                       $out = $wgProfiler['output'];
+                       if ( $out === 'db' ) {
+                               $profileToDb = true;
+                       } elseif( is_array( $out ) && in_array( 'db', $out ) ) {
+                               $profileToDb = true;
+                       }
+               }
+
+               if ( $profileToDb && !$this->db->tableExists( 'profiling', __METHOD__ ) ) {
+                       $this->applyPatch( 'patch-profiling.sql', false, 'Add profiling table' );
+               }
+       }
+
        /**
         * Rebuilds the localisation cache
         */
index 3250ff8..0d52e64 100644 (file)
@@ -44,25 +44,31 @@ class InstallDocFormatter {
                // Replace tab indents with colons
                $text = preg_replace( '/^\t\t/m', '::', $text );
                $text = preg_replace( '/^\t/m', ':', $text );
+
+               $linkStart = '<span class="config-plainlink">[';
+               $linkEnd = ' $0]</span>';
+
+               // turn (Tnnnn) into links
+               $text = preg_replace(
+                       '/T\d+/',
+                       "{$linkStart}https://phabricator.wikimedia.org/$0{$linkEnd}",
+                       $text
+               );
+
                // turn (bug nnnn) into links
-               $text = preg_replace_callback( '/bug (\d+)/', array( $this, 'replaceBugLinks' ), $text );
+               $text = preg_replace(
+                       '/bug (\d+)/',
+                       "{$linkStart}https://bugzilla.wikimedia.org/$1{$linkEnd}",
+                       $text
+               );
+
                // add links to manual to every global variable mentioned
-               $text = preg_replace_callback(
-                       '/(\$wg[a-z0-9_]+)/i',
-                       array( $this, 'replaceConfigLinks' ),
+               $text = preg_replace(
+                       '/\$wg[a-z0-9_]+/i',
+                       "{$linkStart}https://www.mediawiki.org/wiki/Manual:$0{$linkEnd}",
                        $text
                );
 
                return $text;
        }
-
-       protected function replaceBugLinks( $matches ) {
-               return '<span class="config-plainlink">[https://bugzilla.wikimedia.org/' .
-                       $matches[1] . ' bug ' . $matches[1] . ']</span>';
-       }
-
-       protected function replaceConfigLinks( $matches ) {
-               return '<span class="config-plainlink">[https://www.mediawiki.org/wiki/Manual:' .
-                       $matches[1] . ' ' . $matches[1] . ']</span>';
-       }
 }
index 990b5b0..c3dedbc 100644 (file)
@@ -924,18 +924,6 @@ class MysqlUpdater extends DatabaseUpdater {
                }
        }
 
-       protected function doEnableProfiling() {
-               global $wgProfileToDatabase;
-
-               if ( !$this->doTable( 'profiling' ) ) {
-                       return true;
-               }
-
-               if ( $wgProfileToDatabase === true && !$this->db->tableExists( 'profiling', __METHOD__ ) ) {
-                       $this->applyPatch( 'patch-profiling.sql', false, 'Add profiling table' );
-               }
-       }
-
        protected function doMaybeProfilingMemoryUpdate() {
                if ( !$this->doTable( 'profiling' ) ) {
                        return true;
index ab5ab7d..91cbb04 100644 (file)
@@ -168,11 +168,4 @@ class SqliteUpdater extends DatabaseUpdater {
                        $this->output( "...fulltext search table appears to be in order.\n" );
                }
        }
-
-       protected function doEnableProfiling() {
-               global $wgProfileToDatabase;
-               if ( $wgProfileToDatabase === true && !$this->db->tableExists( 'profiling', __METHOD__ ) ) {
-                       $this->applyPatch( 'patch-profiling.sql', false, 'Add profiling table' );
-               }
-       }
 }
index 22fb1df..8ff3d2f 100644 (file)
@@ -296,11 +296,14 @@ class WebInstallerOutput {
                href="https://www.mediawiki.org/"
                title="Main Page"></a>
        </div>
-       <div class="portal"><div class="body">
 <?php
-       echo $this->parent->parse( wfMessage( 'config-sidebar' )->plain(), true );
+       $message = wfMessage( 'config-sidebar' )->plain();
+       foreach( explode( '----', $message ) as $section ) {
+               echo '<div class="portal"><div class="body">';
+               echo $this->parent->parse( $section, true );
+               echo '</div></div>';
+       }
 ?>
-       </div></div>
 </div>
 
 <?php
index e3a6075..27b930a 100644 (file)
        "config-email-auth": "Ενεργοποίηση ταυτοποίησης μέσω ηλεκτρονικού ταχυδρομείου",
        "config-upload-settings": "Ανέβασμα εικόνων και άλλων αρχείων",
        "config-upload-enable": "Ενεργοποιήστε το ανέβασμα αρχείων",
-       "config-upload-deleted": "Î\9aαÏ\84αλÏ\8cγοÏ\85 για διαγραφέντα αρχεία:",
+       "config-upload-deleted": "Î\9aαÏ\84αλÏ\8cγοÏ\82 για διαγραφέντα αρχεία:",
        "config-logo": "Διεύθυνση URL λογότυπου:",
        "config-instantcommons": "Ενεργοποίηση Instant Commons",
        "config-cc-again": "Επιλέξτε ξανά...",
        "config-advanced-settings": "Προηγμένες ρυθμίσεις παραμέτρων",
        "config-extensions": "Επεκτάσεις",
        "config-skins": "Θέματα εμφάνισης",
-       "config-skins-help": "Τα skins που αναφέρονται παραπάνω, εντοπίστηκαν στον κατάλογο <code>./skins</code>. Πρέπει να  ενεργοποιήσετε τουλάχιστον ένα, και επιλέξτε το προεπιλεγμένο.",
-       "config-skins-use-as-default": "ΧÏ\81ηÏ\83ιμοÏ\80οιήÏ\83Ï\84ε Î±Ï\85Ï\84Ï\8c Ï\84ο skin ως προεπιλογή",
-       "config-skins-must-enable-default": "Το skin που επιλέχθηκε ως προεπιλεγμένο πρέπει να ενεργοποιηθεί.",
+       "config-skins-help": "Τα θέματα εμφάνισης που αναφέρονται παραπάνω εντοπίστηκαν στον κατάλογο <code>./skins</code>. Πρέπει να  ενεργοποιήσετε τουλάχιστον ένα και να επιλέξτε ποιο θα είναι το προεπιλεγμένο.",
+       "config-skins-use-as-default": "ΧÏ\81ήÏ\83η Î±Ï\85Ï\84οÏ\8d Ï\84οÏ\85 Î¸Î­Î¼Î±Ï\84οÏ\82 ÎµÎ¼Ï\86άνιÏ\83ηÏ\82 ως προεπιλογή",
+       "config-skins-must-enable-default": "Το θέμα εμφάνισης που επιλέχθηκε ως προεπιλεγμένο πρέπει να είναι ενεργοποιημένο.",
        "config-install-step-done": "έγινε",
        "config-install-step-failed": "απέτυχε",
        "config-install-database": "Ρύθμιση βάσης δεδομένων",
index f87389d..367db40 100644 (file)
        "config-session-error": "Ene Fähler es opjetrodde beim Aanmelde för en Sezung: $1",
        "config-session-expired": "De Daate för Ding Setzung sinn wall övverholld of afjeloufe.\nDe Setzungunge sin esu enjeshtallt, nit mieh wi $1 ze doore.\nDat kanns De verlängere, endämm dat De de <code lang=\"en\">session.gc_maxlifetime</code> en dä Dattei <code>php.ini</code> jrüüßer määß.\nDon dat Projramm för et Opsäze norr_ens aanschmiiße.",
        "config-no-session": "De Daate för Ding Setzung sinn verschött jejange.\nDonn en dä Dattei <code>php.ini</code> nohloore, ov dä <code lang=\"en\">session.save_path</code> op e zopaß Verzeijschneß zeisch.",
-       "config-your-language": "Ding Schprooch:",
-       "config-your-language-help": "Donn heh di Shprooch ußsöhke, di dat Enshtallzjuhnsprojramm kalle sull.",
+       "config-your-language": "De Schprohch beim Enreeschte:",
+       "config-your-language-help": "Donn heh di Schprohch ußsöhke, di dat Enschtallzjuhnsprojramm kalle sull.",
        "config-wiki-language": "Dem Wiki sing Schprohch:",
-       "config-wiki-language-help": "Donn heh di Shprooch ußsöhke, di et Wiki shtandattmääßesch kalle sull.",
+       "config-wiki-language-help": "Donn heh di Schprohch ußsöhke, di et Wiki schtandattmääßesch kalle sull.",
        "config-back": "← Retuur",
        "config-continue": "Wigger →",
-       "config-page-language": "Schprooch",
+       "config-page-language": "Schprohch",
        "config-page-welcome": "Wellkumme beim MediaWiki!",
        "config-page-dbconnect": "Met dä Daatebangk Verbenge",
        "config-page-upgrade": "En Inshtallzjuhn op der neuste Shtand bränge",
        "config-charset-mysql5-binary": "MySQL (4.1 udder 5.0) binär",
        "config-charset-mysql5": "MySQL (4.1 udder 5.0) UTF-8",
        "config-charset-mysql4": "MySQL 4.0 röckwääts kompatibel UTF-8",
-       "config-charset-help": "<strong>Opjepaß:</strong>\nWann De et <strong>röckwääts kompatibel UTF-8 Fommaat</strong> nemmps, met dem <i lang=\"en\">MySQL</i> singe Version4.1 udder hüüter, dann künnt dat all di Zeische kappott maache, die nit em <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> sen, un domet all ding Sescherungskopieje kapott maache, wat mer nieh mieh retuur krijje kann.\n\nBeim Schpeischere em <strong>binäre Fomaat</strong> deiht MediaWiki de Täx, dä em UTF-8 Fommaat küdd, en dä Daatebangk en binär kodeerte Daatefälder faßhallde.\nDat es flöcker un spaasaamer wi et UTF-8 Fommaat vum <i lang=\"en\">MySQL</i> un määd et müjjelesch, all un jeedes <i lang=\"en\">Unicode</i>-Zeische met faßzehallde.\n\nBeim Schpeischere em <strong>UTF-8 Fomaat</strong> deiht et <i lang=\"en\">MySQL</i> der Zeischesaz un de Kodeerung vun dä Daate känne, un kann se akeraat aanzeije un ömwandelle,\nallerdengs künne kein Zeische ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrundlääje Knubbel för vill Schprooche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeschpeischert wääde.",
+       "config-charset-help": "<strong>Opjepaß:</strong>\nWann De et <strong>röckwääts kompatibel UTF-8 Fommaht</strong> nemmps, met dem <i lang=\"en\">MySQL</i> singe Väsjohn 4.1 udder hüüter, dann künnt dat all di Zeische kappott maache, die nit em <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> sen, un domet all Ding Sescherungskopieje kapott maache, wat mer nieh mieh retuur krijje kann.\n\nBeim Schpeischere em <strong>binäre Fomaat</strong> deiht MediaWiki de Täx, dä em UTF-8 Fommaht küt, en dä Dahtebangk en binähr kodehrte Dahtefälder faßhallde.\nDat es flöcker un spaasahmer wi et UTF-8 Fommaht vum <i lang=\"en\">MySQL</i> un määd_et müjjelesch, jehdes <i lang=\"en\">Unicode</i>-Zeische met faßzehallde.\n\nBeim Schpeischere em <strong>UTF-8 Fomaht</strong> deihd_et <i lang=\"en\">MySQL</i> der Zeischesaz un de Kodehrung vun dä Dahte känne, un kann se akeraht aanzeije un ömwandelle,\nallerdengs künne kein Zeische ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrondlähje Knubbel för vill Schprohche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeschpeischert wähde.",
        "config-mysql-old": "Mer bruche <i lang=\"en\">MySQL</i> $1 udder neuer. Em Momang es <i lang=\"en\">MySQL</i> $2 aam Loufe.",
        "config-db-port": "De Pooz-Nommer (<i lang=\"en\">port</i>) för de Daatebangk:",
        "config-db-schema": "Et Schema en de Datebangk för MediaWiki:",
        "config-mysql-charset": "Dä Daatebangk iere Zeischesaz:",
        "config-mysql-binary": "binär",
        "config-mysql-utf8": "UTF-8",
-       "config-mysql-charset-help": "Beim Schpeishere em <strong>binäre Fomaat</strong> deiht MediaWiki Täxt, dä em UTF-8 Fommaat kütt, en dä Daatebangk en binär kodeerte Daatefälder faßhallde.\nDat es flöcker un spaasaamer wi et UTF-8 Fommaat vum <i lang=\"en\">MySQL</i> un määd et müjjelesch, all un jeedes <i lang=\"en\">Unicode</i>-Zeische met faßzehallde.\n\nBeim Schpeishere em <strong>UTF-8 Fomaat<strong> deiht et <i lang=\"en\">MySQL</i> der Zeischesaz un de Kodeerung vun dä Daate känne, un kann se akeraat aanzeije un ömwandelle,\nallerdengs künne kein Zeische ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrundlääje Knubbel för vill Schprooche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeschpeischert wääde.",
+       "config-mysql-charset-help": "Beim Schpeischere em <strong>binähre Fomaht</strong> deiht MediaWiki Täx, dä em UTF-8 Fommaht kütt, en singer Dahtebangk en binähr kodehrte Dahtefälder faßhallde.\nDad_es flöcker un spahsamer wi et UTF-8 Fommaht vum <i lang=\"en\">MySQL</i> un määd_et müjjelesch, jehdes <i lang=\"en\">Unicode</i>-Zeische met faßzehallde.\n\nBeim Schpeischere em <strong>UTF-8 Fomaht<strong> deihd_et <i lang=\"en\">MySQL</i> der Zeischesaz un de Kodehrung vun dä Dahte känne, un kann se akeraht aanzeije un ömwandelle,\nallerdengs künne kein Zeische ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrundlähje Knubbel för vill Schprohche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeschpeischert wähde.",
        "config-mssql-auth": "De Zoot Aanmäldong:",
        "config-mssql-install-auth": "Söhk us, wi dat Aanmälde aan dä Daatebangk vor sesch jonn sull för de Enschtallazjuhn.\nWann De <em>{{int:Config-mssql-windowsauth}}</em> nemms, weed jenumme, met wat emmer dä Wäbßööver aam loufe es.",
        "config-mssql-web-auth": "Söhk us, wi dat Aanmälde aan dä Daatebangk vör sesch jonn sull för de nommaale Ärbeid vum Wiki.\nWann De <em>{{int:Config-mssql-windowsauth}}</em> nemms, weed dat jenumme, wohmet dä Wäbßööver aam loufe es.",
index 17e0d50..c459010 100644 (file)
@@ -62,6 +62,7 @@
        "config-safe-mode": "<strong>Warning:</strong> PHP's [http://www.php.net/features.safe-mode safe mode] è attivato.\nPutesse fà cocche probblema, specialmente si state ausanno 'a funziona 'e carrecà file e 'o supporto d' ' e funziune <code>math</code>.",
        "config-xml-bad": "'O modulo XML 'e PHP è mancante.\nA MediaWiki servessero 'e funziune prisente dint'a stu modulo e nun faticarrà c' 'a configurazione 'e mò.\nSi se sta eseguenno Mandrake, installare 'o pacco php-xml.",
        "config-pcre-old": "<strong>Errore fatale:</strong> s'addimanna PCRE  $1 o succiessivo.\n'O file vuosto binario PHP è acucchiato c' 'o PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Cchiù nfurmaziune].",
+       "config-pcre-no-utf8": "<strong>Fatale:</strong> 'E module PCRE d' 'o PHP pare ca se so' compilate senza PCRE_UTF8 supporto.\nA MediaWiki serve nu supporto UTF-8 pe' putè funziunà apposto.",
        "config-memory-raised": "'O valore 'e PHP <code>memory_limit</code> è $1, aumentato a $2.",
        "config-memory-bad": "<strong>Attenziò:</strong> 'o valore 'e PHP <code>memory_limit</code> è $1.\nProbabbilmente troppo basso.\n'A installazione se putesse scassà!",
        "config-ctype": "'''Errore''': 'o PHP s'adda ghienchere c' 'o supporto pe' l'[http://www.php.net/manual/it/ctype.installation.php estensione Ctype].",
index cf53f1d..e3541bd 100644 (file)
@@ -1003,7 +1003,9 @@ class Article implements Page {
                                        array( 'redirect' => 'no' )
                                );
 
-                               $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
+                               $outputPage->addSubtitle( "<span class=\"mw-redirectedfrom\">" .
+                                       wfMessage( 'redirectedfrom' )->rawParams( $redir )->parse()
+                               . "</span>" );
 
                                // Add the script to update the displayed URL and
                                // set the fragment if one was specified in the redirect
@@ -1025,7 +1027,9 @@ class Article implements Page {
                        // If it was reported from a trusted site, supply a backlink.
                        if ( $wgRedirectSources && preg_match( $wgRedirectSources, $rdfrom ) ) {
                                $redir = Linker::makeExternalLink( $rdfrom, $rdfrom );
-                               $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
+                               $outputPage->addSubtitle( "<span class=\"mw-redirectedfrom\">" .
+                                       wfMessage( 'redirectedfrom' )->rawParams( $redir )->parse()
+                               . "</span>" );
 
                                // Add the script to update the displayed URL
                                $outputPage->addJsConfigVars( array(
index 61f0504..8b26c23 100644 (file)
@@ -1696,7 +1696,7 @@ class WikiPage implements Page, IDBAccessObject {
         *
         * @param bool|int $baseRevId The revision ID this edit was based off, if any
         * @param User $user The user doing the edit
-        * @param string $serialisation_format Format for storing the content in the
+        * @param string $serialFormat Format for storing the content in the
         *   database.
         *
         * @throws MWException
@@ -1717,7 +1717,7 @@ class WikiPage implements Page, IDBAccessObject {
         * @since 1.21
         */
        public function doEditContent( Content $content, $summary, $flags = 0, $baseRevId = false,
-               User $user = null, $serialisation_format = null
+               User $user = null, $serialFormat = null
        ) {
                global $wgUser, $wgUseAutomaticEditSummaries, $wgUseRCPatrol, $wgUseNPPatrol;
 
@@ -1783,7 +1783,7 @@ class WikiPage implements Page, IDBAccessObject {
                        $summary = $handler->getAutosummary( $old_content, $content, $flags );
                }
 
-               $editInfo = $this->prepareContentForEdit( $content, null, $user, $serialisation_format );
+               $editInfo = $this->prepareContentForEdit( $content, null, $user, $serialFormat, true );
                $serialized = $editInfo->pst;
 
                /**
@@ -1825,17 +1825,12 @@ class WikiPage implements Page, IDBAccessObject {
                                'user_text'  => $user->getName(),
                                'timestamp'  => $now,
                                'content_model' => $content->getModel(),
-                               'content_format' => $serialisation_format,
+                               'content_format' => $serialFormat,
                        ) ); // XXX: pass content object?!
 
                        $changed = !$content->equals( $old_content );
 
                        if ( $changed ) {
-                               if ( !$content->isValid() ) {
-                                       wfProfileOut( __METHOD__ );
-                                       throw new MWException( "New content failed validity check!" );
-                               }
-
                                $dbw->begin( __METHOD__ );
                                try {
 
@@ -1956,7 +1951,7 @@ class WikiPage implements Page, IDBAccessObject {
                                        'user_text'  => $user->getName(),
                                        'timestamp'  => $now,
                                        'content_model' => $content->getModel(),
-                                       'content_format' => $serialisation_format,
+                                       'content_format' => $serialFormat,
                                ) );
                                $revisionId = $revision->insertOn( $dbw );
 
@@ -2073,49 +2068,71 @@ class WikiPage implements Page, IDBAccessObject {
         * @param Content $content
         * @param int|null $revid
         * @param User|null $user
-        * @param string|null $serialization_format
+        * @param string|null $serialFormat
+        * @param bool $useCache Check shared prepared edit cache
         *
-        * @return bool|object
+        * @return object
         *
         * @since 1.21
         */
-       public function prepareContentForEdit( Content $content, $revid = null, User $user = null,
-               $serialization_format = null
+       public function prepareContentForEdit(
+               Content $content, $revid = null, User $user = null, $serialFormat = null, $useCache = false
        ) {
                global $wgContLang, $wgUser;
+
                $user = is_null( $user ) ? $wgUser : $user;
                //XXX: check $user->getId() here???
 
-               // Use a sane default for $serialization_format, see bug 57026
-               if ( $serialization_format === null ) {
-                       $serialization_format = $content->getContentHandler()->getDefaultFormat();
+               // Use a sane default for $serialFormat, see bug 57026
+               if ( $serialFormat === null ) {
+                       $serialFormat = $content->getContentHandler()->getDefaultFormat();
                }
 
                if ( $this->mPreparedEdit
                        && $this->mPreparedEdit->newContent
                        && $this->mPreparedEdit->newContent->equals( $content )
                        && $this->mPreparedEdit->revid == $revid
-                       && $this->mPreparedEdit->format == $serialization_format
+                       && $this->mPreparedEdit->format == $serialFormat
                        // XXX: also check $user here?
                ) {
                        // Already prepared
                        return $this->mPreparedEdit;
                }
 
+               // The edit may have already been prepared via api.php?action=stashedit
+               $cachedEdit = $useCache
+                       ? ApiStashEdit::checkCache( $this->getTitle(), $content, $user )
+                       : false;
+
                $popts = ParserOptions::newFromUserAndLang( $user, $wgContLang );
                wfRunHooks( 'ArticlePrepareTextForEdit', array( $this, $popts ) );
 
                $edit = (object)array();
+               if ( $cachedEdit ) {
+                       $edit->timestamp = $cachedEdit->timestamp;
+               } else {
+                       $edit->timestamp = wfTimestampNow();
+               }
+               // @note: $cachedEdit is not used if the rev ID was referenced in the text
                $edit->revid = $revid;
-               $edit->timestamp = wfTimestampNow();
 
-               $edit->pstContent = $content ? $content->preSaveTransform( $this->mTitle, $user, $popts ) : null;
+               if ( $cachedEdit ) {
+                       $edit->pstContent = $cachedEdit->pstContent;
+               } else {
+                       $edit->pstContent = $content
+                               ? $content->preSaveTransform( $this->mTitle, $user, $popts )
+                               : null;
+               }
 
-               $edit->format = $serialization_format;
+               $edit->format = $serialFormat;
                $edit->popts = $this->makeParserOptions( 'canonical' );
-               $edit->output = $edit->pstContent
-                       ? $edit->pstContent->getParserOutput( $this->mTitle, $revid, $edit->popts )
-                       : null;
+               if ( $cachedEdit ) {
+                       $edit->output = $cachedEdit->output;
+               } else {
+                       $edit->output = $edit->pstContent
+                               ? $edit->pstContent->getParserOutput( $this->mTitle, $revid, $edit->popts )
+                               : null;
+               }
 
                $edit->newContent = $content;
                $edit->oldContent = $this->getContent( Revision::RAW );
@@ -2123,7 +2140,7 @@ class WikiPage implements Page, IDBAccessObject {
                // NOTE: B/C for hooks! don't use these fields!
                $edit->newText = $edit->newContent ? ContentHandler::getContentText( $edit->newContent ) : '';
                $edit->oldText = $edit->oldContent ? ContentHandler::getContentText( $edit->oldContent ) : '';
-               $edit->pst = $edit->pstContent ? $edit->pstContent->serialize( $serialization_format ) : '';
+               $edit->pst = $edit->pstContent ? $edit->pstContent->serialize( $serialFormat ) : '';
 
                $this->mPreparedEdit = $edit;
                return $edit;
@@ -2293,14 +2310,14 @@ class WikiPage implements Page, IDBAccessObject {
         * @param User $user The relevant user
         * @param string $comment Comment submitted
         * @param bool $minor Whereas it's a minor modification
-        * @param string $serialisation_format Format for storing the content in the database
+        * @param string $serialFormat Format for storing the content in the database
         */
        public function doQuickEditContent( Content $content, User $user, $comment = '', $minor = false,
-               $serialisation_format = null
+               $serialFormat = null
        ) {
                wfProfileIn( __METHOD__ );
 
-               $serialized = $content->serialize( $serialisation_format );
+               $serialized = $content->serialize( $serialFormat );
 
                $dbw = wfGetDB( DB_MASTER );
                $revision = new Revision( array(
index d9f1761..6f19a23 100644 (file)
@@ -36,7 +36,7 @@ class CoreParserFunctions {
                # Syntax for arguments (see Parser::setFunctionHook):
                #  "name for lookup in localized magic words array",
                #  function callback,
-               #  optional SFH_NO_HASH to omit the hash from calls (e.g. {{int:...}}
+               #  optional Parser::SFH_NO_HASH to omit the hash from calls (e.g. {{int:...}}
                #    instead of {{#int:...}})
                $noHashFunctions = array(
                        'ns', 'nse', 'urlencode', 'lcfirst', 'ucfirst', 'lc', 'uc',
@@ -57,24 +57,24 @@ class CoreParserFunctions {
                        'revisiontimestamp', 'revisionuser', 'cascadingsources',
                );
                foreach ( $noHashFunctions as $func ) {
-                       $parser->setFunctionHook( $func, array( __CLASS__, $func ), SFH_NO_HASH );
+                       $parser->setFunctionHook( $func, array( __CLASS__, $func ), Parser::SFH_NO_HASH );
                }
 
-               $parser->setFunctionHook( 'namespace', array( __CLASS__, 'mwnamespace' ), SFH_NO_HASH );
-               $parser->setFunctionHook( 'int', array( __CLASS__, 'intFunction' ), SFH_NO_HASH );
+               $parser->setFunctionHook( 'namespace', array( __CLASS__, 'mwnamespace' ), Parser::SFH_NO_HASH );
+               $parser->setFunctionHook( 'int', array( __CLASS__, 'intFunction' ), Parser::SFH_NO_HASH );
                $parser->setFunctionHook( 'special', array( __CLASS__, 'special' ) );
                $parser->setFunctionHook( 'speciale', array( __CLASS__, 'speciale' ) );
-               $parser->setFunctionHook( 'tag', array( __CLASS__, 'tagObj' ), SFH_OBJECT_ARGS );
+               $parser->setFunctionHook( 'tag', array( __CLASS__, 'tagObj' ), Parser::SFH_OBJECT_ARGS );
                $parser->setFunctionHook( 'formatdate', array( __CLASS__, 'formatDate' ) );
 
                if ( $wgAllowDisplayTitle ) {
-                       $parser->setFunctionHook( 'displaytitle', array( __CLASS__, 'displaytitle' ), SFH_NO_HASH );
+                       $parser->setFunctionHook( 'displaytitle', array( __CLASS__, 'displaytitle' ), Parser::SFH_NO_HASH );
                }
                if ( $wgAllowSlowParserFunctions ) {
                        $parser->setFunctionHook(
                                'pagesinnamespace',
                                array( __CLASS__, 'pagesinnamespace' ),
-                               SFH_NO_HASH
+                               Parser::SFH_NO_HASH
                        );
                }
        }
index b310862..ff62e9b 100644 (file)
@@ -127,17 +127,11 @@ class MWTidy {
         * @return string Corrected HTML output
         */
        public static function tidy( $text ) {
-               global $wgTidyInternal;
-
                $wrapper = new MWTidyWrapper;
                $wrappedtext = $wrapper->getWrapped( $text );
 
                $retVal = null;
-               if ( $wgTidyInternal ) {
-                       $correctedtext = self::execInternalTidy( $wrappedtext, false, $retVal );
-               } else {
-                       $correctedtext = self::execExternalTidy( $wrappedtext, false, $retVal );
-               }
+               $correctedtext = self::clean( $wrappedtext, false, $retVal );
 
                if ( $retVal < 0 ) {
                        wfDebug( "Possible tidy configuration error!\n" );
@@ -160,16 +154,33 @@ class MWTidy {
         * @return bool Whether the HTML is valid
         */
        public static function checkErrors( $text, &$errorStr = null ) {
+               $retval = 0;
+               $errorStr = self::clean( $text, true, $retval );
+               return ( $retval < 0 && $errorStr == '' ) || $retval == 0;
+       }
+
+       /**
+        * Perform a clean/repair operation
+        * @param string $text HTML to check
+        * @param bool $stderr Whether to read result from STDERR rather than STDOUT
+        * @param int &$retval Exit code (-1 on internal error)
+        * @return string|null
+        */
+       private static function clean( $text, $stderr = false, &$retval = null ) {
                global $wgTidyInternal;
 
-               $retval = 0;
                if ( $wgTidyInternal ) {
-                       $errorStr = self::execInternalTidy( $text, true, $retval );
+                       if ( wfIsHHVM() ) {
+                               if ( $stderr ) {
+                                       throw new MWException( __METHOD__.": error text return from HHVM tidy is not supported" );
+                               }
+                               return self::hhvmClean( $text, $retval );
+                       } else {
+                               return self::phpClean( $text, $stderr, $retval );
+                       }
                } else {
-                       $errorStr = self::execExternalTidy( $text, true, $retval );
+                       return self::externalClean( $text, $stderr, $retval );
                }
-
-               return ( $retval < 0 && $errorStr == '' ) || $retval == 0;
        }
 
        /**
@@ -181,7 +192,7 @@ class MWTidy {
         * @param int &$retval Exit code (-1 on internal error)
         * @return string|null
         */
-       private static function execExternalTidy( $text, $stderr = false, &$retval = null ) {
+       private static function externalClean( $text, $stderr = false, &$retval = null ) {
                global $wgTidyConf, $wgTidyBin, $wgTidyOpts;
                wfProfileIn( __METHOD__ );
 
@@ -248,7 +259,7 @@ class MWTidy {
         * @param int &$retval Exit code (-1 on internal error)
         * @return string|null
         */
-       private static function execInternalTidy( $text, $stderr = false, &$retval = null ) {
+       private static function phpClean( $text, $stderr = false, &$retval = null ) {
                global $wgTidyConf, $wgDebugTidy;
                wfProfileIn( __METHOD__ );
 
@@ -288,4 +299,29 @@ class MWTidy {
                wfProfileOut( __METHOD__ );
                return $cleansource;
        }
+
+       /**
+        * Use the tidy extension for HHVM from
+        * https://github.com/wikimedia/mediawiki-php-tidy
+        *
+        * This currently does not support the object-oriented interface, but
+        * tidy_repair_string() can be used for the most common tasks.
+        *
+        * @param string $text HTML to check
+        * @param int &$retval Exit code (-1 on internal error)
+        * @return string|null
+        */
+       private static function hhvmClean( $text, &$retval ) {
+               global $wgTidyConf;
+               wfProfileIn( __METHOD__ );
+               $cleansource = tidy_repair_string( $text, $wgTidyConf, 'utf8' );
+               if ( $cleansource === false ) {
+                       $cleansource = null;
+                       $retval = -1;
+               } else {
+                       $retval = 0;
+               }
+               wfProfileOut( __METHOD__ );
+               return $cleansource;
+       }
 }
index 07eb340..1b926c4 100644 (file)
@@ -79,7 +79,6 @@ class Parser {
        const HALF_PARSED_VERSION = 2;
 
        # Flags for Parser::setFunctionHook
-       # Also available as global constants from Defines.php
        const SFH_NO_HASH = 1;
        const SFH_OBJECT_ARGS = 2;
 
@@ -3816,7 +3815,7 @@ class Parser {
                }
 
                $allArgs = array( &$this );
-               if ( $flags & SFH_OBJECT_ARGS ) {
+               if ( $flags & self::SFH_OBJECT_ARGS ) {
                        # Convert arguments to PPNodes and collect for appending to $allArgs
                        $funcArgs = array();
                        foreach ( $args as $k => $v ) {
@@ -5218,7 +5217,7 @@ class Parser {
         * The callback function should have the form:
         *    function myParserFunction( &$parser, $arg1, $arg2, $arg3 ) { ... }
         *
-        * Or with SFH_OBJECT_ARGS:
+        * Or with Parser::SFH_OBJECT_ARGS:
         *    function myParserFunction( $parser, $frame, $args ) { ... }
         *
         * The callback may either return the text result of the function, or an array with the text
@@ -5232,10 +5231,10 @@ class Parser {
         * @param string $id The magic word ID
         * @param callable $callback The callback function (and object) to use
         * @param int $flags A combination of the following flags:
-        *     SFH_NO_HASH   No leading hash, i.e. {{plural:...}} instead of {{#if:...}}
+        *     Parser::SFH_NO_HASH      No leading hash, i.e. {{plural:...}} instead of {{#if:...}}
         *
-        *     SFH_OBJECT_ARGS   Pass the template arguments as PPNode objects instead of text. This
-        *     allows for conditional expansion of the parse tree, allowing you to eliminate dead
+        *     Parser::SFH_OBJECT_ARGS  Pass the template arguments as PPNode objects instead of text.
+        *     This allows for conditional expansion of the parse tree, allowing you to eliminate dead
         *     branches and thus speed up parsing. It is also possible to analyse the parse tree of
         *     the arguments, and to control the way they are expanded.
         *
@@ -5277,7 +5276,7 @@ class Parser {
                                $syn = $wgContLang->lc( $syn );
                        }
                        # Add leading hash
-                       if ( !( $flags & SFH_NO_HASH ) ) {
+                       if ( !( $flags & self::SFH_NO_HASH ) ) {
                                $syn = '#' . $syn;
                        }
                        # Remove trailing colon
index 00209e2..d178ce6 100644 (file)
@@ -130,8 +130,8 @@ class ProfilerXhprof extends Profiler {
 
                if ( $exists ) {
                        xhprof_frame_begin( $section );
-                       return new ScopedCallback( function() use ( $section ) {
-                               xhprof_frame_end( $section );
+                       return new ScopedCallback( function() {
+                               xhprof_frame_end();
                        } );
                }
 
index f988238..ab42802 100644 (file)
  * @since 1.25
  */
 class ProfilerOutputDb extends ProfilerOutput {
+       /** @var bool Whether to store host data with profiling calls */
+       private $perHost = false;
+
+       public function __construct( Profiler $collector, array $params ) {
+               parent::__construct( $collector, $params );
+               global $wgProfilePerHost;
+
+               // Initialize per-host profiling from config, back-compat if available
+               if ( isset( $this->params['perHost'] ) ) {
+                       $this->perHost = $this->params['perHost'];
+               } elseif( $wgProfilePerHost ) {
+                       $this->perHost = $wgProfilePerHost;
+               }
+       }
+
        public function canUse() {
                # Do not log anything if database is readonly (bug 5375)
                return !wfReadOnly();
        }
 
        public function log( array $stats ) {
-               global $wgProfilePerHost;
-
-               if ( $wgProfilePerHost ) {
-                       $pfhost = wfHostname();
-               } else {
-                       $pfhost = '';
-               }
+               $pfhost = $this->perHost ? wfHostname() : '';
 
                try {
                        $dbw = wfGetDB( DB_MASTER );
index a938861..d5c7e5c 100644 (file)
  * @since 1.25
  */
 class ProfilerOutputUdp extends ProfilerOutput {
+       /** @var int port to send profiling data to */
+       private $port = 3811;
+
+       /** @var string host to send profiling data to */
+       private $host = '127.0.0.1';
+
+       /** @var string format string for profiling data */
+       private $format = "%s - %d %f %f %f %f %s\n";
+
+       public function __construct( Profiler $collector, array $params ) {
+               parent::__construct( $collector, $params );
+               global $wgUDPProfilerPort, $wgUDPProfilerHost, $wgUDPProfilerFormatString;
+
+               // Initialize port, host, and format from config, back-compat if available
+               if ( isset( $this->params['udpport'] ) ) {
+                       $this->port = $this->params['udpport'];
+               } elseif( $wgUDPProfilerPort ) {
+                       $this->port = $wgUDPProfilerPort;
+               }
+
+               if ( isset( $this->params['udphost'] ) ) {
+                       $this->host = $this->params['udphost'];
+               } elseif( $wgUDPProfilerHost ) {
+                       $this->host = $wgUDPProfilerHost;
+               }
+
+               if ( isset( $this->params['udpformat'] ) ) {
+                       $this->format = $this->params['udpformat'];
+               } elseif( $wgUDPProfilerFormatString ) {
+                       $this->format = $wgUDPProfilerFormatString;
+               }
+       }
+
        public function canUse() {
                # Sockets are not enabled
                return function_exists( 'socket_create' );
        }
 
        public function log( array $stats ) {
-               global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgUDPProfilerFormatString;
-
                $sock = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
                $plength = 0;
                $packet = "";
                foreach ( $stats as $pfdata ) {
-                       $pfline = sprintf( $wgUDPProfilerFormatString,
+                       $pfline = sprintf( $this->format,
                                $this->collector->getProfileID(),
                                $pfdata['calls'],
                                $pfdata['cpu'] / 1000, // ms => sec
@@ -53,13 +84,13 @@ class ProfilerOutputUdp extends ProfilerOutput {
                        );
                        $length = strlen( $pfline );
                        if ( $length + $plength > 1400 ) {
-                               socket_sendto( $sock, $packet, $plength, 0, $wgUDPProfilerHost, $wgUDPProfilerPort );
+                               socket_sendto( $sock, $packet, $plength, 0, $this->host, $this->port );
                                $packet = "";
                                $plength = 0;
                        }
                        $packet .= $pfline;
                        $plength += $length;
                }
-               socket_sendto( $sock, $packet, $plength, 0x100, $wgUDPProfilerHost, $wgUDPProfilerPort );
+               socket_sendto( $sock, $packet, $plength, 0x100, $this->host, $this->port );
        }
 }
index eecb936..2c54f69 100644 (file)
@@ -1490,6 +1490,9 @@ class ResourceLoader {
                // When called from the installer, it is possible that a required PHP extension
                // is missing (at least for now; see bug 47564). If this is the case, throw an
                // exception (caught by the installer) to prevent a fatal error later on.
+               if ( !class_exists( 'lessc' ) ) {
+                       throw new MWException( 'MediaWiki requires the lessphp compiler' );
+               }
                if ( !function_exists( 'ctype_digit' ) ) {
                        throw new MWException( 'lessc requires the Ctype extension' );
                }
index 0eb87e4..c6cbfbe 100644 (file)
@@ -500,22 +500,12 @@ class SearchEngine {
        /**
         * Get OpenSearch suggestion template
         *
+        * @deprecated since 1.25
         * @return string
         */
        public static function getOpenSearchTemplate() {
-               global $wgOpenSearchTemplate, $wgCanonicalServer;
-
-               if ( $wgOpenSearchTemplate ) {
-                       return $wgOpenSearchTemplate;
-               } else {
-                       $ns = implode( '|', SearchEngine::defaultNamespaces() );
-                       if ( !$ns ) {
-                               $ns = "0";
-                       }
-
-                       return $wgCanonicalServer . wfScript( 'api' )
-                               . '?action=opensearch&search={searchTerms}&namespace=' . $ns;
-               }
+               wfDeprecated( __METHOD__, '1.25' );
+               return ApiOpenSearch::getOpenSearchTemplate( 'application/x-suggestions+json' );
        }
 
        /**
diff --git a/includes/site/SiteListFileCache.php b/includes/site/SiteListFileCache.php
new file mode 100644 (file)
index 0000000..c0ecab1
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @since 1.25
+ *
+ * @file
+ *
+ * @license GNU GPL v2+
+ */
+class SiteListFileCache {
+
+       /**
+        * @var SiteList
+        */
+       private $sites = null;
+
+       /**
+        * @var string
+        */
+       private $cacheFile;
+
+       /**
+        * @param string $cacheFile
+        */
+       public function __construct( $cacheFile ) {
+               $this->cacheFile = $cacheFile;
+       }
+
+       /**
+        * @since 1.25
+        *
+        * @return SiteList
+        */
+       public function getSites() {
+               if ( $this->sites === null ) {
+                       $this->sites = $this->loadSitesFromCache();
+               }
+
+               return $this->sites;
+       }
+
+       /**
+        * @since 1.25
+        */
+       public function getSite( $globalId ) {
+               $sites = $this->getSites();
+
+               return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : null;
+       }
+
+       /**
+        * @return SiteList
+        */
+       private function loadSitesFromCache() {
+               $data = $this->loadJsonFile();
+
+               $sites = new SiteList();
+
+               // @todo lazy initialize the site objects in the site list (e.g. only when needed to access)
+               foreach( $data['sites'] as $siteArray ) {
+                       $sites[] = $this->newSiteFromArray( $siteArray );
+               }
+
+               return $sites;
+       }
+
+       /**
+        * @throws MWException
+        * @return array
+        */
+       private function loadJsonFile() {
+               if ( !is_readable( $this->cacheFile ) ) {
+                       throw new MWException( 'SiteList cache file not found.' );
+               }
+
+               $contents = file_get_contents( $this->cacheFile );
+               $data = json_decode( $contents, true );
+
+               if ( !is_array( $data ) || !array_key_exists( 'sites', $data ) ) {
+                       throw new MWException( 'SiteStore json cache data is invalid.' );
+               }
+
+               return $data;
+       }
+
+       /**
+        * @param array $data
+        *
+        * @return Site
+        */
+       private function newSiteFromArray( array $data ) {
+               $siteType = array_key_exists( 'type', $data ) ? $data['type'] : Site::TYPE_UNKNOWN;
+               $site = Site::newForType( $siteType );
+
+               $site->setGlobalId( $data['globalid'] );
+               $site->setInternalId( $data['internalid'] );
+               $site->setForward( $data['forward'] );
+               $site->setGroup( $data['group'] );
+               $site->setLanguageCode( $data['language'] );
+               $site->setSource( $data['source'] );
+               $site->setExtraData( $data['data'] );
+               $site->setExtraConfig( $data['config'] );
+
+               foreach( $data['identifiers'] as $identifier ) {
+                       $site->addLocalId( $identifier['type'], $identifier['key'] );
+               }
+
+               return $site;
+       }
+
+}
diff --git a/includes/site/SiteListFileCacheBuilder.php b/includes/site/SiteListFileCacheBuilder.php
new file mode 100644 (file)
index 0000000..0a71aae
--- /dev/null
@@ -0,0 +1,113 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @since 1.25
+ *
+ * @file
+ *
+ * @license GNU GPL v2+
+ */
+class SiteListFileCacheBuilder {
+
+       /**
+        * @var SiteStore
+        */
+       private $siteStore;
+
+       /**
+        * @var string
+        */
+       private $cacheFile;
+
+       /**
+        * @param SiteStore $siteStore
+        * @param string $cacheFile
+        */
+       public function __construct( SiteStore $siteStore, $cacheFile ) {
+               $this->siteStore = $siteStore;
+               $this->cacheFile = $cacheFile;
+       }
+
+       public function build() {
+               $this->sites = $this->siteStore->getSites( 'recache' );
+               $this->cacheSites( $this->sites->getArrayCopy() );
+       }
+
+       /**
+        * @param Site[] $sites
+        *
+        * @throws MWException if in manualRecache mode
+        * @return bool
+        */
+       private function cacheSites( array $sites ) {
+               $sitesArray = array();
+
+               foreach ( $sites as $site ) {
+                       $globalId = $site->getGlobalId();
+                       $sitesArray[$globalId] = $this->getSiteAsArray( $site );
+               }
+
+               $json = json_encode( array(
+                       'sites' => $sitesArray
+               ) );
+
+               $result = file_put_contents( $this->cacheFile, $json );
+
+               return $result !== false;
+       }
+
+       /**
+        * @param Site $site
+        *
+        * @return array
+        */
+       private function getSiteAsArray( Site $site ) {
+               $siteEntry = unserialize( $site->serialize() );
+               $siteIdentifiers = $this->buildLocalIdentifiers( $site );
+               $identifiersArray = array();
+
+               foreach( $siteIdentifiers as $identifier ) {
+                       $identifiersArray[] = $identifier;
+               }
+
+               $siteEntry['identifiers'] = $identifiersArray;
+
+               return $siteEntry;
+       }
+
+       /**
+        * @param Site $site
+        *
+        * @return array Site local identifiers
+        */
+       private function buildLocalIdentifiers( Site $site ) {
+               $localIds = array();
+
+               foreach ( $site->getLocalIds() as $idType => $ids ) {
+                       foreach ( $ids as $id ) {
+                               $localIds[] = array(
+                                       'type' => $idType,
+                                       'key' => $id
+                               );
+                       }
+               }
+
+               return $localIds;
+       }
+
+}
index fde22f1..c1a350d 100644 (file)
@@ -51,15 +51,25 @@ class SiteSQLStore implements SiteStore {
         */
        private $cacheTimeout = 3600;
 
+       /**
+        * @var BagOStuff
+        */
+       private $cache;
+
        /**
         * @since 1.21
         *
         * @param ORMTable|null $sitesTable
+        * @param BagOStuff|null $cache
         *
         * @return SiteStore
         */
-       public static function newInstance( ORMTable $sitesTable = null ) {
-               return new static( $sitesTable );
+       public static function newInstance( ORMTable $sitesTable = null, BagOStuff $cache = null ) {
+               if ( $cache === null ) {
+                       $cache = wfGetMainCache();
+               }
+
+               return new static( $cache, $sitesTable );
        }
 
        /**
@@ -67,13 +77,15 @@ class SiteSQLStore implements SiteStore {
         *
         * @since 1.21
         *
+        * @param BagOStuff $cache
         * @param ORMTable|null $sitesTable
         */
-       protected function __construct( ORMTable $sitesTable = null ) {
+       protected function __construct( BagOStuff $cache, ORMTable $sitesTable = null ) {
                if ( $sitesTable === null ) {
                        $sitesTable = $this->newSitesTable();
                }
 
+               $this->cache = $cache;
                $this->sitesTable = $sitesTable;
        }
 
@@ -123,8 +135,7 @@ class SiteSQLStore implements SiteStore {
 
                if ( $source === 'cache' ) {
                        if ( $this->sites === null ) {
-                               $cache = wfGetMainCache();
-                               $sites = $cache->get( $this->getCacheKey() );
+                               $sites = $this->cache->get( $this->getCacheKey() );
 
                                if ( is_object( $sites ) ) {
                                        $this->sites = $sites;
@@ -257,8 +268,7 @@ class SiteSQLStore implements SiteStore {
                        }
                }
 
-               $cache = wfGetMainCache();
-               $cache->set( $this->getCacheKey(), $this->sites, $this->cacheTimeout );
+               $this->cache->set( $this->getCacheKey(), $this->sites, $this->cacheTimeout );
 
                wfProfileOut( __METHOD__ );
        }
@@ -374,8 +384,7 @@ class SiteSQLStore implements SiteStore {
        public function reset() {
                wfProfileIn( __METHOD__ );
                // purge cache
-               $cache = wfGetMainCache();
-               $cache->delete( $this->getCacheKey() );
+               $this->cache->delete( $this->getCacheKey() );
                $this->sites = null;
 
                wfProfileOut( __METHOD__ );
index 384aeda..5604bc2 100644 (file)
@@ -660,7 +660,7 @@ abstract class Skin extends ContextSource {
                        $n = $this->getTitle()->isDeleted();
 
                        if ( $n ) {
-                               if ( $this->getTitle()->userCan( 'undelete', $this->getUser() ) ) {
+                               if ( $this->getTitle()->quickUserCan( 'undelete', $this->getUser() ) ) {
                                        $msg = 'thisisdeleted';
                                } else {
                                        $msg = 'viewdeleted';
index ea94fad..0d072ab 100644 (file)
@@ -17,7 +17,7 @@ class SkinFallbackTemplate extends BaseTemplate {
         * @return array
         */
        private function findInstalledSkins() {
-               $styleDirectory = $this->config->get( 'StyleDirectory' ); // @todo we should inject this directly?
+               $styleDirectory = $this->config->get( 'StyleDirectory' );
                // Get all subdirectories which might contains skins
                $possibleSkins = scandir( $styleDirectory );
                $possibleSkins = array_filter( $possibleSkins, function ( $maybeDir ) use ( $styleDirectory ) {
index 6c72703..3a39fee 100644 (file)
@@ -1004,7 +1004,7 @@ class SkinTemplate extends Skin {
                                        if ( $user->isAllowed( 'deletedhistory' ) ) {
                                                $n = $title->isDeleted();
                                                if ( $n ) {
-                                                       $undelTitle = SpecialPage::getTitleFor( 'Undelete' );
+                                                       $undelTitle = SpecialPage::getTitleFor( 'Undelete', $title->getPrefixedDBkey() );
                                                        // If the user can't undelete but can view deleted
                                                        // history show them a "View .. deleted" tab instead.
                                                        $msgKey = $user->isAllowed( 'undelete' ) ? 'undelete' : 'viewdeleted';
@@ -1012,7 +1012,7 @@ class SkinTemplate extends Skin {
                                                                'class' => $this->getTitle()->isSpecial( 'Undelete' ) ? 'selected' : false,
                                                                'text' => wfMessageFallback( "$skname-action-$msgKey", "{$msgKey}_short" )
                                                                        ->setContext( $this->getContext() )->numParams( $n )->text(),
-                                                               'href' => $undelTitle->getLocalURL( array( 'target' => $title->getPrefixedDBkey() ) )
+                                                               'href' => $undelTitle->getLocalURL()
                                                        );
                                                }
                                        }
index c0a94af..072f87f 100644 (file)
@@ -303,10 +303,28 @@ class SpecialPage {
         *   - `prefixSearchSubpages( "" )` should return `array( foo", "bar", "baz" )`
         *
         * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
+        * @param int $limit Maximum number of results to return (usually 10)
+        * @param int $offset Number of results to skip (usually 0)
         * @return string[] Matching subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
+       public function prefixSearchSubpages( $search, $limit, $offset ) {
+               $subpages = $this->getSubpagesForPrefixSearch();
+               if ( !$subpages ) {
+                       return array();
+               }
+
+               return self::prefixSearchArray( $search, $limit, $subpages, $offset );
+       }
+
+       /**
+        * Return an array of subpages that this special page will accept for prefix
+        * searches. If this method requires a query you might instead want to implement
+        * prefixSearchSubpages() directly so you can support $limit and $offset. This
+        * method is better for static-ish lists of things.
+        *
+        * @return string[] subpages to search from
+        */
+       protected function getSubpagesForPrefixSearch() {
                return array();
        }
 
@@ -318,11 +336,13 @@ class SpecialPage {
         * @param string $search
         * @param int $limit
         * @param array $subpages
+        * @param int $offset
         * @return string[]
         */
-       protected static function prefixSearchArray( $search, $limit, array $subpages ) {
+       protected static function prefixSearchArray( $search, $limit, array $subpages, $offset ) {
                $escaped = preg_quote( $search, '/' );
-               return array_slice( preg_grep( "/^$escaped/i", $subpages ), 0, $limit );
+               return array_slice( preg_grep( "/^$escaped/i",
+                       array_slice( $subpages, $offset ) ), 0, $limit );
        }
 
        /**
index 084336d..a4269d1 100644 (file)
@@ -136,6 +136,7 @@ class SpecialBlock extends FormSpecialPage {
                                'autofocus' => true,
                                'required' => true,
                                'validation-callback' => array( __CLASS__, 'validateTargetField' ),
+                               'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
                        ),
                        'Expiry' => array(
                                'type' => !count( $suggestedDurations ) ? 'text' : 'selectorother',
@@ -309,7 +310,7 @@ class SpecialBlock extends FormSpecialPage {
         * @return string
         */
        protected function preText() {
-               $this->getOutput()->addModules( 'mediawiki.special.block' );
+               $this->getOutput()->addModules( array( 'mediawiki.special.block', 'mediawiki.userSuggest' ) );
 
                $text = $this->msg( 'blockiptext' )->parse();
 
index aefd99a..02b2626 100644 (file)
@@ -47,6 +47,7 @@ class SpecialBlockList extends SpecialPage {
                $lang = $this->getLanguage();
                $out->setPageTitle( $this->msg( 'ipblocklist' ) );
                $out->addModuleStyles( 'mediawiki.special' );
+               $out->addModules( 'mediawiki.userSuggest' );
 
                $request = $this->getRequest();
                $par = $request->getVal( 'ip', $par );
@@ -72,6 +73,7 @@ class SpecialBlockList extends SpecialPage {
                                'tabindex' => '1',
                                'size' => '45',
                                'default' => $this->target,
+                               'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
                        ),
                        'Options' => array(
                                'type' => 'multiselect',
index 9007603..cb97420 100644 (file)
@@ -134,22 +134,17 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
        }
 
        /**
-        * Return an array of subpages beginning with $search that this special page will accept.
+        * Return an array of subpages that this special page will accept.
         *
-        * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
-        * @return string[] Matching subpages
+        * @see also SpecialWatchlist::getSubpagesForPrefixSearch
+        * @return string[] subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
-               return self::prefixSearchArray(
-                       $search,
-                       $limit,
-                       // SpecialWatchlist uses SpecialEditWatchlist::getMode, so new types should be added
-                       // here and there - no 'edit' here, because that the default for this page
-                       array(
-                               'clear',
-                               'raw',
-                       )
+       public function getSubpagesForPrefixSearch() {
+               // SpecialWatchlist uses SpecialEditWatchlist::getMode, so new types should be added
+               // here and there - no 'edit' here, because that the default for this page
+               return array(
+                       'clear',
+                       'raw',
                );
        }
 
index aab9c3e..891ea01 100644 (file)
@@ -139,6 +139,9 @@ class SpecialExpandTemplates extends SpecialPage {
         */
        private function makeForm( $title, $input ) {
                $self = $this->getPageTitle();
+               $request = $this->getRequest();
+               $user = $this->getUser();
+
                $form = Xml::openElement(
                        'form',
                        array( 'method' => 'post', 'action' => $self->getLocalUrl() )
@@ -194,6 +197,7 @@ class SpecialExpandTemplates extends SpecialPage {
                        array( 'accesskey' => 's' )
                ) . '</p>';
                $form .= "</fieldset>\n";
+               $form .= Html::hidden( 'wpEditToken', $user->getEditToken( '', $request ) );
                $form .= Xml::closeElement( 'form' );
 
                return $form;
@@ -244,6 +248,29 @@ class SpecialExpandTemplates extends SpecialPage {
        private function showHtmlPreview( Title $title, ParserOutput $pout, OutputPage $out ) {
                $lang = $title->getPageViewLanguage();
                $out->addHTML( "<h2>" . $this->msg( 'expand_templates_preview' )->escaped() . "</h2>\n" );
+
+               if ( $this->getConfig()->get( 'RawHtml' ) ) {
+                       $request = $this->getRequest();
+                       $user = $this->getUser();
+
+                       // To prevent cross-site scripting attacks, don't show the preview if raw HTML is
+                       // allowed and a valid edit token is not provided (bug 71111). However, MediaWiki
+                       // does not currently provide logged-out users with CSRF protection; in that case,
+                       // do not show the preview unless anonymous editing is allowed.
+                       if ( $user->isAnon() && !$user->isAllowed( 'edit' ) ) {
+                               $error = array( 'expand_templates_preview_fail_html_anon' );
+                       } elseif ( !$user->matchEditToken( $request->getVal( 'wpEditToken' ), '', $request ) ) {
+                               $error = array( 'expand_templates_preview_fail_html' );
+                       } else {
+                               $error = false;
+                       }
+
+                       if ( $error ) {
+                               $out->wrapWikiMsg( "<div class='previewnote'>\n$1\n</div>", $error );
+                               return;
+                       }
+               }
+
                $out->addHTML( Html::openElement( 'div', array(
                        'class' => 'mw-content-' . $lang->getDir(),
                        'dir' => $lang->getDir(),
index 0efebb3..a61a673 100644 (file)
@@ -173,18 +173,12 @@ HTML;
        }
 
        /**
-        * Return an array of subpages beginning with $search that this special page will accept.
+        * Return an array of subpages that this special page will accept.
         *
-        * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
-        * @return string[] Matching subpages
+        * @return string[] subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
-               return self::prefixSearchArray(
-                       $search,
-                       $limit,
-                       array_keys( self::$frameworks )
-               );
+       public function getSubpagesForPrefixSearch() {
+               return array_keys( self::$frameworks );
        }
 
        protected function getGroupName() {
index dad9074..fa20994 100644 (file)
@@ -397,15 +397,12 @@ class SpecialListUsers extends IncludableSpecialPage {
        }
 
        /**
-        * Return an array of subpages beginning with $search that this special page will accept.
+        * Return an array of subpages that this special page will accept.
         *
-        * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
-        * @return string[] Matching subpages
+        * @return string[] subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
-               $subpages = User::getAllGroups();
-               return self::prefixSearchArray( $search, $limit, $subpages );
+       public function getSubpagesForPrefixSearch() {
+               return User::getAllGroups();
        }
 
        protected function getGroupName() {
index 99704a9..04c2fe9 100644 (file)
@@ -119,17 +119,15 @@ class SpecialLog extends SpecialPage {
        }
 
        /**
-        * Return an array of subpages beginning with $search that this special page will accept.
+        * Return an array of subpages that this special page will accept.
         *
-        * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
-        * @return string[] Matching subpages
+        * @return string[] subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
+       public function getSubpagesForPrefixSearch() {
                $subpages = $this->getConfig()->get( 'LogTypes' );
                $subpages[] = 'all';
                sort( $subpages );
-               return self::prefixSearchArray( $search, $limit, $subpages );
+               return $subpages;
        }
 
        private function parseParams( FormOptions $opts, $par ) {
index f5b19cc..670a397 100644 (file)
@@ -83,11 +83,13 @@ class SpecialPagesWithProp extends QueryPage {
         *
         * @param string $search Prefix to search for
         * @param int $limit Maximum number of results to return
+        * @param int $offset Number of pages to skip
         * @return string[] Matching subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
-               $subpages = array_keys( $this->getExistingPropNames() );
-               return self::prefixSearchArray( $search, $limit, $subpages );
+       public function prefixSearchSubpages( $search, $limit, $offset ) {
+               $subpages = array_keys( $this->queryExistingProps( $limit, $offset ) );
+               // We've already limited and offsetted, set to N and 0 respectively.
+               return self::prefixSearchArray( $search, count( $subpages ), $subpages, 0 );
        }
 
        /**
@@ -154,23 +156,38 @@ class SpecialPagesWithProp extends QueryPage {
 
        public function getExistingPropNames() {
                if ( $this->existingPropNames === null ) {
-                       $dbr = wfGetDB( DB_SLAVE );
-                       $res = $dbr->select(
-                               'page_props',
-                               'pp_propname',
-                               '',
-                               __METHOD__,
-                               array( 'DISTINCT', 'ORDER BY' => 'pp_propname' )
-                       );
-                       $propnames = array();
-                       foreach ( $res as $row ) {
-                               $propnames[$row->pp_propname] = $row->pp_propname;
-                       }
-                       $this->existingPropNames = $propnames;
+                       $this->existingPropNames = $this->queryExistingProps();
                }
                return $this->existingPropNames;
        }
 
+       protected function queryExistingProps( $limit = null, $offset = 0 ) {
+               $opts = array(
+                       'DISTINCT', 'ORDER BY' => 'pp_propname'
+               );
+               if ( $limit ) {
+                       $opts['LIMIT'] = $limit;
+               }
+               if ( $offset ) {
+                       $opts['OFFSET'] = $offset;
+               }
+
+               $res = wfGetDB( DB_SLAVE )->select(
+                       'page_props',
+                       'pp_propname',
+                       '',
+                       __METHOD__,
+                       $opts
+               );
+
+               $propnames = array();
+               foreach ( $res as $row ) {
+                       $propnames[$row->pp_propname] = $row->pp_propname;
+               }
+
+               return $propnames;
+       }
+
        protected function getGroupName() {
                return 'pages';
        }
index 570ab3b..f9e03ab 100644 (file)
@@ -117,7 +117,7 @@ class SpecialRandomInCategory extends FormSpecialPage {
                        return Status::newFatal( $msg );
 
                } elseif ( !$this->category ) {
-                       return; // no data sent
+                       return false; // no data sent
                }
 
                $title = $this->getRandomTitle();
index a2683e5..72d21eb 100644 (file)
@@ -263,22 +263,16 @@ class SpecialRedirect extends FormSpecialPage {
        }
 
        /**
-        * Return an array of subpages beginning with $search that this special page will accept.
+        * Return an array of subpages that this special page will accept.
         *
-        * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
-        * @return string[] Matching subpages
+        * @return string[] subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
-               return self::prefixSearchArray(
-                       $search,
-                       $limit,
-                       array(
-                               "file",
-                               "page",
-                               "revision",
-                               "user",
-                       )
+       protected function getSubpagesForPrefixSearch() {
+               return array(
+                       "file",
+                       "page",
+                       "revision",
+                       "user",
                );
        }
 
index 244b889..192dc96 100644 (file)
@@ -53,7 +53,7 @@ class SpecialUnblock extends SpecialPage {
 
                $out = $this->getOutput();
                $out->setPageTitle( $this->msg( 'unblockip' ) );
-               $out->addModules( 'mediawiki.special' );
+               $out->addModules( array( 'mediawiki.special', 'mediawiki.userSuggest' ) );
 
                $form = new HTMLForm( $this->getFields(), $this->getContext() );
                $form->setWrapperLegendMsg( 'unblockip' );
@@ -88,6 +88,7 @@ class SpecialUnblock extends SpecialPage {
                                'autofocus' => true,
                                'size' => '45',
                                'required' => true,
+                               'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
                        ),
                        'Name' => array(
                                'type' => 'info',
index 2eefd0a..83b9089 100644 (file)
@@ -160,7 +160,8 @@ class LoginForm extends SpecialPage {
                $this->mLoginattempt = $request->getCheck( 'wpLoginattempt' );
                $this->mAction = $request->getVal( 'action' );
                $this->mRemember = $request->getCheck( 'wpRemember' );
-               $this->mFromHTTP = $request->getBool( 'fromhttp', false );
+               $this->mFromHTTP = $request->getBool( 'fromhttp', false )
+                       || $request->getBool( 'wpFromhttp', false );
                $this->mStickHTTPS = ( !$this->mFromHTTP && $request->getProtocol() === 'https' )
                        || $request->getBool( 'wpForceHttps', false );
                $this->mLanguage = $request->getText( 'uselang' );
@@ -1438,6 +1439,11 @@ class LoginForm extends SpecialPage {
                        $template->set( 'signupend', $this->msg( 'signupend' )->parse() );
                }
 
+               // If using HTTPS coming from HTTP, then the 'fromhttp' parameter must be preserved
+               if ( $usingHTTPS ) {
+                       $template->set( 'fromhttp', $this->mFromHTTP );
+               }
+
                // Give authentication and captcha plugins a chance to modify the form
                $wgAuth->modifyUITemplate( $template, $this->mType );
                if ( $this->mType == 'signup' ) {
index 421840f..a06955d 100644 (file)
@@ -79,22 +79,16 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        }
 
        /**
-        * Return an array of subpages beginning with $search that this special page will accept.
+        * Return an array of subpages that this special page will accept.
         *
-        * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
-        * @return string[] Matching subpages
+        * @see also SpecialEditWatchlist::getSubpagesForPrefixSearch
+        * @return string[] subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
-               // See also SpecialEditWatchlist::prefixSearchSubpages
-               return self::prefixSearchArray(
-                       $search,
-                       $limit,
-                       array(
-                               'clear',
-                               'edit',
-                               'raw',
-                       )
+       public function getSubpagesForPrefixSearch() {
+               return array(
+                       'clear',
+                       'edit',
+                       'raw',
                );
        }
 
index 2a9badf..adf8947 100644 (file)
@@ -188,6 +188,7 @@ class UserloginTemplate extends BaseTemplate {
                        <?php if ( $this->haveData( 'uselang' ) ) { ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php } ?>
                        <?php if ( $this->haveData( 'token' ) ) { ?><input type="hidden" name="wpLoginToken" value="<?php $this->text( 'token' ); ?>" /><?php } ?>
                        <?php if ( $this->data['cansecurelogin'] ) {?><input type="hidden" name="wpForceHttps" value="<?php $this->text( 'stickhttps' ); ?>" /><?php } ?>
+                       <?php if ( $this->data['cansecurelogin'] && $this->haveData( 'fromhttp' )) {?><input type="hidden" name="wpFromhttp" value="<?php $this->text( 'fromhttp' ); ?>" /><?php } ?>
                </form>
        </div>
 </div>
index 0e2db8c..77f9cd1 100644 (file)
@@ -628,6 +628,25 @@ class IP {
                        strcmp( $hexIP, $end ) <= 0 );
        }
 
+       /**
+        * Determines if an IP address is a list of CIDR a.b.c.d/n ranges.
+        *
+        * @since 1.25
+        *
+        * @param string $ip the IP to check
+        * @param array $ranges the IP ranges, each element a range
+        *
+        * @return bool true if the specified adress belongs to the specified range; otherwise, false.
+        */
+       public static function isInRanges( $ip, $ranges ) {
+               foreach ( $ranges as $range ) {
+                       if ( self::isInRange( $ip, $range ) ) {
+                               return true;
+                       }
+               }
+               return false;
+       }
+
        /**
         * Convert some unusual representations of IPv4 addresses to their
         * canonical dotted quad representation.
index 856df15..31c8f1a 100644 (file)
        "alllogstext": "عرض شامل لكل السجلات المتوفرة في {{SITENAME}}.\nباستطاعتك جعل القائمة أكثر تحديداً، وذلك باختيار نوع السجل واسم المستخدم (حساس لحالة الحروف)، أو الصفحة المتأثرة (أيضاً حساس لحالة الحروف).",
        "logempty": "لا توجد مدخلات مطابقة في السجل.",
        "log-title-wildcard": "ابحث عن عناوين تبدأ بهذا النص",
-       "showhideselectedlogentries": "إطÙ\87ار/إخÙ\81اء Ø³Ø¬Ù\84ات Ø§Ù\84دخÙ\88ل المختارة",
+       "showhideselectedlogentries": "غÙ\8aر Ø±Ø¤Ù\8aØ© Ù\85دخÙ\84ات Ø§Ù\84سجل المختارة",
        "allpages": "كل الصفحات",
        "nextpage": "الصفحة التالية ($1)",
        "prevpage": "الصفحة السابقة ($1)",
        "specialpages-group-wiki": "البيانات والأدوات",
        "specialpages-group-redirects": "صفحات خاصة تحول",
        "specialpages-group-spam": "أدوات السبام",
+       "specialpages-group-developer": "أدوات المطورين",
        "blankpage": "صفحة فارغة",
        "intentionallyblankpage": "هذه الصفحة تركت فارغة عن قصد",
        "external_image_whitelist": " #<pre>اترك هذا السطر تماما كما هو\n#ضع منثورات التعبيرات المنتظمة (فقط الجزء الذي يذهب بين //) بالأسفل\n#هذه ستتم مطابقتها مع مسارات الصور الخرجية (الموصولة بشكل مباشر)\n#هذه التي تطابق سيتم عرضها كصور، غير ذلك فقط وصلة إلى الصورة سيتم عرضها\n#السطور التي تبدأ ب# تتم معاملتها كتعليقات\n#هذا لا يتأثر بحالة الحروف\n\n#ضع كل منثورات التعبيرات المنتظمة فوق هذا السطر. اترك هذا السطر تماما كما هو</pre>",
index 4f642ef..9c6aefc 100644 (file)
        "specialpages-group-wiki": "Мәғлүмәттәр һәм ҡоралдар",
        "specialpages-group-redirects": "Йүнәлтеүсе махсус биттәр",
        "specialpages-group-spam": "Спамға ҡаршы ҡоралдар",
+       "specialpages-group-developer": "Программист ҡоралдары",
        "blankpage": "Буш бит",
        "intentionallyblankpage": "Был бит аңлы рәүештә буш ҡалдырылған.",
        "external_image_whitelist": "#Был юлды нисек бар, шулай ҡалдырығыҙ<pre>\n#Бында регуляр аңлатма өлөштәрен ҡуйығыҙ(// араһында булған өлөштәрен)\n#Улар тышҡы рәсемдәрҙең URL адрестары менән сағыштырыласаҡ.\n#Яраҡлылары рәсем рәүешендә күрһәтеләсәк, ҡалғандары рәсемгә һылтанма рәүешендә күрһәтеләсәк.\n# # менән башланған юлдар иҫкәрмә тип иҫәпләнә.\n#Юлдар ҙур/бәләкәй хәрефкә һиҙгер\n\n# Регуляр аңлатма өлөштәрен ошо юл өҫтөнә ҡуйығыҙ. Был юлды нисек бар, шулай ҡалдырығыҙ.</pre>",
index 0adc350..d417347 100644 (file)
        "right-protect": "зьмена ўзроўню абароны старонак і рэдагаваньне каскадна абароненых старонак",
        "right-editprotected": "рэдагаваньне старонак, абароненых у рэжыме «{{int:protect-level-sysop}}»",
        "right-editsemiprotected": "рэдагаваньне старонак, абароненых у рэжыме «{{int:protect-level-autoconfirmed}}»",
+       "right-editcontentmodel": "рэдагаваньне мадэлі зьместу старонкі",
        "right-editinterface": "рэдагаваньне інтэрфэйса карыстальніка",
        "right-editusercssjs": "рэдагаваньне CSS і JS файлаў іншых удзельнікаў",
        "right-editusercss": "рэдагаваньне CSS файлаў іншых удзельнікаў",
        "action-viewmywatchlist": "праглядаць ваш сьпіс назіраньня",
        "action-viewmyprivateinfo": "прагляд вашых прыватных зьвестак",
        "action-editmyprivateinfo": "рэдагаваньне вашых прыватных зьвестак",
+       "action-editcontentmodel": "рэдагаваньне мадэлі зьместу старонкі",
        "nchanges": "$1 {{PLURAL:$1|зьмена|зьмены|зьменаў}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|з апошняга візыту}}",
        "enhancedrc-history": "гісторыя",
        "specialpages-group-wiki": "Зьвесткі і прылады",
        "specialpages-group-redirects": "Спэцыяльныя старонкі-перанакіраваньні",
        "specialpages-group-spam": "Інструмэнты для барацьбы са спамам",
+       "specialpages-group-developer": "Інструмэнты распрацоўшчыка",
        "blankpage": "Пустая старонка",
        "intentionallyblankpage": "Гэтая старонка наўмысна пакінутая пустой",
        "external_image_whitelist": " #Пакіньце гэты радок такім, які ён ёсьць<pre>\n#Зьмясьціце часткі рэгулярных выразаў (толькі частку якая знаходзіцца паміж //) ніжэй\n#Яны будуць суаднесеныя з URL-адрасамі вонкавых выяваў\n#Тыя, якія будуць пасаваць будуць паказвацца як выявы, астатнія толькі як спасылкі\n#Радкі, пазначаныя #, лічыцца камэнтарамі\n#Рэгістар сымбаляў ня ўлічваецца\n\n#Зьмясьціце ўсе часткі рэгулярных выразаў над гэтым радком. Сам радок пакіньце ў такім жа выглядзе</pre>",
        "expand_templates_generate_xml": "Паказаць дрэва аналізу XML",
        "expand_templates_generate_rawhtml": "Паказаць HTML",
        "expand_templates_preview": "Папярэдні прагляд",
+       "expand_templates_preview_fail_html": "<em>Праз тое што {{SITENAME}} мае ўключаным сыры HTML і адбылася страта зьвестак сэсіі, папярэдні прагляд схаваны, як засьцярога ад атакаў з дапамогай JavaScript.</em>\n\n<strong>Калі гэта слушная спроба перадпрагляду, калі ласка, паспрабуйце яшчэ раз.</strong>\nКалі гэта не спрацуе, паспрабуйце [[Special:UserLogout|выйсьці]] і ўвайсьці яшчэ раз.",
+       "expand_templates_preview_fail_html_anon": "<em>Праз тое што {{SITENAME}} мае ўключаным сыры HTML і вы не ўвайшлі ў сыстэму, папярэдні прагляд схаваны, як засьцярога ад атакаў з дапамогай JavaScript.</em>\n\n<strong>Калі гэта слушная спроба перадпрагляду, калі ласка, [[Special:UserLogin|увайдзіце ў сыстэму]] і паспрабуйце яшчэ раз.</strong>",
        "pagelanguage": "Выбар мовы старонкі",
        "pagelang-name": "Старонка",
        "pagelang-language": "Мова",
        "log-name-pagelang": "Журнал зьменаў мовы",
        "log-description-pagelang": "Гэта журнал зьменаў мовы старонак.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} мову старонкі $3 з $4 на $5.",
-       "default-skin-not-found": "Упс! Тэма афармленьня па змоўчаньні для вашай вікі, вызначаная ў <code dir=\"ltr\">$wgDefaultSkin</code> як <code>$1</code> недаступная.\n\nВашае ўсталяваньне, падобна, уключае наступныя тэмы афармленьня. Глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць іх і абраць тэму па змоўчаньні.\n\n$2\n\n; Калі вы толькі што ўсталявалі MediaWiki:\n: Напэўна вы ўсталявалі з git або наўпрост з крынічнага коду з ужываньнем іншага мэтаду. Гэта чакана. Паспрабуйце ўсталяваць некалькі тэмаў афармленьня з [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's каталёгу тэмаў]:\n:* Спампуйце [https://www.mediawiki.org/wiki/Download tarball-усталёўнік], які ўтрымлівае некалькі тэмаў і пашырэньняў. Вы можаце скапіяваць каталёг <code>skins/</code> зь яго.\n:* Зрабіце клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталёг <code dir=\"ltr\">skins/</code> вашай усталёўкі MediaWiki.\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча.\n\n; Калі вы толькі што абнавілі MediaWiki:\n: MediaWiki вэрсіі 1.24 і навейшыя больш не падключаюць тэмы афармленьня аўтаматычна (глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Інструкцыя:Аўтаматычнае выяўленьне тэмаў афармленьня]). Вы можаце дадаць наступныя радкі ў <code>LocalSettings.php</code>, каб падключыць усе ўсталяваныя тэмы афармленьня:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Калі вы толькі што зьмянілі <code>LocalSettings.php</code>:\n: Пераправерце назвы тэмаў афармленьня на наяўнасьць памылак.",
-       "default-skin-not-found-no-skins": "УпÑ\81! Ð¢Ñ\8dма Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ð¿Ð° Ð·Ð¼Ð¾Ñ\9eÑ\87анÑ\8cнÑ\8f Ð´Ð»Ñ\8f Ð²Ð°Ñ\88ай Ð²Ñ\96кÑ\96, Ð²Ñ\8bзнаÑ\87анаÑ\8f Ñ\9e <code>$wgDefaultSkin</code> Ñ\8fк <code>$1</code>, Ð½ÐµÐ´Ð°Ñ\81Ñ\82Ñ\83пнаÑ\8f.\n\nÐ\92Ñ\8b Ð½Ñ\8f Ð¼Ð°ÐµÑ\86е Ñ\9eÑ\81Ñ\82алÑ\8fванÑ\8bÑ\85 Ñ\82Ñ\8dмаÑ\9e Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f.\n\n; Ð\9aалÑ\96 Ð²Ñ\8b Ñ\82олÑ\8cкÑ\96 Ñ\88Ñ\82о Ñ\9eÑ\81Ñ\82алÑ\8fвалÑ\96 Ð°Ð±Ð¾ Ð°Ð±Ð½Ð°Ð²Ñ\96лÑ\96 MediaWiki:\n: Ð\9dапÑ\8dÑ\9eна Ð²Ñ\8b Ñ\9eÑ\81Ñ\82алÑ\8fвалÑ\96 Ð· git Ð°Ð±Ð¾ Ð½Ð°Ñ\9eпÑ\80оÑ\81Ñ\82 Ð· ÐºÑ\80Ñ\8bнÑ\96Ñ\87нага ÐºÐ¾Ð´Ñ\83 Ð· Ñ\83жÑ\8bванÑ\8cнем Ñ\96нÑ\88ага Ð¼Ñ\8dÑ\82адÑ\83. Ð\93Ñ\8dÑ\82а Ñ\87акана. MediaWiki Ð²Ñ\8dÑ\80Ñ\81Ñ\96Ñ\96 1.24 Ñ\96 Ð½Ð°Ð²ÐµÐ¹Ñ\88Ñ\8bÑ\8f Ð½Ñ\8f Ñ\9eÑ\82Ñ\80Ñ\8bмлÑ\96ваÑ\8eÑ\86Ñ\8c Ñ\82Ñ\8dмÑ\8b Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ñ\9e Ð³Ð°Ð»Ð¾Ñ\9eнÑ\8bм Ñ\81Ñ\85овÑ\96Ñ\88Ñ\87Ñ\8b. Ð\9fаÑ\81пÑ\80абÑ\83йÑ\86е Ñ\9eÑ\81Ñ\82алÑ\8fваÑ\86Ñ\8c Ð½ÐµÐºÐ°Ð»Ñ\8cкÑ\96 Ñ\82Ñ\8dмаÑ\9e Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ð· [https://www.mediawiki.org/wiki/Category:All_skins ÐºÐ°Ñ\82алÑ\91гÑ\83 Ñ\82Ñ\8dмаÑ\9e mediawiki.org]:\n:* Ð¡Ð¿Ð°Ð¼Ð¿Ñ\83йÑ\86е [https://www.mediawiki.org/wiki/Download tarball-Ñ\83Ñ\81Ñ\82алÑ\91Ñ\9eнÑ\96к], Ñ\8fкÑ\96 Ñ\9eÑ\82Ñ\80Ñ\8bмлÑ\96вае Ð½ÐµÐºÐ°Ð»Ñ\8cкÑ\96 Ñ\82Ñ\8dмаÑ\9e Ñ\96 Ð¿Ð°Ñ\88Ñ\8bÑ\80Ñ\8dнÑ\8cнÑ\8fÑ\9e. Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ñ\81капÑ\96Ñ\8fваÑ\86Ñ\8c ÐºÐ°Ñ\82алÑ\91г <code dir=\"ltr\">skins/</code> Ð·Ñ\8c Ñ\8fго.\n:* Зрабіце клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталёг <code>skins/</code> вашай усталёўкі MediaWiki.\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча. Глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць іх і абраць тэму па змоўчаньні.",
+       "default-skin-not-found": "Упс! Тэма афармленьня па змоўчаньні для вашай вікі, вызначаная ў <code dir=\"ltr\">$wgDefaultSkin</code> як <code>$1</code> недаступная.\n\nВашае ўсталяваньне, падобна, уключае наступныя тэмы афармленьня. Глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць іх і абраць тэму па змоўчаньні.\n\n$2\n\n; Калі вы толькі што ўсталявалі MediaWiki:\n: Напэўна вы ўсталявалі з git або наўпрост з крынічнага коду з ужываньнем іншага мэтаду. Гэта чакана. Паспрабуйце ўсталяваць некалькі тэмаў афармленьня з [https://www.mediawiki.org/wiki/Category:All_skins каталёгу тэмаў mediawiki.org]:\n:* Спампуйце [https://www.mediawiki.org/wiki/Download tarball-усталёўнік], які ўтрымлівае некалькі тэмаў і пашырэньняў. Вы можаце скапіяваць каталёг <code>skins/</code> зь яго.\n:* Спампуйце tarball-усталёўнікі для асобных тэмаў з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Зрабіце клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталёг <code dir=\"ltr\">skins/</code> вашай усталёўкі MediaWiki.\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча.\n\n; Калі вы толькі што абнавілі MediaWiki:\n: MediaWiki вэрсіі 1.24 і навейшыя больш не падключаюць тэмы афармленьня аўтаматычна (глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Інструкцыя:Аўтаматычнае выяўленьне тэмаў афармленьня]). Вы можаце дадаць наступныя радкі ў <code>LocalSettings.php</code>, каб падключыць усе ўсталяваныя тэмы афармленьня:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Калі вы толькі што зьмянілі <code>LocalSettings.php</code>:\n: Пераправерце назвы тэмаў афармленьня на наяўнасьць памылак.",
+       "default-skin-not-found-no-skins": "УпÑ\81! Ð¢Ñ\8dма Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ð¿Ð° Ð·Ð¼Ð¾Ñ\9eÑ\87анÑ\8cнÑ\96 Ð´Ð»Ñ\8f Ð²Ð°Ñ\88ай Ð²Ñ\96кÑ\96, Ð²Ñ\8bзнаÑ\87анаÑ\8f Ñ\9e <code>$wgDefaultSkin</code> Ñ\8fк <code>$1</code>, Ð½ÐµÐ´Ð°Ñ\81Ñ\82Ñ\83пнаÑ\8f.\n\nÐ\92Ñ\8b Ð½Ñ\8f Ð¼Ð°ÐµÑ\86е Ñ\9eÑ\81Ñ\82алÑ\8fванÑ\8bÑ\85 Ñ\82Ñ\8dмаÑ\9e Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f.\n\n; Ð\9aалÑ\96 Ð²Ñ\8b Ñ\82олÑ\8cкÑ\96 Ñ\88Ñ\82о Ñ\9eÑ\81Ñ\82алÑ\8fвалÑ\96 Ð°Ð±Ð¾ Ð°Ð±Ð½Ð°Ð²Ñ\96лÑ\96 MediaWiki:\n: Ð\9dапÑ\8dÑ\9eна Ð²Ñ\8b Ñ\9eÑ\81Ñ\82алÑ\8fвалÑ\96 Ð· git Ð°Ð±Ð¾ Ð½Ð°Ñ\9eпÑ\80оÑ\81Ñ\82 Ð· ÐºÑ\80Ñ\8bнÑ\96Ñ\87нага ÐºÐ¾Ð´Ñ\83 Ð· Ñ\83жÑ\8bванÑ\8cнем Ñ\96нÑ\88ага Ð¼Ñ\8dÑ\82адÑ\83. Ð\93Ñ\8dÑ\82а Ñ\87акана. MediaWiki Ð²Ñ\8dÑ\80Ñ\81Ñ\96Ñ\96 1.24 Ñ\96 Ð½Ð°Ð²ÐµÐ¹Ñ\88Ñ\8bÑ\8f Ð½Ñ\8f Ñ\9eÑ\82Ñ\80Ñ\8bмлÑ\96ваÑ\8eÑ\86Ñ\8c Ñ\82Ñ\8dмÑ\8b Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ñ\9e Ð³Ð°Ð»Ð¾Ñ\9eнÑ\8bм Ñ\81Ñ\85овÑ\96Ñ\88Ñ\87Ñ\8b. Ð\9fаÑ\81пÑ\80абÑ\83йÑ\86е Ñ\9eÑ\81Ñ\82алÑ\8fваÑ\86Ñ\8c Ð½ÐµÐºÐ°Ð»Ñ\8cкÑ\96 Ñ\82Ñ\8dмаÑ\9e Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ð· [https://www.mediawiki.org/wiki/Category:All_skins ÐºÐ°Ñ\82алÑ\91гÑ\83 Ñ\82Ñ\8dмаÑ\9e mediawiki.org]:\n:* Ð¡Ð¿Ð°Ð¼Ð¿Ñ\83йÑ\86е [https://www.mediawiki.org/wiki/Download tarball-Ñ\83Ñ\81Ñ\82алÑ\91Ñ\9eнÑ\96к], Ñ\8fкÑ\96 Ñ\9eÑ\82Ñ\80Ñ\8bмлÑ\96вае Ð½ÐµÐºÐ°Ð»Ñ\8cкÑ\96 Ñ\82Ñ\8dмаÑ\9e Ñ\96 Ð¿Ð°Ñ\88Ñ\8bÑ\80Ñ\8dнÑ\8cнÑ\8fÑ\9e. Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ñ\81капÑ\96Ñ\8fваÑ\86Ñ\8c ÐºÐ°Ñ\82алÑ\91г <code dir=\"ltr\">skins/</code> Ð·Ñ\8c Ñ\8fго.\n:* Ð¡Ð¿Ð°Ð¼Ð¿Ñ\83йÑ\86е tarball-Ñ\83Ñ\81Ñ\82алÑ\91Ñ\9eнÑ\96кÑ\96 Ð´Ð»Ñ\8f Ð°Ñ\81обнÑ\8b Ñ\82Ñ\8dмаÑ\9e Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ð· [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Зрабіце клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталёг <code>skins/</code> вашай усталёўкі MediaWiki.\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча. Глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць іх і абраць тэму па змоўчаньні.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (уключана)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''адключана''')",
        "mediastatistics": "Статыстыка мэдыяфайлаў",
index fc86b50..78e6b1a 100644 (file)
@@ -24,7 +24,8 @@
                        "Gazimagomedov",
                        "StanProg",
                        "Bjankuloski06",
-                       "Vodnokon4e"
+                       "Vodnokon4e",
+                       "ShadeOfGrey"
                ]
        },
        "tog-underline": "Подчертаване на препратките:",
        "specialpages-group-wiki": "Данни и инструменти",
        "specialpages-group-redirects": "Пренасочващи специални страници",
        "specialpages-group-spam": "Инструменти против спам",
+       "specialpages-group-developer": "Инструменти за разработчици",
        "blankpage": "Празна страница",
        "intentionallyblankpage": "Тази страница умишлено е оставена празна",
        "external_image_whitelist": " #Оставете този ред така, както го виждате. <pre>\n#Поставете долу фрагменти от регулярни изрази (само частта между //).\n#Тези фрагменти ще се съпоставят с интернет адресите на външните (hotlinked) картинки.\n#Картинките, чиито адреси отговарят на вписаните регулярни изрази, ще се визуализират, за останалите ще се появява само връзка.\n#Редовете, започващи с # се възприемат като коментари.\n#Командите са чувствителни на малки и главни букви.\n\n#Слагайте всички фрагменти от регулярни изрази НАД този ред. Оставете този ред така, както го виждате. </pre>",
        "logentry-move-move": "$1 {{GENDER:$2|премести}} страница „$3“ като „$4“",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|премести}} страницата „$3“ като „$4“ без пренасочване",
        "logentry-move-move_redir": "$1 {{GENDER:$2|премести}} страницата $3 като $4 (върху пренасочване)",
-       "logentry-move-move_redir-noredirect": "$1 {GENDER:$2|премести}} върху пренасочване $3 като $4 без пренасочване",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|премести}} върху пренасочване $3 като $4 без пренасочване",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|отбеляза}} като патрулирана версия $4 на страницата „$3“",
        "logentry-patrol-patrol-auto": "$1 автоматично {{GENDER:$2|отбеляза}} като патрулирана версия $4 на страницата $3",
        "logentry-newusers-newusers": "Потребителската сметка $1 беше {{GENDER:$2|създадена}}",
index d95f9d2..a6192ee 100644 (file)
        "viewsourceold": "উৎস দেখাও",
        "editlink": "সম্পাদনা",
        "viewsourcelink": "উৎস দেখুন",
-       "editsectionhint": "পরিচ্ছেদ সম্পাদনা: $1",
+       "editsectionhint": "à¦\85নà§\81চ্ছেদ সম্পাদনা: $1",
        "toc": "পরিচ্ছেদসমূহ",
        "showtoc": "দেখাও",
        "hidetoc": "আড়ালে রাখো",
        "prefs-email": "ই-মেইল অপশন",
        "prefs-rendering": "অবয়ব",
        "saveprefs": "সংরক্ষণ",
-       "restoreprefs": "সà¦\95ল à¦ªà§\82রà§\8dবনিরà§\8dধারিত à¦¸à§\87à¦\9fিà¦\82 à¦«à¦¿à¦°à¦¿à¦¯à¦¼à§\87 à¦\86নà§\8b (সà¦\95ল à¦¸à§\87à¦\95শনে)",
+       "restoreprefs": "সà¦\95ল à¦ªà§\82রà§\8dবনিরà§\8dধারিত à¦¸à§\87à¦\9fিà¦\82 à¦«à¦¿à¦°à¦¿à¦¯à¦¼à§\87 à¦\86নà§\8b (সà¦\95ল à¦\85নà§\81à¦\9aà§\8dà¦\9bà§\87দে)",
        "prefs-editing": "সম্পাদনা",
        "rows": "সারি:",
        "columns": "কলাম:",
        "action-movefile": "এই ফাইলটি সরিয়ে ফেলুন",
        "action-upload": "এই ফাইল আপলোড করো",
        "action-reupload": "বিদ্যমান ফাইল প্রতিস্থাপন করো",
-       "action-reupload-shared": "শà§\87য়ারà§\8dড à¦°à¦¿à¦ªà§\8bà¦\9cিà¦\9fরà§\80তà§\87 à¦\8fà¦\87 à¦«à¦¾à¦\87লà¦\9fি à¦\86পডà§\87à¦\9f করুন",
+       "action-reupload-shared": "শà§\87য়ারà§\8dড à¦°à¦¿à¦ªà§\8bà¦\9cিà¦\9fরà§\80তà§\87 à¦\8fà¦\87 à¦«à¦¾à¦\87লà¦\9fি à¦¹à¦¾à¦²à¦¨à¦¾à¦\97াদ করুন",
        "action-upload_by_url": "কোন ইউআরএল থেকে ফাইলটি আপলোড করো",
        "action-writeapi": "রাইট এপিআই ব্যবহার করুন",
        "action-delete": "পাতাটি মুছে ফেলো",
        "backend-fail-batchsize": "স্টোরেজ ব্যকএন্ডে $1টি {{PLURAL:$1|অপারেশনের|অপারেশনগুলোর}} কমান্ড দেয়া হয়েছে; সর্বোচ্চ সীমা হল $2টি {{PLURAL:$1|অপারেশ}}।",
        "backend-fail-usable": "\"$1\" ফাইলটিতে লেখা অথবা ফাইলটি পড়া যাচ্ছে না, কারণ সঠিক অনুমতি নেই অথবা ডিরেক্টরীটি নেই।",
        "filejournal-fail-dbconnect": "\"$1\" স্টোরেজ ব্যাকেন্ডের জার্নাল ডাটাবেজের সাথে যুক্ত হওয়া যাচ্ছে না।",
-       "filejournal-fail-dbquery": "\"$1\" à¦¸à§\8dà¦\9fà§\8bরà§\87à¦\9c à¦¬à§\8dযাà¦\95à§\87নà§\8dডà§\87র à¦\9cারà§\8dনাল à¦¡à¦¾à¦\9fাবà§\87à¦\9c à¦\86পডà§\87à¦\9f করা যাচ্ছে না।",
+       "filejournal-fail-dbquery": "\"$1\" à¦¸à§\8dà¦\9fà§\8bরà§\87à¦\9c à¦¬à§\8dযাà¦\95à§\87নà§\8dডà§\87র à¦\9cারà§\8dনাল à¦¡à¦¾à¦\9fাবà§\87à¦\9c à¦¹à¦¾à¦²à¦¨à¦¾à¦\97াদ করা যাচ্ছে না।",
        "lockmanager-notlocked": "\"$1\" আনলক করা যাচ্ছে না; এটি লক করা রয়েছে।",
        "lockmanager-fail-closelock": "\"$1\" ফাইলটি লক করা তাই বন্ধ করা যাচ্ছে না।",
        "lockmanager-fail-deletelock": "\"$1\" লক করা ফাইলটি অপসারণ সম্ভব নয়।",
        "specialpages-group-wiki": "উপাত্ত এবং সরঞ্জামসমূহ",
        "specialpages-group-redirects": "বিশেষ পাতাগুলি পুনর্নির্দেশ করা হচ্ছে",
        "specialpages-group-spam": "স্প্যামরোধী হাতিয়ার",
+       "specialpages-group-developer": "ডেভলপারের সরঞ্জাম",
        "blankpage": "খালি পাতা",
        "intentionallyblankpage": "এই পাতাটি ইচ্ছা করে খালি রাখা হয়েছে",
        "external_image_whitelist": "  #এই লাইন ঠিক যেমন আছে<প্রাক> তেমন রাখুন<pre>\n #রেগুলার এক্সপ্রেশনের টুকরা নীচে (শুধুমাত্র অংশ / / মধ্যে যে যায়) বসান\n#এইগুলি এক্সটার্নাল (hotlinked) ইমেজের URL-এর সাথে মেলানো হবে\n#যেগুলি মিলবে, সেগুলি চিত্র হিসাবে প্রদর্শিত হবে, অন্যথায় শুধুমাত্র ইমেজ লিঙ্ক প্রদর্শিত হবে\n#যে লাইনের প্রারম্ভে # আছে সেই লাইনগুলি মন্তব্যসমূহ হিসাবে ব্যবহার করা হয়\n#এটি কেস-অসংবেদী\n\n#এই রেখার উপরের regex টুকরা বসান. এই লাইন ঠিক যেমন আছে তেমন রাখুন</pre>",
index d02ffc5..133825c 100644 (file)
@@ -43,7 +43,8 @@
                        "아라",
                        "Calak",
                        "F3RaN",
-                       "ESM"
+                       "ESM",
+                       "Loupeter"
                ]
        },
        "tog-underline": "Subratlla els enllaços:",
        "mainpage-description": "Pàgina principal",
        "policy-url": "Project:Polítiques",
        "portal": "Portal de la comunitat",
-       "portal-url": "Project:Portal de la comunitat",
+       "portal-url": "Project:Portal",
        "privacy": "Política de privadesa",
        "privacypage": "Project:Política de privadesa",
        "badaccess": "Error de permisos",
        "nocookiesnew": "S'ha creat el compte d'usuari, però no esteu enregistrat. El projecte {{SITENAME}} usa galetes per enregistrar els usuaris. Si us plau activeu-les, per a poder enregistrar-vos amb el vostre nom d'usuari i la clau.",
        "nocookieslogin": "El programari {{SITENAME}} utilitza galetes per enregistrar usuaris. Teniu les galetes desactivades. Activeu-les i torneu a provar.",
        "nocookiesfornew": "No s'ha creat el compte d'usuari, ja que no es podia confirmar el seu origen.\nVerifiqueu que teniu habilitades les galetes al vostre navegador, torneu a carregar aquesta pàgina i intenteu-lo de nou.",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "No heu especificat un nom vàlid d'usuari.",
        "loginsuccesstitle": "S'ha iniciat la sessió amb èxit",
        "loginsuccess": "Heu iniciat la sessió a {{SITENAME}} com a «$1».",
        "template-semiprotected": "(semiprotegida)",
        "hiddencategories": "Aquesta pàgina forma part de {{PLURAL:$1|la següent categoria oculta|les següents categories ocultes}}:",
        "edittools": "<!-- Es mostrarà als formularis d'edició i de càrrega el text que hi haja després d'aquesta línia. -->",
+       "edittools-upload": "-",
        "nocreatetext": "El projecte {{SITENAME}} ha restringit la possibilitat de crear noves pàgines.\nPodeu modificar les planes ja existents o bé [[Special:UserLogin|entrar en un compte d'usuari]].",
        "nocreate-loggedin": "No teniu permisos per a crear pàgines noves.",
        "sectioneditnotsupported-title": "Edició de la secció no suportada",
        "content-model-text": "text net",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pàgines amb arguments duplicats en utilització de plantilles",
        "expensive-parserfunction-warning": "Atenció: Aquesta pàgina conté massa crides a funcions parserfunction complexes.\n\nActualment n'hi ha {{PLURAL:$1|$1|$1}} i, com a molt, {{PLURAL:$2|hauria|haurien}} de ser $2.",
        "expensive-parserfunction-category": "Pàgines amb massa crides de parser function",
        "post-expand-template-inclusion-warning": "Avís: La mida d'inclusió de la plantilla és massa gran.\nNo s'inclouran algunes plantilles.",
        "mergehistory-comment": "[[:$1]] fusionat en [[:$2]]: $3",
        "mergehistory-same-destination": "Les pàgines d'origen i de destinació no poden ser la mateixa",
        "mergehistory-reason": "Motiu:",
+       "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Registre de fusions",
        "revertmerge": "Desfusiona",
        "mergelogpagetext": "A sota hi ha una llista de les fusions més recents d'una pàgina d'historial en una altra.",
        "search-result-category-size": "{{PLURAL:$1|1 membre|$1 membres}} ({{PLURAL:$2|1 subcategoria|$2 subcategories}}, {{PLURAL:$3|1 fitxer|$3 fitxers}})",
        "search-redirect": "(redirigit des de $1)",
        "search-section": "(secció $1)",
+       "search-category": "(categoria $1)",
        "search-file-match": "(coincideix amb el contingut del fitxer)",
        "search-suggest": "Volíeu dir: $1",
        "search-interwiki-caption": "Projectes germans",
        "youremail": "Correu electrònic:",
        "username": "{{GENDER:$1|Nom d'usuari}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membre}} {{PLURAL:$1|del grup|dels grups}}:",
+       "prefs-memberingroups-type": "$1",
        "prefs-registration": "Hora de registre:",
+       "prefs-registration-date-time": "$1",
        "yourrealname": "Nom real*:",
        "yourlanguage": "Idioma:",
        "yourvariant": "Variant lingüística:",
        "saveusergroups": "Desa els grups d'usuari",
        "userrights-groupsmember": "Membre de:",
        "userrights-groupsmember-auto": "Membre implícit de:",
+       "userrights-groupsmember-type": "$1",
        "userrights-groups-help": "Podeu modificar els grups als quals pertany {{GENDER:$1|aquest usuari|aquesta usuària}}.\n* Una casella marcada significa que {{GENDER:$1|l’usuari|la usuària}} pertany a aquest grup.\n* Una casella no marcada significa que {{GENDER:$1|l’usuari|la usuària}} no pertany a aquest grup.\n* Un asterisc (*) indica que no {{GENDER:$1|el|la}} podreu treure del grup una vegada l'hàgiu afegit o viceversa.",
        "userrights-reason": "Motiu:",
        "userrights-no-interwiki": "No teniu permisos per a editar els permisos d'usuari d'altres wikis.",
        "userrights-notallowed": "No teniu autorització per concedir o retirar permisos d'usuari.",
        "userrights-changeable-col": "Grups que podeu canviar",
        "userrights-unchangeable-col": "Grups que no podeu canviar",
+       "userrights-irreversible-marker": "$1*",
        "userrights-conflict": "Conflicte de canvis dels permisos d'usuari. Reviseu i confirmeu els canvis.",
        "userrights-removed-self": "Heu suprimit els propis permisos correctament. Per tant, ja no podreu tornar a accedir a aquesta pàgina.",
        "group": "Grup:",
        "right-protect": "Canviar el nivell de protecció i modificar pàgines protegides",
        "right-editprotected": "Modificar pàgines protegides (sense protecció de cascada)",
        "right-editsemiprotected": "Edita les pàgines protegides com «{{int:protect-level-autoconfirmed}}»",
+       "right-editcontentmodel": "Editar el model de contingut d'una pàgina",
        "right-editinterface": "Editar la interfície d'usuari",
        "right-editusercssjs": "Editar els fitxers de configuració CSS i JS d'altres usuaris",
        "right-editusercss": "Editar els fitxers de configuració CSS d'altres usuaris",
        "action-viewmywatchlist": "mostra la llista de seguiment",
        "action-viewmyprivateinfo": "mostra la informació personal",
        "action-editmyprivateinfo": "edita la informació personal",
+       "action-editcontentmodel": "editar el model de contingut d'una pàgina",
        "nchanges": "$1 {{PLURAL:$1|canvi|canvis}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|des de la darrera visita}}",
        "enhancedrc-history": "historial",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
+       "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|Un usuari vigila|$1 usuaris vigilen}} aquesta pàgina]",
        "rc_categories": "Limita a les categories (separades amb \"|\")",
        "rc_categories_any": "Qualsevol",
+       "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} després del canvi",
        "newsectionsummary": "/* $1 */ secció nova",
        "rc-enhanced-expand": "Mostra detalls",
        "listgrouprights-rights": "Drets",
        "listgrouprights-helppage": "Help:Drets del grup",
        "listgrouprights-members": "(llista de membres)",
+       "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code>($2)</code></span>",
+       "listgrouprights-right-revoked": "<span class=\"listgrouprights-revoked\">$1 <code>($2)</code></span>",
        "listgrouprights-addgroup": "Pot afegir {{PLURAL:$2|grup|grups}}: $1",
        "listgrouprights-removegroup": "Treu membres {{PLURAL:$2|grup|grups}}: $1",
        "listgrouprights-addgroup-all": "Poder afegir tots els grups",
        "protect-fallback": "Permetre només a usuaris amb permisos de \"$1\"",
        "protect-level-autoconfirmed": "Permetre només usuaris autoconfirmats",
        "protect-level-sysop": "Permetre només administradors",
+       "protect-summary-desc": "[$1=$2] ($3)",
        "protect-summary-cascade": "en cascada",
        "protect-expiring": "expira el dia $1 (UTC)",
        "protect-expiring-local": "caduca el $1",
        "undelete-error-long": "S'han produït errors en revertir la supressió del fitxer:\n\n$1",
        "undelete-show-file-confirm": "Segur que voleu veure la revisió esborrada del fitxer «<nowiki>$1</nowiki>» corresponent a les $3 del $2?",
        "undelete-show-file-submit": "Sí",
+       "undelete-revision-row": "$1 $2 ($3) $4 . . $5 $6 $7 $8 $9",
        "namespace": "Espai de noms:",
        "invert": "Inverteix la selecció",
        "tooltip-invert": "Marqueu aquesta casella per ocultar els canvis a les pàgines de l'espai de noms seleccionat (i l'espai de noms associat si està activat)",
        "tooltip-pt-mycontris": "Llista de les vostres contribucions.",
        "tooltip-pt-login": "Us animem a registrar-vos, però no és obligatori",
        "tooltip-pt-logout": "Finalitza la sessió d'usuari",
+       "tooltip-pt-createaccount": "Us animem a què creeu un compte i inicieu sessió, encara que no és obligatori",
        "tooltip-ca-talk": "Discussió sobre el contingut d'aquesta pàgina",
        "tooltip-ca-edit": "Podeu modificar aquesta pàgina. Si us plau, previsualitzeu-la abans de desar.",
        "tooltip-ca-addsection": "Comença una nova secció",
        "tooltip-summary": "Afegiu un breu resum",
        "interlanguage-link-title": "$1 - $2",
        "common.css": "/* Editeu aquest fitxer per personalitzar totes les aparences per al lloc sencer */",
+       "print.css": "/* El CSS d'aquí afectarà la sortida impresa */",
+       "noscript.css": "/* El CSS d'aquí afectarà els usuaris que tinguin el JavaScript desactivat */",
+       "group-autoconfirmed.css": "/* El CSS d'aquí només afectarà els usuaris autoconfirmats */",
+       "group-user.css": "/* El CSS d'aquí només afectarà els usuaris registrats */",
+       "group-bot.css": "/* El CSS d'aquí només afectarà els bots */",
+       "group-sysop.css": "/* El CSS d'aquí només afectarà els sysops */",
+       "group-bureaucrat.css": "/* El CSS d'aquí només afectarà els buròcrates */",
        "common.js": "/* Es carregarà per a tots els usuaris, i per a qualsevol pàgina, el codi JavaScript que hi haja després d'aquesta línia. */",
+       "group-autoconfirmed.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als usuaris autoconfirmats */",
+       "group-user.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als usuaris rgistrats */",
+       "group-bot.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als bots */",
+       "group-sysop.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als sysops */",
+       "group-bureaucrat.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als buròcrates */",
        "anonymous": "Usuari{{PLURAL:$1| anònim|s anònims}} del projecte {{SITENAME}}",
        "siteuser": "{{GENDER:$2|l'usuari|la usuària}} $1 del projecte {{SITENAME}}",
        "anonuser": "$1, usuari anònim de {{SITENAME}}",
        "pageinfo-watchers": "Número d'usuaris que vigilen la pàgina",
        "pageinfo-few-watchers": "Menys de $1 {{PLURAL:$1|observador|observadors}}",
        "pageinfo-redirects-name": "Nombre de redireccions a aquesta pàgina",
+       "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Subpàgines d'aquesta pàgina",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirecció|redireccions}}; $3 {{PLURAL:$3|no redireció|no redireccions}})",
        "pageinfo-firstuser": "Creador de la pàgina",
        "mediawarning": "'''Advertència''': Aquest fitxer podria contenir codi maliciós.\nSi l'executeu, podeu comprometre la seguretat del vostre sistema.",
        "imagemaxsize": "Límit de mida d'imatges:<br />''(per a pàgines de descripció de fitxers)''",
        "thumbsize": "Mida de la miniatura:",
+       "widthheight": "$1 × $2",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pàgina|pàgines}}",
        "file-info": "mida: $1, tipus MIME: $2",
        "file-info-size": "$1 × $2 píxels, mida del fitxer: $3, tipus MIME: $4",
        "ilsubmit": "Cerca",
        "bydate": "per data",
        "sp-newimages-showfrom": "Mostra fitxers nous des del $1 a les $2",
+       "video-dims": "$1, $2 × $3",
+       "seconds-abbrev": "$1 s",
        "minutes-abbrev": "$1 min",
+       "hours-abbrev": "$1 h",
+       "days-abbrev": "$1 d",
        "seconds": "{{PLURAL:$1|$1 segon|$1 segons}}",
        "minutes": "{{PLURAL:$1|$1 minut|$1 minuts}}",
        "hours": "{{PLURAL:$1|$1 hora|$1 hores}}",
        "sunday-at": "Diumenge a les $1",
        "yesterday-at": "Ahir a les $1",
        "bad_image_list": "El format ha de ser el següent:\n\nNomés els elements de llista (les línies que comencin amb un *) es prenen en consideració. El primer enllaç de cada línia ha de ser el d'un fitxer dolent.\nLa resta d'enllaços de la línia són les excepcions, és a dir, les pàgines on s'hi pot encabir el fitxer.",
+       "variantname-zh-cn": "cn",
+       "variantname-zh-tw": "tw",
+       "variantname-zh-hk": "hk",
+       "variantname-zh-mo": "mo",
+       "variantname-zh-sg": "sg",
+       "variantname-zh-my": "my",
+       "variantname-zh": "zh",
+       "variantname-sr-ec": "sr-ec",
+       "variantname-shi-latn": "shi-Latn",
+       "variantname-shi": "shi",
+       "variantname-uz": "uz",
+       "variantname-uz-latn": "uz-Latn",
+       "variantname-uz-cyrl": "uz-Cyrl",
        "metadata": "Metadades",
        "metadata-help": "Aquest fitxer conté informació addicional, probablement afegida per la càmera digital o l'escàner utilitzat per a crear-lo o digitalitzar-lo. Si s'ha modificat posteriorment, alguns detalls poden no reflectir les dades reals del fitxer modificat.",
        "metadata-expand": "Mostra els detalls estesos",
        "metadata-collapse": "Amaga els detalls estesos",
        "metadata-fields": "Els camps de metadades de la imatge llistats en aquest missatge s'inclouran en la pàgina de descripció de la imatge fins i tot quan la taula estigui plegada. La resta estaran ocults però es podran desplegar.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-langitem": "<strong>$2:</strong> $1",
+       "metadata-langitem-default": "$1",
        "exif-imagewidth": "Amplada",
        "exif-imagelength": "Alçada",
        "exif-bitspersample": "Octets per component",
        "exif-exposuretime": "Temps d'exposició",
        "exif-exposuretime-format": "$1 s ($2)",
        "exif-fnumber": "Obertura del diafragma",
+       "exif-fnumber-format": "f/$1",
        "exif-exposureprogram": "Programa d'exposició",
        "exif-spectralsensitivity": "Sensibilitat espectral",
        "exif-isospeedratings": "Sensibilitat ISO",
        "exif-lightsource": "Font de llum",
        "exif-flash": "Flaix",
        "exif-focallength": "Longitud focal de la lent",
+       "exif-focallength-format": "$1 mm",
        "exif-subjectarea": "Enquadre del subjecte",
        "exif-flashenergy": "Energia del flaix",
        "exif-focalplanexresolution": "Resolució X del pla focal",
        "exif-compression-2": "Codificació CCITT Grup 3 longitud monodimensional de Huffman modificat",
        "exif-compression-3": "Codificació de fax CCITT grup 3",
        "exif-compression-4": "Codificació de fax CCITT grup 4",
+       "exif-compression-6": "JPEG (antic)",
        "exif-copyrighted-true": "Sotmesa a drets d'autor",
        "exif-copyrighted-false": "No s'ha definit l'estat de copyright",
        "exif-unknowndate": "Data desconeguda",
        "specialpages-group-wiki": "Dades i eines",
        "specialpages-group-redirects": "Pàgines especials de redirecció",
        "specialpages-group-spam": "Eines de spam",
+       "specialpages-group-developer": "Eines de desenvolupador",
        "blankpage": "Pàgina en blanc",
        "intentionallyblankpage": "Pàgina intencionadament en blanc",
        "external_image_whitelist": " #Deixeu aquesta línia exactament igual com està<pre>\n#Poseu fragments d'expressions regulars (regexps) (només la part entre els //) a sota\n#Aquests fragments es correspondran amb les URL d'imatges externes\n#Se'n mostraran com a imatges si coincideixen, i sinó es mostraran com a enllaços\n#Les línies que comencen amb un # es tracten com a comentaris\n#S'hi distingeixen majúscules i minúscules\n\n#Poseu tots els fragments regex al damunt d'aquesta línia. Deixeu aquesta línia exactament com està</pre>",
index cdc6b03..7977fb6 100644 (file)
        "powersearch-remember": "Дагахь дита хаьржинарг кхечу хенахь лаха",
        "search-external": "Арахула лахар",
        "search-error": "Лохуш гӀалат даьлла: $1",
-       "preferences": "Ð\93Ó\80иÑ\80Ñ\81 Ð½Ð¸Ñ\81бан",
-       "mypreferences": "Ð\93Ó\80иÑ\80Ñ\81 Ð½Ð¸Ñ\81бан",
+       "preferences": "Ð\9dиÑ\81даÑ\80ан Ð³Ó\80иÑ\80Ñ\81",
+       "mypreferences": "Ð\9dиÑ\81даÑ\80ан Ð³Ó\80иÑ\80Ñ\81",
        "prefs-edits": "Нисдарийн дукхалла:",
        "prefsnologintext2": "Дехар до, гӀирс дӀанисбан язъяр.",
        "prefs-skin": "Кечяран тема",
        "ipb-confirm": "Бакъде блоктохар",
        "badipaddress": "Магийна доцу IP адрес",
        "blockipsuccesssub": "Блоктохар чакхдели",
-       "blockipsuccesstext": "[[Special:Contributions/$1|«$1»]] {{GENDER:$1|блоктоьхна}}.<br />\nХьажа. [[Special:BlockList|блоктоьхна IP-адресийнн могӀам]].",
+       "blockipsuccesstext": "[[Special:Contributions/$1|«$1»]] {{GENDER:$1|блоктоьхна}}.<br />\nХьажа. [[Special:BlockList|блоктоьхна IP-адресийн могӀам]].",
        "ipb-blockingself": "Хьо хьайна блоктоха гӀерта! Лаьий хьона и кхочушдан?",
        "ipb-edit-dropdown": "Бахьанин могӀам нисбар",
        "ipb-unblock-addr": "ДӀаякхаблок $1",
index f572a60..4407ee3 100644 (file)
        "right-protect": "Měnění úrovně zámku a editace kaskádově zamčených stránek",
        "right-editprotected": "Editace stránek zamčených na „{{int:protect-level-sysop}}“",
        "right-editsemiprotected": "Editace stránek zamčených na „{{int:protect-level-autoconfirmed}}“",
+       "right-editcontentmodel": "Editace modelu obsahu stránky",
        "right-editinterface": "Editace zpráv uživatelského rozhraní",
        "right-editusercssjs": "Editace CSS a JS souborů jiných uživatelů",
        "right-editusercss": "Editace CSS souborů jiných uživatelů",
        "action-viewmywatchlist": "prohlížet vlastní seznam sledovaných stránek",
        "action-viewmyprivateinfo": "prohlížet si své soukromé údaje",
        "action-editmyprivateinfo": "změnit své soukromé údaje",
+       "action-editcontentmodel": "editovat model obsahu stránky",
        "nchanges": "$1 {{PLURAL:$1|změna|změny|změn}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od poslední návštěvy}}",
        "enhancedrc-history": "historie",
        "specialpages-group-wiki": "Nástroje a data",
        "specialpages-group-redirects": "Přesměrovávací speciální stránky",
        "specialpages-group-spam": "Protispamové nástroje",
+       "specialpages-group-developer": "Vývojářské nástroje",
        "blankpage": "Prázdná stránka",
        "intentionallyblankpage": "Tato stránka je úmyslně prázdná. Používá se na měření výkonnosti atd.",
        "external_image_whitelist": " #Tuto řádku ponechte beze změny.<pre>\n#Níže uveďte fragmenty regulárních výrazů (pouze část mezi //).\n#Tyto výrazy se aplikují na URL vkládaných externích obrázků.\n#Ty, které vyhoví, se zobrazí jako obrázek; ostatní pouze jako externí odkaz.\n#Řádky začínající znakem # se považují za komentáře.\n#Na velikosti písmen nezáleží.\n\n#Všechny regulární výrazy uveďte nad touto řádkou. Tuto řádku ponechte beze změny.</pre>",
        "expand_templates_generate_xml": "Zobrazit syntaktický strom v XML",
        "expand_templates_generate_rawhtml": "Zobrazit surové HTML",
        "expand_templates_preview": "Náhled",
+       "expand_templates_preview_fail_html": "<em>Protože {{SITENAME}} má povolené syrové HTML a došlo ke ztrátě dat sezení, je náhled skryt kvůli ochraně před JavaScriptovými útoky.</em>\n\n<strong>Pokud to byl legitimní pokus o náhled, zkuste to znovu.</strong>\nPokud to stále nebude fungovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit.",
+       "expand_templates_preview_fail_html_anon": "<em>Protože {{SITENAME}} má povolené syrové HTML a vy nejste přihlášeni, je náhled skryt kvůli ochraně před JavaScriptovými útoky.</em>\n\n<strong>Pokud to byl legitimní pokus o náhled, [[Special:UserLogin|přihlaste se]] a zkuste to znovu.</strong>",
        "pagelanguage": "Volba jazyka stránky",
        "pagelang-name": "Stránka",
        "pagelang-language": "Jazyk",
index 22ae45c..a670048 100644 (file)
        "right-protect": "Seitenschutzstatus ändern und kaskadengeschützte Seiten bearbeiten",
        "right-editprotected": "Seiten bearbeiten, die als „{{int:protect-level-sysop}}“ geschützt sind",
        "right-editsemiprotected": "Seiten bearbeiten, die als „{{int:protect-level-autoconfirmed}}“ geschützt sind",
+       "right-editcontentmodel": "Das Inhaltsmodell einer Seite bearbeiten",
        "right-editinterface": "Benutzeroberfläche bearbeiten",
        "right-editusercssjs": "Fremde CSS- und JavaScript-Dateien bearbeiten",
        "right-editusercss": "Fremde CSS-Dateien bearbeiten",
        "action-viewmywatchlist": "deine Beobachtungsliste anzusehen",
        "action-viewmyprivateinfo": "deine privaten Informationen einzusehen",
        "action-editmyprivateinfo": "deine privaten Informationen zu bearbeiten",
+       "action-editcontentmodel": "das Inhaltsmodell einer Seite zu bearbeiten",
        "nchanges": "$1 {{PLURAL:$1|Änderung|Änderungen}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|seit dem letzten Besuch}}",
        "enhancedrc-history": "Versionsgeschichte",
        "specialpages-group-wiki": "Daten und Werkzeuge",
        "specialpages-group-redirects": "Weiterleitende Spezialseiten",
        "specialpages-group-spam": "Spam-Werkzeuge",
+       "specialpages-group-developer": "Entwicklerwerkzeuge",
        "blankpage": "Leere Seite",
        "intentionallyblankpage": "Diese Seite ist absichtlich ohne Inhalt. Sie wird für Benchmarks verwendet.",
        "external_image_whitelist": " #Diese Zeile nicht verändern.<pre>\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 Groß- und Kleinschreibung unterschieden.\n\n#Fragmente regulärer Ausdrücke nach dieser Zeile eintragen. Diese Zeile nicht verändern.</pre>",
        "expand_templates_generate_xml": "XML-Parser-Baum zeigen",
        "expand_templates_generate_rawhtml": "Rohes HTML anzeigen",
        "expand_templates_preview": "Vorschau",
+       "expand_templates_preview_fail_html": "<em>Da {{SITENAME}} rohes HTML aktiviert hat und es einen Verlust deiner Sitzungsdaten gab, ist die Vorschau als Vorsichtsmaßnahme gegen JavaScript-Angriffe versteckt.</em>\n\n<strong>Falls dies ein zulässiger Vorschauversuch ist, versuche es bitte erneut.</strong>\nFalls dieses Problem weiterhin bestehen bleibt, versuche dich [[Special:UserLogout|abzumelden]] und erneut anzumelden.",
+       "expand_templates_preview_fail_html_anon": "<em>Da {{SITENAME}} rohes HTML aktiviert hat und du nicht angemeldet bist, ist die Vorschau als Vorsichtsmaßnahme gegen JavaScript-Angriffe  versteckt.</em>\n\n<strong>Falls dies ein zulässiger Vorschauversuch ist, [[Special:UserLogin|melde dich bitte an]] und versuche es erneut.</strong>",
        "pagelanguage": "Seitensprachenauswahl",
        "pagelang-name": "Seite",
        "pagelang-language": "Sprache",
        "log-name-pagelang": "Sprachenänderungs-Logbuch",
        "log-description-pagelang": "Dies ist ein Logbuch mit Änderungen an Seitensprachen.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|änderte}} die Seitensprache für $3 von $4 nach $5.",
-       "default-skin-not-found": "Hoppla! Die in <code dir=\"ltr\">$wgDefaultSkin</code> als <code>$1</code> definierte Standardbenutzeroberfläche für dein Wiki ist nicht verfügbar.\n\nDeine Installation scheint die folgenden Benutzeroberflächen zu enthalten. Siehe [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de das Benutzerhandbuch] zur Aktivierung und Auswahl des Standards.\n\n$2\n\n; Falls du gerade MediaWiki installiert hast:\n: Du hast vermutlich von Git oder direkt vom Quellcode mithilfe einer anderen Methode installiert. Dies wird erwartet. Versuche einige Benutzeroberflächen aus dem  [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Benutzeroberflächenverzeichnis] zu installieren, indem du:\n:* Den [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] herunterlädst, der mit verschiedenen Benutzeroberflächen und Erweiterungen kommt. Du kannst das Verzeichnis <code>skins/</code> kopieren und einfügen.\n:* Eine der <code>mediawiki/skins/*</code>-Repositorien über Git in das <code dir=\"ltr\">skins/</code>-Verzeichnis deiner MediaWiki-Installation klonst.\n: Dies sollte nicht dein Git-Repositorium beeinträchtigen, falls du ein MediaWiki-Entwickler bist.\n\n; Falls du gerade MediaWiki aktualisiert hast:\n: MediaWiki 1.24 und neuere Versionen aktivieren nicht mehr automatisch installierte Benutzeroberflächen (siehe das [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Benutzerhandbuch]). Du kannst die folgenden Zeilen in die Datei <code>LocalSettings.php</code> einfügen, um alle derzeit installierten Benutzeroberflächen zu aktivieren:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du gerade <code>LocalSettings.php</code> geändert hast:\n: Überprüfe die Namen der Benutzeroberflächen auf Tippfehler.",
-       "default-skin-not-found-no-skins": "Hoppla! Die in <code>$wgDefaultSkin</code> als <code>$1</code> definierte Standardbenutzeroberfläche für dein Wiki ist nicht verfügbar.\n\nDu hast keine installierten Benutzeroberflächen.\n\n; Falls du gerade MediaWiki installiert oder aktualisiert hast:\n: Du hast vermutlich von Git oder direkt vom Quellcode mithilfe einer anderen Methode installiert. Dies wird erwartet. MediaWiki 1.24 und neuere Versionen enthalten keine Benutzeroberflächen im Haupt-Repositorium. Versuche einige Benutzeroberflächen aus dem [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Benutzeroberflächenverzeichnis] zu installieren, indem du:\n:* Den [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] herunterlädst, der mit verschiedenen Benutzeroberflächen und Erweiterungen kommt. Du kannst das  <code>skins/</code>-Verzeichnis kopieren und einfügen.\n:* Eine der <code>mediawiki/skins/*</code>-Repositorien über Git in das <code dir=\"ltr\">skins/</code>-Verzeichnis deiner MediaWiki-Installation klonst.\n: Dies sollte nicht dein Git-Repositorium beeinträchtigen, falls du ein MediaWiki-Entwickler bist. Siehe das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch] zur Aktivierung von Benutzeroberflächen und Auswahl des Standards.",
+       "default-skin-not-found": "Hoppla! Die in <code dir=\"ltr\">$wgDefaultSkin</code> als <code>$1</code> definierte Standardbenutzeroberfläche für dein Wiki ist nicht verfügbar.\n\nDeine Installation scheint die folgenden Benutzeroberflächen zu enthalten. Siehe [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de das Benutzerhandbuch] zur Aktivierung und Auswahl des Standards.\n\n$2\n\n; Falls du gerade MediaWiki installiert hast:\n: Du hast vermutlich von Git oder direkt vom Quellcode mithilfe einer anderen Methode installiert. Dies wird erwartet. Versuche einige Benutzeroberflächen aus dem  [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Benutzeroberflächenverzeichnis] zu installieren, indem du:\n:* Den [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] herunterlädst, der mit verschiedenen Benutzeroberflächen und Erweiterungen kommt. Du kannst das Verzeichnis <code>skins/</code> kopieren und einfügen.\n:* Einzelne Benutzeroberflächen-Tarballs von [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst.\n:* Eine der <code>mediawiki/skins/*</code>-Repositorien über Git in das <code dir=\"ltr\">skins/</code>-Verzeichnis deiner MediaWiki-Installation klonst.\n: Dies sollte nicht dein Git-Repositorium beeinträchtigen, falls du ein MediaWiki-Entwickler bist.\n\n; Falls du gerade MediaWiki aktualisiert hast:\n: MediaWiki 1.24 und neuere Versionen aktivieren nicht mehr automatisch installierte Benutzeroberflächen (siehe das [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Benutzerhandbuch]). Du kannst die folgenden Zeilen in die Datei <code>LocalSettings.php</code> einfügen, um alle derzeit installierten Benutzeroberflächen zu aktivieren:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du gerade <code>LocalSettings.php</code> geändert hast:\n: Überprüfe die Namen der Benutzeroberflächen auf Tippfehler.",
+       "default-skin-not-found-no-skins": "Hoppla! Die in <code>$wgDefaultSkin</code> als <code>$1</code> definierte Standardbenutzeroberfläche für dein Wiki ist nicht verfügbar.\n\nDu hast keine installierten Benutzeroberflächen.\n\n; Falls du gerade MediaWiki installiert oder aktualisiert hast:\n: Du hast vermutlich von Git oder direkt vom Quellcode mithilfe einer anderen Methode installiert. Dies wird erwartet. MediaWiki 1.24 und neuere Versionen enthalten keine Benutzeroberflächen im Haupt-Repositorium. Versuche einige Benutzeroberflächen aus dem [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Benutzeroberflächenverzeichnis] zu installieren, indem du:\n:* Den [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] herunterlädst, der mit verschiedenen Benutzeroberflächen und Erweiterungen kommt. Du kannst das  <code>skins/</code>-Verzeichnis kopieren und einfügen.\n:* Einzelne Benutzeroberflächen-Tarballs von [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst.\n:* Eine der <code>mediawiki/skins/*</code>-Repositorien über Git in das <code dir=\"ltr\">skins/</code>-Verzeichnis deiner MediaWiki-Installation klonst.\n: Dies sollte nicht dein Git-Repositorium beeinträchtigen, falls du ein MediaWiki-Entwickler bist. Siehe das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch] zur Aktivierung von Benutzeroberflächen und Auswahl des Standards.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiviert)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''deaktiviert''')",
        "mediastatistics": "Medienstatistiken",
index f36a000..c455a76 100644 (file)
        "gotaccountlink": "Cı kewe",
        "userlogin-resetlink": "Melumatê cıkewtışi xo vira kerdê?",
        "userlogin-resetpassword-link": "Parola xo kerda xo vira?",
-       "userlogin-helplink2": "Heqde ronıştışi peşti",
+       "userlogin-helplink2": "Heqa qeydbiyayışi de peşti bıgêrên",
        "userlogin-loggedin": "Tı xora namey {{GENDER:$1|$1}} ra kewtê/kewtay cı.\nFormê cêrêni bıgureyne ke namey karberio bin ra cı kewê.",
        "userlogin-createanother": "Zewbi hesab vıraz",
        "createacct-emailrequired": "Adresa e-postey",
        "specialpages-group-wiki": "Melumat u haceti",
        "specialpages-group-redirects": "Pela xasîyê ke heteneyayê",
        "specialpages-group-spam": "haletê spami",
+       "specialpages-group-developer": "Xacetanê raverberdoğî",
        "blankpage": "Pela venge",
        "intentionallyblankpage": "Ena pel bi zanayişî weng mendo.",
        "external_image_whitelist": "  #no satır zey xo verde/raverde<pre>\n#parçeyê ifadeya rêzbiyayeyani (têna zerreyê ıney de // ) u çıtayo/çiyo zi mende cêr de têare kerê.\n#ney URL ya (hotlink) resmê teberi de hemcıta benî.\n#Ê yê ke hemcıt (eşleşmek-hemçift) biyê zey resımi asenî, eqsê hal de zi zey gıreyê resmi aseno.\nsatır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.\n#herfa gırd û qıci ferq nêkeno\n\n#parçeyê ifadeya rêzbiyayeyani bıerzê serê ney satıri. no satır zey xo verde/raverde </pre>",
index 057709c..0f4bca7 100644 (file)
        "filerenameerror": "An n'é mìa pusébil cambiêr al nòm ed \"$1\" in \"$2\".",
        "filedeleteerror": "An n'é mìa pusébil scanşlêr al file \"$1\".",
        "directorycreateerror": "An n'é mìa pusébil fêr la directory \"$1\".",
+       "directoryreadonlyerror": "La cartèla \"$1\" la 's pōl sōl lēşer.",
+       "directorynotreadableerror": "La cartèla \"$1\" la 's pōl mìa lēşer.",
        "filenotfound": "An n'é mìa pusébil catêr al file \"$1\".",
        "unexpected": "Valōr mìa pervést \"$1\"=\"$2\".",
        "formerror": "Erōr: an n'é ma pusébil spidîr al môdul.",
        "right-editprotected": "Mudéfica 'l pàgini prutèti cun \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Mudéfica 'l pàgini prutèti cun \"{{int:protect-level-autoconfirmed}}\"",
        "right-editinterface": "Mudéfica al colegamèint tra sistēma e utèint",
+       "right-editusercssjs": "Mudéfica i file CSS e JS 'd êter utèint",
+       "right-editusercss": "Mudéfica i file CSS 'd êter utèint",
+       "right-edituserjs": "Mudéfica i file JS 'd êter utèint",
+       "right-editmyusercss": "Mudéfica i file CSS dal só utèint",
+       "right-editmyuserjs": "Mudéfica i file JavaScript dal só utèint",
+       "right-viewmywatchlist": "Guêrda la lésta di tō tgnû 'd ôc specêl",
+       "right-editmywatchlist": "Mudéfica i tō tgnu 'd ôc. Da nutêr che soquânti asiòun a prân incòra zuntêr dal pàgini ânca sèinsa avèiren al dirét.",
+       "right-viewmyprivateinfo": "Guêrda al tō infurmasiòun personêli (per eşèimpi: indirés ed pôsta eletrônica, nòm vèira)",
+       "right-editmyprivateinfo": "Câmbia 'l tō infurmasiòun personêli (per eşèimpi: indirés ed pôsta eletrônica, nòm vèira)",
+       "right-editmyoptions": "Câmbia al tō preferèinsi",
+       "right-rollback": "Scanşèla a la şvêlta al mudéfichi ed l'ûltèint ch'l'à mudifichê 'na pàgina pariculêra",
        "newuserlogpage": "Utèint nōv",
        "action-read": "lēzer cla pàgina ché",
        "action-edit": "Mudifichêr cla pàgina ché",
index b607abb..883dbd7 100644 (file)
@@ -83,7 +83,7 @@
        "tog-prefershttps": "Να γίνεται πάντα χρήση ασφαλούς σύνδεσης όταν ο χρήστης είναι συνδεδεμένος",
        "underline-always": "Πάντα",
        "underline-never": "Ποτέ",
-       "underline-default": "Προεπιλογή από το θέμα ή από τον περιηγητή",
+       "underline-default": "Προεπιλογή από θέμα εμφάνισης ή από περιηγητή",
        "editfont-style": "Στυλ γραμματοσειράς της περιοχής επεξεργασίας:",
        "editfont-default": "Προεπιλογή περιηγητή",
        "editfont-monospace": "Γραμματοσειρά με σταθερό πλάτος χαρακτήρων",
        "expensive-parserfunction-warning": "Προειδοποίηση: Αυτή η σελίδα περιέχει πάρα πολύ ακριβό αναλυτή λειτουργικών κλήσεων.\n\nΠρέπει να περιέχει λιγότερες από $2 {{PLURAL:$2|κλήση|κλήσεις}}, τώρα {{PLURAL:$1|υπάρχει $1 κλήση|υπάρχουν $1 κλήσεις}}.",
        "expensive-parserfunction-category": "Σελίδες με πάρα πολλές ακριβές κλήσεις σε λεξιαναλυτικές συναρτήσεις",
        "post-expand-template-inclusion-warning": "'''Προειδοποίηση:''' Το μέγεθος συμπερίληψης προτύπων είναι πολύ μεγάλο.\nΚάποια πρότυπα δεν θα συμπεριληφθούν.",
-       "post-expand-template-inclusion-category": "ΣελίδεÏ\82 Ï\8cÏ\80οÏ\85 Ï\85Ï\80εÏ\81βαίνεÏ\84αι Ï\84ο Ï\8cÏ\81ιο Î¼ÎµÎ³Î­Î¸Î¿Ï\85Ï\82 Ï\83Ï\85μÏ\80εÏ\81ίληÏ\88ηÏ\82 Ï\80Ï\81οÏ\84Ï\8dÏ\80Ï\89ν",
+       "post-expand-template-inclusion-category": "ΣελίδεÏ\82 Ï\8cÏ\80οÏ\85 Ï\84ο Ï\8cÏ\81ιο Î¼ÎµÎ³Î­Î¸Î¿Ï\85Ï\82 Ï\83Ï\85μÏ\80εÏ\81ίληÏ\88ηÏ\82 Ï\80Ï\81οÏ\84Ï\8dÏ\80Ï\89ν Ï\85Ï\80εÏ\81βαίνεÏ\84αι",
        "post-expand-template-argument-warning": "'''Προειδοποίηση:''' Αυτή η σελίδα περιέχει τουλάχιστον μια παράμετρο προτύπου η οποία έχει πολύ μεγάλο μέγεθος ανάπτυξης.\nΑυτές οι παράμετροι έχουν παραλειφθεί.",
        "post-expand-template-argument-category": "Σελίδες που περιέχουν παραλειπόμενες παραμέτρους προτύπων",
        "parser-template-loop-warning": "Εντοπίστηκε πρότυπο σε βρόχο: [[$1]]",
        "prefs-files": "Αρχεία",
        "prefs-custom-css": "Προκαθορισμένη CSS",
        "prefs-custom-js": "Προκαθορισμένη JS",
-       "prefs-common-css-js": "Κοινά CSS/JS για όλα τα θέματα:",
+       "prefs-common-css-js": "Κοινά CSS/JavaScript για όλα τα θέματα εμφάνισης:",
        "prefs-reset-intro": "Μπορείτε να χρησιμοποιήσετε αυτήν την σελίδα για να επαναρρυθμίσετε τις προτιμήσεις σας στις προεπιλογές του ιστότοπου. Αυτό δεν μπορεί να αναστρεφθεί.",
        "prefs-emailconfirm-label": "Επιβεβαίωση e-mail:",
        "youremail": "Διεύθυνση ηλεκτρονικού ταχυδρομείου:",
        "uploaddisabledtext": "Το ανέβασμα αρχείων είναι απενεργοποιημένο.",
        "php-uploaddisabledtext": "Οι επιφορτώσεις αρχείων ειναι απενεργοποιημένες στην PHP. Παρακαλούμε, ελέγξτε την ρύθμιση file_uploads.",
        "uploadscripted": "Αυτό το αρχείο περιέχει κώδικα HTML ή script που μπορεί να παρερμηνευθεί από μερικούς browser.",
-       "uploadscriptednamespace": "Î\91Ï\85Ï\84Ï\8c Ï\84ο Î±Ï\81Ï\87είο SVG Ï\80εÏ\81ιέÏ\87ει Î­Î½Î±Î½ Î¼Î· Î±Ï\80οδεκÏ\84Ï\8c Î¿Î½Î¿Î¼Î±Ï\84οÏ\87Ï\8eÏ\81ο \"$1\".",
+       "uploadscriptednamespace": "Î\91Ï\85Ï\84Ï\8c Ï\84ο Î±Ï\81Ï\87είο SVG Ï\80εÏ\81ιέÏ\87ει Î¼Î· Î±Ï\80οδεκÏ\84Ï\8c Î¿Î½Î¿Î¼Î±Ï\84οÏ\87Ï\8eÏ\81ο Â«$1».",
        "uploadinvalidxml": "Δεν ήταν δυνατή η ανάλυση του κώδικα XML στο αρχείο.",
        "uploadvirus": "Το αρχείο περιέχει ιό! Λεπτομέρειες: $1",
        "uploadjava": "Το αρχείο είναι αρχείο ZIP, το οποίο περιέχει ένα αρχείο .class της γλώσσας Java.\nΔεν επιτρέπεται η αποστολή αρχείων Java, επειδή μπορούν να προκαλέσουν παράκαμψη των περιορισμών ασφαλείας του συστήματος.",
        "specialpages-group-wiki": "Δεδομένα και εργαλεία",
        "specialpages-group-redirects": "Ανακατεύθυνση ειδικών σελίδων",
        "specialpages-group-spam": "Εργαλεία κατά των ανεπιθύμητων διαφημιστικών",
+       "specialpages-group-developer": "Εργαλεία προγραμματιστών",
        "blankpage": "Κενή σελίδα",
        "intentionallyblankpage": "Αυτή η σελίδα έχει αφεθεί σκοπίμως κενή",
        "external_image_whitelist": " #Αφήστε αυτή τη γραμμή ακριβώς όπως είναι<pre>\n#Βάλτε αποσπάσματα συνήθων εκφράσεων (μόνο το μέρος που είναι μεταξύ των //) κάτωθι\n#Αυτές θα αντιστοιχηθούν με τα URL των εξωτερικών (hotlinked) εικόνων\n#Αυτές που αντιστοιχούν θα εμφανιστούν ως εικόνες, αλλιώς μόνο ένας σύνδεσμος προς την εικόνα θα εμφανιστεί\n#Οι γραμμές που αρχίζουν με # αντιμετωπίζονται ως σχόλια\n#Αυτή η λίστα δεν είναι ευαίσθητη στα κεφαλαία γράμματα\n\n#Βάλτε όλα τα αποσπάσματα συνήθων εκφράσεων πάνω από αυτή τη γραμμή. Αφήστε αυτή τη γράμμη ως έχει</pre>",
index a6b20b5..75bdb11 100644 (file)
        "right-protect": "Change protection levels and edit cascade-protected pages",
        "right-editprotected": "Edit pages protected as \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Edit pages protected as \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Edit the content model of a page",
        "right-editinterface": "Edit the user interface",
        "right-editusercssjs": "Edit other users' CSS and JavaScript files",
        "right-editusercss": "Edit other users' CSS files",
        "action-viewmywatchlist": "view your watchlist",
        "action-viewmyprivateinfo": "view your private information",
        "action-editmyprivateinfo": "edit your private information",
+       "action-editcontentmodel": "edit the content model of a page",
        "nchanges": "$1 {{PLURAL:$1|change|changes}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|since last visit}}",
        "enhancedrc-history": "history",
        "expand_templates_generate_xml": "Show XML parse tree",
        "expand_templates_generate_rawhtml": "Show raw HTML",
        "expand_templates_preview": "Preview",
+       "expand_templates_preview_fail_html": "<em>Because {{SITENAME}} has raw HTML enabled and there was a loss of session data, the preview is hidden as a precaution against JavaScript attacks.</em>\n\n<strong>If this is a legitimate preview attempt, please try again.</strong>\nIf it still does not work, try [[Special:UserLogout|logging out]] and logging back in.",
+       "expand_templates_preview_fail_html_anon": "<em>Because {{SITENAME}} has raw HTML enabled and you are not logged in, the preview is hidden as a precaution against JavaScript attacks.</em>\n\n<strong>If this is a legitimate preview attempt, please [[Special:UserLogin|log in]] and try again.</strong>",
        "pagelanguage": "Page language selector",
        "pagelang-name": "Page",
        "pagelang-language": "Language",
        "log-name-pagelang": "Change language log",
        "log-description-pagelang": "This is a log of changes in page languages.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|changed}} page language for $3 from $4 to $5.",
-       "default-skin-not-found": "Whoops! The default skin for your wiki, defined in <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYour installation seems to include the following skins. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable them and choose the default.\n\n$2\n\n; If you have just installed MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer.\n\n; If you have just upgraded MediaWiki:\n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following lines into <code>LocalSettings.php</code> to enable all currently installed skins:\n\n<pre dir=\"ltr\">$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>:\n: Double-check the skin names for typos.",
-       "default-skin-not-found-no-skins": "Whoops! The default skin for your wiki, defined in <code>$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYou have no installed skins.\n\n; If you have just installed or upgraded MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. MediaWiki 1.24 and newer doesn't include any skins in the main repository. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable skins and choose the default.\n",
+       "default-skin-not-found": "Whoops! The default skin for your wiki, defined in <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYour installation seems to include the following skins. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable them and choose the default.\n\n$2\n\n; If you have just installed MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer.\n\n; If you have just upgraded MediaWiki:\n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following lines into <code>LocalSettings.php</code> to enable all currently installed skins:\n\n<pre dir=\"ltr\">$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>:\n: Double-check the skin names for typos.",
+       "default-skin-not-found-no-skins": "Whoops! The default skin for your wiki, defined in <code>$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYou have no installed skins.\n\n; If you have just installed or upgraded MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. MediaWiki 1.24 and newer doesn't include any skins in the main repository. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable skins and choose the default.\n",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (enabled)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabled''')",
        "mediastatistics": "Media statistics",
index 26801db..42e3488 100644 (file)
        "specialpages-group-wiki": "Datenoj kaj iloj",
        "specialpages-group-redirects": "Alidirektantaj specialaj paĝoj",
        "specialpages-group-spam": "Kontraŭspamiloj",
+       "specialpages-group-developer": "Disvolvistaj iloj",
        "blankpage": "Malplena paĝo",
        "intentionallyblankpage": "Ĉi tiu paĝo intencie estas malplena kaj estas uzata por testado, ktp.",
        "external_image_whitelist": " #Lasu ĉi tiun linion senŝanĝe<pre>\n#Enmetu parto de regula esprimo (nur la parton enmetinda en //) suben\n#Ĝi estos kongruita kun la URL-o de eksteraj (ligeblaj) bildoj\n#Kongruantaĵoj estos montritaj kiel bildoj; se ne eble montri, nur ligilo estos montrita\n#Linioj komencantaj kun # estas traktata kiel komentoj.\n#Ĉi tiu estas usklecodistinga.\n\n#Enmetu ĉiujn koderojn de regulaj esprimoj super ĉi tiu linio. Lasu la linion senŝanĝe.</pre>",
index 9aaf950..b1a6743 100644 (file)
        "specialpages-group-wiki": "Herramientas y datos",
        "specialpages-group-redirects": "Búsquedas y redirecciones",
        "specialpages-group-spam": "Herramientas anti-SPAM",
+       "specialpages-group-developer": "Herramientas para desarrolladores",
        "blankpage": "Página vacía",
        "intentionallyblankpage": "Esta pagina está en blanco de manera intencionada.",
        "external_image_whitelist": " #Deja esta línea exactamente como está<pre>\n#Colocar fragmentos de expresiones regulares (sólo la parte que va entre los //) debajo\n#Estos coincidirán con los URLs de las imágenes externas (hotlinked)\n#Aquellos que coincidan serán mostrados como imágenes, de lo contrario solamente un vínculo a la imagen será mostrada\n#Las líneas que empiezan por «#» se consideran comentarios\n#Esta es insensible a las mayúsculas\n\n#Colocar todos los fragmentos regex arriba de esta línea. Deja esta línea exactamente como está</pre>",
index 6a80627..fe227ff 100644 (file)
        "right-protect": "Muuta kaitsetasemeid ja redigeerida kaskaadkaitsega lehekülgi",
        "right-editprotected": "Muuta lehekülgi kaitsetasemega \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Muuta lehekülgi kaitsetasemega \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Muuta lehekülje sisumudelit",
        "right-editinterface": "Muuta kasutajaliidest",
        "right-editusercssjs": "Redigeerida teiste kasutajate CSS- ja JS-faile",
        "right-editusercss": "Redigeerida teiste kasutajate CSS-faile",
        "action-viewmywatchlist": "oma jälgimisloendit vaadata",
        "action-viewmyprivateinfo": "oma eraandmeid vaadata",
        "action-editmyprivateinfo": "oma eraandmeid redigeerida",
+       "action-editcontentmodel": "lehekülje sisumudelit muuta",
        "nchanges": "$1 {{PLURAL:$1|muudatus|muudatust}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|viimase vaatamise järel}}",
        "enhancedrc-history": "ajalugu",
        "ipbenableautoblock": "Blokeeri automaatselt viimane IP-aadress, mida see kasutaja kasutas, ja ka järgnevad, mille alt ta võib proovida kaastööd teha",
        "ipbsubmit": "Blokeeri see kasutaja",
        "ipbother": "Muu tähtaeg:",
-       "ipboptions": "2 tundi:2 hours,1 päev:1 day,3 päeva:3 days,1 nädal:1 week,2 nädalat:2 weeks,1 kuu:1 month,3 kuud:3 months,6 kuud:6 months,1 aasta:1 year,igavene:infinite",
+       "ipboptions": "2 tundi:2 hours,1 päev:1 day,3 päeva:3 days,1 nädal:1 week,2 nädalat:2 weeks,1 kuu:1 month,3 kuud:3 months,6 kuud:6 months,1 aasta:1 year,tähtajatu:infinite",
        "ipbhidename": "Peida kasutajatunnus muudatustest ja loenditest",
        "ipbwatchuser": "Jälgi selle kasutaja lehekülge ja arutelu",
        "ipb-disableusertalk": "Keela sellel kasutajal blokeeringu ajal oma arutelulehekülge redigeerida",
        "specialpages-group-wiki": "Andmed ja tööriistad",
        "specialpages-group-redirects": "Ümbersuunavad erilehed",
        "specialpages-group-spam": "Töö spämmiga",
+       "specialpages-group-developer": "Arendusriistad",
        "blankpage": "Tühi leht",
        "intentionallyblankpage": "See lehekülg on sihilikult tühjaks jäetud.",
        "external_image_whitelist": "  #Jäta see rida muutmata kujule<pre>\n#Pane regulaaravaldise osad (vaid //-märkide vahel olev osa) allapoole\n#Need on vastavuses vikiväliste piltide internetiaadressidega\n#Vastavuses olevad kuvatakse piltidena, muul juhul kuvatakse ainult pildi link\n#Märgiga # algavad read on kommentaarid\n#See on tõstutundetu\n\n#Pane kõik regulaaravaldise osad selle joone kohale. Jäta see rida muutmata kujule</pre>",
        "expand_templates_generate_xml": "Näita XML-liigenduspuud",
        "expand_templates_generate_rawhtml": "Näita toor-HTMLi",
        "expand_templates_preview": "Eelvaade",
+       "expand_templates_preview_fail_html": "<em>Kuna {{GRAMMAR:inessive|{{SITENAME}}}} on toor-HTML lubatud ja osa seansiandmeid läks kaotsi, siis on JavaScripti põhiste rünnakute vastase abinõuna eelvaade peidetud.</em>\n\n<strong>Kui see eelvaatekatse on õigustatud, proovi palun uuesti.</strong>\nKui see ikka ei tööta, proovi [[Special:UserLogout|logida välja]] ja tagasi sisse.",
+       "expand_templates_preview_fail_html_anon": "<em>Kuna {{GRAMMAR:inessive|{{SITENAME}}}} on toor-HTML lubatud ja sa pole sisse logitud, siis on JavaScripti põhiste rünnakute vastase abinõuna eelvaade peidetud.</em>\n\n<strong>Kui see eelvaatekatse on õigustatud, [[Special:UserLogin|logi]] palun sisse ja proovi uuesti.</strong>",
        "pagelanguage": "Lehekülje keele valik",
        "pagelang-name": "Lehekülg",
        "pagelang-language": "Keel",
        "log-name-pagelang": "Keele muutmise logi",
        "log-description-pagelang": "Siia on logitud lehekülgede keele muutmised.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|muutis}} lehekülje \"$3\" keelt: $4 → $5.",
-       "default-skin-not-found": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nPaistab, et sinu install sisaldab järgmisi kujundusi. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas neid lubada ja kuidas valida vaikekujundus.\n\n$2\n\n; Kui oled MediaWiki just paigaldanud:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja.\n\n; Kui oled MediaWikit just täiendanud:\n: MediaWiki 1.24-s ja uuemates versioonides pole paigaldatud kujundused enam automaatselt lubatud (vaata juhendist [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery kujunduste automaatse leidmise] kohta). Saad kleepida järgmised read leheküljele <code>LocalSettings.php</code>, et lubada kõik praegu paigaldatud kujundused:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Kui oled lehekülge <code>LocalSettings.php</code> just muutnud:\n: Kontrolli üle, ega kujunduste nimedes pole trükivigu.",
-       "default-skin-not-found-no-skins": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nÜhtegi kujundust pole paigaldatud.\n\n; Kui oled MediaWiki just paigaldanud või täiendasid seda:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. MediaWiki 1.24 ja uuemad versioonid ei sisalda peahoidlas ühtegi kujundust. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas kujundusi lubada ja kuidas valida vaikekujundus.",
+       "default-skin-not-found": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nPaistab, et sinu install sisaldab järgmisi kujundusi. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas neid lubada ja kuidas valida vaikekujundus.\n\n$2\n\n; Kui oled MediaWiki just paigaldanud:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org-ist] kindla kujunduse lintarhiivi alla laadida;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja.\n\n; Kui oled MediaWikit just täiendanud:\n: MediaWiki 1.24-s ja uuemates versioonides pole paigaldatud kujundused enam automaatselt lubatud (vaata juhendist [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery kujunduste automaatse leidmise] kohta). Saad kleepida järgmised read leheküljele <code>LocalSettings.php</code>, et lubada kõik praegu paigaldatud kujundused:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Kui oled lehekülge <code>LocalSettings.php</code> just muutnud:\n: Kontrolli üle, ega kujunduste nimedes pole trükivigu.",
+       "default-skin-not-found-no-skins": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nÜhtegi kujundust pole paigaldatud.\n\n; Kui oled MediaWiki just paigaldanud või täiendasid seda:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. MediaWiki 1.24 ja uuemad versioonid ei sisalda peahoidlas ühtegi kujundust. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org-ist] kindla kujunduse lintarhiivi alla laadida;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas kujundusi lubada ja kuidas valida vaikekujundus.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (lubatud)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''keelatud''')",
        "mediastatistics": "Meediafailide arvandmestik",
index 2016aa3..3f65920 100644 (file)
        "right-protect": "Modifier les niveaux de protection et modifier les pages protégées en cascade",
        "right-editprotected": "Modifier les pages protégées avec « {{int:protect-level-sysop}} »",
        "right-editsemiprotected": "Modifier les pages protégées avec « {{int:protect-level-autoconfirmed}} »",
+       "right-editcontentmodel": "Modifier le modèle de contenu d’une page",
        "right-editinterface": "Modifier l'interface utilisateur",
        "right-editusercssjs": "Modifier les fichiers CSS et JavaScript d'autres utilisateurs",
        "right-editusercss": "Modifier les fichiers CSS d'autres utilisateurs",
        "action-viewmywatchlist": "afficher votre liste de suivi",
        "action-viewmyprivateinfo": "voir vos informations personnelles",
        "action-editmyprivateinfo": "modifier vos informations personnelles",
+       "action-editcontentmodel": "modifier le modèle de contenu d’une page",
        "nchanges": "$1 modification{{PLURAL:$1||s}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|depuis la dernière visite}}",
        "enhancedrc-history": "historique",
        "specialpages-group-wiki": "Données et outils",
        "specialpages-group-redirects": "Pages spéciales redirigées",
        "specialpages-group-spam": "Outils anti-pourriel",
+       "specialpages-group-developer": "Outils du développeur",
        "blankpage": "Page vide",
        "intentionallyblankpage": "Cette page est laissée intentionnellement (presque) vide.",
        "external_image_whitelist": " #Laisser cette ligne exactement telle quelle.<pre>\n#Indiquer les fragments d'expressions rationnelles (juste la partie indiquée entre les //) ci-dessous.\n#Ils correspondront avec les URL des images externes.\n#Celles qui correspondent s'afficheront comme des images, sinon seul un lien vers l'image sera affiché.\n#Les lignes commençant par un # seront considérées comme des commentaires.\n#Cette liste n'est pas sensible à la casse.\n\n#Mettez tous les fragments d'expressions rationnelles au-dessus de cette ligne. Laissez cette dernière ligne telle quelle.</pre>",
        "expand_templates_generate_xml": "Voir l’arborescence d’analyse XML",
        "expand_templates_generate_rawhtml": "Afficher le HTML brut",
        "expand_templates_preview": "Aperçu du rendu",
+       "expand_templates_preview_fail_html": "<em>Comme {{SITENAME}} a HTML brut activé et qu’il y a eu une perte de données de session, l’aperçu est masqué par précaution contre les attaques JavaScript.</em>\n\n<strong>Si c’est une demande d’aperçu légitime, veuillez réessayer.</strong>\nSi cela ne fonctionne toujours pas, essayez de [[Special:UserLogout|vous déconnecter]] et vous reconnecter.",
+       "expand_templates_preview_fail_html_anon": "<em>Comme {{SITENAME}} a HTML brut activé et que vous n’êtes pas connecté, l’aperçu est masqué par précaution contre les attaques JavaScript.</em>\n\n<strong>Si c’est une demande d’aperçu légitime, veuillez [[Special:UserLogin|vous connecter]] et réessayer.</strong>",
        "pagelanguage": "Sélecteur de langue de la page",
        "pagelang-name": "Page",
        "pagelang-language": "Langue",
        "log-name-pagelang": "Tracer les changements de langue",
        "log-description-pagelang": "Ceci est un journal des changements dans les langues des pages.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a changé}} la langue de la page $3 de $4 à $5.",
-       "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki, défini par <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure les habillages suivants. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment les activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MediaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MediaWiki.\n\n; Si vous venez juste de mettre à jour MediaWiki :\n: MediaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller les lignes suivantes dans <code>LocalSettings.php</code> pour activer tous les habillages actuellement installés :\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
-       "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki , défini par <code>$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MediaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MediaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:*Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MediaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
+       "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki, défini par <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure les habillages suivants. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment les activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MediaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MediaWiki.\n\n; Si vous venez juste de mettre à jour MediaWiki :\n: MediaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller les lignes suivantes dans <code>LocalSettings.php</code> pour activer tous les habillages actuellement installés :\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
+       "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki , défini par <code>$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MediaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MediaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:*Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MediaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activé)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''désactivé''')",
        "mediastatistics": "Statistiques sur les médias",
index 76840fb..62cfc72 100644 (file)
        "right-protect": "Sidjenseekerhaid feranre an kaskaaden-seekert sidjen bewerke",
        "right-editprotected": "Sidjen bewerke, diar mä „{{int:protect-level-sysop}}“ seekert san.",
        "right-editsemiprotected": "Sidjen bewerke, diar mä „{{int:protect-level-autoconfirmed}}“ seekert san.",
+       "right-editcontentmodel": "Det model faan det sidj bewerke",
        "right-editinterface": "Brüker-skak bewerke",
        "right-editusercssjs": "CSS- an JavaScript-datein faan ööder brükern bewerke",
        "right-editusercss": "CSS-datein faan ööder brükern bewerke",
        "action-viewmywatchlist": "sidjen uuntulukin, diar dü uun't uug behual wel",
        "action-viewmyprivateinfo": "din priwoot dooten uuntulukin",
        "action-editmyprivateinfo": "din priwoot dooten tu bewerkin",
+       "action-editcontentmodel": "det model faan det sidj tu bewerkin",
        "nchanges": "$1 {{PLURAL:$1|feranrang|feranrangen}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sant dan leetst beschük}}",
        "enhancedrc-history": "Ferluup",
        "specialpages-group-wiki": "Dooten an werktjüch",
        "specialpages-group-redirects": "Spezial-sidjen, diar widjer feer",
        "specialpages-group-spam": "''Spam'' werktjüch",
+       "specialpages-group-developer": "Werktjüügen",
        "blankpage": "Leesag sidj",
        "intentionallyblankpage": "Det sidj as mä walem leesag. Hat woort för benchmarks brükt.",
        "external_image_whitelist": " #Feranere detheer rä ei<pre>\n#Dialen faan reguleer ütjdrüker (tesken a tiakens //) kön oner iinden wurd.\n#Jo wurd do mä URLs faan ekstern bilen ferglikt.\n#Huar't auerianstemet, woort det bil uunwiset, ööders bluas en ferwis üüb det bil.\n#Räen mä en # bi a began san komentaaren.\n#Grat- an letjskriiwang woort ei onerskääst.\n\n#Skriiw dialen faan reguleer ütjdrüker auer detheer rä. Feranere detheer rä ei</pre>",
        "expand_templates_generate_xml": "XML-parser-buum uunwise",
        "expand_templates_generate_rawhtml": "Rä HTML uunwise",
        "expand_templates_preview": "Föörskau",
+       "expand_templates_preview_fail_html": "<em>Auer {{SITENAME}} rä HTML aktiwiaret hää an session-dooten wech san, as det föörskau ütj seekerhaids-grünjer ferbürgen wurden.</em>\n\n<strong>Wees so gud an ferschük det noch ans.</strong>\nWan det do uk noch ei gongt, [[Special:UserLogout|melde di uf]] an weder uun.",
+       "expand_templates_preview_fail_html_anon": "<em>Auer {{SITENAME}} rä HTML aktiwiaret hää an dü ein uunmeldet beest, as det föörskau ütj seekerhaids-grünjer ferbürgen wurden.</em>\n\n<strong>Wees so gud an [[Special:UserLogin|melde di uun]], an ferschük det noch ans.</strong>",
        "pagelanguage": "Ütjwool faan sidjenspriaken",
        "pagelang-name": "Sidj",
        "pagelang-language": "Spriak",
        "log-name-pagelang": "Logbuk för spriak-feranrangen",
        "log-description-pagelang": "Det as en logbuk för sidjenspriak-feranrangen",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|hää}} det sidjenspriak för $3 faan $4 tu $5 feranert.",
-       "default-skin-not-found": "Uuha! Uun <code dir=\"ltr\">$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDin instalatjuun hää wel jodiar skaker. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.\n\n$2\n\n; Wan dü MediaWiki jüst instaliaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest.\n\n; Wan dü jüst MediaWiki aktualisiaret heest:\n: MediaWiki 1.24 an neier werjuunen aktiwiare instaliaret skaker ei muar faan salew (luke uk iin uun det [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery brüker-hoonbuk]). Dü könst jodiar räen uun det datei <code>LocalSettings.php</code> iinsaat, am aal a instaliaret skaker tu aktiwiarin:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Wan dü jüst <code>LocalSettings.php</code> feranert heest:\n: Heest dü a skaker uk aaltumaal rocht skrewen?",
-       "default-skin-not-found-no-skins": "Uuha! Uun <code>$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDü heest goor nian skak instaliaret.\n\n; Wan dü MediaWiki jüst instaliaret of aktualisiaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. MediaWiki 1.24 an neier werjuunen haa nian skak uun't hood-fertiaknis. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.",
+       "default-skin-not-found": "Uuha! Uun <code dir=\"ltr\">$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDin instalatjuun hää wel jodiar skaker. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.\n\n$2\n\n; Wan dü MediaWiki jüst instaliaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Enkelt skak-tarballs faan [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] deelloose.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest.\n\n; Wan dü jüst MediaWiki aktualisiaret heest:\n: MediaWiki 1.24 an neier werjuunen aktiwiare instaliaret skaker ei muar faan salew (luke uk iin uun det [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery brüker-hoonbuk]). Dü könst jodiar räen uun det datei <code>LocalSettings.php</code> iinsaat, am aal a instaliaret skaker tu aktiwiarin:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Wan dü jüst <code>LocalSettings.php</code> feranert heest:\n: Heest dü a skaker uk aaltumaal rocht skrewen?",
+       "default-skin-not-found-no-skins": "Uuha! Uun <code>$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDü heest goor nian skak instaliaret.\n\n; Wan dü MediaWiki jüst instaliaret of aktualisiaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. MediaWiki 1.24 an neier werjuunen haa nian skak uun't hood-fertiaknis. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Enkelt skak-tarballs faan [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] deelloose.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiwiaret)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ufsteld''')",
        "mediastatistics": "Statistik faan meedien",
index f0fcaac..0cf81e9 100644 (file)
        "category_header": "Siden yn de kategory \"$1\"",
        "subcategories": "Subkategoryen",
        "category-media-header": "Media yn de kategory \"$1\"",
-       "category-empty": "''Yn dizze kategory binne gjin siden of triemmen opnaam.''",
+       "category-empty": "<em>Yn dizze kategory binne gjin siden of triemmen opnaam.</em>",
        "hidden-categories": "Ferburgen {{PLURAL:$1|kategory|kategoryen}}",
        "hidden-category-category": "Ferburgen kategoryen",
        "category-subcat-count": "{{PLURAL:$2|Dizze kategory hat allinne de folgjende ûnderkategory.|Dizze kategory hat de folgjende {{PLURAL:$1|ûnderkategory|$1 ûnderkategoryen}}, fan in totaal fan $2.}}",
        "listingcontinuesabbrev": "(ferfolch)",
        "index-category": "Yndeksearre siden",
        "noindex-category": "Net-yndeksearre siden",
+       "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Oer",
        "article": "Ynhâld side",
        "newwindow": "(nij finster)",
        "jumptonavigation": "navigaasje",
        "jumptosearch": "sykje",
        "view-pool-error": "Ekskuseare, de tsjinners hawwe it op it stuit te drok.\nTefolle meidoggers probearje dizze side te besjen.\nWachtsje efkes foardatsto op 'e nij tagong ta dizze side probearrest te krijen.\n\n$1",
+       "pool-errorunknown": "Unbekende flater",
        "aboutsite": "Oer {{SITENAME}}",
        "aboutpage": "Project:Ynfo",
        "copyright": "Ynhâld is beskikber ûnder de $1.",
        "versionrequired": "Ferzje $1 fan MediaWiki is eask",
        "versionrequiredtext": "Ferzje $1 fan MediaWiki is eask om dizze side te brûken. Mear ynfo is beskikber op 'e side [[Special:Version|softwareferzje]].",
        "ok": "OK",
+       "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
        "retrievedfrom": "Untfongen fan \"$1\"",
        "youhavenewmessages": "Jo hawwe $1 ($2).",
        "youhavenewmessagesmulti": "Jo hawwe nije berjochten op $1",
        "feedlinks": "Feed:",
        "feed-invalid": "Feedtype wurdt net stipe.",
        "feed-unavailable": "Syndikaasjefeeds binne net beskikber",
-       "site-rss-feed": "$1 RSS Feed",
-       "site-atom-feed": "$1 Atom-Feed",
-       "page-rss-feed": "\"$1\" RSS Feed",
-       "page-atom-feed": "\"$1\" Atom Feed",
+       "site-rss-feed": "$1 RSS-feed",
+       "site-atom-feed": "$1 Atom-feed",
+       "page-rss-feed": "\"$1\" RSS-feed",
+       "page-atom-feed": "\"$1\" Atom-feed",
+       "feed-atom": "Atom",
+       "feed-rss": "RSS",
        "red-link-title": "$1 (de side bestiet net)",
        "nstab-main": "Side",
        "nstab-user": "Meidogger",
        "nosuchaction": "Unbekende aksje.",
        "nosuchactiontext": "De opdracht yn de URL is ûnjildich.\nMooglik hasto in typefout makke yn de URL of in ferkearde keppeling folge.\nIt soe likegoed in programmatuerflater fan {{SITENAME}} wêze kinne.",
        "nosuchspecialpage": "Unbekende side",
-       "nospecialpagetext": "Jo hawwe in Wiki-side opfrege dy't net bekend is by it Wiki-programma.",
+       "nospecialpagetext": "<strong>Jo hawwe in Wiki-side opfrege dy't net bekend is by it Wiki-programma.</strong>",
        "error": "Flater",
        "databaseerror": "Databankfout",
        "databaseerror-error": "Flater: $1",
-       "laggedslavemode": "Warskôging: Mûglik binne resinte bewurkings noch net trochfierd.",
+       "laggedslavemode": "<strong>Warskôging:</strong> Mûglik binne resinte bewurkings noch net trochfierd.",
        "readonly": "Databank is 'Net-skriuwe'.",
        "enterlockreason": "Skriuw wêrom de databank 'net-skriuwe' makke is, en hoenear't men wêr nei alle gedachten wer skriuwe kin.",
        "readonlytext": "De {{SITENAME}} databank is ôfsletten foar nije siden en oare wizigings,\nnei alle gedachten is it foar ûnderhâld, en kinne jo der letter gewoan wer brûk fan meitsje.\nDe behearder hat dizze útlis jûn:\n<p>$1</p>",
        "directorycreateerror": "Map \"$1\" koe net oanmakke wurde.",
        "filenotfound": "Koe triem \"$1\" net fine.",
        "unexpected": "Hommelse wearde: \"$1\"=\"$2\".",
-       "formerror": "Fout: koe formulier net oerlizze",
+       "formerror": "Flater: Koe formulier net oerlizze",
        "badarticleerror": "Dat kin op dizze side net dien wurden.",
        "cannotdelete": "Koe de oantsjutte side of it oantsjutte ôfbyld \"$1\" net fuorthelje. (Faaks hat in oar dat al dien.)",
        "badtitle": "Misse titel",
        "virus-badscanner": "Minne konfiguraasje: ûnbekende virusscanner: ''$1''",
        "virus-scanfailed": "scannen is mislearre (koade $1)",
        "virus-unknownscanner": "ûnbekend antivirus:",
-       "logouttext": "'''Jo binne no ôfmeld.'''\n\nGuon siden kinne noch foar it ljocht komme, krekt as wiesto noch oanmeld. Asto de cache fan dyn webblêder leechhellest feroaret dat wer.",
+       "logouttext": "<strong>Jo binne no ôfmeld.</strong>\n\nGuon siden kinne noch foar it ljocht komme, krekt as wiesto noch oanmeld. Asto de cache fan dyn webblêder leechhellest feroaret dat wer.",
        "yourname": "Brûkersnamme:",
        "userlogin-yourname": "Brûkersnamme",
        "userlogin-yourname-ph": "Jou dyn brûkersnamme",
        "createaccounterror": "Koe akkount net meitsje: $1",
        "nocookiesnew": "De brûker is oanmakke mar net oanmeld. {{SITENAME}} brûkt cookies foar it oanmelden fan brûkers. Skeakelje dy yn en meld jo dan oan mei jo nije brûkersnamme en wachtwurd.",
        "nocookieslogin": "{{SITENAME}} brûkt cookies foar it oanmelden fan brûkers. Jo hawwe cookies útskeakele. Skeakelje dy opsje oan en besykje it nochris.",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "Jo moatte in meidognamme opjaan.",
        "loginsuccesstitle": "Oanmelden slagge.",
-       "loginsuccess": "'''Jo binne no oanmelden op de {{SITENAME}} as: \"$1.\"'''",
+       "loginsuccess": "<strong>Jo binne no oanmelden op de {{SITENAME}} as: \"$1.\"</strong>",
        "nosuchuser": "Der is gjin meidogger \"$1\".\nKontrolearje de stavering, of [[Special:UserLogin/signup|meitsje in nije meidogger oan]].",
        "nosuchusershort": "Der is gjin meidogger mei de namme \"$1\". It is goed skreaun?",
        "nouserspecified": "Jo moatte in brûkersnamme opjaan.",
        "wrongpassword": "Meidochnamme en wachtwurd hearre net by elkoar. Besykje op 'e nij, of fier it wachtwurd twa kear yn en meitsje nije meidoggersynstellings.",
        "wrongpasswordempty": "It opjûne wachtwurd wie leech. Besykje it nochris.",
-       "passwordtooshort": "Jo wachtwurd is te koart.\nIt moat op syn minst {{PLURAL:$1|1 teken|$1 tekens}} lang wêze.",
+       "passwordtooshort": "Wachtwurden moatte op syn minst {{PLURAL:$1|1 teken|$1 tekens}} lang wêze.",
        "password-name-match": "Dyn wachtwurd mei net itselde as dyn meidoggersnamme wêze.",
-       "mailmypassword": "Stjoer my in nij wachtwurd.",
+       "mailmypassword": "E-mail my in nij wachtwurd.",
        "passwordremindertitle": "Nij wachtwurd foar de {{SITENAME}}",
        "passwordremindertext": "Immen (nei alle gedachten jo, fan ynternetadres $1) had in nij wachtwurd\nfoar {{SITENAME}} ($4) oanfrege. Der is in tydlik wachtwurd foar meidogger\n\"$2\"  makke en ynstelt as \"$3\". As dat jo bedoeling wie, melde jo jo dan\nno oan en kies in nij wachtwurd. Dyn tydlik wachtwurd komt yn {{PLURAL:$5|ien dei|$5 dagen}} te ferfallen.\nDer is in tydlik wachtwurd oanmakke foar brûker \"$2\": \"$3\".\n\nAs immen oars as jo dit fersyk dien hat of at it wachtwurd jo tuskentiidsk wer yn 't sin kommen is en\njo it net langer feroarje wolle, dan kinne jo dit berjocht ferjitte en\nfierdergean mei it brûken fan jo âlde wachtwurd.",
        "noemail": "Der is gjin e-postadres foar meidogger \"$1\".",
        "blocked-mailpassword": "Jo IP-adres is blokkearre foar it meitsjen fan feroarings. Om misbrûk tefoaren te kommen is it net mûglik in oar wachtwurd oan te freegjen.",
        "eauthentsent": "Foar befêstiging is jo in netpostberjocht tastjoerd op it adres dat jo ynsteld hawwe. Der wurdt gjin oare netpost stjoerd, oant jo it adres befêstigje sa't it yn it netpostberjocht stiet.",
        "throttled-mailpassword": "Yn {{PLURAL:$1|de lêste oere|de lêste $1 oeren}} is der al in wachtwurdwink ferstjoerd.\nOm misbrûk tefoaren te kommen wurdt der mar ien wachtwurdwink yn 'e {{PLURAL:$1|oere|$1 oeren}} ferstjoerd.",
-       "mailerror": "Fout by it ferstjoeren fan e-mail: $1",
+       "mailerror": "Flater by it ferstjoeren fan e-mail: $1",
        "acct_creation_throttle_hit": "Jo hawwe al {{PLURAL:$1|1 meidochnamme|$1 meidochnammen}} oanmakke. Jo kinne net mear oanmeitsje.",
        "emailauthenticated": "Jo netpostadres waard befêstige op $2 om $3.",
        "emailnotauthenticated": "Jo netpostadres is <strong>noch net befêstige</strong>. Jo kinne oare brûkers gjin post stjoere, en foar de neikommende opsjes wurdt jo gjin post stjoerd.",
        "passwordreset-email": "E-mailadres:",
        "passwordreset-emailtitle": "Akkountdetails op {{SITENAME}}",
        "changeemail": "Feroarje e-mailadres",
+       "changeemail-none": "(gjin)",
+       "resettokens-token-label": "$1 (hjoeddeistige wearde: $2)",
        "bold_sample": "Fette tekst",
        "bold_tip": "Fette tekst",
        "italic_sample": "Skeane tekst",
        "sig_tip": "Jo hântekening mei dei en oere",
        "hr_tip": "Horizontale line (mei ferdrach brûke)",
        "summary": "Gearfetting:",
-       "subject": "Mêd:",
+       "subject": "Ûnderwerp/kop:",
        "minoredit": "Dit is in tekstwiziging",
        "watchthis": "Folgje dizze side",
        "savearticle": "Fêstlizze",
        "preview": "Oerlêze",
        "showpreview": "Earst oerlêze",
        "showdiff": "Wizigings",
-       "anoneditwarning": "'''Warskôging:''' Jo binne net oanmeld. By it fêstlizzen wurdt jo ynternetadres opnaam yn de sideskiednis.",
-       "missingsummary": "'''Wink:''' jo hawwe gjin gearfetting jûn foar jo bewurking. As jo nochris op ''Side opslaan'' klikke wurdt de bewurking sûnder gearfetting opslein.",
+       "anoneditwarning": "<strong>Warskôging:</strong> Jo binne net oanmeld. By it fêstlizzen wurdt jo ynternetadres opnaam yn de sideskiednis.",
+       "missingsummary": "<strong>Tink derom:</strong> Jo hawwe gjin gearfetting jûn foar jo bewurking.\nAs jo nochris op ''Side opslaan'' klikke wurdt de bewurking sûnder gearfetting opslein.",
        "missingcommenttext": "Set jo opmerking beleaven hjir ûnder.",
-       "missingcommentheader": "'''Tink derom:''' Jo hawwe gjin ûnderwerp/kop foar dizze opmerking opjûn. As jo op 'e nij op \"opslaan\" klikke, wurdt jo feroaring sûnder in ûnderwerp/kop opslein.",
+       "missingcommentheader": "<strong>Tink derom:</strong> Jo hawwe gjin ûnderwerp/kop foar dizze opmerking opjûn.\ns jo op 'e nij op \"opslaan\" klikke, wurdt jo feroaring sûnder in ûnderwerp/kop opslein.",
        "summary-preview": "Gearfetting sa at dy brûkt wurdt:",
        "subject-preview": "Neisjen ûnderwerp/kop:",
        "blockedtitle": "Meidogger is útsletten troch",
-       "blockedtext": "'''Jo meidoggernamme of Ynternet-adres is útsletten.'''\n\nDe útsluting is útfierd troch $1.\nDe opjûne reden is ''$2''.\n\n* Begjin útsluting : $8\n* Ein útsluting : $6\n* Bedoeld út te sluten: $7\n\nJo kinne kontakt opnimme mei $1 of in oare [[{{MediaWiki:Grouppage-sysop}}|behearder]] om de útsluting te besprekken.\nJo kinne gjin gebrûk meitsje fan 'e funksje 'Skriuw meidogger', of jo moatte in jildich e-postadres opjûn hawwe yn jo [[Special:Preferences|foarkarren]] en it gebrûk fan dy funksje moat net útsletten wêze.\nJo tsjintwurdich e-postadres is $3 en it útsletnûmer is #$5. Neam beide gegevens as jo earne op dizze útsluting reagearje.",
+       "blockedtext": "<strong>Jo meidoggernamme of IP-adres is útsletten.</strong>\n\nDe útsluting is útfierd troch $1.\nDe opjûne reden is <em>$2</em>.\n\n* Begjin útsluting : $8\n* Ein útsluting : $6\n* Bedoeld út te sluten: $7\n\nJo kinne kontakt opnimme mei $1 of in oare [[{{MediaWiki:Grouppage-sysop}}|behearder]] om de útsluting te besprekken.\nJo kinne gjin gebrûk meitsje fan 'e funksje 'Skriuw meidogger', of jo moatte in jildich e-postadres opjûn hawwe yn jo [[Special:Preferences|foarkarren]] en it gebrûk fan dy funksje moat net útsletten wêze.\nJo tsjintwurdich e-mailadres is $3 en it útsletnûmer is #$5. Neam beide gegevens as jo earne op dizze útsluting reagearje.",
        "autoblockedtext": "Jo IP-adres is automatysk útsletten om't brûkt is troch in oare brûker, dy't útsletten is troch $1.\nDe opjûne reden is:\n\n:''$2''\n\n* Begjin útsluting : $8\n* Ein útsluting : $6\n* Bedoeld út te sluten: $7\n\nJo kinne kontakt opnimme mei $1 of in oare [[{{MediaWiki:Grouppage-sysop}}|behearder]] om de útsluting te besprekken.\nJo kinne gjin gebrûk meitsje fan 'e funksje 'Skriuw meidogger', of jo moatte in jildich e-postadres opjûn hawwe yn jo [[Special:Preferences|foarkarren]] en it gebrûk fan dy funksje moat net útsletten wêze.\nJo tsjintwurdich e-postadres is $3 en it útsletnûmer is #$5. Neam beide gegevens as jo earne op dizze útsluting reagearje.",
        "blockednoreason": "gjin reden opjûn",
        "whitelistedittext": "Jo moatte $1 om siden te bewurkjen.",
        "anontalkpagetext": "----''Dit is de oerlisside fan in ûnbekende meidogger; in meidogger dy't him/har net oanmeld hat. Om't der gjin namme bekend is, wurdt it ynternet-adres brûkt om oan te jaan wa. Mar faak is it sa dat sa'n adres net altyd troch deselde persoan brûkt wurdt. As jo it idee hawwe dat jo as ûnbekende meidogger opmerkings foar in oar krije, dan kinne jo jo [[Special:UserLogin/signup|registrearje]], of jo [[Special:UserLogin|oanmelde]]. Fan in oanmelde meidogger is it ynternet-adres net sichtber, en as oanmelde meidogger krije jo allinnich opmerkings dy't foar josels bedoeld binne.''",
        "noarticletext": "Der stjit noch gjin tekst op dizze side. Jo kinne\n[[Special:Search/{{PAGENAME}}|hjirboppe nei dy tekst sykje]], of [{{fullurl:{{FULLPAGENAME}}|action=edit}} de side skriuwe].",
        "userpage-userdoesnotexist": "Jo bewurkje in brûkersside fan in brûker dy't net bestiet (brûker \"<nowiki>$1</nowiki>\").\nKontrolearje oft jo dizze side wol oanmeitsje/bewurkje wolle.",
-       "clearyourcache": "'''Opmerking:''' Nei it fêstlizzen kin it nedich wêze de oerslach fan dyn blêder te leegjen foardat de wizigings te sjen binne.\n\n'''Mozilla / Firefox / Safari:''' hâld ''Shift'' yntreaun wylst jo op ''Dizze side fernije'' klikke, of typ ''Ctrl-F5'' of ''Ctrl-R'' (''Command-R'' op in Mac); '''Konqueror: '''klik ''Reload'' of typ ''F5;'' '''Opera:''' leegje jo cache yn ''Extra → Voorkeuren;'' '''Internet Explorer:''' hâld ''Ctrl'' yntreaun wylst jo ''Vernieuwen'' klikke of typ ''Ctrl-F5.''",
-       "usercssyoucanpreview": "'''Tip:''' Brûk de knop 'Earst oerlêze' om jo nije CSS te testen foar it fêstlizzen.",
-       "userjsyoucanpreview": "'''Tip:''' Brûk de knop 'Earst oerlêze' om jo nije JS te testen foar it fêstlizzen.",
-       "usercsspreview": "'''Dit is allinne mar it oerlêzen fan jo persoanlike CSS. Hy is noch net fêstlein!'''",
-       "userjspreview": "'''Tink derom: jo besjogge no jo persoanlike JavaScript. De side is net fêstlein!'''",
-       "userinvalidcssjstitle": "'''Warskôging:''' der is gjin skin \"$1\". Tink derom: jo eigen .css- en .js-siden begjinne mei in lytse letter, bygelyks {{ns:user}}:Namme/vector.css ynsté fan {{ns:user}}:Namme/Vector.css.",
+       "clearyourcache": "<strong>Opmerking:</strong> Nei it fêstlizzen kin it nedich wêze de oerslach fan dyn blêder te leegjen foardat de wizigings te sjen binne.\n* <strong>Firefox / Safari:</strong> Hâld <em>Shift</em> yntreaun wylst jo op <em>Dizze side fernije</em> klikke, of typ <em>Ctrl-F5</em> of <em>Ctrl-R</em> (<em>⌘-R</em> op in Mac)\n* <strong>Google Chrome:</strong> Typ <em>CTRL-Shift-R</em> (<em>⌘-Shift-R</em> op in Mac)\n* <strong>Internet Explorer:</strong> Hâld <em>Ctrl</em> yntreaun wylst jo <em>Vernieuwen'' klikke of typ <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Leegje jo cache yn <em>Extra → Voorkeuren</em>",
+       "usercssyoucanpreview": "<strong>Tip:</strong> Brûk de knop \"{{int:showpreview}}\" om jo nije CSS te testen foar it fêstlizzen.",
+       "userjsyoucanpreview": "<strong>Tip:</strong> Brûk de knop \"{{int:showpreview}}\" om jo nije JS te testen foar it fêstlizzen.",
+       "usercsspreview": "<strong>Dit is allinne mar it oerlêzen fan jo persoanlike CSS. Hy is noch net fêstlein!</strong>",
+       "userjspreview": "<strong>Tink derom: jo besjogge no jo persoanlike JavaScript. De side is net fêstlein!</strong>",
+       "userinvalidcssjstitle": "<strong>Warskôging:</strong> der is gjin skin \"$1\".\nTink derom: jo eigen .css- en .js-siden begjinne mei in lytse letter, bygelyks {{ns:user}}:Namme/vector.css ynsté fan {{ns:user}}:Namme/Vector.css.",
        "updated": "(Bewurke)",
-       "note": "'''Opmerking:'''",
-       "previewnote": "'''Tink der om dat dizze side noch net fêstlein is!'''",
+       "note": "<strong>Opmerking:</strong>",
+       "previewnote": "<strong>Tink der om dat dizze side noch net fêstlein is!</strong>",
        "previewconflict": "Dizze side belanget allinich it earste bewurkingsfjild oan.",
-       "session_fail_preview": "'''Jo bewurking is net ferwurke, om't de sessygegevens ferlern gien binne.\nBesykje it nochris. As it dan noch net slagget, [[Special:UserLogout|meld jo dan ôf]] en wer oan.'''",
-       "session_fail_preview_html": "'''Jo bewurking is net ferwurke, om't sesjegegevens ferlern gien binne.'''\n\n''Om't yn {{SITENAME}} rûge HTML ynskeakele is, is in foarfertoaning net mûglik as beskerming tsjin oanfallen mei JavaScript.''\n\n'''As dit in legitime bewurking is, besykje it dan fannijs.\nAs it dan  noch net slagget, [[Special:UserLogout|meld jo dan ôf]] en wer oan.'''",
-       "token_suffix_mismatch": "'''Jo bewurking is wegere om't jo blêder de lêstekens yn it bewurkingstoken ûnkrekt behannele hat.\nDe bewurking is wegere om skeinen fan 'e sidetekst tefoaren te kommen.\nDat bart soms as der in webbasearre proxytsjinst brûkt wurdt dy't flaters befettet.'''",
+       "session_fail_preview": "<strong>Jo bewurking is net ferwurke, om't de sessygegevens ferlern gien binne.</strong>\nBesykje it nochris. As it dan noch net slagget, [[Special:UserLogout|meld jo dan ôf]] en wer oan.",
+       "session_fail_preview_html": "<strong>Jo bewurking is net ferwurke, om't sesjegegevens ferlern gien binne.</strong>\n\n<em>Om't yn {{SITENAME}} rûge HTML ynskeakele is, is in foarfertoaning net mûglik as beskerming tsjin oanfallen mei JavaScript.</em>\n\n<strong>As dit in legitime bewurking is, besykje it dan fannijs.</strong>\nAs it dan  noch net slagget, [[Special:UserLogout|meld jo dan ôf]] en wer oan.",
+       "token_suffix_mismatch": "<strong>Jo bewurking is wegere om't jo blêder de lêstekens yn it bewurkingstoken ûnkrekt behannele hat.</strong>\nDe bewurking is wegere om skeinen fan 'e sidetekst tefoaren te kommen.\nDat bart soms as der in webbasearre proxytsjinst brûkt wurdt dy't flaters befettet.",
        "editing": "Bewurkje \"$1\"",
        "editingsection": "Bewurkje $1 (seksje)",
        "editingcomment": "Dwaande mei bewurkjen fan $1 (opmerking)",
        "explainconflict": "In oar hat de side feroare sûnt jo begûn binne mei it bewurkjen.\nIt earste bewurkingsfjild is hoe't de tekst wilens wurden is.\nJo feroarings stean yn it twadde fjild.\nDy wurde allinnich tapast safier as jo se yn it earste fjild ynpasse.\n'''Allinnich''' de tekst út it earste fjild kin fêstlein wurde.",
        "yourtext": "Jo tekst",
        "storedversion": "Fêstleine ferzje",
-       "nonunicodebrowser": "'''WARSKOGING: Jo browser kin net goed oer de wei mei unicode.\nDêr wurdt troch de MediaWiki software rekken mei holden, dat Jo kinne dan dochs sûnder problemen siden bewurkje: net-ASCII tekens wurden yn it bewurkingsfjild werjûn as heksadesimale koades.'''",
-       "editingold": "'''Warskôging: Jo binne dwaande mei in âldere ferzje fan dizze side.\nSoene jo dy fêstlizze, dan is alles wei wat sûnt dy tiid feroare is.'''",
+       "nonunicodebrowser": "<strong>Warskôging: Jo browser kin net goed oer de wei mei unicode.</strong>\nDêr wurdt troch de MediaWiki software rekken mei holden, dat Jo kinne dan dochs sûnder problemen siden bewurkje: net-ASCII tekens wurden yn it bewurkingsfjild werjûn as heksadesimale koades.",
+       "editingold": "<strong>Warskôging: Jo binne dwaande mei in âldere ferzje fan dizze side.</strong>\nSoene jo dy fêstlizze, dan is alles wei wat sûnt dy tiid feroare is.",
        "yourdiff": "Feroarings",
        "copyrightwarning": "Tink derom dat alle bydragen oan {{SITENAME}} beskôge wurde frijjûn te wêzen ûnder de $2 (sjoch $1 foar bysûnderheden). As jo net wolle dat jo tekst troch oaren neffens eigen goedfinen bewurke en ferspraat wurde kin, kies dan net foar 'Side Bewarje'.</br>\nHjirby sizze jo tagelyk ta, dat jo dizze tekst sels skreaun hawwe, of oernommen hawwe út in frije, iepenbiere boarne.</br/>\n'''BRûK GJIN MATERIAAL DAT BESKERME WURDT TROCH AUTERURSRJOCHT, OF JO MOATTE DêR TASTIMMING TA HAWWE!</STRONG>",
        "copyrightwarning2": "Al jo bydragen oan {{SITENAME}} kinne bewurke, feroare of fuorthelle wurde troch oare brûkers.\nAs jo net wolle dat jo teksten yngeand oanpast wurde troch oaren, set se hjir dan net.<br />\nJo sizze ek ta dat jo de oarspronklike auteur binne fan dit materiaal, of dat jo it kopiearre hawwe út in boarne yn it publike domein, of in soartgelikense frije boarne (sjuch $1 foar details).\n'''BRUK GJIN MATERIAAL DAT BESKERME WURDT TROCH AUTEURSRJOCHT, OF JO MOATTE DER TASTIMMING FOAR HAWWE!'''",
-       "longpageerror": "'''FOUT: de tekst dy't jo tafoege hawwe is {{PLURAL:$1|ien kilobyte|$1 kilobytes}} grut, wat grutter is as it maksimum fan {{PLURAL:$2|ien kilobyte|$2 kilobytes}}.\nBewarjen is net mûglik.'''",
-       "readonlywarning": "'''Warskôging: De databank is ôfsletten foar ûnderhâld, dus jo kinne jo bewurkings no net fêstlizze. Bewarje de tekst foar lettere pleatsing yn in teksttriem.'''\n\nIn  behearder hat de database blokkearre om de folgjende reden: $1",
-       "protectedpagewarning": "'''Warskôging: Dizze side is beskerme, dat gewoane brûkers dy net bewurkje kinne.'''",
-       "semiprotectedpagewarning": "'''Tink derom:''' dizze side is befeilige en kin allinne troch registrearre brûkers bewurke wurde.",
-       "cascadeprotectedwarning": "'''Warskôging:''' Dizze side is skoattele sadat allinnich behearders de side wizigje kinne, om't der in ûnderdiel útmakket fan de neikommende {{PLURAL:$1|side|siden}}, dy't skoattele binne mei de \"ûnderlizzende siden\" opsje ynskeakele:",
-       "titleprotectedwarning": "'''WARSKÔGING: Dizze side is befeilige. Der binne [[Special:ListGroupRights|spesjale rjochten]] nedich om dizze side meitsje te kinnen.'''\nDe lêste lochrigel stiet hjirûnder:",
+       "longpageerror": "<strong>Flater: de tekst dy't jo tafoege hawwe is {{PLURAL:$1|ien kilobyte|$1 kilobytes}} grut, wat grutter is as it maksimum fan {{PLURAL:$2|ien kilobyte|$2 kilobytes}}.</strong>\nBewarjen is net mûglik.'''",
+       "readonlywarning": "<strong>Warskôging: De databank is ôfsletten foar ûnderhâld, dus jo kinne jo bewurkings no net fêstlizze. Bewarje de tekst foar lettere pleatsing yn in teksttriem.</strong>\n\nIn  behearder hat de database blokkearre om de folgjende reden: $1",
+       "protectedpagewarning": "<strong>Warskôging: Dizze side is beskerme, dat gewoane brûkers dy net bewurkje kinne.</strong>",
+       "semiprotectedpagewarning": "<strong>Opmerking:</strong> Dizze side is befeilige en kin allinne troch registrearre brûkers bewurke wurde.",
+       "cascadeprotectedwarning": "<strong>Warskôging:</strong> Dizze side is skoattele sadat allinnich behearders de side wizigje kinne, om't der in ûnderdiel útmakket fan de neikommende {{PLURAL:$1|side|siden}}, dy't skoattele binne mei de \"ûnderlizzende siden\" opsje ynskeakele:",
+       "titleprotectedwarning": "<strong>Warskôging: Dizze side is befeilige. Der binne [[Special:ListGroupRights|spesjale rjochten]] nedich om dizze side meitsje te kinnen.</strong>\nDe lêste lochrigel stiet hjirûnder:",
        "templatesused": "{{PLURAL:$1|Berjocht|Berjochten}} brûkt op dizze side:",
        "templatesusedpreview": "{{PLURAL:$1|Sjabloan|Sjabloanen}} dy't yn dizze bewurking brûkt wurde:",
        "templatesusedsection": "{{PLURAL:$1|Sjabloan|Sjabloanen}} dy't brûkt wurde yn dizze subkop:",
        "template-semiprotected": "(semi-befeilige)",
        "hiddencategories": "Dizze side falt yn de folgjende ferburgen\n{{PLURAL:$1|kategory|kategoryen}}:",
        "edittools": "<!-- Tekst hjir stiet ûnder bewurkingsfjilden en oanbringfjilden.  -->",
+       "edittools-upload": "-",
        "nocreatetext": "{{SITENAME}} hat de mûglikheid beheind om nije siden te meitsjen.\nJo kinne al besteande siden feroarje of jo kinne [[Special:UserLogin|jo oanmelde of in brûker oanmeitsje]].",
        "nocreate-loggedin": "Jo meie gjin nije siden meitsje",
        "permissionserrors": "Flaters yn rjochten",
        "permissionserrorstext": "Jo hawwe gjin rjochtem dit te dwaan om de folgjende {{PLURAL:$1|reden|redenen}}:",
        "permissionserrorstext-withaction": "Jo hawwe gjin rjocht ta $2 om de folgjende {{PLURAL:$1|reden|redenen}}:",
-       "recreate-moveddeleted-warn": "'''Warskôging: Jo binne dwaande in side oan te meitsjen dy't earder weidien is.'''\n\nBetink oft it gaadlik is dat jo dizze side fierder bewurkje. Foar jo geriif stiet hjirûnder it lochboek oer it weidwaan fan dizze side:",
+       "recreate-moveddeleted-warn": "<strong>Warskôging: Jo binne dwaande in side oan te meitsjen dy't earder weidien is.</strong>\n\nBetink oft it gaadlik is dat jo dizze side fierder bewurkje. Foar jo geriif stiet hjirûnder it lochboek oer it weidwaan fan dizze side:",
        "moveddeleted-notice": "Dizze side is fuorthelle. It fuorthel-logboek fan dizze side wurdt hjirûnder werjûn foar jo ynformaasje.",
        "log-fulllog": "Besjoch it hiele lochboek",
        "edit-hook-aborted": "De bewurking is ôfbrutsen troch in hook.\nDer is gjin taljochting beskikber.",
        "postedit-confirmation-saved": "Dyn bewurking is fêstlein.",
        "edit-already-exists": "De side is net oanmakke.\nHy bestie al.",
        "defaultmessagetext": "Standert berjochttekst",
-       "expensive-parserfunction-warning": "Warskôging: Dizze side brûkt tefolle kostbere parserfunksjes.\n\nWylst it minder as $2 {{PLURAL:$2|parserfunksje|parserfunksjes}} wêze moatte, no {{PLURAL:$1|is it $1 |binne it $1}}",
+       "expensive-parserfunction-warning": "<strong>Warskôging:</strong> Dizze side brûkt tefolle kostbere parserfunksjes.\n\nWylst it minder as $2 {{PLURAL:$2|parserfunksje|parserfunksjes}} wêze moatte, no {{PLURAL:$1|is it $1 |binne it $1}}",
        "expensive-parserfunction-category": "Siden dy't tefolle kostbere parserfuksjes brûke",
-       "post-expand-template-inclusion-warning": "Warskôging: jo geane oer de maksimale opnamegrutte foar sjabloanen.\nGuon sjabloanen wurden net opnommen.",
+       "post-expand-template-inclusion-warning": "<strong>Warskôging:</strong> jo geane oer de maksimale opnamegrutte foar sjabloanen.\nGuon sjabloanen wurden net opnommen.",
        "post-expand-template-inclusion-category": "Side wêrfoar't de maksimale trânsklúzjegrutte teboppe gien is",
-       "post-expand-template-argument-warning": "Warskôging: Dizze side befettet minstens ien sjabloanparameter mei in te grutte opnamegrutte.\nDy parameters binne weilitten.",
+       "post-expand-template-argument-warning": "<strong>Warskôging:</strong> Dizze side befettet minstens ien sjabloanparameter mei in te grutte opnamegrutte.\nDy parameters binne weilitten.",
        "post-expand-template-argument-category": "Siden dy't missende sjabloaneleminten befetsje",
        "parser-template-loop-warning": "Der is in lus yn sjabloanen fûn: [[$1]]",
        "parser-template-recursion-depth-warning": "De werhellingsdjipte foar sjabloanen is oer de grins ($1)",
        "currentrev-asof": "Hjoeddeiske ferzje sûnt $1",
        "revisionasof": "Ferzje op $1",
        "revision-info": "Ferzje op $1 fan $2",
-       "previousrevision": "←Eardere ferskillen",
+       "previousrevision": "← Eardere ferskillen",
        "nextrevision": "Nijere ferzje→",
        "currentrevisionlink": "Rinnende ferzje",
        "cur": "no",
        "page_last": "lêste",
        "histlegend": "Utlis: (no) = ferskil mei de side sa't dy no is,\n(doe) = ferskill mei de side sa't er doe wie, foar de feroaring, T = Tekstwiziging",
        "history-fieldset-title": "Troch skiednis blêdzje",
-       "histfirst": "Ierst",
-       "histlast": "Lêst",
+       "histfirst": "âldste",
+       "histlast": "nijste",
        "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
        "historyempty": "(leech)",
        "history-feed-title": "Sideskiednis",
        "revdelete-unsuppress": "Beheinings op tebeksette feroarings fuorthelje",
        "revdelete-log": "Reden:",
        "revdelete-submit": "Tapasse op selektearre bewurking",
-       "revdelete-success": "'''Sichtberens fan 'e feroaring mei sukses ynsteld.'''",
-       "logdelete-success": "'''Sichtberens fan it barren mei sukses ynsteld.'''",
+       "revdelete-success": "<strong>Sichtberens fan 'e feroaring mei sukses ynsteld.</strong>",
+       "logdelete-success": "<strong>Sichtberens fan it barren mei sukses ynsteld.</strong>",
        "revdel-restore": "Sichtberens feroarje",
        "pagehist": "Sideskiednis",
        "deletedhist": "Wiske skiednis",
        "mergehistory-comment": "[[:$1]] kombinearre mei [[:$2]]: $3",
        "mergehistory-same-destination": "De boarneside en de doelside kinne net deselde wêze",
        "mergehistory-reason": "Reden:",
+       "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Gearfoegingslogboek",
        "revertmerge": "Gearfoeging ûngedien meitsje",
        "mergelogpagetext": "Hjirûnder stiet in list fan resinte gearfoegings fan ien side-skiednis nei in oaren.",
        "compareselectedversions": "Ferlykje selektearre ferzjes",
        "showhideselectedversions": "Oantikke ferzjes wol/net sjen litte",
        "editundo": "werom sette",
+       "diff-empty": "(Gjin ferskil)",
        "searchresults": "Sykresultaat",
        "searchresults-title": "Sykresultaten foar \"$1\"",
        "titlematches": "Titels",
        "prevn-title": "{{PLURAL:$1|Foarich risseltaat|Foarige $1 risseltaten}}",
        "nextn-title": "{{PLURAL:$1|Folgjend risseltaat|Folgjende $1 risseltaat}}",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) besjen.",
-       "searchmenu-exists": "'''Der is in side mei namme \"[[:$1]]\" yn dizze wiki'''",
-       "searchmenu-new": "'''Meitsje de side \"[[:$1]]\" yn dizze wiki!'''",
+       "searchmenu-exists": "<strong>Der is in side mei namme \"[[:$1]]\" yn dizze wiki</strong>",
+       "searchmenu-new": "<strong>Meitsje de side \"[[:$1]]\" yn dizze wiki!</strong>",
        "searchprofile-articles": "Ynhâldlike siden",
-       "searchprofile-images": "Triemmen",
+       "searchprofile-images": "Multymedia",
        "searchprofile-everything": "Alles",
        "searchprofile-advanced": "Utwreide",
        "searchprofile-articles-tooltip": "Sykje yn $1",
        "search-category": "(kategory $1)",
        "search-suggest": "Bedoele jo: $1",
        "search-interwiki-caption": "Susterprojekten",
-       "search-interwiki-default": "$1 resultaten:",
+       "search-interwiki-default": "Resultaten fan $1:",
        "search-interwiki-more": "(mear)",
        "search-relatedarticle": "Besibbe",
        "searchrelated": "besibbe",
        "searchall": "alle",
-       "showingresults": "{{PLURAL:$1|'''1''' resultaat|'''$1''' resultaten}} fan #'''$2''' ôf.",
+       "showingresults": "{{PLURAL:$1|<strong>1</strong> resultaat|<strong>$1</strong> resultaten}} fan #<strong>$2</strong> ôf.",
        "search-nonefound": "Der binne gjin resultaten foar Jo sykopdracht.",
        "powersearch-legend": "Sykje",
        "powersearch-ns": "Sykje op nammeromten:",
        "powersearch-togglelabel": "Oantikje:",
-       "powersearch-toggleall": "Allegear",
+       "powersearch-toggleall": "Alle",
        "powersearch-togglenone": "Gjin",
        "search-external": "Utwindich sykje",
        "searchdisabled": "<p>Op it stuit stiet it trochsykjen fan tekst út omdat dizze funksje tefolle kompjûterkapasiteit ferget. As we nije apparatuer krije, en dy is ûnderweis, dan wurdt dizze funksje wer aktyf. Oant salang kinne jo sykje fia Google:</p>",
        "preferences": "Ynstellings",
-       "mypreferences": "Myn foarkarynstellings",
+       "mypreferences": "Ynstellings",
        "prefs-edits": "Tal bewurkings:",
        "prefs-skin": "Side-oansjen",
        "skin-preview": "Proefbyld",
        "datedefault": "Gjin foarkar",
+       "prefs-user-pages": "Meidoggersiden",
        "prefs-personal": "Persoanlike gegevens",
        "prefs-rc": "Koartlyn feroare",
        "prefs-watchlist": "Folchlist",
        "prefs-watchlist-days": "Oantal dagen yn folchlist sjen litte:",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-watchlist-days-max": "Maksimaal $1 {{PLURAL:$1|dei|dagen}}",
        "prefs-watchlist-edits": "Tal wizigings om sjen te litten yn de útwreide folchlist:",
        "prefs-watchlist-edits-max": "Maksimum oantal: 1000",
        "prefs-misc": "Ferskaat",
        "recentchangesdays-max": "(maksimaal $1 {{PLURAL:$1|dei|dagen}})",
        "recentchangescount": "Tal titels op 'Koartlyn feroare'",
        "savedprefs": "Jo ynstellings binne fêstlein.",
-       "timezonelegend": "Tiidsône",
+       "timezonelegend": "Tiidsône:",
        "localtime": "Pleatslike tiid:",
-       "timezoneuseserverdefault": "Servertiid brûke",
+       "timezoneuseserverdefault": "Wikistandert brûke ($1)",
        "timezoneuseoffset": "Oars (tiidferskil oanjaan)",
        "servertime": "Servertiid:",
        "guesstimezone": "Freegje de blêder",
        "default": "standert",
        "prefs-files": "Triemmen",
        "prefs-custom-js": "Persoanlik JS",
-       "prefs-emailconfirm-label": "Netpostbefêstiging:",
+       "prefs-emailconfirm-label": "E-mailbefêstiging:",
        "youremail": "E-mail:",
        "username": "{{GENDER:$1|Brûkersnamme}}:",
        "prefs-memberingroups": "Lid fan {{PLURAL:$1|groep|groepen}}:",
+       "prefs-memberingroups-type": "$1",
+       "prefs-registration-date-time": "$1",
        "yourrealname": "Jo wiere namme:",
        "yourlanguage": "Taal:",
        "yournick": "Jo alias (foar sinjaturen)",
        "badsig": "Unjildige ûndertekening; kontrolearje de HTML-tags.",
        "badsiglength": "Bynamme is te lang; dy moat koarter as $1 {{PLURAL:$1|teken|tekens}} wêze.",
-       "yourgender": "Geslacht:",
-       "gender-unknown": "Net oanjûn",
-       "gender-male": "Man",
-       "gender-female": "Frou",
+       "yourgender": "Hoe wolsto beskreaun wurde?",
+       "gender-unknown": "Ik wol dit net oanjûn",
+       "gender-male": "Hy bewurke siden",
+       "gender-female": "Sy bewurke siden",
        "prefs-help-gender": "Kar: dit wurdt troch de programmatuer brûkt om de goeie oansprekfoarm te kiezen.\nDizze ynformaasje is foar oare meidoggers te sjen.",
        "email": "E-mail",
        "prefs-help-realname": "Echte namme is net ferplicht; as jo dy opjouwe kin dy namme brûkt wurde om jo erkenning te jaan foar jo wurk.",
-       "prefs-help-email": "E-post is opsjoneel, mar makket it mûglik jo wachtwurd te stjoeren as jo it fergetten hawwe.\nJo kinne ek oaren de mûglikheid jaan kontakt mei jo op te nimmen troch in ferwizing op jo brûkers- en oerlisside, sûnder dat jo jo identiteit oer hoege te jaan.",
+       "prefs-help-email": "E-mail is opsjoneel, mar makket it mûglik jo wachtwurd te stjoeren as jo it fergetten hawwe.\nJo kinne ek oaren de mûglikheid jaan kontakt mei jo op te nimmen troch in ferwizing op jo brûkers- en oerlisside, sûnder dat jo jo identiteit oer hoege te jaan.",
        "prefs-help-email-required": "Hjir is in e-mailadres foar nedich.",
        "prefs-signature": "Sinjatuer",
        "prefs-dateformat": "Datumopmaak",
        "userrights-lookup-user": "Behear fan meidoggerrjochten",
        "userrights-user-editname": "Meidoggernamme:",
        "editusergroup": "Wizigje meidoggerrjochten",
-       "editinguser": "Bewurkje meidoggerrjochten fan '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+       "editinguser": "Bewurkje meidoggerrjochten fan <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Wizigje meidoggerrjochten",
        "saveusergroups": "Meidoggerrjochten fêstlizze",
        "userrights-groupsmember": "Sit yn group:",
+       "userrights-groupsmember-type": "$1",
        "userrights-groups-help": "Jo kinne de groepen feroarje dêr't dizze brûker lid fan is.\n* In oankrúst fekje betsjut dat de brûker lid is fan 'e groep.\n* In net oankrúst fekje betsjut dat de brûker gjin lid is fan 'e groep.\n* In \"*\" betsjut dat jo in brûker net út in groep weihelje kinne nei't jo dy tafoege hawwe, of oarsom.",
        "userrights-reason": "Reden:",
        "userrights-no-interwiki": "Jo hawwe gjin foech om rjochten fan meidoggers op oare wikis te wizigjen.",
        "userrights-notallowed": "Jo hawwe gjin rjochten om rjochten fan meidoggers te wizigjen.",
        "userrights-changeable-col": "Groepen dy't jo beheare kinne",
        "userrights-unchangeable-col": "Groepen dy't jo net beheare kinne",
+       "userrights-irreversible-marker": "$1*",
        "group": "Groep:",
        "group-user": "Meidoggers",
        "group-autoconfirmed": "befêstige brûkers",
        "group-bureaucrat": "Rjochtenútfurders",
        "group-suppress": "tasichthâlders",
        "group-all": "(eltsenien)",
-       "group-user-member": "{{GENDER:$1|Meidogger}}",
-       "group-autoconfirmed-member": "Registrearre brûker",
-       "group-bot-member": "Bot",
-       "group-sysop-member": "Behearder",
-       "group-bureaucrat-member": "Rjochtenútfurder",
-       "group-suppress-member": "Tasichthâlder",
+       "group-user-member": "{{GENDER:$1|meidogger}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|registrearre brûker}}",
+       "group-bot-member": "{{GENDER:$1|bot}}",
+       "group-sysop-member": "{{GENDER:$1|behearder}}",
+       "group-bureaucrat-member": "{{GENDER:$1|rjochtenútfurder}}",
+       "group-suppress-member": "{{GENDER:$1|tasichthâlder}}",
        "grouppage-user": "{{ns:project}}:Meidoggers",
        "grouppage-autoconfirmed": "{{ns:project}}:Registrearre brûkers",
        "grouppage-bot": "{{ns:project}}:Bots",
        "minoreditletter": "T",
        "newpageletter": "N",
        "boteditletter": "b",
+       "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 folgjende {{PLURAL:$1|meidogger|meidoggers}}]",
        "rc_categories": "Alline kategoryen (skiede mei in \"|\")",
        "rc_categories_any": "Elk",
+       "rc-change-size": "$1",
        "newsectionsummary": "/* $1 */ nije seksje",
-       "rc-enhanced-expand": "Details werjaan (JavaScript nedich)",
+       "rc-enhanced-expand": "Details werjaan",
        "rc-enhanced-hide": "Details ferskûlje",
        "recentchangeslinked": "Folgje keppelings",
        "recentchangeslinked-feed": "Folgje keppelings",
        "sourcefilename": "Triemnamme boarne:",
        "destfilename": "Triemnamme om op te slaan:",
        "upload-maxfilesize": "Maksimale triemgrutte: $1",
-       "watchthisupload": "Folgje dizze side",
+       "watchthisupload": "Folgje dizze triem",
        "filewasdeleted": "Der is earder in triem mei dizze namme fuorthelle.\nRieplachtsje it $1 foar't jo him op'e nij tafoegje.",
        "filename-bad-prefix": "De namme fan de triem dy't jo oanbiede begjint mei '''\"$1\"''', dit wiist op in namme dy't automatysk troch in digitale kamera oanmakke wurdt. Feroarje de namme as jo wolle yn ien dy't in omskriuwing jout fan de triem.",
        "filename-prefix-blacklist": " #<!-- lit dizze line exakt sa't er is --> <pre>\n# Syntax is as folget:\n#   * Alles fan in \"#\"-teken oan't de ein fan de line is in kommintaar\n#   * Elke net blanke line is a foarheaksel foar triemnammen sa't dy automatysk jûn wurde troch digitale kamera's\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # guon mobile tillefoanen\nIMG # algemien\nJD # Jenoptik\nMGP # Pentax\nPICT # ferskaat\n #</pre> <!-- lit dizze line exakt sa't er is -->",
        "upload-proto-error-text": "Oanbieden mei dizze metoade freget URL's dy't begjinne mei <code>http://</code> of <code>ftp://</code>.",
        "upload-file-error": "Ynterne fout",
        "upload-file-error-text": "Der wie in ynterne fout doe't in tydlike triem op'e server oanmakke waard.\nNim kontakt op mei in [[Special:ListUsers/sysop|behearder]].",
-       "upload-misc-error": "Unbekende oanbiedfout",
+       "upload-misc-error": "Unbekende oanbiedflater",
        "upload-misc-error-text": "Der is by it oanbieden in ûnbekende fout optreden.\nKontrolearje of de URL krekt en beskikber is en besykje it nochris.\nAs it probleem oanhâldt, nim dan kontakt op mei in\n[[Special:ListUsers/sysop|behearder]].",
        "upload-curl-error6": "Koe de URL net berikke",
        "upload-curl-error6-text": "De opjûne URL is net berikber.\nKontrolearje oft de URL krekt is en oft de webside beskikber is.",
        "upload-curl-error28": "Oanbiedtiid foarby",
        "upload-curl-error28-text": "It duorre te lang foar't it webstee andere.\nKontrolearje oft it webstee beskikber is, wachtsje efkes en besykje it dan wer.\nJo kinne it faaks besykje as it wat minder drok is.",
        "license": "Lisinsje:",
-       "license-header": "Lisinsje:",
+       "license-header": "Lisinsje",
        "nolicense": "Neat keazen",
        "license-nopreview": "(Foarfertoaning net beskikber)",
        "upload_source_url": " (in jildige, publyk tagonklike URL)",
        "listfiles_search_for": "Sykje nei triem:",
        "imgfile": "triem",
        "listfiles": "Ofbyld list",
+       "listfiles_thumb": "Miniatuerôfbylding",
        "listfiles_date": "Datum",
        "listfiles_name": "Namme",
        "listfiles_user": "Meidogger",
        "filerevert": "$1 weromsette",
        "filerevert-legend": "Triem weromsette",
        "filerevert-intro": "Jo binne '''[[Media:$1|$1]]''' oan it weromdraaien ta de [$4 ferzje op $2, $3].",
-       "filerevert-comment": "Oanmerking:",
+       "filerevert-comment": "Reden:",
        "filerevert-defaultcomment": "Weromdraaid ta de ferzje op $1, $2",
        "filerevert-submit": "werom sette",
-       "filerevert-success": "'''[[Media:$1|$1]]''' is weromdraaid ta de [$4 ferzje op $2, $3].",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong> is weromdraaid ta de [$4 ferzje op $2, $3].",
        "filerevert-badversion": "Der is gjin foarige lokale ferzje fan dizze triem fan 'e opjûne tiid.",
        "filedelete": "Wiskje $1",
        "filedelete-legend": "Wiskje triem",
        "filedelete-intro-old": "Jo wiskje de ferzje fan '''[[Media:$1|$1]]''' fan [$4 $3, $2].",
        "filedelete-comment": "Reden:",
        "filedelete-submit": "Wiskje",
-       "filedelete-success": "'''$1''' is wiske.",
+       "filedelete-success": "<strong>$1</strong> is wiske.",
        "filedelete-success-old": "De ferzje fan '''[[Media:$1|$1]]''' fan $2, $3 is fuorthelle.",
-       "filedelete-nofile": "'''$1''' bestiet net.",
+       "filedelete-nofile": "<strong>$1</strong> bestiet net.",
        "filedelete-nofile-old": "Der is gjin opsleine ferzje fan '''$1''' mei de oanjûne eigenskippen.",
        "filedelete-otherreason": "Oare/eventuele reden:",
        "filedelete-reason-otherlist": "Oare reden",
        "protectedpages-indef": "Allinne blokkades sûnder ferrindatum",
        "protectedpages-cascade": "Allinne befeiligje mei de kaskade-opsje",
        "protectedpagesempty": "Op it stuit binne der gjin siden befeilige, dy't oan dizze betingsten foldogge.",
+       "protectedpages-reason": "Reden",
+       "protectedpages-unknown-timestamp": "Unbekend",
        "protectedtitles": "Skoattele titels",
        "protectedtitlesempty": "Der binne op it stuit gjin sidenammen befeilige, dy't oan dizze betingsten foldogge.",
        "listusers": "Meidoggerlist",
        "pager-newer-n": "{{PLURAL:$1|nijere 1|nijere $1}}",
        "pager-older-n": "{{PLURAL:$1|1 âlder|$1 âlder}}",
        "suppress": "Tafersjoch",
+       "apihelp": "API-help",
        "booksources": "Boekynformaasje",
        "booksources-search-legend": "Boarnen en ynformaasje oer in boek sykje",
+       "booksources-search": "Sykje",
        "booksources-text": "Hjirûnder is in list mei keppelings nei oare websites dy't nije of brûkte boeken ferkeapje en dy't faaks mear ynformaasje hawwe oer it boek dat jo sykje:",
        "booksources-invalid-isbn": "It ynjûne ISBN liket net jildich te wêzen.\nKontrolearje oft jo faaks in flater makke hawwe by de ynfier.",
-       "specialloguserlabel": "Meidogger:",
-       "speciallogtitlelabel": "Sidenamme:",
+       "specialloguserlabel": "Útfierende meidogger:",
+       "speciallogtitlelabel": "Doel (titel of brûker):",
        "log": "Lochs",
-       "all-logs-page": "Alle lochboeken",
+       "all-logs-page": "Alle iepenbiere lochboeken",
        "alllogstext": "Dit is it kombinearre logboek fan {{SITENAME}}.\nJo kinne ek kieze foar spesifike logboeken en filterje op brûker (haadstêfgefoelich) en sidenamme  (haadstêfgefoelich).",
        "logempty": "Gjin treffers yn it loch.",
        "log-title-wildcard": "Siden sykje dy't mei dizze namme begjinne",
        "listgrouprights-namespaceprotection-namespace": "Nammeromte",
        "mailnologin": "Gjin adres beskikber",
        "mailnologintext": "Jo moatte [[Special:UserLogin|oanmelden]] wêze, en in jildich e-postadres [[Special:Preferences|ynsteld]] hawwe, om oan oare meidoggers e-post stjoere te kinnen.",
-       "emailuser": "Skriuw meidogger",
-       "emailpage": "E-post nei meidogger",
+       "emailuser": "E-mail meidogger",
+       "emailuser-title-notarget": "E-mail nei meidogger",
+       "emailpage": "E-mail nei meidogger",
        "emailpagetext": "Fia dit berjocht kinne jo in e-mail oan dizze brûker ferstjoere.\nIt e-mailadres dat jo opjûn hawwe by [[Special:Preferences|jo foarkarren]] wurdt as ôfstjoerder  brûkt.\nDe ûntfanger kin dus daliks nei jo reagearje.",
-       "defemailsubject": "E-post fan {{SITENAME}}",
+       "defemailsubject": "E-mail fan {{SITENAME}}-brûker \"$1\"",
        "noemailtitle": "Gjin e-postadres",
        "noemailtext": "Dizze meidogger hat gjin jildich e-postadres ynsteld, of hat oanjûn gjin post fan oare meidoggers krije te wollen.",
        "nowikiemailtext": "Dizze brûker wol gjin e-mail ûntfange fan oare brûkers.",
        "emailsubject": "Ûnderwerp:",
        "emailmessage": "Berjocht:",
        "emailsend": "Stjoer",
-       "emailsent": "Berjocht stjoerd",
+       "emailsent": "E-mail stjoerd",
        "emailsenttext": "Jo berjocht is stjoerd.",
        "watchlist": "Folchlist",
        "mywatchlist": "Folchlist",
        "exbeforeblank": "foar de tekst wiske wie, wie dat: '$1'",
        "delete-confirm": "\"$1\" wiskje",
        "delete-legend": "Wiskje",
-       "historywarning": "Warskôging: De side dy't jo wiskje wolle hat skiednis:",
+       "historywarning": "<strong>Warskôging:</strong> De side dy't jo wiskje wolle hat skiednis:",
        "confirmdeletetext": "Jo binne dwaande mei it foar altyd wiskjen fan in side\nof ôfbyld, tegearre mei alle skiednis, út de databank.\nBefêstigje dat jo dat wier dwaan wolle. Befêstigje dat dat is wat jo witte wat it gefolch\nis en dat jo dit dogge neffens de [[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "Dien",
        "deletedtext": "\"$1\" is wiske.\nSjoch \"$2\" foar in list fan wat resint wiske is.",
        "protect-locked-dblock": "It befeiligingsnivo kin net feroare wurde om't de database sletten is.\nHjir binne de hjoeddeiske ynstellings foar de side '''$1''':",
        "protect-locked-access": "'''Jo brûker hat gjin rjochten om it befeiligingsnivo te feroarjen.'''\nDit binne de rinnende ynstellings foar de side '''$1''':",
        "protect-cascadeon": "Dizze side is op 't stuit befeilige, om't er yn 'e folgjende {{PLURAL:$1|side|siden}} opnommen is, dy't befeilige {{PLURAL:$1|is|binne}} mei de kaskade-opsje. It befeiligingsnivo feroarje hat alhiel gjin effekt.",
-       "protect-default": "(standert)",
+       "protect-default": "Tastean foar alle brûkers",
        "protect-fallback": "Hjir is it rjocht \"$1\" foar nedich",
        "protect-level-autoconfirmed": "Slút anonymen út",
        "protect-level-sysop": "Allinnich behearders",
+       "protect-summary-desc": "[$1=$2] ($3)",
        "protect-summary-cascade": "kaskade",
        "protect-expiring": "ferrint $1 (UTC)",
        "protect-cascade": "Underlizzende siden - skoattelje ek alle siden dy't in ûnderdiel útmeitsje fan dizze side",
        "restriction-level-all": "alle nivo's",
        "undelete": "Side werom set",
        "undeletepage": "Side besjen en werom sette",
-       "undeletepagetitle": "'''Hjirûnder steane de fuorthelle bewurkings fan [[:$1|$1]]'''.",
+       "undeletepagetitle": "<strong>Hjirûnder steane de fuorthelle bewurkings fan [[:$1|$1]]</strong>.",
        "viewdeletedpage": "Wiske siden besjen",
        "undeletepagetext": "Dizze siden binne wiske, mar sitte noch yn it argyf en kinne weromset wurde. (It argyf kin út en troch leechmakke wurde.)",
        "undelete-fieldset-title": "Ferzjes werom sette",
        "undeletebtn": "Weromsette",
        "undeletelink": "besjen/tebeksette",
        "undeleteinvert": "Omkearde seleksje",
-       "undeletecomment": "Utlis foar weromsetten:",
+       "undeletecomment": "Reden:",
        "undelete-header": "Sjoch [[Special:Log/delete|de wiskloch]] foar resint wiske siden.",
        "undelete-search-box": "Sykje wiske siden",
        "undelete-search-prefix": "Lit siden sjen dy't begjinne mei:",
        "undelete-search-submit": "Sykje",
        "undelete-no-results": "Gjin oerienkommende siden fûn yn it wisk argyf.",
        "undelete-show-file-submit": "Ja",
+       "undelete-revision-row": "$1 $2 ($3) $4 . . $5 $6 $7 $8 $9",
        "namespace": "Nammeromte:",
        "invert": "Seleksje útsein",
        "blanknamespace": "(Haadnammerûmte)",
-       "contributions": "Meidogger-bydragen",
+       "contributions": "{{GENDER:$1|Meidogger}}-bydragen",
        "contributions-title": "Bydragen fan $1",
-       "mycontris": "Myn bydragen",
-       "contribsub2": "Foar \"$1 ($2)\"",
+       "mycontris": "Bydragen",
+       "contribsub2": "Foar {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Der binne gjin feroarings fûn dyt't hjirmei oerienkomme.",
-       "uctop": " (boppen)",
+       "uctop": "(lêste feroaring)",
        "month": "Fan moanne (en earder):",
        "year": "Fan jier (en earder):",
        "sp-contributions-newbies": "Allinne bydragen fan nije brûkers besjen",
        "sp-contributions-newbies-title": "Bydragen fan nije meidoggers",
        "sp-contributions-blocklog": "Blokkearlochboek",
        "sp-contributions-deleted": "Wiske meidogger bydragen",
-       "sp-contributions-talk": "Oerlis",
-       "sp-contributions-userrights": "Behear fan meidoggerrjochten",
+       "sp-contributions-talk": "oerlis",
+       "sp-contributions-userrights": "behear fan meidoggerrjochten",
        "sp-contributions-search": "Sykje nei bydragen",
        "sp-contributions-username": "IP Adres of meidoggernamme:",
        "sp-contributions-submit": "Sykje",
        "nolinkshere-ns": "Gjin siden yn de keazen nammeromte keppelje nei '''[[:$1]]'''.",
        "isredirect": "synonym",
        "istemplate": "opnaam",
-       "isimage": "byld keppeling",
+       "isimage": "triemkeppeling",
        "whatlinkshere-prev": "{{PLURAL:$1|foarige|foarige $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|folgjende|folgjende $1}}",
        "whatlinkshere-links": "← keppelings",
        "whatlinkshere-hideredirs": "$1 trochferwizings",
        "whatlinkshere-hidetrans": "$1 trânsklúzjes",
        "whatlinkshere-hidelinks": "$1 keppelings",
-       "blockip": "Slút meidogger út",
+       "blockip": "Slút {{GENDER:$1|meidogger}} út",
        "blockip-legend": "Slút brûker út",
        "blockiptext": "Brûk dizze fjilden om in meidogger fan skriuwtagong út te sluten.\nDat soe allinnich fanwege fandalisme dien wurde moatte, sa't de\n[[{{MediaWiki:Policy-url}}|útslut-rie]] it oanjout.\nMeld de krekte reden! Neam bygelyks de siden dy't oantaaste waarden.",
        "ipaddressorusername": "IP Adres of meidoggernamme:",
        "unblockiptext": "Brûk dizze fjilden om in meidogger wer skriuwtagong te jaan.",
        "ipusubmit": "Lit dizze meidogger wer ta.",
        "ipblocklist": "List fan útsletten ynternet-adressen en meidochnammen",
+       "blocklist-reason": "Reden",
        "ipblocklist-submit": "Sykje",
        "infiniteblock": "trochgeand",
        "blocklink": "slút út",
        "unlockdbsuccesssub": "Database is skriuwber",
        "lockdbsuccesstext": "De {{SITENAME}} databank is 'Net-skriuwe' makke.\n<br />Tink derom en meitsje de databank skriuwber as jo ûnderhâld ree is.",
        "unlockdbsuccesstext": "De {{SITENAME}} databank is skriuwber makke.",
+       "lockedbyandtime": "(troch {{GENDER:$1|$1}} op $2 om $3)",
        "move-page": "Werneam  $1",
        "move-page-legend": "Werneam side",
        "movepagetext": "Dit werneamt in side, mei alle sideskiednis.\nDe âlde titel wurdt in trochferwizing nei de nije.\nKeppelings mei de âlde side wurde net feroare;\ngean sels nei of't der dûbele of misse ferwizings binne.\nIt hinget fan jo ôf of't de siden noch keppelen binne sa't it mient wie.\n\nDe side wurdt '''net''' werneamt as der al in side mei dy namme is, útsein as it in side\nsûnder skiednis is en de side leech is of in trochferwizing is. Sa kinne jo in side\ndaalks weromneame as jo in flater meitsje, mar jo kinne in oare side net oerskriuwe.",
        "move-watch": "Folch dizze side",
        "movepagebtn": "Werneam side",
        "pagemovedsub": "Werneamen slagge",
-       "movepage-moved": "'''\"$1\" hjit no \"$2\"'''",
+       "movepage-moved": "<strong>\"$1\" hjit no \"$2\"</strong>",
        "articleexists": "Der is al in side mei dy namme, of oars is de namme dy't jo oanjûn hawwe net tastien. Besykje it op 'e nij.",
        "movetalk": "Titel fan oerlisside ek feroarje, as dy der is.",
        "movepage-page-moved": "De side $1 is werneamd nei $2.",
        "movereason": "Reden:",
        "revertmove": "werom sette",
        "delete_and_move": "Wiskje en werneam",
-       "delete_and_move_text": "== Wiskjen nedich ==\nDe doelside \"[[:$1]]\" is der al. Moat dy wiske wurde om plak te meitsjen foar it werneamen?",
+       "delete_and_move_text": "== Wiskjen nedich ==\nDe doelside \"[[:$1]]\" is der al.\nMoat dy wiske wurde om plak te meitsjen foar it werneamen?",
        "delete_and_move_confirm": "Ja, wiskje de side",
        "delete_and_move_reason": "Wiske om plak te meitsjen foar in werneamde side",
        "export": "Eksportearje",
        "export-submit": "Eksportearje",
        "export-addcattext": "Siden tafoegje fan kategory:",
        "export-addcat": "Tafoegje",
+       "export-addns": "Tafoegje",
        "export-download": "Fêstlizze as triem",
        "export-templates": "Tafoegje berjochten",
        "allmessages": "Alle wikiberjochten",
        "allmessagesdefault": "Standerttekst",
        "allmessagescurrent": "Tekst yn de nijste ferzje",
        "allmessagestext": "Dit is in list fan alle systeemberjochten beskikber yn de MediaWiki-nammeromte.\nSjoch: [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation], [//translatewiki.net translatewiki.net].",
+       "allmessages-filter-all": "Alle",
        "allmessages-language": "Taal:",
        "thumbnail-more": "Fergrutsje",
        "filemissing": "Triem net fûn",
        "tooltip-diff": "Sjen litte hokker feroarings jo yn'e tekst makke hawwe.",
        "tooltip-compareselectedversions": "Sjoch de ferskillen tusken de twa keazen ferzjes fan dizze side.",
        "tooltip-watch": "Foegje dizze side ta oan jo folchlist [alt-w]",
+       "interlanguage-link-title": "$1 – $2",
+       "interlanguage-link-title-nonlang": "$1 – $2",
        "common.js": "/* Alles wat hjir oan JavaScript delset wurdt, wurdt foar alle brûkers laden foar eltse side! */",
        "anonymous": "Anonime {{PLURAL:$1|meidogger|meidoggers}} fan {{SITENAME}}",
        "siteuser": "{{SITENAME}} meidogger $1",
+       "anonuser": "{{SITENAME}} anonime brûker $1",
        "othercontribs": "Basearre op wurk fan $1.",
        "others": "Oaren",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|meidogger|meidoggers}} $1",
        "spamprotectiontext": "De side dy't jo fêstlizze woene is blokkearre troch in spam filter. Dit wurdt wierskynlik feroarsake troch in ferwizing nei in ekstern webstee.",
        "spamprotectionmatch": "De neikommende tekst hat it spam filter aktivearre: $1",
+       "pageinfo-redirects-value": "$1",
        "pageinfo-contentpage-yes": "Ja",
        "pageinfo-protect-cascading-yes": "Ja",
        "markaspatrolleddiff": "Markearje as kontroleare",
        "markedaspatrollederror": "Kin net as kontrolearre markearre wurde",
        "markedaspatrollederrortext": "Jo moatte in ferzje oanjaan dy't jo as kontrolearre markearje.",
        "markedaspatrollederror-noautopatrol": "Jo meie jo eigen bewurkings net sels markearre.",
-       "previousdiff": "← Toan eardere ferskillen",
+       "previousdiff": "← Âldere feroaring",
        "nextdiff": "Neikommende ferskillen →",
        "imagemaxsize": "Behein ôfmjittings fan ôfbyld op beskriuwingsside ta:",
        "thumbsize": "Mjitte fan miniatueren:",
+       "widthheight": "$1 × $2",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|side|siden}}",
        "file-info": "triemgrutte: $1, MIME-type: $2",
-       "file-info-size": "$1 × $2 pixel, triemgrutte: $3, MIME type: $4",
+       "file-info-size": "$1 × $2 pixels, triemgrutte: $3, MIME-type: $4",
+       "file-info-size-pages": "$1 × $2 pixels, triemgrutte: $3, MIME-type: $4, $5 {{PLURAL:$5|side|siden}}",
        "file-nohires": "Gjin hegere resolúsje beskikber.",
        "svg-long-desc": "SVG-triem, nominaal $1 × $2 pixels, triemgrutte: $3",
        "show-big-image": "Hegere resolúsje",
+       "show-big-image-size": "$1 × $2 pixels",
        "newimages": "Nije ôfbylden",
        "imagelisttext": "Dit is in list fan '''$1''' {{PLURAL:$1|triem|triemen}}, op $2.",
        "newimages-legend": "Filter",
        "noimages": "Neat te sjen.",
        "ilsubmit": "Sykje",
        "bydate": "datum",
+       "video-dims": "$1, $2 × $3",
+       "seconds-abbrev": "$1 s",
+       "minutes-abbrev": "$1 min",
+       "hours-abbrev": "$1 o",
+       "days-abbrev": "$1 d",
        "seconds": "{{PLURAL:$1|$1 sekonde|$1 sekonden}}",
        "minutes": "{{PLURAL:$1|$1 minút|$1 minuten}}",
        "hours": "{{PLURAL:$1|$1 oere|$1 oeren}}",
        "months": "{{PLURAL:$1|$1 moanne|$1 moannen}}",
        "years": "{{PLURAL:$1|$1 jier|$1 jierren}}",
        "ago": "$1 lyn",
+       "just-now": "sakrekt",
+       "hours-ago": "$1 {{PLURAL:$1|oere|oeren}} lyn",
+       "minutes-ago": "$1 {{PLURAL:$1|minút|minuten}} lyn",
+       "seconds-ago": "$1 {{PLURAL:$1|sekonde|sekonden}} lyn",
+       "monday-at": "moandei om $1",
+       "tuesday-at": "tiisdei om $1",
+       "wednesday-at": "woansdei om $1",
+       "thursday-at": "tongersdei om $1",
+       "friday-at": "freed om $1",
+       "saturday-at": "sneon om $1",
+       "sunday-at": "snein om $1",
+       "yesterday-at": "juster om $1",
        "bad_image_list": "De opmaak is as folget:\n\nAllinne rigels fan in list (rigels dy't begjinne mei *) wurde ferwurke. De earste link op in rigel moat in link wêze nei in net winske ôfbylding.\nAlle folgjende links dy't op deselde rigel steane, wurde behannele as útsûndering, lykas bygelyks siden dêr't de ôfbylding yn'e tekst opnommen is.",
        "metadata": "Metadata",
        "metadata-help": "Dizze triem befettet oanfoljende ynformaasje, dy't troch in fotokamera, scanner of fotobewurkingsprogramma tafoege wêze kin. As de triem oanpast is, komme de details mûglik net folslein oerien mei de feroare ôfbylding.",
        "metadata-expand": "Utwreide details sjen litte",
        "metadata-collapse": "Ferskûlje útwreide details",
        "metadata-fields": "De EXIF-metadatafjilden yn dit berjocht steane op in ôfbyldingsside as de metadatatabel ynklapt is. Oare fjilden wurde ferburgen.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-langitem-default": "$1",
        "exif-samplesperpixel": "Oantal komponinten",
        "exif-xresolution": "Horizontale resolúsje",
        "exif-yresolution": "Fertikale resolúsje",
        "exif-imagedescription": "Ofbylding titel",
        "exif-make": "Kamera makker",
        "exif-artist": "Auteur",
+       "exif-exifversion": "Exif-ferzje",
        "exif-colorspace": "Kleurromte",
        "exif-compressedbitsperpixel": "Ofbylding kompresjemetoade",
        "exif-usercomment": "Opmerkings",
        "exif-relatedsoundfile": "Besibbe audiotriem",
        "exif-exposuretime-format": "$1 sek ($2)",
+       "exif-fnumber-format": "f/$1",
+       "exif-shutterspeedvalue": "APEX-slutertiid",
+       "exif-aperturevalue": "APEX-beljochting",
+       "exif-brightnessvalue": "APEX-helderens",
        "exif-flash": "Flits",
+       "exif-focallength-format": "$1 mm",
        "exif-filesource": "Triemboarne",
        "exif-contrast": "Kontrast",
        "exif-sharpness": "Skerpte",
        "exif-gpslatitude": "Breedtegraad",
        "exif-gpslongitude": "Lingtegraad",
+       "exif-gpsaltitude": "Hichte",
        "exif-gpstimestamp": "GPS-tiid (atoomklok)",
        "exif-gpsspeedref": "Snelheidsienheid",
        "exif-gpsdatestamp": "GPS-datum",
+       "exif-coordinate-format": "$1° $2′ $3″ $4",
        "exif-source": "Boarne",
        "exif-contact": "Kontakt ynformaasje",
        "exif-writer": "Skriuwer",
        "exif-cameraownername": "Eigner fan de kamera",
        "exif-copyrightowner": "Copyright eigner",
        "exif-disclaimer": "Foarbehâld",
+       "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
+       "exif-subjectnewscode-value": "$2 ($1)",
        "exif-unknowndate": "Datum ûnbekend",
        "exif-orientation-1": "Normaal",
        "exif-componentsconfiguration-0": "bestiet net",
        "exif-subjectdistancerange-2": "Tichtby",
        "exif-gpsdestdistance-m": "Milen",
        "exif-gpsdestdistance-n": "Seemilen",
-       "namespacesall": "alles",
+       "exif-urgency-normal": "Normaal ($1)",
+       "namespacesall": "alle",
        "monthsall": "alle",
        "confirmemail": "Befêstigjen netpostadres",
        "confirmemail_text": "{{SITENAME}} freget dat jo jo netpostadres befêstigje eart jo hjir netpost brûke. Brûk de knop hjirûnder om josels in befêstigingskoade ta te stjoeren op it adres dat jo opjûn hawwe. Iepenje de koade dan yn jo blêder om te befêstigjen dat jo netpostadres jildich is.",
        "confirmemail_body": "Immen, nei gedachten jo, hat him by {{SITENAME}} oanmelde as \"$2\", mei dit netpostadres ($1).\n\nHjirtroch komme ek de netpostfunksjes fan {{SITENAME}} foar jo beskikber. Iepenje de neikommende keppeling om te befêstigjen dat jo wier josels by {{SITENAME}} mei dit netpostadres oanmelde hawwe:\n\n$3\n\nAt jo dat *net* wienen, brûk dy keppeling dan net, en klik hjir:\n\n$5\n\nDizze befêstigingskoade ferrint dan op $4.",
        "scarytranscludetoolong": "[URL-adres is te lang]",
        "confirmrecreate": "Sûnt jo begûn binne dizze side te bewurkjen, hat meidogger [[User:$1|$1]] ([[User talk:$1|oerlis]]) de side wiske. De reden dy't derfoar jûn waard wie:\n: ''$2''\nWolle jo de side wier op 'e nij skriuwe?",
+       "unit-pixel": "px",
        "confirm_purge_button": "OK",
        "confirm-watch-button": "OK",
        "confirm-unwatch-button": "OK",
        "confirm-unwatch-top": "Dizze side fan myn folchlist ôfhelje",
-       "imgmultipageprev": "side werom",
+       "semicolon-separator": ";&#32;",
+       "comma-separator": ",&#32;",
+       "colon-separator": ":&#32;",
+       "pipe-separator": "&#32;|&#32;",
+       "word-separator": "&#32;",
+       "ellipsis": "...",
+       "percent": "$1%",
+       "parentheses": "($1)",
+       "brackets": "[$1]",
+       "imgmultipageprev": "← foarige side",
        "imgmultipagenext": "folgjende side →",
        "imgmultigo": "Los!",
        "imgmultigoto": "Gean nei side $1",
+       "img-lang-opt": "$2 ($1)",
        "img-lang-default": "(standert taal)",
        "table_pager_next": "Folgjende side",
        "table_pager_prev": "Side werom",
        "autosumm-replace": "Side ferfong mei '$1'",
        "autoredircomment": "Ferwiist troch nei [[$1]]",
        "autosumm-new": "Nije Side: $1",
+       "size-bytes": "$1 B",
+       "size-kilobytes": "$1 KB",
+       "size-megabytes": "$1 MB",
+       "size-gigabytes": "$1 GB",
+       "size-terabytes": "$1 TB",
+       "size-petabytes": "$1 PB",
+       "size-exabytes": "$1 EB",
+       "size-zetabytes": "$1 ZB",
+       "size-yottabytes": "$1 YB",
+       "bitrate-bits": "$1 bps",
+       "bitrate-kilobits": "$1 kbps",
+       "bitrate-megabits": "$1 Mbps",
+       "bitrate-gigabits": "$1 Gbps",
+       "bitrate-terabits": "$1 Tbps",
+       "bitrate-petabits": "$1 Pbps",
+       "bitrate-exabits": "$1 Ebps",
+       "bitrate-zetabits": "$1 Zbps",
+       "bitrate-yottabits": "$1 Ybps",
        "watchlistedit-normal-title": "Folchlist bewurkje",
        "watchlistedit-normal-submit": "Siden wiskje",
        "watchlistedit-raw-titles": "Siden:",
        "version-extensions": "Ynstallearre útwreidings",
        "version-specialpages": "Bysûndere siden",
        "version-variables": "Fariabels",
+       "version-api": "API",
        "version-other": "Oare",
-       "version-version": "(Ferzje $1)",
+       "version-version": "($1)",
+       "version-no-ext-name": "[gjin namme]",
        "version-license": "Lisinsje",
        "version-ext-colheader-version": "Ferzje",
+       "version-ext-colheader-description": "Beskriuwing",
        "version-software": "Ynsteld software",
        "version-software-product": "Produkt",
        "version-software-version": "Ferzje",
        "redirect-value": "Wearde:",
+       "redirect-user": "Meidogger-ID",
        "redirect-file": "Triemnamme",
        "fileduplicatesearch": "Sykje op duplikaten",
        "fileduplicatesearch-legend": "Sykje op duplikaten",
        "specialpages-group-spam": "Spamhelpmiddels",
        "blankpage": "Side is leech",
        "intentionallyblankpage": "Dizze side is bewust leech lizzen en wurdt brûkt foar benchmarks, ensfh.",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Label|Labels}}]]: $2)",
        "tags-active-yes": "Ja",
        "tags-active-no": "Nee",
        "tags-edit": "bewurkje",
        "compare-invalid-title": "Unjildige titel.",
        "htmlform-no": "Nee",
        "htmlform-yes": "Ja",
+       "htmlform-cloner-create": "Mear tafoegje",
        "revdelete-restricted": "hat beheinings oplein oan behearders",
        "revdelete-unrestricted": "hat beheinings foar behearders goedmakke",
        "rightsnone": "(gjin)",
        "revdelete-summary": "gearfetting bewurkje",
-       "feedback-subject": "Underwerp:",
+       "feedback-subject": "Ûnderwerp:",
        "feedback-message": "Berjocht:",
        "feedback-cancel": "Annulearje",
        "feedback-submit": "Feedback ferstjoere",
        "feedback-close": "Dien",
        "searchsuggest-search": "Sykje",
+       "api-error-unknown-code": "Unbekende flater: \"$1\".",
+       "api-error-unknownerror": "Unbekende flater: \"$1\".",
        "duration-seconds": "$1 {{PLURAL:$1|sekonde|sekonden}}",
        "duration-minutes": "$1 {{PLURAL:$1|minút|minuten}}",
+       "duration-hours": "$1 {{PLURAL:$1|oere|oeren}}",
+       "duration-days": "$1 {{PLURAL:$1|dei|dagen}}",
+       "duration-weeks": "$1 {{PLURAL:$1|wike|wiken}}",
+       "duration-years": "$1 {{PLURAL:$1|jier|jierren}}",
+       "duration-decades": "$1 {{PLURAL:$1|desennium|desennia}}",
+       "duration-centuries": "$1 {{PLURAL:$1|ieu|ieuwen}}",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|sekonde|sekonden}}",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|sekonde|sekonden}}",
+       "limitreport-ppvisitednodes-value": "$1/$2",
+       "limitreport-ppgeneratednodes-value": "$1/$2",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
+       "limitreport-expansiondepth-value": "$1/$2",
+       "limitreport-expensivefunctioncount-value": "$1/$2",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Berjochten fuorthelje",
        "pagelang-language": "Taal",
-       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)"
+       "mediastatistics-nfiles": "$1 ($2%)",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-header-unknown": "Unbekend"
 }
index 5ff1b41..d90b777 100644 (file)
        "filerenameerror": "Non se pode cambiar o nome do ficheiro \"$1\" a \"$2\".",
        "filedeleteerror": "Non se deu borrado o ficheiro \"$1\".",
        "directorycreateerror": "Non se puido crear o directorio \"$1\".",
+       "directoryreadonlyerror": "«$1» é un cartafol de só lectura.",
+       "directorynotreadableerror": "Non ten permisos de lectura no cartafol «$1».",
        "filenotfound": "Non se deu atopado o ficheiro \"$1\".",
        "unexpected": "Valor inesperado: \"$1\"=\"$2\".",
        "formerror": "Erro: Non se pode enviar o formulario.",
        "search-result-category-size": "{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoría|$2 subcategorías}}, {{PLURAL:$3|1 ficheiro|$3 ficheiros}})",
        "search-redirect": "(redirixido desde \"$1\")",
        "search-section": "(sección \"$1\")",
+       "search-category": "(categoría $1)",
        "search-file-match": "(coincide co contido do ficheiro)",
        "search-suggest": "Quizais quixo dicir: $1",
        "search-interwiki-caption": "Proxectos irmáns",
        "right-protect": "Cambiar os niveis de protección e editar páxinas protexidas coa opción \"protección en serie\"",
        "right-editprotected": "Editar páxinas protexidas con \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Editar páxinas protexidas con \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Editar o modelo de contido dunha páxina.",
        "right-editinterface": "Editar a interface de usuario",
        "right-editusercssjs": "Editar os ficheiros CSS e JavaScript doutros usuarios",
        "right-editusercss": "Editar os ficheiros CSS doutros usuarios",
        "action-viewmywatchlist": "ver a súa lista de vixilancia",
        "action-viewmyprivateinfo": "ver a súa información privada",
        "action-editmyprivateinfo": "editar a súa información privada",
+       "action-editcontentmodel": "editar o modelo de contido dunha páxina",
        "nchanges": "$1 {{PLURAL:$1|modificación|modificacións}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|desde a última visita}}",
        "enhancedrc-history": "historial",
        "specialpages-group-wiki": "Datos e ferramentas",
        "specialpages-group-redirects": "Páxinas de redirección especiais",
        "specialpages-group-spam": "Ferramentas contra o spam",
+       "specialpages-group-developer": "Ferramentas dos desenvolvedores",
        "blankpage": "Baleirar a páxina",
        "intentionallyblankpage": "Esta páxina foi baleirada intencionadamente",
        "external_image_whitelist": " #Deixe esta liña tal e como está<pre>\n#Poña embaixo fragmentos de expresións regulares (tan só a parte que vai entre //)\n#Isto coincidirá cos enderezos URL das imaxes externas (hotlinked)\n#Aquelas que coincidan mostraranse como imaxes, senón, só se mostrará unha ligazón cara a esta\n#As liñas que comecen por \"#\" son comentarios\n#Non diferencia entre maiúsculas e minúsculas\n\n#Poña todos os fragmentos por riba desta liña. Deixe esta liña tal e como está</pre>",
        "api-error-stashfailed": "Erro interno: O servidor non puido almacenar o ficheiro temporal.",
        "api-error-publishfailed": "Erro interno: O servidor non puido publicar o ficheiro temporal.",
        "api-error-stasherror": "Houbo un erro ao subir o ficheiro ao depósito.",
+       "api-error-stashedfilenotfound": "O ficheiro apartado non se atopou ao intentar envialo.",
+       "api-error-stashpathinvalid": "A ruta na que se apartara o ficheiro non era correcta.",
+       "api-error-stashfilestorage": "Produciuse un erro ao apartar o ficheiro.",
+       "api-error-stashzerolength": "O servidor non puido apartar o ficheiro porque o ficheiro está baleiro.",
+       "api-error-stashnotloggedin": "Debe identificarse para gardar ficheiros no apartado de envío.",
+       "api-error-stashwrongowner": "O ficheiro apartado ao que intentaba acceder non lle pertence a vostede.",
+       "api-error-stashnosuchfilekey": "A clave de ficheiro apartado á que intentaba acceder non existe.",
        "api-error-timeout": "O servidor non respondeu no tempo esperado.",
        "api-error-unclassified": "Houbo un erro descoñecido.",
        "api-error-unknown-code": "Erro descoñecido: \"$1\"",
        "expand_templates_generate_xml": "Mostrar as árbores de análise XML",
        "expand_templates_generate_rawhtml": "Mostrar o HTML en bruto",
        "expand_templates_preview": "Vista previa",
+       "expand_templates_preview_fail_html": "<em>Dado que o código HTML puro está activado en {{SITENAME}} e produciuse unha perda dos datos da sesión, a vista previa está oculta como precaución contra ataques mediante código JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de acceso á vista previa, inténteo de novo.</strong>\nSe segue sen funcionar, probe a [[Special:UserLogout|saír]] e volver a entrar coa súa conta.",
+       "expand_templates_preview_fail_html_anon": "<em>Dado que o código HTML puro está activado en {{SITENAME}} e produciuse unha perda dos datos da sesión, a vista previa está oculta como precaución contra ataques mediante código JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de acceso á vista previa, probe a [[Special:UserLogout|saír]] e volver a entrar coa súa conta.</strong>",
        "pagelanguage": "Selector de lingua da páxina",
        "pagelang-name": "Páxina",
        "pagelang-language": "Lingua",
        "log-name-pagelang": "Rexistro de cambios de lingua",
        "log-description-pagelang": "Este é un rexistro dos cambios na lingua das páxinas.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiou}} a lingua da páxina \"$3\" do $4 ao $5.",
+       "default-skin-not-found": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nA súa instalación parece incluír os aspectos da seguinte lista. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración dos aspectos] para obter información sobre como activalos e escoller o predeterminado.\n\n$2\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clone un dos repositorios de <code>mediawiki/skins/*</code> mediante Git no cartafol <code dir=\"ltr\">skins/</code> da súa instalación de MediaWiki.\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki.\n\n; Se acaba de anovar MediaWiki:\n: MediaWiki 1.24 e versións posteriores xa non activan aspectos de maneira automática (lea o [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual de descubrimento automático de aspectos]). Pode pegar as seguintes liñas no seu ficheiro <code>LocalSettings.php</code> para activar todos os aspectos instalados actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se acaba de modificar <code>LocalSettings.php</code>:\n: Asegúrese de que os nomes dos aspectos están escritos correctamente.",
+       "default-skin-not-found-no-skins": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nNon ten aspectos instalados.\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clone un dos repositorios de <code>mediawiki/skins/*</code> mediante Git no cartafol <code dir=\"ltr\">skins/</code> da súa instalación de MediaWiki.\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración de aspectos] para obter información sobre como activar aspectos e escoller o aspecto predeterminado.",
        "default-skin-not-found-row-enabled": "* <code>$1</code>/$2 (activada)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code>/$2 ('''desactivada''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code>/$2 ('''desactivada''')",
+       "mediastatistics": "Estatísticas de contido multimedia",
+       "mediastatistics-summary": "Estatísticas sobre tipos de ficheiros enviados. Isto inclúe unicamente a última versión de cada ficheiro. As versións de ficheiros vellas ou eliminadas quedan excluídas.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Tipo MIME",
+       "mediastatistics-table-extensions": "Extensións posíbeis",
+       "mediastatistics-table-count": "Número de ficheiros",
+       "mediastatistics-table-totalbytes": "Tamaño combinado",
+       "mediastatistics-header-unknown": "Descoñecido",
+       "mediastatistics-header-bitmap": "Imaxes de mapas de bits",
+       "mediastatistics-header-drawing": "Imaxes vectoriais",
+       "mediastatistics-header-audio": "Son",
+       "mediastatistics-header-video": "Vídeo",
+       "mediastatistics-header-multimedia": "Contido enriquecido",
+       "mediastatistics-header-office": "Oficina",
+       "mediastatistics-header-text": "Texto",
+       "mediastatistics-header-executable": "Executábeis",
+       "mediastatistics-header-archive": "Formatos comprimidos",
+       "json-warn-trailing-comma": "{{PLURAL:$1|Eliminouse $1 coma final|Elimináronse $1 comas finais}} do JSON.",
+       "json-error-unknown": "Houbo un problema co JSON. Erro: $1",
+       "json-error-depth": "Superouse o número máximo de ficheiros apartados.",
+       "json-error-state-mismatch": "O JSON non é válido.",
+       "json-error-ctrl-char": "Produciuse un erro de carácter de control, trátase probablemente dun problema de codificación.",
+       "json-error-syntax": "Erro de sintaxe",
+       "json-error-utf8": "Hai caracteres UTF-8 incorrectos, trátase probablemente dun problema de codificación.",
+       "json-error-recursion": "Atopáronse unha ou máis referencias recursivas no valor para codificar.",
+       "json-error-inf-or-nan": "Atopáronse un ou máis valores NAN ou INF no valor para codificar.",
+       "json-error-unsupported-type": "Indicouse un valor dun tipo que non se pode codificar."
 }
index adae3ef..a19f7fd 100644 (file)
        "right-protect": "שינוי רמות הגנה ועריכת דפים המוגנים בהגנה מדורגת",
        "right-editprotected": "עריכת דפים המוגנים ברמת \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "עריכת דפים המוגנים ברמת \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "עריכת מודל התוכן של דף",
        "right-editinterface": "עריכת ממשק המשתמש",
        "right-editusercssjs": "עריכת דפי CSS ו־JavaScript של משתמשים אחרים",
        "right-editusercss": "עריכת גיליונות CSS של משתמשים אחרים",
        "action-viewmywatchlist": "לצפות ברשימת המעקב שלך",
        "action-viewmyprivateinfo": "לצפות במידע הפרטי שלך",
        "action-editmyprivateinfo": "לערוך את המידע הפרטי שלך",
+       "action-editcontentmodel": "לערוך את מודל התוכן של דף",
        "nchanges": "{{PLURAL:$1|שינוי אחד|$1 שינויים}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|מאז ביקורך האחרון}}",
        "enhancedrc-history": "היסטוריה",
        "specialpages-group-wiki": "מידע וכלים",
        "specialpages-group-redirects": "הפניות מדפים מיוחדים",
        "specialpages-group-spam": "כלי ספאם",
+       "specialpages-group-developer": "כלי פיתוח",
        "blankpage": "דף ריק",
        "intentionallyblankpage": "דף זה הושאר ריק במכוון.",
        "external_image_whitelist": "#נא להשאיר שורה זו בדיוק כפי שהיא<pre>\n#כתבו קטעים של ביטויים רגולריים (רק החלק שבין סימני //) למטה\n#ביטויים אלה יושוו לכתובות ה־URL של תמונות חיצוניות (המוכללות באמצעות כתובת URL)\n#התמונות שתואמות לאחד הביטויים הרגולריים יוצגו כתמונות, והאחרות יוצגו כקישורים בלבד\n#שורות המתחילות בסימן # הן הערות\n#רשימה זו אינה תלויה ברישיות\n\n#נא לכתוב את כל הביטויים הרגולריים מעל שורה זו. נא להשאיר שורה זו בדיוק כפי שהיא</pre>",
        "expand_templates_generate_xml": "הצגת עץ הפענוח של XML",
        "expand_templates_generate_rawhtml": "הצגת HTML גולמי",
        "expand_templates_preview": "תצוגה מקדימה",
+       "expand_templates_preview_fail_html": "<em>מכיוון שב{{GRAMMAR:תחילית|{{SITENAME}}}} מופעלת הצגת HTML גולמית ואירע אבדן מידע כניסה, התצוגה המקדימה מוסתרת, וזאת כאמצעי זהירות מפני התקפות JavaScript.</em>\n\n<strong>אם זה ניסיון תקין להציג תצוגה מקדימה, יש לנסות שוב.</strong>\nאם זה עדיין לא עובד, יש לנסות [[Special:UserLogout|לצאת מהחשבון]] ולהיכנס שוב.",
+       "expand_templates_preview_fail_html_anon": "<em>מכיוון שב{{GRAMMAR:תחילית|{{SITENAME}}}} מופעלת הצגת HTML גולמית ולא נכנסת לחשבון, התצוגה המקדימה מוסתרת, וזאת כאמצעי זהירות מפני התקפות JavaScript.</em>\n\n<strong>אם זה ניסיון תקין להציג תצוגה מקדימה, יש [[Special:UserLogin|להיכנס לחשבון]] ולנסות שוב.</strong>",
        "pagelanguage": "בורר שפת הדף",
        "pagelang-name": "דף",
        "pagelang-language": "שפה",
        "log-name-pagelang": "יומן שינוי שפה",
        "log-description-pagelang": "זהו יומן של שינויים בשפות של הדפים.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|שינה|שינתה}} את שפת הדף $3 מ$4 ל$5.",
-       "default-skin-not-found": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם, שמוגדר ב־<code dir=\"ltr\">$wgDefaultSkin</code> כ־<code>$1</code>, אינו זמין.\n\nנראה שההתקנה שלכם כוללת את העיצובים הבאים. ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל אותם ולבחור את עיצוב ברירת המחדל.\n\n$2\n\n; אם כרגע התקנתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* שכפול (clone) אחד מהמאגרים ב־<code dir=\"ltr\">mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם אם אתם מפתחים של מדיה־ויקי.\n\n; אם כרגע שדרגתם את מדיה־ויקי:\n: מדיה־ויקי 1.24 וגרסאות חדשות יותר כבר לא מפעילות עיצובים מותקנים באופן אוטומטי (ראו [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery \"גילוי אוטומטי של עיצובים\" במדריך]). תוכלו להעתיק את השורות הבאות לתוך הקובץ <code>LocalSettings.php</code> כדי להפעיל את כל העיצובים המותקנים כעת:\n\n<pre dir=\"ltr\">$3</pre>\n\n; אם כרגע שיניתם את <code>LocalSettings.php</code>:\n: בדקו שנית האם עשיתם שגיאות הקלדה בשמות העיצובים.",
-       "default-skin-not-found-no-skins": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם, שמוגדר ב־<code dir=\"ltr\">$wgDefaultSkin</code> כ־<code>$1</code>, אינו זמין.\n\nאין לכם עיצובים מותקנים.\n\n; אם כרגע התקנתם או שדרגתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. מדיה־ויקי 1.24 וגרסאות חדשות יותר אינן כוללות עיצובים ב־git repository הראשי. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה‏‏־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* שכפול (clone) אחד ממאגרים ב־<code>mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם (אם אתם מפתחים של מדיה־ויקי). ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל עיצובים ולבחור את עיצוב ברירת המחדל.",
+       "default-skin-not-found": "×\90×\95פס! ×¢×\99צ×\95×\91 ×\91ר×\99רת ×\94×\9e×\97×\93×\9c ×¢×\91×\95ר ×\90תר ×\94×\95×\95×\99ק×\99 ×©×\9c×\9b×\9d, ×©×\9e×\95×\92×\93ר ×\91Ö¾<code dir=\"ltr\">$wgDefaultSkin</code> ×\9bÖ¾<code>$1</code>, ×\90×\99× ×\95 ×\96×\9e×\99×\9f.\n\nנר×\90×\94 ×©×\94×\94תקנ×\94 ×©×\9c×\9b×\9d ×\9b×\95×\9c×\9cת ×\90ת ×\94×¢×\99צ×\95×\91×\99×\9d ×\94×\91×\90×\99×\9d. ×¨×\90×\95 ×\9e×\99×\93×¢ ×\91×\93×£ [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"×\94×\92×\93רת ×¢×\99צ×\95×\91×\99×\9d\" ×\91×\9e×\93ר×\99×\9a] ×¢×\9c ×\94×\90פשר×\95ת ×\9c×\94פע×\99×\9c ×\90×\95ת×\9d ×\95×\9c×\91×\97×\95ר ×\90ת ×¢×\99צ×\95×\91 ×\91ר×\99רת ×\94×\9e×\97×\93×\9c.\n\n$2\n\n; ×\90×\9d ×\9bר×\92×¢ ×\94תקנת×\9d ×\90ת ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99:\n: × ×¨×\90×\94 ×©×\96×\95 ×\94תקנ×\94 ×\9eÖ¾git, ×\90×\95 ×\99ש×\99ר×\95ת ×\9eק×\95×\93 ×\94×\9eק×\95ר ×\91ש×\99×\98×\94 ×\90×\97רת ×\9b×\9cש×\94×\99. ×\91×\9eקר×\94 ×\94×\96×\94, ×\91×¢×\99×\94 ×\96×\95 ×¦×¤×\95×\99×\94. × ×¡×\95 ×\9c×\94תק×\99×\9f ×\9b×\9e×\94 ×¢×\99צ×\95×\91×\99×\9d ×\9e[https://www.mediawiki.org/wiki/Category:All_skins ×¡×¤×¨×\99×\99ת ×\94×¢×\99צ×\95×\91×\99×\9d ×©×\9c mediawiki.org], ×¢×\9cÖ¾×\99×\93×\99:\n:* ×\94×\95ר×\93ת [https://www.mediawiki.org/wiki/Download ×§×\95×\91×¥ ×\94Ö¾tar ×\9c×\94תקנ×\94], ×©×\9b×\95×\9c×\9c ×\9eספר ×¢×\99צ×\95×\91×\99×\9d ×\95×\94ר×\97×\91×\95ת. ×\91×\90פשר×\95ת×\9b×\9d ×\9c×\94עת×\99ק ×\95×\9c×\94×\93×\91×\99ק ×\9eת×\95×\9b×\95 ×\90ת ×ª×\99ק×\99×\99ת ×\94â\80\8fâ\80\8fÖ¾<code>skins/</code>.\n:* ×\94×\95ר×\93ת ×§×\91צ×\99 tar ×©×\9c ×¢×\99צ×\95×\91×\99×\9d ×¡×¤×¦×\99פ×\99×\99×\9d ×\9eÖ¾[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* ×©×\9bפ×\95×\9c (clone) ×\90×\97×\93 ×\9e×\94×\9e×\90×\92ר×\99×\9d ×\91Ö¾<code dir=\"ltr\">mediawiki/skins/*</code> ×\91×¢×\96רת git ×\9cת×\95×\9a ×ª×\99ק×\99×\99ת ×\94Ö¾<code dir=\"ltr\">skins/</code> ×\91×\94תקנת ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99 ×©×\9c×\9b×\9d.\n: ×\90×\9d ×ª×¢×©×\95 ×\96×\90ת, ×\96×\94 ×\9c×\90 ×\90×\9e×\95ר ×\9c×\94פר×\99×¢ ×\9câ\80\8fâ\80\8f×\9e×\90×\92ר ×\94Ö¾git ×©×\9c×\9b×\9d ×\90×\9d ×\90ת×\9d ×\9eפת×\97×\99×\9d ×©×\9c ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99.\n\n; ×\90×\9d ×\9bר×\92×¢ ×©×\93ר×\92ת×\9d ×\90ת ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99:\n: ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99 1.24 ×\95×\92רס×\90×\95ת ×\97×\93ש×\95ת ×\99×\95תר ×\9b×\91ר ×\9c×\90 ×\9eפע×\99×\9c×\95ת ×¢×\99צ×\95×\91×\99×\9d ×\9e×\95תקנ×\99×\9d ×\91×\90×\95פ×\9f ×\90×\95×\98×\95×\9e×\98×\99 (ר×\90×\95 [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery \"×\92×\99×\9c×\95×\99 ×\90×\95×\98×\95×\9e×\98×\99 ×©×\9c ×¢×\99צ×\95×\91×\99×\9d\" ×\91×\9e×\93ר×\99×\9a]). ×ª×\95×\9b×\9c×\95 ×\9c×\94עת×\99ק ×\90ת ×\94ש×\95ר×\95ת ×\94×\91×\90×\95ת ×\9cת×\95×\9a ×\94ק×\95×\91×¥ <code>LocalSettings.php</code> ×\9b×\93×\99 ×\9c×\94פע×\99×\9c ×\90ת ×\9b×\9c ×\94×¢×\99צ×\95×\91×\99×\9d ×\94×\9e×\95תקנ×\99×\9d ×\9bעת:\n\n<pre dir=\"ltr\">$3</pre>\n\n; ×\90×\9d ×\9bר×\92×¢ ×©×\99× ×\99ת×\9d ×\90ת <code>LocalSettings.php</code>:\n: ×\91×\93ק×\95 ×©× ×\99ת ×\94×\90×\9d ×¢×©×\99ת×\9d ×©×\92×\99×\90×\95ת ×\94ק×\9c×\93×\94 ×\91ש×\9e×\95ת ×\94×¢×\99צ×\95×\91×\99×\9d.",
+       "default-skin-not-found-no-skins": "×\90×\95פס! ×¢×\99צ×\95×\91 ×\91ר×\99רת ×\94×\9e×\97×\93×\9c ×¢×\91×\95ר ×\90תר ×\94×\95×\95×\99ק×\99 ×©×\9c×\9b×\9d, ×©×\9e×\95×\92×\93ר ×\91Ö¾<code dir=\"ltr\">$wgDefaultSkin</code> ×\9bÖ¾<code>$1</code>, ×\90×\99× ×\95 ×\96×\9e×\99×\9f.\n\n×\90×\99×\9f ×\9c×\9b×\9d ×¢×\99צ×\95×\91×\99×\9d ×\9e×\95תקנ×\99×\9d.\n\n; ×\90×\9d ×\9bר×\92×¢ ×\94תקנת×\9d ×\90×\95 ×©×\93ר×\92ת×\9d ×\90ת ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99:\n: × ×¨×\90×\94 ×©×\96×\95 ×\94תקנ×\94 ×\9eÖ¾git, ×\90×\95 ×\99ש×\99ר×\95ת ×\9eק×\95×\93 ×\94×\9eק×\95ר ×\91ש×\99×\98×\94 ×\90×\97רת ×\9b×\9cש×\94×\99. ×\91×\9eקר×\94 ×\94×\96×\94, ×\91×¢×\99×\94 ×\96×\95 ×¦×¤×\95×\99×\94. ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99 1.24 ×\95×\92רס×\90×\95ת ×\97×\93ש×\95ת ×\99×\95תר ×\90×\99× ×\9f ×\9b×\95×\9c×\9c×\95ת ×¢×\99צ×\95×\91×\99×\9d ×\91Ö¾git repository ×\94ר×\90ש×\99. × ×¡×\95 ×\9c×\94תק×\99×\9f ×\9b×\9e×\94 ×¢×\99צ×\95×\91×\99×\9d ×\9e[https://www.mediawiki.org/wiki/Category:All_skins ×¡×¤×¨×\99×\99ת ×\94×¢×\99צ×\95×\91×\99×\9d ×©×\9c mediawiki.org], ×¢×\9cÖ¾×\99×\93×\99:\n:* ×\94×\95ר×\93ת [https://www.mediawiki.org/wiki/Download ×§×\95×\91×¥ ×\94â\80\8fâ\80\8fÖ¾tar ×\9c×\94תקנ×\94], ×©×\9b×\95×\9c×\9c ×\9eספר ×¢×\99צ×\95×\91×\99×\9d ×\95×\94ר×\97×\91×\95ת. ×\91×\90פשר×\95ת×\9b×\9d ×\9c×\94עת×\99ק ×\95×\9c×\94×\93×\91×\99ק ×\9eת×\95×\9b×\95 ×\90ת ×ª×\99ק×\99×\99ת ×\94â\80\8fâ\80\8fÖ¾<code>skins/</code>.\n:* ×\94×\95ר×\93ת ×§×\91צ×\99 tar ×©×\9c ×¢×\99צ×\95×\91×\99×\9d ×¡×¤×¦×\99פ×\99×\99×\9d ×\9eÖ¾[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* ×©×\9bפ×\95×\9c (clone) ×\90×\97×\93 ×\9e×\9e×\90×\92ר×\99×\9d ×\91Ö¾<code>mediawiki/skins/*</code> ×\91×¢×\96רת git ×\9cת×\95×\9a ×ª×\99ק×\99×\99ת ×\94Ö¾<code dir=\"ltr\">skins/</code> ×\91×\94תקנת ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99 ×©×\9c×\9b×\9d.\n: ×\90×\9d ×ª×¢×©×\95 ×\96×\90ת, ×\96×\94 ×\9c×\90 ×\90×\9e×\95ר ×\9c×\94פר×\99×¢ ×\9câ\80\8fâ\80\8f×\9e×\90×\92ר ×\94Ö¾git ×©×\9c×\9b×\9d (×\90×\9d ×\90ת×\9d ×\9eפת×\97×\99×\9d ×©×\9c ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99). ×¨×\90×\95 ×\9e×\99×\93×¢ ×\91×\93×£ [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"×\94×\92×\93רת ×¢×\99צ×\95×\91×\99×\9d\" ×\91×\9e×\93ר×\99×\9a] ×¢×\9c ×\94×\90פשר×\95ת ×\9c×\94פע×\99×\9c ×¢×\99צ×\95×\91×\99×\9d ×\95×\9c×\91×\97×\95ר ×\90ת ×¢×\99צ×\95×\91 ×\91ר×\99רת ×\94×\9e×\97×\93×\9c.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (מופעל)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''מבוטל''')",
        "mediastatistics": "סטטיסטיקות קבצים",
index 6629e38..b5f4a8b 100644 (file)
        "otherlanguages": "Drugi jezici",
        "redirectedfrom": "(Preusmjereno s $1)",
        "redirectpagesub": "Preusmjeravanje",
+       "redirectto": "Preusmjerava na:",
        "lastmodifiedat": "Vrijeme i datum posljednje promjene na ovoj stranici: $2, $1",
        "viewcount": "Ova stranica je pogledana {{PLURAL:$1|$1 put|$1 puta}}.",
        "protectedpage": "Zaštićena stranica",
        "jumptonavigation": "orijentacija",
        "jumptosearch": "traži",
        "view-pool-error": "Ispričavamo se, poslužitelji su trenutačno preopterećeni.\nPreviše suradnika pokušava vidjeti ovu stranicu.\nMolimo malo pričekajte  prije nego što opet pokušate pristupiti ovoj stranici.\n\n$1",
+       "generic-pool-error": "Ispričavamo se, poslužitelji su trenutačno preopterećeni.\nPreviše suradnika pokušava vidjeti ovu stranicu.\nMolimo Vas malo pričekajte prije nego što opet pokušate pristupiti ovoj stranici.\n\n$1",
        "pool-timeout": "Istek vremena (''timeout'') čekajući zaključavanje",
        "pool-queuefull": "Red čekanja je pun",
        "pool-errorunknown": "Nepoznata pogrješka",
        "youhavenewmessages": "Imate $1 ($2).",
        "youhavenewmessagesfromusers": "Imate $1 {{PLURAL:$3||od $3 suradnika|od $3 suradnika}} ($2).",
        "youhavenewmessagesmanyusers": "Imate $1 od više suradnika ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|novu poruku|$1 nove poruke|$1 novih poruka}}",
+       "newmessageslinkplural": "{{PLURAL:$1|novu poruku|$1 nove poruke|999=novih poruka}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|posljednje uređivanje|posljednja $1 uređivanja|posljednjih $1 uređivanja}} na stranici za razgovor",
        "youhavenewmessagesmulti": "Imate nove poruke na $1",
        "editsection": "uredi",
        "nospecialpagetext": "<strong>Takva posebna stranica ne postoji.</strong>\n\nZa popis svih posebnih stranica posjetite [[Special:SpecialPages|ovdje]].",
        "error": "Pogreška",
        "databaseerror": "Pogreška baze podataka",
+       "databaseerror-text": "Pogrješka u bazi podataka.\nTo može ukazivati na pogrješku u softveru.",
+       "databaseerror-textcl": "Pogrješka u bazi podataka.",
+       "databaseerror-query": "Upit: $1",
+       "databaseerror-function": "Funkcija: $1",
        "databaseerror-error": "Pogrješka: $1",
        "laggedslavemode": "Upozorenje: na stranici se možda ne nalaze najnovije promjene.",
        "readonly": "Baza podataka je zaključana",
        "createaccount-text": "Netko je stvorio suradnički račun s Vašom adresom elektronske pošte na {{SITENAME}} ($4) nazvan \"$2\", s lozinkom \"$3\". Trebali biste se prijaviti i odmah promijeniti lozinku.\n\nMožete zanemariti ovu poruku ako je suradnički račun stvoren nenamjerno.",
        "login-throttled": "Nedavno ste se previše puta pokušali prijaviti.\nMolimo Vas pričekajte $1 prije nego što pokušate ponovno.",
        "login-abort-generic": "Vaša prijava bila je neuspješna - Prekinuto",
+       "login-migrated-generic": "Vaš se suradnički račun preselio, i Vaše suradničko ime više ne postoji u ovom wikiju.",
        "loginlanguagelabel": "Jezik: $1",
        "suspicious-userlogout": "Vaš zahtjev za odjavu je odbijen jer to izgleda kao da je poslan preko pokvarenog preglednika ili keširanog posrednika (proxyja).",
        "createacct-another-realname-tip": "Pravo ime nije obvezno. \nAko ga navedete, bit će korišteno za pripisivanje Vaših doprinosa.",
        "retypenew": "Ponovno unesite lozinku",
        "resetpass_submit": "Postavite lozinku i prijavite se",
        "changepassword-success": "Zaporka je uspješno postavljena!",
+       "changepassword-throttled": "Nedavno ste se previše puta pokušali prijaviti.\nMolimo Vas pričekajte $1 prije nego što pokušate ponovno.",
        "resetpass_forbidden": "Lozinka ne može biti promijenjena",
        "resetpass-no-info": "Morate biti prijavljeni da biste izravno pristupili ovoj stranici.",
        "resetpass-submit-loggedin": "Promijeni lozinku",
        "resetpass-submit-cancel": "Odustani",
        "resetpass-wrong-oldpass": "Pogrešna privremena ili trenutačna lozinka.\nMožda ste već uspješno promijenili Vašu lozinku ili ste zatražili novu privremenu lozinku.",
+       "resetpass-recycled": "Molimo Vas, promijenite zaporku u nešto drugačiju od Vaše trenutačne zaporke.",
+       "resetpass-temp-emailed": "Prijavljeni ste s privremenom zaporkom prijavljenom putem e-poruke.\nDa biste dovršili prijavu morate postaviti novu zaporku.",
        "resetpass-temp-password": "Privremena lozinka:",
        "resetpass-abort-generic": "Poništena je promjena zaporke.",
+       "resetpass-expired": "Istekla Vam je valjanost zaporke. Molimo Vas, potvrdite novu zaporku za prijavu.",
+       "resetpass-expired-soft": "Istekla vam je valjanost zaporke i trebate ju promijeniti. Molimo odaberite novu zaporku ili pritisnite na \"{{int:resetpass-submit-cancel}}\", za kasniju promjenu.",
+       "resetpass-validity-soft": "Zaporka Vam ne vrijedi: $1\n\nMolimo odaberite novu zaporku ili pritisnite na \"{{int:resetpass-submit-cancel}}\", za kasniju promjenu.",
        "passwordreset": "Ponovno postavi lozinku",
        "passwordreset-text-one": "Ispunite ovaj obrazac ako želite ponovno postaviti Vašu zaporku.",
        "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja da biste dobili privremenu zaporku e-poštom.}}",
        "changeemail-oldemail": "Trenutačna adresa e-pošte:",
        "changeemail-newemail": "Nova adresa e-pošte:",
        "changeemail-none": "(ništa)",
-       "changeemail-password": "Zaporka za {{SITENAME}}:",
+       "changeemail-password": "Zaporka za projekt {{SITENAME}}:",
        "changeemail-submit": "Promijeni E-mail",
+       "changeemail-throttled": "Nedavno ste se previše puta pokušali prijaviti.\nMolimo Vas pričekajte $1 prije nego što pokušate ponovno.",
        "bold_sample": "Podebljani tekst",
        "bold_tip": "Podebljani tekst",
        "italic_sample": "Kurzivni tekst",
        "querypage-disabled": "Ova posebna stranica onemogućena je jer bi usporila funkcioniranje projekta.",
        "booksources": "Pretraživanje po ISBN-u",
        "booksources-search-legend": "Traženje izvora za knjigu",
+       "booksources-search": "Traži",
        "booksources-text": "Ovdje je popis vanjskih poveznica na internetskim stranicama koje prodaju nove i rabljene knjige, ali mogu sadržavati i ostale podatke o knjigama koje tražite:",
        "booksources-invalid-isbn": "Čini se da dani ISBN nije valjan; provjerite greške kopirajući iz izvornika.",
        "specialloguserlabel": "Suradnik:",
        "unwatchthispage": "Prekini praćenje",
        "notanarticle": "Nije članak",
        "notvisiblerev": "Izmjena je obrisana",
-       "watchlist-details": "{{PLURAL:$1|$1 stranica|$1 stranice|$1 stranica}} se nalazi na popisu praćenja, ne brojeći stranice za razgovor.",
+       "watchlist-details": "{{PLURAL:$1|$1 stranica se nalazi|$1 stranice se nalaze|$1 stranica se nalazi}} na popisu praćenja, ne brojeći stranice za razgovor.",
        "wlheader-enotif": "Uključeno je izvješćivanje e-poštom.",
-       "wlheader-showupdated": "Stranice koje su promijenjene od Vašeg posljednjeg posjeta prikazane su '''podebljano'''",
+       "wlheader-showupdated": "Stranice koje su promijenjene od Vašeg posljednjeg posjeta prikazane su '''podebljano'''.",
        "wlnote": "Ovdje {{PLURAL:$1|je posljednja $1 promjena|su posljednje $1 promjene|je posljednjih $1 promjena}} u {{PLURAL:$2|posljednjem '''$2''' satu|posljednja '''$2''' sata|posljednjih '''$2''' sati}}, od $3, $4.",
        "wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
        "watchlist-options": "Izbornik popisa praćenja",
        "table_pager_first": "Prva stranica",
        "table_pager_last": "Zadnja stranica",
        "table_pager_limit": "Prikaži $1 slika po stranici",
-       "table_pager_limit_label": "Stavke po stranici:",
+       "table_pager_limit_label": "Broj stavki po stranici:",
        "table_pager_limit_submit": "Idi",
        "table_pager_empty": "Nema rezultata",
        "autosumm-blank": "uklonjen cjelokupni sadržaj stranice",
        "specialpages-group-wiki": "Wiki podaci i alati",
        "specialpages-group-redirects": "Preusmjeravajuće posebne stranice",
        "specialpages-group-spam": "Spam alati",
+       "specialpages-group-developer": "Alati za razvijatelje",
        "blankpage": "Prazna stranica",
        "intentionallyblankpage": "Ova stranica je namjerno ostavljena praznom",
        "external_image_whitelist": "#Ovaj redak ostavite točno ovakvim kakav je<pre>\n#Stavite ulomke s regularnim izrazom (samo dio koji ide između //) ispod\n#Ovo će biti usklađeno s URL-ovima vanjskih slika (hotlink)\n#Oni koji se poklapaju će biti prikazani kao slike, u suprotnom će biti prikazana samo poveznica do slike\n#Redovi koji počinju sa # smatraju se komentarom\n#Ovo je osjetljivo na velika slova\n\n#Stavite sve regularne izraze iznad ovog reda. Ostavite ovaj redak točno ovakvim kakav je</pre>",
index 21adac2..e81c941 100644 (file)
        "sharedupload": "Ez a fájl a(z) $1 megosztott tárhelyről származik, és más projektek is használhatják.",
        "sharedupload-desc-there": "Ez a fájl a $1 megosztott tárhelyről származik, és más projektek is használhatják.\nAz [$2 ottani leírólapján] további információkat találhatsz róla.",
        "sharedupload-desc-here": "Ez a fájl a $1 megosztott tárhelyről származik, és más projektek is használhatják.\nA [$2 fájl ottani leírólapjának] másolata alább látható.",
+       "sharedupload-desc-edit": "Ez a fájl a(z) $1 megosztott tárhelyről származik, és más projektek is használhatják.\nValószínűleg az [$2 ottani leírólapját] akartad szerkeszteni.",
        "filepage-nofile": "Nem létezik ilyen nevű fájl.",
        "filepage-nofile-link": "Nem létezik ilyen nevű fájl. [$1 Ide kattintva] feltölthetsz egyet.",
        "uploadnewversion-linktext": "Új változat feltöltése",
        "specialpages-group-wiki": "A wiki adatai és eszközei",
        "specialpages-group-redirects": "Átirányító speciális lapok",
        "specialpages-group-spam": "Spam eszközök",
+       "specialpages-group-developer": "Fejlesztői eszközök",
        "blankpage": "Üres lap",
        "intentionallyblankpage": "Ez a lap szándékosan maradt üresen",
        "external_image_whitelist": " #Ezt a sort hagyd pontosan így, ahogy van<pre>\n#Ide reguláris kifejezéseket írhatsz (azon részüket, amik a // közé mennek)\n#Ezek egyeztetve lesznek a külső képek URL-jeivel\n#Egyezés esetén képként fognak megjelenni, egyébként csak link fog rájuk mutatni\n#A #-tel kezdődő sorok megjegyzésnek számítanak\n#A kis- és nagybetűk nincsenek megkülönböztetve\n\n#A reguláris kifejezéseket ezen sor alá írd. Ezt a sort hagyd így, ahogy van.</pre>",
index d2b2948..03fc60e 100644 (file)
        "editwarning-warning": "Այս էջը լքելով դուք կարող եք կորցնել ձեր կատարած փոփոխությունները։\nԵթե դուք գրանցված եք համակարգում, կարող եք անջատել այս նախազգուշացումը ձեր նախընրությունների «{{int:prefs-editing}}» բաժնում։",
        "content-model-wikitext": "վիքիտեքստ",
        "content-model-javascript": "ՋավաՍկրիպտ",
+       "content-model-css": "ՍիԷսԷս",
        "undo-success": "Խմբագրումը կարող է հետ շրջվել։ Ստուգեք տարբերակների համեմատությունը ստորև, որպեսզի համոզվեք, որ դա է ձեզ հետաքրքրող փոփոխությունը և մատնահարեք «Հիշել էջը»՝ գործողությունն ավարտելու համար։",
        "undo-failure": "Խմբագրումը չի կարող հետ շրջվել միջանկյալ խմբագրումների ընդհարման պատճառով։",
        "undo-summary": "Հետ է շրջվում $1 խմբագրումը, որի հեղինակն է՝ [[Special:Contributions/$2|$2]] ([[User talk:$2|քննարկում]]) {{GENDER:$2|մասնակիցը|մասնակցուհին}}",
index 860c23e..26951bc 100644 (file)
        "right-protect": "Cambiar nivellos de protection e modificar paginas protegite in cascada",
        "right-editprotected": "Modificar paginas protegite con \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Modificar paginas protegite como \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Modificar le modello de contento de un pagina",
        "right-editinterface": "Modificar le interfacie de usator",
        "right-editusercssjs": "Modificar le files CSS e JS de altere usatores",
        "right-editusercss": "Modificar le files CSS de altere usatores",
        "action-viewmywatchlist": "vider le proprie observatorio",
        "action-viewmyprivateinfo": "vider le proprie information private",
        "action-editmyprivateinfo": "modificar le proprie information private",
+       "action-editcontentmodel": "modificar le modello de contento de un pagina",
        "nchanges": "$1 {{PLURAL:$1|modification|modificationes}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|desde le ultime visita}}",
        "enhancedrc-history": "historia",
        "specialpages-group-wiki": "Datos e instrumentos",
        "specialpages-group-redirects": "Redirection de paginas special",
        "specialpages-group-spam": "Instrumentos antispam",
+       "specialpages-group-developer": "Instrumentos pro disveloppatores",
        "blankpage": "Pagina vacue",
        "intentionallyblankpage": "Iste pagina es intentionalmente vacue",
        "external_image_whitelist": "  #Lassa iste linea exactemente como illo es<pre>\n#Pone fragmentos de expressiones regular (solmente le parte que va inter //) infra\n#Istes correspondera con le adresses URL de imagines externe (a ligamine directe)\n#Le correspondentes se monstrara como imagines, le alteres solmente como ligamines a imagines\n#Le lineas comenciante con # essera tractate como commentos\n#Isto non es sensibile al differentia inter majusculas e minusculas\n\n#Insere omne fragmentos regex super iste linea. Lassa iste linea exactemente como illo es</pre>",
        "expand_templates_generate_xml": "Monstrar arbore syntactic XML",
        "expand_templates_generate_rawhtml": "Monstrar HTML brute",
        "expand_templates_preview": "Previsualisation",
+       "expand_templates_preview_fail_html": "<em>Perque {{SITENAME}} ha HTML crude activate e il habeva un perdita de datos de session, le previsualisation es celate como precaution contra attaccos con JavaScript.</em>\n\n<strong>Si isto es un tentativa de previsualisation legitime, per favor essaya lo de novo.</strong>\nSi illo ancora non functiona, essaya [[Special:UserLogout|clauder le session]] e aperir un nove session.",
+       "expand_templates_preview_fail_html_anon": "<em>Perque {{SITENAME}} ha HTML crude activate e tu non ha aperite session, le previsualisation es celate como precaution contra attaccos con JavaScript.</em>\n\n<strong>Si isto es un tentativa de previsualisation legitime, per favor [[Special:UserLogin|aperi session]] e essaya lo de novo.</strong>",
        "pagelanguage": "Selector de lingua de pagina",
        "pagelang-name": "Pagina",
        "pagelang-language": "Lingua",
index 7282150..e4f9b88 100644 (file)
        "specialpages-group-wiki": "Data dan peralatan",
        "specialpages-group-redirects": "Pencarian dan pengalihan",
        "specialpages-group-spam": "Peralatan spam",
+       "specialpages-group-developer": "Alat Pengembang",
        "blankpage": "Halaman kosong",
        "intentionallyblankpage": "Halaman ini sengaja dibiarkan kosong dan digunakan di antaranya untuk pengukuran kinerja, dan lain-lain.",
        "external_image_whitelist": "#Biarkan baris ini sebagaimana adanya<pre>\n#Gunakan fragmen-fragmen ekspresi regular (hanya bagian di antara //) di bawah ini\n#Fragmen-fragmen ini akan dicocokkan dengan URL dari gambar-gambar eksternal (yang dihubungkan langsung)\n#Fragmen yang cocok akan ditampilkan sebagai gambar, sisanya hanya sebagai pranala saja\n#Baris yang diawali dengan # akan diperlakukan sebagai baris komentar\n#Ini tidak membedakan huruf besar dan kecil\n#Letakkan semua fragmen ekspresi regular di bawah baris ini. Biarkan baris ini sebagaimana adanya</pre>",
        "feedback-error1": "Galat: Hasil tidak dikenal dari API",
        "feedback-error2": "Galat: Penyuntingan gagal",
        "feedback-error3": "Error: API tidak merespons",
-       "feedback-thanks": "Terima kasih! Umpan balik Anda telah diposting ke halaman \"[$2 $1]\".",
+       "feedback-thanks": "Terima kasih! Umpan balik Anda telah dikirimkan ke halaman \"[$2 $1]\".",
        "feedback-close": "Selesai",
        "feedback-bugcheck": "Hebat! Hanya periksa bahwa itu bukan satu di antara [$1 bug yang telah dikenal].",
        "feedback-bugnew": "Saya telah memeriksa. Laporkan bug baru",
index 09825c3..3ed9f04 100644 (file)
        "right-protect": "Cambia i livelli di protezione e modifica pagine protette ricorsivamente",
        "right-editprotected": "Modifica pagine protette con \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Modifica pagine protette con \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Modifica il modello di contenuto di una pagina",
        "right-editinterface": "Modifica l'interfaccia utente",
        "right-editusercssjs": "Modifica i file CSS e JS di altri utenti",
        "right-editusercss": "Modifica i file CSS di altri utenti",
        "action-viewmywatchlist": "vedere i propri osservati speciali",
        "action-viewmyprivateinfo": "vedere i propri dati personali",
        "action-editmyprivateinfo": "modificare i propri dati personali",
+       "action-editcontentmodel": "modificare il modello di contenuto di una pagina",
        "nchanges": "$1 {{PLURAL:$1|modifica|modifiche}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|dall'ultima visita}}",
        "enhancedrc-history": "cronologia",
        "specialpages-group-wiki": "Dati e strumenti",
        "specialpages-group-redirects": "Pagine speciali che reindirizzano",
        "specialpages-group-spam": "Strumenti contro lo spam",
+       "specialpages-group-developer": "Strumenti per gli sviluppatori",
        "blankpage": "Pagina vuota",
        "intentionallyblankpage": "Questa pagina è lasciata volutamente vuota.",
        "external_image_whitelist": " #Lasciare questa riga esattamente com'è<pre>\n#Inserire i frammenti delle espressioni regolari (solo la parte che va fra //) di seguito\n#Queste verranno messe a confronto con gli indirizzi URL delle immagini esterne (hotlinked)\n#Le corrispondenze saranno mostrate come immagini, altrimenti verrà mostrato solo un collegamento\n#Le righe che iniziano con # sono considerate dei commenti\n#La differenza tra maiuscole e minuscole non è significativa\n\n#Inserire sopra questa riga tutti i frammenti di regex. Lasciare questa riga esattamente com'è</pre>",
        "log-name-pagelang": "Modifiche lingua",
        "log-description-pagelang": "Questo è un registro delle modifiche alla lingua delle pagine.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha modificato}} la lingua della pagina $3 da $4 a $5.",
-       "default-skin-not-found": "Oops! La skin predefinita per il tuo wiki, definita in <code dir=\"ltr\">$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nLa tua installazione sembra includere le seguenti skin. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.\n\n$2\n\n; Se hai appena installato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code dir=\"ltr\">skins/</code> da lì.\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code>skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki.\n\n; Se hai appena aggiornato MediaWiki:\n: MediaWiki 1.24 e versioni successive non abilità più automaticamente le skin installate (vedi [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automatico skin]). Puoi copiare le seguenti linee nel <code>LocalSettings.php</code> per abilitare tutte le skin attualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se hai appena modificato <code>LocalSettings.php</code>:\n: Ricontrolla i nomi delle skin per errori di battitura.",
-       "default-skin-not-found-no-skins": "Oops! La skin predefinita per il tuo wiki, definita in <code>$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nNon hai skin installate.\n\n; Se hai appena installato o aggiornato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. MediaWiki 1.24 e versioni successive non include alcuna skin nel repository principale. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code>skins/</code> da lì.\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code dir=\"ltr\">skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.",
+       "default-skin-not-found": "Oops! La skin predefinita per il tuo wiki, definita in <code dir=\"ltr\">$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nLa tua installazione sembra includere le seguenti skin. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.\n\n$2\n\n; Se hai appena installato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code dir=\"ltr\">skins/</code> da lì.\n:* Scaricando tarball di singole skin da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code>skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki.\n\n; Se hai appena aggiornato MediaWiki:\n: MediaWiki 1.24 e versioni successive non abilità più automaticamente le skin installate (vedi [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automatico skin]). Puoi copiare le seguenti linee nel <code>LocalSettings.php</code> per abilitare tutte le skin attualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se hai appena modificato <code>LocalSettings.php</code>:\n: Ricontrolla i nomi delle skin per errori di battitura.",
+       "default-skin-not-found-no-skins": "Oops! La skin predefinita per il tuo wiki, definita in <code>$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nNon hai skin installate.\n\n; Se hai appena installato o aggiornato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. MediaWiki 1.24 e versioni successive non include alcuna skin nel repository principale. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code>skins/</code> da lì.\n:* Scaricando tarball di singole skin da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code dir=\"ltr\">skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilitata)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilitata''')",
        "mediastatistics": "Statistiche relative ai file multimediali",
index 0cfd5f8..d70104e 100644 (file)
        "content-model-text": "ჩვეულებრივი ტექსტი",
        "content-model-javascript": "ჯავასკრიპტი",
        "content-model-css": "CSS",
+       "duplicate-args-category": "გვერდები, რომლებიც იყენებენ დუბლიკატ არგუმენტებს თარგების გამოძახებისას",
+       "duplicate-args-category-desc": "გვერდები, რომლებიც იყენებენ დუბლიკატ არგუმენტებს თარგების გამოძახებისას, როგორებიც არის <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ან <code><nowiki>{{foo|bar|1=bar}}</nowiki></code>.",
        "expensive-parserfunction-warning": "ყურადღება. მოცემული გვერდი შეიცავს ძალიან ბევრ მძიმე ფუნქციას.\n\nგამოძახებათა რაოდენობა შეზღუდულია $2 დონეზე.ამ შემთხვევაში უნდა გაკეთდეს  $1 გამოძახება.",
        "expensive-parserfunction-category": "გვერდი ძალიან ბევრი მძიმე ფუნქციის მოთხოვნით",
        "post-expand-template-inclusion-warning": "ყურადღება. ჩართული თარგების ზომა ძალიან დიდია. ზოგი თარგი შეიძლება დარჩეს გათიშული.",
        "editcomment": "რედაქტირება განმარტებული იყო როგორც: \"''$1''\".",
        "revertpage": "[[Special:Contributions/$2|$2]]-ის რედაქტირება გაუქმდა; აღდგა ბოლოს [[User:$1|$1]]-ის მიერ რედაქტირებული ვერსია",
        "revertpage-nouser": "მომხმარებლის (მომხმარებლის სახელი დამალულია) ცვლილებები დაბრუნებულია ვერსიაზე {{GENDER:$1|[[User:$1|$1]]}}",
-       "rollback-success": "á\83\92á\83\90á\83£á\83¥á\83\9bá\83\93á\83\90 á\83¨á\83\94á\83¡á\83¬á\83\9dრება $1; დაბრუნება ვერსიაზე $2.",
+       "rollback-success": "á\83\92á\83\90á\83£á\83¥á\83\9bá\83\93á\83\90 á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98რება $1; დაბრუნება ვერსიაზე $2.",
        "sessionfailure-title": "სეანსის შეცდომა",
        "sessionfailure": "ჩანს, რომ პრობლემაა თქვენი რეგისტრაციის სესიისათვის;\nეს მოქმედება შეჩერდა თქვენი სესიაში შემოჭრის თავიდან ასაცილებლად.\nგთხოვთ, დააწკაპუნოთ ღილაკს \"უკან\" და თავიდან ჩართოთ გვერდი, რომლიდანაც შემოხვედით და სცადოთ განმეორებით.",
        "protectlogpage": "დაცვის ისტორია",
        "specialpages-group-wiki": "მონაცემები და ინსტრუმენტები",
        "specialpages-group-redirects": "სპეცგვერდების გადამისამართება",
        "specialpages-group-spam": "ინსტრუმენტები სპამის წინააღმდეგ",
+       "specialpages-group-developer": "შემქმნელის ხელსაწყოები",
        "blankpage": "ცარიელი გვერდი",
        "intentionallyblankpage": "ეს გვერდი სპეციალურად დარჩა ცარიელი",
        "external_image_whitelist": "  #დატოვეთ ეს ხაზი ისე, როგორც არის <pre>\n#განათვსეთ აქ რეგულარულ გამოთქმათა ფრაგმენტები (ისინი, რომლებიც // შორის იმყოფება)\n#ისინი იქნებიან შეფარდებულები გარე გამოსახულებათა URL-თან.\n#მოგერგებული იქნება ნაჩვენები გამოსახულებათა სახით, ხოლო სხვები ბმულების სახით.\n#ხაზები, რომლებიც იწყება #, ითვლება კომენტარად.\n#ხაზები გრძნობადები არიან რეგისტრისადმი.</pre>",
index 6a49891..d3c9690 100644 (file)
        "diff-multi-manyusers": "($2-(ден<sup>4</sup>) көп {{PLURAL:$2|қатысуышының|қатысушының}} арадағы {{PLURAL:$1|бір түзетуі|$1 түзетуі}} көрсетілмеген)",
        "difference-missing-revision": "Бұл ($1) {{PLURAL:$2|нұсқа|$2 нұсқалар}} айырмашылығы табылмады.\n\n\nБұл әлте жойылған беттің нұсқалар айырмашылығының сілтемесі.\nЕгжей-тегжейін [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} жою журналынан] таба аласыз.",
        "searchresults": "Іздеу нәтижелері",
-       "searchresults-title": "\"$1\" сұранымына табылған нәтижелер",
+       "searchresults-title": "«$1» сұранымына табылған нәтижелер",
        "titlematches": "Бет атауы сәйкес келеді",
        "textmatches": "Бет мәтіні сәйкес келеді",
        "notextmatches": "Еш бет мәтіні сәйкес емес",
        "searchrelated": "қатысты",
        "searchall": "барлық",
        "showingresults": "Төменде нөмір '''$2''' орнынан бастап барынша '''$1''' нәтиже көрсетіледі.",
+       "search-showingresults": "{{PLURAL:$4|Табылған <strong>$3</strong> нәтиженің <strong>$1</strong> нәтижесі көрсетілген|Табылған <strong>$3</strong> нәтиженің <strong>$1 - $2</strong> аралығы көрсетілген}}",
        "search-nonefound": "Сұрауға сәйкес нәтижелер табылмады.",
        "powersearch-legend": "Кеңейтілген іздеу",
        "powersearch-ns": "Атау кеңістіктері бойынша іздеу:",
        "license": "Лицензияландыруы:",
        "license-header": "Лицензияландыруы",
        "nolicense": "Ештеңе таңдалмаған",
+       "licenses-edit": "Лицензия талғауларын өңдеу",
        "license-nopreview": "(Қарап шығу жетімді емес)",
        "upload_source_url": "(жарамды, баршаға қатынаулы URL)",
        "upload_source_file": "(компьютеріңіздегі файл)",
        "blocklogtext": "Бұл қатысушыларды бұғаттау және бұғаттауынан босату әрекеттерінің журналы.\nӨздіктік бұғатталған IP мекенжайлар тізімделмеген.\nҚазіргі уақыттағы белсенді тиымдар мен бұғаттауларды [[Special:BlockList|бұғаттау тізімінен]] қараңыз.",
        "unblocklogentry": "$1 есімді қатысушыны бұғаттауынан босатты",
        "block-log-flags-anononly": "тек аноним қатысушылар",
-       "block-log-flags-nocreate": "тіркелу өшірілген",
+       "block-log-flags-nocreate": "тіркелуін өшіріді",
        "block-log-flags-noautoblock": "автобұғаттау өшірілген",
        "block-log-flags-noemail": "е-пошта өшірілген",
        "block-log-flags-nousertalk": "өз талқылау бетін өңдей алмайтындай ету",
        "spambot_username": "MediaWiki spam cleanup",
        "spam_reverting": "$1 дегенге сілтемелері жоқ соңғы нұсқасына қайтарылды",
        "spam_blanking": "$1 дегенге сілтемелері бар барлық түзетулер тазартылды",
-       "pageinfo-title": "\"$1\" беті туралы мәлімет",
+       "pageinfo-title": "«$1» беті туралы мәлімет",
        "pageinfo-header-basic": "Негізгі ақпарат",
        "pageinfo-header-edits": "Өңдеу тарихы",
        "pageinfo-header-restrictions": "Бет қорғалуы",
        "logentry-delete-event": "$1 $3 бетіндегі {{PLURAL:$5|журнал оқиғасы|$5 журнал оқиғасы}} көрінісін {{GENDER:$2|өзгертті}}: $4",
        "logentry-delete-revision": "$1 $3 бетіндегі {{PLURAL:$5|нұсқа|$5 нұсқа}} көрінісін {{GENDER:$2|өзгертті}}: $4",
        "logentry-suppress-event": "$1 $3 бетіндегі {{PLURAL:$5|журнал оқиғасы|$5 журнал оқиғасы}} көрінісін құпия түрде {{GENDER:$2|өзгертті}}: $4",
-       "revdelete-content-hid": "мағлұмат жасырылған",
+       "revdelete-content-hid": "мағлұматын жасырыды",
        "revdelete-summary-hid": "өңдеу түйіндемесі жасырылған",
        "revdelete-uname-hid": "қатысушы есімі жасырылған",
        "revdelete-content-unhid": "мағлұматы жасырылмаған",
        "logentry-newusers-autocreate": "$1 қатысушы аккаунтын автоматты түрде {{GENDER:$2|тіркеді}}",
        "logentry-rights-rights": "$1 $3 үшін топ мүшелігін $4 дегеннен $5 дегенге {{GENDER:$2|өзгерті}}",
        "logentry-rights-rights-legacy": "$1 $3 үшін топ мүшелігін {{GENDER:$2|өзгерті}}",
+       "logentry-upload-upload": "$1 $3 файлын {{GENDER:$2|жүктеді}}",
        "rightsnone": "(ешқандай)",
        "revdelete-summary": "өңдеменің қысқаша мазмұндамасы",
        "feedback-subject": "Тақырып:",
index 3bc4dee..60b7594 100644 (file)
@@ -41,7 +41,8 @@
                        "Infinity",
                        "Bluemersen",
                        "Revi",
-                       "Namoroka"
+                       "Namoroka",
+                       "양념파닭"
                ]
        },
        "tog-underline": "링크에 밑줄:",
        "specialpages-group-wiki": "데이터와 도구",
        "specialpages-group-redirects": "넘겨주기 특수 문서",
        "specialpages-group-spam": "스팸 처리 도구",
+       "specialpages-group-developer": "개발자 도구",
        "blankpage": "빈 문서",
        "intentionallyblankpage": "일부러 비워 둔 문서입니다.",
        "external_image_whitelist": " #이 줄은 그대로 두십시오<pre>\n#정규 표현식(// 사이에 있는 부분)을 아래에 입력하세요.\n#이 목록은 바깥 그림의 URL과 대조할 것입니다.\n#이 목록과 일치하는 것은 그림이 직접 보여지지만, 그렇지 않은 경우 그림을 가리키는 링크만 보이게 될 것입니다.\n#\"#\" 문자에서 줄의 끝까지는 주석입니다\n#이 목록은 대소문자를 구별하지 않습니다\n\n#모든 정규 표현식은 이 줄 위에 넣어 주십시오. 그리고 이 줄은 그대로 두십시오.</pre>",
        "api-error-stashfailed": "내부 오류: 서버가 임시 파일을 저장하지 못했습니다.",
        "api-error-publishfailed": "내부 오류: 서버가 임시 파일을 게시하지 못했습니다.",
        "api-error-stasherror": "파일을 안전한 곳으로 업로드 하는 동안 오류가 발생했습니다.",
+       "api-error-stashnotloggedin": "파일을 업로드하기 위해 로그인이 필요합니다.",
        "api-error-timeout": "서버가 제 시간 내에 응답하지 않았습니다.",
        "api-error-unclassified": "알 수 없는 오류가 발생했습니다.",
        "api-error-unknown-code": "알 수 없는 오류: \"$1\"",
index 66599ff..65fa28a 100644 (file)
        "viewhelppage": "De Hölpsigg aanluure",
        "categorypage": "De Saachjruppesigg aanluure",
        "viewtalkpage": "Klaaf aanluure",
-       "otherlanguages": "En ander Schprooche",
+       "otherlanguages": "En ander Schprohche",
        "redirectedfrom": "(Ömjeleit vun $1)",
        "redirectpagesub": "Ömleidongssigg",
        "redirectto": "Ömleide op:",
        "viewsourcetext": "Heh es dä Sigg ier Wikitex zom Belooere un Koppeere:",
        "viewyourtext": "Do kanns Ding Änderonge aan heh dä Sigg beloore un kopeere:",
        "protectedinterface": "Op dä Sigg heh steiht Tex usem Interface vun de Wiki-Soffwär. Dröm es die jäje Änderunge jeschötz, domet keine Mess domet aanjestallt weed.",
-       "editinginterface": "<strong>Opjepass:</strong>\nOp dä Sigg heh steiht Tex uß em Ingerfäiß vun de Wiki-Soffwär. Dröm es\ndie jäje Änderunge jeschötz, domet keine Mess domet aanjestallt weed.\nNor de Wiki-Köbesse künne se ändere. Denk dran, heh Ändere deit et\nUssinn un de Wööt ändere met dänne et Wiki op de Metmaacher un de\nBesöker drop aankütt!\n\nWann De die en Ding Shprooch övversäze wellß, do jangk op\n<code lang=\"en\">[//translatewiki.net/wiki/Main_Page?setlang=ksh translatewiki.net]</code>,\nwoh et MediaWiki Ingerfäiß en alle Shprooche översaz weedt.\n\nWann De weße wells, wat dä Täx heh bedügg, do häß De en Schangß, dat De op\n<code lang=\"en\">//www.mediawiki.org/wiki/Manual:Interface/{{BASEPAGENAMEE}}?setlang=ksh</code>\njet doh drövver fenge kanns, udder op\n<code lang=\"en\">//translatewiki.net/wiki/MediaWiki:{{BASEPAGENAMEE}}/qqq?setlang=ksh</code>",
+       "editinginterface": "<strong>Opjepass:</strong>\nOp dä Sigg heh schteiht Täx uß de Beehnbovverfläsch vum Wiki. Dröm es\ndi jähje et Ändere jeschöz, domet keine Meß domet jemaat weed.\nNor de Wiki-Köhbeße künne se ändere. Denk dran, heh Ändere deit et\nUssinn un de Wöht ändere, met dänne et Wiki op de Metmaacher un de\nBesöhker drop aankütt!\n\nWann De di en Ding Schprohch övversäze wellß, do jangk op\n<code lang=\"en\" xml:lang=\"en\">[//translatewiki.net/wiki/Main_Page?setlang=ksh translatewiki.net]</code>,\nwoh et MediaWiki en alle Schprohche översaz weedt.\n\nWann De weße wells, wat dä Täx heh bedügg, do häß De en Schangß, dat De op\n<code lang=\"en\" xml:lang=\"en\">//www.mediawiki.org/wiki/Manual:Interface/{{BASEPAGENAMEE}}?setlang=ksh</code>\njet doh drövver fenge kanns, udder op\n<code lang=\"en\" xml:lang=\"en\">//translatewiki.net/wiki/MediaWiki:{{BASEPAGENAMEE}}/qqq?setlang=ksh</code>",
+       "translateinterface": "Övversäzonge för <stron>alle</strong> Wikis jonn blohß op [//translatewiki.net/ translatewiki.net], woh mer MedijaWiki övversaz weed.",
        "cascadeprotected": "Die Sigg es jeschöz, un mer kann se nit ändere. Se es en en Schotz-Kaskad enjebonge, zosamme met dä {{PLURAL:$1|Sigg|Sigge}}:\n$2",
        "namespaceprotected": "Do darfs Sigge em Appachtemang „$1“ nit ändere.",
        "customcssprotected": "Do darfs di CSS-Sigg heh nit ändere. Se jehööt enem andere Metmacher un es e Stöck funn dämm sing eije Enstellunge.",
        "createaccount-text": "Einer hät Desch als Medmaacher „$2“ {{GRAMMAR:em|{{SITENAME}}}} aanjemelldt.\nDat es e Wiki, un De fengks et onger däm URL:\n $4\nDat Passwoot „$3“ hät sesch dat Wiki för Disch usjewörfelt.\nDon jlisch enlogge un donn et ändere.\n\nWann Dat all böömesch Dörver för Desch sin, da fojeß heh di\ne-mail eijfach. Wann De en däm Wikki nit metmaache wells, och.",
        "login-throttled": "Do häs zo öff, zo vill, un zo lang en de letzde Zick probeet, ennzelogge.\nWaad e Wielsche ävver $1, ih dat De et wider versöhks.",
        "login-abort-generic": "Dat Enlogge hät nit jeflup.",
-       "loginlanguagelabel": "Sproch: $1",
+       "loginlanguagelabel": "Schprohch: $1",
        "suspicious-userlogout": "Do bes '''nit''' ußjelogg.\nEt süht us, wi wann ene kappodde Brauser udder <i lang=\"en\">proxy</i>ẞööver met Zwescheschpeischer noh däm Ußlogge jefrooch hät.",
        "createacct-another-realname-tip": "Dä reschteje Nahme kam_mer fott lohße.\n\nWann dä aanjejovve es, weet_e jebruch, öm öffentlesch de Schriiver för Beidrääsch ze nänne.",
        "pt-login": "Enlogge",
        "post-expand-template-argument-category": "Sigge met övverjange Parrammeeter fun Schablone",
        "parser-template-loop-warning": "Schablon roofe sesch em Kringel op: [[$1]]",
        "parser-template-recursion-depth-warning": "Schablone refe sesch zo öff sellver op ($1)",
-       "language-converter-depth-warning": "Zoh vill Verschachtelunge (övver $1) beim Täx-Ömwandelle vun ein Shprooch en andere.",
+       "language-converter-depth-warning": "Zoh vill Verschachtelonge (övver $1) beim Täx-Ömwandelle vun eine Schprohch udder Schrevv en en anndere.",
        "node-count-exceeded-category": "Sigge, woh dä <i lang=\"en\" xml:lang=\"en\">node-count</i> övverschredde es",
        "node-count-exceeded-warning": "Heh di Sigg hät dä <i lang=\"en\" xml:lang=\"en\">node-count</i> övverschredde",
        "expansion-depth-exceeded-category": "Sigge, woh de <i lang=\"en\" xml:lang=\"en\">expansion depth</i> övverschredde es",
        "expansion-depth-exceeded-warning": "Heh di Sigg hät de <i lang=\"en\" xml:lang=\"en\">expansion depth</i> övverschredde",
        "parser-unstrip-loop-warning": "Ene Befähl em Täx betrick sesch op sesch sellef.",
        "parser-unstrip-recursion-limit": "Ene Befähl em Täx es mieh wi {{PLURAL:$1|eijmohl|$1 Mohl|jaa nit}} met  sesch sellef verschachtelt.",
-       "converter-manual-rule-error": "Doh es ene Fähler en ene händesche Önwandelongsrääjel zwesche de Schprooche.",
+       "converter-manual-rule-error": "Doh es ene Fähler en ene händesche Önwandelongsrääjel zwesche de Schprohche.",
        "undo-success": "De Änderung könnte mer zeröck nämme. Beloor Der de Ungerscheid un dann donn di Sigg avspeichere, wann De dengks, et es en Oodenung esu.",
        "undo-failure": "Dat kunnt mer nit zeröck nämme, dä Afschnedd wood enzwesche ald widder beärbeidt.",
        "undo-norev": "Do ka'mer nix zeröck nämme. Di Version jidd_et nit, odder se es verstoche odder fottjeschmesse woode.",
        "powersearch-togglelabel": "&nbsp;",
        "powersearch-toggleall": "Övverall Höhksche draan maache",
        "powersearch-togglenone": "All Höhksche fott nämme",
+       "powersearch-remember": "Di Ußwahl faßhallde för schpääder wider dermet ze söhke.",
        "search-external": "Söke fun Ußerhallef",
        "searchdisabled": "Dat Söhke hee {{GRAMMAR:en|{{SITENAME}}}} es em Momang avjeschalt.\nDat weed op dänne ẞööver ad ens jemaat, domet de Lass op inne nit ze jroß weed,\nun winnischsdens dat normale Sigge Oprofe flöck jenoch jeiht.\n\nEhr künnt esu lang övver en Söhkmaschin vun usserhalv emmer noch\nSigge us {{GRAMMAR:Dative|{{ucfirst:{{SITENAME}}}}}} finge.\nEt es nit jesaht,\ndat dänne ehr Daate topaktoell sin,\nävver et es bäßer wi jaa_nix.",
        "search-error": "An error has occurred while searching: $1",
        "preferences": "ming Enstellunge",
        "mypreferences": "Enstellunge",
        "prefs-edits": "Aanzahl Änderunge am Wiki:",
-       "prefsnologintext2": "Do mööts ald $1, öm Ding Enschtällonge ze verändere.",
+       "prefsnologintext2": "Donn ennlogge, öm Ding Enschtällonge ze verändere.",
        "prefs-skin": "Et Ussinn",
        "skin-preview": "Vör-Ansich",
        "datedefault": "Ejaal - kein Vörliebe",
        "prefs-registration": "Aanjemeldt zick",
        "prefs-registration-date-time": "dem $2 öm $3 Uhr",
        "yourrealname": "Dinge richtije Name *",
-       "yourlanguage": "Di Schprooch, di et Wiki kalle soll:",
+       "yourlanguage": "Di Schprohch, di et Wiki kalle soll:",
        "yourvariant": "Der Dijaläk, de Schriefwies, de Zoot Schprohch för der Enhald:",
        "prefs-help-variant": "Der Dijalägg udder de Schriefwies udder de Zoot Schprohch, di De för der Enhald vun Sigge am leevsde häß.",
        "yournick": "Ding&nbsp;„Ongerschreff“&nbsp;*",
        "gender-female": "Dat Su-wi-De-heiß schriiv heh em Wiki met.",
        "prefs-help-gender": "* Moß mer nit aanjävve, un dat kritt de janne Welt ze sinn, nit nur Do allein.",
        "email": "<i lang=\"en\">e-mail</i>",
-       "prefs-help-realname": "* Dinge richtije Name — kanns De fott looße — wann De en ävver nenne wells, dann weed dä jebruch, öm Ding Beidräch domet ze schmöcke.",
+       "prefs-help-realname": "Dinge rechteje Nahme kanns De fott lohße.\nWann De en ävver nenne wells, dann kann dä jebruch weede, öm Ding Beidrähch domet ze schmöcke.",
        "prefs-help-email": "Ding <i lang=\"en\">e-mail</i> Adress - kanns De fottlooße, un se es för Andre nit ze sinn - mäht et ävver müjjelich, Der e neu Passwoot ze schecke, wann De et ens verjäße häß.",
        "prefs-help-email-others": "Do kannß och zohlohße, dat mer Der domet övver Ding Metmaacherklaafsigg en <i lang=\"en\">e-mail</i> schecke kann. Esu künne ander Metmaacher met Der en Kontak kumme, ohne dat se Dinge Name oder Ding <i lang=\"en\">e-Mail</i> Adress kenne mööte.",
        "prefs-help-email-required": "Do moß en <i lang=\"en>e-mail</i>-Addräß aanjevve.",
        "right-deletedtext": "Fotjeschmeße Täx un Ungerscheid zwesche de verschtoche Versione aanloore",
        "right-browsearchive": "Noh fottjeschmesse Sigge söke",
        "right-undelete": "Fottjeschmeße Sigge widder zeröck holle",
-       "right-suppressrevision": "Versione vun Sigge beloore un zeröck holle, di sujaa för de Wiki-Köbesse verstoche sin",
+       "right-suppressrevision": "Versione vun Sigge beloore, verschteische, un zeröck holle, di sujaa för de Wiki-Köhbeße verstoche sin",
        "right-viewsuppressed": "Beloor de Väsjohne, di vun jeedem verschtoche sin.",
        "right-suppressionlog": "De private Logböcher aanloore",
        "right-block": "Medmaacher Sperre, un domet am Schrive hindere",
        "recentchanges-legend-heading": "'''Lejänd:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Loor och noh de [[Special:NewPages|Leß met de neue Sigge]])",
        "recentchanges-legend-plusminus": "(''±123'')",
-       "rcnotefrom": "Hee {{PLURAL:$1|es ein|sin bes op <strong>$1</strong>|es keine}} fun de Änderunge zick dem <strong>$3</strong> öm <strong>$4</strong> Uhr opjelėß.",
+       "rcnotefrom": "Hee {{PLURAL:$5|es ein|sin bes op <strong>$1</strong>|es keine}} fun de Änderunge zick dem <strong>$3</strong> öm <strong>$4</strong> Uhr opjelėß.",
        "rclistfrom": "Zeich de Änderunge vum $3 $2 aan",
        "rcshowhideminor": "$1 klein Mini-Änderunge",
        "rcshowhideminor-show": "Zeisch",
        "pager-older-n": "{{PLURAL:$1|vörrije|vörrije $1}}",
        "suppress": "Versteiche",
        "querypage-disabled": "Heh di Extrasigg es ußjeschalldt, domet dä Server jet winnijer ze brassele hät.",
+       "apihelp-no-such-module": "Et Moduhl „$1“ wood nit jefonge.",
        "booksources": "Böcher",
        "booksources-search-legend": "Söök noh Bezochsquelle för Bööcher",
        "booksources-isbn": "ISBN:",
        "listgrouprights-removegroup-self": "Kann sesch sällver {{PLURAL:$2|eruß nämme uß dä Metmaacherjropp:|uß $2 Metmaacherjroppe eruß nämme:|uß kei Metmaacherjropp eruß nämme.}} $1",
        "listgrouprights-addgroup-self-all": "Kann sesch sällver en alle Metmaacherjroppe erenn donn",
        "listgrouprights-removegroup-self-all": "Kann sesch sällver uß alle Metmaacherjroppe eruß nämme",
+       "listgrouprights-namespaceprotection-header": "Beschrängkonge för Appachtemangs",
        "listgrouprights-namespaceprotection-namespace": "Appachtemang",
        "trackingcategories-name": "Dä Nohreesch udder däm Täxschtöck singe Nahme",
+       "trackingcategories-desc": "Bedengonge för enjeschloße ze sin",
        "broken-file-category-desc": "En heh dä Sigg es ene Lengk obb en Dattei, di mer nit han.",
        "trackingcategories-disabled": "Di Saachjrobb es afjeschalldt.",
        "mailnologin": "Keij E-Mail Adress",
        "pageinfo-default-sort": "Shtandattmääßesch zottiere met däm Schlößel",
        "pageinfo-length": "Bytes en dä Sigg",
        "pageinfo-article-id": "Dä Sigg ier Nommer en dä Daatebangk",
-       "pageinfo-language": "De Schprooch vum Sigge-Enhallt",
+       "pageinfo-language": "De Schprohch vum Enhallt vun dä Sigg",
        "pageinfo-content-model": "Et Modäll för der Enhalld vun dä Sigg",
        "pageinfo-robot-policy": "Et opnämme es för Söhkmaschiine",
        "pageinfo-robot-index": "zohjelohße",
        "specialpages-group-wiki": "Werrekzüch un Daate vum Syßteem",
        "specialpages-group-redirects": "{{int:nstab-special}}e, die ömleide, söhke, un fenge",
        "specialpages-group-spam": "Werrekzüch jäje SPÄM",
+       "specialpages-group-developer": "Werkzüch fö Entwecklere",
        "blankpage": "Vakat-Sigg",
        "intentionallyblankpage": "Op dä Sigg es med Afseesh nix drop.",
        "external_image_whitelist": "# Donn aan dä Reih heh nix ändere<pre>\n# Onge künne Brochstöke fun rejolähre Ußdrök aanjejovve wäde,\n# alsu dä Deil zwesche / und /\n# Noh em Verjliische met däm URL vun ene Datei fun ußerhallef:\n# Treffer: De Datei weed jezeich odder enjebonge.\n# Söns: ene Link weed aanjezeich.\n# Wam_mer et nit ömschtällt, es Jruß- un Kleinschrevv_ejaal.\n# Reije met # am Aanfang, sen bloß Kommenta\n# Donn de Brochstöck heh noh endrare, un di Reihe bes hee nit ändere</pre>",
        "expand_templates_preview": "Vör-Aansich",
        "pagelanguage": "De Schprohch för di Sigg faßlääje",
        "pagelang-name": "Sigg",
-       "pagelang-language": "De Schprooch",
+       "pagelang-language": "De Schprohch",
        "pagelang-use-default": "Nemm de Schtandatt_Schprohch",
-       "pagelang-select-lang": "Söhg_en Schprooch uß",
+       "pagelang-select-lang": "Donn en Schprohch ußwähle",
        "right-pagelang": "Ener Sigg ier Schprohch tuusche",
        "action-pagelang": "Sigge ier Schprohch zu tuusche",
-       "log-name-pagelang": "Logbooch vum Tuusche vun Sige iehr Schprohche"
+       "log-name-pagelang": "Logbooch vum Tuusche vun Sige iehr Schprohche",
+       "mediastatistics-header-unknown": "Onbikannt",
+       "mediastatistics-header-video": "Viddejos",
+       "mediastatistics-header-text": "Täx",
+       "mediastatistics-header-executable": "Projramme",
+       "mediastatistics-header-archive": "Kumpremeerte Dahtefommahte",
+       "json-warn-trailing-comma": "{{PLURAL:$1|0=Kei Komma wood|1=Ei Komma woodt|$1 Kommas woodte}} aam Ängk vum <i lang=\"en\" xml:lang=\"en\">JSON</i> fott jenumme.",
+       "json-error-unknown": "Mem <i lang=\"en\" xml:lang=\"en\">JSON</i> es jät scheif jeloufe: $1"
 }
index 02a67f3..fe9b550 100644 (file)
        "right-protect": "Protektiounsniveauen änneren a kaskadegespaart Säiten änneren",
        "right-editprotected": "Protegéiert Säiten als \"{{int:protect-level-sysop}}\" änneren",
        "right-editsemiprotected": "Säiten déi als  \"{{int:protect-level-autoconfirmed}}\" gespaart sinn änneren",
+       "right-editcontentmodel": "De Modell vum Inhalt vun enger Säit änneren",
        "right-editinterface": "De Benotzerinterface änneren",
        "right-editusercssjs": "Anere Benotzer hir CSS a JS Fichieren änneren",
        "right-editusercss": "Anere Benotzer hir CSS Fichieren änneren",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskussioun]])",
        "unknown_extension_tag": "Onbekannten Erweiderungs-Tag \"$1\"",
        "duplicate-defaultsort": "'''Opgepasst:''' Den Zortéierschlëssel \"$2\" iwwerschreift de virege Standard-Zortéierschlëssel \"$1\".",
+       "duplicate-displaytitle": "<strong>Opgepasst:</strong> Den Titel dee gewise gëtt \"$2\" iwwerschreift deen Titel dee virdru gewise gouf \"$1\".",
        "version": "Versioun",
        "version-extensions": "Installéiert Erweiderungen",
        "version-skins": "Installéiert Skins/Layout",
        "specialpages-group-wiki": "Daten an Handwierksgeschir",
        "specialpages-group-redirects": "Spezialsäiten déi viruleeden",
        "specialpages-group-spam": "Handwierksgeschir géint de Spam",
+       "specialpages-group-developer": "Handwierksgeschir fir Entwéckler (Programméierer)",
        "blankpage": "Eidel Säit",
        "intentionallyblankpage": "Dës Säit ass absichtlech eidel. Si gëtt fir Benchmarking an Ähnleches benotzt.",
        "external_image_whitelist": "#Dës Zeil genee sou loosse wéi se ass<pre>\n#Schreift hei ënnendrënner Fragmenter vu regulären Ausdréck (just den Deel zwëscht den // aginn)\n#Dës gi mat den URLe vu Biller aus externe Quelle verglach\n#Wann d'Resultat positiv ass, gëtt d'Bild gewisen, soss gëtt d'Bild just als Link gewisen\n#Zeilen, déi mat engem # ufänken, ginn als Bemierkung behandelt\n#Et gëtt en Ënnerscheed tëscht groussen a klenge Buschtawe gemaach\n\n#All regulär Ausdréck ënner dëser Zeil androen. Dës Zeil genee sou loosse wéi se ass</pre>",
index d9758a0..59dd3bb 100644 (file)
        "download": "parsisiųsti",
        "unwatchedpages": "Nestebimi puslapiai",
        "listredirects": "Peradresavimų sąrašas",
+       "listduplicatedfiles": "Pasikartojančių rinkmenų sąrašas",
        "unusedtemplates": "Nenaudojami šablonai",
        "unusedtemplatestext": "Šis puslapis rodo sąrašą puslapių, esančių {{ns:template}} vardų srityje, kurie nėra įterpti į jokį kitą puslapį. Nepamirškite patikrinti kitų nuorodų prieš juos ištrinant.",
        "unusedtemplateswlh": "kitos nuorodos",
        "movepagetalktext": "Susietas aptarimo puslapis bus automatiškai perkeltas kartu su juo, '''išskyrus:''':\n*Puslapis nauju pavadinimu jau turi netuščią aptarimo puslapį, arba\n*Paliksite žemiau esančia varnelę nepažymėtą.\n\nŠiais atvejais jūs savo nuožiūra turite perkelti arba apjungti aptarimo puslapį.",
        "movearticle": "Pervardinti puslapį:",
        "moveuserpage-warning": "'''Dėmesio:''' Jūs ruošiatės perkelti naudotojo puslapį. Atkreipkite dėmesį, kad bus perkeltas tik puslapis, naudotojas ''nebus'' pervadintas.",
+       "movecategorypage-warning": "<strong>Dėmesio:</strong> Jūs ketinate pervadinti kategorijos puslapį. Atminkite, kad tik pats puslapis bus pervadintas, tačiau kategorijai priskirti puslapiai <em>nebus</em> perkelti naujon kategorijon.",
        "movenologintext": "Norėdami pervadinti puslapį, turite būti užsiregistravęs naudotojas ir būti  [[Special:UserLogin|prisijungęs]].",
        "movenotallowed": "Jūs neturite teisių pervadinti puslapių.",
        "movenotallowedfile": "Jūs neturite teisės perkelti failus.",
        "fileduplicatesearch-result-n": "Šis failas „$1“ turi $2 {{PLURAL:$2|identišką dublikatą|identiškus dublikatus|identiškų dublikatų}}.",
        "fileduplicatesearch-noresults": "Nėra failo pavadinimu \"$1\".",
        "specialpages": "Specialieji puslapiai",
-       "specialpages-note": "* Įprastą specialius puslapius.\n* <span class=\"mw-specialpagerestricted\">Tik specialius puslapius.</span>",
+       "specialpages-note": "* Įprasti specialieji puslapiai.\n* <span class=\"mw-specialpagerestricted\">Apriboto pasiekiamumo specialieji puslapiai.</span>",
        "specialpages-group-maintenance": "Sistemos palaikymo pranešimai",
        "specialpages-group-other": "Kiti specialieji puslapiai",
        "specialpages-group-login": "Prisijungti / sukurti paskyrą",
        "specialpages-group-wiki": "Wiki duomenys ir priemonės",
        "specialpages-group-redirects": "Specialieji nukreipimo puslapiai",
        "specialpages-group-spam": "Šlamšto valdymo priemonės",
+       "specialpages-group-developer": "Kūrėjo įrankai",
        "blankpage": "Tuščias puslapis",
        "intentionallyblankpage": "Šis puslapis specialiai paliktas tuščias",
        "external_image_whitelist": " #Palikite šią eilutę, tokią kokia yra <pre>\n#Įrašykite standartinių išraiškų fragmentus (tik dalį tarp //)\n#Juos bus bandoma sutapdinti su išorinių paveikslėlių adresais\n#Tie, kurie sutaps, bus rodomi kaip paveikslėliai, o kiti bus rodomi tik kaip nuorodos\n#Raidžių dydis nėra svarbus\n#Eilutės, prasidedančios # yra komentarai\n\n#Įterpkite visus standartinių išraiškų fragmentus prieš šią eilutę. Palikite šią eilutę, tokią kokia yra </pre>",
        "duration-decades": "$1 {{PLURAL:$1|dešimtmetis|dešimtmečiai|dešimtmečių}}",
        "duration-centuries": "$1 {{PLURAL:$1|amžius|amžiai|amžių}}",
        "duration-millennia": "$1 {{PLURAL:$1|tūkstantmetis|tūkstantmečiai|tūkstantmečių}}",
+       "limitreport-title": "Analizatoriaus duomenys:",
        "expand_templates_output": "Rezultatas",
        "expand_templates_ok": "Gerai",
        "expand_templates_remove_comments": "Pašalinti komentarus",
index 5391ca8..3a7745a 100644 (file)
        "cannotdelete": "पन्ना व संचिका \"$1\" मेटाएल नै जा सकल।",
        "cannotdelete-title": "पन्ना \"$1\" नै मेटा सकल",
        "delete-hook-aborted": "सम्पादन नोकसीसँ खतम भेल।\nई कोनो कारण नै देलक।",
+       "no-null-revision": "\"$1\" पृष्ठ के लेल बिना परिवर्तन नब अवतरण बनाबए में असफल।",
        "badtitle": "खराप शीर्षक",
        "badtitletext": "आग्रह कएल पन्नाक शीर्षक गलत, खाली, वा गलत सम्बन्धित अन्तर-न्हाषा अन्तर विकी शीर्षक छी। ई एक वा बेशी कलाकार युक्त भऽ सकैए जे शीर्षकमे प्रयुक्त नै कएल जा सकैए।",
        "perfcached": "ई दत्तांश उपस्मृतिक आधारपर अछि आ भऽ सकैए जे अद्यतन नै हुअए। अधिकतम {{PLURAL:$1|एकटा परिणाम|$1 परिणाम सभ}} क्याचेमे उपलब्ध अछि ।",
        "resetpass-abort-generic": "कूटशब्दमे बदलाव कोनो एक्सटेंशनद्वारा रोकल गएल अछि।",
        "resetpass-expired": "अहाँके कूटशब्दक वैधता अवधि खत्तम भऽ गेल अछि । कृपया सम्प्रवेशित करवाक लेल नयाँ कूटशब्द राखु।",
        "resetpass-expired-soft": "अहाँके कूटशब्दकऽ वैधता अवधि समाप्त भऽ गेल आर कूटशब्द परिवार्तान करवाक आवश्यकता अछि। कृपया एगो नव कूटशब्द राखु, वा पाछु रिसेट करवाक लेल \"{{int:resetpass-submit-cancel}}\" क्लिक करु।",
+       "resetpass-validity-soft": "अहाँके कूटशब्द मान्य नै अछि: $1 \n\nकृपया आब एगो नव कूटशब्द चुनु, वा पाछु पुनर्स्थापित करए के लेल \"{{int:resetpass-submit-cancel}}\" में क्लिक करू।",
        "passwordreset": "कूटशब्द फेरसँ बनाउ",
        "passwordreset-text-one": "अपन कूटशब्द रीसेट करवाक लेल इ फारम भरु ।",
        "passwordreset-text-many": "{{PLURAL:$1|ई-पत्रके माध्यमसऽ एकटा अस्थायी कूटशब्द पावैलेल कोनो एकटा डिब्बा भरु ।}}",
        "changeemail-submit": "ई-पत्र संकेत बदलू",
        "changeemail-throttled": "अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास करबासँ पहिने कने काल थम्हू।",
        "resettokens": "टोकन रीसेट करी",
+       "resettokens-text": "जे स्तोक अहाँके खाता सँ सम्बद्ध किछु विशिष्ट व्यक्तिगत जानकारी प्रदान करएत अछि, अहाँ वोकरा एतए सँ रिसेट कऽ सकएत छी।\n\nयदि अहाँ एकरा गलती सँ केकरो देखा देनए छी वा अहाँ के खाता ह्याक भ गेल अछि तहन अहाँके एकरा रिसेट कऽ देना चाही।",
        "resettokens-no-tokens": "रीसेट करवाक लेल कोनो टोकन नै अछि।",
        "resettokens-legend": "टोकन रीसेट करी",
        "resettokens-tokens": "टोकन:",
        "resettokens-token-label": "$1 (वर्तमान मूल्य: $2)",
+       "resettokens-watchlist-token": "[[Special:Watchlist|अहाँके साकांक्षसूची के पृष्ठसभ में परिवर्तन सभ]] के वेब फिट (Atom/RSS) लेल स्तोक",
        "resettokens-done": "टोकन रीसेट भेल अछि।",
        "resettokens-resetbutton": "छानल टोकन रीसेट करु",
        "bold_sample": "गँहीर लेखन",
        "template-protected": "(संरक्षित)",
        "template-semiprotected": "(अर्ध-संरक्षित)",
        "hiddencategories": "ई पन्ना सदस्य अछि {{PLURAL:$1|1 नुकाएल संवर्ग|$1 नुकाएल संवर्ग सभ}}:",
+       "edittools": "<!-- एतए देल गेल पाठ सम्पादन आर अपलोड फारम के निचा देखाओल जाएत। -->",
        "edittools-upload": "-",
        "nocreatetext": "{{अन्तर्जाल}} नव पन्ना निर्माणक क्षमताकेँ सीमित कऽ देने अछि।\nअहाँ आपस जा सकै छी आ कोनो पन्नाकेँ सम्पादित कऽ सकै छी, वा [[Special:UserLogin|log in or create an account]]",
        "nocreate-loggedin": "अहाँकेँ नव पन्ना बनेबाक अधिकार नै अछि।",
        "postedit-confirmation-saved": "अहाके संपादनके सुरक्षित भेल ।",
        "edit-already-exists": "नव पन्नाक निर्माण नै भऽ सकल।\nई पहिनहियेसँ वर्तमान अछि।",
        "defaultmessagetext": "पूर्वनिर्धारित संदेश पाठ",
+       "content-failed-to-parse": "$1 के लेल $2 सामग्री के बिच्छेदन करए में विफल, त्रुटि: $3",
        "invalid-content-data": "अवैध डाटा सामग्री",
+       "content-not-allowed-here": "[[$2]] पृष्ठ पर \"$1\" सामग्री वर्जित अछि।",
+       "editwarning-warning": "इ पृष्ठ के छोड़ए सँ अहाके द्वारा कएल गेल कोनो भी परिवर्तन गायब भऽ जाएत।\nयदि अहाँ सम्प्रवेश केनए छी तहन ई सूचना के देखावए लेल अपन वरीयता सभ के \"{{int:prefs-editing}}\" भाग में बन्द कऽ सकएत छी।",
        "editpage-notsupportedcontentformat-title": "सामग्री स्वरूप समर्थित नै अछि",
+       "editpage-notsupportedcontentformat-text": "$1 सामग्री स्वरूप $2 सामग्री मोडल द्वारा समर्थित नै अछि।",
        "content-model-wikitext": "विकिटेक्स्ट",
        "content-model-text": "सामान्य पाठ",
        "content-model-javascript": "जावास्क्रिप्ट",
        "parser-template-loop-warning": "नमूना परिक्रम भेटल: [[$1]]",
        "parser-template-recursion-depth-warning": "नमूना प्रत्यावर्तन गहीर सीमा पार केलक ($1)",
        "language-converter-depth-warning": "भाषान्तर गहीर सीमा पार केलक ($1)",
-       "node-count-exceeded-category": "पन्ना नोड गिनती पार क्या गेल अछि",
-       "node-count-exceeded-category-desc": "ई पन्ना अधिकतम नोड गिनती पार केन अछि",
-       "node-count-exceeded-warning": "पन्ना नोड गिनती पार केन अछि",
-       "expansion-depth-exceeded-category": "ई पन्ना विस्तार गहिराई पार केन",
-       "expansion-depth-exceeded-category-desc": "ई पन्ना अधिकतमरुपमे विस्तार गहिराई पार के अछि",
-       "expansion-depth-exceeded-warning": "पन्ना विस्तार गहिराई पार केन अछि",
-       "parser-unstrip-loop-warning": "Unstrip लूप पता लाग्ल अछि",
+       "node-count-exceeded-category": "पन्ना जे में नोड-संख्या सीमा पार कऽ गेल अछि",
+       "node-count-exceeded-category-desc": "ई पृष्ठ अधिकतम नोड गिनती पार केनए अछि",
+       "node-count-exceeded-warning": "पन्ना नोड गिनती पार केनए अछि",
+       "expansion-depth-exceeded-category": "ई पन्ना विस्तार गहिराई पार केनए अछि",
+       "expansion-depth-exceeded-category-desc": "ई पृष्ठ अधिकतम रुपमे विस्तार गहिराई पार केनए अछि",
+       "expansion-depth-exceeded-warning": "पन्ना विस्तार गहिराई पार केनए अछि",
+       "parser-unstrip-loop-warning": "Unstrip लूप पाओल गेल",
+       "parser-unstrip-recursion-limit": "Unstrip पुनरावर्तन सीमा पार कइर गेल($1)",
+       "converter-manual-rule-error": "म्यानुअल भाषा परिवर्तन नियम में त्रुटि",
        "undo-success": "ई सम्पादन पूर्ववत बदलल जा सकैए।\nकृपा क' नीचाँक तुलनाक जाँच करू ई देखैले जे ई वएह भेल अछि जे अहाँ चाहै छलहुँ, आ तखन सम्पादन ख़तम करबा लेल नीचाँक परिवर्तन सुरक्षित करू ।",
        "undo-failure": "मध्यवर्ती विरोधी सम्पादनक कारण ऐ सम्पादनकेँ खतम नै कएल जा सकैए।",
        "undo-norev": "ई सम्पादन खतम नै कएला जा सकैए कारण ई अछि नै वा मेटा देल गेल अछि।",
        "search-result-category-size": "{{PLURAL:$1|1 सदस्य|$1 सदस्य}} ({{PLURAL:$2|1 उपसंवर्ग|$2 उपसंवर्ग}}, {{PLURAL:$3|1 संचिका|$3 संचिका}})",
        "search-redirect": "(रस्ता बदलेन $1)",
        "search-section": "(शाखा $1)",
+       "search-category": "(श्रेणी $1)",
        "search-file-match": "(फाइल सामग्रीसे मेल खेलक अछि)",
        "search-suggest": "अहाँ मोने अछि जे:$1",
        "search-interwiki-caption": "सम्बन्धित परियोजना सभ",
        "license": "अधिकृत करब:",
        "license-header": "अधिकृत करब",
        "nolicense": "कियो नै चुनाएल",
+       "licenses-edit": "लाइसेन्स विकल्प सम्पादन",
        "license-nopreview": "(पूर्वावलोकन उपलब्ध नै अछि)",
        "upload_source_url": "(एकटा मान्य, सार्वजनिक प्रवेशबला सार्वत्रिक विभव संकेत)",
        "upload_source_file": "(अहाँक संगणकपर एकटा संचिका)",
        "fewestrevisions": "एकाध संशोधनबला पन्ना सभ",
        "nbytes": "$1 {{PLURAL:$1|बाइट|बाइट्स}}",
        "ncategories": "{{PLURAL:$1|संवर्ग|कएटा संवर्ग}}",
+       "ninterwikis": "$1 अन्तरविकि {{PLURAL:$1|जड़ी|जड़ि सभ}}",
        "nlinks": "$1 {{PLURAL:$1|लागि|लागि सभ}}",
        "nmembers": "$1 {{PLURAL:$1|सदस्य|सदस्य सभ}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|प्रयोक्ता|प्रयोक्ता सभ}}",
        "nrevisions": "$1{{PLURAL:$1|संशोधन|संशोधन सभ}}",
        "nviews": "$1 {{PLURAL:$1|दृश्य|दृश्य सभ}}",
        "nimagelinks": "$1पर प्रयुक्त {{PLURAL:$1|पन्ना|पन्ना सभ}}",
        "mostimages": "सभसँ बेसी लागिबला संचिका सभ",
        "mostrevisions": "सभसँ बेसी संशोधनबला पन्ना सभ",
        "prefixindex": "उपसर्गक संग सभटा पृष्ठ",
+       "prefixindex-namespace": "उपसर्ग भएल सभ पृष्ठ ($1 नामस्थान)",
+       "prefixindex-strip": "सूची में उपसर्ग नुकाउ",
        "shortpages": "पन्ना सभ छाँटू",
        "longpages": "नमगर पन्ना सभ",
        "deadendpages": "एकदमसँ अन्त भऽ जाएबला पन्ना सभ",
        "suppress": "नजरिपर नै आएल",
        "querypage-disabled": "ई विशिष्ट पन्ना कार्य दक्षता लेल अशक्त कएल गेल अछि।",
        "apihelp": "API मद्दत",
+       "apihelp-no-such-module": "मोड्युल \"$1\" नै भेटल।",
        "booksources": "किताबक सन्दर्भ सभ",
        "booksources-search-legend": "किताबक सन्दर्भक लेल ताकू",
        "booksources-isbn": "आइ.एस.बी.एन.:",
        "prevpage": "पहिलुका पन्ना ($1)",
        "allpagesfrom": "पन्ना प्रदर्शन प्रारम्भ भेल:",
        "allpagesto": "एतऽ खतम होमएबला पन्नाक प्रदर्शन करू:",
-       "allarticles": "सभà¤\9fा à¤ªà¤¨à¥\8dना",
+       "allarticles": "सभà¤\9fा à¤²à¥\87à¤\96",
        "allinnamespace": "सभटा पन्ना ($1 नामगाम)",
        "allpagessubmit": "जाउ",
        "allpagesprefix": "उपसर्गक संग दृश्य पन्ना सभ:",
        "allpagesbadtitle": "देल पन्नाक शीर्षक गलत, गलत सम्बन्धित अन्तर-भाषा अन्तर विकी शीर्षक छी। ई एक वा बेशी कलाकार युक्त भऽ सकैए जे शीर्षकमे प्रयुक्त नै कएल जा सकैए।",
        "allpages-bad-ns": "{{जालस्थल}} मे \"$1\" नामगाम नै अछि।",
        "allpages-hide-redirects": "बदलेन नुकाऊँ",
+       "cachedspecial-viewing-cached-ttl": "अहाँ ई पृष्ठ के क्यास कएल अवतरण देख रहल छी, जे $1 पूरान भऽ सकएत अछि।",
+       "cachedspecial-viewing-cached-ts": "अहाँ इ पृष्ठ के क्यास कएल गएल अवतरण देख रहल छी, जे कि संभवतः वर्तमान अवस्था सँ भिन्न भऽ सकएत अछि।",
        "cachedspecial-refresh-now": "लब्का देखु",
        "categories": "संवर्ग सभ",
        "categoriespagetext": "ई {{PLURAL:$1|संवर्गमे अछि|संवर्ग सभमे अछि}} पन्ना वा मीडिया।\n[[Special:UnusedCategories|Unused categories]] एतए देखाएल नै अछि।\nईहो देखू [[Special:WantedCategories|wanted categories]]।",
        "trackingcategories": "श्रेणीके ट्रयाक करु",
        "trackingcategories-msg": "श्रेणीके ट्रयाक करु",
        "trackingcategories-name": "सन्देश नाम",
+       "trackingcategories-desc": "श्रेणी समावेशीकरण मापदण्ड",
+       "trackingcategories-nodesc": "कोनो वर्णन उपलब्ध नै।",
+       "trackingcategories-disabled": "श्रेणी नुकाएल गेल अछि",
        "mailnologin": "कोनो पठेबाक पता नै",
        "mailnologintext": "अहाँ [[Special:UserLogin|सम्प्रवेशित]] हेबाक चाही आ अहाँक विकल्प [[Special:Preferences|preferences]]  मे एकटा मान्य ई-पत्र संकेत दोसर प्रयोक्ताकेँ पठेबा लेल हेबाक चाही।",
        "emailuser": "ऐ प्रयोक्ताकेँ ई-पत्र पठाउ",
+       "emailuser-title-target": "इ {{GENDER:$1|प्रयोक्ता}} के ई-पत्र भेजु।",
+       "emailuser-title-notarget": "ई-पत्र प्रयोक्ता",
        "emailpage": "ई-पत्र प्रयोक्ता",
        "emailpagetext": "अहाँक नीचाँक आवेदन-पत्र ऐ प्रयोक्ताकेँ ई-पत्र संदेश पठेबा लेल प्रयोग कऽ सकै छी।\nई-पत्र जे अहाँ [[Special:Preferences|your user preferences]] मे देलहुँ से ई-पत्र\"एतएसँ\" पतासँ देखाएत, से प्राप्तकर्ता सोझे अहाँकेँ उत्तर देबामे समर्थ हेताह।",
        "defemailsubject": "{{जालस्थल}} प्रयोक्ता \"$1\" सँ ई-पत्र",
        "watchnologin": "सम्प्रवेशित नै",
        "addwatch": "साकांक्ष सूचीमे जोड़ू",
        "addedwatchtext": "पन्ना \"[[:$1]]\" अहाँक [[Special:Watchlist|साकांक्ष सूची]] मे जोड़ल गेल।\nऐ पन्नामे भविष्यक परिवर्तन आ एकर सम्बन्धित चौबटिया पन्ना एतए सूचीबद्ध रहत, आ पन्ना [[Special:RecentChanges|हालक परिवर्तन]]मे '''गाढ़''' देखाएत , जइसँ आसानीसँ एकरा चिन्हल जा सकत।",
+       "addedwatchtext-short": "इ पृष्ठ \"$1\" अहाँ के साकांक्ष सूची मे राखल गेल अछि।",
        "removewatch": "साकांक्ष सूचीसँ हटाउ",
        "removedwatchtext": "पन्ना \"[[:$1]]\" हटाएल गेल [[Special:Watchlist|अहाँक साकांक्षसूची]] सँ।",
+       "removedwatchtext-short": "इ पृष्ठ \"$1\" अहाँ के साकांक्ष सूची मे राखल गेल अछि।",
        "watch": "ध्यान राखु",
        "watchthispage": "ऐ पृष्ठपर ध्यान राखू",
        "unwatch": "छोड़ू",
        "enotif_impersonal_salutation": "{{अन्तर्जाल}} प्रयोक्ता",
        "enotif_subject_deleted": "{{SITENAME}} पन्ना $1 के {{gender:$2|$2}} हटेलक",
        "enotif_subject_created": "{{SITENAME}} पन्ना $1 को {{gender:$2|$2}} बनेलक",
+       "enotif_subject_moved": "{{SITENAME}} पृष्ठ $1 के {{gender:$2|$2}} घसकेलक",
        "enotif_lastvisited": "देखू $1 अपन अन्तिम बेर अएलाक बादक परिवर्तन लेल।",
        "enotif_lastdiff": "ऐ परिवर्तनकेँ देखबा लेल $1 देखू।",
        "enotif_anon_editor": "गुप्त प्रयोक्ता $1",
        "delete-edit-reasonlist": "मेटेबाक कारणक सम्पादन करू",
        "delete-toobig": "ऐ पन्नामे बड्ड बेसी सम्पादन इतिहास अछि, $1 सँ बेसी {{PLURAL:$1|revision|revisions}}।\nओइ सभ पन्नाक मेटाएब प्रतिबन्धित कएल गेल अछि जइसँ आकस्मिक क्षति नै हुअए {{जालस्थलक}}।",
        "delete-warning-toobig": "ऐ पन्नामे बड्ड सम्पादन इतिहास अछि, $1 सँ बेसी {{PLURAL:$1|revision|revisions}}।\nएकरा मेटेलापर दत्तनिधि क्रिया {{जालस्थल}} खतरामे पड़त;\nसतर्कीसँ आगाँ बढ़ू।",
+       "deleteprotected": "अहाँ इ पन्ना नै मेटा सकए छी कियाकि ई सुरक्षण कएल गेल अछि",
+       "deleting-backlinks-warning": "'''चेतौनी:''' जे पृष्ठ अहाँ हटावए लेल जा रहल छी वोकरा में  [[Special:WhatLinksHere/{{FULLPAGENAME}}|अन्य पृष्ठ]] जुड़एत अछि अथवा वोकरा ट्रान्सक्ल्युड करएत अछि।",
        "rollback": "प्रत्यावर्तित सम्पादन",
        "rollback_short": "प्रत्यावर्तन",
        "rollbacklink": "प्रत्यावर्तन",
+       "rollbacklinkcount": "$1 {{PLURAL:$1|सम्पादन}} पूर्ववत करू",
+       "rollbacklinkcount-morethan": "$1 सँ अधिक {{PLURAL:$1|सम्पादन}} पूर्ववत करू",
        "rollbackfailed": "प्रत्यावर्तन असफल",
        "cantrollback": "सम्पादन आपस नै भऽ सकै अछि;\nअन्तिम योगदान दैबला ऐ पन्नाक एकमात्र लेखक छी।",
        "alreadyrolled": "अन्तिम सम्पादनक प्रत्यावर्तन नै भऽ सकैए [[:$1]] by [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nकियो आन ऐ पन्नाकेँ पहिनहिये सम्पादित वा प्रत्यावर्तित कऽ देने अछि।\nऐ पन्नाक अन्तिम सम्पादन भेल अछि एकरा द्वारा [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])।",
        "protectedarticle": "रक्षित \"[[$1]]\" कएल गेल",
        "modifiedarticleprotection": "\"[[$1]]\" लेल बदलैत रक्षा स्तर",
        "unprotectedarticle": "अरक्षित केलौं \"[[$1]]\"",
-       "movedarticleprotection": "सà¥\81रà¤\95à¥\8dषा à¤¸à¥\8dतर \"[[$2]]\" à¤¸à¥\87 à¤¬à¤¦à¤² à¤\95  \"[[$1]]\" à¤\95 à¤¦à¥\87ल à¤\97à¥\87ल.",
+       "movedarticleprotection": "सà¥\81रà¤\95à¥\8dषा à¤¸à¥\8dतर \"[[$2]]\" à¤¸à¤\81 à¤¬à¤¦à¤² à¤\95à¥\87  \"[[$1]]\" à¤\95 à¤¦à¥\87ल à¤\97à¥\87ल",
        "protect-title": "\"$1\" लेल रक्षा स्तर बदलू",
        "protect-title-notallowed": "\"$1\" लेल रक्षा स्तर देखू",
        "prot_1movedto2": "[[$1]] गेल एतय [[$2]]",
        "protect-badnamespace-title": "अरक्षित नाम-गाम",
        "protect-badnamespace-text": "ऐ नामगामक पन्नामे सुरक्षा सम्भव नै।",
+       "protect-norestrictiontypes-text": "ई पृष्ठ सुरक्षित नै कएल जा सकएत अछि कियाकि कोनो सुरक्षा प्रकार उपलब्ध नै अछि।",
+       "protect-norestrictiontypes-title": "सुरक्षाहीन पृष्ठ",
        "protect-legend": "सुरक्षितता निर्धारित करू.",
        "protectcomment": "कारण:",
        "protectexpiry": "खतम हएत:",
        "protect-othertime": "दोसर समए:",
        "protect-othertime-op": "दोसर समए",
        "protect-existing-expiry": "अखुनका खतम हेबाक समए : $3, $2",
+       "protect-existing-expiry-infinity": "अखुनका खतम होबाक समय:अनिश्चितकाल",
        "protect-otherreason": "दोसर/ अतिरिक्त कारण:",
        "protect-otherreason-op": "दोसर कारण",
        "protect-dropdown": "*सामान्य सुरक्षा कारण\n** अत्यधिक दकचब\n** अत्यधिक अनपेक्षित संदेश \n** नोकसानबला सम्पादन चेतौनी\n** बेसी पाठकबला पन्ना",
        "undeletedrevisions": "{{PLURAL:$1|1 revision|$1 revisions}} घुराएल",
        "undeletedrevisions-files": "{{PLURAL:$1|1 संशोधन|$1 संशोधन}} and {{PLURAL:$2|1 संचिका|$2 संचिका}} आनल",
        "undeletedfiles": "{{PLURAL:$1|1 संचिका|$1 संचिका सभ}} आनल",
-       "cannotundelete": "फेरसँ नै आबि सकल;\nसम्भव जे कियो आन पहिनहिये एकरा आनि लेने छथि।",
-       "undeletedpage": "'''$1 à¤\86नि à¤²à¥\87ल à¤\97à¥\87ल'''$1\nपà¥\82à¤\9bà¥\82 [[Special:Log/delete|deletion log]] à¤µà¤°à¥\8dतमान à¤®à¥\87à¤\9fाà¤\8fल à¤\86 à¤\86नल à¤¸à¥\82à¤\9aà¥\80 à¤²à¥\87ल।",
-       "undelete-header": "दà¥\87à¤\96à¥\82 [[Special:Log/delete|the deletion log]] à¤¹à¤¾à¤²à¤\95 à¤®à¥\87à¤\9fाà¤\8fल à¤ªà¤¨à¥\8dना à¤²à¥\87ल।",
+       "cannotundelete": "फेरसँ नै आबि सकल:\n$",
+       "undeletedpage": "'''$1 à¤\95à¥\87 à¤ªà¥\81नरà¥\8dसà¥\8dथापित à¤\95रल à¤\97à¥\87ल à¤\85à¤\9bि'''\n\nलà¤\97 à¤ªà¤¾à¤¸ à¤®à¥\87à¤\82 à¤¹à¤\9fाà¤\93ल à¤\97à¥\87ल à¤\86 à¤ªà¥\81नरà¥\8dसà¥\8dथापित à¤\95à¤\8fल à¤\97à¥\87ल à¤ªà¤¨à¥\8dना à¤¸à¤­à¤\95à¥\87 à¤\9cानà¤\95ारà¥\80 à¤\95à¥\87 à¤²à¥\87ल [[Special:Log/delete|हà¤\9fाà¤\93ल à¤\97à¥\87ल à¤²à¤\97]] à¤¦à¥\87à¤\96à¥\81।",
+       "undelete-header": "हालà¤\95 à¤®à¥\87à¤\9fाà¤\8fल à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤²à¥\87ल [[Special:Log/delete|हà¤\9fाà¤\8fल à¤²à¤\97]] à¤¦à¥\87à¤\96à¥\82।",
        "undelete-search-title": "मेटाएल पन्नाकेँ ताकू",
        "undelete-search-box": "मेटाएल पन्ना सभकेँ ताकू",
        "undelete-search-prefix": "से शुरु भेल पन्ना देखाबू.",
        "contributions-title": "$1 लेल प्रयोक्ताक अवदान",
        "mycontris": "योगदान",
        "contribsub2": "$1 ($2) लेल",
+       "contributions-userdoesnotexist": "प्रयोक्ता खाता \"$1\" पंजीकृत नै अछि।",
        "nocontribs": "कोनो परिवर्तन ऐ सँ मेल नै खाइए।",
        "uctop": "(शिखर)",
        "month": "माससँ (आ पहिने)",
        "sp-contributions-newbies-sub": "नब प्रयोक्ताकऽ लेल",
        "sp-contributions-newbies-title": "नब प्रयोक्ताकऽ योगदान",
        "sp-contributions-blocklog": "प्रतिबन्धित वृत्तलेख",
+       "sp-contributions-suppresslog": "मेटाएल प्रयोक्ता योगदान सभ",
        "sp-contributions-deleted": "प्रयोक्ताकऽ मेटाएल योगदान सभ",
        "sp-contributions-uploads": "उपारोपण",
        "sp-contributions-logs": "वृत्तलेख सभ",
        "sp-contributions-search": "अवदानक लेल ताकू",
        "sp-contributions-username": "अनिकेत संकेत वा प्रयोक्तानाम:",
        "sp-contributions-toponly": "मात्र ओइ सम्पादनकेँ देखाउ जे अद्यतन संशोधन छी।",
+       "sp-contributions-newonly": "मात्र ओइ सम्पादन देखाउ जे पृष्ठ निर्मित भेल अछि",
        "sp-contributions-submit": "ताकू",
        "whatlinkshere": "एतय कोन लिंक अछि",
        "whatlinkshere-title": "\"$1\" सँ सम्बन्धित पन्ना सभ",
        "nolinkshere-ns": "कोनो पन्नाक लागि '''[[:$1]]''' चुनल नामगाममे नै अछि।",
        "isredirect": "पन्नाकेँ घुराउ",
        "istemplate": "परागत",
-       "isimage": "फाइलक लिंक",
-       "whatlinkshere-prev": "{{PLURAL:$1|पहिलुका|पहिलुका सभ $1}}",
+       "isimage": "फाइलकऽ जडी",
+       "whatlinkshere-prev": "{{PLURAL:$1|पहिलुका|पहिलुका $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|अगुलका|अगुलका $1}}",
        "whatlinkshere-links": "← लिंक",
        "whatlinkshere-hideredirs": "$1 घुरबैए",
        "whatlinkshere-hidetrans": "$1 परागत",
        "whatlinkshere-hidelinks": "$1 सम्बन्ध सभ",
-       "whatlinkshere-hideimages": "$1 à¤«à¤¾à¤\87ल à¤²à¤¾à¤\97ि सभ",
+       "whatlinkshere-hideimages": "$1 à¤«à¤¾à¤\87ल à¤\9cडà¥\80 सभ",
        "whatlinkshere-filters": "चलनी सभ",
        "autoblockid": "स्वतःप्रतिबन्धित #$1",
        "block": "प्रयोक्ताकेँ प्रतिबन्धित करू",
        "unblocked": "[[User:$1|$1]] अप्रतिबन्धित कएल गेल",
        "unblocked-range": "$1 अप्रतिबन्धित कएल गेल",
        "unblocked-id": "$1 अप्रतिबन्धित कएल गेल",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] खोजल गेल।",
        "blocklist": "प्रतिबन्धित प्रयोक्ता सभ",
        "ipblocklist": "प्रतिबन्धित प्रयोक्ता सभ",
        "ipblocklist-legend": "प्रतिबन्धित प्रयोक्ताकेँ ताकू",
        "block-log-flags-anononly": "गुप्त प्रयोक्ता मात्र",
        "block-log-flags-nocreate": "लेखा निर्माण अशक्त कएल",
        "block-log-flags-noautoblock": "स्वचालित प्रतिबन्ध अशक्त",
-       "block-log-flags-noemail": "à¤\88-मà¥\87ल अशक्त",
+       "block-log-flags-noemail": "à¤\88-पतà¥\8dर अशक्त",
        "block-log-flags-nousertalk": "अपन वार्ता पन्ना सम्पादित नै कऽ सकब",
        "block-log-flags-angry-autoblock": "नीक स्वचालित प्रतिबन्ध देल गेल",
        "block-log-flags-hiddenname": "प्रयोक्तानाम नुकाएल",
        "thumbnail-more": "पैघ",
        "filemissing": "संचिका हेराएल",
        "thumbnail_error": "लघुचित्र निर्माण कालमे भ्रम:$1",
+       "thumbnail_error_remote": "$1 सँ त्रुटि सन्देश: $2",
        "djvu_page_error": "डेजावू पन्ना सकक बाहर अछि",
        "djvu_no_xml": "डेजावू संचिकाक एक्स.एम.एल. नै आनि सकलौं",
+       "thumbnail-temp-create": "अस्थायी थम्बनेल फाइल बनाबए में असफल",
        "thumbnail_invalid_params": "अमान्य लघुचित्र परिमिति",
        "thumbnail_dest_directory": "लक्ष्य निर्देशिका नै बना सकल",
        "thumbnail_image-type": "चित्र प्रकार समर्थित नै अछि",
        "import-logentry-interwiki": "विकीअन्तरण क देलौ $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|सुधार|सुधार सभ}} $2 सँ",
        "javascripttest": "जावास्क्रिप्ट परिक्षण",
+       "javascripttest-title": "$1 परीक्षण चइल रहल अछि",
+       "javascripttest-pagetext-noframework": "इ पृष्ठ जावास्क्रिप्ट परीक्षण चलावए के लेल अछि।",
+       "javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"",
+       "javascripttest-pagetext-frameworks": "कृपया निम्न परीक्षण ढाँचा सभ में सँ एक चुनु: $1",
+       "javascripttest-pagetext-skins": "परीक्षण करए के लेल त्वचा चुनु:",
+       "javascripttest-qunit-intro": "mediawiki.org पर [$1 परीक्षण के प्रलेखन] देखु।",
+       "javascripttest-qunit-heading": "मेडियाविकि जावास्क्रिप्ट क्यू-युनिट परीक्षण ढाँचा",
        "tooltip-pt-userpage": "अहाँक खेसरा पन्ना",
        "tooltip-pt-anonuserpage": "सम्पाद्न कएल जा रहल स्थानक  अनिकेतक प्रयोक्ता पन्ना",
        "tooltip-pt-mytalk": "अहाँक वार्त्ता पृष्ठ",
        "tooltip-feed-atom": "ऐ पन्ना लेल अणु समदिया",
        "tooltip-t-contributions": "ऐ प्रयोक्ताक योगदानक सूची देखू",
        "tooltip-t-emailuser": "ऐ प्रयोक्ताकेँ ई-पत्र पठाउ",
-       "tooltip-t-info": "à¤\88 à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤¬à¤¾à¤°à¥\87मà¥\87 à¤¥à¤ª जानकारी",
+       "tooltip-t-info": "à¤\88 à¤ªà¥\83षà¥\8dठ à¤\95à¥\87 à¤¸à¤®à¥\8dबनà¥\8dधमà¥\87à¤\82 à¤\86र à¤¬à¥\88à¤\82सà¥\80 जानकारी",
        "tooltip-t-upload": "चित्र आकि मीडिया फाइलकेँ अपलोड करू",
        "tooltip-t-specialpages": "सभटा विशेष पन्नाक सूची",
        "tooltip-t-print": "ऐ पृष्ठक छपैबला रूप",
        "pageinfo-robot-noindex": "अमान्य",
        "pageinfo-watchers": "जानकारक संख्या",
        "pageinfo-firstuser": "पन्ना सर्जक",
+       "pageinfo-firsttime": "पृष्ठ निर्माण तिथि",
        "pageinfo-lastuser": "अन्तिम सम्पादक",
+       "pageinfo-lasttime": "नवीनतम सम्पादन तिथि",
        "pageinfo-edits": "सम्पादनक संख्या",
        "pageinfo-authors": "भिन्न लेखक संख्या",
+       "pageinfo-recent-edits": "लगक सम्पादन सभ के संख्या (पिछुल्का $1 में)",
+       "pageinfo-recent-authors": "लग में लेखक सभ के संख्या",
+       "pageinfo-magic-words": "जादु {{PLURAL:$1|शब्द|शब्द सभ}} ($1)",
+       "pageinfo-hidden-categories": "नुकाएल {{PLURAL:$1|संवर्ग|संवर्ग सभ}} ($1)",
+       "pageinfo-templates": "प्रयुक्त {{PLURAL:$1|आकृति|आकृति सभ}} ($1)",
+       "pageinfo-transclusions": "$1 {{PLURAL:$1|पन्ना|पन्ना}} पर ट्रान्सक्ल्युडेड",
+       "pageinfo-toolboxlink": "ऐ पन्ना पर जानकारी",
        "pageinfo-redirectsto": "मे पुनर्निर्देश:",
        "pageinfo-redirectsto-info": "जानकारी",
+       "pageinfo-contentpage": "सामग्री पृष्ठ सभ में गिनल जाएत अछि",
        "pageinfo-contentpage-yes": "हँ",
        "pageinfo-protect-cascading-yes": "हँ",
+       "pageinfo-category-info": "संवर्ग जानकारी",
        "pageinfo-category-pages": "पृष्ठ संख्या",
        "pageinfo-category-subcats": "उपसंवर्ग के संख्या",
        "pageinfo-category-files": "फाइल सभके संख्या",
        "file-info-size-pages": "$1 × $2 चित्रकण, संचिका आकार : $3, माइम प्रकार: $4, $5 {{PLURAL:$5|पन्ना|पन्ना सभ}}",
        "file-nohires": "ऐसँ बेशी आनन्तर्य उपलब्ध नै अछि।",
        "svg-long-desc": "एस.वी.जी. फाइल, मामूली रूपमे $1 × $2 चित्रकण, फाइलक आकार: $3",
+       "svg-long-desc-animated": "एनिमेटेड एस.वी.जी. फाइल,$1 × $2 चित्रकण, फाइलक आकार: $3",
+       "svg-long-error": "अमान्य एस॰वी॰जी फ़ाइल: $1",
        "show-big-image": "पूर्ण आनन्तर्य",
        "show-big-image-preview": "ऐ पूर्वदृश्यक आकार: $1.",
        "show-big-image-other": "दोसर {{PLURAL:$2|resolution|resolutions}}: $1।",
        "file-info-png-looped": "घुरियाएल",
        "file-info-png-repeat": "छुअल  $1 {{PLURAL:$1|बेर|बेर}}",
        "file-info-png-frames": "$1 {{PLURAL:$1|खाका |खाका  सभ }}",
+       "file-no-thumb-animation": "'''सूचना: प्राविधिक समस्या सभ के कारण इ फाइल के थम्बनेल ऐनिमेटिड नै होएत।'''",
        "newimages": "नव संचिका सबहक पेटार",
        "imagelisttext": "नीचाँ '''$1''' क सूची अछि {{PLURAL:$1|संचिका|संचिका सभ}} छाँटल $2।",
        "newimages-summary": "ऐ विशेष पन्नामे उपारोपित संचिका सभ देखाएल गेल अछि।",
        "version-software-version": "संस्करण",
        "version-entrypoints-header-url": "यू॰आर॰एल",
        "redirect-submit": "जाऊ",
+       "redirect-lookup": "ताकू:",
+       "redirect-value": "मूल्य:",
        "redirect-user": "प्रयोक्ता आई॰डी॰",
        "redirect-page": "पन्ना आई॰डी॰",
        "redirect-revision": "पन्ना अवतरण संख्या",
        "api-error-filetype-banned-type": "$1 {{PLURAL:$4|मान्य संचिका प्रकार नै अछि|मान्य संचिका प्रकार सभ नै अछि}}। मान्य अछि {{PLURAL:$3|संचिका प्रकार अछि|संचिका प्रकार सभ अछि}} $2।",
        "api-error-http": "आन्तरिक भ्रम: वितरकसँ सम्पर्क करबामे असफल",
        "api-error-illegal-filename": "ऐ तरहक संचिका नाम अमान्य अछि।",
+       "api-error-mustbeloggedin": "अहाँ के फाइल अपलोड करए के लेल सम्प्रवेष करए पडत।",
        "api-error-mustbeposted": "आन्तरिक भ्रम: आग्रहक लेल परिपाठ्य संचार संविद पाठ चाही।",
        "api-error-nomodule": "आन्तरिक भ्रम: कोनो उपारोपण तरीका निर्धारित नै अछि।",
        "api-error-ok-but-empty": "आन्तरिक भ्रम: वितरकसँ कोनो सम्पर्क नै",
        "api-error-unclassified": "एकटा अबूझ भ्रम आएल",
        "api-error-unknown-code": "अबूझ भ्रम:\"$1\"",
+       "api-error-unknown-warning": "अज्ञात चेतौनी: $1",
+       "api-error-unknownerror": "अज्ञात भ्रम:\"$1\"",
        "api-error-uploaddisabled": "ऐ विकीपर उपारोपण अशक्त कएल गेल अछि।",
+       "expand_templates_output": "परिणाम",
+       "expand_templates_xml_output": "XML आउटपुट",
+       "expand_templates_ok": "ठीक अछि",
+       "expand_templates_remove_comments": "टिप्पणी हटाउ",
+       "expand_templates_remove_nowiki": "परिणाम में <nowiki> ट्याग हटाउ",
+       "expand_templates_generate_xml": "XML के पार्स (parse) वृक्ष देखाउ",
        "pagelang-name": "पन्ना",
-       "pagelang-language": "भाषा"
+       "pagelang-language": "भाषा",
+       "pagelang-select-lang": "भाषा चुनु",
+       "right-pagelang": "पृष्ठ के भाषा परिवर्तन करू",
+       "action-pagelang": "पृष्ठ के भाषा परिवर्तन करू"
 }
index 7df7fe3..f4c1fc4 100644 (file)
        "searchprofile-everything-tooltip": "Пребарување по сета содржина (вклучувајќи страници за разговор)",
        "searchprofile-advanced-tooltip": "Пребарување во именски простори по избор",
        "search-result-size": "$1 ({{PLURAL:$2|еден збор|$2 збора}})",
-       "search-result-category-size": "{{PLURAL:$1|1 Ñ\87лен|$1 Ñ\87лена}} ({{PLURAL:$2|1 поткатегорија|$2 поткатегории}}, {{PLURAL:$3|1 податотека|$3 податотеки}})",
+       "search-result-category-size": "{{PLURAL:$1|1 Ñ\87лен|$1 Ñ\87ленови}} ({{PLURAL:$2|1 поткатегорија|$2 поткатегории}}, {{PLURAL:$3|1 податотека|$3 податотеки}})",
        "search-redirect": "(пренасочување $1)",
        "search-section": "(пасус $1)",
        "search-category": "(категорија $1)",
        "right-protect": "Менување на степени на заштита и уредување на каскадно заштитени страници",
        "right-editprotected": "Уредување на страници заштитени како „{{int:protect-level-sysop}}“",
        "right-editsemiprotected": "Уредување на страници заштитени како „{{int:protect-level-autoconfirmed}}“",
+       "right-editcontentmodel": "Уредување на содржинскиот модел на страница",
        "right-editinterface": "Уредување на кориснички посредник",
        "right-editusercssjs": "Уредување на CSS и JS податотеки на други корисници",
        "right-editusercss": "Уредување на CSS податотеки на други корисници",
        "action-viewmywatchlist": "преглед на вашиот список на набљудувања",
        "action-viewmyprivateinfo": "преглед на вашите лични податоци",
        "action-editmyprivateinfo": "уредување на вашите лични податоци",
+       "action-editcontentmodel": "уредување на содржинскиот модел на страница",
        "nchanges": "$1 {{PLURAL:$1|промена|промени}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|од последната посаета}}",
        "enhancedrc-history": "историја",
        "upload_directory_read_only": "Опслужувачот не може да запишува во именикот за подигање ($1).",
        "uploaderror": "Грешка во подигањето",
        "upload-recreate-warning": "'''Предупредување: Податотеката со тоа име е избришана или преместена.'''\n\nПодолу е наведена дневничката евиденција на бришење и преместување за оваа страница:",
-       "uploadtext": "Ð\9aоÑ\80иÑ\81Ñ\82еÑ\82е Ð³Ð¾ Ð´Ð¾Ð»Ð½Ð¸Ð¾Ñ\82 Ð¾Ð±Ñ\80азеÑ\86 Ð·Ð° Ð¿Ð¾Ð´Ð¸Ð³Ð°Ñ\9aе Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки.\nÐ\97а Ð¿Ñ\80еглед Ð¸Ð»Ð¸ Ð¿Ñ\80ебаÑ\80Ñ\83ваÑ\9aе Ð½Ð° Ð¿Ñ\80еÑ\82Ñ\85одно Ð¿Ð¾Ð´Ð¸Ð³Ð½Ð°Ñ\82и Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки, Ð¿Ð¾Ð³Ð»ÐµÐ´Ð½ÐµÑ\82е Ñ\98а [[Special:FileList|Ñ\81пиÑ\81окоÑ\82 Ð½Ð° Ð¿Ð¾Ð´Ð¸Ð³Ð½Ð°Ñ\82и Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки]]; Ð¿Ð¾Ð²Ñ\82оÑ\80ниÑ\82е Ð¿Ð¾Ð´Ð¸Ð³Ð°Ñ\9aа Ñ\81е Ð·Ð°Ð²ÐµÐ´ÐµÐ½Ð¸ Ð²Ð¾ [[Special:Log/upload|дневникоÑ\82 Ð½Ð° Ð¿Ð¾Ð´Ð¸Ð³Ð°Ñ\9aа]], Ð° Ð±Ñ\80иÑ\88еÑ\9aаÑ\82а Ñ\81е Ð·Ð°Ð²ÐµÐ´Ñ\83вааÑ\82 Ð²Ð¾ [[Special:Log/delete|дневникоÑ\82 Ð½Ð° Ð±Ñ\80иÑ\88еÑ\9aа]].\n\nÐ\97а Ð´Ð° Ð¿Ð¾Ñ\81Ñ\82авиÑ\82е Ñ\81лика Ð²Ð¾ Ñ\81Ñ\82Ñ\80аниÑ\86а, ÐºÐ¾Ñ\80иÑ\81Ñ\82еÑ\82е Ð²Ñ\80Ñ\81ка Ð²Ð¾ ÐµÐ´ÐµÐ½ Ð¾Ð´ Ñ\81ледниве Ð¾Ð±Ð»Ð¸Ñ\86и:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ð\9fодаÑ\82оÑ\82ека.jpg]]</nowiki></code>''' Ð·Ð° Ð²ÐµÑ\80зиÑ\98а Ð½Ð° Ñ\81ликаÑ\82а Ð²Ð¾ Ñ\86елоÑ\81на Ð³Ð¾Ð»ÐµÐ¼Ð¸Ð½Ð°\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ð\9fодаÑ\82оÑ\82ека.png|200px|thumb|left|опиÑ\81]]</nowiki></code>''' Ð·Ð° Ð²ÐµÑ\80зиÑ\98а Ð½Ð° Ñ\81ликаÑ\82а Ñ\81о Ð³Ð¾Ð»ÐµÐ¼Ð¸Ð½Ð° Ð¾Ð´ 200 Ð¿Ð¸ÐºÑ\81ели Ð¿Ñ\80икажана Ð²Ð¾ Ñ\81оодвеÑ\82на ÐºÑ\83Ñ\82иÑ\98а, Ñ\81о Ð¾Ð¿Ð¸Ñ\81 ÐºÐ°ÐºÐ¾ Ñ\88Ñ\82о Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾ Ð²Ð¾ '''опиÑ\81'''\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Ð\9fодаÑ\82оÑ\82ека.ogg]]</nowiki></code>''' Ð·Ð° Ð´Ð¸Ñ\80екÑ\82но поврзување со податотеката без нејзино прикажување",
+       "uploadtext": "Ð\9aоÑ\80иÑ\81Ñ\82еÑ\82е Ð³Ð¾ Ð´Ð¾Ð»Ð½Ð¸Ð¾Ñ\82 Ð¾Ð±Ñ\80азеÑ\86 Ð·Ð° Ð¿Ð¾Ð´Ð¸Ð³Ð°Ñ\9aе Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки.\nÐ\97а Ð¿Ñ\80еглед Ð¸Ð»Ð¸ Ð¿Ñ\80ебаÑ\80Ñ\83ваÑ\9aе Ð½Ð° Ð¿Ñ\80еÑ\82Ñ\85одно Ð¿Ð¾Ð´Ð¸Ð³Ð½Ð°Ñ\82и Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки, Ð¿Ð¾Ð³Ð»ÐµÐ´Ð½ÐµÑ\82е Ñ\98а [[Special:FileList|Ñ\81пиÑ\81окоÑ\82 Ð½Ð° Ð¿Ð¾Ð´Ð¸Ð³Ð½Ð°Ñ\82и Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки]]; Ð¿Ð¾Ð²Ñ\82оÑ\80ниÑ\82е Ð¿Ð¾Ð´Ð¸Ð³Ð°Ñ\9aа Ñ\81е Ð·Ð°Ð²ÐµÐ´ÐµÐ½Ð¸ Ð²Ð¾ [[Special:Log/upload|дневникоÑ\82 Ð½Ð° Ð¿Ð¾Ð´Ð¸Ð³Ð°Ñ\9aа]], Ð° Ð±Ñ\80иÑ\88еÑ\9aаÑ\82а Ñ\81е Ð·Ð°Ð²ÐµÐ´Ñ\83вааÑ\82 Ð²Ð¾ [[Special:Log/delete|дневникоÑ\82 Ð½Ð° Ð±Ñ\80иÑ\88еÑ\9aа]].\n\nÐ\97а Ð´Ð° Ð¿Ð¾Ñ\81Ñ\82авиÑ\82е Ñ\81лика Ð²Ð¾ Ñ\81Ñ\82Ñ\80аниÑ\86а, ÐºÐ¾Ñ\80иÑ\81Ñ\82еÑ\82е Ð²Ñ\80Ñ\81ка Ð²Ð¾ ÐµÐ´ÐµÐ½ Ð¾Ð´ Ñ\81ледниве Ð¾Ð±Ð»Ð¸Ñ\86и:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ð\9fодаÑ\82оÑ\82ека.jpg]]</nowiki></code>''' Ð·Ð° Ð²ÐµÑ\80зиÑ\98а Ð½Ð° Ñ\81ликаÑ\82а Ð²Ð¾ Ñ\86елоÑ\81на Ð³Ð¾Ð»ÐµÐ¼Ð¸Ð½Ð°\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ð\9fодаÑ\82оÑ\82ека.png|200px|thumb|left|опиÑ\81]]</nowiki></code>''' Ð·Ð° Ð²ÐµÑ\80зиÑ\98а Ð½Ð° Ñ\81ликаÑ\82а Ñ\81о Ð³Ð¾Ð»ÐµÐ¼Ð¸Ð½Ð° Ð¾Ð´ 200 Ð¿Ð¸ÐºÑ\81ели Ð¿Ñ\80икажана Ð²Ð¾ Ñ\81оодвеÑ\82на ÐºÑ\83Ñ\82иÑ\98а, Ñ\81о Ð¾Ð¿Ð¸Ñ\81 ÐºÐ°ÐºÐ¾ Ñ\88Ñ\82о Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾ Ð²Ð¾ '''опиÑ\81'''\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Ð\9fодаÑ\82оÑ\82ека.ogg]]</nowiki></code>''' Ð·Ð° Ð½ÐµÐ¿Ð¾Ñ\81Ñ\80едно поврзување со податотеката без нејзино прикажување",
        "upload-permitted": "Допуштени податотечни типови: $1.",
        "upload-preferred": "Претпочитани податотечни типови: $1.",
        "upload-prohibited": "Недопуштени податотечни типови: $1.",
        "ncategories": "$1 {{PLURAL:$1|категорија|категории}}",
        "ninterwikis": "$1 {{PLURAL:$1|меѓувики|меѓувикија}}",
        "nlinks": "$1 {{PLURAL:$1|врска|врски}}",
-       "nmembers": "$1 {{PLURAL:$1|Ñ\87лен|Ñ\87лена}}",
-       "nmemberschanged": "$1 â\86\92 $2 {{PLURAL:$2|Ñ\87лен|Ñ\87лена}}",
+       "nmembers": "$1 {{PLURAL:$1|Ñ\87лен|Ñ\87ленови}}",
+       "nmemberschanged": "$1 â\86\92 $2 {{PLURAL:$2|Ñ\87лен|Ñ\87ленови}}",
        "nrevisions": "$1 {{PLURAL:$1|измена|измени}}",
        "nviews": "$1 {{PLURAL:$1|преглед|прегледи}}",
        "nimagelinks": "Се користи на $1 {{PLURAL:$1|страница|страници}}",
        "ancientpages": "Најстари статии",
        "move": "Премести",
        "movethispage": "Премести ја страницава",
-       "unusedimagestext": "Следниве Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ð¿Ð¾Ñ\81Ñ\82оÑ\98аÑ\82, Ð½Ð¾ Ð½Ðµ Ñ\81е Ð²Ð¼ÐµÑ\82наÑ\82и Ð²Ð¾ Ð½Ð¸ÐµÐ´Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а.\nÐ\98маÑ\98Ñ\82е Ð¿Ñ\80едвид Ð´ÐµÐºÐ° Ð´Ñ\80Ñ\83ги Ð¼Ñ\80ежни Ð¼ÐµÑ\81Ñ\82а Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81Ñ\82авааÑ\82 Ð²Ñ\80Ñ\81ки Ð´Ð¾ Ð½ÐµÐ° Ñ\81о Ð´Ð¸Ñ\80екÑ\82на URL-адреса, и затоа може да е наведена овде и покрај тоа што е во активна употреба.",
+       "unusedimagestext": "Следниве Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ð¿Ð¾Ñ\81Ñ\82оÑ\98аÑ\82, Ð½Ð¾ Ð½Ðµ Ñ\81е Ð²Ð¼ÐµÑ\82наÑ\82и Ð²Ð¾ Ð½Ð¸ÐµÐ´Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а.\nÐ\98маÑ\98Ñ\82е Ð¿Ñ\80едвид Ð´ÐµÐºÐ° Ð´Ñ\80Ñ\83ги Ð¼Ñ\80ежни Ð¼ÐµÑ\81Ñ\82а Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81Ñ\82авааÑ\82 Ð²Ñ\80Ñ\81ки Ð´Ð¾ Ð½ÐµÐ° Ñ\81о Ð½ÐµÐ¿Ð¾Ñ\81Ñ\80една URL-адреса, и затоа може да е наведена овде и покрај тоа што е во активна употреба.",
        "unusedcategoriestext": "Следните категории постојат и покрај тоа што ниедна статија и категорија не ги користи.",
        "notargettitle": "Нема цел",
        "notargettext": "Не одредивте целна страница или корисник на кој би се применила функцијата.",
        "emailuser-title-target": "Составување на е-пошта за {{GENDER:$1|корисникот}}",
        "emailuser-title-notarget": "Е-пошта за корисникот",
        "emailpage": "Е-пошта",
-       "emailpagetext": "Ð\9cожеÑ\82е Ð´Ð° Ð³Ð¾ Ñ\83поÑ\82Ñ\80ебиÑ\82е Ñ\81ледниов Ð¾Ð±Ñ\80азеÑ\86 Ð·Ð° Ð´Ð° Ð¼Ñ\83 Ð¸Ñ\81пÑ\80аÑ\82иÑ\82е Ðµ-поÑ\88Ñ\82а Ð½Ð° Ð¾Ð²Ð¾Ñ\98 {{GENDER:$1|коÑ\80иÑ\81ник}}.\nÐ\90дÑ\80еÑ\81а ÐºÐ¾Ñ\98а Ñ\98а Ð¸Ð¼Ð°Ñ\82е Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾ Ð²Ð¾ [[Special:Preferences|ваÑ\88иÑ\82е Ð½Ð°Ð³Ð¾Ð´Ñ\83ваÑ\9aа]] Ñ\9cе Ñ\81е Ð¿Ñ\80икаже Ð²Ð¾ Ð¿Ð¾Ð»ÐµÑ\82о â\80\9eÐ\9eдâ\80\9c Ð½Ð° Ð¿Ð¾Ñ\80акаÑ\82а, Ñ\81о Ñ\88Ñ\82о Ð¿Ñ\80имаÑ\87оÑ\82 Ñ\9cе Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð²Ð¸ Ð¾Ð´Ð³Ð¾Ð²Ð¾Ñ\80и Ð´Ð¸Ñ\80екÑ\82но вам.",
+       "emailpagetext": "Ð\9cожеÑ\82е Ð´Ð° Ð³Ð¾ Ñ\83поÑ\82Ñ\80ебиÑ\82е Ñ\81ледниов Ð¾Ð±Ñ\80азеÑ\86 Ð·Ð° Ð´Ð° Ð¼Ñ\83 Ð¸Ñ\81пÑ\80аÑ\82иÑ\82е Ðµ-поÑ\88Ñ\82а Ð½Ð° Ð¾Ð²Ð¾Ñ\98 {{GENDER:$1|коÑ\80иÑ\81ник}}.\nÐ\90дÑ\80еÑ\81а ÐºÐ¾Ñ\98а Ñ\98а Ð¸Ð¼Ð°Ñ\82е Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾ Ð²Ð¾ [[Special:Preferences|ваÑ\88иÑ\82е Ð½Ð°Ð³Ð¾Ð´Ñ\83ваÑ\9aа]] Ñ\9cе Ñ\81е Ð¿Ñ\80икаже Ð²Ð¾ Ð¿Ð¾Ð»ÐµÑ\82о â\80\9eÐ\9eдâ\80\9c Ð½Ð° Ð¿Ð¾Ñ\80акаÑ\82а, Ñ\81о Ñ\88Ñ\82о Ð¿Ñ\80имаÑ\87оÑ\82 Ñ\9cе Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð²Ð¸ Ð¾Ð´Ð³Ð¾Ð²Ð¾Ñ\80и Ð½ÐµÐ¿Ð¾Ñ\81Ñ\80едно вам.",
        "defemailsubject": "{{SITENAME}} — писмо од корисникот „$1“",
        "usermaildisabled": "Корисничката е-пошта е оневозможена",
        "usermaildisabledtext": "Не можете да испратите е-порака до дрги корисници на ова вики",
        "ipb-otherblocks-header": "{{PLURAL:$1|Друго блокирање|Други блокирања}}",
        "unblock-hideuser": "Не можете да го одблокирате корисников бидејќи неговото корисничко име е скриено.",
        "ipb_cant_unblock": "Грешка: Блокирањето $1 не постои.\nМожеби веќе е одблокиран.",
-       "ipb_blocked_as_range": "Ð\93Ñ\80еÑ\88ка: IP-адÑ\80еÑ\81аÑ\82а $1 Ð½Ðµ Ðµ Ð´Ð¸Ñ\80екÑ\82но Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана Ð¸ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð´ÐµÐ±Ð»Ð¾ÐºÐ¸Ñ\80а.\nТаа Ðµ Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана ÐºÐ°ÐºÐ¾ Ð´ÐµÐ» Ð¾Ð´ Ð±Ð»Ð¾ÐºÐ¾Ñ\82 Ð°Ð´Ñ\80еÑ\81и $2, ÐºÐ¾Ñ\98 Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð´Ðµблокира.",
+       "ipb_blocked_as_range": "Ð\93Ñ\80еÑ\88ка: IP-адÑ\80еÑ\81аÑ\82а $1 Ð½Ðµ Ðµ Ð½ÐµÐ¿Ð¾Ñ\81Ñ\80едно Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана Ð¸ Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð¾Ð´Ð±Ð»Ð¾ÐºÐ¸Ñ\80а.\nТаа Ðµ Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана ÐºÐ°ÐºÐ¾ Ð´ÐµÐ» Ð¾Ð´ Ð±Ð»Ð¾ÐºÐ¾Ñ\82 Ð°Ð´Ñ\80еÑ\81и $2, ÐºÐ¾Ñ\98 Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð¾Ð´блокира.",
        "ip_range_invalid": "Неважечки IP дијапазон на адреси.",
        "ip_range_toolarge": "Не се дозволени опсежни блокирања поголеми од /$1.",
        "proxyblocker": "Блокер на застапници (proxy)",
        "importcantopen": "Не може да се отвори увезената податотека",
        "importbadinterwiki": "Лоша меѓувики-врска",
        "importsuccess": "Увезувањето е завршено!",
-       "importnosources": "Ð\9dема Ð¾Ð¿Ñ\80еделено Ð¼ÐµÑ\93Ñ\83вики-извоÑ\80и Ð·Ð° Ñ\83воз Ð¸ Ð´Ð¸Ñ\80екÑ\82ните подигања на историја се оневозможени.",
+       "importnosources": "Ð\9dема Ð¾Ð¿Ñ\80еделено Ð¼ÐµÑ\93Ñ\83вики-извоÑ\80и Ð·Ð° Ñ\83воз Ð¸ Ð½ÐµÐ¿Ð¾Ñ\81Ñ\80едните подигања на историја се оневозможени.",
        "importnofile": "Нема подигнато увозна податотека.",
        "importuploaderrorsize": "Подигањето на увозната податотека не успеа.\nПодатотеката ја надминува допуштената големина.",
        "importuploaderrorpartial": "Подигањето на увозна податотека не успеа.\nПодатотеката е само делумно подигната.",
        "exif-sensingmethod-7": "Тробоен линеарен сензор",
        "exif-sensingmethod-8": "Бојно-последователен линеарен сензор",
        "exif-filesource-3": "Дигитален фотоапарат",
-       "exif-scenetype-1": "Ð\94иÑ\80екÑ\82но фотографирана слика",
+       "exif-scenetype-1": "Ð\9dепоÑ\81Ñ\80едно фотографирана слика",
        "exif-customrendered-0": "Нормален процес",
        "exif-customrendered-1": "Нестандарден процес",
        "exif-exposuremode-0": "Автоматско изложување",
        "specialpages-group-wiki": "Податоци и алатки",
        "specialpages-group-redirects": "Пренасочување на службени страници",
        "specialpages-group-spam": "Алатки против спам",
+       "specialpages-group-developer": "Развојни алатки",
        "blankpage": "Празна страница",
        "intentionallyblankpage": "Оваа страница намерно е оставена празна",
        "external_image_whitelist": "  #Остави го овој ред таков каков што е<pre>\n#Додавај фрагменти на регуларни изрази (само делот кој се наоѓа помеѓу //) подолу\n#Ова ќе биде споредено со URL-та на надворешните (hotlinked) слики\n#Оние кои одговараат ќе бидат прикажани како слики, до другите ќе биде прикажана само врската\n#Се прави разлика помеѓу мали и големи букви\n\n#Стави ги сите фрагменти на регуларни изрази над овој ред. Оставете го овој ред таков каков што е</pre>",
        "expand_templates_generate_xml": "Прикажи XML-дрво на расчленувањето",
        "expand_templates_generate_rawhtml": "Прикажувај сиров HTML",
        "expand_templates_preview": "Преглед",
+       "expand_templates_preview_fail_html": "<em>Бидејќи {{SITENAME}} има овозможено сиров HTML и се јави губиток на седнички податоци, прегледот е скриен како мерка на претпазливост против напади со JavaScript.</em>\n\n<strong>Ако ова е е легитимен обид за преглед, тогаш обидете се повторно.</strong>\nАко не работи и тогаш, [[Special:UserLogout|одјавете се]] и повторно најавете се.",
+       "expand_templates_preview_fail_html_anon": "<em>Бидејќи {{SITENAME}} има овозможено сиров HTML, а вие не сте најавени, прегледот е скриен како мерка на претпазливост против напади со JavaScript.</em>\n\n<strong>Ако ова е е легитимен обид за преглед, тогаш обидете се повторно.</strong>\nАко не работи и тогаш, [[Special:UserLogout|одјавете се]] и повторно најавете се.",
        "pagelanguage": "Изборник за јазик на страницата",
        "pagelang-name": "Страница",
        "pagelang-language": "Јазик",
        "log-name-pagelang": "Дневник на менување на јазикот",
        "log-description-pagelang": "Ова е дневник на менувања на јазикот на страницата.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|го смени}} јазикот на страницата $3 од $4 на $5.",
-       "default-skin-not-found": "За жал, основното руво на вашето вики оопределено во <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code> не е достапно.\n\nВашата воспоставка ги опфаќа следниве рува. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.\n\n$2\n\n; Ако штотуку го имате воспоставено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code>skins/</code> од него.\n* Клонирајќи едно од складиштата <code>mediawiki/skins/*</code> преку git во папката <code dir=\"ltr\">skins/</code> на вашата воспоставка на МедијаВики.\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики.\n\n; Ако штотуку го имате надградено МедијаВики:\n: МедијаВики 1.24 и поновите верзии повеќе не ги вклучуваат воспоставените рува автоматски (погл. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Прирачник: Самооткривање на рува]). Можете да ги прекопирате следниве редови во <code>LocalSettings.php</code> за да ги вклучите сите моментално воспоставени рува:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ако штотуку го имате изменето <code>LocalSettings.php</code>:\n: Проверете дали правилно се напишани називите на рувата.",
-       "default-skin-not-found-no-skins": "За жал, основното руво на вашето вики, определено во <code>$wgDefaultSkin</code> како <code>$1</code>, не е достапно.\n\nНемате воспоставено ниедно руво.\n\n; Ако штотуку го имате воспоставено или надградено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. МедијаВики 1.24 и поновите верзии немаат рува во главното складиште. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n:* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code dir=\"ltr\">skins/</code> од него.\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.",
+       "default-skin-not-found": "За жал, основното руво на вашето вики оопределено во <code dir=\"ltr\">$wgDefaultSkin</code> како <code>$1</code> не е достапно.\n\nВашата воспоставка ги опфаќа следниве рува. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.\n\n$2\n\n; Ако штотуку го имате воспоставено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code>skins/</code> од него.\n:* Преземање на tarball-и за рува од [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n* Клонирајќи едно од складиштата <code>mediawiki/skins/*</code> преку git во папката <code dir=\"ltr\">skins/</code> на вашата воспоставка на МедијаВики.\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики.\n\n; Ако штотуку го имате надградено МедијаВики:\n: МедијаВики 1.24 и поновите верзии повеќе не ги вклучуваат воспоставените рува автоматски (погл. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Прирачник: Самооткривање на рува]). Можете да ги прекопирате следниве редови во <code>LocalSettings.php</code> за да ги вклучите сите моментално воспоставени рува:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ако штотуку го имате изменето <code>LocalSettings.php</code>:\n: Проверете дали правилно се напишани називите на рувата.",
+       "default-skin-not-found-no-skins": "За жал, основното руво на вашето вики, определено во <code>$wgDefaultSkin</code> како <code>$1</code>, не е достапно.\n\nНемате воспоставено ниедно руво.\n\n; Ако штотуку го имате воспоставено или надградено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. МедијаВики 1.24 и поновите верзии немаат рува во главното складиште. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n:* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code dir=\"ltr\">skins/</code> од него.\n:* Преземање на tarball-и за поединечни рува од [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (вклучено)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''исклучено''')",
        "mediastatistics": "Статистики за слики и снимки",
index 1faf2c7..6fdd349 100644 (file)
        "right-protect": "സംരക്ഷണ മാനത്തിൽ മാറ്റം വരുത്തുക, നിർഝരിത മാർഗ്ഗത്തിൽ സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്ന താളുകൾ തിരുത്തുക",
        "right-editprotected": "\"{{int:protect-level-sysop}}\" എന്ന് അടയാളപ്പെടുത്തി സംരക്ഷിച്ചിട്ടുള്ള താളുകൾ തിരുത്തുക",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" എന്നടയാളപ്പെടുത്തി സംരക്ഷിച്ചിട്ടുള്ള താളുകൾ തിരുത്തുക",
+       "right-editcontentmodel": "താളിന്റെ ഉള്ളടക്ക രീതി തിരുത്തുക",
        "right-editinterface": "ഉപയോക്തൃ സമ്പർക്കമുഖത്തിൽ മാറ്റം വരുത്തുക",
        "right-editusercssjs": "മറ്റ് ഉപയോക്താക്കളുടെ CSS, JS പ്രമാണങ്ങൾ തിരുത്തുക",
        "right-editusercss": "മറ്റ് ഉപയോക്താക്കളുടെ CSS പ്രമാണങ്ങൾ തിരുത്തുക",
        "action-viewmywatchlist": "താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക കാണുക",
        "action-viewmyprivateinfo": "താങ്കളുടെ സ്വകാര്യവിവരങ്ങൾ കാണുക",
        "action-editmyprivateinfo": "താങ്കളുടെ സ്വകാര്യവിവരങ്ങൾ തിരുത്തുക",
+       "action-editcontentmodel": "താളിന്റെ ഉള്ളടക്ക രീതി തിരുത്തുക",
        "nchanges": "{{PLURAL:$1|ഒരു മാറ്റം|$1 മാറ്റങ്ങൾ}}",
        "enhancedrc-since-last-visit": "കഴിഞ്ഞ സന്ദർശനത്തിനു ശേഷം {{PLURAL:$1|ഒരെണ്ണം|$1 എണ്ണം}}",
        "enhancedrc-history": "നാൾവഴി",
        "specialpages-group-wiki": "വിവരങ്ങളും ഉപകരണങ്ങളും",
        "specialpages-group-redirects": "തിരിച്ചുവിടൽ സംബന്ധിച്ച പ്രത്യേക താളുകൾ",
        "specialpages-group-spam": "പാഴെഴുത്ത് ഉപകരണങ്ങൾ",
+       "specialpages-group-developer": "വികസന ഉപകരണങ്ങൾ",
        "blankpage": "ശൂന്യതാൾ",
        "intentionallyblankpage": "ഈ താൾ മനഃപൂർവ്വം ശൂന്യമായി ഇട്ടിരിക്കുന്നതാണ്‌.",
        "external_image_whitelist": "#ഈ വരി ഇതേ പോലെ സൂക്ഷിക്കുക <pre>\n#റെഗുലർ എക്സ്പ്രെഷൻ ഘടകങ്ങൾ (ഭാഗം // എന്നതിന്റെയുള്ളിൽ ആയിരിക്കുന്ന വിധത്തിൽ) താഴെ ചേർക്കുക\n#ഇത് പുറത്തുനിന്നുള്ള (ഹോട്ട്ലിങ്ക്ഡ്) ചിത്രങ്ങളുടെ യൂ.ആർ.എല്ലുമായി ഒത്തുനോക്കുന്നതാണ്.\n#പൊരുത്തപ്പെട്ടു പോകുന്ന യൂ.ആർ.എല്ലുകൾ മാത്രം പ്രദർശിപ്പിക്കും, അല്ലാത്തവ ചിത്രത്തിലേയ്ക്കുള്ള കണ്ണിയായി കാണും\n#കുറിപ്പുകളായി കണക്കാക്കാൻ വരികളുടെയാദ്യം # ചേർക്കുക\n#ഇത് കേസ് സെൻസിറ്റീവ് ആണ്\n\n#എല്ലാ റെജെക്സ് ഘടകങ്ങളും ഈ വരിക്ക് മേലേയായി ചേർക്കുക. ഈ വരി ഇതേ പോലെ നിലനിർത്തുക </pre>",
        "revdelete-uname-unhid": "ഉപയോക്തൃനാമം മറച്ചത് ഒഴിവാക്കിയിരിക്കുന്നു",
        "revdelete-restricted": "കാര്യനിർവാഹകർക്ക് പ്രവർത്തന അതിരുകൾ ഏർപ്പെടുത്തിയിരിക്കുന്നു",
        "revdelete-unrestricted": "കാര്യനിർവാഹകർക്ക് ഏർപ്പെടുത്തിയ പ്രവർത്തന അതിരുകൾ നീക്കം ചെയ്തിരിക്കുന്നു",
+       "logentry-merge-merge": "$3 എന്ന താൾ $4 എന്നതിലേക്ക് ($5 നാൾപ്പതിപ്പ് വരെ), $1 {{GENDER:$2|ലയിപ്പിച്ചു}}",
        "logentry-move-move": "$1 എന്ന ഉപയോക്താവ് $3 എന്ന താൾ $4 എന്നാക്കി {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "logentry-move-move-noredirect": "$3 എന്ന താൾ $4 എന്ന തലക്കെട്ടിലേയ്ക്ക് തിരിച്ചുവിടലില്ലാതെ $1 {{GENDER:$2|മാറ്റി}}",
        "logentry-move-move_redir": "$3 എന്ന താൾ $4 എന്ന താളിനു മുകളിലേയ്ക്ക്, $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "expand_templates_generate_xml": "എക്സ്.എം.എൽ. പാഴ്‌സർ ട്രീ പ്രദർശിപ്പിക്കുക",
        "expand_templates_generate_rawhtml": "അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ. പ്രദർശിപ്പിക്കുക",
        "expand_templates_preview": "എങ്ങനെയുണ്ടെന്നു കാണുക",
+       "expand_templates_preview_fail_html": "<em>{{SITENAME}} സംരംഭത്തിൽ അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ സജ്ജമാക്കിയിരിക്കുന്നതിനാൽ, സെഷൻ വിവരങ്ങൾ നഷ്ടപ്പെട്ടിരിക്കുന്നു, ജാവാസ്ക്രിപ്റ്റ് ആക്രമണങ്ങൾക്കെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ എങ്ങനെയുണ്ടെന്ന് കാണൽ മറച്ചിരിക്കുകയാണ്.</em>\n\n<strong>ഇത് എങ്ങനെയുണ്ടെന്ന് കാണാനുള്ള യഥാർത്ഥശ്രമമാണെങ്കിൽ വീണ്ടും ശ്രമിക്കുക.</strong>\nഇപ്പോഴും പ്രവർത്തിക്കുന്നില്ലെങ്കിൽ, [[Special:UserLogout|പുറത്ത് കടന്ന്]] വീണ്ടും പ്രവേശിച്ച ശേഷം പരീക്ഷിക്കുക.",
+       "expand_templates_preview_fail_html_anon": "<em>{{SITENAME}} സംരംഭത്തിൽ അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ സജ്ജമാക്കിയിരിക്കുന്നതിനാൽ, സെഷൻ വിവരങ്ങൾ നഷ്ടപ്പെട്ടിരിക്കുന്നു, ജാവാസ്ക്രിപ്റ്റ് ആക്രമണങ്ങൾക്കെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ എങ്ങനെയുണ്ടെന്ന് കാണൽ മറച്ചിരിക്കുകയാണ്.</em>\n\n<strong>ഇത് എങ്ങനെയുണ്ടെന്ന് കാണാനുള്ള യഥാർത്ഥശ്രമമാണെങ്കിൽ [[Special:UserLogin|പ്രവേശിച്ച ശേഷം]] വീണ്ടും ശ്രമിക്കുക.</strong>",
        "pagelanguage": "താളിന്റെ ഭാഷാ തിരഞ്ഞെടുപ്പ് സൗകര്യം",
        "pagelang-name": "താൾ",
        "pagelang-language": "ഭാഷ",
        "log-name-pagelang": "ഭാഷ മാറ്റലിന്റെ രേഖ",
        "log-description-pagelang": "താളുകളുടെ ഭാഷകൾ മാറ്റിയതിന്റെ രേഖകൾ ഇവിടെക്കാണാം.",
        "logentry-pagelang-pagelang": "$3 എന്ന താളിന്റെ ഭാഷയായിരുന്ന $4, $1 $5 ആയി {{GENDER:$2|മാറ്റി}}.",
-       "default-skin-not-found": "അയ്യോ! <code dir=\"ltr\"> $wgDefaultSkin</code> നിർവചിക്കപ്പെട്ടതുപ്രകാരമുള്ള താങ്കളുടെ വിക്കിയുടെ സ്വതേയുള്ള ദൃശ്യരൂപമായ <code>$1</code>, ലഭ്യമല്ല.\n\nതാങ്കളുടെ ഇൻസ്റ്റലേഷനിൽ താഴെക്കൊടുക്കുന്ന ദൃശ്യരൂപങ്ങൾ ഉണ്ടാകേണ്ടതാണ്. അവ എങ്ങനെ ക്രമീകരിക്കാം എന്നും സ്വതേ വേണ്ടത് എങ്ങനെ സജ്ജമാക്കാം എന്നും [https://www.mediawiki.org/wiki/Manual:Skin_configuration ദൃശ്യരൂപം സജ്ജമാക്കൽ സഹായിയിൽ] കാണുക.\n\n$2\n\n; താങ്കൾ മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: ഗിറ്റിൽ നിന്ന് അല്ലെങ്കിൽ മറ്റെങ്കിലും മാർഗ്ഗം ഉപയോഗിച്ച് സോഴ്സ് കോഡ് നേരിട്ട് ഉപയോഗിക്കുകയായിരിന്നെങ്കിൽ ഇത് സംഭവിച്ചേക്കാം. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* താങ്കളുടെ മീഡിയവിക്കി ഇൻസ്റ്റലേഷന്റെ <code dir=\"ltr\">skins/</code> ഡയറക്ടറിയിലേക്ക് ഗിറ്റ് ഉപയോഗിച്ച് <code>mediawiki/skins/*</code> റെപ്പോസിറ്ററികളിലൊന്ന് ക്ലോൺ ചെയ്യുക.\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല.\n\n; മീഡിയവിക്കി താങ്കൾ അപ്ഗ്രേഡ് ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: മീഡിയവിക്കി 1.24 ഒപ്പം അതിനു ശേഷമുള്ളവയും ഇൻസ്റ്റോൾ ചെയ്തിട്ടുള്ള ദൃശ്യരൂപങ്ങൾ സ്വതേ സജ്ജമാക്കുന്നില്ല ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery ദൃശ്യരൂപം ഓട്ടോഡിസ്കവറി സഹായം] കാണുക). ഇൻസ്റ്റോൾ ചെയ്തിട്ടുള്ള ദൃശ്യരൂപങ്ങൾ സജ്ജമാക്കുന്നതിനായി ഇനിക്കൊടുക്കുന്ന വരികൾ <code>LocalSettings.php</code> എന്നതിലോട്ട് പകർത്തുക:\n\n<pre dir=\"ltr\">$3</pre>\n\n; <code>LocalSettings.php</code> താളിൽ മാറ്റം വരുത്തിയതേയുള്ളുവെങ്കിൽ:\n: ദൃശ്യരൂപങ്ങളുടെ പേരിൽ അക്ഷരപിശകുകളുണ്ടോയെന്ന് ആവർത്തിച്ച് പരിശോധിക്കുക.",
-       "default-skin-not-found-no-skins": "അയ്യോ! <code dir=\"ltr\"> $wgDefaultSkin</code> നിർവചിക്കപ്പെട്ടതുപ്രകാരമുള്ള താങ്കളുടെ വിക്കിയുടെ സ്വതേയുള്ള ദൃശ്യരൂപമായ <code>$1</code>, ലഭ്യമല്ല.\n\nതാങ്കൾ ദൃശ്യരൂപങ്ങളൊന്നും ഇൻസ്റ്റോൾ ചെയ്തിട്ടില്ല.\n\n; താങ്കൾ മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തതേ അല്ലെങ്കിൽ അപ്‌ഗ്രേഡ് ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: ഗിറ്റിൽ നിന്ന് അല്ലെങ്കിൽ മറ്റെങ്കിലും മാർഗ്ഗം ഉപയോഗിച്ച് സോഴ്സ് കോഡ് നേരിട്ട് ഉപയോഗിക്കുകയായിരിന്നെങ്കിൽ ഇത് സംഭവിച്ചേക്കാം. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* താങ്കളുടെ മീഡിയവിക്കി ഇൻസ്റ്റലേഷന്റെ <code dir=\"ltr\">skins/</code> ഡയറക്ടറിയിലേക്ക് ഗിറ്റ് ഉപയോഗിച്ച് <code>mediawiki/skins/*</code> റെപ്പോസിറ്ററികളിലൊന്ന് ക്ലോൺ ചെയ്യുക.\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല. ദൃശ്യരൂപങ്ങൾ എങ്ങനെ ക്രമീകരിക്കാം എന്നും സ്വതേ വേണ്ടത് എങ്ങനെ സജ്ജമാക്കാം എന്നും [https://www.mediawiki.org/wiki/Manual:Skin_configuration ദൃശ്യരൂപം സജ്ജമാക്കൽ സഹായിയിൽ] കാണുക.",
+       "default-skin-not-found": "à´\85à´¯àµ\8dà´¯àµ\8b! <code dir=\"ltr\"> $wgDefaultSkin</code> à´¨à´¿àµ¼à´µà´\9aà´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¤àµ\81à´ªàµ\8dà´°à´\95ാരമàµ\81à´³àµ\8dà´³ à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´µà´¿à´\95àµ\8dà´\95à´¿à´¯àµ\81à´\9fàµ\86 à´¸àµ\8dവതàµ\87à´¯àµ\81à´³àµ\8dà´³ à´¦àµ\83à´¶àµ\8dയരàµ\82പമായ <code>$1</code>, à´²à´­àµ\8dയമലàµ\8dà´².\n\nതാà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\87ൻസàµ\8dà´±àµ\8dറലàµ\87ഷനിൽ à´¤à´¾à´´àµ\86à´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99ൾ à´\89à´£àµ\8dà´\9fà´¾à´\95àµ\87à´£àµ\8dà´\9fതാണàµ\8d. à´\85à´µ à´\8eà´\99àµ\8dà´\99à´¨àµ\86 à´\95àµ\8dà´°à´®àµ\80à´\95à´°à´¿à´\95àµ\8dà´\95à´¾à´\82 à´\8eà´¨àµ\8dà´¨àµ\81à´\82 à´¸àµ\8dവതàµ\87 à´µàµ\87à´£àµ\8dà´\9fà´¤àµ\8d à´\8eà´\99àµ\8dà´\99à´¨àµ\86 à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95à´¾à´\82 à´\8eà´¨àµ\8dà´¨àµ\81à´\82 [https://www.mediawiki.org/wiki/Manual:Skin_configuration à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\82 à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95ൽ à´¸à´¹à´¾à´¯à´¿à´¯à´¿àµ½] à´\95ാണàµ\81à´\95.\n\n$2\n\n; à´¤à´¾à´\99àµ\8dà´\95ൾ à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dതതàµ\87 à´\89à´³àµ\8dà´³àµ\81à´µàµ\86à´\99àµ\8dà´\95ിൽ:\n: à´\97à´¿à´±àµ\8dറിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\8d à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´®à´±àµ\8dà´±àµ\86à´\99àµ\8dà´\95à´¿à´²àµ\81à´\82 à´®à´¾àµ¼à´\97àµ\8dà´\97à´\82 à´\89പയàµ\8bà´\97à´¿à´\9aàµ\8dà´\9aàµ\8d à´¸àµ\8bà´´àµ\8dà´¸àµ\8d à´\95àµ\8bà´¡àµ\8d à´¨àµ\87à´°à´¿à´\9fàµ\8dà´\9fàµ\8d à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95àµ\81à´\95യായിരിനàµ\8dà´¨àµ\86à´\99àµ\8dà´\95ിൽ à´\87à´¤àµ\8d à´¸à´\82ഭവിà´\9aàµ\8dà´\9aàµ\87à´\95àµ\8dà´\95à´¾à´\82. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's à´¦àµ\83à´¶àµ\8dയരàµ\82à´ª à´¡à´¯à´±à´\95àµ\8dà´\9fറിയിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\8d], à´\87നിà´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´®à´¾àµ¼à´\97àµ\8dà´\97à´\99àµ\8dà´\99ൾ à´\89പയàµ\8bà´\97à´¿à´\9aàµ\8dà´\9aàµ\8d à´\8fതാനà´\82 à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99ൾ à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dയാൻ à´¨àµ\8bà´\95àµ\8dà´\95àµ\81à´\95:\n:* [https://www.mediawiki.org/wiki/Download à´\9fാർബàµ\8bൾ à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bളർ] à´¡àµ\97ൺലàµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´\95, à´\85തിൽ à´¨à´¿à´°à´µà´§à´¿ à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99à´³àµ\81à´\82 à´\85à´¨àµ\81ബനàµ\8dà´§à´\99àµ\8dà´\99à´³àµ\81à´\82 à´\89ൾപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dതിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81. à´\85തിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95àµ\8d <code>skins/</code> à´¡à´¯à´±à´\95àµ\8dà´\9fറി à´ªà´\95ർതàµ\8dതാവàµ\81à´¨àµ\8dനതാണàµ\8d.\n:* à´\93à´°àµ\8bà´°àµ\8b à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99à´³àµ\81à´\82 à´\9fാർബàµ\8bà´³àµ\81à´\95ളായി à´\92à´±àµ\8dറയàµ\8dà´\95àµ\8dà´\95àµ\8aà´±àµ\8dറയàµ\8dà´\95àµ\8dà´\95àµ\81à´\82  [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org à´¸à´\82à´°à´\82à´­à´¤àµ\8dതിൽ] à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 à´¡àµ\97ൺലàµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dയാവàµ\81à´¨àµ\8dനതാണàµ\8d.\n:* à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´\87ൻസàµ\8dà´±àµ\8dറലàµ\87à´·à´¨àµ\8dà´±àµ\86 <code dir=\"ltr\">skins/</code> à´¡à´¯à´±à´\95àµ\8dà´\9fറിയിലàµ\87à´\95àµ\8dà´\95àµ\8d à´\97à´¿à´±àµ\8dà´±àµ\8d à´\89പയàµ\8bà´\97à´¿à´\9aàµ\8dà´\9aàµ\8d <code>mediawiki/skins/*</code> à´±àµ\86à´ªàµ\8dà´ªàµ\8bസിറàµ\8dററിà´\95ളിലàµ\8aà´¨àµ\8dà´¨àµ\8d à´\95àµ\8dà´²àµ\8bൺ à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´\95.\n: à´¤à´¾à´\99àµ\8dà´\95à´³àµ\8aà´°àµ\81 à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´¡à´µà´²à´ªàµ\8dപറാണàµ\86à´\99àµ\8dà´\95ിൽ à´\87à´¤àµ\8d à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\97à´¿à´±àµ\8dà´±àµ\8d à´¡àµ\86à´ªàµ\8dà´ªàµ\8bസിറàµ\8dററിയàµ\86 à´¬à´¾à´§à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dനതലàµ\8dà´².\n\n; à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´¤à´¾à´\99àµ\8dà´\95ൾ à´\85à´ªàµ\8dà´\97àµ\8dà´°àµ\87à´¡àµ\8d à´\9aàµ\86à´¯àµ\8dതതàµ\87 à´\89à´³àµ\8dà´³àµ\81à´µàµ\86à´\99àµ\8dà´\95ിൽ:\n: à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ 1.24 à´\92à´ªàµ\8dà´ªà´\82 à´\85തിനàµ\81 à´¶àµ\87à´·à´®àµ\81à´³àµ\8dളവയàµ\81à´\82 à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dതിà´\9fàµ\8dà´\9fàµ\81à´³àµ\8dà´³ à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99ൾ à´¸àµ\8dവതàµ\87 à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95àµ\81à´¨àµ\8dനിലàµ\8dà´² ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\82 à´\93à´\9fàµ\8dà´\9fàµ\8bà´¡à´¿à´¸àµ\8dà´\95വറി à´¸à´¹à´¾à´¯à´\82] à´\95ാണàµ\81à´\95). à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dതിà´\9fàµ\8dà´\9fàµ\81à´³àµ\8dà´³ à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99ൾ à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95àµ\81à´¨àµ\8dനതിനായി à´\87നിà´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´µà´°à´¿à´\95ൾ <code>LocalSettings.php</code> à´\8eà´¨àµ\8dനതിലàµ\8bà´\9fàµ\8dà´\9fàµ\8d à´ªà´\95ർതàµ\8dà´¤àµ\81à´\95:\n\n<pre dir=\"ltr\">$3</pre>\n\n; <code>LocalSettings.php</code> à´¤à´¾à´³à´¿àµ½ à´®à´¾à´±àµ\8dà´±à´\82 à´µà´°àµ\81à´¤àµ\8dതിയതàµ\87à´¯àµ\81à´³àµ\8dà´³àµ\81à´µàµ\86à´\99àµ\8dà´\95ിൽ:\n: à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99à´³àµ\81à´\9fàµ\86 à´ªàµ\87രിൽ à´\85à´\95àµ\8dഷരപിശà´\95àµ\81à´\95à´³àµ\81à´£àµ\8dà´\9fàµ\8bà´¯àµ\86à´¨àµ\8dà´¨àµ\8d à´\86വർതàµ\8dതിà´\9aàµ\8dà´\9aàµ\8d à´ªà´°à´¿à´¶àµ\8bധിà´\95àµ\8dà´\95àµ\81à´\95.",
+       "default-skin-not-found-no-skins": "à´\85à´¯àµ\8dà´¯àµ\8b! <code dir=\"ltr\"> $wgDefaultSkin</code> à´¨à´¿àµ¼à´µà´\9aà´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¤àµ\81à´ªàµ\8dà´°à´\95ാരമàµ\81à´³àµ\8dà´³ à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´µà´¿à´\95àµ\8dà´\95à´¿à´¯àµ\81à´\9fàµ\86 à´¸àµ\8dവതàµ\87à´¯àµ\81à´³àµ\8dà´³ à´¦àµ\83à´¶àµ\8dയരàµ\82പമായ <code>$1</code>, à´²à´­àµ\8dയമലàµ\8dà´².\n\nതാà´\99àµ\8dà´\95ൾ à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99à´³àµ\8aà´¨àµ\8dà´¨àµ\81à´\82 à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dതിà´\9fàµ\8dà´\9fà´¿à´²àµ\8dà´².\n\n; à´¤à´¾à´\99àµ\8dà´\95ൾ à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dതതàµ\87 à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´\85à´ªàµ\8dâ\80\8cà´\97àµ\8dà´°àµ\87à´¡àµ\8d à´\9aàµ\86à´¯àµ\8dതതàµ\87 à´\89à´³àµ\8dà´³àµ\81à´µàµ\86à´\99àµ\8dà´\95ിൽ:\n: à´\97à´¿à´±àµ\8dറിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\8d à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´®à´±àµ\8dà´±àµ\86à´\99àµ\8dà´\95à´¿à´²àµ\81à´\82 à´®à´¾àµ¼à´\97àµ\8dà´\97à´\82 à´\89പയàµ\8bà´\97à´¿à´\9aàµ\8dà´\9aàµ\8d à´¸àµ\8bà´´àµ\8dà´¸àµ\8d à´\95àµ\8bà´¡àµ\8d à´¨àµ\87à´°à´¿à´\9fàµ\8dà´\9fàµ\8d à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95àµ\81à´\95യായിരിനàµ\8dà´¨àµ\86à´\99àµ\8dà´\95ിൽ à´\87à´¤àµ\8d à´¸à´\82ഭവിà´\9aàµ\8dà´\9aàµ\87à´\95àµ\8dà´\95à´¾à´\82. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's à´¦àµ\83à´¶àµ\8dയരàµ\82à´ª à´¡à´¯à´±à´\95àµ\8dà´\9fറിയിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\8d], à´\87നിà´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´®à´¾àµ¼à´\97àµ\8dà´\97à´\99àµ\8dà´\99ൾ à´\89പയàµ\8bà´\97à´¿à´\9aàµ\8dà´\9aàµ\8d à´\8fതാനà´\82 à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99ൾ à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dയാൻ à´¨àµ\8bà´\95àµ\8dà´\95àµ\81à´\95:\n:* [https://www.mediawiki.org/wiki/Download à´\9fാർബàµ\8bൾ à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bളർ] à´¡àµ\97ൺലàµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´\95, à´\85തിൽ à´¨à´¿à´°à´µà´§à´¿ à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99à´³àµ\81à´\82 à´\85à´¨àµ\81ബനàµ\8dà´§à´\99àµ\8dà´\99à´³àµ\81à´\82 à´\89ൾപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dതിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81. à´\85തിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95àµ\8d <code>skins/</code> à´¡à´¯à´±à´\95àµ\8dà´\9fറി à´ªà´\95ർതàµ\8dതാവàµ\81à´¨àµ\8dനതാണàµ\8d.\n:* à´\93à´°àµ\8bà´°àµ\8b à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99à´³àµ\81à´\82 à´\9fാർബàµ\8bà´³àµ\81à´\95ളായി à´\92à´±àµ\8dറയàµ\8dà´\95àµ\8dà´\95àµ\8aà´±àµ\8dറയàµ\8dà´\95àµ\8dà´\95àµ\81à´\82  [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org à´¸à´\82à´°à´\82à´­à´¤àµ\8dതിൽ] à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 à´¡àµ\97ൺലàµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dയാവàµ\81à´¨àµ\8dനതാണàµ\8d.\n:* à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´\87ൻസàµ\8dà´±àµ\8dറലàµ\87à´·à´¨àµ\8dà´±àµ\86 <code dir=\"ltr\">skins/</code> à´¡à´¯à´±à´\95àµ\8dà´\9fറിയിലàµ\87à´\95àµ\8dà´\95àµ\8d à´\97à´¿à´±àµ\8dà´±àµ\8d à´\89പയàµ\8bà´\97à´¿à´\9aàµ\8dà´\9aàµ\8d <code>mediawiki/skins/*</code> à´±àµ\86à´ªàµ\8dà´ªàµ\8bസിറàµ\8dററിà´\95ളിലàµ\8aà´¨àµ\8dà´¨àµ\8d à´\95àµ\8dà´²àµ\8bൺ à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´\95.\n: à´¤à´¾à´\99àµ\8dà´\95à´³àµ\8aà´°àµ\81 à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´¡à´µà´²à´ªàµ\8dപറാണàµ\86à´\99àµ\8dà´\95ിൽ à´\87à´¤àµ\8d à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\97à´¿à´±àµ\8dà´±àµ\8d à´¡àµ\86à´ªàµ\8dà´ªàµ\8bസിറàµ\8dററിയàµ\86 à´¬à´¾à´§à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dനതലàµ\8dà´². à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99ൾ à´\8eà´\99àµ\8dà´\99à´¨àµ\86 à´\95àµ\8dà´°à´®àµ\80à´\95à´°à´¿à´\95àµ\8dà´\95à´¾à´\82 à´\8eà´¨àµ\8dà´¨àµ\81à´\82 à´¸àµ\8dവതàµ\87 à´µàµ\87à´£àµ\8dà´\9fà´¤àµ\8d à´\8eà´\99àµ\8dà´\99à´¨àµ\86 à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95à´¾à´\82 à´\8eà´¨àµ\8dà´¨àµ\81à´\82 [https://www.mediawiki.org/wiki/Manual:Skin_configuration à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\82 à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95ൽ à´¸à´¹à´¾à´¯à´¿à´¯à´¿àµ½] à´\95ാണàµ\81à´\95.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (സജ്ജം)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''സജ്ജമല്ല''')",
        "mediastatistics": "മീഡിയ സ്ഥിതിവിവരക്കണക്കുകൾ",
index 03f9923..545b7bb 100644 (file)
        "specialpages-group-wiki": "Għodda u informazzjoni fuq il-proġett",
        "specialpages-group-redirects": "Paġni speċjali ta' rindirizz",
        "specialpages-group-spam": "Għodda kontra l-ispam",
+       "specialpages-group-developer": "Għodda tal-iżviluppatur",
        "blankpage": "Paġna vojta",
        "intentionallyblankpage": "Din il-paġna tħalliet vojta ataposta",
        "external_image_whitelist": "#Ħalli din il-linja eżattament kif inhi<pre>\n#Daħħal frammenti tal-espressjonijiet regolari (dik il-parti bejn // biss) hawn taħt\n#Dawn jiġu mqabbla mal-URLs ta' stampi esterni (''hotlinked'')\n#Dawk li jaqblu jidhru bħala stampi, inkella jintwera biss ħolqa lejn l-istampa\n#Linji li jibdew b'# huma kkunsidrati bħala kummenti\n#Id-differenza bejn ittri kapitali u dawk żgħar mhix importanti\n\n#Daħħal il-frammenti kollha tar-regex qabel din il-linja. Ħalli din il-linja hekk kif inhi</pre>",
index f762469..d18c67e 100644 (file)
        "right-protect": "Cagna 'e livelle 'e prutezione 'e cagna paggene prutette ricurzivamente",
        "right-editprotected": "Cagna 'e paggene prutette cu \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Cagna 'e paggene prutette cu \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Cagna 'o modello 'e cuntenute 'e na paggena",
        "right-editinterface": "Modifeca 'a nterfaccia utente",
        "right-editusercssjs": "Cagna 'e file CSS e JS e l'at'utente",
        "right-editusercss": "Cagna 'e file CSS 'e l'at'utente",
        "action-viewmywatchlist": "vide l'alenco 'e cuntrollo proprio",
        "action-viewmyprivateinfo": "vide 'e date perzunale",
        "action-editmyprivateinfo": "cagnà 'e proprie date perzunale",
+       "action-editcontentmodel": "càgna 'o mudelo 'e cuntenute 'e na paggena",
        "nchanges": "$1 {{PLURAL:$1|cagnamiento|cagnamiente}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|'a ll'urdema visita}}",
        "enhancedrc-history": "cronologgia",
        "specialpages-group-wiki": "Data e strumiente",
        "specialpages-group-redirects": "Redirezionamiente d' 'e paggene speciale",
        "specialpages-group-spam": "Strumiente p' 'o spam",
+       "specialpages-group-developer": "Strumiente p' 'e sviluppature",
        "blankpage": "Paggene abbacante",
        "intentionallyblankpage": "Sta paggena s'è lassata abbacante apposta",
        "external_image_whitelist": "  #Lassate sta linea accussì accussì comme sta<pre>\n#Mettete piezze 'espressione regolare (chilla parta nfra 'e //) sotto\n#Chille s'azzeccano ch' 'e ndirizze URL 'e l'immaggine 'e fore (collegamiente cavere)\n#Chille cu nu cunfronto positivo sarranno mmustate comme immaggene, o pure comme a nu link a l'immaggine ca mmustano\n#Linee c'accumenciano pe' # songo trattate comme commente\n#Chist'è insenzitivo p' 'e maiuscole e minuscole\n\n#Mettete tutt' 'e piezze regex ncopp' 'a stalinea. Lassate sta linea eguale eguale comme 'a verite</pre>",
        "expand_templates_generate_xml": "Fà vedè l'arvero 'e l'analisi XML",
        "expand_templates_generate_rawhtml": "Fà verè 'o codece HTML 'n cruro",
        "expand_templates_preview": "Anteprimma",
+       "expand_templates_preview_fail_html": "<em>Siccomme {{SITENAME}} téne 'o HTML 'ncruro appicciato e se songhe spierze 'e date d' 'a sessiona, 'a previsualizzaziona s'è annascunnuta comm'a na prutezione annanz'e uerre 'e JavaScript.</em>\n\n<strong>Si chist'è nu tentativo giustificato 'e previsualizzaziona, pe' piacere facite n'ata vota.</strong>\nSi nun funziona ancora, facite d'[[Special:UserLogout|ascì]] e trasì n'ata vota.",
+       "expand_templates_preview_fail_html_anon": "<em>Siccomme {{SITENAME}} téne 'o HTML 'ncruro e vuje nun site trasute 'o sito, 'a previsualizzaziona s'è annascunnuta comm'a na prutezione annanz'e uerre 'e JavaScript.</em>\n\n<strong>Si chist'è nu tentativo giustificato 'e previsualizzaziona, pe' piacere facite d'[[Special:UserLogout|ascì]] e trasì n'ata vota.</strong>",
        "pagelanguage": "Scigliete 'a lengua d' 'a paggena pe' bbìa e stu strumiento",
        "pagelang-name": "Paggena",
        "pagelang-language": "Lengua",
        "log-name-pagelang": "Càgna 'o riggistro 'e llengue",
        "log-description-pagelang": "Chest'è nu riggistro 'e cagnamiente 'e lengua d' 'e paggene.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ave cagnato}} 'a lengua d' 'a paggena $3 'a $4 a $5.",
-       "default-skin-not-found": "Oops! 'A skin predefinta ' 'o wii vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\n'A installazione pare ca tenesse 'e skin ccà abbascio. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] pe' n'avè cchiù nfurmaziune ncopp' 'a manera 'e ll'abbià o scegliere chilla predefinita.\n\n$2\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki.\n\n; Si avite MediaWiki agghiurnato MediaWiki mò mò:\n: MediaWiki 1.24 e verziune appriesso nun abbìa automatecamente 'e skin installate (vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]). Putite copiare 'e linee ccà abbascio dint' 'o <code>LocalSettings.php</code> pe' putè appiccià tutt' 'e skin installate mò mò:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si avite cagnato mò mò <code>LocalSettings.php</code>:\n: Cuntrullate 'e nomme d' 'e skin n'ata vota pe' ve sparagnà cocch'errore 'e battitura.",
-       "default-skin-not-found-no-skins": "Oops! 'A skin predefinita p' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\nNun avite installato nisciuno skin.\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]) pe n'avè nfurmaziune ncopp' 'a maniera d'appiccià e scegliere chella predefinita.",
+       "default-skin-not-found": "Oops! 'A skin predefinta ' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\n'A installazione pare ca tenesse 'e skin ccà abbascio. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] pe' n'avè cchiù nfurmaziune ncopp' 'a manera 'e ll'abbià o scegliere chilla predefinita.\n\n$2\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Scarrecanne 'e tarballs individuale 'e skin 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki.\n\n; Si avite MediaWiki agghiurnato MediaWiki mò mò:\n: MediaWiki 1.24 e verziune appriesso nun abbìa automatecamente 'e skin installate (vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]). Putite copiare 'e linee ccà abbascio dint' 'o <code>LocalSettings.php</code> pe' putè appiccià tutt' 'e skin installate mò mò:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si avite cagnato mò mò <code>LocalSettings.php</code>:\n: Cuntrullate 'e nomme d' 'e skin n'ata vota pe' ve sparagnà cocch'errore 'e battitura.",
+       "default-skin-not-found-no-skins": "Oops! 'A skin predefinita p' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\nNun avite installato nisciuno skin.\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Scarrecanne 'e tarballs individuale 'e skin 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]) pe n'avè nfurmaziune ncopp' 'a maniera d'appiccià e scegliere chella predefinita.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (funzione appicciata)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''funzione stutata''')",
        "mediastatistics": "Statistiche d' 'e media",
index 4e0a23c..cb69bd2 100644 (file)
        "specialpages-group-wiki": "Data og verktøy",
        "specialpages-group-redirects": "Omdirigerende spesialsider",
        "specialpages-group-spam": "Spamverktøy",
+       "specialpages-group-developer": "Utviklerverktøy",
        "blankpage": "Tom side",
        "intentionallyblankpage": "Denne siden er tom med vilje",
        "external_image_whitelist": "#La denne linja være som den er<pre>\n#Skriv fragmenter av regulære uttrykk (delen som går mellom //) nedenfor\n#Disse vil sjekkes mot adresser til bilder fra eksterne sider\n#De som blir godkjent vil vises, ellers vil det gis en lenke til bildet\n#Linjer som begynner med # anses som kommentarer\n#Det skilles ikke mellom store og små bokstaver\n\n#Skriv alle fragmenter av regulære uttrykk over denne lina. La denne linja være som den er</pre>",
index bf5682e..23bb892 100644 (file)
        "specialpages-group-wiki": "Informacje i narzędzia",
        "specialpages-group-redirects": "Specjalne strony przekierowujące",
        "specialpages-group-spam": "Narzędzia do walki ze spamem",
+       "specialpages-group-developer": "Narzędzia dewelopera",
        "blankpage": "Pusta strona",
        "intentionallyblankpage": "Ta strona umyślnie pozostała pusta",
        "external_image_whitelist": " #Pozostaw tę linię dokładnie tak, jak jest.<pre>\n#Wstaw poniżej fragmenty wyrażeń regularnych (tylko to, co znajduje się między //).\n#Wyrażenia te zostaną dopasowane do adresów URL zewnętrznych (bezpośrednio linkowanych) grafik.\n#Dopasowane adresy URL zostaną wyświetlone jako grafiki, w przeciwnym wypadku będzie pokazany jedynie link do grafiki.\n#Linie zaczynające się od # są traktowane jako komentarze.\n#We wpisach ma znaczenie wielkość znaków.\n\n#Wstaw wszystkie deklaracje wyrażeniami regularnymi poniżej tej linii. Pozostaw tę linię dokładnie tak, jak jest.</pre>",
index a1d4b66..304c515 100644 (file)
        "right-protect": "Cambié ij livej ëd protession e modifiché le pàgine protegiùe an cascada",
        "right-editprotected": "Modifiché le pàgine protegiùe con «{{int:protect-level-sysop}}»",
        "right-editsemiprotected": "Modifiché le pàgine protegiùe con «{{int:protect-level-autoconfirmed}}»",
+       "right-editcontentmodel": "Modifiché ël model ëd contnù ëd na pàgina",
        "right-editinterface": "Modifiché l'antërfacia utent",
        "right-editusercssjs": "Modifiché j'archivi CSS e JavaScript d'àutri utent",
        "right-editusercss": "Modifiché j'archivi CSS d'àutri utent",
        "action-viewmywatchlist": "vëdde la lista ëd la ròba ch'as ten sot-euj",
        "action-viewmyprivateinfo": "vëdde soe anformassion përsonaj",
        "action-editmyprivateinfo": "modifiché soe anformassion përsonaj",
+       "action-editcontentmodel": "modifiché ël model ëd contnù ëd na pàgina",
        "nchanges": "$1 {{PLURAL:$1|modìfica|modìfiche}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|da l'ùltima visita}}",
        "enhancedrc-history": "stòria",
        "specialpages-group-wiki": "Dat e utiss",
        "specialpages-group-redirects": "Pàgine speciaj ëd ridiression",
        "specialpages-group-spam": "Utiss contra la rumenta",
+       "specialpages-group-developer": "Utiss dël dësvlupador",
        "blankpage": "Pàgina bianca",
        "intentionallyblankpage": "Costa pàgina a l'é lassà veuida a pòsta.",
        "external_image_whitelist": "  #Lassé costa riga-sì pròpi 'me ch'a l'é<pre>\n#Buté ij fragment d'espression regolar (mach la part che a va antra le //) sì-sota\n#Coste-sì a saran confrontà con le liure dle figure esterne\n#Cole che as cobio a saran visualisà com figure, dësnò a sarà mach mostrà na liura a la figura\n#Le linie che a ancamin-o con # a saran tratà com coment\n#La lista a l'é indiferenta a minùscol o majùscol\n\n#Buté tùit ij fragment d'espression regolar sota sta linia-sì. Lassé costa linia pròpi com a l'é</pre>",
        "expand_templates_generate_xml": "Mosta l'erbo ëd parse XML",
        "expand_templates_generate_rawhtml": "Smon-e l'HTML sempi",
        "expand_templates_preview": "Preuva",
+       "expand_templates_preview_fail_html": "<em>Dagià che {{SITENAME}} a l'ha l'HTML ëd base abilità e a-i é staje na pèrdita ëd dàit ëd session, la previsualisassion a l'é stërmà për precaussion contra dj'atach ëd JavaScript.</em>\n\n<strong>Si cost a l'é un tentativ ëd previsualisassion legìtim, për piasì ch'a preuva torna.</strong>\nS'a marcia ancor nen, ch'a preuva a [[Special:UserLogout|seurte dal sistema]] e a rintré torna.",
+       "expand_templates_preview_fail_html_anon": "<em>Dagià che {{SITENAME}} a l'ha l'HTML ëd base abilità e chiel a l'é nen rintrà ant ël sistema, la previsualisassion a l'é stërmà coma precaussion contra j'atach ëd JavaScript.</em>\n\n<strong>Si cost a l'é un tentativ ëd previsualisassion legìtim, për piasì [[Special:UserLogin|ch'a rintra ant ël sistema]] e ch'a preuva torna.</strong>",
        "pagelanguage": "Seletor ëd lenga dla pàgina",
        "pagelang-name": "Pàgina",
        "pagelang-language": "Lenga",
        "log-name-pagelang": "Argistr dij cangiament ëd lenga",
        "log-description-pagelang": "Cost-sì a l'é n'argistr dij cangiament ant le lenghe dle pàgine.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a l'ha cangià}} la lenga dla pàgina $3 da $4 a $5.",
-       "default-skin-not-found": "Tension! La pel predeterminà për soa wiki, definìa an <code dir=\"ltr\">$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nSoa anstalassion a smija anclude le pel sì-dapress. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration ël manual ëd configurassion dle pel] për d'anformassion su coma abiliteje e serne cola predefinìa.\n\n$2\n\n; S'a l'ha pen-a anstalà MediaWiki:\n: A l'é probàbil che a l'abia anstalalo da git, o diretaman dal còdes sorgiss an n'àutra manera. A l'é normal. Ch'a preuva a anstalé dle pej da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org], parèj:\n:* Dëscariand l' [https://www.mediawiki.org/wiki/Download archivi tar ëd l'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista dle <code>pel/</code> d'ambelelà.\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Sòn a dovrìa nen antërferì con sò depòsit git si chiel a l'é un dësvlupador ëd MediaWiki.\n\n; S'a l'ha pen-a agiornà MediaWiki:\n: MediaWiki 1.24 e pi neuv a përmet pi nen an automàtich le pel anstalà (ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery manual an sla dëscuverta automàtica dle pel]). A peul copié le linie sì-dapress an <code>LocalSettings.php</code> për abilité tute le pel ch'a son anstalà al moment:\n\n<pre dir=\"ltr\">$3</pre>\n\n; S'a l'ha pen-a modificà <code>LocalSettings.php</code>:\n: Ch'a verìfica torna ël nòm ëd dle pej për evité ij boro.",
-       "default-skin-not-found-no-skins": "Darmagi! La pel dë stàndard për soa wiki, definìa da <code>$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nChiel a l'ha gnun-a pel anstalà.\n\n; S'a l'ha pen-a anstalà o agiornà MediaWiki:\n: A l'é probàbil ch'a l'abia falo da git, o diret dal còdes sorgiss an n'àutra manera. A l'é normal. MediaWiki 1.24 e pi recent doesn't a ancludo gnun-a pel ant ël depòsit prinsipal. Ch'a preuva a anstalé chèiche pel da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org]:\n:* Dëscariand [https://www.mediawiki.org/wiki/Download l'archivi tar dl'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista <code>skins/</code> da là.\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Fé sòn a dovrìa nen antërferì con sò depòsit git se chiel a l'é un dësvlupador ëd MediaWiki. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: ël manual dla configurassion dle pel] për d'anformassion su coma ativé le pel e serne cola predefinìa.",
+       "default-skin-not-found": "Tension! La pel predeterminà për soa wiki, definìa an <code dir=\"ltr\">$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nSoa anstalassion a smija anclude le pel sì-dapress. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration ël manual ëd configurassion dle pel] për d'anformassion su coma abiliteje e serne cola predefinìa.\n\n$2\n\n; S'a l'ha pen-a anstalà MediaWiki:\n: A l'é probàbil che a l'abia anstalalo da git, o diretaman dal còdes sorgiss an n'àutra manera. A l'é normal. Ch'a preuva a anstalé dle pej da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org], parèj:\n:* Dëscariand l' [https://www.mediawiki.org/wiki/Download archivi tar ëd l'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista dle <code>pel/</code> d'ambelelà.\n:* Dëscariand j'archivi tar për pel sìngole da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Sòn a dovrìa nen antërferì con sò depòsit git si chiel a l'é un dësvlupador ëd MediaWiki.\n\n; S'a l'ha pen-a agiornà MediaWiki:\n: MediaWiki 1.24 e pi neuv a përmet pi nen an automàtich le pel anstalà (ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery manual an sla dëscuverta automàtica dle pel]). A peul copié le linie sì-dapress an <code>LocalSettings.php</code> për abilité tute le pel ch'a son anstalà al moment:\n\n<pre dir=\"ltr\">$3</pre>\n\n; S'a l'ha pen-a modificà <code>LocalSettings.php</code>:\n: Ch'a verìfica torna ël nòm ëd dle pej për evité ij boro.",
+       "default-skin-not-found-no-skins": "Darmagi! La pel dë stàndard për soa wiki, definìa da <code>$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nChiel a l'ha gnun-a pel anstalà.\n\n; S'a l'ha pen-a anstalà o agiornà MediaWiki:\n: A l'é probàbil ch'a l'abia falo da git, o diret dal còdes sorgiss an n'àutra manera. A l'é normal. MediaWiki 1.24 e pi recent doesn't a ancludo gnun-a pel ant ël depòsit prinsipal. Ch'a preuva a anstalé chèiche pel da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org]:\n:* Dëscariand [https://www.mediawiki.org/wiki/Download l'archivi tar dl'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista <code>skins/</code> da là.\n:* Dëscariand j'archivi tar ëd pel sìngole da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Fé sòn a dovrìa nen antërferì con sò depòsit git se chiel a l'é un dësvlupador ëd MediaWiki. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: ël manual dla configurassion dle pel] për d'anformassion su coma ativé le pel e serne cola predefinìa.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilità)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilità''')",
        "mediastatistics": "Statìstiche an sij mojen",
index b9cdd8f..375c69e 100644 (file)
        "specialpages-group-wiki": "Dados e ferramentas",
        "specialpages-group-redirects": "Páginas especiais redirecionadas",
        "specialpages-group-spam": "Ferramentas anti-spam",
+       "specialpages-group-developer": "Ferramentas de desenvolvimento",
        "blankpage": "Página em branco",
        "intentionallyblankpage": "Esta página foi intencionalmente deixada em branco e é usada para medições de performance, etc.",
        "external_image_whitelist": " # Deixe esta linha exatamente como ela está <pre>\n# Insira uma expressão regular (apenas a parte que vai entre o //) a seguir\n# Estas serão casadas com as URLs de imagens externas (''hotlinked'')\n# Aquelas que corresponderem serão exibidas como imagens; caso contrário, apenas um link para a imagem será mostrado\n# As linhas que começam com # são tratadas como comentários\n# Isto não é sensível à capitalização\n\n# Coloque todos os fragmentos de ''regex'' acima dessa linha. Deixe esta linha exatamente como ela está</pre>",
index 5a181c7..0a59925 100644 (file)
        "right-protect": "{{doc-right|protect}}",
        "right-editprotected": "{{doc-right|editprotected}}\nRefers to {{msg-mw|Protect-level-sysop}}.\n\nSee also:\n* {{msg-mw|Right-editsemiprotected}}",
        "right-editsemiprotected": "{{doc-right|editsemiprotected}}\nRefers to {{msg-mw|Protect-level-autoconfirmed}}.\n\nSee also:\n* {{msg-mw|Right-editprotected}}",
+       "right-editcontentmodel": "{{doc-right|editcontentmodel}}",
        "right-editinterface": "{{doc-right|editinterface}}",
        "right-editusercssjs": "{{doc-right|editusercssjs}}",
        "right-editusercss": "{{doc-right|editusercss}}\nSee also:\n* {{msg-mw|Right-editmyusercss}}",
        "action-viewmywatchlist": "{{doc-action|viewmywatchlist}}\n{{Identical|View your watchlist}}",
        "action-viewmyprivateinfo": "{{doc-action|viewmyprivateinfo}}",
        "action-editmyprivateinfo": "{{doc-action|editmyprivateinfo}}",
+       "action-editcontentmodel": "{{doc-action|editcontentmodel}}",
        "nchanges": "Appears on enhanced watchlist and recent changes when page has more than one change on given date, linking to a diff of the changes.\n\nParameters:\n* $1 - the number of changes on that day (2 or more)\nThree messages are shown side-by-side: ({{msg-mw|Nchanges}} | {{msg-mw|Enhancedrc-since-last-visit}} | {{msg-mw|Enhancedrc-history}}).",
        "enhancedrc-since-last-visit": "Appears on enhanced watchlist and recent changes when page has more than one change on given date and at least one that the user hasn't seen yet, linking to a diff of the unviewed changes.\n\nParameters:\n* $1 - the number of unviewed changes (1 or more)\nThree messages are shown side-by-side: ({{msg-mw|nchanges}} | {{msg-mw|enhancedrc-since-last-visit}} | {{msg-mw|enhancedrc-history}}).",
        "enhancedrc-history": "Appears on enhanced watchlist and recent changes when page has more than one change on given date, linking to its history.\n\nThis is the same as {{msg-mw|hist}}, but not abbreviated.\n\nThree messages are shown side-by-side: ({{msg-mw|nchanges}} | {{msg-mw|enhancedrc-since-last-visit}} | {{msg-mw|enhancedrc-history}}).\n{{Identical|History}}",
        "expand_templates_generate_xml": "Used as checkbox label.",
        "expand_templates_generate_rawhtml": "Used as checkbox label.",
        "expand_templates_preview": "{{Identical|Preview}}",
+       "expand_templates_preview_fail_html": "Used as error message in Preview section of [[Special:ExpandTemplates]] page.",
+       "expand_templates_preview_fail_html_anon": "Used as error message in Preview section of [[Special:ExpandTemplates]] page.",
        "pagelanguage": "Title for page Special:PageLanguage",
        "pagelang-name": "Input label for page name on Special:PageLanguage\n{{Identical|Page}}",
        "pagelang-language": "Language selector label for Special:PageLanguage\n{{Identical|Language}}",
index 0cae5ff..db6accf 100644 (file)
        "right-protect": "Schimbă nivelurile de protejare și modifică pagini protejate în cascadă",
        "right-editprotected": "Modifică pagini protejate ca „{{int:protect-level-sysop}}”",
        "right-editsemiprotected": "Modifică pagini protejate ca „{{int:protect-level-autoconfirmed}}”",
+       "right-editcontentmodel": "Modifică modelul de conținut al unei pagini",
        "right-editinterface": "Modifică interfața cu utilizatorul",
        "right-editusercssjs": "Modifică fișierele CSS și JS ale altor utilizatori",
        "right-editusercss": "Modifică fișierele CSS ale altor utilizatori",
        "action-viewmywatchlist": "vă vizualizați lista de pagini urmărite",
        "action-viewmyprivateinfo": "vă vizualizați informațiile personale",
        "action-editmyprivateinfo": "să vă modificați informațiile personale",
+       "action-editcontentmodel": "modificați modelul de conținut al unei pagini",
        "nchanges": "$1 {{PLURAL:$1|modificare|modificări|de modificări}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|de la ultima vizită}}",
        "enhancedrc-history": "istoric",
        "specialpages-group-wiki": "Date și instrumente",
        "specialpages-group-redirects": "Pagini speciale de redirecționare",
        "specialpages-group-spam": "Unelte spam",
+       "specialpages-group-developer": "Unelte pentru dezvolatori",
        "blankpage": "Pagină goală",
        "intentionallyblankpage": "Această pagină este goală în mod intenționat",
        "external_image_whitelist": " #Lasă această linie exact așa cum este <pre>\n#Pune fragmentele expresiei regulate (doar partea care merge între //) mai jos\n#Acestea vor fi potrivite cu URL-uri de exterior (hotlinked)\n#Acelea care se potrivesc vor fi afișate ca imagini, altfel va fi afișat doar un link la imagine\n#Liniile care încep cu # sunt tratate ca comentarii\n#Acesta este insensibil la majuscule sau minuscule\n\n#Pune toate fragmentele regex deasupra aceastei linii. Lasă această linie exact așa cum este</pre>",
        "expand_templates_generate_xml": "Arată arborele de analiză XML",
        "expand_templates_generate_rawhtml": "Arată HTML brut",
        "expand_templates_preview": "Previzualizare",
+       "expand_templates_preview_fail_html": "<em>Întrucât la {{SITENAME}} este activat HTML brut și a avut loc o pierdere a sesiunii de date, previzualizarea a fost ascunsă ca măsură de precauție împotriva atacurilor prin JavaScript.</em>\n\n<strong>Dacă aceasta este o încercare legitimă de a previzualiza, încercați din nou.</strong>\nDacă nici astfel nu funcționează, încercați să [[Special:UserLogout|închideţi sesiunea]] şi să vă autentificaţi din nou.",
+       "expand_templates_preview_fail_html_anon": "<em>Întrucât la {{SITENAME}} este activat HTML brut și nu v-ați autentificat, previzualizarea a fost ascunsă ca măsură de precauție împotriva atacurilor prin JavaScript.</em>\n\n<strong>Dacă aceasta este o încercare legitimă de a previzualiza, [[Special:UserLogin|autentificați-vă]] și încercați din nou.</strong>",
        "pagelanguage": "Selector limbă pagină",
        "pagelang-name": "Pagină",
        "pagelang-language": "Limbă",
index bf23508..412fc0c 100644 (file)
@@ -73,7 +73,8 @@
                        "Striking Blue",
                        "Fitoschido",
                        "MaxBioHazard",
-                       "Tourorist"
+                       "Tourorist",
+                       "Purodha"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "trackingcategories-name": "Имя сообщения",
        "trackingcategories-desc": "Критерий включения в категорию",
        "noindex-category-desc": "Страница не индексируются поисковыми роботами, потому что на ней имеется «волшебное слово» <code><nowiki>__NOINDEX__</nowiki></code>, и она находится в пространстве имён, где разрешён этот флаг).",
-       "index-category-desc": "На странице имеется «волшебное слово» __INDEX__ (и страница находится в пространстве имён, где разрешён этот флаг), поэтому она индексируются поисковыми роботами в тех случаях, когда этого обычно не происходит.",
+       "index-category-desc": "На странице имеется «волшебное слово» <nowiki>__INDEX__</nowiki> (и страница находится в пространстве имён, где разрешён этот флаг), поэтому она индексируются поисковыми роботами в тех случаях, когда этого обычно не происходит.",
        "post-expand-template-inclusion-category-desc": "Размер страницы станет больше <code>$wgMaxArticleSize</code> после показа всех шаблонов, поэтому некоторые из них не были показаны полностью.",
        "post-expand-template-argument-category-desc": "Страница станет больше <code>$wgMaxArticleSize</code> после раскрытия аргумента шаблона (что-нибудь в тройных фигурных скобках, например, <code>{{{Foo}}})</code>).",
        "expensive-parserfunction-category-desc": "На странице используется слишком много ресурсоёмких функций (таких, как <code>#ifexist</code>). Подробнее — на странице [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "specialpages-group-wiki": "Данные и инструменты",
        "specialpages-group-redirects": "Перенаправляющие служебные страницы",
        "specialpages-group-spam": "Инструменты против спама",
+       "specialpages-group-developer": "Инструменты разработчика",
        "blankpage": "Пустая страница",
        "intentionallyblankpage": "Эта страница намеренно оставлена пустой",
        "external_image_whitelist": " #Оставьте эту строчку такой, как она есть<pre>\n#Разместите здесь фрагменты регулярных выражений (ту часть, что находится между //)\n#они будут соотнесены с URL внешних изображений.\n#Подходящие будут показаны как изображения, остальные будут показаны как ссылки на изображения.\n#Строки, начинающиеся с # считаются комментариями.\n#Строки не чувствительны к регистру\n\n#Размещайте фрагменты регулярных выражений над этой строчкой. Оставьте эту строчку такой, как она есть.</pre>",
        "log-name-pagelang": "Журнал изменения языка",
        "log-description-pagelang": "Это журнал изменений в языках страницы.",
        "logentry-pagelang-pagelang": "$1 изменил{{GENDER:$2||а}} язык страницы для $3 с $4 на $5.",
-       "default-skin-not-found": "Упс! Тема оформления по умолчанию для вашей вики <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nВаша установка, похоже, содержит следующие темы оформления. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.\n\n$ 2\n\n; Если вы только что установили MediaWiki:\n: Вы, видимо, сделали это с Git или непосредственно из исходного кода с использованием другого способа. Тогда такое возможно. Попробуйте установить некоторые темы из [https://www.mediawiki.org/wiki/Category:All_skins каталога тем оформления сайта mediawiki.org]:\n:* Загрузив [https://www.mediawiki.org/wiki/Download архив установочных файлов], который содержит несколько тем оформления и расширений. Вы можете скопировать папку <code>skins/</code> из него.\n:* Клонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code  dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.\n; Если вы только что обновили MediaWiki:\n: MediaWiki версии 1.24 и новее больше не включает автоматически установленные темы (см. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\nВы можете вставить следующие строки в <code>LocalSettings.php</code>, чтобы включить все установленные темы оформления: \n\n\n<pre dir=\"ltr\">$3</pre>\n\n\n; Если вы только что изменили <code>LocalSettings.php</code>:\n: Перепроверьте названия тем на наличие опечаток.",
-       "default-skin-not-found-no-skins": "Упс! Тема оформления по умолчанию для вашей вики <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nУ вас нет установленных тем оформления.\n\n; Если вы только что установили или обновили MediaWiki:\n: Вы, видимо, сделали это с Git или непосредственно из исходного кода с использованием другого способа. Тогда такое возможно. MediaWiki версии 1.24 и новее не содержат темы оформления в основном репозитории. Попробуйте установить некоторые темы из [https://www.mediawiki.org/wiki/Category:All_skins каталога тем оформления сайта mediawiki.org]:\n:* Загрузив [https://www.mediawiki.org/wiki/Download архив установочных файлов], который содержит несколько тем оформления и расширений. Вы можете скопировать папку <code>skins/</code> из него.\n:* Клонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.",
+       "default-skin-not-found": "УпÑ\81! Ð¢ÐµÐ¼Ð° Ð¾Ñ\84оÑ\80млениÑ\8f Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e Ð´Ð»Ñ\8f Ð²Ð°Ñ\88ей Ð²Ð¸ÐºÐ¸ <code>$wgDefaultSkin</code>, <code>$1</code> Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пна.\n\nÐ\92аÑ\88а Ñ\83Ñ\81Ñ\82ановка, Ð¿Ð¾Ñ\85оже, Ñ\81одеÑ\80жиÑ\82 Ñ\81ледÑ\83Ñ\8eÑ\89ие Ñ\82емÑ\8b Ð¾Ñ\84оÑ\80млениÑ\8f. Ð¡Ð¼. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] Ð´Ð»Ñ\8f Ð¿Ð¾Ð»Ñ\83Ñ\87ениÑ\8f Ð¸Ð½Ñ\84оÑ\80маÑ\86ии Ð¾ Ñ\82ом, ÐºÐ°Ðº Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82Ñ\8c Ñ\82емÑ\8b Ð¾Ñ\84оÑ\80млениÑ\8f Ð¸ Ð²Ñ\8bбÑ\80аÑ\82Ñ\8c Ñ\82емÑ\83 Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e.\n\n$ 2\n\n; Ð\95Ñ\81ли Ð²Ñ\8b Ñ\82олÑ\8cко Ñ\87Ñ\82о Ñ\83Ñ\81Ñ\82ановили MediaWiki:\n: Ð\92Ñ\8b, Ð²Ð¸Ð´Ð¸Ð¼Ð¾, Ñ\81делали Ñ\8dÑ\82о Ñ\81 Git Ð¸Ð»Ð¸ Ð½ÐµÐ¿Ð¾Ñ\81Ñ\80едÑ\81Ñ\82венно Ð¸Ð· Ð¸Ñ\81Ñ\85одного ÐºÐ¾Ð´Ð° Ñ\81 Ð¸Ñ\81полÑ\8cзованием Ð´Ñ\80Ñ\83гого Ñ\81поÑ\81оба. Ð¢Ð¾Ð³Ð´Ð° Ñ\82акое Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾. Ð\9fопÑ\80обÑ\83йÑ\82е Ñ\83Ñ\81Ñ\82ановиÑ\82Ñ\8c Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ñ\82емÑ\8b Ð¸Ð· [https://www.mediawiki.org/wiki/Category:All_skins ÐºÐ°Ñ\82алога Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f Ñ\81айÑ\82а mediawiki.org]:\n:* Ð\97агÑ\80Ñ\83зив [https://www.mediawiki.org/wiki/Download Ð°Ñ\80Ñ\85ив Ñ\83Ñ\81Ñ\82ановоÑ\87нÑ\8bÑ\85 Ñ\84айлов], ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ñ\81одеÑ\80жиÑ\82 Ð½ÐµÑ\81колÑ\8cко Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f Ð¸ Ñ\80аÑ\81Ñ\88иÑ\80ений. Ð\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81копиÑ\80оваÑ\82Ñ\8c Ð¿Ð°Ð¿ÐºÑ\83 <code>skins/</code> Ð¸Ð· Ð½ÐµÐ³Ð¾.\n:* Ð\97агÑ\80Ñ\83зив Ð°Ñ\80Ñ\85ивÑ\8b Ð¾Ñ\82делÑ\8cнÑ\8bÑ\85 Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f Ñ\81 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Ð\9aлониÑ\80овав Ð¾Ð´Ð¸Ð½ Ð¸Ð· Ñ\80епозиÑ\82оÑ\80иев <code>mediawiki/skins/*</code> Ñ\87еÑ\80ез git Ð² Ð¿Ð¾Ð´Ð¿Ð°Ð¿ÐºÑ\83 <code  dir=\"ltr\">skins/</code> Ð¿Ð°Ð¿ÐºÐ¸, ÐºÑ\83да Ñ\83Ñ\81Ñ\82ановлена MediaWiki.\n: Ð­Ñ\82о Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð½Ð°Ð²Ñ\80едиÑ\82Ñ\8c Ð²Ð°Ñ\88емÑ\83 Ñ\80епозиÑ\82оÑ\80иÑ\8e, ÐµÑ\81ли Ð²Ñ\8b MediaWiki-Ñ\80азÑ\80абоÑ\82Ñ\87ик. Ð¡Ð¼. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] Ð´Ð»Ñ\8f Ð¿Ð¾Ð»Ñ\83Ñ\87ениÑ\8f Ð¸Ð½Ñ\84оÑ\80маÑ\86ии Ð¾ Ñ\82ом, ÐºÐ°Ðº Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82Ñ\8c Ñ\82емÑ\8b Ð¾Ñ\84оÑ\80млениÑ\8f Ð¸ Ð²Ñ\8bбÑ\80аÑ\82Ñ\8c Ñ\82емÑ\83 Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e.\n; Ð\95Ñ\81ли Ð²Ñ\8b Ñ\82олÑ\8cко Ñ\87Ñ\82о Ð¾Ð±Ð½Ð¾Ð²Ð¸Ð»Ð¸ MediaWiki:\n: MediaWiki Ð²ÐµÑ\80Ñ\81ии 1.24 Ð¸ Ð½Ð¾Ð²ÐµÐµ Ð±Ð¾Ð»Ñ\8cÑ\88е Ð½Ðµ Ð²ÐºÐ»Ñ\8eÑ\87аеÑ\82 Ð°Ð²Ñ\82омаÑ\82иÑ\87еÑ\81ки Ñ\83Ñ\81Ñ\82ановленнÑ\8bе Ñ\82емÑ\8b (Ñ\81м. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\nÐ\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ð²Ñ\81Ñ\82авиÑ\82Ñ\8c Ñ\81ледÑ\83Ñ\8eÑ\89ие Ñ\81Ñ\82Ñ\80оки Ð² <code>LocalSettings.php</code>, Ñ\87Ñ\82обÑ\8b Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82Ñ\8c Ð²Ñ\81е Ñ\83Ñ\81Ñ\82ановленнÑ\8bе Ñ\82емÑ\8b Ð¾Ñ\84оÑ\80млениÑ\8f: \n\n\n<pre dir=\"ltr\">$3</pre>\n\n\n; Ð\95Ñ\81ли Ð²Ñ\8b Ñ\82олÑ\8cко Ñ\87Ñ\82о Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð¸ <code>LocalSettings.php</code>:\n: Ð\9fеÑ\80епÑ\80овеÑ\80Ñ\8cÑ\82е Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ\8f Ñ\82ем Ð½Ð° Ð½Ð°Ð»Ð¸Ñ\87ие Ð¾Ð¿ÐµÑ\87аÑ\82ок.",
+       "default-skin-not-found-no-skins": "УпÑ\81! Ð¢ÐµÐ¼Ð° Ð¾Ñ\84оÑ\80млениÑ\8f Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e Ð´Ð»Ñ\8f Ð²Ð°Ñ\88ей Ð²Ð¸ÐºÐ¸ <code>$wgDefaultSkin</code>, <code>$1</code> Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пна.\n\nУ Ð²Ð°Ñ\81 Ð½ÐµÑ\82 Ñ\83Ñ\81Ñ\82ановленнÑ\8bÑ\85 Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f.\n\n; Ð\95Ñ\81ли Ð²Ñ\8b Ñ\82олÑ\8cко Ñ\87Ñ\82о Ñ\83Ñ\81Ñ\82ановили Ð¸Ð»Ð¸ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ð»Ð¸ MediaWiki:\n: Ð\92Ñ\8b, Ð²Ð¸Ð´Ð¸Ð¼Ð¾, Ñ\81делали Ñ\8dÑ\82о Ñ\81 Git Ð¸Ð»Ð¸ Ð½ÐµÐ¿Ð¾Ñ\81Ñ\80едÑ\81Ñ\82венно Ð¸Ð· Ð¸Ñ\81Ñ\85одного ÐºÐ¾Ð´Ð° Ñ\81 Ð¸Ñ\81полÑ\8cзованием Ð´Ñ\80Ñ\83гого Ñ\81поÑ\81оба. Ð¢Ð¾Ð³Ð´Ð° Ñ\82акое Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾. MediaWiki Ð²ÐµÑ\80Ñ\81ии 1.24 Ð¸ Ð½Ð¾Ð²ÐµÐµ Ð½Ðµ Ñ\81одеÑ\80жаÑ\82 Ñ\82емÑ\8b Ð¾Ñ\84оÑ\80млениÑ\8f Ð² Ð¾Ñ\81новном Ñ\80епозиÑ\82оÑ\80ии. Ð\9fопÑ\80обÑ\83йÑ\82е Ñ\83Ñ\81Ñ\82ановиÑ\82Ñ\8c Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ñ\82емÑ\8b Ð¸Ð· [https://www.mediawiki.org/wiki/Category:All_skins ÐºÐ°Ñ\82алога Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f Ñ\81айÑ\82а mediawiki.org]:\n:* Ð\97агÑ\80Ñ\83зив [https://www.mediawiki.org/wiki/Download Ð°Ñ\80Ñ\85ив Ñ\83Ñ\81Ñ\82ановоÑ\87нÑ\8bÑ\85 Ñ\84айлов], ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ñ\81одеÑ\80жиÑ\82 Ð½ÐµÑ\81колÑ\8cко Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f Ð¸ Ñ\80аÑ\81Ñ\88иÑ\80ений. Ð\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81копиÑ\80оваÑ\82Ñ\8c Ð¿Ð°Ð¿ÐºÑ\83 <code>skins/</code> Ð¸Ð· Ð½ÐµÐ³Ð¾.\n:* Ð\97агÑ\80Ñ\83зив Ð°Ñ\80Ñ\85ивÑ\8b Ð¾Ñ\82делÑ\8cнÑ\8bÑ\85 Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f Ñ\81 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Ð\9aлониÑ\80овав Ð¾Ð´Ð¸Ð½ Ð¸Ð· Ñ\80епозиÑ\82оÑ\80иев <code>mediawiki/skins/*</code> Ñ\87еÑ\80ез git Ð² Ð¿Ð¾Ð´Ð¿Ð°Ð¿ÐºÑ\83 <code dir=\"ltr\">skins/</code> Ð¿Ð°Ð¿ÐºÐ¸, ÐºÑ\83да Ñ\83Ñ\81Ñ\82ановлена MediaWiki.\n: Ð­Ñ\82о Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð½Ð°Ð²Ñ\80едиÑ\82Ñ\8c Ð²Ð°Ñ\88емÑ\83 Ñ\80епозиÑ\82оÑ\80иÑ\8e, ÐµÑ\81ли Ð²Ñ\8b MediaWiki-Ñ\80азÑ\80абоÑ\82Ñ\87ик. Ð¡Ð¼. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] Ð´Ð»Ñ\8f Ð¿Ð¾Ð»Ñ\83Ñ\87ениÑ\8f Ð¸Ð½Ñ\84оÑ\80маÑ\86ии Ð¾ Ñ\82ом, ÐºÐ°Ðº Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82Ñ\8c Ñ\82емÑ\8b Ð¾Ñ\84оÑ\80млениÑ\8f Ð¸ Ð²Ñ\8bбÑ\80аÑ\82Ñ\8c Ñ\82емÑ\83 Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (включено)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''отключено''')",
        "mediastatistics": "Медиа-статистика",
index 5556cd9..6f7735c 100644 (file)
@@ -9,7 +9,8 @@
                        "Meno25",
                        "Nemo bis",
                        "Urhixidur",
-                       "아라"
+                       "아라",
+                       "Purodha"
                ]
        },
        "tog-underline": "Сигэлэри аннынан тардыы:",
        "trackingcategories-name": "Этии аата",
        "trackingcategories-desc": "Категорияҕа киирии киритиэрийэ",
        "noindex-category-desc": "Бу сирэйи көрдүүр роботтар болҕомотоҕо ылбаттар, тоҕо диэтэххэ <code><nowiki>__NOINDEX__</nowiki></code> диэн «аптаах тыл» туттуллубут. Сирэй инньэ гынарга көҥүллэммит аат далыгар баар эбит.",
-       "index-category-desc": "Сирэйгэ __INDEX__ диэн «аптаах тыл» баар эбит (сирэй ону көҥүллүүр аат далыгар баар эбит), онон көрдүүр роботтар кинини болҕомтоҕо ылыа да суох түгэннэргэ көрөллөр эбит.",
+       "index-category-desc": "Сирэйгэ <nowiki>__INDEX__</nowiki> диэн «аптаах тыл» баар эбит (сирэй ону көҥүллүүр аат далыгар баар эбит), онон көрдүүр роботтар кинини болҕомтоҕо ылыа да суох түгэннэргэ көрөллөр эбит.",
        "post-expand-template-inclusion-category-desc": "Халыыптары барытын көрөдөрдөххө сирэй кээмэйэ маннааҕар улаатыа <code>$wgMaxArticleSize</code>, ол иһин сорох халыыптар көрдөрүллүбэтилэр.",
        "post-expand-template-argument-category-desc": "Халыып аргуменын арыйдахха (фигурнай ускуопка иһигэр баары, холобур, <code>{{{Foo}}})</code>, сирэй маннааҕар улахан буолуо: <code>$wgMaxArticleSize</code>.",
        "expensive-parserfunction-category-desc": "Сирэйгэ наһаа элбэх ресурсаны сиир функция туттуллубут (холобур, маннык <code>#ifexist</code>). Сиһилии — бу сирэйгэ: [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "specialpages-group-wiki": "Дааннайдара уонна тэриллэрэ",
        "specialpages-group-redirects": "Утаарар аналлаах сирэйдэр",
        "specialpages-group-spam": "Спаамы утары үнүстүрүмүөннэр",
+       "specialpages-group-developer": "Оҥорооччу тэриллэрэ (үнүстүрүмүөннэрэ)",
        "blankpage": "Кураанах сирэй",
        "intentionallyblankpage": "Бу сирэй соруйан кураанах хаалларыллыбыт",
        "external_image_whitelist": " #Бу устуруоканы хайдах баарынан хааллар<pre>\n#Разместите здесь фрагменты регулярных выражений (бу бэлиэлэр ыккардыларыгар баарын //)\n#Таска баар ойуулар URL-ларын кытта дьүөрэлэниэхтэрэ.\n#Сатанар буоллаҕына ойуу курдук көстүөхтэрэ, ол сатамматаҕына ойууга сигэ курдук.\n#Бу # бэлиэттэн саҕаланар строкаалар быһаарыы сурук курдук ааҕыллыахтара.\n#Устуруока буукуба улаханыттан-кыратыттан тутулуктаах\n\n#Размещайте фрагменты регулярных выражений над этой строчкой. Бу устуруоканы хайдах баарынан хааллар.</pre>",
index b08f81d..47267a0 100644 (file)
        "right-protect": "Spreminjanje stopenj zaščite in urejanje kaskadno zaščitenih strani",
        "right-editprotected": "Urejanje strani, zaščitenih kot »{{int:protect-level-sysop}}«",
        "right-editsemiprotected": "Urejanje strani, zaščitenih kot »{{int:protect-level-autoconfirmed}}«",
+       "right-editcontentmodel": "Urejanje vsebinskega modela strani",
        "right-editinterface": "Urejanje uporabniškega vmesnika",
        "right-editusercssjs": "Urejanje CSS- in JS-datotek drugih uporabnikov",
        "right-editusercss": "Uredi CSS datotek drugih uporabnikov",
        "action-viewmywatchlist": "ogleda svojega spiska nadzorov",
        "action-viewmyprivateinfo": "ogled svojih zasebnih informacij",
        "action-editmyprivateinfo": "urejanje svojih zasebnih informacij",
+       "action-editcontentmodel": "urejanje vsebinskega modela strani",
        "nchanges": "$1 {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb|sprememb}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od zadnjega obiska}}",
        "enhancedrc-history": "zgodovina",
        "specialpages-group-wiki": "Podatki in orodja",
        "specialpages-group-redirects": "Preusmerjajoče posebne strani",
        "specialpages-group-spam": "Orodja za spam",
+       "specialpages-group-developer": "Razvijalska orodja",
        "blankpage": "Prazna stran",
        "intentionallyblankpage": "Ta stran je namenoma prazna.",
        "external_image_whitelist": " #Pustite to vrstico takšno, kot je<pre>\n#Navedite odlomke običajnih izrazov (regular expressions) (samo del, ki gre med //) spodaj\n#Ti bodo primerjani z URL-ji zunanjih (hotlinkanih) slik\n#Tisti, ki se bodo ujemali, bodo prikazani kot slike; v nasprotnem primeru bo prikazana samo povezava do slike\n#Vrstice, ki se začnejo z #, so obravnavane kot komentarji\n#Zadeva je občutljiva na velikost črk\n\n#Navedite vse izraze regex pod to vrstico. Pustite to vrstico takšno, kot je</pre>",
        "expand_templates_generate_xml": "Pokaži razčlenitveno drevo XML",
        "expand_templates_generate_rawhtml": "Prikaži surovi HTML",
        "expand_templates_preview": "Predogled",
+       "expand_templates_preview_fail_html": "<em>Ker ima {{SITENAME}} omogočen surov HTML in je prišlo do izgube podatkov o seji, smo predogled skrili kot previdnostni ukrep pred napadi z JavaScriptom.</em>\n\n<strong>Če je to veljaven poskus predogleda, poskusite znova.</strong>\nČe še vedno ne deluje, se poskusite [[Special:UserLogout|odjaviti]] in znova prijaviti.",
+       "expand_templates_preview_fail_html_anon": "<em>Ker ima {{SITENAME}} omogočen surov HTML in niste prijavljeni, smo predogled skrili kot previdnostni ukrep pred napadi z JavaScriptom.</em>\n\n<strong>Če je to veljaven poskus predogleda, se [[Special:UserLogin|prijavite]] in poskusite znova.</strong>",
        "pagelanguage": "Izbirnik jezika strani",
        "pagelang-name": "Stran",
        "pagelang-language": "Jezik",
        "log-name-pagelang": "Dnevnik spreminjanja jezika",
        "log-description-pagelang": "Dnevnik sprememb jezika strani.",
        "logentry-pagelang-pagelang": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} jezik strani $3 z jezika $4 na jezik $5.",
-       "default-skin-not-found": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nKot kaže, vaša namestitev vsebuje kože, navedene spodaj. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.\n\n$2\n\n; Če ste MediaWiki pravkar namestili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code>skins/</code>.\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code dir=\"ltr\">skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git.\n\n; Če ste MediaWiki pravkar posodobili:\n: MediaWiki 1.24 in novejši nameščenih kož več ne omogočijo samodejno (oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priročnik: Samodejno odkrivanje kož]). V <code>LocalSettings.php</code> lahko prilepite naslednje vrstice, da omogočite trenutno nameščene kože:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Če ste pravkar spremenili <code>LocalSettings.php</code>:\n: Ponovno preverite imena kož, če ste se morda zatipkali.",
-       "default-skin-not-found-no-skins": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nNimate nameščenih kož.\n\n; Če ste MediaWiki pravkar namestili ali posodobili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. MediaWiki 1.24 in novejši nimajo vključene nobene kože v glavnem repozitoriju. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code dir=\"ltr\">skins/</code>.\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code>skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.",
+       "default-skin-not-found": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nKot kaže, vaša namestitev vsebuje kože, navedene spodaj. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.\n\n$2\n\n; Če ste MediaWiki pravkar namestili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code>skins/</code>.\n:* Prenesite tarballe posamezne kož z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code dir=\"ltr\">skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git.\n\n; Če ste MediaWiki pravkar posodobili:\n: MediaWiki 1.24 in novejši nameščenih kož več ne omogočijo samodejno (oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priročnik: Samodejno odkrivanje kož]). V <code>LocalSettings.php</code> lahko prilepite naslednje vrstice, da omogočite trenutno nameščene kože:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Če ste pravkar spremenili <code>LocalSettings.php</code>:\n: Ponovno preverite imena kož, če ste se morda zatipkali.",
+       "default-skin-not-found-no-skins": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nNimate nameščenih kož.\n\n; Če ste MediaWiki pravkar namestili ali posodobili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. MediaWiki 1.24 in novejši nimajo vključene nobene kože v glavnem repozitoriju. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code dir=\"ltr\">skins/</code>.\n:* Prenesite tarballe posamezne kož z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code>skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (omogočeno)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''onemogočeno''')",
        "mediastatistics": "Statistika predstavnosti",
index 39de585..d51c8bf 100644 (file)
        "error": "Грешка",
        "databaseerror": "Грешка у бази података",
        "databaseerror-text": "Дошло је до грешке у упиту базе података. Можда је у питању програмска грешка.",
+       "databaseerror-textcl": "Дошло је до грешке у упиту базе података.",
        "databaseerror-query": "Упит: $1",
        "databaseerror-function": "Функција: $1",
        "databaseerror-error": "Грешка: $1",
        "upload-options": "Поставке слања",
        "watchthisupload": "Надгледај ову датотеку",
        "filewasdeleted": "Датотека с овим називом је раније послата, али је обрисана.\nПроверите $1 пре него што наставите с поновним слањем.",
-       "filename-bad-prefix": "Назив датотеке коју шаљете почиње са '''\"$1\"''', а њега обично додељују дигитални фотоапарати.\nИзаберите назив датотеке који описује њен садржај.",
+       "filename-bad-prefix": "Назив датотеке коју шаљете почиње са <strong>„$1“</strong>, а њега обично додељују дигитални фотоапарати.\nИзаберите назив датотеке који описује њен садржај.",
        "filename-prefix-blacklist": " #<!-- оставите овај ред онаквим какав јесте --> <pre>\n# Синтакса је следећа:\n#   * Све од тарабе па до краја реда је коментар\n#   * Сваки ред означава префикс типичних назива датотека које додељивају дигитални апарати\nCIMG # Касио\nDSC_ # Никон\nDSCF # Фуџи\nDSCN # Никон\nDUW # неки мобилни телефони\nIMG # опште\nJD # Џеноптик\nMGP # Пентакс\nPICT # разно\n #</pre> <!-- оставите овај ред онаквим какав јесте -->",
        "upload-success-subj": "Успешно отпремање",
        "upload-success-msg": "Датотека из [$2] је послата. Доступна је овде: [[:{{ns:file}}:$1]]",
        "unblock-hideuser": "Не можете деблокирати овог корисника јер је његово корисничко име сакривено.",
        "ipb_cant_unblock": "Грешка: блокада $1 не постоји. Можда је корисник деблокиран.",
        "ipb_blocked_as_range": "Грешка: ИП адреса $1 није директно блокирана и не може да се деблокира.\nОна је блокирана као део блокаде $2, која може бити деблокирана.",
-       "ip_range_invalid": "Ð\9dеиÑ\81пÑ\80аван Ñ\80аÑ\81под ИП адреса.",
+       "ip_range_invalid": "Ð\9dеиÑ\81пÑ\80аван Ñ\80аÑ\81пон ИП адреса.",
        "ip_range_toolarge": "Опсежна блокирања већа од /$1 нису дозвољена.",
        "proxyblocker": "Блокер посредника",
        "proxyblockreason": "Ваша ИП адреса је блокирана јер представља отворени посредник.\nОбратите се вашем добављачу интернет услуга или техничку подршку и обавестите их о овом озбиљном безбедносном проблему.",
        "filemissing": "Недостаје датотека",
        "thumbnail_error": "Грешка при стварању минијатуре: $1",
        "djvu_page_error": "DjVu страница је недоступна",
-       "djvu_no_xml": "Не могу да преузмем XML за датотеку DjVu.",
+       "djvu_no_xml": "Не могу да преузмем XML за DjVu датотеку.",
        "thumbnail-temp-create": "Не могу да направим привремену датотеку минијатуре",
        "thumbnail-dest-create": "Не могу да сачувам минијатуру у одредишту",
        "thumbnail_invalid_params": "Неисправни параметри за минијатуру",
        "specialpages-group-wiki": "Подаци и алати",
        "specialpages-group-redirects": "Преусмеравање посебних страница",
        "specialpages-group-spam": "Алатке против непожељних порука",
+       "specialpages-group-developer": "Програмерски алати",
        "blankpage": "Празна страница",
        "intentionallyblankpage": "Ова страница је намерно остављена празном.",
        "external_image_whitelist": " #Оставите овај ред онаквим какав јесте<pre>\n#Испод додајте одломке регуларних израза (само део који се налази између //)\n#Они ће бити упоређени с адресама спољашњих слика\n#Оне које се поклапају биће приказане као слике, а преостале као везе до слика\n#Редови који почињу с тарабом се сматрају коментарима\n#Сви уноси су осетљиви на мала и велика слова\n\n#Додајте све одломке регуларних израза изнад овог реда. Овај ред не дирајте</pre>",
index 8eb2f0d..8721007 100644 (file)
        "upload-options": "Postavke slanja",
        "watchthisupload": "Nadgledaj ovu datoteku",
        "filewasdeleted": "Datoteka s ovim nazivom je ranije poslata, ali je obrisana.\nProverite $1 pre nego što nastavite s ponovnim slanjem.",
-       "filename-bad-prefix": "Naziv datoteke koju šaljete počinje sa '''\"$1\"''', a njega obično dodeljuju digitalni fotoaparati.\nIzaberite naziv datoteke koji opisuje njen sadržaj.",
+       "filename-bad-prefix": "Naziv datoteke koju šaljete počinje sa <strong>„$1“</strong>, a njega obično dodeljuju digitalni fotoaparati.\nIzaberite naziv datoteke koji opisuje njen sadržaj.",
        "filename-prefix-blacklist": " #<!-- ostavite ovaj red onakvim kakav jeste --> <pre>\n# Sintaksa je sledeća:\n#   * Sve od tarabe pa do kraja reda je komentar\n#   * Svaki red označava prefiks tipičnih naziva datoteka koje dodeljivaju digitalni aparati\nCIMG # Kasio\nDSC_ # Nikon\nDSCF # Fudži\nDSCN # Nikon\nDUW # neki mobilni telefoni\nIMG # opšte\nJD # Dženoptik\nMGP # Pentaks\nPICT # razno\n #</pre> <!-- ostavite ovaj red onakvim kakav jeste -->",
        "upload-success-subj": "Uspešno otpremanje",
        "upload-success-msg": "Datoteka iz [$2] je poslata. Dostupna je ovde: [[:{{ns:file}}:$1]]",
        "unblock-hideuser": "Ne možete deblokirati ovog korisnika jer je njegovo korisničko ime sakriveno.",
        "ipb_cant_unblock": "Greška: blokada $1 ne postoji. Možda je korisnik deblokiran.",
        "ipb_blocked_as_range": "Greška: IP adresa $1 nije direktno blokirana i ne može da se deblokira.\nOna je blokirana kao deo blokade $2, koja može biti deblokirana.",
-       "ip_range_invalid": "Neispravan raspod IP adresa.",
+       "ip_range_invalid": "Neispravan raspon IP adresa.",
        "ip_range_toolarge": "Opsežna blokiranja veća od /$1 nisu dozvoljena.",
        "proxyblocker": "Bloker posrednika",
        "proxyblockreason": "Vaša IP adresa je blokirana jer predstavlja otvoreni posrednik.\nObratite se vašem dobavljaču internet usluga ili tehničku podršku i obavestite ih o ovom ozbiljnom bezbednosnom problemu.",
        "filemissing": "Nedostaje datoteka",
        "thumbnail_error": "Greška pri stvaranju minijature: $1",
        "djvu_page_error": "DjVu stranica je nedostupna",
-       "djvu_no_xml": "Ne mogu da preuzmem XML za datoteku DjVu.",
+       "djvu_no_xml": "Ne mogu da preuzmem XML za DjVu datoteku.",
        "thumbnail-temp-create": "Ne mogu da napravim privremenu datoteku minijature",
        "thumbnail-dest-create": "Ne mogu da sačuvam minijaturu u odredištu",
        "thumbnail_invalid_params": "Neispravni parametri za minijaturu",
        "specialpages-group-wiki": "Podaci i alati",
        "specialpages-group-redirects": "Preusmeravanje posebnih stranica",
        "specialpages-group-spam": "Alatke protiv nepoželjnih poruka",
+       "specialpages-group-developer": "Programerski alati",
        "blankpage": "Prazna stranica",
        "intentionallyblankpage": "Ova stranica je namerno ostavljena praznom.",
        "external_image_whitelist": " #Ostavite ovaj red onakvim kakav jeste<pre>\n#Ispod dodajte odlomke regularnih izraza (samo deo koji se nalazi između //)\n#Oni će biti upoređeni s adresama spoljašnjih slika\n#One koje se poklapaju biće prikazane kao slike, a preostale kao veze do slika\n#Redovi koji počinju s tarabom se smatraju komentarima\n#Svi unosi su osetljivi na mala i velika slova\n\n#Dodajte sve odlomke regularnih izraza iznad ovog reda. Ovaj red ne dirajte</pre>",
index a3ecde9..55192df 100644 (file)
@@ -59,7 +59,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Abbedabb",
-                       "Platinawolf"
+                       "Platinawolf",
+                       "Albinomamba"
                ]
        },
        "tog-underline": "Stryk under länkar:",
        "specialpages-group-wiki": "Data och verktyg",
        "specialpages-group-redirects": "Omdirigerande specialsidor",
        "specialpages-group-spam": "Spamverktyg",
+       "specialpages-group-developer": "Utvecklarverktyg",
        "blankpage": "Tom sida",
        "intentionallyblankpage": "Denna sida har avsiktligen lämnats tom.",
        "external_image_whitelist": "#Lämna den här raden precis som den är<pre>\n#Skriv fragment av reguljära uttryck (bara delen som ska vara mellan //) nedan\n#Dessa kommer att jämföras med URL:er för externa bilder\n#De som matchar kommer att visas som bilder, annars visas bara en länk till bilden\n#Rader som börjar med # behandlas som kommentarer\n#Detta är skiftläges-okänsligt\n\n#Skriv alla fragment av reguljära uttryck ovanför den här raden. Lämna den här raden precis som den är</pre>",
        "log-name-pagelang": "Språkändringslogg",
        "log-description-pagelang": "Detta är en logg över ändringar i sidspråken.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ändrade}} sidspråket för $3 från $4 till $5.",
-       "default-skin-not-found": "Ojsan! Standardutseendet för din wiki, definierad i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDin installation verkar innehålla följande utseenden. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur dessa aktiveras och hur standard väljs.\n\n$2\n\n; Om du precis installerat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code>skins/</code>-katalogen från den.\n:* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code dir=\"ltr\">skins/</code>-katalogen i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare.\n\n; Om du precis har uppgraderat MediaWiki:\n: MediaWiki 1.24 och nyare aktiverar ej längre automatiskt utseenden (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Automatisk identifiering av utseenden]). Du kan klistra in följande rader i <code>LocalSettings.php</code> för att aktivera alla för närvarande installerade utseenden:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du precis har ändrat i <code>LocalSettings.php</code>:\n: Dubbelkolla namnen för utseendena för att identifiera stavfel.",
+       "default-skin-not-found": "Ojsan! Standardutseendet för din wiki, definierad i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDin installation verkar innehålla följande utseenden. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur du aktiverar dem och hur standard väljs.\n\n$2\n\n; Om du precis installerat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är normalt. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klippa och klistra in <code>skins/</code> katalogen från den.\n:* Ladda ner individuella skin tarbells från[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klona ett av <code>mediawiki/skins/*</code> centralförvaren in i <code dir=\"ltr\">skins/</code> arkiven i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git arkivet om du är en MediaWiki-utvecklare. \n\n; Om du precis har uppgraderat MediaWiki:\n: MediaWiki 1.24 och nyare aktiverar ej längre automatiskt installerade utseenden (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Automatisk identifiering av utseenden]). Du kan klistra in följande rader i <code>LocalSettings.php</code> för att aktivera alla för närvarande installerade utseenden:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du precis har modifierat <code>LocalSettings.php</code>:\n: Dubbelkolla namnen för utseendena för att identifiera stavfel.",
        "default-skin-not-found-no-skins": "Ojsan! Standardutseendet för din wiki, definierad i <code>$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDu har inga installerade utseenden.\n\n; Om du precis installerat eller uppdaterat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. MediaWiki 1.24 och nyare inkluderar inte några utseenden i det huvudsakliga centralförvaret. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code dir=\"ltr\">skins/</code>-katalogen från den.\n* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code>skins/</code>-katalogen i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur utseenden aktiveras och hur standardutseendet väljs.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiverad)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inaktiverad''')",
index e4ccd5e..8dd9504 100644 (file)
@@ -54,7 +54,8 @@
                        "Olion",
                        "Piramidion",
                        "Andygol",
-                       "Ypryima"
+                       "Ypryima",
+                       "Purodha"
                ]
        },
        "tog-underline": "Підкреслювання посилань:",
        "trackingcategories-name": "Ім'я повідомлення",
        "trackingcategories-desc": "Критерій включення в категорію",
        "noindex-category-desc": "Сторінка не індексується пошуковими роботами, тому що на ній є «чарівне слово» <code><nowiki>__NOINDEX__</nowiki></code>, і вона знаходиться в просторі імен, де дозволений цей прапор).",
-       "index-category-desc": "На сторінці є «чарівне слово» __INDEX__ (і сторінка знаходиться в просторі імен, де дозволений цей прапор), тому вона індексуються пошуковими роботами в тих випадках, коли цього зазвичай не відбувається.",
+       "index-category-desc": "На сторінці є «чарівне слово» <nowiki>__INDEX__</nowiki> (і сторінка знаходиться в просторі імен, де дозволений цей прапор), тому вона індексуються пошуковими роботами в тих випадках, коли цього зазвичай не відбувається.",
        "post-expand-template-inclusion-category-desc": "Розмір сторінки стане більший за <code>$wgMaxArticleSize</code> після показу всіх шаблонів, тому деякі з них не були показані повністю.",
        "post-expand-template-argument-category-desc": "Сторінка стане більшою за <code>$wgMaxArticleSize</code> після розкриття аргументу шаблона (що-небудь в потрійних фігурних дужках, наприклад, <code>{{{Foo}}})</code>).",
        "expensive-parserfunction-category-desc": "На сторінці також використовується занадто багато ресурсомістких функцій (таких, як <code>#ifexist</code>). Детальніше - на сторінці [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "specialpages-group-wiki": "Дані та інструменти",
        "specialpages-group-redirects": "Перенаправлення",
        "specialpages-group-spam": "Інструменти проти спаму",
+       "specialpages-group-developer": "Інструменти розробника",
        "blankpage": "Порожня сторінка",
        "intentionallyblankpage": "Цю сторінку навмисне залишили порожньою",
        "external_image_whitelist": "  #Залиште цей рядок таким, яким він є<pre>\n#Записуйте тут фрагменти регулярних виразів (ту частину, що знаходиться між //)\n#Вони будуть зіставлені з URL зовнішніх зображень.\n#Потрібні будуть показані як зображення, решта будуть показані як посилання на зображення\n#Рядки, що починаються з #, вважаються коментарями.\n#Рядки чутливі до регістра\n\n#Розміщуйте фрагменти регулярних виразів над цією строчкою. Залиште цей рядок таким, яким він є.</pre>",
index 4666189..ca9b49c 100644 (file)
@@ -20,7 +20,8 @@
                        "පසිඳු කාවින්ද",
                        "아라",
                        "Calak",
-                       "عرفان ارشد"
+                       "عرفان ارشد",
+                       "Obaid Raza"
                ]
        },
        "tog-underline": "ربط کی خط کشیدگی:",
        "newwindow": "(نـئی ونـڈو میـں)",
        "cancel": "منسوخ",
        "moredotdotdot": "اور...",
-       "morenotlisted": "یہ فہرست مکمل نہیں ہے-",
+       "morenotlisted": "یہ فہرست مکمل نہیں ہے۔",
        "mypage": "میرا صفحہ",
        "mytalk": "میری گفتگو",
        "anontalk": "اس IP کیلیے بات چیت",
        "history-feed-description": "ویکی پر اِس صفحہ کا تاریخچۂ نظرثانی",
        "history-feed-item-nocomment": "بہ $2 $1",
        "history-feed-empty": "درخواست شدہ صفحہ موجود نہیں.\nیا تو یہ ویکی سے حذف کیا گیا ہے اور یا اِس کا نام تبدیل کردیا گیا ہے.\nآپ متعلقہ نئے صفحات کیلئے [[Special:Search|ویکی پر تلاش]] کرسکتے ہیں.",
-       "rev-deleted-comment": "(تبصرہ ہٹایا گیا ہے)",
+       "rev-deleted-comment": "(تبصرہ حذف کی گيا ہے)",
+       "rev-deleted-user": "(صارف نام حذف کیا گيا ہے)",
        "rev-delundel": "دکھاؤ/چھپاؤ",
        "rev-showdeleted": "دکھاؤ",
        "revisiondelete": "نظرثانی حذف کریں/واپس لائیں",
        "revdelete-hide-comment": "ترمیمی تبصرہ چھپاؤ",
        "revdelete-hide-user": "ترمیم کار کا اسمِ صارف / آئی.پی پتہ چُھپاؤ",
        "revdelete-radio-same": "(تبدیل مت کرو)",
-       "revdelete-radio-set": "ہاں",
-       "revdelete-radio-unset": "نہیں",
+       "revdelete-radio-set": "پوشیدہ",
+       "revdelete-radio-unset": "ظاہر",
        "revdelete-unsuppress": "بحال شدہ نظرثانیوں پر پابندیاں ہٹاؤ",
        "revdelete-log": "وجہ",
        "revdelete-success": "'''رؤیتِ نظرثانی کی تجدید کامیابی سے ہوئی.'''",
        "prefs-rc": "حالیہ تبدیلیاں",
        "prefs-watchlist": "زیرِنظر فہرست",
        "prefs-watchlist-days": "زیرِنظر فہرست میں نظر آنے والے ایام:",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-watchlist-days-max": "زیادا سے زیادہ $1 {{PLURAL:$1|یوم|ایام}}",
        "prefs-watchlist-edits": "عریض زیرِنظرفہرست میں نظر آنے والی تبدیلیوں کی زیادہ سے زیادہ تعداد:",
        "prefs-watchlist-edits-max": "(زیادہ سے زیادہ تعداد: 1000)",
        "prefs-misc": "دیگر",
        "prefs-email": "اختیاراتِ برقی ڈاک",
        "prefs-rendering": "ظاہریت",
        "saveprefs": "محفوظ",
-       "restoreprefs": "تمام بےنقص ترتیبات بحال کیجئے",
+       "restoreprefs": "تمام بےنقص ترتیبات بحال کریں",
        "prefs-editing": "تدوین",
        "rows": "صفیں:",
        "columns": "قطاریں:",
        "timezoneregion-indian": "بحر ہند",
        "timezoneregion-pacific": "بحر الکاہل",
        "allowemail": "دوسرے صارفین کو برقی خظ لکھنے کا اختیار دیں",
-       "prefs-searchoptions": "اختÛ\8cاراتÙ\90 ØªÙ\84اش",
+       "prefs-searchoptions": "تلاش",
        "prefs-namespaces": "جائے نام",
        "default": "طے شدہ",
        "prefs-files": "مسلات",
        "prefs-custom-js": "خودساختہ JS",
        "prefs-emailconfirm-label": "برقی پتہ کی تصدیق:",
        "youremail": "٭ برقی خط",
-       "username": "اسÙ\85 ØµØ§Ø±Ù\81",
+       "username": "صارÙ\81:",
        "prefs-memberingroups": "{{PLURAL:$1|گروہ|گروہوں}} کا رُکن:",
        "prefs-registration": "وقتِ اندراج:",
        "yourrealname": "* اصلی نام",
        "gender-female": "عورت",
        "prefs-help-gender": "اختیاری: مصنع‌لطیف کی طرف سے صحیح‌الجنس تخاطب کیلئے استعمال ہوتا ہے. یہ معلومات عام ہوگی.",
        "email": "برقی خط",
-       "prefs-help-realname": "حقیقی نام اختیاری ہے.\nاگر آپ اِسے مہیّا کرتے ہیں، تو اِسے آپ کے کام کیلئے آپ کو انتساب دینے کیلئے استعمال کیا جائے گا.",
+       "prefs-help-realname": "حقیقی نام اختیاری ہے۔\nاگر آپ اسے مہیّا کرتے ہیں، تو اسے آپ کے کام کیلئے آپ کو انتساب دینے کیلئے استعمال کیا جائے گا۔",
        "prefs-help-email": "برقی ڈاک کا پتہ اختیاری ہے، لیکن یہ اُس وقت مفید ثابت ہوسکتا ہے جب آپ اپنا پارلفظ بھول گئے ہوں.",
        "prefs-help-email-others": "آپ یہ بھی منتخب کرسکتے ہیں کہ دوسرے صارفین آپ کے تبادلۂ خیال صفحہ پر ایک ربط کے ذریعے آپ کو برقی ڈاک بھیجیں.\nجب دوسرے صارفین آپ سے رابطہ کرتے ہیں تو آپ کا برقی ڈاک کا پتہ افشا نہیں کیا جاتا۔",
        "prefs-help-email-required": "برقی ڈاک پتہ چاہئے.",
        "userrights-lookup-user": "گروہائے صارف کا انتظام",
        "userrights-user-editname": "کوئی اسم‌صارف داخل کیجئے:",
        "editusergroup": "ترمیم گروہائے صارف",
-       "editinguser": "تبدÛ\8cÙ\84ئ Ø­Ù\82Ù\88Ù\82 برائے صارف '''[[صارف:$1|$1]]''' $2",
+       "editinguser": "تبدÛ\8cÙ\84ئ Ø§Ø®ØªÛ\8cارات برائے صارف '''[[صارف:$1|$1]]''' $2",
        "userrights-editusergroup": "ترمیم گروہائے صارف",
        "saveusergroups": "گروہائے صارف محفوظ",
        "userrights-groupsmember": "رکنِ:",
        "group-suppress": "نگران",
        "group-all": "(تمام)",
        "group-user-member": "صارف",
-       "group-autoconfirmed-member": "خودتصدیق شدہ صارف",
+       "group-autoconfirmed-member": "خودتوثیق شدہ صارف",
        "group-bot-member": "خودکار صارف",
        "group-sysop-member": "منتظم",
        "group-bureaucrat-member": "{{GENDER:$1|مامور اداری}}",
        "grouppage-autoconfirmed": "{{ns:project}}:خود توثیق شدہ صارف",
        "grouppage-bot": "{{ns:project}}:روبہ جات",
        "grouppage-sysop": "{{ns:project}}:منتظمین",
+       "grouppage-bureaucrat": "بیورو کریٹ",
        "right-upload": "ملفات زبراثقال (اپ لوڈ) کریں",
        "right-delete": "صفحات حذف کریں",
        "right-sendemail": "دیگر صارفین کو برقی ڈاک بھیجیں",
        "rcshowhideminor": "معمولی ترامیم $1",
        "rcshowhidebots": "خودکار صارف $1",
        "rcshowhideliu": "داخل شدہ صارف $1",
+       "rcshowhideliu-show": "دکھاؤ",
+       "rcshowhideliu-hide": "چھپائیں",
        "rcshowhideanons": "گمنام صارف $1",
+       "rcshowhideanons-show": "دکھاؤ",
+       "rcshowhideanons-hide": "چھپائیں",
        "rcshowhidepatr": "$1 مراجعت شدہ ترامیم",
+       "rcshowhidepatr-show": "دکھاؤ",
+       "rcshowhidepatr-hide": "چھپائيں",
        "rcshowhidemine": "ذاتی ترامیم $1",
+       "rcshowhidemine-show": "دکھاؤ",
+       "rcshowhidemine-hide": "چھپائیں",
        "rclinks": "آخری $2 روز میں ہونے والی $1 تبدیلیوں کا مشاہدہ کریں<br />$3",
        "diff": "فرق",
        "hist": "تاریخچہ",
        "minoreditletter": "م",
        "newpageletter": "نیا ..",
        "boteditletter": " خودکار",
+       "rc_categories_any": "کوئی بھی",
        "rc-enhanced-expand": "تفصیلات دِکھائیں (JavaScript درکار)",
        "rc-enhanced-hide": "تفصیلات چھپائیے",
        "recentchangeslinked": "متعلقہ تبدیلیاں",
        "savefile": "فائل محفوظ کریں",
        "sourcefilename": "اسم ملف (فائل) کا منبع:",
        "destfilename": "تعین شدہ اسم ملف:",
-       "watchthisupload": "یہ صفحہ زیر نظر کیجیۓ",
+       "watchthisupload": "یہ صفحہ زیر نظر کریں",
        "license": "اجازہ:",
        "license-header": "اجازہ کاری",
        "listfiles": "فہرست فائل",
+       "listfiles_date": "تاریخ",
+       "listfiles_name": "نام",
+       "listfiles_user": "صارف",
+       "listfiles_size": "حجم",
+       "listfiles_description": "تفصیل",
+       "listfiles_count": "ورژن",
+       "listfiles-latestversion": "موجودہ ورژن",
+       "listfiles-latestversion-yes": "ہاں",
+       "listfiles-latestversion-no": "نہیں",
        "file-anchor-link": "مسل",
        "filehist": "ملف کی تاریخ",
        "filehist-help": "یہ دیکھنے کیلئے کہ کسی خاص وقت پر ملف کس طرح ظاہر ہوتا تھا اُس تاریخ یا وقت پر طق کیجئے۔",
+       "filehist-deleteall": "سب حذف",
+       "filehist-deleteone": "حذف",
        "filehist-revert": "رجوع",
        "filehist-current": "حالیہ",
        "filehist-datetime": "تاریخ/وقت",
        "filehist-thumb": "اظفورہ",
        "filehist-user": "صارف",
        "filehist-dimensions": "ابعاد",
+       "filehist-filesize": "تصویر کا حجم",
        "filehist-comment": "تبصرہ",
        "imagelinks": "ملف کا استعمال",
        "linkstoimage": "اِس ملف کے ساتھ درج ذیل {{PLURAL:$1|صفحہ مربوط ہے|$1 صفحات مربوط ہیں}}",
        "nolinkstoimage": "ایسے کوئی صفحات نہیں جو اس ملف (فائل) سے رابطہ رکھتے ہوں۔",
+       "filedelete-comment": "وجہ:",
+       "filedelete-submit": "حذف کریں",
+       "filedelete-success": " (\"اقدام مکمل ہوا\")۔",
+       "filedelete-success-old": " (\"اقدام مکمل ہوا\")",
        "download": "زیراثقال (ڈاؤن لوڈ)",
        "listredirects": "فہرست متبادل ربط",
        "unusedtemplates": "غیر استعمال شدہ سانچے",
+       "unusedtemplateswlh": "دیگر روابط",
        "randompage": "بےترتیب صفحہ",
+       "randomincategory-category": "زمرہ:",
        "statistics": "اعداد و شمار",
+       "statistics-header-pages": "احصائے صفحات",
+       "statistics-header-edits": "احصائے تدوین",
        "statistics-header-users": "ارکان کے اعداد و شمار",
+       "statistics-header-hooks": "احصائے دیگر",
+       "statistics-articles": "مندرج صفحات",
+       "statistics-pages": "صفحات",
+       "statistics-pages-desc": "(ویکی اقتباسات کے کل صفحات، بشمولِ تبادلۂ خیال، رجوع مکررات وغیرہ۔)",
+       "statistics-files": "زبراثقال شدہ ملفات",
+       "statistics-edits": "ویکی اقتباسات کے آغاز سے کل صفحاتی ترمیم",
+       "statistics-edits-average": "فی صفحہ اوسط ترامیم",
+       "statistics-users": "مندرج [[خاص:فہرست صارفین، صارف فہرست|صارفین]]",
+       "statistics-users-active": "متحرک صارفین",
        "doubleredirects": "دوہرے متبادل ربط",
        "brokenredirects": "نامکمل متبادل ربط",
+       "brokenredirects-edit": "ترمیم کریں",
+       "brokenredirects-delete": "حذف",
        "nbytes": "$1 {{PLURAL:$1|لکمہ|لکمہ جات}}",
        "ncategories": "{{PLURAL:$1|زمرہ|زمرہ جات}} $1",
        "nmembers": "{{PLURAL:$1|رکن|اراکین}}",
        "unusedimages": "غیر استعمال شدہ فائلیں",
        "wantedcategories": "طلب شدہ زمرہ جات",
        "wantedpages": "درخواست شدہ مضامین",
+       "wantedfiles": "مطلوب تصاویر",
+       "wantedtemplates": "مطلوب سانچے",
        "mostlinked": "سب سے زیادہ ربط والے مضامین",
        "mostlinkedcategories": "سب سے زیادہ ربط والے زمرہ جات",
        "mostcategories": "سب سے زیادہ زمرہ جات والے مضامین",
        "shortpages": "چھوٹے صفحات",
        "longpages": "طویل ترین صفحات",
        "deadendpages": "مردہ صفحات",
+       "protectedpages": "محفوظ شدہ صفحات",
+       "protectedpages-reason": "وجہ",
+       "protectedpages-unknown-timestamp": "نامعلوم",
+       "protectedpages-unknown-performer": "نامعلوم صارف",
        "listusers": "فہرست ارکان",
        "usercreated": "{{GENDER:$3|تخلیق شدہ}}  بتاریخ $1 بوقت $2",
        "newpages": "جدید صفحات",
+       "newpages-username": "صارف نام:",
        "ancientpages": "قدیم ترین صفحات",
        "move": "منتقـل",
        "movethispage": "یہ صفحہ منتقل کیجئے",
        "pager-newer-n": "{{PLURAL:$1|جدید 1|جدید $1}}",
        "pager-older-n": "{{PLURAL:$1|پُرانا 1|پُرانے $1}}",
+       "apihelp": "معاونت اے پی آئی",
+       "apihelp-no-such-module": "ماڈیول \"$1\" نہیں ملا",
        "booksources": "کتابی وسائل",
        "booksources-search-legend": "تلاش برائے مآخذاتِ کتاب",
+       "booksources-search": "تلاش",
        "specialloguserlabel": "صارف:",
        "speciallogtitlelabel": "عنوان:",
        "log": "نوشتہ جات",
        "allpagesprefix": "مطلوبہ سابقہ سے شروع ہونے والے صفحات کی نمائش:",
        "categories": "زمرہ",
        "categoriespagetext": "مندرجہ ذیل زمرہ جات اس وکی میں موجود ہیں۔\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
+       "linksearch-ok": "تلاش",
        "linksearch-line": "$1 مربوط ہے $2 سے",
+       "listusers-submit": "دکھاؤ",
+       "listusers-noresult": "یہ صارف نہیں ملا",
+       "activeusers": "متحرک صارفین کی فہرست",
+       "activeusers-hidebots": "پوشیدہ خود کار صارف",
+       "activeusers-hidesysops": "پوشیدہ منتظمین",
+       "activeusers-noresult": "یہ صارف نہیں مل سکا",
+       "listgrouprights-rights": "اختیارات",
        "listgrouprights-members": "(اراکین کی فہرست)",
+       "listgrouprights-namespaceprotection-namespace": "فضائے نام",
        "mailnologintext": "دیگر ارکان کو برقی خط ارسال کرنے کیلیۓ لازم ہے کہ آپ [[Special:UserLogin|داخل شدہ]] حالت میں ہوں اور آپ کی [[Special:Preferences|ترجیحات]] ایک درست برقی خط کا پتا درج ہو۔",
        "emailuser": "صارف کو برقی خط لکھیں",
+       "emailuser-title-notarget": "ای میل صارف",
+       "emailpage": "صارف کو برقی خط لکھیں",
        "defemailsubject": "{{SITENAME}} سے برقی خط",
-       "noemailtext": "اس صارف نے برقی خط کے لیے کوئی پتہ فراہم نہیں کیا، یا یہ چاہتا ہے کا اس سے کوئی صارف رابطہ نہ کرے۔",
-       "emailsubject": "عنوان",
+       "noemailtext": "اس صارف نے برقی خط کے لیے پتہ فراہم نہیں کیا، یا یہ چاہتا ہے کا اس سے کوئی صارف رابطہ نہ کرے۔",
+       "emailusername": "صارف نام:",
+       "emailsubject": "موضوع:",
        "emailmessage": "پیغام:",
+       "emailsend": "بھیجیں",
        "watchlist": "میری زیرنظرفہرست",
        "mywatchlist": "میری زیرنظرفہرست",
        "watchlistfor2": "براۓ $1 ($2)",
        "whatlinkshere-hidelinks": "روابط $1",
        "whatlinkshere-hideimages": "روابطِ تصاویر $1",
        "whatlinkshere-filters": "فلٹرذ",
-       "blockip": "داخلہ ممنوع براۓ صارف",
+       "blockip": "داخلہ ممنوع برائے صارف",
+       "blockip-legend": "ممنوع کردہ صارفین",
        "ipbreason": "وجہ:",
        "ipbsubmit": "اس صارف کا داخلہ ممنوع کریں",
        "ipboptions": "2 گھنٹے:2 hours,1 یوم:1 day,3 ایام:3 days,1 ہفتہ:1 week,2 ہفتے:2 weeks,1 مہینہ:1 month,3 مہینے:3 months,6 مہینے:6 months,1 سال:1 year,لامحدود:infinite",
index add43d4..3d36037 100644 (file)
        "tog-hidepatrolled": "Scondi i canbiamenti verificà in tei \"Ultimi canbiamenti\"",
        "tog-newpageshidepatrolled": "Scondi łe pajine verifegae da l'elenco de łe pajine pì resenti",
        "tog-extendwatchlist": "Mostra tute łe modifeghe a i oservai spesałi, no soło l'ultima",
-       "tog-usenewrc": "Ragrupa łe modifeghe par pàjina inte i ultimi canbiamenti e inte łe tegnùe d'ocio (el dimanda JavaScript)",
+       "tog-usenewrc": "Ragrupa ƚe modifeghe par pàgina inte i ultemi canbiamenti e inte ƚe tegnùe d'òcio",
        "tog-numberheadings": "Numerasion automatega de i titołi de sesion",
-       "tog-showtoolbar": "Mostra ła bara de i strumenti de modifega (el richiede JavaScript)",
-       "tog-editondblclick": "Modifega de łe pajine tramite dopio clic (el richiede JavaScript)",
-       "tog-editsectiononrightclick": "Modifega de łe sesion tramite clic destro sol titoło (el richiede JavaScript)",
+       "tog-showtoolbar": "Mostra ƚa bara de i strumenti de modifega",
+       "tog-editondblclick": "Modifega de ƚe pàgine co dopio clic",
+       "tog-editsectiononrightclick": "Modifega de ƚe sesion co clic dreto so'l tìtoƚo",
        "tog-watchcreations": "Xonta łe pàjine creae e i file cargai a łe tegnùe d'ocio",
        "tog-watchdefault": "Xonta łe pàjine e i file modifegai a łe tegnùe d'ocio",
        "tog-watchmoves": "Xonta łe pàjine e i file spostai a łe tegnùe d'ocio",
@@ -44,7 +44,7 @@
        "tog-shownumberswatching": "Mostra el numaro de utenti che i ga ła pajina en oservasion",
        "tog-oldsig": "Anteprima de ła firma:",
        "tog-fancysig": "Interpreta i comandi wiki in te la firma (sensa colegamento automatego)",
-       "tog-uselivepreview": "Ativa ła funsion \"Line preview\" (el dimanda JavaScript; sperimentałe)",
+       "tog-uselivepreview": "Ativa ƚa funsion \"Live preview\" (sperimentaƚe)",
        "tog-forceeditsummary": "Chiedi conferma se l'ozeto de ła modifega el xé vodo",
        "tog-watchlisthideown": "Scondi łe me modifeghe ne i oservai spesałi",
        "tog-watchlisthidebots": "Scondi łe modifeghe de i bot ne i oservai spesałi",
        "prefs-user-pages": "Pàjine utente",
        "prefs-personal": "Profiło utente",
        "prefs-rc": "Ultime modifeghe",
-       "prefs-watchlist": "Pàjine tegnùe d'ocio",
+       "prefs-watchlist": "Pàgine tegnùe d'òcio",
        "prefs-watchlist-days": "Nùmaro de giòrni da far védar nei osservati speciali:",
        "prefs-watchlist-days-max": "Masimo $1 {{PLURAL:$1|xorno|xorni}}",
        "prefs-watchlist-edits": "Nùmaro de modifiche da far védar con le funzion avanzade:",
        "emailuserfooter": "Sta e-mail la xe stà mandà da $1 a $2 'traverso la funsion \"Manda na e-mail a l'utente\" su {{SITENAME}}.",
        "usermessage-summary": "Messajo de sistema.",
        "usermessage-editor": "Messagero de sistema",
-       "watchlist": "Pàjine tegnùe d'ocio",
-       "mywatchlist": "Pàjine tegnùe d'ocio",
+       "watchlist": "Pàgine tegnùe d'òcio",
+       "mywatchlist": "Pàgine tegnùe d'òcio",
        "watchlistfor2": "De $1 $2",
        "nowatchlist": "No te ghè indicà pagine da tegner d'ocio.",
        "watchlistanontext": "Per vardar e modifegar l'ełenco de i osservati speciałi bisogna $1.",
        "specialpages-group-wiki": "Strumenti e informasion so'l projeto",
        "specialpages-group-redirects": "Pagine speciali de rimando",
        "specialpages-group-spam": "Strumenti anti spam",
+       "specialpages-group-developer": "Strumenti pa' i svilupadori",
        "blankpage": "Pagina voda",
        "intentionallyblankpage": "Sta pagina la xe stà lassà voda aposta",
        "external_image_whitelist": "  #Lassa sta riga esatamente cussita come la xe<pre>\n#Inserissi i framenti de espression regolari (solo el toco che va fra //) de seguito\n#Ste qua le corispondarà coi URL de imagini foreste (hotlinked)\n#Quele che corispondarà le vegnarà fora come imagini, se no vegnarà mostrà solo un colegamento a l'imagine\n#Le linee che taca con # le xe de comento\n#No vien tegnù conto del majuscolo/minuscolo\n\n#Inserissi de sora de sta riga tuti i framenti de regex. Lassa sta riga esatamente cussita come la xe</pre>",
index efba070..4d53855 100644 (file)
@@ -20,7 +20,8 @@
                        "Ktchankt",
                        "Kc kennylau",
                        "Mywood",
-                       "Impersonator 1"
+                       "Impersonator 1",
+                       "Cedric tsan cantonais"
                ]
        },
        "tog-underline": "連結加底線:",
@@ -63,7 +64,7 @@
        "tog-prefershttps": "簽到後繼續用加密連線",
        "underline-always": "全部",
        "underline-never": "永不",
-       "underline-default": "瀏覽器預設",
+       "underline-default": "瀏覽器或瀏覽器膚色預設",
        "editfont-style": "編輯區字型樣式:",
        "editfont-default": "瀏覽器預設",
        "editfont-monospace": "固定間距字型",
        "listingcontinuesabbrev": "續",
        "index-category": "做咗索引嘅版",
        "noindex-category": "未做索引嘅版",
+       "broken-file-category": "有失效文件鏈接嘅版",
        "about": "關於",
        "article": "內容頁",
        "newwindow": "(響新視窗度打開)",
        "cancel": "取消",
        "moredotdotdot": "更多...",
+       "morenotlisted": "爾張清單重未完成。",
        "mypage": "版",
        "mytalk": "傾偈",
        "anontalk": "同呢個 IP 傾偈",
        "otherlanguages": "第啲語言",
        "redirectedfrom": "(由$1跳轉過來)",
        "redirectpagesub": "跳轉頁",
+       "redirectto": "跳轉去:",
        "lastmodifiedat": "呢一頁嘅最後修改係響$1 $2。",
        "viewcount": "呢一頁已經有$1人次睇過。",
        "protectedpage": "受保護頁",
        "hidetoc": "收埋",
        "collapsible-collapse": "摺埋",
        "collapsible-expand": "展開",
+       "confirmable-confirm": "�確唔確定?",
+       "confirmable-yes": "確定。",
+       "confirmable-no": "唔確定。",
        "thisisdeleted": "睇下定係還原$1?",
        "viewdeleted": "去睇$1?",
        "restorelink": "$1次已刪除嘅編輯",
        "filerenameerror": "檔案 \"$1\" 唔改得做 \"$2\"。",
        "filedeleteerror": "檔案 \"$1\" 唔刪得。",
        "directorycreateerror": "目錄 \"$1\" 開唔到。",
+       "directoryreadonlyerror": "\"$1\"係唯讀文件,無得編輯。",
+       "directorynotreadableerror": "讀唔到\"$1\"。",
        "filenotfound": "檔案 \"$1\" 搵唔到。",
        "unexpected": "意外數值。 \"$1\"=\"$2\"。",
        "formerror": "錯誤:表格交唔到",
        "viewsourcetext": "你可以睇吓或者複製呢一頁嘅原始碼:",
        "viewyourtext": "你可以睇同複製呢版入面<strong>由你改</strong>嘅原碼:",
        "protectedinterface": "呢一頁提供軟件嘅介面文字,呢一頁已經保護咗以預防濫用。\n要加或者改所有維基站嘅翻譯,請去 [//translatewiki.net/ translatewiki.net]嘅  MediaWiki 本地化項目。",
-       "editinginterface": "'''警告:'''你而家編輯緊嘅呢一個用嚟提供介面文字嘅頁面。響呢一頁嘅更改會影響到其他用戶使用中嘅介面外觀。要加或者改所有維基站嘅翻譯,請去 [//translatewiki.net/ translatewiki.net]嘅  MediaWiki 本地化項目。",
+       "editinginterface": "'''警告''':閣下而家編輯緊嘅係為爾隻軟件提供介面文字嘅版。\n改爾一版會自動改埋爾個維基嘅其他用戶用緊嘅介面嘅文字。",
+       "translateinterface": "要加或者改所有維基項目嘅翻譯,請去MediaWiki嘅本地化項目:[//translatewiki.net/ translatewiki.net]。",
        "cascadeprotected": "呢一版已經保護咗唔能夠編輯,因為佢係響以下嘅{{PLURAL:$1|一|幾}}頁度包含咗,當中啟用咗\"連串\"保護選項來保護嗰一版: $2",
        "namespaceprotected": "你無權編輯響'''$1'''空間名裏面嘅呢一版。",
        "customcssprotected": "你無權改呢版CSS,因為佢包含其他用戶嘅個人設定。",
        "invalidtitle-knownnamespace": "名域 \"$2\" 同版名 \"$3\" 無效嘅標題",
        "invalidtitle-unknownnamespace": "未知名域號碼 \"$1\" 同版名 \"$2\" 無效嘅標題",
        "exception-nologin": "未簽到",
-       "exception-nologin-text": "請[[Special:Userlogin|簽到]]之後先至睇或者改版。",
+       "exception-nologin-text": "請[[Special:Userlogin|簽到]]之後先至睇或者改版。",
        "exception-nologin-text-manual": "請$1之後先至睇或者改呢版。",
        "virus-badscanner": "壞設定: 未知嘅病毒掃瞄器: ''$1''",
        "virus-scanfailed": "掃瞄失敗 (代碼 $1)",
        "createaccount-text": "有人響{{SITENAME}}度用咗你個電郵開咗個名叫 \"$2\" 嘅新戶口 ($4),密碼係 \"$3\" 。你應該而家登入,改埋個密碼。\n\n如果個戶口係開錯咗嘅話,你可以唔埋呢篇信。",
        "login-throttled": "你已經試咗太多次簽到動作。\n請等$1再試過。",
        "login-abort-generic": "你簽到失敗",
+       "login-migrated-generic": "由於閣下嘅用戶已經搬走徂,因此閣下嘅爾個用戶名已經唔存在。",
        "loginlanguagelabel": "語言:$1",
        "suspicious-userlogout": "你去登出嘅要求已經拒絕咗,因為佢可能由壞咗嘅瀏覽器或者快取代理傳送。",
        "createacct-another-realname-tip": "真名可以唔填。\n如果你畀埋佢,有需要嘅時候會用佢來標示你嘅工夫。",
        "passwordreset-capture-help": "如果揀呢度,電郵連臨時密碼金向你顯示,同時會送畀用戶。",
        "passwordreset-email": "電郵地址:",
        "passwordreset-emailtitle": "{{SITENAME}}嘅戶口資料",
+       "passwordreset-emailtext-ip": "有人(可能係閣下自己,來自IP地址$1)請求更改閣下喺{{SITENAME}}($4)嘅密碼。同爾個電子郵件有關聯嘅用戶包括:\n\n$2\n\n{{PLURAL:$3|爾個|爾啲}}臨時密碼會喺{{$5}}日之後失效。\n\n如果係閣下自己請求改密碼嘅,請馬上登錄{{SITENAME}}並且更改密碼。如果閣下諗返起自己個密碼,或者根本無申請過改密碼嘅話,請忽略爾條訊息,繼續用返舊密碼。",
+       "passwordreset-emailtext-user": "{{SITENAME}}用戶$1請求更改閣下喺{{SITENAME}}道嘅密碼$4。同爾個電子郵件有關聯嘅用戶包括:\n\n$2\n\n{{PLURAL:$3|爾個|爾啲}}臨時密碼會喺{{$5}}日之後失效。\n\n如果係閣下自己請求改密碼嘅,請馬上登錄{{SITENAME}}並且更改密碼。如果閣下諗返起自己個密碼,或者根本無申請過改密碼嘅話,請忽略爾條訊息,繼續用返舊密碼。",
        "passwordreset-emailelement": "用戶名:$1\n臨時密碼:$2",
        "passwordreset-emailsent": "密碼重設電郵經已送出。",
        "passwordreset-emailsent-capture": "密碼重設電郵經已送出,下面有顯示。",
        "preview": "預覽",
        "showpreview": "顯示預覽",
        "showdiff": "顯示差異",
-       "anoneditwarning": "'''警告:'''你重未登入。你嘅 IP 位址會喺呢個頁面嘅修訂歷史中記錄落嚟。",
+       "blankarticle": "<strong>警告</strong>:閣下開緊爾版係空白嘅,撳多次「{{int:savearticle}}」就會開一個乜都無嘅版(可能被視為破壞)。",
+       "anoneditwarning": "'''警告:'''閣下重未登入。閣下嘅 IP 地址會喺爾一版嘅修訂歷史裡邊記錄落嚟。",
        "anonpreviewwarning": "''你重未登入,你嘅 IP 位址會喺呢個頁面嘅修訂歷史中記錄落嚟。''",
        "missingsummary": "'''提醒:''' 你未提供編輯摘要。如果你再撳多一下「{{int:savearticle}}」嘅話,咁你儲存嘅編輯就會無摘要。",
        "missingcommenttext": "請輸入一個註解。",
        "anontalkpagetext": "----''呢度係匿名用戶嘅討論頁,佢可能係重未開戶口,或者佢重唔識開戶口。我哋會用數字表示嘅IP地址嚟代表佢。一個IP地址係可以由幾個用戶夾來用。如果你係匿名用戶,同覺得呢啲留言係同你冇關係嘅話,唔該去[[Special:UserLogin/signup|開一個新戶口]]或[[Special:UserLogin|登入]],避免喺以後嘅留言會同埋其它用戶混淆。''",
        "noarticletext": "喺呢一頁而家並冇任何嘅文字,你可以喺其它嘅頁面中[[Special:Search/{{PAGENAME}}|搵呢一頁嘅標題]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搵有關嘅日誌],\n或者[{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯呢一版]</span>。",
        "noarticletext-nopermission": "呢一頁而家冇任何文字,你可以喺其它嘅頁面中[[Special:Search/{{PAGENAME}}|搵呢一頁嘅標題]],或者<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搵有關嘅日誌]</span>。",
+       "missing-revision": "The revision #$1 of the page named \"{{FULLPAGENAME}}\" does not exist.\n\nThis is usually caused by following an outdated history link to a page that has been deleted.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].\n\n《{{FULLPAGENAME}}》嘅編輯#$1唔存在。\n\n恁通常係因為一條過徂時嘅鏈接帶徂閣下去一個已經刪除徂嘅版。\n詳情請查閱[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪文紀錄]。",
        "userpage-userdoesnotexist": "用戶戶口\"<nowiki>$1</nowiki>\"重未開。請響䦒/編輯呢版之前先檢查一下。",
        "userpage-userdoesnotexist-view": "用戶戶口\"$1\"重未開。",
        "blocked-notice-logextract": "呢位用戶而家被封鎖緊。\n下面有最近嘅封鎖紀錄以供參考:",
        "postedit-confirmation-saved": "呢版經已儲存咗。",
        "edit-already-exists": "唔可以開一新版。\n佢已經存在。",
        "defaultmessagetext": "預設訊息文字",
-       "editwarning-warning": "離開呢一版會令到你嘅修改唔見咗。\n你可以響你嘅喜好設定嘅\"{{int:prefs-editing}}\"小節度停用呢個警告。",
+       "content-not-allowed-here": "「$1」唔可以輸入[[$2]]。",
+       "editwarning-warning": "離開爾一版會令到閣下嘅修改唔見咗。\n閣下可以喺喜好設定嘅\"{{int:prefs-editing}}\"小節度停用爾個警告。",
+       "editpage-notsupportedcontentformat-title": "唔支持爾種內容格式。",
+       "content-model-wikitext": "維基文字",
+       "content-model-text": "純文字",
+       "content-model-javascript": "JavaScript程式語言",
+       "content-model-css": "層疊樣式表",
+       "duplicate-args-category": "爾版用徂幾個重複加類嘅模。",
        "expensive-parserfunction-warning": "警告: 呢一版有太多耗費嘅語法功能呼叫。\n\n佢應該少過$2次呼叫,佢而家係$1次呼叫。",
        "expensive-parserfunction-category": "響版度有太多嘅耗費嘅語法功能呼叫",
        "post-expand-template-inclusion-warning": "警告: 包含模大細太大。\n有啲模將唔會包含。",
        "specialpages-group-wiki": "Wiki資料同工具",
        "specialpages-group-redirects": "跳轉特別頁",
        "specialpages-group-spam": "反垃圾工具",
+       "specialpages-group-developer": "開發者工具",
        "blankpage": "空白頁",
        "intentionallyblankpage": "呢一版係留空咗嘅,用來作測速等用嘅。",
        "external_image_whitelist": " #留番呢行一樣嘅字<pre>\n#響下面(//嘅中間部份)入正規表達式\n#呢啲將會同外面(已超連結嘅)圖像配合\n#嗰啲晒對到出來嘅會顯示做圖像,唔係嘅話就只係會顯示連結\n#有 # 開頭嘅行會當做註解\n#無分大細楷\n\n#響呢行上面入晒全部嘅regex。留番呢行一樣嘅字</pre>",
index 25de8f7..5c703d6 100644 (file)
        "right-protect": "更改保护级别和编辑受级联保护页面",
        "right-editprotected": "编辑保护级别为“{{int:protect-level-sysop}}”的页面",
        "right-editsemiprotected": "编辑保护级别为“{{int:protect-level-autoconfirmed}}”的页面",
+       "right-editcontentmodel": "编辑页面的内容模型",
        "right-editinterface": "编辑用户界面",
        "right-editusercssjs": "编辑其他用户的CSS和JavaScript文件",
        "right-editusercss": "编辑其他用户的CSS文件",
        "action-viewmywatchlist": "查看你的监视列表",
        "action-viewmyprivateinfo": "查看您的私人信息",
        "action-editmyprivateinfo": "编辑你的私人信息",
+       "action-editcontentmodel": "编辑页面的内容模型",
        "nchanges": "$1次更改",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|上次访问后}}$1个",
        "enhancedrc-history": "历史",
        "specialpages-group-wiki": "数据与工具",
        "specialpages-group-redirects": "重定向特殊页面",
        "specialpages-group-spam": "反垃圾链接工具",
+       "specialpages-group-developer": "开发者工具",
        "blankpage": "空白页面",
        "intentionallyblankpage": "这个页面被故意留为空白",
        "external_image_whitelist": " #请原样保留本行文字<pre>\n#请在下面输入正则表达式片段(//之间的部份)\n#这些项目将会匹配外部图像的URL\n#匹配的项目将显示为图像,否则只会显示图像的链接\n#以#开头的行被视为评论\n#不区分大小写\n\n#请在本行上面输入所有正则表达式片段。请原样保留本行文字</pre>",
        "expand_templates_generate_xml": "显示XML语法树",
        "expand_templates_generate_rawhtml": "显示原始HTML",
        "expand_templates_preview": "预览",
+       "expand_templates_preview_fail_html": "<em>因为{{SITENAME}}启用了Raw HTML并且丢失了会话数据,预览被隐藏以防止JavaScript攻击。</em>\n\n<strong>如果这是合法的预览尝试,请再次重试。</strong>\n如果仍然不能工作,尝试[[Special:UserLogout|退出]]并重新登录。",
+       "expand_templates_preview_fail_html_anon": "<em>因为{{SITENAME}}启用了Raw HTML并且丢失了会话数据,预览被隐藏以防止JavaScript攻击。</em>\n\n<strong>如果这是合法的预览尝试,请尝试[[Special:UserLogin|登录]]并重试。</strong>",
        "pagelanguage": "页面语言选择器",
        "pagelang-name": "页面",
        "pagelang-language": "语言",
        "log-name-pagelang": "更改语言日志",
        "log-description-pagelang": "这是页面语言更改的日志。",
        "logentry-pagelang-pagelang": "$1{{GENDER:$2|更改}}$3的页面语言:从$4改为$5。",
-       "default-skin-not-found": "天哪!您在<code dir=\"ltr\">$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。您的安装版本看起来需要包含以下皮肤。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。\n\n$2\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的。希望如此。尝试通过以下方法从[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。\n\n; 如果您升级了您的MediaWiki的话:\n: MediaWiki 1.24版本起不再自动启用已安装皮肤(参见[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 此手册])。您可复制粘贴以下文本至您wiki的<code>LocalSettings.php</code>以启用安装的皮肤:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 如果您已经修改了<code>LocalSettings.php</code>:\n: 请再次检查皮肤名以确保不存在错误拼写。",
-       "default-skin-not-found-no-skins": "天哪!您在<code>$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。而且您没有安装任何皮肤。\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的,这是预期的。这是因为MediaWiki 1.24版本起主代码库不再包含任何皮肤。尝试通过以下方法从[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。",
+       "default-skin-not-found": "天哪!您在<code dir=\"ltr\">$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。您的安装版本看起来需要包含以下皮肤。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。\n\n$2\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的。希望如此。尝试通过以下方法从[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 从[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]单独下载皮肤安装包。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。\n\n; 如果您升级了您的MediaWiki的话:\n: MediaWiki 1.24版本起不再自动启用已安装皮肤(参见[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 此手册])。您可复制粘贴以下文本至您wiki的<code>LocalSettings.php</code>以启用安装的皮肤:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 如果您已经修改了<code>LocalSettings.php</code>:\n: 请再次检查皮肤名以确保不存在错误拼写。",
+       "default-skin-not-found-no-skins": "天哪!您在<code>$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。而且您没有安装任何皮肤。\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的,这是预期的。这是因为MediaWiki 1.24版本起主代码库不再包含任何皮肤。尝试通过以下方法从[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 从[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]单独下载皮肤安装包。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2(已启用)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2('''已禁用''')",
        "mediastatistics": "媒体统计",
index 5b186fa..88fadab 100644 (file)
        "tog-prefershttps": "登入時始終使用安全連線",
        "underline-always": "永遠使用",
        "underline-never": "永不使用",
-       "underline-default": "外觀或瀏覽器預設值",
+       "underline-default": "外觀或瀏覽器預設值",
        "editfont-style": "編輯區字型樣式:",
        "editfont-default": "瀏覽器預設值",
        "editfont-monospace": "等距字型",
        "newarticle": "(新)",
        "newarticletext": "您正連結至一頁不存在頁面。\n要建立該頁面,請在下方的編輯框中輸入內容 (詳情請參考 [$1 説明頁面])。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
        "anontalkpagetext": "----\n<em>此討論頁面是給尚未建立帳號的匿名使用者使用</em>\n因此我們必須使用 IP 位址來辨識身份,但相同的 IP 位址可能由許多不同的使用者所共用。\n如果您是匿名使用者並且覺得評論的內容與您無關,請 [[Special:UserLogin/signup|建立新帳號]] 或 [[Special:UserLogin|登入]] 避免與其他匿名使用者混淆。",
-       "noarticletext": "此頁面目前沒有內容,\n您可以在其它頁面中 [[Special:Search/{{PAGENAME}}|搜尋此頁面標題]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌],\n或 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯此頁]</span>。",
+       "noarticletext": "此頁面目前沒有內容,您可以在其它頁面中[[Special:Search/{{PAGENAME}}|搜尋此頁面標題]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯此頁]</span>。",
        "noarticletext-nopermission": "此頁面目前沒有內容,\n您可以在其它頁面中 [[Special:Search/{{PAGENAME}}|搜尋此頁面標題]],或 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]</span>,但您沒有權限建立此頁面。",
        "missing-revision": "頁面名稱 \"{{FULLPAGENAME}}\" 的 #$1 修訂版本不存在。\n\n通常是因連結到過期的歷史頁面,該頁面已被刪除。\n詳情請參考 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。",
        "userpage-userdoesnotexist": "使用者帳號 \"$1\" 尚未註冊。\n若您要建立/編輯此頁面,請先檢查是否正確。",
        "searchprofile-advanced-tooltip": "搜尋自訂命名空間",
        "search-result-size": "$1 ($2 個字)",
        "search-result-category-size": "$1 位成員 ($2 個子分類,$3 個檔案)",
-       "search-redirect": "(重新導向 $1)",
+       "search-redirect": "(重新導向自 $1 )",
        "search-section": "(章節 $1)",
        "search-category": "(分類 $1)",
        "search-file-match": "(符合檔案內容)",
        "searchrelated": "相關",
        "searchall": "全部",
        "showingresults": "以下顯示從第 <strong>$2</strong> 筆開始,共 {{PLURAL:$1|<strong>1</strong> 筆結果|<strong>$1</strong> 筆結果}}:",
-       "showingresultsinrange": "以下顯示從第 <strong>$2</strong> 筆至第 <strong>$3</strong> 筆中的 {{PLURAL:$1|<strong>1</strong> 筆結果|<strong>$1</strong> 筆結果}}:",
+       "showingresultsinrange": "以下顯示從第 <strong>$2</strong> 筆至第 <strong>$3</strong> 筆中的 {{PLURAL:$1|<strong>$1</strong> 筆結果}}:",
        "search-showingresults": "{{PLURAL:$4|第 <strong>$1</strong> 筆結果,共 <strong>$3</strong> 筆|第 <strong>$1 - $2</strong> 筆結果,共 <strong>$3</strong> 筆}}",
        "search-nonefound": "無符合查詢條件的結果。",
        "powersearch-legend": "進階搜尋",
        "mostlinkedtemplates": "被引用最多的頁面",
        "mostcategories": "最多分類的頁面",
        "mostimages": "被連結最多的檔案",
-       "mostinterwikis": "最多網際 Wiki 連結的頁面",
+       "mostinterwikis": "最多跨 Wiki 的頁面",
        "mostrevisions": "最多修訂的頁面",
        "prefixindex": "所有頁面與字首",
        "prefixindex-namespace": "所有含字首的頁面 ($1 命名空間)",
        "protectedpages-performer": "保護使用者",
        "protectedpages-params": "保護參數",
        "protectedpages-reason": "原因",
-       "protectedpages-unknown-timestamp": "未知",
+       "protectedpages-unknown-timestamp": "不明",
        "protectedpages-unknown-performer": "不明的使用者",
        "protectedtitles": "受保護標題",
        "protectedtitles-summary": "此頁面列出目前受保護的標題。 欲查詢受保護頁面清單,請參考 [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]。",
        "mywatchlist": "監視清單",
        "watchlistfor2": "$1 的監視清單 $2",
        "nowatchlist": "您的監視清單沒有任何項目。",
-       "watchlistanontext": "請先登入以檢視或修改在監清單的項目。",
+       "watchlistanontext": "請先登入以檢視或修改在監清單的項目。",
        "watchnologin": "尚未登入",
        "addwatch": "新增至監視清單",
        "addedwatchtext": "已於[[Special:Watchlist|您的監視清單]]新增頁面 \"[[:$1]]\"。\n未來對此頁面及其關聯的對話頁面的變更將會在此清單中列出。",
        "enotif_lastvisited": "請參考 $1 檢視自您上次檢視後所有的變更。",
        "enotif_lastdiff": "請參考 $1 檢視此變更。",
        "enotif_anon_editor": "匿名使用者 $1",
-       "enotif_body": "$WATCHINGUSERNAME 您好,\n\n$PAGEINTRO $NEWPAGE\n\n編輯摘要:$PAGESUMMARY $PAGEMINOREDIT\n\n編輯者聯絡方式:\n信箱:$PAGEEDITOR_EMAIL\n本站:$PAGEEDITOR_WIKI\n\n在您檢視該頁面之前,接下來的變更系統不會再向您發出通知。您也可以在監視清單中重設您所有監視頁面的通知狀態。\n\n{{SITENAME}} 通知系統\n\n--\n更改您的電子郵件通知設定,請至:\n{{canonicalurl:{{#special:Preferences}}}}\n\n更改您的監視清單設定,請至:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\n從監視清單中刪除此頁面,請至:\n$UNWATCHURL\n\n回函並取得進一步協助:\n$HELPPAGE",
+       "enotif_body": "$WATCHINGUSERNAME 您好,\n\n$PAGEINTRO $NEWPAGE\n\n編輯摘要:$PAGESUMMARY $PAGEMINOREDIT\n\n編輯者聯絡方式:\n信箱:$PAGEEDITOR_EMAIL\n本站:$PAGEEDITOR_WIKI\n\n在您檢視該頁面之前,接下來的變更系統不會再向您發出通知。您也可以在監視清單中重設您所有監視頁面的通知狀態。\n\n{{SITENAME}} 通知系統\n\n--\n更改您的電子郵件通知設定,請至:\n{{canonicalurl:{{#special:Preferences}}}}\n\n更改您的監視清單設定,請至:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\n從監視清單中刪除此頁面,請至:\n$UNWATCHURL\n\n回函並取得進一步協助:\n$HELPPAGE",
        "created": "建立了",
        "changed": "更改",
        "deletepage": "刪除頁面",
        "pagemovedsub": "已成功移動",
        "movepage-moved": "<strong>已移動 \"$1\" 至 \"$2\"</strong>",
        "movepage-moved-redirect": "已建立重新導向頁面。",
-       "movepage-moved-noredirect": "已禁止建立重新導向頁面。",
+       "movepage-moved-noredirect": "已取消建立重新導向頁面。",
        "articleexists": "該頁面名稱已存在,或您選擇的名稱無效。\n請改選擇其他名稱。",
        "cantmove-titleprotected": "您選擇的新標題已被禁止使用,您不可移動頁面到該位置。",
        "movetalk": "移動相關的對話頁面",
        "tooltip-search": "搜尋 {{SITENAME}}",
        "tooltip-search-go": "若與此名稱相符的頁面存在,前往該頁面",
        "tooltip-search-fulltext": "搜尋使用此文字的頁面",
-       "tooltip-p-logo": "å\8f\83è§\80主é \81é\9d¢",
-       "tooltip-n-mainpage": "å\8f\83è§\80主é \81é\9d¢",
-       "tooltip-n-mainpage-description": "å\8f\83è§\80主é \81é\9d¢",
-       "tooltip-n-portal": "關於本專案您可以做什麼、哪裡可以找到事情",
+       "tooltip-p-logo": "å\89\8då¾\80主é \81é\9d¢",
+       "tooltip-n-mainpage": "å\89\8då¾\80主é \81é\9d¢",
+       "tooltip-n-mainpage-description": "å\89\8då¾\80主é \81é\9d¢",
+       "tooltip-n-portal": "關於本專案您可以做什麼、哪裡可以找到事情",
        "tooltip-n-currentevents": "尋找新聞中最新動態的背景資訊",
        "tooltip-n-recentchanges": "列出此 Wiki 中的近期變更清單",
        "tooltip-n-randompage": "隨機進入一個頁面",
        "specialpages-group-wiki": "資料和工具",
        "specialpages-group-redirects": "重新導向相關特殊頁面",
        "specialpages-group-spam": "反垃圾訊息工具",
+       "specialpages-group-developer": "開發人員工具",
        "blankpage": "空白頁面",
        "intentionallyblankpage": "此頁面被故意設為空白。",
        "external_image_whitelist": " #請勿修改本行文字<pre>\n#請於下方填寫正規表示法 (只需 // 之間的內容)\n#將會檢查外部連結的圖片是否符合這些條件\n#符合條件的連結會以圖片顯示,否則只顯示連結\n#以 # 開頭的行會被做為註解\n#此條件不區分大小寫\n\n#請將所有正規表示法輸入在此行上方,請勿修改本行文字</pre>",
diff --git a/maintenance/postgres/update-keys.sql b/maintenance/postgres/update-keys.sql
new file mode 100644 (file)
index 0000000..7761d0c
--- /dev/null
@@ -0,0 +1,29 @@
+-- SQL to insert update keys into the initial tables after a
+-- fresh installation of MediaWiki's database.
+-- This is read and executed by the install script; you should
+-- not have to run it by itself unless doing a manual install.
+-- Insert keys here if either the unnecessary would cause heavy
+-- processing or could potentially cause trouble by lowering field
+-- sizes, adding constraints, etc.
+-- When adjusting field sizes, it is recommended removing old
+-- patches but to play safe, update keys should also inserted here.
+
+-- The /*_*/ comments in this and other files are
+-- replaced with the defined table prefix by the installer
+-- and updater scripts. If you are installing or running
+-- updates manually, you will need to manually insert the
+-- table prefix if any when running these scripts.
+--
+
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'filearchive-fa_major_mime-patch-fa_major_mime-chemical.sql', null );
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'image-img_major_mime-patch-img_major_mime-chemical.sql', null );
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'oldimage-oi_major_mime-patch-oi_major_mime-chemical.sql', null );
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'user_groups-ug_group-patch-ug_group-length-increase-255.sql', null );
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'user_former_groups-ufg_group-patch-ufg_group-length-increase-255.sql', null );
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'user_properties-up_property-patch-up_property.sql', null );
diff --git a/maintenance/rebuildSitesCache.php b/maintenance/rebuildSitesCache.php
new file mode 100644 (file)
index 0000000..862a983
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Maintenance script to dump the SiteStore as a static json file.
+ *
+ * @ingroup Maintenance
+ */
+class RebuildSitesCache extends Maintenance {
+
+       public function __construct() {
+               parent::__construct();
+
+               $this->mDescription = "Dumps site store as json";
+               $this->addOption( 'file', 'File to output the json to', false, true );
+       }
+
+       public function execute() {
+               $siteListFileCacheBuilder = new SiteListFileCacheBuilder(
+                       SiteSQLStore::newInstance(),
+                       $this->getCacheFile()
+               );
+
+               $siteListFileCacheBuilder->build();
+       }
+
+       /**
+        * @return string
+        */
+       private function getCacheFile() {
+               if ( $this->hasOption( 'file' ) ) {
+                       $jsonFile = $this->getOption( 'file' );
+               } else {
+                       $jsonFile = $this->getConfig()->get( 'SitesCacheFile' );
+
+                       if ( $jsonFile === false ) {
+                               $this->error( 'Error: No sites cache file is set in configuration.', 1 );
+                       }
+               }
+
+               return $jsonFile;
+       }
+
+}
+
+$maintClass = "RebuildSitesCache";
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/removeInvalidEmails.php b/maintenance/removeInvalidEmails.php
new file mode 100644 (file)
index 0000000..7ff69a1
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * A script to remove emails that are invalid from
+ * the user_email column of the user table. Emails
+ * are validated before users can add them, but
+ * this was not always the case so older users may
+ * have invalid ones.
+ *
+ * By default it does a dry-run, pass --commit
+ * to actually update the database.
+ */
+class RemoveInvalidEmails extends Maintenance {
+
+       private $commit = false;
+
+       public function __construct() {
+               parent::__construct();
+               $this->addOption( 'commit', 'Whether to actually update the database', false, false );
+               $this->setBatchSize( 500 );
+       }
+       public function execute() {
+               $this->commit = $this->hasOption( 'commit' );
+               $dbr = $this->getDB( DB_SLAVE );
+               $dbw = $this->getDB( DB_MASTER );
+               $lastId = 0;
+               do {
+                       $rows = $dbr->select(
+                               'user',
+                               array( 'user_id', 'user_email' ),
+                               array(
+                                       'user_id > ' . $dbr->addQuotes( $lastId ),
+                                       'user_email != ""',
+                                       'user_email_authenticated IS NULL'
+                               ),
+                               __METHOD__,
+                               array( 'LIMIT' => $this->mBatchSize )
+                       );
+                       $count = $rows->numRows();
+                       $badIds = array();
+                       foreach ( $rows as $row ) {
+                               if ( !Sanitizer::validateEmail( trim( $row->user_email ) ) ) {
+                                       $this->output( "Found bad email: {$row->user_email} for user #{$row->user_id}\n" );
+                                       $badIds[] = $row->user_id;
+                                       if ( $row->user_id > $lastId ) {
+                                               $lastId = $row->user_id;
+                                       }
+                               }
+                       }
+
+                       if ( $badIds ) {
+                               $badCount = count( $badIds );
+                               if ( $this->commit ) {
+                                       $this->output( "Removing $badCount emails from the database.\n" );
+                                       $dbw->update(
+                                               'user',
+                                               array( 'user_email' => '' ),
+                                               array( 'user_id' => $badIds ),
+                                               __METHOD__
+                                       );
+                                       foreach ( $badIds as $badId ) {
+                                               User::newFromId( $badId )->invalidateCache();
+                                       }
+                                       wfWaitForSlaves();
+                               } else {
+                                       $this->output( "Would have removed $badCount emails from the database.\n" );
+
+                               }
+                       }
+               } while ( $count !== 0 );
+               $this->output( "Done.\n" );
+       }
+}
+
+$maintClass = 'RemoveInvalidEmails';
+require_once RUN_MAINTENANCE_IF_MAIN;
index ecd5051..5e5e35d 100644 (file)
@@ -78,13 +78,18 @@ $urls[] = array(
        'method' => 'get',
        'template' => $searchPage->getCanonicalURL( 'search={searchTerms}' ) );
 
-if ( $wgEnableAPI ) {
-       // JSON interface for search suggestions.
-       // Supported in Firefox 2 and later.
-       $urls[] = array(
-               'type' => 'application/x-suggestions+json',
-               'method' => 'get',
-               'template' => SearchEngine::getOpenSearchTemplate() );
+foreach ( $wgOpenSearchTemplates as $type => $template ) {
+       if ( !$template && $wgEnableAPI ) {
+               $template = ApiOpenSearch::getOpenSearchTemplate( $type );
+       }
+
+       if ( $template ) {
+               $urls[] = array(
+                       'type' => $type,
+                       'method' => 'get',
+                       'template' => $template,
+               );
+       }
 }
 
 // Allow hooks to override the suggestion URL settings in a more
index b930f42..4e3fb5a 100644 (file)
@@ -27,7 +27,7 @@
 
 ini_set( 'zlib.output_compression', 'off' );
 
-$wgEnableProfileInfo = $wgProfileToDatabase = false;
+$wgEnableProfileInfo = false;
 require __DIR__ . '/includes/WebStart.php';
 
 header( 'Content-Type: text/html; charset=utf-8' );
@@ -149,8 +149,8 @@ $dbr = wfGetDB( DB_SLAVE );
 
 if ( !$dbr->tableExists( 'profiling' ) ) {
        echo '<p>No <code>profiling</code> table exists, so we can\'t show you anything.</p>'
-               . '<p>If you want to log profiling data, enable <code>$wgProfileToDatabase</code>'
-               . ' in your LocalSettings.php and run <code>maintenance/update.php</code> to'
+               . '<p>If you want to log profiling data, enable <code>$wgProfiler[\'output\'] = \'db\'</code>'
+               . ' in your StartProfiler.php and run <code>maintenance/update.php</code> to'
                . ' create the profiling table.'
                . '</body></html>';
        exit( 1 );
index c39ba3b..72cc2ef 100644 (file)
@@ -778,6 +778,7 @@ return array(
                'dependencies' => array(
                        'mediawiki.hlist',
                ),
+               'position' => 'top',
        ),
        'mediawiki.template' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.template.js',
@@ -786,6 +787,7 @@ return array(
        'mediawiki.apipretty' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.apipretty.css',
                'targets' => array( 'desktop', 'mobile' ),
+               'position' => 'top',
        ),
        'mediawiki.api' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.js',
@@ -949,6 +951,7 @@ return array(
                        'jquery.client',
                        'jquery.placeholder',
                        'jquery.suggestions',
+                       'jquery.getAttrs',
                        'mediawiki.api',
                ),
        ),
@@ -1047,6 +1050,13 @@ return array(
                        'mediawiki.action.history.diff',
                ),
        ),
+       'mediawiki.action.edit.stash' => array(
+               'scripts' => 'resources/src/mediawiki.action/mediawiki.action.edit.stash.js',
+               'dependencies' => array(
+                       'jquery.getAttrs',
+                       'mediawiki.api',
+               ),
+       ),
        'mediawiki.action.history' => array(
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.history.js',
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.history.css',
@@ -1524,6 +1534,15 @@ return array(
                'position' => 'top',
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'mediawiki.ui.radio' => array(
+               'skinStyles' => array(
+                       'default' => array(
+                               'resources/src/mediawiki.ui/components/radio.less',
+                       ),
+               ),
+               'position' => 'top',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        // Lightweight module for anchor styles
        'mediawiki.ui.anchor' => array(
                'skinStyles' => array(
index c3e80fe..f1c6ea3 100644 (file)
@@ -15,6 +15,8 @@
        "ooui-outline-control-move-down": "Baixa element",
        "ooui-outline-control-move-up": "Puja element",
        "ooui-toolbar-more": "Més",
+       "ooui-toolgroup-expand": "Més",
+       "ooui-toolgroup-collapse": "Menys",
        "ooui-dialog-process-dismiss": "Descarta",
        "ooui-dialog-process-retry": "Torneu-ho a provar"
 }
index c3724cf..9118898 100644 (file)
@@ -11,6 +11,8 @@
        "ooui-outline-control-move-up": "Premjesti stavku gore",
        "ooui-outline-control-remove": "Ukloni",
        "ooui-toolbar-more": "Više",
+       "ooui-toolgroup-expand": "Više",
+       "ooui-toolgroup-collapse": "Manje",
        "ooui-dialog-message-accept": "U redu",
        "ooui-dialog-message-reject": "Odustani",
        "ooui-dialog-process-error": "Nešto je pošlo po zlu",
index f8916e8..2756079 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.2
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-25T01:13:20Z
+ * Date: 2014-12-02T18:45:30Z
  */
 .oo-ui-progressBarWidget-slide-frames from {
        margin-left: -40%;
        background-color: transparent;
 }
 .oo-ui-radioOptionWidget .oo-ui-radioInputWidget,
-.oo-ui-radioOptionWidget .oo-ui-labelElement-label {
+.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
        display: inline-block;
        vertical-align: middle;
 }
index 2a62964..bf7e39f 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.2
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-25T01:13:13Z
+ * Date: 2014-12-02T18:45:19Z
  */
 /* Instantiation */
 
index 26a4c0b..7d4acb5 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.2
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-25T01:13:20Z
+ * Date: 2014-12-02T18:45:30Z
  */
 .oo-ui-progressBarWidget-slide-frames from {
        margin-left: -40%;
        background-color: transparent;
 }
 .oo-ui-radioOptionWidget .oo-ui-radioInputWidget,
-.oo-ui-radioOptionWidget .oo-ui-labelElement-label {
+.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
        display: inline-block;
        vertical-align: middle;
 }
index a70e18a..e360991 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.2
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-25T01:13:20Z
+ * Date: 2014-12-02T18:45:30Z
  */
 .oo-ui-progressBarWidget-slide-frames from {
        margin-left: -40%;
        background-color: transparent;
 }
 .oo-ui-radioOptionWidget .oo-ui-radioInputWidget,
-.oo-ui-radioOptionWidget .oo-ui-labelElement-label {
+.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
        display: inline-block;
        vertical-align: middle;
 }
index 9a57c66..875dab4 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.2
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-25T01:13:13Z
+ * Date: 2014-12-02T18:45:19Z
  */
 /**
  * @class
index f38a637..644eadc 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.2
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-25T01:13:20Z
+ * Date: 2014-12-02T18:45:30Z
  */
 .oo-ui-progressBarWidget-slide-frames from {
        margin-left: -40%;
        background-color: transparent;
 }
 .oo-ui-radioOptionWidget .oo-ui-radioInputWidget,
-.oo-ui-radioOptionWidget .oo-ui-labelElement-label {
+.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
        display: inline-block;
        vertical-align: middle;
 }
index 2e2a011..1209434 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.2
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-25T01:13:13Z
+ * Date: 2014-12-02T18:45:19Z
  */
 ( function ( OO ) {
 
@@ -1750,17 +1750,47 @@ OO.ui.Window.prototype.getSize = function () {
        return this.size;
 };
 
+/**
+ * Disable transitions on window's frame for the duration of the callback function, then enable them
+ * back.
+ *
+ * @private
+ * @param {Function} callback Function to call while transitions are disabled
+ */
+OO.ui.Window.prototype.withoutSizeTransitions = function ( callback ) {
+       // Temporarily resize the frame so getBodyHeight() can use scrollHeight measurements.
+       // Disable transitions first, otherwise we'll get values from when the window was animating.
+       var oldTransition,
+               styleObj = this.$frame[0].style;
+       oldTransition = styleObj.transition || styleObj.OTransition || styleObj.MsTransition ||
+               styleObj.MozTransition || styleObj.WebkitTransition;
+       styleObj.transition = styleObj.OTransition = styleObj.MsTransition =
+               styleObj.MozTransition = styleObj.WebkitTransition = 'none';
+       callback();
+       // Force reflow to make sure the style changes done inside callback really are not transitioned
+       this.$frame.height();
+       styleObj.transition = styleObj.OTransition = styleObj.MsTransition =
+               styleObj.MozTransition = styleObj.WebkitTransition = oldTransition;
+};
+
 /**
  * Get the height of the dialog contents.
  *
  * @return {number} Content height
  */
 OO.ui.Window.prototype.getContentHeight = function () {
-       // Temporarily resize the frame so getBodyHeight() can use scrollHeight measurements
-       var bodyHeight, oldHeight = this.$frame[0].style.height;
-       this.$frame[0].style.height = '1px';
-       bodyHeight = this.getBodyHeight();
-       this.$frame[0].style.height = oldHeight;
+       var bodyHeight,
+               win = this,
+               styleObj = this.$frame[0].style;
+
+       // Temporarily resize the frame so getBodyHeight() can use scrollHeight measurements.
+       // Disable transitions first, otherwise we'll get values from when the window was animating.
+       this.withoutSizeTransitions( function () {
+               var oldHeight = styleObj.height;
+               styleObj.height = '1px';
+               bodyHeight = win.getBodyHeight();
+               styleObj.height = oldHeight;
+       } );
 
        return Math.round(
                // Add buffer for border
@@ -1956,17 +1986,31 @@ OO.ui.Window.prototype.setSize = function ( size ) {
  * @chainable
  */
 OO.ui.Window.prototype.setDimensions = function ( dim ) {
-       // Apply width before height so height is not based on wrapping content using the wrong width
+       var height,
+               win = this,
+               styleObj = this.$frame[0].style;
+
+       // Calculate the height we need to set using the correct width
+       if ( dim.height === undefined ) {
+               this.withoutSizeTransitions( function () {
+                       var oldWidth = styleObj.width;
+                       win.$frame.css( 'width', dim.width || '' );
+                       height = win.getContentHeight();
+                       styleObj.width = oldWidth;
+               } );
+       } else {
+               height = dim.height;
+       }
+
        this.$frame.css( {
                width: dim.width || '',
                minWidth: dim.minWidth || '',
-               maxWidth: dim.maxWidth || ''
-       } );
-       this.$frame.css( {
-               height: ( dim.height !== undefined ? dim.height : this.getContentHeight() ) || '',
+               maxWidth: dim.maxWidth || '',
+               height: height || '',
                minHeight: dim.minHeight || '',
                maxHeight: dim.maxHeight || ''
        } );
+
        return this;
 };
 
@@ -2275,6 +2319,7 @@ OO.ui.Dialog = function OoUiDialog( config ) {
        this.actions = new OO.ui.ActionSet();
        this.attachedActions = [];
        this.currentAction = null;
+       this.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );
 
        // Events
        this.actions.connect( this, {
@@ -2438,6 +2483,10 @@ OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
                                );
                        }
                        this.actions.add( items );
+
+                       if ( this.constructor.static.escapable ) {
+                               this.$document.on( 'keydown', this.onDocumentKeyDownHandler );
+                       }
                }, this );
 };
 
@@ -2448,6 +2497,10 @@ OO.ui.Dialog.prototype.getTeardownProcess = function ( data ) {
        // Parent method
        return OO.ui.Dialog.super.prototype.getTeardownProcess.call( this, data )
                .first( function () {
+                       if ( this.constructor.static.escapable ) {
+                               this.$document.off( 'keydown', this.onDocumentKeyDownHandler );
+                       }
+
                        this.actions.clear();
                        this.currentAction = null;
                }, this );
@@ -2463,11 +2516,6 @@ OO.ui.Dialog.prototype.initialize = function () {
        // Properties
        this.title = new OO.ui.LabelWidget( { $: this.$ } );
 
-       // Events
-       if ( this.constructor.static.escapable ) {
-               this.$document.on( 'keydown', this.onDocumentKeyDown.bind( this ) );
-       }
-
        // Initialization
        this.$content.addClass( 'oo-ui-dialog-content' );
        this.setPendingElement( this.$head );
@@ -3444,7 +3492,15 @@ OO.inheritClass( OO.ui.ToolFactory, OO.Factory );
 
 /* Methods */
 
-/** */
+/**
+ * Get tools from the factory
+ *
+ * @param {Array} include Included tools
+ * @param {Array} exclude Excluded tools
+ * @param {Array} promote Promoted tools
+ * @param {Array} demote Demoted tools
+ * @return {string[]} List of tools
+ */
 OO.ui.ToolFactory.prototype.getTools = function ( include, exclude, promote, demote ) {
        var i, len, included, promoted, demoted,
                auto = [],
@@ -5903,6 +5959,20 @@ OO.ui.MessageDialog.static.actions = [
 
 /* Methods */
 
+/**
+ * @inheritdoc
+ */
+OO.ui.MessageDialog.prototype.setManager = function ( manager ) {
+       OO.ui.MessageDialog.super.prototype.setManager.call( this, manager );
+
+       // Events
+       this.manager.connect( this, {
+               resize: 'onResize'
+       } );
+
+       return this;
+};
+
 /**
  * @inheritdoc
  */
@@ -5911,6 +5981,18 @@ OO.ui.MessageDialog.prototype.onActionResize = function ( action ) {
        return OO.ui.MessageDialog.super.prototype.onActionResize.call( this, action );
 };
 
+/**
+ * Handle window resized events.
+ */
+OO.ui.MessageDialog.prototype.onResize = function () {
+       var dialog = this;
+       dialog.fitActions();
+       // Wait for CSS transition to finish and do it again :(
+       setTimeout( function () {
+               dialog.fitActions();
+       }, 300 );
+};
+
 /**
  * Toggle action layout between vertical and horizontal.
  *
@@ -5975,7 +6057,45 @@ OO.ui.MessageDialog.prototype.getSetupProcess = function ( data ) {
  * @inheritdoc
  */
 OO.ui.MessageDialog.prototype.getBodyHeight = function () {
-       return Math.round( this.text.$element.outerHeight( true ) );
+       var bodyHeight, oldOverflow,
+               $scrollable = this.container.$element;
+
+       oldOverflow = $scrollable[0].style.overflow;
+       $scrollable[0].style.overflow = 'hidden';
+
+       // Force… ugh… something to happen
+       $scrollable.contents().hide();
+       $scrollable.height();
+       $scrollable.contents().show();
+
+       bodyHeight = Math.round( this.text.$element.outerHeight( true ) );
+       $scrollable[0].style.overflow = oldOverflow;
+
+       return bodyHeight;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MessageDialog.prototype.setDimensions = function ( dim ) {
+       var $scrollable = this.container.$element;
+       OO.ui.MessageDialog.super.prototype.setDimensions.call( this, dim );
+
+       // Twiddle the overflow property, otherwise an unnecessary scrollbar will be produced.
+       // Need to do it after transition completes (250ms), add 50ms just in case.
+       setTimeout( function () {
+               var oldOverflow = $scrollable[0].style.overflow;
+               $scrollable[0].style.overflow = 'hidden';
+
+               // Force… ugh… something to happen
+               $scrollable.contents().hide();
+               $scrollable.height();
+               $scrollable.contents().show();
+
+               $scrollable[0].style.overflow = oldOverflow;
+       }, 300 );
+
+       return this;
 };
 
 /**
@@ -6034,10 +6154,11 @@ OO.ui.MessageDialog.prototype.attachActions = function () {
                special.primary.toggleFramed( false );
        }
 
-       this.manager.updateWindowSize( this );
-       this.fitActions();
-
-       this.$body.css( 'bottom', this.$foot.outerHeight( true ) );
+       if ( !this.isOpening() ) {
+               // If the dialog is currently opening, this will be called automatically soon.
+               // This also calls #fitActions.
+               this.manager.updateWindowSize( this );
+       }
 };
 
 /**
@@ -6047,6 +6168,7 @@ OO.ui.MessageDialog.prototype.attachActions = function () {
  */
 OO.ui.MessageDialog.prototype.fitActions = function () {
        var i, len, action,
+               previous = this.verticalActionLayout,
                actions = this.actions.get();
 
        // Detect clipping
@@ -6058,6 +6180,12 @@ OO.ui.MessageDialog.prototype.fitActions = function () {
                        break;
                }
        }
+
+       if ( this.verticalActionLayout !== previous ) {
+               this.$body.css( 'bottom', this.$foot.outerHeight( true ) );
+               // We changed the layout, window height might need to be updated.
+               this.manager.updateWindowSize( this );
+       }
 };
 
 /**
@@ -6420,9 +6548,12 @@ OO.ui.BookletLayout.prototype.onStackLayoutSet = function ( page ) {
  */
 OO.ui.BookletLayout.prototype.focus = function () {
        var $input, page = this.stackLayout.getCurrentItem();
-       if ( !page ) {
+       if ( !page && this.outlined ) {
                this.selectFirstSelectablePage();
                page = this.stackLayout.getCurrentItem();
+               if ( !page ) {
+                       return;
+               }
        }
        // Only change the focus if is not already in the current page
        if ( !page.$element.find( ':focus' ).length ) {
@@ -9744,7 +9875,7 @@ OO.ui.TextInputWidget.prototype.onIndicatorMouseDown = function ( e ) {
  */
 OO.ui.TextInputWidget.prototype.onKeyPress = function ( e ) {
        if ( e.which === OO.ui.Keys.ENTER && !this.multiline ) {
-               this.emit( 'enter' );
+               this.emit( 'enter', e );
        }
 };
 
@@ -9812,12 +9943,13 @@ OO.ui.TextInputWidget.prototype.setReadOnly = function ( state ) {
 OO.ui.TextInputWidget.prototype.adjustSize = function () {
        var $clone, scrollHeight, innerHeight, outerHeight, maxInnerHeight, measurementError, idealHeight;
 
-       if ( this.multiline && this.autosize ) {
+       if ( this.multiline && this.autosize && this.$input.val() !== this.valCache ) {
                $clone = this.$input.clone()
                        .val( this.$input.val() )
                        // Set inline height property to 0 to measure scroll height
-                       .css( { height: 0 } )
+                       .css( 'height', 0 )
                        .insertAfter( this.$input );
+               this.valCache = this.$input.val();
                scrollHeight = $clone[0].scrollHeight;
                // Remove inline height property to measure natural heights
                $clone.css( 'height', '' );
@@ -10390,7 +10522,6 @@ OO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {
  *
  * @class
  * @extends OO.ui.OptionWidget
- * @mixins OO.ui.ButtonElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
index 5d6a1d4..a2e2be5 100644 (file)
@@ -2,6 +2,16 @@
  * @class jQuery.plugin.getAttrs
  */
 
+function serializeControls( controls ) {
+       var i, data = {}, len = controls.length;
+
+       for ( i = 0; i < len; i++ ) {
+               data[ controls[i].name ] = controls[i].value;
+       }
+
+       return data;
+}
+
 /**
  * Get the attributes of an element directy as a plain object.
  *
  * @return {Object}
  */
 jQuery.fn.getAttrs = function () {
-       var i,
-               map = this[0].attributes,
-               attrs = {},
-               len = map.length;
-
-       for ( i = 0; i < len; i++ ) {
-               attrs[ map[i].name ] = map[i].value;
-       }
+       return serializeControls( this[0].attributes );
+};
 
-       return attrs;
+/**
+ * Get form data as a plain object mapping form control names to their values.
+ *
+ * @return {Object}
+ */
+jQuery.fn.serializeObject = function () {
+       return serializeControls( this.serializeArray() );
 };
 
 /**
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.stash.js b/resources/src/mediawiki.action/mediawiki.action.edit.stash.js
new file mode 100644 (file)
index 0000000..9972321
--- /dev/null
@@ -0,0 +1,42 @@
+/*!
+ * Scripts for pre-emptive edit preparing on action=edit
+ */
+( function ( mw, $ ) {
+       $( function () {
+               var api = new mw.Api(), pending = null, $form = $( '#editform' );
+
+               function stashEdit( token ) {
+                       var data = $form.serializeObject();
+
+                       pending = api.post( {
+                               action: 'stashedit',
+                               token: token,
+                               title: mw.config.get( 'wgPageName' ),
+                               section: data.wpSection,
+                               sectiontitle: '',
+                               text: data.wpTextbox1,
+                               contentmodel: data.model,
+                               contentformat: data.format,
+                               baserevid: data.parentRevId
+                       } );
+               }
+
+               function onEditChanged() {
+                       // If a stash request is already in flight, abort it, since its
+                       // payload has just been invalidated by this change.
+                       if ( pending ) {
+                               pending.abort();
+                       }
+                       api.getToken( 'edit' ).then( stashEdit );
+               }
+
+               // We don't attempt to stash new section edits because in such cases
+               // the parser output varies on the edit summary (since it determines
+               // the new section's name).
+               if ( $form.find( 'input[name=wpSection]' ).val() === 'new' ) {
+                       return;
+               }
+
+               $form.find( '#wpTextbox1' ).on( 'change', onEditChanged );
+       } );
+}( mediaWiki, jQuery ) );
index 6b9464a..cf9e27f 100644 (file)
@@ -5,7 +5,7 @@
  * http://www.modernmethod.com/sajax/
  */
 
-/*jshint camelcase:false */
+/*jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
 /*global alert */
 ( function ( mw ) {
 
index a52ccb6..9a8d391 100644 (file)
@@ -34,6 +34,7 @@ span.mw-filepage-other-resolutions,
 #filetoc,
 .usermessage,
 .patrollink,
+.ns-0 .mw-redirectedfrom,
 #mw-navigation,
 #siteNotice {
        display: none;
index 1f21b41..40a5c41 100644 (file)
@@ -63,7 +63,8 @@
        border: 1px solid @colorGray12;
 
        &:hover,
-       &:active {
+       &:active,
+       &:visited {
                // make sure that is isn't inheriting from a general rule
                color: @colorButtonText;
        }
index 87de646..c6ee1a7 100644 (file)
                                };
                                img.src = dataURL;
                        }, mw.config.get( 'wgFileCanRotate' ) ? function ( data ) {
-                               /*jshint camelcase:false, nomen:false */
                                try {
                                        meta = mw.libs.jpegmeta( data, file.fileName );
+                                       // jscs:disable requireCamelCaseOrUpperCaseIdentifiers, disallowDanglingUnderscores
                                        meta._binary_data = null;
+                                       // jscs:enable
                                } catch ( e ) {
                                        meta = null;
                                }
index b479020..ff454e1 100644 (file)
 //
 // Markup:
 // <div class="mw-ui-checkbox">
-//   <input type="checkbox" id="kss-example-5"><label for="kss-example-5">Standard checkbox</label>
+//   <input type="checkbox" id="kss-example-3">
+//   <label for="kss-example-3">Standard checkbox</label>
 // </div>
 // <div class="mw-ui-checkbox">
-//   <input type="checkbox" id="kss-example-5-checked" checked><label for="kss-example-5-checked">Standard checked checkbox</label>
+//   <input type="checkbox" id="kss-example-3-checked" checked>
+//   <label for="kss-example-3-checked">Standard checked checkbox</label>
 // </div>
 // <div class="mw-ui-checkbox">
-//   <input type="checkbox" id="kss-example-5-disabled" disabled><label for="kss-example-5-disabled">Disabled checkbox</label>
+//   <input type="checkbox" id="kss-example-3-disabled" disabled>
+//   <label for="kss-example-3-disabled">Disabled checkbox</label>
 // </div>
 // <div class="mw-ui-checkbox">
-//   <input type="checkbox" id="kss-example-5-disabled-checked" disabled checked><label for="kss-example-5-disabled-checked">Disabled checked checkbox</label>
+//   <input type="checkbox" id="kss-example-3-disabled-checked" disabled checked>
+//   <label for="kss-example-3-disabled-checked">Disabled checked checkbox</label>
 // </div>
 //
-// Styleguide 5.
+// Styleguide 3.
 .mw-ui-checkbox {
        display: inline-block;
        vertical-align: middle;
                height: @checkboxSize;
                // This is needed for Firefox mobile (See bug 71750 to workaround default Firefox stylesheet)
                max-width: none;
-               margin-right: .4em;
+               margin-right: 0.4em;
 
                // the pseudo before element of the label after the checkbox now looks like a checkbox
                & + label::before {
                        content: '';
                        cursor: pointer;
+                       .box-sizing(border-box);
                        position: absolute;
                        left: 0;
                        border-radius: @borderRadius;
@@ -65,7 +70,6 @@
                        height: @checkboxSize;
                        background-color: #fff;
                        border: 1px solid @colorGray7;
-                       .box-sizing(border-box);
                }
 
                // when the input is checked, style the label pseudo before element that followed as a checked checkbox
@@ -86,6 +90,7 @@
                        border-width: 2px;
                }
 
+               &:focus:hover + label::before,
                &:hover + label::before {
                        border-bottom-width: 3px;
                }
index 499b91a..dc49e20 100644 (file)
@@ -15,7 +15,7 @@
 
 // Forms
 //
-// Styleguide 3.
+// Styleguide 5.
 
 // VForm
 //
@@ -34,7 +34,7 @@
 //   </div>
 // </form>
 //
-// Styleguide 3.1.
+// Styleguide 5.1.
 .mw-ui-vform {
        .box-sizing(border-box);
 
        //   </div>
        // </form>
        //
-       // Styleguide 3.2.
+       // Styleguide 5.2.
        .error,
        .errorbox,
        .warningbox,
index dc2ca52..40d1723 100644 (file)
@@ -26,7 +26,7 @@
 // However, icon-only elements do not yet degrade to text-only elements in these
 // browsers.
 //
-// Styleguide 4.
+// Styleguide 6.
 
 .mw-ui-icon {
        position: relative;
@@ -39,7 +39,7 @@
        // <div class="mw-ui-icon mw-ui-icon-element mw-ui-icon-ok">OK</div>
        // <div class="mw-ui-icon mw-ui-icon-element mw-ui-icon-ok mw-ui-button mw-ui-progressive">OK</div>
        //
-       // Styleguide 4.1.1.
+       // Styleguide 6.1.1.
        &.mw-ui-icon-element {
                @width: @iconSize + ( 2 * @gutterWidth );
 
@@ -49,6 +49,7 @@
                min-width: @width;
                max-width: @width;
                &:before {
+                       top: 0;
                        left: 0;
                        right: 0;
                        position: absolute;
@@ -75,7 +76,7 @@
        // <div class="mw-ui-icon mw-ui-icon-before mw-ui-icon-ok">OK</div>
        // <div class="mw-ui-icon mw-ui-icon-before mw-ui-icon-ok mw-ui-progressive mw-ui-button">OK</div>
        //
-       // Styleguide 4.1.2
+       // Styleguide 6.1.2
        &.mw-ui-icon-before {
                &:before {
                        position: relative;
@@ -89,7 +90,7 @@
        // Markup:
        // <div class="mw-ui-icon mw-ui-icon-after mw-ui-icon-ok mw-ui-progressive mw-ui-button">OK</div>
        //
-       // Styleguide 4.1.3
+       // Styleguide 6.1.3
        &.mw-ui-icon-after {
                &:after {
                        position: relative;
index aea69db..aca2b2b 100644 (file)
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M4 12l5 5 11-12" stroke="#00B78C" stroke-width="3" fill="none"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M4 12l5 5L20 5" stroke="#00B78C" stroke-width="3" fill="none"/></svg>
index 7566a06..523b880 100644 (file)
Binary files a/resources/src/mediawiki.ui/components/images/checked_disabled.png and b/resources/src/mediawiki.ui/components/images/checked_disabled.png differ
index a7257f2..ba4010e 100644 (file)
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M4 12l5 5 11-12" stroke="#FFFFFF" stroke-width="3" fill="none"/></svg>
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M4 12l5 5L20 5" stroke="#fff" stroke-width="3" fill="none"/></svg>
index 8a62f27..1ea6aa2 100644 (file)
Binary files a/resources/src/mediawiki.ui/components/images/ok.png and b/resources/src/mediawiki.ui/components/images/ok.png differ
index 15bc296..a3d3058 100644 (file)
@@ -1,13 +1 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-        width="142.282px" height="142.28px" viewBox="0 -11.785 142.282 142.28" enable-background="new 0 -11.785 142.282 142.28"
-        xml:space="preserve">
-<g>
-
-               <rect x="18.012" y="41.792" transform="matrix(0.6983 -0.7158 0.7158 0.6983 -17.1914 77.8785)" fill="#F0F0F0" width="131.56" height="35.083"/>
-
-               <rect x="2.416" y="64.455" transform="matrix(0.7158 0.6983 -0.6983 0.7158 67.7777 -2.5416)" fill="#F0F0F0" width="69.191" height="35.082"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22"><path d="M18.125 1.813l-10.5 10.75-3.844-3.75L0 12.719l7.72 7.452L22 5.625z" fill="#f0f0f0"/></svg>
diff --git a/resources/src/mediawiki.ui/components/images/radio_checked.png b/resources/src/mediawiki.ui/components/images/radio_checked.png
new file mode 100644 (file)
index 0000000..d573516
Binary files /dev/null and b/resources/src/mediawiki.ui/components/images/radio_checked.png differ
diff --git a/resources/src/mediawiki.ui/components/images/radio_checked.svg b/resources/src/mediawiki.ui/components/images/radio_checked.svg
new file mode 100644 (file)
index 0000000..c8b9b62
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><circle fill="#00AF89" cx="12" cy="12" r="6"/></svg>
diff --git a/resources/src/mediawiki.ui/components/images/radio_disabled.png b/resources/src/mediawiki.ui/components/images/radio_disabled.png
new file mode 100644 (file)
index 0000000..945b3dd
Binary files /dev/null and b/resources/src/mediawiki.ui/components/images/radio_disabled.png differ
diff --git a/resources/src/mediawiki.ui/components/images/radio_disabled.svg b/resources/src/mediawiki.ui/components/images/radio_disabled.svg
new file mode 100644 (file)
index 0000000..992c55b
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><circle fill="#fff" cx="12" cy="12" r="6"/></svg>\r
index 9f3a77d..28d597e 100644 (file)
@@ -9,7 +9,7 @@
        font-style: italic;
        font-weight: normal;
 }
-// Inputs
+// Text inputs
 //
 // Apply the mw-ui-input class to input and textarea fields.
 //
diff --git a/resources/src/mediawiki.ui/components/radio.less b/resources/src/mediawiki.ui/components/radio.less
new file mode 100644 (file)
index 0000000..425ec1b
--- /dev/null
@@ -0,0 +1,110 @@
+@import "mediawiki.mixins";
+@import "mediawiki.ui/variables";
+
+// Radio
+//
+// Styling radios in a way that works cross browser is a tricky problem to solve.
+// In MediaWiki UI put a radio and label inside a mw-ui-radio div.
+// This renders in all browsers except IE6-8 which do not support the :checked selector;
+// these are kept backwards-compatible using the :not(#noop) selector.
+// You should give the radio and label matching "id" and "for" attributes, respectively.
+//
+// Markup:
+// <div class="mw-ui-radio">
+//   <input type="radio" id="kss-example-4" name="kss-example-4">
+//   <label for="kss-example-4">Standard radio</label>
+// </div>
+// <div class="mw-ui-radio">
+//   <input type="radio" id="kss-example-4-checked" name="kss-example-4" checked>
+//   <label for="kss-example-4-checked">Standard checked radio</label>
+// </div>
+// <div class="mw-ui-radio">
+//   <input type="radio" id="kss-example-4-disabled" name="kss-example-4-disabled" disabled>
+//   <label for="kss-example-4-disabled">Disabled radio</label>
+// </div>
+// <div class="mw-ui-radio">
+//   <input type="radio" id="kss-example-4-disabled-checked" name="kss-example-4-disabled" disabled checked>
+//   <label for="kss-example-4-disabled-checked">Disabled checked radio</label>
+// </div>
+//
+// Styleguide 4.
+.mw-ui-radio {
+       display: inline-block;
+       vertical-align: middle;
+}
+
+@radioSize: 2em;
+
+// We use the not selector to cancel out styling on IE 8 and below
+.mw-ui-radio:not(#noop) {
+       // Position relatively so we can make use of absolute pseudo elements
+       position: relative;
+       line-height: @radioSize;
+
+       * {
+               // reset font sizes (see bug 72727)
+               font: inherit;
+               vertical-align: middle;
+       }
+
+       input[type="radio"] {
+               // we hide the input element as instead we will style the label that follows
+               // we use opacity so that VoiceOver software can still identify it
+               opacity: 0;
+               // ensure the invisible radio takes up the required width
+               width: @radioSize;
+               height: @radioSize;
+               // This is needed for Firefox mobile (See bug 71750 to workaround default Firefox stylesheet)
+               max-width: none;
+               margin-right: 0.4em;
+
+               // the pseudo before element of the label after the radio now looks like a radio
+               & + label::before {
+                       content: '';
+                       cursor: pointer;
+                       .box-sizing(border-box);
+                       position: absolute;
+                       left: 0;
+                       border-radius: 100%;
+                       width: @radioSize;
+                       height: @radioSize;
+                       background-color: #fff;
+                       border: 1px solid @colorGray7;
+               }
+
+               // when the input is checked, style the label pseudo before element that followed as a checked radio
+               &:checked + label::before {
+                       .background-image-svg('images/radio_checked.svg', 'images/radio_checked.png');
+                       .background-size( @radioSize, @radioSize );
+                       background-repeat: no-repeat;
+                       background-position: center center;
+                       background-origin: border-box;
+               }
+
+               &:active + label::before {
+                       background-color: @colorGray13;
+                       border-color: @colorGray13;
+               }
+
+               &:focus + label::before {
+                       border-width: 2px;
+               }
+
+               &:focus:hover + label::before,
+               &:hover + label::before {
+                       border-bottom-width: 3px;
+               }
+
+               // disabled radios have a gray background
+               &:disabled + label::before {
+                       cursor: default;
+                       background-color: @colorGray14;
+                       border-color: @colorGray14;
+               }
+
+               // disabled and checked radios have a white circle
+               &:disabled:checked + label::before {
+                       .background-image-svg('images/radio_disabled.svg', 'images/radio_disabled.png');
+               }
+       }
+}
index cfdb5a7..9e11842 100644 (file)
                                                        return;
                                                }
 
-                                               if ( !mw.config.get( 'wgResourceLoaderStorageEnabled' ) || mw.config.get( 'debug' ) ) {
-                                                       // Disabled by configuration, or because debug mode is set
+                                               if ( !mw.config.get( 'wgResourceLoaderStorageEnabled' ) ) {
+                                                       // Disabled by configuration.
+                                                       // Clear any previous store to free up space. (T66721)
+                                                       mw.loader.store.clear();
+                                                       mw.loader.store.enabled = false;
+                                                       return;
+                                               }
+                                               if ( mw.config.get( 'debug' ) ) {
+                                                       // Disable module store in debug mode
                                                        mw.loader.store.enabled = false;
                                                        return;
                                                }
index a214cb3..d372e8f 100644 (file)
                        baseHref = $form.attr( 'action' );
                        baseHref += baseHref.indexOf( '?' ) > -1 ? '&' : '?';
 
-                       linkParams = {};
-                       $.each( $form.serializeArray(), function ( idx, obj ) {
-                               linkParams[ obj.name ] = obj.value;
-                       } );
+                       linkParams = $form.serializeObject();
 
                        return {
                                textParam: context.data.$textbox.attr( 'name' ),
index 7913363..9b15379 100644 (file)
@@ -9,7 +9,7 @@
     "grunt-contrib-jshint": "0.10.0",
     "grunt-contrib-watch": "0.6.1",
     "grunt-banana-checker": "0.2.0",
-    "grunt-jscs": "0.6.1",
+    "grunt-jscs": "0.8.1",
     "grunt-jsonlint": "1.0.4"
   }
 }
index 05275c8..2cd549e 100644 (file)
@@ -447,7 +447,8 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $comment = __METHOD__ . ': Sample page for unit test.';
 
                // Avoid memory leak...?
-               LinkCache::singleton()->clear();
+               // LinkCache::singleton()->clear();
+               // Maybe.  But doing this absolutely breaks $title->isRedirect() when called during unit tests....
 
                $page = WikiPage::factory( $title );
                $page->doEditContent( ContentHandler::makeContent( $text, $title ), $comment, 0, false, $user );
index a33f6a6..d0f6208 100644 (file)
@@ -41,6 +41,13 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                $this->insertPage( 'Example Foo' );
                $this->insertPage( 'Example Foo/Bar' );
                $this->insertPage( 'Example/Baz' );
+               $this->insertPage( 'Redirect test', '#REDIRECT [[Redirect Test]]' );
+               $this->insertPage( 'Redirect Test');
+               $this->insertPage( 'Redirect Test Worse Result');
+               $this->insertPage( 'Redirect test2', '#REDIRECT [[Redirect Test2]]' );
+               $this->insertPage( 'Redirect TEST2', '#REDIRECT [[Redirect Test2]]' );
+               $this->insertPage( 'Redirect Test2');
+               $this->insertPage( 'Redirect Test2 Worse Result');
 
                $this->insertPage( 'Talk:Sandbox' );
                $this->insertPage( 'Talk:Example' );
@@ -63,6 +70,10 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                                        'Example/Baz',
                                        'Example Bar',
                                ),
+                               // Third result when testing offset
+                               'offsetresult' => array(
+                                       'Example Foo',
+                               ),
                        ) ),
                        array( array(
                                'Talk namespace prefix',
@@ -87,6 +98,10 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                                        'Special:AllMessages',
                                        'Special:AllMyFiles',
                                ),
+                               // Third result when testing offset
+                               'offsetresult' => array(
+                                       'Special:AllMyUploads',
+                               ),
                        ) ),
                        array( array(
                                'Special namespace with prefix',
@@ -96,6 +111,10 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                                        'Special:UncategorizedCategories',
                                        'Special:UncategorizedFiles',
                                ),
+                               // Third result when testing offset
+                               'offsetresult' => array(
+                                       'Special:UncategorizedImages',
+                               ),
                        ) ),
                        array( array(
                                'Special page name',
@@ -138,6 +157,30 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                );
        }
 
+       /**
+        * @dataProvider provideSearch
+        * @covers PrefixSearch::search
+        * @covers PrefixSearch::searchBackend
+        */
+       public function testSearchWithOffset( Array $case ) {
+               $this->searchProvision( null );
+               $searcher = new StringPrefixSearch;
+               $results = $searcher->search( $case['query'], 3, array(), 1 );
+
+               // We don't expect the first result when offsetting
+               array_shift( $case['results'] );
+               // And sometimes we expect a different last result
+               $expected = isset( $case['offsetresult'] ) ?
+                       array_merge( $case['results'], $case['offsetresult'] ):
+                       $case['results'];
+
+               $this->assertEquals(
+                       $expected,
+                       $results,
+                       $case[0]
+               );
+       }
+
        public static function provideSearchBackend() {
                return array(
                        array( array(
@@ -196,6 +239,55 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                                        'External',
                                ),
                        ) ),
+                       array( array(
+                               "Exact match shouldn't override already found match if " .
+                                       "exact is redirect and found isn't",
+                               'provision' => array(
+                                       // Target of the exact match is low in the list
+                                       'Redirect Test Worse Result',
+                                       'Redirect Test',
+                               ),
+                               'query' => 'redirect test',
+                               'results' => array(
+                                       // Redirect target is pulled up and exact match isn't added
+                                       'Redirect Test',
+                                       'Redirect Test Worse Result',
+                               ),
+                       ) ),
+                       array( array(
+                               "Exact match shouldn't override already found match if " .
+                                       "both exact match and found match are redirect",
+                               'provision' => array(
+                                       // Another redirect to the same target as the exact match
+                                       // is low in the list
+                                       'Redirect Test2 Worse Result',
+                                       'Redirect test2',
+                               ),
+                               'query' => 'redirect TEST2',
+                               'results' => array(
+                                       // Found redirect is pulled to the top and exact match isn't
+                                       // added
+                                       'Redirect test2',
+                                       'Redirect Test2 Worse Result',
+                               ),
+                       ) ),
+                       array( array(
+                               "Exact match should override any already found matches that " .
+                                       "are redirects to it",
+                               'provision' => array(
+                                       // Another redirect to the same target as the exact match
+                                       // is low in the list
+                                       'Redirect Test Worse Result',
+                                       'Redirect test',
+                               ),
+                               'query' => 'Redirect Test',
+                               'results' => array(
+                                       // Found redirect is pulled to the top and exact match isn't
+                                       // added
+                                       'Redirect Test',
+                                       'Redirect Test Worse Result',
+                               ),
+                       ) ),
                );
        }
 
index a4bc427..01c2578 100644 (file)
@@ -14,6 +14,7 @@ class TitleTest extends MediaWikiTestCase {
                        'wgLang' => Language::factory( 'en' ),
                        'wgAllowUserJs' => false,
                        'wgDefaultLanguageVariant' => false,
+                       'wgMetaNamespace' => 'Project',
                ) );
        }
 
index ce2db5d..04fb00d 100644 (file)
@@ -6,14 +6,10 @@
  */
 class GenderCacheTest extends MediaWikiLangTestCase {
 
-       protected function setUp() {
-               global $wgDefaultUserOptions;
-               parent::setUp();
+       function addDBData() {
                //ensure the correct default gender
-               $wgDefaultUserOptions['gender'] = 'unknown';
-       }
+               $this->mergeMwGlobalArrayValue( 'wgDefaultUserOptions', array( 'gender' => 'unknown' ) );
 
-       function addDBData() {
                $user = User::newFromName( 'UTMale' );
                if ( $user->getID() == 0 ) {
                        $user->addToDatabase();
index 35ff919..24b5186 100644 (file)
@@ -11,14 +11,30 @@ class LocalisationCacheTest extends MediaWikiTestCase {
 
                parent::setUp();
                $this->setMwGlobals( array(
-                       'wgMessagesDirs' => array( "$IP/tests/phpunit/data/localisationcache" ),
                        'wgExtensionMessagesFiles' => array(),
                        'wgHooks' => array(),
                ) );
        }
 
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|LocalisationCache
+        */
+       protected function getMockLocalisationCache() {
+               global $IP;
+               $lc = $this->getMockBuilder( 'LocalisationCache' )
+                       ->setConstructorArgs( array( array( 'store' => 'detect' ) ) )
+                       ->setMethods( array( 'getMessagesDirs' ) )
+                       ->getMock();
+               $lc->expects( $this->any() )->method( 'getMessagesDirs' )
+                       ->will( $this->returnValue(
+                               array( "$IP/tests/phpunit/data/localisationcache" )
+                       ) );
+
+               return $lc;
+       }
+
        public function testPuralRulesFallback() {
-               $cache = new LocalisationCache( array( 'store' => 'detect' ) );
+               $cache = $this->getMockLocalisationCache();
 
                $this->assertEquals(
                        $cache->getItem( 'ar', 'pluralRules' ),
@@ -46,7 +62,7 @@ class LocalisationCacheTest extends MediaWikiTestCase {
        }
 
        public function testRecacheFallbacks() {
-               $lc = new LocalisationCache( array( 'store' => 'detect' ) );
+               $lc = $this->getMockLocalisationCache();
                $lc->recache( 'uk' );
                $this->assertEquals(
                        array(
@@ -78,7 +94,7 @@ class LocalisationCacheTest extends MediaWikiTestCase {
                        )
                ) );
 
-               $lc = new LocalisationCache( array( 'store' => 'detect' ) );
+               $lc = $this->getMockLocalisationCache();
                $lc->recache( 'uk' );
                $this->assertEquals(
                        array(
index 77b542f..d4151a5 100644 (file)
@@ -6,15 +6,6 @@
  */
 class JsonContentTest extends MediaWikiLangTestCase {
 
-       /**
-        * @dataProvider provideValidConstruction
-        */
-       public function testValidConstruct( $text, $modelId, $isValid, $expected ) {
-               $obj = new JsonContent( $text, $modelId );
-               $this->assertEquals( $isValid, $obj->isValid() );
-               $this->assertEquals( $expected, $obj->getJsonData() );
-       }
-
        public static function provideValidConstruction() {
                return array(
                        array( 'foo', CONTENT_MODEL_JSON, false, null ),
@@ -24,11 +15,12 @@ class JsonContentTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * @dataProvider provideDataToEncode
+        * @dataProvider provideValidConstruction
         */
-       public function testBeautifyUsesFormatJson( $data ) {
-               $obj = new JsonContent( FormatJson::encode( $data ) );
-               $this->assertEquals( FormatJson::encode( $data, true ), $obj->beautifyJSON() );
+       public function testValidConstruct( $text, $modelId, $isValid, $expected ) {
+               $obj = new JsonContent( $text, $modelId );
+               $this->assertEquals( $isValid, $obj->isValid() );
+               $this->assertEquals( $expected, $obj->getJsonData() );
        }
 
        public static function provideDataToEncode() {
@@ -41,6 +33,14 @@ class JsonContentTest extends MediaWikiLangTestCase {
                );
        }
 
+       /**
+        * @dataProvider provideDataToEncode
+        */
+       public function testBeautifyUsesFormatJson( $data ) {
+               $obj = new JsonContent( FormatJson::encode( $data ) );
+               $this->assertEquals( FormatJson::encode( $data, true ), $obj->beautifyJSON() );
+       }
+
        /**
         * @dataProvider provideDataToEncode
         */
@@ -67,16 +67,6 @@ class JsonContentTest extends MediaWikiLangTestCase {
                        ->getMock();
        }
 
-       /**
-        * @dataProvider provideDataAndParserText
-        */
-       public function testFillParserOutput( $data, $expected ) {
-               $obj = new JsonContent( FormatJson::encode( $data ) );
-               $parserOutput = $obj->getParserOutput( $this->getMockTitle(), null, null, true );
-               $this->assertInstanceOf( 'ParserOutput', $parserOutput );
-               $this->assertEquals( $expected, $parserOutput->getText() );
-       }
-
        public static function provideDataAndParserText() {
                return array(
                        array(
@@ -111,4 +101,14 @@ class JsonContentTest extends MediaWikiLangTestCase {
                        ),
                );
        }
+
+       /**
+        * @dataProvider provideDataAndParserText
+        */
+       public function testFillParserOutput( $data, $expected ) {
+               $obj = new JsonContent( FormatJson::encode( $data ) );
+               $parserOutput = $obj->getParserOutput( $this->getMockTitle(), null, null, true );
+               $this->assertInstanceOf( 'ParserOutput', $parserOutput );
+               $this->assertEquals( $expected, $parserOutput->getText() );
+       }
 }
index 98b4ca0..588e544 100644 (file)
@@ -272,7 +272,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
         * @todo Currently only checks list of tables
         */
        public function testUpgrades() {
-               global $IP, $wgVersion, $wgProfileToDatabase;
+               global $IP, $wgVersion, $wgProfiler;
 
                // Versions tested
                $versions = array(
@@ -291,7 +291,18 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
 
                $currentDB = new DatabaseSqliteStandalone( ':memory:' );
                $currentDB->sourceFile( "$IP/maintenance/tables.sql" );
-               if ( $wgProfileToDatabase ) {
+
+               $profileToDb = false;
+               if ( isset( $wgProfiler['output'] ) ) {
+                       $out = $wgProfiler['output'];
+                       if ( $out === 'db' ) {
+                               $profileToDb = true;
+                       } elseif( is_array( $out ) && in_array( 'db', $out ) ) {
+                               $profileToDb = true;
+                       }
+               }
+
+               if ( $profileToDb ) {
                        $currentDB->sourceFile( "$IP/maintenance/sqlite/archives/patch-profiling.sql" );
                }
                $currentTables = $this->getTables( $currentDB );
index 064d518..724f0c8 100644 (file)
@@ -34,6 +34,21 @@ class InstallDocFormatterTest extends MediaWikiTestCase {
                        array( ':One indentation', "\tOne indentation", 'Replacing a single \t' ),
                        array( '::Two indentations', "\t\tTwo indentations", 'Replacing 2 x \t' ),
 
+                       # Transform 'T123' links
+                       array(
+                               '<span class="config-plainlink">[https://phabricator.wikimedia.org/T123 T123]</span>',
+                               'T123', 'Testing T123 links' ),
+                       array(
+                               'bug <span class="config-plainlink">[https://phabricator.wikimedia.org/T123 T123]</span>',
+                               'bug T123', 'Testing bug T123 links' ),
+                       array(
+                               '(<span class="config-plainlink">[https://phabricator.wikimedia.org/T987654 T987654]</span>)',
+                               '(T987654)', 'Testing (T987654) links' ),
+
+                       # "Tabc" shouldn't work
+                       array( 'Tfoobar', 'Tfoobar', "Don't match T followed by non-digits" ),
+                       array( 'T!!fakefake!!', 'T!!fakefake!!', "Don't match T followed by non-digits" ),
+
                        # Transform 'bug 123' links
                        array(
                                '<span class="config-plainlink">[https://bugzilla.wikimedia.org/123 bug 123]</span>',
index e3c4cc8..251da47 100644 (file)
@@ -89,7 +89,7 @@ class TagHookTest extends MediaWikiTestCase {
                global $wgParserConf, $wgContLang;
                $parser = new Parser( $wgParserConf );
 
-               $parser->setFunctionTagHook( $tag, array( $this, 'functionTagCallback' ), SFH_OBJECT_ARGS );
+               $parser->setFunctionTagHook( $tag, array( $this, 'functionTagCallback' ), Parser::SFH_OBJECT_ARGS );
                $parser->parse(
                        "Foo<$tag>Bar</$tag>Baz",
                        Title::newFromText( 'Test' ),
diff --git a/tests/phpunit/includes/site/SiteListFileCacheBuilderTest.php b/tests/phpunit/includes/site/SiteListFileCacheBuilderTest.php
new file mode 100644 (file)
index 0000000..af02429
--- /dev/null
@@ -0,0 +1,130 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.25
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @covers SiteListFileCacheBuilder
+ * @group Site
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class SiteListFileCacheBuilderTest extends PHPUnit_Framework_TestCase {
+
+       public function testBuild() {
+               $cacheFile = $this->getCacheFile();
+
+               $cacheBuilder = $this->newSiteListFileCacheBuilder( $this->getSites(), $cacheFile );
+               $cacheBuilder->build();
+
+               $contents = file_get_contents( $cacheFile );
+               $this->assertEquals( json_encode( $this->getExpectedData() ), $contents );
+       }
+
+       private function getExpectedData() {
+               return array(
+                       'sites' => array(
+                               'foobar' => array(
+                                       'globalid' => 'foobar',
+                                       'type' => 'unknown',
+                                       'group' => 'none',
+                                       'source' => 'local',
+                                       'language' => null,
+                                       'localids' => array(),
+                                       'config' => array(),
+                                       'data' => array(),
+                                       'forward' => false,
+                                       'internalid' => null,
+                                       'identifiers' => array()
+                               ),
+                               'enwiktionary' => array(
+                                       'globalid' => 'enwiktionary',
+                                       'type' => 'mediawiki',
+                                       'group' => 'wiktionary',
+                                       'source' => 'local',
+                                       'language' => 'en',
+                                       'localids' => array(
+                                               'equivalent' => array( 'enwiktionary' )
+                                       ),
+                                       'config' => array(),
+                                       'data' => array(
+                                               'paths' => array(
+                                                       'page_path' => 'https://en.wiktionary.org/wiki/$1',
+                                                       'file_path' => 'https://en.wiktionary.org/w/$1'
+                                               )
+                                       ),
+                                       'forward' => false,
+                                       'internalid' => null,
+                                       'identifiers' => array(
+                                               array(
+                                                       'type' => 'equivalent',
+                                                       'key' => 'enwiktionary'
+                                               )
+                                       )
+                               )
+                       )
+               );
+       }
+
+       private function newSiteListFileCacheBuilder( SiteList $sites, $cacheFile ) {
+               return new SiteListFileCacheBuilder(
+                       $this->getSiteSQLStore( $sites ),
+                       $cacheFile
+               );
+       }
+
+       private function getSiteSQLStore( SiteList $sites ) {
+               $siteSQLStore = $this->getMockBuilder( 'SiteSQLStore' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $siteSQLStore->expects( $this->any() )
+                       ->method( 'getSites' )
+                       ->will( $this->returnValue( $sites ) );
+
+               return $siteSQLStore;
+       }
+
+       private function getSites() {
+               $sites = array();
+
+               $site = new Site();
+               $site->setGlobalId( 'foobar' );
+               $sites[] = $site;
+
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'enwiktionary' );
+               $site->setGroup( 'wiktionary' );
+               $site->setLanguageCode( 'en' );
+               $site->addNavigationId( 'enwiktionary' );
+               $site->setPath( MediaWikiSite::PATH_PAGE, "https://en.wiktionary.org/wiki/$1" );
+               $site->setPath( MediaWikiSite::PATH_FILE, "https://en.wiktionary.org/w/$1" );
+               $sites[] = $site;
+
+               return new SiteList( $sites );
+       }
+
+       private function getCacheFile() {
+               return sys_get_temp_dir() . '/sites-' . time() . '.json';
+       }
+
+}
diff --git a/tests/phpunit/includes/site/SiteListFileCacheTest.php b/tests/phpunit/includes/site/SiteListFileCacheTest.php
new file mode 100644 (file)
index 0000000..b598eed
--- /dev/null
@@ -0,0 +1,98 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.25
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @covers SiteListFileCache
+ * @group Site
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class SiteListFileCacheTest extends PHPUnit_Framework_TestCase {
+
+       public function testGetSites() {
+               $cacheFile = $this->getCacheFile();
+
+               $sites = $this->getSites();
+               $cacheBuilder = $this->newSiteListFileCacheBuilder( $sites, $cacheFile );
+               $cacheBuilder->build();
+
+               $cache = new SiteListFileCache( $cacheFile );
+               $this->assertEquals( $sites, $cache->getSites() );
+       }
+
+       public function testGetSite() {
+               $cacheFile = $this->getCacheFile();
+
+               $sites = $this->getSites();
+               $cacheBuilder = $this->newSiteListFileCacheBuilder( $sites, $cacheFile );
+               $cacheBuilder->build();
+
+               $cache = new SiteListFileCache( $cacheFile );
+
+               $this->assertEquals( $sites->getSite( 'enwiktionary' ), $cache->getSite( 'enwiktionary' ) );
+       }
+
+       private function newSiteListFileCacheBuilder( SiteList $sites, $cacheFile ) {
+               return new SiteListFileCacheBuilder(
+                       $this->getSiteSQLStore( $sites ),
+                       $cacheFile
+               );
+       }
+
+       private function getSiteSQLStore( SiteList $sites ) {
+               $siteSQLStore = $this->getMockBuilder( 'SiteSQLStore' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $siteSQLStore->expects( $this->any() )
+                       ->method( 'getSites' )
+                       ->will( $this->returnValue( $sites ) );
+
+               return $siteSQLStore;
+       }
+
+       private function getSites() {
+               $sites = array();
+
+               $site = new Site();
+               $site->setGlobalId( 'foobar' );
+               $sites[] = $site;
+
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'enwiktionary' );
+               $site->setGroup( 'wiktionary' );
+               $site->setLanguageCode( 'en' );
+               $site->addNavigationId( 'enwiktionary' );
+               $site->setPath( MediaWikiSite::PATH_PAGE, "https://en.wiktionary.org/wiki/$1" );
+               $site->setPath( MediaWikiSite::PATH_FILE, "https://en.wiktionary.org/w/$1" );
+               $sites[] = $site;
+
+               return new SiteList( $sites );
+       }
+
+       private function getCacheFile() {
+               return sys_get_temp_dir() . '/sites-' . time() . '.json';
+       }
+
+}
index f95b305..f1146a7 100644 (file)
@@ -39,6 +39,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
                        'wgLang' => Language::factory( 'en' ),
                        'wgAllowUserJs' => false,
                        'wgDefaultLanguageVariant' => false,
+                       'wgMetaNamespace' => 'Project',
                        'wgLocalInterwikis' => array( 'localtestiw' ),
                        'wgCapitalLinks' => true,
 
@@ -82,6 +83,8 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
        protected function makeCodec( $lang ) {
                $gender = $this->getGenderCache();
                $lang = Language::factory( $lang );
+               // language object can came from cache, which does not respect test settings
+               $lang->resetNamespaces();
                return new MediaWikiTitleCodec( $lang, $gender );
        }