summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/ReplaceText
diff options
context:
space:
mode:
authorYaco <franco@reevo.org>2020-06-04 11:01:00 -0300
committerYaco <franco@reevo.org>2020-06-04 11:01:00 -0300
commitfc7369835258467bf97eb64f184b93691f9a9fd5 (patch)
treedaabd60089d2dd76d9f5fb416b005fbe159c799d /www/wiki/extensions/ReplaceText
first commit
Diffstat (limited to 'www/wiki/extensions/ReplaceText')
-rw-r--r--www/wiki/extensions/ReplaceText/COPYING339
-rw-r--r--www/wiki/extensions/ReplaceText/Gruntfile.js35
-rw-r--r--www/wiki/extensions/ReplaceText/README52
-rw-r--r--www/wiki/extensions/ReplaceText/ReplaceText.i18n.alias.php289
-rw-r--r--www/wiki/extensions/ReplaceText/ReplaceText.php73
-rw-r--r--www/wiki/extensions/ReplaceText/composer.json20
-rw-r--r--www/wiki/extensions/ReplaceText/extension.json73
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/af.json36
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ais.json8
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ar.json46
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/arc.json10
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/arz.json29
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ast.json43
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/az.json8
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/azb.json41
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ba.json41
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/bcc.json8
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/be-tarask.json47
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/bg.json19
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/bn.json17
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/br.json42
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/bs.json41
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ca.json45
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ce.json15
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/crh-cyrl.json8
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/crh-latn.json8
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/cs.json49
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/cy.json18
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/de-formal.json14
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/de.json50
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/diq.json10
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/dsb.json41
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/el.json46
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/en.json43
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/eo.json23
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/es.json54
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/et.json12
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/eu.json20
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/fa.json47
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/fi.json44
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/fr.json53
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/frp.json26
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/gl.json42
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/grc.json16
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/gsw.json40
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/he.json44
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/hr.json29
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/hsb.json41
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/hu.json42
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ia.json41
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/id.json43
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ig.json9
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/it.json46
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ja.json45
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/jv.json11
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ka.json26
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/km.json21
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ko.json49
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ksh.json41
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/lb.json42
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/lki.json8
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/lt.json12
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/mg.json8
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/mk.json43
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ml.json35
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/mr.json21
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ms.json42
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/nb.json45
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/nl.json46
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/nn.json40
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/oc.json41
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/pdc.json9
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/pl.json50
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/pms.json42
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/pnt.json8
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ps.json21
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/pt-br.json54
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/pt.json52
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/qqq.json52
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ro.json19
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/roa-tara.json19
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ru.json53
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/si.json18
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/sk.json41
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/sr-ec.json36
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/sr-el.json34
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/sv.json50
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/sw.json8
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ta.json12
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/te.json12
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/th.json9
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/tl.json40
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/tr.json39
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/tt-cyrl.json8
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/uk.json46
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/ur.json20
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/vep.json10
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/vi.json44
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/vo.json22
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/zh-hans.json49
-rw-r--r--www/wiki/extensions/ReplaceText/i18n/zh-hant.json51
-rwxr-xr-xwww/wiki/extensions/ReplaceText/maintenance/replaceAll.php408
-rwxr-xr-xwww/wiki/extensions/ReplaceText/replaceAll.php32
-rw-r--r--www/wiki/extensions/ReplaceText/resources/ext.ReplaceText.css3
-rw-r--r--www/wiki/extensions/ReplaceText/resources/ext.ReplaceText.js27
-rw-r--r--www/wiki/extensions/ReplaceText/src/ReplaceTextHooks.php73
-rw-r--r--www/wiki/extensions/ReplaceText/src/ReplaceTextJob.php136
-rw-r--r--www/wiki/extensions/ReplaceText/src/ReplaceTextSearch.php111
-rw-r--r--www/wiki/extensions/ReplaceText/src/ReplaceTextUtils.php41
-rw-r--r--www/wiki/extensions/ReplaceText/src/SpecialReplaceText.php792
-rw-r--r--www/wiki/extensions/ReplaceText/tests/phan/config.php19
111 files changed, 5482 insertions, 0 deletions
diff --git a/www/wiki/extensions/ReplaceText/COPYING b/www/wiki/extensions/ReplaceText/COPYING
new file mode 100644
index 00000000..d159169d
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/www/wiki/extensions/ReplaceText/Gruntfile.js b/www/wiki/extensions/ReplaceText/Gruntfile.js
new file mode 100644
index 00000000..9d52c843
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/Gruntfile.js
@@ -0,0 +1,35 @@
+/* eslint-env node */
+module.exports = function ( grunt ) {
+ var conf = grunt.file.readJSON( 'extension.json' );
+
+ grunt.loadNpmTasks( 'grunt-banana-checker' );
+ grunt.loadNpmTasks( 'grunt-eslint' );
+ grunt.loadNpmTasks( 'grunt-jsonlint' );
+ grunt.loadNpmTasks( 'grunt-stylelint' );
+
+ grunt.initConfig( {
+ eslint: {
+ all: '.'
+ },
+ stylelint: {
+ options: {
+ syntax: 'less'
+ },
+ all: [
+ '**/*.{css,less}',
+ '!vendor/**'
+ ]
+ },
+ banana: conf.MessagesDirs,
+ jsonlint: {
+ all: [
+ '**/*.json',
+ '!node_modules/**',
+ '!vendor/**'
+ ]
+ }
+ } );
+
+ grunt.registerTask( 'test', [ 'eslint', 'stylelint', 'jsonlint', 'banana' ] );
+ grunt.registerTask( 'default', 'test' );
+};
diff --git a/www/wiki/extensions/ReplaceText/README b/www/wiki/extensions/ReplaceText/README
new file mode 100644
index 00000000..f609e250
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/README
@@ -0,0 +1,52 @@
+Replace Text Extension
+
+ Version 1.4.1
+ Yaron Koren, Niklas Laxström and others
+
+This is free software licenced under the GNU General Public Licence. Please
+see http://www.gnu.org/copyleft/gpl.html for further details, including the
+full text and terms of the licence.
+
+== Overview ==
+
+Replace Text is an extension to MediaWiki that creates a new special page,
+Special:ReplaceText, available to anyone who has the 'replacetext'
+privilege, that does a text find-and-replace on all pages in the wiki,
+selectable by namespace. Both the contents of pages and their titles can be
+modified. The search is case-sensitive.
+
+Since the replacement is not undoable, if the replacement string is
+blank or a string that is already contained in the wiki, the 'ReplaceText'
+page prompts the user to confirm the replacement before it is performed.
+
+Each replacement shows up as a wiki edit, with the administrator who
+performed the replacement appearing as the user and an edit summary that
+looks like "Text replacement: 'search string' to 'replacement string'".
+
+For more information, see the extension homepage at:
+http://www.mediawiki.org/wiki/Extension:Replace_Text
+
+== Requirements ==
+
+This version of the Replace Text extension requires MediaWiki 1.23 or higher.
+
+== Installation ==
+
+To install the extension, place the entire 'ReplaceText' directory
+within your MediaWiki 'extensions' directory, then add either of the
+following lines to your 'LocalSettings.php' file:
+
+ wfLoadExtension( 'ReplaceText' );
+ require_once( "$IP/extensions/ReplaceText/ReplaceText.php" );
+
+In order to perform replacements, you must have the 'replacetext' permssion;
+if you are an administrator on your wiki, the easiest way to do this is to
+also add the following line:
+
+ $wgGroupPermissions['sysop']['replacetext'] = true;
+
+== Contact ==
+
+Comments, questions, suggestions and bug reports are welcome, and can
+be placed on the Talk page for the extension, or sent to Yaron at
+yaron57@gmail.com.
diff --git a/www/wiki/extensions/ReplaceText/ReplaceText.i18n.alias.php b/www/wiki/extensions/ReplaceText/ReplaceText.i18n.alias.php
new file mode 100644
index 00000000..48d085f0
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/ReplaceText.i18n.alias.php
@@ -0,0 +1,289 @@
+<?php
+/**
+ * Aliases for special pages
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+$specialPageAliases = [];
+
+/** English (English) */
+$specialPageAliases['en'] = [
+ 'ReplaceText' => [ 'ReplaceText' ],
+];
+
+/** Arabic (العربية) */
+$specialPageAliases['ar'] = [
+ 'ReplaceText' => [ 'استبدال_نص' ],
+];
+
+/** Egyptian Arabic (مصرى) */
+$specialPageAliases['arz'] = [
+ 'ReplaceText' => [ 'تبديل_نص' ],
+];
+
+/** Western Balochi (بلوچی رخشانی) */
+$specialPageAliases['bgn'] = [
+ 'ReplaceText' => [ 'متنی_جاگیرکورتین' ],
+];
+
+/** Breton (brezhoneg) */
+$specialPageAliases['br'] = [
+ 'ReplaceText' => [ 'Erlc\'hiañTestenn' ],
+];
+
+/** Bosnian (bosanski) */
+$specialPageAliases['bs'] = [
+ 'ReplaceText' => [ 'ZamjenaTeksta' ],
+];
+
+/** Czech (čeština) */
+$specialPageAliases['cs'] = [
+ 'ReplaceText' => [ 'Nahradit_text' ],
+];
+
+/** German (Deutsch) */
+$specialPageAliases['de'] = [
+ 'ReplaceText' => [ 'Text_ersetzen' ],
+];
+
+/** Zazaki (Zazaki) */
+$specialPageAliases['diq'] = [
+ 'ReplaceText' => [ 'MetinVırnayış' ],
+];
+
+/** Lower Sorbian (dolnoserbski) */
+$specialPageAliases['dsb'] = [
+ 'ReplaceText' => [ 'Tekst wuměniś' ],
+];
+
+/** Divehi (ދިވެހިބަސް) */
+$specialPageAliases['dv'] = [
+ 'ReplaceText' => [ 'ލިޔުން_ބަދަލުކުރައްވާ' ],
+];
+
+/** Greek (Ελληνικά) */
+$specialPageAliases['el'] = [
+ 'ReplaceText' => [ 'ΑντικατάστασηΚειμένου' ],
+];
+
+/** Esperanto (Esperanto) */
+$specialPageAliases['eo'] = [
+ 'ReplaceText' => [ 'Anstataŭigi_tekston' ],
+];
+
+/** Persian (فارسی) */
+$specialPageAliases['fa'] = [
+ 'ReplaceText' => [ 'جایگزینی_متن' ],
+];
+
+/** Finnish (suomi) */
+$specialPageAliases['fi'] = [
+ 'ReplaceText' => [ 'Korvaa_teksti' ],
+];
+
+/** French (français) */
+$specialPageAliases['fr'] = [
+ 'ReplaceText' => [ 'Remplacer_texte', 'RemplacerTexte' ],
+];
+
+/** Arpitan (arpetan) */
+$specialPageAliases['frp'] = [
+ 'ReplaceText' => [ 'Remplaciér_lo_tèxto', 'RemplaciérLoTèxto' ],
+];
+
+/** Galician (galego) */
+$specialPageAliases['gl'] = [
+ 'ReplaceText' => [ 'Substituír_o_texto', 'Substituír_texto' ],
+];
+
+/** Swiss German (Alemannisch) */
+$specialPageAliases['gsw'] = [
+ 'ReplaceText' => [ 'Täxt_ersetze' ],
+];
+
+/** Hebrew (עברית) */
+$specialPageAliases['he'] = [
+ 'ReplaceText' => [ 'החלפת_טקסט' ],
+];
+
+/** Croatian (hrvatski) */
+$specialPageAliases['hr'] = [
+ 'ReplaceText' => [ 'Zamjeni_tekst' ],
+];
+
+/** Upper Sorbian (hornjoserbsce) */
+$specialPageAliases['hsb'] = [
+ 'ReplaceText' => [ 'Tekst_narunać' ],
+];
+
+/** Haitian (Kreyòl ayisyen) */
+$specialPageAliases['ht'] = [
+ 'ReplaceText' => [ 'RanplaseTeks' ],
+];
+
+/** Hungarian (magyar) */
+$specialPageAliases['hu'] = [
+ 'ReplaceText' => [ 'Szöveg_csere' ],
+];
+
+/** Interlingua (interlingua) */
+$specialPageAliases['ia'] = [
+ 'ReplaceText' => [ 'Reimplaciar_texto' ],
+];
+
+/** Indonesian (Bahasa Indonesia) */
+$specialPageAliases['id'] = [
+ 'ReplaceText' => [ 'Ganti_teks', 'GantiTeks' ],
+];
+
+/** Italian (italiano) */
+$specialPageAliases['it'] = [
+ 'ReplaceText' => [ 'SostituisciTesto' ],
+];
+
+/** Japanese (日本語) */
+$specialPageAliases['ja'] = [
+ 'ReplaceText' => [ '文字列置換', '文字列の置換' ],
+];
+
+/** Khmer (ភាសាខ្មែរ) */
+$specialPageAliases['km'] = [
+ 'ReplaceText' => [ 'ជំនួសអត្ថបទ' ],
+];
+
+/** Korean (한국어) */
+$specialPageAliases['ko'] = [
+ 'ReplaceText' => [ '찾아바꾸기' ],
+];
+
+/** Colognian (Ripoarisch) */
+$specialPageAliases['ksh'] = [
+ 'ReplaceText' => [ 'Tex tuusche' ],
+];
+
+/** Luxembourgish (Lëtzebuergesch) */
+$specialPageAliases['lb'] = [
+ 'ReplaceText' => [ 'Text_ersetzen' ],
+];
+
+/** Macedonian (македонски) */
+$specialPageAliases['mk'] = [
+ 'ReplaceText' => [ 'ЗамениТекст' ],
+];
+
+/** Malayalam (മലയാളം) */
+$specialPageAliases['ml'] = [
+ 'ReplaceText' => [ 'എഴുത്ത്മാറ്റിച്ചേർക്കുക' ],
+];
+
+/** Marathi (मराठी) */
+$specialPageAliases['mr'] = [
+ 'ReplaceText' => [ 'मजकुरबदला' ],
+];
+
+/** Malay (Bahasa Melayu) */
+$specialPageAliases['ms'] = [
+ 'ReplaceText' => [ 'Ganti_teks' ],
+];
+
+/** Maltese (Malti) */
+$specialPageAliases['mt'] = [
+ 'ReplaceText' => [ 'BiddelTest' ],
+];
+
+/** Norwegian Bokmål (norsk bokmål) */
+$specialPageAliases['nb'] = [
+ 'ReplaceText' => [ 'Teksterstatning' ],
+];
+
+/** Low Saxon (Netherlands) (Nedersaksies) */
+$specialPageAliases['nds-nl'] = [
+ 'ReplaceText' => [ 'Tekste_vervangen' ],
+];
+
+/** Dutch (Nederlands) */
+$specialPageAliases['nl'] = [
+ 'ReplaceText' => [ 'TekstVervangen' ],
+];
+
+/** Occitan (occitan) */
+$specialPageAliases['oc'] = [
+ 'ReplaceText' => [ 'Remplaçar tèxte', 'RemplaçarTèxte' ],
+];
+
+/** Portuguese (português) */
+$specialPageAliases['pt'] = [
+ 'ReplaceText' => [ 'Substituir_texto' ],
+];
+
+/** Sicilian (sicilianu) */
+$specialPageAliases['scn'] = [
+ 'ReplaceText' => [ 'SostituisciTesto' ],
+];
+
+/** Slovak (slovenčina) */
+$specialPageAliases['sk'] = [
+ 'ReplaceText' => [ 'NahradiťText' ],
+];
+
+/** Albanian (shqip) */
+$specialPageAliases['sq'] = [
+ 'ReplaceText' => [ 'ZëvendësoTekstin' ],
+];
+
+/** Serbian (Cyrillic script) (српски (ћирилица)‎) */
+$specialPageAliases['sr-ec'] = [
+ 'ReplaceText' => [ 'ЗамениТекст', 'Замени_текст' ],
+];
+
+/** Swedish (svenska) */
+$specialPageAliases['sv'] = [
+ 'ReplaceText' => [ 'Ersätt_text' ],
+];
+
+/** Swahili (Kiswahili) */
+$specialPageAliases['sw'] = [
+ 'ReplaceText' => [ 'PandikiziaMatini' ],
+];
+
+/** Tagalog (Tagalog) */
+$specialPageAliases['tl'] = [
+ 'ReplaceText' => [ 'Palitan_ang_teksto' ],
+];
+
+/** Turkish (Türkçe) */
+$specialPageAliases['tr'] = [
+ 'ReplaceText' => [ 'MetniDeğiştir' ],
+];
+
+/** Ukrainian (українська) */
+$specialPageAliases['uk'] = [
+ 'ReplaceText' => [ 'Замінити_текст' ],
+];
+
+/** Venetian (vèneto) */
+$specialPageAliases['vec'] = [
+ 'ReplaceText' => [ 'SostuituissiTesto' ],
+];
+
+/** Vietnamese (Tiếng Việt) */
+$specialPageAliases['vi'] = [
+ 'ReplaceText' => [ 'Thay_văn_bản' ],
+];
+
+/** Chinese (中文) */
+$specialPageAliases['zh'] = [
+ 'ReplaceText' => [ '替换文本', '替換文本', '取代文字' ],
+];
+
+/** Simplified Chinese (中文(简体)‎) */
+$specialPageAliases['zh-hans'] = [
+ 'ReplaceText' => [ '替换文本' ],
+];
+
+/** Traditional Chinese (中文(繁體)‎) */
+$specialPageAliases['zh-hant'] = [
+ 'ReplaceText' => [ '替換文字' ],
+];
diff --git a/www/wiki/extensions/ReplaceText/ReplaceText.php b/www/wiki/extensions/ReplaceText/ReplaceText.php
new file mode 100644
index 00000000..dac34b48
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/ReplaceText.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Replace Text - a MediaWiki extension that provides a special page to
+ * allow administrators to do a global string find-and-replace on all the
+ * content pages of a wiki.
+ *
+ * https://www.mediawiki.org/wiki/Extension:Replace_Text
+ *
+ * The special page created is 'Special:ReplaceText', and it provides
+ * a form to do a global search-and-replace, with the changes to every
+ * page showing up as a wiki edit, with the administrator who performed
+ * the replacement as the user, and an edit summary that looks like
+ * "Text replace: 'search string' * to 'replacement string'".
+ *
+ * If the replacement string is blank, or is already found in the wiki,
+ * the page provides a warning prompt to the user before doing the
+ * replacement, since it is not easily reversible.
+ */
+
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'ReplaceText' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['ReplaceText'] = __DIR__ . '/i18n';
+ $wgExtensionMessagesFiles['ReplaceTextAlias'] = __DIR__ . '/ReplaceText.i18n.alias.php';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for Replace Text extension. ' .
+ 'Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return;
+}
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+ die();
+}
+
+define( 'REPLACE_TEXT_VERSION', '1.4.1' );
+
+// credits
+$wgExtensionCredits['specialpage'][] = [
+ 'path' => __FILE__,
+ 'name' => 'Replace Text',
+ 'version' => REPLACE_TEXT_VERSION,
+ 'author' => [ 'Yaron Koren', 'Niklas Laxström', '...' ],
+ 'url' => 'https://www.mediawiki.org/wiki/Extension:Replace_Text',
+ 'descriptionmsg' => 'replacetext-desc',
+ 'license-name' => 'GPL-2.0-or-later'
+];
+
+$wgMessagesDirs['ReplaceText'] = __DIR__ . '/i18n';
+$wgExtensionMessagesFiles['ReplaceTextAlias'] = __DIR__ . '/ReplaceText.i18n.alias.php';
+$wgJobClasses['replaceText'] = 'ReplaceTextJob';
+
+// This extension uses its own permission type, 'replacetext'
+$wgAvailableRights[] = 'replacetext';
+$wgGroupPermissions['sysop']['replacetext'] = true;
+
+$wgHooks['AdminLinks'][] = 'ReplaceTextHooks::addToAdminLinks';
+
+$wgSpecialPages['ReplaceText'] = 'SpecialReplaceText';
+$wgAutoloadClasses['ReplaceTextHooks'] = __DIR__ . '/src/ReplaceTextHooks.php';
+$wgAutoloadClasses['SpecialReplaceText'] = __DIR__ . '/src/SpecialReplaceText.php';
+$wgAutoloadClasses['ReplaceTextJob'] = __DIR__ . '/src/ReplaceTextJob.php';
+$wgAutoloadClasses['ReplaceTextSearch'] = __DIR__ . '/src/ReplaceTextSearch.php';
+
+$wgResourceModules['ext.ReplaceText'] = [
+ 'scripts' => 'ext.ReplaceText.js',
+ 'localBasePath' => 'resources',
+ 'remoteExtPath' => 'ReplaceText/resources',
+];
+
+// Global variables
+$wgReplaceTextUser = null;
diff --git a/www/wiki/extensions/ReplaceText/composer.json b/www/wiki/extensions/ReplaceText/composer.json
new file mode 100644
index 00000000..17019b96
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/composer.json
@@ -0,0 +1,20 @@
+{
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "1.0.0",
+ "mediawiki/mediawiki-codesniffer": "18.0.0",
+ "jakub-onderka/php-console-highlighter": "0.3.2",
+ "mediawiki/minus-x": "0.3.1",
+ "mediawiki/mediawiki-phan-config": "0.2.0"
+ },
+ "scripts": {
+ "fix": [
+ "phpcbf",
+ "minus-x fix ."
+ ],
+ "test": [
+ "parallel-lint . --exclude vendor --exclude node_modules",
+ "phpcs -p -s",
+ "minus-x check ."
+ ]
+ }
+}
diff --git a/www/wiki/extensions/ReplaceText/extension.json b/www/wiki/extensions/ReplaceText/extension.json
new file mode 100644
index 00000000..e9f54da5
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/extension.json
@@ -0,0 +1,73 @@
+{
+ "name": "Replace Text",
+ "version": "1.4.1",
+ "author": [
+ "Yaron Koren",
+ "Niklas Laxström",
+ "..."
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:Replace_Text",
+ "descriptionmsg": "replacetext-desc",
+ "license-name": "GPL-2.0-or-later",
+ "type": "specialpage",
+ "GroupPermissions": {
+ "sysop": {
+ "replacetext": true
+ }
+ },
+ "AvailableRights": [
+ "replacetext"
+ ],
+ "SpecialPages": {
+ "ReplaceText": "SpecialReplaceText"
+ },
+ "JobClasses": {
+ "replaceText": "ReplaceTextJob"
+ },
+ "MessagesDirs": {
+ "ReplaceText": [
+ "i18n"
+ ]
+ },
+ "ResourceModules": {
+ "ext.ReplaceText": {
+ "scripts": [
+ "ext.ReplaceText.js"
+ ]
+ },
+ "ext.ReplaceTextStyles": {
+ "styles": [
+ "ext.ReplaceText.css"
+ ]
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "resources",
+ "remoteExtPath": "ReplaceText/resources"
+ },
+ "ExtensionMessagesFiles": {
+ "ReplaceTextAlias": "ReplaceText.i18n.alias.php"
+ },
+ "AutoloadClasses": {
+ "ReplaceTextHooks": "src/ReplaceTextHooks.php",
+ "SpecialReplaceText": "src/SpecialReplaceText.php",
+ "ReplaceTextJob": "src/ReplaceTextJob.php",
+ "ReplaceTextSearch": "src/ReplaceTextSearch.php",
+ "ReplaceTextUtils": "src/ReplaceTextUtils.php"
+ },
+ "Hooks": {
+ "AdminLinks": [
+ "ReplaceTextHooks::addToAdminLinks"
+ ],
+ "SpecialMovepageAfterMove": [
+ "ReplaceTextHooks::replaceTextReminder"
+ ],
+ "UserGetReservedNames": [
+ "ReplaceTextHooks::getReservedNames"
+ ]
+ },
+ "config": {
+ "ReplaceTextUser": null
+ },
+ "manifest_version": 1
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/af.json b/www/wiki/extensions/ReplaceText/i18n/af.json
new file mode 100644
index 00000000..15d141ed
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/af.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Naudefj"
+ ]
+ },
+ "replacetext": "Vervang teks",
+ "replacetext-desc": "Administrateurs kan via 'n [[Special:ReplaceText|spesiale bladsy]] teks in alle bladsye soek en vervang",
+ "replacetext_originaltext": "Oorspronklike teks:",
+ "replacetext_replacementtext": "Vervangende teks:",
+ "replacetext_optionalfilters": "Opsionele filters:",
+ "replacetext_categorysearch": "Vervang slegs in kategorie:",
+ "replacetext_prefixsearch": "Vervang slegs in bladsye met voorvoegsel:",
+ "replacetext_editpages": "Vervang teks in die bladsy-inhoud",
+ "replacetext_movepages": "Vervang teks in bladsyname (waar moontlik)",
+ "replacetext_givetarget": "U moet die string wat vervang moet word verskaf",
+ "replacetext_nonamespace": "U moet ten minste een naamruimte kies.",
+ "replacetext_editormove": "U moet ten minste een van die vervangingsopsies kies.",
+ "replacetext_choosepagesforedit": "Kies die {{PLURAL:$3|bladsy|blaaie}} waar u '$1' met '$2' wil vervang:",
+ "replacetext_choosepagesformove": "Vervang \"$1\" met \"$2\" in die volgende {{PLURAL:$3|bladsynaam|bladsyname}}:",
+ "replacetext_cannotmove": "Die volgende {{PLURAL:$1|bladsy|blaaie}} kan nie geskuif word nie:",
+ "replacetext_formovedpages": "Vir geskuifde bladsye:",
+ "replacetext_savemovedpages": "Stoor die ou bladsyname as aansture na die nuwe name",
+ "replacetext_watchmovedpages": "Hou hierdie bladsy dop",
+ "replacetext_invertselections": "Omgekeerde seleksie",
+ "replacetext_replace": "Vervang",
+ "replacetext_success": "\"$1\" word in $3 {{PLURAL:$3|bladsy|blaaie}} met \"$2\" vervang.",
+ "replacetext_noreplacement": "Daar was geen bladsye wat die teks '$1' bevat gevind nie.",
+ "replacetext_nomove": "Daar is geen bladsye met \"$1\" in die naam gevind nie.",
+ "replacetext_nosuchcategory": "Die kategorie \"$1\" bestaan nie.",
+ "replacetext_return": "Terug na die vorm.",
+ "replacetext_blankwarning": "Omdat u teks met niks vervang kan hierdie aksie nie ongedaan gemaak word nie.\nWil u voortgaan?",
+ "replacetext_continue": "Gaan voort",
+ "replacetext_editsummary": "Teks vervang - '$1' na '$2'",
+ "right-replacetext": "Doen vervangings oor die hele wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ais.json b/www/wiki/extensions/ReplaceText/i18n/ais.json
new file mode 100644
index 00000000..db6ce6e6
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ais.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tokoabibi"
+ ]
+ },
+ "replacetext_invertselections": "kabelihan mipili’"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ar.json b/www/wiki/extensions/ReplaceText/i18n/ar.json
new file mode 100644
index 00000000..3152ccf5
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ar.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alnokta",
+ "Meno25",
+ "OsamaK",
+ "Ouda",
+ "ديفيد",
+ "أحمد"
+ ]
+ },
+ "replacetext": "استبدال النصوص",
+ "replacetext-desc": "تتيح [[Special:ReplaceText|صفحة خاصة]] لتمكين الإداريين من إجراء عمليات الإيجاد و&nbsp;الاستبدال للنصوص في كل صفحات المحتوى في الويكي",
+ "replacetext_docu": "لاستبدال نص بغيره في كل الصفحات العادية في هذه الويكي {{gender:|أدخل|أدخلي}} مقطعي النص هنا ثم {{gender:|اضغط|اضغطي}} \"{{int:replacetext_continue}}\"، ستُعرض عليك عندها قائمة الصفحات التي تحوي نص البحث، ويمكنك اختيار الصفحات التي {{gender:|تريد|تريدين}} استبدالها.\nاسمك سيظهر في تأريخات الصفحات بوصفك من {{gender:|أجرى|أجرت}} التعديلات.",
+ "replacetext_originaltext": "النص الأصلي:",
+ "replacetext_replacementtext": "نص الاستبدال:",
+ "replacetext_useregex": "استعمل العبارات الاعتيادية",
+ "replacetext_regexdocu": "(مثال: وضع القيمة \"أ(.*)ج\" في \"{{int:replacetext_originaltext}}\" و \"أج$1\" في \"{{int:replacetext_replacementtext}}\" ستستبدل النصّ \"أبج\" بالنص \"أجب\".)",
+ "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' في {{PLURAL:$3||صفحة واحدة|صفحتين|$3 صفحات|$3 صفحة}}.",
+ "replacetext_noreplacement": "لا توجد صفحات تحوي النصّ '$1'.",
+ "replacetext_nomove": "لا توجد صفحات تحوي عناوينها '$1'.",
+ "replacetext_nosuchcategory": "لا يوجد تصنيف بالاسم \"$1\".",
+ "replacetext_return": "ارجع إلى الاستمارة",
+ "replacetext_warning": "'''تحذير''': توجد {{PLURAL:$1||صفحة واحدة تحتوي|صفحتان تحتويان|$1 صفحات تحتوي|$1 صفحة تحتوي}} بالفعل على نصّ الاستبدال '$2'. إذا أجريت هذا الاستبدال فلن تصبح قادرًا على تمييز استبدالاتك من تلك النصوص.",
+ "replacetext_blankwarning": "سلسلة الاستبدال فارغة لذا فلن تكون هذه العملية عكسية.",
+ "replacetext_continue": "استمرار",
+ "replacetext_editsummary": "استبدال النص - '$1' ب'$2'",
+ "right-replacetext": "أجرِ استبدال النصّ في الويكي بأكملها",
+ "action-replacetext": "أجرِ استبدال النصّ في الويكي بأكملها"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/arc.json b/www/wiki/extensions/ReplaceText/i18n/arc.json
new file mode 100644
index 00000000..bd905ad9
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/arc.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Basharh"
+ ]
+ },
+ "replacetext_originaltext": "ܟܬܒܬܐ ܫܪܫܝܬܐ:",
+ "replacetext_watchmovedpages": "ܪܗܝ ܦܐܬܬ̈ܐ ܗܠܝܢ",
+ "replacetext_invertselections": "ܐܗܦܟ ܠܓܘܒܝ̈ܐ"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/arz.json b/www/wiki/extensions/ReplaceText/i18n/arz.json
new file mode 100644
index 00000000..222efa67
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/arz.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ghaly",
+ "Meno25",
+ "Ramsis II"
+ ]
+ },
+ "replacetext": "استبدل النص",
+ "replacetext-desc": "يوفر [[Special:ReplaceText|صفحة خاصة]] للسماح للإداريين للقيام بعملية أوجد واستبدل على نص فى كل صفحات المحتوى لويكي",
+ "replacetext_docu": "لاستبدال سلسلة نص بأخرى عبر كل الصفحات العادية فى هذا الويكى، أدخل قطعتى النص هنا ثم اضغط 'استمرار'. سيعرض عليك بعد ذلك قائمة بالصفحات التى تحتوى على نص البحث، ويمكنك اختيار اللواتى تريد الاستبدال فيها. اسمك سيظهر فى تواريخ الصفحات كالمستخدم المسؤول عن أية تغييرات.",
+ "replacetext_originaltext": "النص الأصلي:",
+ "replacetext_replacementtext": "نص الاستبدال:",
+ "replacetext_movepages": "استبدل النص فى عناوين الصفحات، عندما يكون ممكنا",
+ "replacetext_choosepagesforedit": "من فضلك اختار {{PLURAL:$3|الصفحه|الصفحات}} اللى فيها عايز تستبدل ب'$1' '$2':",
+ "replacetext_choosepagesformove": "استبدل \"$1\" ب\"$2\" فى {{PLURAL:$3||اسم الصفحة التالية|اسمى الصفحتين التاليتين|أسماء الصفحات التالية}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|الصفحة|الصفحات}} التالية لا يمكن نقلها:",
+ "replacetext_savemovedpages": "احفظ العناوين القديمة كتحويلات للعناوين الجديدة",
+ "replacetext_invertselections": "عكس الاختيارات",
+ "replacetext_replace": "استبدل",
+ "replacetext_success": "'$1' ح تتبدل بـ '$2' فى $3 {{PLURAL:$3|صفحه|صفحات}}.",
+ "replacetext_noreplacement": "لا صفحات تم العثور عليها تحتوى على السلسلة '$1'.",
+ "replacetext_return": "رجوع إلى الإستمارة",
+ "replacetext_warning": "فيه $1 {{PLURAL:$1|$1 صفحه|$1 صفحات}} فيها سلسلة الاستبدال، '$2'.\nلو أنك قمت بالاستبدال ده مش هاتقدر تفصل استبدالاتك من السلاسل دى.\nاستمرار مع الاستبدال؟",
+ "replacetext_blankwarning": "لأن سلسلة الاستبدال فارغة، هذه العملية لن تكون عكسية؛ استمر؟",
+ "replacetext_continue": "استمر",
+ "replacetext_editsummary": "استبدال النص - '$1' ب'$2'",
+ "right-replacetext": "القيام باستبدال للسلاسل فى الويكى بأكمله"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ast.json b/www/wiki/extensions/ReplaceText/i18n/ast.json
new file mode 100644
index 00000000..476f4429
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ast.json
@@ -0,0 +1,43 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xuacu"
+ ]
+ },
+ "replacetext": "Reemplazar testu",
+ "replacetext-desc": "Ufre una [[Special:ReplaceText|páxina especial]] que permite a los alministradores facer una gueta y sustitución global d'una cadena de testu en toles páxines de conteníu d'una wiki",
+ "replacetext_docu": "Pa sustituir una cadena de testu por otra en toles páxines regulares d'esta wiki, escribi equí les dos pieces de testu y llueu calca \"{{int:replacetext_continue}}\".\nDempués s'amosará una llista de les páxines que contienen el testu buscáu, y podrás esbillar aquelles nes que quieras sustituilu.\nEl to nome apaecerá nos historiales de les páxines como l'usuariu responsable de cualesquier cambiu.",
+ "replacetext_originaltext": "Testu orixinal:",
+ "replacetext_replacementtext": "Testu de sustitución:",
+ "replacetext_useregex": "Usar espresiones regulares",
+ "replacetext_regexdocu": "(Exemplu: los valores \"a(.*)c\" pa \"{{int:replacetext_originaltext}}\" y \"ac$1\" pa \"{{int:replacetext_replacementtext}}\" camudarán \"abc\" por \"acb\".)",
+ "replacetext_optionalfilters": "Peñeres opcionales:",
+ "replacetext_categorysearch": "Sustituir sólo na categoría:",
+ "replacetext_prefixsearch": "Sustituir sólo nes páxines col prefixu:",
+ "replacetext_editpages": "Sustituir el testu nel conteníu de la páxina",
+ "replacetext_movepages": "Sustituir el testu nos títulos de les páxines, si ye posible",
+ "replacetext_givetarget": "Debes conseñar la cadena que se va a sustituir.",
+ "replacetext_nonamespace": "Debes escoyer, polo menos, un espaciu de nomes.",
+ "replacetext_editormove": "Debes escoyer polo menos una de les opciones de sustitución.",
+ "replacetext_choosepagesforedit": "Sustituír \"$1\" por \"$2\" nel testu de {{PLURAL:$3|la páxina siguiente|les páxines siguientes}}:",
+ "replacetext_choosepagesformove": "Sustituír \"$1\" por \"$2\" {{PLURAL:$3|nel títulu de la páxina siguiente|nos títulos de les páxines siguientes}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|La siguiente páxina|Les siguientes páxines}} nun se {{PLURAL:$1|pue|puen}} mover:",
+ "replacetext_formovedpages": "Pa páxines movies:",
+ "replacetext_savemovedpages": "Guardar los títulos antiguos como redireiciones a los títulos nuevos",
+ "replacetext_watchmovedpages": "Vixilar eses páxines",
+ "replacetext_invertselections": "Invertir seleiciones",
+ "replacetext_replace": "Sustituir",
+ "replacetext_success": "\"$1\" se sustituirá por \"$2\" en {{PLURAL:$3|una páxina|$3 páxines}}.",
+ "replacetext_noreplacement": "Nun s'alcontraron páxines que contengan la cadena de caráuteres «$1».",
+ "replacetext_nomove": "Nun s'alcontraron páxines que contengan «$1» nel títulu.",
+ "replacetext_nosuchcategory": "Nun esiste denguna categoría col nome «$1».",
+ "replacetext_return": "Volver al formulariu.",
+ "replacetext_warning": "'''Avisu:''' Hai {{PLURAL:$1|una páxina|$1 páxines}} que yá {{PLURAL:$1|contién|contienen}} la cadena de sustitución «$2». Si faes esta sustitución nun podrás distinguir los tos cambios d'estes cadenes.",
+ "replacetext_blankwarning": "'''Avisu:''' Como la cadena de sustitución ta balera, esta operación nun sedrá reversible.",
+ "replacetext_continue": "Siguir",
+ "replacetext_announce": "Anunciar eses ediciones per $1 y llistes de siguimientu",
+ "replacetext_editsummary": "Sustitución de testu - de «$1» a «$2»",
+ "right-replacetext": "Facer les sustituciones de la cadena na wiki ensembre",
+ "action-replacetext": "facer sustituciones de cadena na wiki ensembre",
+ "replacetext_reminder": "Pa cambiar tamién los enllaces a esta páxina n'otres páxines, por favor, visita $1."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/az.json b/www/wiki/extensions/ReplaceText/i18n/az.json
new file mode 100644
index 00000000..9029801a
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/az.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cekli829"
+ ]
+ },
+ "replacetext_originaltext": "Orijinal mətn:"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/azb.json b/www/wiki/extensions/ReplaceText/i18n/azb.json
new file mode 100644
index 00000000..e1b1857a
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/azb.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mousa"
+ ]
+ },
+ "replacetext": "یازینی دَییشدیر",
+ "replacetext-desc": "ایداره‌چیلره ویکی‌نین بوتون مقاله‌لرینده سراسری بیر یازی آختاریب و دَییشدیرمگی ایجازه وئرن بیر [[Special:ReplaceText|اؤزل صحیفه]] تعمین ائدیر.",
+ "replacetext_docu": "بوتون بو ویکی‌ده معمولی صحیفه‌لر اوستونده بیر یازینی آیری بیر یازی ایله دَییشدیرمک اوچون، او ایکی یازی پارچالارینی بوردا یازین و «{{int:replacetext_continue}}»-ی وورون.\nسونرا سیزه آختاریش یازیسی اولان صحیفه‌لرین لیستی گؤستریله‌جک و سیزه دَییشدیرمک ایسته‌دیگینیزلری سئچه بیلرسینیز.\nصحیفه‌لرین گئچمیشلرینده سیزین آدینیز دَییشدیرمگه مسئول اولان ایستیفاده‌چی عونوانیندا گؤرونه‌جکدیر.",
+ "replacetext_originaltext": "ایلکین یازی:",
+ "replacetext_replacementtext": "یئرینه قویما یازیسی:",
+ "replacetext_useregex": "دوزنلی ایفاده‌لر (رِگولار اِکسپرِشن) ایشلدین",
+ "replacetext_regexdocu": "(میثال: «{{int:replacetext_originaltext}}» اوچون «a(.*)c» دَیَری و «{{int:replacetext_replacementtext}}» اوچون «ac$1» دَیَری، «abc»-ی «acb» ایله دَییشدیره‌جکدیر.)",
+ "replacetext_optionalfilters": "ایستگه باغلی سۆزگَجلر:",
+ "replacetext_categorysearch": "یالنیز بؤلمه‌ده یئرینه قوی:",
+ "replacetext_prefixsearch": "یالنیز بو اؤن‌اکلری اولان صحیفه‌لرده یئرینه قوی:",
+ "replacetext_editpages": "یازینی مقاله ایچینده‌کیلرده یئرینه قوی",
+ "replacetext_movepages": "اولسا، یازینی صحیفه باشلیقلاریندا یئرینه قوی",
+ "replacetext_givetarget": "یئرینه قویولان یازینی گرک بیلیندیره‌سینیز.",
+ "replacetext_nonamespace": "گرک آزی بیر آدفضاسی بیلیندیره‌سینیز.",
+ "replacetext_editormove": "گرک یئرینه قویماق سئچمه‌لریندن آزی بیرینی سئچه‌سینیز.",
+ "replacetext_choosepagesforedit": "بو {{PLURAL:$3|صحیفه‌نین یازیسیندا|صحیفه‌لرین یازیلاریندا}} «$1»-ین یئرینه «$2»-ی قوی:",
+ "replacetext_choosepagesformove": "بو {{PLURAL:$3|صحیفه‌نین باشلیغیندا|صحیفه‌لرین باشلیقلاریندا}} «$1»-ین یئرینه «$2»-ی قوی:",
+ "replacetext_cannotmove": "بو {{PLURAL:$1|صحیفه‌نی|صحیفه‌لری}} آپارماق اولماز:",
+ "replacetext_formovedpages": "آپاریلان صحیفه‌لر اوچون:",
+ "replacetext_savemovedpages": "اسکی باشلیقلاردا یئنی باشلیقلارا یول‌لاندیرما قئید ائت",
+ "replacetext_watchmovedpages": "بو صحیفه‌لری ایزله",
+ "replacetext_invertselections": "سئچیلمیشلری دؤندر",
+ "replacetext_replace": "یئرینه قوی",
+ "replacetext_success": "{{PLURAL:$3|بیر|$3}} صحیفه‌ده «$1»-ین یئرینه «$2» قویولاجاقدیر.",
+ "replacetext_noreplacement": "«$1» یازیسی اولان هئچ بیر صحیفه تاپیلمادی.",
+ "replacetext_nomove": "«$1» باشلیغی اولان هئچ بیر صحیفه تاپیلمادی.",
+ "replacetext_nosuchcategory": "«$1» آدی ایله بیر بؤلمه یوخدور.",
+ "replacetext_return": "قورما قاییت.",
+ "replacetext_warning": "'''دیقت:''' ایندی {{PLURAL:$1|بیر|$1}} دنه «$2» یئرینه قویولان یازیسی اولان صحیفه واردیر. اگر بو یئرینه قویماغی ائتسز، اؤز یئرینه قویدوقلارینیزی بو یازیلاردان آییرا بیلنمه‌یه‌جکسینیز.",
+ "replacetext_blankwarning": "'''دیقت:''' یئرینه قویولان یازینین بوش اولدوغونا گؤره، بو ایشی دؤندره بیلنمه‌یه‌جکسینیز.",
+ "replacetext_continue": "داوام ائت",
+ "replacetext_editsummary": "یازی یئرینه قویما - «$1»-ی «$2»-یه",
+ "right-replacetext": "یازی یئرینه قویمانی بوتون ویکی‌ده ائت",
+ "action-replacetext": "یازی یئرینه قویمانی بوتون ویکی‌ده ائت"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ba.json b/www/wiki/extensions/ReplaceText/i18n/ba.json
new file mode 100644
index 00000000..7e63e9cf
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ba.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Assele",
+ "Рустам Нурыев"
+ ]
+ },
+ "replacetext": "Тексты алмаштырырға",
+ "replacetext-desc": "Хакимдәргә бөтә эстәлек биттәрендә тексты табып алмаштырырға мөмкинлек биреүсе [[Special:ReplaceText|махсус бит]] менән тәьмин итә",
+ "replacetext_docu": "Был викиның бөтә биттәрендә бер текст юлын икенсе менән алмаштырыр өсөн, ике текст керетегеҙ һәм \"Дауам итергә\" төймәһенә баҫығыҙ.\nАртабан һеҙгә эҙләнгән тексты үҙ эсенә алған биттәр исемлеге күрһәтеләсәк, һеҙ улар араһында алмаштырырға теләгәндәрен һайлай алаһығыҙ.\nҺеҙҙең исемегеҙ биттәрҙең үҙгәртеү тарихтарында үҙгәртеүҙәргә яуаплы ҡатнашыусы булараҡ күрһәтеләсәк.",
+ "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|1=биттә|биттәрҙә}} алмаштырырға:",
+ "replacetext_choosepagesformove": "\"$1\" тексын \"$2\" менән түбәндәге бит {{PLURAL:$3|1=исемендә|исемдәрендә}} алмаштырырға:",
+ "replacetext_cannotmove": "Түбәндәге {{PLURAL:$1|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": "Бөтә викила тексты алмаштырыу"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/bcc.json b/www/wiki/extensions/ReplaceText/i18n/bcc.json
new file mode 100644
index 00000000..24003043
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/bcc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan"
+ ]
+ },
+ "replacetext_categorysearch": "جایگرین کورتین پکت بی تهرِ تا:"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/be-tarask.json b/www/wiki/extensions/ReplaceText/i18n/be-tarask.json
new file mode 100644
index 00000000..1a53f763
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/be-tarask.json
@@ -0,0 +1,47 @@
+{
+ "@metadata": {
+ "authors": [
+ "EugeneZelenko",
+ "Jim-by",
+ "Wizardist",
+ "Zedlik",
+ "Red Winged Duck"
+ ]
+ },
+ "replacetext": "Замяніць тэкст",
+ "replacetext-desc": "Дадае [[Special:ReplaceText|спэцыяльную старонку]], якая дазваляе адміністратарам глябальны пошук і замену тэксту ва усіх старонках вікі",
+ "replacetext_docu": "Каб замяніць адзін радок на іншы ва ўсіх звычайных старонках гэтай вікі, увядзіце два радкі тут, а потым націсьніце «{{int:replacetext_continue}}».\nБудзе паказаны сьпіс старонак, якія ўтрымліваюць тэкст, які Вы шукалі, і Вы зможаце выбраць старонкі, дзе Вы жадаеце зрабіць замену.\nВаша імя будзе запісанае ў гісторыю старонкі, таму што ўдзельнікі адказныя за ўсе зробленыя зьмены.",
+ "replacetext_originaltext": "Арыгінальны тэкст:",
+ "replacetext_replacementtext": "Тэкст на замену:",
+ "replacetext_useregex": "Выкарыстоўваць рэгулярныя выразы",
+ "replacetext_regexdocu": "(Напрыклад, выразы «a(.*)c» ў полі «{{int:replacetext_originaltext}}» і «ac$1» у полі «{{int:replacetext_replacementtext}}» прывядуць да замены «abc» на «acb».)",
+ "replacetext_optionalfilters": "Неабавязковыя фільтры:",
+ "replacetext_categorysearch": "Замяніць толькі ў катэгорыі:",
+ "replacetext_prefixsearch": "Замяніць толькі ў старонках, назвы якіх пачынаюцца з:",
+ "replacetext_editpages": "Замяніць тэкст ў зьмесьце старонак",
+ "replacetext_movepages": "Замяніць тэкст у назвах старонак, калі гэта магчыма",
+ "replacetext_givetarget": "Вам неабходна пазначыць радок для замены.",
+ "replacetext_nonamespace": "Вам неабходна выбраць хаця б адну прастору назваў.",
+ "replacetext_editormove": "Вам неабходна выбраць хаця б адну з наладаў пераносу.",
+ "replacetext_choosepagesforedit": "Калі ласка, абярыце {{PLURAL:$3|1=старонку, на якой|старонкі, на якіх}} Вы жадаеце замяніць «$1» на «$2»:",
+ "replacetext_choosepagesformove": "Замяніць «$1» на «$2» у {{PLURAL:$3|1=назьве наступнай старонкі|назвах наступных старонак}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|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": "'''Папярэджаньне:''' Існуе $1 {{PLURAL:$1|старонка, якая ўтрымлівае|старонкі, якія ўтрымліваюць|старонак, якія ўтрымліваюць}} тэкст на замену «$2».\nКалі Вы зробіце гэту замену, Вы ня зможаце аддзяліць Вашыя замены ад гэтых тэкстаў.",
+ "replacetext_blankwarning": "У выніку таго, што радок, на які павінна адбыцца замена, пусты, апэрацыя ня будзе выкананая.\nВы жадаеце працягваць?",
+ "replacetext_continue": "Працягваць",
+ "replacetext_announce": "Анансаваць гэтыя праўкі праз $1 і сьпісы назіраньня",
+ "replacetext_editsummary": "Замена тэксту — «$1» на «$2»",
+ "right-replacetext": "замена тэксту ва ўсёй вікі",
+ "action-replacetext": "замяняць радкі ва ўсёй вікі",
+ "replacetext_reminder": "Каб таксама зьмяніць спасылкі на гэтую старонку зь іншых старонак, перайдзіце на $1."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/bg.json b/www/wiki/extensions/ReplaceText/i18n/bg.json
new file mode 100644
index 00000000..e3dd378a
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/bg.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "DCLXVI",
+ "StanProg"
+ ]
+ },
+ "replacetext": "Заместване на текст",
+ "replacetext-desc": "Предоставя [[Special:ReplaceText|специална страница]], чрез която администраторите могат да извършват глобално откриване-и-заместване на низове в страниците на уикито",
+ "replacetext_originaltext": "Оригинален текст:",
+ "replacetext_replacementtext": "Текст за заместване:",
+ "replacetext_choosepagesforedit": "Замяна на „$1“ с „$2“ в текста на {{PLURAL:$3|следната страница|следните $3 страници}}:\nИзберете страници, в които желаете да замените :",
+ "replacetext_replace": "Заместване",
+ "replacetext_success": "Заместване на „$1“ с „$2“ в {{PLURAL:$3|една страница|$3 страници}} .",
+ "replacetext_noreplacement": "Не бяха открити страници, съдържащи низа „$1“.",
+ "replacetext_blankwarning": "'''Предупреждение:''' Тъй като низът за заместване е празен, процесът на заместване ще бъде необратим.",
+ "replacetext_continue": "Продължаване",
+ "replacetext_editsummary": "Замяна на текст – „$1“ с „$2“"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/bn.json b/www/wiki/extensions/ReplaceText/i18n/bn.json
new file mode 100644
index 00000000..5fc45c00
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/bn.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bellayet",
+ "Wikitanvir",
+ "Aftabuzzaman",
+ "Bodhisattwa"
+ ]
+ },
+ "replacetext": "লেখা প্রতিস্থাপন",
+ "replacetext_originaltext": "মূল লেখা:",
+ "replacetext_replacementtext": "প্রতিস্থাপিত লেখা:",
+ "replacetext_useregex": "রেগুলার এক্সপ্রেশন ব্যবহার করো",
+ "replacetext_optionalfilters": "ঐচ্ছিক ফিল্টার:",
+ "replacetext_categorysearch": "শুধুমাত্র বিষয়শ্রেণীতেই প্রতিস্থাপন করো:",
+ "replacetext_formovedpages": "স্থানান্তরিত পাতাগুলির জন্য:"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/br.json b/www/wiki/extensions/ReplaceText/i18n/br.json
new file mode 100644
index 00000000..0f9a0fc0
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/br.json
@@ -0,0 +1,42 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fohanno",
+ "Fulup",
+ "Y-M D"
+ ]
+ },
+ "replacetext": "Erlec'hiañ an destenn",
+ "replacetext-desc": "Pourchas a ra ur [[Special:ReplaceText|bajenn dibar]] a aotre ar verourien da erlec'hiañ steudadoù arouezennoù dre arouezennoù all er wiki a-bezh",
+ "replacetext_docu": "Evit erlec'hiañ ur steudad arouezennoù gant unan all e holl bajennoù boutin ar wiki-mañ e c'hallit merkañ an div destenn amañ ha klikañ war 'kenderc'hel'.\nDiskouezet e vo deoc'h ur roll pajennoù m'emañ an destenn klasket enno ha gallout a reot dibab ar re a fell deoc'h cheñch.\nWar 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 :",
+ "replacetext_editpages": "Erlec'hiañ an destenn e-mesk danvez ar bajenn",
+ "replacetext_movepages": "Erlec'hiañ an destenn e titl ar pajennoù, pa vez posupl",
+ "replacetext_givetarget": "Rankout a rit reiñ ar chadenn a rank bezañ erlec'hiet.",
+ "replacetext_nonamespace": "Rankout a rit dibab un esaouenn anv d'an nebeutañ.",
+ "replacetext_editormove": "Rankout a rit dibab d'an nebeutañ un dibarzh erlec'hiañ.",
+ "replacetext_choosepagesforedit": "Erlec'hiañ \"$1\" gant \"$2\" e testenn ar bajenn{{PLURAL:$3||où}} da heul :",
+ "replacetext_choosepagesformove": "Erlec'hiañ \"$1\" gant \"$2\" e titl{{PLURAL:$3| ar bajenn da heul|où ar bajennoù da heul}} :",
+ "replacetext_cannotmove": "Ne c'hell ket bezañ fiñvet ar bajenn{{PLURAL:$1||où}} da heul :",
+ "replacetext_formovedpages": "Evit ar pajennoù dilec'hiet :",
+ "replacetext_savemovedpages": "Enrollañ an titloù kozh evel adkasoù davet an titloù nevez",
+ "replacetext_watchmovedpages": "Evezhiañ ar pajennoù-mañ",
+ "replacetext_invertselections": "Eilpennañ an diuzadennoù",
+ "replacetext_replace": "Erlec'hiañ",
+ "replacetext_success": "\"$1\" a vo erlec'hiet gant \"$2\" e $3 pajenn{{PLURAL:$3||}}.",
+ "replacetext_noreplacement": "N'eus bet kavet pajenn ebet gant an neudennad « $1 ».",
+ "replacetext_nomove": "N'eo bet kavet pennad ebet gant \"$1\" en ul lodenn eus an titl.",
+ "replacetext_nosuchcategory": "N'eus rummad ebet en anv « $1 ».",
+ "replacetext_return": "Distreiñ d'ar furmskrid.",
+ "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_editsummary": "Erlec'hiañ an destenn - \"$1\" dre \"$2\"",
+ "right-replacetext": "Krouiñ erlec'hiadurioù testenn er wiki a-bezh"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/bs.json b/www/wiki/extensions/ReplaceText/i18n/bs.json
new file mode 100644
index 00000000..ea3e428e
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/bs.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "CERminator",
+ "Srdjan m"
+ ]
+ },
+ "replacetext": "Zamijeni tekst",
+ "replacetext-desc": "Dodaje [[Special:ReplaceText|posebnu stranicu]] koja omogućava administratorima da izvrše globalnu pretragu nađi-i-zamijeni na svim stranicama sadržaja na wikiju.",
+ "replacetext_docu": "Da biste zamijenili jedan tekst s drugim po svim regularnim stranicama na ovom wikiju, unesite dva dijela teksta ovdje i kliknite \"{{int:replacetext_continue}}\".\nPrikazat će Vam se spisak stranica koje sadrže traženi tekst, i možete odabrati one kod kojih želite taj tekst zamijeniti.\nVaš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 \"{{int:replacetext_originaltext}}\" i \"ac$1\" za \"{{int:replacetext_replacementtext}}\" će zamijeniti \"abc\" sa \"acb\".)",
+ "replacetext_optionalfilters": "Opcionalni filteri:",
+ "replacetext_categorysearch": "Zamijeni samo u kategoriji:",
+ "replacetext_prefixsearch": "Zamijeni samo na stranicama sa prefiksom:",
+ "replacetext_editpages": "Zamijeni tekst u sadržaju stranice",
+ "replacetext_movepages": "Zamijeni tekst u naslovima stranica, ako je moguće",
+ "replacetext_givetarget": "Morate navesti znakove koji se zamjenjuju.",
+ "replacetext_nonamespace": "Morate odabrati najmanje jedan imenski prostor.",
+ "replacetext_editormove": "Morate odabrati najmanje jednu od opcija za zamjenu.",
+ "replacetext_choosepagesforedit": "Molimo odaberite {{PLURAL:$3|stranicu|stranice}} za {{PLURAL:$3|koju|koje}} želite zamijeniti '$1' sa '$2':",
+ "replacetext_choosepagesformove": "Zamjena \"$1\" sa \"$2\" u nazivu {{PLURAL:$3|slijedeće stranice|slijedećih stranica}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|Slijedeća stranica|Slijedeće stranice}} se ne mogu premjestiti:",
+ "replacetext_formovedpages": "Za premještene stranice:",
+ "replacetext_savemovedpages": "Spremi stare naslove kao preusmjerenja na nove naslove",
+ "replacetext_watchmovedpages": "Prati ove stranice",
+ "replacetext_invertselections": "Preokreni odabir",
+ "replacetext_replace": "Zamijeni",
+ "replacetext_success": "'$1' će biti zamijenjeno sa '$2' na $3 {{PLURAL:$3|stranici|stranice|stranica}}.",
+ "replacetext_noreplacement": "Nije pronađena nijedna stranica koja sadrži '$1'.",
+ "replacetext_nomove": "Nijedna stranica nije pronađena čiji naslov sadrži '$1'.",
+ "replacetext_nosuchcategory": "Ne postoji nijedna kategorija pod nazivom \"$1\".",
+ "replacetext_return": "Nazad na obrazac.",
+ "replacetext_warning": "'''Upozorenje:''' {{PLURAL:$1|Postoji $1 stranica koja već sadrži|Postoje $1 stranice koje već sadrže|Postoji $1 stranica koje već sadrže}} zamjenski tekst ''$2''.\nAko želite napraviti ovu zamjenu nećete biti u mogućnosti da razdvojite Vaše zamjene od ovih tekstova.",
+ "replacetext_blankwarning": "Pošto je zamjenski tekst prazan, ovu operaciju neće biti moguće vratiti.\nDa li želite nastaviti?",
+ "replacetext_continue": "Nastavi",
+ "replacetext_editsummary": "Zamjena teksta – \"$1\" u \"$2\"",
+ "right-replacetext": "Pravljenje zamjene teksta na cijelom wikiju"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ca.json b/www/wiki/extensions/ReplaceText/i18n/ca.json
new file mode 100644
index 00000000..66174adc
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ca.json
@@ -0,0 +1,45 @@
+{
+ "@metadata": {
+ "authors": [
+ "SMP",
+ "Solde",
+ "Jmarchn",
+ "Toniher",
+ "Fitoschido"
+ ]
+ },
+ "replacetext": "Substitució de text",
+ "replacetext-desc": "Proporciona una [[Special:ReplaceText|pàgina especial]] per permetre que els administradors a trobar-i-substituir una cadena global per a tots els continguts de les pàgines d'un wiki",
+ "replacetext_docu": "Per reemplaçar una cadena de text amb una altre a través de totes les pàgines regulars d'aquest wiki, introduïu les dues peces de text aquí i llavors polseu \"{{int:replacetext_continue}}\".\nA continuació es mostra una llista de les pàgines que contenen el text de cerca, i podreu triar les pàgines on voleu que es substitueixi.\nEl vostre nom apareixerà en la pàgina de l'historial com a usuari responsable d'aquests canvis.",
+ "replacetext_originaltext": "Text original:",
+ "replacetext_replacementtext": "Text de substitució:",
+ "replacetext_useregex": "Utilitzar expressions regulars",
+ "replacetext_regexdocu": "(Exemple: valors de \"a\"(.*)c\" per \"{{int:replacetext_originaltext}}\" i \"ac$1\" per \"{{int:replacetext_replacementtext}}\" hauria de substituir \"abc\" amb \"acb\")",
+ "replacetext_optionalfilters": "Filtres opcionals:",
+ "replacetext_categorysearch": "Substitueix només en la categoria:",
+ "replacetext_prefixsearch": "Substitueix només en les pàgines amb el prefix:",
+ "replacetext_editpages": "Substitueix el text en els continguts de les pàgines",
+ "replacetext_movepages": "Substitueix el text dels títols de les pàgines, quan sigui possible",
+ "replacetext_givetarget": "S'ha d'especificar la cadena a substituir.",
+ "replacetext_nonamespace": "Heu de seleccionar com a mínim, un espai de noms.",
+ "replacetext_editormove": "Heu de seleccionar com a mínim una de les opcions de substitució.",
+ "replacetext_choosepagesforedit": "Substitueix «$1» amb «$2» en el text de {{PLURAL:$3|la següent pàgina|les següents $3 pàgines}}:",
+ "replacetext_choosepagesformove": "Substituir \"$1\" amb \"$2\" en {{PLURAL:$3|el títol de la pàgina següent|els títols de les següents $3 pàgines}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|La següent pàgina no es pot|Les següents $1 pàgines no es poden}} moure:",
+ "replacetext_formovedpages": "Per a pàgines mogudes:",
+ "replacetext_savemovedpages": "Desa els títols vells com a redireccions a títols nous",
+ "replacetext_watchmovedpages": "Vigila aquestes pàgines",
+ "replacetext_invertselections": "Inverteix les seleccions",
+ "replacetext_replace": "Substitueix",
+ "replacetext_success": "\"$1\" serà substituït per \"$2\" en {{PLURAL:$3|una pàgina|$3 pàgines}}.",
+ "replacetext_noreplacement": "No s'ha trobat cap pàgina que contingui la cadena «$1».",
+ "replacetext_nomove": "No s'ha trobat cap pàgina que contingui el títol \"$1\".",
+ "replacetext_nosuchcategory": "No hi ha cap categoria de nom \"$1\".",
+ "replacetext_return": "Torna al formulari.",
+ "replacetext_warning": "'''Compte!:''' Hi ha {{PLURAL:$1|una pàgina que ja conté|$1 pàgines que ja contenen}} la cadena de reemplaçament, «$2». Si realitzeu aquesta substitució no podreu distingir els vostres reemplaçaments d'aquestes cadenes ja existents.",
+ "replacetext_blankwarning": "\"'Compte!:\"' Perquè la cadena de substitució és buida, aquesta operació no serà reversible.",
+ "replacetext_continue": "Continua",
+ "replacetext_editsummary": "Text de reemplaçament - \"$1\" a \"$2\"",
+ "right-replacetext": "Fer substitucions de cadena a tot el wiki",
+ "action-replacetext": "fer les substitucions de la cadena en tot el wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ce.json b/www/wiki/extensions/ReplaceText/i18n/ce.json
new file mode 100644
index 00000000..993b1648
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ce.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sasan700",
+ "Умар"
+ ]
+ },
+ "replacetext": "Хийца йоза",
+ "replacetext_originaltext": "ДӀадолалун йоза:",
+ "replacetext_optionalfilters": "Тlедожийна доцу литтарш:",
+ "replacetext_cannotmove": "{{PLURAL:$1|1=ТӀехьа йогӀу агӀона цӀе хуьйцийла дац|ТӀехьа йогӀу агӀонийн цӀерш хуьйцийла дац}}:",
+ "replacetext_invertselections": "Харжаран инверт йе",
+ "replacetext_replace": "Хийца",
+ "replacetext_continue": "Кхин дӀа"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/crh-cyrl.json b/www/wiki/extensions/ReplaceText/i18n/crh-cyrl.json
new file mode 100644
index 00000000..203aa181
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/crh-cyrl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Don Alessandro"
+ ]
+ },
+ "replacetext_cannotmove": "Ашагъыдаки {{PLURAL:$1|саифенинъ ады|саифелернинъ адлары}} денъиштирилип оламай:"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/crh-latn.json b/www/wiki/extensions/ReplaceText/i18n/crh-latn.json
new file mode 100644
index 00000000..09b2c0de
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/crh-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Don Alessandro"
+ ]
+ },
+ "replacetext_cannotmove": "Aşağıdaki {{PLURAL:$1|saifeniñ adı|saifelerniñ adları}} deñiştirilip olamay:"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/cs.json b/www/wiki/extensions/ReplaceText/i18n/cs.json
new file mode 100644
index 00000000..2ed6c086
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/cs.json
@@ -0,0 +1,49 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chmee2",
+ "Hypothalamus",
+ "Matěj Grabovský",
+ "Mormegil",
+ "Paxt",
+ "Vks",
+ "Ilimanaq29",
+ "Matěj Suchánek"
+ ]
+ },
+ "replacetext": "Nahradit text",
+ "replacetext-desc": "Poskytuje [[Special:ReplaceText|speciální stránku]], která správcům umožňuje globálně najít a nahradit nějaký text na všech obsahových stránkách wiki",
+ "replacetext_docu": "Chcete-li nahradit jeden textový řetězec jiným na všech standardních stránkách této wiki, zadejte sem oba řetězce a poté stiskněte „{{int:replacetext_continue}}“.\nBude vám zobrazen seznam stránek obsahujících hledaný text, kde si pak můžete vybrat ty, ve kterém chcete řetězce nahradit.\nVaše jméno se objeví v historii stránek jako {{GENDER:|uživatel, který změny provedl|uživatelka, která změny provedla}}.",
+ "replacetext_originaltext": "Původní text:",
+ "replacetext_replacementtext": "Nahradit textem:",
+ "replacetext_useregex": "Použít regulární výrazy",
+ "replacetext_regexdocu": "(Příklad: hodnoty „a(.*)c“ v „{{int:replacetext_originaltext}}“ a „ac$1“ v „{{int:replacetext_replacementtext}}“ by nahradily „abc“ za „acb“.)",
+ "replacetext_optionalfilters": "Volitelné filtry:",
+ "replacetext_categorysearch": "Nahradit pouze v kategorii:",
+ "replacetext_prefixsearch": "Nahradit pouze ve stránkách s předponou:",
+ "replacetext_editpages": "Nahradit text v obsahu stránky",
+ "replacetext_movepages": "Nahradit text v názvu stránky, pokud je to možné",
+ "replacetext_givetarget": "Musíte zadat řetězec, který má být nahrazen.",
+ "replacetext_nonamespace": "Musíte vybrat alespoň jeden jmenný prostor.",
+ "replacetext_editormove": "Musíte vybrat alespoň jednu z možností nahrazení.",
+ "replacetext_choosepagesforedit": "Nahradit „$1“ řetězcem „$2“ v textu {{PLURAL:$3|této stránky|těchto $3 stránek}}:",
+ "replacetext_choosepagesformove": "Nahradit „$1“ řetězcem „$2“ v {{PLURAL:$3|názvu následující stránky|názvech následujících $3 stránek}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|Následující stránku|Následující $1 stránky|Následujících $1 stránek}} nelze přesunout:",
+ "replacetext_formovedpages": "Pro přesunuté stránky:",
+ "replacetext_savemovedpages": "Zachovat staré názvy stránek jako přesměrování na nové názvy stránek",
+ "replacetext_watchmovedpages": "Sledovat tyto stránky",
+ "replacetext_invertselections": "Invertovat výběr",
+ "replacetext_replace": "Nahradit",
+ "replacetext_success": "Na {{PLURAL:$3|jedné stránce|$3 stránkách}} bude text „$1“ nahrazen textem „$2“.",
+ "replacetext_noreplacement": "Nebyly nalezeny žádné stránky, které by obsahovaly řetězec „$1“.",
+ "replacetext_nomove": "Nebyly nalezeny žádné stránky, jejichž název by obsahoval „$1“.",
+ "replacetext_nosuchcategory": "Neexistuje žádná kategorie s názvem „$1“.",
+ "replacetext_return": "Vrátit se na formulář.",
+ "replacetext_warning": "'''Upozornění:''' {{PLURAL:$1|Existuje jedna strana již obsahující|Existují $1 stránky již obsahující|Existuje $1 stránek již obsahujících}} náhradní řetězec „$2“. Pokud provedete toto nahrazení, nebudete moci rozlišit své náhradní řetězce od původních řetězců.",
+ "replacetext_blankwarning": "'''Upozornění:''' Protože náhradní řetězec je prázdný, tato operace nebude vratná.",
+ "replacetext_continue": "Pokračovat",
+ "replacetext_editsummary": "Nahrazení textu „$1“ textem „$2“",
+ "right-replacetext": "Hledání a nahrazování textu na celé wiki",
+ "action-replacetext": "nahrazovat text na celé wiki",
+ "replacetext_reminder": "Pokud také chcete na jiných stránkách upravit odkazy na tuto stránku, jděte na $1."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/cy.json b/www/wiki/extensions/ReplaceText/i18n/cy.json
new file mode 100644
index 00000000..e755c28c
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/cy.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lloffiwr"
+ ]
+ },
+ "replacetext": "Disodli testun",
+ "replacetext_originaltext": "Y testun gwreiddiol:",
+ "replacetext_replacementtext": "Y testun newydd:",
+ "replacetext_optionalfilters": "Hidlau dewisol:",
+ "replacetext_watchmovedpages": "Dilyn hynt y tudalennau hyn",
+ "replacetext_invertselections": "Gwrthdroi'r dewis",
+ "replacetext_replace": "Disodler",
+ "replacetext_success": "Caiff \"$1\" ei ddisodli gan \"$2\" mewn $3 {{PLURAL:$3||dudalen|dudalen|tudalen|thudalen|tudalen}}.",
+ "replacetext_noreplacement": "Ni chafwyd hyd i unrhyw dudalennau yn cynnwys y llinyn \"$1\".",
+ "replacetext_continue": "Parhau",
+ "replacetext_editsummary": "Disodli'r testun - \"$1\" i \"$2\""
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/de-formal.json b/www/wiki/extensions/ReplaceText/i18n/de-formal.json
new file mode 100644
index 00000000..f483e20e
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/de-formal.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Imre",
+ "Kghbln",
+ "Umherirrender"
+ ]
+ },
+ "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 „Fortfahren“-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“.\nSofern 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?"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/de.json b/www/wiki/extensions/ReplaceText/i18n/de.json
new file mode 100644
index 00000000..fa965654
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/de.json
@@ -0,0 +1,50 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kghbln",
+ "Leithian",
+ "Melancholie",
+ "Merlissimo",
+ "Metalhead64",
+ "Purodha",
+ "Raimond Spekking",
+ "Umherirrender"
+ ]
+ },
+ "replacetext": "Text ersetzen",
+ "replacetext-desc": "Ergänzt eine [[Special:ReplaceText|Spezialseite]], die das Suchen und Ersetzen von Zeichenketten ermöglicht",
+ "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 Schaltfläche „{{int:replacetext_continue}}“. 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": "Vorhandener Text:",
+ "replacetext_replacementtext": "Neuer Text:",
+ "replacetext_useregex": "Platzhalter und reguläre Ausdrücke verwenden",
+ "replacetext_regexdocu": "(Beispiel: Die Werte für „a(.*)c“ für „{{int:replacetext_originaltext}}“ und „ac$1“ für „{{int:replacetext_replacementtext}}“ 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:",
+ "replacetext_editpages": "Ersetze Text im Seiteninhalt",
+ "replacetext_movepages": "Ersetze Text auch in Seitentiteln (sofern möglich)",
+ "replacetext_givetarget": "Du musst eine Zeichenkette angeben, die ersetzt werden soll.",
+ "replacetext_nonamespace": "Mindestens ein Namensraum muss ausgewählt werden.",
+ "replacetext_editormove": "Du musst mindestens eine Ersetzungsoption wählen.",
+ "replacetext_choosepagesforedit": "Ersetzen von „$1“ durch „$2“ im Text der {{PLURAL:$3|Seite|Seiten}}:",
+ "replacetext_choosepagesformove": "Ersetze „$1“ durch „$2“ im Titel der folgenden {{PLURAL:$3|Seite|Seiten}}:",
+ "replacetext_cannotmove": "Die {{PLURAL:$1|folgende Seite kann|folgenden Seiten können}} nicht verschoben werden:",
+ "replacetext_formovedpages": "Für verschobene Seiten:",
+ "replacetext_savemovedpages": "Eine Weiterleitung für die verschobene Seite anlegen",
+ "replacetext_watchmovedpages": "Diese Seiten beobachten",
+ "replacetext_invertselections": "Auswahl umkehren",
+ "replacetext_replace": "Ersetzen",
+ "replacetext_success": "„$1“ wird durch „$2“ in $3 {{PLURAL:$3|Seite|Seiten}} ersetzt.",
+ "replacetext_noreplacement": "Es wurde keine Seite gefunden, die den Text „$1“ enthält.",
+ "replacetext_nomove": "Es wurde keine Seite gefunden, deren Titel den Text „$1“ enthält.",
+ "replacetext_nosuchcategory": "Es ist keine Kategorie namens „$1“ vorhanden.",
+ "replacetext_return": "Zurück zum Formular.",
+ "replacetext_warning": "'''Warnung:''' $1 {{PLURAL:$1|Seite enthält|Seiten enthalten}} bereits den zu ersetzenden Textteil „$2“.\nSofern 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_announce": "Diese Bearbeitungen über $1 und Beobachtungslisten ankündigen",
+ "replacetext_editsummary": "Textersetzung - „$1“ durch „$2“",
+ "right-replacetext": "Textersetzung für das gesamte Wiki durchführen",
+ "action-replacetext": "im gesamten Wiki Zeichenfolgeersetzungen durchzuführen",
+ "replacetext_reminder": "Um auch Links auf diese Seite in anderen Seiten zu verändern, gehe zu $1."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/diq.json b/www/wiki/extensions/ReplaceText/i18n/diq.json
new file mode 100644
index 00000000..8ee451f6
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/diq.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mirzali",
+ "Marmase"
+ ]
+ },
+ "replacetext_watchmovedpages": "Enê pelan seyr ke",
+ "replacetext_continue": "Dewam ke"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/dsb.json b/www/wiki/extensions/ReplaceText/i18n/dsb.json
new file mode 100644
index 00000000..cb0be336
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/dsb.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "replacetext": "Tekst wuměniś",
+ "replacetext-desc": "Staja [[Special:ReplaceText|specialny bok]] k dispoziciji, aby zmóžnił administratoram operaciju globalnego namakanja-wuměnjenja na wšych wopśimjeśowych bokach wikija pśewjasć",
+ "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 \"{{int:replacetext_continue}}\". 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 \"{{int:replacetext_originaltext}}\" a \"ac$1\" za \"{{int:replacetext_replacementtext}}\" 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:",
+ "replacetext_editpages": "Tekst w datajowem wopśimjeśu wuměniś",
+ "replacetext_movepages": "Tekst w bokowych titelach wuměniś, jolic móžno",
+ "replacetext_givetarget": "Musyš tekst pódaś, kótaryž ma se wuměniś.",
+ "replacetext_nonamespace": "Musyš nanejmjenjej jaden mjenjowy rum wubraś.",
+ "replacetext_editormove": "Musyš nanejmjenjej jadnu z wuměnjeńskich opcijow wubraś.",
+ "replacetext_choosepagesforedit": "Pšosym wubjeŕ {{PLURAL:$3|bok|boka|boki|boki}}, na {{PLURAL:$3|kótaremž|kótarymaž|kótarychž|kótarychž}} coš '$1' pśez '$2' wuměniś:",
+ "replacetext_choosepagesformove": "\"$1\" pśez \"$2\" w titelu {{PLURAL:$3|slědujucego boka|slědujuceju bokowu|slědujucych bokow|slědujucych bokow}} wuměniś:",
+ "replacetext_cannotmove": "{{PLURAL:$1|Slědujucy bok njedajo|Slědujucej boka njedajotej|Slědujuce boki njedaju|Slědujuce boki njedaju}} se pśesunuś:",
+ "replacetext_formovedpages": "Za pśesunjone boki:",
+ "replacetext_savemovedpages": "Stare titele ako dalejpósrědnjenja do nowych titelow składowaś",
+ "replacetext_watchmovedpages": "Toś te boki wobglědowaś",
+ "replacetext_invertselections": "Wuběrk pśewobrośiś",
+ "replacetext_replace": "Wuměniś",
+ "replacetext_success": "'$1' wuměnja se pśez '$2' na $3 {{PLURAL:$3|boku|bokoma|bokach|bokach}}.",
+ "replacetext_noreplacement": "Njejsu se namakali žedne boki, kótarež wopśimuju tekst '$1'.",
+ "replacetext_nomove": "Boki, kótarychž titel wopśimujo '$1', njejsu se namakali.",
+ "replacetext_nosuchcategory": "Kategorija z mjenim \"$1\" njeeksistěrujo.",
+ "replacetext_return": "Slědk k formularoju.",
+ "replacetext_warning": "'''Warnowanje:''' {{PLURAL:$1|Jo $1 bok, kótaryž južo wopśimujo|stej $1 boka, kótarejž južo wopśimujotej|su $1 boki, kótarež južo wopśimuju|jo $1 bokow, kótarež južo wopśimujo}} tekst, kótaryž ma se wuměniś, \"$2\".\nJolic 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_editsummary": "Wuměna teksta - \"$1\" do \"$2\"",
+ "right-replacetext": "Tekst na cełem wikiju wuměniś",
+ "action-replacetext": "Tekst na cełem wikiju wuměniś"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/el.json b/www/wiki/extensions/ReplaceText/i18n/el.json
new file mode 100644
index 00000000..00d1ce1f
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/el.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "Consta",
+ "Dada",
+ "Glavkos",
+ "Protnet",
+ "ZaDiak",
+ "Απεργός"
+ ]
+ },
+ "replacetext": "Αντικατάσταση κειμένου",
+ "replacetext-desc": "Παρέχει μια [[Special:ReplaceText|ειδική σελίδα]] που επιτρέπει σε διαχειριστές να κάνουν μια καθολική εύρεση και αντικατάσταση συμβολοσειράς σε όλες τις σελίδες περιεχομένου ενός wiki",
+ "replacetext_docu": "Για να αντικαταστήσετε μια συμβολοσειρά κειμένου με μια άλλη σε όλες τις κανονικές σελίδες αυτού του wiki, εισαγάγετε εδώ τα δύο κείμενα και μετά πατήστε «{{int:replacetext_continue}}».\nΘα εμφανιστεί τότε μια λίστα με σελίδες που περιέχουν το αναζητούμενο κείμενο και μπορείτε να επιλέξετε εκείνες στις οποίες θέλετε να το αντικαταστήσετε.\nΤο όνομά σας θα εμφανιστεί στο ιστορικό των σελίδων ως ο χρήστης που ευθύνεται για τις όποιες αλλαγές.",
+ "replacetext_originaltext": "Αρχικό κείμενο:",
+ "replacetext_replacementtext": "Κείμενο αντικατάστασης:",
+ "replacetext_useregex": "Χρήση κανονικών εκφράσεων",
+ "replacetext_regexdocu": "(Παράδειγμα: με τιμές «α(.*)γ» ως «{{int:replacetext_originaltext}}» και «αγ$1» ως «{{int:replacetext_replacementtext}}» θα αντικατασταθεί το «αβγ» με «αγβ»).",
+ "replacetext_optionalfilters": "Προαιρετικά φίλτρα:",
+ "replacetext_categorysearch": "Αντικατάσταση μόνο στην κατηγορία:",
+ "replacetext_prefixsearch": "Αντικατάσταση μόνο σε σελίδες με πρόθεμα:",
+ "replacetext_editpages": "Αντικατάσταση κειμένου στα περιεχόμενα σελίδας",
+ "replacetext_movepages": "Αντικατάσταση κειμένου σε τίτλους σελίδας, όταν είναι δυνατόν",
+ "replacetext_givetarget": "Πρέπει να καθορίσετε τη συμβολοσειρά προς αντικατάσταση.",
+ "replacetext_nonamespace": "Πρέπει να επιλέξετε τουλάχιστον έναν ονοματοχώρο.",
+ "replacetext_editormove": "Πρέπει να επιλέξετε τουλάχιστον μία από τις επιλογές αντικατάστασης.",
+ "replacetext_choosepagesforedit": "Αντικατάσταση «$1» με «$2» στο κείμενο {{PLURAL:$3|της ακόλουθης σελίδας|των ακόλουθων $3 σελίδων}}:",
+ "replacetext_choosepagesformove": "Αντικατάσταση «$1» με «$2» στον τίτλο {{PLURAL:$3|της ακόλουθης σελίδας|των ακόλουθων $3 σελίδων}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|Η ακόλουθη σελίδα|Οι ακόλουθες $1 σελίδες}} δεν είναι δυνατό να μετακινηθούν:",
+ "replacetext_formovedpages": "Για τις σελίδες που θα μετακινηθούν:",
+ "replacetext_savemovedpages": "Αποθήκευση των παλιών τίτλων ως ανακατευθύνσεις προς τους νέους τίτλους",
+ "replacetext_watchmovedpages": "Παρακολούθηση αυτών των σελίδων",
+ "replacetext_invertselections": "Αναστροφή επιλογών",
+ "replacetext_replace": "Αντικατάσταση",
+ "replacetext_success": "Το «$1» θα αντικατασταθεί από το «$2» σε {{PLURAL:$3|μία σελίδα|$3 σελίδες}}.",
+ "replacetext_noreplacement": "Δε βρέθηκαν σελίδες που να περιέχουν τη συμβολοσειρά «$1».",
+ "replacetext_nomove": "Δε βρέθηκαν σελίδες των οποίων ο τίτλος να περιέχει «$1».",
+ "replacetext_nosuchcategory": "Δεν υπάρχει κατηγορία με όνομα «$1».",
+ "replacetext_return": "Επιστροφή στη φόρμα.",
+ "replacetext_warning": "'''Προειδοποίηση:''' {{PLURAL:$1|Υπάρχει μια σελίδα που περιέχει|Υπάρχουν $1 σελίδες που περιέχουν}} ήδη την προς αντικατάσταση συμβολοσειρά, «$2». Αν κάνετε αυτήν την αντικατάσταση δεν θα είστε μετά σε θέση να ξεχωρίσετε το κείμενο που αντικαταστήσατε από αυτό που ήδη υπήρχε.",
+ "replacetext_blankwarning": "'''Προειδοποίηση:''' Επειδή η προς αντικατάσταση συμβολοσειρά είναι κενή, αυτή η εργασία δεν θα είναι αναστρέψιμη.",
+ "replacetext_continue": "Συνέχεια",
+ "replacetext_editsummary": "Αντικατάσταση κειμένου - «$1» σε «$2»",
+ "right-replacetext": "Να γίνουν αντικαταστάσεις συμβολοσειρών σε ολόκληρο το wiki",
+ "action-replacetext": "κάνετε αντικαταστάσεις συμβολοσειρών σε ολόκληρο το wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/en.json b/www/wiki/extensions/ReplaceText/i18n/en.json
new file mode 100644
index 00000000..deda578b
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/en.json
@@ -0,0 +1,43 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yaron Koren"
+ ]
+ },
+ "replacetext": "Replace text",
+ "replacetext-desc": "Provides a [[Special:ReplaceText|special page]] to allow administrators to do a global string find-and-replace on all the content pages of a wiki",
+ "replacetext_docu": "To replace one text string with another across all regular pages on this wiki, enter the two pieces of text here and then hit \"{{int:replacetext_continue}}\".\nYou will then be shown a list of pages that contain the search text, and you can choose the ones in which you want to replace it.\nYour 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 \"{{int:replacetext_originaltext}}\" and \"ac$1\" for \"{{int:replacetext_replacementtext}}\" would replace \"abc\" with \"acb\".)",
+ "replacetext_optionalfilters": "Optional filters:",
+ "replacetext_categorysearch": "Replace only in category:",
+ "replacetext_prefixsearch": "Replace only in pages with the prefix:",
+ "replacetext_editpages": "Replace text in page contents",
+ "replacetext_movepages": "Replace text in page titles, when possible",
+ "replacetext_givetarget": "You must specify the string to be replaced.",
+ "replacetext_nonamespace": "You must select at least one namespace.",
+ "replacetext_editormove": "You must select at least one of the replacement options.",
+ "replacetext_choosepagesforedit": "Replace \"$1\" with \"$2\" in the text of the following {{PLURAL:$3|page|$3 pages}}:",
+ "replacetext_choosepagesformove": "Replace \"$1\" with \"$2\" in the {{PLURAL:$3|title of the following page|titles of the following $3 pages}}:",
+ "replacetext_cannotmove": "The following {{PLURAL:$1|page|$1 pages}} cannot be moved:",
+ "replacetext_formovedpages": "For moved pages:",
+ "replacetext_savemovedpages": "Save the old titles as redirects to the new titles",
+ "replacetext_watchmovedpages": "Watch these pages",
+ "replacetext_invertselections": "Invert selections",
+ "replacetext_replace": "Replace",
+ "replacetext_success": "\"$1\" will be replaced with \"$2\" in {{PLURAL:$3|one page|$3 pages}}.",
+ "replacetext_noreplacement": "No pages were found containing the string \"$1\".",
+ "replacetext_nomove": "No pages were found whose title contains \"$1\".",
+ "replacetext_nosuchcategory": "No category exists with the name \"$1\".",
+ "replacetext_return": "Return to form.",
+ "replacetext_warning": "'''Warning:''' There {{PLURAL:$1|is one 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_announce": "Announce these edits via $1 and watchlists",
+ "replacetext_editsummary": "Text replacement - \"$1\" to \"$2\"",
+ "right-replacetext": "Make string replacements on the entire wiki",
+ "action-replacetext": "make string replacements on the entire wiki",
+ "replacetext_reminder": "To also modify links to this page in other pages, go to $1."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/eo.json b/www/wiki/extensions/ReplaceText/i18n/eo.json
new file mode 100644
index 00000000..e2ecb1c7
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/eo.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki",
+ "Yekrats"
+ ]
+ },
+ "replacetext": "Anstataŭigi tekston",
+ "replacetext_originaltext": "Originala teksto:",
+ "replacetext_replacementtext": "Anstataŭigita teksto:",
+ "replacetext_optionalfilters": "Nedevigaj filtriloj:",
+ "replacetext_categorysearch": "Anstataŭigi nur en kategorio:",
+ "replacetext_movepages": "Anstataŭigi tekston en paĝaj titoloj, kiam eble",
+ "replacetext_nonamespace": "Vi devas elekti almenaŭ unu nomspacon.",
+ "replacetext_watchmovedpages": "Atenti ĉi tiujn paĝojn",
+ "replacetext_invertselections": "Inversigi selektojn",
+ "replacetext_replace": "Anstataŭigi",
+ "replacetext_success": "\"$1\" estos anstataŭigita de \"$2\" en $3 {{PLURAL:$3|paĝo|paĝoj}}.",
+ "replacetext_noreplacement": "Neniuj paĝoj estis trovitaj enhavantaj la ĉenon '$1'.",
+ "replacetext_return": "Reiri al formularo.",
+ "replacetext_continue": "Reaktivigi",
+ "replacetext_editsummary": "Teksta anstataŭigo - '$1' al '$2'"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/es.json b/www/wiki/extensions/ReplaceText/i18n/es.json
new file mode 100644
index 00000000..a6ced236
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/es.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "Antur",
+ "Armando-Martin",
+ "Ciencia Al Poder",
+ "Crazymadlover",
+ "Dferg",
+ "Fitoschido",
+ "Imre",
+ "Locos epraix",
+ "MarcoAurelio",
+ "Pertile",
+ "Translationista",
+ "Macofe"
+ ]
+ },
+ "replacetext": "Reemplazar texto",
+ "replacetext-desc": "Provee a los administradores de una [[Special:ReplaceText|página especial]] para realizar una búsqueda y reemplazo global de una expresión en todas las páginas de una wiki.",
+ "replacetext_docu": "Para sustituir una cadena de texto con otra en todas las páginas de este wiki, escribe ambos textos aquí y haz clic en \"{{int:replacetext_continue}}\".\nA continuación verás un listado de páginas que contienen el texto de búsqueda, de los cuales podrás elegir aquellos en los que quieras cambiar el texto.\nTu nombre aparecerá como usuario responsable de los cambios en el historial de cada una de esas páginas.",
+ "replacetext_originaltext": "Texto original:",
+ "replacetext_replacementtext": "Texto de reemplazo:",
+ "replacetext_useregex": "Utilizar expresiones regulares",
+ "replacetext_regexdocu": "(Ejemplo: los valores \"a(.*)c\" para \"{{int:replacetext_originaltext}}\" y \"ac$1\" para \"{{int:replacetext_replacementtext}}\" cambiarán \"abc\" por \"acb\".)",
+ "replacetext_optionalfilters": "Filtros opcionales:",
+ "replacetext_categorysearch": "Reemplazar solo en la categoría:",
+ "replacetext_prefixsearch": "Reemplazar solo en las páginas con el prefijo:",
+ "replacetext_editpages": "Reemplazar texto en los contenidos de las páginas",
+ "replacetext_movepages": "Reemplazar texto en títulos de páginas, cuando sea posible",
+ "replacetext_givetarget": "Debes especificar la cadena de caracteres que reemplazar.",
+ "replacetext_nonamespace": "Debes seleccionar al menos un espacio de nombres.",
+ "replacetext_editormove": "Debes seleccionar al menos una de las opciones de reemplazo.",
+ "replacetext_choosepagesforedit": "Reemplazar «$1» por «$2» en {{PLURAL:$3|la página siguiente|las $3 páginas siguientes}}:",
+ "replacetext_choosepagesformove": "Reemplazar «$1» por «$2» en {{PLURAL:$3|el título de la página siguiente|los títulos de las $3 páginas siguientes}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|La siguiente página no puede|Las siguientes páginas no pueden}} trasladarse:",
+ "replacetext_formovedpages": "Para páginas trasladadas:",
+ "replacetext_savemovedpages": "Guardar los títulos antiguos como redirecciones a los títulos nuevos",
+ "replacetext_watchmovedpages": "Vigilar estas páginas",
+ "replacetext_invertselections": "Invertir selecciones",
+ "replacetext_replace": "Reemplazar",
+ "replacetext_success": "«$1» se reemplazará por «$2» en {{PLURAL:$3|una página|$3 páginas}}.",
+ "replacetext_noreplacement": "No se hallaron páginas que contengan la cadena de caracteres «$1».",
+ "replacetext_nomove": "No se hallaron páginas cuyos títulos contengan «$1».",
+ "replacetext_nosuchcategory": "No existen categorías con el nombre «$1».",
+ "replacetext_return": "Retornar al formulario.",
+ "replacetext_warning": "'''Advertencia:''' hay {{PLURAL:$1|una página que ya contiene|$1 páginas que ya contienen}} la cadena de sustitución, \"$2\". Si realizas esta sustitución, no podrás separar tus sustituciones de estas cadenas.",
+ "replacetext_blankwarning": "'''Advertencia:''' como la cadena de reemplazo está vacía, esta operación no podrá revertirse.",
+ "replacetext_continue": "Continuar",
+ "replacetext_announce": "Anunciar estas ediciones mediante $1 y las listas de seguimiento",
+ "replacetext_editsummary": "Texto reemplazado: «$1» por «$2»",
+ "right-replacetext": "Reemplazar cadenas de texto en todo el wiki",
+ "action-replacetext": "reemplazar cadenas de texto en todo el wiki",
+ "replacetext_reminder": "Para modificar también los enlaces a esta página en otras páginas por favor ve a $1."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/et.json b/www/wiki/extensions/ReplaceText/i18n/et.json
new file mode 100644
index 00000000..c62591c4
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/et.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Avjoska",
+ "Pikne"
+ ]
+ },
+ "replacetext": "Teksti asendamine",
+ "replacetext_originaltext": "Originaaltekst:",
+ "replacetext_replacementtext": "Asendustekst:",
+ "replacetext_replace": "Asenda"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/eu.json b/www/wiki/extensions/ReplaceText/i18n/eu.json
new file mode 100644
index 00000000..e65df8df
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/eu.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "An13sa",
+ "Kobazulo",
+ "Xabier Armendaritz",
+ "Sator"
+ ]
+ },
+ "replacetext": "Testua ordeztu",
+ "replacetext_originaltext": "Jatorrizko testua:",
+ "replacetext_movepages": "Posiblea denean, orrialdeen izenburuetan ere testua ordezkatu",
+ "replacetext_cannotmove": "Ondorengo {{PLURAL:$1|orri hau ezin da mugitu:|orri hauek ezin dira mugitu:}}",
+ "replacetext_watchmovedpages": "Orrialde hauek jarraitu",
+ "replacetext_invertselections": "Hautaketak alderantzikatu",
+ "replacetext_replace": "Ordeztu",
+ "replacetext_noreplacement": "Ez da aurkitu '$1' karaktere-katea duen orrialderik.",
+ "replacetext_continue": "Jarraitu",
+ "replacetext_editsummary": "Testu ordezkapena - '$1'(e)tik '$2'(e)ra."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/fa.json b/www/wiki/extensions/ReplaceText/i18n/fa.json
new file mode 100644
index 00000000..ff394191
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/fa.json
@@ -0,0 +1,47 @@
+{
+ "@metadata": {
+ "authors": [
+ "Armin1392",
+ "Ebraminio",
+ "Huji",
+ "Omidh",
+ "Reza1615",
+ "Wayiran",
+ "Alirezaaa"
+ ]
+ },
+ "replacetext": "جایگزینی متن",
+ "replacetext-desc": "یک [[Special:ReplaceText|صفحهٔ ویژه]] اضافه می‌کند که به مدیران اجازه می‌دهد یک جستجو و جایگزینی سراسری در تمام محتوای ویکی انجام دهند",
+ "replacetext_docu": "برای جایگزین کردن یک رشتهٔ متنی با رشته دیگر در کل داده‌های این ویکی، شما می‌توانید دو قسمت از متن را در زیر وارد کرده و دکمهٔ «ادامه» را بزنید. \nبه شما فهرستی از صفحاتی که دارای متن موردنظر هستند نشان داده می‌شود، و شما می‌توانید انتخاب کنید که می‌خواهید کدام صفحات جایگزین شوند.\nاسم شما در تاریخچهٔ صفحات به عنوان کاربری که مسئول این تغییرها است ثبت می‌شود.",
+ "replacetext_originaltext": "متن اصلی:",
+ "replacetext_replacementtext": "متن جایگزین:",
+ "replacetext_useregex": "استفاده از عبارت باقاعده",
+ "replacetext_regexdocu": "(مثال: مقادیر «a(.*)c» برای «{{int:replacetext_originaltext}}» و «ac$1» برای «{{int:replacetext_replacementtext}}»، «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 {{PLURAL:$3|صفحه|صفحه}} «$1» با «$2» جایگزین می‌شود.",
+ "replacetext_noreplacement": "جایگزینی انجام نشد؛ صفحه‌ای که حاوی '$1' باشد پیدا نشد.",
+ "replacetext_nomove": "صفحه‌ای پیدا نشد که عنوان آن «$1» را داشته باشد.",
+ "replacetext_nosuchcategory": "رده‌ای با نام «$1» وجود ندارد.",
+ "replacetext_return": "بازگشت به فرم.",
+ "replacetext_warning": "'''هشدار:''' در حال حاضر $1 صفحه وجود دارد که حاوی رشتهٔ جایگزینی «$2» {{PLURAL:$1|است|هستند}}. اگر شما این جایگزینی را انجام دهید، قادر نخواهید بود تا جایگزینی‌هایتان را از این رشته‌ها جدا کنید.",
+ "replacetext_blankwarning": "چون متن جایگزین خالی است، این عمل قابل بازگشت نخواهد بود؛ ادامه می‌دهید؟",
+ "replacetext_continue": "ادامه",
+ "replacetext_editsummary": "جایگزینی متن - '$1' به '$2'",
+ "right-replacetext": "انجام جایگزین کردن رشته در تمام ویکی",
+ "action-replacetext": "ساختن جایگزین کردن رشته در تمام ویکی"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/fi.json b/www/wiki/extensions/ReplaceText/i18n/fi.json
new file mode 100644
index 00000000..26e9af91
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/fi.json
@@ -0,0 +1,44 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cimon Avaro",
+ "Crt",
+ "Nike",
+ "Silvonen",
+ "Str4nd",
+ "Usp"
+ ]
+ },
+ "replacetext": "Korvaa teksti",
+ "replacetext-desc": "Lisää [[Special:ReplaceText|toimintosivun]], jonka kautta ylläpitäjät voivat etsiä ja korvata wikin sisältämää tekstiä",
+ "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:",
+ "replacetext_editpages": "Korvaa teksti sivujen sisällöstä",
+ "replacetext_movepages": "Korvaa teksti otsikoista, jos mahdollista",
+ "replacetext_givetarget": "Sinun tulee määrittää korvattava merkkijono.",
+ "replacetext_nonamespace": "Sinun täytyy valita vähintään yksi nimiavaruus.",
+ "replacetext_editormove": "Sinun on valittava vähintään yksi kohde, mistä etsitään.",
+ "replacetext_choosepagesforedit": "Korvaa teksti \"$1\" tekstillä \"$2\" {{PLURAL:$3|seuraavalta sivulta|seuraavilta sivuilta}}:",
+ "replacetext_choosepagesformove": "Korvaa teksti \"$1\" tekstillä \"$2\" {{PLURAL:$3|seuraavan sivun otsikossa|seuraavien sivujen otsikoissa}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|Seuraavaa sivua|Seuraavia sivuja}} ei voi siirtää:",
+ "replacetext_formovedpages": "Tee siirretyille sivuille:",
+ "replacetext_savemovedpages": "Tallenna vanhat sivujen otsikot ohjauksina uusiin sivuihin.",
+ "replacetext_watchmovedpages": "Tarkkaile näitä sivuja",
+ "replacetext_invertselections": "Käänteinen valinta",
+ "replacetext_replace": "Korvaa",
+ "replacetext_success": "\"$1\" korvataan tekstillä \"$2\" $3 {{PLURAL:$3|sivulla|sivulla}}.",
+ "replacetext_noreplacement": "Tekstin \"$1\" leipätekstissään sisältäviä sivuja ei löytynyt.",
+ "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”.\nKorvauksen 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”",
+ "right-replacetext": "Tehdä merkkijonojen korvauksia koko wikin laajuudella"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/fr.json b/www/wiki/extensions/ReplaceText/i18n/fr.json
new file mode 100644
index 00000000..c915c8db
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/fr.json
@@ -0,0 +1,53 @@
+{
+ "@metadata": {
+ "authors": [
+ "Crochet.david",
+ "Gomoko",
+ "Grondin",
+ "IAlex",
+ "McDutchie",
+ "Nicolas NALLET",
+ "Peter17",
+ "PieRRoMaN",
+ "Urhixidur",
+ "Verdy p",
+ "Zetud"
+ ]
+ },
+ "replacetext": "Remplacer le texte",
+ "replacetext-desc": "Fournit une page spéciale permettant aux administrateurs de remplacer des chaînes de caractères par d’autres sur l’ensemble du wiki",
+ "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}} ».\nUne liste des pages contenant le texte recherché apparaîtra et vous pourrez choisir celles que vous voulez modifier.\nVotre 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 « {{int:replacetext_originaltext}} » et « ac$1 » pour « {{int:replacetext_replacementtext}} » 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 :",
+ "replacetext_editpages": "Remplacer le texte dans le contenu dans la page",
+ "replacetext_movepages": "Remplacer le texte dans le titre des pages, si possible",
+ "replacetext_givetarget": "Vous devez spécifier la chaîne à remplacer.",
+ "replacetext_nonamespace": "Vous devez sélectionner au moins un espace de noms.",
+ "replacetext_editormove": "Vous devez choisir au moins une option de remplacement.",
+ "replacetext_choosepagesforedit": "Veuillez sélectionner {{PLURAL:$3|la pages|les pages}} dans {{PLURAL:$3|laquelle|lesquelles}} vous voulez remplacer « $1 » par « $2 » :",
+ "replacetext_choosepagesformove": "Remplacer « $1 » par « $2 » dans {{PLURAL:$3|le nom de la page suivante|les noms des pages suivantes}} :",
+ "replacetext_cannotmove": "{{PLURAL:$1|La page suivante n’a pas pu être renommée|Les pages suivantes n’ont pas pu être renommées}} :",
+ "replacetext_formovedpages": "Pour les pages renommées :",
+ "replacetext_savemovedpages": "Enregistrer les anciens titres comme redirections vers les nouveaux titres",
+ "replacetext_watchmovedpages": "Suivre ces pages",
+ "replacetext_invertselections": "Inverser les sélections",
+ "replacetext_replace": "Remplacer",
+ "replacetext_success": "« $1 » sera remplacé par « $2 » dans $3 fichier{{PLURAL:$3||s}}.",
+ "replacetext_noreplacement": "Aucun fichier contenant la chaîne « $1 » n’a été trouvé.",
+ "replacetext_nomove": "Aucune page n’a été trouvée dont le titre contient « $1 ».",
+ "replacetext_nosuchcategory": "Il n’existe pas de catégorie nommée « $1 ».",
+ "replacetext_return": "Revenir au formulaire.",
+ "replacetext_warning": "Il y a $1 fichier {{PLURAL:$1| qui contient|s qui contiennent}} déjà la chaîne de remplacement « $2 ».\nSi 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_announce": "Annoncer ces modifications via $1 et les listes de suivi",
+ "replacetext_editsummary": "Remplacement de texte — « $1 » par « $2 »",
+ "right-replacetext": "Faire des remplacements de texte dans tout le wiki",
+ "action-replacetext": "faire les remplacements de la chaîne dans tout le wiki",
+ "replacetext_reminder": "Pour modifier aussi les liens vers cette page dans d’autres pages, allez en $1."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/frp.json b/www/wiki/extensions/ReplaceText/i18n/frp.json
new file mode 100644
index 00000000..9d154e07
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/frp.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChrisPtDe"
+ ]
+ },
+ "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_categorysearch": "Remplaciér solament dedens la catègorie :",
+ "replacetext_prefixsearch": "Remplaciér solament dedens les pâges qu’ont lo prèfixo :",
+ "replacetext_editpages": "Remplaciér lo tèxto dedens lo contegnu de la pâge",
+ "replacetext_movepages": "Remplaciér lo tèxto dedens lo titre de les pâges, se possiblo",
+ "replacetext_givetarget": "Vos dête spècifiar la chêna a remplaciér.",
+ "replacetext_nonamespace": "Vos dête chouèsir u muens yon èspâço de noms.",
+ "replacetext_editormove": "Vos dête chouèsir u muens yon chouèx de remplacement.",
+ "replacetext_formovedpages": "Por les pâges renomâs :",
+ "replacetext_watchmovedpages": "Siuvre cetes pâges",
+ "replacetext_invertselections": "Envèrsar los chouèx",
+ "replacetext_replace": "Remplaciér",
+ "replacetext_return": "Tornar u formulèro.",
+ "replacetext_continue": "Continuar",
+ "replacetext_editsummary": "Remplacement du tèxto — « $1 » per « $2 »"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/gl.json b/www/wiki/extensions/ReplaceText/i18n/gl.json
new file mode 100644
index 00000000..f7644750
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/gl.json
@@ -0,0 +1,42 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hamilton Abreu",
+ "Toliño"
+ ]
+ },
+ "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, insira aquí as dúas pezas de texto e logo prema en \"{{int:replacetext_continue}}\".\nDespois mostraráselle unha lista das páxinas que conteñen o texto buscado e poderá elixir en cales quere substituílo.\nO 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": "(Exemplo: Os valores \"a(.*)c\" en \"{{int:replacetext_originaltext}}\" e \"ac$1\" en \"{{int:replacetext_replacementtext}}\" han substituír \"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:",
+ "replacetext_editpages": "Substituír o texto nos contidos da páxina",
+ "replacetext_movepages": "Substituír o texto nos títulos das páxinas, cando sexa posible",
+ "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": "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:",
+ "replacetext_savemovedpages": "Gardar os títulos vellos como redireccións cara aos títulos novos",
+ "replacetext_watchmovedpages": "Vixíe estas páxinas",
+ "replacetext_invertselections": "Inverter as seleccións",
+ "replacetext_replace": "Substituír",
+ "replacetext_success": "\"$1\" será substituído por \"$2\" {{PLURAL:$3|nunha páxina|en $3 páxinas}}.",
+ "replacetext_noreplacement": "Non foi atopada ningunha páxina que contivese a cadea '$1'.",
+ "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": "'''Atención:''' Debido a que a cadea de substitución está baleira, esta operación non será reversible.",
+ "replacetext_continue": "Continuar",
+ "replacetext_editsummary": "Substitución de texto: \"$1\" por \"$2\"",
+ "right-replacetext": "Facer substitucións de texto en todo o wiki",
+ "action-replacetext": "facer substitucións de texto en todo o wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/grc.json b/www/wiki/extensions/ReplaceText/i18n/grc.json
new file mode 100644
index 00000000..eebc8012
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/grc.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Crazymadlover",
+ "Omnipaedista"
+ ]
+ },
+ "replacetext": "Ἀντικαθιστάναι κείμενον",
+ "replacetext_originaltext": "Πρωτότυπον κείμενον:",
+ "replacetext_replacementtext": "Κείμενον ἀντικαταστάσεως:",
+ "replacetext_formovedpages": "Περὶ μετακεκινημένων δέλτων:",
+ "replacetext_watchmovedpages": "Ἐφορᾶν τάσδε τὰς δέλτους",
+ "replacetext_replace": "Ἀντικαθιστάναι",
+ "replacetext_return": "Ἐπανιέναι εἰς τὸν τύπον.",
+ "replacetext_continue": "Συνεχίζειν"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/gsw.json b/www/wiki/extensions/ReplaceText/i18n/gsw.json
new file mode 100644
index 00000000..26a89e8d
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/gsw.json
@@ -0,0 +1,40 @@
+{
+ "@metadata": {
+ "authors": [
+ "Als-Holder"
+ ]
+ },
+ "replacetext": "Täxt ersetze",
+ "replacetext-desc": "Ergänzt e [[Special:ReplaceText|Spezialsyte]], wu s Ammanne megli macht, e wältwyti Täxt-suechen-un-ersetze-Operation in allene Inhaltsyte vum Wiki durzfiere",
+ "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:",
+ "replacetext_editpages": "Täxt im Syteinhalt ersetze",
+ "replacetext_movepages": "Ersetz Täxt au in Sytetitel, wänn s goht",
+ "replacetext_givetarget": "Du muesch d Zeichechette spezifiziere, wu soll ersetzt wäre.",
+ "replacetext_nonamespace": "Zmindescht ei Namensruum muess uusgwehlt wäre.",
+ "replacetext_editormove": "Du muesch zmindescht eini vu dr Ersetzigsoptione uuswehle.",
+ "replacetext_choosepagesforedit": "Bitte d {{PLURAL:$3|Syten|Syten}} uuswehle, wu Du „$1“ dur „$2“ wetsch ersetzen:",
+ "replacetext_choosepagesformove": "Ersetz „$1“ dur „$2“ {{PLURAL:$3|im Name vu däre Syte|in dr Näme vu däne Syte}}:",
+ "replacetext_cannotmove": "Die {{PLURAL:$1|Syte cha|Syte chenne}} nit verschobe wäre:",
+ "replacetext_formovedpages": "Fir verschobeni Syte:",
+ "replacetext_savemovedpages": "Di alte Sytenäme as Wyterleitig zue dr neje Sytenäme spychere",
+ "replacetext_watchmovedpages": "Die Syte beobachte",
+ "replacetext_invertselections": "Uuswahl umchehre",
+ "replacetext_replace": "Ersetze",
+ "replacetext_success": "„$1“ wird dur „$2“ in $3 {{PLURAL:$3|Syten|Syten}} ersetzt.",
+ "replacetext_noreplacement": "S isch kei Syte gfunde wore, wu s dr Täxt „$1“ din het.",
+ "replacetext_nomove": "S sin kei Syte gfunde wore, wu '$1' im Titel hän",
+ "replacetext_nosuchcategory": "S git kei Kategorii mit em Name „$1“.",
+ "replacetext_return": "Zrugg zum Formular.",
+ "replacetext_warning": "'''Warnig:''' In $1 {{PLURAL:$1|Syte het s|Seite het s}} dr Täxtteil „$2“, wu ersetzt soll wäre, scho.\nE 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_editsummary": "Täxtersetzig - „$1“ dur „$2“",
+ "right-replacetext": "Mach e Täxtersetzig fir s gsamt Wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/he.json b/www/wiki/extensions/ReplaceText/i18n/he.json
new file mode 100644
index 00000000..7be6926d
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/he.json
@@ -0,0 +1,44 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Rotemliss",
+ "YaronSh",
+ "Guycn2"
+ ]
+ },
+ "replacetext": "החלפת טקסט",
+ "replacetext-desc": "אספקת [[Special:ReplaceText|דף מיוחד]] כדי לאפשר למפעילים לבצע חיפוש והחלפה של מחרוזות בכל דפי התוכן בוויקי",
+ "replacetext_docu": "כדי להחליף מחרוזת טקסט אחת באחרת בכל הדפים הרגילים בוויקי זה, הזינו את הטקסט בשני חלקים ולחצו על \"{{int:replacetext_continue}}\". אז תוצג בפניכם רשימת דפים המכילים את הטקסט שחיפשתם, ותוכלו לבחור את הדפים שבהם תרצו להחליף את הטקסט האמור. שמכם יופיע בהיסטוריית הגרסאות של כל דף בתור המשתמש האחראי לשינויים שנעשו.",
+ "replacetext_originaltext": "הטקסט המקורי:",
+ "replacetext_replacementtext": "טקסט ההחלפה:",
+ "replacetext_useregex": "להשתמש בביטויים רגולריים",
+ "replacetext_regexdocu": "(דוגמה: ערכים של \"a(.*)c\" עבור \"{{int:replacetext_originaltext}}\" ושל \"ac$1\" עבור \"{{int:replacetext_replacementtext}}\" יחליפו \"abc\" ב־\"acb\".)",
+ "replacetext_optionalfilters": "מסננים אופציונליים:",
+ "replacetext_categorysearch": "החלפה רק בקטגוריה:",
+ "replacetext_prefixsearch": "החלפה רק בדפים בעלי הקידומת:",
+ "replacetext_editpages": "החלפת טקסט בתוכן הדפים",
+ "replacetext_movepages": "החלפת טקסט בכותרות הדפים, כשניתן",
+ "replacetext_givetarget": "יש לציין את המחרוזת שתוחלף.",
+ "replacetext_nonamespace": "יש לבחור מרחב שם אחד לפחות.",
+ "replacetext_editormove": "יש לבחור לפחות באחת מאפשרויות ההחלפה.",
+ "replacetext_choosepagesforedit": "אנא בחרו את {{PLURAL:$3|הדף בו|הדפים בהם}} ברצונכם להחליף את '$1' ב־'$2':",
+ "replacetext_choosepagesformove": "החלפת \"$1\" ב־\"$2\" ב{{PLURAL:$3|שם הדף הבא|שמות הדפים הבאים}}:",
+ "replacetext_cannotmove": "לא ניתן להעביר את {{PLURAL:$1|הדף הבא|הדפים הבאים}}:",
+ "replacetext_formovedpages": "עבור דפים שיועברו:",
+ "replacetext_savemovedpages": "שמירת שמות הדפים הישנים כהפניות לשמות הדפים החדשים",
+ "replacetext_watchmovedpages": "מעקב אחר דפים אלה",
+ "replacetext_invertselections": "הפיכת הבחירות",
+ "replacetext_replace": "החלפה",
+ "replacetext_success": "'$1' יוחלף ב־'$2' ב־{{PLURAL:$3|דף אחד|$3 דפים}}.",
+ "replacetext_noreplacement": "לא נמצאו דפים המכילים את המחרוזת '$1'.",
+ "replacetext_nomove": "לא נמצאו דפים ששמם מכיל '$1'.",
+ "replacetext_nosuchcategory": "לא קיימת קטגוריה בשם \"$1\".",
+ "replacetext_return": "חזרה לטופס.",
+ "replacetext_warning": "'''אזהרה''': {{PLURAL:$1|ישנו עמוד אחד שכבר מכיל|ישנם $1 עמודים שכבר מכילים}} את מחרוזת ההחלפה, \"$2\". אם החלפה זו תבוצע לא תהיה באפשרותך להפריד את החלפותיך מ{{PLURAL:$1|מחרוזת זו|מחרוזות אלו}}.",
+ "replacetext_blankwarning": "כיוון שמחרוזת ההחלפה ריקה, לא ניתן יהיה לבטל פעולה זו; להמשיך?",
+ "replacetext_continue": "המשך",
+ "replacetext_editsummary": "החלפת טקסט – \"$1\" ב־\"$2\"",
+ "right-replacetext": "ביצוע החלפת מחרוזות באתר הוויקי כולו",
+ "action-replacetext": "לבצע החלפת מחרוזות באתר הוויקי כולו"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/hr.json b/www/wiki/extensions/ReplaceText/i18n/hr.json
new file mode 100644
index 00000000..072ca9c5
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/hr.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bugoslav",
+ "Dalibor Bosits",
+ "Ex13",
+ "Herr Mlinka",
+ "MaGa"
+ ]
+ },
+ "replacetext": "Zamijeni tekst",
+ "replacetext-desc": "Dodaje [[Special:ReplaceText|posebnu stranicu]] koja omogućava administratorima globalnu zamjenu teksta na principu nađi-zamjeni na svim stranicama wikija.",
+ "replacetext_docu": "Za zamjenu jednog teksta s drugim na svim stranicama wikija, upišite ciljani i zamjenski tekst ovdje i pritisnite 'Dalje'. Pokazati će vam se popis stranica koje sadrže ciljani tekst, i moći ćete odabrati u kojima od njih želite izvršiti zamjenu. Vaše ime će se pojaviti u povijesti stranice kao suradnik odgovoran za promjenu.",
+ "replacetext_originaltext": "Izvorni tekst:",
+ "replacetext_replacementtext": "Zamjenski tekst:",
+ "replacetext_movepages": "Zamijeni tekst u naslovima stranica, ako je moguće",
+ "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": "Obrni odabir",
+ "replacetext_replace": "Zamijeni",
+ "replacetext_success": "'$1' će biti zamijenjen za '$2' na $3 {{PLURAL:$3|stranici|stranice|stranica}}.",
+ "replacetext_noreplacement": "Nije pronađena ni jedna stranica koja sadrži '$1'.",
+ "replacetext_warning": "Postoji {{PLURAL:$1|$1 stranica koja već sadrži|$1 stranica koje već sadrže}} zamjenski tekst, '$2'. \nAko 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_editsummary": "Zamjena teksta - '$1' u '$2'"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/hsb.json b/www/wiki/extensions/ReplaceText/i18n/hsb.json
new file mode 100644
index 00000000..425d930f
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/hsb.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "replacetext": "Tekst narunać",
+ "replacetext-desc": "Staji [[Special:ReplaceText|specialnu stronu]] k dispoziciji, kotraž administratoram zmóžnja, globalne pytanje a narunanje teksta na wšěch wobsahowych stronach wikija přewjesć",
+ "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 \"{{int:replacetext_continue}}\". Budźeš potom lisćinu stronow widźeć, kotrež pytany tekst wobsahuja a móžeš te 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 \"{{int:replacetext_originaltext}}\"a \"ac$1\" za \"{{int:replacetext_replacementtext}}\" 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:",
+ "replacetext_editpages": "Tekst we wobsahu strony narunać",
+ "replacetext_movepages": "Tekst w titulach stronow narunać, jeli móžno",
+ "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": "\"$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:",
+ "replacetext_savemovedpages": "Stare titule jako daleposrědkowanja do nowych titulow składować",
+ "replacetext_watchmovedpages": "Tute strony wobkedźbować",
+ "replacetext_invertselections": "Wuběry wobroćić",
+ "replacetext_replace": "Narunać",
+ "replacetext_success": "'$1' so w $3 {{PLURAL:$3|stronje|stronomaj|stronach|stronach}} přez '$2' naruna.",
+ "replacetext_noreplacement": "Njejsu so žane strony namakali, kotrež wuraz '$1' wobsahuja.",
+ "replacetext_nomove": "Strony, kotrychž titul '$1' wobsahuje, njebuchu namakane.",
+ "replacetext_nosuchcategory": "Kategorija z mjenom \"$1\" njeeksistuje.",
+ "replacetext_return": "Wróćo k formularej",
+ "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_editsummary": "Tekstowe narunanje - \"$1\" do \"$2\"",
+ "right-replacetext": "Tekstowe narunanja na cyłym wikiju činić",
+ "action-replacetext": "Tekstowe narunanja na cyłym wikiju činić"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/hu.json b/www/wiki/extensions/ReplaceText/i18n/hu.json
new file mode 100644
index 00000000..6cab29d4
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/hu.json
@@ -0,0 +1,42 @@
+{
+ "@metadata": {
+ "authors": [
+ "Glanthor Reviol",
+ "Tacsipacsi"
+ ]
+ },
+ "replacetext": "Szöveg cseréje",
+ "replacetext-desc": "[[Special:ReplaceText|Speciális lap]] adminisztrátorok részére szövegek globális keresés-és-cseréjére a wiki összes tartalom oldalán",
+ "replacetext_docu": "Hogy lecserélj egy szöveget egy másikra az összes rendes lapon a wikin, add meg a keresendő és a cél szöveget, majd kattints a „{{int:replacetext_continue}}” gombra.\nEzután kapsz egy listát azokról a lapokról, amelyek tartalmazzák a cserélendő szöveget, és kiválaszthatod azokat, amelyekben végre szeretnéd hajtani a cserét.\nA neved szerepelni fog a laptörténetekben a változtatásokért felelős felhasználóként.",
+ "replacetext_originaltext": "Eredeti szöveg:",
+ "replacetext_replacementtext": "Új szöveg:",
+ "replacetext_useregex": "Reguláris kifejezések használata",
+ "replacetext_regexdocu": "(Például: ha az „{{int:replacetext_originaltext}}” mezőbe „a(.*)c”-t írsz, az „{{int:replacetext_replacementtext}}” mezőbe pedig „ac$1”-t, az „abc” szöveget „acb”-re cseréli.)",
+ "replacetext_optionalfilters": "Választható szűrők:",
+ "replacetext_categorysearch": "Csere csak ebben a kategóriában:",
+ "replacetext_prefixsearch": "Csere csak a következő előtaggal rendelkező lapokon:",
+ "replacetext_editpages": "Szöveg cseréje a lap tartalmában",
+ "replacetext_movepages": "Szöveg cseréje a lapok címeiben, ha lehetséges",
+ "replacetext_givetarget": "Meg kell adnod a cserélendő szöveget.",
+ "replacetext_nonamespace": "Ki kell választanod legalább egy névteret.",
+ "replacetext_editormove": "Ki kell választanod legalább egyet a csere lehetőségek közül.",
+ "replacetext_choosepagesforedit": "„$1” cseréje „$2” kifejezésre a következő {{PLURAL:$3|lap|lapok}} szövegében:",
+ "replacetext_choosepagesformove": "„$1” cseréje „$2” kifejezésre a következő {{PLURAL:$3|lap címében|lapok címeiben}}:",
+ "replacetext_cannotmove": "A következő {{PLURAL:$1|lap|lapok}} nem nevezhetőek át:",
+ "replacetext_formovedpages": "Az átnevezett lapokhoz:",
+ "replacetext_savemovedpages": "A régi címek megtartása átirányításként az új címekre",
+ "replacetext_watchmovedpages": "Figyeld ezeket a lapokat",
+ "replacetext_invertselections": "Kijelölések megfordítása",
+ "replacetext_replace": "Csere",
+ "replacetext_success": "„$1” cseréje $3 lapon erre: „$2”.",
+ "replacetext_noreplacement": "Egy lap sem tartalmazza a(z) „$1” szöveget.",
+ "replacetext_nomove": "Nem található olyan lap, melynek címe tartalmazza a(z) „$1” keresőkifejezést.",
+ "replacetext_nosuchcategory": "Nincs „$1” nevű kategória.",
+ "replacetext_return": "Visszatérés az űrlapra.",
+ "replacetext_warning": "'''Figyelem:''' {{PLURAL:$1|egy|$1}} lap már tartalmazza a szöveget, amire cserélni szeretnél („$2”). Ha végrehajtod a cserét, utólag nem fogod tudni megkülönböztetni az újonnan bekerült szövegeket a már előtte is meglevő előfordulásoktól.",
+ "replacetext_blankwarning": "Mivel az új szöveg üres, ez a művelet nem lesz visszavonható.\nBiztosan folytatni szeretnéd?",
+ "replacetext_continue": "Folytatás",
+ "replacetext_editsummary": "Szövegcsere – „$1” → „$2”",
+ "right-replacetext": "szövegcserék végrehajtása az egész wikin",
+ "action-replacetext": "szövegcsere az egész wikiben"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ia.json b/www/wiki/extensions/ReplaceText/i18n/ia.json
new file mode 100644
index 00000000..cadcf128
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ia.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "replacetext": "Reimplaciar texto",
+ "replacetext-desc": "Forni un [[Special:ReplaceText|pagina special]] que permitte al administratores cercar e reimplaciar globalmente un catena de characteres in tote le paginas de contento de un wiki",
+ "replacetext_docu": "Pro reimplaciar un catena de characteres per un altere in tote le paginas regular in iste wiki, entra le duo pecias de texto hic e clicca super \"{{int:replacetext_continue}}\".\nPostea apparera un lista de paginas que contine le texto cercate, e tu potera seliger le paginas in le quales tu vole reimplaciar lo.\nTu nomine figurara in le historias del paginas como le usator responsabile de eventual modificationes.",
+ "replacetext_originaltext": "Texto original:",
+ "replacetext_replacementtext": "Texto de substitution:",
+ "replacetext_useregex": "Usar expressiones regular",
+ "replacetext_regexdocu": "(Exemplo: valores de \"a(.*)c\" pro \"{{int:replacetext_originaltext}}\" e \"ac$1\" pro \"{{int:replacetext_replacementtext}}\" reimplaciarea \"abc\" per \"acb\".)",
+ "replacetext_optionalfilters": "Filtros optional:",
+ "replacetext_categorysearch": "Reimplaciar solmente in le categoria:",
+ "replacetext_prefixsearch": "Reimplaciar solmente in paginas con le prefixo:",
+ "replacetext_editpages": "Reimplaciar texto in contento de pagina",
+ "replacetext_movepages": "Reimplaciar texto in titulos de paginas, quando possibile",
+ "replacetext_givetarget": "Tu debe specificar le texto a esser reimplaciate.",
+ "replacetext_nonamespace": "Tu debe seliger al minus un spatio de nomines.",
+ "replacetext_editormove": "Tu debe seliger al minus un del optiones de reimplaciamento.",
+ "replacetext_choosepagesforedit": "Per favor selige le {{PLURAL:$3|pagina in le qual|paginas in le quales}} tu vole reimplaciar '$1' per '$2':",
+ "replacetext_choosepagesformove": "Reimplaciar \"$1\" per \"$2\" in le {{PLURAL:$3|titulo del sequente pagina|titulos del sequente paginas}}:",
+ "replacetext_cannotmove": "Le sequente {{PLURAL:$1|pagina|paginas}} non pote esser renominate:",
+ "replacetext_formovedpages": "Pro pagina renominate:",
+ "replacetext_savemovedpages": "Preservar le ancian titulos como redirectiones verso le nove titulos",
+ "replacetext_watchmovedpages": "Observar iste paginas",
+ "replacetext_invertselections": "Inverter selectiones",
+ "replacetext_replace": "Reimplaciar",
+ "replacetext_success": "'$1' essera reimplaciate per '$2' in $3 {{PLURAL:$3|pagina|paginas}}.",
+ "replacetext_noreplacement": "Nulle pagina esseva trovate que contine le catena de characteres '$1'.",
+ "replacetext_nomove": "Nulle pagina esseva trovate con un titulo que contine '$1'.",
+ "replacetext_nosuchcategory": "Nulle categoria existe con le nomine '$1'.",
+ "replacetext_return": "Retornar al formulario.",
+ "replacetext_warning": "'''Attention:''' Il ha $1 {{PLURAL:$1|pagina|paginas}} que contine ja le nove texto, \"$2\".\nSi 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_editsummary": "Substitution de texto – \"$1\" per \"$2\"",
+ "right-replacetext": "Reimplaciar catenas de texto in tote le wiki",
+ "action-replacetext": "reimplaciar catenas de texto in tote le wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/id.json b/www/wiki/extensions/ReplaceText/i18n/id.json
new file mode 100644
index 00000000..d3effe62
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/id.json
@@ -0,0 +1,43 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bennylin",
+ "Farras",
+ "IvanLanin",
+ "Rex"
+ ]
+ },
+ "replacetext": "Mengganti teks",
+ "replacetext-desc": "Menyediakan [[Special:ReplaceText|halaman istimewa]] untuk memungkinkan pengurus untuk melakukan pencarian-dan-penggantian untaian secara global pada semua halaman isi dari suatu wiki",
+ "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:",
+ "replacetext_editpages": "Ganti teks pada isi halaman",
+ "replacetext_movepages": "Ganti teks pada judul halaman, jika mungkin",
+ "replacetext_givetarget": "Anda harus menyebutkan untaian yang akan diganti.",
+ "replacetext_nonamespace": "Anda harus memilih paling tidak satu ruang nama.",
+ "replacetext_editormove": "Anda harus memilih paling tidak salah satu opsi penggantian.",
+ "replacetext_choosepagesforedit": "Ganti \"$1\" dengan \"$2\" pada teks dari {{PLURAL:$3|halaman|halaman}} berikut:",
+ "replacetext_choosepagesformove": "Ganti \"$1\" dengan \"$2\" pada {{PLURAL:$3|judul halaman berikut|judul halaman berikut}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|Halaman|Halaman}} berikut tidak dapat dipindahkan:",
+ "replacetext_formovedpages": "Untuk halaman yang dipindahkan:",
+ "replacetext_savemovedpages": "Simpan judul lama sebagai pengalihan ke judul baru",
+ "replacetext_watchmovedpages": "Pantau halaman-halaman ini",
+ "replacetext_invertselections": "Balikkan pilihan",
+ "replacetext_replace": "Gantikan",
+ "replacetext_success": "\"$1\" akan diganti dengan \"$2\" pada $3 {{PLURAL:$3|halaman|halaman}}.",
+ "replacetext_noreplacement": "Tidak ada halaman yang ditemukan yang mengandung untaian \"$1\".",
+ "replacetext_nomove": "Tidak ada halaman yang ditemukan yang judulnya mengandung \"$1\".",
+ "replacetext_nosuchcategory": "Tidak ditemukan kategori bernama \"$1\".",
+ "replacetext_return": "Kembali ke isian.",
+ "replacetext_warning": "Ada {{PLURAL:$1|$1 halaman|$1 halaman}} yang telah berisi untaian pengganti, \"$2\". Jika Anda melakukan penggantian ini Anda tidak akan dapat memisahkan pengganti Anda dari untaian ini.",
+ "replacetext_blankwarning": "Karena untaian pengganti kosong, operasi ini tidak dapat dikembalikan.\nApakah ingin dilanjutkan?",
+ "replacetext_continue": "Lanjutkan",
+ "replacetext_editsummary": "Penggantian teks - \"$1\" menjadi \"$2\"",
+ "right-replacetext": "Melakukan penggantian seluruh teks kalimat di wiki ini"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ig.json b/www/wiki/extensions/ReplaceText/i18n/ig.json
new file mode 100644
index 00000000..7c1bab2d
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ig.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ukabia"
+ ]
+ },
+ "replacetext_originaltext": "Mkpụrụ nke mbu:",
+ "replacetext_replace": "Kwụchí na élú"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/it.json b/www/wiki/extensions/ReplaceText/i18n/it.json
new file mode 100644
index 00000000..5bab2181
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/it.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beta16",
+ "Civvì",
+ "Darth Kule",
+ "Marco 27",
+ "Malore",
+ "Nemo bis"
+ ]
+ },
+ "replacetext": "Sostituzione testo",
+ "replacetext-desc": "Fornisce una [[Special:ReplaceText|pagina speciale]] per permettere agli amministratori di effettuare una ricerca e sostituzione globale di testo su tutte le pagine di contenuto di un sito",
+ "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 \"{{int:replacetext_continue}}\". 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:",
+ "replacetext_editpages": "Sostituire il testo nel contenuto delle pagine",
+ "replacetext_movepages": "Sostituisci il testo nei titoli delle pagine, quando possibile",
+ "replacetext_givetarget": "È necessario specificare il testo da sostituire.",
+ "replacetext_nonamespace": "È necessario selezionare almeno un namespace",
+ "replacetext_editormove": "È necessario selezionare almeno una delle opzioni di sostituzione.",
+ "replacetext_choosepagesforedit": "Selezionare {{PLURAL:$3|la pagina per la quale|le pagine per le quali}} si desidera sostituire '$1' con '$2':",
+ "replacetext_choosepagesformove": "Sostituire \"$1\" con \"$2\" {{PLURAL:$3|nel titolo della pagina seguente|nei titoli delle pagine seguenti}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|La pagina seguente non può essere spostata|Le pagine seguenti non possono essere spostate}}:",
+ "replacetext_formovedpages": "Per le pagine spostate:",
+ "replacetext_savemovedpages": "Conservare i vecchi titoli come redirect al nuovo titolo:",
+ "replacetext_watchmovedpages": "Aggiungi agli osservati speciali",
+ "replacetext_invertselections": "Inverti selezione",
+ "replacetext_replace": "Sostituisci",
+ "replacetext_success": "'$1' sarà sostituito con '$2' in $3 {{PLURAL:$3|pagina|pagine}}.",
+ "replacetext_noreplacement": "Non sono state trovate pagine contenenti il testo '$1'.",
+ "replacetext_nomove": "Non sono state trovate pagine il cui titolo contiene '$1'.",
+ "replacetext_nosuchcategory": "Non esiste categoria con il nome \"$1\".",
+ "replacetext_return": "Torna al modulo.",
+ "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_editsummary": "Sostituzione testo - \"$1\" con \"$2\"",
+ "right-replacetext": "Esegue sostituzioni di testo in tutto il sito",
+ "action-replacetext": "eseguire sostituzioni di testo in tutto il sito"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ja.json b/www/wiki/extensions/ReplaceText/i18n/ja.json
new file mode 100644
index 00000000..293e1b6d
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ja.json
@@ -0,0 +1,45 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aotake",
+ "Fryed-peach",
+ "Schu",
+ "Shirayuki",
+ "青子守歌"
+ ]
+ },
+ "replacetext": "文字列の置換",
+ "replacetext-desc": "管理者がウィキ内の全記事で、ある文字列に一致する部分すべてを置換できるようにする[[Special:ReplaceText|特別ページ]]を提供する",
+ "replacetext_docu": "このウィキ上のすべての標準ページについて、ある文字列を別の文字列に置換するには、2 つの文字列をここに入力して「{{int:replacetext_continue}}」を押します。\n検索した文字列を含むページが列挙されますので、置換したいページを選択してください。\n置換すると、その編集を担当した利用者としてあなたの名前が、ページ履歴に表示されます。",
+ "replacetext_originaltext": "置換前の文字列:",
+ "replacetext_replacementtext": "置換後の文字列:",
+ "replacetext_useregex": "正規表現を使用",
+ "replacetext_regexdocu": "(例: 「{{int:replacetext_originaltext}}」の値が「a(.*)c」、「{{int:replacetext_replacementtext}}」の値が「ac$1」の場合、「abc」を「acb」に置換します。)",
+ "replacetext_optionalfilters": "追加のフィルター (任意):",
+ "replacetext_categorysearch": "以下のカテゴリにあるもののみを置換:",
+ "replacetext_prefixsearch": "以下の文字列から始まるページ内のもののみを置換:",
+ "replacetext_editpages": "ページ本文中の文字列を置換",
+ "replacetext_movepages": "可能ならば、ページ名中の文字列を置換する",
+ "replacetext_givetarget": "置換される対象となる文字列を指定する必要があります。",
+ "replacetext_nonamespace": "名前空間を少なくとも1つ選択する必要があります。",
+ "replacetext_editormove": "置換オプションから少なくとも1つ選択する必要があります。",
+ "replacetext_choosepagesforedit": "以下の{{PLURAL:$3|ページ}}の本文中の「$1」を「$2」に置換する:",
+ "replacetext_choosepagesformove": "以下の名前の{{PLURAL:$3|ページ}}中の文字列「$1」を「$2」に置換する:",
+ "replacetext_cannotmove": "以下の{{PLURAL:$1|ページ}}は移動できません:",
+ "replacetext_formovedpages": "移動したページについて:",
+ "replacetext_savemovedpages": "古いページ名を新しいページへのリダイレクトとして残す",
+ "replacetext_watchmovedpages": "これらのページをウォッチ",
+ "replacetext_invertselections": "選択を反転",
+ "replacetext_replace": "置換",
+ "replacetext_success": "$3{{PLURAL:$3|ページ}}で「$1」が「$2」に置換されます。",
+ "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": "ウィキ全体で文字列の置換を実行",
+ "action-replacetext": "ウィキ全体での文字列の置換の実行"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/jv.json b/www/wiki/extensions/ReplaceText/i18n/jv.json
new file mode 100644
index 00000000..da221641
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/jv.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meursault2004",
+ "Pras"
+ ]
+ },
+ "replacetext": "Ganti tèks",
+ "replacetext_originaltext": "Tèks asli:",
+ "replacetext_continue": "Banjurna"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ka.json b/www/wiki/extensions/ReplaceText/i18n/ka.json
new file mode 100644
index 00000000..fd8475e3
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ka.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "BRUTE",
+ "David1010",
+ "Otogi"
+ ]
+ },
+ "replacetext": "ტექსტის შეცვლა",
+ "replacetext_originaltext": "პირველადი ტექსტი:",
+ "replacetext_replacementtext": "შესაცვლელი ტექსტი:",
+ "replacetext_optionalfilters": "არასავალდებულო ფილტრები:",
+ "replacetext_categorysearch": "მხოლოდ კატეგორიაში შეცვლა:",
+ "replacetext_prefixsearch": "მხოლოდ თავსართიან გვერდებში შეცვლა:",
+ "replacetext_editpages": "ტექსტის შეცვლა გვერდების შინაარსში",
+ "replacetext_movepages": "ტექსტის შეცვლა გვერდების სათაურში, თუ ეს შესაძლებელია",
+ "replacetext_cannotmove": "შემდეგი {{PLURAL:$1|გვერდის|$1 გვერდის}} გადატანა შეუძლებელია:",
+ "replacetext_formovedpages": "გადატანილი გვერდებისათვის:",
+ "replacetext_savemovedpages": "ძველი სათაურის შენახვა როგორც ახალზე გადამისამართება",
+ "replacetext_watchmovedpages": "ამ გვერდების კონტროლი",
+ "replacetext_invertselections": "შერჩევის ინვერტირება",
+ "replacetext_replace": "ჩანაცვლება",
+ "replacetext_return": "ფორმასთან დაბრუნება.",
+ "replacetext_continue": "გაგრძელება",
+ "replacetext_editsummary": "ტექსტის შეცვლა - „$1“ „$2“-ზე"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/km.json b/www/wiki/extensions/ReplaceText/i18n/km.json
new file mode 100644
index 00000000..9ec0c7f7
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/km.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lovekhmer",
+ "Thearith",
+ "គីមស៊្រុន"
+ ]
+ },
+ "replacetext": "ជំនួសអត្ថបទ",
+ "replacetext_originaltext": "អត្ថបទដើម៖",
+ "replacetext_replacementtext": "អត្ថបទជំនួស៖",
+ "replacetext_movepages": "ជំនួស​អត្ថបទ​នៅក្នុង​ចំណងជើង​ទំព័រ​បើអាច",
+ "replacetext_choosepagesforedit": "សូម​ជ្រើសរើស {{PLURAL:$3|ទំព័រ|ទំព័រ}} សម្រាប់​អ្វី​ដែល​អ្នក​ចង់​ជំនួស '$1' ដោយ '$2':",
+ "replacetext_choosepagesformove": "ជំនួស​ \"$1\" ដោយ \"$2\" ក្នុង {{PLURAL:$1|ចំណងជើងទំព័រ​ដូចតទៅ|ចំណងជើងទំព័រ​ដូចតទៅ}}៖",
+ "replacetext_invertselections": "ដាក់បញ្ច្រាស​ជម្រើស",
+ "replacetext_replace": "ជំនួស",
+ "replacetext_success": "'$1' នឹងត្រូវបានជំនួសដោយ '$2' ក្នុង $3 {{PLURAL:$3|ទំព័រ|ទំព័រ}}​។",
+ "replacetext_noreplacement": "រក​មិន​ឃើញ​ទំព័រ​ដែល​មាន​ខ្សែអក្សរ (string) '$1' ។",
+ "replacetext_continue": "បន្ត",
+ "replacetext_editsummary": "អត្ថបទជំនួស - '$1' ទៅ '$2'"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ko.json b/www/wiki/extensions/ReplaceText/i18n/ko.json
new file mode 100644
index 00000000..6798e94f
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ko.json
@@ -0,0 +1,49 @@
+{
+ "@metadata": {
+ "authors": [
+ "Devunt",
+ "Kwj2772",
+ "아라",
+ "Hwangjy9",
+ "Yearning",
+ "Ykhwong",
+ "Nuevo Paso"
+ ]
+ },
+ "replacetext": "문자열 찾아 바꾸기",
+ "replacetext-desc": "관리자가 위키 전체의 본문에 있는 문자열을 찾아 바꿀 수 있도록 [[Special:ReplaceText|특수 문서]]를 제공합니다",
+ "replacetext_docu": "이 위키에서 어떤 문자열을 다른 문자열로 바꾸기 위해서는 찾을 문자열과 바꿀 문자열을 입력한 뒤 \"{{int:replacetext_continue}}\"을 누르세요.\n그러면 해당 문자열을 포함하고 있는 문서 목록이 나오며, 그 중에서 바꿀 문서들을 선택할 수 있습니다.\n모든 바뀜에 당신의 사용자 이름이 문서 역사에 나올 것입니다.",
+ "replacetext_originaltext": "찾을 문자열:",
+ "replacetext_replacementtext": "바꿀 문자열:",
+ "replacetext_useregex": "정규 표현식 사용",
+ "replacetext_regexdocu": "(예: \"{{int:replacetext_originaltext}}\"에 \"a(.*)c\"값을 입력하고 \"{{int:replacetext_replacementtext}}\"에 \"ac$1\"값을 입력하면 \"abc\"가 \"acb\"로 바뀝니다.)",
+ "replacetext_optionalfilters": "선택적 필터:",
+ "replacetext_categorysearch": "다음 분류에서만 바꾸기:",
+ "replacetext_prefixsearch": "다음 접두어로 시작하는 문서만 바꾸기:",
+ "replacetext_editpages": "문서 내용의 문자열을 바꾸기",
+ "replacetext_movepages": "가능하다면 문서 제목에 있는 문자열도 바꾸기",
+ "replacetext_givetarget": "찾을 문자열을 반드시 지정해야 합니다.",
+ "replacetext_nonamespace": "이름공간을 적어도 하나는 선택해야 합니다.",
+ "replacetext_editormove": "찾아 바꾸기 옵션을 적어도 하나는 선택해야 합니다.",
+ "replacetext_choosepagesforedit": "{{PLURAL:$3|문서|문서 $3개}}에 있는 \"$1\" 문자열을 \"$2\" 문자열로 바꿉니다:",
+ "replacetext_choosepagesformove": "가리키는 문서 제목 $3개에 있는 \"$1\" 문자열을 \"$2\" 문자열로 바꿉니다:",
+ "replacetext_cannotmove": "다음 {{PLURAL:$1|문서는}} 이동할 수 없습니다:",
+ "replacetext_formovedpages": "이동한 문서에 대해:",
+ "replacetext_savemovedpages": "오래된 제목을 새 제목으로 넘겨주는 문서 만들기",
+ "replacetext_watchmovedpages": "이 문서 주시하기",
+ "replacetext_invertselections": "선택 반전",
+ "replacetext_replace": "찾아 바꾸기",
+ "replacetext_success": "\"$1\" 문자열은 문서 $3개에서 \"$2\" 문자열로 바뀔 것입니다.",
+ "replacetext_noreplacement": "\"$1\" 문자열을 포함하고 있는 문서가 없습니다.",
+ "replacetext_nomove": "\"$1\" 문자열을 포함하고 있는 문서 제목이 없습니다.",
+ "replacetext_nosuchcategory": "\"$1\" 문자열을 포함하고 있는 분류가 없습니다.",
+ "replacetext_return": "양식으로 돌아갑니다.",
+ "replacetext_warning": "\"$2\" 문자열을 포함하고 있는 문서 $1개가 이미 있습니다. 이 찾아 바꾸기를 실행하면, 이미 존재하는 \"$2\" 문자열과 더 이상 구분되지 않을 것입니다.\n찾아 바꾸기를 계속하겠습니까?",
+ "replacetext_blankwarning": "바꿀 문자열이 비어 있으므로 이 동작은 되돌릴 수 없습니다.\n계속하시겠습니까?",
+ "replacetext_continue": "계속",
+ "replacetext_announce": "$1과 주시문서 목록을 통해 이 편집을 알립니다.",
+ "replacetext_editsummary": "문자열 찾아 바꾸기 - \"$1\" 문자열을 \"$2\" 문자열로",
+ "right-replacetext": "위키 전체에서 찾아 바꾸기",
+ "action-replacetext": "찾아 바꾸기를 위키 전체에 수행",
+ "replacetext_reminder": "또, 다른 문서에서 이 문서를 가리키는 링크를 수정하려면 $1(으)로 이동하십시오."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ksh.json b/www/wiki/extensions/ReplaceText/i18n/ksh.json
new file mode 100644
index 00000000..0bad63df
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ksh.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "replacetext": "Täx-Shtöcksher ußtuusche",
+ "replacetext-desc": "Deit en [[Special:ReplaceText|{{int:specialpage}}]] en et Wiki, womet {{int:group-sysop}} aanjefbaa Täx-Schtöckscher en alle Atikelle em Wikki söhke un ußtuusche künne.",
+ "replacetext_docu": "Öm ene Täx en alle nomaale Sigge em Wiki ze söke un ußzetuusche, jif hee\nzwei Täx-Schtöcksher en, un donn dann op „{{int:replacetext continue}}“ klecke.\nDann süühß De en Leß met Sigge, wo dö dä jesoohte Täx dren änthallde es,\nun De kanns Der erußsöke, en wat för enne dovun dat De dä och jetuusch\nhan wells. Dinge Name als Metmaacher weed met dä neu veränderte Versione\nfun 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 rejolähre Ußdrök",
+ "replacetext_regexdocu": "(För e Beispel: Nämm „a(.*)c“ för „{{int:replacetext_originaltext}}“ un „ac$1“ för „{{int:replacetext_replacementtext}}“, 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 Övverschreff aanfängk met:",
+ "replacetext_editpages": "Donn dä Täx em Sigge_Enhaldt ußtuusche",
+ "replacetext_movepages": "Donn dä Täx en de Sigge ier Tittele ußtuusche, wan et jeiht",
+ "replacetext_givetarget": "Do moß aanjävve, wat ußjetuusch wäde sull. „Nix“ ußtuusche künne mer nit.",
+ "replacetext_nonamespace": "Do moß winnischßdens ei Appachtemang ußwähle.",
+ "replacetext_editormove": "Do moß winnischßdenß ei Höksche maache, sönß brengk dat hee nix.",
+ "replacetext_choosepagesforedit": "Don {{PLURAL:$3|en Sigg|di Sigge|nix aan Sigge}} ußsöke, en dänne De „$1“ jääje „$2“ jetuusch han wells:",
+ "replacetext_choosepagesformove": "Donn dä Täx „$1“ en hee dä {{PLURAL:$3|Sigg|Sigge|nix}} ierem Name jäje der Täx „$2“ ußtuusche:",
+ "replacetext_cannotmove": "Heh di {{PLURAL:$1|Sigg kann|Sigge künne|nix kann}} nit ömjenannt wäde:",
+ "replacetext_formovedpages": "För ömjenannte Sigge:",
+ "replacetext_savemovedpages": "Donn der ahle Tittel faßallde un en Ömleidong op der Neue druß maache,\nwann en Sigg ömjenannt woode es.",
+ "replacetext_watchmovedpages": "Op di Sigge oppaßße",
+ "replacetext_invertselections": "De Ußwahl ömdrieje",
+ "replacetext_replace": "Tuusche",
+ "replacetext_success": "„$1“ soll en {{PLURAL:$3|eine Sigg|$3 Sigge|nix}} dorsch „$2“ ußjetuusch wääde.",
+ "replacetext_noreplacement": "Kein Sigge jefonge met däm Täxstöck „$1“ dren.",
+ "replacetext_nomove": "Mer han kei Sigge jefonge, woh „$1“ en de Övverschreff dren förkütt.",
+ "replacetext_nosuchcategory": "Mer han kein Saachjropp met dämm Name „$1“.",
+ "replacetext_return": "Jangk retuhr op dat Fommolaa.",
+ "replacetext_warning": "<strong>Opjepaß:<strong>\n{{PLURAL:$1|Ein Sigg enthält|$1 Sigge enthallde}} ald dat Täxstöck „$2“, wat bemm Tuusche ennjeföhsch wähde sull.\nWenn De dat jemaat häs, kam_mer di Ännderong nit esu leijsch automattesch retuhr maache, weil mer di ald do wohre, un de ennjetuuschte Täxschtöker nit ongerscheide kann.\nWells De verhafftesch trozdämm wigger maache?",
+ "replacetext_blankwarning": "Dat Täxstöck, wat beim Tuusche ennjföhsch weed, es läddesch, dröm kam_mer di Ännderong nidd esu leijsch automattesch retuhr maache.\nWells De trozdämm wigger maache?",
+ "replacetext_continue": "Wiggermaache",
+ "replacetext_editsummary": "Täx-Schtöker tuusche — vun „$1“ noh „$2“",
+ "right-replacetext": "Täx-Schtöckscher em janze Wiki ußtuusche",
+ "action-replacetext": "Täx-Schtöckscher em janze Wiki ußzetuusche"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/lb.json b/www/wiki/extensions/ReplaceText/i18n/lb.json
new file mode 100644
index 00000000..c66ebb3c
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/lb.json
@@ -0,0 +1,42 @@
+{
+ "@metadata": {
+ "authors": [
+ "Les Meloures",
+ "Robby"
+ ]
+ },
+ "replacetext": "Text ersetzen",
+ "replacetext-desc": "Weist eng [[Special:ReplaceText|Spezialsäit]] déi Administrateuren et erlaabt eng Rei vun Textzeechen op alle Contenu-säite vun enger Wiki ze gesinn an z'ersetzen",
+ "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 \"{{int:replacetext_continue}}\". Dir gesitt dann eng Lëscht vu Säiten op deenen de gesichten Text dran ass, an Dir kënnt déi eraussichen op deenen 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 \"{{int:replacetext_originaltext}}“ an \"ac$1\" fir „Neien Text\"{{int:replacetext_replacementtext}}\" 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:",
+ "replacetext_editpages": "Den Text a Säiteninhalter ersetzen",
+ "replacetext_movepages": "Text an den Titele vun de Säiten ersetzen, wa méiglech",
+ "replacetext_givetarget": "Dir musst déi Zeechen uginn déi ersat solle ginn.",
+ "replacetext_nonamespace": "Dir musst mindestens een Nummraum eraussichen.",
+ "replacetext_editormove": "Dir musst mindestens eng vun den Optioune vum Ersetzen eraussichen.",
+ "replacetext_choosepagesforedit": "Wielt w.e.g. d'{{PLURAL:$3|Säit op där|Säiten op deenen}} Dir \"$1\" duerch \"$2\" ersetze wëllt:",
+ "replacetext_choosepagesformove": "'$1' duerch '$2' am Titel vun {{PLURAL:$3|dëser Säit|dëse Säiten}} ersetzen:",
+ "replacetext_cannotmove": "Dës {{PLURAL:$1|Säit kann|Säite kënne}} net geréckelt ginn:",
+ "replacetext_formovedpages": "Fir geréckelt Säiten:",
+ "replacetext_savemovedpages": "Déi al Titelen als Viruleedung op déi nei Titele späicheren",
+ "replacetext_watchmovedpages": "Dës Säiten iwwerwaachen",
+ "replacetext_invertselections": "Auswiel ëmdréinen",
+ "replacetext_replace": "Ersetzen",
+ "replacetext_success": "'$1' gëtt duerch '$2' op $3 {{PLURAL:$3|Säit|Säiten}} ersat.",
+ "replacetext_noreplacement": "Et goufe keng Säite mam Text '$1' fonnt.",
+ "replacetext_nomove": "Keng Säite fonnt wou '$1' am Titel drasteet.",
+ "replacetext_nosuchcategory": "Et gëtt keng Kategorie mam Numm \"$1\".",
+ "replacetext_return": "Zréck op de Formulaire",
+ "replacetext_warning": "'''Opgepasst:''' Et gëtt schonn {{PLURAL:$1|eng Säit op där|$1 Säiten op deenen}} d'Zeecherei '$2' schonn dran ass.\nWann 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 virufueren?",
+ "replacetext_continue": "Virufueren",
+ "replacetext_editsummary": "Text ersat - \"$1\" duerch \"$2\"",
+ "right-replacetext": "Ersetze vun enger Rei vun Textzeechen op der ganzer Wiki",
+ "action-replacetext": "ersetze vun enger Rei vun Textzeechen op der ganzer Wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/lki.json b/www/wiki/extensions/ReplaceText/i18n/lki.json
new file mode 100644
index 00000000..043b22d0
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/lki.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lakzon"
+ ]
+ },
+ "replacetext_categorysearch": "جایگزینی فقط در ڕِزگ:"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/lt.json b/www/wiki/extensions/ReplaceText/i18n/lt.json
new file mode 100644
index 00000000..271879c8
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/lt.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Homo",
+ "Manvydasz"
+ ]
+ },
+ "replacetext": "Keisti tekstą",
+ "replacetext_cannotmove": "{{PLURAL:$1|Šis puslapis|Šie $1 puslapiai|Šie $1 puslapių}} negali būti pervadinti:",
+ "replacetext_continue": "Tęsti",
+ "replacetext_editsummary": "Teksto pakeitimas - \"$1\" į \"$2\""
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/mg.json b/www/wiki/extensions/ReplaceText/i18n/mg.json
new file mode 100644
index 00000000..95bba3e7
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/mg.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jagwar"
+ ]
+ },
+ "right-replacetext": "Manolo lahatsoratra misy manerana ilay wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/mk.json b/www/wiki/extensions/ReplaceText/i18n/mk.json
new file mode 100644
index 00000000..fc2080e3
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/mk.json
@@ -0,0 +1,43 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06"
+ ]
+ },
+ "replacetext": "Замени текст",
+ "replacetext-desc": "Додава [[Special:ReplaceText|службена страница]] која им овозможува на администраторите да вршат пронаоѓање и замена на глобални низи во страниците на викито",
+ "replacetext_docu": "За да замените една низа со друга, ширум сите регуларни страници на ова вики, внесете ги тука двете парчиња текст и потоа притиснете на „{{int:replacetext_continue}}“.\nПотоа ќе ви се прикаже список на страници кои го содржат бараниот текст, и ќе можете да изберете во кои од нив сакате да ја извршите змената.\nВашето име ќе се појави во историјата на страниците како корисник одговорен за промените.",
+ "replacetext_originaltext": "Изворен текст:",
+ "replacetext_replacementtext": "Нов текст:",
+ "replacetext_useregex": "Користи регуларни изрази",
+ "replacetext_regexdocu": "(Пример: вредностите на „a(.*)c“ за „{{int:replacetext_originaltext}}“ и „ac$1“ за „{{int:replacetext_replacementtext}}“ ќе го заменат „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": "'''Предупредување:''' Има {{PLURAL:$1|$1 страница што веќе ја содржи|$1 страници што веќе ја содржат}} новата низа „$2“. Ако ја извршите оваа замена, тогаш нема да можете да ги раздвоите вашите замени од тие низи.",
+ "replacetext_blankwarning": "Бидејќи новата низа е празна, оваа постапка е не повратна.",
+ "replacetext_continue": "Продолжи",
+ "replacetext_announce": "Соопштувај ги овие уредувања преку $1 и набљудуваните",
+ "replacetext_editsummary": "Замена на текст — „$1“ со „$2“",
+ "right-replacetext": "Вршење замена на низи во целото вики",
+ "action-replacetext": "вршење замена на низи во целото вики",
+ "replacetext_reminder": "За воедно да ги измените до оваа страница на други страници, појдете на $1."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ml.json b/www/wiki/extensions/ReplaceText/i18n/ml.json
new file mode 100644
index 00000000..15c23565
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ml.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Praveenp",
+ "Shijualex"
+ ]
+ },
+ "replacetext": "എഴുത്ത് മാറ്റിച്ചേർക്കുക",
+ "replacetext-desc": "വിക്കിയിലെ എല്ലാ ഉള്ളടക്ക താളിൽ നിന്നും കാര്യനിർവാഹകർക്ക് ഒരു പ്രത്യേക പദത്തെ കണ്ടെത്തി-മാറ്റിച്ചേർക്കാനുള്ള [[Special:ReplaceText|പ്രത്യേക താൾ]] നൽകുന്നു",
+ "replacetext_originaltext": "യഥാർത്ഥ എഴുത്ത്:",
+ "replacetext_replacementtext": "മാറ്റിച്ചേർക്കേണ്ട എഴുത്ത്:",
+ "replacetext_optionalfilters": "ഐച്ഛിക അരിപ്പകൾ:",
+ "replacetext_categorysearch": "ഈ വർഗ്ഗത്തിൽ നിന്നു മാത്രം മാറ്റിച്ചേർക്കുക:",
+ "replacetext_prefixsearch": "ഈ പൂർവ്വപദമുള്ള താളുകളിൽ മാത്രം മാറ്റിച്ചേർക്കുക:",
+ "replacetext_editpages": "താളിന്റെ ഉള്ളടക്കത്തിലെ എഴുത്ത് മാറ്റിച്ചേർക്കുക",
+ "replacetext_movepages": "സാദ്ധ്യമെങ്കിൽ, താളിന്റെ ഉള്ളടക്കത്തിലെ എഴുത്തുകൾ മാറ്റിച്ചേർക്കുക",
+ "replacetext_givetarget": "മാറ്റിച്ചേർക്കാനുള്ള പദം താങ്കൾ വ്യക്തമാക്കണം.",
+ "replacetext_nonamespace": "ഒരു നാമമേഖലയെങ്കിലും തിരഞ്ഞെടുത്തിരിക്കണം.",
+ "replacetext_editormove": "ഒരു മാറ്റിച്ചേർക്കൽ ഐച്ഛികമെങ്കിലും തിരഞ്ഞെടുത്തിരിക്കണം.",
+ "replacetext_choosepagesforedit": "താഴെയുള്ള {{PLURAL:$3|താളിൽ|താളുകളിൽ}} നിന്നും \"$1\" എന്നത് \"$2\" എന്നതുകൊണ്ട് മാറ്റിച്ചേർക്കുക:",
+ "replacetext_choosepagesformove": "താഴെയുള്ള {{PLURAL:$3|താളിന്റെ തലക്കെട്ടിൽ|താളുകളുടെ തലക്കെട്ടുകളിൽ}} നിന്നും \"$1\" എന്നത് \"$2\" എന്നതുകൊണ്ട് മാറ്റിച്ചേർക്കുക:",
+ "replacetext_cannotmove": "താഴെയുള്ള {{PLURAL:$1|താൾ|താളുകൾ}} മാറ്റാനാവില്ല:",
+ "replacetext_formovedpages": "മാറ്റിയ താളുകൾക്ക് വേണ്ടി:",
+ "replacetext_savemovedpages": "പഴയ തലക്കെട്ടുകൾ പുതിയ തലക്കെട്ടുകളിലോട്ടുള്ള തിരിച്ചുവിടലായി നിലനിർത്തുക",
+ "replacetext_watchmovedpages": "ഈ താളുകൾ ശ്രദ്ധിക്കുക",
+ "replacetext_invertselections": "വിപരീതം തിരഞ്ഞെടുക്കുക",
+ "replacetext_replace": "മാറ്റിച്ചേർക്കുക",
+ "replacetext_success": "{{PLURAL:$3|ഒരു താളിൽ|$3 താളുകളിൽ}} \"$1\" എന്നത് \"$2\" എന്നതുകൊണ്ട് മാറ്റിച്ചേർക്കപ്പെടും.",
+ "replacetext_noreplacement": "\"$1\" എന്ന പദമുള്ള താളുകളൊന്നും കണ്ടെത്താനായില്ല.",
+ "replacetext_nomove": "ഒരു താളിന്റെയും തലക്കെട്ടിൽ \"$1\" എന്നു കണ്ടെത്താനായില്ല.",
+ "replacetext_return": "ഫോമിലേക്ക് തിരിച്ചു പോവുക",
+ "replacetext_continue": "തുടരുക",
+ "replacetext_editsummary": "എഴുത്ത് മാറ്റിച്ചേർക്കൽ - \"$1\" എന്നത് \"$2\" എന്നതുകൊണ്ട്",
+ "right-replacetext": "വിക്കിയിൽ മുഴുവനും പദം മാറ്റിച്ചേർക്കുക"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/mr.json b/www/wiki/extensions/ReplaceText/i18n/mr.json
new file mode 100644
index 00000000..3b8b4dc6
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/mr.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaustubh",
+ "V.narsikar"
+ ]
+ },
+ "replacetext": "मजकूरावर पुनर्लेखन करा",
+ "replacetext-desc": "एक [[Special:ReplaceText|विशेष पान]] देते ज्याच्यामुळे प्रबंधकांना एखाद्या विकिवरील सर्व पानांमध्ये शोधा व बदला सुविधा वापरता येते",
+ "replacetext_docu": "एखाद्या विकितील सर्व डाटा पानांवरील एखादा मजकूर बदलायचा झाल्यास, मजकूराचे दोन्ही तुकडे खाली लिहून 'पुनर्लेखन करा' कळीवर टिचकी द्या. तुम्हाला एक यादी दाखविली जाईल व त्यामधील कुठली पाने बदलायची हे तुम्ही ठरवू शकता. तुमचे नाव त्या पानांच्या इतिहास यादीत दिसेल.",
+ "replacetext_originaltext": "मूळ मजकूर",
+ "replacetext_replacementtext": "बदलण्यासाठीचा मजकूर",
+ "replacetext_choosepagesforedit": "ज्या पानांवर तुम्ही '$1' ला '$2' ने बदलू इच्छिता ती पाने निवडा:",
+ "replacetext_replace": "पुनर्लेखन करा",
+ "replacetext_success": "'$1' ला '$2' ने $3 पानांवर बदलले जाईल.",
+ "replacetext_noreplacement": "'$1' मजकूर असणारे एकही पान सापडले नाही.",
+ "replacetext_warning": "अगोदरच $1 पानांवर '$2' हा बदलण्यासाठीचा मजकूर आहे; जर तुम्ही पुनर्लेखन केले तर तुम्ही केलेले बदल तुम्ही या पानांपासून वेगळे करू शकणार नाही. पुनर्लेखन करायचे का?",
+ "replacetext_blankwarning": "बदलण्यासाठीचा मजकूर रिकामा असल्यामुळे ही क्रिया उलटविता येणार नाही; पुढे जायचे का?",
+ "replacetext_continue": "चालू ठेवा",
+ "replacetext_editsummary": "मजकूर पुनर्लेखन - '$1' ते '$2'"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ms.json b/www/wiki/extensions/ReplaceText/i18n/ms.json
new file mode 100644
index 00000000..345a90fc
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ms.json
@@ -0,0 +1,42 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Pizza1016"
+ ]
+ },
+ "replacetext": "Ganti teks",
+ "replacetext-desc": "Menyediakan sebuah [[Special:ReplaceText|laman khas]] untuk membolehkan para penyelia untuk melakukan pencarian dan penggantian rentetan sejagat pada semua laman-laman kandungan sebuah 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 '{{int:replacetext_continue}}'.\nKemudian, anda akan ditunjukkan satu senarai laman yang mengandungi teks carian, dan anda boleh memilih laman-laman yang mana anda ingin melakukan penggantian itu.\nNama 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 \"{{int:replacetext_originaltext}}\" dan \"ac$1\" untuk \"{{int:replacetext_replacementtext}}\" 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",
+ "action-replacetext": "melakukan penggantian rentetan di seluruh wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/nb.json b/www/wiki/extensions/ReplaceText/i18n/nb.json
new file mode 100644
index 00000000..c96ea0eb
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/nb.json
@@ -0,0 +1,45 @@
+{
+ "@metadata": {
+ "authors": [
+ "Event",
+ "Laaknor",
+ "Nghtwlkr",
+ "Simny",
+ "Jon Harald Søby"
+ ]
+ },
+ "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 «{{int:replacetext_continue}}».\nDu 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.\nNavnet ditt vil stå i sidehistorikkene som den som er ansvarlig for endringene.",
+ "replacetext_originaltext": "Originaltekst:",
+ "replacetext_replacementtext": "Erstatningstekst:",
+ "replacetext_useregex": "Bruk regulæruttrykk",
+ "replacetext_regexdocu": "(Eksempel: Verdier for \"a(.*)c\" i \"{{int:replacetext_originaltext}}\" og \"ac$1\" i \"{{int:replacetext_replacementtext}}\" erstatter \"abc\" med \"acb\".)",
+ "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",
+ "action-replacetext": "gjennomføre strengerstatninger på hele wikien"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/nl.json b/www/wiki/extensions/ReplaceText/i18n/nl.json
new file mode 100644
index 00000000..3a0a7c2f
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/nl.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "HanV",
+ "SPQRobin",
+ "Siebrand",
+ "Patio",
+ "Fitoschido"
+ ]
+ },
+ "replacetext": "Tekst vervangen",
+ "replacetext-desc": "Beheerders kunnen via een [[Special:ReplaceText|speciale pagina]] tekst zoeken en vervangen in alle pagina's",
+ "replacetext_docu": "Om een stuk tekst te vervangen door een ander stuk tekst in alle pagina's van de wiki, kunt u hier deze twee tekstdelen opgeven en daarna op \"{{int:replacetext_continue}}\" klikken.\nU krijgt dan een lijst met pagina's te zien waar uw te vervangen tekstdeel in voorkomt, en u kunt kiezen in welke pagina's u de tekst ook echt wilt vervangen.\nUw 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 \"{{int:replacetext_originaltext}}\" en \"ac$1\" voor \"{{int:replacetext_replacementtext}}\", 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:",
+ "replacetext_editpages": "Tekst vervangen in de pagina-inhoud",
+ "replacetext_movepages": "Tekst vervangen in paginanamen als mogelijk",
+ "replacetext_givetarget": "U moet de te vervangen tekst opgeven.",
+ "replacetext_nonamespace": "U moet ten minste één naamruimte selecteren.",
+ "replacetext_editormove": "U moet ten minste één van de vervangingsopties kiezen.",
+ "replacetext_choosepagesforedit": "Selecteer de {{PLURAL:$3|pagina|pagina's}} waar u \"$1\" door \"$2\" wilt vervangen:",
+ "replacetext_choosepagesformove": "\"$1\" door \"$2\" vervangen in de volgende {{PLURAL:$3|paginanaam|paginanamen}}:",
+ "replacetext_cannotmove": "De volgende {{PLURAL:$1|pagina kan|pagina's kunnen}} niet hernoemd worden:",
+ "replacetext_formovedpages": "Voor hernoemde pagina's:",
+ "replacetext_savemovedpages": "Een doorverwijzing aanmaken voor hernoemde pagina's",
+ "replacetext_watchmovedpages": "Deze pagina's volgen",
+ "replacetext_invertselections": "Selecties omkeren",
+ "replacetext_replace": "Vervangen",
+ "replacetext_success": "\"$1\" wordt in $3 {{PLURAL:$3|pagina|pagina's}} vervangen door \"$2\".",
+ "replacetext_noreplacement": "Er waren geen pagina's die de tekst '$1' bevatten.",
+ "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": "'''Waarschuwing:''' Er {{PLURAL:$1|is één pagina|zijn $1 pagina's}} die het te vervangen tekstdeel al \"$2\" al {{PLURAL:$1|bevat|bevatten}}.\nAls 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_announce": "Meld deze bewerkingen op $1 en volglijsten.",
+ "replacetext_editsummary": "Tekst vervangen - \"$1\" door \"$2\"",
+ "right-replacetext": "Tekst vervangen in de hele wiki",
+ "action-replacetext": "tekst te vervangen in de hele wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/nn.json b/www/wiki/extensions/ReplaceText/i18n/nn.json
new file mode 100644
index 00000000..eb625375
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/nn.json
@@ -0,0 +1,40 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gunnernett",
+ "Harald Khan",
+ "Njardarlogar"
+ ]
+ },
+ "replacetext": "Byt ut tekst",
+ "replacetext-desc": "Gjev ei [[Special:ReplaceText|spesialsida]] som lèt administratorar søkja etter og byta ut tekst på alle innhaldssidene på ein wiki.",
+ "replacetext_docu": "For å byta ein tekststreng med ein annan på alle vanlege sider på denne wikien kan du skriva inn dei to tekstbitane her og klikka «{{int:replacetext_continue}}». Du vil då verta ført til ei liste over sidene som inneheld søkjestrengen, og du kan velja kva sider du ønskjer å byta han ut i. Namnet ditt vil stå i sidehistorikkane som den som er ansvarleg for endringane.",
+ "replacetext_originaltext": "Originaltekst:",
+ "replacetext_replacementtext": "Ny tekst til erstatning:",
+ "replacetext_optionalfilters": "Valfrie filter:",
+ "replacetext_categorysearch": "Byt berre ut i kategorien:",
+ "replacetext_prefixsearch": "Byt berre ut på sider med førestavinga:",
+ "replacetext_editpages": "Byt ut tekst i sideinnhaldet",
+ "replacetext_movepages": "Byt ut tekst i sidetitlar der dette er mogleg",
+ "replacetext_givetarget": "Du må spesifisera strengen som skal verta bytt ut.",
+ "replacetext_nonamespace": "Du må velja minst eitt namnerom.",
+ "replacetext_editormove": "Du må velja minst eitt av vala for tekstbyte.",
+ "replacetext_choosepagesforedit": "Vel {{PLURAL:$3|sida|sidene}} der du ønskjer å byta ut «$1» med «$2»:",
+ "replacetext_choosepagesformove": "Byt ut «$1» med «$2» i {{PLURAL:$3|namnet på den følgjande sida|namna på dei følgjande sidene}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|Den følgjande sida|Dei følgjande sidene}} kan ikkje bli flytta:",
+ "replacetext_formovedpages": "For flytta sider:",
+ "replacetext_savemovedpages": "Lagra dei gamle titlane som omdirigeringar til dei nye",
+ "replacetext_watchmovedpages": "Hald oppsyn med desse sidene",
+ "replacetext_invertselections": "Inverter val",
+ "replacetext_replace": "Byt ut",
+ "replacetext_success": "$1» blir byta ut med «$2» på {{PLURAL:$3|éi sida|$3 sider}}.",
+ "replacetext_noreplacement": "Fann ingen sider som inneheldt søkjestrengen «$1».",
+ "replacetext_nomove": "Ingen sider vart funne der tittelen inneheld «$1».",
+ "replacetext_nosuchcategory": "Det finst ingen kategoriar med namnet «$1».",
+ "replacetext_return": "Attende til skjemaet.",
+ "replacetext_warning": "Det finst {{PLURAL:$1|éi sida|$1 sider}} som allereie inneheld strengen som skal bli sett inn, «$2».\nOm du utfører denne utbytinga vil du ikkje vera i stand til å skilja utbytingane dine frå desse strengane.\nHalda fram med utbytinga?",
+ "replacetext_blankwarning": "Av di teksten som skal bli sett inn er tom, vil ikkje denne handlinga kunna bli køyrt omvendt.\nVil du halda fram?",
+ "replacetext_continue": "Hald fram",
+ "replacetext_editsummary": "Utbyting av tekst - «$1» til «$2»",
+ "right-replacetext": "Gjennomfør utbyting av tekst på heile wikien"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/oc.json b/www/wiki/extensions/ReplaceText/i18n/oc.json
new file mode 100644
index 00000000..d376a452
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/oc.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31",
+ "Unuaiga",
+ "Fitoschido"
+ ]
+ },
+ "replacetext": "Remplaçar lo tèxte",
+ "replacetext-desc": "Provesís una [[Special:ReplaceText|pagina especiala]] que permet als administrators de remplaçar de cadenas de caractèrs per d’autras sus l’ensemble del wiki",
+ "replacetext_docu": "Per remplaçar una cadena de caractèrs per una autra sus l'ensemble de las donadas de las paginas d'aqueste wiki, podètz picar los dos tèxtes aicí e clicar sus « {{int:replacetext_replace}} ».\nUna lista de las paginas que contenon lo tèxte recercat apareisserà e poiretz causir las que volètz modificar.\nVòstre nom apareiserà dins l'istoric de las paginas tal coma un utilizaire autor dels cambiaments.",
+ "replacetext_originaltext": "Tèxte original :",
+ "replacetext_replacementtext": "Tèxte novèl :",
+ "replacetext_optionalfilters": "Filtres opcionals :",
+ "replacetext_categorysearch": "Remplaçar solament dins la categoria :",
+ "replacetext_prefixsearch": "Remplaçar solament dins las paginas qu'an lo prefix :",
+ "replacetext_editpages": "Remplaçar lo tèxte dins lo contengut dins la pagina",
+ "replacetext_movepages": "Remplaçar lo tèxte dins lo títol de las paginas, se possible",
+ "replacetext_givetarget": "Vos cal especificar la cadena de remplaçar.",
+ "replacetext_nonamespace": "Vos cal seleccionar al mens un espaci de noms.",
+ "replacetext_editormove": "Vos cal causir al mens una opcion de remplaçament.",
+ "replacetext_choosepagesforedit": "Seleccionatz {{PLURAL:$3|la pagina|las paginas}} dins {{PLURAL:$3|la quala|las qualas}} volètz remplaçar « $1 » per « $2 » :",
+ "replacetext_choosepagesformove": "Remplaçar « $1 » per « $2 » dins {{PLURAL:$3|lo nom de la pagina seguenta|los noms de las paginas seguentas}} :",
+ "replacetext_cannotmove": "{{PLURAL:$1|La pagina seguenta a pas pogut èsser renomenada|Las paginas seguentas an pas pogut èsser renomenadas}} :",
+ "replacetext_formovedpages": "Per las paginas renomenadas :",
+ "replacetext_savemovedpages": "Enregistratz los títols ancians coma redireccions cap als títols novèls",
+ "replacetext_watchmovedpages": "Seguir aquestas paginas",
+ "replacetext_invertselections": "Inversar las seleccions",
+ "replacetext_replace": "Remplaçar",
+ "replacetext_success": "« $1 » es estat remplaçat per « $2 » dins $3 fichièr{{PLURAL:$3||s}}.",
+ "replacetext_noreplacement": "Cap de fichièr que conten la cadena « $1 » es pas estat trobat.",
+ "replacetext_nomove": "Cap de pagina es pas estada trobada amb lo títol que conten « $1 ».",
+ "replacetext_nosuchcategory": "Existís pas de categoria nomenada « $1 ».",
+ "replacetext_return": "Tornar al formulari.",
+ "replacetext_warning": "I a $1 fichièr{{PLURAL:$1| que conten|s que contenon}} ja la cadena de remplaçament « $2 ».\nS'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_announce": "Anonciar aquelas modificacions via $1 e via las listas de seguit.",
+ "replacetext_editsummary": "Remplaçament de tèxte — « $1 » per « $2 »",
+ "right-replacetext": "Far de remplaçaments de tèxte dins tot lo wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/pdc.json b/www/wiki/extensions/ReplaceText/i18n/pdc.json
new file mode 100644
index 00000000..0d37968a
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/pdc.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xqt"
+ ]
+ },
+ "replacetext_noreplacement": "Ken Blatt gfunne mit „$1“.",
+ "replacetext_continue": "Weider"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/pl.json b/www/wiki/extensions/ReplaceText/i18n/pl.json
new file mode 100644
index 00000000..4e7571fe
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/pl.json
@@ -0,0 +1,50 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ankry",
+ "Chrumps",
+ "Derbeth",
+ "Leinad",
+ "Maikking",
+ "Matma Rex",
+ "Odder",
+ "Reedy",
+ "Sp5uhe",
+ "ToSter",
+ "WTM"
+ ]
+ },
+ "replacetext": "Zastąp tekst",
+ "replacetext-desc": "Dodaje [[Special:ReplaceText|stronę specjalną]], pozwalającą administratorom na wyszukanie i zamianę zadanego tekstu w treści wszystkich stron wiki",
+ "replacetext_docu": "Możesz zastąpić jeden ciąg znaków innym, w treści wszystkich normalnych stron tej wiki. W tym celu wprowadź tutaj dwa fragmenty tekstu i naciśnij „{{int:replacetext_continue}}”. Zostanie pokazana lista stron, które zawierają wyszukiwany tekst. Będziesz {{GENDER:|mógł|mogła}} wybrać te strony, na których chcesz ten tekst zamienić na nowy. W historii zmian pojawi się 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",
+ "replacetext_editpages": "Zastąp tekst w treści stron",
+ "replacetext_movepages": "Jeśli to możliwe wykonaj zastępowanie również w tytułach stron",
+ "replacetext_givetarget": "Musisz podać łańcuch znaków, który ma zostać zastąpiony.",
+ "replacetext_nonamespace": "Musisz wybrać co najmniej jedną przestrzeń nazw.",
+ "replacetext_editormove": "Musisz wybrać co najmniej jedną opcję zastępowania.",
+ "replacetext_choosepagesforedit": "Wybierz {{PLURAL:$3|stronę|strony}}, na których chcesz „$1” zastąpić „$2”",
+ "replacetext_choosepagesformove": "Zastąp „$1” tekstem „$2” w {{PLURAL:$3|tytule strony|tytułach następujących stron:}}",
+ "replacetext_cannotmove": "{{PLURAL:$1|Poniższa strona nie może zostać przeniesiona|Poniższe strony nie mogą zostać przeniesione}}:",
+ "replacetext_formovedpages": "Dla przeniesionych stron:",
+ "replacetext_savemovedpages": "Zapisz stare tytuły jako przekierowania do nowych",
+ "replacetext_watchmovedpages": "Obserwuj te strony",
+ "replacetext_invertselections": "Odwróć zaznaczenie",
+ "replacetext_replace": "Zastąp",
+ "replacetext_success": "„$1” zostanie zastąpiony przez „$2” na $3 {{PLURAL:$3|stronie|stronach}}.",
+ "replacetext_noreplacement": "Nie znaleziono stron zawierających tekst „$1”.",
+ "replacetext_nomove": "Nie znaleziono żadnych stron o tytule zawierającym „$1”.",
+ "replacetext_nosuchcategory": "Kategoria „$1” nie istnieje.",
+ "replacetext_return": "Powrót do formularza.",
+ "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_editsummary": "Zastępowanie tekstu - \"$1\" na \"$2\"",
+ "right-replacetext": "Wykonywanie zastępowania tekstu w całej wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/pms.json b/www/wiki/extensions/ReplaceText/i18n/pms.json
new file mode 100644
index 00000000..4d9de496
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/pms.json
@@ -0,0 +1,42 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borichèt",
+ "Dragonòt"
+ ]
+ },
+ "replacetext": "Rimpiassa test",
+ "replacetext-desc": "A dà na [[Special:ReplaceText|pàgina special]] për përmëtte a j'aministrator ëd fé un sërca-e-rampiassa dë stringhe global su tute le pàgine ëd contnù ëd na wiki",
+ "replacetext_docu": "Për rampiassé na stringa ëd test con n'àutra dzora a tute le pàgine regolar dë sta wiki-sì, ch'a buta ij doi tòch ëd test ambelessì e peui ch'a sgnaca \"{{int:replacetext_continue}}\".\nA-j sarà alora mostrà na lista ëd pàgine ch'a conten-o ël test d'arserca, e a podrà serne cole andoa a veul rampiasselo.\nSò nòm a comparirà ant le stòrie dle pàgine com l'utent responsàbil ëd tute modìfiche.",
+ "replacetext_originaltext": "Test original:",
+ "replacetext_replacementtext": "Test ëd rimpiassadura:",
+ "replacetext_useregex": "Dovré dj'espression regolar",
+ "replacetext_regexdocu": "(Esempi: ij valor «a(.*)c» për «{{int:replacetext_originaltext}}» e «ac$1» për «{{int:replacetext_replacementtext}}» a rampiasso «abc» with «acb».)",
+ "replacetext_optionalfilters": "Filtr opsionaj:",
+ "replacetext_categorysearch": "Rimpiassa mach an categorìa:",
+ "replacetext_prefixsearch": "Rimpiassa mach an pàgine con ël prefiss:",
+ "replacetext_editpages": "Rimpiassa test ant ij contnù dla pàgina",
+ "replacetext_movepages": "Rimpiassa test ant ij tìtoj dla pàgina, quand possìbil",
+ "replacetext_givetarget": "It deve spessifiché la stringa da esse rimpiassà.",
+ "replacetext_nonamespace": "It deve spessifiché almanch në spassi nominal.",
+ "replacetext_editormove": "It deve selessioné almanch un-a dj'opsion ëd rampiass.",
+ "replacetext_choosepagesforedit": "Rimpiassa \"$1\" con \"$2\" ant ël test ëd {{PLURAL:$3|la pàgina|le pàgine}} sota:",
+ "replacetext_choosepagesformove": "Rimpiassa \"$1\" con \"$2\" ant {{PLURAL:$3|ël tìtol dla pàgina|ij tìtoj dle pàgine}} sota:",
+ "replacetext_cannotmove": "{{PLURAL:$1|La pàgina|Le pàgine}} sota a peulo pa esse tramudà:",
+ "replacetext_formovedpages": "Për le pàgine tramudà:",
+ "replacetext_savemovedpages": "Salva ël tìtol vej com ridiression al tìtol neuv",
+ "replacetext_watchmovedpages": "Ten d'euj ste pàgine-sì",
+ "replacetext_invertselections": "Anvert selession",
+ "replacetext_replace": "Rimpiassa",
+ "replacetext_success": "\"$1\" a sarà rimpiassà con \"$2\" an $3 {{PLURAL:$3|pàgina|pàgine}}.",
+ "replacetext_noreplacement": "Pa gnun-e pàgine trovà contenente la stringa \"$1\".",
+ "replacetext_nomove": "Pa gnun-e pàgine trovà con ij tìtoj contenent \"$1\".",
+ "replacetext_nosuchcategory": "A esisto gnun-e categorìe con ël nòm \"$1\".",
+ "replacetext_return": "Artorna al formolari.",
+ "replacetext_warning": "'''Atension:''' A-i {{PLURAL:$1|é $1 pàgina ch'a conten|son $1 pàgine ch'a conten-o}} già la stringa ëd rimpiassadura, \"$2\".\nS'it fas sta rimpiassadura-sì it saras pa bon a separé toe rimpiassadure da ste stringhe-sì.",
+ "replacetext_blankwarning": "Da già che la stringa ëd rimpiass a l'é veuida, st'operassion-sì a sarà pa reversìbil.\nVeul-lo continué?",
+ "replacetext_continue": "Continua",
+ "replacetext_editsummary": "Rimpiassadura test - \"$1\" a \"$2\"",
+ "right-replacetext": "Fà rimpiassadura dë stringhe an sl'antrega wiki",
+ "action-replacetext": "fé ij rampiass dë stringhe an sla wiki antrega"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/pnt.json b/www/wiki/extensions/ReplaceText/i18n/pnt.json
new file mode 100644
index 00000000..13aa094d
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/pnt.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Omnipaedista"
+ ]
+ },
+ "replacetext_originaltext": "Πρωτότυπον κείμενον:"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ps.json b/www/wiki/extensions/ReplaceText/i18n/ps.json
new file mode 100644
index 00000000..83ed3e17
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ps.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel"
+ ]
+ },
+ "replacetext": "متن ځايناستول",
+ "replacetext_originaltext": "آرنی متن:",
+ "replacetext_replacementtext": "د متن ځايناستوب:",
+ "replacetext_categorysearch": "يوازې په وېشنيزه کې ځايناستول:",
+ "replacetext_prefixsearch": "يوازې په مختاړي لرونکيو مخونو کې ځايناستول:",
+ "replacetext_editpages": "د مخ په مېنځپانگه کې متن ځايناستول",
+ "replacetext_movepages": "د شونتيا په وخت کې، د مخ د سرليک متن ځايناستول",
+ "replacetext_nonamespace": "تاسې بايد لږ تر لږه يو نوم-تشيال وټاکۍ.",
+ "replacetext_cannotmove": "دا {{PLURAL:$1|لاندې مخ|لانديني مخونه}} د لېږدولو وړ نه دي:",
+ "replacetext_formovedpages": "د لېږدل شويو مخونو لپاره:",
+ "replacetext_watchmovedpages": "همدا مخونه کتل",
+ "replacetext_invertselections": "ټاکنې سرچپه کول",
+ "replacetext_replace": "ځايناستول",
+ "replacetext_editsummary": "متن ځايناستول - له \"$1\" نه \"$2\" ته"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/pt-br.json b/www/wiki/extensions/ReplaceText/i18n/pt-br.json
new file mode 100644
index 00000000..d9fbc1ff
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/pt-br.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cainamarques",
+ "Capmo",
+ "Crazymadlover",
+ "Eduardo.mps",
+ "Enqd",
+ "Giro720",
+ "Hamilton Abreu",
+ "Jaideraf",
+ "Luckas",
+ "Luckas Blade",
+ "555",
+ "Eduardo Addad de Oliveira"
+ ]
+ },
+ "replacetext": "Substituir texto",
+ "replacetext-desc": "Apresenta uma [[Special:ReplaceText|página especial]] que permite aos administradores fazer substituições globais de texto em todas as páginas de conteúdo de uma wiki",
+ "replacetext_docu": "Para substituir uma \"string\" de texto por outra em todas as páginas deste wiki, forneça o texto a ser substituído e o novo texto e clique no botão \"{{int:replacetext_continue}}\".\nSerá exibida uma lista de páginas que possuem o termo pesquisado. A partir dela, selecione em quais você deseja realizar substituições.\nSeu nome de usuário aparecerá nos históricos das páginas como o responsável por ter feito as alterações.",
+ "replacetext_originaltext": "Texto original:",
+ "replacetext_replacementtext": "Novo texto:",
+ "replacetext_useregex": "Usar expressões regulares",
+ "replacetext_regexdocu": "(Exemplo: os valores \"a(.*)c\" no \"{{int:replacetext_originaltext}}\" e \"ac$1\" em \"{{int:replacetext_replacementtext}}\" substituiriam \"abc\" por \"acb\")",
+ "replacetext_optionalfilters": "Filtros opcionais:",
+ "replacetext_categorysearch": "Substituir apenas na categoria:",
+ "replacetext_prefixsearch": "Substituir apenas em páginas com o prefixo:",
+ "replacetext_editpages": "Substituir texto no conteúdo da página",
+ "replacetext_movepages": "Substituir texto nos títulos das páginas, quando possível",
+ "replacetext_givetarget": "Você precisa especificar um texto para ser substituído.",
+ "replacetext_nonamespace": "Você precisa selecionar no mínimo um espaço nominal.",
+ "replacetext_editormove": "Você precisa selecionar no mínimo uma das opções de substituição.",
+ "replacetext_choosepagesforedit": "Substituir \"$1\" por \"$2\" no texto {{PLURAL:$3|da página|das páginas}} a seguir:",
+ "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:",
+ "replacetext_savemovedpages": "Manter os títulos antigos como redirecionamentos para os novos títulos",
+ "replacetext_watchmovedpages": "Vigiar estas páginas",
+ "replacetext_invertselections": "Inverter seleçõ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 que contenham a expressão \"$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}} a expressão de substituição, \"$2\". Se você prosseguir, não será possível distinguí-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": "Continuar",
+ "replacetext_announce": "Anunciar estas edições através da página $1 e das páginas vigiadas.",
+ "replacetext_editsummary": "Substituição de texto - \"$1\" por \"$2\"",
+ "right-replacetext": "Fazer substituições de texto em toda a wiki",
+ "action-replacetext": "executar substituições de cadeias de caracteres em toda a wiki",
+ "replacetext_reminder": "Para alterar também as páginas afluentes a esta, vá para $1."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/pt.json b/www/wiki/extensions/ReplaceText/i18n/pt.json
new file mode 100644
index 00000000..8ef32a16
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/pt.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "Capmo",
+ "Crazymadlover",
+ "Hamilton Abreu",
+ "Lijealso",
+ "Luckas",
+ "Malafaya",
+ "Waldir",
+ "555",
+ "Macofe",
+ "Athena in Wonderland"
+ ]
+ },
+ "replacetext": "Substituir texto",
+ "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\".\nSerão listadas as páginas que contêm o texto a substituir e poderá selecionar em quais deseja proceder à substituição.\nO seu nome aparecerá no histórico dessas páginas como o utilizador responsável pelas alterações.",
+ "replacetext_originaltext": "Texto original:",
+ "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 nos títulos de páginas, quando possível",
+ "replacetext_givetarget": "Deve especificar o texto que será substituído.",
+ "replacetext_nonamespace": "Deverá selecionar pelo menos um espaço nominal.",
+ "replacetext_editormove": "Deve selecionar pelo menos uma das opções de substituição.",
+ "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 redirecionamentos para os novos títulos",
+ "replacetext_watchmovedpages": "Vigiar estas páginas",
+ "replacetext_invertselections": "Inverter seleçõ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 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á 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_announce": "Anunciar estas edições através da página $1 e das páginas vigiadas.",
+ "replacetext_editsummary": "Substituição de texto - \"$1\" por \"$2\"",
+ "right-replacetext": "Fazer substituições de texto em toda a wiki",
+ "action-replacetext": "fazer substituições de texto em toda a wiki",
+ "replacetext_reminder": "Para alterar também as ligações para esta página nas páginas afluentes, vá a $1."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/qqq.json b/www/wiki/extensions/ReplaceText/i18n/qqq.json
new file mode 100644
index 00000000..d9d62450
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/qqq.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "Darth Kule",
+ "EugeneZelenko",
+ "Fryed-peach",
+ "Kghbln",
+ "Kwj2772",
+ "McMonster",
+ "Nike",
+ "Purodha",
+ "Shirayuki",
+ "Umherirrender"
+ ]
+ },
+ "replacetext": "{{doc-special|ReplaceText}}",
+ "replacetext-desc": "{{desc|name=Replace Text|url=https://www.mediawiki.org/wiki/Extension:Replace_Text}}\n{{Identical|Content page}}",
+ "replacetext_docu": "Description of how to use this extension, displayed on the extension's special page ([[Special:ReplaceText]]).\n\nRefers to {{msg-mw|Replacetext continue}}.",
+ "replacetext_originaltext": "Label of the text field, where user enters original piece of text, which would be replaced.",
+ "replacetext_replacementtext": "Used as table header on [[Special:ReplaceText]]",
+ "replacetext_useregex": "Used as label message of a checkbox on [[Special:ReplaceText]]",
+ "replacetext_regexdocu": "<code>$1</code> is not a parameter.\n\nRefers to the following messages:\n* {{msg-mw|Replacetext originaltext}}\n* {{msg-mw|Replacetext replacementtext}}",
+ "replacetext_optionalfilters": "Used as header on [[Special:ReplaceText]]",
+ "replacetext_categorysearch": "Used as label on [[Special:ReplaceText]]",
+ "replacetext_prefixsearch": "Used as label on [[Special:ReplaceText]]",
+ "replacetext_editpages": "Used as label message of a checkbox on [[Special:ReplaceText]]",
+ "replacetext_movepages": "Used as label message of a checkbox on [[Special:ReplaceText]]",
+ "replacetext_givetarget": "Used as error message on [[Special:ReplaceText]]",
+ "replacetext_nonamespace": "Used as error message on [[Special:ReplaceText]]",
+ "replacetext_editormove": "Used as error message on [[Special:ReplaceText]]",
+ "replacetext_choosepagesforedit": "Displayed over the list of pages where the given text was found. Parameters:\n* $1 - target code\n* $2 - replacement code\n* $3 - number of pages for edit",
+ "replacetext_choosepagesformove": "Used in [[Special:ReplaceText]].\n\nThis message is followed by list of the pages.\n\nParameters:\n* $1 - target string\n* $2 - replacement string\n* $3 - number of pages",
+ "replacetext_cannotmove": "Used in [[Special:ReplaceText]].\n\nThis message is followed by list of the pages.\n\nParameters:\n* $1 - number of pages which cannot be moved",
+ "replacetext_formovedpages": "Used as label on [[Special:ReplaceText]]",
+ "replacetext_savemovedpages": "Used as label of a checkbox on [[Special:ReplaceText]]",
+ "replacetext_watchmovedpages": "Used as label message of a checkbox on [[Special:ReplaceText]]",
+ "replacetext_invertselections": "{{Identical|Invert selection}}",
+ "replacetext_replace": "Label of the button, which triggers the begin of replacment.\n\n{{Identical|Replace}}",
+ "replacetext_success": "Used as success message in [[Special:ReplaceText]]. Parameters:\n* $1 - target string\n* $2 - replacement string\n* $3 - number of affected pages",
+ "replacetext_noreplacement": "Used in [[Special:ReplaceText]]. Parameters:\n* $1 - target string\nSee also:\n* {{msg-mw|Replacetext nomove}}",
+ "replacetext_nomove": "Used in [[Special:ReplaceText]]. Parameters:\n* $1 - target string\nSee also:\n* {{msg-mw|Replacetext noreplacement}}",
+ "replacetext_nosuchcategory": "Used in [[Special:ReplaceText]]. Parameters:\n* $1 - category name (with link)",
+ "replacetext_return": "Used as text of a link on [[Special:ReplaceText]]",
+ "replacetext_warning": "Used in [[Special:ReplaceText]]. Parameters:\n* $1 - number of pages\n* $2 - replacement string",
+ "replacetext_blankwarning": "Used as warning message on [[Special:ReplaceText]]",
+ "replacetext_continue": "{{Identical|Continue}}",
+ "replacetext_announce": "Used as a label for a checkbox on [[Special:ReplaceText]]",
+ "replacetext_editsummary": "Used as Edit Summary in [[Special:ReplaceText]]. Parameters:\n* $1 - target string\n* $2 - replacement string",
+ "right-replacetext": "{{doc-right|replacetext}}",
+ "action-replacetext": "{{doc-action|replacetext}}",
+ "replacetext_reminder": "Used at the end of success message in [[Special:MovePage]]. Parameters:\n* $1 - link to ReplaceText page"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ro.json b/www/wiki/extensions/ReplaceText/i18n/ro.json
new file mode 100644
index 00000000..15183e14
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ro.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Firilacroco",
+ "KlaudiuMihaila",
+ "Stelistcristi"
+ ]
+ },
+ "replacetext": "Înlocuiește text",
+ "replacetext_originaltext": "Text original:",
+ "replacetext_optionalfilters": "Filtre opționale:",
+ "replacetext_watchmovedpages": "Urmărește aceste pagini",
+ "replacetext_invertselections": "Inversează selecțiile",
+ "replacetext_replace": "Înlocuire",
+ "replacetext_nomove": "Nu a fost găsită nici o pagină al cărei titlu să conțină '$1'.",
+ "replacetext_return": "Revenire la formular.",
+ "replacetext_continue": "Continuare",
+ "replacetext_editsummary": "Înlocuire de text - '$1' în '$2'"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/roa-tara.json b/www/wiki/extensions/ReplaceText/i18n/roa-tara.json
new file mode 100644
index 00000000..dbf4d396
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/roa-tara.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "replacetext": "Sostituisce 'u teste",
+ "replacetext_originaltext": "Teste origgenale:",
+ "replacetext_replacementtext": "Teste da sostituì:",
+ "replacetext_useregex": "Ause le espressiune regolare",
+ "replacetext_watchmovedpages": "Vide ste pàggene",
+ "replacetext_invertselections": "Selezione a smerse",
+ "replacetext_replace": "Sostituisce",
+ "replacetext_success": "\"$1\" avène sostituite cu \"$2\" jndr'à {{PLURAL:$3|'na pàgene|$3 pàggene}}.",
+ "replacetext_return": "Tuèrne a 'u module.",
+ "replacetext_continue": "Condinue",
+ "replacetext_editsummary": "Sostituzione d'u teste - \"$1\" cu \"$2\"",
+ "right-replacetext": "Fà 'a sostituzione de le stringhe sus a totte a uicchi"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ru.json b/www/wiki/extensions/ReplaceText/i18n/ru.json
new file mode 100644
index 00000000..3859932c
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ru.json
@@ -0,0 +1,53 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlexSm",
+ "Ferrer",
+ "Kaganer",
+ "Kv75",
+ "Normalex",
+ "Okras",
+ "Rubin",
+ "Rubin16",
+ "Александр Сигачёв",
+ "Mouse21",
+ "Happy13241"
+ ]
+ },
+ "replacetext": "Заменить текст",
+ "replacetext-desc": "Добавляет [[Special:ReplaceText|служебную страницу]], позволяющую администраторам осуществлять повсеместную замену указанного текста на всех обычных страницах вики",
+ "replacetext_docu": "Для того, чтобы заменить одну строку на другую на всех страницах вики, вам необходимо ввести здесь желаемый текст и нажать на кнопку «{{int:replacetext_continue}}». После этого вам будет предложен список всех страниц, содержащих заменяемый текст, и вы сможете выбрать из них те, в которых нужно произвести замены. В качестве лица, отвечающего за внесённые изменения, в истории правок страниц, в которых произойдёт замена текста, будете указаны вы.",
+ "replacetext_originaltext": "Исходный текст:",
+ "replacetext_replacementtext": "Текст для замены:",
+ "replacetext_useregex": "Использовать регулярные выражения",
+ "replacetext_regexdocu": "(Например, выражения «a(.*)c» в поле «{{int:replacetext_originaltext}}» и «ac$1» в поле «{{int:replacetext_replacementtext}}» приведут к замене «abc» на «acb».)",
+ "replacetext_optionalfilters": "Необязательные фильтры:",
+ "replacetext_categorysearch": "Заменить только в категории:",
+ "replacetext_prefixsearch": "Заменить только в страницах с приставкой:",
+ "replacetext_editpages": "Замена текста в содержимом страниц",
+ "replacetext_movepages": "Заменить текст в названиях страниц, если это возможно",
+ "replacetext_givetarget": "Вы должны указать строку, которую нужно заменить.",
+ "replacetext_nonamespace": "Вы должны выбрать по крайней мере одно пространство имён.",
+ "replacetext_editormove": "Вы должны выбрать по крайней мере, один из вариантов замены.",
+ "replacetext_choosepagesforedit": "Пожалуйста, выберите {{PLURAL:$3|1=страницу, в которой|страницы, в которых}} вы хотите осуществить замену «$1» на «$2»:",
+ "replacetext_choosepagesformove": "Заменить «$1» на «$2» в {{PLURAL:$3|1=названии следующей страницы|названиях следующих страниц}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|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": "'''Внимание.''' Найдена {{PLURAL:$1|$1 страница, содержащая|$1 страницы, содержащие|$1 страниц, содержащих}} текст для замены, «$2». Если вы продолжите операцию замены, то не сможете отделить уже существующие записи от тех, которые появятся после замены.",
+ "replacetext_blankwarning": "Из-за того, что текст для замены пуст, операция по замене не сможет быть отменена.\nВы хотите продолжить?",
+ "replacetext_continue": "Продолжить",
+ "replacetext_announce": "Объявите об этих изменениях через $1 и контрольные списки",
+ "replacetext_editsummary": "Замена текста — «$1» на «$2»",
+ "right-replacetext": "выполнение замен текста во всей вики",
+ "action-replacetext": "замену строк по всему проекту",
+ "replacetext_reminder": "Чтобы изменить ссылки на эту страницу на других страницах, перейдите к $1."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/si.json b/www/wiki/extensions/ReplaceText/i18n/si.json
new file mode 100644
index 00000000..a5c879d1
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/si.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "replacetext": "පෙළ ප්‍රතිස්ථාපනය කරන්න",
+ "replacetext_originaltext": "මුල් පෙළ:",
+ "replacetext_replacementtext": "ප්‍රතිස්ථාපන පෙළ:",
+ "replacetext_optionalfilters": "අමතර පෙරහන්:",
+ "replacetext_formovedpages": "ගෙනගිය පිටු සඳහා:",
+ "replacetext_watchmovedpages": "මෙම පිටු මුර කරන්න",
+ "replacetext_invertselections": "තෝරාගැනුම් යටිකුරු කරන්න",
+ "replacetext_replace": "ප්‍රතිස්ථාපනය",
+ "replacetext_return": "නැවතත් ආකෘතිපත්‍රයට.",
+ "replacetext_continue": "ඉදිරියට යන්න",
+ "replacetext_editsummary": "පෙළ ප්‍රතිස්ථාපනය - \"$1\" වෙත \"$2\""
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/sk.json b/www/wiki/extensions/ReplaceText/i18n/sk.json
new file mode 100644
index 00000000..42d3b0f4
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/sk.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Helix84",
+ "Teslaton"
+ ]
+ },
+ "replacetext": "Nahradiť text",
+ "replacetext-desc": "Poskytuje [[Special:ReplaceText|špeciálnu stránku]], ktorá správcom umožňuje globálne nájsť a nahradiť text na všetkých stránkach celej wiki.",
+ "replacetext_docu": "Nájsť text na všetkých stránkach tejto wiki a nahradiť ho iným textom môžete tak, že sem napíšete texty a stlačíte „Pokračovať”. Potom sa vám zobrazí zoznam stránok obsahujúcich hľadaný text a môžete si zvoliť tie, na ktorých ho chcete nahradiť. V histórii úprav sa zaznamená vaše meno.",
+ "replacetext_originaltext": "Pôvodný text:",
+ "replacetext_replacementtext": "Nahradiť textom:",
+ "replacetext_useregex": "Použiť regulárne výrazy",
+ "replacetext_regexdocu": "(Príklad: výraz „a(.*)c“ pre „Pôvodný text“ a „ac$1“ pre „Nahradiť textom“ nahradí „abc“ textom „acb“.)",
+ "replacetext_optionalfilters": "Nepovinné filtre:",
+ "replacetext_categorysearch": "Nahradiť iba v kategórii:",
+ "replacetext_prefixsearch": "Nahradiť iba v stránkach s predponou:",
+ "replacetext_editpages": "Nahradiť text v obsahu stránok",
+ "replacetext_movepages": "Nahradiť text v názvoch stránok, keď je to možné",
+ "replacetext_givetarget": "Musíte zadať reťazec, ktorý sa má nahradiť.",
+ "replacetext_nonamespace": "Musíte vybrať aspoň jeden menný priestor.",
+ "replacetext_editormove": "Musíte vybrať aspoň jednu z volieb nahrádzania.",
+ "replacetext_choosepagesforedit": "Prosím, vyberte {{PLURAL:$3|stránku, na ktorej|stránky, na ktorých}} chcete nahradiť „$1“ za „$2“:",
+ "replacetext_choosepagesformove": "Nahradiť text „$1“ textom „$2“ v {{PLURAL:$3|názve nasledovnej stránky|názvoch nasledovných stránok}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|Nasledovnú stránku|Nasledovné stránky}} nemožno presunúť:",
+ "replacetext_formovedpages": "Pri presunutých stránkach:",
+ "replacetext_savemovedpages": "Ukladať staré názvy ako presmerovania na nové názvy",
+ "replacetext_watchmovedpages": "Sledovať tieto stránky",
+ "replacetext_invertselections": "Invertovať výber",
+ "replacetext_replace": "Nahradiť",
+ "replacetext_success": "Text „$1” bude nahradený textom „$2” na $3 {{PLURAL:$3|stránke|stránkach}}.",
+ "replacetext_noreplacement": "Nenašli sa žiadne stránky obsahujúce text „$1”.",
+ "replacetext_nomove": "Neboli nájdené žiadne stránky, ktorých názov obsahuje „$1“.",
+ "replacetext_nosuchcategory": "Žiadna kategória s názvom „$1“ neexistuje.",
+ "replacetext_return": "Späť na formulár.",
+ "replacetext_warning": "'''Upozornenie:''' $1 {{PLURAL:$1|stránka|stránky|stránok}} už obsahuje text „$2”, ktorým chcete pôvodný 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.",
+ "replacetext_blankwarning": "Pretože text, ktorým text chcete nahradiť je prázdny, operácia bude nevratná. Pokračovať?",
+ "replacetext_continue": "Pokračovať",
+ "replacetext_editsummary": "Nahradenie textu „$1” textom „$2”",
+ "right-replacetext": "Vykonať náhradu reťazcov na celej wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/sr-ec.json b/www/wiki/extensions/ReplaceText/i18n/sr-ec.json
new file mode 100644
index 00000000..df6dabbb
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/sr-ec.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Milicevic01",
+ "Rancher",
+ "Sasa Stefanovic",
+ "Жељко Тодоровић",
+ "Михајло Анђелковић",
+ "Сербијана"
+ ]
+ },
+ "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|следеће странице|следећих $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_return": "Назад на образац.",
+ "replacetext_continue": "Настави",
+ "replacetext_editsummary": "Замена текста — „$1” у „$2”",
+ "right-replacetext": "замењивање ниски на целом викију"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/sr-el.json b/www/wiki/extensions/ReplaceText/i18n/sr-el.json
new file mode 100644
index 00000000..33b5fa0e
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/sr-el.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michaello",
+ "Milicevic01",
+ "Rancher",
+ "Жељко Тодоровић"
+ ]
+ },
+ "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 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 $3 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": "Zameni",
+ "replacetext_success": "„$1“ će biti zamenjeno sa „$2“ u $3 {{PLURAL:$3|strani|strana}}.",
+ "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": "Nazad na obrazac.",
+ "replacetext_continue": "Nastavi",
+ "replacetext_editsummary": "Zamena teksta - '$1' u '$2'",
+ "right-replacetext": "zamenjivanje niski na celom vikiju"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/sv.json b/www/wiki/extensions/ReplaceText/i18n/sv.json
new file mode 100644
index 00000000..bd2780bc
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/sv.json
@@ -0,0 +1,50 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cybjit",
+ "Fluff",
+ "M.M.S.",
+ "Martinwiss",
+ "Najami",
+ "Per",
+ "Rotsee",
+ "WikiPhoenix"
+ ]
+ },
+ "replacetext": "Ersätt text",
+ "replacetext-desc": "Låter administratörer [[Special:ReplaceText|ersätta text]] på alla innehållssidor på en wiki",
+ "replacetext_docu": "För att ersätta en textsträng med en annan på alla vanliga sidor i den här wikin, skriv in de två texterna här och klicka på \"{{int:replacetext_continue}}\".\nDu kommer sedan att visas på en lista över sidor som innehåller söktexten, där du kan välja de som du vill ersätta i.\nDitt namn kommer visas i sidhistoriken som den som är ansvarig för ändringarna.",
+ "replacetext_originaltext": "Originaltext:",
+ "replacetext_replacementtext": "Ersättningstext:",
+ "replacetext_useregex": "Använd reguljära uttryck",
+ "replacetext_regexdocu": "(T.ex: värden på \"a(.*)c\" för \"{{int:replacetext_originaltext}}\" och \"ac$1\" för \"{{int:replacetext_replacementtext}}\" skulle ersätta \"abc\" med \"acb\".)",
+ "replacetext_optionalfilters": "Valbara filter:",
+ "replacetext_categorysearch": "Ersätt endast i kategori:",
+ "replacetext_prefixsearch": "Ersätt endast sidor med prefixet:",
+ "replacetext_editpages": "Ersätt text i sidinnehåll",
+ "replacetext_movepages": "Ersätt text i sidtitlar när det är möjligt",
+ "replacetext_givetarget": "Du måste ange en textsträng som ska ersättas.",
+ "replacetext_nonamespace": "Du måste ange minst en namnrymd.",
+ "replacetext_editormove": "Du måste ange minst ett alternativ för ersättning.",
+ "replacetext_choosepagesforedit": "Var god ange för {{PLURAL:$3|vilken sida|vilka sidor}} du vill ersätta '$1' med '$2':",
+ "replacetext_choosepagesformove": "Ersätt '$1' med '$2' i {{PLURAL:$3|namnet på den följande sidan|namnen på de följande sidorna}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|Den följande sidan|De följande sidorna}} kan inte flyttas:",
+ "replacetext_formovedpages": "För flyttade sidor:",
+ "replacetext_savemovedpages": "Spara de gamla artikeltitlarna som omdirigeringar till de nya",
+ "replacetext_watchmovedpages": "Bevaka de här sidorna",
+ "replacetext_invertselections": "Invertera val",
+ "replacetext_replace": "Ersätt",
+ "replacetext_success": "'$1' kommer att ersättas med '$2' på $3 {{PLURAL:$3|sida|sidor}}.",
+ "replacetext_noreplacement": "Inga sidor hittades med strängen \"$1\".",
+ "replacetext_nomove": "Inga sidor hittades som innehåller \"$1\" i titeln.",
+ "replacetext_nosuchcategory": "Det finns inte någon kategori med namnet \"$1\".",
+ "replacetext_return": "Tillbaka till formuläret.",
+ "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_announce": "Meddela dessa redigeringar via $1 och bevakningslistor",
+ "replacetext_editsummary": "Textersättning - \"$1\" till \"$2\"",
+ "right-replacetext": "Genomför textersättningar på hela wikin",
+ "action-replacetext": "genomför textersättningar på hela wikin",
+ "replacetext_reminder": "För att även ändra länkar till denna sida på andra sidor, gå till $1."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/sw.json b/www/wiki/extensions/ReplaceText/i18n/sw.json
new file mode 100644
index 00000000..c821aff4
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/sw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Stephenwanjau"
+ ]
+ },
+ "replacetext_continue": "Endelea"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ta.json b/www/wiki/extensions/ReplaceText/i18n/ta.json
new file mode 100644
index 00000000..30c4c5b0
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ta.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shanmugamp7"
+ ]
+ },
+ "replacetext_originaltext": "மூலவுரை:",
+ "replacetext_replacementtext": "மாற்றப்பட வேண்டிய உரை:",
+ "replacetext_watchmovedpages": "இந்தப் பக்கங்களை கவனிக்கவும்",
+ "replacetext_replace": "மாற்றுக",
+ "replacetext_continue": "தொடரவும்"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/te.json b/www/wiki/extensions/ReplaceText/i18n/te.json
new file mode 100644
index 00000000..c4c1b737
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/te.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Veeven"
+ ]
+ },
+ "replacetext_originaltext": "అసలు పాఠ్యం:",
+ "replacetext_replacementtext": "మార్పిడి పాఠ్యం:",
+ "replacetext_optionalfilters": "ఐచ్చిక వడపోతలు:",
+ "replacetext_cannotmove": "ఈ {{PLURAL:$1|పేజీని|$1 పేజీలను}} తరలించలేరు:",
+ "replacetext_continue": "కొనసాగించు"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/th.json b/www/wiki/extensions/ReplaceText/i18n/th.json
new file mode 100644
index 00000000..00a1afeb
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/th.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ans",
+ "Passawuth"
+ ]
+ },
+ "replacetext_originaltext": "ข้อความดั้งเดิม:"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/tl.json b/www/wiki/extensions/ReplaceText/i18n/tl.json
new file mode 100644
index 00000000..fae00350
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/tl.json
@@ -0,0 +1,40 @@
+{
+ "@metadata": {
+ "authors": [
+ "AnakngAraw"
+ ]
+ },
+ "replacetext": "Palitan ang teksto",
+ "replacetext-desc": "Nagbibigay ng isang [[Special:ReplaceText|natatanging pahina]] upang mapahintulutan ang mga tagapangasiwa na makagawa ng isang baging na pandaidigang hanapin-at-palitan sa ibabaw ng lahat ng mga pahina ng nilalaman ng isang wiki",
+ "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 \"{{int:replacetext_continue}}\". 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 \"a(.*) c\" para sa \"{{int:replacetext_originaltext}}\" at \"ac$1\" para sa \"{{int:replacetext_replacementtext}}\" na papalitan ang \"abc\" ng \"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:",
+ "replacetext_editpages": "Palitan ang teksto sa loob ng mga nilalaman ng pahina",
+ "replacetext_movepages": "Palitan ang tekstong nasa loob ng mga pamagat na pampahina, kapag maaari",
+ "replacetext_givetarget": "Dapat mong tukuyin ang bagting na papalitan.",
+ "replacetext_nonamespace": "Dapat kang pumili ng kahit na isang puwang na pampangalan.",
+ "replacetext_editormove": "Dapat kang pumili ng kahit na isa sa mga mapipiling pagpapalit.",
+ "replacetext_choosepagesforedit": "Pakipili ang {{PLURAL:$3|pahina|mga pahina}} kung saan mo naisa na palitan ang '$1' ng '$2':",
+ "replacetext_choosepagesformove": "Palitan ang \"$1\" ng \"$2\" sa loob ng {{PLURAL:$3|pangalan ng sumusunod na pahina|mga pangalan ng sumusunod na mga pahina}}:",
+ "replacetext_cannotmove": "Hindi maililipat ang sumusunod na {{PLURAL:$1|pahina|mga pahina}}:",
+ "replacetext_formovedpages": "Para sa mga pahinang inilipat:",
+ "replacetext_savemovedpages": "Sagipin ang lumang mga pamagat bilang mga pampunta patungo sa bagong mga pamagat",
+ "replacetext_watchmovedpages": "Bantayan ang mga pahinang ito",
+ "replacetext_invertselections": "Baligtarin ang mga pagpipilian",
+ "replacetext_replace": "Palitan",
+ "replacetext_success": "Ang '$1' ay mapapalitan ng '$2' sa loob ng $3 {{PLURAL:$3|pahina|mga pahina}}.",
+ "replacetext_noreplacement": "Walang natagpuang mga pahinang naglalaman ng bagting na '$1'.",
+ "replacetext_nomove": "Walang natagpuang mga pahina na naglalaman ang pamagat ng \"$1\".",
+ "replacetext_nosuchcategory": "Walang kategoryang umiiral na may pangalang \"$1\".",
+ "replacetext_return": "Bumalik sa pormularyo.",
+ "replacetext_warning": "'''Babala:''' Mayroong {{PLURAL:$1|$1 pahinang naglalaman na|$1 mga pahinang naglalaman na}} ng pamalit na bagting, '$2'.\nKapag ginawa mo ang pagpapalit na ito hindi mo na maihihiwalay ang mga pamalit mo mula sa mga bagting na ito.",
+ "replacetext_blankwarning": "Dahil sa walang laman ang bagting ng pamalit, hindi na maibabalik pa sa dati ang gawaing ito/\nNaisa mo bang magpatuloy pa?",
+ "replacetext_continue": "Magpatuloy",
+ "replacetext_editsummary": "Palitan ang tekso - '$1' papunta sa '$2'",
+ "right-replacetext": "Gumawa ng pagpapalit ng bagting sa buong wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/tr.json b/www/wiki/extensions/ReplaceText/i18n/tr.json
new file mode 100644
index 00000000..e02dd2bc
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/tr.json
@@ -0,0 +1,39 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joseph",
+ "Vito Genovese"
+ ]
+ },
+ "replacetext": "Metni değiştir",
+ "replacetext-desc": "Yöneticilere, bir vikideki tüm içerik sayfalarında bir küresel dizi bul-ve-değiştir yapmalarına izin veren bir [[Special:ReplaceText|özel sayfa]] sağlar",
+ "replacetext_docu": "Bu viki üzerindeki tüm sayfalarda bir metin dizgisini diğer bir dizgi ile değiştirmek için, iki metin parçasını girin ve 'Devam' seçeneğini seçin.\nSonrasında size arama metnini gösteren sayfaların bir listesi gösterilecek ve değiştirmek istediklerinizi seçebileceksiniz.\nAdınız, değişiklikleri gerçekleştiren kullanıcı olarak sayfa geçmişlerinde görülecek.",
+ "replacetext_originaltext": "Orijinal metin:",
+ "replacetext_replacementtext": "Yerine konulacak metin:",
+ "replacetext_optionalfilters": "Opsiyonel filtreler",
+ "replacetext_categorysearch": "Sadece kategoride değiştir:",
+ "replacetext_prefixsearch": "Sadece şu öneke sahip sayfalarda değiştir:",
+ "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 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:",
+ "replacetext_cannotmove": "Aşağıdaki {{PLURAL:$1|sayfa|sayfalar}} taşınamaz:",
+ "replacetext_formovedpages": "Taşınan sayfalar için:",
+ "replacetext_savemovedpages": "Eski başlıkları yeni başlıklara yönlendirmeler olarak sakla",
+ "replacetext_watchmovedpages": "Bu sayfaları izle",
+ "replacetext_invertselections": "Seçimleri ters çevir",
+ "replacetext_replace": "Değiştir",
+ "replacetext_success": "$3 {{PLURAL:$3|sayfada|sayfada}} \"$1\" ile \"$2\" değiştirildi.",
+ "replacetext_noreplacement": "\"$1\" dizgisini içeren herhangi bir sayfa bulunamadı.",
+ "replacetext_nomove": "\"$1\" ibaresini içeren isimli sayfa bulunamadı.",
+ "replacetext_nosuchcategory": "\"$1\" adında bir kategori mevcut değil.",
+ "replacetext_return": "Forma dön.",
+ "replacetext_warning": "\"$2\" değiştirme dizgisini halihazırda içeren {{PLURAL:$1|$1 sayfa|$1 sayfa}} mevcut.\nBu değişikliği yaparsanız değişikliklerinizi bu dizgilerden ayırma imkanınız olmayacak.\nDeğ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.\nDevam etmek istiyor musunuz?",
+ "replacetext_continue": "Devam",
+ "replacetext_editsummary": "Metin değiştir - \"$1\" yerine \"$2\"",
+ "right-replacetext": "Vikinin tamamında dizgileri değiştirir"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/tt-cyrl.json b/www/wiki/extensions/ReplaceText/i18n/tt-cyrl.json
new file mode 100644
index 00000000..0e197b80
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/tt-cyrl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ильнар"
+ ]
+ },
+ "replacetext_continue": "Дәвам итү"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/uk.json b/www/wiki/extensions/ReplaceText/i18n/uk.json
new file mode 100644
index 00000000..6b11ad89
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/uk.json
@@ -0,0 +1,46 @@
+{
+ "@metadata": {
+ "authors": [
+ "AS",
+ "Andriykopanytsia",
+ "Base",
+ "Prima klasy4na",
+ "Ата",
+ "Ahonc"
+ ]
+ },
+ "replacetext": "Заміна тексту",
+ "replacetext-desc": "Додає [[Special:ReplaceText|спеціальну сторінку]], що дозволяє адміністраторам робити глобальну заміну зазначеного тексту на всіх звичайних сторінках вікі",
+ "replacetext_docu": "Щоб замінити один текст на інший на всіх сторінках вікі, введіть тут два фрагменти тексту і натисніть \"{{int:replacetext_continue}}\".\nПісля цього Вам буде запропоновано список всіх сторінок, що містять замінюваний текст, і Ви зможете вибрати ті, в яких потрібно виконати заміни. \nВаше ім'я буде вказано біля змін в історії редагувань сторінок.",
+ "replacetext_originaltext": "Оригінальний текст:",
+ "replacetext_replacementtext": "Замінити на:",
+ "replacetext_useregex": "Використовувати регулярні вирази",
+ "replacetext_regexdocu": "(Наприклад: вирази «a(.*)c» у полі «{{int:replacetext_originaltext}}» і «ac$1» у полі «{{int:replacetext_replacementtext}}» призведе до заміни «abc» на «acb».)",
+ "replacetext_optionalfilters": "Додаткові фільтри:",
+ "replacetext_categorysearch": "Замінити тільки в категорії:",
+ "replacetext_prefixsearch": "Замінити тільки на сторінках, чиї назви починаються на:",
+ "replacetext_editpages": "Заміна тексту у вмісті сторінки",
+ "replacetext_movepages": "Замінити текст у назвах сторінок, якщо можливо",
+ "replacetext_givetarget": "Ви повинні вказати рядок, який потрібно замінити.",
+ "replacetext_nonamespace": "Ви повинні вибрати принаймні один простір назв.",
+ "replacetext_editormove": "Ви повинні вибрати принаймні один варіант заміни.",
+ "replacetext_choosepagesforedit": "Будь ласка, виберіть {{PLURAL:$3|1=сторінку, в якій|сторінки, в яких}} ви хочете здійснити заміну «$1» на «$2»:",
+ "replacetext_choosepagesformove": "Замінити «$1» на «$2» в {{PLURAL:$3|1=назві наступної сторінки|назвах наступних сторінок}}:",
+ "replacetext_cannotmove": "{{PLURAL:$1|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": "'''Увага:''' Знайдено {{PLURAL:$1|$1 сторінку, що містить|$1 сторінки, що містять|$1 сторінок, що містять}} текст на який заміняти, «$2». Якщо Ви проведете цю заміну, то не зможете відділити Ваші заміни від тих рядків, що є вже.",
+ "replacetext_blankwarning": "'''Увага:''' Так, як текст для заміни порожній, операцію не можна буде скасувати.",
+ "replacetext_continue": "Продовжити",
+ "replacetext_editsummary": "Заміна тексту — „$1“ на „$2“",
+ "right-replacetext": "виконання заміни тексту по всій вікі",
+ "action-replacetext": "виконання замін тексту по всій вікі"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/ur.json b/www/wiki/extensions/ReplaceText/i18n/ur.json
new file mode 100644
index 00000000..71606ceb
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/ur.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "පසිඳු කාවින්ද",
+ "Muhammad Shuaib"
+ ]
+ },
+ "replacetext_originaltext": "اصل متن:",
+ "replacetext_replacementtext": "متبادل متن:",
+ "replacetext_useregex": "ریگیولر ایکسپریشنز استعمال کریں",
+ "replacetext_optionalfilters": "اختیاری فلٹر:",
+ "replacetext_categorysearch": "محض اس زمرہ میں تبدیلی کریں:",
+ "replacetext_prefixsearch": "محض اس سابقہ والے صفحات میں تبدیلی کریں:",
+ "replacetext_editpages": "صفحہ کے مواد میں تبدیلی کریں",
+ "replacetext_movepages": "عناوین میں تبدیلی کریں اگر ممکن ہو",
+ "replacetext_watchmovedpages": "ان صفحات کو زیر نظر کریں",
+ "replacetext_invertselections": "انتخاب معکوس",
+ "replacetext_replace": "کو تبدیل",
+ "replacetext_continue": "جاری رکھیں"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/vep.json b/www/wiki/extensions/ReplaceText/i18n/vep.json
new file mode 100644
index 00000000..01fdf4b9
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/vep.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Игорь Бродский"
+ ]
+ },
+ "replacetext_originaltext": "Originaline tekst",
+ "replacetext_watchmovedpages": "Kacelta nened lehtpoled",
+ "replacetext_return": "Pörtas formannoks."
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/vi.json b/www/wiki/extensions/ReplaceText/i18n/vi.json
new file mode 100644
index 00000000..68228d78
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/vi.json
@@ -0,0 +1,44 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minh Nguyen",
+ "Tuankiet65",
+ "Vinhtantran",
+ "Trần Nguyễn Minh Huy"
+ ]
+ },
+ "replacetext": "Thay thế văn bản",
+ "replacetext-desc": "Cung cấp một [[Special:ReplaceText|trang đặc biệt]] để cho phép bảo quản viên thực hiện tìm-kiếm-và-thay-thế thống nhất trên tất cả các trang có nội dung tại một wiki",
+ "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 “{{int:replacetext_continue}}”. 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 gốc:",
+ "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ố:",
+ "replacetext_editpages": "Thay thế văn bản trong nội dung trang",
+ "replacetext_movepages": "Thay văn bản trong tên trang nếu có thể",
+ "replacetext_givetarget": "Bạn cần phải định rõ văn bản để thay thế.",
+ "replacetext_nonamespace": "Cần phải chọn ít nhất một không gian tên.",
+ "replacetext_editormove": "Bạn cần phải chọn ít nhất một trong những tùy chọn thay thế.",
+ "replacetext_choosepagesforedit": "Thay “$1” bằng “$2” trong nội dung của {{PLURAL:$3|trang|những trang}} sau:",
+ "replacetext_choosepagesformove": "Thay “$1” bằng “$2” trong tên của {{PLURAL:$3|trang|các trang}} sau:",
+ "replacetext_cannotmove": "Không thể di chuyển {{PLURAL:$1|trang|$1 trang}} sau:",
+ "replacetext_formovedpages": "Đối với trang đã di chuyển:",
+ "replacetext_savemovedpages": "Lưu các tên cũ để đổi hướng đến tên mới",
+ "replacetext_watchmovedpages": "Theo dõi các trang này",
+ "replacetext_invertselections": "Đảo ngược các lựa chọn",
+ "replacetext_replace": "Thay thế",
+ "replacetext_success": "“$1” sẽ được thay bằng “$2” trong $3 trang.",
+ "replacetext_noreplacement": "Không tìm thấy trang nào có chứa chuỗi ‘$1’.",
+ "replacetext_nomove": "Không tìm thấy trang nào với “$1” trong tên.",
+ "replacetext_nosuchcategory": "Không có thể loại với tên “$1”.",
+ "replacetext_return": "Trở lại biểu mẫu.",
+ "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_editsummary": "Thay thế văn bản – “$1” thành “$2”",
+ "right-replacetext": "Thay thế văn bản trên toàn wiki",
+ "action-replacetext": "thay thế văn bản trên toàn wiki"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/vo.json b/www/wiki/extensions/ReplaceText/i18n/vo.json
new file mode 100644
index 00000000..310b48f6
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/vo.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya",
+ "Smeira"
+ ]
+ },
+ "replacetext": "Plaädön vödemi",
+ "replacetext-desc": "Jafön [[Special:ReplaceText|padi patik]] ad mögükön guvanes sukami e plaädami valöpikis, ninädapadis valik vüka seimik tefölis.",
+ "replacetext_originaltext": "Rigavödem:",
+ "replacetext_replacementtext": "Plaädamavödem:",
+ "replacetext_movepages": "Plaädön vödemi i pö padatiäds, ven mögos",
+ "replacetext_choosepagesforedit": "Välolös {{PLURAL:$3|padi, su kel|padis, su kels}} vilol plaädön vödemi: „$1“ me vödem: „$2“:",
+ "replacetext_cannotmove": "{{PLURAL:$1|Pad|Pads}} fovik no kanons patopätükön:",
+ "replacetext_replace": "Plaädön",
+ "replacetext_success": "Vödem: „$1“ poplaädon dub vödem: „$2“ su {{PLURAL:$3|pad bal|pads $3}}.",
+ "replacetext_noreplacement": "Pads nonik labü vödem: „$1“ petuvons.",
+ "replacetext_blankwarning": "Bi plaädamavödem binon vägik, dun at no kanon pasädunön. Vilol-li fümiko ledunön plaädami?",
+ "replacetext_continue": "Ledunön",
+ "replacetext_editsummary": "Vödemiplaädam - „$1“ ad „$2“",
+ "right-replacetext": "Ledunön vödemiplaädami in vük lölik"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/zh-hans.json b/www/wiki/extensions/ReplaceText/i18n/zh-hans.json
new file mode 100644
index 00000000..f784386e
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/zh-hans.json
@@ -0,0 +1,49 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liangent",
+ "Onecountry",
+ "PhiLiP",
+ "Yfdyh000",
+ "Mywood",
+ "Impersonator 1",
+ "Liuxinyu970226"
+ ]
+ },
+ "replacetext": "替换文字",
+ "replacetext-desc": "提供[[Special:ReplaceText|特殊页面]]让管理员可以对wiki的所有页面内容执行查找和替换。",
+ "replacetext_docu": "要替换此wiki内所有页面文字的字串,请将“原文字”及“替换文字”分别填入以下两个栏位之中,然后按“{{int:replacetext_continue}}”。接下来会列出所有含原文字的页面供您选择在哪些页面进行替换。页面改动历史会显示您是进行此次改动的用户。",
+ "replacetext_originaltext": "原文字:",
+ "replacetext_replacementtext": "替换文字:",
+ "replacetext_useregex": "使用正则表达式",
+ "replacetext_regexdocu": "(例如:在“{{int:replacetext_originaltext}}”填入“a(.*)c”并在“{{int:replacetext_replacementtext}}”填入“ac$1”可以将“abc”替换为“acb”。)",
+ "replacetext_optionalfilters": "可选过滤器:",
+ "replacetext_categorysearch": "仅替换该分类中的页面:",
+ "replacetext_prefixsearch": "仅替换带该前缀页面:",
+ "replacetext_editpages": "仅在页面内容中替换",
+ "replacetext_movepages": "可能的话,在页面名称中替换",
+ "replacetext_givetarget": "必须指定查找的字符串。",
+ "replacetext_nonamespace": "您必须选择至少一个名字空间。",
+ "replacetext_editormove": "必须选择至少一个替换选项。",
+ "replacetext_choosepagesforedit": "在以下{{PLURAL:$3|页面}}的文本中,将“$1”替换成“$2”。",
+ "replacetext_choosepagesformove": "将{{PLURAL:$3|以下页面中标题|以下$3个页面中标题}}的“$1”替换为“$2”:",
+ "replacetext_cannotmove": "无法移动以下{{PLURAL:$1|页面|$1个页面}}:",
+ "replacetext_formovedpages": "对于移动的页面:",
+ "replacetext_savemovedpages": "保存旧标题,作为重定向至新标题",
+ "replacetext_watchmovedpages": "监视这些页面",
+ "replacetext_invertselections": "反选",
+ "replacetext_replace": "替换",
+ "replacetext_success": "在{{PLURAL:$3|$3个页面}}中,“$1”将被替换为“$2”。",
+ "replacetext_noreplacement": "找不到包含字符串“$1”的页面。",
+ "replacetext_nomove": "找不到标题包含“$1”的页面。",
+ "replacetext_nosuchcategory": "找不到名为“$1”的分类。",
+ "replacetext_return": "返回表格。",
+ "replacetext_warning": "'''警告:'''有{{PLURAL:$1|$1个页面已经包含}}替换字符串“$2”。如果您进行此次替换,您将无法从这些字符串中分离您的替换文字。",
+ "replacetext_blankwarning": "'''警告:'''因为替换字串为空,此次操作将不可逆。",
+ "replacetext_continue": "继续",
+ "replacetext_announce": "通过$1和监视列表通知这些编辑",
+ "replacetext_editsummary": "文本替换 - 替换“$1”为“$2”",
+ "right-replacetext": "在整个wiki进行字符串替换",
+ "action-replacetext": "在整个wiki进行字符串替换",
+ "replacetext_reminder": "要同时修改其他页面中链入此页面的链接,请前往$1。"
+}
diff --git a/www/wiki/extensions/ReplaceText/i18n/zh-hant.json b/www/wiki/extensions/ReplaceText/i18n/zh-hant.json
new file mode 100644
index 00000000..504c4408
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/i18n/zh-hant.json
@@ -0,0 +1,51 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ch.Andrew",
+ "Cwlin0416",
+ "Justincheng12345",
+ "Mark85296341",
+ "Roc michael",
+ "Sheepy",
+ "Wrightbus",
+ "LNDDYL",
+ "Kly"
+ ]
+ },
+ "replacetext": "取代文字",
+ "replacetext-desc": "提供管理員可以對全站頁面內容進行搜尋及取代的 [[Special:ReplaceText|特殊頁面]]。",
+ "replacetext_docu": "要取代此 Wiki 內所有頁面的文字,請分別填入以下「原始文字」及「取代文字」兩個欄位,然後點選 \"{{int:replacetext_continue}}\"。\n接著會顯示所有包含搜尋文字的頁面,您可以選擇您要取代的頁面。\n您所做的任何變更會顯示在頁面的歷史記錄中以示負責。",
+ "replacetext_originaltext": "原始文字:",
+ "replacetext_replacementtext": "取代文字:",
+ "replacetext_useregex": "使用正則表示法",
+ "replacetext_regexdocu": "(例:在 \"{{int:replacetext_originaltext}}\" 中填入 \"a(.*)c\" 並在 \"{{int:replacetext_replacementtext}}\" 填入 \"ac$1\" 可將 \"abc\" 替換為 \"acb\"。)",
+ "replacetext_optionalfilters": "過濾條件選項:",
+ "replacetext_categorysearch": "僅取代頁面於分類:",
+ "replacetext_prefixsearch": "僅取代頁面含字首:",
+ "replacetext_editpages": "取代頁面內容中的文字",
+ "replacetext_movepages": "取代頁面標題的文字 (當可以時)",
+ "replacetext_givetarget": "您必須指定要被取代的字串。",
+ "replacetext_nonamespace": "您至少要選擇一個命名空間。",
+ "replacetext_editormove": "您至少要勾選一個取代選項。",
+ "replacetext_choosepagesforedit": "將下列{{PLURAL:$3|頁面|$3 個頁面}}內容中的 \"$1\" 取代為 \"$2\":",
+ "replacetext_choosepagesformove": "將下列{{PLURAL:$3|頁面|$3 個頁面}}標題中的 \"$1\" 取代為 \"$2\":",
+ "replacetext_cannotmove": "無法移動以下{{PLURAL:$1|頁面|$1 個頁面}}:",
+ "replacetext_formovedpages": "已移動頁面:",
+ "replacetext_savemovedpages": "建立舊標題重新導向頁面至新標題",
+ "replacetext_watchmovedpages": "監視這些頁面",
+ "replacetext_invertselections": "反向選擇",
+ "replacetext_replace": "取代",
+ "replacetext_success": "{{PLURAL:$3|1 個頁面|$3 個頁面}}中的 \"$1\" 將會被取代為 \"$2\"。",
+ "replacetext_noreplacement": "沒有任何頁面內容包含字串 \"$1\"。",
+ "replacetext_nomove": "沒有任何頁面標題包含字串 \"$1\"。",
+ "replacetext_nosuchcategory": "沒有任何分類名稱為 \"$1\"。",
+ "replacetext_return": "返回表單。",
+ "replacetext_warning": "'''警告:'''目前已有 $1 個頁面包含取代的字串 \"$2\",若您進行取代將無法區別原本存在的字串以及取代的字串。",
+ "replacetext_blankwarning": "'''警告:'''因取代的字串為空白,此操作將無法還原。",
+ "replacetext_continue": "繼續",
+ "replacetext_announce": "透過 Special:RecentChanges 與監視清單來通知這些編輯。",
+ "replacetext_editsummary": "文字取代 - \"$1\" 取代為 \"$2\"",
+ "right-replacetext": "對整個 Wiki 進行字串取代。",
+ "action-replacetext": "對整個 Wiki 進行字串取代。",
+ "replacetext_reminder": "要同時變動在其它頁面上連至此頁面的連結,請前往 $1。"
+}
diff --git a/www/wiki/extensions/ReplaceText/maintenance/replaceAll.php b/www/wiki/extensions/ReplaceText/maintenance/replaceAll.php
new file mode 100755
index 00000000..f1078bdc
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/maintenance/replaceAll.php
@@ -0,0 +1,408 @@
+#!/usr/bin/php
+<?php
+/**
+ * Insert jobs into the job queue to replace text bits.
+ * Or execute immediately... your choice.
+ *
+ * Copyright © 2014 NicheWork, LLC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @category Maintenance
+ * @package ReplaceText
+ * @author Mark A. Hershberger <mah@nichework.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GPL-2.0-or-later
+ * @link https://www.mediawiki.org/wiki/Extension:Replace_Text
+ *
+ */
+// @codingStandardsIgnoreStart
+$IP = getenv( "MW_INSTALL_PATH" ) ? getenv( "MW_INSTALL_PATH" ) : __DIR__ . "/../../..";
+if ( !is_readable( "$IP/maintenance/Maintenance.php" ) ) {
+ die( "MW_INSTALL_PATH needs to be set to your MediaWiki installation.\n" );
+}
+require_once ( "$IP/maintenance/Maintenance.php" );
+// @codingStandardsIgnoreEnd
+
+/**
+ * Maintenance script that replaces text in pages
+ *
+ * @ingroup Maintenance
+ * @SuppressWarnings(StaticAccess)
+ * @SuppressWarnings(LongVariable)
+ */
+class ReplaceAll extends Maintenance {
+ private $user;
+ private $target;
+ private $replacement;
+ private $namespaces;
+ private $category;
+ private $prefix;
+ private $useRegex;
+ private $titles;
+ private $defaultContinue;
+ private $doAnnounce;
+
+ public function __construct() {
+ parent::__construct();
+ $this->mDescription = "CLI utility to replace text wherever it is ".
+ "found in the wiki.";
+
+ $this->addArg( "target", "Target text to find.", false );
+ $this->addArg( "replace", "Text to replace.", false );
+
+ $this->addOption( "dry-run", "Only find the texts, don't replace.",
+ false, false, 'n' );
+ $this->addOption( "regex", "This is a regex (false).",
+ false, false, 'r' );
+ $this->addOption( "user", "The user to attribute this to (uid 1).",
+ false, true, 'u' );
+ $this->addOption( "yes", "Skip all prompts with an assumed 'yes'.",
+ false, false, 'y' );
+ $this->addOption( "summary", "Alternate edit summary. (%r is where to ".
+ " place the replacement text, %f the text to look for.)",
+ false, true, 's' );
+ $this->addOption( "nsall", "Search all canonical namespaces (false). " .
+ "If true, this option overrides the ns option.", false, false, 'a' );
+ $this->addOption( "ns", "Comma separated namespaces to search in " .
+ "(Main) .", false, true );
+ $this->addOption( "replacements", "File containing the list of " .
+ "replacements to be made. Fields in the file are tab-separated. " .
+ "See --show-file-format for more information.", false, true, "f" );
+ $this->addOption( "show-file-format", "Show a description of the " .
+ "file format to use with --replacements.", false, false );
+ $this->addOption( "no-announce", "Do not announce edits on Special:RecentChanges or " .
+ "watchlists.", false, false, "m" );
+ $this->addOption( "debug", "Display replacements being made.", false, false );
+ $this->addOption( "listns", "List out the namespaces on this wiki.",
+ false, false );
+
+ // MW 1.28
+ if ( method_exists( $this, 'requireExtension' ) ) {
+ $this->requireExtension( 'Replace Text' );
+ }
+ }
+
+ private function getUser() {
+ $userReplacing = $this->getOption( "user", 1 );
+
+ $user = is_numeric( $userReplacing ) ?
+ User::newFromId( $userReplacing ) :
+ User::newFromName( $userReplacing );
+
+ if ( get_class( $user ) !== 'User' ) {
+ $this->error(
+ "Couldn't translate '$userReplacing' to a user.", true
+ );
+ }
+
+ return $user;
+ }
+
+ private function getTarget() {
+ $ret = $this->getArg( 0 );
+ if ( !$ret ) {
+ $this->error( "You have to specify a target.", true );
+ }
+ return [ $ret ];
+ }
+
+ private function getReplacement() {
+ $ret = $this->getArg( 1 );
+ if ( !$ret ) {
+ $this->error( "You have to specify replacement text.", true );
+ }
+ return [ $ret ];
+ }
+
+ private function getReplacements() {
+ $file = $this->getOption( "replacements" );
+ if ( !$file ) {
+ return false;
+ }
+
+ if ( !is_readable( $file ) ) {
+ throw new MWException( "File does not exist or is not readable: "
+ . "$file\n" );
+ }
+
+ $handle = fopen( $file, "r" );
+ if ( $handle === false ) {
+ throw new MWException( "Trouble opening file: $file\n" );
+ return false;
+ }
+
+ $this->defaultContinue = true;
+ // @codingStandardsIgnoreStart
+ while ( ( $line = fgets( $handle ) ) !== false ) {
+ // @codingStandardsIgnoreEnd
+ $field = explode( "\t", substr( $line, 0, -1 ) );
+ if ( !isset( $field[1] ) ) {
+ continue;
+ }
+
+ $this->target[] = $field[0];
+ $this->replacement[] = $field[1];
+ $this->useRegex[] = isset( $field[2] ) ? true : false;
+ }
+ return true;
+ }
+
+ private function shouldContinueByDefault() {
+ if ( !is_bool( $this->defaultContinue ) ) {
+ $this->defaultContinue =
+ $this->getOption( "yes" ) ?
+ true :
+ false;
+ }
+ return $this->defaultContinue;
+ }
+
+ private function getSummary( $target, $replacement ) {
+ $msg = wfMessage( 'replacetext_editsummary', $target, $replacement )->
+ plain();
+ if ( $this->getOption( "summary" ) !== null ) {
+ $msg = str_replace( [ '%f', '%r' ],
+ [ $this->target, $this->replacement ],
+ $this->getOption( "summary" ) );
+ }
+ return $msg;
+ }
+
+ private function listNamespaces() {
+ echo "Index\tNamespace\n";
+ $nsList = MWNamespace::getCanonicalNamespaces();
+ ksort( $nsList );
+ foreach ( $nsList as $int => $val ) {
+ if ( $val == "" ) {
+ $val = "(main)";
+ }
+ echo " $int\t$val\n";
+ }
+ }
+
+ private function showFileFormat() {
+echo <<<EOF
+
+The format of the replacements file is tab separated with three fields.
+Any line that does not have a tab is ignored and can be considered a comment.
+
+Fields are:
+
+ 1. String to search for.
+ 2. String to replace found text with.
+ 3. (optional) The presence of this field indicates that the previous two
+ are considered a regular expression.
+
+Example:
+
+This is a comment
+TARGET REPLACE
+regex(p*) Count the Ps; \\1 true
+
+
+EOF;
+ }
+
+ private function getNamespaces() {
+ $nsall = $this->getOption( "nsall" );
+ $ns = $this->getOption( "ns" );
+ if ( !$nsall && !$ns ) {
+ $namespaces = [ NS_MAIN ];
+ } else {
+ $canonical = MWNamespace::getCanonicalNamespaces();
+ $canonical[NS_MAIN] = "_";
+ $namespaces = array_flip( $canonical );
+ if ( !$nsall ) {
+ $namespaces = array_map(
+ function ( $n ) use ( $canonical, $namespaces ) {
+ if ( is_numeric( $n ) ) {
+ if ( isset( $canonical[ $n ] ) ) {
+ return intval( $n );
+ }
+ } else {
+ if ( isset( $namespaces[ $n ] ) ) {
+ return $namespaces[ $n ];
+ }
+ }
+ return null;
+ }, explode( ",", $ns ) );
+ $namespaces = array_filter(
+ $namespaces,
+ function ( $val ) {
+ return $val !== null;
+ } );
+ }
+ }
+ return $namespaces;
+ }
+
+ private function getCategory() {
+ $cat = null;
+ return $cat;
+ }
+
+ private function getPrefix() {
+ $prefix = null;
+ return $prefix;
+ }
+
+ private function useRegex() {
+ return [ $this->getOption( "regex" ) ];
+ }
+
+ private function getTitles( $res ) {
+ if ( !$this->titles || count( $this->titles ) == 0 ) {
+ $this->titles = [];
+ foreach ( $res as $row ) {
+ $this->titles[] = Title::makeTitleSafe(
+ $row->page_namespace,
+ $row->page_title
+ );
+ }
+ }
+ return $this->titles;
+ }
+
+ private function listTitles( $res ) {
+ $ret = false;
+ foreach ( $this->getTitles( $res ) as $title ) {
+ $ret = true;
+ echo "$title\n";
+ }
+ return $ret;
+ }
+
+ private function replaceTitles( $res, $target, $replacement, $useRegex ) {
+ foreach ( $this->getTitles( $res ) as $title ) {
+ $param = [
+ 'target_str' => $target,
+ 'replacement_str' => $replacement,
+ 'use_regex' => $useRegex,
+ 'user_id' => $this->user->getId(),
+ 'edit_summary' => $this->getSummary( $target, $replacement ),
+ 'doAnnounce' => $this->doAnnounce
+ ];
+ echo "Replacing on $title... ";
+ $job = new ReplaceTextJob( $title, $param );
+ if ( $job->run() !== true ) {
+ $this->error( "Trouble on the page '$title'." );
+ }
+ echo "done.\n";
+ }
+ }
+
+ private function getReply( $question ) {
+ $reply = "";
+ if ( $this->shouldContinueByDefault() ) {
+ return true;
+ }
+ while ( $reply !== "y" && $reply !== "n" ) {
+ $reply = $this->readconsole( "$question (Y/N) " );
+ $reply = substr( strtolower( $reply ), 0, 1 );
+ }
+ return $reply === "y";
+ }
+
+ private function localSetup() {
+ if ( $this->getOption( "listns" ) ) {
+ $this->listNamespaces();
+ return false;
+ }
+ if ( $this->getOption( "show-file-format" ) ) {
+ $this->showFileFormat();
+ return false;
+ }
+ $this->user = $this->getUser();
+ if ( ! $this->getReplacements() ) {
+ $this->target = $this->getTarget();
+ $this->replacement = $this->getReplacement();
+ $this->useRegex = $this->useRegex();
+ }
+ $this->namespaces = $this->getNamespaces();
+ $this->category = $this->getCategory();
+ $this->prefix = $this->getPrefix();
+ return true;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function execute() {
+ global $wgShowExceptionDetails;
+ $wgShowExceptionDetails = true;
+
+ $this->doAnnounce = true;
+ if ( $this->localSetup() ) {
+ if ( $this->namespaces === [] ) {
+ $this->error( "No matching namespaces.", true );
+ }
+
+ foreach ( array_keys( $this->target ) as $index ) {
+ $target = $this->target[$index];
+ $replacement = $this->replacement[$index];
+ $useRegex = $this->useRegex[$index];
+
+ if ( $this->getOption( "debug" ) ) {
+ echo "Replacing '$target' with '$replacement'";
+ if ( $useRegex ) {
+ echo " as regular expression.";
+ }
+ echo "\n";
+ }
+ $res = ReplaceTextSearch::doSearchQuery( $target,
+ $this->namespaces, $this->category, $this->prefix,
+ $useRegex );
+
+ if ( $res->numRows() === 0 ) {
+ $this->error( "No targets found to replace.", true );
+ }
+ if ( $this->getOption( "dry-run" ) ) {
+ $this->listTitles( $res );
+ return;
+ }
+ if ( !$this->shouldContinueByDefault() &&
+ $this->listTitles( $res ) ) {
+ if ( !$this->getReply(
+ "Replace instances on these pages?"
+ ) ) {
+ return;
+ }
+ }
+ $comment = "";
+ if ( $this->getOption( "user", null ) === null ) {
+ $comment = " (Use --user to override)";
+ }
+ if ( $this->getOption( "no-announce", false ) ) {
+ $this->doAnnounce = false;
+ }
+ if ( !$this->getReply(
+ "Attribute changes to the user '{$this->user}'?$comment"
+ ) ) {
+ return;
+ }
+ if ( $res->numRows() > 0 ) {
+ $this->replaceTitles(
+ $res, $target, $replacement, $useRegex
+ );
+ }
+ }
+ }
+ }
+}
+
+$maintClass = "ReplaceAll";
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/www/wiki/extensions/ReplaceText/replaceAll.php b/www/wiki/extensions/ReplaceText/replaceAll.php
new file mode 100755
index 00000000..1f08a032
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/replaceAll.php
@@ -0,0 +1,32 @@
+#!/usr/bin/php
+<?php
+/**
+ * Backwards-compatibility before the file was renamed
+ *
+ * Copyright © 2014 NicheWork, LLC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @category Maintenance
+ * @package ReplaceText
+ * @author Mark A. Hershberger <mah@nichework.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GPL-2.0-or-later
+ * @link https://www.mediawiki.org/wiki/Extension:Replace_Text
+ *
+ */
+
+require_once __DIR__ . '/maintenance/replaceAll.php';
diff --git a/www/wiki/extensions/ReplaceText/resources/ext.ReplaceText.css b/www/wiki/extensions/ReplaceText/resources/ext.ReplaceText.css
new file mode 100644
index 00000000..085f5e71
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/resources/ext.ReplaceText.css
@@ -0,0 +1,3 @@
+.client-nojs .mw-replacetext-invert {
+ display: none;
+}
diff --git a/www/wiki/extensions/ReplaceText/resources/ext.ReplaceText.js b/www/wiki/extensions/ReplaceText/resources/ext.ReplaceText.js
new file mode 100644
index 00000000..a73a7b49
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/resources/ext.ReplaceText.js
@@ -0,0 +1,27 @@
+window.invertSelections = function () {
+ 'use strict';
+
+ var form = document.getElementById( 'choose_pages' ),
+ numElements = form.elements.length,
+ i,
+ curElement;
+
+ for ( i = 0; i < numElements; i++ ) {
+ curElement = form.elements[ i ];
+
+ if ( curElement.type === 'checkbox' && curElement.id !== 'create-redirect' &&
+ curElement.id !== 'watch-pages' && curElement.id !== 'doAnnounce' ) {
+ form.elements[ i ].checked = form.elements[ i ].checked !== true;
+ }
+ }
+};
+
+( function ( $ ) {
+ $( function () {
+ $( '#replacetext-invert' )
+ .on( 'click', function () {
+ window.invertSelections();
+ } )
+ .prop( 'disabled', false );
+ } );
+}( jQuery ) );
diff --git a/www/wiki/extensions/ReplaceText/src/ReplaceTextHooks.php b/www/wiki/extensions/ReplaceText/src/ReplaceTextHooks.php
new file mode 100644
index 00000000..84452dc1
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/src/ReplaceTextHooks.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Hook functions for the Replace Text extension.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+class ReplaceTextHooks {
+
+ /**
+ * Implements AdminLinks hook from Extension:Admin_Links.
+ *
+ * @param ALTree &$adminLinksTree
+ * @return bool
+ */
+ public static function addToAdminLinks( ALTree &$adminLinksTree ) {
+ $generalSection = $adminLinksTree->getSection( wfMessage( 'adminlinks_general' )->text() );
+ $extensionsRow = $generalSection->getRow( 'extensions' );
+
+ if ( is_null( $extensionsRow ) ) {
+ $extensionsRow = new ALRow( 'extensions' );
+ $generalSection->addRow( $extensionsRow );
+ }
+
+ $extensionsRow->addItem( ALItem::newFromSpecialPage( 'ReplaceText' ) );
+
+ return true;
+ }
+
+ /**
+ * Implements SpecialMovepageAfterMove hook.
+ *
+ * Adds a link to the Special:ReplaceText page at the end of a successful
+ * regular page move message.
+ *
+ * @param MovePageForm &$form
+ * @param Title &$ot Title object of the old article (moved from)
+ * @param Title &$nt Title object of the new article (moved to)
+ */
+ public static function replaceTextReminder( &$form, &$ot, &$nt ) {
+ $out = $form->getOutput();
+ $page = SpecialPageFactory::getPage( 'ReplaceText' );
+ $pageLink = ReplaceTextUtils::link( $page->getPageTitle() );
+ $out->addHTML( $form->msg( 'replacetext_reminder' )
+ ->rawParams( $pageLink )->inContentLanguage()->parseAsBlock() );
+ }
+
+ /**
+ * Implements UserGetReservedNames hook.
+ * @param array &$names
+ */
+ public static function getReservedNames( &$names ) {
+ global $wgReplaceTextUser;
+ if ( !is_null( $wgReplaceTextUser ) ) {
+ $names[] = $wgReplaceTextUser;
+ }
+ }
+}
diff --git a/www/wiki/extensions/ReplaceText/src/ReplaceTextJob.php b/www/wiki/extensions/ReplaceText/src/ReplaceTextJob.php
new file mode 100644
index 00000000..281fdb04
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/src/ReplaceTextJob.php
@@ -0,0 +1,136 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Yaron Koren
+ * @author Ankit Garg
+ */
+
+use Wikimedia\ScopedCallback;
+
+/**
+ * Background job to replace text in a given page
+ * - based on /includes/RefreshLinksJob.php
+ */
+class ReplaceTextJob extends Job {
+ /**
+ * Constructor.
+ * @param Title $title
+ * @param array|bool $params Cannot be === true
+ */
+ function __construct( $title, $params = '' ) {
+ parent::__construct( 'replaceText', $title, $params );
+ }
+
+ /**
+ * Run a replaceText job
+ * @return bool success
+ */
+ function run() {
+ if ( isset( $this->params['session'] ) ) {
+ $callback = RequestContext::importScopedSession( $this->params['session'] );
+ $this->addTeardownCallback( function () use ( &$callback ) {
+ ScopedCallback::consume( $callback );
+ } );
+ }
+
+ if ( is_null( $this->title ) ) {
+ $this->error = "replaceText: Invalid title";
+ return false;
+ }
+
+ if ( array_key_exists( 'move_page', $this->params ) ) {
+ global $wgUser;
+ $actual_user = $wgUser;
+ $wgUser = User::newFromId( $this->params['user_id'] );
+ $cur_page_name = $this->title->getText();
+ if ( $this->params['use_regex'] ) {
+ $new_page_name = preg_replace(
+ "/" . $this->params['target_str'] . "/Uu", $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'] ) {
+ WatchAction::doWatch( $new_title, $wgUser );
+ }
+ $wgUser = $actual_user;
+ } else {
+ if ( $this->title->getContentModel() !== CONTENT_MODEL_WIKITEXT ) {
+ $this->error = 'replaceText: Wiki page "' .
+ $this->title->getPrefixedDBkey() . '" does not hold regular wikitext.';
+ return false;
+ }
+ $wikiPage = new WikiPage( $this->title );
+ // Is this check necessary?
+ if ( !$wikiPage ) {
+ $this->error =
+ 'replaceText: Wiki page not found for "' . $this->title->getPrefixedDBkey() . '."';
+ return false;
+ }
+ $wikiPageContent = $wikiPage->getContent();
+ if ( is_null( $wikiPageContent ) ) {
+ $this->error =
+ 'replaceText: No contents found for wiki page at "' . $this->title->getPrefixedDBkey() . '."';
+ return false;
+ }
+ $article_text = $wikiPageContent->getNativeData();
+
+ $target_str = $this->params['target_str'];
+ $replacement_str = $this->params['replacement_str'];
+ $num_matches = 0;
+
+ if ( $this->params['use_regex'] ) {
+ $new_text =
+ preg_replace( '/' . $target_str . '/Uu', $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 ) {
+ // Change global $wgUser variable to the one
+ // specified by the job only for the extent of
+ // this replacement.
+ global $wgUser;
+ $actual_user = $wgUser;
+ $wgUser = User::newFromId( $this->params['user_id'] );
+ $edit_summary = $this->params['edit_summary'];
+ $flags = EDIT_MINOR;
+ if ( $wgUser->isAllowed( 'bot' ) ) {
+ $flags |= EDIT_FORCE_BOT;
+ }
+ if ( isset( $this->params['doAnnounce'] ) &&
+ !$this->params['doAnnounce'] ) {
+ $flags |= EDIT_SUPPRESS_RC;
+ # fixme log this action
+ }
+ $new_content = new WikitextContent( $new_text );
+ $wikiPage->doEditContent( $new_content, $edit_summary, $flags );
+ $wgUser = $actual_user;
+ }
+ }
+ return true;
+ }
+}
diff --git a/www/wiki/extensions/ReplaceText/src/ReplaceTextSearch.php b/www/wiki/extensions/ReplaceText/src/ReplaceTextSearch.php
new file mode 100644
index 00000000..712210f6
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/src/ReplaceTextSearch.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\IResultWrapper;
+
+class ReplaceTextSearch {
+
+ /**
+ * @param string $search
+ * @param array $namespaces
+ * @param string $category
+ * @param string $prefix
+ * @param bool $use_regex
+ * @return IResultWrapper Resulting rows
+ */
+ public static function doSearchQuery(
+ $search, $namespaces, $category, $prefix, $use_regex = false
+ ) {
+ $dbr = wfGetDB( DB_REPLICA );
+ $tables = [ 'page', 'revision', 'text' ];
+ $vars = [ 'page_id', 'page_namespace', 'page_title', 'old_text' ];
+ if ( $use_regex ) {
+ $comparisonCond = self::regexCond( $dbr, 'old_text', $search );
+ } else {
+ $any = $dbr->anyString();
+ $comparisonCond = 'old_text ' . $dbr->buildLike( $any, $search, $any );
+ }
+ $conds = [
+ $comparisonCond,
+ 'page_namespace' => $namespaces,
+ 'rev_id = page_latest',
+ 'rev_text_id = old_id'
+ ];
+
+ self::categoryCondition( $category, $tables, $conds );
+ self::prefixCondition( $prefix, $conds );
+ $options = [
+ 'ORDER BY' => 'page_namespace, page_title',
+ // 250 seems like a reasonable limit for one screen.
+ // @TODO - should probably be a setting.
+ 'LIMIT' => 250
+ ];
+
+ return $dbr->select( $tables, $vars, $conds, __METHOD__, $options );
+ }
+
+ /**
+ * @param string $category
+ * @param array &$tables
+ * @param array &$conds
+ */
+ public static function categoryCondition( $category, &$tables, &$conds ) {
+ if ( strval( $category ) !== '' ) {
+ $category = Title::newFromText( $category )->getDbKey();
+ $tables[] = 'categorylinks';
+ $conds[] = 'page_id = cl_from';
+ $conds['cl_to'] = $category;
+ }
+ }
+
+ /**
+ * @param string $prefix
+ * @param array &$conds
+ */
+ public static function prefixCondition( $prefix, &$conds ) {
+ if ( strval( $prefix ) === '' ) {
+ return;
+ }
+
+ $dbr = wfGetDB( DB_REPLICA );
+ $title = Title::newFromText( $prefix );
+ if ( !is_null( $title ) ) {
+ $prefix = $title->getDbKey();
+ }
+ $any = $dbr->anyString();
+ $conds[] = 'page_title ' . $dbr->buildLike( $prefix, $any );
+ }
+
+ /**
+ * @param Database $dbr
+ * @param string $column
+ * @param string $regex
+ * @return string query condition for regex
+ */
+ public static function regexCond( $dbr, $column, $regex ) {
+ if ( $dbr->getType() == 'postgres' ) {
+ $op = '~';
+ } else {
+ $op = 'REGEXP';
+ }
+ return "$column $op " . $dbr->addQuotes( $regex );
+ }
+}
diff --git a/www/wiki/extensions/ReplaceText/src/ReplaceTextUtils.php b/www/wiki/extensions/ReplaceText/src/ReplaceTextUtils.php
new file mode 100644
index 00000000..796e366e
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/src/ReplaceTextUtils.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use \MediaWiki\MediaWikiServices;
+
+class ReplaceTextUtils {
+
+ /**
+ * Shim for compatibility
+ * @param Title $title to link to
+ * @param string $text to show
+ * @return string HTML for link
+ */
+ public static function link( Title $title, $text = null ) {
+ if ( method_exists( '\MediaWiki\MediaWikiServices', 'getLinkRenderer' ) ) {
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+ if ( class_exists( 'HtmlArmor' ) && !is_null( $text ) ) {
+ $text = new HtmlArmor( $text );
+ }
+ return $linkRenderer->makeLink( $title, $text );
+ };
+ return Linker::link( $title, $text );
+ }
+}
diff --git a/www/wiki/extensions/ReplaceText/src/SpecialReplaceText.php b/www/wiki/extensions/ReplaceText/src/SpecialReplaceText.php
new file mode 100644
index 00000000..74536679
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/src/SpecialReplaceText.php
@@ -0,0 +1,792 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+class SpecialReplaceText extends SpecialPage {
+ private $target;
+ private $replacement;
+ private $use_regex;
+ private $category;
+ private $prefix;
+ private $edit_pages;
+ private $move_pages;
+ private $selected_namespaces;
+ private $doAnnounce;
+
+ public function __construct() {
+ parent::__construct( 'ReplaceText', 'replacetext' );
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function doesWrites() {
+ return true;
+ }
+
+ /**
+ * @param null|string $query
+ */
+ function execute( $query ) {
+ global $wgCompressRevisions, $wgExternalStores;
+
+ if ( !$this->getUser()->isAllowed( 'replacetext' ) ) {
+ throw new PermissionsError( 'replacetext' );
+ }
+
+ // Replace Text can't be run with certain settings, due to the
+ // changes they make to the DB storage setup.
+ if ( $wgCompressRevisions ) {
+ $errorMsg = "Error: text replacements cannot be run if \$wgCompressRevisions is set to true.";
+ $this->getOutput()->addWikiText( "<div class=\"errorbox\">$errorMsg</div>" );
+ return;
+ }
+ if ( !empty( $wgExternalStores ) ) {
+ $errorMsg = "Error: text replacements cannot be run if \$wgExternalStores is non-empty.";
+ $this->getOutput()->addWikiText( "<div class=\"errorbox\">$errorMsg</div>" );
+ return;
+ }
+
+ $this->setHeaders();
+ $out = $this->getOutput();
+ if ( !is_null( $out->getResourceLoader()->getModule( 'mediawiki.special' ) ) ) {
+ $out->addModuleStyles( 'mediawiki.special' );
+ }
+ $this->doSpecialReplaceText();
+ }
+
+ /**
+ * @return array namespaces selected for search
+ */
+ function getSelectedNamespaces() {
+ $all_namespaces = SearchEngine::searchableNamespaces();
+ $selected_namespaces = [];
+ foreach ( $all_namespaces as $ns => $name ) {
+ if ( $this->getRequest()->getCheck( 'ns' . $ns ) ) {
+ $selected_namespaces[] = $ns;
+ }
+ }
+ return $selected_namespaces;
+ }
+
+ /**
+ * Do the actual display and logic of Special:ReplaceText.
+ */
+ function doSpecialReplaceText() {
+ $out = $this->getOutput();
+ $request = $this->getRequest();
+
+ $this->target = $request->getText( 'target' );
+ $this->replacement = $request->getText( 'replacement' );
+ $this->use_regex = $request->getBool( 'use_regex' );
+ $this->category = $request->getText( 'category' );
+ $this->prefix = $request->getText( 'prefix' );
+ $this->edit_pages = $request->getBool( 'edit_pages' );
+ $this->move_pages = $request->getBool( 'move_pages' );
+ $this->doAnnounce = $request->getBool( 'doAnnounce' );
+ $this->selected_namespaces = $this->getSelectedNamespaces();
+
+ if ( $request->getCheck( 'continue' ) && $this->target === '' ) {
+ $this->showForm( 'replacetext_givetarget' );
+ return;
+ }
+
+ if ( $request->getCheck( 'replace' ) ) {
+
+ // check for CSRF
+ $user = $this->getUser();
+ if ( !$user->matchEditToken( $request->getVal( 'token' ) ) ) {
+ $out->addWikiMsg( 'sessionfailure' );
+ return;
+ }
+
+ $jobs = $this->createJobsForTextReplacements();
+ JobQueueGroup::singleton()->push( $jobs );
+
+ $count = $this->getLanguage()->formatNum( count( $jobs ) );
+ $out->addWikiMsg(
+ 'replacetext_success',
+ "<code><nowiki>{$this->target}</nowiki></code>",
+ "<code><nowiki>{$this->replacement}</nowiki></code>",
+ $count
+ );
+
+ // Link back
+ $out->addHTML(
+ ReplaceTextUtils::link(
+ $this->getPageTitle(),
+ $this->msg( 'replacetext_return' )->escaped()
+ )
+ );
+ return;
+ }
+
+ if ( $request->getCheck( 'target' ) ) {
+ // check for CSRF
+ $user = $this->getUser();
+ if ( !$user->matchEditToken( $request->getVal( 'token' ) ) ) {
+ $out->addWikiMsg( 'sessionfailure' );
+ return;
+ }
+
+ // first, check that at least one namespace has been
+ // picked, and that either editing or moving pages
+ // has been selected
+ if ( count( $this->selected_namespaces ) == 0 ) {
+ $this->showForm( 'replacetext_nonamespace' );
+ return;
+ }
+ if ( ! $this->edit_pages && ! $this->move_pages ) {
+ $this->showForm( 'replacetext_editormove' );
+ return;
+ }
+
+ // If user is replacing text within pages...
+ $titles_for_edit = $titles_for_move = $unmoveable_titles = [];
+ if ( $this->edit_pages ) {
+ $titles_for_edit = $this->getTitlesForEditingWithContext();
+ }
+ if ( $this->move_pages ) {
+ list( $titles_for_move, $unmoveable_titles ) = $this->getTitlesForMoveAndUnmoveableTitles();
+ }
+
+ // 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 ) {
+ $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 ) {
+ $link = ReplaceTextUtils::link( $category_title,
+ htmlspecialchars( ucfirst( $this->category ) ) );
+ $out->addHTML(
+ $this->msg( 'replacetext_nosuchcategory' )->rawParams( $link )->escaped()
+ );
+ } else {
+ if ( $this->edit_pages ) {
+ $out->addWikiMsg(
+ 'replacetext_noreplacement', "<code><nowiki>{$this->target}</nowiki></code>"
+ );
+ }
+
+ if ( $this->move_pages ) {
+ $out->addWikiMsg( 'replacetext_nomove', "<code><nowiki>{$this->target}</nowiki></code>" );
+ }
+ }
+ // link back to starting form
+ $out->addHTML(
+ '<p>' .
+ ReplaceTextUtils::link(
+ $this->getPageTitle(),
+ $this->msg( 'replacetext_return' )->escaped() )
+ . '</p>'
+ );
+ } else {
+ $warning_msg = $this->getAnyWarningMessageBeforeReplace( $titles_for_edit, $titles_for_move );
+ if ( ! is_null( $warning_msg ) ) {
+ $out->addWikiText( "<div class=\"errorbox\">$warning_msg</div><br clear=\"both\" />" );
+ }
+
+ $this->pageListForm( $titles_for_edit, $titles_for_move, $unmoveable_titles );
+ }
+ return;
+ }
+
+ // If we're still here, show the starting form.
+ $this->showForm();
+ }
+
+ /**
+ * Returns the set of MediaWiki jobs that will do all the actual replacements.
+ *
+ * @return array jobs
+ */
+ function createJobsForTextReplacements() {
+ global $wgReplaceTextUser;
+
+ $replacement_params = [];
+ if ( $wgReplaceTextUser != null ) {
+ $user = User::newFromName( $wgReplaceTextUser );
+ } else {
+ $user = $this->getUser();
+ }
+
+ $replacement_params['user_id'] = $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'] = $this->msg(
+ 'replacetext_editsummary',
+ $this->target, $this->replacement
+ )->inContentLanguage()->plain();
+ $replacement_params['create_redirect'] = false;
+ $replacement_params['watch_page'] = false;
+ $replacement_params['doAnnounce'] = $this->doAnnounce;
+
+ $request = $this->getRequest();
+ foreach ( $request->getValues() as $key => $value ) {
+ if ( $key == 'create-redirect' && $value == '1' ) {
+ $replacement_params['create_redirect'] = true;
+ } elseif ( $key == 'watch-pages' && $value == '1' ) {
+ $replacement_params['watch_page'] = true;
+ }
+ }
+
+ $jobs = [];
+ foreach ( $request->getValues() as $key => $value ) {
+ if ( $value == '1' && $key !== 'replace' && $key !== 'use_regex' ) {
+ if ( strpos( $key, 'move-' ) !== false ) {
+ $title = Title::newFromID( substr( $key, 5 ) );
+ $replacement_params['move_page'] = true;
+ } else {
+ $title = Title::newFromID( $key );
+ }
+ if ( $title !== null ) {
+ $jobs[] = new ReplaceTextJob( $title, $replacement_params );
+ }
+ }
+ }
+
+ return $jobs;
+ }
+
+ /**
+ * Returns the set of Titles whose contents would be modified by this
+ * replacement, along with the "search context" string for each one.
+ *
+ * @return array The set of Titles and their search context strings
+ */
+ function getTitlesForEditingWithContext() {
+ $titles_for_edit = [];
+
+ $res = ReplaceTextSearch::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 );
+ if ( $title == null ) {
+ continue;
+ }
+ $context = $this->extractContext( $row->old_text, $this->target, $this->use_regex );
+ $titles_for_edit[] = [ $title, $context ];
+ }
+
+ return $titles_for_edit;
+ }
+
+ /**
+ * Returns two lists: the set of titles that would be moved/renamed by
+ * the current text replacement, and the set of titles that would
+ * ordinarily be moved but are not moveable, due to permissions or any
+ * other reason.
+ *
+ * @return array
+ */
+ function getTitlesForMoveAndUnmoveableTitles() {
+ $titles_for_move = [];
+ $unmoveable_titles = [];
+
+ $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 );
+ if ( $title == null ) {
+ continue;
+ }
+ // See if this move can happen.
+ $cur_page_name = str_replace( '_', ' ', $row->page_title );
+
+ if ( $this->use_regex ) {
+ $new_page_name =
+ preg_replace( "/" . $this->target . "/Uu", $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' ) && !is_array( $err ) ) {
+ $titles_for_move[] = $title;
+ } else {
+ $unmoveable_titles[] = $title;
+ }
+ }
+
+ return [ $titles_for_move, $unmoveable_titles ];
+ }
+
+ /**
+ * Get the 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).
+ *
+ * @param array $titles_for_edit
+ * @param array $titles_for_move
+ * @return string|null Warning message, if any
+ */
+ function getAnyWarningMessageBeforeReplace( $titles_for_edit, $titles_for_move ) {
+ if ( $this->replacement === '' ) {
+ return $this->msg( 'replacetext_blankwarning' )->text();
+ } elseif ( $this->use_regex ) {
+ // If it's a regex, don't bother checking for existing
+ // pages - if the replacement string includes wildcards,
+ // it's a meaningless check.
+ return null;
+ } elseif ( count( $titles_for_edit ) > 0 ) {
+ $res = ReplaceTextSearch::doSearchQuery(
+ $this->replacement,
+ $this->selected_namespaces,
+ $this->category,
+ $this->prefix,
+ $this->use_regex
+ );
+ $count = $res->numRows();
+ if ( $count > 0 ) {
+ return $this->msg( 'replacetext_warning' )->numParams( $count )
+ ->params( "<code><nowiki>{$this->replacement}</nowiki></code>" )->text();
+ }
+ } elseif ( count( $titles_for_move ) > 0 ) {
+ $res = $this->getMatchingTitles(
+ $this->replacement,
+ $this->selected_namespaces,
+ $this->category,
+ $this->prefix, $this->use_regex
+ );
+ $count = $res->numRows();
+ if ( $count > 0 ) {
+ return $this->msg( 'replacetext_warning' )->numParams( $count )
+ ->params( $this->replacement )->text();
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * @param string|null $warning_msg Message to be shown at top of form
+ */
+ function showForm( $warning_msg = null ) {
+ $out = $this->getOutput();
+
+ $out->addHTML(
+ Xml::openElement(
+ 'form',
+ [
+ 'id' => 'powersearch',
+ 'action' => $this->getPageTitle()->getFullURL(),
+ 'method' => 'post'
+ ]
+ ) . "\n" .
+ Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
+ Html::hidden( 'continue', 1 ) .
+ Html::hidden( 'token', $out->getUser()->getEditToken() )
+ );
+ if ( is_null( $warning_msg ) ) {
+ $out->addWikiMsg( 'replacetext_docu' );
+ } else {
+ $out->wrapWikiMsg(
+ "<div class=\"errorbox\">\n$1\n</div><br clear=\"both\" />",
+ $warning_msg
+ );
+ }
+
+ $out->addHTML( '<table><tr><td style="vertical-align: top;">' );
+ $out->addWikiMsg( 'replacetext_originaltext' );
+ $out->addHTML( '</td><td>' );
+ // 'width: auto' style is needed to override MediaWiki's
+ // normal 'width: 100%', which causes the textarea to get
+ // zero width in IE
+ $out->addHTML(
+ Xml::textarea( 'target', $this->target, 100, 5, [ 'style' => 'width: auto;' ] )
+ );
+ $out->addHTML( '</td></tr><tr><td style="vertical-align: top;">' );
+ $out->addWikiMsg( 'replacetext_replacementtext' );
+ $out->addHTML( '</td><td>' );
+ $out->addHTML(
+ Xml::textarea( 'replacement', $this->replacement, 100, 5, [ 'style' => 'width: auto;' ] )
+ );
+ $out->addHTML( '</td></tr></table>' );
+
+ // SQLite unfortunately lacks a REGEXP function or operator by
+ // default, so disable regex(p) searches for SQLite.
+ $dbr = wfGetDB( DB_REPLICA );
+ if ( $dbr->getType() != 'sqlite' ) {
+ $out->addHTML( Xml::tags( 'p', null,
+ Xml::checkLabel(
+ $this->msg( 'replacetext_useregex' )->text(),
+ 'use_regex', 'use_regex'
+ )
+ ) . "\n" .
+ Xml::element( 'p',
+ [ 'style' => 'font-style: italic' ],
+ $this->msg( 'replacetext_regexdocu' )->text()
+ )
+ );
+ }
+
+ // The interface is heavily based on the one in Special:Search.
+ $namespaces = SearchEngine::searchableNamespaces();
+ $tables = $this->namespaceTables( $namespaces );
+ $out->addHTML(
+ "<div class=\"mw-search-formheader\"></div>\n" .
+ "<fieldset id=\"mw-searchoptions\">\n" .
+ Xml::tags( 'h4', null, $this->msg( 'powersearch-ns' )->parse() )
+ );
+ // 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.
+ if ( $this->msg( 'powersearch-togglelabel' )->isDisabled() ) {
+ // do nothing
+ } else {
+ $out->addHTML(
+ Html::element(
+ 'div',
+ [ 'id' => 'mw-search-togglebox' ]
+ )
+ );
+ }
+ $out->addHTML(
+ Xml::element( 'div', [ 'class' => 'divider' ], '', false ) .
+ "$tables\n</fieldset>"
+ );
+ // @todo FIXME: raw html messages
+ $category_search_label = $this->msg( 'replacetext_categorysearch' )->escaped();
+ $prefix_search_label = $this->msg( 'replacetext_prefixsearch' )->escaped();
+ $rcPage = SpecialPage::getTitleFor( 'Recentchanges' );
+ $rcPageName = $rcPage->getPrefixedText();
+ $out->addHTML(
+ "<fieldset id=\"mw-searchoptions\">\n" .
+ Xml::tags( 'h4', null, $this->msg( 'replacetext_optionalfilters' )->parse() ) .
+ Xml::element( 'div', [ 'class' => 'divider' ], '', false ) .
+ "<p>$category_search_label\n" .
+ Xml::input( 'category', 20, $this->category, [ 'type' => 'text' ] ) . '</p>' .
+ "<p>$prefix_search_label\n" .
+ Xml::input( 'prefix', 20, $this->prefix, [ 'type' => 'text' ] ) . '</p>' .
+ "</fieldset>\n" .
+ "<p>\n" .
+ Xml::checkLabel(
+ $this->msg( 'replacetext_editpages' )->text(), 'edit_pages', 'edit_pages', true
+ ) . '<br />' .
+ Xml::checkLabel(
+ $this->msg( 'replacetext_movepages' )->text(), 'move_pages', 'move_pages'
+ ) . '<br />' .
+ Xml::checkLabel(
+ $this->msg( 'replacetext_announce', $rcPageName )->text(), 'doAnnounce', 'doAnnounce', true
+ ) .
+ "</p>\n" .
+ Xml::submitButton( $this->msg( 'replacetext_continue' )->text() ) .
+ Xml::closeElement( 'form' )
+ );
+ // Add Javascript specific to Special:Search
+ $out->addModules( 'mediawiki.special.search' );
+ }
+
+ /**
+ * Copied almost exactly from MediaWiki's SpecialSearch class, i.e.
+ * the search page
+ * @param string[] $namespaces
+ * @param int $rowsPerTable
+ * @return string HTML
+ */
+ function namespaceTables( $namespaces, $rowsPerTable = 3 ) {
+ global $wgContLang;
+ // Group namespaces into rows according to subject.
+ // Try not to make too many assumptions about namespace numbering.
+ $rows = [];
+ $tables = "";
+ foreach ( $namespaces as $ns => $name ) {
+ $subj = MWNamespace::getSubject( $ns );
+ if ( !array_key_exists( $subj, $rows ) ) {
+ $rows[$subj] = "";
+ }
+ $name = str_replace( '_', ' ', $name );
+ if ( '' == $name ) {
+ $name = $this->msg( 'blanknamespace' )->text();
+ }
+ $rows[$subj] .= Xml::openElement( 'td', [ 'style' => 'white-space: nowrap' ] ) .
+ Xml::checkLabel( $name, "ns{$ns}", "mw-search-ns{$ns}", in_array( $ns, $namespaces ) ) .
+ Xml::closeElement( 'td' ) . "\n";
+ }
+ $rows = array_values( $rows );
+ $numRows = count( $rows );
+ // Lay out namespaces in multiple floating two-column tables so they'll
+ // be arranged nicely while still accommodating different screen widths
+ // Float to the right on RTL wikis
+ $tableStyle = $wgContLang->isRTL() ?
+ 'float: right; margin: 0 0 0em 1em' : 'float: left; margin: 0 1em 0em 0';
+ // Build the final HTML table...
+ for ( $i = 0; $i < $numRows; $i += $rowsPerTable ) {
+ $tables .= Xml::openElement( 'table', [ 'style' => $tableStyle ] );
+ for ( $j = $i; $j < $i + $rowsPerTable && $j < $numRows; $j++ ) {
+ $tables .= "<tr>\n" . $rows[$j] . "</tr>";
+ }
+ $tables .= Xml::closeElement( 'table' ) . "\n";
+ }
+ return $tables;
+ }
+
+ /**
+ * @param array $titles_for_edit
+ * @param array $titles_for_move
+ * @param array $unmoveable_titles
+ */
+ function pageListForm( $titles_for_edit, $titles_for_move, $unmoveable_titles ) {
+ global $wgLang;
+
+ $out = $this->getOutput();
+
+ $formOpts = [
+ 'id' => 'choose_pages',
+ 'method' => 'post',
+ 'action' => $this->getPageTitle()->getFullUrl()
+ ];
+ $out->addHTML(
+ Xml::openElement( 'form', $formOpts ) . "\n" .
+ Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
+ Html::hidden( 'target', $this->target ) .
+ Html::hidden( 'replacement', $this->replacement ) .
+ Html::hidden( 'use_regex', $this->use_regex ) .
+ Html::hidden( 'move_pages', $this->move_pages ) .
+ Html::hidden( 'edit_pages', $this->edit_pages ) .
+ Html::hidden( 'doAnnounce', $this->doAnnounce ) .
+ Html::hidden( 'replace', 1 ) .
+ Html::hidden( 'token', $out->getUser()->getEditToken() )
+ );
+
+ foreach ( $this->selected_namespaces as $ns ) {
+ $out->addHTML( Html::hidden( 'ns' . $ns, 1 ) );
+ }
+
+ $out->addModules( "ext.ReplaceText" );
+ $out->addModuleStyles( "ext.ReplaceTextStyles" );
+ // Needed for bolding of search term.
+ $out->addModuleStyles( "mediawiki.special.search.styles" );
+
+ if ( count( $titles_for_edit ) > 0 ) {
+ $out->addWikiMsg(
+ 'replacetext_choosepagesforedit',
+ "<code><nowiki>{$this->target}</nowiki></code>",
+ "<code><nowiki>{$this->replacement}</nowiki></code>",
+ $wgLang->formatNum( count( $titles_for_edit ) )
+ );
+
+ foreach ( $titles_for_edit as $title_and_context ) {
+ /**
+ * @var $title Title
+ */
+ list( $title, $context ) = $title_and_context;
+ $out->addHTML(
+ Xml::check( $title->getArticleID(), true ) .
+ ReplaceTextUtils::link( $title ) .
+ " - <small>$context</small><br />\n"
+ );
+ }
+ $out->addHTML( '<br />' );
+ }
+
+ if ( count( $titles_for_move ) > 0 ) {
+ $out->addWikiMsg(
+ 'replacetext_choosepagesformove',
+ $this->target, $this->replacement, $wgLang->formatNum( count( $titles_for_move ) )
+ );
+ foreach ( $titles_for_move as $title ) {
+ $out->addHTML(
+ Xml::check( 'move-' . $title->getArticleID(), true ) .
+ ReplaceTextUtils::link( $title ) . "<br />\n"
+ );
+ }
+ $out->addHTML( '<br />' );
+ $out->addWikiMsg( 'replacetext_formovedpages' );
+ $rcPage = SpecialPage::getTitleFor( 'Recentchanges' );
+ $rcPageName = $rcPage->getPrefixedText();
+ $out->addHTML(
+ Xml::checkLabel(
+ $this->msg( 'replacetext_savemovedpages' )->text(),
+ 'create-redirect', 'create-redirect', true ) . "<br />\n" .
+ Xml::checkLabel(
+ $this->msg( 'replacetext_watchmovedpages' )->text(),
+ 'watch-pages', 'watch-pages', false ) . '<br />'
+ );
+ $out->addHTML( '<br />' );
+ }
+
+ $out->addHTML(
+ "<br />\n" .
+ Xml::submitButton( $this->msg( 'replacetext_replace' )->text() ) . "\n"
+ );
+
+ // Only show "invert selections" link if there are more than
+ // five pages.
+ if ( count( $titles_for_edit ) + count( $titles_for_move ) > 5 ) {
+ $buttonOpts = [
+ 'type' => 'button',
+ 'value' => $this->msg( 'replacetext_invertselections' )->text(),
+ 'disabled' => true,
+ 'id' => 'replacetext-invert',
+ 'class' => 'mw-replacetext-invert'
+ ];
+
+ $out->addHTML(
+ Xml::element( 'input', $buttonOpts )
+ );
+ }
+
+ $out->addHTML( '</form>' );
+
+ if ( count( $unmoveable_titles ) > 0 ) {
+ $out->addWikiMsg( 'replacetext_cannotmove', $wgLang->formatNum( count( $unmoveable_titles ) ) );
+ $text = "<ul>\n";
+ foreach ( $unmoveable_titles as $title ) {
+ $text .= "<li>" . ReplaceTextUtils::link( $title ) . "<br />\n";
+ }
+ $text .= "</ul>\n";
+ $out->addHTML( $text );
+ }
+ }
+
+ /**
+ * Extract context and highlights search text
+ *
+ * @todo The bolding needs to be fixed for regular expressions.
+ * @param string $text
+ * @param string $target
+ * @param bool $use_regex
+ * @return string
+ */
+ function extractContext( $text, $target, $use_regex = false ) {
+ global $wgLang;
+
+ $cw = $this->getUser()->getOption( 'contextchars', 40 );
+
+ // Get all indexes
+ if ( $use_regex ) {
+ preg_match_all( "/$target/Uu", $text, $matches, PREG_OFFSET_CAPTURE );
+ } else {
+ $targetq = preg_quote( $target, '/' );
+ preg_match_all( "/$targetq/", $text, $matches, PREG_OFFSET_CAPTURE );
+ }
+
+ $poss = [];
+ foreach ( $matches[0] as $_ ) {
+ $poss[] = $_[1];
+ }
+
+ $cuts = [];
+ // @codingStandardsIgnoreStart
+ for ( $i = 0; $i < count( $poss ); $i++ ) {
+ // @codingStandardsIgnoreEnd
+ $index = $poss[$i];
+ $len = strlen( $target );
+
+ // Merge to the next if possible
+ while ( isset( $poss[$i + 1] ) ) {
+ if ( $poss[$i + 1] < $index + $len + $cw * 2 ) {
+ $len += $poss[$i + 1] - $poss[$i];
+ $i++;
+ } else {
+ // Can't merge, exit the inner loop
+ break;
+ }
+ }
+ $cuts[] = [ $index, $len ];
+ }
+
+ $context = '';
+ foreach ( $cuts as $_ ) {
+ list( $index, $len, ) = $_;
+ $context .= $this->convertWhiteSpaceToHTML(
+ $wgLang->truncate( substr( $text, 0, $index ), - $cw, '...', false )
+ );
+ $snippet = $this->convertWhiteSpaceToHTML( substr( $text, $index, $len ) );
+ if ( $use_regex ) {
+ $targetStr = "/$target/Uu";
+ } else {
+ $targetq = preg_quote( $this->convertWhiteSpaceToHTML( $target ), '/' );
+ $targetStr = "/$targetq/i";
+ }
+ $context .= preg_replace( $targetStr, '<span class="searchmatch">\0</span>', $snippet );
+
+ $context .= $this->convertWhiteSpaceToHTML(
+ $wgLang->truncate( substr( $text, $index + $len ), $cw, '...', false )
+ );
+ }
+ return $context;
+ }
+
+ private function convertWhiteSpaceToHTML( $msg ) {
+ $msg = htmlspecialchars( $msg );
+ $msg = preg_replace( '/^ /m', '&#160; ', $msg );
+ $msg = preg_replace( '/ $/m', ' &#160;', $msg );
+ $msg = preg_replace( '/ /', '&#160; ', $msg );
+ # $msg = str_replace( "\n", '<br />', $msg );
+ return $msg;
+ }
+
+ private function getMatchingTitles( $str, $namespaces, $category, $prefix, $use_regex = false ) {
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $tables = [ 'page' ];
+ $vars = [ 'page_title', 'page_namespace' ];
+
+ $str = str_replace( ' ', '_', $str );
+ if ( $use_regex ) {
+ $comparisonCond = ReplaceTextSearch::regexCond( $dbr, 'page_title', $str );
+ } else {
+ $any = $dbr->anyString();
+ $comparisonCond = 'page_title ' . $dbr->buildLike( $any, $str, $any );
+ }
+ $conds = [
+ $comparisonCond,
+ 'page_namespace' => $namespaces,
+ ];
+
+ ReplaceTextSearch::categoryCondition( $category, $tables, $conds );
+ ReplaceTextSearch::prefixCondition( $prefix, $conds );
+ $sort = [ 'ORDER BY' => 'page_namespace, page_title' ];
+
+ return $dbr->select( $tables, $vars, $conds, __METHOD__, $sort );
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function getGroupName() {
+ return 'wiki';
+ }
+}
diff --git a/www/wiki/extensions/ReplaceText/tests/phan/config.php b/www/wiki/extensions/ReplaceText/tests/phan/config.php
new file mode 100644
index 00000000..2895780d
--- /dev/null
+++ b/www/wiki/extensions/ReplaceText/tests/phan/config.php
@@ -0,0 +1,19 @@
+<?php
+
+$cfg = require __DIR__ . '/../../vendor/mediawiki/mediawiki-phan-config/src/config.php';
+
+$cfg['directory_list'] = array_merge(
+ $cfg['directory_list'],
+ [
+ './../../extensions/AdminLinks',
+ ]
+);
+
+$cfg['exclude_analysis_directory_list'] = array_merge(
+ $cfg['exclude_analysis_directory_list'],
+ [
+ './../../extensions/AdminLinks',
+ ]
+);
+
+return $cfg;