[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