Merge "Don't unconditionally run patch-editsummary-length.sql"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 18 Sep 2017 15:51:17 +0000 (15:51 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 18 Sep 2017 15:51:17 +0000 (15:51 +0000)
21 files changed:
docs/hooks.txt
includes/filerepo/file/LocalFile.php
languages/i18n/ais.json
languages/i18n/be-tarask.json
languages/i18n/bn.json
languages/i18n/hu.json
languages/i18n/ja.json
languages/i18n/ko.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/sd.json
languages/i18n/su.json
languages/i18n/ur.json
maintenance/findHooks.php
resources/Resources.php
resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.preferences.convertmessagebox.js [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.preferences.js [deleted file]
resources/src/mediawiki.special/mediawiki.special.preferences.tabs.js [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.preferences.timezone.js [new file with mode: 0644]
tests/phpunit/phpunit.php

index b7fe8c1..a19e9fc 100644 (file)
@@ -996,13 +996,10 @@ $special: ChangesListSpecialPage instance
 'ChangesListSpecialPageQuery': Called when building SQL query on pages
 inheriting from ChangesListSpecialPage (in core: RecentChanges,
 RecentChangesLinked and Watchlist).
-
 Do not use this to implement individual filters if they are compatible with the
 ChangesListFilter and ChangesListFilterGroup structure.
-
 Instead, use sub-classes of those classes, in conjunction with the
 ChangesListSpecialPageStructuredFilters hook.
-
 This hook can be used to implement filters that do not implement that structure,
 or custom behavior that is not an individual filter.
 $name: name of the special page, e.g. 'Watchlist'
@@ -1017,20 +1014,16 @@ $opts: FormOptions for this request
 filters for pages inheriting from ChangesListSpecialPage (in core: RecentChanges,
 RecentChangesLinked, and Watchlist).  Generally, you will want to construct
 new ChangesListBooleanFilter or ChangesListStringOptionsFilter objects.
-
 When constructing them, you specify which group they belong to.  You can reuse
 existing groups (accessed through $special->getFilterGroup), or create your own
 (ChangesListBooleanFilterGroup or ChangesListStringOptionsFilterGroup).
 If you create new groups, you must register them with $special->registerFilterGroup.
-
 Note that this is called regardless of whether the user is currently using
 the new (structured) or old (unstructured) filter UI.  If you want your boolean
 filter to show on both the new and old UI, specify all the supported fields.
 These include showHide, label, and description.
-
 See the constructor of each ChangesList* class for documentation of supported
 fields.
-
 $special: ChangesListSpecialPage instance
 
 'ChangeTagAfterDelete': Called after a change tag has been deleted (that is,
index 96e7a7e..4c0dea2 100644 (file)
@@ -351,9 +351,8 @@ class LocalFile extends File {
                static $results = [];
 
                if ( $prefix == '' ) {
-                       return $fields;
+                       return array_merge( $fields, [ 'description' ] );
                }
-
                if ( !isset( $results[$prefix] ) ) {
                        $prefixedFields = [];
                        foreach ( $fields as $field ) {
index 0e1f7a7..d90e8ef 100644 (file)
@@ -13,6 +13,7 @@
        "tog-showhiddencats": "paazih madimutay a kakuniza",
        "underline-always": "mahizatuay",
        "underline-never": "amana kanca caay",
+       "editfont-style": "mikawaway-kalumyiti subal kataci nu silit a yangse:",
        "editfont-default": "saazih sakaluk pataayaw tu kawaw a sulyang",
        "editfont-monospace": "malecad ilaed a kataci nu silit",
        "editfont-sansserif": "pacabay tu telay a kataci nu sulit",
        "createacct-yourpasswordagain": "malucekay tu mima",
        "createacct-yourpasswordagain-ph": "pisulitan ku mima kinacacay aca",
        "userlogin-remembermypassword": "i balucu’en aku patalabu setyitase",
+       "userlogin-signwithsecure": "pisaungay zahkez misiket tu calay-zazan(wanglu)",
        "cannotlogin-title": "la’cus patalabu",
        "cannotlogin-text": "la’cus patalabu.",
        "cannotloginnow-title": "la’cus patalabu ayza",
        "createaccount": "panganganen ku canghaw",
        "userlogin-resetpassword-link": "maliyuh ku mima kisu haw?",
        "userlogin-helplink2": "patalabu miedap",
+       "userlogin-createanother": "patizeng tu zumaay canghaw",
        "createacct-emailrequired": "imyiyo(email) puenengan",
        "createacct-emailoptional": "imyiyo(email) tigami (u pili’ay sasulitan)",
        "createacct-email-ph": "pisulitan ku imyiyo(email) nu misu",
+       "createacct-another-email-ph": "pisulitan imyiyo(email) puenengan",
        "createacct-reason": "mahicaay",
        "createacct-submit": "panganganen ku misuay a canghaw",
        "createacct-another-submit": "panganganen ku canghaw",
        "oldpassword": "malumannay a mima",
        "newpassword": "baluhay a mima:",
        "botpasswords": "kikay-tademaw a mima",
+       "botpasswords-existing": "naizawtu ku kikay-tademaw a mima",
+       "botpasswords-createnew": "patizeng baluhay kikay-tademaw a mima",
        "botpasswords-label-appid": "kalungangan nu kikay-tademaw:",
        "botpasswords-label-create": "patizeng",
        "botpasswords-label-update": "misabaluhay",
        "content-model-text": "sulit a dada’",
        "content-json-empty-object": "inayi’ay a tuutuud",
        "content-json-empty-array": "inayi’ay a papazengan tu nisulitan",
+       "template-loop-category": "sitatutungay masaliyut a kasabelih",
        "viewpagelogs": "ciwsace kina kasabelih a nasulitan nakawawan",
        "currentrev": "sabaluhay masumad",
        "currentrev-asof": "i $1 a sabaluhay masumad",
        "revdelete-offender": "masumad nu ayaway  masacudaday:",
        "mergehistory-from": "saangangan kasabelih:",
        "mergehistory-into": "pabalucu’an kasabelih:",
+       "mergehistory-list": "kapah mikabuay a mikawaway-kalumyiti nazipa’an",
        "mergehistory-fail-bad-timestamp": "tatukian a suyling la’cus.",
        "mergehistory-reason": "mahicaay:",
        "mergelog": "mikabu tu nasulitan nazipa’an",
        "search-result-size": "$1 ({{PLURAL:$2|$2 ku sulit}})",
        "search-redirect": "(miliyaw tazuma namakay $1)",
        "search-section": "(tusil $1)",
+       "search-category": "(kakuniza $1)",
        "search-suggest": "u tuzu’ nu misu ku:$1 haw?",
        "search-interwiki-more": "(yadah)",
        "search-interwiki-more-results": "sayadahay a heci",
        "prefs-rc": "capi a demaiday a sumad",
        "prefs-watchlist": "miazihay a piazihan tu sulit",
        "prefs-editwatchlist": "miazihay a piazihan tu sulit nu mikawaway-kalumyiti",
+       "prefs-editwatchlist-raw": "mikawaway-kalumyiti saayaway misisip a piazihan-tu-sulit",
        "prefs-misc": "zuma",
        "prefs-resetpass": "misumad tu mima",
        "prefs-email": "imyiyo(email) mapili’ay",
        "timezonelegend": "tatukian a kakitizaan:",
        "localtime": "itiniay a tuki:",
        "servertime": "sefuci-kikay a tuki:",
+       "guesstimezone": "pisaungay saazih sakaluk setin sulyang",
        "timezoneregion-africa": "Afilika",
        "timezoneregion-america": "Amilikaco",
        "timezoneregion-antarctica": "Nancico",
        "prefs-registration": "pangangan a demiad:",
        "yourrealname": "tatengaay a ngangan:",
        "yourlanguage": "kamu:",
+       "yourvariant": "lacul kamu masazumaay:",
        "yournick": "baluhay sulitan a ngangan:",
        "email": "imyiyo(email)",
        "prefs-info": "anganganay a cesyun",
        "userrights-lookup-user": "mipili’ misaungayay",
        "userrights-groupsmember": "canan a luyaluy:",
        "userrights-reason": "mahicaay:",
+       "userrights-unchangeable-col": "amana kisu misumad tu luyaluy",
        "userrights-expiry-current": "kakatekuhan $1",
        "userrights-expiry-none": "inayi’ kakatekuhan",
        "userrights-expiry": "kakatekuhan:",
        "group-bureaucrat": "situngusay a mikawaway",
        "group-suppress": "misisipay",
        "group-all": "(hamin)",
+       "group-autoconfirmed-member": "lunuk a malucekay tu misaungayay",
        "group-bot-member": "{{GENDER:$1|kikay a tademaw}}",
        "group-bureaucrat-member": "{{GENDER:$1|situngusay-mikawaway}}",
        "grouppage-bot": "{{ns:project}}:kikay a tademaw",
        "right-edit": "kasabelih mikawaway-kalumyiti",
        "right-createtalk": "patizeng matatengil  kasabelih",
        "right-move": "milimad kasabelih",
+       "right-move-rootuserpages": "milimad tu limit misaungayay a kasabelih",
        "right-move-categorypages": "milimad kakuniza a kasabelih",
        "right-movefile": "milimad tu tangan",
        "right-upload": "patapabaw tu tangan",
        "right-writeapi": "pisaungay suliten API",
        "right-delete": "misipu tu kasabelih",
+       "right-undelete": "palawpes masipuay kasabelih",
+       "right-unblockself": "mihulak tu ku langat nu maku",
+       "right-noratelimit": "caypakasatezep nu saungayungayan",
        "right-mergehistory": "mikabu kasabelih nazipa’an",
        "grant-group-page-interaction": "kasasukamu tu kasabelih",
        "grant-group-file-interaction": "kasasukamu tu myiti",
        "grant-group-administration": "mileku tu mikuwanay a kawaw",
        "grant-group-other": "zuma saungay nu binawlan",
        "grant-createaccount": "panganganen ku canghaw",
+       "grant-editmywatchlist": "mikawaway-kalumyiti numisu misisip a piazihan-tu-sulit",
+       "grant-editprotected": "mikawaway-kalumyiti madiputay a kasabelih",
        "grant-highvolume": "masibek mikawaway-kalumyiti",
        "grant-privateinfo": "misuped-miala madimut kasikazan a cesyun",
        "grant-uploadfile": "patapabaw ku baluhay a tangan",
        "action-read": "miasip tina kasabelih",
        "action-edit": "mikawaway-kalumyiti uyni a kasabelih",
        "action-createpage": "patizeng tina kasabelih",
+       "action-createtalk": "patizeng tuyni katatengilan kasabelih",
+       "action-createaccount": "patizeng tina misaungayay canghaw",
+       "action-minoredit": "sacuzu’ tina mikawaway-kalumyiti ku mikilulay",
+       "action-move-rootuserpages": "milimad tu limit misaungayay a kasabelih",
        "action-move-categorypages": "milimad kakuniza a kasabelih",
        "action-movefile": "milimad tina tangan",
        "action-upload": "patapabaw tina tangan",
+       "action-reupload": "mitahpu imahiniay a tangan",
        "action-delete": "misipu tina kasabelih",
        "action-deleterevision": "misipu tu masumaday nu ayaway",
        "action-deletelogentry": "masipu nasulitan nazipa’an  kasacacay",
+       "action-mergehistory": "mikabu tina belih a nazipa’an",
        "action-sendemail": "pabahel imyiyo(email)",
+       "action-editmywatchlist": "mikawaway-kalumyiti numisu misisip a piazihan-tu-sulit",
+       "action-editmyprivateinfo": "mikawaway-kalumyiti numisuay a cesyun",
+       "action-deletechangetags": "nay sulu nu nasulitan masipu aazihen a paya",
        "action-purge": "misipu tina kasabelih",
        "nchanges": "$1 {{PLURAL:$1|misumad}}",
        "enhancedrc-history": "nazipa’an",
        "rcfilters-filter-editsbyself-description": "numisuay a paanin",
        "rcfilters-filter-editsbyother-label": "zumaay tatemaw a sumad",
        "rcfilters-filter-user-experience-level-registered-label": "pangangan tuway",
+       "rcfilters-filter-user-experience-level-registered-description": "natalabuay nu mikawaway-kalumyiti.",
        "rcfilters-filter-user-experience-level-unregistered-label": "caay henay pangangan",
        "rcfilters-filter-user-experience-level-newcomer-label": "baluhayay a misaungayay",
        "rcfilters-filter-user-experience-level-learner-label": "mahananamay",
        "rcfilters-filter-minor-label": "cayka yadah ku misumad",
        "rcfilters-filter-major-label": "caay mikilulay mikawaway-kalumyiti",
        "rcfilters-filter-watchlist-watched-label": "miazih piazihan tu sulit",
+       "rcfilters-filter-watchlist-watchednew-label": "nasumadan nu baluhayay misisip a piazihan-tu-sulit",
        "rcfilters-filtergroup-changetype": "misumad nikalahizaan",
        "rcfilters-filter-pageedits-label": "mikawaway-kalumyiti nu kasabelih",
        "rcfilters-filter-newpages-label": "patizeng kasabelih",
        "filestatus": "nisanga’an niza tu tungus a kawaw setyitase:",
        "filesource": "saangangan:",
        "ignorewarnings": "sekipo sacahamin patalaw",
+       "unknown-error": "tahkal caay kapulita mungangaw.",
        "uploadwarning": "patapabaw patalaw",
        "savefile": "misuped tu tangan",
+       "uploaddisabled": "mapasatezep tu ku patapabaw",
+       "uploaddisabledtext": "patapabaw tangan mapasatezep tuway.",
        "upload-source": "saangangan a tangan",
        "upload-description": "tangan sapuelac",
        "upload-options": "patapabaw mapiliay",
        "upload-form-label-infoform-categories": "kakuniza",
        "upload-form-label-infoform-date": "demiad",
        "uploadstash": "patapabaw ku sulu nu pisipetan",
+       "uploadstash-clear": "palamadac tu sulu nu tangan",
+       "uploadstash-errclear": "palamadac tu tangan masepay.",
        "uploadstash-refresh": "misabaluhay tu tangan piazihan tu sulit",
+       "uploadstash-thumbnail": "ciwsace tu sukep tu zunga",
        "invalid-chunk-offset": "la’cus atilad kakitizaan",
        "img-auth-accessdenied": "kakaian misuped-miala",
        "upload-curl-error28": "patapabaw mautang",
        "license": "sapabeli tu kinli a cedang",
        "license-header": "sapabeli tu kinli a cedang",
        "nolicense": "caay henay mipili’",
+       "licenses-edit": "mikawaway-kalumyiti sapabeli tu kinli a cedang mapiliay",
        "license-nopreview": "(amana pataayaway miazih)",
        "listfiles-delete": "misipu",
        "imgfile": "tangan",
        "filedelete-edit-reasonlist": "masipu a mahicaay nu mikawaway-kalumyiti",
        "filedelete-maintenance-title": "la’cus masipu tu tangan",
        "download": "patasasa'",
+       "unwatchedpages": "caayay kasisip a kasabelih",
        "listredirects": "miliyaw patatuzu’ piazihan tu sulit",
        "listduplicatedfiles": "misaliyaw tu tangan piazihan tu sulit",
+       "unusedtemplates": "caayay kasaungay a taazihan mitudung",
        "randompage": "kakibalucu’ ay a kasabelih",
        "randomincategory": "kakibalucu’ kakuniza a kasabelih",
        "randomincategory-legend": "kakibalucu’ kakuniza a kasabelih",
        "statistics-header-edits": "sausi mikawaway-kalumyiti",
        "statistics-header-hooks": "zuma a sausi",
        "statistics-articles": "lacul kasabelih",
+       "statistics-files": "mapatapabaw tu a tangan",
+       "statistics-edits-average": "paybelih malecalecad mikawaway-kalumyiti su",
        "statistics-users-active": "saungay nu binawlan a misaungayay",
        "pageswithprop-prop": "susin kalungangan:",
        "pageswithprop-submit": "mileku",
+       "brokenredirects": "malepi’ ay miliyaw patatuzu’",
        "brokenredirects-delete": "misipu",
+       "withoutinterwiki": "inayi’ ku kamu masasiket a kasabelih",
        "withoutinterwiki-legend": "saayaway a sulit",
        "withoutinterwiki-submit": "paazih",
        "nbytes": "$1 {{PLURAL:$1|wyiyincu}}",
        "nrevisions": "$1 {{PLURAL:$1|masumad nu ayaway}}",
        "nimagelinks": "{{PLURAL:$1|kasabelih}}",
        "lonelypages": "masipulu’ a kasabelih",
+       "uncategorizedpages": "cayhen kakunizaay a kasabelih",
+       "uncategorizedcategories": "cayhenay kakunizaay a kakuniza",
+       "uncategorizedimages": "cayhen kakunizaay a tangan",
        "uncategorizedtemplates": "sapi kakuniza taazihan mitudung",
+       "unusedcategories": "caayay kasaungay a kakuniza",
+       "unusedimages": "caayay kasaungay a tangan",
        "wantedcategories": "maydihay a kakuniza",
        "wantedpages": "maydihay a kasabelih",
        "wantedfiles": "maydihay a tangan",
        "wantedtemplates": "maydihay a taazihan mitudung",
+       "mostlinkedcategories": "masasiket sayadahay a kakuniza",
+       "mostlinkedtemplates": "nipacaliwan kayadahay a kasabelih",
+       "mostimages": "masasiket kayadahay a tangan",
+       "prefixindex": "kilul tatangahan nu sulit palalitemuh tu kawaw kasabelih",
        "prefixindex-submit": "paazih",
        "shortpages": "ma’ngadisay a kasabelih",
        "longpages": "mangasiway a kasabelih",
        "deadendpages": "inayi’ masasiket kasabelih",
        "protectedpages": "madiputay a kasabelih",
+       "protectedpages-noredirect": "midimut miliyaw patatuzu’ kasabelih",
        "protectedpages-timestamp": "demiad tatukian",
        "protectedpages-page": "kasabelih",
        "protectedpages-expiry": "kakatekuhan",
        "protectedpages-params": "midiput tu aazihen a sulyang",
        "protectedpages-reason": "mahicaay",
        "protectedpages-submit": "paazih tu kasabelih",
+       "protectedpages-unknown-performer": "caay kapulita a misaungayay",
        "protectedtitles": "madiputay a satangahan",
        "protectedtitles-submit": "paazih tu satangahan",
        "listusers": "misaungayay a piazihan tu sulit",
        "ancientpages": "samalumanay a kasabelih",
        "move": "milimad",
        "notargettitle": "inayi’ ku pabalucu’an",
+       "pager-newer-n": "{{PLURAL:$1|baluhay $1}}",
        "pager-older-n": "{{PLURAL:$1| kusa malumanay}}",
        "suppress": "malangat",
        "apihelp": "buhci tu kamu nu API",
        "allpages": "hamin nu kasabelih",
        "nextpage": "zikuzan a belih ($1)",
        "prevpage": "ayaway a belih ($1)",
+       "allpagesfrom": "paazih kasabelih miteka i:",
+       "allpagesto": "paazih kasabelih pahezek i:",
        "allarticles": "hamin nu kasabelih",
        "allpagessubmit": "mileku",
+       "allpagesprefix": "kilul tu saayaw nu nakamuan palalitemuh tu kawaw kasabelih:",
+       "allpages-hide-redirects": "midimut miliyaw patatuzu’ kasabelih",
        "categories": "kakuniza",
        "categories-submit": "paazih",
+       "categoriesfrom": "paazih kakuniza miteka i:",
        "linksearch": "ihekal masasiket mikilim",
        "linksearch-pat": "mikilim aazihen a sulit:",
        "linksearch-ns": "pangangananay a salaedan:",
        "listgrants-rights": "kinli",
        "trackingcategories": "mikilul nazikuzan kakuniza",
        "trackingcategories-desc": "kakuniza milisimet a tatungus",
+       "trackingcategories-nodesc": "inayi’ ku silaheciay a sapuelac",
        "trackingcategories-disabled": "mapasatezep kakuniza tuway",
        "mailnologin": "inayi’ pabahel puenengan",
        "usermaildisabled": "mapasatezep imyiyo(email)",
        "watchlist": "miazihay a piazihan tu sulit",
        "mywatchlist": "miazihay a piazihan tu sulit",
        "watchnologin": "caay henay patalabu",
+       "addwatch": "cunusen tu miazihay a piazihan-tu-sulit",
        "watch": "miazih",
        "watchthispage": "miazih tuyni kasabelih",
        "unwatch": "palawpes aazihan",
        "wlshowhidepatr": "tayza mikibi mikawaway-kalumyiti",
        "wlshowhidemine": "numakuay a mikawaway-kalumyiti",
        "wlshowhidecategorization": "kasabelih nu kakuniza",
+       "watchlist-options": "misisipa piazihan-tu-sulit a syinsiang",
        "unwatching": "palawpes aazihan...",
        "enotif_anon_editor": "paceba panganganay a misaungayay $1",
        "enotif_minoredit": "payni mikilulay a mikawaway-kalumyiti",
        "changecontentmodel-title-label": "kasabelih satangahan",
        "changecontentmodel-model-label": "tatudungen misanga’ nu baluhay a lacul",
        "changecontentmodel-reason-label": "mahicaay:",
+       "changecontentmodel-emptymodels-title": "inayi’ ku silaheciay a lacul tatudungen-misanga",
        "protectlogpage": "midiput nasulitan nakawawan",
        "protect-legend": "malucekay tu midiputay",
        "protectcomment": "mahicaay:",
        "protectexpiry": "kakatekuhan:",
        "protect_expiry_invalid": "la’cusay a kakatekuhan",
        "protect_expiry_old": "Expiration time is in the past.",
+       "protect-default": "mahasa sacahamin misaungayay",
        "protect-level-sysop": "mahasa mikuwanay a cacay",
        "protect-summary-cascade": "patatusul",
        "protect-expiring": "kakatekuhan $1 (UTC)",
        "restriction-level-autoconfirmed": "lalusa-diput",
        "restriction-level-all": "amahicahicaay a kasalelal",
        "undelete-fieldset-title": "patiku misumad nu ayaway",
+       "undelete-nodiff": "inayi’ nasawniay a sumad.",
        "undeletebtn": "patiku",
        "undeleteinvert": "kabelihan mipili’",
        "undeletecomment": "mahicaay:",
        "undelete-search-submit": "kilim",
+       "undelete-error": "palawpes masipu kasabelih  mungangaw",
        "undelete-show-file-submit": "hang",
        "namespace": "pangangananay a salaedan:",
        "invert": "kabelihan mipili’",
        "ipb-unblock-addr": "mihulak tu langat $1",
        "ipb-blocklist-duration-left": "$1 pakawili",
        "ipusubmit": "misipu tina langat",
+       "blocklist": "malangatay tu a misaungayay",
        "autoblocklist-submit": "kilim",
+       "ipblocklist": "malangatay tu a misaungayay",
        "blocklist-userblocks": "midimut canghaw malangat",
        "blocklist-tempblocks": "midimut nanunuz malangat",
        "blocklist-timestamp": "demiad tatukian",
        "ipblocklist-submit": "kilim",
        "ipblocklist-localblock": "milangat itiniay",
        "infiniteblock": "inayi’ u sungliw",
+       "expiringblock": "$1 $2 hatinitu",
+       "anononlyblock": "wiza dada’ paceba panganganay ku misaungayay",
        "noautoblockblock": "mapasatezep lunuk  milangat",
+       "createaccountblock": "canghaw patizeng mapasatezep tuway",
        "emailblock": "mapasatezep imyiyo(email)",
        "blocklink": "milangat",
        "unblocklink": "mihulak tu langat",
        "contribslink": "paanin",
        "emaillink": "pabahel imyiyo(email)",
        "blocklogpage": "milangat tu nasulitan nakawawan",
+       "block-log-flags-anononly": "wiza dada’ paceba panganganay ku misaungayay",
+       "block-log-flags-nocreate": "canghaw patizeng mapasatezep tuway",
        "block-log-flags-noautoblock": "mapasatezep lunuk  milangat",
        "block-log-flags-noemail": "mapasatezep imyiyo(email)",
        "lockdb": "pamutek tu sulu nu kalunasulitan",
        "lockbtn": "pamutek tu sulu nu kalunasulitan",
+       "lockdbsuccesssub": "malahci pamutek sulu nu nasulitan tuway",
+       "unlockdbsuccesssub": "misipu pamutek tu sulu nu kalunasulitan tuway",
        "move-page": "milimad $1",
        "move-page-legend": "milimad kasabelih",
        "newtitle": "baluhay satangahan:",
        "pagemovedsub": "milimad malaheci tuway",
        "movelogpage": "milimad ku nasulitan nakawawan",
        "movereason": "mahicaay:",
+       "move-leave-redirect": "miliwan miliyaw patatuzu’ kasabelih",
        "export": "patahkal ku kasabelih",
        "exportall": "patahkal sacahamin  kasabelih",
        "export-submit": "patahkal",
        "export-download": "misuped sapatangan",
        "export-templates": "yamalyilu taazihan mitudung",
+       "export-manual": "tiyung ku lima micunus kasabelih:",
        "allmessages": "sisetyimo palatuh",
        "allmessagesname": "kalungangan",
        "allmessagesdefault": "pataayaw tu kawaw palatuh  a sulit",
        "allmessages-filter-legend": "kilim",
+       "allmessages-filter": "kilul misumad zasatu mikilim:",
        "allmessages-filter-unmodified": "caay henay misumad",
        "allmessages-filter-all": "hamin",
        "allmessages-filter-modified": "masumad tuway",
        "allmessages-filter-translate": "mibelih",
        "thumbnail-more": "patabaki(micuwat)",
        "filemissing": "tangan mahedaw",
+       "thumbnail_image-type": "caypi damaenay a zunga nikalahizaan",
        "thumbnail_image-missing": "tangan mahedaw: $1",
        "import": "pacumuden kasabelih",
        "import-interwiki-sourcepage": "saangangan kasabelih:",
        "import-interwiki-templates": "yamalyilu sacahamin  taazihan mitudung",
        "import-interwiki-submit": "pacumud",
+       "import-mapping-namespace": "pacumud i pangangananay a salaedan:",
        "import-upload-filename": "kalungangan nu tangan:",
        "import-comment": "pacunus sakacaay kapawan:",
        "import-revision-count": "$1 {{PLURAL:$1|masumad nu ayaway}}",
+       "importcantopen": "la’cusay miwawah pacumud tu tangan",
        "importsuccess": "pahezek tuway pacumud!",
+       "importnofile": "caay henay papabaw pacumud tangan.",
        "importlogpage": "pacumuden nasulitan nazipa’an",
        "tooltip-pt-userpage": "{{GENDER:|misaungayay nu misu}} kasabelih",
        "tooltip-pt-mytalk": "{{GENDER:|misuay }}sasukamu a kasabelih",
        "tooltip-ca-viewsource": "uyni kasabelih madiputay tuway.\nkapah kisu miciwsace tuyni kasabelih sakatizeng bangu",
        "tooltip-ca-history": "uyini kasabelih nasawniay a sumad",
        "tooltip-ca-protect": "midiput tina kasabelih",
+       "tooltip-ca-unprotect": "misumad tuyniay a sadiput",
        "tooltip-ca-delete": "misipu tina kasabelih",
        "tooltip-ca-move": "milimad tina kasabelih",
        "tooltip-ca-watch": "paynien kasabelih micunus misuay cyinse piazihan tu sulit",
        "tooltip-ca-nstab-image": "ciwsace tangan kasabelih",
        "tooltip-ca-nstab-template": "ciwsace taazihan mitudung",
        "tooltip-ca-nstab-category": "ciwsace kakuniza a kasabelih",
+       "tooltip-minoredit": "silusi tina tu payni mikilulay a mikawaway-kalumyiti",
        "tooltip-save": "misuped misuay a pisumad",
        "tooltip-publish": "patiyak tu sumad nu misu",
        "tooltip-preview": "kay iayaw nu pisuped miazih tu nu misuay nisumad.",
        "tooltip-diff": "paazih hica sa kisu labuay a nisumadan",
        "tooltip-watch": "paynien kasabelih micunus misuay cyinse piazihan tu sulit",
        "tooltip-watchlistedit-normal-submit": "misipu satangahan",
+       "tooltip-watchlistedit-raw-submit": "misabaluhay misisip tu piazihan-tu-sulit",
        "tooltip-upload": "miteka patapabaw",
        "tooltip-rollback": "sapecec \"patiku\" misiket, kapah patiku tayza nuayawanay a paanin tu nisulitan tina kasabelih mikawaway tu kalumyiti",
        "tooltip-undo": "\"patiku\" kapah tu patiku tuyni mikawaway tu kalumyiti payni pataayaway miazih muse miwawah mikawaway tu kalumyiti aazihan cudad, saka caay cayaw nu labu micunus mahicaay.",
        "others": "zuma",
        "creditspage": "kasabelih kasakumi nu misayingaay",
        "simpleantispam-label": "sapi tena’ babakahen a sulit kinsa.\nyu <strong>amana</strong> misulit kuyni pisinga’an!",
+       "pageinfo-title": "\"$1\" a cesyun",
        "pageinfo-header-basic": "anganganay a cesyun",
        "pageinfo-header-edits": "nazipa’an nu mikawaway-kalumyiti",
        "pageinfo-header-restrictions": "kasabelih midiput",
        "pageinfo-language-change": "misumad",
        "pageinfo-content-model": "kasabelih a lacul tatudungen misanga’",
        "pageinfo-content-model-change": "misumad",
+       "pageinfo-robot-policy": "nay kikay-tademaw patizeng kapah pikiliman tu nisulitan miasip",
        "pageinfo-robot-noindex": "amana",
        "pageinfo-watchers": "kasabelih miazihay a nikayadah",
+       "pageinfo-subpages-name": "tina belih a sailuc-kasabelih nikayadah",
        "pageinfo-firstuser": "kasabelih patizengay",
        "pageinfo-firsttime": "patizeng demiad nu kasabelih",
        "pageinfo-lastuser": "capiay a mikawaway-kalumyiti",
        "pageinfo-recent-authors": "capiay masacudaday a nikayadah",
        "pageinfo-toolboxlink": "kasabelih cesyun",
        "pageinfo-redirectsto-info": "katinengan",
+       "pageinfo-contentpage": "miasip papi lacul kasabelih",
        "pageinfo-contentpage-yes": "hang",
        "pageinfo-protect-cascading-yes": "hang",
        "pageinfo-protect-cascading-from": "patatusul midiput namakay",
        "pageinfo-category-pages": "kasabelih nikayadah",
        "pageinfo-category-subcats": "sailuc-kasasizuma nikayadah",
        "pageinfo-category-files": "tangan nikayadah",
+       "pageinfo-user-id": "misaungayay ID",
        "markaspatrolleddiff": "silusi natayza mikibi tuway",
        "markedaspatrolled": "silusi natayza mikibi tuway",
        "patrol-log-page": "tayza mikibi nasulitan nazipa’an",
        "minutes-ago": "ayaw $1 {{PLURAL:$1|widi}}",
        "seconds-ago": "ayaw $1 {{PLURAL:$1|a beti}}",
        "monday-at": "sakacacay a demiad nu lipay i$1",
+       "tuesday-at": "sakatusa a demied nu lipay i $1",
+       "wednesday-at": "saka tulu i $1",
        "thursday-at": "sakasepat i $1",
        "friday-at": "sakalima a demied nu lipay i $1",
        "saturday-at": "sakaenem a demiad nu lipay i $1",
        "sunday-at": "pilipayan i $1",
+       "yesterday-at": "nacila i $1",
        "metadata": "pulita tu kalunasulitan",
        "metadata-help": "uyni tangan labuay amin yamalyilu zuma cesyun, uyni a cesyun akay nay suewyi  sasasing asaca sapisekyin i tapang asaca suwyihwa saayaw katukuh pahzekan a nakawawan mapacunusay. anu nay tangan saayaway setyitase masumadtu, hatizaay pulita kalunasulitan akay la’cus mileku mabetil a misumad tu tangan.",
        "metadata-expand": "paazih pulita kalunasulitan",
        "exif-exposureprogram": "mapaedil a muse",
        "exif-spectralsensitivity": "edil-selal saahemi’han",
        "exif-isospeedratings": "ISO suli",
+       "exif-aperturevalue": "APEX edil",
+       "exif-brightnessvalue": "APEX likat",
        "exif-maxaperturevalue": "satabakiay a likat-mulu i lala’ nu kitakit",
        "exif-subjectdistance": "ilaed nu satangahan",
        "exif-meteringmode": "miditek tu edil a muse",
        "exif-focallength": "saed nu sapisasing",
        "exif-subjectarea": "sausi a kakitizaan",
        "exif-flashenergy": "sabelabelatay a tinghuy u icelang",
+       "exif-focalplaneresolutionunit": "edil-sanat a sapat katingalaw  tatebanan nu nisulitan",
        "exif-subjectlocation": "kakitizaan nu satangahan",
        "exif-exposureindex": "mapaedil a sulyang",
        "exif-sensingmethod": "mise nu nikasumad nay edil",
        "exif-sharpness": "kacidem",
        "exif-devicesettingdescription": "sakaluk setin sapuelac",
        "exif-subjectdistancerange": "baat nu tatizengan a liwliw",
+       "exif-gpsversionid": "GPS baziyong nu aazihen a paya",
        "exif-gpslatituderef": "pyiwyi asaca nanwyi",
        "exif-gpslongituderef": "tongcing asaca sicing",
        "exif-gpsaltituderef": "nutakalaw namakay bayu’ miazih tu tatenga’ay a sulyang",
        "exif-gpsmeasuremode": "miditek a muse",
        "exif-gpsdop": "miditek a tatungus",
        "exif-gpsspeedref": "saduba’ kalamkam a sacacaycacay",
+       "exif-gpsmapdatum": "pisaungay ulaulangan miditek a kalunasulitan",
        "exif-gpsdestlatitude": "pabalucu’an a wyitu",
        "exif-gpsdestlongituderef": "pabalucu’an a cintu",
        "exif-gpsdatestamp": "GPS a demiad",
+       "exif-gpsdifferential": "GPS chafen misumad",
        "exif-keywords": "aazihen dulit",
        "exif-worldregioncreated": "zunga masasing a kakitizaan",
        "exif-countrycreated": "zunga masasingan a kanatal",
        "exif-provinceorstatecreated": "yakuwanan a sasing",
        "exif-citycreated": "yatukay a sasing",
+       "exif-worldregiondest": "paazih tu subal nu kitakit",
        "exif-countrydest": "paazih tu kanatal",
        "exif-countrycodedest": "paazih kanatal a kodo",
        "exif-provinceorstatedest": "paazih seng asaca cou",
        "exif-iimcategory": "kakuniza",
        "exif-iimsupplementalcategory": "micunus kakuniza",
        "exif-datetimereleased": "patiyak i",
+       "exif-originaltransmissionref": "saayaway miculu’ kakitizaan a kodo",
        "exif-identifier": "mapulitaay a kodo",
        "exif-lens": "pisaungay tu cingtou",
        "exif-serialnumber": "sasasing salaylay a banggu",
        "exif-cameraownername": "sasasing nizaay",
        "exif-label": "aazihen paya",
+       "exif-nickname": "caykaw tatengaay a zunga kalungangan",
        "exif-rightscertificate": "nisanga’an niza tu tungus a kawaw nu makuwanay a pincen",
        "exif-copyrighted": "nisanga’an niza tu tungus a kawaw setyitase",
        "exif-copyrightowner": "nizaay nisanga’an tu tungus a kawaw",
        "exif-usageterms": "mamaala a cedang",
        "exif-webstatement": "nabalucu'an nu i telay nisanga’an niza tu tungus a kawaw",
+       "exif-licenseurl": "nisanga’an niza tu tungus a kawaw pabeli tu kinli  masasiket",
        "exif-morepermissionsurl": "paliyuh pabeli tu kinli a cesyun",
        "exif-disclaimer": "caay pimuku tu sikining",
        "exif-contentwarning": "lacul mipatalaw",
+       "exif-giffilecomment": "GIF tangan pacunus sakacaay kapawan",
        "exif-intellectualgenre": "kasacacay nikalahizaan",
        "exif-subjectnewscode": "kodo nu satangahan",
        "exif-event": "sapuelac tu sikikawaw",
        "exif-organisationinimage": "sapuelac nu mikumi",
        "exif-personinimage": "sapuelac tu tademaw",
        "exif-originalimageheight": "takalaway nu caayhen masait",
+       "exif-originalimagewidth": "misait tu nuayawan a ahebal",
        "exif-compression-1": "caay henay piepian mipecec",
        "exif-copyrighted-true": "madiput nu nisanga’an niza tu tungus a kawaw",
        "exif-copyrighted-false": "caay kapulita nu nisanga’an niza tu tungus a kawaw setyitase",
        "exif-lightsource-255": "zuma katahkalan nu likat",
        "exif-flash-fired-0": "sabelabelatay a tinghui caay henay miwawah",
        "exif-flash-fired-1": "sabelabelatay a tinghui miwawah tuway",
+       "exif-flash-mode-1": "pacici sabelabelatay tinghuy mawawah",
+       "exif-flash-mode-2": "pacici sabelabelatay tinghuy mapaneng",
        "exif-flash-mode-3": "lunuk muse",
        "exif-flash-function-1": "inayi’ sasahicaan nu sabelabelatay a tinghui",
        "exif-flash-redeye-1": "muse nu kasatezep tu sumanahay a mata",
        "exif-gpsdestdistance-k": "kungli",
        "exif-gpsdestdistance-m": "inli",
        "exif-gpsdestdistance-n": "hayli",
+       "exif-gpsdop-excellent": "tada kapah ($1)",
        "exif-objectcycle-a": "namalamam a cacay",
        "exif-objectcycle-p": "nakalahukan a cacay",
        "exif-objectcycle-b": "namalanam atu namalahuk",
        "exif-dc-source": "saangangan a myiti",
        "exif-dc-type": "myiti nikalahizaan",
        "exif-rating-rejected": "kakaian",
+       "exif-isospeedratings-overflow": "satabakien tu 65535",
        "exif-iimcategory-clj": "mungangaw atu hulic",
        "exif-iimcategory-fin": "kyizay atu syubay",
        "exif-iimcategory-edu": "pasubana’ay a kawaw",
        "imgmultipageprev": "ayaway cacay a belih",
        "imgmultipagenext": "zikuzan a belih →",
        "imgmultigo": "mileku!",
+       "imgmultigoto": "taayaw saka $1 a blih",
        "img-lang-default": "(pataayaw tu kawaw a kamu)",
        "img-lang-go": "mileku",
        "ascending_abbrev": "masalaylay adidi’ay katukuh tabakiay",
        "autosumm-newblank": "patizeng nayi’ ku cacan a kasabelih",
        "watchlistedit-normal-title": "miazihay a piazihan tu sulit nu mikawaway-kalumyiti",
        "watchlistedit-normal-submit": "misipu satangahan",
+       "watchlistedit-raw-title": "mikawaway-kalumyiti saayaway misisip a piazihan-tu-sulit",
+       "watchlistedit-raw-submit": "misabaluhay misisip tu piazihan-tu-sulit",
        "watchlistedit-clear-title": "misipu miazihay a piazihan tu sulit",
        "watchlisttools-clear": "misipu miazihay a piazihan tu sulit",
+       "watchlisttools-raw": "mikawaway-kalumyiti saayaway misisip a piazihan-tu-sulit",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1| sasukamu ]])",
        "timezone-local": "itizaay",
        "version": "baziyong",
+       "version-extensions": "malacul tu sacunusan a sakaluk",
        "version-skins": "malacul tu nuhekalan",
        "version-specialpages": "sazumaay a kasabelih",
        "version-parserhooks": "kulawid nu saheciay sakaluk",
        "version-other": "zuma",
        "version-mediahandlers": "myiti saungayay a sakaluk",
        "version-hooks": "kulawid",
+       "version-parser-function-hooks": "kamu-sakilul mapulita sapisausi makulawit",
        "version-hook-name": "kalawid a kalungangan",
        "version-hook-subscribedby": "pangangan",
        "version-no-ext-name": "[caay henay pangangan]",
        "version-ext-colheader-license": "sapabeli tu kinli a cedang",
        "version-ext-colheader-description": "sapuelac",
        "version-ext-colheader-credits": "masacudaday",
+       "version-license-title": "$1 a sapabeli tu kinli a cedang",
+       "version-credits-title": "$1 a kasakumi nu misayingaay",
        "version-poweredby-others": "zuma",
        "version-software": "malacul tu ku zwanti",
        "version-software-product": "nasang’ay a tuutuud",
        "specialpages-group-maintenance": "aazihen a cudad nu midiputay",
        "specialpages-group-other": "sazumaay cidek a kasabelih",
        "specialpages-group-login": "patalabu / panganganen ku canghaw",
+       "specialpages-group-users": "misaungayay atu tungus",
        "specialpages-group-highuse": "sawsawniay a kasabelih",
        "specialpages-group-pages": "piazihan tu sulit nu kasabelih",
        "specialpages-group-pagetools": "kasabelih sakaluk",
        "specialpages-group-wiki": "kalunasulitan atu sakaluk",
        "specialpages-group-developer": "saayaway miteka a misakakawaway sakaluk",
        "blankpage": "salengacay a kasabelih",
+       "tags": "kapah misumad tu tazihan a paya",
        "tag-filter": "[[Special:Tags|aazihen paya]] kilim:",
        "tag-filter-submit": "kilim",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|aazihen paya’}}]]: $2)",
        "tags-edit-title": "aazihen a paya mikawaway-kalumyiti",
        "tags-edit-manage-link": "aazihen a paya nu kuwan",
        "tags-edit-new-tags": "baluhay aazihen a paya:",
+       "tags-edit-add": "micunus uyniyay aazihen a paya:",
        "tags-edit-chosen-placeholder": "mipili’ hatizaay aazihen a paya",
        "tags-edit-reason": "mahicaay:",
        "tags-edit-success": "macaedung tu ku sasumad.",
        "htmlform-yes": "hang",
        "htmlform-cloner-create": "ngalepen tu cunus",
        "htmlform-cloner-delete": "milimad",
+       "htmlform-time-placeholder": "HH:MM:SS",
        "htmlform-title-not-exists": "$1 inayi’",
        "htmlform-user-not-exists": "<strong>$1</strong> inayi’",
        "logentry-delete-delete": "$1 {{GENDER:$2|masiputu}} kasabelih $3",
        "restore-count-files": "{{PLURAL:$1|1 tangan}}",
        "revdelete-content-hid": "madimut tu ku lacul",
        "revdelete-content-unhid": "palawpes midimut tu lacul",
+       "revdelete-summary-unhid": "palawpes midimut  mikawaway-kalumyiti pecu’ nu lacul",
        "logentry-move-move": "$1 {{GENDER:$2|milimad tuway}} kasabelih $3 katukuh $4",
        "logentry-newusers-create": "{{GENDER:$2|patizeng}} misaungayay canghaw tuway $1",
        "logentry-upload-upload": "$1 {{GENDER:$2|masayacay tuway}} $3",
        "feedback-subject": "satangahan:",
        "feedback-submit": "patayzaan",
        "feedback-thanks-title": "kukay tisuwanan!",
+       "feedback-useragent": "misaungayay tayli:",
        "searchsuggest-search": "kilim {{SITENAME}}",
        "api-error-unknownerror": "caay kapulita ku mungangaw: \"$1\".",
        "duration-seconds": "$1 {{PLURAL:$1|a beti}}",
        "duration-years": "$1 {{PLURAL:$1|a mihca}}",
        "duration-centuries": "$1 {{PLURAL:$1|lasubu a mihca}}",
        "duration-millennia": "$1 {{PLURAL:$1|malebut a mihca}}",
+       "limitreport-title": "tingalaw-kikay mapulita kalunasulitan:",
+       "limitreport-cputime": "CPU pisaungay a lawad(tuki)",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|a beti}}",
        "limitreport-walltime": "tatengaay pisaungay a lawad-tuki",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|a beti}}",
        "expandtemplates": "micuwat tu taazihan a mitudung",
        "expand_templates_input": "suliten:",
        "expand_templates_output": "heci",
+       "expand_templates_xml_output": "XML patahkal",
        "expand_templates_ok": "malucekay",
        "expand_templates_remove_comments": "misipu buhci tu kamu",
        "expand_templates_preview": "pataayaway miazih",
        "pagelanguage": "misumad kasabelih a kamu",
        "pagelang-language": "kamu",
+       "pagelang-use-default": "pisaungay pataayaw tu kawaw a kamu",
        "pagelang-select-lang": "mipili’ tu kamu",
        "pagelang-reason": "mahicaay:",
        "pagelang-submit": "patayzaan",
        "mediastatistics-table-count": "tangan nikayadah",
        "mediastatistics-table-totalbytes": "pulung sausi nu hacica-tabaki",
        "mediastatistics-header-bitmap": "pacepacekan a zunga",
+       "mediastatistics-header-drawing": "mizunga (siangliyang zunga)",
        "mediastatistics-header-audio": "ludihang",
        "mediastatistics-header-video": "yiga",
        "mediastatistics-header-multimedia": "payadahay malocimyidiy",
        "mw-widgets-titleinput-description-new-page": "kasabelih nayai’ tu",
        "mw-widgets-categoryselector-add-category-placeholder": "micunus tu kakuniza...",
        "mw-widgets-usersmultiselect-placeholder": "micunus sangaleben...",
+       "sessionprovider-generic": "$1 kasasiketan",
        "randomrootpage": "kakibalucu’ lamitay kasabelih",
        "log-action-filter-block": "milangat nikalahizaan:",
        "log-action-filter-delete": "misipu nikalahizaan:",
        "log-action-filter-block-block": "milangat",
        "log-action-filter-block-reblock": "milangat tu sapisumad",
        "log-action-filter-block-unblock": "mihulak tu langat",
+       "log-action-filter-contentmodel-change": "lacul tatudungen-misanga’ a sumad",
        "log-action-filter-delete-delete": "misipu kasabelih",
        "log-action-filter-delete-delete_redir": "miliyaw patatuzu’ mipakutay tu sulit",
        "log-action-filter-delete-restore": "kasabelih milawpes tu sipu",
        "log-action-filter-managetags-delete": "misipu aazihen a paya",
        "log-action-filter-managetags-activate": "aazihen a paya miteka",
        "log-action-filter-managetags-deactivate": "aazihan-paya palawpesen ku pisaungay",
+       "log-action-filter-move-move_redir": "milimad miliyaw misulit miliyawtu tazuma nay",
+       "log-action-filter-newusers-create": "nay paceba panganganay a misaungayay patizeng",
+       "log-action-filter-newusers-create2": "nay pangangan misaungayay patizeng",
        "log-action-filter-newusers-autocreate": "lunuk patizeng",
        "log-action-filter-patrol-patrol": "lima-saungay tayza mikibi",
        "log-action-filter-patrol-autopatrol": "lunuk tayza mikibi",
        "linkaccounts": "masasiket tu canghaw",
        "linkaccounts-success-text": "masasiket tu ku canghaw",
        "linkaccounts-submit": "masasiket tu canghaw",
+       "unlinkaccounts": "palawpes masasiketay a canghaw",
        "revid": "masumad nu ayaway $1",
        "pageid": "kasabelih ID $1"
 }
index 9488a19..cf1c9f9 100644 (file)
        "file-deleted-duplicate-notitle": "Файл, ідэнтычны гэтаму файлу, раней ужо быў выдалены, а назва файла была забароненая.\nВам трэба зьвярнуцца да некага з правамі прагляду зьвестак забароненых файлаў, каб прааналізаваць сытуацыю перад тым, як загружаць файл ізноў.",
        "uploadwarning": "Папярэджаньне",
        "uploadwarning-text": "Калі ласка, зьмяніце апісаньне файла ніжэй і паспрабуйце ізноў.",
+       "uploadwarning-text-nostash": "Калі ласка, загрузіце файл ізноў, зьмніце апісаньне ніжэй і паспрабуйце яшчэ раз.",
        "savefile": "Захаваць файл",
        "uploaddisabled": "Загрузка файлаў забароненая",
        "copyuploaddisabled": "Загрузка праз URL-адрас адключаная.",
index 2234820..f1dd8b6 100644 (file)
        "duplicate-args-category-desc": "এই পাতায় টেমপ্লেট আহ্বান উপস্থিত রয়েছে যা সদৃশ আর্গুমেন্ট ব্যবহার করেছে, যেমন <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> বা <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>।",
        "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-warning": "<strong>সতর্ক হোন:</strong> টেমপ্লেটের অন্তর্ভুক্তির আকার অনেক বেশি।\nকিছু টেমপ্লেট সংযুক্ত করা নাও যেতে পারে।",
        "post-expand-template-inclusion-category": "যেসকল স্থানে টেমপ্লেট অন্তর্ভুক্তির আকার অতিক্রম করে গেছে সেই পাতাগুলো",
        "post-expand-template-argument-warning": "' ' ' সাবধান: ' ' ' এই পাতাটিতে অন্তত একটি ফর্মা যুক্তি আছে যা একটি খুব বড় বিস্তার আকার ধারণ করেছে।\nতাই এই আর্গুমেন্টটি বাদ দেওয়া হয়েছে।",
        "post-expand-template-argument-category": "বাদ ফর্মা আর্গুমেন্ট ধারণকারী পাতা",
        "listfiles_size": "আকার",
        "listfiles_description": "বিবরণ",
        "listfiles_count": "সংস্করণ",
-       "listfiles-show-all": "à¦\9bবির পুরাতন সংস্করণ সংযোজন",
+       "listfiles-show-all": "ফাà¦\87লà§\87র পুরাতন সংস্করণ সংযোজন",
        "listfiles-latestversion": "বর্তমান সংস্করণ",
        "listfiles-latestversion-yes": "হ্যাঁ",
        "listfiles-latestversion-no": "না",
index 2b29e48..f657842 100644 (file)
@@ -48,7 +48,8 @@
                        "BanKris",
                        "Notramo",
                        "Urbalazs",
-                       "Bencemac"
+                       "Bencemac",
+                       "Rodrigo"
                ]
        },
        "tog-underline": "Hivatkozások aláhúzása:",
        "permissionserrorstext-withaction": "Nincs jogosultságod a következő művelet elvégzéséhez: $2, a következő {{PLURAL:$1|ok|okok}} miatt:",
        "contentmodelediterror": "Nem szerkesztheted ezt a változatot, mert a tartalommodellje <code>$1</code>, ami eltér a jelenlegitől (<code>$2</code>).",
        "recreate-moveddeleted-warn": "'''Figyelem! Olyan lapot készülsz létrehozni, amit már legalább egyszer töröltek.'''\n\nMielőtt létrehoznád, nézd meg, miért törölték a lap korábbi tartalmát, és győződj meg róla, hogy a törlés indoka érvényes-e még. A törlési és átnevezési naplókban az érintett lapról az alábbi bejegyzések szerepelnek:",
-       "moveddeleted-notice": "Az oldal korábban törölve lett.\nA lap törlési és átnevezési naplója alább olvasható.",
+       "moveddeleted-notice": "Az oldal korábban törölve lett.\nA lap törlési, védelmi és átnevezési naplója alább olvasható.",
        "moveddeleted-notice-recent": "Sajnáljuk, az oldalt nemrég törölték (az elmúlt 24 órában).\nA részletekért lásd lentebb a törlési, védelmi és átnevezési naplót.",
        "log-fulllog": "Teljes napló megtekintése",
        "edit-hook-aborted": "A szerkesztés meg lett szakítva egy hook által.\nNem lett magyarázat csatolva.",
        "parser-template-loop-warning": "Végtelen ciklus a következő sablonban: [[$1]]",
        "template-loop-category": "Lapok végtelen sablonciklusokkal",
        "template-loop-category-desc": "A lap végtelen sablonciklust tartalmaz, vagyis egy sablon önmagát hívja meg rekurzívan.",
+       "template-loop-warning": "<strong>Figyelem:</strong> Ez a lap hivatkozik ide: [[:$1]] amivel a sablon hivatkozás végtelen hurokba kerül (logikailag nem érvényes).",
        "parser-template-recursion-depth-warning": "A sablon rekurzív beillesztésének mélysége átlépte a határértéket ($1)",
        "language-converter-depth-warning": "A nyelvátalakító rekurzióinak száma túllépve ($1)",
        "node-count-exceeded-category": "Túl sok csomópontot tartalmazó lapok",
        "prefs-editwatchlist-clear": "A figyelőlista kiürítése",
        "prefs-watchlist-days": "A figyelőlistában mutatott napok száma:",
        "prefs-watchlist-days-max": "Legfeljebb $1 {{PLURAL:$1|nap|nap}}",
-       "prefs-watchlist-edits": "A kiterjesztett figyelőlistán mutatott szerkesztések száma:",
+       "prefs-watchlist-edits": "A figyelőlistán megjelenő szerkesztések maximális száma:",
        "prefs-watchlist-edits-max": "Legfeljebb 1000",
        "prefs-watchlist-token": "A figyelőlista kulcsa:",
        "prefs-misc": "Egyéb",
        "timezoneregion-indian": "Indiai-óceán",
        "timezoneregion-pacific": "Csendes-óceán",
        "allowemail": "E-mail engedélyezése más szerkesztőktől",
+       "email-blacklist-label": "Letiltás ezen felhasználóknak, hogy e-mailt küldhessenek nekem",
        "prefs-searchoptions": "Keresés",
        "prefs-namespaces": "Névterek",
        "default": "alapértelmezett",
        "rcfilters-filter-editsbyself-description": "A te hozzájárulásaid.",
        "rcfilters-filter-editsbyother-label": "Mások módosításai",
        "rcfilters-filter-editsbyother-description": "Minden változtatás a tieidet kivéve.",
-       "rcfilters-filtergroup-userExpLevel": "Tapasztalati szint (csak regisztrált felhasználók)",
+       "rcfilters-filtergroup-userExpLevel": "Felhasználói regisztráció és tapasztalat",
        "rcfilters-filter-user-experience-level-registered-label": "Regisztrált",
        "rcfilters-filter-user-experience-level-registered-description": "Bejelentkezett szerkesztők.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Nem regisztrált",
        "rcfilters-filter-watchlist-notwatched-description": "Minden változtatás, kivéve a figyelőlistádon szereplő lapoké.",
        "rcfilters-filtergroup-watchlistactivity": "Figyelőlista aktivitás",
        "rcfilters-filter-watchlistactivity-unseen-label": "Még nem látott változtatások",
+       "rcfilters-filter-watchlistactivity-unseen-description": "A figyelőlistádon szereplő lapokon az utolsó látogatásod után történt változtatások.",
+       "rcfilters-filter-watchlistactivity-seen-label": "Változtatások megtekintése",
        "rcfilters-filtergroup-changetype": "Változtatás típusa",
        "rcfilters-filter-pageedits-label": "Lapszerkesztések",
        "rcfilters-filter-pageedits-description": "A wiki tartalom szerkesztése, beszélgetések, kategória leírások...",
        "rcfilters-liveupdates-button-title-off": "A legfrissebb változtatások mutatása, amint megtörténnek",
        "rcfilters-watchlist-markseen-button": "Összes változtatás megjelölése olvasottként",
        "rcfilters-watchlist-edit-watchlist-button": "A figyelőlistád szerkesztése",
+       "rcfilters-watchlist-showupdated": "Az újabb változtatások amiket még nem néztél meg, <strong>vastaggal jelöltük</strong>",
+       "rcfilters-preference-label": "A friss változtatások fejlesztett változatának elrejtése",
        "rcnotefrom": "Alább a <strong>$3 $4</strong> óta történt változtatások láthatóak (legfeljebb <b>$1</b> db).",
        "rclistfromreset": "Dátumválasztás visszaállítása",
        "rclistfrom": "$3, $2 után történt változtatások megtekintése",
        "file-deleted-duplicate-notitle": "Egy ugyanilyen fájlt korábban már töröltek, és címét eltávolították. Kérj meg valakit, aki meg tudja nézni a törölt fájlokat, hogy tekintse át a helyzetet, mielőtt újra feltöltenéd a fájlt.",
        "uploadwarning": "Feltöltési figyelmeztetés",
        "uploadwarning-text": "Kérlek, módosítsd a fájl leírását alább, majd próbáld újra.",
+       "uploadwarning-text-nostash": "Kérjük próbálkozz újra: ismét töltsd fel a fájlt és változtass a leírásán.",
        "savefile": "Fájl mentése",
        "uploaddisabled": "Feltöltések kikapcsolva",
        "copyuploaddisabled": "A feltöltés URL alapján le van tiltva.",
        "listfiles_size": "Méret",
        "listfiles_description": "Leírás",
        "listfiles_count": "Változatok",
-       "listfiles-show-all": "A képek régebbi verzióját is",
+       "listfiles-show-all": "Tartalmazza a fájlok régebbi verzióját is",
        "listfiles-latestversion": "Aktuális változat",
        "listfiles-latestversion-yes": "Igen",
        "listfiles-latestversion-no": "Nem",
        "pageswithprop-legend": "Lap tulajdonsággal rendelkező lapok",
        "pageswithprop-text": "Ez a lap azokat a lapokat listázza, amelyek egy adott lap tulajdonsággal rendelkeznek.",
        "pageswithprop-prop": "Tulajdonságnév:",
+       "pageswithprop-reverse": "Rendezze fordított sorrendbe",
        "pageswithprop-submit": "Ugrás",
        "pageswithprop-prophidden-long": "hosszú szöveg tulajdonság elrejtve ($1)",
        "pageswithprop-prophidden-binary": "bináris tulajdonság érték rejtett ($1)",
        "delete-warning-toobig": "Ennek a lapnak a laptörténete több mint {{PLURAL:$1|egy|$1}} változatot őriz. Törlése fennakadásokat okozhat a wiki adatbázis-műveleteiben; óvatosan járj el.",
        "deleteprotected": "Nem tudod törölni a lapot, mivel le van védve.",
        "deleting-backlinks-warning": "<strong>Figyelem:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Más lapok]] hivatkoznak a törlendő oldalra (vagy beillesztik azt).",
+       "deleting-subpages-warning": "<strong>Figyelem:</strong> A törlésre jelölt lapnak[[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|van allapja|$1 vannak allapjai|51=több mint 50 allapja van}}]].",
        "rollback": "Szerkesztések visszaállítása",
        "rollbacklink": "visszaállítás",
        "rollbacklinkcount": "$1 szerkesztés visszaállítása",
        "sp-contributions-newonly": "Csak az új oldalt létrehozó szerkesztéseket mutassa",
        "sp-contributions-hideminor": "Apró szerkesztések elrejtése",
        "sp-contributions-submit": "Keresés",
+       "sp-contributions-outofrange": "Nem sikerült eredményt megjeleníteni. A kért IP-tartomány nagyobb, mint a CIDR korlátja ($1).",
        "whatlinkshere": "Mi hivatkozik erre",
        "whatlinkshere-title": "A(z) „$1” lapra hivatkozó lapok",
        "whatlinkshere-page": "Lap:",
        "import-nonewrevisions": "Nincs változat importálva (mindet korábban importálták vagy a hiba miatt program kihagyta).",
        "xml-error-string": "$1 a(z) $2. sorban, $3. oszlopban ($4. bájt): $5",
        "import-upload": "XML-adatok feltöltése",
-       "import-token-mismatch": "Elveszett a munkamenetadatok.\n\nLehet, hogy ki vagy jelentkezve. <strong>Kérjük, győződj meg róla, hogy még mindig be vagy jelentkezve, majd próbálkozz újra!</strong> Ha ez továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni, és ellenőrizd, hogy a böngésződ elfogad sütiket erről az oldalról.",
+       "import-token-mismatch": "Elvesztek a munkamenetadatok.\n\nLehet, hogy ki vagy jelentkezve. '''Kérjük, győződj meg róla, hogy még mindig be vagy jelentkezve, majd próbálkozz újra!''' Ha ez továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni, és ellenőrizd, hogy a böngésződ elfogad sütiket erről az oldalról.",
        "import-invalid-interwiki": "A kijelölt wikiből nem lehet importálni.",
        "import-error-edit": "„$1” lap nem került importálásra, mert nem szerkesztheted azt.",
        "import-error-create": "„$1” lap nem került importálásra, mert nem hozhatod létre azt.",
        "fileduplicatesearch-noresults": "Nincs „$1” nevű fájl.",
        "specialpages": "Speciális lapok",
        "specialpages-note-top": "Jelmagyarázat",
+       "specialpages-note-restricted": "* Mindenki számára elérhető speciális lapok.\n* <span class=\"mw-specialpagerestricted\">Korlátozott hozzáférésű speciális lapok.</span>",
        "specialpages-group-maintenance": "Állapotjelentések",
        "specialpages-group-other": "További speciális lapok",
        "specialpages-group-login": "Bejelentkezés / fiók létrehozása",
        "compare-revision-not-exists": "A megadott lapváltozat nem létezik.",
        "diff-form": "Eltérések",
        "diff-form-submit": "Változtatások megjelenítése",
+       "permanentlink": "Állandó hivatkozás",
+       "permanentlink-revid": "Változat azonosító",
        "dberr-problems": "Sajnáljuk, de az oldallal technikai problémák vannak.",
        "dberr-again": "Várj néhány percet, majd frissítsd az oldalt.",
        "dberr-info": "(Nem sikerült kapcsolódni az adatbázishoz: $1)",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-group-canadianaboriginal": "Kanadai bennszülött jelek",
        "special-characters-title-endash": "kötőjel",
        "special-characters-title-emdash": "hosszú kötőjel",
        "special-characters-title-minus": "minusz jel",
index 641281f..0ba17b7 100644 (file)
        "listfiles_size": "サイズ",
        "listfiles_description": "概要",
        "listfiles_count": "版数",
-       "listfiles-show-all": "画像の古い版を含める",
+       "listfiles-show-all": "ファイルの古い版を含める",
        "listfiles-latestversion": "現在の版",
        "listfiles-latestversion-yes": "はい",
        "listfiles-latestversion-no": "いいえ",
index 222bff8..e5cf90e 100644 (file)
        "listfiles_size": "크기",
        "listfiles_description": "설명",
        "listfiles_count": "버전",
-       "listfiles-show-all": "그림ì\9d\98 ê³¼ê±° í\8c\90 í\8f¬í\95¨",
+       "listfiles-show-all": "í\8c\8cì\9d¼ì\9d\98 ê³¼ê±° í\8c\90 í\8f¬í\95¨",
        "listfiles-latestversion": "현재 판",
        "listfiles-latestversion-yes": "예",
        "listfiles-latestversion-no": "아니오",
index 663b23f..9d4e883 100644 (file)
        "listfiles_size": "Wielkość",
        "listfiles_description": "Opis",
        "listfiles_count": "Wersje",
-       "listfiles-show-all": "Uwzględnij starsze wersje zdjęć",
+       "listfiles-show-all": "Uwzględnij starsze wersje plików",
        "listfiles-latestversion": "Aktualna wersja",
        "listfiles-latestversion-yes": "Tak",
        "listfiles-latestversion-no": "Nie",
index d1c9de9..5097c2b 100644 (file)
        "parser-template-loop-warning": "Ciclo de predefinições detectado: [[$1]]",
        "template-loop-category": "Páginas com loops de predefinição",
        "template-loop-category-desc": "A página contém um loop de predefinição, ou seja, uma predefinição que se chama recursivamente.",
+       "template-loop-warning": "<strong>Aviso:</strong> Esta página chama [[:$1]] o que causa um ciclo infinito de predefinições (uma chamada recursiva sem término).",
        "parser-template-recursion-depth-warning": "O limite de profundidade de recursividade de predefinição foi ultrapassado ($1)",
        "language-converter-depth-warning": "O limite de profundidade do conversor de línguas excedeu a ($1)",
        "node-count-exceeded-category": "Páginas em que o total de nós é excedido",
        "timezoneregion-indian": "Oceano Índico",
        "timezoneregion-pacific": "Oceano Pacífico",
        "allowemail": "Permitir que outros usuários me enviem e-mails",
+       "email-blacklist-label": "Proibir que esses usuários me enviem e-mails:",
        "prefs-searchoptions": "Busca",
        "prefs-namespaces": "Espaços nominais",
        "default": "padrão",
        "rcfilters-watchlist-markseen-button": "Marque todas as mudanças como visto",
        "rcfilters-watchlist-edit-watchlist-button": "Edite sua lista de páginas vigiadas",
        "rcfilters-watchlist-showupdated": "As alterações nas páginas que você não visitou desde as mudanças ocorridas estão em <strong>negrito</strong>, com marcadores sólidos.",
+       "rcfilters-preference-label": "Ocultar a versão melhorada das Mudanças Recentes",
+       "rcfilters-preference-help": "Reverte o redesenho da interface de 2017 e todas as ferramentas adicionadas na altura e desde então.",
        "rcnotefrom": "Abaixo {{PLURAL:$5|é a mudança|são as mudanças}} desde <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
        "rclistfromreset": "Redefinir seleção da data",
        "rclistfrom": "Mostrar as novas alterações a partir das $2 de $3",
        "file-deleted-duplicate-notitle": "Um arquivo idêntico a este foi anteriormente excluído, e o título foi suprimido. Você deve comunicar com alguém capaz de visualizar dados suprimidos, para verificar a situação antes de enviá-lo novamente.",
        "uploadwarning": "Aviso de envio",
        "uploadwarning-text": "Modifique a descrição do arquivo abaixo e tente novamente.",
+       "uploadwarning-text-nostash": "Por favor, recarregue o arquivo, modifique a descrição abaixo e tente novamente.",
        "savefile": "Salvar arquivo",
        "uploaddisabled": "Envio de arquivos desativado.",
        "copyuploaddisabled": "O upload por URL encontra-se desativado.",
        "listfiles_size": "Tamanho",
        "listfiles_description": "Descrição",
        "listfiles_count": "Versões",
-       "listfiles-show-all": "Incluir versões antigas das imagens",
+       "listfiles-show-all": "Inclua versões antigas de arquivos",
        "listfiles-latestversion": "Versão atual",
        "listfiles-latestversion-yes": "Sim",
        "listfiles-latestversion-no": "Não",
        "sp-contributions-newonly": "Mostrar somente as criações de páginas",
        "sp-contributions-hideminor": "Ocultar edições menores",
        "sp-contributions-submit": "Pesquisar",
+       "sp-contributions-outofrange": "Não é possível mostrar nenhum resultado. A gama de endereços IP pedida é maior do que o limite /$1 do intervalo CIDR.",
        "whatlinkshere": "Páginas afluentes",
        "whatlinkshere-title": "Páginas que têm links para \"$1\"",
        "whatlinkshere-page": "Página:",
index 63e7f91..77b6045 100644 (file)
        "sort-descending": "لهندڙ ترتيب ڏيو",
        "sort-ascending": "چڙهندڙ ترتيب ڏيو",
        "nstab-main": "صفحو",
-       "nstab-user": "واھپ صفحو",
+       "nstab-user": "واھپ (يوزر) صفحو",
        "nstab-media": "ذريعاتي صفحو",
        "nstab-special": "خاص صفحو",
        "nstab-project": "رٿائي صفحو",
        "cannotlogoutnow-title": "ھاڻي خارج نٿو ٿي سگھجي",
        "cannotlogoutnow-text": "$1 استعمال ڪرڻ دوران خارج ٿيڻ ممڪن نہ آھي.",
        "welcomeuser": "ڀلي ڪري آيا، $1!",
-       "yourname": "واھپ-نانءُ:",
-       "userlogin-yourname": "واھپ-نانءُ",
+       "yourname": "واھپ (يوزر)-نانءُ:",
+       "userlogin-yourname": "واھپ (يوزر)-نانءُ",
        "userlogin-yourname-ph": "پنھنجو يوزرنانءُ ڄاڻايو",
-       "createacct-another-username-ph": "واھپ-نانءُ ڄاڻايو",
+       "createacct-another-username-ph": "واھپ (يوزر)-نانءُ ڄاڻايو",
        "yourpassword": "ڳجھولفظ:",
        "userlogin-yourpassword": "ڳجھولفظ",
        "userlogin-yourpassword-ph": "پنهنجو ڳجھولفظ ڄاڻايو",
        "createacct-benefit-body2": "{{PLURAL:$1|صفحو|صفحا}}",
        "createacct-benefit-body3": "ھاڻوڪا {{PLURAL:$1|ڀاڱيدار}}",
        "badretype": "توهان جو ڄاڻايل ڳجھولفظ درست نہ آهي.",
-       "usernameinprogress": "ان واھپ-نانءَ لاءِ کاتو اڳ ۾ ئي تياريءَ هيٺ آهي.\nمهرباني ڪري انتظار فرمايو.",
-       "userexists": "ڄاڻايل واھپ-نانءُ اڳ ۾ ئي استعمال هيٺ آهي. مهرباني ڪري ڪو ٻيو واھپ-نانءُ چونڊيو.",
+       "usernameinprogress": "ان واھپ (يوزر)-نانءَ لاءِ کاتو اڳ ۾ ئي تياريءَ هيٺ آهي.\nمهرباني ڪري انتظار فرمايو.",
+       "userexists": "ڄاڻايل واھپ-نانءُ اڳ ۾ ئي استعمال هيٺ آهي. مهرباني ڪري ڪو ٻيو واھپ (يوزر)-نانءُ چونڊيو.",
        "loginerror": "داخل ٿيڻ ۾ چُڪَ",
        "createacct-error": "کاتو کولڻ ۾ چُڪَ",
        "createaccounterror": "کاتو کُلي نہ سگھيو: $1",
        "nocookiesnew": "يُوزر کاتو کلي چڪو، پر توهان داخل نہ ٿيا آهيو. يُوزرس کي داخل ڪرڻ لاءِ {{SITENAME}} ڪوڪيز استعمال ڪندي آهي. توهان ڪوڪيز کي ناڪاره بڻائي رکيو آهي. داخل ٿيڻ لاءِ ڪوڪيز کي ڪارائتو بڻايو.",
        "nocookieslogin": "يُوزرس کي داخل ڪرڻ لاءِ {{SITENAME}} ڪوڪيز استعمال ڪندي آهي.\nتوھان ڪوڪيز کي ناڪاره بڻائي رکيو آھي.\nداخل ٿيڻ لاءِ ڪوڪيز کي ڪارائتو بڻايو.",
-       "noname": "توهان جو ڄاڻايل واھپ-نانءُ ناقابل ڪار آهي.",
+       "noname": "توهان جو ڄاڻايل واھپ (يوزر)-نانءُ ناقابل ڪار آهي.",
        "loginsuccesstitle": "داخل ٿيل",
        "loginsuccess": "'''هاڻي توهان {{SITENAME}} تي بطور \"$1\" داخل ٿيل آهيو.'''",
        "nosuchuser": "\"$1\" نالي سان ڪو بہ يوزر نہ آهي.\nننڍن وڏن اکرن ۾ امتياز ڪرڻ لازمي آهي. \nهِجي چڪاسيو، يا [[Special:CreateAccount|نئون کاتو تخليق ڪريو]]",
-       "nosuchusershort": "\"$1\" نالي ڪو بہ واھپ ناهي.\nهِجي جي پڪ ڪندا.",
-       "nouserspecified": "توهان کي ڪو واھپ-نان‎ءُ ڄاڻائڻو پوندو.",
+       "nosuchusershort": "\"$1\" نالي ڪو بہ واھپ (يوزر) ناهي.\nهِجي جي پڪ ڪندا.",
+       "nouserspecified": "توهان کي ڪو واھپ (يوزر)-نان‎ءُ ڄاڻائڻو پوندو.",
        "login-userblocked": "هيءُ يُوزر بندشيل آهي. داخل ٿيڻ جي اجازت نٿي ڏجي.",
        "wrongpassword": "ڏنل ڳجھولفظ غير درست آهي. مھرباني ڪري ٻيھر ڪوشش ڪندا.",
        "wrongpasswordempty": "ڏنل ڳجھولفظ خالي هو.\nمهرباني ڪري وري ڪوشش ڪندا.",
        "createaccount-title": "{{SITENAME}} تي کاتو کولڻ",
        "login-throttled": "توهان تازو ئي داخل ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.",
        "login-abort-generic": "توهان جو داخل ٿيڻ ناڪام ويو - بند ڪيل",
-       "login-migrated-generic": "توهان جو کاتو لڏي چڪو آهي، ۽ هن وڪيءَ تي توهان جو واھپ-نان‎ءُ هاڻي وجود نٿو رکي.",
+       "login-migrated-generic": "توهان جو کاتو لڏي چڪو آهي، ۽ هن وڪيءَ تي توهان جو واھپ (يوزر)-نان‎ءُ هاڻي وجود نٿو رکي.",
        "loginlanguagelabel": "ٻولي: $1",
        "createacct-another-realname-tip": "اصل نالو ڄاڻائڻ اختياري آهي. جيڪڏهن توهان اصل نالو ڄاڻايو ٿا، تہ اهو توهان کي توهان جي ڪم جي مڃتا ڏيڻ لاءِ ڪم آندو ويندو.",
        "pt-login": "داخل ٿيو",
        "passwordreset-text-one": "برقٽپال ذريعي عارضي ڳجھولفظ حاصل ڪرڻ لاءِ هيءُ فارم پُر ڪريو.",
        "passwordreset-disabled": "هن وڪيءَ تي ڳجھولفظ ٻيھر مقرر ڪرڻ وارو چارو غير فعال بڻايو ويو آهي.",
        "passwordreset-emaildisabled": "هن وڪيءَ تي برق‌ٽپال واريون خصوصيتون غير فعال بڻايون ويون آهن.",
-       "passwordreset-username": "واھپ-نانءُ:",
+       "passwordreset-username": "واھپ (يوزر)-نانءُ:",
        "passwordreset-domain": "ميدان:",
        "passwordreset-email": "برقٽپال پتو:",
        "passwordreset-emailtitle": "{{SITENAME}} واري کاتي جا تفصيل",
        "missingcommenttext": "براءِ مھرباني هيٺ پنهنجو تاثر درج ڪندا.",
        "summary-preview": "تت جي پيش نگاھ:",
        "subject-preview": "موضوع جي پيش نگاھ:",
-       "blockedtitle": "واھپ بندشيل آهي.",
+       "blockedtitle": "واھپ (يوزر) بندشيل آهي.",
        "blockedtext": "'''توھان جي يوزرنانءُ يا آءِ پي کي بندشيو ويو آھي.'''\n\nبندش $1 ھني. جڏھن تہ ڄاڻايل سبب ''$2'' آهي.\n\n\n* بندش جو آغاز: $8\n* بندش جو انجام: $6\n* بندش جو هدف: $7\n\nاھڙي روڪ تي بحث ڪرڻ لاءِ توھان $1 يا ڪنھن ٻي [[{{MediaWiki:Grouppage-sysop}}|منتظم]] سان رابطو ڪري سگھو ٿا. جيڪڏهن توھان جو درست [[Special:ترجيحون|کاتو ترجيحون]] ۾ درست برقٽپال پتو درج ٿيل نہ آهي تہ توهان 'هن يوزر کي برقٽپال ڪريو' وارو فيچر نہ ٿا \nYou cannot use the 'e-mail this user' feature unless a valid e-mail address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nاستعمال ڪري سگھو. توھان جو ھاڻوڪو آءِپي پتو $3 آھي، ۽ بندش سڃاڻپ $5 آهي. مھرباني ڪري ڪنھن بہ پڇا ڳاڇا يا لھوچڙ لاءِ انھن مان ڪنھن ھڪ يا ٻنھي جو حوالو ڏيندا.",
        "blockednoreason": "سبب اڻڄاڻايل",
        "whitelistedittext": "صفحا سنوارڻ لاءِ مھرباني ڪري $1.",
        "newarticletext": "توھان اھڙي صفحي جو ڳنڍڻو وٺي ھتي پھتا آھيو، جيڪو اڃا وجود نٿو رکي.\nاھڙو صفحو جوڙڻ لاءِ، ھيٺين دٻي ۾ لکڻ شروع ڪريو (وڌيڪ ڄاڻڻ لاءِ [$1 امدادي صفحو] ڏسندا).\nجي توھان ھتي غلطيءَ ۾ اچي ويا آهيو، تہ رڳو پنھنجي جھانگُوءَ جي <strong>back</strong> بٽڻ تي ٽڙڪ ڪريو.",
        "noarticletext": "في‌الوقت هن صفحي اندر ڪو بہ ٽيڪسٽ نہ آهي.\nتوهان ٻين صفحن ۾ [[Special:Search/{{PAGENAME}}|search ساڳي عنوان جي ڳولا]] ڪري سگھو ٿا،  \n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لاڳاپيل لاگس ۾ ڳوليو]،\nيا [{{fullurl:{{FULLPAGENAME}}|action=edit}} هيءُ صفحو ترميميو]</span>.",
        "noarticletext-nopermission": "ھن وقت ھن صفحي ۾  ڪا بہ لکت نہ آھي.\nتوھان ٻين صفحن ۾ [[Special:Search/{{PAGENAME}}|ھن صفحي جي عنوان سان ڳولا ڪري سگھو ٿا]]، يا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لاڳاپيل لاگس ڳوليو]</span>، پر توھان کي ان جي تخليق ڪرڻ جي اجازت نہ آھي.",
-       "userpage-userdoesnotexist-view": "واھپ کاتو $1 درج ٿيل نہ آهي.",
-       "blocked-notice-logextract": "هيءُ واھپ في‌الحال بندشيل آهي.\nتازو بندش لاگ حوالي طور پيش ڪجي ٿو:",
+       "userpage-userdoesnotexist-view": "واھپ (يوزر) کاتو $1 درج ٿيل نہ آهي.",
+       "blocked-notice-logextract": "هيءُ واھپ (يوزر) في‌الحال بندشيل آهي.\nتازو بندش لاگ حوالي طور پيش ڪجي ٿو:",
        "updated": "(تجديديل)",
        "note": "<strong>نوٽ:</strong>",
        "previewnote": "<strong>هيءَ فقط پيش نگاھ آهي.</strong>\nتوھان جون ترميمون اڃان نہ سانڍيون ويون آھن!",
        "history-feed-description": "وڪي جي هن صفحي جي ترميمي سوانح",
        "history-feed-item-nocomment": "$2 تي $1",
        "rev-deleted-comment": "(ترميمي خلاصو ھٽايل)",
-       "rev-deleted-user": "(واھپ-نانءُ ڊاٿو ويو)",
+       "rev-deleted-user": "(واھپ (يوزر)-نانءُ ڊاٿو ويو)",
        "rev-deleted-event": "(لاگ تفصيل هٽايا ويا)",
        "rev-deleted-user-contribs": "[واھپ-نانءُ يا آءِپِي پتو مِٽايو ويو - ڀاڱيدارين مان ترميمون لڪايون ويون]",
        "rev-suppressed-no-diff": "توهان اهو تفاوت ڏسي نہ ٿا سگھو، ڇاڪاڻ تہ ڪا هڪ ترميم <strong> ڊهي چڪي </strong> آهي.",
        "revdelete-hide-image": "فائيل جو مواد لڪايو",
        "revdelete-hide-name": "هدف ۽ نيمپيما لڪايو",
        "revdelete-hide-comment": "ترميم جو تتُ",
-       "revdelete-hide-user": "ايڊيٽر جو واھپ-نانءُ/آءِپِي پتو",
+       "revdelete-hide-user": "ايڊيٽر جو واھپ (يوزر)-نانءُ/آءِپِي پتو",
        "revdelete-hide-restricted": "منتظمن توڙي ٻين کان مليل اعداد دٻايو",
        "revdelete-radio-same": "(نہ بدلايو)",
        "revdelete-radio-set": "لڪل",
        "prefs-skin": "چَمَ",
        "skin-preview": "پيش نگاهہ",
        "datedefault": "بلا ترجيح",
-       "prefs-user-pages": "واھپ صفحو",
+       "prefs-user-pages": "واھپ (يوزر) صفحو",
        "prefs-personal": "يُوزر جو خدوخال",
        "prefs-rc": "تازيون تبديليون",
        "prefs-watchlist": "نظر ۾ فھرست",
        "prefs-files": "فائيلس",
        "prefs-emailconfirm-label": "برقٽپال خاطري:",
        "youremail": "برقٽپال:",
-       "username": "{{GENDER:$1|واھپ-نانءُ}}",
+       "username": "{{GENDER:$1|واھپ (يوزر)-نانءُ}}",
        "prefs-memberingroups": "{{PLURAL:$1|گروھ|گروھن}} جو {{GENDER:$2|رڪن}}:",
        "prefs-registration": "رجسٽريشن جو وقت:",
        "yourrealname": "اصل نالو:",
        "prefs-tokenwatchlist": "ٽوڪن",
        "prefs-diffs": "تفاوت",
        "prefs-help-prefershttps": "هيءَ ترجيح توهان جي ايند داخل ٿيڻ تي عمل ۾ ايندي.",
-       "userrights": "واھپ حق",
-       "userrights-lookup-user": "ڪو واھپ چونڊيو",
-       "userrights-user-editname": "ڪو واھپ-نانءُ ڄاڻايو:",
-       "editusergroup": "واھپ گروھ اتاريو",
+       "userrights": "واھپ (يوزر) حق",
+       "userrights-lookup-user": "ڪو واھپ (يوزر) چونڊيو",
+       "userrights-user-editname": "ڪو واھپ (يوزر)-نانءُ ڄاڻايو:",
+       "editusergroup": "واھپ (يوزر) گروھ لاهيو",
        "userrights-editusergroup": "{{GENDER:$1|يوزر}} گروھ سنواريو",
-       "saveusergroups": "{{GENDER:$1|واھپ}} گروھ سانڍيو",
+       "saveusergroups": "{{GENDER:$1|واھپ (يوزر)}} گروھ سانڍيو",
        "userrights-groupsmember": "برڪن:",
        "userrights-groupsmember-auto": "رڪن واجبي:",
        "userrights-reason": "سبب:",
        "group-sysop": "منتظم",
        "group-bureaucrat": "ڪامورا",
        "group-all": "(سڀ)",
-       "group-user-member": "{{GENDER:$1|واھپ}}",
+       "group-user-member": "{{GENDER:$1|واھپ (يوزر)}}",
        "group-bot-member": "{{GENDER:$1|بوٽ}}",
        "group-sysop-member": "{{GENDER:$1|منتظم}}",
        "group-bureaucrat-member": "{{GENDER:$1|ڪامورو}}",
        "right-import": "ٻين وڪيز کان صفحا درآمديو",
        "right-importupload": "ڪو فائيل چاڙهي صفحا درآمديو",
        "right-mergehistory": "صفحن جي سوانح سنواريو",
-       "right-userrights": "سڀ واھپ حق سنواريو",
+       "right-userrights": "سڀ واھپ (يوزر) حق سنواريو",
        "right-userrights-interwiki": "هن وڪي جي يوزرس جا حق ترميم ڪريو",
        "right-siteadmin": "اعدادخانو بنديو ۽ کوليو",
        "right-override-export-depth": "5ئين اونهائيءَ تائين ڳنڍيل صفحن سميت صفحا برآمديو",
        "grant-basic": "بنيادي حقَ",
        "grant-viewdeleted": "ڊَٺَلَ فائيلَ ۽ صفحا ڏسو",
        "grant-viewmywatchlist": "پنهنجي نظرھيٺ فھرست ڏسو",
-       "newuserlogpage": "واھپ تخليق لاگ",
+       "newuserlogpage": "واھپ (يوزر) تخليق لاگ",
        "rightslog": "يُوزر حق لاگ",
        "action-read": "هي صفحو پڙهو",
        "action-edit": "هن صفحي کي سسنواريو",
        "action-createpage": "ھي صفحو تخليق ڪريو",
        "action-createtalk": "ھي مباحثي صفحو تخليق ڪريو",
-       "action-createaccount": "ھي واھپ کاتو سرجيو",
+       "action-createaccount": "ھي واھپ (يوزر) کاتو سرجيو",
        "action-history": "هن صفحي جي سوانح ڏسو",
        "action-minoredit": "هن ترميم کي معمولي طور نشان لڳايو",
        "action-move": "هيءَُ صفحو چوريو",
        "action-importupload": "ڪو فائيل چاڙهي صفحا درآمديو",
        "action-unwatchedpages": "اڻ ڏٺل صفحن جي فھرست ڏسو",
        "action-mergehistory": "هن صفحي جي سوانح ضم ڪريو",
-       "action-userrights": "سڀ واھپ حق سنواريو",
+       "action-userrights": "سڀ واھپ (يوزر) حق سنواريو",
        "action-userrights-interwiki": "ٻين وڪيز جي يوزرس جا حق ترميم ڪريو",
        "action-siteadmin": "اعدادخاني کي بند ڪريو يا کوليو",
        "action-sendemail": "برقٽپال اماڻيو",
        "listfiles_thumb": "ٽِڪِلِي",
        "listfiles_date": "تاريخ",
        "listfiles_name": "نالو",
-       "listfiles_user": "واھپ",
+       "listfiles_user": "واپرائيندڙ (يوزر)",
        "listfiles_size": "ماپَ",
        "listfiles_description": "تشريح",
        "listfiles_count": "ورزن",
        "filehist-thumb": "آڱوٺي ننھن",
        "filehist-thumbtext": "$1 جي نظرثاني لاءِ تصويري نشان",
        "filehist-nothumb": "ٽِڪِلِي اڻموجود",
-       "filehist-user": "واھپ",
+       "filehist-user": "واپرائيندڙ (يوزر)",
        "filehist-dimensions": "ماپَ",
        "filehist-filesize": "فائيل ماپ",
        "filehist-comment": "تاثر",
        "protectedpages-reason": "سبب",
        "protectedpages-submit": "صفحا ڏيکاريو",
        "protectedpages-unknown-timestamp": "اڻڄاتل",
-       "protectedpages-unknown-performer": "نامعلوم واھپ",
+       "protectedpages-unknown-performer": "نامعلوم واھپ (يوزر)",
        "protectedtitles": "تحفظيل عنوان",
        "protectedtitles-submit": "عنوان ڏيکاريو",
-       "listusers": "واھپ فهرست",
+       "listusers": "واھپ (يوزر) فهرست",
        "newpages": "نوان صفحا",
        "newpages-submit": "ڏيکاريو",
-       "newpages-username": "واھپ-نانءُ:",
+       "newpages-username": "واھپ (يوزر)-نانءُ:",
        "ancientpages": "قديم ترين صفحا",
        "move": "چوريو",
        "movethispage": "هيءُ صفحو چوريو",
        "sp-deletedcontributions-contribs": "ڀاڱيداريون",
        "linksearch-ns": "نانءُپولار",
        "linksearch-ok": "ڳوليو",
-       "listusersfrom": "تي شروع ڪندڙ واھپ ڏيکاريو:",
+       "listusersfrom": "تي شروع ڪندڙ واھپ (يوزر) ڏيکاريو:",
        "listusers-submit": "ڏيکاريو",
        "listusers-noresult": "ڪو بہ يُوزر نہ لڌو",
        "listusers-blocked": "(بندشيل)",
        "activeusers-excludegroups": "گروھن سان تعلق رکندڙ گروھ ڇڏيو:",
        "activeusers-noresult": "ڪي بہ يُوزرس نہ لڌا.",
        "activeusers-submit": "سرگرم يُوزرس ڏيکاريو",
-       "listgrouprights": "واھپ گروھ جا حق",
+       "listgrouprights": "واپرائيندڙ گروھ جا حق",
        "listgrouprights-group": "گروهہ:",
        "listgrouprights-rights": "حق",
        "listgrouprights-members": "(رڪنن جي فھرست)",
        "emailuser": "هن واھپ کي برق ٽپال اماڻيو",
        "emailuser-title-target": "ھن {{GENDER:$1|واھپ}} ڏانھن برقٽپال موڪليو",
        "emailuser-title-notarget": "واھپ ڏانھن برقٽپال اماڻيو",
-       "usermaildisabled": "واھپ برقٽپال ناقابلِڪار بڻيل",
+       "usermaildisabled": "واھپ (يوزر) برقٽپال ناقابلِڪار بڻيل",
        "usermaildisabledtext": "توهان هن وڪي تي ٻين يوزرس ڏانهن ايميل نٿا موڪلي سگھو",
        "noemailtitle": "برقٽپال پتو ناھي",
        "noemailtext": "هن واھپ ڪو بہ قابلِڪار برقٽپال پتو نہ ڄاڻايو آهي.",
-       "emailusername": "واھپ-نانءُ:",
+       "emailusername": "واھپ (يوزر)-نانءُ:",
        "emailusernamesubmit": "جمع ڪرايو",
        "emailfrom": "طرفان:",
        "emailto": "ڏانهن:",
        "watching": "نظر ۾ رکندي...",
        "unwatching": "نظر مان ڪڍندي...",
        "enotif_reset": "سڀ گھميل صفحن تي نشان لڳايو",
-       "enotif_impersonal_salutation": "{{SITENAME}} واھپ",
+       "enotif_impersonal_salutation": "{{SITENAME}} واھپ (يوزر)",
        "enotif_lastdiff": "هي تبديلي ڏسڻ لاءِ، $1 ڏسو",
        "enotif_anon_editor": "گمنام يُوزر $1",
        "created": "ٺهي چڪو",
        "tooltip-invert": "هن دٻي تي نشان لڳايو صحفن ۾ تبديليون لڪائڻ لاءِ چونڊيل نانءَپولار مان (۽ لاڳاپيل نانءُپولار جيڪڏهن نشان لڳل)",
        "namespace_association": "منسلڪ نانءُپولار",
        "blanknamespace": "(مُک)",
-       "contributions": "{{GENDER:$1|واھپ}} جون ڀاڱيداريون",
+       "contributions": "{{GENDER:$1|واھپ(يوزر)}} جون ڀاڱيداريون",
        "contributions-title": "يُوزر ڀاڱيداريون براءِ $1",
        "mycontris": "ڀاڱيداريون",
        "anoncontribs": "ڀاڱيداريون",
        "sp-contributions-newbies-sub": "نون کاتن لاءِ",
        "sp-contributions-newbies-title": "نون کاتن جي لاءِ يوزر جون ڀاڱيداريون",
        "sp-contributions-blocklog": "بندش لاگ",
-       "sp-contributions-deleted": "ڊاٿل {{GENDER:$1|واھپ}} ڀاڱيداريون",
+       "sp-contributions-deleted": "ڊاٿل {{GENDER:$1|واھپ (يوزر)}} ڀاڱيداريون",
        "sp-contributions-uploads": "چاڙھَ",
        "sp-contributions-logs": "لاگس",
        "sp-contributions-talk": "ڳالھ",
        "sp-contributions-userrights": "{{GENDER:$1|يوُزر}} حقن جي سنڀال",
        "sp-contributions-search": "ڀاڱيدارين لاءِ ڳولا ڪريو",
-       "sp-contributions-username": "آءِپي پتو يا واھپ-نانءُ:",
+       "sp-contributions-username": "آءِپي پتو يا واھپ (يوزر)-نانءُ:",
        "sp-contributions-submit": "ڳوليو",
        "whatlinkshere": "هتان ڇا ڳنڍيل آهي",
        "whatlinkshere-title": "\"$1\" سان ڳنڍيندڙ صفحا",
        "whatlinkshere-submit": "هلو",
        "block": "يُوزر کي بندشيو",
        "unblock": "يُوزر کي اڻبندشيو",
-       "blockip": "{{GENDER:$1|واھپ}} تي بندش وجھو",
+       "blockip": "{{GENDER:$1|واھپيندڙ (يوزر)}} تي بندش وجھو",
        "blockip-legend": "يُوزر کي بندشيو",
        "ipbexpiry": "اختتام:",
        "ipbreason": "سبب:",
        "unblocklogentry": "$1 تان بندش هٽائي وئي",
        "block-log-flags-anononly": "فقط نامعلوم يوزرس",
        "block-log-flags-noemail": "برقٽپال غير فعال",
-       "block-log-flags-hiddenname": "واھپ-نانءُ لڪل",
+       "block-log-flags-hiddenname": "واھپ (يوزر)-نانءُ لڪل",
        "ipb_already_blocked": "\"$1\" اڳ ۾ ئي بندشيل آهي.",
        "ipbnounblockself": "توهان پنهنجو پاڻ تان بندش هٽائي نہ ٿا سگھو.",
        "lockdb": "اعدادخاني کي بنديو",
        "import-upload-filename": "فائيل نانءُ:",
        "import-comment": "تاثر:",
        "importlogpage": "درآمد لاگ",
-       "tooltip-pt-userpage": "{{GENDER:|توھانجو واھپ}} صفحو",
-       "tooltip-pt-mytalk": "{{GENDER:|توھانجو}} واھپ صفحو",
+       "tooltip-pt-userpage": "{{GENDER:|توھانجو واھپ (يوزر)}} صفحو",
+       "tooltip-pt-mytalk": "{{GENDER:|توھانجو}} واھپ (يوزر) صفحو",
        "tooltip-pt-preferences": "{{GENDER:|توھانجون}} ترجيحون",
        "tooltip-pt-watchlist": "صفحن جي فھرست جيڪي توھان تبديلين لاءِ نظر ۾ رکيا آھن",
        "tooltip-pt-mycontris": "{{GENDER:|توھانجي}} ڀاڱيدارين جي فھرست",
        "tooltip-t-whatlinkshere": "ھتان ڳنڍيل سمورن وڪي صفحن جي فھرست",
        "tooltip-t-recentchangeslinked": "ويجھڙائيءَ ۾ صفحن ۾ ٿيل تبديليون هن صفحي سان ڳنڍيل آهن",
        "tooltip-feed-atom": "هن صفحي لاءِ ايٽم فيڊ",
-       "tooltip-t-contributions": "{{GENDER:$1|ھن واھپ}} جي ڀاڱيدارين جي فھرست",
-       "tooltip-t-emailuser": "{{GENDER:$1|ھن واھپ}} ڏانھن برقٽپال موڪليو",
+       "tooltip-t-contributions": "{{GENDER:$1|ھن واھپ (يوزر)}} جي ڀاڱيدارين جي فھرست",
+       "tooltip-t-emailuser": "{{GENDER:$1|ھن واھپ (يوزر)}} ڏانھن برقٽپال موڪليو",
        "tooltip-t-upload": "فائيل چاڙهيو",
        "tooltip-t-specialpages": "سڀني خاص صفحن جي فھرست",
        "tooltip-t-print": "هن صفحي جو ڇاپائتو پرت",
        "htmlform-cloner-delete": "هٽايو",
        "htmlform-title-not-exists": "$1 وجود نٿو رکي.",
        "logentry-delete-delete": "$1 {{GENDER:$2|ڊاٿو}} صفحو $3",
-       "revdelete-uname-hid": "واھپ-نانءُ لڪل",
+       "revdelete-uname-hid": "واھپ (يوزر)-نانءُ لڪل",
        "logentry-move-move": "$1 {{GENDER:$2|چوريو}} صفحو $3 ڏانهن $4",
-       "logentry-newusers-create": "واھپ کاتو $1 {{GENDER:$2|سرجيو ويو}}",
+       "logentry-newusers-create": "واھپ (يوزر) کاتو $1 {{GENDER:$2|سرجيو ويو}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|چاڙهيو}} $3",
        "rightsnone": "(ڪو بہ نہ)",
        "feedback-back": "پوئتي",
index f66a7a9..f88ba4b 100644 (file)
        "timezoneregion-indian": "Samudra Indonésia",
        "timezoneregion-pacific": "Samudra Pasifik",
        "allowemail": "Buka berkas pikeun nampa surélék ti nu séjén",
+       "email-blacklist-label": "Larang ieu pamaké ngirim surélék ka kuring:",
        "prefs-searchoptions": "Paluruh",
        "prefs-namespaces": "Ngaranspasi",
        "default": "ti dituna",
        "backend-fail-read": "Teu bisa maca berkas $1.",
        "backend-fail-create": "Teu bisa nulis berkas \"$1\".",
        "backend-fail-maxsize": "Teu bisa nulis berkas \"$1\" kusabab leuwih ti {{PLURAL:$2|hiji bit|$2 bit}}.",
+       "backend-fail-synced": "Berkas \"$1\" mah aya dina kaayaan teu konsistén di panyimpenan internal",
        "backend-fail-connect": "Teu bisa nyambungkeun kana panyimpenan backend \"$1\".",
        "backend-fail-internal": "Aya kasalahan nu teu dipikawanoh di backend panyimpenan \"$1\".",
        "backend-fail-contenttype": "Teu bisa nangtukeun tipeu eusi berkas anu badé disimpen di \"$1\".",
+       "filejournal-fail-dbconnect": "Teu bisa nyambung ka basisdata jurnal pikeun panyimpenan ''backend'' \"$1\".",
+       "filejournal-fail-dbquery": "Teu bisa nganyarkeun basisdata jurnal pikeun panyimpenan ''backend'' \"$1\".",
        "lockmanager-notlocked": "Teu bisa muka konci \"$1\" kusabab teu dikonci.",
        "lockmanager-fail-closelock": "Teu bisa nutup berkas konci pikeun \"$1\".",
        "lockmanager-fail-deletelock": "Teu bisa ngahapus berkas konci pikeun \"$1\".",
        "lockmanager-fail-acquirelock": "Teu bisa meunang pangoncian pikeun \"$1\"",
        "lockmanager-fail-openlock": "Teu bisa muka berkas konci pikeun \"$1\".",
        "lockmanager-fail-releaselock": "Teu bisa ngaleupaskeun konci pikeun \"$1\".",
+       "lockmanager-fail-db-bucket": "Teu bisa ngagero konci basis data nu cukup dina karanjang $1.",
        "lockmanager-fail-db-release": "Teu bisa ngaleupaskeun konci dina databés $1.",
        "lockmanager-fail-svr-acquire": "Gagal nyokot konci di servér $1.",
        "lockmanager-fail-svr-release": "Teu bisa ngaleupaskeun konci dina server $1.",
        "uploadstash-errclear": "Mersihan berkas nu garagal.",
        "uploadstash-refresh": "Nyegerken deui daptar berkas",
        "uploadstash-thumbnail": "tempo miniatur",
+       "uploadstash-exception": "Teu bisa nyimpen unjalan di panyimpenan ($1): \"$2\".",
        "invalid-chunk-offset": "Opsét potongan teu valid",
        "img-auth-accessdenied": "Aksés ditolak",
+       "img-auth-badtitle": "Teu bisa nyieun judul nu valid tina \"$1\".",
+       "img-auth-nologinnWL": "Anjeun teu asup log sarta \"$1\" teu dina daptar bodas.",
        "img-auth-nofile": "Berkas \"$1\" henteu aya.",
+       "img-auth-isdir": "Anjeun nyoba ngaksés diréktori \"$1\".\nNgan aksés berkas wungkul nu diwenangkeun.",
        "img-auth-streaming": "Palidan \"$1\".",
        "img-auth-noread": "Pamaké teu boga kawenangan maca \"$1\".",
        "http-invalid-url": "URL teu bener: $1",
        "ipboptions": "2 jam:2 hours,sapoé:1 day,3 poé:3 days,saminggu:1 week,2 minggu:2 weeks,sabulan:1 month,3 bulan:3 months,6 bulan:6 months,sataun:1 year,tanpa wates:infinite",
        "ipbhidename": "Sumputkeun ngaran pamaké tina éditan jeung daptar pamaké",
        "ipbwatchuser": "Awaskeun kaca pamaké jeung kaca obrolan pamaké ieu",
+       "ipb-disableusertalk": "Cegah ieu pamaké pikeun ngédit kaca obrolan manéhns sorangan nalika dipeunpeuk",
        "ipb-change-block": "Peungpeuk deui pamaké kalawan sét konfigurasi ieu",
        "ipb-confirm": "Konfirmasi peungpeuk",
        "badipaddress": "Alamat IP teu sah",
        "blockipsuccesssub": "Meungpeuk geus hasil",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] geus dipeungpeuk.<br />\nTempo [[Special:BlockList|daptar peungpeukan]] pikeun niténan deui pameungpeukan.",
+       "ipb-blockingself": "Anjeun rék meungpeuk manéh! Yakin yeuh rék ngalakukeun kitu?",
        "ipb-edit-dropdown": "Édit alesan meungpeuk",
        "ipb-unblock-addr": "Buka peungpeuk $1",
        "ipb-unblock": "Nyabut peungpeuk pamaké atawa alamat IP",
        "blocklogpage": "Log_peungpeuk",
        "blocklog-showlog": "Ieu pamaké saméméhna geus kungsi dipeungpeuk.\nPikeun rujukan, logna dipidangkeun di handap ieu:",
        "blocklogentry": "meungpeuk [[$1]] nepi ka $2 $3",
-       "blocklogtext": "Ieu mangrupa log peta meungpeuk jeung muka peungpeuk pamaké, teu kaasup alamat IP nu dipeungpeukna otomatis. Tempo [[Special:BlockList|daptar peungpeuk IP]] pikeun daptar cegahan jeung peungpeuk.",
+       "reblock-logentry": "ngarobah peungpeukan [[$1]] kalawan waktu kadaluwarsa $2 $3",
+       "blocklogtext": "Ieu mangrupa log peta meungpeuk jeung muka peungpeuk pamaké, teu kaasup alamat IP nu dipeungpeukna otomatis. Tempo [[Special:BlockList|daptar peungpeuk]] pikeun daptar cegahan jeung peungpeuk.",
        "unblocklogentry": "peungpeuk dibuka \"$1\"",
        "block-log-flags-anononly": "pamaké anonim wungkul",
        "block-log-flags-nocreate": "teu bisa nyieun akun",
        "movenosubpage": "Ieu kaca teu boga subkaca.",
        "movereason": "Alesan:",
        "revertmove": "balikkeun",
-       "delete_and_move_text": "==Merlukeun hapusan==\n\nArtikel nu dituju \"[[:$1]]\" geus aya. Badé dihapus baé sangkan bisa mindahkeun?",
+       "delete_and_move_text": "Kaca nu ditojo \"[[:$1]]\", geus eusian.\nAnjeun rék mupusna pikeun méré lolongkran keur pangalihan?",
        "delete_and_move_confirm": "Enya, hapus kaca éta",
-       "delete_and_move_reason": "Hapus sangkan bisa mindahkeun",
+       "delete_and_move_reason": "Dipupus pikeun ngantisipasi pangalihan kaca ti \"[[$1]]\"",
        "selfmove": "Judul sumber jeung tujuanana sarua, lain gé mindahkeun atuh!",
        "immobile-source-namespace": "Teu bisa ngalihkeun kaca dina ngaranspasi \"$1\".",
        "immobile-target-namespace": "Teu bisa ngalihkeun kaca ka ngaranspasi \"$1\".",
        "pageinfo-recent-edits": "Jumlah éditan kiwari (dina $1 panungtung)",
        "pageinfo-recent-authors": "Jumlah panulis béda kiwari",
        "pageinfo-magic-words": "{{PLURAL:$1|Sakecap|Kecap}} ajaib ($1)",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|Sakategori|Kategori}} nyamuni ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|Sacitakan|citakan}} nu ditransklusi ($1)",
        "pageinfo-toolboxlink": "Émbaran kaca",
        "pageinfo-redirectsto": "Alihkeun ka",
        "pageinfo-redirectsto-info": "info",
index 6c4ed6b..69cdba1 100644 (file)
        "tooltip-preferences-save": "ترجیحات محفوظ کریں",
        "tooltip-summary": "مختصر خلاصہ درج کریں",
        "common.css": "body,\ntextarea {\n    font-family: Amiri;\n}",
+       "group-bureaucrat.css": "/* یہاں درج شدہ سی ایس ایس محض مامورین اداری کے لیے فعال رہے گی */",
+       "group-bureaucrat.js": "/* یہاں درج شدہ جاوا اسکرپٹ محض مامورین اداری کے لیے فعال رہے گی */",
        "anonymous": "{{SITENAME}} {{PLURAL:$1|کا|کے}} گمنام {{PLURAL:$1|صارف|صارفین}}",
        "siteuser": "{{SITENAME}} $1 صارف",
        "anonuser": "{{SITENAME}} کا گمنام صارف $1",
index 81e18c9..fd36db1 100644 (file)
@@ -79,6 +79,9 @@ class FindHooks extends Maintenance {
                $nonRecurseDirs = [
                        "$IP/",
                ];
+               $extraFiles = [
+                       "$IP/tests/phpunit/MediaWikiTestCase.php",
+               ];
 
                foreach ( $recurseDirs as $dir ) {
                        $ret = $this->getHooksFromDir( $dir, self::FIND_RECURSIVE );
@@ -90,6 +93,10 @@ class FindHooks extends Maintenance {
                        $potentialHooks = array_merge( $potentialHooks, $ret['good'] );
                        $badHooks = array_merge( $badHooks, $ret['bad'] );
                }
+               foreach ( $extraFiles as $file ) {
+                       $potentialHooks = array_merge( $potentialHooks, $this->getHooksFromFile( $file ) );
+                       $badHooks = array_merge( $badHooks, $this->getBadHooksFromFile( $file ) );
+               }
 
                $documented = array_keys( $documentedHooks );
                $potential = array_keys( $potentialHooks );
@@ -262,6 +269,8 @@ class FindHooks extends Maintenance {
                                $n = [];
                                if ( preg_match_all( '/((?:[^,\(\)]|\([^\(\)]*\))+)/', $match[4], $n ) ) {
                                        $args = array_map( 'trim', $n[1] );
+                                       // remove empty entries from trailing spaces
+                                       $args = array_filter( $args );
                                }
                        } elseif ( isset( $match[3] ) ) {
                                // Found a parameter for Hooks::run,
index 246d9f3..818112f 100644 (file)
@@ -2093,7 +2093,12 @@ return [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.pagesWithProp.css',
        ],
        'mediawiki.special.preferences' => [
-               'scripts' => 'resources/src/mediawiki.special/mediawiki.special.preferences.js',
+               'scripts' => [
+                       'resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js',
+                       'resources/src/mediawiki.special/mediawiki.special.preferences.convertmessagebox.js',
+                       'resources/src/mediawiki.special/mediawiki.special.preferences.tabs.js',
+                       'resources/src/mediawiki.special/mediawiki.special.preferences.timezone.js',
+               ],
                'messages' => [
                        'prefs-tabs-navigation-hint',
                        'prefswarning-warning',
diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js b/resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js
new file mode 100644 (file)
index 0000000..45df37f
--- /dev/null
@@ -0,0 +1,63 @@
+/*!
+ * JavaScript for Special:Preferences: Enable save button and prevent the window being accidentally
+ * closed when any form field is changed.
+ */
+( function ( mw, $ ) {
+       $( function () {
+               var allowCloseWindow;
+
+               // Check if all of the form values are unchanged
+               function isPrefsChanged() {
+                       var inputs = $( '#mw-prefs-form :input[name]' ),
+                               input, $input, inputType,
+                               index, optIndex,
+                               opt;
+
+                       for ( index = 0; index < inputs.length; index++ ) {
+                               input = inputs[ index ];
+                               $input = $( input );
+
+                               // Different types of inputs have different methods for accessing defaults
+                               if ( $input.is( 'select' ) ) {
+                                       // <select> has the property defaultSelected for each option
+                                       for ( optIndex = 0; optIndex < input.options.length; optIndex++ ) {
+                                               opt = input.options[ optIndex ];
+                                               if ( opt.selected !== opt.defaultSelected ) {
+                                                       return true;
+                                               }
+                                       }
+                               } else if ( $input.is( 'input' ) ) { // <input> has defaultValue or defaultChecked
+                                       inputType = input.type;
+                                       if ( inputType === 'radio' || inputType === 'checkbox' ) {
+                                               if ( input.checked !== input.defaultChecked ) {
+                                                       return true;
+                                               }
+                                       } else if ( input.value !== input.defaultValue ) {
+                                               return true;
+                                       }
+                               }
+                       }
+
+                       return false;
+               }
+
+               // Disable the button to save preferences unless preferences have changed
+               // Check if preferences have been changed before JS has finished loading
+               if ( !isPrefsChanged() ) {
+                       $( '#prefcontrol' ).prop( 'disabled', true );
+                       $( '#preferences > fieldset' ).one( 'change keydown mousedown', function () {
+                               $( '#prefcontrol' ).prop( 'disabled', false );
+                       } );
+               }
+
+               // Set up a message to notify users if they try to leave the page without
+               // saving.
+               allowCloseWindow = mw.confirmCloseWindow( {
+                       test: isPrefsChanged,
+                       message: mw.msg( 'prefswarning-warning', mw.msg( 'saveprefs' ) ),
+                       namespace: 'prefswarning'
+               } );
+               $( '#mw-prefs-form' ).submit( $.proxy( allowCloseWindow, 'release' ) );
+               $( '#mw-prefs-restoreprefs' ).click( $.proxy( allowCloseWindow, 'release' ) );
+       } );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.convertmessagebox.js b/resources/src/mediawiki.special/mediawiki.special.preferences.convertmessagebox.js
new file mode 100644 (file)
index 0000000..cee7382
--- /dev/null
@@ -0,0 +1,9 @@
+/*!
+ * JavaScript for Special:Preferences: Check for successbox to replace with notifications.
+ */
+( function ( mw, $ ) {
+       $( function () {
+               var convertmessagebox = require( 'mediawiki.notification.convertmessagebox' );
+               convertmessagebox();
+       } );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.js b/resources/src/mediawiki.special/mediawiki.special.preferences.js
deleted file mode 100644 (file)
index b86f218..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-/*!
- * JavaScript for Special:Preferences
- */
-( function ( mw, $ ) {
-       $( function () {
-               var $preftoc, $preferences, $fieldsets, labelFunc, previousTab,
-                       $tzSelect, $tzTextbox, $localtimeHolder, servertime, allowCloseWindow,
-                       convertmessagebox = require( 'mediawiki.notification.convertmessagebox' );
-
-               labelFunc = function () {
-                       return this.id.replace( /^mw-prefsection/g, 'preftab' );
-               };
-
-               $preftoc = $( '#preftoc' );
-               $preferences = $( '#preferences' );
-
-               $fieldsets = $preferences.children( 'fieldset' )
-                       .attr( {
-                               role: 'tabpanel',
-                               'aria-labelledby': labelFunc
-                       } );
-               $fieldsets.not( '#mw-prefsection-personal' )
-                       .hide()
-                       .attr( 'aria-hidden', 'true' );
-
-               // T115692: The following is kept for backwards compatibility with older skins
-               $preferences.addClass( 'jsprefs' );
-               $fieldsets.addClass( 'prefsection' );
-               $fieldsets.children( 'legend' ).addClass( 'mainLegend' );
-
-               // Make sure the accessibility tip is selectable so that screen reader users take notice,
-               // but hide it per default to reduce interface clutter. Also make sure it becomes visible
-               // when selected. Similar to jquery.mw-jump
-               $( '<div>' ).addClass( 'mw-navigation-hint' )
-                       .text( mw.msg( 'prefs-tabs-navigation-hint' ) )
-                       .attr( 'tabIndex', 0 )
-                       .on( 'focus blur', function ( e ) {
-                               if ( e.type === 'blur' || e.type === 'focusout' ) {
-                                       $( this ).css( 'height', '0' );
-                               } else {
-                                       $( this ).css( 'height', 'auto' );
-                               }
-                       } ).insertBefore( $preftoc );
-
-               /**
-                * It uses document.getElementById for security reasons (HTML injections in $()).
-                *
-                * @ignore
-                * @param {string} name the name of a tab without the prefix ("mw-prefsection-")
-                * @param {string} [mode] A hash will be set according to the current
-                *  open section. Set mode 'noHash' to surpress this.
-                */
-               function switchPrefTab( name, mode ) {
-                       var $tab, scrollTop;
-                       // Handle hash manually to prevent jumping,
-                       // therefore save and restore scrollTop to prevent jumping.
-                       scrollTop = $( window ).scrollTop();
-                       if ( mode !== 'noHash' ) {
-                               location.hash = '#mw-prefsection-' + name;
-                       }
-                       $( window ).scrollTop( scrollTop );
-
-                       $preftoc.find( 'li' ).removeClass( 'selected' )
-                               .find( 'a' ).attr( {
-                                       tabIndex: -1,
-                                       'aria-selected': 'false'
-                               } );
-
-                       $tab = $( document.getElementById( 'preftab-' + name ) );
-                       if ( $tab.length ) {
-                               $tab.attr( {
-                                       tabIndex: 0,
-                                       'aria-selected': 'true'
-                               } ).focus()
-                                       .parent().addClass( 'selected' );
-
-                               $preferences.children( 'fieldset' ).hide().attr( 'aria-hidden', 'true' );
-                               $( document.getElementById( 'mw-prefsection-' + name ) ).show().attr( 'aria-hidden', 'false' );
-                       }
-               }
-
-               // Check for successbox to replace with notifications
-               convertmessagebox();
-
-               // Enable keyboard users to use left and right keys to switch tabs
-               $preftoc.on( 'keydown', function ( event ) {
-                       var keyLeft = 37,
-                               keyRight = 39,
-                               $el;
-
-                       if ( event.keyCode === keyLeft ) {
-                               $el = $( '#preftoc li.selected' ).prev().find( 'a' );
-                       } else if ( event.keyCode === keyRight ) {
-                               $el = $( '#preftoc li.selected' ).next().find( 'a' );
-                       } else {
-                               return;
-                       }
-                       if ( $el.length > 0 ) {
-                               switchPrefTab( $el.attr( 'href' ).replace( '#mw-prefsection-', '' ) );
-                       }
-               } );
-
-               // Jump to correct section as indicated by the hash.
-               // This function is called onload and onhashchange.
-               function detectHash() {
-                       var hash = location.hash,
-                               matchedElement, parentSection;
-                       if ( hash.match( /^#mw-prefsection-[\w]+$/ ) ) {
-                               mw.storage.session.remove( 'mwpreferences-prevTab' );
-                               switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
-                       } else if ( hash.match( /^#mw-[\w-]+$/ ) ) {
-                               matchedElement = document.getElementById( hash.slice( 1 ) );
-                               parentSection = $( matchedElement ).parent().closest( '[id^="mw-prefsection-"]' );
-                               if ( parentSection.length ) {
-                                       mw.storage.session.remove( 'mwpreferences-prevTab' );
-                                       // Switch to proper tab and scroll to selected item.
-                                       switchPrefTab( parentSection.attr( 'id' ).replace( 'mw-prefsection-', '' ), 'noHash' );
-                                       matchedElement.scrollIntoView();
-                               }
-                       }
-               }
-
-               // In browsers that support the onhashchange event we will not bind click
-               // handlers and instead let the browser do the default behavior (clicking the
-               // <a href="#.."> will naturally set the hash, handled by onhashchange.
-               // But other things that change the hash will also be caught (e.g. using
-               // the Back and Forward browser navigation).
-               // Note the special check for IE "compatibility" mode.
-               if ( 'onhashchange' in window &&
-                       ( document.documentMode === undefined || document.documentMode >= 8 )
-               ) {
-                       $( window ).on( 'hashchange', function () {
-                               var hash = location.hash;
-                               if ( hash.match( /^#mw-[\w-]+/ ) ) {
-                                       detectHash();
-                               } else if ( hash === '' ) {
-                                       switchPrefTab( 'personal', 'noHash' );
-                               }
-                       } )
-                               // Run the function immediately to select the proper tab on startup.
-                               .trigger( 'hashchange' );
-               // In older browsers we'll bind a click handler as fallback.
-               // We must not have onhashchange *and* the click handlers, otherwise
-               // the click handler calls switchPrefTab() which sets the hash value,
-               // which triggers onhashchange and calls switchPrefTab() again.
-               } else {
-                       $preftoc.on( 'click', 'li a', function ( e ) {
-                               switchPrefTab( $( this ).attr( 'href' ).replace( '#mw-prefsection-', '' ) );
-                               e.preventDefault();
-                       } );
-                       // If we've reloaded the page or followed an open-in-new-window,
-                       // make the selected tab visible.
-                       detectHash();
-               }
-
-               // Timezone functions.
-               // Guesses Timezone from browser and updates fields onchange.
-
-               $tzSelect = $( '#mw-input-wptimecorrection' );
-               $tzTextbox = $( '#mw-input-wptimecorrection-other' );
-               $localtimeHolder = $( '#wpLocalTime' );
-               servertime = parseInt( $( 'input[name="wpServerTime"]' ).val(), 10 );
-
-               function minutesToHours( min ) {
-                       var tzHour = Math.floor( Math.abs( min ) / 60 ),
-                               tzMin = Math.abs( min ) % 60,
-                               tzString = ( ( min >= 0 ) ? '' : '-' ) + ( ( tzHour < 10 ) ? '0' : '' ) + tzHour +
-                                       ':' + ( ( tzMin < 10 ) ? '0' : '' ) + tzMin;
-                       return tzString;
-               }
-
-               function hoursToMinutes( hour ) {
-                       var minutes,
-                               arr = hour.split( ':' );
-
-                       arr[ 0 ] = parseInt( arr[ 0 ], 10 );
-
-                       if ( arr.length === 1 ) {
-                               // Specification is of the form [-]XX
-                               minutes = arr[ 0 ] * 60;
-                       } else {
-                               // Specification is of the form [-]XX:XX
-                               minutes = Math.abs( arr[ 0 ] ) * 60 + parseInt( arr[ 1 ], 10 );
-                               if ( arr[ 0 ] < 0 ) {
-                                       minutes *= -1;
-                               }
-                       }
-                       // Gracefully handle non-numbers.
-                       if ( isNaN( minutes ) ) {
-                               return 0;
-                       } else {
-                               return minutes;
-                       }
-               }
-
-               function updateTimezoneSelection() {
-                       var minuteDiff, localTime,
-                               type = $tzSelect.val();
-
-                       if ( type === 'other' ) {
-                               // User specified time zone manually in <input>
-                               // Grab data from the textbox, parse it.
-                               minuteDiff = hoursToMinutes( $tzTextbox.val() );
-                       } else {
-                               // Time zone not manually specified by user
-                               if ( type === 'guess' ) {
-                                       // Get browser timezone & fill it in
-                                       minuteDiff = -( new Date().getTimezoneOffset() );
-                                       $tzTextbox.val( minutesToHours( minuteDiff ) );
-                                       $tzSelect.val( 'other' );
-                                       $tzTextbox.prop( 'disabled', false );
-                               } else {
-                                       // Grab data from the $tzSelect value
-                                       minuteDiff = parseInt( type.split( '|' )[ 1 ], 10 ) || 0;
-                                       $tzTextbox.val( minutesToHours( minuteDiff ) );
-                               }
-
-                               // Set defaultValue prop on the generated box so we don't trigger the
-                               // unsaved preferences check
-                               $tzTextbox.prop( 'defaultValue', $tzTextbox.val() );
-                       }
-
-                       // Determine local time from server time and minutes difference, for display.
-                       localTime = servertime + minuteDiff;
-
-                       // Bring time within the [0,1440) range.
-                       localTime = ( ( localTime % 1440 ) + 1440 ) % 1440;
-
-                       $localtimeHolder.text( mw.language.convertNumber( minutesToHours( localTime ) ) );
-               }
-
-               if ( $tzSelect.length && $tzTextbox.length ) {
-                       $tzSelect.change( updateTimezoneSelection );
-                       $tzTextbox.blur( updateTimezoneSelection );
-                       updateTimezoneSelection();
-               }
-
-               // Restore the active tab after saving the preferences
-               previousTab = mw.storage.session.get( 'mwpreferences-prevTab' );
-               if ( previousTab ) {
-                       switchPrefTab( previousTab, 'noHash' );
-                       // Deleting the key, the tab states should be reset until we press Save
-                       mw.storage.session.remove( 'mwpreferences-prevTab' );
-               }
-
-               $( '#mw-prefs-form' ).on( 'submit', function () {
-                       var value = $( $preftoc ).find( 'li.selected a' ).attr( 'id' ).replace( 'preftab-', '' );
-                       mw.storage.session.set( 'mwpreferences-prevTab', value );
-               } );
-
-               // Check if all of the form values are unchanged
-               function isPrefsChanged() {
-                       var inputs = $( '#mw-prefs-form :input[name]' ),
-                               input, $input, inputType,
-                               index, optIndex,
-                               opt;
-
-                       for ( index = 0; index < inputs.length; index++ ) {
-                               input = inputs[ index ];
-                               $input = $( input );
-
-                               // Different types of inputs have different methods for accessing defaults
-                               if ( $input.is( 'select' ) ) {
-                                       // <select> has the property defaultSelected for each option
-                                       for ( optIndex = 0; optIndex < input.options.length; optIndex++ ) {
-                                               opt = input.options[ optIndex ];
-                                               if ( opt.selected !== opt.defaultSelected ) {
-                                                       return true;
-                                               }
-                                       }
-                               } else if ( $input.is( 'input' ) ) { // <input> has defaultValue or defaultChecked
-                                       inputType = input.type;
-                                       if ( inputType === 'radio' || inputType === 'checkbox' ) {
-                                               if ( input.checked !== input.defaultChecked ) {
-                                                       return true;
-                                               }
-                                       } else if ( input.value !== input.defaultValue ) {
-                                               return true;
-                                       }
-                               }
-                       }
-
-                       return false;
-               }
-
-               // Disable the button to save preferences unless preferences have changed
-               // Check if preferences have been changed before JS has finished loading
-               if ( !isPrefsChanged() ) {
-                       $( '#prefcontrol' ).prop( 'disabled', true );
-                       $( '#preferences > fieldset' ).one( 'change keydown mousedown', function () {
-                               $( '#prefcontrol' ).prop( 'disabled', false );
-                       } );
-               }
-
-               // Set up a message to notify users if they try to leave the page without
-               // saving.
-               allowCloseWindow = mw.confirmCloseWindow( {
-                       test: isPrefsChanged,
-                       message: mw.msg( 'prefswarning-warning', mw.msg( 'saveprefs' ) ),
-                       namespace: 'prefswarning'
-               } );
-               $( '#mw-prefs-form' ).submit( $.proxy( allowCloseWindow, 'release' ) );
-               $( '#mw-prefs-restoreprefs' ).click( $.proxy( allowCloseWindow, 'release' ) );
-       } );
-}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.tabs.js b/resources/src/mediawiki.special/mediawiki.special.preferences.tabs.js
new file mode 100644 (file)
index 0000000..dcfad27
--- /dev/null
@@ -0,0 +1,165 @@
+/*!
+ * JavaScript for Special:Preferences: Tab navigation.
+ */
+( function ( mw, $ ) {
+       $( function () {
+               var $preftoc, $preferences, $fieldsets, labelFunc, previousTab;
+
+               labelFunc = function () {
+                       return this.id.replace( /^mw-prefsection/g, 'preftab' );
+               };
+
+               $preftoc = $( '#preftoc' );
+               $preferences = $( '#preferences' );
+
+               $fieldsets = $preferences.children( 'fieldset' )
+                       .attr( {
+                               role: 'tabpanel',
+                               'aria-labelledby': labelFunc
+                       } );
+               $fieldsets.not( '#mw-prefsection-personal' )
+                       .hide()
+                       .attr( 'aria-hidden', 'true' );
+
+               // T115692: The following is kept for backwards compatibility with older skins
+               $preferences.addClass( 'jsprefs' );
+               $fieldsets.addClass( 'prefsection' );
+               $fieldsets.children( 'legend' ).addClass( 'mainLegend' );
+
+               // Make sure the accessibility tip is selectable so that screen reader users take notice,
+               // but hide it per default to reduce interface clutter. Also make sure it becomes visible
+               // when selected. Similar to jquery.mw-jump
+               $( '<div>' ).addClass( 'mw-navigation-hint' )
+                       .text( mw.msg( 'prefs-tabs-navigation-hint' ) )
+                       .attr( 'tabIndex', 0 )
+                       .on( 'focus blur', function ( e ) {
+                               if ( e.type === 'blur' || e.type === 'focusout' ) {
+                                       $( this ).css( 'height', '0' );
+                               } else {
+                                       $( this ).css( 'height', 'auto' );
+                               }
+                       } ).insertBefore( $preftoc );
+
+               /**
+                * It uses document.getElementById for security reasons (HTML injections in $()).
+                *
+                * @ignore
+                * @param {string} name the name of a tab without the prefix ("mw-prefsection-")
+                * @param {string} [mode] A hash will be set according to the current
+                *  open section. Set mode 'noHash' to surpress this.
+                */
+               function switchPrefTab( name, mode ) {
+                       var $tab, scrollTop;
+                       // Handle hash manually to prevent jumping,
+                       // therefore save and restore scrollTop to prevent jumping.
+                       scrollTop = $( window ).scrollTop();
+                       if ( mode !== 'noHash' ) {
+                               location.hash = '#mw-prefsection-' + name;
+                       }
+                       $( window ).scrollTop( scrollTop );
+
+                       $preftoc.find( 'li' ).removeClass( 'selected' )
+                               .find( 'a' ).attr( {
+                                       tabIndex: -1,
+                                       'aria-selected': 'false'
+                               } );
+
+                       $tab = $( document.getElementById( 'preftab-' + name ) );
+                       if ( $tab.length ) {
+                               $tab.attr( {
+                                       tabIndex: 0,
+                                       'aria-selected': 'true'
+                               } ).focus()
+                                       .parent().addClass( 'selected' );
+
+                               $preferences.children( 'fieldset' ).hide().attr( 'aria-hidden', 'true' );
+                               $( document.getElementById( 'mw-prefsection-' + name ) ).show().attr( 'aria-hidden', 'false' );
+                       }
+               }
+
+               // Enable keyboard users to use left and right keys to switch tabs
+               $preftoc.on( 'keydown', function ( event ) {
+                       var keyLeft = 37,
+                               keyRight = 39,
+                               $el;
+
+                       if ( event.keyCode === keyLeft ) {
+                               $el = $( '#preftoc li.selected' ).prev().find( 'a' );
+                       } else if ( event.keyCode === keyRight ) {
+                               $el = $( '#preftoc li.selected' ).next().find( 'a' );
+                       } else {
+                               return;
+                       }
+                       if ( $el.length > 0 ) {
+                               switchPrefTab( $el.attr( 'href' ).replace( '#mw-prefsection-', '' ) );
+                       }
+               } );
+
+               // Jump to correct section as indicated by the hash.
+               // This function is called onload and onhashchange.
+               function detectHash() {
+                       var hash = location.hash,
+                               matchedElement, parentSection;
+                       if ( hash.match( /^#mw-prefsection-[\w]+$/ ) ) {
+                               mw.storage.session.remove( 'mwpreferences-prevTab' );
+                               switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
+                       } else if ( hash.match( /^#mw-[\w-]+$/ ) ) {
+                               matchedElement = document.getElementById( hash.slice( 1 ) );
+                               parentSection = $( matchedElement ).parent().closest( '[id^="mw-prefsection-"]' );
+                               if ( parentSection.length ) {
+                                       mw.storage.session.remove( 'mwpreferences-prevTab' );
+                                       // Switch to proper tab and scroll to selected item.
+                                       switchPrefTab( parentSection.attr( 'id' ).replace( 'mw-prefsection-', '' ), 'noHash' );
+                                       matchedElement.scrollIntoView();
+                               }
+                       }
+               }
+
+               // In browsers that support the onhashchange event we will not bind click
+               // handlers and instead let the browser do the default behavior (clicking the
+               // <a href="#.."> will naturally set the hash, handled by onhashchange.
+               // But other things that change the hash will also be caught (e.g. using
+               // the Back and Forward browser navigation).
+               // Note the special check for IE "compatibility" mode.
+               if ( 'onhashchange' in window &&
+                       ( document.documentMode === undefined || document.documentMode >= 8 )
+               ) {
+                       $( window ).on( 'hashchange', function () {
+                               var hash = location.hash;
+                               if ( hash.match( /^#mw-[\w-]+/ ) ) {
+                                       detectHash();
+                               } else if ( hash === '' ) {
+                                       switchPrefTab( 'personal', 'noHash' );
+                               }
+                       } )
+                               // Run the function immediately to select the proper tab on startup.
+                               .trigger( 'hashchange' );
+               // In older browsers we'll bind a click handler as fallback.
+               // We must not have onhashchange *and* the click handlers, otherwise
+               // the click handler calls switchPrefTab() which sets the hash value,
+               // which triggers onhashchange and calls switchPrefTab() again.
+               } else {
+                       $preftoc.on( 'click', 'li a', function ( e ) {
+                               switchPrefTab( $( this ).attr( 'href' ).replace( '#mw-prefsection-', '' ) );
+                               e.preventDefault();
+                       } );
+                       // If we've reloaded the page or followed an open-in-new-window,
+                       // make the selected tab visible.
+                       detectHash();
+               }
+
+               // Restore the active tab after saving the preferences
+               previousTab = mw.storage.session.get( 'mwpreferences-prevTab' );
+               if ( previousTab ) {
+                       switchPrefTab( previousTab, 'noHash' );
+                       // Deleting the key, the tab states should be reset until we press Save
+                       mw.storage.session.remove( 'mwpreferences-prevTab' );
+               }
+
+               $( '#mw-prefs-form' ).on( 'submit', function () {
+                       var value = $( $preftoc ).find( 'li.selected a' ).attr( 'id' ).replace( 'preftab-', '' );
+                       mw.storage.session.set( 'mwpreferences-prevTab', value );
+               } );
+
+       } );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.timezone.js b/resources/src/mediawiki.special/mediawiki.special.preferences.timezone.js
new file mode 100644 (file)
index 0000000..58a5f84
--- /dev/null
@@ -0,0 +1,92 @@
+/*!
+ * JavaScript for Special:Preferences: Timezone field enhancements.
+ */
+( function ( mw, $ ) {
+       $( function () {
+               var
+                       $tzSelect, $tzTextbox, $localtimeHolder, servertime;
+
+               // Timezone functions.
+               // Guesses Timezone from browser and updates fields onchange.
+
+               $tzSelect = $( '#mw-input-wptimecorrection' );
+               $tzTextbox = $( '#mw-input-wptimecorrection-other' );
+               $localtimeHolder = $( '#wpLocalTime' );
+               servertime = parseInt( $( 'input[name="wpServerTime"]' ).val(), 10 );
+
+               function minutesToHours( min ) {
+                       var tzHour = Math.floor( Math.abs( min ) / 60 ),
+                               tzMin = Math.abs( min ) % 60,
+                               tzString = ( ( min >= 0 ) ? '' : '-' ) + ( ( tzHour < 10 ) ? '0' : '' ) + tzHour +
+                                       ':' + ( ( tzMin < 10 ) ? '0' : '' ) + tzMin;
+                       return tzString;
+               }
+
+               function hoursToMinutes( hour ) {
+                       var minutes,
+                               arr = hour.split( ':' );
+
+                       arr[ 0 ] = parseInt( arr[ 0 ], 10 );
+
+                       if ( arr.length === 1 ) {
+                               // Specification is of the form [-]XX
+                               minutes = arr[ 0 ] * 60;
+                       } else {
+                               // Specification is of the form [-]XX:XX
+                               minutes = Math.abs( arr[ 0 ] ) * 60 + parseInt( arr[ 1 ], 10 );
+                               if ( arr[ 0 ] < 0 ) {
+                                       minutes *= -1;
+                               }
+                       }
+                       // Gracefully handle non-numbers.
+                       if ( isNaN( minutes ) ) {
+                               return 0;
+                       } else {
+                               return minutes;
+                       }
+               }
+
+               function updateTimezoneSelection() {
+                       var minuteDiff, localTime,
+                               type = $tzSelect.val();
+
+                       if ( type === 'other' ) {
+                               // User specified time zone manually in <input>
+                               // Grab data from the textbox, parse it.
+                               minuteDiff = hoursToMinutes( $tzTextbox.val() );
+                       } else {
+                               // Time zone not manually specified by user
+                               if ( type === 'guess' ) {
+                                       // Get browser timezone & fill it in
+                                       minuteDiff = -( new Date().getTimezoneOffset() );
+                                       $tzTextbox.val( minutesToHours( minuteDiff ) );
+                                       $tzSelect.val( 'other' );
+                                       $tzTextbox.prop( 'disabled', false );
+                               } else {
+                                       // Grab data from the $tzSelect value
+                                       minuteDiff = parseInt( type.split( '|' )[ 1 ], 10 ) || 0;
+                                       $tzTextbox.val( minutesToHours( minuteDiff ) );
+                               }
+
+                               // Set defaultValue prop on the generated box so we don't trigger the
+                               // unsaved preferences check
+                               $tzTextbox.prop( 'defaultValue', $tzTextbox.val() );
+                       }
+
+                       // Determine local time from server time and minutes difference, for display.
+                       localTime = servertime + minuteDiff;
+
+                       // Bring time within the [0,1440) range.
+                       localTime = ( ( localTime % 1440 ) + 1440 ) % 1440;
+
+                       $localtimeHolder.text( mw.language.convertNumber( minutesToHours( localTime ) ) );
+               }
+
+               if ( $tzSelect.length && $tzTextbox.length ) {
+                       $tzSelect.change( updateTimezoneSelection );
+                       $tzTextbox.blur( updateTimezoneSelection );
+                       updateTimezoneSelection();
+               }
+
+       } );
+}( mediaWiki, jQuery ) );
index d817104..7203777 100755 (executable)
@@ -137,6 +137,15 @@ class PHPUnitMaintClass extends Maintenance {
                return Maintenance::DB_ADMIN;
        }
 
+       protected function addOption( $name, $description, $required = false,
+               $withArg = false, $shortName = false, $multiOccurrence = false
+       ) {
+               // ignore --quiet which does not really make sense for unit tests
+               if ( $name !== 'quiet' ) {
+                       parent::addOption( $name, $description, $required, $withArg, $shortName, $multiOccurrence );
+               }
+       }
+
        /**
         * Force the format of elements in $_SERVER['argv']
         *  - Split args such as "wiki=enwiki" into two separate arg elements "wiki" and "enwiki"