From: Nikerabbit
লিà¦à§à¦£à§à¦¡: '''({{int:cur}})''' = বৰà§à¦¤à¦®à¦¾à¦¨à§° সà¦à¦à¦²à¦¨à§° লà¦à¦¤ পাৰà§à¦¥à¦à§à¦¯,
'''({{int:last}})''' = à¦à¦à§° সà¦à¦à¦²à¦¨à§° লà¦à¦¤ পাৰà§à¦¥à¦à§à¦¯, '''{{int:minoreditletter}}'' = à¦
à¦à§à§°à§à¦¤à§à¦¬à¦ªà§à§°à§à¦£ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾à¥¤",
'history-fieldset-title' => 'à¦à¦¤à¦¿à¦¹à¦¾à¦¸à¦¤ à¦
নà§à¦¸à¦¨à§à¦§à¦¾à¦¨ à¦à§°à¦',
-'history-show-deleted' => 'মাথà§à¦ মà¦à¦¿ পà§à¦²à§à§±à¦¾',
+'history-show-deleted' => 'মাথà§à¦ বিলà§à¦ª à¦à§°à¦¾',
'histfirst' => 'à¦à¦à¦¾à¦à¦¤à¦à§ পà§à§°à¦£à¦¿',
'histlast' => 'শà§à¦¹à¦¤à§à¦¯à¦¼à¦¾',
'historysize' => '({{PLURAL:$1|১ বাà¦à¦|$1 বাà¦à¦}})',
diff --git a/languages/messages/MessagesCs.php b/languages/messages/MessagesCs.php
index f402ab1d0b..c66371fdbb 100644
--- a/languages/messages/MessagesCs.php
+++ b/languages/messages/MessagesCs.php
@@ -361,7 +361,7 @@ $messages = array(
'tog-hidepatrolled' => 'Skrýt patrolované editace v poslednÃch zmÄnách',
'tog-newpageshidepatrolled' => 'Skrýt patrolované stránky ze seznamu nových stránek',
'tog-extendwatchlist' => 'Na seznamu sledovaných stránek zobrazovat vÅ¡echny zmÄny, ne jen tu poslednÃ',
-'tog-usenewrc' => 'PoužÃvat zdokonalené poslednà zmÄny (vyžaduje JavaScript)',
+'tog-usenewrc' => 'V poslednÃch zmÄnách a sledovaných stránkách seskupovat zmÄny podle stránek (vyžaduje JavaScript)',
'tog-numberheadings' => 'Automaticky ÄÃslovat nadpisy',
'tog-showtoolbar' => 'Zobrazit panel nástrojů (vyžaduje JavaScript)',
'tog-editondblclick' => 'Editovat dvojklikem (JavaScript)',
diff --git a/languages/messages/MessagesCy.php b/languages/messages/MessagesCy.php
index 7192c7bad8..32949ab119 100644
--- a/languages/messages/MessagesCy.php
+++ b/languages/messages/MessagesCy.php
@@ -876,6 +876,8 @@ Cafodd yr argiau hyn eu hepgor.",
'node-count-exceeded-warning' => 'Mae nifer y nodau yn y dudalen yn ormod',
'expansion-depth-exceeded-category' => "Tudalennau â dyfnder ehangu tu hwnt i'r terfyn",
'expansion-depth-exceeded-warning' => "Mae dyfnder ehangu'r dudalen y tu hwnt i'r terfyn",
+'parser-unstrip-loop-warning' => 'Wedi darganfod dolen dad-blicio (unstrip loop)',
+'parser-unstrip-recursion-limit' => 'Wedi mynd dros ben y terfyn ar ddychweliad dad-blicio (unstrip recursion) ($1)',
# "Undo" feature
'undo-success' => "Gellir dadwneud y golygiad. Byddwch gystal â gwirio'r gymhariaeth isod i sicrhau mai dyma sydd arnoch eisiau gwneud, ac yna rhowch y newidiadau ar gadw i gwblhau'r gwaith o ddadwneud y golygiad.",
diff --git a/languages/messages/MessagesDa.php b/languages/messages/MessagesDa.php
index 7e9bf1e22e..46944a242d 100644
--- a/languages/messages/MessagesDa.php
+++ b/languages/messages/MessagesDa.php
@@ -2856,6 +2856,7 @@ Dette skyldes sandsynligvis en henvisning til et sortlistet eksternt websted.',
'spambot_username' => 'MediaWiki spam-rensning',
'spam_reverting' => 'Sidste version uden henvisning til $1 gendannet.',
'spam_blanking' => 'Alle versioner, som indeholdt henvisninger til $1, er renset.',
+'spam_deleting' => 'Alle versioner indeholder henvisninger til $1, sletter',
# Info page
'pageinfo-title' => 'Information om "$1"',
diff --git a/languages/messages/MessagesDiq.php b/languages/messages/MessagesDiq.php
index a39c436f0d..49b875c95c 100644
--- a/languages/messages/MessagesDiq.php
+++ b/languages/messages/MessagesDiq.php
@@ -1662,7 +1662,7 @@ wexta Åima qayîl e yew peli re dosya bierzî, formanê cêrinan ra yewi biÅux
'fileuploadsummary' => 'Xulasa:',
'filereuploadsummary' => 'VurnayîÅê dosyayî:',
'filestatus' => 'Weziyetê heqê telifiye:',
-'filesource' => 'Ãımey:',
+'filesource' => 'Ãıme:',
'uploadedfiles' => 'Dosyayê ke bar biye',
'ignorewarning' => 'Ãkazi kebul meke u dosya reyna bar bike',
'ignorewarnings' => 'Ãkazi kebul meke',
diff --git a/languages/messages/MessagesHr.php b/languages/messages/MessagesHr.php
index 7c9e5e261f..20a65da62e 100644
--- a/languages/messages/MessagesHr.php
+++ b/languages/messages/MessagesHr.php
@@ -15,6 +15,7 @@
* @author Dnik
* @author Ex13
* @author Excaliboor
+ * @author FriedrickMILBarbarossa
* @author Herr Mlinka
* @author Kaganer
* @author Luka Krstulovic
@@ -2266,7 +2267,7 @@ Molim potvrdite svoju namjeru, da razumijete posljedice i da ovo radite u skladu
'actionfailed' => 'Radnja nije uspjela',
'deletedtext' => '"$1" je izbrisana.
Vidi $2 za evidenciju nedavnih brisanja.',
-'dellogpage' => 'Evidencija_brisanja',
+'dellogpage' => 'Evidencija brisanja',
'dellogpagetext' => 'Dolje je popis nedavnih brisanja.
Sva vremena su prema poslužiteljevom vremenu.',
'deletionlog' => 'evidencija brisanja',
diff --git a/languages/messages/MessagesIt.php b/languages/messages/MessagesIt.php
index 25ab632e69..675b0cb502 100644
--- a/languages/messages/MessagesIt.php
+++ b/languages/messages/MessagesIt.php
@@ -269,7 +269,7 @@ $messages = array(
'tog-hidepatrolled' => 'Nascondi le modifiche verificate nelle ultime modifiche',
'tog-newpageshidepatrolled' => "Nascondi le pagine verificate dall'elenco delle pagine più recenti",
'tog-extendwatchlist' => "Mostra tutte le modifiche agli osservati speciali, non solo l'ultima",
-'tog-usenewrc' => 'Utilizza le ultime modifiche avanzate (richiede JavaScript)',
+'tog-usenewrc' => 'Raggruppa le modifiche per pagina nelle ultime modifiche e negli osservati speciali (richiede JavaScript)',
'tog-numberheadings' => 'Numerazione automatica dei titoli di sezione',
'tog-showtoolbar' => 'Mostra barra degli strumenti di modifica (richiede JavaScript)',
'tog-editondblclick' => 'Modifica delle pagine tramite doppio clic (richiede JavaScript)',
diff --git a/languages/messages/MessagesJa.php b/languages/messages/MessagesJa.php
index cb2085ae4c..8f42292ac8 100644
--- a/languages/messages/MessagesJa.php
+++ b/languages/messages/MessagesJa.php
@@ -1757,7 +1757,7 @@ $1 {{PLURAL:$1|æå}}以ä¸ã§ããå¿
è¦ãããã¾ãã',
'recentchangeslinked-title' => 'ã$1ãã¨é¢é£ããå¤æ´',
'recentchangeslinked-noresult' => 'æå®æéä¸ã«æå®ãã¼ã¸ã®ãªã³ã¯å
ã«å¤æ´ã¯ããã¾ããã§ããã',
'recentchangeslinked-summary' => "ããã¯ãæå®ãããã¼ã¸ãããªã³ã¯ããã¦ããï¼ã¾ãã¯æå®ããã«ãã´ãªã«å«ã¾ãã¦ããï¼ãã¼ã¸ã¸ã®æè¿ã®å¤æ´ã®ä¸è¦§ã§ãã
-[[Special:Watchlist|èªåã®ã¦ã©ãããªã¹ã]]ã«ãããã¼ã¸ã¯'''太å'''ã§è¡¨ç¤ºããã¦ãã¾ãã",
+[[Special:Watchlist|èªåã®ã¦ã©ãããªã¹ã]]ã«ãããã¼ã¸ã¯'''太å'''ã«ãªãã¾ãã",
'recentchangeslinked-page' => 'ãã¼ã¸åï¼',
'recentchangeslinked-to' => '代ããã«ãæå®ãããã¼ã¸ã¸ã®ãªã³ã¯å
ã§ã®å¤æ´ã表示',
diff --git a/languages/messages/MessagesKsh.php b/languages/messages/MessagesKsh.php
index 0f2bd3f366..ca218f9483 100644
--- a/languages/messages/MessagesKsh.php
+++ b/languages/messages/MessagesKsh.php
@@ -3490,6 +3490,7 @@ Donoh kumme, en däsellve Reih, Links op Sigge wo die Datei trotz dämm jenehm e
'exif-copyrighted-true' => 'Häd_en Urhävverrääsch',
'exif-copyrighted-false' => 'Es en de Allmende (jemeinfrei, public domain)',
+'exif-photometricinterpretation-2' => 'RJB',
'exif-photometricinterpretation-6' => 'YCbCr',
'exif-unknowndate' => 'Dattum onbikannt',
@@ -3513,6 +3514,7 @@ Donoh kumme, en däsellve Reih, Links op Sigge wo die Datei trotz dämm jenehm e
'exif-colorspace-65535' => 'De Färve sin nit kallibreert',
'exif-componentsconfiguration-0' => 'Jidd_et nit',
+'exif-componentsconfiguration-5' => 'J',
'exif-exposureprogram-0' => 'Nit faÃjelaat',
'exif-exposureprogram-1' => 'Vun Hand',
@@ -3851,6 +3853,17 @@ Wells Do jetz met en neu Version die Sigg widder neu aanläje?',
'size-megabytes' => '$1 MB',
'size-gigabytes' => '$1 GB',
+# Bitrate units
+'bitrate-bits' => '$1&nbps;bps',
+'bitrate-kilobits' => '$1&nbps;Kbps',
+'bitrate-megabits' => '$1&nbps;Mbps',
+'bitrate-gigabits' => '$1&nbps;Gbps',
+'bitrate-terabits' => '$1&nbps;Tbps',
+'bitrate-petabits' => '$1&nbps;Pbps',
+'bitrate-exabits' => '$1&nbps;Ebps',
+'bitrate-zetabits' => '$1&nbps;Zbps',
+'bitrate-yottabits' => '$1&nbps;Ybps',
+
# Live preview
'livepreview-loading' => 'Ben am Lade â¦',
'livepreview-ready' => 'Fädesch jelaade.',
@@ -3911,7 +3924,7 @@ De könnts Ding Oppassliss ävver och [[Special:EditWatchlist|övver e Fomulaa m
# Signatures
'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Klaafe]])',
-'timezone-utc' => 'UTC',
+'timezone-utc' => 'UTC',
# Core parser functions
'unknown_extension_tag' => 'â$1
â es en zosäzlejje Kennzeichnung, die kenne mer nit.',
diff --git a/languages/messages/MessagesKu_latn.php b/languages/messages/MessagesKu_latn.php
index 5f6624b45a..77f25c1a0e 100644
--- a/languages/messages/MessagesKu_latn.php
+++ b/languages/messages/MessagesKu_latn.php
@@ -2022,7 +2022,7 @@ Ji kerema xwe zanibe ku tu bi rastî dixwazî vê rûpelê dîsa çêkî.",
'recreate' => 'Dîsa çêke',
# action=purge
-'confirm_purge_button' => 'Temam',
+'confirm_purge_button' => 'BaÅ e',
'confirm-purge-top' => 'Bîra vê rûpelê jêbîbe ?',
# Multipage image navigation
diff --git a/languages/messages/MessagesLt.php b/languages/messages/MessagesLt.php
index 35d40b9b10..ec52b886c4 100644
--- a/languages/messages/MessagesLt.php
+++ b/languages/messages/MessagesLt.php
@@ -1210,6 +1210,7 @@ PraÅ¡ome patikrinti sÄ
rašus.',
'prefs-beta' => 'Beta funkcijos',
'prefs-datetime' => 'Data ir laikas',
'prefs-labs' => 'Bandomosios funkcijos',
+'prefs-user-pages' => 'Naudotojo puslapiai',
'prefs-personal' => 'Naudotojo profilis',
'prefs-rc' => 'Naujausi keitimai',
'prefs-watchlist' => 'Stebimų sÄ
rašas',
@@ -1854,7 +1855,7 @@ Informacija iš [$2 failo aprašymo puslapio] yra pateikiama žemiau.',
'statistics-pages-desc' => 'Visi puslapiai, tarp jų aptarimo, nukreipimų, ir kiti puslapiai.',
'statistics-files' => 'Įkelti failai',
'statistics-edits' => 'Puslapių redagavimų skaiÄius nuo {{SITENAME}} sukÅ«rimo',
-'statistics-edits-average' => 'Vidutinis redakcijų kiekis puslapiui',
+'statistics-edits-average' => 'Vidutinis puslapių keitimų kiekis',
'statistics-views-total' => 'Iš viso peržiūrų',
'statistics-views-total-desc' => 'NeegzistuojanÄių ir specialiųjų puslapių parodymai neįtraukti',
'statistics-views-peredit' => 'PeržiÅ«rų skaiÄius puslapio versijai',
@@ -2792,7 +2793,7 @@ IÅ¡saugokite jį savo kompiuteryje ir įkelkite jį Äia.',
'tooltip-search' => 'Ieškoti šiame projekte',
'tooltip-search-go' => 'Eiti į puslapį su tokiu pavadinimu, jei toks yra',
'tooltip-search-fulltext' => 'Ieškoti puslapių su šiuo tekstu',
-'tooltip-p-logo' => 'Pradinis puslapis',
+'tooltip-p-logo' => 'Eiti į pradinį puslapį',
'tooltip-n-mainpage' => 'Eiti į pradinį puslapį',
'tooltip-n-mainpage-description' => 'Eiti į pradinį puslapį',
'tooltip-n-portal' => 'Apie projektÄ
, kÄ
galima daryti, kur kÄ
rasti',
@@ -2866,6 +2867,7 @@ Leidžia pridÄti atmetimo priežastį komentaruose',
'spambot_username' => 'MediaWiki reklamų šalinimas',
'spam_reverting' => 'Atkuriama į ankstesnÄ versijÄ
, neturinÄios nuorodų į $1',
'spam_blanking' => 'Visos versijos turÄjo nuorodų į $1, iÅ¡valoma',
+'spam_deleting' => 'Visos versijos turÄjo nuorodų į $1, iÅ¡trinama',
# Info page
'pageinfo-title' => 'â$1â informacija',
@@ -3706,29 +3708,44 @@ PaveikslÄliai yra rodomi pilna raiÅ¡ka, kiti failų tipai paleidžiami tiesiogi
'newuserlog-byemail' => 'slaptažodis nusiųstas elektroniniu paštu',
# Feedback
+'feedback-bugornote' => 'Jei jÅ«s esate pasirengÄ apraÅ¡yti techninÄ problemÄ
iÅ¡samiau, [$1 praneÅ¡kite apie programinÄ klaidÄ
].
+Kitu atveju, galite naudotis žemiau esanÄia paprastesne forma. JÅ«sų komentaras bus įtrauktas į puslapį â[$3 $2]â, kartu su jÅ«sų naudotojo vardu ir jÅ«sų naudojama narÅ¡ykle.',
'feedback-subject' => 'Tema:',
'feedback-message' => 'Pranešimas:',
'feedback-cancel' => 'Atšaukti',
'feedback-submit' => 'Siųsti AtsiliepimÄ
',
'feedback-adding' => 'Pridedamas atsiliepimas į puslapį ...',
+'feedback-error1' => 'Klaida: Neatpažįstamas rezultatas iš API',
'feedback-error2' => 'Klaida: Redagavimas nepavyko',
+'feedback-error3' => 'Klaida: Jokio atsakymo iš API',
+'feedback-thanks' => 'AÄiÅ«! JÅ«sų atsiliepimas buvo užregistruotas puslapyje â[$2 $1]â.',
'feedback-close' => 'Atlikta',
+'feedback-bugcheck' => 'Puiku! Tiesiog patikrinkite, ar tai ne viena [$1 jau žinomų klaidų].',
+'feedback-bugnew' => 'Patikrinau. PraneÅ¡ti apie naujÄ
klaidÄ
',
# API errors
'api-error-badaccess-groups' => 'Jums neleidžiama įkelti failus į Å¡iÄ
wiki.',
'api-error-copyuploaddisabled' => 'Siuntimas pagal URL yra išjungtas šiame serveryje.',
'api-error-duplicate-popup-title' => 'Dubliuoti {{PLURAL:$1|failÄ
|failus}}',
'api-error-empty-file' => 'Pateikta failas buvo tuÅ¡Äias.',
+'api-error-emptypage' => 'Kurti naujus, tuÅ¡Äius puslapius neleidžiama.',
+'api-error-fetchfileerror' => 'VidinÄ klaida: Kažkas nutiko gaunant failÄ
.',
'api-error-file-too-large' => 'FailÄ
, kurį pateikÄte buvo per didelis.',
'api-error-filename-tooshort' => 'Failo vardas yra per trumpas.',
'api-error-filetype-banned' => 'Šis failų tipas yra uždraustas.',
+'api-error-filetype-missing' => 'Failas neturi galÅ«nÄs.',
+'api-error-hookaborted' => 'PakeitimÄ
, kurį bandÄte atlikti, nutraukÄ priedas.',
'api-error-http' => 'VidinÄ klaida: nepavyko prisijungti prie serverio.',
'api-error-illegal-filename' => 'Failo vardas neleidžiamas.',
'api-error-invalid-file-key' => 'VidinÄ klaida: failas nerastas saugykloje.',
+'api-error-missingresult' => 'VidinÄ klaida: nepavyko nustatyti, ar pavyko nukopijuoti.',
'api-error-mustbeloggedin' => 'JÅ«s turite bÅ«ti prisijungÄs kad galÄtumÄte įkelti failus.',
'api-error-mustbeposted' => 'VidinÄ klaida: praÅ¡ymas reikalauja HTTP POST.',
+'api-error-noimageinfo' => 'Ä®kelti pavyko, bet serveris nepateikÄ mums jokios informacijos apie failÄ
.',
'api-error-ok-but-empty' => 'VidinÄ klaida: nÄra atsakymo iÅ¡ serverio.',
'api-error-overwrite' => 'PerraÅ¡ymas esamÄ
failÄ
neleidžiamas.',
+'api-error-stashfailed' => 'VidinÄ klaida: serveriui nepavyko iÅ¡saugoti laikinÄ
jį failÄ
.',
+'api-error-timeout' => 'Serveris neatsakÄ per numatytÄ
laikÄ
.',
'api-error-unclassified' => 'Įvyko nežinoma klaida',
'api-error-unknown-code' => 'Nežinoma klaida: " $1 "',
'api-error-unknown-error' => 'VidinÄ klaida: kažkas nutiko bandant įkelti failÄ
.',
diff --git a/languages/messages/MessagesLus.php b/languages/messages/MessagesLus.php
index 571f55a04b..8f09ec96b0 100644
--- a/languages/messages/MessagesLus.php
+++ b/languages/messages/MessagesLus.php
@@ -402,7 +402,7 @@ I [[Special:Preferences|{{SITENAME}}duhdà n]] siam danglam theihnghilh suh ang c
'yourname' => 'Hmangtuhming:',
'yourpassword' => 'Thurûk:',
'yourpasswordagain' => 'Thurûk ziak nawn leh rawh le:',
-'remembermypassword' => 'He ka rangpuifanna hman mék (browser)-ah hian ka luhna (a rei berah ni {{PLURAL:$1||}}) min vawnsak rawh, thurûk ziah nawn ngai lo tùrin.',
+'remembermypassword' => 'He ka rangpuifanna hman mék (browser)-ah hian ka luhna (a rei berah ni {{PLURAL:$1||}}$1) min vawnsak rawh, thurûk ziah nawn ngai lo tùrin.',
'securelogin-stick-https' => 'Luh hnuah HTTPS-ah hian chëng reng rawh.',
'yourdomainname' => 'I ram:',
'externaldberror' => 'Insawifiahna felfai lo a awm lo a nih loh vëk pawhin i pawnlam siangchan tihdanglam phalsak i ni lo a ni ang.',
diff --git a/languages/messages/MessagesMg.php b/languages/messages/MessagesMg.php
index 25f5f77314..56660e9908 100644
--- a/languages/messages/MessagesMg.php
+++ b/languages/messages/MessagesMg.php
@@ -1728,6 +1728,7 @@ Tsindrio eo amin'ny lohan-tsanganana raha hanova ny laharam-pisehoana.",
'listfiles_search_for' => 'Hitady anarana media :',
'imgfile' => 'rakitra',
'listfiles' => "Lisitran'ny rakitra",
+'listfiles_thumb' => 'Sary nakelezina',
'listfiles_date' => 'Daty',
'listfiles_name' => 'Anarana',
'listfiles_user' => 'Mpikambana',
@@ -1868,6 +1869,8 @@ Aza manadino manamarina raha tsy misy rohy makany amin'ny endrika hafa alohan'ny
'nmembers' => '{{PLURAL:$1|mpikambana|mpikambana}} $1',
'nrevisions' => '{{PLURAL:$1|fanovana|fanovana}} $1',
'nviews' => '{{PLURAL:}}Tsidika $1',
+'nimagelinks' => "Ampiasain'ny pejy miisa{{PLURAL:}} $1",
+'ntransclusions' => "Ampiasaina eo amin'ny pejy miisa $1 {{PLURAL:}}",
'specialpage-empty' => 'Tsy misy valiny ho aseho.',
'lonelypages' => 'Pejy manirery',
'lonelypagestext' => "Ireo pejy ireo dia tsy voarohy sy tsy ampiasain'ny pejin' ity wiki ity.",
@@ -2283,6 +2286,8 @@ Vakio ny [[Special:Log/delete|laogim-pamafana]] ho an'ny lisitry ny famafana sy
'undelete-filename-mismatch' => "Tsy afaka averina ny santiônan'ilay rakitra tamin'ny $1 : tsy mifanaraka ny anaran-drakitra.",
'undelete-bad-store-key' => "Tsy mety averina ny santiônan'ilay rakitra tamin'ny $1 : mbola tsy tao ilay rakitra talohan'ny famafana.",
'undelete-cleanup-error' => 'Tsy fetezana teo am-pamafana ilay rakitra an-tahiry tsy miasa « $1 ».',
+'undelete-missing-filearchive' => "Tsy afaka atao ny mamerina ilay rakitra tahiry miaraka amin'ny ID $1 satria tsy ao amin'ny banky angona izy io.
+Mety efa naverina angamba izy io.",
'undelete-error-short' => 'Tsi-fetezana teo am-pamerenana ilay rakitra : $1',
'undelete-error-long' => 'Nisy tsi-fetezana nitranga teo am-pamerenana ilay rakitra :
@@ -2444,6 +2449,8 @@ ny lisitry ny fisakanana sy fandrarana na tanteraka misy ankehitriny.",
'ipb-otherblocks-header' => '{{PLURAL:$1}}sakana hafa',
'ipb_cant_unblock' => 'Tsy fetezana : Marik ny fanakanana $1 tsy hita.
Mety efa natao angamba ny fanalana sakana.',
+'ipb_blocked_as_range' => "Hadisoana : tsy nosakanana manokana ny adiresy IP $1 ka noho izany tsy afaka alà na ny sakany.
+Ao amin'ny laharana $2 izay afaka alà na sakana anefa izy io.",
'ip_range_invalid' => 'Tsy mety io IP io.',
'ip_range_toolarge' => 'Ny fanidiana laharana IP ngeza nohonny /$1 dia tsy azo atao.',
'blockme' => 'Sakano ahy',
@@ -2534,6 +2541,7 @@ mifanaraka amin'ilay anarana vaovao. Azafady mba atambaro izay pejin-dresaka iza
'movepage-page-exists' => 'Efa misy ny pejy $1 ary tsy afaka soloina ho azy.',
'movepage-page-moved' => 'Voaova anarana lasa $2 ilay pejy $1.',
'movepage-page-unmoved' => 'Tsy afaka novaina anarana $2 ilay pejy $1.',
+'movepage-max-pages' => 'Efa tratra ny isam-pejy farafahabetsany izay azo ovaina anarana (pejy $1){{PLURAL:}}, ka tsy ho voaova anarana ho azy intsony ny pejy hafa.',
'movelogpage' => 'Ny laogim-panisahana',
'movelogpagetext' => 'Lisitry ny pejy nafindra toerana.',
'movesubpage' => 'Zana-pejy{{PLURAL:$1||}} $1',
@@ -2554,6 +2562,7 @@ Efa misy ny lahatsoratra hoe "[[:$1]]". Irinao ve ny hamafana azy mba hahafahana
'immobile-source-page' => 'Tsy azo ovaina anarana ity pejy ity.',
'immobile-target-page' => "Tsy afaka ovaina anarana makany amin'io lohateny io ilay pejy.",
'imagenocrossnamespace' => 'Tsy mety ovaina anarana makany amina anaran-tsehatra hafa afatsy rakitra ihany ny rakitra.',
+'nonfile-cannot-move-to-file' => "Tsy afaka manova anaran'ny pejy tsy rakitra any amin'ny anaran-tsehatry ny rakitra.",
'imagetypemismatch' => "Tsy mifanaraka amin'ny karazany ny fanitaran'ity rakitra ity.",
'imageinvalidfilename' => 'Diso ny anaran-drakitra tanjona',
'fix-double-redirects' => "Hanao update ny fihodinana makany amin'ny lohateny fotony",
@@ -2880,6 +2889,7 @@ Tokony sary tsy misy na sary tsy izy ny rohy voalohany anaty andalana iray .
'exif-copyright' => 'Mpanana ilay copyright',
'exif-exifversion' => 'Santiôna EXIF',
'exif-flashpixversion' => 'Santiôna FlashPix',
+'exif-colorspace' => 'Valan-doko',
'exif-pixelydimension' => 'Haavon-tsary ekena',
'exif-pixelxdimension' => 'Halalan-tsary ekena',
'exif-usercomment' => 'Diniky ny mpikambana',
@@ -2887,8 +2897,10 @@ Tokony sary tsy misy na sary tsy izy ny rohy voalohany anaty andalana iray .
'exif-datetimeoriginal' => 'Daty fangalana niaviana',
'exif-datetimedigitized' => 'Daty nanaovana numerisation',
'exif-subsectime' => 'Daty nanovana',
+'exif-exposuretime' => 'Fitaona famakiana',
'exif-exposuretime-format' => '$1 s ($2 s)',
'exif-fnumber' => 'Isa F',
+'exif-exposureprogram' => 'Fomba famakiana',
'exif-isospeedratings' => 'ISO',
'exif-aperturevalue' => 'Sanasana',
'exif-lightsource' => 'Loharanon-kazavana',
diff --git a/languages/messages/MessagesNl.php b/languages/messages/MessagesNl.php
index e959e47f55..14fba49f5d 100644
--- a/languages/messages/MessagesNl.php
+++ b/languages/messages/MessagesNl.php
@@ -2765,8 +2765,8 @@ Zie de [[Special:BlockList|blokkadelijst]] voor recente blokkades.',
'expiringblock' => 'vervalt op $1 om $2',
'anononlyblock' => 'alleen anoniemen',
'noautoblockblock' => 'autoblokkeren uitgeschakeld',
-'createaccountblock' => 'registreren gebruikers geblokkeerd',
-'emailblock' => 'e-mail geblokkeerd',
+'createaccountblock' => 'registreren gebruikers uitgeschakeld',
+'emailblock' => 'e-mail uitgeschakeld',
'blocklist-nousertalk' => 'kan eigen overlegpagina niet bewerken',
'ipblocklist-empty' => 'De blokkeerlijst is leeg.',
'ipblocklist-no-results' => 'Dit IP-adres of deze gebruikersnaam is niet geblokkeerd.',
@@ -2790,7 +2790,7 @@ Zie ook de [[Special:BlockList|blokkadelijst]] voor de op dit moment actieve blo
'block-log-flags-anononly' => 'alleen anoniemen',
'block-log-flags-nocreate' => 'registreren gebruikers geblokkeerd',
'block-log-flags-noautoblock' => 'autoblokkeren is uitgeschakeld',
-'block-log-flags-noemail' => 'e-mail geblokkeerd',
+'block-log-flags-noemail' => 'e-mail uitgeschakeld',
'block-log-flags-nousertalk' => 'kan eigen overlegpagina niet bewerken',
'block-log-flags-angry-autoblock' => 'uitgebreide automatische blokkade ingeschakeld',
'block-log-flags-hiddenname' => 'gebruiker verborgen',
@@ -3184,9 +3184,9 @@ U kunt wel de broncode bekijken.',
Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
'spamprotectionmatch' => 'De volgende tekst veroorzaakte een alarm van de spamfilter: $1',
'spambot_username' => 'MediaWiki opschoning spam',
-'spam_reverting' => 'Bezig met terugdraaien naar de laatste versie die geen verwijzing heeft naar $1',
-'spam_blanking' => 'Alle wijzigingen met een verwijzing naar $1 worden verwijderd',
-'spam_deleting' => 'Alle versies bevatten verwijzingen naar $1. Bezig met verwijderen...',
+'spam_reverting' => 'Teruggedraaid naar de laatste versie die geen verwijzing bevat naar $1',
+'spam_blanking' => 'Alle versies bevatten een verwijzing naar $1. Pagina leeggemaakt',
+'spam_deleting' => 'Alle versies bevatten verwijzingen naar $1. Pagina verwijderd',
# Info page
'pageinfo-title' => 'Informatie over "$1"',
diff --git a/languages/messages/MessagesPam.php b/languages/messages/MessagesPam.php
index db1ff10457..bc10284420 100644
--- a/languages/messages/MessagesPam.php
+++ b/languages/messages/MessagesPam.php
@@ -79,7 +79,7 @@ Pabusten ing pamanaliling dake kapamilatan [alilan] ning suglung',
'fri' => 'Vie',
'sat' => 'Sab',
'january' => 'Eneru',
-'february' => 'Febreru',
+'february' => 'Pebreru',
'march' => 'Marzu',
'april' => 'Abril',
'may_long' => 'Mayu',
@@ -158,6 +158,9 @@ Pabusten ing pamanaliling dake kapamilatan [alilan] ning suglung',
'vector-action-protect' => 'Protectan/kambilan',
'vector-action-undelete' => 'Isubli/iurung ya pangabura',
'vector-action-unprotect' => 'Idayu ya panga-protecta',
+'vector-view-view' => 'Basan',
+'namespaces' => 'Karinanlagiu',
+'variants' => 'Aliwapa',
'errorpagetitle' => 'Mali',
'returnto' => 'Magbalik king $1.',
@@ -275,7 +278,7 @@ Pabusten ing pamanaliling dake kapamilatan [alilan] ning suglung',
'nstab-project' => 'Bulung ding proyektu',
'nstab-image' => 'Simpan (File)',
'nstab-mediawiki' => 'Mensahi',
-'nstab-template' => 'Modelu (template)',
+'nstab-template' => 'Ulma (template)',
'nstab-help' => 'Saup bulung',
'nstab-category' => 'Kategoriya',
@@ -644,6 +647,7 @@ Ini ing sangkan a binie nang $3: ''$2''",
Kabaldugan: (ngeni)=pamiyaliwa king salukuyan a bersion (bersion ngeni),
(tauli)=pamiyaliwa ketang sadyang (tauling) bersion, M = malating edit.',
'history-fieldset-title' => 'Amlat da reng pamaglawe',
+'history-show-deleted' => 'Milako yamu',
'histfirst' => 'Minunang dili',
'histlast' => 'Pekabayu',
'historysize' => '({{PLURAL:$1|1 a byte|byte}})',
@@ -748,6 +752,7 @@ Gamitan me ing radio button column bang bukud mung detang miyalilan aniang o bay
'prevn' => 'minunang {{PLURAL:$1|$1}}',
'nextn' => 'tutuking {{PLURAL:$1|$1}}',
'viewprevnext' => 'Lon ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-exists' => "'''Atin bulung a mikilagiung \"[[:\$1]]\" keng wiking ini.'''",
'searchhelp-url' => 'Help:Kalamnan',
'search-result-size' => '$1 ({{PLURAL:$2|1 a kataya|$2 kataya}})',
'search-result-score' => 'Kaugnayan (relevance): $1%',
@@ -1294,6 +1299,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
# Special:LinkSearch
'linksearch' => 'Suglung palual',
+'linksearch-line' => '$1 makasuglung ibat $2',
# Special:ListUsers
'listusersfrom' => 'Ipakit la reng talagamit magumpisa king:',
@@ -1583,7 +1589,7 @@ $1',
'nolinkshere-ns' => "Alang bulung a makatuglung king '''[[:$1]]''' ketang mepiling pirinan lagyu (namespace).",
'isredirect' => 'Bulung ning pamanaliling direksiun',
'istemplate' => 'misingit',
-'isimage' => 'suglung king larawan',
+'isimage' => 'Isuglung king larawan',
'whatlinkshere-prev' => '{{PLURAL:$1|minunang|minunang $1}}',
'whatlinkshere-next' => '{{PLURAL:$1|next|tutuking $1}}',
'whatlinkshere-links' => 'â suglung',
diff --git a/languages/messages/MessagesPms.php b/languages/messages/MessagesPms.php
index e9d334c7dd..8e26cc30f5 100644
--- a/languages/messages/MessagesPms.php
+++ b/languages/messages/MessagesPms.php
@@ -48,7 +48,7 @@ $messages = array(
'tog-hidepatrolled' => "Stërma le modìfiche verificà ant j'ùltime modìfiche",
'tog-newpageshidepatrolled' => 'Stërma le pà gine verificà da la lista dle pà gine neuve',
'tog-extendwatchlist' => 'Slarga la funsion "ten sot euj" an manera che a la smon-a tute le modìfiche, nen mach l\'ùltima',
-'tog-usenewrc' => "Deuvra j'ùltime modìfiche an bela forma (a-i va JavaScript)",
+'tog-usenewrc' => "Deuvra j'ùltime modìfiche ameliorà (a-i và JavaScript)",
'tog-numberheadings' => 'Tìtoj ëd parà graf
che as nùmero daspërlor',
'tog-showtoolbar' => "Mostra la bara dj'utiss (a-i va Javascript)",
'tog-editondblclick' => "Dobia sgnacà për modifiché l'artìcol
(a-i va JavaScript)",
@@ -2635,7 +2635,7 @@ Che as lo salva ansima a sò ordinator e peui che a lo caria ambelessì.",
'importunknownsource' => "Sorgiss d'amportassion ëd na sòrt nen conossùa",
'importcantopen' => "L'archivi da amporté a l'é pa podusse deurbe",
'importbadinterwiki' => 'Liura antra wiki diferente cioca',
-'importnotext' => 'Veujd ò con gnun test',
+'importnotext' => 'Veujd o con gnun test',
'importsuccess' => 'Amportassion andaita a bon fin!',
'importhistoryconflict' => "A-i son dle stòrie dë sta pà gina-sì che as contradisso un-a con l'à utra (a peul esse che sta pà gina-sì a l'avèissa già amportala)",
'importnosources' => "A l'é pa staita definìa gnun-a sorgiss d'amportassion da na wiki diferenta, e carié mach le stòrie as peul nen.",
@@ -3708,4 +3708,6 @@ Dësnò, a peule dovré ël formlari semplificà sì-sota. Sò coment a sarà gi
'duration-centuries' => '$1 {{PLURAL:$1|sécol|sécoj}}',
'duration-millennia' => '$1 {{PLURAL:$1|milenari|milenari}}',
+# Unknown messages
+'lockmanager-fail-svr-acquire' => 'As peul pa butesse le saradure an sël servent $1.',
);
diff --git a/languages/messages/MessagesQqq.php b/languages/messages/MessagesQqq.php
index aa091662a9..91f5572aa1 100644
--- a/languages/messages/MessagesQqq.php
+++ b/languages/messages/MessagesQqq.php
@@ -3359,7 +3359,12 @@ See also {{msg-mw|Anonuser}} and {{msg-mw|Siteusers}}.',
'nocredits' => 'This message is shown when viewing the credits of a page (example: {{fullurl:Main Page|action=credits}}) but when there are no credits available. Note that the credits action is disabled by default (currently enabled on translatewiki.net).',
# Spam protection
-'spam_reverting' => '{{Identical|Revert}}',
+'spam_reverting' => 'Edit summary for spam cleanup script. Used when a page is reverted because all later revisions contained a particular link. Parameters:
+* $1 is a spammed domain name.',
+'spam_blanking' => 'Edit summary for spam cleanup script. Used when a page is blanked (made to have no content, but still exist) because the script could not find an appropriate revision to set the page to. Parameters:
+* $1 is a spammed domain name.',
+'spam_deleting' => 'Edit summary for spam cleanup script. Used when a page is deleted because all revisions contained a particular link. Parameters:
+* $1 is a spammed domain name.',
# Info page
'pageinfo-title' => 'Page title for action=info.
diff --git a/languages/messages/MessagesRoa_tara.php b/languages/messages/MessagesRoa_tara.php
index 47048cc899..6a8fff5b08 100644
--- a/languages/messages/MessagesRoa_tara.php
+++ b/languages/messages/MessagesRoa_tara.php
@@ -30,7 +30,7 @@ $messages = array(
'tog-hidepatrolled' => "Scunne le cangiaminde condrollete jndr'Ã le cangiaminde recende",
'tog-newpageshidepatrolled' => "Scunne le pà ggene tenute sotte condrolle da 'a liste de le pà ggene nuève",
'tog-extendwatchlist' => "Spanne 'a liste de le pà ggene condrollete pe fa vedè tutte le cangiaminde fatte, none sulamende l'urteme",
-'tog-usenewrc' => "Ause le cangiaminde recende migliorate (richiede 'u JavaScript)",
+'tog-usenewrc' => "Ause le cangiaminde recende migliorate (vole 'u JavaScript)",
'tog-numberheadings' => 'Testete auto-numerete',
'tog-showtoolbar' => "Fà vedè 'a barra de le cangiaminde (JavaScript)",
'tog-editondblclick' => "Cange le pà ggene cu 'nu doppie clic (JavaScript)",
diff --git a/languages/messages/MessagesRu.php b/languages/messages/MessagesRu.php
index 579b1bb54d..00c7c55517 100644
--- a/languages/messages/MessagesRu.php
+++ b/languages/messages/MessagesRu.php
@@ -399,7 +399,7 @@ $messages = array(
'tog-hidepatrolled' => 'СкÑÑваÑÑ Ð¿Ð°ÑÑÑлиÑованнÑе пÑавки в ÑпиÑке ÑвежиÑ
пÑавок',
'tog-newpageshidepatrolled' => 'СкÑÑваÑÑ Ð¾ÑпаÑÑÑлиÑованнÑе ÑÑÑаниÑÑ Ð² ÑпиÑке новÑÑ
ÑÑÑаниÑ',
'tog-extendwatchlist' => 'РаÑÑиÑеннÑй ÑпиÑок наблÑдениÑ, вклÑÑаÑÑий вÑе изменениÑ, а не ÑолÑко поÑледние',
-'tog-usenewrc' => 'ÐÑполÑзоваÑÑ ÑлÑÑÑеннÑй ÑпиÑок ÑвежиÑ
изменений (ÑÑебÑеÑÑÑ JavaScript)',
+'tog-usenewrc' => 'ÐÑÑппиÑоваÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° ÑÑÑаниÑе ÑвежиÑ
пÑавок и в ÑпиÑке наблÑÐ´ÐµÐ½Ð¸Ñ (ÑÑебÑеÑÑÑ JavaScript)',
'tog-numberheadings' => 'ÐвÑомаÑиÑеÑки нÑмеÑоваÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¸',
'tog-showtoolbar' => 'ÐоказÑваÑÑ Ð²ÐµÑÑ
нÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ Ð¸Ð½ÑÑÑÑменÑов пÑи ÑедакÑиÑовании (JavaScript)',
'tog-editondblclick' => 'ÐÑавиÑÑ ÑÑÑаниÑÑ Ð¿Ð¾ Ð´Ð²Ð¾Ð¹Ð½Ð¾Ð¼Ñ ÑелÑÐºÑ (JavaScript)',
diff --git a/languages/messages/MessagesTr.php b/languages/messages/MessagesTr.php
index c7ba9d417e..62be8dbc03 100644
--- a/languages/messages/MessagesTr.php
+++ b/languages/messages/MessagesTr.php
@@ -714,8 +714,8 @@ Verilen sebep: ''$2''.",
# Login and logout pages
'logouttext' => "'''Oturumu kapattınız.'''
-Åimdi kimliÄinizi belirtmeksizin {{SITENAME}} sitesini kullanmaya devam edebilirsiniz, ya da [[Special:UserLogin|yeniden oturum açabilirsiniz]] (ister aynı kullanıcı adıyla, ister baÅka bir kullanıcı adıyla).
-Web tarayıcınızın önbelleÄini temizleyene kadar bazı sayfalar sanki hala oturumunuz açıkmıŠgibi görünebilir.",
+Åimdi kimliÄinizi belirtmeksizin {{SITENAME}} sitesini kullanmaya devam edebilirsiniz ya da aynı kullanıcı adıyla ya da ister baÅka bir kullanıcı adıyla [[Special:UserLogin|yeniden oturum açabilirsiniz]].
+Tarayıcınızın önbelleÄini temizleyene kadar bazı sayfalar sanki hâlâ oturumunuz açıkmıŠgibi görünebilir.",
'welcomecreation' => '== HoÅ geldin, $1! ==
Hesabınız açıldı.
diff --git a/languages/messages/MessagesWar.php b/languages/messages/MessagesWar.php
index 8c6f606a91..ba70453937 100644
--- a/languages/messages/MessagesWar.php
+++ b/languages/messages/MessagesWar.php
@@ -70,7 +70,7 @@ $messages = array(
'tog-hidepatrolled' => 'Tago-a in mga gin-patrol o binantayan nga mga pagliwat ha mga dipala naiha nga mga kabag-ohan',
'tog-newpageshidepatrolled' => 'Tago-a an mga gin-patrol o binantayan nga mga pakli tikang han talaan hin bag-o nga pakli',
'tog-extendwatchlist' => 'Padako-a an angay timan-an agod makita an tanan nga kabag-ohan, diri la an gibag-ohi',
-'tog-usenewrc' => 'Gamit hin mga gin-enhans o gindugngan nga gibag-ohi nga mga kabag-ohan (nakinahanglan hin JavaScript)',
+'tog-usenewrc' => 'Gamita in mga gin-enhans o gindugngan nga gibag-ohi nga mga kabag-ohan (nakinahanglan hin JavaScript)',
'tog-numberheadings' => 'Auto-nga-ihap nga mga pagngaran',
'tog-showtoolbar' => 'Igpakita an edit toolbar (nakinahanglan hin JavaScript)',
'tog-editondblclick' => 'Igliwat in mga pakli ha doble nga klik (nakinahanglan hin JavaScript)',
@@ -542,14 +542,18 @@ Kun pidliton mo an \"{{int:savearticle}}\" utro, an imo ginliwat in matitipig bi
'accmailtitle' => 'Ginpadara na an tigaman-pagsulod.',
'newarticle' => '(Bag-o)',
'newarticletext' => "Ginsunod mo an pakli nga waray pa kahihimo. Para ighimo an pakli, tikanga pagmakinilya ha kahon nga aada ha ubos (kitaa an [[{{MediaWiki:Helppage}}|nabulig nga pakli]] para han kadugangan nga pananabutan). Kun sayop an imo pagkanhi, igpidlit an imo kanan panngaykay (''browser'') '''balik''' (''back'') nga piridlitan.",
+'noarticletext' => 'Waray yana nahasurat hini nga pakli.
+Puyde hi ikaw [[Special:Search/{{PAGENAME}}|magbiling para han ngaran hini nga pakli]] ha iba nga mga pakli,
+[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} binga an mga nanginginlabot nga mga log],
+o [{{fullurl:{{FULLPAGENAME}}|action=edit}} igliwat ini nga pakli].',
'noarticletext-nopermission' => 'Ha yana waray surat ini nga pakli.
Puydi nimo [[Special:Search/{{PAGENAME}}|pamilngon ini nga titulo han pakli]] ha iba nga mga pakli,
o [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pamilngon ha mga kasumpay nga talaan].',
'userpage-userdoesnotexist-view' => "An akawnt han gumaramit ni ''$1'' in diri nakarehistro.",
'updated' => '(Ginbag-ohan)',
'note' => "'''Pahibaro:'''",
-'previewnote' => "'''Hinumdumi nga pahiuna-nga-paggawas la ini.'''
-An imo mga ginbag-o in waray pa katipig!",
+'previewnote' => "'''Hinumdumi nga pahiuna-nga-paggawas pa la ini.'''
+¡Waray pa katipig an imo mga ginbag-o!",
'editing' => 'Ginliliwat an $1',
'editingsection' => 'Ginliliwat an $1 (bahin)',
'editingcomment' => 'Ginliliwat an $1 (bag-o nga bahin)',
@@ -1349,6 +1353,8 @@ An bisan ano nga masunod nga mga sumpay ha kapareho nga bagis in igtratrato nga
# Metadata
'metadata' => 'Metadata',
+'metadata-help' => 'Inà nga paypay mayda dugang nga pagpasabot, nga bangin gindugáng tikang han digital nga camera o iskaner nga gin-gamit paghimo o pag-digitar hini.
+Kon an paypay ginliwat tikang han orihinal nga kamutangan, mayda mga detalye nga bangin diri magpakita han ginliwat nga paypay',
'metadata-fields' => 'An mga rumbay han hulagway han metadato nga nakatala dinhi nga mensahe in iglalakip ha padayag hin hulagway nga pakli kun an taramdan metadato in nakalukot.
An iba in daan nakatago.
* make
@@ -1505,6 +1511,16 @@ An iba in daan nakatago.
'blankpage' => 'Blanko nga pakli',
'intentionallyblankpage' => 'Ini nga pakli gintuyo pagpabilin nga blanko.',
+# External image whitelist
+'external_image_whitelist' => '#Pabay-i ini nga linea nga sugad gud la
+#Igbutang in mga regular nga expresyon nga mga fragment (iton bahin nga ada ha butnga han //) ha ubos
+#Ini igpapadis han mga URL han mga ha gawas (gin-hotlink) nga mga hulagway
+#An mga nasakto igpapakita nga mga hulagway, kon diri, sumpay la ngadto han hulagway an igpapakita
+#Mga linea nga natikang hin # ginta-tratar nga mga komento
+# Case-insensitive ini
+
+#Igbutang an mga regex nga fragment ha igbaw hini nga linea. Pabay-i ini nga linea nga sugad gud la
',
+
# Special:Tags
'tag-filter' => '[[Special:Tags|Tag]] panara:',
'tag-filter-submit' => 'Panara',
diff --git a/languages/messages/MessagesYi.php b/languages/messages/MessagesYi.php
index 957e17d7b2..a7319af4f3 100644
--- a/languages/messages/MessagesYi.php
+++ b/languages/messages/MessagesYi.php
@@ -1062,6 +1062,8 @@ $2
'revdelete-show-file-submit' => '××',
'revdelete-selected' => "'''{{PLURAL:$2|×××ס×ער×××××××¢ ××ערס××¢| ×××ס×ער×××××××¢ ××ערס×עס}} פ×× [[:$1]]:'''",
'logdelete-selected' => "'''{{PLURAL:$1| ×××ס×ער×××××××¢ ××× ×קצ××¢|×××ס×ער×××××××¢ ××× ×קצ×עס}}:'''",
+'revdelete-text' => "'''×××ס××¢×עק××¢ רע×××××עס ××× ××¢×©×¢×¢× ××©× ×××¢×× ×××××× ××× ×ער ×××× ××ס××ר××¢ ××× ×× ××××××ער, ××ער ××××× ×¤×× ×××ער ××× ×××× ×××¢× ×××¢×¨× ××××ר×××××¢× ×¦×× ×§××. '''
+×× ×ערע ס×ס××¤× ××××£ {{SITENAME}} ×××¢×× × ×× ×××× ×¦××ר×× ×¦×× ×××××××¢× ×¢× ××× ×××× ××× ×§×¢× ×¢× ××× ×¦×ר×קש××¢×× ×××¨× ××¢× ××¢××× ××××ערפ×××, ××××¥ ×××¢× ××¢× ×©××¢×× × ×× ××××¨×¢× ×¢×¦×× ××¢×.",
'revdelete-suppress-text' => "××××××× ××× ××××× ××¢× ××¦× ×××¢×¨× '''× ×ר''' ××× ×× ×¤××××¢× ××¢ פע×ער:
* ×××פ×עק×× × ×¤×× ×¤×¨×××××ק××× ××× ×¤×ר××צ××¢
* ''×××× ××רעס×, ××¢×עפ×× × ××ער×, ××ער ס××©×¢× ×¡×¢×§××רע××, ×.×.××.:'''",
diff --git a/maintenance/copyFileBackend.php b/maintenance/copyFileBackend.php
index 07f619994d..530b5cabb4 100644
--- a/maintenance/copyFileBackend.php
+++ b/maintenance/copyFileBackend.php
@@ -1,6 +1,6 @@
mDescription = "Copy all the files in one backend to another.";
+ $this->mDescription = "Copy files in one backend to another.";
$this->addOption( 'src', 'Backend containing the source files', true, true );
$this->addOption( 'dst', 'Backend where files should be copied to', true, true );
$this->addOption( 'containers', 'Pipe separated list of containers', true, true );
- $this->addOption( 'fast', 'Skip SHA-1 checks on pre-existing files' );
+ $this->addOption( 'subdir', 'Only do items in this child directory', false, true );
+ $this->setBatchSize( 50 );
}
public function execute() {
$src = FileBackendGroup::singleton()->get( $this->getOption( 'src' ) );
$dst = FileBackendGroup::singleton()->get( $this->getOption( 'dst' ) );
-
$containers = explode( '|', $this->getOption( 'containers' ) );
+ $subDir = $this->getOption( rtrim( 'subdir', '/' ), '' );
+
+ $count = 0;
foreach ( $containers as $container ) {
- $this->output( "Doing container $container...\n" );
+ if ( $subDir != '' ) {
+ $backendRel = "$container/$subDir";
+ $this->output( "Doing container '$container', directory '$subDir'...\n" );
+ } else {
+ $backendRel = $container;
+ $this->output( "Doing container '$container'...\n" );
+ }
- $srcPathsRel = $src->getFileList(
- array( 'dir' => $src->getRootStoragePath() . "/$container" ) );
+ $dir = $src->getRootStoragePath() . "/$backendRel";
+ $srcPathsRel = $src->getFileList( array( 'dir' => $dir ) );
if ( $srcPathsRel === null ) {
$this->error( "Could not list files in $container.", 1 ); // die
}
- foreach ( $srcPathsRel as $srcPathRel ) {
- $srcPath = $src->getRootStoragePath() . "/$container/$srcPathRel";
- $dstPath = $dst->getRootStoragePath() . "/$container/$srcPathRel";
- if ( $dst->fileExists( array( 'src' => $dstPath, 'latest' => 1 ) ) ) {
- if ( $this->hasOption( 'fast' ) ) {
- $this->output( "Already have $dstPath.\n" );
- continue; // assume already copied...
- }
- $srcSha1 = $src->getFileSha1Base36( array( 'src' => $srcPath ) );
- $dstSha1 = $dst->getFileSha1Base36( array( 'src' => $dstPath ) );
- if ( $srcSha1 && $srcSha1 === $dstSha1 ) {
- $this->output( "Already have $dstPath.\n" );
- continue; // already copied...
- }
+ $batchPaths = array();
+ foreach ( $srcPathsRel as $srcPathRel ) {
+ $batchPaths[$srcPathRel] = 1; // remove duplicates
+ if ( count( $batchPaths ) >= $this->mBatchSize ) {
+ $this->copyFileBatch( array_keys( $batchPaths ), $backendRel, $src, $dst );
+ $batchPaths = array(); // done
}
+ ++$count;
+ }
+ if ( count( $batchPaths ) ) { // left-overs
+ $this->copyFileBatch( array_keys( $batchPaths ), $backendRel, $src, $dst );
+ $batchPaths = array(); // done
+ }
- $fsFile = $src->getLocalReference( array( 'src' => $srcPath, 'latest' => 1 ) );
- if ( !$fsFile ) {
- $this->error( "Could not get local copy of $srcPath.", 1 ); // die
- }
+ if ( $subDir != '' ) {
+ $this->output( "Finished container '$container', directory '$subDir'.\n" );
+ } else {
+ $this->output( "Finished container '$container'.\n" );
+ }
+ }
- $status = $dst->prepare( array( 'dir' => dirname( $dstPath ) ) );
- $status->merge( $dst->store(
- array( 'src' => $fsFile->getPath(), 'dst' => $dstPath ),
- array( 'nonLocking' => 1, 'nonJournaled' => 1 )
- ) );
- if ( !$status->isOK() ) {
- print_r( $status->getErrorsArray() );
- $this->error( "Could not copy $srcPath to $dstPath.", 1 ); // die
- }
+ $this->output( "Done [$count file(s)].\n" );
+ }
- $this->output( "Copied $srcPath to $dstPath.\n" );
+ protected function copyFileBatch(
+ array $srcPathsRel, $backendRel, FileBackend $src, FileBackend $dst
+ ) {
+ $ops = array();
+ $fsFiles = array();
+ foreach ( $srcPathsRel as $srcPathRel ) {
+ $srcPath = $src->getRootStoragePath() . "/$backendRel/$srcPathRel";
+ $dstPath = $dst->getRootStoragePath() . "/$backendRel/$srcPathRel";
+ if ( $this->filesAreSame( $src, $dst, $srcPath, $dstPath ) ) {
+ $this->output( "Already have $srcPathRel.\n" );
+ continue; // assume already copied...
+ }
+ // Note: getLocalReference() is fast for FS backends
+ $fsFile = $src->getLocalReference( array( 'src' => $srcPath, 'latest' => 1 ) );
+ if ( !$fsFile ) {
+ $this->error( "Could not get local copy of $srcPath.", 1 ); // die
+ }
+ $fsFiles[] = $fsFile; // keep TempFSFile objects alive as needed
+ // Note: prepare() is usually fast for key/value backends
+ $status = $dst->prepare( array( 'dir' => dirname( $dstPath ) ) );
+ if ( !$status->isOK() ) {
+ $this->error( print_r( $status->getErrorsArray(), true ) );
+ $this->error( "Could not copy $srcPath to $dstPath.", 1 ); // die
}
+ $ops[] = array( 'op' => 'store',
+ 'src' => $fsFile->getPath(), 'dst' => $dstPath, 'overwrite' => 1 );
}
+
+ $status = $dst->doOperations( $ops, array( 'nonJournaled' => 1 ) );
+ if ( !$status->isOK() ) {
+ $this->error( print_r( $status->getErrorsArray(), true ) );
+ $this->error( "Could not copy file batch.", 1 ); // die
+ } else {
+ $this->output( "Copied these file(s):\n" . implode( "\n", $srcPathsRel ) . "\n\n" );
+ }
+ }
+
+ protected function filesAreSame( FileBackend $src, FileBackend $dst, $sPath, $dPath ) {
+ return (
+ ( $src->fileExists( array( 'src' => $sPath, 'latest' => 1 ) )
+ === $dst->fileExists( array( 'src' => $dPath, 'latest' => 1 ) ) // short-circuit
+ ) && ( $src->getFileSize( array( 'src' => $sPath, 'latest' => 1 ) )
+ === $dst->getFileSize( array( 'src' => $dPath, 'latest' => 1 ) ) // short-circuit
+ ) && ( $src->getFileSha1Base36( array( 'src' => $sPath, 'latest' => 1 ) )
+ === $dst->getFileSha1Base36( array( 'src' => $dPath, 'latest' => 1 ) )
+ )
+ );
}
}
diff --git a/tests/parser/parserTests.txt b/tests/parser/parserTests.txt
index a3327b4887..236783adea 100644
--- a/tests/parser/parserTests.txt
+++ b/tests/parser/parserTests.txt
@@ -9504,6 +9504,328 @@ abc