[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [websites/wiki-kde-org/develop] extensions/ReplaceText: update replacetext extension
From:       Ingo Malchow <imalchow () kde ! org>
Date:       2012-08-22 13:39:55
Message-ID: 20120822133955.C2510A6042 () git ! kde ! org
[Download RAW message or body]

Git commit d3ebc54cf6cded8660938e637e30ecf207d124f5 by Ingo Malchow.
Committed on 22/08/2012 at 15:39.
Pushed by imalchow into branch 'develop'.

update replacetext extension

M  +2    -2    extensions/ReplaceText/README
M  +34   -19   extensions/ReplaceText/ReplaceText.alias.php
M  +315  -169  extensions/ReplaceText/ReplaceText.i18n.php
M  +5    -5    extensions/ReplaceText/ReplaceText.php
M  +25   -5    extensions/ReplaceText/ReplaceTextJob.php
M  +135  -113  extensions/ReplaceText/SpecialReplaceText.php

http://commits.kde.org/websites/wiki-kde-org/d3ebc54cf6cded8660938e637e30ecf207d124f5

diff --git a/extensions/ReplaceText/README b/extensions/ReplaceText/README
index 04ae265..2f40c66 100644
--- a/extensions/ReplaceText/README
+++ b/extensions/ReplaceText/README
@@ -1,6 +1,6 @@
 Replace Text Extension
 
-        Version 0.8.1
+        Version 0.9.3
         Yaron Koren and Niklas Laxström
 
 This is free software licenced under the GNU General Public Licence. Please
@@ -28,7 +28,7 @@ http://www.mediawiki.org/wiki/Extension:Replace_Text
 
 == Requirements ==
 
-This version of the Replace Text extension requires MediaWiki 1.13 or higher.
+This version of the Replace Text extension requires MediaWiki 1.16 or higher.
 
 == Installation ==
 
diff --git a/extensions/ReplaceText/ReplaceText.alias.php \
b/extensions/ReplaceText/ReplaceText.alias.php index 25a9681..04cafae 100644
--- a/extensions/ReplaceText/ReplaceText.alias.php
+++ b/extensions/ReplaceText/ReplaceText.alias.php
@@ -23,6 +23,11 @@ $specialPageAliases['arz'] = array(
 	'ReplaceText' => array( 'تبديل_نص' ),
 );
 
+/** Breton (Brezhoneg) */
+$specialPageAliases['br'] = array(
+	'ReplaceText' => array( 'Erlc\'hiañTestenn' ),
+);
+
 /** Bosnian (Bosanski) */
 $specialPageAliases['bs'] = array(
 	'ReplaceText' => array( 'ZamjenaTeksta' ),
@@ -43,6 +48,11 @@ $specialPageAliases['dv'] = array(
 	'ReplaceText' => array( 'ލިޔުން ބަދަލުކުރައްވާ' ),
 );
 
+/** Persian (فارسی) */
+$specialPageAliases['fa'] = array(
+	'ReplaceText' => array( 'جایگزینی_متن' ),
+);
+
 /** Finnish (Suomi) */
 $specialPageAliases['fi'] = array(
 	'ReplaceText' => array( 'Korvaa' ),
@@ -50,17 +60,17 @@ $specialPageAliases['fi'] = array(
 
 /** French (Français) */
 $specialPageAliases['fr'] = array(
-	'ReplaceText' => array( 'Remplacer texte', 'RemplacerTexte' ),
+	'ReplaceText' => array( 'Remplacer_texte', 'RemplacerTexte' ),
 );
 
 /** Franco-Provençal (Arpetan) */
 $specialPageAliases['frp'] = array(
-	'ReplaceText' => array( 'Remplaciér lo tèxto', 'RemplaciérLoTèxto' ),
+	'ReplaceText' => array( 'Remplaciér_lo_tèxto', 'RemplaciérLoTèxto' ),
 );
 
 /** Galician (Galego) */
 $specialPageAliases['gl'] = array(
-	'ReplaceText' => array( 'Substituír o texto' ),
+	'ReplaceText' => array( 'Substituír_o_texto' ),
 );
 
 /** Swiss German (Alemannisch) */
@@ -83,9 +93,14 @@ $specialPageAliases['hsb'] = array(
 	'ReplaceText' => array( 'Tekst narunać' ),
 );
 
+/** Haitian (Kreyòl ayisyen) */
+$specialPageAliases['ht'] = array(
+	'ReplaceText' => array( 'RanplaseTeks' ),
+);
+
 /** Hungarian (Magyar) */
 $specialPageAliases['hu'] = array(
-	'ReplaceText' => array( 'Szöveg csere' ),
+	'ReplaceText' => array( 'Szöveg_csere' ),
 );
 
 /** Interlingua (Interlingua) */
@@ -143,9 +158,14 @@ $specialPageAliases['mt'] = array(
 	'ReplaceText' => array( 'BiddelTest' ),
 );
 
+/** Norwegian Bokmål (‪Norsk (bokmål)‬) */
+$specialPageAliases['nb'] = array(
+	'ReplaceText' => array( 'Teksterstatning' ),
+);
+
 /** Nedersaksisch (Nedersaksisch) */
 $specialPageAliases['nds-nl'] = array(
-	'ReplaceText' => array( 'Tekse_vervangen' ),
+	'ReplaceText' => array( 'Tekste_vervangen' ),
 );
 
 /** Dutch (Nederlands) */
@@ -153,11 +173,6 @@ $specialPageAliases['nl'] = array(
 	'ReplaceText' => array( 'TekstVervangen' ),
 );
 
-/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬) */
-$specialPageAliases['no'] = array(
-	'ReplaceText' => array( 'Teksterstatning' ),
-);
-
 /** Occitan (Occitan) */
 $specialPageAliases['oc'] = array(
 	'ReplaceText' => array( 'Remplaçar tèxte', 'RemplaçarTèxte' ),
@@ -165,7 +180,7 @@ $specialPageAliases['oc'] = array(
 
 /** Portuguese (Português) */
 $specialPageAliases['pt'] = array(
-	'ReplaceText' => array( 'Substituir texto' ),
+	'ReplaceText' => array( 'Substituir_texto' ),
 );
 
 /** Slovak (Slovenčina) */
@@ -178,9 +193,14 @@ $specialPageAliases['sq'] = array(
 	'ReplaceText' => array( 'ZëvendësoTekstin' ),
 );
 
-/** Serbian Cyrillic ekavian (Српски (ћирилица)) */
+/** Serbian (Cyrillic script) (‪Српски (ћирилица)‬) */
 $specialPageAliases['sr-ec'] = array(
-	'ReplaceText' => array( 'ЗамениТекст' ),
+	'ReplaceText' => array( 'ЗамениТекст', 'Замени_текст' ),
+);
+
+/** Swedish (Svenska) */
+$specialPageAliases['sv'] = array(
+	'ReplaceText' => array( 'Ersätt_text' ),
 );
 
 /** Swahili (Kiswahili) */
@@ -201,9 +221,4 @@ $specialPageAliases['tr'] = array(
 /** Vèneto (Vèneto) */
 $specialPageAliases['vec'] = array(
 	'ReplaceText' => array( 'SostuituissiTesto' ),
-);
-
-/**
- * For backwards compatibility with MediaWiki 1.15 and earlier.
- */
-$aliases =& $specialPageAliases;
\ No newline at end of file
+);
\ No newline at end of file
diff --git a/extensions/ReplaceText/ReplaceText.i18n.php \
b/extensions/ReplaceText/ReplaceText.i18n.php index 2013c8b..04bfb7b 100644
--- a/extensions/ReplaceText/ReplaceText.i18n.php
+++ b/extensions/ReplaceText/ReplaceText.i18n.php
@@ -20,6 +20,8 @@ You will then be shown a list of pages that contain the search \
text, and you can  Your name will appear in page histories as the user responsible \
for any changes.',  'replacetext_originaltext' => 'Original text:',
 	'replacetext_replacementtext' => 'Replacement text:',
+	'replacetext_useregex' => 'Use regular expressions',
+	'replacetext_regexdocu' => '(Example: values of "a(.*)c" for "Original text" and \
"ac$1" for "Replacement text" would replace "abc" with "acb".)',  \
'replacetext_optionalfilters' => 'Optional filters:',  'replacetext_categorysearch' \
=> 'Replace only in category:',  'replacetext_prefixsearch' => 'Replace only in pages \
with the prefix:', @@ -44,7 +46,6 @@ Your name will appear in page histories as the \
user responsible for any changes.  'replacetext_warning' => "'''Warning:''' There \
{{PLURAL:$1|is $1 page that already contains|are $1 pages that already contain}} the \
replacement string, \"$2\". If you make this replacement you will not be able to \
separate your replacements from these strings.",  'replacetext_blankwarning' => \
"'''Warning:''' Because the replacement string is blank, this operation will not be \
reversible.",  'replacetext_continue' => 'Continue',
-	'replacetext_cancel' => '(Click the "Back" button in your browser to cancel the \
operation.)',  // content messages
 	'replacetext_editsummary' => 'Text replace - "$1" to "$2"',
 	'right-replacetext' => 'Do string replacements on the entire wiki',
@@ -54,9 +55,11 @@ Your name will appear in page histories as the user responsible \
                for any changes.
  * @author Darth Kule
  * @author EugeneZelenko
  * @author Fryed-peach
+ * @author Kwj2772
  * @author McMonster
  * @author Nike
  * @author Purodha
+ * @author Umherirrender
  */
 $messages['qqq'] = array(
 	'replacetext' => "This message is displayed as a title of this extension's special \
page.", @@ -65,12 +68,14 @@ $messages['qqq'] = array(
 {{Identical|Content page}}',
 	'replacetext_docu' => "Description of how to use this extension, displayed on the \
extension's special page ([[Special:ReplaceText]]).",  'replacetext_originaltext' => \
'Label of the text field, where user enters original piece of text, which would be \
replaced.', +	'replacetext_regexdocu' => '* "Original text" - \
{{msg-mw|replacetext_originaltext}} +* "Replacement text" - \
{{msg-mw|replacetext_replacementtext}}',  'replacetext_choosepagesforedit' => \
'Displayed over the list of pages where the given text was found.',  \
'replacetext_replace' => 'Label of the button, which triggers the begin of \
replacment.  
 {{Identical|Replace}}',
 	'replacetext_continue' => '{{Identical|Continue}}',
-	'right-replacetext' => '{{doc-right}}',
+	'right-replacetext' => '{{doc-right|replacetext}}',
 );
 
 /** Afrikaans (Afrikaans)
@@ -105,7 +110,6 @@ $messages['af'] = array(
 	'replacetext_blankwarning' => 'Omdat u teks met niks vervang kan hierdie aksie nie \
ongedaan gemaak word nie.  Wil u voortgaan?',
 	'replacetext_continue' => 'Gaan voort',
-	'replacetext_cancel' => '(Kliek op die "Terug"-knoppie in u webblaaier om hierdie \
operasie te kanselleer.)',  'replacetext_editsummary' => "Teks vervang - '$1' na \
'$2'",  'right-replacetext' => 'Doen vervangings oor die hele wiki',
 );
@@ -146,7 +150,6 @@ $messages['ar'] = array(
 	'replacetext_warning' => "'''تحذير''': توجد {{PLURAL:$1||صفحة \
واحدة تحتوي|صفحتان تحتويان|$1 صفحات تحتوي|$1 \
صفحة تحتوي}} بالفعل على سلسلة الاستبدال '$2'. إذا \
قمت بهذا الاستبدال فلن تصبح قادرًا على فصل \
استبدالاتك عن هذه السلاسل.",  'replacetext_blankwarning' => \
'لأن سلسلة الاستبدال فارغة، هذه العملية لن \
تكون عكسية؛ استمر؟',  'replacetext_continue' => 'استمر',
-	'replacetext_cancel' => '(اضغط زر "رجوع" في متصفحك لإلغاء \
العملية.)',  'replacetext_editsummary' => "استبدال النص - '$1' \
ب'$2'",  'right-replacetext' => 'القيام باستبدال للسلاسل في \
الويكي بأكمله',  );
@@ -186,14 +189,63 @@ $messages['arz'] = array(
 استمرار مع الاستبدال؟",
 	'replacetext_blankwarning' => 'لأن سلسلة الاستبدال فارغة، \
هذه العملية لن تكون عكسية؛ استمر؟',  \
                'replacetext_continue' => 'استمر',
-	'replacetext_cancel' => '(اضغط زر "رجوع" علشان إلغاء \
العملية.)',  'replacetext_editsummary' => "استبدال النص - '$1' \
ب'$2'",  'right-replacetext' => 'القيام باستبدال للسلاسل فى \
الويكى بأكمله',  );
 
-/** Belarusian (Taraškievica orthography) (Беларуская \
(тарашкевіца)) +/** Azerbaijani (Azərbaycanca)
+ * @author Cekli829
+ */
+$messages['az'] = array(
+	'replacetext_originaltext' => 'Orijinal mətn:',
+);
+
+/** Bashkir (Башҡортса)
+ * @author Assele
+ */
+$messages['ba'] = array(
+	'replacetext' => 'Тексты алмаштырырға',
+	'replacetext-desc' => 'Хәкимдәргә бөтә эстәлек \
биттәрендә тексты табып алмаштырырға \
мөмкинлек биреүсе [[Special:ReplaceText|махсус бит]] \
менән тәьмин итә', +	'replacetext_docu' => 'Был викиның \
бөтә биттәрендә бер текст юлын икенсе менән \
алмаштырыр өсөн, ике текст керетегеҙ һәм \
"Дауам итергә" төймәһенә баҫығыҙ. +Артабан \
һеҙгә эҙләнгән тексты үҙ эсенә алған биттәр \
исемлеге күрһәтеләсәк, һеҙ улар араһында \
алмаштырырға теләгәндәрен һайлай алаһығыҙ. \
+Һеҙҙең исемегеҙ биттәрҙең үҙгәртеү \
тарихтарында үҙгәртеүҙәргә яуаплы ҡатнашыусы \
булараҡ күрһәтеләсәк.', +	'replacetext_originaltext' => \
'Сығанаҡ текст:', +	'replacetext_replacementtext' => 'Алмаш \
текст:', +	'replacetext_useregex' => ' егуляр аңлатмаларҙы \
ҡулланырға', +	'replacetext_regexdocu' => '(Миҫал: "Сығанаҡ \
текст" өсөн "a(.*)c" аңлатмаһы һәм "Алмаш текст" \
өсөн "ac$1" "abc" тексын "acb" тип алмаштырасаҡ.)', \
+	'replacetext_optionalfilters' => 'Мөһим булмаған һөҙгөстәр:', \
+	'replacetext_categorysearch' => 'Был категорияла ғына \
алмаштырырға:', +	'replacetext_prefixsearch' => 'Ошо хәрефтәр \
менән башланған биттәрҙә генә алмаштырырға:', \
+	'replacetext_editpages' => 'Тексты бит эстәлектәрендә \
алмаштырырға', +	'replacetext_movepages' => 'Тексты бит \
исемдәрендә, мөмкин булһа, алмаштырырға', \
+	'replacetext_givetarget' => 'Һеҙ алмаштырыла торған юлды \
күрһәтергә тейешһегеҙ.', +	'replacetext_nonamespace' => 'Һеҙ \
кәмендә бер исемдәр арауығын һайларға \
тейешһегеҙ.', +	'replacetext_editormove' => 'Һеҙ кәмендә бер \
алмаштырыу төрөн һайларға тейешһегеҙ.', \
+	'replacetext_choosepagesforedit' => '"$1" тексын "$2" менән \
түбәндәге {{PLURAL:$3|биттә|биттәрҙә}} \
алмаштырырға:', +	'replacetext_choosepagesformove' => '"$1" тексын \
"$2" менән түбәндәге бит \
{{PLURAL:$3|исемендә|исемдәрендә}} алмаштырырға:', \
+	'replacetext_cannotmove' => 'Түбәндәге \
{{PLURAL:$1|биттең|биттәрҙең}} исемен үҙгәртеп \
булмай:', +	'replacetext_formovedpages' => 'Исемдәре \
үҙгәртелгән биттәр өсөн:', +	'replacetext_savemovedpages' => \
'Иҫке исемдәрен яңы исемдәргә йүнәлтеүҙәр \
рәүешендә һаҡларға', +	'replacetext_watchmovedpages' => 'Был \
биттәрҙе күҙәтеүҙәр исемлегенә индерергә', \
+	'replacetext_invertselections' => 'Һайланғандарҙы \
әйләндерергә', +	'replacetext_replace' => 'Алмаштырырға',
+	'replacetext_success' => '"$1" "$2" менән $3 {{PLURAL:$3|биттә}} \
алмаштырыласаҡ.', +	'replacetext_noreplacement' => '"$1" юлын үҙ \
эсенә алған бер бит тә табылманы.', +	'replacetext_nomove' \
=> 'Исемендә "$1" булған бер бит тә табылманы.', \
+	'replacetext_nosuchcategory' => '"$1" исемле бер категория ла \
юҡ.', +	'replacetext_return' => 'Формаға кире ҡайтырға.',
+	'replacetext_warning' => "'''Иғтибар:''' Алмаш \"\$2\" тексын \
үҙ эсенә алған {{PLURAL:\$1|\$1 бит}} бар инде. Әгәр һеҙ \
алмаштырыуҙы башҡарһағыҙ, алмаштырылған \
текстарҙы булғандарынан айыра \
алмаясаҡһығыҙ.", +	'replacetext_blankwarning' => \
"'''Иғтибар:'''Алмаш текст буш булғанға күрә, был \
ғәмәлде кире алыу мөмкин түгел.", +	'replacetext_continue' \
=> 'Дауам итергә', +	'replacetext_editsummary' => '"$1" тексын "$2" \
менән алмаштырыу', +	'right-replacetext' => 'Бөтә викила \
тексты алмаштырыу', +);
+
+/** Belarusian (Taraškievica orthography) (‪Беларуская \
                (тарашкевіца)‬)
  * @author EugeneZelenko
  * @author Jim-by
+ * @author Wizardist
+ * @author Zedlik
  */
 $messages['be-tarask'] = array(
 	'replacetext' => 'Замяніць тэкст',
@@ -201,6 +253,8 @@ $messages['be-tarask'] = array(
 	'replacetext_docu' => "Каб замяніць адзін радок на іншы \
ва ўсіх звычайных старонках \
{{GRAMMAR:родны|{{SITENAME}}}}, увядзіце два радкі тут, а \
потым націсьніце 'Працягваць'. Будзе паказаны \
сьпіс старонак, якія ўтрымліваюць тэкст, які \
Вы шукалі, і Вы зможаце выбраць старонкі, дзе \
Вы жадаеце зрабіць замену. Ваша імя будзе \
запісанае ў гісторыю старонкі, таму што \
ўдзельнікі адказныя за ўсе зробленыя зьмены.",  \
'replacetext_originaltext' => 'Арыгінальны тэкст:',  \
'replacetext_replacementtext' => 'Тэкст на замену:', \
+	'replacetext_useregex' => 'Выкарыстоўваць рэгулярныя \
выразы', +	'replacetext_regexdocu' => '(Напрыклад, выразы  \
a(.*)c  ў полі  Арыгінальны тэкст  і  ac$1  у полі  \
Тэкст на замену  прывядуць да замены  abc  на  \
acb .)',  'replacetext_optionalfilters' => 'Неабавязковыя \
фільтры:',  'replacetext_categorysearch' => 'Замяніць толькі ў \
катэгорыі:',  'replacetext_prefixsearch' => 'Замяніць толькі \
ў старонках, назвы якіх пачынаюцца з:', @@ -208,7 \
+262,7 @@ $messages['be-tarask'] = array(  'replacetext_movepages' => \
'Замяніць тэкст у назвах старонак, калі гэта \
магчыма',  'replacetext_givetarget' => 'Вам неабходна \
пазначыць радок для замены.',  'replacetext_nonamespace' => \
'Вам неабходна выбраць хаця б адну прастору \
                назваў.',
-	'replacetext_editormove' => 'Вам неабходна выбраць хаця б \
адну з установак пераносу.', +	'replacetext_editormove' => \
'Вам неабходна выбраць хаця б адну з наладаў \
пераносу.',  'replacetext_choosepagesforedit' => 'Калі ласка, \
выберыце {{PLURAL:$3|старонку, у якой|старонкі, у \
якіх}} Вы жадаеце замяніць  $1  на  $2 :',  \
'replacetext_choosepagesformove' => 'Замяніць  $1  на  $2  у \
{{PLURAL:$3|назьве наступнай старонкі|назвах \
наступных старонак}}:',  'replacetext_cannotmove' => \
'{{PLURAL:$1|Наступная старонка ня можа быць \
перанесена|Наступныя старонкі ня могуць быць \
перанесены}}:', @@ -227,7 +281,6 @@ $messages['be-tarask'] = array(
 	'replacetext_blankwarning' => 'У выніку таго, што радок, на \
які павінна адбыцца замена, пусты, апэрацыя ня \
будзе выкананая.  Вы жадаеце працягваць?',
 	'replacetext_continue' => 'Працягваць',
-	'replacetext_cancel' => '(Націсьніце кнопку  Вярнуцца  у \
Вашым браўзэры, каб адмяніць апэрацыю.)',  \
'replacetext_editsummary' => 'Замена тэксту:  $1  на  $2 ',  \
'right-replacetext' => 'замена тэксту ва ўсёй вікі',  );
@@ -246,15 +299,20 @@ $messages['bg'] = array(
 	'replacetext_noreplacement' => "Не бяха открити страници, \
съдържащи низа '$1'.",  'replacetext_blankwarning' => 'Тъй като \
низът за заместване е празен, процесът на \
заместване е необратим; продължаване?',  \
                'replacetext_continue' => 'Продължаване',
-	'replacetext_cancel' => '(натиснете бутона „Back" за \
прекратяване на действието.)',  'replacetext_editsummary' => \
"Заместване на текст - '$1' на '$2'",  );
 
 /** Bengali (বাংলা)
  * @author Bellayet
+ * @author Wikitanvir
  */
 $messages['bn'] = array(
 	'replacetext' => 'লেখা প্রতিস্থাপন',
+	'replacetext_originaltext' => 'মূল লেখা:',
+	'replacetext_replacementtext' => 'প্রতিস্থাপিত \
লেখা:', +	'replacetext_useregex' => 'রেগুলার \
এক্সপ্রেশন ব্যবহার করো', \
+	'replacetext_optionalfilters' => 'ঐচ্ছিক ফিল্টার', \
+	'replacetext_categorysearch' => 'শুধুমাত্র \
বিষয়শ্রেণীতেই প্রতিস্থাপন \
করো:',  );
 
 /** Breton (Brezhoneg)
@@ -270,6 +328,8 @@ Diskouezet e vo deoc'h ur roll pajennoù m'emañ an destenn \
klasket enno ha gall  War wel e teuio hoc'h anv war roll istor pep pajenn evit ma vo \
gouezet gant piv eo bet graet ar cheñchamant.",  'replacetext_originaltext' => \
'Testenn orin :',  'replacetext_replacementtext' => "Testenn erlec'hiañ :",
+	'replacetext_useregex' => 'Ober gant jedadennoù reoliek',
+	'replacetext_regexdocu' => '(Da skouer : Talvoudenn "a(.*)c" evit "Testenn orin" ha \
"ac$1" evit "Testenn erlec\'hiañ" a vo erlec\'ho "abc" gant "acb".)',  \
'replacetext_optionalfilters' => 'Siloù diret :',  'replacetext_categorysearch' => \
"Erlec'hiañ er rummad hepken :",  'replacetext_prefixsearch' => "Erlec'hiañ hepken \
er bajennoù gant ar rakger :", @@ -294,7 +354,6 @@ War wel e teuio hoc'h anv war \
roll istor pep pajenn evit ma vo gouezet gant piv  'replacetext_warning' => \
"'''Diwallit :''' {{PLURAL:\$1| \$1 bajenn enni| \$1 pajenn enno}} ar steudad \
arouezennoù erlec'hiañ zo dija, \"\$2\". Ma kasit ar cheñchamant da benn ne vo ket \
posupl diforc'hañ ar cheñchamantoù degaset ganeoc'h diouzh an neudennadoù-se \
ken.",  'replacetext_blankwarning' => "'''Diwallit : ''' Dre m'eo goullo ar steudad \
erlec'hiañ, ne vo ket tu da zizober an urzh-mañ.",  'replacetext_continue' => \
                "Kenderc'hel",
-	'replacetext_cancel' => '(Evit nulañ an ober klikit war ar bouton "Disto" en ho \
merdeer.)',  'replacetext_editsummary' => 'Erlec\'hiañ an destenn - "$1" dre "$2"',
 	'right-replacetext' => "Krouiñ erlec'hiadurioù testenn er wiki a-bezh",
 );
@@ -308,6 +367,8 @@ $messages['bs'] = array(
 	'replacetext_docu' => "Da bi ste zamijenili jedan tekst s drugim po svim regularnim \
stranicama na ovom wikiju, unesite dva dijela teksta ovdje i kliknite 'Nastavi'. \
Prikazat će Vam se spisak stranica koje sadrže traženi tekst, i možete odabrati \
one kod kojih želite taj tekst zamijeniti. Vaše ime će se prikazati na historiji \
izmjena stranice kao korisnika koji je odgovoran za sve promjene.",  \
'replacetext_originaltext' => 'Prvobitni tekst:',  'replacetext_replacementtext' => \
'Tekst za zamjenu:', +	'replacetext_useregex' => 'Koristi regularne izraze',
+	'replacetext_regexdocu' => '(Primjer: vrijednosti od "a(.*)c" za "Prvobitni tekst" \
i "ac$1" za "Novi tekst" će zamijeniti "abc" sa "acb".)',  \
'replacetext_optionalfilters' => 'Opcionalni filteri:',  'replacetext_categorysearch' \
=> 'Zamijeni samo u kategoriji:',  'replacetext_prefixsearch' => 'Zamijeni samo na \
stranicama sa prefiksom:', @@ -334,16 +395,17 @@ Ako želite napraviti ovu zamjenu \
nećete biti u mogućnosti da razdvojite Vaše  'replacetext_blankwarning' => 'Pošto \
je zamjenski tekst prazan, ovu operaciju neće biti moguće vratiti.  Da li želite \
nastaviti?',  'replacetext_continue' => 'Nastavi',
-	'replacetext_cancel' => '(Kliknite na dugme "Nazad" u Vašem pregledniku da bi \
zaustavili operaciju.)',  'replacetext_editsummary' => "Zamjena teksta - '$1' u \
'$2'",  'right-replacetext' => 'Pravljenje zamjene teksta na cijelom wikiju',
 );
 
 /** Catalan (Catal )
+ * @author SMP
  * @author Solde
  */
 $messages['ca'] = array(
 	'replacetext_continue' => 'Continua',
+	'right-replacetext' => 'Fer substitucions de cadena a tot el wiki',
 );
 
 /** Chechen (Нохчийн)
@@ -367,7 +429,6 @@ Vaše jméno se objeví v historiích stránek jako osoba \
zodpovědná za přís  'replacetext_replacementtext' => 'Nahradit textem:',
 	'replacetext_replace' => 'Nahradit',
 	'replacetext_continue' => 'Pokračovat',
-	'replacetext_cancel' => '(Operaci zrušíte kliknutím na tlačítko „Zpět" ve \
vašem prohlížeči.)',  'replacetext_editsummary' => 'Nahrazení textu „$1" \
textem „$2"',  'right-replacetext' => 'Hledání a nahrazování textu na celé \
wiki',  );
@@ -383,9 +444,11 @@ Vaše jméno se objeví v historiích stránek jako osoba \
zodpovědná za přís  $messages['de'] = array(
 	'replacetext' => 'Text ersetzen',
 	'replacetext-desc' => 'Ergänzt eine [[Special:ReplaceText|Spezialseite]], die eine \
                globale Text-suchen-und-ersetzen-Operation auf allen Inhaltsseiten \
                ermöglicht',
-	'replacetext_docu' => 'Um einen Text durch einen anderen Text auf allen \
Inhaltsseiten zu ersetzen, gib die beiden Textteile hier ein und klicke auf die \
Ersetzen-Schaltfläche. Dein Benutzername wird in der Versionsgeschichte \
aufgenommen.', +	'replacetext_docu' => 'Um einen Text durch einen anderen Text auf \
allen Inhaltsseiten zu ersetzen, gib hier die beiden Textteile ein und klicke danach \
auf die „Fortsetzen"-Schaltfläche. Auf der dann folgenden Seite erhält man eine \
Aufzählung der Seiten, die den zu ersetzenden Text enthalten. Dort kann man auch \
auswählen, auf welchen Seiten die Ersetzungen durchgeführt werden sollen. Dein \
Benutzername wird während der Ersetzungen in der Versionsgeschichte aufgenommen.',  \
'replacetext_originaltext' => 'Originaltext:',  'replacetext_replacementtext' => \
'Neuer Text:', +	'replacetext_useregex' => 'Platzhalter und reguläre Ausdrücke \
verwenden', +	'replacetext_regexdocu' => '(Beispiel: Die Werte für „a(.*)c" für \
„Originaltext" und „ac$1" für „Neuer Text" würden zur Ersetzung „abc" durch \
„acb" führen.)',  'replacetext_optionalfilters' => 'Optionale Filter:',
 	'replacetext_categorysearch' => 'Ersetze nur in der Kategorie:',
 	'replacetext_prefixsearch' => 'Ersetze nur in Seiten mit dem Präfix:',
@@ -411,24 +474,22 @@ $messages['de'] = array(
 Sofern du nun die {{PLURAL:$1|Ersetzung|Ersetzungen}} durchführst, ist eine \
spätere Unterscheidung zwischen den nunmehr zu ersetzenden und den bereits \
vorhandenen Textteilen nicht mehr möglich.",  'replacetext_blankwarning' => \
"'''Warnung:''' Da der zu ersetzende Textteil leer ist, kann die Operation nicht \
rückgängig gemacht werden. Möchtest du dennoch fortfahren?",  \
                'replacetext_continue' => 'Fortfahren',
-	'replacetext_cancel' => '(Klicke auf die „Zurück"-Schaltfläche, um die \
Operation abzubrechen.)',  'replacetext_editsummary' => 'Textersetzung - „$1" durch \
„$2"',  'right-replacetext' => 'Textersetzung für das gesamte Wiki durchführen',
 );
 
-/** German (formal address) (Deutsch (Sie-Form))
+/** German (formal address) (‪Deutsch (Sie-Form)‬)
  * @author Imre
  * @author Kghbln
  * @author Umherirrender
  */
 $messages['de-formal'] = array(
-	'replacetext_docu' => 'Um einen Text durch einen anderen Text auf allen \
Inhaltsseiten zu ersetzen, geben Sie die beiden Textteile hier ein und klicken Sie \
auf die Ersetzen-Schaltfläche. Ihr Benutzername wird in der Versionsgeschichte \
aufgenommen.', +	'replacetext_docu' => 'Um einen Text durch einen anderen Text auf \
allen Inhaltsseiten zu ersetzen, geben Sie hier die beiden Textteile ein und klicken \
danach auf die „Fortsetzen"-Schaltfläche. Auf der dann folgenden Seite erhält man \
eine Aufzählung der Seiten, die den zu ersetzenden Text enthalten. Dort kann man \
auch auswählen, auf welchen Seiten die Ersetzungen durchgeführt werden sollen. Ihr \
Benutzername wird während der Ersetzungen in der Versionsgeschichte aufgenommen.',  \
'replacetext_givetarget' => 'Sie müssen eine Zeichenkette angeben, die ersetzt \
werden soll.',  'replacetext_editormove' => 'Sie müssen mindestens eine \
Ersetzungsoption wählen.',  'replacetext_warning' => "'''Warnung:''' $1 \
{{PLURAL:$1|Seite enthält|Seiten enthalten}} bereits den zu ersetzenden Textteil \
„$2".  Sofern Sie nun die {{PLURAL:$1|Ersetzung|Ersetzungen}} durchführen, ist \
eine spätere Unterscheidung zwischen den nunmehr zu ersetzenden und den bereits \
vorhandenen Textteilen nicht mehr möglich.",  'replacetext_blankwarning' => \
"'''Warnung:''' Da der zu ersetzende Textteil leer ist, kann die Operation nicht \
                rückgängig gemacht werden. Möchten Sie dennoch fortfahren?",
-	'replacetext_cancel' => '(Klicken Sie auf die „Zurück"-Schaltfläche, um die \
Operation abzubrechen.)',  );
 
 /** Lower Sorbian (Dolnoserbski)
@@ -440,6 +501,8 @@ $messages['dsb'] = array(
 	'replacetext_docu' => "Aby wuměnił tekst pśez drugi tekst na wšych regularnych \
bokach w toś tom wikiju, zapódaj wobej tekstowej źěla a klikni na 'Dalej'. \
Buźoš pótom lisćinu bokow wiźeś, kótarež wopśimuju pytański tekst a \
móžoš wubraś te, w kótarychž coš jen wuměniś. Twójo mě zjawijo se w \
stawiznach boka ako wužywaŕ, kótaryž jo zagronity za te změny.",  \
'replacetext_originaltext' => 'Originalny tekst:',  'replacetext_replacementtext' => \
'Tekst pó wuměnjenju:', +	'replacetext_useregex' => 'Regularne wuraze wužywaś',
+	'replacetext_regexdocu' => '(Pśikład: gódnoty za "a(.*)c" za "originalny tekst" \
a "ac$1" za "nowy tekst" by "abc" pśez "acb" wuměnili.)',  \
'replacetext_optionalfilters' => 'Opcionalne filtry:',  'replacetext_categorysearch' \
=> 'Jano w kategoriji wuměniś:',  'replacetext_prefixsearch' => 'Jano w bokach \
wuměniś z prefiksom:', @@ -465,7 +528,6 @@ $messages['dsb'] = array(
 Jolic wuwjedujoš toś tu wuměnu, njamóžoš rozeznaś swóje wuměny wót toś \
togo teksta.',  'replacetext_blankwarning' => 'Dokulaž njejo tekst za wuměnjenje, \
toś ta operacija njedajo se anulěrowaś. Coš weto pókšacowaś?',  \
                'replacetext_continue' => 'Dalej',
-	'replacetext_cancel' => '(Klikni na tłocašk "Slědk" w swójom wobglědowaku, aby \
pśetergnuł operaciju.)',  'replacetext_editsummary' => "Wuměna teksta - '$1' do \
'$2'",  'right-replacetext' => 'Tekst na cełem wikiju wuměniś',
 );
@@ -562,7 +624,6 @@ Si realizas esta sustituación, no podrás separar tus \
sustituciones de estas ca  'replacetext_blankwarning' => 'Como la cadena de reemplazo \
está vacía, esta operación no podrá revertirse.   Desea continuar ?',
 	'replacetext_continue' => 'Continuar',
-	'replacetext_cancel' => '(Haga click en el botón "retroceder" en su navegador para \
cancelar la operación.)',  'replacetext_editsummary' => "Texto reemplaza - '$1' a \
'$2'",  'right-replacetext' => 'Reemplaza cadenas de caracteres en toda la wiki',
 );
@@ -581,27 +642,48 @@ $messages['eu'] = array(
 	'replacetext_replace' => 'Ordeztu',
 	'replacetext_noreplacement' => "Ez da aurkitu '$1' karaktere-katea duen \
orrialderik.",  'replacetext_continue' => 'Jarraitu',
-	'replacetext_cancel' => '(Zure nabigatzailearen atzerako botoia sakatu ekintza \
deuseztatzeko.)',  'replacetext_editsummary' => "Testu aldaketa - '$1'(e)tik \
'$2'(e)ra.",  );
 
 /** Persian (فارسی)
+ * @author Ebraminio
  * @author Huji
+ * @author Wayiran
  */
 $messages['fa'] = array(
 	'replacetext' => 'جایگزینی متن',
 	'replacetext-desc' => 'یک [[Special:ReplaceText|صفحهٔ ویژه]] اضافه \
می‌کند که به مدیران اجازه می‌دهد یک جستجو و \
جایگزینی سراسری در تمام محتوای ویکی انجام \
دهند',  'replacetext_docu' => 'برای جایگزین کردن یک رشتهٔ \
متنی با رشته دیگر در کل داده‌های این ویکی، شما \
می‌توانید دو متن را در زیر وارد کرده و دکمهٔ  \
جایگزین کن  را بزنید. اسم شما در تاریخچهٔ \
صفحه‌ها به عنوان کاربری که مسئول این تغییرها \
                است ثبت می‌شود.',
-	'replacetext_originaltext' => 'متن اصلی',
-	'replacetext_replacementtext' => 'متن جایگزین',
+	'replacetext_originaltext' => 'متن اصلی:',
+	'replacetext_replacementtext' => 'متن جایگزین:',
+	'replacetext_useregex' => 'استفاده از عبارت باقاعده',
+	'replacetext_regexdocu' => '(مثال: مقادیر  a(.*)c  برای  متن \
اصلی  و  ac$1  برای  متن جایگزین ،  abc  را با  acb  \
جایگزین خواهد کرد.)', +	'replacetext_optionalfilters' => \
'پالایه‌های اختیاری:', +	'replacetext_categorysearch' => \
'جایگزینی فقط در ردهٔ:', +	'replacetext_prefixsearch' => \
'جایگزینی فقط در صفحه‌هایی با پیشوند:', \
+	'replacetext_editpages' => 'جایگزینی متن در محتویات صفحه', \
+	'replacetext_movepages' => 'جایگزینی متن و در عنوان \
صفحه‌ها، وقتی که امکان‌پذیر است', \
+	'replacetext_givetarget' => 'شما می‌بایست متنی را که باید \
جایگزین شود مشخص نمایید.', +	'replacetext_nonamespace' => 'شما \
می‌بایست حداقل یک فضای نام را انتخاب کنید.', \
+	'replacetext_editormove' => 'شما می‌بایست حداقل یکی از \
گزینه‌های جایگزین کردن را انتخاب کنید.', \
+	'replacetext_choosepagesforedit' => 'جایگزینی  $1  با  $2  در \
متن این {{PLURAL:$3|صفحه|صفحه‌ها}}:', \
+	'replacetext_choosepagesformove' => 'جایگزینی  $1  با  $2  در \
{{PLURAL:$3|عنوان این صفحه|عنوان این صفحه‌ها}}', \
+	'replacetext_cannotmove' => 'این {{PLURAL:$1|صفحه|صفحه‌ها}} \
نمی‌توانند منتقل شوند:', +	'replacetext_formovedpages' => \
'برای صفحه‌های منتقل شده:', +	'replacetext_savemovedpages' => \
'ذخیره‌سازی عنوان‌های قدیم به عنوان تغییر \
مسیرهایی به عنوان‌های جدید', +	'replacetext_watchmovedpages' \
=> '‌پی‌گیری این صفحه‌ها', +	'replacetext_invertselections' => \
'وارانه کردن انتخاب‌ها',  'replacetext_replace' => \
                'جایگزین کن',
-	'replacetext_success' => "در $3 صفحه '$1' را با '$2' جایگزین \
کرد.", +	'replacetext_success' => 'در $3 {{PLURAL:$3|صفحه|صفحه}}  $1  \
با  $2  جایگزین می‌شود.',  'replacetext_noreplacement' => \
"جایگزینی انجام نشد؛ صفحه‌ای که حاوی '$1' باشد \
                پیدا نشد.",
-	'replacetext_warning' => "در حال حاضر $1 حاوی متن جایگزین، \
'$2'، هستند؛ اگر شما این جایگزینی را انجام دهید \
قادر نخواهید بود که مواردی که جایگزین کردید را \
از مواردی که از قبل وجود داشته تفکیک کنید. آیا \
ادامه می‌دهید؟", +	'replacetext_nomove' => 'صفحه‌ای پیدا \
نشد که عنوان آن  $1  را داشته باشد.', \
+	'replacetext_nosuchcategory' => 'رده‌ای با نام  $1  وجود \
ندارد.', +	'replacetext_return' => 'بازگشت به فرم.',
+	'replacetext_warning' => "'''هشدار:''' در حال حاضر $1 صفحه \
وجود دارد که حاوی رشتهٔ جایگزینی  $2  \
{{PLURAL:$1|است|هستند}}. اگر شما این جایگزینی را \
انجام دهید، قادر نخواهید بود تا \
جایگزینی‌هایتان را از این رشته‌ها جدا کنید.",  \
'replacetext_blankwarning' => 'چون متن جایگزین خالی است، این \
عمل قابل بازگشت نخواهد بود؛ ادامه می‌دهید؟',  \
                'replacetext_continue' => 'ادامه',
-	'replacetext_cancel' => '(دکمهٔ  بازگشت  را بزنید تا عمل \
را لغو کنید.)',  'replacetext_editsummary' => "جایگزینی متن - \
'$1' به '$2'", +	'right-replacetext' => 'انجام جایگزین کردن \
رشته در تمام ویکی',  );
 
 /** Finnish (Suomi)
@@ -618,6 +700,7 @@ $messages['fi'] = array(
 	'replacetext_docu' => "Korvataksesi yhden merkkijonon toisella kaikissa tämän \
wikin tavallisissa sivuissa, syötä molemmat kaksi tekstinpätkää tänne ja sitten \
napsauta kohtaa 'Jatka'. Tämän jälkeen sinulle näytetään luettelo sivuista, \
jotka sisältävät haetun tekstin, ja voit valita ne, joihin haluat korvata sen. Oma \
nimesi näkyy sivun historiassa käyttäjänä joka on vastuussa kaikista tehdyistä \
muutoksista.",  'replacetext_originaltext' => 'Alkuperäinen teksti',
 	'replacetext_replacementtext' => 'Korvaava teksti',
+	'replacetext_useregex' => 'Käytä säännöllisiä lausekkeita',
 	'replacetext_optionalfilters' => 'Lisäehtoja:',
 	'replacetext_categorysearch' => 'Muokkaa ainoastaan sivuja, jotka ovat luokassa:',
 	'replacetext_prefixsearch' => 'Korvaa ainoastaan sivuilla, joissa on etuliite:',
@@ -639,8 +722,8 @@ $messages['fi'] = array(
 	'replacetext_nomove' => 'No pages were found whose title contains "$1".',
 	'replacetext_nosuchcategory' => 'Luokkaa "$1" ei ole.',
 	'replacetext_return' => 'Palaa lomakkeeseen.',
-	'replacetext_warning' => '\'\'\'Varoitus:\'\'\' {{PLURAL:$1|$1 sivu| $1 sivua}} \
sisältää jo korvaavan tekstin, "$2". Korvauksen jälkeen korvatut ja jo tekstin \
                sisältäneet kohdat eivät erotu toisistaan.
-If you make this replacement you will not be able to separate your replacements from \
these strings.', +	'replacetext_warning' => "'''Varoitus:''' {{PLURAL:$1|$1 sivu| $1 \
sivua}} sisältää jo korvaavan tekstin, "$2". +Korvauksen jälkeen korvatut ja jo \
tekstin sisältäneet kohdat eivät erotu toisistaan.",  'replacetext_blankwarning' \
=> "'''Varoitus:''' Koska korvaava teksti on tyhjä, operaatiota ei voi palauttaa \
käänteisellä korvauksella.",  'replacetext_continue' => 'Jatka',
 	'replacetext_editsummary' => 'Tekstin korvaus – "$1" muotoon "$2"',
@@ -664,6 +747,8 @@ $messages['fr'] = array(
 	'replacetext_docu' => 'Pour remplacer une chaîne de caractères par une autre sur \
l'ensemble des données des pages de ce wiki, vous pouvez entrez les deux textes ici \
et cliquer sur   {{int:replacetext_replace}}  . Votre nom apparaîtra dans \
l'historique des pages tel un utilisateur auteur des changements.',  \
'replacetext_originaltext' => 'Texte original :',  'replacetext_replacementtext' => \
'Texte de remplacement :', +	'replacetext_useregex' => 'Utiliser des expressions \
rationnelles', +	'replacetext_regexdocu' => '(Exemple : la valeur   a(.*)c   pour  \
 texte original   et   ac$1   pour   texte de remplacement   remplace   abc   \
avec   acb  .)',  'replacetext_optionalfilters' => 'Filtres optionnels :',
 	'replacetext_categorysearch' => 'Remplacer seulement dans la catégorie :',
 	'replacetext_prefixsearch' => 'Remplacer seulement dans les pages ayant le préfixe \
:', @@ -689,7 +774,6 @@ $messages['fr'] = array(
 Si vous effectuez cette substitution, vous ne pourrez pas distinguer vos \
modifications de ces chaînes.',  'replacetext_blankwarning' => 'Parce que la chaîne \
de remplacement est vide, cette opération sera irréversible ; voulez-vous continuer \
?',  'replacetext_continue' => 'Continuer',
-	'replacetext_cancel' => '(Cliquez sur le bouton    Retour   ou   Reculer   de \
votre navigateur pour annuler l'opération.)',  'replacetext_editsummary' => \
'Remplacement du texte —   $1   par   $2  ',  'right-replacetext' => 'Faire des \
remplacements de texte dans tout le wiki',  );
@@ -701,6 +785,7 @@ $messages['frp'] = array(
 	'replacetext' => 'Remplaciér lo tèxto',
 	'replacetext_originaltext' => 'Tèxto d'origina :',
 	'replacetext_replacementtext' => 'Tèxto de remplacement :',
+	'replacetext_useregex' => 'Utilisar des èxprèssions racionèles',
 	'replacetext_optionalfilters' => 'Filtros u chouèx :',
 	'replacetext_formovedpages' => 'Por les pâges renomâs :',
 	'replacetext_watchmovedpages' => 'Siuvre cetes pâges',
@@ -712,14 +797,17 @@ $messages['frp'] = array(
 );
 
 /** Galician (Galego)
+ * @author Hamilton Abreu
  * @author Toliño
  */
 $messages['gl'] = array(
 	'replacetext' => 'Substituír un texto',
 	'replacetext-desc' => 'Proporciona unha [[Special:ReplaceText|páxina especial]] \
para que os administradores poidan facer unha cadea global para atopar e substituír \
                un texto no contido de todas as páxinas dun wiki',
-	'replacetext_docu' => 'Para substituír unha cadea de texto por outra en todas as \
páxinas regulares deste wiki, teclee aquí as dúas pezas do texto e logo prema en \
"Continuar". Despois amosaráselle unha lista das páxinas que conteñen o texto \
buscado e pode elixir en cales quere substituílo. O seu nome aparecerá nos \
histotiais das páxinas como o usuario responsable de calquera cambio.', \
+	'replacetext_docu' => 'Para substituír unha cadea de texto por outra en todas as \
páxinas regulares deste wiki, teclee aquí as dúas pezas do texto e logo prema en \
"Continuar". Despois mostraráselle unha lista das páxinas que conteñen o texto \
buscado e pode elixir en cales quere substituílo. O seu nome aparecerá nos \
histotiais das páxinas como o usuario responsable de calquera cambio.',  \
'replacetext_originaltext' => 'Texto orixinal:',  'replacetext_replacementtext' => \
'Texto de substitución:', +	'replacetext_useregex' => 'Usar expresións regulares',
+	'replacetext_regexdocu' => '(Examplo: os valores "a(.*)c" para o "texto orixinal" e \
"ac$1" para o "texto de substitución" cambiarán "abc" por "acb".)',  \
'replacetext_optionalfilters' => 'Filtros opcionais:',  'replacetext_categorysearch' \
=> 'Substituír só na categoría:',  'replacetext_prefixsearch' => 'Substituír só \
nas páxinas co prefixo:', @@ -728,7 +816,7 @@ $messages['gl'] = array(
 	'replacetext_givetarget' => 'Debe especificar a cadea que vai ser substituída.',
 	'replacetext_nonamespace' => 'Debe escoller, polo menos, un espazo de nomes.',
 	'replacetext_editormove' => 'Debe seleccionar, polo menos, unha das opcións de \
                substitución.',
-	'replacetext_choosepagesforedit' => 'Por favor, seleccione {{PLURAL:$3|a páxina \
na|as páxinas nas}} que quere substituír "$1" por "$2":', \
+	'replacetext_choosepagesforedit' => 'Substituír "$1" por "$2" no texto \
{{PLURAL:$3|da seguinte páxina|das seguintes páxinas}}:',  \
'replacetext_choosepagesformove' => 'Substituír "$1" por "$2" {{PLURAL:$3|no título \
da seguinte páxina|nos títulos das seguintes páxinas}}:',  \
'replacetext_cannotmove' => '{{PLURAL:$1|A seguinte páxina|As seguintes páxinas}} \
non {{PLURAL:$1|pode|poden}} ser {{PLURAL:$1|movida|movidas}}:',  \
'replacetext_formovedpages' => 'Para as páxinas movidas:', @@ -741,10 +829,9 @@ \
$messages['gl'] = array(  'replacetext_nomove' => 'Non se atopou ningún artigo cuxo \
título conteña "$1".',  'replacetext_nosuchcategory' => 'Non existe ningunha \
categoría co nome "$1".',  'replacetext_return' => 'Volver ao formulario.',
-	'replacetext_warning' => '\'\'\'Aviso:\'\'\' hai {{PLURAL:$1|unha páxina|$1 \
páxinas}} que xa {{PLURAL:$1|contén|conteñen}} a cadea de substitución "$2". Se \
fai esta substitución non poderá distinguir as súas modificacións destas \
                cadeas.',
-	'replacetext_blankwarning' => 'Debido a que a cadea de substitución está baleira, \
esta operación non será reversible; quere continuar?', +	'replacetext_warning' => \
'\'\'\'Aviso:\'\'\' Hai {{PLURAL:$1|unha páxina|$1 páxinas}} que xa \
{{PLURAL:$1|contén|conteñen}} a cadea de substitución "$2". Se fai esta \
substitución non poderá distinguir as súas modificacións destas cadeas.', \
+	'replacetext_blankwarning' => "'''Atención:''' Debido a que a cadea de \
substitución está baleira, esta operación non será reversible.",  \
                'replacetext_continue' => 'Continuar',
-	'replacetext_cancel' => '(Prema no botón "Atrás" do seu navegador para cancelar a \
operación.)',  'replacetext_editsummary' => 'Substitución de texto - de "$1" a \
"$2"',  'right-replacetext' => 'Facer substitucións de cordas no wiki enteiro',
 );
@@ -773,6 +860,8 @@ $messages['gsw'] = array(
 	'replacetext_docu' => 'Go ne Täxt dur e andere Täxt uf allene Inhaltssyte z \
ersetze, gib di bede Täxtteil doo yy un druck uf Ersetze-Schaltflächi. Dir wird \
derno ne Lischt vu dr Syte zeigt, wu s dr gsuecht Täxt din het, un Du chasch die \
uuswehle, wu Du dr Täxt witt din ersetze. Dyy Benutzername wird in d \
Versionsgschicht ufgnuh',  'replacetext_originaltext' => 'Originaltäxt:',
 	'replacetext_replacementtext' => 'Neje Täxt:',
+	'replacetext_useregex' => 'Platzhalter un reguläri Uusdruck verwände',
+	'replacetext_regexdocu' => '(Byschpel: D Wärt fir „a(.*)c" fir „Originaltext" \
un „ac$1" fir „Neje Text" deete zue dr Ersetzig „abc" dur „acb" fiere.)',  \
'replacetext_optionalfilters' => 'Optionali Filter:',  'replacetext_categorysearch' \
=> 'Nume in däre Kategorie ersetze:',  'replacetext_prefixsearch' => 'Nume in Syte \
ersetze mit däm Präfix:', @@ -798,22 +887,24 @@ $messages['gsw'] = array(
 E Trännig vu dr Ersetzige mit dr Täxtteil, wu s scho het, sich nit megli. Mechtsch \
einewäg wytermache?",  'replacetext_blankwarning' => 'Dr Täxtteil, wu soll ersetzt \
wären, isch läär. D Operation cha nit ruckgängig gmacht wäre, einewäg \
wytermache?',  'replacetext_continue' => 'Wytermache',
-	'replacetext_cancel' => '(Druck uf d „Zrugg"-Schaltflächi go d Operation \
abbräche.)',  'replacetext_editsummary' => 'Täxtersetzig - „$1" dur „$2"',
 	'right-replacetext' => 'Mach e Täxtersetzig fir s gsamt Wiki',
 );
 
 /** Hebrew (עברית)
+ * @author Amire80
  * @author Rotemliss
  * @author YaronSh
  */
 $messages['he'] = array(
 	'replacetext' => 'החלפת טקסט',
 	'replacetext-desc' => 'אספקת [[Special:ReplaceText|דף מיוחד]] כדי \
לאפשר למפעילים לבצע חיפוש והחלפה של מחרוזות \
                בכל דפי התוכן בוויקי',
-	'replacetext_docu' => "כדי להחליף מחרוזת טקסט אחת באחרת \
בכל הדפים הרגילים בוויקי זה, הזי ו את הטקסט בש \
י חלקים ולחצו על 'המשך'. אז תוצג בפ יכם רשימת \
דפים המכילים את הטקסט אחריו חיפשתם, ותוכלו \
לבחור את הדפים בהם תרצו להחליף את הטקסט האמור. \
שמכם יופיע בהיסטוריית הגרסאות של כל דף בתור \
המשתמש האחראי לשי ויים שבוצעו.", +	'replacetext_docu' => \
"כדי להחליף מחרוזת טקסט אחת באחרת בכל הדפים \
הרגילים בוויקי זה, הזי ו את הטקסט בש י חלקים \
ולחצו על 'המשך'. אז תוצג בפ יכם רשימת דפים \
המכילים את הטקסט שחיפשתם, ותוכלו לבחור את \
הדפים שבהם תרצו להחליף את הטקסט האמור. שמכם \
יופיע בהיסטוריית הגרסאות של כל דף בתור המשתמש \
האחראי לשי ויים ש עשו.",  'replacetext_originaltext' => \
'הטקסט המקורי:',  'replacetext_replacementtext' => 'טקסט \
                ההחלפה:',
-	'replacetext_optionalfilters' => 'מס  ים אופציו אליים:',
+	'replacetext_useregex' => 'להשתמש בביטויים רגולריים',
+	'replacetext_regexdocu' => '(דוגמה: הכ סת הערכים של "a(.*)c" \
ל"טקסט המקורי" ו־"ac$1" ל"טקסט ההחלפה" תחליף "abc" \
ב־"acb".)', +	'replacetext_optionalfilters' => 'מס  ים אופציו \
ליים:',  'replacetext_categorysearch' => 'החלפה רק בקטגוריה:',
 	'replacetext_prefixsearch' => 'החלפה רק בדפים בעלי \
הקידומת:',  'replacetext_editpages' => 'החלפת טקסט בתוכן \
הדפים', @@ -837,12 +928,12 @@ $messages['he'] = array(
 	'replacetext_warning' => '\'\'\'אזהרה\'\'\': {{PLURAL:$1|יש ו עמוד \
אחד שכבר מכיל|יש ם $1 עמודים שכבר מכילים}} את \
מחרוזת ההחלפה, "$2". אם החלפה זו תבוצע לא תהיה \
באפשרותך להפריד את החלפותיך מ{{PLURAL:$1|מחרוזת \
זו|מחרוזות אלו}}.',  'replacetext_blankwarning' => 'כיוון \
שמחרוזת ההחלפה ריקה, לא  יתן יהיה לבטל פעולה \
זו; להמשיך?',  'replacetext_continue' => 'המשך',
-	'replacetext_cancel' => '(לחצו על הלחצן "חזרה" בדפדפן שלכם \
                כדי לבטל את הפעולה.)',
-	'replacetext_editsummary' => "החלפת טקסט - $1 ל־'$2'",
+	'replacetext_editsummary' => 'החלפת טקסט – "$1" ב־"$2"',
 	'right-replacetext' => 'ביצוע החלפת מחרוזות באתר הוויקי \
כולו',  );
 
 /** Croatian (Hrvatski)
+ * @author Bugoslav
  * @author Dalibor Bosits
  * @author Ex13
  * @author Herr Mlinka
@@ -857,6 +948,7 @@ $messages['hr'] = array(
 	'replacetext_choosepagesforedit' => "Molimo odaberite \
{{PLURAL:$3|stranicu|stranice}} na kojima želite zamijeniti '$1' za '$2':",  \
'replacetext_choosepagesformove' => 'Zamijeni "$1" s "$2" u {{PLURAL:$1|naslovu \
sljedeće stranice|naslovima sljedećih stranica}}:',  'replacetext_cannotmove' => \
'{{PLURAL:$1|Sljedeća stranica|Sljedeće stranice}} ne mogu biti premještene:', \
+	'replacetext_watchmovedpages' => 'Prati ove stranice',  \
'replacetext_invertselections' => 'Izvrni odabir',  'replacetext_replace' => \
'Zamjeni',  'replacetext_success' => "'$1' će biti zamijenjen za '$2' na $3 \
{{PLURAL:$3|stranici|stranice|stranica}}.", @@ -865,7 +957,6 @@ $messages['hr'] = \
array(  Ako napravite ovu zamjenu nećete moći odvojiti svoju zamjenu od ovog \
teksta. Nastaviti sa zamjenom?",  'replacetext_blankwarning' => 'Zato što je \
zamjenski tekst prazan, ovaj postupak se neće moći vratiti; nastaviti?',  \
                'replacetext_continue' => 'Dalje',
-	'replacetext_cancel' => '(Pritisnite tipku "Nazad" u svom pregledniku za \
zaustavljanje postupka.)',  'replacetext_editsummary' => "Zamjena teksta - '$1' u \
'$2'",  );
 
@@ -878,6 +969,8 @@ $messages['hsb'] = array(
 	'replacetext_docu' => "Zo by tekst přez druhi tekst na wšěch regularnych \
stronach tutoho wikija narunał, zapodaj wobaj tekstowej dźělej a klikń potom na \
'Dale'. Budźeš potom lisćinu stronow widźeć, kotrež pytany tekst wobsahuja a \
móžeš jednu z nich wubrać, w kotrejž chceš tekst narunać. Twoje mjeno zjewi so \
w stawiznach strony jako wužiwar, kotryž je zamołwity za změny.",  \
'replacetext_originaltext' => 'Originalny tekst:',  'replacetext_replacementtext' => \
'Narunanski tekst:', +	'replacetext_useregex' => 'regularne wuraz wužiwać',
+	'replacetext_regexdocu' => '(Přikład: hódnoty za "a(.*)c" za "originalny tekst" \
a "ac$1" za "nowy tekst" bychu "abc" přez "acb" wuměnili.)',  \
'replacetext_optionalfilters' => 'Opcionalne filtry:',  'replacetext_categorysearch' \
=> 'Jenož w kategoriji narunać:',  'replacetext_prefixsearch' => 'Jenož w stronach \
narunać z prefiksom:', @@ -886,7 +979,7 @@ $messages['hsb'] = array(
 	'replacetext_givetarget' => 'Dyrbiš tekst podać, kotryž ma so narunać.',
 	'replacetext_nonamespace' => 'Dyrbiš znajmjeńša jedyn mjenowy rum wubrać.',
 	'replacetext_editormove' => 'Dyrbiš znajmjeńša jednu z narunanskich opcijow \
                wubrać.',
-	'replacetext_choosepagesforedit' => "Prošu wubjer \
{{PLURAL:$3|stronu|stronje|strony|strony}}, za kotrež chceš '$1' přez '$2' \
narunać:", +	'replacetext_choosepagesforedit' => '"$1" w {{PLURAL:$3|slědowacej \
stronje|slědowacymaj stronomaj|slědowacych stronach|slědowacych stronach}} přez \
"$2" wuměnić:',  'replacetext_choosepagesformove' => '"$1" přez "$2" w titulu \
{{PLURAL:$3|slědowaceje strony|slědowaceju stronow|slědowacych \
stronow|slědowacych stronow}} narunać:',  'replacetext_cannotmove' => \
'{{PLURAL:$1|Slědowaca strona njehodźi|Slědowacej stronje njehodźitej|Slědowace \
strony njehodźa|Slědowace strony njehodźa}} so přesunyć:',  \
'replacetext_formovedpages' => 'Za přesunjene strony:', @@ -902,7 +995,6 @@ \
$messages['hsb'] = array(  'replacetext_warning' => "'''Warnowanje:''' {{PLURAL:$1|Je \
hižo $1 strona, kotraž wobsahuje|Stej hižo $1 stronje, kotejž wobsahujetej|Su \
hižo $1 strony, kotrež wobsahuja|Je hižo $1 stronow, kotrež wobsahuje}} \
narunanski tekst, '$2'. Jeli tute narunanje činiš, njemóžeš swoje narunanja wot \
tutoho teksta rozdźělić.",  'replacetext_blankwarning' => 'Narunanski dźěl je \
prózdny, tohodla operacija njeda so cofnyć; njedźiwajo na to pokročować?',  \
                'replacetext_continue' => 'Dale',
-	'replacetext_cancel' => '(Klikń na tłóčatko "Wróćo" w swojim wobhladowaku, zo \
by operaciju přetrohnył.)',  'replacetext_editsummary' => "Tekstowe narunanje - \
'$1' do '$2'",  'right-replacetext' => 'Tekstowe narunanja na cyłym wikiju činić',
 );
@@ -943,7 +1035,6 @@ A neved szerepelni fog a laptörténetekben, mint aki a \
változtatásokat végez  'replacetext_blankwarning' => 'Mivel az új szöveg üres, \
ez a művelet nem lesz visszavonható.  Biztosan folytatni szeretnéd?',
 	'replacetext_continue' => 'Folytatás',
-	'replacetext_cancel' => '(Kattints a böngésződ „vissza" gombjára a művelet \
megszakításához)',  'replacetext_editsummary' => 'Szöveg cseréje – „$1" → \
„$2"',  'right-replacetext' => 'szövegcserék végrehajtása az egész wikin',
 );
@@ -957,6 +1048,8 @@ $messages['ia'] = array(
 	'replacetext_docu' => "Pro reimplaciar un catena de characteres per un altere trans \
tote le paginas regular in iste wiki, entra le duo pecias de texto hic e clicca super \
'Continuar'. Postea se monstrara un lista de paginas que contine le texto cercate, e \
tu potera seliger in quales tu vole reimplaciar lo. Tu nomine figurara in le \
historias del paginas como le usator responsabile de omne modificationes.",  \
'replacetext_originaltext' => 'Texto original:',  'replacetext_replacementtext' => \
'Nove texto:', +	'replacetext_useregex' => 'Usar expressiones regular',
+	'replacetext_regexdocu' => '(Exemplo: valores de "a(.*)c" pro "Texto original" e \
"ac$1" pro "Texto de substitution" reimplaciarea "abc" per "acb".)',  \
'replacetext_optionalfilters' => 'Filtros optional:',  'replacetext_categorysearch' \
=> 'Reimplaciar solmente in le categoria:',  'replacetext_prefixsearch' => \
'Reimplaciar solmente in paginas con le prefixo:', @@ -982,7 +1075,6 @@ \
$messages['ia'] = array(  Si tu face iste reimplaciamento, tu non potera distinguer \
inter tu reimplaciamentos e iste texto ja existente.",  'replacetext_blankwarning' => \
'Post que le nove texto es vacue, iste operation non essera reversibile; continuar?', \
                'replacetext_continue' => 'Continuar',
-	'replacetext_cancel' => '(Clicca le button "Retro" in tu navigator pro cancellar le \
operation.)',  'replacetext_editsummary' => "Reimplaciamento de texto - '$1' per \
'$2'",  'right-replacetext' => 'Facer reimplaciamentos de texto in le wiki integre',
 );
@@ -999,6 +1091,8 @@ $messages['id'] = array(
 	'replacetext_docu' => "Untuk mengganti suatu teks kalimat dengan kalimat lain di \
antara semua halaman-halaman regular wiki ini, masukkan kedua teks di sini dan klik \
'Lanjutkan'. Anda akan mendapatkan tampilan daftar halaman yang berisikan teks yang \
dicari, dan Anda dapat memilih yang mana saja yang ingin digantikan. Nama Anda akan \
tampil di versi terdahulu halaman sebagai pengguna yang melakukan perubahan.",  \
'replacetext_originaltext' => 'Teks asli:',  'replacetext_replacementtext' => 'Teks \
pengganti:', +	'replacetext_useregex' => 'Gunakan persamaan reguler',
+	'replacetext_regexdocu' => '(Congoh: nilai dari "a(.*)c" untuk "Teks asal" dan \
"ac$1" untuk "Teks pengganti" akan mengganti "abc" dengan "acb".)',  \
'replacetext_optionalfilters' => 'Filter opsional:',  'replacetext_categorysearch' => \
'Hanya ganti pada kategori:',  'replacetext_prefixsearch' => 'Hanya ganti pada \
halaman dengan awalan:', @@ -1024,7 +1118,6 @@ $messages['id'] = array(
 	'replacetext_blankwarning' => 'Karena untaian pengganti kosong, operasi ini tidak \
dapat dikembalikan.  Apakah ingin dilanjutkan?',
 	'replacetext_continue' => 'Lanjutkan',
-	'replacetext_cancel' => '(Klik tombol "Back" pada penjelajah Anda untuk membatalkan \
operasi.)',  'replacetext_editsummary' => 'Penggantian teks - "$1" menjadi "$2"',
 	'right-replacetext' => 'Melakukan penggantian seluruh teks kalimat di wiki ini',
 );
@@ -1038,6 +1131,7 @@ $messages['ig'] = array(
 );
 
 /** Italian (Italiano)
+ * @author Beta16
  * @author Civvì
  * @author Darth Kule
  * @author Marco 27
@@ -1048,6 +1142,8 @@ $messages['it'] = array(
 	'replacetext_docu' => "Per sostituire una stringa di testo con un'altra su tutte le \
pagine del sito, inserire qui due pezzi di testo e poi premere 'Continua'. Verr  \
quindi mostrato un elenco delle pagine che contengono il testo cercato, e sar  \
possibile scegliere quelle in cui si desidera sostituirlo. Il proprio nome verr  \
visualizzato nella pagina della cronologia come l'utente responsabile delle eventuali \
modifiche.",  'replacetext_originaltext' => 'Testo originale:',
 	'replacetext_replacementtext' => 'Testo sostituito:',
+	'replacetext_useregex' => 'Utilizza le espressioni regolari',
+	'replacetext_regexdocu' => '(Esempio: con valori di "a(.*)c" per \
"{{int:replacetext_originaltext}}" e "ac$1" per "{{int:replacetext_replacementtext}}" \
trasformerebbe "abc" in "acb".)',  'replacetext_optionalfilters' => 'Filtri \
opzionali:',  'replacetext_categorysearch' => 'Sostituire solo nella categoria:',
 	'replacetext_prefixsearch' => 'Sostituire solo nelle pagine con il prefisso:',
@@ -1072,7 +1168,6 @@ $messages['it'] = array(
 	'replacetext_warning' => '{{PLURAL:$1|C\'è gi  $1 pagina che contiene|Ci sono gi \
$1 pagine che contengono}} il testo di sostituzione, "$2". Se si effettua questa \
sostituzione non si sar  in grado di separare le sostituzioni da questi testi. \
Continuare con la sostituzione?',  'replacetext_blankwarning' => "Poiché il testo di \
sostituzione è vuoto, l'operazione non sar  reversibile. Si desidera continuare?",  \
                'replacetext_continue' => 'Continua',
-	'replacetext_cancel' => '(Fare clic sul pulsante "Indietro" nel proprio browser per \
annullare l\'operazione.)',  'replacetext_editsummary' => "Sostituzione testo - '$1' \
con '$2'",  'right-replacetext' => 'Esegue sostituzioni di testo in tutto il sito',
 );
@@ -1080,6 +1175,7 @@ $messages['it'] = array(
 /** Japanese (日本語)
  * @author Aotake
  * @author Fryed-peach
+ * @author Schu
  * @author 青子守歌
  */
 $messages['ja'] = array(
@@ -1088,6 +1184,8 @@ $messages['ja'] = array(
 	'replacetext_docu' => \
'ある文字列をこのウィキ上のすべての標準ページで別のものに \
換するには、必要な2つの文字列をここに入力し「続行」を押 \
ます。次に検索した文字列を含むページが一覧表示され、置換 \
行いたいページを選択できます。置換後には、あなたの名前が \
ページ履歴にその編集を担当した利用者として表示されます。',
  'replacetext_originaltext' => '置換前の文字列:',
 	'replacetext_replacementtext' => '置換後の文字列:',
+	'replacetext_useregex' => '正規表現を使用',
+	'replacetext_regexdocu' => '(例:"置換前の文字列"には "a(.*)c" \
、"置換後の文字列"には "ac$1"の値で、"abc" は "acb" \
に置換されます。)',  'replacetext_optionalfilters' => '追 \
のフィルター (任意):',  'replacetext_categorysearch' => \
'以下のカテゴリにあるもののみを置換:',  'replacetext_prefixsearch' \
=> '以下の文字列から始まるページ内のもののみを置換:', @@ \
-1112,7 +1210,6 @@ $messages['ja'] = array(  'replacetext_warning' => "'''警告:''' \
置換後文字列「$2」を既に含ん ページが \
$1{{PLURAL:$1|ページ}}あります。この置換を実行すると、これらの文字列と実際に置換された箇所を区別できなくなります。",
  'replacetext_blankwarning' => \
'置換後文字列が空であるため、この操作は実行後の取り消しができなくなります。続行しますか?',
  'replacetext_continue' => '続行',
-	'replacetext_cancel' => \
'(操作を中止するにはブラウザの「戻る」ボタンをクリックしてく \
さい)',  'replacetext_editsummary' => '文字列「$1」を「$2」に置換',
 	'right-replacetext' => 'ウィキ全体で文字列の置換を実行する',
 );
@@ -1166,6 +1263,8 @@ $messages['ko'] = array(
 당 의 사용자 이름이 문서 역사에 나올 것입니다.",
 	'replacetext_originaltext' => '찾을 문자열:',
 	'replacetext_replacementtext' => '바꿀 문자열:',
+	'replacetext_useregex' => ' 규 표현식 사용',
+	'replacetext_regexdocu' => '(예: "찾을 문자열"에 "a(.*)c"값을 입 하  \
"바꿀 문자열에 "ac$1"을 입 하면 "abc"가 "acb"로 바뀝니다.)',  \
'replacetext_optionalfilters' => ' 택  필터:',  'replacetext_categorysearch' \
=> '다음 분류에서만 바꾸기:',  'replacetext_prefixsearch' => '다음  \
두어로 시작하는 문서만 바꾸기:', @@ -1192,7 +1291,6 @@ $messages['ko'] \
= array(  'replacetext_blankwarning' => '바꿀 문자열이 비어 있으므로 이 \
동작은 되돌릴 수 없습니다.  계속하시 습니까?',
 	'replacetext_continue' => '계속',
-	'replacetext_cancel' => '(이 동작을 취소하 면 웹 브라우 의 \
‘뒤로' 버튼을 눌러 주세요.)',  'replacetext_editsummary' => '찾아 \
바꾸기 – "$1" 문자열을 "$2" 문자열로',  'right-replacetext' => '찾아 \
바꾸기를 위키  체에 수행합니다.',  );
@@ -1211,6 +1309,8 @@ han wells. Dinge Name als Metmaacher weed met dä neu \
veränderte Versione  fun dä Sigge faßjehallde als dä Schriiver, dä et jemaat \
hät.',  'replacetext_originaltext' => 'Dä ojinaal Täx för Ußzetuusche:',
 	'replacetext_replacementtext' => 'Dä neue Täx för anshtatt dämm Ojinaal erin ze \
donn', +	'replacetext_useregex' => 'Met „<i lang="en">regular Expressions</i>"',
+	'replacetext_regexdocu' => '(För e Beispel: Nämm „a(.*)c" fö_t Ojinaal un \
„ac$1" fö_der neue Täxt, un De kriß „abc" dorsh „acb" ußjetuusch.)',  \
'replacetext_optionalfilters' => 'Müjjelesche Beschrängkunge:',  \
'replacetext_categorysearch' => 'Bloß en dä Saachjropp ußtuusche:',  \
'replacetext_prefixsearch' => 'Bloß en Sigge ußtuusche, dänne ier Tittelle \
aanfange met:', @@ -1233,16 +1333,15 @@ wann en Sigg ömjenannt woode es.',
 	'replacetext_nomove' => 'Mer han kei Sigge jefonge, woh „$1" em Tittel dren \
förkütt.',  'replacetext_nosuchcategory' => 'Mer han kein Saachjropp met dämm Name \
„$1".',  'replacetext_return' => 'Jangk retuur op dat Fommulaa.',
-	'replacetext_warning' => '
+	'replacetext_warning' => "'''Opjepaß:'''
 {{PLURAL:$1|Ein Sigg enthält|$1 Sigge enthallde}} ald dat Täxstöck „$2", wat \
                bemm Tuusche ennjeföch wääde sull.
-Wenn De dat jemaat häs, dokam_mer die Änderong nit esu leich automattesch retuur \
                maache, weil mer die ald do woore,
-un de ennjetuuschte Tästöcker nit ungerscheide kann.
-Wells De trozdämm wigger maache?',
+Wenn De dat jemaat häs, kam_mer die Änderong nit esu leich automattesch retuur \
maache, weil mer die ald do woore, +un de ennjetuuschte Täxstöcker nit ungerscheide \
kann. +Wells De trozdämm wigger maache?",
 	'replacetext_blankwarning' => 'Dat Täxstöck, wat beim Tuusche ennjfööch weed, \
is leddich,  dröm kam_mer die Änderong nit esu leich automattesch retuur maache.
 Wells De trozdämm wigger maache?',
 	'replacetext_continue' => 'Wiggermaache',
-	'replacetext_cancel' => '(Kleck dä „Zerök"- ov „Retuur"-Knopp, öm dä \
Förjang afzebreche)',  'replacetext_editsummary' => 'Täx-Shtöcker tuusche — vun \
„$1" noh „$2"',  'right-replacetext' => 'Donn Täx-Shtöcksher em janze Wiki \
ußtuusche',  );
@@ -1257,6 +1356,8 @@ $messages['lb'] = array(
 	'replacetext_docu' => "Fir en Text duerch en aneren Text op allen Inhaltssäite vun \
dëser Wiki z'ersetzen, gitt w.e.g. déi zwéin Texter hei an klickt op 'Weider'. Dir \
gesitt dann eng Lëscht vu Säiten op deenen de gesichten Text dran ass, an Dir \
kënnt déi eraussichen op denen Dir den Text ersetze wëllt. Ären Numm steet an der \
Lëscht vun de Versiounen als Auteur vun all deenen Ännerungen.",  \
'replacetext_originaltext' => 'Originaltext:',  'replacetext_replacementtext' => \
'Neien Text:', +	'replacetext_useregex' => 'Regulär Ausdréck benotzen',
+	'replacetext_regexdocu' => '(Beispill: De Wäert „a(.*)c" fir „Originaltext" an \
„ac$1" fir „Neien Text" géif „abc" duerch „acb" ersetzen.)',  \
'replacetext_optionalfilters' => 'Optional Filteren:',  'replacetext_categorysearch' \
=> 'Ersetz nëmmen an der Kategorie:',  'replacetext_prefixsearch' => 'Ersetz nëmmen \
a Säite mam Prefix:', @@ -1282,7 +1383,6 @@ $messages['lb'] = array(
 Wann Dir dës Ännerunge maacht wäert et Iech net méi méiglech sinn déi Säiten \
op deenen Dir Ännerunge gemaach hutt vun de Säiten z'ënnerscheeden wou elo \
d'Zeecherei '$2' schonn dran ass.",  'replacetext_blankwarning' => 'Well den Textdeel \
mat dem de gesichten Text ersat gi soll eidel ass, kann dës Aktioun net réckgängeg \
gemaach ginn; wëllt Dir awer weiderfueren?',  'replacetext_continue' => \
                'Weiderfueren',
-	'replacetext_cancel' => '(Klickt op de Knäppchen "Zréck" an Ärem Browser fir \
d\'Operatioun ofzebriechen)',  'replacetext_editsummary' => "Text ersat - '$1' duerch \
'$2'",  'right-replacetext' => 'Ersetze vun enger Rei vun Textzeechen op der ganzer \
Wiki',  );
@@ -1312,18 +1412,20 @@ $messages['mk'] = array(
 	'replacetext_docu' => 'За да замените една низа со \
друга, ширум сите регуларни страници на ова \
вики, внесете ги тука двете парчиња текст и \
потоа притиснете на „Продолжи".  Потоа ќе ви се \
прикаже список на страници кои го содржат \
бараниот текст, и ќе можете да изберете во кои \
од нив сакате да ја извршите змената.  Вашето \
име ќе се појави во историјата на страниците \
                како корисник одговорен за \
                промените.',
-	'replacetext_originaltext' => 'Оригинален текст:',
+	'replacetext_originaltext' => 'Изворен текст:',
 	'replacetext_replacementtext' => 'Нов текст:',
+	'replacetext_useregex' => 'Користи регуларни изрази',
+	'replacetext_regexdocu' => '(Пример: вредностите на „а(.*)в" \
за „Изворен текст" и „ав$1" за „Нов текст" ќе го \
заменат „абв" со „авб".)',  'replacetext_optionalfilters' => \
'Незадолжителни филтри:',  'replacetext_categorysearch' => \
'Замени само во категорија:',  'replacetext_prefixsearch' => \
'Замени само во страници со префиксот:',  \
'replacetext_editpages' => 'Замени текст во содржина на \
страница',  'replacetext_movepages' => 'Замени текст во \
                насловите на страниците, кога е \
                можно',
-	'replacetext_givetarget' => 'Мора да ја назначите низата \
што треба да се замени.', +	'replacetext_givetarget' => 'Мора \
да ја наведете низата што треба да се замени.',  \
'replacetext_nonamespace' => 'Мора да изберете барем еден \
именски простор.',  'replacetext_editormove' => 'Мора да \
одберете барем една од можностите за замена.',  \
'replacetext_choosepagesforedit' => 'Замени „$1" со „$2" во \
текстот на {{PLURAL:$3|следнава страница|следниве \
                страници}}:',
-	'replacetext_choosepagesformove' => 'Замени "$1" со "$2" во \
{{PLURAL:$3|насловот на следната страница|наслови \
на следните страници}}:', +	'replacetext_choosepagesformove' => \
'Замени „$1" со „$2" во {{PLURAL:$3|насловот на \
следната страница|насловите на следните \
страници}}:',  'replacetext_cannotmove' => '{{PLURAL:$1|Следнава \
страница не може да се премести|Следниве \
страници не можат да се преместат}}:',  \
'replacetext_formovedpages' => 'За преместени страници:',  \
'replacetext_savemovedpages' => 'Зачувај ги старите наслови \
како пренасочувања кон новите наслови', @@ -1339,7 \
+1441,6 @@ $messages['mk'] = array(  'replacetext_blankwarning' => 'Бидејќи \
новата низа е празна, оваа операција не може да \
се врати.  Дали сакате да продолжите?',
 	'replacetext_continue' => 'Продолжи',
-	'replacetext_cancel' => '(Кликнете на копчето „Назад" во \
вашиот прелистувач за да ја откажете \
операцијата.)',  'replacetext_editsummary' => 'Замена на \
текст - „$1" со „$2"',  'right-replacetext' => 'Вршење замена \
на низи во целото вики',  );
@@ -1374,7 +1475,6 @@ $messages['ml'] = array(
 	'replacetext_nomove' => 'ഒരു താളിന്റെയും \
തലക്കെട്ടിൽ "$1" എന്നു \
കണ്ടെത്താനായില്ല.',  'replacetext_return' => \
'ഫോമിലേക്ക് തിരിച്ചു പോവുക',  \
                'replacetext_continue' => 'തുടരുക',
-	'replacetext_cancel' => '(ഈ പ്രവർത്തനം \
നിരാകരിക്കുവാൻ ബ്രൗസറിന്റെ \
"ബാക്ക്" ബട്ടൺ ഞെക്കുക)',  \
'replacetext_editsummary' => 'എഴുത്ത് \
മാറ്റിച്ചേർക്കൽ - "$1" എന്നത് "$2" \
എന്നതുകൊണ്ട്',  'right-replacetext' => \
'വിക്കിയിൽ മുഴുവനും പദം \
മാറ്റിച്ചേർക്കുക',  );
@@ -1395,10 +1495,90 @@ $messages['mr'] = array(
 	'replacetext_warning' => "अगोदरच $1 पानांवर '$2' हा \
बदलण्यासा ीचा मजकूर आहे; जर \
तुम्ही पुनर्लेखन केले तर तुम्ही \
केलेले बदल तुम्ही या पानांपासून \
वेगळे करू शकणार नाही. पुनर्लेखन \
करायचे का?",  'replacetext_blankwarning' => \
'बदलण्यासा ीचा मजकूर रिकामा \
असल्यामुळे ही क्रिया उलटविता \
येणार नाही; पुढे जायचे का?',  \
                'replacetext_continue' => 'पुनर्लेखन करा',
-	'replacetext_cancel' => '(क्रिया रद्द \
करण्यासा ी "Back" कळीवर टिचकी \
द्या.)',  'replacetext_editsummary' => "मजकूर \
पुनर्लेखन - '$1' ते '$2'",  );
 
+/** Malay (Bahasa Melayu)
+ * @author Anakmalaysia
+ */
+$messages['ms'] = array(
+	'replacetext' => 'Ganti teks',
+	'replacetext-desc' => 'Menyediakan [[Special:ReplaceText|laman khas]] untuk \
membolehkan para pentadbir melakukan pencarian dan penggantian rentetan sejagat di \
semua laman-laman kandungan wiki', +	'replacetext_docu' => "Untuk mengganti satu \
rentetan teks dengan satu lagi merentasi semua laman biasa di wiki ini, isikan \
kedua-dua teks yang terlibat di sini, kemudian tekan 'Sambung'. +Kemudian, anda akan \
ditunjukkan satu senarai laman yang mengandungi teks carian, dan anda boleh memilih \
laman-laman yang mana anda ingin melakukan penggantian itu. +Nama anda akan terpapar \
dalam sejarah laman sebagai pengguna yang bertanggungjawab atas sebarang perubahan.", \
+	'replacetext_originaltext' => 'Teks asal:', +	'replacetext_replacementtext' => \
'Teks ganti:', +	'replacetext_useregex' => 'Gunakan ungkapan nalar',
+	'replacetext_regexdocu' => '(Contoh: nilai "a(.*)c" untuk "Teks asal" dan "ac$1" \
untuk "Teks ganti" akan mengganti "abc" dengan "acb".)', \
+	'replacetext_optionalfilters' => 'Penapis pilihan:', +	'replacetext_categorysearch' \
=> 'Ganti dalam kategori sahaja:', +	'replacetext_prefixsearch' => 'Ganti dalam laman \
yang berawalan ini sahaja:', +	'replacetext_editpages' => 'Ganti teks dalam kandungan \
laman', +	'replacetext_movepages' => 'Ganti teks dalam tajuk laman, jika boleh',
+	'replacetext_givetarget' => 'Anda mesti menyatakan rentetan untuk diganti.',
+	'replacetext_nonamespace' => 'Anda mesti memilih sekurang-kurangnya satu ruang \
nama.', +	'replacetext_editormove' => 'Anda mesti memilih sekurang-kurangnya satu \
pilihan penggantian.', +	'replacetext_choosepagesforedit' => 'Ganti "$1" dengan "$2" \
dalam teks {{PLURAL:$3|laman|laman-laman}} berikut:', \
+	'replacetext_choosepagesformove' => 'Ganti "$1" dengan "$2" dalam \
{{PLURAL:$3|judul|judul-judul}} laman yang berikut:', +	'replacetext_cannotmove' => \
'{{PLURAL:$1|Laman|Laman-laman}} yang berikut tidak boleh dipindahkan:', \
+	'replacetext_formovedpages' => 'Untuk laman yang dipindahkan:', \
+	'replacetext_savemovedpages' => 'Simpan tajuk lama sebagai lencongan kepada tajuk \
baru', +	'replacetext_watchmovedpages' => 'Pantau laman-laman ini',
+	'replacetext_invertselections' => 'Songsangkan pilihan',
+	'replacetext_replace' => 'Ganti',
+	'replacetext_success' => '"$1" akan digantikan oleh "$2" di $3 laman.',
+	'replacetext_noreplacement' => 'Tiada laman yang mengandungi rentetan "$1".',
+	'replacetext_nomove' => 'Tiada laman yang mengandungi "$1" dalam tajuknya.',
+	'replacetext_nosuchcategory' => 'Tiada kategori dengan nama "$1".',
+	'replacetext_return' => 'Kembali ke borang.',
+	'replacetext_warning' => "'''Amaran:''' Terdapat \$1 laman yang sudah mengandungi \
rentetan ganti \"\$2\". Jika anda melakukan penggantian ini, anda tidak akan dapat \
mengasingkan gantian anda daripada rentetan-rentetan ini.", \
+	'replacetext_blankwarning' => "'''Amaran:''' Oleh sebab rentetan ganti adalah \
kosong, operasi ini tidak boleh dimansuhkan.", +	'replacetext_continue' => 'Sambung',
+	'replacetext_editsummary' => 'Ganti teks - "$1" kepada "$2"',
+	'right-replacetext' => 'Membuat penggantian rentetan di seluruh wiki',
+);
+
+/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
+ * @author Jon Harald Søby
+ * @author Laaknor
+ * @author Nghtwlkr
+ * @author Simny
+ */
+$messages['nb'] = array(
+	'replacetext' => 'Erstatt tekst',
+	'replacetext-desc' => 'Lar administratorer kunne [[Special:ReplaceText|erstatte \
tekst]] på alle innholdssider på en wiki.', +	'replacetext_docu' => 'For å \
erstatte én tekststreng med en annen på alle datasider på denne wikien kan du \
skrive inn de to tekstene her og trykke  Erstatt . Du vil da bli ført til en liste \
over sider som inneholder søketeksten, og du kan velge hvilke sider du ønsker å \
erstatte den i. Navnet ditt vil stå i sidehistorikkene som den som er ansvarlig for \
endringene.', +	'replacetext_originaltext' => 'Originaltekst:',
+	'replacetext_replacementtext' => 'Erstatningstekst:',
+	'replacetext_optionalfilters' => 'Valgfrie filter:',
+	'replacetext_categorysearch' => 'Erstatt kun i kategori:',
+	'replacetext_prefixsearch' => 'Erstatt kun i sider med prefikset:',
+	'replacetext_editpages' => 'Erstatt tekst i sideinnholdet',
+	'replacetext_movepages' => 'Erstatt tekst i sidetitler, der dette er mulig',
+	'replacetext_givetarget' => 'Du må spesifisere en streng som skal erstattes.',
+	'replacetext_nonamespace' => 'Du må velge minst ett navnerom.',
+	'replacetext_editormove' => 'Du må velge minst ett av alternativene for \
erstatning.', +	'replacetext_choosepagesforedit' => 'Velg {{PLURAL:$3|siden|sidene}} \
der du ønsker å bytte ut  $1  med  $2 :', +	'replacetext_choosepagesformove' => \
'Erstatt  $1  med  $2  i {{PLURAL:$3|tittelen på den følgende siden|titlene på \
de følgende sidene}}:', +	'replacetext_cannotmove' => '{{PLURAL:$1|Den følgende \
siden|De følgende sidene}} kan ikke flyttes:', +	'replacetext_formovedpages' => 'For \
flyttede sider:', +	'replacetext_savemovedpages' => 'Lagre de gamle titlene som \
omdirigeringer til de nye', +	'replacetext_watchmovedpages' => 'Overvåk disse \
sidene', +	'replacetext_invertselections' => 'Inverter valg',
+	'replacetext_replace' => 'Erstatt',
+	'replacetext_success' => ' $1  blir erstattet med  $2  på {{PLURAL:$3|én \
side|$3 sider}}.', +	'replacetext_noreplacement' => 'Ingen sider ble funnet med \
strengen  $1 .', +	'replacetext_nomove' => 'Ingen sider ble funnet der tittelen \
inneholder  $1 .', +	'replacetext_nosuchcategory' => 'Det eksisterer ingen kategori \
med navnet  $1 .', +	'replacetext_return' => 'Tilbake til skjemaet.',
+	'replacetext_warning' => "'''Advarsel:''' Det er {{PLURAL:$1|én side|$1 sider}} \
som allerede har erstatningsteksten  $2 . Om du gjør denne erstatningen vil du \
ikke kunne skille ut dine erstatninger fra denne teksten.", \
+	'replacetext_blankwarning' => 'Fordi erstatningsteksten er tom vil denne handlingen \
ikke kunne angres automatisk; fortsette?', +	'replacetext_continue' => 'Fortsett',
+	'replacetext_editsummary' => 'Teksterstatting –  $1  til  $2 ',
+	'right-replacetext' => 'Gjennomfør teksterstatninger på hele wikien',
+);
+
 /** Dutch (Nederlands)
  * @author SPQRobin
  * @author Siebrand
@@ -1411,6 +1591,8 @@ U krijgt dan een lijst met pagina's te zien waar uw te \
vervangen tekstdeel in vo  Uw naam wordt opgenomen in de geschiedenis van de pagina \
als verantwoordelijke voor de wijzigingen.",  'replacetext_originaltext' => \
'Oorspronkelijke tekst:',  'replacetext_replacementtext' => 'Vervangende tekst:',
+	'replacetext_useregex' => 'Reguliere expressies en wildcards gebruiken',
+	'replacetext_regexdocu' => 'Voorbeeld: waarden van "a(.*)c" voor "Originele tekst" \
en "ac$1" voor "Te vervangen tekst" vervangt "abc" door "acb".',  \
'replacetext_optionalfilters' => 'Optionele filters:',  'replacetext_categorysearch' \
=> 'Alleen in de volgende categorie vervangen:',  'replacetext_prefixsearch' => \
"Alleen in pagina's met het volgende voorvoegsel vervangen:", @@ -1432,11 +1614,10 @@ \
Uw naam wordt opgenomen in de geschiedenis van de pagina als verantwoordelijke v  \
'replacetext_nomove' => 'Er zijn geen pagina\'s gevonden met "$1" in de naam.',  \
'replacetext_nosuchcategory' => 'De categorie "$1" bestaat niet.',  \
                'replacetext_return' => 'Terugkeren naar het formulier.',
-	'replacetext_warning' => '\'\'\'Waarshuwing:\'\'\' Er {{PLURAL:$1|is $1 pagina|zijn \
$1 pagina\'s}} die het te vervangen tesktdeel al "$2" al \
{{PLURAL:$1|bevat|bevatten}}. +	'replacetext_warning' => '\'\'\'Waarschuwing:\'\'\' \
Er {{PLURAL:$1|is $1 pagina|zijn $1 pagina\'s}} die het te vervangen tesktdeel al \
"$2" al {{PLURAL:$1|bevat|bevatten}}.  Als u nu doorgaat met vervangen, kunt u geen \
onderscheid meer maken.',  'replacetext_blankwarning' => 'Omdat u tekst vervangt door \
niets, kan deze handeling niet ongedaan gemaakt worden. Wilt u doorgaan?',  \
                'replacetext_continue' => 'Doorgaan',
-	'replacetext_cancel' => '(Klik op de knop "Terug" in uw webbrowser om deze \
handeling te annuleren)',  'replacetext_editsummary' => "Tekst vervangen - '$1' door \
'$2'",  'right-replacetext' => 'Tekst vervangen in de hele wiki',
 );
@@ -1478,52 +1659,10 @@ Halda fram med utbytinga?',
 	'replacetext_blankwarning' => 'Av di teksten som skal bli sett inn er tom, vil \
ikkje denne handlinga kunna bli køyrt omvendt.  Vil du halda fram?',
 	'replacetext_continue' => 'Hald fram',
-	'replacetext_cancel' => '(Trykk på  Attende -knappen i nettlesaren din for å \
avbryta handlinga.)',  'replacetext_editsummary' => 'Utbyting av tekst -  $1  til  \
$2 ',  'right-replacetext' => 'Gjennomfør utbyting av tekst på heile wikien',
 );
 
-/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
- * @author Jon Harald Søby
- * @author Laaknor
- * @author Nghtwlkr
- * @author Simny
- */
-$messages['no'] = array(
-	'replacetext' => 'Erstatt tekst',
-	'replacetext-desc' => 'Lar administratorer kunne [[Special:ReplaceText|erstatte \
                tekst]] på alle innholdssider på en wiki.',
-	'replacetext_docu' => 'For å erstatte én tekststreng med en annen på alle \
datasider på denne wikien kan du skrive inn de to tekstene her og trykke  Erstatt \
. Du vil da bli ført til en liste over sider som inneholder søketeksten, og du kan \
velge hvilke sider du ønsker å erstatte den i. Navnet ditt vil stå i \
                sidehistorikkene som den som er ansvarlig for endringene.',
-	'replacetext_originaltext' => 'Originaltekst:',
-	'replacetext_replacementtext' => 'Erstatningstekst:',
-	'replacetext_optionalfilters' => 'Valgfrie filter:',
-	'replacetext_categorysearch' => 'Erstatt kun i kategori:',
-	'replacetext_prefixsearch' => 'Erstatt kun i sider med prefikset:',
-	'replacetext_editpages' => 'Erstatt tekst i sideinnholdet',
-	'replacetext_movepages' => 'Erstatt tekst i sidetitler, der dette er mulig',
-	'replacetext_givetarget' => 'Du må spesifisere en streng som skal erstattes.',
-	'replacetext_nonamespace' => 'Du må velge minst ett navnerom.',
-	'replacetext_editormove' => 'Du må velge minst ett av alternativene for \
                erstatning.',
-	'replacetext_choosepagesforedit' => 'Velg {{PLURAL:$3|siden|sidene}} der du ønsker \
                å bytte ut  $1  med  $2 :',
-	'replacetext_choosepagesformove' => 'Erstatt  $1  med  $2  i \
                {{PLURAL:$3|tittelen på den følgende siden|titlene på de følgende \
                sidene}}:',
-	'replacetext_cannotmove' => '{{PLURAL:$1|Den følgende siden|De følgende sidene}} \
                kan ikke flyttes:',
-	'replacetext_formovedpages' => 'For flyttede sider:',
-	'replacetext_savemovedpages' => 'Lagre de gamle titlene som omdirigeringer til de \
                nye',
-	'replacetext_watchmovedpages' => 'Overvåk disse sidene',
-	'replacetext_invertselections' => 'Inverter valg',
-	'replacetext_replace' => 'Erstatt',
-	'replacetext_success' => ' $1  blir erstattet med  $2  på {{PLURAL:$3|én \
                side|$3 sider}}.',
-	'replacetext_noreplacement' => 'Ingen sider ble funnet med strengen  $1 .',
-	'replacetext_nomove' => 'Ingen sider ble funnet der tittelen inneholder  $1 .',
-	'replacetext_nosuchcategory' => 'Det eksisterer ingen kategori med navnet  $1 .',
-	'replacetext_return' => 'Tilbake til skjemaet.',
-	'replacetext_warning' => "'''Advarsel:''' Det er {{PLURAL:$1|én side|$1 sider}} \
som allerede har erstatningsteksten  $2 . Om du gjør denne erstatningen vil du \
                ikke kunne skille ut dine erstatninger fra denne teksten.",
-	'replacetext_blankwarning' => 'Fordi erstatningsteksten er tom vil denne handlingen \
                ikke kunne angres automatisk; fortsette?',
-	'replacetext_continue' => 'Fortsett',
-	'replacetext_cancel' => '(Trykk på  Tilbake -knappen for å avbryte \
                handlingen.)',
-	'replacetext_editsummary' => 'Teksterstatting –  $1  til  $2 ',
-	'right-replacetext' => 'Gjennomfør teksterstatninger på hele wikien',
-);
-
 /** Occitan (Occitan)
  * @author Cedric31
  */
@@ -1558,7 +1697,6 @@ $messages['oc'] = array(
 S'efectuatz aquesta substitucion, poiretz pas separar vòstres cambiaments a partir \
d'aquestas cadenas.",  'replacetext_blankwarning' => 'Perque la cadena de \
remplaçament es voida, aquesta operacion ser  irreversibla ; volètz contunhar ?',  \
                'replacetext_continue' => 'Contunhar',
-	'replacetext_cancel' => "(Clicatz sul boton    Retorn   de vòstre navigador per \
anullar l'operacion.)",  'replacetext_editsummary' => 'Remplaçament del tèxte —  \
 $1   per   $2  ',  'right-replacetext' => 'Far de remplaçaments de tèxte dins \
tot lo wiki',  );
@@ -1568,7 +1706,7 @@ S'efectuatz aquesta substitucion, poiretz pas separar vòstres \
                cambiaments a par
  */
 $messages['pdc'] = array(
 	'replacetext_noreplacement' => 'Ken Blatt gfunne mit „$1".',
-	'replacetext_continue' => 'Weiter',
+	'replacetext_continue' => 'Weider',
 );
 
 /** Polish (Polski)
@@ -1576,6 +1714,7 @@ $messages['pdc'] = array(
  * @author Leinad
  * @author Maikking
  * @author Matma Rex
+ * @author Odder
  * @author Sp5uhe
  * @author ToSter
  */
@@ -1585,6 +1724,8 @@ $messages['pl'] = array(
 	'replacetext_docu' => 'Możesz zastąpić jeden ciąg znaków innym, w treści \
wszystkich stron tej wiki. W tym celu wprowadź dwa fragmenty tekstu i naciśnij \
„Kontynuuj". Zostanie pokazana lista stron, które zawierają wyszukiwany tekst. \
Będziesz mógł wybrać te strony, na których chcesz ten tekst zamienić na nowy. W \
historii zmian stron, do opisu autora edycji, zostanie użyta Twoja nazwa \
użytkownika.',  'replacetext_originaltext' => 'Wyszukiwany tekst',
 	'replacetext_replacementtext' => 'Zamień na',
+	'replacetext_useregex' => 'Użyj wyrażeń regularnych',
+	'replacetext_regexdocu' => '(Przykładowo wstawiając „a(.*)c" w polu \
„{{int:replacetext_originaltext}}" oraz „ac$1" w polu \
„{{int:replacetext_replacementtext}}" spowodujesz zastąpienie „abc" przez \
„acb".)',  'replacetext_optionalfilters' => 'Dodatkowe filtry:',
 	'replacetext_categorysearch' => 'Zamień tylko w kategorii',
 	'replacetext_prefixsearch' => 'Zamień tylko na stronach z prefiksem',
@@ -1609,7 +1750,6 @@ $messages['pl'] = array(
 	'replacetext_warning' => "'''Uwaga''' {{PLURAL:$1|Jest $1 strona zawierająca|Są \
$1 strony zawierające|Jest $1 stron zawierających}} tekst „$2", którym chcesz \
zastępować. Jeśli wykonasz zastępowanie nie będzie możliwe odseparowanie Twoich \
zastąpień od tych tekstów.",  'replacetext_blankwarning' => 'Ponieważ ciąg \
znaków, którym ma być wykonane zastępowanie jest pusty, operacja będzie \
nieodwracalna. Czy kontynuować?',  'replacetext_continue' => 'Kontynuuj',
-	'replacetext_cancel' => '(Wciśnij klawisz „Wstecz" w przeglądarce, aby \
przerwać operację.)',  'replacetext_editsummary' => 'zamienił w treści „$1" na \
„$2"',  'right-replacetext' => 'Wykonywanie zastępowania tekstu w całej wiki',
 );
@@ -1626,6 +1766,8 @@ At sar  alora mostr  na lista ëd p gine ch'a conten-o ël \
test d'arserca, e  Tò nòm a aparir  ant le stòrie dle p gine com l'utent \
respons bil për minca cangiament.",  'replacetext_originaltext' => 'Test \
original:',  'replacetext_replacementtext' => 'Test ëd rimpiassadura:',
+	'replacetext_useregex' => "Dovré dj'espression regolar",
+	'replacetext_regexdocu' => '(Esempi: valor ëd "a(.*)c" për "Test original" e \
"ac$1" për "Rimpiassé test" a dovrìa rimpiassé "abc" with "acb".)',  \
'replacetext_optionalfilters' => 'Filtr opsionaj:',  'replacetext_categorysearch' => \
'Rimpiassa mach an categorìa:',  'replacetext_prefixsearch' => 'Rimpiassa mach an p \
gine con ël prefiss:', @@ -1652,7 +1794,6 @@ S'it fas sta rimpiassadura-sì it saras \
pa bon a separé toe rimpiassadure da st  'replacetext_blankwarning' => "Da gi  che \
la stringa ëd rimpiass a l'é veuida, st'operassion-sì a sar  pa reversìbil.  \
Veul-lo continué?",  'replacetext_continue' => 'Continua',
-	'replacetext_cancel' => '(Sgnaca ël boton "André" an tò navigador për scancelé \
l\'operassion.)',  'replacetext_editsummary' => 'Rimpiassadura test - "$1" a "$2"',
 	'right-replacetext' => "F  rimpiassadura dë stringhe an sl'antrega wiki",
 );
@@ -1694,21 +1835,24 @@ $messages['ps'] = array(
  */
 $messages['pt'] = array(
 	'replacetext' => 'Substituir texto',
-	'replacetext-desc' => "[[Special:ReplaceText|Página especial]] que permite que \
administradores façam substituições globais de texto ''(string find-and-replace)'' \
                em todas as páginas de conteúdo de uma wiki",
-	'replacetext_docu' => 'Para substituir um texto por outro texto em todas as \
páginas desta wiki, introduza os dois textos e clique o botão "Substituir". Serão \
listadas as páginas que contêm o texto a substituir e poderá seleccionar em quais \
deseja proceder   substituição. +	'replacetext-desc' => \
"[[Special:ReplaceText|Página especial]] que permite que os administradores façam \
substituições globais de texto ''(string find-and-replace)'' em todas as páginas \
de conteúdo de uma wiki", +	'replacetext_docu' => 'Para substituir um texto por \
outro texto em todas as páginas desta wiki, introduza os dois textos e clique o \
botão "Prosseguir". +Serão listadas as páginas que contêm o texto a substituir e \
poderá seleccionar em quais deseja proceder   substituição.  O seu nome \
aparecerá no histórico dessas páginas como o utilizador responsável pelas \
alterações.',  'replacetext_originaltext' => 'Texto original:',
-	'replacetext_replacementtext' => 'Novo texto:',
+	'replacetext_replacementtext' => 'Texto de substituição:',
+	'replacetext_useregex' => 'Usar expressões regulares',
+	'replacetext_regexdocu' => '(Exemplo: os valores "a(.*)c" no "Texto original" e \
"ac$1" no "Texto de substituição" substituiriam "abc" por "acb")',  \
'replacetext_optionalfilters' => 'Filtros opcionais:',  'replacetext_categorysearch' \
=> 'Substituir só na categoria:',  'replacetext_prefixsearch' => 'Substituir só em \
páginas com o prefixo:',  'replacetext_editpages' => 'Substituir texto no conteúdo \
                da página',
-	'replacetext_movepages' => 'Substituir texto em títulos de páginas, quando \
possível', +	'replacetext_movepages' => 'Substituir texto nos títulos de páginas, \
quando possível',  'replacetext_givetarget' => 'Deve especificar o texto que será \
substituído.',  'replacetext_nonamespace' => 'Deverá seleccionar pelo menos um \
espaço nominal.',  'replacetext_editormove' => 'Deve seleccionar pelo menos uma das \
                opções de substituição.',
-	'replacetext_choosepagesforedit' => "Por favor, seleccione {{PLURAL:$3|a página na \
                qual|as páginas nas quais}} deseja substituir '$1' por '$2':",
-	'replacetext_choosepagesformove' => 'Substituir "$1" por "$2" {{PLURAL:$3|no nome \
da seguinte página|nos nomes das seguintes páginas}}:', \
+	'replacetext_choosepagesforedit' => 'Substituir "$1" por "$2" no texto \
{{PLURAL:$3|da seguinte página|das seguintes páginas}}:', \
+	'replacetext_choosepagesformove' => 'Substituir "$1" por "$2" {{PLURAL:$3|no \
título da seguinte página|nos títulos das seguintes páginas}}:',  \
'replacetext_cannotmove' => '{{PLURAL:$1|A seguinte página não pode ser movida|As \
seguintes páginas não podem ser movidas}}:',  'replacetext_formovedpages' => 'Para \
páginas movidas:',  'replacetext_savemovedpages' => 'Gravar os títulos anteriores \
como redireccionamentos para os novos títulos', @@ -1716,15 +1860,14 @@ O seu nome \
aparecerá no histórico dessas páginas como o utilizador responsáv  \
'replacetext_invertselections' => 'Inverter selecções',  'replacetext_replace' => \
'Substituir',  'replacetext_success' => "'$1' será substituído por '$2' em $3 \
                {{PLURAL:$3|página|páginas}}.",
-	'replacetext_noreplacement' => 'Não foram encontradas páginas contendo a "string" \
                \'$1\'.',
-	'replacetext_nomove' => "Não foram encontradas páginas cujo título contenha \
'$1'", +	'replacetext_noreplacement' => 'Não foram encontradas páginas que \
contenham o texto "$1".', +	'replacetext_nomove' => 'Não foram encontradas páginas \
cujo título contenha "$1".',  'replacetext_nosuchcategory' => 'Não existe nenhuma \
categoria com o nome "$1".',  'replacetext_return' => 'Voltar ao formulário.',
-	'replacetext_warning' => "'''Aviso:''' Há {{PLURAL:\$1|uma página que já \
contém|\$1 páginas que já contêm}} o texto de substituição, \"\$2\". Se fizer \
esta substituição não poderá desfazer a operação com uma simples substituição \
                em ordem inversa.",
-	'replacetext_blankwarning' => 'Uma vez que a "string" de novo texto foi deixada em \
branco, esta operação não será reversível. Prosseguir?', +	'replacetext_warning' \
=> "'''Aviso:''' Há {{PLURAL:\$1|uma página que já contém|\$1 páginas que já \
contêm}} o texto de substituição, \"\$2\". Se fizer esta substituição não \
poderá distingui-las das suas substituições, nem desfazer a operação com uma \
simples substituição em ordem inversa.", +	'replacetext_blankwarning' => \
"'''Aviso:''' Como o texto de substituição foi deixado em branco, esta operação \
não será reversível.",  'replacetext_continue' => 'Prosseguir',
-	'replacetext_cancel' => '(Pressione o botão "Voltar" do seu browser para cancelar \
                a operação.)',
-	'replacetext_editsummary' => "Substituindo texto '$1' por '$2'",
+	'replacetext_editsummary' => 'Substituição de texto - de "$1" para "$2"',
 	'right-replacetext' => 'Fazer substituições de texto em toda a wiki',
 );
 
@@ -1733,6 +1876,7 @@ O seu nome aparecerá no histórico dessas páginas como o \
                utilizador responsáv
  * @author Eduardo.mps
  * @author Enqd
  * @author Giro720
+ * @author Hamilton Abreu
  * @author Luckas Blade
  */
 $messages['pt-br'] = array(
@@ -1749,7 +1893,7 @@ $messages['pt-br'] = array(
 	'replacetext_givetarget' => 'Você deve especificar um texto a ser substituido.',
 	'replacetext_nonamespace' => 'Você deve selecionar pelo menos um domínio.',
 	'replacetext_editormove' => 'Você deve selecionar pelo menos uma das opções de \
                substituição',
-	'replacetext_choosepagesforedit' => "Por favor, seleccione {{PLURAL:$3|a página na \
qual|as páginas nas quais}} deseja substituir '$1' por '$2':", \
+	'replacetext_choosepagesforedit' => "!!Por favor, seleccione {{PLURAL:$3|a página \
na qual|as páginas nas quais}} deseja substituir '$1' por '$2':",  \
'replacetext_choosepagesformove' => 'Substituir "$1" por "$2" {{PLURAL:$3|no nome da \
seguinte página|nos nomes das seguintes páginas}}:',  'replacetext_cannotmove' => \
'{{PLURAL:$1|A seguinte página não pode ser movida|As seguintes páginas não podem \
ser movidas}}:',  'replacetext_formovedpages' => 'Para páginas movidas:',
@@ -1763,9 +1907,8 @@ $messages['pt-br'] = array(
 	'replacetext_nosuchcategory' => 'Não existe categoria com o nome "$1".',
 	'replacetext_return' => 'Voltar ao formulário.',
 	'replacetext_warning' => "'''Aviso:''' Há {{PLURAL:\$1|uma página que já \
contém|\$1 páginas que já contêm}} o texto de substituição, \"\$2\". Se fizer \
esta substituição não poderá desfazer a operação com uma simples substituição \
                em ordem inversa.",
-	'replacetext_blankwarning' => 'Uma vez que a "string" de novo texto foi deixada em \
branco, esta operação não será reversível. Prosseguir?', \
+	'replacetext_blankwarning' => '!!Uma vez que a "string" de novo texto foi deixada \
em branco, esta operação não será reversível. Prosseguir?',  \
                'replacetext_continue' => 'Prosseguir',
-	'replacetext_cancel' => '(Pressione o botão "Voltar" de seu navegador para \
cancelar a operação.)',  'replacetext_editsummary' => "Substituindo texto '$1' por \
'$2'",  'right-replacetext' => 'Faça substituições de cadeias de caracteres no \
wiki inteiro',  );
@@ -1810,6 +1953,8 @@ $messages['ru'] = array(
 	'replacetext_docu' => 'Для того, чтобы заменить один \
текст на другой на всех страницах вики, вам \
необходимо ввести здесь желаемый текст и \
нажать на кнопку  Продолжить . После этого вам \
будет предложен список всех страниц, \
содержащих заменяемый текст, и вы сможете \
выбрать из них те, в которых нужно произвести \
замены. В качестве лица, отвечающего за \
внесённые изменения, в истории правок страниц, \
в которых произойдёт замена текста, будете \
указаны вы.',  'replacetext_originaltext' => 'Исходный текст:',
 	'replacetext_replacementtext' => 'Текст для замены:',
+	'replacetext_useregex' => 'Использовать регулярные \
выражения', +	'replacetext_regexdocu' => '(Например, \
выражения  a(.*)c  в поле  Исходный текст  и  ac$1  \
в поле  Текст для замены  приведут к замене  abc \
 на  acb .)',  'replacetext_optionalfilters' => 'Необязательные \
фильтры:',  'replacetext_categorysearch' => 'Заменить только в \
категории:',  'replacetext_prefixsearch' => 'Заменить только \
в страницах с приставкой:', @@ -1835,7 +1980,6 @@ \
$messages['ru'] = array(  'replacetext_blankwarning' => 'Из-за того, что \
текст для замены пуст, операция по замене не \
сможет быть отменена.  Вы хотите продолжить?',
 	'replacetext_continue' => 'Продолжить',
-	'replacetext_cancel' => '(Нажмите кнопку  Назад  в вашем \
браузере для отмены текущей операции.)',  \
'replacetext_editsummary' => 'Замена текста —  $1  на  $2 ',  \
'right-replacetext' => 'выполнение замен текста во всей \
вики',  );
@@ -1873,70 +2017,73 @@ $messages['sk'] = array(
 	'replacetext_warning' => '$1 {{PLURAL:$1|stránka|stránok}} už obsahuje text \
„$2", ktorým chcete text nahradiť; ak budete pokračovať a text nahradíte, \
nebudete môcť odlíšiť vaše nahradenia od existujúceho textu, ktorý tento \
reťazec už obsahuje. Pokračovať v nahradení?',  'replacetext_blankwarning' => \
'Pretože text, ktorým text chcete nahradiť je prázdny, operácia bude nevratná. \
Pokračovať?',  'replacetext_continue' => 'Pokračovať',
-	'replacetext_cancel' => '(Operáciu zrušíte stlačením tlačidla „Späť" vo \
vašom prehliadači.)',  'replacetext_editsummary' => 'Nahradenie textu „$1" textom \
„$2"',  'right-replacetext' => 'Vykonať náhradu reťazcov na celej wiki',
 );
 
-/** Serbian Cyrillic ekavian (Српски (ћирилица))
+/** Serbian (Cyrillic script) (‪Српски (ћирилица)‬)
+ * @author Rancher
  * @author Sasa Stefanovic
  * @author Жељко Тодоровић
  * @author Михајло Анђелковић
  */
 $messages['sr-ec'] = array(
-	'replacetext' => 'Замени текст',
-	'replacetext_originaltext' => 'Оригинални текст:',
-	'replacetext_replacementtext' => 'Текст којим се замењује:',
-	'replacetext_optionalfilters' => 'Опциони филтери:',
+	'replacetext' => 'Замена текста',
+	'replacetext_originaltext' => 'Изворни текст:',
+	'replacetext_replacementtext' => 'Нови текст:',
+	'replacetext_optionalfilters' => 'Необавезни филтери:',
 	'replacetext_categorysearch' => 'Замени само у категорији:',
-	'replacetext_editpages' => 'Замени текст у садржају \
                стране',
-	'replacetext_movepages' => 'Замени текст у насловима \
                страна, уколико је могуће',
-	'replacetext_givetarget' => 'Морате навести стринг кога \
                треба заменити.',
-	'replacetext_nonamespace' => 'Морате изабрати најмање \
                један именски простор.',
-	'replacetext_editormove' => 'Морате изабрати макар једну \
                од опција замене.',
-	'replacetext_choosepagesforedit' => "Замени '$1' са '$2' у тексту \
                {{PLURAL:$3|следеће стране|следећих \
                страна}}:",
-	'replacetext_cannotmove' => '{{PLURAL:$1|Следећа страна не може \
бити премештена|Следеће стране не могу бити \
                премештене}}:',
-	'replacetext_formovedpages' => 'За премештене стране:',
-	'replacetext_savemovedpages' => 'Сними старе наслове као \
преусмерења ка новим насловима', +	'replacetext_editpages' \
=> 'Замени текст у садржају странице', \
+	'replacetext_movepages' => 'Замени текст у насловима \
страница, када је могуће', +	'replacetext_givetarget' => \
'Морате навести ниску коју желите да \
замените.', +	'replacetext_nonamespace' => 'Морате изабрати \
барем један именски простор.', +	'replacetext_editormove' => \
'Морате изабрати барем једну од могућности за \
замену.', +	'replacetext_choosepagesforedit' => 'Замени „$1" са \
„$2" у тексту {{PLURAL:$3|следеће странице|следећих \
страница}}:', +	'replacetext_cannotmove' => '{{PLURAL:$1|Следећа \
страница не може бити премештена|Следеће \
странице не могу бити премештене}}:', \
+	'replacetext_formovedpages' => 'За премештене странице:', \
+	'replacetext_savemovedpages' => 'Сачувај старе наслове као \
преусмерења ка новим насловима',  \
'replacetext_watchmovedpages' => 'Надгледај ове стране',  \
                'replacetext_invertselections' => 'Обрни избор',
-	'replacetext_replace' => 'Пресними',
+	'replacetext_replace' => 'Замени',
 	'replacetext_success' => "'$1' ће бити замењено са '$2' у $3 \
{{PLURAL:$3|страни|страна}}.",  'replacetext_noreplacement' => "Није \
нађена ниједна страница која садржи стринг \
'$1'.",  'replacetext_nomove' => 'Није нађена ниједна \
                страница чији наслов садржи „$1".',
-	'replacetext_return' => 'Врати се на форму.',
+	'replacetext_return' => 'Назад на образац.',
 	'replacetext_continue' => 'Настави',
 	'replacetext_editsummary' => "Замена текста - '$1' у '$2'",
+	'right-replacetext' => 'замењивање ниски на целом \
викију',  );
 
-/** Serbian Latin ekavian (Srpski (latinica))
+/** Serbian (Latin script) (‪Srpski (latinica)‬)
  * @author Michaello
+ * @author Rancher
  * @author Жељко Тодоровић
  */
 $messages['sr-el'] = array(
-	'replacetext' => 'Zameni tekst',
-	'replacetext_originaltext' => 'Originalni tekst:',
-	'replacetext_replacementtext' => 'Tekst kojim se zamenjuje:',
-	'replacetext_optionalfilters' => 'Opcioni filteri:',
+	'replacetext' => 'Zamena teksta',
+	'replacetext_originaltext' => 'Izvorni tekst:',
+	'replacetext_replacementtext' => 'Novi tekst:',
+	'replacetext_optionalfilters' => 'Neobavezni filteri:',
 	'replacetext_categorysearch' => 'Zameni samo u kategoriji:',
-	'replacetext_editpages' => 'Zameni tekst u sadržaju strane',
-	'replacetext_movepages' => 'Zameni tekst u naslovima strana, ukoliko je moguće',
-	'replacetext_givetarget' => 'Morate navesti string koga treba zameniti.',
-	'replacetext_nonamespace' => 'Morate izabrati najmanje jedan imenski prostor.',
-	'replacetext_editormove' => 'Morate izabrati makar jednu od opcija zamene.',
-	'replacetext_choosepagesforedit' => "Zameni '$1' sa '$2' u tekstu \
                {{PLURAL:$3|sledeće strane|sledećih strana}}:",
-	'replacetext_cannotmove' => '{{PLURAL:$1|Sledeća strana ne može biti \
                premeštena|Sledeće strane ne mogu biti premeštene}}:',
-	'replacetext_formovedpages' => 'Za premeštene strane:',
-	'replacetext_savemovedpages' => 'Snimi stare naslove kao preusmerenja ka novim \
naslovima', +	'replacetext_editpages' => 'Zameni tekst u sadržaju stranice',
+	'replacetext_movepages' => 'Zameni tekst u naslovima stranica, kada je moguće',
+	'replacetext_givetarget' => 'Morate navesti nisku koju želite da zamenite.',
+	'replacetext_nonamespace' => 'Morate izabrati barem jedan imenski prostor.',
+	'replacetext_editormove' => 'Morate izabrati barem jednu od mogućnosti za \
zamenu.', +	'replacetext_choosepagesforedit' => 'Zameni „$1" sa „$2" u tekstu \
{{PLURAL:$3|sledeće stranice|sledećih stranica}}:', +	'replacetext_cannotmove' => \
'{{PLURAL:$1|Sledeća stranica ne može biti premeštena|Sledeće stranice ne mogu \
biti premeštene}}:', +	'replacetext_formovedpages' => 'Za premeštene stranice:',
+	'replacetext_savemovedpages' => 'Sačuvaj stare naslove kao preusmerenja ka novim \
naslovima',  'replacetext_watchmovedpages' => 'Nadgledaj ove strane',
 	'replacetext_invertselections' => 'Obrni izbor',
-	'replacetext_replace' => 'Presnimi',
+	'replacetext_replace' => 'Zameni',
 	'replacetext_success' => "'$1' će biti zamenjeno sa '$2' u $3 \
                {{PLURAL:$3|strani|strana}}.",
-	'replacetext_noreplacement' => "Nije nađena ni jedna strana koja sadrži string \
'$1'.", +	'replacetext_noreplacement' => "Nije nađena nijedna stranica koja sadrži \
string '$1'.",  'replacetext_nomove' => 'Nije nađena nijedna stranica čiji naslov \
                sadrži „$1".',
-	'replacetext_return' => 'Vrati se na formu.',
+	'replacetext_return' => 'Nazad na obrazac.',
 	'replacetext_continue' => 'Nastavi',
 	'replacetext_editsummary' => "Zamena teksta - '$1' u '$2'",
+	'right-replacetext' => 'zamenjivanje niski na celom vikiju',
 );
 
 /** Swedish (Svenska)
@@ -1976,7 +2123,6 @@ $messages['sv'] = array(
 	'replacetext_warning' => '\'\'\'Varning:\'\'\' Det finns {{PLURAL:$1|$1 sida|$1 \
sidor}} som redan har ersättningssträngen "$2". Om du gör den här ersättningen \
kommer du inte kunna separera dina ersättningar från den här texten.',  \
'replacetext_blankwarning' => 'Eftersom ersättningstexten är tom kommer den här \
handlingen inte kunna upphävas; vill du fortsätta?',  'replacetext_continue' => \
                'Fortsätt',
-	'replacetext_cancel' => '(Klicka på "Tillbaka"-knappen i din webbläsare för att \
avbryta handlingen.)',  'replacetext_editsummary' => 'Textersättning - "$1" till \
"$2"',  'right-replacetext' => 'Genomför textersättningar på hela wikin',
 );
@@ -2008,6 +2154,8 @@ $messages['tl'] = array(
 	'replacetext_docu' => "Upang mapalitan ang isang bagting ng teksto ng iba pang nasa \
kahabaan ng lahat ng pangkaraniwang mga pahinang nasa ibabaw ng wiking ito, ipasok \
ang dalawang piraso ng teksto dito at pindutin pagkatapos ang 'Magpatuloy'. Susunod \
na ipapakita naman sa iyo ang isang talaan ng mga pahinang naglalaman ng teksto ng \
paghanap, at mapipili mo ang mga maaari mong ipamalit dito. Lilitaw ang pangalan mo \
sa mga kasaysayan ng pahina bilang tagagamit na umaako sa anumang mga pagbabago.",  \
'replacetext_originaltext' => 'Orihinal na teksto:',  'replacetext_replacementtext' \
=> 'Pamalit na teksto:', +	'replacetext_useregex' => 'Gumamit ng pangkaraniwang mga \
paglalahad', +	'replacetext_regexdocu' => '(Halimbawa: mga halaga ng "isang (.*) c" \
para sa "Orihinal na teksto" at "ac $1 "para sa "Kapalit na teksto" na papalit sa \
"abc" na may "acb".)',  'replacetext_optionalfilters' => 'Mga pansalang maaaring \
wala:',  'replacetext_categorysearch' => 'Palitan lamang sa loob ng kategorya:',
 	'replacetext_prefixsearch' => 'Palitan lamang sa loob ng mga pahina may unlapi:',
@@ -2034,7 +2182,6 @@ Kapag ginawa mo ang pagpapalit na ito hindi mo na maihihiwalay \
ang mga pamalit m  'replacetext_blankwarning' => 'Dahil sa walang laman ang bagting \
ng pamalit, hindi na maibabalik pa sa dati ang gawaing ito/  Naisa mo bang magpatuloy \
pa?',  'replacetext_continue' => 'Magpatuloy',
-	'replacetext_cancel' => "(Pindutin ang pinduting \"Magbalik\" sa iyong \
pantingin-tingin o ''browser'' upang huwag nang maipagpatuloy ang gawain.)",  \
'replacetext_editsummary' => "Palitan ang tekso - '$1' papunta sa '$2'",  \
'right-replacetext' => 'Gumawa ng pagpapalit ng bagting sa buong wiki',  );
@@ -2057,7 +2204,7 @@ Adınız, değişiklikleri gerçekleştiren kullanıcı olarak \
sayfa geçmişler  'replacetext_editpages' => 'Sayfa içeriklerindeki metinleri \
değiştir',  'replacetext_movepages' => 'Sayfa başlıklarında metni değiştir, \
mümkün olduğunda',  'replacetext_givetarget' => 'Değiştirilecek dizgiyi \
                belirtmelisiniz.',
-	'replacetext_nonamespace' => 'En az bir isim alanı seçmelisiniz.',
+	'replacetext_nonamespace' => 'En az bir ad alanı seçmelisiniz.',
 	'replacetext_editormove' => 'Değiştirme seçeneklerinden en az birini \
seçmelisiniz.',  'replacetext_choosepagesforedit' => "Lütfen, '$1' yerine '$2' \
koymak istediğiniz {{PLURAL:$3|sayfayı|sayfaları}} seçin:",  \
'replacetext_choosepagesformove' => 'Aşağıdaki {{PLURAL:$3|sayfanın \
adındaki|sayfaların adlarındaki}} "$1" bölümünü "$2" ile değiştir:', @@ \
-2078,7 +2225,6 @@ Değiştirme işlemine devam etmek ister misiniz?',  \
'replacetext_blankwarning' => 'Değiştirme dizgisi boş olduğu için bu işlem geri \
alınamayacak.  Devam etmek istiyor musunuz?',
 	'replacetext_continue' => 'Devam',
-	'replacetext_cancel' => '(İşlemi iptal etmek için tarayıcınızdaki "Geri" \
düğmesine tıklayın.)',  'replacetext_editsummary' => 'Metin değiştir - "$1" \
yerine "$2"',  'right-replacetext' => 'Vikinin tamamında dizgileri değiştirir',
 );
@@ -2132,6 +2278,8 @@ $messages['vi'] = array(
 	'replacetext_docu' => "Để thay thế một chuỗi ký tự bằng một chuỗi \
khác trên to n bộ các trang thông thường tại wiki n y, hãy gõ v o hai \
đoạn văn bản ở đây v  sau đó nhấn 'Tiếp tục'. Khi đó bạn \
thấy một danh sách các trang có chứa đoạn ký tự được tìm, v  \
bạn có thể chọn những trang m  bạn muốn thay thế. Tên của bạn \
sẽ xuất hiện trong lịch sử trang như một th nh viên chịu trách \
nhiệm về bất kỳ thay đổi n o.",  'replacetext_originaltext' => 'Văn \
bản nguồn:',  'replacetext_replacementtext' => 'Văn bản thay thế:',
+	'replacetext_useregex' => 'Sử dụng biểu thức chính quy',
+	'replacetext_regexdocu' => '(Ví dụ: Văn bản gốc "a(.*)c" v  văn bản \
thay thế "ac$1" sẽ thay thế "abc" bằng "acb".)',  \
'replacetext_optionalfilters' => 'Bộ lọc tùy ý:',  'replacetext_categorysearch' \
=> 'Chỉ thay trong thể loại:',  'replacetext_prefixsearch' => 'Chỉ thay trong \
những trang với tiền tố:', @@ -2156,7 +2304,6 @@ $messages['vi'] = array(
 	'replacetext_warning' => "'''Cảnh báo:''' {{PLURAL:$1|Một trang|$1 trang}} \
trong lựa chọn đã có chứa chuỗi thay thế, "$2". Nếu bạn thực \
hiện thay thế n y bạn sẽ không thể phân biệt sự thay thế của \
bạn với những chuỗi n y.",  'replacetext_blankwarning' => 'Vì chuỗi thay \
thế l  khoảng trắng, tác vụ n y sẽ không thể hồi lại được; \
tiếp tục?',  'replacetext_continue' => 'Tiếp tục',
-	'replacetext_cancel' => '(Bấm nút "Lùi" của trình duyệt để hủy tác \
vụ.)',  'replacetext_editsummary' => 'Thay thế văn bản - ‘$1' th nh \
‘$2'',  'right-replacetext' => 'Thay thế chuỗi ở tất cả wiki',
 );
@@ -2199,7 +2346,7 @@ $messages['zh-hans'] = array(
 	'replacetext_editpages' => '仅在页面内容中替换',
 	'replacetext_movepages' => '可能的话,在页面名称中替换。',
 	'replacetext_givetarget' => '必须指定查找的字符串',
-	'replacetext_nonamespace' => '必须选择最少一个命名空间。',
+	'replacetext_nonamespace' => '您必须选择至少一个名字空间。',
 	'replacetext_editormove' => '必须选择至少一个替换选项。',
 	'replacetext_choosepagesforedit' => \
'请选择想将"$1"替换成"$2"的{{PLURAL:$3|页面|页面}}。',  \
'replacetext_choosepagesformove' => \
'将{{PLURAL:$3|以下页面|以下页面}}中的"$1"替换为"$2":', @@ -2217,12 \
+2364,12 @@ $messages['zh-hans'] = array(  'replacetext_warning' => \
'有$1个页面已经包含文字「$2」。如果您执行了替换作业,被替代 \
的文字会跟它们混在一起,变得难以分开原来的文字和被替代的文字。要继续执行替换作业吗?',
  'replacetext_blankwarning' => "'''警告:''' \
为替换字串为空,这将导致操作 法复原!您要继续吗?",  \
                'replacetext_continue' => '继续',
-	'replacetext_cancel' => '(按下浏览器上的 "返回" \
按钮可以取消操作)',  'replacetext_editsummary' => '替换文字 - \
「$1」替换为「$2」',  'right-replacetext' => \
'对整个维基进行文字替换。',  );
 
 /** Traditional Chinese (‪中文(繁體)‬)
+ * @author Mark85296341
  * @author Roc michael
  * @author Sheepy
  * @author Wrightbus
@@ -2238,12 +2385,12 @@ $messages['zh-hant'] = array(
 	'replacetext_prefixsearch' => '僅當 面帶有該前綴時替換:',
 	'replacetext_editpages' => '僅在 面內容當中進行替換',
 	'replacetext_movepages' => '如果可以的話,也替換 \
                面名稱的字串。',
-	'replacetext_givetarget' => '必 指定查找的字符串',
+	'replacetext_givetarget' => '必 指定尋找的字符串',
 	'replacetext_nonamespace' => '您必 選擇最少一個名字空間。',
 	'replacetext_editormove' => '必 選擇至少一個替換選 。',
-	'replacetext_choosepagesforedit' => '請選擇 \
                想將「$1」替換成「$2」的 面。',
-	'replacetext_choosepagesformove' => '對以下 面的名稱進行替換:',
-	'replacetext_cannotmove' => '以下 面無法被移動:',
+	'replacetext_choosepagesforedit' => \
'請選擇想將"$1"替換成"$2"的{{PLURAL:$3| 面| 面}}。', \
+	'replacetext_choosepagesformove' => '將{{PLURAL:$3|以下 面|以下 \
面}}中的"$1"替換為"$2":', +	'replacetext_cannotmove' => \
'無法移動以下{{PLURAL:$1| 面| 面}}:',  'replacetext_formovedpages' => \
'對以下 面進行了移動:',  'replacetext_savemovedpages' => \
'重定向至新標題時保留舊標題。',  'replacetext_watchmovedpages' => \
'監視這些 面', @@ -2257,7 +2404,6 @@ $messages['zh-hant'] = array(
 	'replacetext_warning' => '有$1個 \
面已經包含文字「$2」。如果您執行了替換作業,被替代的文字 \
跟它們混在一起,變得難以分開原來的文字和被替代的文字。要繼續執行替換作業嗎?',
  'replacetext_blankwarning' => ' 為替換字串是空白的,這將 \
成難以復原的結果!您要繼續嗎?',  'replacetext_continue' => '繼續',
-	'replacetext_cancel' => '(按下瀏覽器上的 "返回" \
按鈕可以取消操作)',  'replacetext_editsummary' => '替換文字 - \
「$1」替換為「$2」',  'right-replacetext' => \
'對整個維基進行文字替換。',  );
diff --git a/extensions/ReplaceText/ReplaceText.php \
b/extensions/ReplaceText/ReplaceText.php index e98fec2..e2e5bc8 100644
--- a/extensions/ReplaceText/ReplaceText.php
+++ b/extensions/ReplaceText/ReplaceText.php
@@ -23,20 +23,20 @@ if ( !defined( 'MEDIAWIKI' ) ) die();
 $wgExtensionCredits['specialpage'][] = array(
 	'path' => __FILE__,
 	'name' => 'Replace Text',
-	'version' => '0.8.1',
+	'version' => '0.9.3',
 	'author' => array( 'Yaron Koren', 'Niklas Laxström' ),
-	'url' => 'http://www.mediawiki.org/wiki/Extension:Replace_Text',
+	'url' => 'https://www.mediawiki.org/wiki/Extension:Replace_Text',
 	'descriptionmsg'  => 'replacetext-desc',
 );
 
 $rtgIP = dirname( __FILE__ ) . '/';
 $wgExtensionMessagesFiles['ReplaceText'] = $rtgIP . 'ReplaceText.i18n.php';
-$wgExtensionAliasesFiles['ReplaceText'] = $rtgIP . 'ReplaceText.alias.php';
+$wgExtensionMessagesFiles['ReplaceTextAlias'] = $rtgIP . 'ReplaceText.alias.php';
 $wgJobClasses['replaceText'] = 'ReplaceTextJob';
 
 // This extension uses its own permission type, 'replacetext'
 $wgAvailableRights[] = 'replacetext';
-$wgGroupPermissions['bureaucrat']['replacetext'] = true;
+$wgGroupPermissions['sysop']['replacetext'] = true;
 
 $wgHooks['AdminLinks'][] = 'rtAddToAdminLinks';
 
@@ -45,7 +45,7 @@ $wgSpecialPageGroups['ReplaceText'] = 'wiki';
 $wgAutoloadClasses['ReplaceText'] = $rtgIP . 'SpecialReplaceText.php';
 $wgAutoloadClasses['ReplaceTextJob'] = $rtgIP . 'ReplaceTextJob.php';
 
-// This function should really go into a "ReplaceText_body.php" file...
+// This function should really go into a "ReplaceText_body.php" file.
 function rtAddToAdminLinks( &$admin_links_tree ) {
 	$general_section = $admin_links_tree->getSection( wfMsg( 'adminlinks_general' ) );
         $extensions_row = $general_section->getRow( 'extensions' );
diff --git a/extensions/ReplaceText/ReplaceTextJob.php \
b/extensions/ReplaceText/ReplaceTextJob.php index 1cd1ef3..484edb1 100644
--- a/extensions/ReplaceText/ReplaceTextJob.php
+++ b/extensions/ReplaceText/ReplaceTextJob.php
@@ -5,6 +5,7 @@
  * - based on /includes/RefreshLinksJob.php
  *
  * @author Yaron Koren
+ * @author Ankit Garg
  */
 class ReplaceTextJob extends Job {
 
@@ -30,18 +31,31 @@ class ReplaceTextJob extends Job {
 			$actual_user = $wgUser;
 			$wgUser = User::newFromId( $this->params['user_id'] );
 			$cur_page_name = $this->title->getText();
-			$new_page_name = str_replace( $this->params['target_str'], \
$this->params['replacement_str'], $cur_page_name ); +			if ( \
$this->params['use_regex'] ) { +				$new_page_name = preg_replace( \
"/".$this->params['target_str']."/U", $this->params['replacement_str'], \
$cur_page_name ); +			} else {
+				$new_page_name = str_replace( $this->params['target_str'], \
$this->params['replacement_str'], $cur_page_name ); +			}
+
 			$new_title = Title::newFromText( $new_page_name, $this->title->getNamespace() );
 			$reason = $this->params['edit_summary'];
 			$create_redirect = $this->params['create_redirect'];
 			$this->title->moveTo( $new_title, true, $reason, $create_redirect );
 			if ( $this->params['watch_page'] ) {
-				$article = new Article( $new_title );
-				$article->doWatch();
+				if ( class_exists( 'WatchAction' ) ) {
+					// Class was added in MW 1.19
+					WatchAction::doWatch( $new_title, $wgUser );
+				} elseif ( class_exists( 'Action' ) ) {
+					// Class was added in MW 1.18
+					Action::factory( 'watch', new Article( $new_title, 0 ) )->execute();
+				} else {
+					$article = new Article( $new_title, 0 );
+					$article->doWatch();
+				}
 			}
 			$wgUser = $actual_user;
 		} else {
-			$article = new Article( $this->title );
+			$article = new Article( $this->title, 0 );
 			if ( !$article ) {
 				$this->error = 'replaceText: Article not found "' . \
$this->title->getPrefixedDBkey() . '"';  wfProfileOut( __METHOD__ );
@@ -53,7 +67,13 @@ class ReplaceTextJob extends Job {
 			$target_str = $this->params['target_str'];
 			$replacement_str = $this->params['replacement_str'];
 			$num_matches;
-			$new_text = str_replace( $target_str, $replacement_str, $article_text, \
$num_matches ); +
+			if ( $this->params['use_regex'] ) {
+				$new_text = preg_replace( '/'.$target_str.'/U', $replacement_str, $article_text, \
-1, $num_matches ); +			} else {
+				$new_text = str_replace( $target_str, $replacement_str, $article_text, \
$num_matches ); +			}
+
 			// if there's at least one replacement, modify the page,
 			// using the passed-in edit summary
 			if ( $num_matches > 0 ) {
diff --git a/extensions/ReplaceText/SpecialReplaceText.php \
b/extensions/ReplaceText/SpecialReplaceText.php index 06f430c..85587c8 100644
--- a/extensions/ReplaceText/SpecialReplaceText.php
+++ b/extensions/ReplaceText/SpecialReplaceText.php
@@ -1,27 +1,25 @@
 <?php
 
-if ( !defined( 'MEDIAWIKI' ) ) die();
-
 class ReplaceText extends SpecialPage {
 
-	/**
-	 * Constructor
-	 */
 	public function __construct() {
 		parent::__construct( 'ReplaceText', 'replacetext' );
-		wfLoadExtensionMessages( 'ReplaceText' );
 	}
 
 	function execute( $query ) {
 		global $wgUser, $wgOut;
 
-		if ( ! $wgUser->isAllowed( 'replacetext' ) ) {
+		if ( !$wgUser->isAllowed( 'replacetext' ) ) {
 			$wgOut->permissionRequired( 'replacetext' );
 			return;
 		}
 
 		$this->user = $wgUser;
 		$this->setHeaders();
+		if ( method_exists( $wgOut, 'addModuleStyles' ) &&	 
+			!is_null( $wgOut->getResourceLoader()->getModule( 'mediawiki.special' ) ) ) {
+			$wgOut->addModuleStyles( 'mediawiki.special' );
+		}
 		$this->doSpecialReplaceText();
 	}
 
@@ -37,15 +35,29 @@ class ReplaceText extends SpecialPage {
 		return $selected_namespaces;
 	}
 
+	/**
+	 * Helper function to display a hidden field for different versions
+	 * of MediaWiki.
+	 */
+	static function hiddenField( $name, $value ) {
+		if ( class_exists( 'Html' ) ) {
+			return "\t" . Html::hidden( $name, $value ) . "\n";
+		} else {
+			return "\t" . Xml::hidden( $name, $value ) . "\n";
+		}
+	}
+
 	function doSpecialReplaceText() {
-		global $wgUser, $wgOut, $wgRequest, $wgLang;
+		global $wgOut, $wgRequest, $wgLang;
+		$linker = class_exists( 'DummyLinker' ) ? new DummyLinker : new Linker;
 
 		$this->target = $wgRequest->getText( 'target' );
 		$this->replacement = $wgRequest->getText( 'replacement' );
+		$this->use_regex = $wgRequest->getBool( 'use_regex' );
 		$this->category = $wgRequest->getText( 'category' );
 		$this->prefix = $wgRequest->getText( 'prefix' );
-		$this->edit_pages = ( $wgRequest->getVal( 'edit_pages' ) == 1 );
-		$this->move_pages = ( $wgRequest->getVal( 'move_pages' ) == 1 );
+		$this->edit_pages = $wgRequest->getBool( 'edit_pages' );
+		$this->move_pages = $wgRequest->getBool( 'move_pages' );
 		$this->selected_namespaces = self::getSelectedNamespaces();
 
 		if ( $wgRequest->getCheck( 'continue' ) ) {
@@ -57,9 +69,10 @@ class ReplaceText extends SpecialPage {
 
 		if ( $wgRequest->getCheck( 'replace' ) ) {
 			$replacement_params = array();
-			$replacement_params['user_id'] = $wgUser->getId();
+			$replacement_params['user_id'] = $this->user->getId();
 			$replacement_params['target_str'] = $this->target;
 			$replacement_params['replacement_str'] = $this->replacement;
+			$replacement_params['use_regex'] = $this->use_regex;
 			$replacement_params['edit_summary'] = wfMsgForContent( 'replacetext_editsummary', \
$this->target, $this->replacement );  $replacement_params['create_redirect'] = false;
 			$replacement_params['watch_page'] = false;
@@ -85,15 +98,13 @@ class ReplaceText extends SpecialPage {
 			}
 			Job::batchInsert( $jobs );
 
-			$count =  $wgLang->formatNum( count( $jobs ) );
+			$count = $wgLang->formatNum( count( $jobs ) );
 			$wgOut->addWikiMsg( 'replacetext_success', \
"<tt><nowiki>{$this->target}</nowiki></tt>", \
"<tt><nowiki>{$this->replacement}</nowiki></tt>", $count );  
 			// Link back
-			$sk = $this->user->getSkin();
-			$wgOut->addHTML( $sk->makeKnownLinkObj( $this->getTitle(), wfMsgHtml( \
'replacetext_return' ) ) ); +			$wgOut->addHTML( $linker->link( $this->getTitle(), \
wfMsgHtml( 'replacetext_return' ) ) );  return;
 		} elseif ( $wgRequest->getCheck( 'target' ) ) { // very long elseif, look for "end \
                elseif"
-
 			// first, check that at least one namespace has been
 			// picked, and that either editing or moving pages
 			// has been selected
@@ -113,23 +124,27 @@ class ReplaceText extends SpecialPage {
 
 			// if user is replacing text within pages...
 			if ( $this->edit_pages ) {
-				$res = $this->doSearchQuery( $this->target, $this->selected_namespaces, \
$this->category, $this->prefix ); +				$res = $this->doSearchQuery( $this->target, \
$this->selected_namespaces, $this->category, $this->prefix , $this->use_regex );  \
                foreach ( $res as $row ) {
 					$title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
-					$context = $this->extractContext( $row->old_text, $this->target );
+					$context = $this->extractContext( $row->old_text, $this->target, \
$this->use_regex );  $titles_for_edit[] = array( $title, $context );
 				}
 			}
 			if ( $this->move_pages ) {
-				$res = $this->getMatchingTitles( $this->target, $this->selected_namespaces, \
$this->category, $this->prefix ); +				$res = $this->getMatchingTitles( \
$this->target, $this->selected_namespaces, $this->category, $this->prefix, \
$this->use_regex );  foreach ( $res as $row ) {
 					$title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
 					// see if this move can happen
 					$cur_page_name = str_replace( '_', ' ', $row->page_title );
-					$new_page_name = str_replace( $this->target, $this->replacement, $cur_page_name \
); +					if ( $this->use_regex ) {
+						$new_page_name = preg_replace( "/".$this->target."/U", $this->replacement, \
$cur_page_name ); +					} else {
+						$new_page_name = str_replace( $this->target, $this->replacement, \
$cur_page_name ); +					}
 					$new_title = Title::makeTitleSafe( $row->page_namespace, $new_page_name );
 					$err = $title->isValidMoveOperation( $new_title );
-					if ( $title->userCan( 'move', true ) && !is_array( $err ) ) {
+					if ( $title->userCan( 'move' ) && !is_array( $err ) ) {
 						$titles_for_move[] = $title;
 					} else {
 						$unmoveable_titles[] = $title;
@@ -139,15 +154,14 @@ class ReplaceText extends SpecialPage {
 			// if no results were found, check to see if a bad
 			// category name was entered
 			if ( count( $titles_for_edit ) == 0 && count( $titles_for_move ) == 0 ) {
-				$sk = $this->user->getSkin();
 				$bad_cat_name = false;
 				if ( ! empty( $this->category ) ) {
 					$category_title = Title::makeTitleSafe( NS_CATEGORY, $this->category );
 					if ( ! $category_title->exists() ) $bad_cat_name = true;
 				}
 				if ( $bad_cat_name ) {
-					//FIXME: raw html message
-					$wgOut->addHTML( wfMsg( 'replacetext_nosuchcategory', $sk->link( \
$category_title, ucfirst( $this->category ) ) ) ); +					$link = $linker->link( \
$category_title, htmlspecialchars( ucfirst( $this->category ) ) ); \
+					$wgOut->addHTML( wfMsgHtml( 'replacetext_nosuchcategory', $link ) );  } else {
 					if ( $this->edit_pages )
 						$wgOut->addWikiMsg( 'replacetext_noreplacement', \
"<tt><nowiki>{$this->target}</nowiki></tt>" ); @@ -156,18 +170,18 @@ class \
ReplaceText extends SpecialPage {  }
 				// link back to starting form
 				//FIXME: raw html message
-				$wgOut->addHTML( '<p>' . $sk->makeKnownLinkObj( $this->getTitle(), wfMsg( \
'replacetext_return' ) ) . '</p>' ); +				$wgOut->addHTML( '<p>' . $linker->link( \
$this->getTitle(), wfMsgHtml( 'replacetext_return' ) ) . '</p>' );  } else {
-				// show a warning message if the replacement string
-				// is either blank or found elsewhere on the wiki
-				// (since undoing the replacement would be
-				// difficult in either case)
+				// Show a warning message if the replacement
+				// string is either blank or found elsewhere on
+				// the wiki (since undoing the replacement
+				// would be difficult in either case).
 				$warning_msg = null;
 
 				if ( $this->replacement === '' ) {
 					$warning_msg = wfMsg('replacetext_blankwarning');
 				} elseif ( count( $titles_for_edit ) > 0 ) {
-					$res = $this->doSearchQuery( $this->replacement, $this->selected_namespaces, \
$this->category, $this->prefix ); +					$res = $this->doSearchQuery( \
$this->replacement, $this->selected_namespaces, $this->category, $this->prefix, \
$this->use_regex );  $count = $res->numRows();
 					if ( $count > 0 ) {
 						$warning_msg = wfMsgExt( 'replacetext_warning', 'parsemag',
@@ -176,7 +190,7 @@ class ReplaceText extends SpecialPage {
 						);
 					}
 				} elseif ( count( $titles_for_move ) > 0 ) {
-					$res = $this->getMatchingTitles( $this->replacement, \
$this->selected_namespaces, $this->category, $this->prefix ); +					$res = \
$this->getMatchingTitles( $this->replacement, $this->selected_namespaces, \
$this->category, $this->prefix, $this->use_regex );  $count = $res->numRows();
 					if ( $count > 0 ) {
 						$warning_msg = wfMsgExt( 'replacetext_warning', 'parsemag',
@@ -200,11 +214,11 @@ class ReplaceText extends SpecialPage {
 	}
 
 	function showForm( $warning_msg = null ) {
-		global  $wgOut;
+		global $wgOut;
 		$wgOut->addHTML(
-			Xml::openElement( 'form', array( 'id' => 'powersearch', 'action' => \
                $this->getTitle()->getFullUrl(), 'method' => 'post' ) ) .
-			Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
-			Html::hidden( 'continue', 1 )
+			Xml::openElement( 'form', array( 'id' => 'powersearch', 'action' => \
$this->getTitle()->getFullUrl(), 'method' => 'post' ) ) . "\n" . \
+			self::hiddenField( 'title', $this->getTitle()->getPrefixedText() ) . \
+			self::hiddenField( 'continue', 1 )  );
 		if ( is_null( $warning_msg ) ) {
 			$wgOut->addWikiMsg( 'replacetext_docu' );
@@ -223,8 +237,13 @@ class ReplaceText extends SpecialPage {
 		$wgOut->addHTML( '</td><td>' );
 		$wgOut->addHTML( Xml::textarea( 'replacement', $this->replacement, 50, 2, array( \
'style' => 'width: auto;' ) ) );  $wgOut->addHTML( '</td></tr></table>' );
+		$wgOut->addHTML( Xml::tags( 'p', null,
+				Xml::checkLabel( wfMsg( 'replacetext_useregex' ), 'use_regex', 'use_regex' ) ) . \
"\n" . +			Xml::element( 'p', array( 'style' => 'font-style: italic' ),
+				wfMsg( 'replacetext_regexdocu' ) )
+		);
 
-		// the interface is heavily based on the one in Special:Search
+		// The interface is heavily based on the one in Special:Search.
 		$search_label = wfMsg( 'powersearch-ns' );
 		$namespaces = SearchEngine::searchableNamespaces();
 		$tables = $this->namespaceTables( $namespaces );
@@ -233,10 +252,10 @@ class ReplaceText extends SpecialPage {
 			"<fieldset id=\"mw-searchoptions\">\n" . 
 			Xml::tags( 'h4', null, wfMsgExt( 'powersearch-ns', array( 'parseinline' ) ) )
 		);
-		// the ability to select/unselect groups of namespaces in the
+		// The ability to select/unselect groups of namespaces in the
 		// search interface exists only in some skins, like Vector -
 		// check for the presence of the 'powersearch-togglelabel'
-		// message to see if we can use this functionality here
+		// message to see if we can use this functionality here.
 		if ( !wfEmptyMsg( 'powersearch-togglelabel', wfMsg( 'powersearch-togglelabel' ) ) \
) {  $wgOut->addHTML(
 				Xml::tags(
@@ -248,6 +267,7 @@ class ReplaceText extends SpecialPage {
 						array(
 							'type'=>'button',
 							'id' => 'mw-search-toggleall',
+							// 'onclick' value needed for MW 1.16
 							'onclick' => 'mwToggleSearchCheckboxes("all");',
 							'value' => wfMsg( 'powersearch-toggleall' )
 						)
@@ -257,12 +277,12 @@ class ReplaceText extends SpecialPage {
 						array(
 							'type'=>'button',
 							'id' => 'mw-search-togglenone',
+							// 'onclick' value needed for MW 1.16
 							'onclick' => 'mwToggleSearchCheckboxes("none");',
 							'value' => wfMsg( 'powersearch-togglenone' )
 						)
 					)
 				)
-			
 			);
 		} // end if
 		$wgOut->addHTML(
@@ -278,9 +298,9 @@ class ReplaceText extends SpecialPage {
 			Xml::tags( 'h4', null, wfMsgExt( 'replacetext_optionalfilters', array( \
'parseinline' ) ) ) .  Xml::element( 'div', array( 'class' => 'divider' ), '', false \
) .  "<p>$category_search_label\n" .
-			Xml::input( 'category', 20, $this->category ) . '</p>' .
+			Xml::input( 'category', 20, $this->category, array( 'type' => 'text' ) ) . '</p>' \
.  "<p>$prefix_search_label\n" .
-			Xml::input( 'prefix', 20, $this->prefix ) . '</p>' .
+			Xml::input( 'prefix', 20, $this->prefix, array( 'type' => 'text' ) ) . '</p>' .
 			"</fieldset>\n" .
 			"<p>\n" .
 			Xml::checkLabel( wfMsg( 'replacetext_editpages' ), 'edit_pages', 'edit_pages', \
true ) . '<br />' . @@ -289,8 +309,12 @@ class ReplaceText extends SpecialPage {
 			Xml::submitButton( wfMsg( 'replacetext_continue' ) ) .
 			Xml::closeElement( 'form' )
 		);
-		// add javascript specific to special:search
-		$wgOut->addScriptFile( 'search.js' );
+		// Add Javascript specific to Special:Search
+		if ( method_exists( $wgOut, 'addModules' ) ) {
+			$wgOut->addModules( 'mediawiki.special.search' );
+		} else {
+			$wgOut->addScriptFile( 'search.js' );
+		}
 	}
 
 	/**
@@ -334,23 +358,20 @@ class ReplaceText extends SpecialPage {
 		return $tables;
 	}
 
-
 	function pageListForm( $titles_for_edit, $titles_for_move, $unmoveable_titles ) {
-		global $wgOut, $wgLang, $wgScript;
-
-		$skin = $this->user->getSkin();
+		global $wgOut, $wgLang, $wgScriptPath;
+		$linker = class_exists( 'DummyLinker' ) ? new DummyLinker : new Linker;
 
 		$formOpts = array( 'id' => 'choose_pages', 'method' => 'post', 'action' => \
$this->getTitle()->getFullUrl() );  $wgOut->addHTML(
-			Xml::openElement( 'form', $formOpts ) .
-			Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
-			Html::hidden( 'target', $this->target ) .
-			Html::hidden( 'replacement', $this->replacement )
+			Xml::openElement( 'form', $formOpts ) . "\n" .
+			self::hiddenField( 'title', $this->getTitle()->getPrefixedText() ) .
+			self::hiddenField( 'target', $this->target ) .
+			self::hiddenField( 'replacement', $this->replacement ) .
+			self::hiddenField( 'use_regex', $this->use_regex )
 		);
 
-		$js = file_get_contents( dirname( __FILE__ ) . '/ReplaceText.js' );
-		$js = '<script type="text/javascript">' . $js . '</script>';
-		$wgOut->addScript( $js );
+		$wgOut->addScriptFile( "$wgScriptPath/extensions/ReplaceText/ReplaceText.js" );
 
 		if ( count( $titles_for_edit ) > 0 ) {
 			$wgOut->addWikiMsg( 'replacetext_choosepagesforedit', \
"<tt><nowiki>{$this->target}</nowiki></tt>", \
"<tt><nowiki>{$this->replacement}</nowiki></tt>", @@ -360,7 +381,7 @@ class \
ReplaceText extends SpecialPage {  list( $title, $context ) = $title_and_context;
 				$wgOut->addHTML(
 					Xml::check( $title->getArticleID(), true ) .
-					$skin->makeKnownLinkObj( $title, $title->getPrefixedText() ) . " - \
<small>$context</small><br />\n" +					$linker->link( $title ) . " - \
<small>$context</small><br />\n"  );
 			}
 			$wgOut->addHTML( '<br />' );
@@ -371,7 +392,7 @@ class ReplaceText extends SpecialPage {
 			foreach ( $titles_for_move as $title ) {
 				$wgOut->addHTML(
 					Xml::check( 'move-' . $title->getArticleID(), true ) .
-					$skin->makeLinkObj( $title, $title->prefix( $title->getText() ) ) . "<br />\n"
+					$linker->link( $title ) . "<br />\n"
 				);
 			}
 			$wgOut->addHTML( '<br />' );
@@ -385,11 +406,12 @@ class ReplaceText extends SpecialPage {
 
 		$wgOut->addHTML(
 			"<br />\n" .
-			Xml::submitButton( wfMsg( 'replacetext_replace' ) ) .
-			Html::hidden( 'replace', 1 )
+			Xml::submitButton( wfMsg( 'replacetext_replace' ) ) . "\n" .
+			self::hiddenField( 'replace', 1 )
 		);
 
-		// only show "invert selections" link if there are more than five pages
+		// Only show "invert selections" link if there are more than
+		// five pages.
 		if ( count( $titles_for_edit ) + count( $titles_for_move ) > 5 ) {
 			$buttonOpts = array(
 				'type' => 'button',
@@ -408,25 +430,31 @@ class ReplaceText extends SpecialPage {
 			$wgOut->addWikiMsg( 'replacetext_cannotmove', $wgLang->formatNum( count( \
$unmoveable_titles ) ) );  $text = "<ul>\n";
 			foreach ( $unmoveable_titles as $title ) {
-				$text .= "<li>{$skin->makeKnownLinkObj( $title, $title->getPrefixedText() )}<br \
/>\n"; +				$text .= "<li>{$linker->link( $title )}<br />\n";
 			}
 			$text .= "</ul>\n";
 			$wgOut->addHTML( $text );
 		}
 	}
 
-
 	/**
 	 * Extract context and highlights search text
+	 *
+	 * TODO: The bolding needs to be fixed for regular expressions.
 	 */
-	function extractContext( $text, $target ) {
+	function extractContext( $text, $target, $use_regex = false ) {
 		global $wgLang;
+
 		$cw = $this->user->getOption( 'contextchars', 40 );
 
 		// Get all indexes
-		$targetq = preg_quote( $target, '/' );
-		preg_match_all( "/$targetq/", $text, $matches, PREG_OFFSET_CAPTURE );
-
+		if ( $use_regex ) {
+			preg_match_all( "/$target/", $text, $matches, PREG_OFFSET_CAPTURE );
+		} else {
+			$targetq = preg_quote( $target, '/' );
+			preg_match_all( "/$targetq/", $text, $matches, PREG_OFFSET_CAPTURE );
+		}
+ 
 		$poss = array();
 		foreach ( $matches[0] as $_ ) {
 			$poss[] = $_[1];
@@ -452,13 +480,22 @@ class ReplaceText extends SpecialPage {
 		$context = '';
 		foreach ( $cuts as $_ ) {
 			list( $index, $len, ) = $_;
-			$context .= self::convertWhiteSpaceToHTML( $wgLang->truncate( substr( $text, 0, \
$index ), - $cw ) ); +			$context .= self::convertWhiteSpaceToHTML(
+				$wgLang->truncate( substr( $text, 0, $index ), - $cw, '...', false )
+			);
 			$snippet = self::convertWhiteSpaceToHTML( substr( $text, $index, $len ) );
-			$targetq = preg_quote( self::convertWhiteSpaceToHTML( $target ), '/' );
-			$context .= preg_replace( "/$targetq/i", '<span class="searchmatch">\0</span>', \
                $snippet );
-			$context .= self::convertWhiteSpaceToHTML( $wgLang->truncate( substr( $text, \
                $index + $len ), $cw ) );
-		}
+			if ( $use_regex ) {
+				$targetStr = "/$target/U";
+			} else {
+				$targetq = preg_quote( self::convertWhiteSpaceToHTML( $target ), '/' );
+				$targetStr = "/$targetq/i";
+			}
+			$context .= preg_replace( $targetStr, '<span class="searchmatch">\0</span>', \
$snippet );  
+			$context .= self::convertWhiteSpaceToHTML(
+				$wgLang->truncate( substr( $text, $index + $len ), $cw, '...', false )
+			);
+		}
 		return $context;
 	}
 
@@ -471,27 +508,23 @@ class ReplaceText extends SpecialPage {
 		return $msg;
 	}
 
-	function getMatchingTitles( $str, $namespaces, $category, $prefix ) {
+	function getMatchingTitles( $str, $namespaces, $category, $prefix, $use_regex = \
false ) {  $dbr = wfGetDB( DB_SLAVE );
 
-		$str = Title::newFromText( $str )->getDbKey();
-
 		$tables = array( 'page' );
 		$vars = array( 'page_title', 'page_namespace' );
-		// anyString() method was added in MW 1.16
-		if ( method_exists( $dbr, 'anyString' ) ) {
-			$any = $dbr->anyString();
-			$conds = array(
-				'page_title ' . $dbr->buildLike( $any, $str, $any ),
-				"page_namespace IN ({$dbr->makeList( $namespaces )})",
-			);
+
+		$str = str_replace( ' ', '_', $str );
+		if ( $use_regex ) {
+			$comparisonCond = 'page_title REGEXP ' . $dbr->addQuotes( $str );
 		} else {
-			$include_ns = $dbr->makeList( $namespaces );
-			$conds = array(
-				"page_title LIKE '%$str%'",
-				"page_namespace IN ($include_ns)",
-			);
+			$any = $dbr->anyString();
+			$comparisonCond = 'page_title ' . $dbr->buildLike( $any, $str, $any );
 		}
+		$conds = array(
+			$comparisonCond,
+			'page_namespace' => $namespaces,
+		);
 
 		$this->categoryCondition( $category, $tables, $conds );
 		$this->prefixCondition( $prefix, $conds );
@@ -500,30 +533,22 @@ class ReplaceText extends SpecialPage {
 		return $dbr->select( $tables, $vars, $conds, __METHOD__ , $sort );
 	}
 
-	function doSearchQuery( $search, $namespaces, $category, $prefix ) {
+	function doSearchQuery( $search, $namespaces, $category, $prefix, $use_regex = \
false ) {  $dbr = wfGetDB( DB_SLAVE );
-
 		$tables = array( 'page', 'revision', 'text' );
 		$vars = array( 'page_id', 'page_namespace', 'page_title', 'old_text' );
-		// anyString() method was added in MW 1.16
-		if ( method_exists( $dbr, 'anyString' ) ) {
-			$any = $dbr->anyString();
-			$conds = array(
-				'old_text ' . $dbr->buildLike( $any, $search, $any ),
-				"page_namespace IN ({$dbr->makeList( $namespaces )})",
-				'rev_id = page_latest',
-				'rev_text_id = old_id'
-			);
+		if ( $use_regex ) {
+			$comparisonCond = 'old_text REGEXP ' . $dbr->addQuotes( $search );
 		} else {
 			$any = $dbr->anyString();
-			$include_ns = $dbr->makeList( $namespaces );
-			$conds = array(
-				"old_text " . $dbr->buildLike( $any, $search, $any ),
-				"page_namespace IN ($include_ns)",
-				'rev_id = page_latest',
-				'rev_text_id = old_id'
-			);
+			$comparisonCond = 'old_text ' . $dbr->buildLike( $any, $search, $any );
 		}
+		$conds = array(
+			$comparisonCond,
+			'page_namespace' => $namespaces,
+			'rev_id = page_latest',
+			'rev_text_id = old_id'
+		);
 
 		$this->categoryCondition( $category, $tables, $conds );
 		$this->prefixCondition( $prefix, $conds );
@@ -533,7 +558,7 @@ class ReplaceText extends SpecialPage {
 	}
 
 	protected function categoryCondition( $category, &$tables, &$conds ) {
-		if ( !empty( $category ) ) {
+		if ( strval( $category ) !== '' ) {
 			$category = Title::newFromText( $category )->getDbKey();
 			$tables[] = 'categorylinks';
 			$conds[] = 'page_id = cl_from';
@@ -542,17 +567,14 @@ class ReplaceText extends SpecialPage {
 	}
 
 	protected function prefixCondition( $prefix, &$conds ) {
-		if ( !empty( $prefix ) ) {
-			$dbr = wfGetDB( DB_SLAVE );
-			$prefix = Title::newFromText( $prefix )->getDbKey();
-			// anyString() function was added in MW 1.16
-			if ( method_exists( $dbr, 'anyString' ) ) {
-				$any = $dbr->anyString();
-				$conds[] = 'page_title ' . $dbr->buildLike( $prefix, $any );
-			} else {
-				$conds[] = "page_title LIKE '$prefix%'";
-			}
+		if ( strval( $prefix ) === '' ) {
+			return;
 		}
+			
+		$dbr = wfGetDB( DB_SLAVE );
+		$prefix = Title::newFromText( $prefix )->getDbKey();
+		$any = $dbr->anyString();
+		$conds[] = 'page_title ' . $dbr->buildLike( $prefix, $any );
 	}
 
 }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic