summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/TitleBlacklist
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/TitleBlacklist
first commit
Diffstat (limited to 'www/wiki/extensions/TitleBlacklist')
-rw-r--r--www/wiki/extensions/TitleBlacklist/CODE_OF_CONDUCT.md1
-rw-r--r--www/wiki/extensions/TitleBlacklist/COPYING339
-rw-r--r--www/wiki/extensions/TitleBlacklist/Gruntfile.js28
-rw-r--r--www/wiki/extensions/TitleBlacklist/TitleBlacklist.hooks.php400
-rw-r--r--www/wiki/extensions/TitleBlacklist/TitleBlacklist.library.php35
-rw-r--r--www/wiki/extensions/TitleBlacklist/TitleBlacklist.list.php623
-rw-r--r--www/wiki/extensions/TitleBlacklist/TitleBlacklist.php23
-rw-r--r--www/wiki/extensions/TitleBlacklist/TitleBlacklistAuthenticationRequest.php22
-rw-r--r--www/wiki/extensions/TitleBlacklist/TitleBlacklistPreAuthenticationProvider.php51
-rw-r--r--www/wiki/extensions/TitleBlacklist/api/ApiQueryTitleBlacklist.php111
-rw-r--r--www/wiki/extensions/TitleBlacklist/composer.json23
-rw-r--r--www/wiki/extensions/TitleBlacklist/extension.json109
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/af.json10
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ais.json31
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/an.json18
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ar.json38
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/arz.json17
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/as.json20
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ast.json34
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/az.json8
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ba.json28
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/bcc.json14
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/bcl.json18
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/be-tarask.json23
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/bg.json26
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/bn.json27
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/br.json21
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/bs.json25
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ca.json24
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ce.json22
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ckb.json12
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/cs.json34
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/cy.json8
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/da.json20
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/de-ch.json12
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/de-formal.json11
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/de.json43
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/diq.json20
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/dsb.json18
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/el.json21
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/en.json31
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/eo.json21
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/es.json38
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/et.json30
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/fa.json35
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/fi.json30
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/fr.json44
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/frp.json18
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ga.json16
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/gl.json37
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/gsw.json18
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/gu.json20
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/he.json38
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/hi.json23
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/hr.json23
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/hsb.json18
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/hu.json27
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ia.json18
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/id.json19
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ie.json15
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ilo.json24
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/is.json17
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/it.json31
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ja.json41
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/jut.json11
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/jv.json20
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ka.json23
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/kk-arab.json9
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/kk-cyrl.json24
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/kk-latn.json9
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ko.json39
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/krc.json9
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ksh.json31
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ku-latn.json8
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/la.json14
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/lb.json19
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/li.json19
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/lki.json25
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/lrc.json11
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/lt.json34
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/mk.json33
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ml.json29
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/mr.json22
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ms.json21
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/mt.json11
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/nah.json9
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/nap.json31
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/nb.json36
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/nds.json16
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/nl.json28
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/nn.json19
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/oc.json17
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/or.json19
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/pl.json40
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/pms.json19
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/pnb.json19
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ps.json9
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/pt-br.json38
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/pt.json38
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/qqq.json40
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/qu.json8
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ro.json20
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/roa-tara.json26
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ru.json41
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/rue.json18
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/sa.json19
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/sah.json18
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/scn.json11
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/sh.json9
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/si.json19
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/sk.json18
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/sl.json18
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/sq.json18
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/sr-ec.json27
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/sr-el.json23
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/stq.json16
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/su.json10
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/sv.json36
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ta.json10
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/tay.json8
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/te.json17
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/tg-cyrl.json14
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/tg-latn.json11
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/th.json12
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/tk.json14
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/tl.json19
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/tr.json20
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/uk.json41
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/ur.json14
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/vec.json19
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/vi.json26
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/vo.json15
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/yi.json8
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/yue.json16
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/zh-hans.json41
-rw-r--r--www/wiki/extensions/TitleBlacklist/i18n/zh-hant.json41
-rw-r--r--www/wiki/extensions/TitleBlacklist/includes/Scribunto_LuaTitleBlacklistLibrary.php35
-rw-r--r--www/wiki/extensions/TitleBlacklist/includes/TitleBlacklist.php343
-rw-r--r--www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistAuthenticationRequest.php22
-rw-r--r--www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistEntry.php293
-rw-r--r--www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistHooks.php269
-rw-r--r--www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistPreAuthenticationProvider.php58
-rw-r--r--www/wiki/extensions/TitleBlacklist/includes/api/ApiQueryTitleBlacklist.php107
-rw-r--r--www/wiki/extensions/TitleBlacklist/includes/mw.ext.TitleBlacklist.lua22
-rw-r--r--www/wiki/extensions/TitleBlacklist/modules/mediawiki.api.titleblacklist.js67
-rw-r--r--www/wiki/extensions/TitleBlacklist/mw.ext.TitleBlacklist.lua22
-rw-r--r--www/wiki/extensions/TitleBlacklist/phpcs.xml19
-rw-r--r--www/wiki/extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php138
-rw-r--r--www/wiki/extensions/TitleBlacklist/tests/TitleBlacklistAuthenticationRequestTest.php25
-rw-r--r--www/wiki/extensions/TitleBlacklist/tests/TitleBlacklistPreAuthenticationProviderTest.php36
-rw-r--r--www/wiki/extensions/TitleBlacklist/tests/phan/config.php19
-rw-r--r--www/wiki/extensions/TitleBlacklist/tests/phpunit/ApiQueryTitleBlacklistTest.php140
-rw-r--r--www/wiki/extensions/TitleBlacklist/tests/phpunit/TitleBlacklistAuthenticationRequestTest.php28
-rw-r--r--www/wiki/extensions/TitleBlacklist/tests/phpunit/TitleBlacklistPreAuthenticationProviderTest.php37
-rw-r--r--www/wiki/extensions/TitleBlacklist/tests/phpunit/testSource5
-rw-r--r--www/wiki/extensions/TitleBlacklist/tests/testSource5
156 files changed, 6190 insertions, 0 deletions
diff --git a/www/wiki/extensions/TitleBlacklist/CODE_OF_CONDUCT.md b/www/wiki/extensions/TitleBlacklist/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000..d8e5d087
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/CODE_OF_CONDUCT.md
@@ -0,0 +1 @@
+The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Code_of_Conduct).
diff --git a/www/wiki/extensions/TitleBlacklist/COPYING b/www/wiki/extensions/TitleBlacklist/COPYING
new file mode 100644
index 00000000..d159169d
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/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/TitleBlacklist/Gruntfile.js b/www/wiki/extensions/TitleBlacklist/Gruntfile.js
new file mode 100644
index 00000000..26ca0c16
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/Gruntfile.js
@@ -0,0 +1,28 @@
+/*jshint node:true */
+module.exports = function ( grunt ) {
+ grunt.loadNpmTasks( 'grunt-banana-checker' );
+ grunt.loadNpmTasks( 'grunt-jsonlint' );
+ grunt.loadNpmTasks( 'grunt-contrib-jshint' );
+
+ var conf = grunt.file.readJSON( 'extension.json' );
+ grunt.initConfig( {
+ banana: conf.MessagesDirs,
+ jshint: {
+ all: [
+ '**/*.js',
+ '!node_modules/**',
+ '!vendor/**'
+ ]
+ },
+ jsonlint: {
+ all: [
+ '**/*.json',
+ '!node_modules/**',
+ '!vendor/**'
+ ]
+ }
+ } );
+
+ grunt.registerTask( 'test', [ 'jsonlint', 'banana', 'jshint' ] );
+ grunt.registerTask( 'default', 'test' );
+};
diff --git a/www/wiki/extensions/TitleBlacklist/TitleBlacklist.hooks.php b/www/wiki/extensions/TitleBlacklist/TitleBlacklist.hooks.php
new file mode 100644
index 00000000..fa8c1a88
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/TitleBlacklist.hooks.php
@@ -0,0 +1,400 @@
+<?php
+/**
+ * Hooks for Title Blacklist
+ * @author Victor Vasiliev
+ * @copyright © 2007-2010 Victor Vasiliev et al
+ * @license GNU General Public License 2.0 or later
+ */
+
+use MediaWiki\Auth\AuthManager;
+
+/**
+ * Hooks for the TitleBlacklist class
+ *
+ * @ingroup Extensions
+ */
+class TitleBlacklistHooks {
+
+ /**
+ * Called right after configuration variables have been set.
+ */
+ public static function onRegistration() {
+ global $wgDisableAuthManager, $wgAuthManagerAutoConfig;
+
+ if ( class_exists( AuthManager::class ) && !$wgDisableAuthManager ) {
+ $wgAuthManagerAutoConfig['preauth'][TitleBlacklistPreAuthenticationProvider::class] =
+ [ 'class' => TitleBlacklistPreAuthenticationProvider::class ];
+ } else {
+ Hooks::register( 'AbortNewAccount', 'TitleBlacklistHooks::abortNewAccount' );
+ Hooks::register( 'AbortAutoAccount', 'TitleBlacklistHooks::abortAutoAccount' );
+ Hooks::register( 'UserCreateForm', 'TitleBlacklistHooks::addOverrideCheckbox' );
+ Hooks::register( 'APIGetAllowedParams', 'TitleBlacklistHooks::onAPIGetAllowedParams' );
+ Hooks::register( 'AddNewAccountApiForm',
+ 'TitleBlacklistHooks::onAddNewAccountApiForm' );
+ }
+ }
+
+ /**
+ * getUserPermissionsErrorsExpensive hook
+ *
+ * @param Title $title
+ * @param User $user
+ * @param string $action
+ * @param array &$result
+ * @return bool
+ */
+ public static function userCan( $title, $user, $action, &$result ) {
+ # Some places check createpage, while others check create.
+ # As it stands, upload does createpage, but normalize both
+ # to the same action, to stop future similar bugs.
+ if ( $action === 'createpage' || $action === 'createtalk' ) {
+ $action = 'create';
+ }
+ if ( $action == 'create' || $action == 'edit' || $action == 'upload' ) {
+ $blacklisted = TitleBlacklist::singleton()->userCannot( $title, $user, $action );
+ if ( $blacklisted instanceof TitleBlacklistEntry ) {
+ $errmsg = $blacklisted->getErrorMessage( 'edit' );
+ $params = [
+ $blacklisted->getRaw(),
+ $title->getFullText()
+ ];
+ ApiResult::setIndexedTagName( $params, 'param' );
+ $result = ApiMessage::create(
+ wfMessage(
+ $errmsg,
+ htmlspecialchars( $blacklisted->getRaw() ),
+ $title->getFullText()
+ ),
+ 'titleblacklist-forbidden',
+ [
+ 'message' => [
+ 'key' => $errmsg,
+ 'params' => $params,
+ ],
+ 'line' => $blacklisted->getRaw(),
+ // As $errmsg usually represents a non-default message here, and ApiBase
+ // uses ->inLanguage( 'en' )->useDatabase( false ) for all messages, it will
+ // never result in useful 'info' text in the API. Try this, extra data seems
+ // to override the default.
+ 'info' => 'TitleBlacklist prevents this title from being created',
+ ]
+ );
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Display a notice if a user is only able to create or edit a page
+ * because they have tboverride.
+ *
+ * @param Title $title
+ * @param int $oldid
+ * @param array &$notices
+ * @return true
+ */
+ public static function displayBlacklistOverrideNotice( Title $title, $oldid, array &$notices ) {
+ if ( !RequestContext::getMain()->getUser()->isAllowed( 'tboverride' ) ) {
+ return true;
+ }
+
+ $blacklisted = TitleBlacklist::singleton()->isBlacklisted(
+ $title,
+ $title->exists() ? 'edit' : 'create'
+ );
+ if ( !$blacklisted ) {
+ return true;
+ }
+
+ $params = $blacklisted->getParams();
+ if ( isset( $params['autoconfirmed'] ) ) {
+ return true;
+ }
+
+ $msg = wfMessage( 'titleblacklist-warning' );
+ $notices['titleblacklist'] = $msg->rawParams(
+ htmlspecialchars( $blacklisted->getRaw() ) )->parseAsBlock();
+ return true;
+ }
+
+ /**
+ * MovePageCheckPermissions hook (1.25+)
+ *
+ * @param Title $oldTitle
+ * @param Title $newTitle
+ * @param User $user
+ * @param string $reason
+ * @param Status $status
+ * @return bool
+ */
+ public static function onMovePageCheckPermissions(
+ Title $oldTitle, Title $newTitle, User $user, $reason, Status $status
+ ) {
+ $titleBlacklist = TitleBlacklist::singleton();
+ $blacklisted = $titleBlacklist->userCannot( $newTitle, $user, 'move' );
+ if ( !$blacklisted ) {
+ $blacklisted = $titleBlacklist->userCannot( $oldTitle, $user, 'edit' );
+ }
+ if ( $blacklisted instanceof TitleBlacklistEntry ) {
+ $status->fatal( ApiMessage::create( [
+ $blacklisted->getErrorMessage( 'move' ),
+ $blacklisted->getRaw(),
+ $oldTitle->getFullText(),
+ $newTitle->getFullText()
+ ] ) );
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Check whether a user name is acceptable,
+ * and set a message if unacceptable.
+ *
+ * Used by abortNewAccount and centralAuthAutoCreate.
+ * May also be called externally to vet alternate account names.
+ *
+ * @param string $userName
+ * @param User $permissionsUser
+ * @param string &$err
+ * @param bool $override
+ * @param bool $log
+ * @return bool Acceptable
+ */
+ public static function acceptNewUserName(
+ $userName, $permissionsUser, &$err, $override = true, $log = false
+ ) {
+ $sv = self::testUserName( $userName, $permissionsUser, $override, $log );
+ if ( !$sv->isGood() ) {
+ $err = Status::wrap( $sv )->getMessage()->parse();
+ }
+ return $sv->isGood();
+ }
+
+ /**
+ * Check whether a user name is acceptable for account creation or autocreation, and explain
+ * why not if that's the case.
+ *
+ * @param string $userName
+ * @param User $creatingUser
+ * @param bool $override Should the test be skipped, if the user has sufficient privileges?
+ * @param bool $log Log blacklist hits to Special:Log
+ * @return StatusValue
+ */
+ public static function testUserName(
+ $userName, User $creatingUser, $override = true, $log = false
+ ) {
+ $title = Title::makeTitleSafe( NS_USER, $userName );
+ $blacklisted = TitleBlacklist::singleton()->userCannot( $title, $creatingUser,
+ 'new-account', $override );
+ if ( $blacklisted instanceof TitleBlacklistEntry ) {
+ if ( $log ) {
+ self::logFilterHitUsername( $creatingUser, $title, $blacklisted->getRaw() );
+ }
+ $message = $blacklisted->getErrorMessage( 'new-account' );
+ $params = [
+ $blacklisted->getRaw(),
+ $userName,
+ ];
+ ApiResult::setIndexedTagName( $params, 'param' );
+ return StatusValue::newFatal( ApiMessage::create(
+ [ $message, $blacklisted->getRaw(), $userName ],
+ 'titleblacklist-forbidden',
+ [
+ 'message' => [
+ 'key' => $message,
+ 'params' => $params,
+ ],
+ 'line' => $blacklisted->getRaw(),
+ // The text of the message probably isn't useful API info, so do this instead
+ 'info' => 'TitleBlacklist prevents this username from being created',
+ ]
+ ) );
+ }
+ return StatusValue::newGood();
+ }
+
+ /**
+ * AbortNewAccount hook
+ *
+ * @param User $user
+ * @param string &$message
+ * @param Status &$status
+ * @return bool
+ */
+ public static function abortNewAccount( $user, &$message, &$status ) {
+ global $wgUser, $wgRequest;
+ $override = $wgRequest->getCheck( 'wpIgnoreTitleBlacklist' );
+ $sv = self::testUserName( $user->getName(), $wgUser, $override, true );
+ if ( !$sv->isGood() ) {
+ $status = Status::wrap( $sv );
+ $message = $status->getMessage()->parse();
+ }
+ return $sv->isGood();
+ }
+
+ /**
+ * AbortAutoAccount hook
+ *
+ * @param User $user
+ * @param string &$message
+ * @return bool
+ */
+ public static function abortAutoAccount( $user, &$message ) {
+ global $wgTitleBlacklistBlockAutoAccountCreation;
+ if ( $wgTitleBlacklistBlockAutoAccountCreation ) {
+ return self::abortNewAccount( $user, $message );
+ }
+ return true;
+ }
+
+ /**
+ * EditFilter hook
+ *
+ * @param EditPage $editor
+ * @param string $text
+ * @param string $section
+ * @param string &$error
+ * @return true
+ */
+ public static function validateBlacklist( $editor, $text, $section, &$error ) {
+ $title = $editor->getTitle();
+
+ if ( $title->getNamespace() == NS_MEDIAWIKI && $title->getDBkey() == 'Titleblacklist' ) {
+ $blackList = TitleBlacklist::singleton();
+ $bl = $blackList->parseBlacklist( $text, 'page' );
+ $ok = $blackList->validate( $bl );
+ if ( count( $ok ) == 0 ) {
+ return true;
+ }
+
+ $errmsg = wfMessage( 'titleblacklist-invalid' )->numParams( count( $ok ) )->text();
+ $errlines = '* <code>' .
+ implode( "</code>\n* <code>", array_map( 'wfEscapeWikiText', $ok ) ) .
+ '</code>';
+ $error = Html::openElement( 'div', [ 'class' => 'errorbox' ] ) .
+ $errmsg .
+ "\n" .
+ $errlines .
+ Html::closeElement( 'div' ) . "\n" .
+ Html::element( 'br', [ 'clear' => 'all' ] ) . "\n";
+
+ // $error will be displayed by the edit class
+ }
+ return true;
+ }
+
+ /**
+ * PageContentSaveComplete hook
+ *
+ * @param Article &$article
+ * @param User &$user
+ * @param Content $content
+ * @param string $summary
+ * @param bool $isminor
+ * @param bool $iswatch
+ * @param string $section
+ * @return true
+ */
+ public static function clearBlacklist( &$article, &$user,
+ $content, $summary, $isminor, $iswatch, $section
+ ) {
+ $title = $article->getTitle();
+ if ( $title->getNamespace() == NS_MEDIAWIKI && $title->getDBkey() == 'Titleblacklist' ) {
+ TitleBlacklist::singleton()->invalidate();
+ }
+ return true;
+ }
+
+ /**
+ * UserCreateForm hook based on the one from AntiSpoof extension
+ * @param UsercreateTemplate &$template
+ * @return true
+ */
+ public static function addOverrideCheckbox( &$template ) {
+ global $wgRequest, $wgUser;
+
+ if ( TitleBlacklist::userCanOverride( $wgUser, 'new-account' ) ) {
+ $template->addInputItem( 'wpIgnoreTitleBlacklist',
+ $wgRequest->getCheck( 'wpIgnoreTitleBlacklist' ),
+ 'checkbox', 'titleblacklist-override' );
+ }
+ return true;
+ }
+
+ /**
+ * @param ApiBase &$module
+ * @param array &$params
+ * @return bool
+ */
+ public static function onAPIGetAllowedParams( ApiBase &$module, array &$params ) {
+ if ( $module instanceof ApiCreateAccount ) {
+ $params['ignoretitleblacklist'] = [
+ ApiBase::PARAM_TYPE => 'boolean',
+ ApiBase::PARAM_DFLT => false
+ ];
+ }
+
+ return true;
+ }
+
+ /**
+ * Pass API parameter on to the login form when using
+ * API account creation.
+ *
+ * @param ApiBase $apiModule
+ * @param LoginForm $loginForm
+ * @return bool Always true
+ */
+ public static function onAddNewAccountApiForm( ApiBase $apiModule, LoginForm $loginForm ) {
+ global $wgRequest;
+ $main = $apiModule->getMain();
+
+ if ( $main->getVal( 'ignoretitleblacklist' ) !== null ) {
+ $wgRequest->setVal( 'wpIgnoreTitleBlacklist', '1' );
+
+ // Suppress "unrecognized parameter" warning:
+ $main->getVal( 'wpIgnoreTitleBlacklist' );
+ }
+
+ return true;
+ }
+
+ /**
+ * Logs the filter username hit to Special:Log if
+ * $wgTitleBlacklistLogHits is enabled.
+ *
+ * @param User $user
+ * @param Title $title
+ * @param string $entry
+ */
+ public static function logFilterHitUsername( $user, $title, $entry ) {
+ global $wgTitleBlacklistLogHits;
+ if ( $wgTitleBlacklistLogHits ) {
+ $logEntry = new ManualLogEntry( 'titleblacklist', 'hit-username' );
+ $logEntry->setPerformer( $user );
+ $logEntry->setTarget( $title );
+ $logEntry->setParameters( [
+ '4::entry' => $entry,
+ ] );
+ $logid = $logEntry->insert();
+ $logEntry->publish( $logid );
+ }
+ }
+
+ /**
+ * External Lua library for Scribunto
+ *
+ * @param string $engine
+ * @param array &$extraLibraries
+ * @return bool
+ */
+ public static function scribuntoExternalLibraries( $engine, array &$extraLibraries ) {
+ if ( $engine == 'lua' ) {
+ $extraLibraries['mw.ext.TitleBlacklist'] = 'Scribunto_LuaTitleBlacklistLibrary';
+ }
+ return true;
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/TitleBlacklist.library.php b/www/wiki/extensions/TitleBlacklist/TitleBlacklist.library.php
new file mode 100644
index 00000000..3ed4ce06
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/TitleBlacklist.library.php
@@ -0,0 +1,35 @@
+<?php
+
+class Scribunto_LuaTitleBlacklistLibrary extends Scribunto_LuaLibraryBase {
+ public function register() {
+ $lib = [
+ 'test' => [ $this, 'test' ],
+ ];
+
+ return $this->getEngine()->registerInterface(
+ __DIR__ . '/mw.ext.TitleBlacklist.lua', $lib, []
+ );
+ }
+
+ public function test( $action = null, $title = null ) {
+ $this->checkType( 'mw.ext.TitleBlacklist.test', 1, $action, 'string' );
+ $this->checkTypeOptional( 'mw.ext.TitleBlacklist.test', 2, $title, 'string', '' );
+ $this->incrementExpensiveFunctionCount();
+ if ( $title == '' ) {
+ $title = $this->getParser()->mTitle->getPrefixedText();
+ }
+ $entry = TitleBlacklist::singleton()->isBlacklisted( $title, $action );
+ if ( $entry ) {
+ return [ [
+ 'params' => $entry->getParams(),
+ 'regex' => $entry->getRegex(),
+ 'raw' => $entry->getRaw(),
+ 'version' => $entry->getFormatVersion(),
+ 'message' => $entry->getErrorMessage( $action ),
+ 'custommessage' => $entry->getCustomMessage()
+ ] ];
+ }
+ return [ null ];
+ }
+
+}
diff --git a/www/wiki/extensions/TitleBlacklist/TitleBlacklist.list.php b/www/wiki/extensions/TitleBlacklist/TitleBlacklist.list.php
new file mode 100644
index 00000000..23674b81
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/TitleBlacklist.list.php
@@ -0,0 +1,623 @@
+<?php
+/**
+ * Title Blacklist class
+ * @author Victor Vasiliev
+ * @copyright © 2007-2010 Victor Vasiliev et al
+ * @license GNU General Public License 2.0 or later
+ * @file
+ */
+
+/**
+ * @ingroup Extensions
+ */
+
+/**
+ * Implements a title blacklist for MediaWiki
+ */
+class TitleBlacklist {
+ /** @var array */
+ private $mBlacklist = null;
+
+ /** @var array */
+ private $mWhitelist = null;
+
+ /** @var TitleBlacklist */
+ protected static $instance = null;
+
+ const VERSION = 3; // Blacklist format
+
+ /**
+ * Get an instance of this class
+ *
+ * @return TitleBlacklist
+ */
+ public static function singleton() {
+ if ( self::$instance === null ) {
+ self::$instance = new self;
+ }
+ return self::$instance;
+ }
+
+ /**
+ * Destroy/reset the current singleton instance.
+ *
+ * This is solely for testing and will fail unless MW_PHPUNIT_TEST is
+ * defined.
+ */
+ public static function destroySingleton() {
+ if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+ throw new MWException(
+ 'Can not invoke ' . __METHOD__ . '() ' .
+ 'out of tests (MW_PHPUNIT_TEST not set).'
+ );
+ }
+
+ self::$instance = null;
+ }
+
+ /**
+ * Load all configured blacklist sources
+ */
+ public function load() {
+ global $wgTitleBlacklistSources, $wgTitleBlacklistCaching;
+
+ $cache = ObjectCache::getMainWANInstance();
+ // Try to find something in the cache
+ $cachedBlacklist = $cache->get( wfMemcKey( "title_blacklist_entries" ) );
+ if ( is_array( $cachedBlacklist ) && count( $cachedBlacklist ) > 0
+ && ( $cachedBlacklist[0]->getFormatVersion() == self::VERSION )
+ ) {
+ $this->mBlacklist = $cachedBlacklist;
+ return;
+ }
+
+ $sources = $wgTitleBlacklistSources;
+ $sources['local'] = [ 'type' => 'message' ];
+ $this->mBlacklist = [];
+ foreach ( $sources as $sourceName => $source ) {
+ $this->mBlacklist = array_merge(
+ $this->mBlacklist,
+ $this->parseBlacklist( $this->getBlacklistText( $source ), $sourceName )
+ );
+ }
+ $cache->set( wfMemcKey( "title_blacklist_entries" ),
+ $this->mBlacklist, $wgTitleBlacklistCaching['expiry'] );
+ wfDebugLog( 'TitleBlacklist-cache', 'Updated ' . wfMemcKey( "title_blacklist_entries" )
+ . ' with ' . count( $this->mBlacklist ) . ' entries.' );
+ }
+
+ /**
+ * Load local whitelist
+ */
+ public function loadWhitelist() {
+ global $wgTitleBlacklistCaching;
+
+ $cache = ObjectCache::getMainWANInstance();
+ $cachedWhitelist = $cache->get( wfMemcKey( "title_whitelist_entries" ) );
+ if ( is_array( $cachedWhitelist ) && count( $cachedWhitelist ) > 0
+ && ( $cachedWhitelist[0]->getFormatVersion() != self::VERSION )
+ ) {
+ $this->mWhitelist = $cachedWhitelist;
+ return;
+ }
+ $this->mWhitelist = $this->parseBlacklist( wfMessage( 'titlewhitelist' )
+ ->inContentLanguage()->text(), 'whitelist' );
+ $cache->set( wfMemcKey( "title_whitelist_entries" ),
+ $this->mWhitelist, $wgTitleBlacklistCaching['expiry'] );
+ }
+
+ /**
+ * Get the text of a blacklist from a specified source
+ *
+ * @param string $source A blacklist source from $wgTitleBlacklistSources
+ * @return string The content of the blacklist source as a string
+ */
+ private static function getBlacklistText( $source ) {
+ if ( !is_array( $source ) || count( $source ) <= 0 ) {
+ return ''; // Return empty string in error case
+ }
+
+ if ( $source['type'] == 'message' ) {
+ return wfMessage( 'titleblacklist' )->inContentLanguage()->text();
+ } elseif ( $source['type'] == 'localpage' && count( $source ) >= 2 ) {
+ $title = Title::newFromText( $source['src'] );
+ if ( is_null( $title ) ) {
+ return '';
+ }
+ if ( $title->getNamespace() == NS_MEDIAWIKI ) {
+ $msg = wfMessage( $title->getText() )->inContentLanguage();
+ if ( !$msg->isDisabled() ) {
+ return $msg->text();
+ } else {
+ return '';
+ }
+ } else {
+ $page = WikiPage::factory( $title );
+ if ( $page->exists() ) {
+ return ContentHandler::getContentText( $page->getContent() );
+ }
+ }
+ } elseif ( $source['type'] == 'url' && count( $source ) >= 2 ) {
+ return self::getHttp( $source['src'] );
+ } elseif ( $source['type'] == 'file' && count( $source ) >= 2 ) {
+ if ( file_exists( $source['src'] ) ) {
+ return file_get_contents( $source['src'] );
+ } else {
+ return '';
+ }
+ }
+
+ return '';
+ }
+
+ /**
+ * Parse blacklist from a string
+ *
+ * @param string $list Text of a blacklist source
+ * @param string $sourceName
+ * @return array of TitleBlacklistEntry entries
+ */
+ public static function parseBlacklist( $list, $sourceName ) {
+ $lines = preg_split( "/\r?\n/", $list );
+ $result = [];
+ foreach ( $lines as $line ) {
+ $line = TitleBlacklistEntry::newFromString( $line, $sourceName );
+ if ( $line ) {
+ $result[] = $line;
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Check whether the blacklist restricts given user
+ * performing a specific action on the given Title
+ *
+ * @param Title $title Title to check
+ * @param User $user User to check
+ * @param string $action Action to check; 'edit' if unspecified
+ * @param bool $override If set to true, overrides work
+ * @return TitleBlacklistEntry|bool The corresponding TitleBlacklistEntry if
+ * blacklisted; otherwise false
+ */
+ public function userCannot( $title, $user, $action = 'edit', $override = true ) {
+ $entry = $this->isBlacklisted( $title, $action );
+ if ( !$entry ) {
+ return false;
+ }
+ $params = $entry->getParams();
+ if ( isset( $params['autoconfirmed'] ) && $user->isAllowed( 'autoconfirmed' ) ) {
+ return false;
+ }
+ if ( $override && self::userCanOverride( $user, $action ) ) {
+ return false;
+ }
+ return $entry;
+ }
+
+ /**
+ * Check whether the blacklist restricts
+ * performing a specific action on the given Title
+ *
+ * @param Title $title Title to check
+ * @param string $action Action to check; 'edit' if unspecified
+ * @return TitleBlacklistEntry|bool The corresponding TitleBlacklistEntry if blacklisted;
+ * otherwise FALSE
+ */
+ public function isBlacklisted( $title, $action = 'edit' ) {
+ if ( !( $title instanceof Title ) ) {
+ $title = Title::newFromText( $title );
+ if ( !( $title instanceof Title ) ) {
+ // The fact that the page name is invalid will stop whatever
+ // action is going through. No sense in doing more work here.
+ return false;
+ }
+ }
+ $blacklist = $this->getBlacklist();
+ $autoconfirmedItem = false;
+ foreach ( $blacklist as $item ) {
+ if ( $item->matches( $title->getFullText(), $action ) ) {
+ if ( $this->isWhitelisted( $title, $action ) ) {
+ return false;
+ }
+ $params = $item->getParams();
+ if ( !isset( $params['autoconfirmed'] ) ) {
+ return $item;
+ }
+ if ( !$autoconfirmedItem ) {
+ $autoconfirmedItem = $item;
+ }
+ }
+ }
+ return $autoconfirmedItem;
+ }
+
+ /**
+ * Check whether it has been explicitly whitelisted that the
+ * current User may perform a specific action on the given Title
+ *
+ * @param Title $title Title to check
+ * @param string $action Action to check; 'edit' if unspecified
+ * @return bool True if whitelisted; otherwise false
+ */
+ public function isWhitelisted( $title, $action = 'edit' ) {
+ if ( !( $title instanceof Title ) ) {
+ $title = Title::newFromText( $title );
+ }
+ $whitelist = $this->getWhitelist();
+ foreach ( $whitelist as $item ) {
+ if ( $item->matches( $title->getFullText(), $action ) ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Get the current blacklist
+ *
+ * @return TitleBlacklistEntry[]
+ */
+ public function getBlacklist() {
+ if ( is_null( $this->mBlacklist ) ) {
+ $this->load();
+ }
+ return $this->mBlacklist;
+ }
+
+ /**
+ * Get the current whitelist
+ *
+ * @return Array of TitleBlacklistEntry items
+ */
+ public function getWhitelist() {
+ if ( is_null( $this->mWhitelist ) ) {
+ $this->loadWhitelist();
+ }
+ return $this->mWhitelist;
+ }
+
+ /**
+ * Get the text of a blacklist source via HTTP
+ *
+ * @param string $url URL of the blacklist source
+ * @return string The content of the blacklist source as a string
+ */
+ private static function getHttp( $url ) {
+ global $messageMemc, $wgTitleBlacklistCaching;
+ $key = "title_blacklist_source:" . md5( $url ); // Global shared
+ $warnkey = wfMemcKey( "titleblacklistwarning", md5( $url ) );
+ $result = $messageMemc->get( $key );
+ $warn = $messageMemc->get( $warnkey );
+ if ( !is_string( $result )
+ || ( !$warn && !mt_rand( 0, $wgTitleBlacklistCaching['warningchance'] ) )
+ ) {
+ $result = Http::get( $url );
+ $messageMemc->set( $warnkey, 1, $wgTitleBlacklistCaching['warningexpiry'] );
+ $messageMemc->set( $key, $result, $wgTitleBlacklistCaching['expiry'] );
+ }
+ return $result;
+ }
+
+ /**
+ * Invalidate the blacklist cache
+ */
+ public function invalidate() {
+ $cache = ObjectCache::getMainWANInstance();
+ $cache->delete( wfMemcKey( "title_blacklist_entries" ) );
+ }
+
+ /**
+ * Validate a new blacklist
+ *
+ * @param array $blacklist
+ * @return Array of bad entries; empty array means blacklist is valid
+ */
+ public function validate( $blacklist ) {
+ $badEntries = [];
+ foreach ( $blacklist as $e ) {
+ wfSuppressWarnings();
+ $regex = $e->getRegex();
+ if ( preg_match( "/{$regex}/u", '' ) === false ) {
+ $badEntries[] = $e->getRaw();
+ }
+ wfRestoreWarnings();
+ }
+ return $badEntries;
+ }
+
+ /**
+ * Inidcates whether user can override blacklist on certain action.
+ *
+ * @param User $user
+ * @param string $action Action
+ *
+ * @return bool
+ */
+ public static function userCanOverride( $user, $action ) {
+ return $user->isAllowed( 'tboverride' ) ||
+ ( $action == 'new-account' && $user->isAllowed( 'tboverride-account' ) );
+ }
+}
+
+/**
+ * Represents a title blacklist entry
+ */
+class TitleBlacklistEntry {
+ /**
+ * Raw line
+ * @var string
+ */
+ private $mRaw;
+
+ /**
+ * Regular expression to match
+ * @var string
+ */
+ private $mRegex;
+
+ /**
+ * Parameters for this entry
+ * @var array
+ */
+ private $mParams;
+
+ /**
+ * Entry format version
+ * @var string
+ */
+ private $mFormatVersion;
+
+ /**
+ * Source of this entry
+ * @var string
+ */
+ private $mSource;
+
+ /**
+ * Construct a new TitleBlacklistEntry.
+ *
+ * @param string $regex Regular expression to match
+ * @param array $params Parameters for this entry
+ * @param string $raw Raw contents of this line
+ */
+ private function __construct( $regex, $params, $raw, $source ) {
+ $this->mRaw = $raw;
+ $this->mRegex = $regex;
+ $this->mParams = $params;
+ $this->mFormatVersion = TitleBlacklist::VERSION;
+ $this->mSource = $source;
+ }
+
+ /**
+ * Returns whether this entry is capable of filtering new accounts.
+ */
+ private function filtersNewAccounts() {
+ global $wgTitleBlacklistUsernameSources;
+
+ if ( $wgTitleBlacklistUsernameSources === '*' ) {
+ return true;
+ }
+
+ if ( !$wgTitleBlacklistUsernameSources ) {
+ return false;
+ }
+
+ if ( !is_array( $wgTitleBlacklistUsernameSources ) ) {
+ throw new Exception(
+ '$wgTitleBlacklistUsernameSources must be "*", false or an array' );
+ }
+
+ return in_array( $this->mSource, $wgTitleBlacklistUsernameSources, true );
+ }
+
+ /**
+ * Check whether a user can perform the specified action on the specified Title
+ *
+ * @param string $title Title to check
+ * @param string $action Action to check
+ * @return bool TRUE if the the regex matches the title, and is not overridden
+ * else false if it doesn't match (or was overridden)
+ */
+ public function matches( $title, $action ) {
+ if ( $title == '' ) {
+ return false;
+ }
+
+ if ( $action === 'new-account' && !$this->filtersNewAccounts() ) {
+ return false;
+ }
+
+ if ( isset( $this->mParams['antispoof'] )
+ && is_callable( 'AntiSpoof::checkUnicodeString' )
+ ) {
+ if ( $action === 'edit' ) {
+ // Use process cache for frequently edited pages
+ $cache = ObjectCache::getMainWANInstance();
+ list( $ok, $norm ) = $cache->getWithSetCallback(
+ $cache->makeKey( 'titleblacklist', 'normalized-unicode', md5( $title ) ),
+ $cache::TTL_MONTH,
+ function () use ( $title ) {
+ return AntiSpoof::checkUnicodeString( $title );
+ },
+ [ 'pcTTL' => $cache::TTL_PROC_LONG ]
+ );
+ } else {
+ list( $ok, $norm ) = AntiSpoof::checkUnicodeString( $title );
+ }
+
+ if ( $ok === "OK" ) {
+ list( $ver, $title ) = explode( ':', $norm, 2 );
+ } else {
+ wfDebugLog( 'TitleBlacklist', 'AntiSpoof could not normalize "' . $title . '".' );
+ }
+ }
+
+ wfSuppressWarnings();
+ $match = preg_match(
+ "/^(?:{$this->mRegex})$/us" . ( isset( $this->mParams['casesensitive'] ) ? '' : 'i' ),
+ $title
+ );
+ wfRestoreWarnings();
+
+ if ( $match ) {
+ if ( isset( $this->mParams['moveonly'] ) && $action != 'move' ) {
+ return false;
+ }
+ if ( isset( $this->mParams['newaccountonly'] ) && $action != 'new-account' ) {
+ return false;
+ }
+ if ( !isset( $this->mParams['noedit'] ) && $action == 'edit' ) {
+ return false;
+ }
+ if ( isset( $this->mParams['reupload'] ) && $action == 'upload' ) {
+ // Special:Upload also checks 'create' permissions when not reuploading
+ return false;
+ }
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Create a new TitleBlacklistEntry from a line of text
+ *
+ * @param string $line String containing a line of blacklist text
+ * @param string $source
+ * @return TitleBlacklistEntry|null
+ */
+ public static function newFromString( $line, $source ) {
+ $raw = $line; // Keep line for raw data
+ $options = [];
+ // Strip comments
+ $line = preg_replace( "/^\\s*([^#]*)\\s*((.*)?)$/", "\\1", $line );
+ $line = trim( $line );
+ // A blank string causes problems later on
+ if ( $line === '' ) {
+ return null;
+ }
+ // Parse the rest of message
+ $pockets = [];
+ if ( !preg_match( '/^(.*?)(\s*<([^<>]*)>)?$/', $line, $pockets ) ) {
+ return null;
+ }
+ $regex = trim( $pockets[1] );
+ $regex = str_replace( '_', ' ', $regex ); // We'll be matching against text form
+ $opts_str = isset( $pockets[3] ) ? trim( $pockets[3] ) : '';
+ // Parse opts
+ $opts = preg_split( '/\s*\|\s*/', $opts_str );
+ foreach ( $opts as $opt ) {
+ $opt2 = strtolower( $opt );
+ if ( $opt2 == 'autoconfirmed' ) {
+ $options['autoconfirmed'] = true;
+ }
+ if ( $opt2 == 'moveonly' ) {
+ $options['moveonly'] = true;
+ }
+ if ( $opt2 == 'newaccountonly' ) {
+ $options['newaccountonly'] = true;
+ }
+ if ( $opt2 == 'noedit' ) {
+ $options['noedit'] = true;
+ }
+ if ( $opt2 == 'casesensitive' ) {
+ $options['casesensitive'] = true;
+ }
+ if ( $opt2 == 'reupload' ) {
+ $options['reupload'] = true;
+ }
+ if ( preg_match( '/errmsg\s*=\s*(.+)/i', $opt, $matches ) ) {
+ $options['errmsg'] = $matches[1];
+ }
+ if ( $opt2 == 'antispoof' ) {
+ $options['antispoof'] = true;
+ }
+ }
+ // Process magic words
+ preg_match_all( '/{{\s*([a-z]+)\s*:\s*(.+?)\s*}}/', $regex, $magicwords, PREG_SET_ORDER );
+ foreach ( $magicwords as $mword ) {
+ global $wgParser; // Functions we're calling don't need, nevertheless let's use it
+ switch ( strtolower( $mword[1] ) ) {
+ case 'ns':
+ $cpf_result = CoreParserFunctions::ns( $wgParser, $mword[2] );
+ if ( is_string( $cpf_result ) ) {
+ // All result will have the same value, so we can just use str_seplace()
+ $regex = str_replace( $mword[0], $cpf_result, $regex );
+ }
+ break;
+ case 'int':
+ $cpf_result = wfMessage( $mword[2] )->inContentLanguage()->text();
+ if ( is_string( $cpf_result ) ) {
+ $regex = str_replace( $mword[0], $cpf_result, $regex );
+ }
+ }
+ }
+ // Return result
+ if ( $regex ) {
+ return new TitleBlacklistEntry( $regex, $options, $raw, $source );
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string This entry's regular expression
+ */
+ public function getRegex() {
+ return $this->mRegex;
+ }
+
+ /**
+ * @return string This entry's raw line
+ */
+ public function getRaw() {
+ return $this->mRaw;
+ }
+
+ /**
+ * @return array This entry's parameters
+ */
+ public function getParams() {
+ return $this->mParams;
+ }
+
+ /**
+ * @return string Custom message for this entry
+ */
+ public function getCustomMessage() {
+ return isset( $this->mParams['errmsg'] ) ? $this->mParams['errmsg'] : null;
+ }
+
+ /**
+ * @return string The format version
+ */
+ public function getFormatVersion() {
+ return $this->mFormatVersion;
+ }
+
+ /**
+ * Set the format version
+ *
+ * @param string $v New version to set
+ */
+ public function setFormatVersion( $v ) {
+ $this->mFormatVersion = $v;
+ }
+
+ /**
+ * Return the error message name for the blacklist entry.
+ *
+ * @param string $operation Operation name (as in titleblacklist-forbidden message name)
+ *
+ * @return string The error message name
+ */
+ public function getErrorMessage( $operation ) {
+ $message = $this->getCustomMessage();
+ // For grep:
+ // titleblacklist-forbidden-edit, titleblacklist-forbidden-move,
+ // titleblacklist-forbidden-upload, titleblacklist-forbidden-new-account
+ return $message ? $message : "titleblacklist-forbidden-{$operation}";
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/TitleBlacklist.php b/www/wiki/extensions/TitleBlacklist/TitleBlacklist.php
new file mode 100644
index 00000000..105f2d24
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/TitleBlacklist.php
@@ -0,0 +1,23 @@
+<?php
+
+if ( function_exists( 'wfLoadExtension' ) ) {
+ /** @defgroup Title blacklist source types
+ * @deprecated Use values directly instead.
+ */
+ define( 'TBLSRC_MSG', 'message' ); ///< For internal usage
+ define( 'TBLSRC_LOCALPAGE', 'localpage' ); ///< Local wiki page
+ define( 'TBLSRC_URL', 'url' ); ///< Load blacklist from URL
+ define( 'TBLSRC_FILE', 'file' ); ///< Load from file
+
+ wfLoadExtension( 'TitleBlacklist' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['TitleBlacklist'] = __DIR__ . '/i18n';
+ wfWarn(
+ 'Deprecated PHP entry point used for TitleBlacklist extension. ' .
+ 'Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ );
+ return;
+} else {
+ die( 'This version of the TitleBlacklist extension requires MediaWiki 1.25+' );
+}
diff --git a/www/wiki/extensions/TitleBlacklist/TitleBlacklistAuthenticationRequest.php b/www/wiki/extensions/TitleBlacklist/TitleBlacklistAuthenticationRequest.php
new file mode 100644
index 00000000..928a60e0
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/TitleBlacklistAuthenticationRequest.php
@@ -0,0 +1,22 @@
+<?php
+
+use MediaWiki\Auth\AuthenticationRequest;
+
+/**
+ * An authentication request that allows users with sufficiently high privileges to skip the
+ * title blacklist check.
+ */
+class TitleBlacklistAuthenticationRequest extends AuthenticationRequest {
+ public $ignoreTitleBlacklist;
+
+ public function getFieldInfo() {
+ return [
+ 'ignoreTitleBlacklist' => [
+ 'type' => 'checkbox',
+ 'label' => wfMessage( 'titleblacklist-override' ),
+ 'help' => wfMessage( 'titleblacklist-override-help' ),
+ 'optional' => true,
+ ],
+ ];
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/TitleBlacklistPreAuthenticationProvider.php b/www/wiki/extensions/TitleBlacklist/TitleBlacklistPreAuthenticationProvider.php
new file mode 100644
index 00000000..b2371ca3
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/TitleBlacklistPreAuthenticationProvider.php
@@ -0,0 +1,51 @@
+<?php
+
+use MediaWiki\Auth\AbstractPreAuthenticationProvider;
+use MediaWiki\Auth\AuthenticationRequest;
+use MediaWiki\Auth\AuthManager;
+
+class TitleBlacklistPreAuthenticationProvider extends AbstractPreAuthenticationProvider {
+ protected $blockAutoAccountCreation;
+
+ public function __construct( $params = [] ) {
+ global $wgTitleBlacklistBlockAutoAccountCreation;
+
+ $params += [
+ 'blockAutoAccountCreation' => $wgTitleBlacklistBlockAutoAccountCreation
+ ];
+
+ $this->blockAutoAccountCreation = (bool)$params['blockAutoAccountCreation'];
+ }
+
+ public function getAuthenticationRequests( $action, array $options ) {
+ $needOverrideOption = false;
+ switch ( $action ) {
+ case AuthManager::ACTION_CREATE:
+ $user = User::newFromName( $options['username'] ) ?: new User();
+ $needOverrideOption = TitleBlacklist::userCanOverride( $user, 'new-account' );
+ break;
+ }
+
+ return $needOverrideOption ? [ new TitleBlacklistAuthenticationRequest() ] : [];
+ }
+
+ public function testForAccountCreation( $user, $creator, array $reqs ) {
+ /** @var TitleBlacklistAuthenticationRequest $req */
+ $req = AuthenticationRequest::getRequestByClass( $reqs,
+ TitleBlacklistAuthenticationRequest::class );
+ $override = $req && $req->ignoreTitleBlacklist;
+ return TitleBlacklistHooks::testUserName( $user->getName(), $creator, $override, true );
+ }
+
+ public function testUserForCreation( $user, $autocreate, array $options = [] ) {
+ $sv = StatusValue::newGood();
+ $creator = RequestContext::getMain()->getUser();
+
+ if ( !$autocreate && empty( $options['creating'] ) || $this->blockAutoAccountCreation ) {
+ $sv->merge( TitleBlacklistHooks::testUserName(
+ $user->getName(), $creator, true, (bool)$autocreate
+ ) );
+ }
+ return $sv;
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/api/ApiQueryTitleBlacklist.php b/www/wiki/extensions/TitleBlacklist/api/ApiQueryTitleBlacklist.php
new file mode 100644
index 00000000..443f75ab
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/api/ApiQueryTitleBlacklist.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * TitleBlacklist extension API
+ *
+ * Copyright © 2011 Wikimedia Foundation and Ian Baker <ian@wikimedia.org>
+ * Based on code by Victor Vasiliev, Bryan Tong Minh, Roan Kattouw, and Alex Z.
+ *
+ * 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
+ */
+
+/**
+ * Query module check a title against the blacklist
+ *
+ * @ingroup API
+ * @ingroup Extensions
+ */
+class ApiQueryTitleBlacklist extends ApiBase {
+
+ public function __construct( $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'tb' );
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $action = $params['action'];
+ $override = !$params['nooverride'];
+
+ // createtalk and createpage are useless as they're treated exactly like create
+ if ( $action === 'createpage' || $action === 'createtalk' ) {
+ $action = 'create';
+ }
+
+ $title = Title::newFromText( $params['title'] );
+ if ( !$title ) {
+ if ( is_callable( [ $this, 'dieWithError' ] ) ) {
+ $this->dieWithError(
+ [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ]
+ );
+ } else {
+ $this->dieUsageMsg( [ 'invalidtitle', $params['title'] ] );
+ }
+ }
+
+ $blacklisted = TitleBlacklist::singleton()->userCannot(
+ $title, $this->getUser(), $action, $override
+ );
+ if ( $blacklisted instanceof TitleBlacklistEntry ) {
+ // this title is blacklisted.
+ $result = [
+ htmlspecialchars( $blacklisted->getRaw() ),
+ htmlspecialchars( $params['title'] ),
+ ];
+
+ $res = $this->getResult();
+ $res->addValue( 'titleblacklist', 'result', 'blacklisted' );
+ // there aren't any messages for create(talk|page), using edit for those instead
+ $message = $blacklisted->getErrorMessage( $action !== 'create' ? $action : 'edit' );
+ $res->addValue( 'titleblacklist', 'reason', wfMessage( $message, $result )->text() );
+ $res->addValue( 'titleblacklist', 'message', $message );
+ $res->addValue( 'titleblacklist', 'line', htmlspecialchars( $blacklisted->getRaw() ) );
+ } else {
+ // not blacklisted
+ $this->getResult()->addValue( 'titleblacklist', 'result', 'ok' );
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'title' => [
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ 'action' => [
+ ApiBase::PARAM_DFLT => 'edit',
+ ApiBase::PARAM_ISMULTI => false,
+ ApiBase::PARAM_TYPE => [
+ // createtalk and createpage are useless as they're treated exactly like create
+ 'create', 'edit', 'upload', 'createtalk', 'createpage', 'move', 'new-account'
+ ],
+ ],
+ 'nooverride' => [
+ ApiBase::PARAM_DFLT => false,
+ ]
+ ];
+ }
+
+ /**
+ * @see ApiBase::getExamplesMessages()
+ * @return array
+ */
+ protected function getExamplesMessages() {
+ return [
+ 'action=titleblacklist&tbtitle=Foo'
+ => 'apihelp-titleblacklist-example-1',
+ 'action=titleblacklist&tbtitle=Bar&tbaction=edit'
+ => 'apihelp-titleblacklist-example-2',
+ ];
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/composer.json b/www/wiki/extensions/TitleBlacklist/composer.json
new file mode 100644
index 00000000..b822010c
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/composer.json
@@ -0,0 +1,23 @@
+{
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "1.0.0",
+ "jakub-onderka/php-console-highlighter": "0.3.2",
+ "mediawiki/mediawiki-codesniffer": "18.0.0",
+ "mediawiki/minus-x": "0.3.1",
+ "mediawiki/mediawiki-phan-config": "0.2.0"
+ },
+ "scripts": {
+ "fix": [
+ "phpcbf",
+ "minus-x fix ."
+ ],
+ "test": [
+ "parallel-lint . --exclude node_modules --exclude vendor",
+ "phpcs -p -s",
+ "minus-x check ."
+ ]
+ },
+ "extra": {
+ "phan-taint-check-plugin": "1.2.0"
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/extension.json b/www/wiki/extensions/TitleBlacklist/extension.json
new file mode 100644
index 00000000..75de9045
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/extension.json
@@ -0,0 +1,109 @@
+{
+ "name": "TitleBlacklist",
+ "version": "1.5.0",
+ "author": [
+ "Victor Vasiliev",
+ "Fran Rogers"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:TitleBlacklist",
+ "descriptionmsg": "titleblacklist-desc",
+ "license-name": "GPL-2.0-or-later",
+ "type": "antispam",
+ "requires": {
+ "MediaWiki": ">= 1.29.0"
+ },
+ "GroupPermissions": {
+ "sysop": {
+ "tboverride": true,
+ "titleblacklistlog": true
+ }
+ },
+ "AvailableRights": [
+ "tboverride",
+ "tboverride-account",
+ "titleblacklistlog"
+ ],
+ "LogTypes": [
+ "titleblacklist"
+ ],
+ "LogRestrictions": {
+ "titleblacklist": "titleblacklistlog"
+ },
+ "LogActionsHandlers": {
+ "titleblacklist/*": "LogFormatter"
+ },
+ "GrantPermissions": {
+ "viewrestrictedlogs": {
+ "titleblacklistlog": true
+ }
+ },
+ "APIModules": {
+ "titleblacklist": "ApiQueryTitleBlacklist"
+ },
+ "MessagesDirs": {
+ "TitleBlacklist": [
+ "i18n"
+ ]
+ },
+ "AutoloadClasses": {
+ "TitleBlacklist": "includes/TitleBlacklist.php",
+ "TitleBlacklistEntry": "includes/TitleBlacklistEntry.php",
+ "TitleBlacklistHooks": "includes/TitleBlacklistHooks.php",
+ "TitleBlacklistAuthenticationRequest": "includes/TitleBlacklistAuthenticationRequest.php",
+ "TitleBlacklistPreAuthenticationProvider": "includes/TitleBlacklistPreAuthenticationProvider.php",
+ "Scribunto_LuaTitleBlacklistLibrary": "includes/Scribunto_LuaTitleBlacklistLibrary.php",
+ "ApiQueryTitleBlacklist": "includes/api/ApiQueryTitleBlacklist.php"
+ },
+ "ResourceModules": {
+ "mediawiki.api.titleblacklist": {
+ "scripts": "mediawiki.api.titleblacklist.js",
+ "dependencies": [
+ "mediawiki.api"
+ ],
+ "targets": [ "desktop", "mobile" ]
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "modules",
+ "remoteExtPath": "TitleBlacklist/modules"
+ },
+ "Hooks": {
+ "getUserPermissionsErrorsExpensive": [
+ "TitleBlacklistHooks::userCan"
+ ],
+ "TitleGetEditNotices": [
+ "TitleBlacklistHooks::displayBlacklistOverrideNotice"
+ ],
+ "MovePageCheckPermissions": [
+ "TitleBlacklistHooks::onMovePageCheckPermissions"
+ ],
+ "EditFilter": [
+ "TitleBlacklistHooks::validateBlacklist"
+ ],
+ "PageContentSaveComplete": [
+ "TitleBlacklistHooks::clearBlacklist"
+ ],
+ "ScribuntoExternalLibraries": [
+ "TitleBlacklistHooks::scribuntoExternalLibraries"
+ ]
+ },
+ "config": {
+ "TitleBlacklistSources": [],
+ "TitleBlacklistUsernameSources": "*",
+ "TitleBlacklistLogHits": false,
+ "TitleBlacklistCaching": {
+ "warningchance": 100,
+ "expiry": 900,
+ "warningexpiry": 600
+ },
+ "TitleBlacklistBlockAutoAccountCreation": true
+ },
+ "AuthManagerAutoConfig": {
+ "preauth": {
+ "TitleBlacklistPreAuthenticationProvider": {
+ "class": "TitleBlacklistPreAuthenticationProvider"
+ }
+ }
+ },
+ "manifest_version": 1
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/af.json b/www/wiki/extensions/TitleBlacklist/i18n/af.json
new file mode 100644
index 00000000..cde27795
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/af.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "titleblacklist-override": "Ignoreer die swartlys",
+ "right-tboverride": "Ignoreer die titel swartlys",
+ "right-tboverride-account": "Ignoreer die gebruikersnaam swartlys"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ais.json b/www/wiki/extensions/TitleBlacklist/i18n/ais.json
new file mode 100644
index 00000000..cfe685c9
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ais.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Benel",
+ "Bunukwiki"
+ ]
+ },
+ "action-titleblacklistlog": "ciwsace satangahan malangat piazihan-tu-sulit nasulitan-nazipa’an",
+ "log-description-titleblacklist": "tina belih misult tu sacahamin matatungus satangahan malangat piazihan-tu-sulit a sikawaw.",
+ "logentry-titleblacklist-hit-username": "$1 mitanam panganganen ku canghaw $3 sa {{GENDER:$2|matebing}} matatungus sakacucek $4 ku tangan malangat piazihan tu sulit sikawaw.",
+ "titleblacklist-desc": "mahasa mikuwanay kapah misaungay [[MediaWiki:Titleblacklist|milangat piazihan-tu-sulit]] atu [[MediaWiki:Titlewhitelist|mahasa piazihan-tu-sulit]] ngay satezep patizeng kasabelih atu misaungayay canghaw.",
+ "titleblacklist": "# tina kasabilih sa u satangahanay nu malangat piazihan-tu-sulit, matatungus tina tatungusay pakatineng a zateng a satangahan atu misaungayay apasatezep misaungay.\n# buhci tu kamu pisaungay \"#\".\n# piazihan-tu-sulit pataayaw tu kawaw malecad ku tabakiay atu adidi’ay nu sulit-bacu",
+ "titlewhitelist": "# tina kasabelih satangahan mahasa piazihan tu sulit buhci tu kamu ka pisaungay \"#\".\n# piazihan tu sulit pataayaw tu kawaw caay kasasizuma ku tabakiay atu adidi’ay a sulit",
+ "titleblacklist-forbidden-edit": "pyawti \"$2\" masatezep tu ku pisaungay.\nyapyawti matatungus isasa’ malangat ku piazihan tu sulit tu kasacacay: <code>$1</code>",
+ "titleblacklist-forbidden-move": "satangahan \"$3\" masatezep tuway misaungay, la’cus milimad \"$2\" tayza \"$3\". \nkya satangahan matatungus isasa’ay malangatay a piazihan-tu-sulit kasacacay:<code>$1</code>",
+ "titleblacklist-forbidden-upload": "tangan kalungangan \"$2\" mapasatezep tuway pisaungay.\nkya kalungangan matatungus isasa’ay a malangat piazihan tu sulit kasacacay: code>$1</code>",
+ "titleblacklist-forbidden-new-account": "misaungayay a kalungangan \"$2\" mapasatezep tu ku pisaungay.\nu kalungangan matatungus tu zikuz malangat piazihan tu sulit nu kasacacay:<code>$1</code>",
+ "titleblacklist-invalid": "satangahan malangat piazihan tu sulit labu’ay isasa’ay {{PLURAL:$1|cacay silsil|yadah silsil}} la’cus; taayaw misuped kapisumad henay:",
+ "titleblacklist-override": "sekipo malangat piazihan tu sulit",
+ "titleblacklist-override-help": "mataneng tu ku tungus a situngusay kapah tu misetin ciniza misekipo satangahan kakaian tademaw kinsa.",
+ "titleblacklist-warning": "<strong> patalaw: tina kasabelih matatungus isasa’ay a satangahan malangat piazihan-tu-sulit kasacacay, kapah a dada’ nay mikuwanay saca izaway <code>tboverride</code> tungus a misaungayay mikawaway-kalumyiti: </strong><br /><code>$1</code>",
+ "right-tboverride": "mitahpu satangahan saca misaungayay a kalungangan kakaian tademaw",
+ "right-tboverride-account": "mitahpu misaungayay a kalungangan kakaian tademaw",
+ "right-titleblacklistlog": "satangahan milangat piazihan-tu-sulit nasulitan-nazipa’an",
+ "apihelp-titleblacklist-param-title": "amipacyinyin milangat piazihan-tu-sulit a sulisulitan.",
+ "apihelp-titleblacklist-param-action": "a mikinsaay a pisaungay.",
+ "apihelp-titleblacklist-param-nooverride": "amana mitanam mitahpu satangahan malangat piazihan-tu-sulit.",
+ "apihelp-titleblacklist-example-1": "kinsa [[Foo]] pasilsil tu malangatay kalungangan",
+ "apihelp-titleblacklist-example-2": "kinsa [[Bar]] pasilsil tu haw mikawaway-kalumyiti malangatay a kalungangan",
+ "apihelp-createaccount-param-ignoretitleblacklist": "takud han pahengad kinsa(maydih isasa’ay cacay a tungus:<code>tboverride</code>, <code>tboverride-account</code>)"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/an.json b/www/wiki/extensions/TitleBlacklist/i18n/an.json
new file mode 100644
index 00000000..7a408381
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/an.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Juanpabl"
+ ]
+ },
+ "titleblacklist-desc": "Premite a os almenistradors de vedar a creyación de pachinas y cuentas d'usuario con aduya d'una [[MediaWiki:Titleblacklist|lista negra]] y una [[MediaWiki:Titlewhitelist|lista blanca]]",
+ "titleblacklist": "# Ista ya una lista negra de títols. Os títols que concuerden con una d'istas expresions regulars no se pueden creyar.\n# Use \"#\" ta fer comentarios.\n# Por defecto, no fa diferencia entre mayusclas y minusclas",
+ "titlewhitelist": "# Ista ye una lista blanca de títols. Faiga servir \"#\" ta escribir comentarios.\n# Por defecto, no diferencia entre mayusclas y minusclas",
+ "titleblacklist-forbidden-edit": "O títol \"$2\" ye vedato y no se puede creyar. \nConcuerda con a siguient dentrada d'a lista negra: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" no se puede tresladar ta \"$3\", porque o títol \"$3\" ye vedato y no se puede creyar. Concuerda con a siguient dentrada d'a lista negra: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "O nombre de fichero \"$2\" ye vedato y no se puede creyar. Concuerda con a siguient dentrada d'a lista negra: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "O nombre d'usuario \"$2\" ye vedato y no se puede creyar. \nConcuerda con a dentrada <code>$1</code> d'a lista negra.",
+ "titleblacklist-invalid": "{{PLURAL:$1|A siguient linia|As siguients linias}} d'a lista negra de títols {{PLURAL:$1|ye|son}} no son conformes; por favor corricha-{{PLURAL:$1|la|las}} antes d'alzar:",
+ "titleblacklist-override": "Ignorar a lista negra",
+ "right-tboverride": "Ignorar a lista negra de títols",
+ "right-tboverride-account": "Ignorar a lista negra de los nombres d'usuario"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ar.json b/www/wiki/extensions/TitleBlacklist/i18n/ar.json
new file mode 100644
index 00000000..6babae34
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ar.json
@@ -0,0 +1,38 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aiman titi",
+ "Meno25",
+ "OsamaK",
+ "Abanima",
+ "علاء",
+ "ديفيد"
+ ]
+ },
+ "action-titleblacklistlog": "استعراض سجل القائمة السوداء للعناوين",
+ "log-name-titleblacklist": "القائمة السوداء للعناوين",
+ "log-description-titleblacklist": "يتتبع هذا السجل ضربات العناوين التي طابقت القائمة السوداء.",
+ "logentry-titleblacklist-hit-username": "{{GENDER:$2|سبّب|سبّبت}} $1 تفعيل القائمة السوداء للعناوين عندما {{GENDER:$2|حاول|حاولت}} إنشاء الحساب $3 المطابق لـ$4.",
+ "titleblacklist-desc": "يسمح للإداريين بمنع إنشاء الصفحات وحسابات المستخدمين حسب [[MediaWiki:Titleblacklist|قائمة سوداء]] و [[MediaWiki:Titlewhitelist|قائمة بيضاء]]",
+ "titleblacklist": "# هذه قائمة سوداء للعناوين. العناوين والمستخدمون الذين يطابقون تعبيرا منتظما هنا لا يمكن إنشاؤهم.\n# استخدم \"#\" للتعليقات.\n# هذه لا تتأثر بحالة الحروف افتراضيا",
+ "titlewhitelist": "# هذه قائمة بيضاء للعناوين. استخدم \"#\" للتعليقات\n# هذه لا تتأثر بحالة الحروف افتراضيا",
+ "titleblacklist-forbidden-edit": "العنوان \"$2\" تم منعه من الإنشاء.\nهو يطابق المدخلة التالية في القائمة السوداء: <code>$1</code>",
+ "titleblacklist-forbidden-move": "لا يمكن نقل \"$2\" إلى \"$3\"، لأن إنشاء العنوان \"$3\" ممنوع.\nهو يطابق المدخلة التالية في القائمة السوداء: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "إنشاء اسم الملف \"$2\" ممنوع.\nهو يطابق المدخلة التالية في القائمة السوداء: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "إنشاء اسم المستخدم \"$2\" ممنوع.\nهو يطابق مدخلة القائمة السوداء التالية: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1||السطر التالي|السطران التاليان|السطور التالية}} في قائمة العناوين السوداء {{PLURAL:$1||غير صحيح|غير صحيحان|غير صحيحة}}؛ من فضلك {{PLURAL:$1||صححه|صححهما|صححهم}} قبل الحفظ:",
+ "titleblacklist-override": "تجاهل القائمة السوداء",
+ "titleblacklist-override-help": "المستخدمون بالصلاحيات الكافية يمكنهم ضبط هذا لتجاهل التحقق من قائمة العناوين السوداء.",
+ "titleblacklist-warning": "<strong>ملاحظة:</strong> لا يمكن تحرير هذه الصفحة إلا للإداريين والمستخدمين الآخرين الذين لديهم صلاحية <code>tboverride</code> لأنها تطابق مدخلة القائمة السوداء التالية:<br /><code>$1</code>",
+ "right-tboverride": "تجاوز قائمتي العناوين أو أسماء المستخدمين السوداوين",
+ "right-tboverride-account": "تجاوز قائمة اسم المستخدم السوداء.",
+ "right-titleblacklistlog": "استعراض سجل القائمة السوداء للعناوين",
+ "apihelp-titleblacklist-description": "تحقق من صحة عنوان الصفحة، أو اسم الملف، أو اسم المستخدم ضد قائمة العناوين السوداء.",
+ "apihelp-titleblacklist-summary": "تحقق من صحة عنوان الصفحة، أو اسم الملف، أو اسم المستخدم ضد قائمة العناوين السوداء.",
+ "apihelp-titleblacklist-param-title": "سلسة الحروف للتحقق منها ضد القائمة السوداء.",
+ "apihelp-titleblacklist-param-action": "الفعل للتحقق منه.",
+ "apihelp-titleblacklist-param-nooverride": "لا تحاول تجاوز قائمة العناوين السوداء.",
+ "apihelp-titleblacklist-example-1": "تحقق ما إذا كان [[Foo]] في القائمة السوداء",
+ "apihelp-titleblacklist-example-2": "تحقق ما إذا كان [[Bar]] في القائمة السوداء للتعديل",
+ "apihelp-createaccount-param-ignoretitleblacklist": "تجاهل التحقق من سبوفنج (يتطلب واحدا من الصلاحيات التالية: <code>tboverride</code>, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/arz.json b/www/wiki/extensions/TitleBlacklist/i18n/arz.json
new file mode 100644
index 00000000..13a3336b
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/arz.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meno25",
+ "Ramsis II"
+ ]
+ },
+ "titleblacklist-desc": "بيسمح للاداريين انهم يمنعو انشاء الصفحات و حسابات اليوزرز على حسب [[MediaWiki:Titleblacklist|البلاك ليست]] و [[MediaWiki:Titlewhitelist|اللستة المسموحة]]",
+ "titleblacklist": "# دى بلاك ليست للعناوين. العناوين واليوزرز اللى بيطابقو نعبير عادى هنا مش ممكن إنشاؤهم.\n# استعمل \"#\" للتعليقات.\n# ما بتتأثرش بحاله الحروف",
+ "titlewhitelist": "# دى لستة بالعناوين المسموح بيها. استعمل \"#\" للتعليقات.\n# ما بتتأثرش بحاله الحروف",
+ "titleblacklist-forbidden-edit": "العنوان \"$2\" ممنوع من الانشاء.\nلانه مطابق لمدخلة فى البلاك ليست دي: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" ماينفعش تتنقل لـ \"$3\", لان العنوان \"$3\" ممنوع من الانشاء.\nلانه مطابق لمدخلة فى البلاك ليست دي: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "اسم الملف \"$2\" ممنوع من الانشاء.\nلانه مطابق لمدخلة فى البلاك ليست دي: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "اسم اليوزر \"$2\" ممنوع من الانشاء.\nلانه مطابق لمدخلة فى البلاك ليست دي: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|السطر دا|السطور دي}} اللى فى البلاك ليست بتاعة العناوين مش {{PLURAL:$1|صح|صح}} ;\nلو سمحت تصلح {{PLURAL:$1|ـه|ـهم}} قبل الحفظ:",
+ "right-tboverride": "اتجاوز البلاك ليست بتاعةالعناوين"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/as.json b/www/wiki/extensions/TitleBlacklist/i18n/as.json
new file mode 100644
index 00000000..7d55f693
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/as.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bishnu Saikia",
+ "Gitartha.bordoloi",
+ "Nilamdyuti"
+ ]
+ },
+ "titleblacklist-desc": "[[MediaWiki:Titleblacklist|ব্লেকলিষ্ট]] আৰু [[MediaWiki:Titlewhitelist|হোৱাইটলিষ্ট]]ৰ মতে প্ৰশাসকক পৃষ্ঠা আৰু সদস্য একাউণ্টৰ সৃষ্টি অৱৰোধৰ অনুমতি দিয়ে",
+ "titleblacklist": "# এইখন এখন শিৰোনাম ব্লেকলিষ্ট। ইয়াৰ যিকোনো নিয়মিত এক্সপ্ৰেছনৰ লগত মিলা শিৰোনাম আৰু সদস্যনাম সৃষ্টি কৰিব নোৱাৰি।\n# মন্তব্যৰ বাবে \"#\" ব্যৱহাৰ কৰক।\n# ই বৰফলা বা সৰুফলা দুয়োবিধ আখৰতে কাম কৰিব।",
+ "titlewhitelist": "# এইখন এখন শিৰোনাম হোৱাইটলিষ্ট। মন্তব্যৰ বাবে \"#\" ব্যৱহাৰ কৰিব।\n# ই বৰফলা বা সৰুফলা দুয়োবিধ আখৰতে কাম কৰিব।",
+ "titleblacklist-forbidden-edit": "\"$2\" শিৰোনামটো সৃষ্টিৰ পৰা বাৰণ কৰা হৈছে। \nএই ব্লেকলিষ্ট ভুক্তিৰ লগত ইয়াৰ মিল আছে: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" ক \"$3\" লে স্থানান্তৰ কৰিব নোৱাৰি, কাৰণ শীৰ্ষক \"$3\" ক সৃষ্টিৰ পৰা নিষিদ্ধ কৰা হৈছে।\nই নিম্নলিখিত ব্লেকলিস্ট প্ৰৱিষ্টিৰ সৈতে মিল খায়: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "নথিপত্ৰ নাম \"$2\" সৃষ্টিৰ পৰা নিষিদ্ধ কৰা হৈছে।\nই নিম্নলিখিত ব্লেকলিস্ট প্ৰৱিষ্টিৰ সৈতে মিল খায়: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "ব্যৱহাৰকাৰী নাম \"$2\" ক সৃষ্টিৰ পৰা নিষিদ্ধ কৰা হৈছে।\nই নিম্নলিখিত ব্লেকলিস্ট প্ৰৱিষ্টিৰ সৈতে মিল খায়: <code>$1</code>",
+ "titleblacklist-invalid": "শীৰ্ষক ব্লেকলিষ্টত নিম্নলিখিত {{PLURAL:$1|শাৰী|শাৰীসমূহ}} অবৈধ; \nঅনুগ্ৰহ কৰি সংৰক্ষণ কৰাৰ আগত {{PLURAL:$1|ইয়াক|এইবোৰ}} শুদ্ধ কৰক:",
+ "titleblacklist-override": "ব্লেকলিষ্ট উপেক্ষা কৰক",
+ "right-tboverride": "শিৰোনাম বা সদস্যনাম ব্লেকলিষ্ট অৱজ্ঞা কৰক",
+ "right-tboverride-account": "সদস্যনাম ব্লেকলিষ্ট অৱজ্ঞা কৰক"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ast.json b/www/wiki/extensions/TitleBlacklist/i18n/ast.json
new file mode 100644
index 00000000..a2223660
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ast.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Esbardu",
+ "Xuacu"
+ ]
+ },
+ "action-titleblacklistlog": "ver el rexistru de la llista prieta de títulos",
+ "log-name-titleblacklist": "Rexistru de llista prieta de títulos",
+ "log-description-titleblacklist": "Estos socesos rexistren les coincidencies cola llista prieta de títulos.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|causó}} una entrada na llista prieta de títulos al intentar crear la cuenta $3 coincidiendo con $4.",
+ "titleblacklist-desc": "Permite a los alministradores prohibir la creación de páxines y cuentes d'usuariu per aciu d'una [[MediaWiki:Titleblacklist|llista prieta]] y una [[MediaWiki:Titlewhitelist|llista blanca]]",
+ "titleblacklist": "# Esta ye una llista prieta de títulos. Los títulos y usuarios que concayen con dalguna d'estes expresiones regulares nun se puen crear.\n# Usa \"#\" pa los comentarios.\n# De mou predetermináu nun ye sensible a les mayúscules.",
+ "titlewhitelist": "# Esta ye una llista blanca de títulos. Usa \"#\" pa los comentarios.\n# De mou predetermináu nun ye sensible a les mayúscules.",
+ "titleblacklist-forbidden-edit": "Torgóse la creación del títulu \"$2\".\nConcueya cola siguiente entrada na llista prieta: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" nun pue ser treslladáu a \"$3\" porque'l títulu \"$3\" ta prohibío crealu.\nConcueya cola siguiente entrada na llista prieta: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Torgóse la creación del nome d'archivu \"$2\".\nConcueya cola siguiente entrada na llista prieta: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Torgóse la creación del nome d'usuariu \"$2\".\nConcueya cola siguiente entrada na llista prieta: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|La siguiente llinia|Les siguientes llinies}} de la llista prieta de títulos {{PLURAL:$1|nun ye válida|nun son válides}};\npor favor {{PLURAL:$1|corríxila|corríxiles}} enantes de guardar:",
+ "titleblacklist-override": "Inorar la llista prieta",
+ "titleblacklist-override-help": "Los usuarios con permisu bastante pueden configurar esto pa ignorar les comprobaciones de títulos de la llista prieta.",
+ "titleblacklist-warning": "<strong>Atención: Esta páxina sólo puen editala alministradores y otros usuarios col permisu <code>tboverride</code> porque casa cola siguiente entrada de la llista prieta de títulos:</strong><br /><code>$1</code>",
+ "right-tboverride": "Sobrescribir la llista prieta de títulos o nomes d'usuariu",
+ "right-tboverride-account": "Saltar la llista prieta d'usuarios",
+ "right-titleblacklistlog": "Ver el rexistru de llista prieta de títulos",
+ "apihelp-titleblacklist-description": "Validar un títulu de páxina, o nome de ficheru o d'usuariu escontra la llista prieta de títulos.",
+ "apihelp-titleblacklist-summary": "Validar un títulu de páxina, o nome de ficheru o d'usuariu escontra la llista prieta de títulos.",
+ "apihelp-titleblacklist-param-title": "La cadena a validar escontra la llista prieta.",
+ "apihelp-titleblacklist-param-action": "L'aición a comprobar.",
+ "apihelp-titleblacklist-param-nooverride": "Nun intentes saltate la llista prieta de títulos.",
+ "apihelp-titleblacklist-example-1": "Comprobar si [[Foo]] ta na llista prieta",
+ "apihelp-titleblacklist-example-2": "Comprobar si [[Bar]] ta na llista prieta pa la edición",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Inorar les comprobaciones de suplantación (necesita unu de los permisos siguientes: <code>tboverride</code>, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/az.json b/www/wiki/extensions/TitleBlacklist/i18n/az.json
new file mode 100644
index 00000000..1eb4296a
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/az.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Wertuose"
+ ]
+ },
+ "titleblacklist-override": "Qara siyahını nəzərə alma"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ba.json b/www/wiki/extensions/TitleBlacklist/i18n/ba.json
new file mode 100644
index 00000000..aad320cd
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ba.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Assele",
+ "Рустам Нурыев",
+ "Янмурза Баки"
+ ]
+ },
+ "action-titleblacklistlog": "Тыйылған атамалар исемлеген ҡарап сығыу.",
+ "log-name-titleblacklist": "Тыйылған атамалар исемлеге журналы.",
+ "log-description-titleblacklist": "Тыйылған атамалар исемлеген ҡарап барыусы журнал.",
+ "titleblacklist-desc": "Хакимдәргә [[MediaWiki:Titleblacklist|ҡара]] һәм [[MediaWiki:Titlewhitelist|аҡ]] исемлек ярҙамында биттәрҙе һәм иҫәп яҙмаларын булдырыуҙы тыйырға мөмкинлек бирә.",
+ "titleblacklist": "# Был — тыйылған исемдәр исемлеге. Күһәтелгән регуляр аңлатмаларға тап килгән биттәр һәм иҫәп яҙмалары булдырыла алмай.\n# Иҫкәрмәләр өсөн \"#\" ҡулланығыҙ.\n# Ғәҙәттә ҙур/бәләкәй хәрефкә һиҙгер түгел",
+ "titlewhitelist": "# Был —исемдәрҙең аҡ исемлеге. Иҫкәрмәләр өсөн \"#\" ҡулланығыҙ.\n# Ғәҙәттә ҙур/бәләкәй хәрефкә һиҙгер түгел",
+ "titleblacklist-forbidden-edit": "\"$2\" исеме булдырыла алмай.\nУл түбәндәге ҡара исемлек яҙмаһы менән тап килә: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" \"$3\" тип үҙгәртелә алмай, сөнки \"$3\" исеме булдырыла алмай.\nУл түбәндәге ҡара исемлек яҙмаһы менән тап килә: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "\"$2\" исемле файл булдырыла алмай.\nУл түбәндәге ҡара исемлек яҙмаһы менән тап килә: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "\"$2\" исемле ҡатнашыусы булдырыла алмай.\nУл түбәндәге ҡара исемлек яҙмаһы менән тап килә: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|1=киләһе бит}} тыйылған атамалар исемлегендә {{PLURAL:$1|1=даими дөрөҫ мәғәнә түгел}}. Һаҡлау алдынан {{PLURAL:$1|1=её|уларҙы}} төҙәтегеҙ.",
+ "titleblacklist-override": "Ҡара исемлекте иғтибарға алмаҫҡа",
+ "titleblacklist-warning": "<strong>Иҫкәрмә:</strong> Был битте администраторҙар һәм хоҡуҡтары булған ҡатнашыусылар <code>tboverride</code> мөхәррирләй ала, сөнки ул киләһе «ҡара исемлек» атамаһы:<br /><code>$1</code> менән тап килеүе ихтимал",
+ "right-tboverride": " Атамалар йәки ҡатнашыусыларҙың ҡара исемлеге битенә ихтибар итмәҫкә.",
+ "right-tboverride-account": "Ҡатнашыусы исемдәре ҡара исемлеген иғтибарға алмау",
+ "right-titleblacklistlog": "Тыйылған исемдәр журналын ҡарау",
+ "apihelp-titleblacklist-param-action": "Тикшерерлергә тейеш эшмәкәрлек.",
+ "apihelp-titleblacklist-example-1": "Мәҡәлә [[Foo]] ҡара исемлекә индерелгәненлеген тикшерергә.",
+ "apihelp-titleblacklist-example-2": "Мәҡәлә[[Bar]] мөхәррирләү өсөн ҡара исемлеккә ингәнлеген тикшерергә."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/bcc.json b/www/wiki/extensions/TitleBlacklist/i18n/bcc.json
new file mode 100644
index 00000000..1f483e6b
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/bcc.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mostafadaneshvar"
+ ]
+ },
+ "titleblacklist-desc": "اجازت دن بند کتن شرکنگ صفحاتی گون مشخصین عناوین: [[MediaWiki:Titleblacklist]] و [[MediaWiki:Titlewhitelist]]",
+ "titleblacklist": "# شی یک عنوان لیست سیاهی انت. عناوینی که هم داب رجکس انت ادان شرکنگ نه بیت.\n# استفاده کن\"#\" په نظرات",
+ "titlewhitelist": "#شی یک اسپیت لیستی عنوانیء. استفاده کن چه \"#\" په نظر داتن",
+ "titleblacklist-forbidden-edit": "عنوان \"$2\" چه شر بیگ منع بوتت.\nایی هم داب جهلگی لیست سیاه یک ورودی انت: <code>$1</code>",
+ "titleblacklist-forbidden-move": "عنوان \"$2\" نه تونیت په \"$3\" جاه په جاه بیت، په چی که ایی چه شر بیگ منع بوتت.\nایی هم داب جهلگی لیست سیاه یک ورودی انت: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "فایل نام \"$2\" چه شر بیگ منع بوتت.\nایی هم داب جهلگی لیست سیاه یک ورودی انت: <code>$1</code>",
+ "right-tboverride": "لیست سیاه عنوان لغو کن"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/bcl.json b/www/wiki/extensions/TitleBlacklist/i18n/bcl.json
new file mode 100644
index 00000000..3459eac6
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/bcl.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geopoet"
+ ]
+ },
+ "titleblacklist-desc": "Minatugot sa mga administrador na magbawal sa pagmumukna nin mga pahina asin mga panindog nin paragamit sa kada [[MediaWiki:Titleblacklist|pinagbarahang listahan]] and [[MediaWiki:Titlewhitelist|pinagtugutang listahan]]",
+ "titleblacklist": "#Ini sarong pinagbarahang listahan kan titulo. Mga titulo asin mga paragamit na minatampad nin sarong regular na ekspresyon digde dae puwedeng maipagmukna.\n#Gamiton an \"#\" para sa mga komento.\n#Ini bakong sensitibo sa pindutan bilang panugmad",
+ "titlewhitelist": "#Ini sarong pinagtutugutang listahan kan titulo. Gamiton an \"#\" para sa mga komento.\n#Ini bakong sensitibo sa pindutan bilang panugmad",
+ "titleblacklist-forbidden-edit": "An titulong \"$2\" pinagbabawalan sa makapagmukna.\nIni minatampad sa minasunod na entrada kan pinagbarahang listahan: <code>$1</code>",
+ "titleblacklist-forbidden-move": "An \"$2\" dae tabi maibabalyo sa \"$3\", nin huli ta an titulo \"$3\" pinagbabawalan sa makapagmukna.\nIni minatampad sa minasunod na entrada kan pinagbarahang listahan:<code>$1</code>",
+ "titleblacklist-forbidden-upload": "An pangaran nin sagunson na \"$2\" pinagbabawalan na makapagmukna.\nIni minatampad sa minasunod na entrada kan pinagbarahang listahan:<code>$1</code>",
+ "titleblacklist-forbidden-new-account": "An pangaran nin paragamit na \"$2\" pinagbabawalan na makapagmukna.\nIni minatampad sa minasunod na entrada kan pinagbarahang listahan:<code>$1</code>",
+ "titleblacklist-invalid": "An minasunod na {{PLURAL:$1|linya|mga linya}} na yaon sa pinagbarahang listahan kan titulo {{PLURAL:$1|iyo an|iyo an mga}} imbalido; pakikoriher tabi {{PLURAL:$1|ini|sinda}} bago pa man ipagtagama:",
+ "titleblacklist-override": "Pabayae an pinagbarahang listahan",
+ "right-tboverride": "Salambawan an titulo o pinagbabawal na listahan kan pangaran nin paragamit",
+ "right-tboverride-account": "Salambawan an pinagbarahang listahan kan pangaran nin paragamit"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/be-tarask.json b/www/wiki/extensions/TitleBlacklist/i18n/be-tarask.json
new file mode 100644
index 00000000..e4d4ce2c
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/be-tarask.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "EugeneZelenko",
+ "Jim-by",
+ "Red Winged Duck",
+ "Wizardist"
+ ]
+ },
+ "log-name-titleblacklist": "Журнал сьпісу забароненых назваў",
+ "titleblacklist-desc": "Дазваляе адміністратарам забараняць стварэньне старонак і рахункаў удзельнікаў з дапамогай [[MediaWiki:Titleblacklist|чорнага]] і [[MediaWiki:Titlewhitelist|белага]] сьпісаў",
+ "titleblacklist": "# Гэта сьпіс забароненых назваў. Старонкі і рахункі, назвы якіх адпавядаюць гэтым выразам, ня могуць быць створаныя.\n# Выкарыстоўвайце «#» для камэнтараў.\n# Рэгістар сымбаляў ня ўлічваецца па змоўчваньні",
+ "titlewhitelist": "# Гэта сьпіс дазволеных назваў. Выкарыстоўвайце «#» для камэнтараў.\n# Рэгістар сымбаляў ня ўлічваецца па змоўчваньні",
+ "titleblacklist-forbidden-edit": "Назва «$2» забароненая для стварэньня.\nЯна адпавядае наступнаму элемэнту чорнага сьпісу: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Старонка «$2» ня можа быць перанесеная ў «$3», таму што назва «$3» забароненая для стварэньня.\nЯна адпавядае наступнаму элемэнту чорнага сьпісу: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Файл з назвай «$2» забаронены для стварэньня.\nЯна адпавядае наступнаму элемэнту чорнага сьпісу: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Імя ўдзельніка «$2» было забаронена для стварэньня.\nЯно адпавядае наступнаму элемэнту чорнага сьпісу: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|1=Наступны радок у|Наступныя радкі ў}} сьпісе забароненых назваў — {{PLURAL:$1|1=няслушны|няслушныя}};\nкалі ласка, выпраўце {{PLURAL:$1|1=яго|іх}} перад захаваньнем:",
+ "titleblacklist-override": "Ігнараваць чорны сьпіс",
+ "right-tboverride": "ігнараваньне чорнага сьпісу назваў і імёнаў удзельнікаў",
+ "right-tboverride-account": "ігнараваньне чорнага сьпісу ўдзельнікаў",
+ "right-titleblacklistlog": "прагляд журнала забароненых назваў"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/bg.json b/www/wiki/extensions/TitleBlacklist/i18n/bg.json
new file mode 100644
index 00000000..ea74223c
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/bg.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borislav",
+ "DCLXVI",
+ "Spiritia",
+ "Termininja",
+ "ShockD",
+ "StanProg"
+ ]
+ },
+ "log-name-titleblacklist": "Дневник на черния списък на заглавията",
+ "log-description-titleblacklist": "Тези събития следят съвпаденията с черния списък на заглавия.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|предизвика}} съвпадение с черния списък на заглавията, опитвайки се да създаде сметка $3, съвпадаща с $4.",
+ "titleblacklist-desc": "Позволява на администраторите да забраняват създаването на страници и потребителски сметки чрез [[MediaWiki:Titleblacklist|черен]] и [[MediaWiki:Titlewhitelist|бял списък]].",
+ "titleblacklist": "# Страницата съдържа черен списък за заглавия на страници\n# Страници и потребители, чиито имена съответстват с регулярните изрази в списъка, не могат да бъдат създавани.\n# За коментари се използва символът „#“.",
+ "titlewhitelist": "# Това е бял списък на заглавията. Използвайте \"#\" за въвеждане на коментари.\n# По подразбиране списъкът е нечувствителен на малки и главни букви",
+ "titleblacklist-forbidden-edit": "Страницата „$2“ не може да бъде създадена, тъй като съвпада със запис от черния списък: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Страницата „$2“ не може да бъде преместена като „$3“, тъй като съвпада със запис от черния списък: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Файлът „$2“ не може да бъде качен, тъй като съвпада със запис от черния списък: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Забранено е създаването на потребителско име „$2“.\nТо отговаря на следния запис от черния списък: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Следният ред|Следните редове}} от черния списък на заглавията {{PLURAL:$1|е невалиден|са невалидни}} и трябва да {{PLURAL:$1|бъде коригиран|бъдат коригирани}} преди съхранение:",
+ "titleblacklist-override": "Игнорирай черния списък",
+ "titleblacklist-warning": "<strong>Внимание: Тази страница може да бъде редактирана само от администратори и други потребители с <code>tboverride</code> права защото съвпада със следния запис от „черния списък“:</strong><br /><code>$1</code>",
+ "right-tboverride": "Игнориране на черния списък на страници и участници"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/bn.json b/www/wiki/extensions/TitleBlacklist/i18n/bn.json
new file mode 100644
index 00000000..98fb49c6
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/bn.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abdullah Harun Jewel",
+ "Bellayet",
+ "Nasir8891",
+ "Zaheen",
+ "Aftab1995",
+ "Aftabuzzaman"
+ ]
+ },
+ "action-titleblacklistlog": "কালোতালিকা শিরোনাম লগ দেখুন",
+ "log-name-titleblacklist": "কালোতালিকা শিরোনাম লগ",
+ "log-description-titleblacklist": "এই ঘটনাগুলি স্প্যাম কালোতালিকার হিট অনুসরণ করে।",
+ "titleblacklist": "এটি শিরোনামের কাল তালিকা। যেসব পাতার শিরোনাম ও ব্যবহারকারীর নাম এখানকার রেগুলার এক্সপ্রেশনের সাথে মিলে যাবে, সেগুলি তৈরি করা যাবে না।\n# মন্তব্যের জন্য \"#\" ব্যবহার করুন।\n# এটি বড় বা ছোট যেকোন হাতের অক্ষরে কাজ করে।",
+ "titlewhitelist": "# এটি একটি শিরোনাম সাদাতালিকা। মন্তব্যের জন্য \"#\" ব্যবহার করুন।\n# এটি বড় বা ছোট যেকোন হাতের অক্ষরে কাজ করে।",
+ "titleblacklist-forbidden-edit": "\"$2\" শিরোনামটি সৃষ্টি করা নিষিদ্ধ করা হয়েছে। এটি কালোতালিকার এই ভুক্তিটির সাথে মিলে গেছে: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\"-কে \"$3\"-এ সরানো যাবে না, কারণ \"$3\" শিরোনামটি নিষিদ্ধ। শিরোনামটি এই কালোতালিকা ভুক্তিটির সাথে মিলে গেছে: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "\"$2\" ফাইলনামটি সৃষ্টি নিষিদ্ধ। নামটি এই কালোতালিকা ভুক্তিটির সাথে মিলে গেছে: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "\"$2\" নামে ব্যবহারকারী নাম তৈরী নিষিদ্ধ।\nএটি কালোতালিকার এই ভুক্তিটির সাথে মিলে গেছে: <code>$1</code>",
+ "titleblacklist-invalid": "শিরোনাম কালোতালিকার এই {{PLURAL:$1|লাইনটি|লাইনগুলি}} অবৈধ; অনুগ্রহ করে সংরক্ষণ করার আগে {{PLURAL:$1|এটি|এগুলি}} সংশোধন করুন:",
+ "titleblacklist-override": "কালোতালিকা উপেক্ষা করুন",
+ "titleblacklist-warning": "<strong>সতর্কীকরণ: এই পাতাটি শুধুমাত্র প্রশাসক এবং <code>tboverride</code> অধিকারপ্রাপ্ত ব্যবহারকারীদের দ্বারা সম্পাদনা করা যাবে কারণ এটি নিম্নলিখিত কালোতালিকার শিরোনামের ভুক্তির সাথে মিলে গেছে:</strong><br /><code>$1</code>",
+ "right-tboverride": "শিরোনাম কালোতালিকা বা ব্যবহারকারী নাম উপেক্ষা করুন",
+ "right-tboverride-account": "ব্যবহারকারী নাম কালোতালিকা উপেক্ষা করুন",
+ "right-titleblacklistlog": "কালোতালিকা শিরোনাম লগ দেখুন"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/br.json b/www/wiki/extensions/TitleBlacklist/i18n/br.json
new file mode 100644
index 00000000..2726bfae
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/br.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fulup",
+ "Gwendal",
+ "Gwenn-Ael",
+ "Y-M D"
+ ]
+ },
+ "titleblacklist-desc": "a ro tro d'ar verourien da verzañ krouiñ pajennoù ha kontoù implijerien hervez [[MediaWiki:Titleblacklist|listenn zu]] hag ur [[MediaWiki:Titlewhitelist|listenn wenn]]",
+ "titleblacklist": "# Roll du an titloù eo. Ne c'hell ket bezañ krouet an titloù pe implijerien hag a glot gant un dro-lavar rasional.\n# Implijit \"#\" evit an evezhiadennoù. \n# N'eo ket kizigig ar monedoù d'an distruj dre ziouer.",
+ "titlewhitelist": "# Roll gwenn an titloù eo. Implijit \"#\" evit an evezhiadennoù.\n# N'eo ket kizigig ar monedoù d'an distruj dre ziouer.",
+ "titleblacklist-forbidden-edit": "Difennet eo krouiñ an anv \"$2\".\nEr roll du e klot gant ar kasadenn da heul : <code>$1</code>",
+ "titleblacklist-forbidden-move": "Ne c'hell ket bezañ fiñvet \"$2\" davet \"$3\", peogwir eo bet nac'het.\nKlotañ a ran gant kasadenn da heul ar roll du : <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Skarzhet eo bet an anv restr \"$2\".\nKlotañ a ran gant kasadenn da heul ar roll du : <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Skarzhet eo bet an anv implijer \"$2\".\nKlotañ a ran gant kasadenn da heul ar roll du : <code>$1</code>",
+ "titleblacklist-invalid": "Direizh eo al {{PLURAL:$1|linenn|linennoù}} da-heul a gaver war roll du an titloù; \nreizhit {{PLURAL:$1|anezhi|anezho}} a-raok enrollañ :",
+ "titleblacklist-override": "Ober van eus al listenn zu",
+ "right-tboverride": "Na ober van ouzh roll du an titloù",
+ "right-tboverride-account": "Na ober van ouzh roll du an anvioù implijer"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/bs.json b/www/wiki/extensions/TitleBlacklist/i18n/bs.json
new file mode 100644
index 00000000..6cf89133
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/bs.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "CERminator",
+ "KWiki",
+ "Semso98",
+ "Srdjan m"
+ ]
+ },
+ "action-titleblacklistlog": "pregledate zapisnik crne liste naslova",
+ "log-name-titleblacklist": "Zapisnik crne liste naslova",
+ "log-description-titleblacklist": "Ovaj zapisnik prikazuje pogotke u crnoj listi naslova.",
+ "titleblacklist-desc": "Omogućuje administratorima da zabrane pravljenje stranica i korisničkih računa putem spiskova [[MediaWiki:Titleblacklist|zabranjenih]] i [[MediaWiki:Titlewhitelist|dopuštenih]] naslova",
+ "titleblacklist": "# Ovo je spisak zabranjenih naslova. Naslovi i korisnici koji se nalaze na ovom spisku neće moći biti napravljeni.\n# Koristite \"#\" za komentare.\n# Ovo ne razlikuje velika i mala slova po pretpostavljenom",
+ "titlewhitelist": "# Ovo je spisak dopuštenih naslova. Koristite \"#\" za komentare.\n# Ovo ne razlikuje velika i mala slova po pretpostavljenom",
+ "titleblacklist-forbidden-edit": "Naslov \"$2\" je zabranjen za pravljenje.\nNalazi se kao stavka na spisku zabranjenih naslova: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" ne može biti premješten na \"$3\", jer je naslov \"$3\" zabranjen za pravljenje.\nNalazi se kao slijedeća stavka spiska nepoželjnih naslova: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Datoteka s imenom \"$2\" zabranjena je za postavljanje.\nNalazi se kao stavka na spisku zabranjenih naslova: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Korisničko ime \"$2\" je zabranjeno za pravljenje.\nOno se nalazi na spisku zabranjenih naslova pod stavkom: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Sljedeći red|Sljedeća $1 reda|Sljedećih $1 redova}} na spisku nepoželjnih naslova {{PLURAL:$1|je nevalidan|su nevalidna|je nevalidno}};\nmolimo da {{PLURAL:$1|ga|ih}} ispravite prije spašavanja:",
+ "titleblacklist-override": "Zanemari crnu listu",
+ "right-tboverride": "Zaobilaženje spiska zabranjenih naslova ili korisničkih imena",
+ "right-tboverride-account": "Zaobilaženje spiska zabranjenih korisničkih imena",
+ "right-titleblacklistlog": "Pregledanje zapisnika crne liste naslova"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ca.json b/www/wiki/extensions/TitleBlacklist/i18n/ca.json
new file mode 100644
index 00000000..28fa155f
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ca.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aleator",
+ "El libre",
+ "Jordi Roqué",
+ "Papapep",
+ "Pitort",
+ "SMP",
+ "Vriullop"
+ ]
+ },
+ "titleblacklist-desc": "Permet als administradors restringir la creació de pàgines i comptes d'usuari mitjançant una [[MediaWiki:Titleblacklist|llista negra]] i una [[MediaWiki:Titlewhitelist|llista blanca]]",
+ "titleblacklist": "# Açò és una llista negra de títols. Els títols i els usuaris que compleixin alguna expressió regular (''regex'') d'aquí no podran ser creats.\n# Feu servir \"#\" per als comentaris.\n# Per defecte, no distingeix majúscules de minúscules",
+ "titlewhitelist": "# Açò és una llista blanca de títols. Useu \"#\" pels comentaris.\n# Per defecte, no distingeix majúscules de minúscules",
+ "titleblacklist-forbidden-edit": "El títol «$2» està prohibit i no es pot crear. Concorda amb la següent entrada de la llista negra: <code>$1</code>",
+ "titleblacklist-forbidden-move": "No es pot moure «$2» a «$3», perquè el títol «$3» està prohibit. Concorda amb l'entrada de la llista negra següent: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "S'ha prohibit el nom de fitxer «$2» i se n'impedeix la creació. Concorda amb la següent línia de la llista negra: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "No es pot crear el nom d'usuari «$2». Coincideix amb la següent entrada de la llista negra: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|La línia següent|Les línies següents}} de la llista negra no {{PLURAL:$1|és vàlida|són vàlides}}; heu de corregir-{{PLURAL:$1|la|les}} abans de guardar:",
+ "titleblacklist-override": "Ignora la llista negra",
+ "right-tboverride": "Sobreescriu el títol o el nom d'usuari de la llista negra",
+ "right-tboverride-account": "Ignorar la llista negra de noms d'usuari"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ce.json b/www/wiki/extensions/TitleBlacklist/i18n/ce.json
new file mode 100644
index 00000000..3b362a07
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ce.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Умар"
+ ]
+ },
+ "action-titleblacklistlog": "магийна йоцу цӀерийн тептаре хьажар",
+ "log-name-titleblacklist": "Магийна йоцу цӀерийн тептар",
+ "log-description-titleblacklist": "Магийна йоцу цӀерш чохь йолу могӀам.",
+ "titleblacklist-desc": "[[MediaWiki:Titleblacklist|Ӏаьржа]] а, [[MediaWiki:Titlewhitelist|къайн]] а могӀанийн гӀоьнца куьйгалхошна таро хуьлуьйту декъашхойн дӀаяздарш ца кхоллийта.",
+ "titleblacklist": "# ХӀара ца магийна цӀерийн могӀам бу, Царах тера цӀерш йолу агӀонаш а декъашхойн дӀаяздарш а кхолла йиш яц\n# Коммент йита лелае «#».\n# Ӏадйитаран кепаца регистарна экамалла яц.",
+ "titlewhitelist": "# ХӀара цӀерийн «кӀайн могӀам» бу, Комменташна лелае «#».\n# Ӏадйитаран кепаца символийн регистарта экамалла яц.",
+ "titleblacklist-forbidden-edit": "<div align=\"center\" style=\"border: 1px solid #f88; padding: 0.5em; margin-bottom: 3px; font-size: 95%; width: auto;\">\n'''\"$2\" цӀарца агӀо кхолла йиш яц''' <br />\nИза могӀам чура хӀокху магийна йицу цӀерийн юкъа йогӀу: '''''$1'''''\n</div>",
+ "titleblacklist-forbidden-move": "АгӀона «$2» цӀе → «$3» хуьйцийла яц, Ӏаьржа могӀам чохь керла цӀе ца магийна хилар бахьнехь дӀаяздарца: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "«$2» цӀарца файл кхолла магийна дац. И юкъа йогӀу ца магийна чу дӀаяздаршна: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Декъашхочун «$2» цӀе лелаян ца магийна.\nИ цӀе Ӏаьржа могӀам чура дӀаяздаршна юкъа йогӀу: <code>$1</code>",
+ "titleblacklist-invalid": "Ца магийна цӀерийн могӀам чура хӀара {{PLURAL:$1|1=могӀам|могӀамаш}} {{PLURAL:$1|нийса дац}}. Дехар до Ӏалаш яле {{PLURAL:$1|1=и|уьш}} нийса де:",
+ "titleblacklist-override": "Ӏаьржа могӀам тергал мабе",
+ "right-tboverride": "Ӏаьржачу могӀанийн чура агӀонийн цӀерш тергалцаяр я декъашхой тергалцабар",
+ "right-tboverride-account": "Ӏаьржачу могӀанийн чура декъашхойн цӀерш тергалцаяр",
+ "right-titleblacklistlog": "магийна йоцу цӀерийн тептаре хьажар"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ckb.json b/www/wiki/extensions/TitleBlacklist/i18n/ckb.json
new file mode 100644
index 00000000..caf78d7c
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ckb.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Calak"
+ ]
+ },
+ "action-titleblacklistlog": "دیتنی لۆگی پێرستی ڕەشی سەردێڕ",
+ "log-name-titleblacklist": "لۆگی پێرستی ڕەشی سەردێڕ",
+ "titleblacklist-override": "پێرستی ڕەش لەبەر چاو مەگرە",
+ "right-tboverride": "تێپەڕاندنی تاوتوێی پێرستی ڕەشی سەردێڕ یان ناوی بەکارھێنەری",
+ "right-titleblacklistlog": "دیتنی لۆگی پێرستی ڕەشی سەردێڕ"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/cs.json b/www/wiki/extensions/TitleBlacklist/i18n/cs.json
new file mode 100644
index 00000000..c8e5c6b6
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/cs.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Danny B.",
+ "Li-sung",
+ "Matěj Grabovský",
+ "Mormegil",
+ "Dvorapa"
+ ]
+ },
+ "action-titleblacklistlog": "prohlížet knihu černé listiny názvů",
+ "log-name-titleblacklist": "Kniha černé listiny názvů",
+ "log-description-titleblacklist": "Tyto události sledují zásahy černé listiny názvů.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|způsobil|způsobila}} zásah černé listiny názvů při pokusu o založení účtu $3 odpovídajícího $4.",
+ "titleblacklist-desc": "Umožňuje správcům zakázat tvorbu stránek a uživatelských účtů na základě [[MediaWiki:Titleblacklist|černé listiny názvů]] a [[MediaWiki:Titlewhitelist|bílé listiny názvů]]",
+ "titleblacklist": "# Toto je černá listina názvů. Stránky a uživatelské účty, jejichž název odpovídá některému regulárnímu výrazu, nebude možné vytvořit.\n# Komentáře začínají znakem „#“.\n# Na velikosti písmen nezáleží.",
+ "titlewhitelist": "# Toto je bílá listina názvů stránek. Řádky komentářů začínají znakem „#“.\n# Na velikosti písmen nezáleží.",
+ "titleblacklist-forbidden-edit": "Je zakázáno vytvořit stránku s názvem „$2“. Odpovídá následujícímu záznamu na černé listině: <code>$1</code>",
+ "titleblacklist-forbidden-move": "„$2“ nelze přesunout na název „$3“, protože název „$3“ je zakázáno vytvářet. Odpovídá následujícímu záznamu na černé listině: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Soubor s jménem „$2“ je zakázáno vytvářet. Název odpovídá následujícímu záznamu na černé listině: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Není dovoleno zaregistrovat uživatelské jméno „$2“.\nOdpovídá následující položce černé listiny: <code>$1</code>",
+ "titleblacklist-invalid": "Na černé listině názvů {{PLURAL:$1|je následující řádka neplatný regulární výraz|jsou následující řádky neplatné regulární výrazy|jsou následující řádky regulární výrazy}} a je nutné {{PLURAL:$1|ji|je|je}} před uložením stránky opravit :",
+ "titleblacklist-override": "Ignorovat černou listinu",
+ "titleblacklist-warning": "<strong>Upozornění: Tuto stránku mohou editovat jen správci a další uživatelé s oprávněním <code>tboverride</code>, protože odpovídá následujícímu záznamu černé listiny názvů:</strong><br /><code>$1</code>",
+ "right-tboverride": "Překonání zakázaných názvů stránek nebo uživatelských jmen",
+ "right-tboverride-account": "Překonání černé listiny uživatelských jmen",
+ "right-titleblacklistlog": "Prohlížení knihy černé listiny názvů",
+ "apihelp-titleblacklist-description": "Zkontrolovat název stránky, souboru nebo uživatelské jméno vůči černé listině TitleBlacklist.",
+ "apihelp-titleblacklist-param-title": "Řetězec, který se má vůči černé listině zkontrolovat.",
+ "apihelp-titleblacklist-param-action": "Akce, která se má zkontrolovat.",
+ "apihelp-titleblacklist-param-nooverride": "Nepokoušet se o překonání černé listiny názvů.",
+ "apihelp-titleblacklist-example-1": "Zkontrolovat, jestli je [[Foo]] na černé listině.",
+ "apihelp-titleblacklist-example-2": "Zkontrolovat, zda je černou listinou zakázána editace [[Bar]]."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/cy.json b/www/wiki/extensions/TitleBlacklist/i18n/cy.json
new file mode 100644
index 00000000..308051f3
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/cy.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lloffiwr"
+ ]
+ },
+ "titleblacklist-override": "Anwybyddu'r rhestr ddu"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/da.json b/www/wiki/extensions/TitleBlacklist/i18n/da.json
new file mode 100644
index 00000000..a6e0e08f
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/da.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "HenrikKbh",
+ "Hylle",
+ "Sarrus"
+ ]
+ },
+ "titleblacklist-desc": "Tillader administartorer at forhindre oprettelse af og brugerkonti gennem [[MediaWiki:Titleblacklist|blacklist]] og en [[MediaWiki:Titlewhitelist|whitelist]]",
+ "titleblacklist": "# Dette er en titel sortliste. Titler og brugere, der svarer til et regulært udtryk her kan ikke oprettes.\n# Brug \"#\" for kommentarer.\n# Denne er som standard ufølsom overfor store/små bogstaver",
+ "titlewhitelist": "# Dette er en titel hvidliste. \n# Brug \"#\" for kommentarer.\n# Denne er som standard ufølsom overfor store/små bogstaver",
+ "titleblacklist-forbidden-edit": "Sidenavnet \"$2\" er blevet beskyttet mod oprettelse<br />\nDet svarer til følgende blacklistpost: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" kan ikke flyttes til \"$3\", fordi artikelnavnet \"$3\" er blevet beskyttet mod oprettelse. Det svarer til følgende blacklistpost: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Sidenavnet \"$2\" kan ikke oprettes<br />\nDet svarer til følgende sortlistepost: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Brugernavnet \"$2\" kan ikke oprettes<br />\nDet svarer til følgende sortlistepost: <code>$1</code>",
+ "titleblacklist-invalid": "Følgende {{PLURAL:$1|linje|linjer}} i titelsortelisten er {{PLURAL:$1|ugyldig|ugyldige}}; korriger venligst {{PLURAL:$1|den|dem}} før du gemmer:",
+ "titleblacklist-override": "Ignorer sortlisten",
+ "right-tboverride": "Tilsidesæt titel- eller brugernavnsortlisten",
+ "right-tboverride-account": "Tilsidesæt brugernavn sortliste"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/de-ch.json b/www/wiki/extensions/TitleBlacklist/i18n/de-ch.json
new file mode 100644
index 00000000..ace58999
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/de-ch.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Filzstift",
+ "Geitost"
+ ]
+ },
+ "titleblacklist": "# Dies ist eine Schwarze Liste für Seiten- und Benutzernamen. Wenn auf einen solchen Namen einer der folgenden regulären Ausdrücke zutrifft, kann er nicht erstellt werden.\n# Verwende «#» für Kommentare.\n# Standardgemäss wird nicht zwischen Gross- und Kleinschreibung unterschieden.",
+ "titlewhitelist": "# Dies ist die Ausnahmeliste von der Schwarzen Liste unerwünschter Seiten- und Benutzernamen. Benutze «#» für Kommentare.\n# Standardmässig wird nicht zwischen Gross- und Kleinschreibung unterschieden.",
+ "right-tboverride": "Die schwarze Liste unerwünschter Seiten- oder Benutzernamen ausser Kraft setzen",
+ "right-tboverride-account": "Die schwarze Liste unerwünschter Benutzernamen ausser Kraft setzen."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/de-formal.json b/www/wiki/extensions/TitleBlacklist/i18n/de-formal.json
new file mode 100644
index 00000000..0cd82e26
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/de-formal.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Imre",
+ "Kghbln"
+ ]
+ },
+ "titleblacklist": "# Dies ist eine Schwarze Liste für Seiten- und Benutzernamen. Sofern auf einen solchen Namen einer der folgenden regulären Ausdrücke zutrifft, kann er nicht erstellt werden.\n# Verwenden Sie „#“ für Kommentare.\n# Standardmäßig wird nicht zwischen Groß- und Kleinschreibung unterschieden.",
+ "titlewhitelist": "# Dies ist die Ausnahmeliste von der Schwarzen Liste unerwünschter Seiten- und Benutzernamen. Benutzen Sie „#“ für Kommentare.\n# Standardmäßig wird nicht zwischen Groß- und Kleinschreibung unterschieden.",
+ "titleblacklist-invalid": "Die {{PLURAL:$1|folgende Zeile|folgenden Zeilen}} in der Sperrliste {{PLURAL:$1|ist|sind}} ungültig; bitte korrigieren Sie diese vor dem Speichern:"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/de.json b/www/wiki/extensions/TitleBlacklist/i18n/de.json
new file mode 100644
index 00000000..9b089ca7
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/de.json
@@ -0,0 +1,43 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geitost",
+ "Giftpflanze",
+ "Imre",
+ "Kghbln",
+ "MF-Warburg",
+ "Metalhead64",
+ "Raimond Spekking",
+ "The Evil IP address",
+ "Umherirrender",
+ "Wnme",
+ "MGChecker",
+ "Debenben"
+ ]
+ },
+ "action-titleblacklistlog": "das Titel-Blacklist-Logbuch anzusehen",
+ "log-name-titleblacklist": "Titel-Blacklist-Logbuch",
+ "log-description-titleblacklist": "Dies ist ein Logbuch der Titel-Blacklist-Treffer.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|verursachte}} einen Titel-Blacklist-Treffer beim Versuch, das Benutzerkonto $3 mit dem übereinstimmenden Eintrag „$4“ zu erstellen.",
+ "titleblacklist-desc": "Ermöglicht es Administratoren die Erstellung unerwünschter Seiten- und Benutzernamen zu unterbinden: [[MediaWiki:Titleblacklist]] und [[MediaWiki:Titlewhitelist]]",
+ "titleblacklist": "# Dies ist eine Schwarze Liste für Seiten- und Benutzernamen. Sofern auf einen solchen Namen einer der folgenden regulären Ausdrücke zutrifft, kann er nicht erstellt werden.\n# Verwende „#“ für Kommentare.\n# Standardmäßig wird nicht zwischen Groß- und Kleinschreibung unterschieden.",
+ "titlewhitelist": "# Dies ist die Ausnahmeliste von der Schwarzen Liste unerwünschter Seiten- und Benutzernamen. Benutze „#“ für Kommentare.\n# Standardmäßig wird nicht zwischen Groß- und Kleinschreibung unterschieden.",
+ "titleblacklist-forbidden-edit": "'''Eine Seite mit dem Titel „$2“ kann nicht erstellt werden.'''<br />Der Titel kollidiert mit diesem Sperrbegriff: '''''$1'''''",
+ "titleblacklist-forbidden-move": "'''Die Seite „$2“ kann nicht nach „$3“ verschoben werden.'''<br />Der Titel kollidiert mit diesem Sperrbegriff: '''''$1'''''",
+ "titleblacklist-forbidden-upload": "'''Eine Datei mit dem Namen „$2“ kann nicht hochgeladen werden.'''<br />Der Titel kollidiert mit diesem Sperrbegriff: '''''$1'''''",
+ "titleblacklist-forbidden-new-account": "Die Registrierung des Benutzernamens „$2“ ist nicht erwünscht.\nFolgender Eintrag aus der Liste unerwünschter Benutzernamen führte zur Ablehnung: <code>$1</code>",
+ "titleblacklist-invalid": "Die {{PLURAL:$1|folgende Zeile|folgenden Zeilen}} in der Sperrliste {{PLURAL:$1|ist|sind}} ungültig; bitte korrigiere diese vor dem Speichern:",
+ "titleblacklist-override": "Blacklist ignorieren",
+ "titleblacklist-override-help": "Benutzer mit ausreichenden Rechten können dies setzen, um die Titel-Blacklist-Prüfungen zu ignorieren.",
+ "titleblacklist-warning": "<strong>Warnung: Diese Seite kann nur von Administratoren und anderen Benutzern mit dem <code>tboverride</code>-Recht bearbeitet werden, da sie mit dem folgenden Titel-Blacklist-Eintrag übereinstimmt:</strong><br /><code>$1</code>",
+ "right-tboverride": "Die schwarze Liste unerwünschter Seiten- oder Benutzernamen außer Kraft setzen",
+ "right-tboverride-account": "Die schwarze Liste unerwünschter Benutzernamen außer Kraft setzen",
+ "right-titleblacklistlog": "Das Titel-Blacklist-Logbuch ansehen",
+ "apihelp-titleblacklist-description": "Überprüft einen Seiten-, Datei- oder Benutzernamen gegen die Titel-Blacklist.",
+ "apihelp-titleblacklist-summary": "Überprüft einen Seiten-, Datei- oder Benutzernamen gegen die Titel-Blacklist.",
+ "apihelp-titleblacklist-param-title": "Die Zeichenfolge, die gegen die Blacklist geprüft werden soll.",
+ "apihelp-titleblacklist-param-action": "Die zu überprüfende Aktion.",
+ "apihelp-titleblacklist-param-nooverride": "Nicht versuchen, die Titel-Blacklist zu überschreiben.",
+ "apihelp-titleblacklist-example-1": "Überprüft, ob [[Foo]] blackgelistet ist",
+ "apihelp-titleblacklist-example-2": "Überprüft, ob [[Bar]] für das Bearbeiten blackgelistet ist"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/diq.json b/www/wiki/extensions/TitleBlacklist/i18n/diq.json
new file mode 100644
index 00000000..9030fc2d
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/diq.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aspar",
+ "Erdemaslancan",
+ "Marmase"
+ ]
+ },
+ "titleblacklist-desc": "serkaran re desturê vıraştışê pel u hesabê karberan dano, qey qedexekerdışi re yew [[MediaWiki:Titleblacklist|listeya risiyayan]] u [[MediaWiki:Titlewhitelist|listeya risıpiyan]] dano.",
+ "titleblacklist": "# No yew sernameyê qerelisteyo.Tiya dı ifadey timarınana sernamey u karberi nêvırazênê.\n# Qan dê vatışa \"#\" kar kerê.\n# No farazi herfa qıc u gırdi re nêhesıbneno",
+ "titlewhitelist": "# no yew sernameyê listeya risıpiyan o. qey mışorekerdışi \"#\" bışuxulnê.\n# no farazi herfa qıc u gırdi re hessas niyo",
+ "titleblacklist-forbidden-edit": "vıraştışê sernameyê \"$2\" i qedexe bı .\nmalumatê ey na listeyasiya de zepê ya: <code>$1</code>",
+ "titleblacklist-forbidden-move": "no \"$2\", \"$3\" pel re nêkırışiyeno çunke vıraştışê sernameyê \"$3\"i qedexe biyo. \nmalumatê ey na listeyasiya de zepê ya: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "vıraştışê sernameyê dosyaya\"$2\"i qedexe bı.\nmalumatê ey na listeyasiya de zêpê ya: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "vıraştışê nameyê karberê\"$2\" i qedexe bı.\nmalumatê ey na listeyasiya de zêpê ya: <code>$1</code>",
+ "titleblacklist-invalid": "Na ğırab lista dı {{PLURAL:$1|en asatır|ené satıri}} néravérené;\nVerdé qeyd kerdışi timar keré:",
+ "titleblacklist-override": "Tenilisti mehesebne",
+ "right-tboverride": "Siya listeya sernuşti nêravêrde ke",
+ "right-tboverride-account": "Tenilisteya naman dê karberan mehesebnê"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/dsb.json b/www/wiki/extensions/TitleBlacklist/i18n/dsb.json
new file mode 100644
index 00000000..d332ce46
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/dsb.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "titleblacklist-desc": "Zmóžnja administratoram napóranjeju bokow a wužywarskich kontow pó [[MediaWiki:Titleblacklist|cornej lisćinje]] a [[MediaWiki:Titlewhitelist|běłej lisćinje]] zajźowaś",
+ "titleblacklist": "# To jo corna lisćina titelow. Titele a wužywarje, kótarež pśitrjefiju na regularny wuraz, njedaju se napóraś.\n# Wužyj \"#\" za komentary.\n# Pó standarźe to njeźiwa na wjelikopisanje",
+ "titlewhitelist": "# To jo běła lisćina titelow. Wužyj \"#\" za komentary.\n# Pó standarźe to njeźiwa na wjelikopisanje.",
+ "titleblacklist-forbidden-edit": "Titel \"$2\" jo pśeśiwo napóranjeju blokěrowany.\nPśitrjefijo na slědujucy zapisk: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" njedajo se do \"$3\" pśesunuś, dokulaž titel \"$3\" pśeśiwo napóranjeju blokěrowany.\nPśetrjefijo na slědujucy zapisk corneje lisćiny: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Datajowe mě \"$2\" je so blokěrowało pśeśiwo napóranjeju.\nPśetrjefijo na slědujucy zapisk corneje lisćiny: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Wužywarske mě \"$2\" jo se blokěrowało pśeśiwo napóranjeju.\nPśetrjefijo na slědujucy zapisk corneje lisćiny: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Slědujuca smužka|Slědujucej smužce|slědujuce smužki|Slědujuce smužki}} w cornej lisćinje titelow {{PLURAL:$1|jo njepłaśiwa|stej njepłaśiwej|su njepłaśiwe |su njepłaśiwe}}; pšosym skorigěruj {{PLURAL:$1|ju|jej|je|je}} do składowanja:",
+ "titleblacklist-override": "Carnu lisćinu ignorěrowaś",
+ "right-tboverride": "Płaśiwosć carneje lisćiny nastawkow abo wužywarskich mjenjow wótpóraś",
+ "right-tboverride-account": "Płaśiwosć carneje lisćiny wužywarskich mjenjow wótpóraś"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/el.json b/www/wiki/extensions/TitleBlacklist/i18n/el.json
new file mode 100644
index 00000000..1bf2a513
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/el.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dead3y3",
+ "Geraki",
+ "Glavkos",
+ "Protnet"
+ ]
+ },
+ "titleblacklist-desc": "Επιτρέπει στους διαχειριστές να απαγορέψουν την δημιουργία σελίδων και λογαριασμών χρηστών σύμφωνα με μία [[MediaWiki:Titleblacklist|μαύρη λίστα]] και μία [[MediaWiki:Titlewhitelist|άσπρη λίστα]]",
+ "titleblacklist": "# Αυτή είναι μία μαύρη λίστα για τίτλους σελίδων. Τίτλοι και χρήστες οι οποίοι ταιριάζουν με μια regular expression εδώ, δεν μπορούν να δημιουργηθούν.\n# Χρησιμοποιήστε το σύμβολο «#» για σχόλια.\n# Από προεπιλογή είναι χωρίς διάκριση πεζών/κεφαλαίων .",
+ "titlewhitelist": "# Αυτή είναι μία λευκή λίστα για τίτλους σελίδων. Χρησιμοποιήστε το σύμβολο «#» για σχόλια.\n# Από προεπιλογή είναι χωρίς διάκριση πεζών/κεφαλαίων .",
+ "titleblacklist-forbidden-edit": "Η δημιουργία του τίτλου \"$2\" έχει φραγεί.\nΤαιριάζει στην ακόλουθη εγγραφή της μαύρης λίστας: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Η σελίδα «$2» δεν μπορεί να μετακινηθεί στην «$3», επειδή η δημιουργία του τίτλου «$3» έχει φραγεί.\nΤαιριάζει στην ακόλουθη εγγραφή της μαύρης λίστας: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Η δημιουργία του ονόματος αρχείου «$2» έχει φραγεί.\nΤαιριάζει στην ακόλουθη εγγραφή της μαύρης λίστας: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Η δημιουργία του ονόματος χρήστη/χρήστριας «$2» έχει φραγεί.\nΤαιριάζει στην ακόλουθη εγγραφή της μαύρης λίστας: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Η ακόλουθη γραμμή|Οι ακόλουθες γραμμές}} στην μαύρη λίστα τίτλων δεν είναι {{PLURAL:$1|έγκυρη|έγκυρες}}· Παρακαλούμε διορθώστε {{PLURAL:$1|την|τις}} πριν την αποθήκευση:",
+ "titleblacklist-override": "Αγνόηση της μαύρης λίστας",
+ "right-tboverride": "Παράκαμψη της μαύρης λίστας τίτλων ή ονομάτων χρηστών",
+ "right-tboverride-account": "Παρακάμψετε την μαύρη λίστα ονομάτων χρήστη"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/en.json b/www/wiki/extensions/TitleBlacklist/i18n/en.json
new file mode 100644
index 00000000..4d53b00c
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/en.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": []
+ },
+ "action-titleblacklistlog": "view the title blacklist log",
+ "log-name-titleblacklist": "Title blacklist log",
+ "log-description-titleblacklist": "These events track title blacklist hits.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|caused}} a title blacklist hit when trying to create account $3 matching $4.",
+ "titleblacklist-desc": "Allows administrators to forbid creation of pages and user accounts per a [[MediaWiki:Titleblacklist|blacklist]] and [[MediaWiki:Titlewhitelist|whitelist]]",
+ "titleblacklist": "# This is a title blacklist. Titles and users that match a regular expression here cannot be created.\n# Use \"#\" for comments.\n# This is case insensitive by default",
+ "titlewhitelist": "# This is a title whitelist. Use \"#\" for comments.\n# This is case insensitive by default",
+ "titleblacklist-forbidden-edit": "The title \"$2\" has been banned from creation.\nIt matches the following blacklist entry: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" cannot be moved to \"$3\", because the title \"$3\" has been banned from creation.\nIt matches the following blacklist entry: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "The filename \"$2\" has been banned from creation.\nIt matches the following blacklist entry: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "The user name \"$2\" has been banned from creation.\nIt matches the following blacklist entry: <code>$1</code>",
+ "titleblacklist-invalid": "The following {{PLURAL:$1|line|lines}} in the title blacklist {{PLURAL:$1|is|are}} invalid;\nplease correct {{PLURAL:$1|it|them}} before saving:",
+ "titleblacklist-override": "Ignore the blacklist",
+ "titleblacklist-override-help": "Users with sufficient privileges can set this to ignore the title blacklist checks.",
+ "titleblacklist-warning": "<strong>Warning: This page can only be edited by administrators and other users with the <code>tboverride</code> right because it matches the following title blacklist entry:</strong><br /><code>$1</code>",
+ "right-tboverride": "Override the title or username blacklist",
+ "right-tboverride-account": "Override the username blacklist",
+ "right-titleblacklistlog": "View title blacklist log",
+ "apihelp-titleblacklist-description": "Validate a page title, filename, or username against the TitleBlacklist.",
+ "apihelp-titleblacklist-summary": "Validate a page title, filename, or username against the TitleBlacklist.",
+ "apihelp-titleblacklist-param-title": "The string to validate against the blacklist.",
+ "apihelp-titleblacklist-param-action": "The action to be checked.",
+ "apihelp-titleblacklist-param-nooverride": "Don't try to override the titleblacklist.",
+ "apihelp-titleblacklist-example-1": "Check whether [[Foo]] is blacklisted",
+ "apihelp-titleblacklist-example-2": "Check whether [[Bar]] is blacklisted for editing",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Ignore spoofing checks (requires one of the following rights: <code>tboverride</code>, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/eo.json b/www/wiki/extensions/TitleBlacklist/i18n/eo.json
new file mode 100644
index 00000000..24f8c60a
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/eo.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mihxil",
+ "Yekrats",
+ "Gamliel Fishkin"
+ ]
+ },
+ "titleblacklist-desc": "Rajtigas la adminstrantojn malpermesi kreadon de paĝoj kaj uzanto-kontoj per [[MediaWiki:Titleblacklist|nigralisto]] kaj [[MediaWiki:Titlewhitelist|blankalisto]]",
+ "titleblacklist": "# Jen titola nigralisto. Titoloj kaj uzantoj kiuj kongruas regulan esprimon ĉi tie ne povas esti kreitaj.\n# Uzu \"#\" por komentoj.\n# Ĉi tio estas usklecodistingiva defaŭlte.",
+ "titlewhitelist": "# Ĉi tio estas blanklisto por titoloj. Uzu \"#\" por komentoj.\n# Ĉi tio estas defaŭlte uskleca maldistingiva.",
+ "titleblacklist-forbidden-edit": "La titolo \"$2\" estis malpermesita de kreado.\nĜi similas la jenan nigralistan listeron: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" ne povas esti alinomita al \"$3\", ĉar la titolo \"$3\" estis forbarita de kreado.\nĜi kongruas la jenan nigralistanon: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "La dosiernomo \"$2\" estis forbarita de kreado.\nĜi kongruas la jenan nigralistanon: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "La uzanto-nomo \"$2\" estis forbarita de kreado.\nĜi kongruas la jenan nigralistano: <code>$1</code>",
+ "titleblacklist-invalid": "La {{PLURAL:$1|jena linio|jenaj linioj}} en la titola nigralisto estas {{PLURAL:$1|malvalida|malvalidaj}}; \nbonvolu korekti {{PLURAL:$1|gxi|ilin}} antaŭ konservado:",
+ "titleblacklist-override": "Ignori la nigraliston",
+ "titleblacklist-warning": "<strong>Averto:</strong> Ĉi tiun pagon povas redakti nur administrantoj kaj aliaj uzantoj kun la rajto <code>tboverride</code>, ĉar ĝi koincidas al jena rikordo en la nigra listo:<br /><code>$1</code>",
+ "right-tboverride": "Anstataŭskribi la nigraliston de salutnomoj kaj titloj",
+ "right-tboverride-account": "Transpasi la nigran liston pri uzantoj."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/es.json b/www/wiki/extensions/TitleBlacklist/i18n/es.json
new file mode 100644
index 00000000..dce163ba
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/es.json
@@ -0,0 +1,38 @@
+{
+ "@metadata": {
+ "authors": [
+ "Armando-Martin",
+ "Crazymadlover",
+ "Locos epraix",
+ "Remember the dot",
+ "Sanbec",
+ "MarcoAurelio",
+ "Macofe",
+ "Lemondoge",
+ "Dgstranz"
+ ]
+ },
+ "action-titleblacklistlog": "ver el registro de la lista negra de títulos",
+ "log-name-titleblacklist": "Registro de la lista negra de títulos",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|causadas}} un título de la lista negra de golpe al intentar crear una cuenta de$3 la coincidencia de $4.",
+ "titleblacklist-desc": "Permite que los administradores prohíban la creación de páginas y cuentas de usuario mediante una [[MediaWiki:Titleblacklist|lista negra]] y una [[MediaWiki:Titlewhitelist|lista blanca]]",
+ "titleblacklist": "# Esta es una lista negra de títulos. No se pueden crear títulos o usuarios que coincidan con una de estas expresiones regulares.\n# Use «#» para comentarios.\n# Esta es insensible a las mayúsculas por defecto",
+ "titlewhitelist": "# Esta es una lista blanca de títulos. Usa «#» para comentarios.\n# Por omisión, no distingue mayúsculas de minúsculas",
+ "titleblacklist-forbidden-edit": "Se ha bloqueado la creación del título «$2».\nCoincide con la siguiente entrada de lista negra: <code>$1</code>",
+ "titleblacklist-forbidden-move": "«$2» no puede ser trasladado a «$3», porque se ha bloqueado la creación del título «$3».\nCoincide con la siguiente entrada de lista negra: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Se ha bloqueado el nombre de archivo «$2».\nCoincide con la entrada de lista negra <code>$1</code>.",
+ "titleblacklist-forbidden-new-account": "Se prohibe crear el nombre de usuario «$2».\nCoincide con la siguiente entrada de la lista negra: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|La siguiente línea|Las siguientes líneas}} de la lista negra no {{PLURAL:$1|es válida|son válidas}};\npor favor corríge{{PLURAL:$1|la|las}} antes de grabar:",
+ "titleblacklist-override": "Ignorar la lista negra",
+ "titleblacklist-warning": "<strong>Advertencia: solo los administradores y los usuarios con el permiso <code>tboverride</code> pueden editar esta página porque esta aparece en la siguiente entrada de la lista negra de títulos:</strong><br /><code>$1</code>",
+ "right-tboverride": "Ignorar la lista negra de títulos o de nombres de usuario",
+ "right-tboverride-account": "Ignorar la lista negra de los nombres de usuario",
+ "right-titleblacklistlog": "Ver el registro de la lista negra de títulos",
+ "apihelp-titleblacklist-description": "Validar el nombre de un artículo, archivo o usuario contra la TitleBlacklist (lista negra de títulos).",
+ "apihelp-titleblacklist-param-title": "La cadena que se validará contra la lista negra.",
+ "apihelp-titleblacklist-param-action": "La acción que verificar.",
+ "apihelp-titleblacklist-param-nooverride": "No intentar pisar la lista negra de títulos.",
+ "apihelp-titleblacklist-example-1": "Comprobar si [[Foo]] está en la lista negra",
+ "apihelp-titleblacklist-example-2": "Comprobar si [[Bar]] está en la lista negra de edición",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Ignorar comprobaciones de suplantación (requiere uno de los siguientes permisos: <code>tboverride</code> o <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/et.json b/www/wiki/extensions/TitleBlacklist/i18n/et.json
new file mode 100644
index 00000000..a85d600a
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/et.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pikne"
+ ]
+ },
+ "action-titleblacklistlog": "pealkirjade musta nimekirja logi vaadata",
+ "log-name-titleblacklist": "Pealkirjade musta nimekirja logi",
+ "log-description-titleblacklist": "Siin logis kajastuvad pealkirjade musta nimekirja tabamused.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|tabas}} pealkirjade musta nimekirja kirjet $4, kui püüdis luua kontot $3.",
+ "titleblacklist-desc": "Võimaldab administraatoritel vastavalt [[MediaWiki:Titleblacklist|mustale]] ja [[MediaWiki:Titlewhitelist|valgele nimekirjale]] keelata lehekülgede ja kasutajakontode loomise.",
+ "titleblacklist": "# See on pealkirjade must nimekiri. Siinsetele regulaaravaldistele vastavaid pealkirju ega kasutajaid ei saa luua.\n# Kommentaariks kasuta märki \"#\".\n# Vaikimisi on see tõstutundetu",
+ "titlewhitelist": "# See pealkiri on valges nimekirjas. Kommentaariks kasuta märki \"#\". \n# Vaikimisi on see tõstutundetu",
+ "titleblacklist-forbidden-edit": "Lehekülje pealkirjaga \"$2\" loomine on keelatud.\nSee vastab järgmisele musta nimekirja sissekandele: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Lehekülge \"$2\" ei saa teisaldada pealkirja \"$3\" alla, sest lehekülje loomine pealkirjaga \"$3\" on keelatud.\nSee vastab järgmisele musta nimekirja sissekandele: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Faili pealkirjaga \"$2\" on keelatud üles laadida.\nSee vastab järgmisele musta nimekirja sissekandele: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Kasutajat nimega \"$2\" on keelatud luua.\nSee vastab järgmisele musta nimekirja sissekandele: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Järgmine|Järgmised}} musta nimekirja {{PLURAL:$1|rida on vigane|read on vigased}}.\nPalun paranda {{PLURAL:$1|see|need}} enne salvestamist:",
+ "titleblacklist-override": "Eira musta nimekirja",
+ "titleblacklist-warning": "<strong>Märkus: Seda lehekülge saavad redigeerida ainult administraatorid ja kasutajad õigusega <code>tboverride</code>, sest see vastab pealkirjade musta nimekirja järgmisele sissekandele:</strong><br /><code>$1</code>",
+ "right-tboverride": "Eirata pealkirjade või kasutajanimede musta nimekirja",
+ "right-tboverride-account": "Eirata kasutajanimede musta nimekirja",
+ "right-titleblacklistlog": "Vaadata pealkirjade musta nimekirja logi",
+ "apihelp-titleblacklist-description": "Lehekülje pealkirja, failinime või kasutajanime valideerimine pealkirjade musta nimekirja vastu.",
+ "apihelp-titleblacklist-param-title": "Sõne, mida musta nimekirja vastu valideerida.",
+ "apihelp-titleblacklist-param-action": "Toiming, mida kontrollida.",
+ "apihelp-titleblacklist-param-nooverride": "Ära ürita pealkirjade musta nimekirja ümber kehtestada.",
+ "apihelp-titleblacklist-example-1": "Kontrolli, kas [[Foo]] on mustas nimekirjas",
+ "apihelp-titleblacklist-example-2": "Kontrolli, kas [[Bar]] on mustas nimekirjas redigeerimise keelamisega"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/fa.json b/www/wiki/extensions/TitleBlacklist/i18n/fa.json
new file mode 100644
index 00000000..8fa29b64
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/fa.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dalba",
+ "Ebraminio",
+ "Huji",
+ "Ladsgroup",
+ "Reza1615",
+ "Wayiran",
+ "ZxxZxxZ",
+ "Calak",
+ "Bersam"
+ ]
+ },
+ "action-titleblacklistlog": "مشاهدۀ سیاهۀ لیست سیاه عنوان",
+ "log-name-titleblacklist": "سیاهۀ لیست سیاه عنوان",
+ "log-description-titleblacklist": "این رویدادها خوردن به فهرست سیاه را دنبال می‌کنند.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|باعث}} یک برخورد با فهرست سیاه عنوان هنگام ساخت یک حساب کاربری $3 متطابق با $4 شد.",
+ "titleblacklist-desc": "امکان جلوگیری از ایجاد صفحه‌هایی با عنوان‌های خاص را می‌دهد: [[MediaWiki:Titleblacklist]] و [[MediaWiki:Titlewhitelist]]",
+ "titleblacklist": "# این یک فهرست سیاه عنوان‌ها است. عنوان‌هایی که با یک عبارت باقاعده در این صفحه مطابقت کنند را نمی‌توان ایجاد کرد.\n# از «#» برای توضیحات استفاده کنید.\n# به‌طور پیش‌فرض به بزرگ و کوچکی حروف حساس نیست.",
+ "titlewhitelist": "# این یک فهرست سفید برای عنوان‌ها است. از «#» برای افزودن توضیحات استفاده کنید.\n#این فهرست به طور پیش‌فرض به بزرگی و کوچکی حساس نیست",
+ "titleblacklist-forbidden-edit": "ایجاد عنوان «$2» ممنوع شده‌است. این عنوان با این دستور از فهرست سیاه مطابقت می‌کند: <code>$1</code>",
+ "titleblacklist-forbidden-move": "«$2» را نمی‌توان به «$3» انتقال داد. ایجاد «$3» ممنوع است. چون با این دستور از فهرست سیاه مطابقت می‌کند: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "ایجاد نام «$2» برای پرونده‌ها ممنوع است، زیرا با این دستور از فهرست سیاه مطابقت می‌کند: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "حساب کاربری «$2» در برابر ایجاد محافظت شده‌است.\nاین نام کاربری با این قسمت از فهرست سیاه مطابقت دارد: <code>$1</code>",
+ "titleblacklist-invalid": "\n{{PLURAL:$1|سطر|سطرهای}} زیر در فهرست سیاه عنوان‌ها نامجاز {{PLURAL:$1|است|هستند}}؛ لطفاً {{PLURAL:$1|آن|آن‌ها}} را قبل از ذخیره کردن اصلاح کنید:",
+ "titleblacklist-override": "از فهرست سیاه چشم‌پوشی کن",
+ "titleblacklist-warning": "<strong>هشدار: این صفحه فقط توسط مدیران سیستم و کاربرانی که مجوز <code>tboverride</code> دارند قابل ویرایش شدن است؛ چون صفحه منطبق با لیست‌سیاه زیر است: </strong><br /><code>$1</code>",
+ "right-tboverride": "نادیده گرفتن لیست سیاه عنوان یا نام کاربری",
+ "right-tboverride-account": "لغو فهرست سیاه نام کاربری",
+ "right-titleblacklistlog": "مشاهدۀ سیاهۀ لیست سیاه عنوان",
+ "apihelp-titleblacklist-param-nooverride": "سعی نکن فهرست‌سیاه‌نام را بازنویسی کنی",
+ "apihelp-titleblacklist-example-1": "بررسی اینکه آیا [[Foo]] در فهرست سیاه هست یا نه",
+ "apihelp-titleblacklist-example-2": "بررسی اینکه آیا [[Bar]] در فهرست سیاه ویرایش هست یا نه"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/fi.json b/www/wiki/extensions/TitleBlacklist/i18n/fi.json
new file mode 100644
index 00000000..9b024924
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/fi.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Agony",
+ "Cimon Avaro",
+ "Crt",
+ "Nike",
+ "Str4nd",
+ "Stryn",
+ "Pxos"
+ ]
+ },
+ "action-titleblacklistlog": "tarkastella nimien mustan listan lokia",
+ "log-name-titleblacklist": "Nimien mustan listan loki",
+ "log-description-titleblacklist": "Nämä merkinnät jäljittävät osumia nimien mustalla listalla.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|aiheutti}} osuman nimien mustalla listalla yrittäessään luoda tunnusta $3, joka vastaa merkintää $4.",
+ "titleblacklist-desc": "Antaa ylläpitäjille mahdollisuuden kieltää sivujen ja käyttäjätunnusten luominen niiden nimen perusteella: [[MediaWiki:Titleblacklist|musta lista]] ja [[MediaWiki:Titlewhitelist|valkea lista]].",
+ "titleblacklist": "# Tämä on nimien musta lista. Sivuja tai käyttäjätunnuksia, jotka vastaavat täällä määritettyihin säännöllisiin lausekkeisiin, ei voi luoda.\n# Käytä #-merkkiä kommentointiin.\n# Oletusarvoisesti tämä on riippuvainen kirjainkoosta",
+ "titlewhitelist": "# Tämä on nimien valkea lista. Käytä #-merkkiä kommentointiin.\n# Oletusarvoisesti tämä on riippuvainen kirjainkoosta",
+ "titleblacklist-forbidden-edit": "Sivun ”$2” luonti on estetty, koska se täsmää seuraavaan merkintään mustassa listassa: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Sivua ”$2” ei voi siirtää nimelle ”$3”, koska sivun ”$3” luonti on estetty. Se täsmää seuraavaan merkintään mustassa listassa: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Tiedoston ”$2” luonti on estetty, koska se täsmää seuraavaan merkintään mustassa listassa: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Käyttäjätunnuksen ”$2” luonti on estetty.\nSe täsmää seuraavaan mustan listan merkintään: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Seuraava rivi mustalla listalla ei ole kelvollinen|Seuraavat rivit mustalla listalla eivät ole kelvollisia}}. Korjaa {{PLURAL:$1|se|ne}} ennen tallentamista:",
+ "titleblacklist-override": "Ohita mustan listan merkinnät",
+ "right-tboverride": "Ohittaa sivunimien tai käyttäjänimien musta lista",
+ "right-tboverride-account": "Ohittaa käyttäjänimien musta lista",
+ "right-titleblacklistlog": "Tarkastella nimien mustan listan lokia",
+ "apihelp-titleblacklist-example-2": "Tarkista, onko [[Bar]] on mustalla listalla muokkausta varten"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/fr.json b/www/wiki/extensions/TitleBlacklist/i18n/fr.json
new file mode 100644
index 00000000..fce18557
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/fr.json
@@ -0,0 +1,44 @@
+{
+ "@metadata": {
+ "authors": [
+ "Crochet.david",
+ "Elfix",
+ "Gomoko",
+ "Grondin",
+ "IAlex",
+ "Meithal",
+ "PieRRoMaN",
+ "Urhixidur",
+ "Zetud",
+ "JackPotte",
+ "Yasten",
+ "Wladek92"
+ ]
+ },
+ "action-titleblacklistlog": "afficher le journal de la liste noire des titres",
+ "log-name-titleblacklist": "Journal de la liste noire des titres",
+ "log-description-titleblacklist": "Ces événements tracent les correspondances avec la liste noire des titres.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|a provoqué}} une correspondance avec la liste noire des titres en essayant de créer le compte $3 correspondant à $4.",
+ "titleblacklist-desc": "Permet aux administrateurs d’interdire la création de pages et de comptes utilisateur en fonction d’une [[MediaWiki:Titleblacklist|liste noire]] et d’une [[MediaWiki:Titlewhitelist|liste blanche]]",
+ "titleblacklist": "# Ceci est la liste noire des titres. Les titres et les utilisateurs qui correspondent à une expression rationnelle présente sur cette page ne peuvent pas être créés.\n# Utilisez « # » pour insérer des commentaires.\n# Par défaut, les entrées ne sont pas sensibles à la casse.",
+ "titlewhitelist": "# Ceci est la liste blanche des titres. Utilisez « # » pour insérer des commentaires.\n# Les entrées ne sont pas sensibles à la casse par défaut.",
+ "titleblacklist-forbidden-edit": "Le titre « $2 » est interdit à la création.\nDans la liste noire, il est détecté par l’entrée suivante : <code>$1</code>",
+ "titleblacklist-forbidden-move": "La page intitulée « $2 » ne peut être déplacée vers « $3 » parce que cette dernière a été interdite à la création. Dans la liste noire, elle correspond à l’entrée : <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Le fichier intitulé « $2 » est interdit à la création. Dans la liste noire, il correspond à l’entrée : <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Le nom d’utilisateur « $2 » a été banni à la création.\nIl correspond à l’entrée suivante de la liste noire : <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|La ligne suivante|Les lignes suivantes}} dans la liste noire des titres {{PLURAL:$1|est invalide. Veuillez la|sont invalides. Veuillez les}} corriger avant de publier.",
+ "titleblacklist-override": "Ignorer la liste noire",
+ "titleblacklist-override-help": "Les utilisateurs avec des privilèges suffisants peuvent choisir d'ignorer les vérifications de la liste noire des titres.",
+ "titleblacklist-warning": "<strong>Attention : Cette page ne peut être modifiée que par des administrateurs et autres utilisateurs avec le droit <code>tboverride</code>, parce qu’elle correspond à l’entrée suivante de la liste noire des titres :</strong><br /><code>$1</code>",
+ "right-tboverride": "Remplacer la liste noire des titres ou des noms d'utilisateur",
+ "right-tboverride-account": "Ignorer la liste noire des noms d'utilisateur",
+ "right-titleblacklistlog": "Afficher le journal de la liste noire des titres",
+ "apihelp-titleblacklist-description": "Valider un titre de page, un nom de fichier, ou un nom d’utilisateur, d’après TitleBlacklist.",
+ "apihelp-titleblacklist-summary": "Valider un titre de page, un nom de fichier ou un nom d’utilisateur d’après TitleBlacklist.",
+ "apihelp-titleblacklist-param-title": "La chaîne à valider d’après la liste noire.",
+ "apihelp-titleblacklist-param-action": "L’action à vérifier.",
+ "apihelp-titleblacklist-param-nooverride": "N’essayez pas d’écraser la liste noire des titres.",
+ "apihelp-titleblacklist-example-1": "Vérifier si [[Foo]] est en liste noire",
+ "apihelp-titleblacklist-example-2": "Vérifier si [[Bar]] est en liste noire pour modification",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Ignorer les contrôles d’usurpation (nécessite un des droits suivants : <code>tboverride</code>, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/frp.json b/www/wiki/extensions/TitleBlacklist/i18n/frp.json
new file mode 100644
index 00000000..6bc4864e
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/frp.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChrisPtDe"
+ ]
+ },
+ "titleblacklist-desc": "Pèrmèt ux administrators de dèfendre la crèacion de pâges et de comptos usanciér d’aprés una [[MediaWiki:Titleblacklist|lista nêre]] et una [[MediaWiki:Titlewhitelist|lista blanche]].",
+ "titleblacklist": "# O est la lista nêre des titros. Los titros et los usanciérs que corrèspondont a una èxprèssion racionèla presenta sur ceta pâge pôvont pas étre fêts.\n# Utilisâd « # » por entrebetar des comentèros.\n# Per dèfôt, les entrâs sont pas sensibles a la câssa.",
+ "titlewhitelist": "# O est la lista blanche des titros. Utilisâd « # » por entrebetar des comentèros.\n# Per dèfôt, les entrâs sont pas sensibles a la câssa.",
+ "titleblacklist-forbidden-edit": "Lo titro « $2 » at étâ dèfendu a la crèacion.\nDens la lista nêre, corrèspond a ceta entrâ : <code>$1</code>",
+ "titleblacklist-forbidden-move": "La pâge « $2 » pôt pas étre renomâ en « $3 », perce que lo titro « $3 » at étâ dèfendu a la crèacion.\nDens la lista nêre, corrèspond a ceta entrâ : <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Lo nom de fichiér « $2 » at étâ dèfendu a la crèacion.\nDens la lista nêre, corrèspond a ceta entrâ : <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Lo nom d’usanciér « $2 » at étâ dèfendu a la crèacion.\nDens la lista nêre, corrèspond a ceta entrâ : <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Ceta legne|Cetes legnes}} dens la lista nêre des titros {{PLURAL:$1|est envalida|sont envalides}} ;\n{{PLURAL:$1|la|les}} volyéd corregiér devant qu’encartar :",
+ "titleblacklist-override": "Ignorar la lista nêre",
+ "right-tboverride": "Ignorar la lista nêre des titros ou ben des noms d’utilisator",
+ "right-tboverride-account": "Ignorar la lista nêre des noms d’usanciér"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ga.json b/www/wiki/extensions/TitleBlacklist/i18n/ga.json
new file mode 100644
index 00000000..32cc1073
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ga.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alison"
+ ]
+ },
+ "titleblacklist-desc": "Ceadaionn na riarthóirí coisc a chur faoi leathanaigh agus cuntais nua a chruthú, de réir [[MediaWiki:Titleblacklist|dúliosta teideail]] agus [[MediaWiki:Titlewhitelist|bánliosta teideail]]",
+ "titleblacklist": "# Seo é an dúliosta teideail. Ní féidir teideail ná úsáideoirí a chruthú atá meaitseáil slonn rialta anseo.\n# Usáideann \"#\" mar nótaí tráchta.\n# Tá an cás seo neamhíogair de réir réamhshocraithe",
+ "titlewhitelist": "# Seo é an bánliosta teideail. Usáideann \"#\" mar nótaí tráchta.\n# Tá an cás seo neamhíogair de réir réamhshocraithe",
+ "titleblacklist-forbidden-edit": "Tá toirmeasc ar an teideal \"$2 a chruthú.<br />\nTá sé chomhoiriúna leis an iontráil dúliosta a leanas: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Ní féidir \"$2\" a athainmnigh go \"$3\", mar tá an teideal \"$3\" coiscthe faoi chruthú.\nTá sé chomhoiriúint leis an iontráil seo a leanas sa dúliosta teideail: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Tá an ainm comhaid \"$2\" coiscthe faoi chruthú.\nTá sé chomhoiriúint leis an iontráil seo a leanas sa dúliosta teideail: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Tá an ainm úsáideorá \"$2\" coiscthe faoi chruthú.\nTá sé chomhoiriúint leis an iontráil seo a leanas sa dúliosta teideail: <code>$1</code>",
+ "titleblacklist-invalid": "Tá {{PLURAL:$1|an|na}} {{PLURAL:$1|líne|líonta}} seo a leanas neamhbhailí sa dúliosta teideail;\nceartaigh {{PLURAL:$1|é|iad}} roimh shábháil, le d'thoil:",
+ "right-tboverride": "Sáraíocht an dúliosta teideail"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/gl.json b/www/wiki/extensions/TitleBlacklist/i18n/gl.json
new file mode 100644
index 00000000..80628ecd
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/gl.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alma",
+ "Toliño",
+ "Xosé",
+ "Elisardojm",
+ "Banjo"
+ ]
+ },
+ "action-titleblacklistlog": "ver o rexistro da lista negra de títulos",
+ "log-name-titleblacklist": "Rexistro da lista negra de títulos",
+ "log-description-titleblacklist": "Este rexistro fai un seguimento das coincidencias coa lista negra de títulos.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|provocou}} unha coincidencia coa lista negra de títulos cando intentaba crear a conta $3 correspondente a $4.",
+ "titleblacklist-desc": "Permítelle aos administradores prohibir a creación de páxinas e contas de usuario grazas a unha [[MediaWiki:Titleblacklist|lista negra]] e mais unha [[MediaWiki:Titlewhitelist|lista branca]] de títulos",
+ "titleblacklist": "# Esta é unha lista negra de títulos. Non se pode crear ningún título ou usuario que coincida cunha destas expresións regulares.\n# Use \"#\" para os comentarios.\n# Por defecto, diferencia entre maiúsculas e minúsculas",
+ "titlewhitelist": "# Este é un título da lista branca. Use \"#\" para os comentarios. \n# Por defecto, diferencia entre maiúsculas e minúsculas",
+ "titleblacklist-forbidden-edit": "O título \"$2\" foi protexido fronte á súa creación. Coincide coa seguinte entrada da lista negra: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" non pode ser movido a \"$3\", porque o título \"$3\" foi protexido fronte á súa creación. Coincide coa seguinte entrada da lista negra: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "O nome do ficheiro \"$2\" foi protexido fronte á súa creación.\nCoincide coa seguinte entrada da lista negra: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "O nome de usuario \"$2\" foi protexido fronte á súa creación.\nCoincide coa seguinte entrada da lista negra: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|A seguinte liña|As seguintes liñas}} da lista negra {{PLURAL:$1|é inválida|son inválidas}}; por favor {{PLURAL:$1|corríxaa|corríxaas}} antes de gardar:",
+ "titleblacklist-override": "Ignorar a lista negra",
+ "titleblacklist-override-help": "Os usuarios con privilexios suficientes poden configurar isto para ignorar as comprobacións de títulos no blacklist.",
+ "titleblacklist-warning": "<strong>Aviso: Esta páxina só pode ser editada por administradores e outros usuario co privilexio <code>tboverride</code>, pois corresponde co seguinte título da lista negra:</strong><br /><code>$1</code>",
+ "right-tboverride": "Ignorar a lista negra de títulos ou nomes de usuario",
+ "right-tboverride-account": "Ignorar a lista negra de nomes de usuario",
+ "right-titleblacklistlog": "Ver o rexistro da lista negra de títulos",
+ "apihelp-titleblacklist-description": "Validar un título de páxina, ficheiro ou nome de usuario contra a lista negra de títulos.",
+ "apihelp-titleblacklist-summary": "Validar un título de páxina, ficheiro ou nome de usuario contra a lista negra de títulos.",
+ "apihelp-titleblacklist-param-title": "Cadea de texto a validar contra a lista negra.",
+ "apihelp-titleblacklist-param-action": "Acción a ser chequeada.",
+ "apihelp-titleblacklist-param-nooverride": "Non intente ignorar a lista negra de títulos.",
+ "apihelp-titleblacklist-example-1": "Revisar se [[Foo]] está na lista negra",
+ "apihelp-titleblacklist-example-2": "Revisar se [[Bar]] está na lista negra para edición",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Ignorar os controis de usurpación (require un dos seguintes permisos: <code>tboverride</code>, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/gsw.json b/www/wiki/extensions/TitleBlacklist/i18n/gsw.json
new file mode 100644
index 00000000..b20a4ae5
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/gsw.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Als-Holder"
+ ]
+ },
+ "titleblacklist-desc": "Macht s Ammanne megli, s Aalege vu nit gwinschte Syten- un Benutzernäme z verhindere: [[MediaWiki:Titleblacklist]] un [[MediaWiki:Titlewhitelist]]",
+ "titleblacklist": "# Des isch e Schwarzi Lischt. Jede Syten- un Benutzername, wu die Uusdrick druf zueträffe, cha nit aagleit wäre.\n# Täxt hinter ere Raute „#“ wird as Kommentar gsähne.\n# Des isch standardmäßig nit abhängig vum Einzelfall.",
+ "titlewhitelist": "# Des isch d Usnahmelischt vu dr Schwarze Lischt vu nit gwinschte Sytenäme. Verwänd „#“ fir Kommentar.\n# Des isch nit abhängig vum Einzelfall",
+ "titleblacklist-forbidden-edit": "'''E Syte mit em Titel „$2“ cha nit aagleit wäre.'''<br />Dr Titel kollidiert mit däm gsperrte Usdruck: '''''$1'''''",
+ "titleblacklist-forbidden-move": "'''D Syte „$2“ cha nit no „$3“ verschobe wäre.'''<br />Dr Titel kollidiert mit däm gsperrte Usdruck: '''''$1'''''",
+ "titleblacklist-forbidden-upload": "'''E Datei mit em Name „$2“ cha nit uffeglade wäre.'''<br />Dr Titel kollidiert mit däm gsperrte Usdruck: '''''$1'''''",
+ "titleblacklist-forbidden-new-account": "D Regischtrierig vum Benutzername „$2“ isch nit gwinscht.\nDr Name kollidiert mit däm gsperrte Name: <code>$1</code>",
+ "titleblacklist-invalid": "Die {{PLURAL:$1|Zyylete|Zyylete}} in dr Sperrlischt {{PLURAL:$1|isch|sin}} nit giltig; bitte korrigier si vor em Spychere:",
+ "titleblacklist-override": "Schwarzi Lischt ignoriere",
+ "right-tboverride": "Di Schwarz Lischt vu nit gwinschte Syte- oder Benutzernäme usser Chraft setze",
+ "right-tboverride-account": "Di Schwarz Lischt vu nit gwinschte Benutzernäme usser Chraft setze"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/gu.json b/www/wiki/extensions/TitleBlacklist/i18n/gu.json
new file mode 100644
index 00000000..fcfa12d5
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/gu.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ashok modhvadia",
+ "Sushant savla",
+ "Dsvyas"
+ ]
+ },
+ "titleblacklist-desc": "પ્રબંધકોને [[MediaWiki:Titleblacklist|blacklist]] અને [[MediaWiki:Titlewhitelist|whitelist]] અનુસાર નવા પૃષ્ઠ કે ખાતા રચનાને પ્રતુબંધીત કરવાનો અધિકાર આપે છે.",
+ "titleblacklist": "# આ શીર્ષક કાળી યાદી છે. સામાન્ય ઍક્સરેશનને મળતા શીર્ષકો અને સભ્યો બનાવી ન શાકાય. \n# ટિપ્પણી માટે \"#\" વાપરો.\n# આ મૂળ રીતે કેસ ઈનસેન્સીટીવ છે.",
+ "titlewhitelist": "# આ શીઋષ્હકોની ધલવ યાદી છે. ટિપ્પણીઓ માટે \"#\" વાપરો. \n# મૂળ ગુણધર્મ તરીકે આ કેસ ઈન સેન્સીટીવ છે.",
+ "titleblacklist-forbidden-edit": "શીર્ષક \"$2\" ની રચના પર પ્રતિબંધ મૂકાયો છે.\nતે નીચેના પ્રતિબંધીત શીર્ષકને મળતું આવે છે: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" ને \"$3\" પર ખસેડી નહીં શકાય, કેમકે \"$3\" શીર્ષક ની રચના કરવા અપ્ર પ્રતિબંધ મૂકાયો છે. \nતે નીચેની પ્રતિબંધિત શીર્ષક ને મળતી આવે છે: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "ફાઈલ નામ \"$2\" ની રચના પર પ્રતિબંધ મૂકાયો છે.\nતે નીચેના પ્રતિબંધીત શીર્ષકને મળતું આવે છે: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "સભ્ય નામ \"$2\" ની રચના પર પ્રતિબંધ મૂકાયો છે.\nતે નીચેના પ્રતિબંધીત નામને મળતું આવે છે: <code>$1</code>",
+ "titleblacklist-invalid": "નીચેની {{PLURAL:$1|હરોળ|હરોળ}} પ્રતિબંધિત યાદી {{PLURAL:$1|is|are}} અમાન્ય છે;\nમહેરબાની કરી {{PLURAL:$1|તેને|તેમને}} સાચવો:",
+ "titleblacklist-override": "પ્રતિબંધ સૂચી અવગણો",
+ "right-tboverride": "આ શીર્ષક કે સભ્યનામ પ્રતિબંધ સૂચિની ઉપરવટ જાવ",
+ "right-tboverride-account": "આ સભ્યનામ પ્રતિબંધસૂચિની ઉપરવટ જાવ"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/he.json b/www/wiki/extensions/TitleBlacklist/i18n/he.json
new file mode 100644
index 00000000..12f963d4
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/he.json
@@ -0,0 +1,38 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Guycn2",
+ "Rotem Liss",
+ "Rotemliss",
+ "Yona b",
+ "Danny-w"
+ ]
+ },
+ "action-titleblacklistlog": "לצפות ביומן הרשימה השחורה של הכותרות",
+ "log-name-titleblacklist": "יומן הרשימה השחורה של הכותרות",
+ "log-description-titleblacklist": "האירועים האלה עוקבים אחרי התאמות לרשימה השחורה.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|גרם|גרמה}} להתאמה ברשימה השחורה של הכותרות בעת ניסיון ליצור את החשבון $3 שמתאים לפריט הרשימה $4.",
+ "titleblacklist-desc": "אפשרות למפעילי המערכת לאסור יצירת דפים וחשבונות משתמש לפי [[MediaWiki:Titleblacklist|רשימה שחורה]] ו[[MediaWiki:Titlewhitelist|רשימה לבנה]]",
+ "titleblacklist": "# זוהי רשימת הכותרות האסורות. לא ניתן ליצור כותרות וחשבונות משתמש שמתאימים לביטוי רגולרי המופיע כאן.\n# השתמשו בסימן \"#\" להערות.\n#רשימה זו אינה תלויה ברישיות כברירת מחדל.",
+ "titlewhitelist": "# זוהי רשימת הכותרות המותרות. השתמשו בסימן \"#\" להערות.\n#רשימה זו אינה תלויה ברישיות כברירת מחדל.",
+ "titleblacklist-forbidden-edit": "הכותרת \"$2\" היא כותרת אסורה ליצירה.\nהיא מתאימה לערך הבא ברשימת הכותרות האסורות: <code>$1</code>",
+ "titleblacklist-forbidden-move": "לא ניתן להעביר את \"$2\" לשם \"$3\", כיוון שהכותרת \"$3\" אסורה ליצירה.\nהיא מתאימה לערך הבא ברשימה השחורה: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "שם הקובץ \"$2\" נאסר ליצירה.\nהוא מתאים לערך הבא ברשימה השחורה: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "שם המשתמש \"$2\" נאסר ליצירה.\nהוא מתאים לערך הבא ברשימה השחורה: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|השורה הבאה|השורות הבאות}} ברשימת הכותרות האסורות {{PLURAL:$1|אינה תקינה|אינם תקינים}};\nאנא תקנו {{PLURAL:$1|אותה|אותן}} לפני השמירה:",
+ "titleblacklist-override": "להתעלם מהרשימה השחורה",
+ "titleblacklist-override-help": "משתמשים עם הרשאות מתאימות יכולים לגרום להתעלמות של בדיקת הכותרות האסורות.",
+ "titleblacklist-warning": "<strong>לתשומת לבך:</strong> רק מפעילים ומשתמשים אחרים בעלי הרשאת <code>tboverride</code> יכולים לערוך את הדף הזה כי הוא מתאים לשורה הבאה ברשימה השחורה:<br /><code>$1</code>",
+ "right-tboverride": "עקיפת הרשימה השחורה של שמות המשתמשים והכותרות",
+ "right-tboverride-account": "עקיפת הרשימה השחורה של שמות המשתמשים",
+ "right-titleblacklistlog": "צפייה ביומן הרשימה השחורה של הכותרות",
+ "apihelp-titleblacklist-description": "בדיקת כותרת דף, שם קובץ או שם משתמש אל מול TitleBlacklist.",
+ "apihelp-titleblacklist-summary": "בדיקת תקינות של כותרת דף, שם קובץ, או שם משתמש אל מול TitleBlacklist.",
+ "apihelp-titleblacklist-param-title": "המחרוזת שצריך לבדוק אל מול הרשימה השחורה.",
+ "apihelp-titleblacklist-param-action": "הפעולה שצריך לבדוק.",
+ "apihelp-titleblacklist-param-nooverride": "לא לנסות לעקוף את הרשימה השחורה.",
+ "apihelp-titleblacklist-example-1": "לבדוק אם [[Foo]] ברשימה השחורה",
+ "apihelp-titleblacklist-example-2": "לבדוק עם [[Bar]] ברשימה השחורה לעריכה",
+ "apihelp-createaccount-param-ignoretitleblacklist": "להתעלם מבדיקות התחזות (דורש אחת מההרשאות הבאות: <code>tboverride</code>‏, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/hi.json b/www/wiki/extensions/TitleBlacklist/i18n/hi.json
new file mode 100644
index 00000000..60e3833a
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/hi.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "Kaustubh",
+ "Shyam",
+ "आलोक",
+ "Sfic"
+ ]
+ },
+ "action-titleblacklistlog": "शीर्षक कालीसूची लॉग देखें",
+ "log-name-titleblacklist": "शीर्षक कालीसूची लॉग",
+ "titleblacklist-desc": "विशिष्ठ नामपदों: [[MediaWiki:Titleblacklist]] और [[MediaWiki:Titlewhitelist]] के साथ वाले पृष्ठों के निर्माण अवरोधन में सहायक है",
+ "titleblacklist": "# यह एक ब्लैकलिस्ट नामपद है। नामपद जो ब्लैकलिस्ट सूची से मेल खाता है, निर्मित नहीं किए जा सकते।\n# टिपण्णी के लिए \"#\" का प्रयोग करें।",
+ "titlewhitelist": "# यह टाईटल व्हाईटलिस्ट हैं। टिप्पणीयों के लिये \"#\" का इस्तेमाल करें।",
+ "titleblacklist-forbidden-edit": "नामपद \"$2\" निर्मित करने से प्रतिबंधित है।\nयह निम्नांकित ब्लैकलिस्ट प्रवेशिका से मेल खाता है: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" का नाम बदलकर \"$3\" नहीं किया जा सकता, क्योंकि \"$3\" को निर्माण करने से प्रतिबंधित किया गया है।\nयह निम्नांकित ब्लैकलिस्ट प्रवेशिका से मेल खाता है: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "संचिका नाम \"$2\" निर्मित करने से प्रतिबंधित है।\nयह निम्नांकित कालीसूची प्रविष्टि से मेल खाता है: <code>$1</code>",
+ "titleblacklist-invalid": "ब्लैकलिस्ट नामपद में निम्नांकित {{PLURAL:$1|पंक्ति|पंक्तियाँ}} अमान्य {{PLURAL:$1|है|हैं}};\nकृपया {{PLURAL:$1|इसे|इन्हें}} जमा करने से पहले ठीक करें:",
+ "titleblacklist-override": "ब्लाकलिस्ट उपेक्षा करें",
+ "right-tboverride": "शीर्षक ब्लॅकलिस्ट को नजर अंदाज करें",
+ "right-titleblacklistlog": "शीर्षक कालीसूची लॉग देखें"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/hr.json b/www/wiki/extensions/TitleBlacklist/i18n/hr.json
new file mode 100644
index 00000000..23764242
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/hr.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dalibor Bosits",
+ "Dnik",
+ "Ex13",
+ "SpeedyGonsales",
+ "Bugoslav"
+ ]
+ },
+ "log-name-titleblacklist": "Evidencija crne liste naslova",
+ "titleblacklist-desc": "Omogućava administratorima postavljanje zabrane kreiranja stranica ili računa s [[MediaWiki:Titleblacklist|crnim popisom]] i [[MediaWiki:Titlewhitelist|bijelim popisom]]",
+ "titleblacklist": "# Ovo je popis zabranjenih naslova. Naslovi i računi koji se podudaraju s regularnim izrazom ne mogu se kreirati.\n# Koristite \"#\" za komentare.\n# Ovo je osjetljivo na velika slova",
+ "titlewhitelist": "# Ovo je tzv. ''bijela knjiga'' ili ''whitelist'' imena članaka. Rabite \"#\" za komentar\n# Ovo je osjetljivo na velika slova",
+ "titleblacklist-forbidden-edit": "Naslov \"$2\" je zabranjen za kreiranje. Podudara se sa sljedećom stavkom popisa zabranjenih: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" ne može biti premješten na \"$3\", jer je naslov \"$3\" zabranjeno kreirati. Podudara se sa sljedećom stavkom popisa zabranjenih: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Ime datoteke \"$2\" je zabranjeno kreirati. Poklapa se sa stavkom popisa zabranjenih: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Suradnički račun \"$2\" je zabranjen za kreiranje.\nPoklapa se sa sljedećim izrazom iz crnog popisa: <code>$1</code>",
+ "titleblacklist-invalid": "Sljedeći {{PLURAL:$1|redak|redci}} u popisu zabranjenih naslova {{PLURAL:$1|je|su}} nedozvoljeni; molimo ispravite {{PLURAL:$1|ga|ih}} prije spremanja:",
+ "titleblacklist-override": "Zanemari crnu listu",
+ "right-tboverride": "Premošćivanje naslova ili suradničkog imena na crnom popisu",
+ "right-tboverride-account": "Zaobilaženje popisa zabranjenih suradničkih imena"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/hsb.json b/www/wiki/extensions/TitleBlacklist/i18n/hsb.json
new file mode 100644
index 00000000..191e66f5
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/hsb.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "titleblacklist-desc": "Dowola administratoram wutworjenje stronow a wužiwarskich kontow z pomocu [[MediaWiki:Titleblacklist|čorneje lisćiny]] a [[MediaWiki:Titlewhitelist|běłeje lisćiny]] zakazać",
+ "titleblacklist": "# To je čorna lisćina titulow. Titule a wužiwarjo, kotrež so na regularny wuraz hodźa, njehodźa so wutworić.\n# Wužij \"#\" za komentary.\n# Po standardźe to na wulkopisanje njedźiwa",
+ "titlewhitelist": "# To je běła lisćina titulow. Wužij \"#\" za komentary.\n# Po standardźe to na wulkopisanje njedźiwa",
+ "titleblacklist-forbidden-edit": "Strona z titulom \"$2\" njeda so wutworić. Wotpowěduje slědowacemu zapiskej čorneje lisćiny: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Strona z titulom \"$2\" njeda so do \"$3\" přesunyć, dokelž titul \"$3\" njesmě so wutworjeć.\nKryje so ze slědowacym zaspiskom čorneje lisćiny: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Dataja z mjenom \"$2\" njesmě so wutworjeć. Kryje so ze slědowacym zapiskom čorneje lisćiny: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Wužiwarske mjeno \"$2\" bu za registrowanje zawrjene.\nWotpowěduje slědowacemu zapiskej čorneje lisćiny: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Slědowaca linka|Slědowace linki}} w čornej lisćinje titulow {{PLURAL:$1|je njepłaćiwa|su njepłaćiwe}}; prošu skoriguj {{PLURAL:$1|ju|je}} před składowanjom:",
+ "titleblacklist-override": "Čornu lisćinu ignorować",
+ "right-tboverride": "Płaćiwosć čorneje lisćiny nastawkow abo wužiwarskich mjenow zběhnyć",
+ "right-tboverride-account": "Płaćiwosć čorneje lisćiny wužiwarskich mjenow zběhnyć"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/hu.json b/www/wiki/extensions/TitleBlacklist/i18n/hu.json
new file mode 100644
index 00000000..43a01c17
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/hu.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "BáthoryPéter",
+ "Dani",
+ "Tgr",
+ "Tacsipacsi",
+ "Csega",
+ "Ildiko Santana",
+ "Máté"
+ ]
+ },
+ "action-titleblacklistlog": "címek feketelista-naplójának megtekintése",
+ "log-name-titleblacklist": "Címek feketelista-naplója",
+ "titleblacklist-desc": "Lehetővé teszi az adminisztrátorok számára, hogy letiltsák adott című lapok vagy nevű felhasználói fiókok készítését a [[MediaWiki:Titleblacklist]] és [[MediaWiki:Titlewhitelist]] alapján",
+ "titleblacklist": "# Ez a címek feketelistája. Azon címek, amelyek illeszkednek az itt található reguláris kifejezések valamelyikére, nem hozhatóak létre.\n# Használd a „#” karaktert megjegyzések írásához.\n# A sorok nem kis- és nagybetűérzékenyek alapértelmezettként",
+ "titlewhitelist": "# Ez egy engedélyező lista. A „#” karakterrel írhatsz megjegyzéseket.\n# A sorok kis- és nagybetűérzékenyek alapértelmezettként",
+ "titleblacklist-forbidden-edit": "„$2” címmel tilos lapot készíteni, mert illeszkedik a feketelista <code>$1</code> bejegyzésére.",
+ "titleblacklist-forbidden-move": "„$2” nem nevezhető át „$3” névre, mert „$3” névvel tilos lapot készíteni. Illeszkedik a következő feketelistás bejegyzéssel: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "„$2” nevű fájlt tilos feltölteni, mert illeszkedik a feketelista <code>$1</code> bejegyzésére.",
+ "titleblacklist-forbidden-new-account": "A(z) „$2” felhasználói név nem hozható létre.\nIlleszkedik a következő feketelistás elemre: <code>$1</code>",
+ "titleblacklist-invalid": "Az alábbi {{PLURAL:$1|sor hibás|sorok hibásak}} a lapcímek feketelistájában; {{PLURAL:$1|javítsd|javítsd őket}} mentés előtt:",
+ "titleblacklist-override": "Feketelista figyelmen kívül hagyása",
+ "right-tboverride": "címek és felhasználónevek feketelistájának felülírása",
+ "right-tboverride-account": "Felhasználónév-feketelista felülbírálása",
+ "right-titleblacklistlog": "címek feketelista-naplójának megtekintése"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ia.json b/www/wiki/extensions/TitleBlacklist/i18n/ia.json
new file mode 100644
index 00000000..07f16dfd
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ia.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "titleblacklist-desc": "Permitte al administratores prohibir le creation de paginas e contos de usator per medio de un [[MediaWiki:Titleblacklist|lista nigre]] e de un [[MediaWiki:Titlewhitelist|lista blanc]]",
+ "titleblacklist": "# Isto es un lista nigre de titulos. Le titulos e usatores que corresponde a un\n# expression regular includite hic non pote esser create. Usa \"#\" pro commentos.\n# Per predefinition, le differentia inter majusculas e minusculas non es significante.",
+ "titlewhitelist": "# Isto es un lista blanc de titulos. Usa \"#\" pro commentos.\n# Per predefinition, le differentia inter majusculas e minusculas non es significante.",
+ "titleblacklist-forbidden-edit": "Le creation del titulo \"$2\" ha essite prohibite.\nIllo corresponde al sequente entrata del lista nigre: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" non pote esser renominate a \"$3\", proque le creation del titulo \"$3\" ha essite prohibite.\nIllo corresponde al sequente entrata del lista nigre: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Le creation del nomine de file \"$2\" ha essite prohibite.\nIllo corresponde al sequente entrata del lista nigre: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Le creation del nomine de usator \"$2\" ha essite prohibite.\nIllo corresponde al sequente entrata del lista nigre: <code>$1</code>",
+ "titleblacklist-invalid": "Le sequente {{PLURAL:$1|linea|lineas}} in le lista nigre de titulos es invalide; per favor corrige {{PLURAL:$1|lo|los}} ante de publicar:",
+ "titleblacklist-override": "Ignorar le lista nigre",
+ "right-tboverride": "Ignorar le lista nigre de titulos o nomines de usator",
+ "right-tboverride-account": "Ignorar le lista nigre de nomines de usator"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/id.json b/www/wiki/extensions/TitleBlacklist/i18n/id.json
new file mode 100644
index 00000000..90b59764
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/id.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "IvanLanin",
+ "Rex"
+ ]
+ },
+ "titleblacklist-desc": "Mengizinkan pencegahan pembuatan halaman dengan judul tertentu: [[MediaWiki:Titleblacklist]] dan [[MediaWiki:Titlewhitelist]]",
+ "titleblacklist": "# Ini adalah daftar hitam judul. Judul dan nama pengguna yang berkesamaan dengan suatu regex berikut ini tidak dapat dibuat.\n# Gunakan \"#\" untuk komentar.\n# Daftar ini secara standar tidak memandang huruf besar-huruf kecil.",
+ "titlewhitelist": "# Ini adalah daftar putih judul. Gunakan \"#\" untuk komentar.\n# Daftar ini secara standar tidak memandang huruf besar-huruf kecil.",
+ "titleblacklist-forbidden-edit": "Judul \"$2\" telah dicekal untuk dibuat. Judul tersebut cocok dengan entri daftar hitam berikut: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" tak dapat dipindahkan ke \"$3\" karena judul \"$3\" telah dicekal untuk dibuat. Judul tersebut cocok dengan entri daftar hitam berikut: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Nama berkas \"$2\" telah dicekal untuk dibuat. Judul tersebut cocok dengan entri daftar hitam berikut: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Nama pengguna \"$2\" tidak diperbolehkan.\nNama ini sama dengan entri daftar hitam berikut: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Baris|Baris-baris}} dalam daftar hitam judul {{PLURAL:$1|berikut|berikut}} tak valid; silakan koreksi {{PLURAL:$1|item|item-item}} tersebut sebelum disimpan:",
+ "titleblacklist-override": "Abaikan daftar hitam",
+ "right-tboverride": "Mengabaikan daftar hitam judul",
+ "right-tboverride-account": "Mengabaikan daftar hitam nama pengguna"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ie.json b/www/wiki/extensions/TitleBlacklist/i18n/ie.json
new file mode 100644
index 00000000..b9d2f3e1
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ie.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Renan"
+ ]
+ },
+ "titleblacklist-desc": "Permisse administratores prohibir creation de págines e contos de usatores por un [[MediaWiki:Titleblacklist|liste nigri]] e [[MediaWiki:Titlewhitelist|liste blanc]]",
+ "titleblacklist": "#Ti es un titul de liste nigri. Titules e usatores que harmonisa un expression regulari ci ne posse es creat. \n#Usa \"#\" por comentaries. \n#Ti liste usa majuscules e minuscules per contumacie",
+ "titlewhitelist": "#Ti es un titul de liste blanc. Usa ''#'' por comentaries. \n#Ti liste usa majuscules e minuscules per contumacie",
+ "titleblacklist-forbidden-edit": "Li titul ''$2'' ha esset bannit de creation. \nIt harmonisa in li proxim intrada de liste nigri:<code>$1</code>",
+ "titleblacklist-forbidden-move": "''$2'' ne posse esser movet por ''$3'', pro que li titul ''$3'' ha esset bannit de creation. \nIt harmonisa li proxim intrada in li liste nigri:<code>$1</code>",
+ "titleblacklist-forbidden-upload": "Li nómine de file ''$2'' ha esset bannit de creation. \nIt harmonisa li proxim intrada in li liste nigri:<code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Li nómine de usator ''$2'' ha esset bannit de creation. \nIt harmonisa li proxim intrada in li liste nigri:<code>$1</code>",
+ "titleblacklist-invalid": "Li proxim {{PLURAL:$1|linea|lineas}} in li liste nigri es ínvalid; \npleser corecte {{PLURAL:$1|it|les}} ante de conservar:"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ilo.json b/www/wiki/extensions/TitleBlacklist/i18n/ilo.json
new file mode 100644
index 00000000..a3fe2d36
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ilo.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lam-ang"
+ ]
+ },
+ "action-titleblacklistlog": "kitaen ti listaan ti title blacklist",
+ "log-name-titleblacklist": "Listaan ti title blacklist",
+ "log-description-titleblacklist": "Dagitoy a pasamak ket surotenna dagiti napuntaan ti title blacklist.",
+ "logentry-titleblacklist-hit-username": "Ni $1 ket {{GENDER:$2|nagpataud}} ti napuntaan a title blacklist idi nagpadpadas a nagpartuat ti pakabilangan ti $3 a maipada iti $4.",
+ "titleblacklist-desc": "Mangipalubos kadagiti administrador ti agiparit iti agpartuat kadagiti panid ken dagiti pakabilangan ti agar-aramat babaen ti [[MediaWiki:Titleblacklist|blacklist]] ken [[MediaWiki:Titlewhitelist|whitelist]]",
+ "titleblacklist": "# Daytoy ket ti title blacklist. Dagiti titulo ken dagiti agar-aramat a maipada ti kadawyan a panangiyebkas ditoy ket saan a mapartuat\n# Usaren ti \"#\" para kadagiti komentario.\n# Daytoy ket sensetibo ti kadakkel ti letra babaen ti kasisigud",
+ "titlewhitelist": "# Daytoy ket ti title whitelist. Usaren ti \"#\" para kadagiti komentario. \n# Daytoy ket sensetibo ti kadakkel ti letra babaen ti kasisigud",
+ "titleblacklist-forbidden-edit": "Ti titulo ti \"$2\" ket naiparit manipud iti pannakapartuat.\nNaipada iti sumaganad a naikabil a blacklist: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Ti \"$2\" ket saan a maiyalis iti \"$3\", gapu ta ti titulo ti \"$3\" ket naiparit a manipud ti pannakapartuat.\nNaipada iti sumaganad a naikabil a blacklist: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Ti nagan ti papeles ti \"$2\" ket naiparit manipud iti pannakapartuat.\nNaipada iti sumaganad a naikabil a blacklist: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Ti nagan ti agar-aramat ti \"$2\" ket naiparit manipud iti pannakapartuat.\nNaipada iti sumaganad a naikabil a blacklist: <code>$1</code>",
+ "titleblacklist-invalid": "Ti sumaganad a {{PLURAL:$1|linia|linlinia}} iti title blacklist ket imbalido;\npangngaasi ta pasayaaten {{PLURAL:$1|dayta|dagita}} sakbay nga idulin:",
+ "titleblacklist-override": "Saan nga ikaskaso ti blacklist",
+ "titleblacklist-warning": "<strong>Ballaag: Daytoy a panid ket maurnos laeng babaen dagiti administrador ken dagiti sabali nga agar-aramat nga addaan iti karbengan ti <code>tboverride</code> gapu ta maipada iti sumaganad a naikabil a title blacklist:</strong><br /><code>$1</code>",
+ "right-tboverride": "Patuonan ti titulo wenno ti blacklist ti nagan ti agar-aramat",
+ "right-tboverride-account": "Patuonan ti blacklist ti nagan ti agar-aramat",
+ "right-titleblacklistlog": "Kitaen ti listaan ti title blacklist"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/is.json b/www/wiki/extensions/TitleBlacklist/i18n/is.json
new file mode 100644
index 00000000..5d34f4da
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/is.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Snævar"
+ ]
+ },
+ "titleblacklist-desc": "Leyfir möppudýrum að banna stofnun síðna og notenda samkvæmt [[MediaWiki:Titleblacklist|blacklist]] og [[MediaWiki:Titlewhitelist|whitelist]]",
+ "titleblacklist": "# Þetta er bannlisti fyrir síðutitla. Titlar og notendanöfn sem passa við reglulega segð hér er ekki hægt að búa til.\n# Notaðu \"#\" fyrir athugasemdir\n# Færslurnar hér eru sjálfvirkt hástafafrjálsar",
+ "titleblacklist-forbidden-edit": "Búið er að banna titilinn \"$2\" og ekki er hægt að nota hann við stofnun síðna eða notendanafna.\nHann passar við eftirfarandi færslu í bannlistanum: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Ekki er hægt að færa \"$2\" á \"$3\", því búið er að banna titilinn \"$3\". Ekki er hægt að búa til síður með þessum titli.\nHann passar við eftirfarandi færslu í bannlistanum: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Búið er að banna skráarnafnið \"$2\". Ekki er hægt að stofna skrár með þessum titli.\nHann passar við eftirfarandi færslu í bannlistanum: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Búið er að banna titilinn \"$2\" og ekki er hægt að nota hann við stofnun notendanafna.\nHann passar við eftirfarandi færslu í bannlistanum: <code>$1</code>",
+ "titleblacklist-invalid": "Eftirfarandi {{PLURAL:$1|færsla|færslur}} í bannlista yfir síðutitla {{PLURAL:$1|er|eru}} ógildar og leiðrétta þarf {{PLURAL:$1|hana|þær}} áður en síðan er vistuð:",
+ "titleblacklist-override": "Hunsa bannlistann",
+ "right-tboverride": "Hunsa bannlista fyrir síðutitla og notendanöfn.",
+ "right-tboverride-account": "Hunsa bannlista yfir notendanöfn"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/it.json b/www/wiki/extensions/TitleBlacklist/i18n/it.json
new file mode 100644
index 00000000..a5d311e7
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/it.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beta16",
+ "BrokenArrow",
+ "Darth Kule",
+ "Melos",
+ "Nemo bis",
+ "Lucas2",
+ "Matteocng"
+ ]
+ },
+ "action-titleblacklistlog": "vedere il registro dei titoli bloccati",
+ "log-name-titleblacklist": "Titoli bloccati",
+ "log-description-titleblacklist": "Questi eventi tengono traccia delle attivazioni della lista nera dei titoli.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|ha causato}} l'attivazione della blacklist dei titoli tentando di creare l'utenza $3 che corrisponde a $4.",
+ "titleblacklist-desc": "Consente di proibire la creazione di pagine e utenze con i titoli indicati in una [[MediaWiki:Titleblacklist|blacklist]] e una [[MediaWiki:Titlewhitelist|whitelist]]",
+ "titleblacklist": "# Lista di titoli non consentiti.\n# È impedita la creazione di pagine e utenze il cui nome corrisponda a un'espressione regolare indicata di seguito.\n# Usare \"#\" per le righe di commento.\n# Per default la differenza tra maiuscole e minuscole non è significativa.",
+ "titlewhitelist": "# Questa è una lista di titoli permessi (whitelist). Iniziare la riga con \"#\" per commentare.\n# Per impostazione predefinita il sistema non fa differenza tra minuscole e maiuscole.",
+ "titleblacklist-forbidden-edit": "La creazione di pagine con titolo \"$2\" è stata impedita. La voce corrispondente nell'elenco dei titoli non consentiti è la seguente: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Impossibile spostare la pagina \"$2\" al titolo \"$3\" in quanto la creazione di pagine con titolo \"$3\" è stata impedita. La voce corrispondente nell'elenco dei titoli non consentiti è la seguente: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "La creazione di file con titolo \"$2\" è stata impedita. La voce corrispondente nell'elenco dei titoli non consentiti è la seguente: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "La creazione di utenti con nome \"$2\" è stata impedita. La voce corrispondente nell'elenco dei nomi non consentiti è la seguente: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|La seguente riga|Le seguenti righe}} dell'elenco dei titoli non consentiti {{PLURAL:$1|non è valida|non sono valide}}; si prega di correggere {{PLURAL:$1|l'errore|gli errori}} prima di salvare la pagina.",
+ "titleblacklist-override": "Ignora la blacklist",
+ "titleblacklist-override-help": "Gli utenti con privilegi sufficienti possono impostare quest'opzione per ignorare i controlli di blacklist sul titolo.",
+ "titleblacklist-warning": "<strong>Attenzione: questa pagina può essere modificata solo dagli amministratori o dagli utenti con il diritto <code>tboverride</code> poiché corrisponde alla seguente voce della lista dei titoli bloccati:</strong><br /><code>$1</code>",
+ "right-tboverride": "Ignora la blacklist dei titoli o dei nome utente",
+ "right-tboverride-account": "Ignora la blacklist dei nome utente",
+ "right-titleblacklistlog": "Visualizza registro dei titoli bloccati"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ja.json b/www/wiki/extensions/TitleBlacklist/i18n/ja.json
new file mode 100644
index 00000000..6ef773b1
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ja.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aotake",
+ "Fryed-peach",
+ "Hosiryuhosi",
+ "JtFuruhata",
+ "Marine-Blue",
+ "Muttley",
+ "Shirayuki",
+ "青子守歌",
+ "Whym",
+ "Sujiniku",
+ "2nd-player",
+ "Otokoume",
+ "Yusuke1109"
+ ]
+ },
+ "action-titleblacklistlog": "ページ名ブラックリストの記録の閲覧",
+ "log-name-titleblacklist": "ページ名ブラックリストの記録",
+ "log-description-titleblacklist": "これらのイベントはページ名ブラックリストとの一致を追跡します。",
+ "logentry-titleblacklist-hit-username": "$1 がアカウント $3 を作成しようとした際に $4 に一致したためページ名ブラックリストが{{GENDER:$2|発動しました}}。",
+ "titleblacklist-desc": "管理者が[[MediaWiki:Titleblacklist|ブラックリスト]] および [[MediaWiki:Titlewhitelist|ホワイトリスト]]を使ってページおよび利用者アカウントの新規作成を禁止できるようにする",
+ "titleblacklist": "# これは、ページ名のブラックリストです。正規表現に一致するページ名および利用者アカウントの新規作成を禁止します。\n# 「#」以降はコメントです。\n# 既定では大文字と小文字を区別しません",
+ "titlewhitelist": "# これは、ページ名のホワイトリストです。「#」以降はコメントです。\n# 既定では大文字と小文字を区別しません",
+ "titleblacklist-forbidden-edit": "「$2」という名前のページの作成は禁止されています。\nこれは以下のブラックリスト項目に一致します: <code>$1</code>",
+ "titleblacklist-forbidden-move": "「$3」という名前のページの作成が禁止されているため、「$2」を「$3」に移動できません。\nこれは以下のブラックリスト項目に一致します: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "「$2」という名前でのファイルのアップロードは禁止されています。\nこれは以下のブラックリスト項目に一致します: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "利用者名「$2」の作成は禁止されています。\nこれは以下のブラックリスト項目と一致します: <code>$1</code>",
+ "titleblacklist-invalid": "ページ名ブラックリスト内の以下の{{PLURAL:$1|行}}は無効{{PLURAL:$1|です}}。\n保存する前に{{PLURAL:$1|修正して}}ください:",
+ "titleblacklist-override": "ブラックリストを無視",
+ "titleblacklist-warning": "<strong>警告: このページは下記のページ名ブラックリスト項目に一致しているため管理者と <code>tboverride</code> 権限のある利用者のみが編集できます:</strong><br /><code>$1</code>",
+ "right-tboverride": "ページ名/利用者名のブラックリストによる制限を受けない",
+ "right-tboverride-account": "利用者名ブラックリストを無視",
+ "right-titleblacklistlog": "ページ名ブラックリストの記録を閲覧",
+ "apihelp-titleblacklist-description": "TitleBllacklist に対してページ名、ファイル名、利用者名を検証します。",
+ "apihelp-titleblacklist-param-action": "確認対象の操作",
+ "apihelp-titleblacklist-param-nooverride": "titleblacklistを上書きしようとしないでください。",
+ "apihelp-titleblacklist-example-1": "[[Foo]]がブラックリストに載っているかどうかを確認する",
+ "apihelp-createaccount-param-ignoretitleblacklist": "なりすましチェックを無視する (<code>tboverride</code> または <code>tboverride-account</code> の権限が必要)。"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/jut.json b/www/wiki/extensions/TitleBlacklist/i18n/jut.json
new file mode 100644
index 00000000..98297add
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/jut.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Huslåke",
+ "Ælsån"
+ ]
+ },
+ "titleblacklist-desc": "Kan til førbæd skeppenge der pæger ve spæsifiærn titler: [[MediaWiki:Titleblacklist]] og [[MediaWiki:Titlewhitelist]]",
+ "titleblacklist": "# Dett'er en titel blackliste. Titler dette match en regex her ken ekke være skeppen.\n# Brug \"#\" før bemærkenge.",
+ "titlewhitelist": "# Dett'er en titel whiteliste. Brug \"#\" før bemærkenge"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/jv.json b/www/wiki/extensions/TitleBlacklist/i18n/jv.json
new file mode 100644
index 00000000..fc317df5
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/jv.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meursault2004",
+ "NoiX180",
+ "Pras"
+ ]
+ },
+ "titleblacklist-desc": "Marengaké pangurus menggak wong nggawé kaca lan akun miturut [[MediaWiki:Titleblacklist|daftar-ireng]] lan [[MediaWiki:Titlewhitelist|daftar-putih]]",
+ "titleblacklist": "# Iki dhaptar-ireng irah-irahan. Irah-irahan lan panganggo sing cocog karo sawijining regex ing kéné ora bisa digawé.\n# Anggonen \"#\" kanggo komentar.\n# Dhaptar iki sacara baku ora mbédakaké aksara gedhé-cilik.",
+ "titlewhitelist": "# Dhaptar iki arupa dhaptar-putih irah-irahan. Anggonen \"#\" kanggo komentar.\n# Dhaptar iki sacara baku ora mbédakaké aksara gedhé-cilik.",
+ "titleblacklist-forbidden-edit": "Sesirah \"$2\" dilarang digawé.\nSesirah iki cocog karo isi pratélan ireng iki: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" ora bisa dipindhahaké menyang \"$3\", amerga irah-irahan iki \"$3\" dilarang ora olèh digawé.\nIrah-irahan iki soalé cocog karo èntri daftar ireng iki: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Jeneng berkas \"$2\" wis dilarang kanggo digawé. \nIrah-irahan iku cocog karo èntri daftar ireng iki: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Jeneng panganggo \"$2\" wis dipenggak.\nIki cocog karo jeneng ing dhaptar-ireng: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Baris|Baris-baris}} ing daftar ireng irah-irahan (judhul) {{PLURAL:$1|ing ngisor|ing ngisor}} iki ora absah; mangga dikorèksi {{PLURAL:$1|item|item-item}} iku sadurungé disimpen:",
+ "titleblacklist-override": "Lirwakaké pratélan ireng",
+ "right-tboverride": "''Override'' daftar ireng judhul",
+ "right-tboverride-account": "Lirwakaké pratélan ireng bab jeneng panganggo"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ka.json b/www/wiki/extensions/TitleBlacklist/i18n/ka.json
new file mode 100644
index 00000000..b1cbc087
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ka.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "BRUTE",
+ "David1010",
+ "Dawid Deutschland",
+ "გიორგიმელა",
+ "Otogi"
+ ]
+ },
+ "log-name-titleblacklist": "შავი სიის სათაურის ჟურნალი",
+ "titleblacklist-desc": "აძლევს ადმინისტრატორებს უფლებას შექმნან ანგარიშები და გვერდები [[MediaWiki:Titleblacklist|შავი]] და [[MediaWiki:Titlewhitelist|თეთრი]] სიების მეშვეობით.",
+ "titleblacklist": "# ეს არის აკრძალულ სახელთა სია. გვერდები და ანგარიშები, რომლებიც ემთხვევა რეგულარულ სახელწოდებებს ვერ შეიქმნება. \n# გამოიყენეთ „#“ სიმბოლო კომენტარებისათვის\n# არ არის გრძნობადბა რეგისტრისადმი",
+ "titlewhitelist": "# ეს არის სახელწოდებათა «თეთრი სია». კომენტარებისთვის გამოიყენეთ «#»\n# არ არის გრძნობადბა რეგისტრისადმი",
+ "titleblacklist-forbidden-edit": "სათაური \"$2\" დაბლოკილი. ამ სათაურით გვერდის შექმნა აკრძალულია\nიგი მსგავსია შავი სიიდან შემდეგ ჩანაწერს: <code>$1</code>",
+ "titleblacklist-forbidden-move": "შეუძლებელია გვერდ «$2»-ის გადარქმევა «$3»-ად, რადგანაც ეს სათაური იმყოფება შავ სიაში: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "'''ფაილი სახელით \"$2\" არ შეიძლება იყოს ატვირთული''' <br />\nიგი ექვემდებარება შემდეგ ჩანაწერს შავ სიაში: '''''$1'''''",
+ "titleblacklist-forbidden-new-account": "აკრძალულია სიტყვა «$2»-ის გამოყენება მომხმარებლის სახელად.\nეს სახელი ექვემდებარება შემდეგ ჩანაწერს შავი სიიდან: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|შემდეგი ხაზიа|შემდეგი ხაზები}} აკრძალულ სახელთა სიაში {{PLURAL:$1|არის არასწორი რეგულარული გამოთქმა|არის არასწორი რეგულარული გამოთქმები}}. გთხოვთ შეასწოროთ {{PLURAL:$1|ის|ისინი}} შენახვამდე:",
+ "titleblacklist-override": "შავი სიის იგნორირება",
+ "right-tboverride": "შავი სიის გვერდების ან მომხმარებლების სახელების იგნორირება",
+ "right-tboverride-account": "მომხმარებელთა სახელების შავი სიის იგნორირება"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/kk-arab.json b/www/wiki/extensions/TitleBlacklist/i18n/kk-arab.json
new file mode 100644
index 00000000..18d19b35
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/kk-arab.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": [],
+ "titleblacklist": "# بۇل اتاۋلاردىڭ قارا ٴتىزىمى. جۇيەلى ايتىلىمدارعا (regex) سايكەس مىنداعى اتاۋلار جاراتىلمايدى.\nماندەمەلەر ٴۇشىن «#» نىشانىن قولدانىڭىز.",
+ "titlewhitelist": "# بۇل اتاۋلاردىڭ اق ٴتىزىمى. ماندەمەلەر ٴۇشىن «#» نىشانىن قولدانىڭىز",
+ "titleblacklist-forbidden-edit": "«$2» دەگەن اتاۋ جاراتۋى قۇلىپتالعان. بۇل قارا ٴتىزىمنىڭ جازباسىنا سايكەس: <code>$1</code>",
+ "titleblacklist-forbidden-move": "«$2» دەگەن «$3» دەگەنگە جىلجىتىلمايدى, سەبەبى «$3» دەگەن اتاۋ جاراتۋى قۇلىپتالعان. بۇل قارا ٴتىزىمنىڭ جازباسىنا سايكەس: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "«$2» دەگەن فايل اتى جاراتۋى قۇلىپتالعان. بۇل قارا ٴتىزىمنىڭ جازباسىنا سايكەس: <code>$1</code>",
+ "titleblacklist-invalid": "اتاۋلاردىڭ قارا تىزىمىندەگى كەلەسى {{PLURAL:$1|جول|جولدار}} {{PLURAL:$1||}} جارامسىز; ساقتاۋ الدىندا {{PLURAL:$1|بۇنى|بۇلاردى}} دۇرىستاپ شىعىڭىز:"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/kk-cyrl.json b/www/wiki/extensions/TitleBlacklist/i18n/kk-cyrl.json
new file mode 100644
index 00000000..5d9b46ff
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/kk-cyrl.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlefZet",
+ "Arystanbek"
+ ]
+ },
+ "action-titleblacklistlog": "атаулардың қара тізімі журналын қарау",
+ "log-name-titleblacklist": "Атаулардың қара тізімі",
+ "titleblacklist": "# Бұл атаулардың қара тізімі. Жүйелі айтылымдарға (regex) сәйкес мындағы атаулар жаратылмайды.\nМәндемелер үшін «#» нышанын қолданыңыз.",
+ "titlewhitelist": "# Бұл атаулардың ақ тізімі. Мәндемелер үшін «#» нышанын қолданыңыз",
+ "titleblacklist-forbidden-edit": "«$2» деген атау басталуы құлыпталған. Бұл келесі қара тізім жазбасына сәйкес келеді: <code>$1</code>",
+ "titleblacklist-forbidden-move": "«$2» деген «$3» дегенге жылжытылмайды, себебі «$3» деген атаумен бет басталуы құлыпталған. Бұл келесі қара тізім жазбасына сәйкес келеді: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "«$2» деген атаумен файл бастау құлыпталған. Бұл келесі қара тізім жазбасына сәйкес келеді: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "«$2» атаулы қатысушы есімі бастаудан құрсауланған.\nОл келесі қара тізім жазбасына сәйкес келеді: <code>$1</code>",
+ "titleblacklist-invalid": "Атаулардың қара тізіміндегі келесі {{PLURAL:$1|жол|жолдар}} жарамсыз; сақтау алдында {{PLURAL:$1|бұны|бұларды}} дұрыстап шығыңыз:",
+ "titleblacklist-override": "Қаратізімді елемеу",
+ "titleblacklist-warning": "<strong>Ескерту: Бұл бетті тек әкімшілер және одан басқа <code>үстінен</code> жазатын құқықтары бар қатысушылар ғана өңдей алады, себебі ол келесі атаулардың қара тізімі жазбасына сәйкес келеді:</strong><br /><code>$1</code>",
+ "right-tboverride": "Атаулардың немесе қатысушы атаулары қара тізіміне енетін жазбалардың үстінен жазу",
+ "right-tboverride-account": "Қатысушы атауларының қара тізіміне енетін жазбалардың үстінен жазу",
+ "right-titleblacklistlog": "Атаулардың қара тізімі журналын қарау",
+ "apihelp-titleblacklist-param-action": "Әрекет терксерілді.",
+ "apihelp-titleblacklist-param-nooverride": "Атаулардың қара тізімінің үстінен жазбаңыз."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/kk-latn.json b/www/wiki/extensions/TitleBlacklist/i18n/kk-latn.json
new file mode 100644
index 00000000..81f3ddca
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/kk-latn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": [],
+ "titleblacklist": "# Bul atawlardıñ qara tizimi. Jüýeli aýtılımdarğa (regex) säýkes mındağı atawlar jaratılmaýdı.\nMändemeler üşin «#» nışanın qoldanıñız.",
+ "titlewhitelist": "# Bul atawlardıñ aq tizimi. Mändemeler üşin «#» nışanın qoldanıñız",
+ "titleblacklist-forbidden-edit": "«$2» degen ataw jaratwı qulıptalğan. Bul qara tizimniñ jazbasına säýkes: <code>$1</code>",
+ "titleblacklist-forbidden-move": "«$2» degen «$3» degenge jıljıtılmaýdı, sebebi «$3» degen ataw jaratwı qulıptalğan. Bul qara tizimniñ jazbasına säýkes: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "«$2» degen faýl atı jaratwı qulıptalğan. Bul qara tizimniñ jazbasına säýkes: <code>$1</code>",
+ "titleblacklist-invalid": "Atawlardıñ qara tizimindegi kelesi {{PLURAL:$1|jol|joldar}} {{PLURAL:$1||}} jaramsız; saqtaw aldında {{PLURAL:$1|bunı|bulardı}} durıstap şığıñız:"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ko.json b/www/wiki/extensions/TitleBlacklist/i18n/ko.json
new file mode 100644
index 00000000..123b97bf
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ko.json
@@ -0,0 +1,39 @@
+{
+ "@metadata": {
+ "authors": [
+ "Klutzy",
+ "Kwj2772",
+ "ToePeu",
+ "아라",
+ "Hym411",
+ "Revi",
+ "IRTC1015",
+ "Hwangjy9",
+ "Ykhwong"
+ ]
+ },
+ "action-titleblacklistlog": "제목 블랙리스트 로그를 봅니다",
+ "log-name-titleblacklist": "제목 블랙리스트 기록",
+ "log-description-titleblacklist": "이 기록은 제목 블랙리스트 로그의 일치를 추적합니다.",
+ "logentry-titleblacklist-hit-username": "$1님이 제목 블랙리스트 $4 패턴과 일치하는 $3 계정을 만들려고 {{GENDER:$2|하였습니다}}.",
+ "titleblacklist-desc": "관리자가 [[MediaWiki:Titleblacklist]], [[MediaWiki:Titlewhitelist]]마다 문서와 사용자 계정을 만드는 것을 금지할 수 있습니다",
+ "titleblacklist": "# 제목 금지 목록입니다. 정규 표현식과 일치하는 제목이나 사용자 계정은 만들 수 없습니다.\n# 주석 내용에는 앞에 \"#\"을 붙여 주세요.\n# 기본적으로 규칙은 대소문자를 구별하지 않습니다",
+ "titlewhitelist": "# 제목 허용 목록입니다. 주석 내용에는 앞에 \"#\"을 붙여 주세요.\n# 기본적으로 규칙은 대소문자를 구별하지 않습니다",
+ "titleblacklist-forbidden-edit": "\"$2\" 문서는 만들기 금지 목록에 포함되어 있습니다.\n해당 만들기 금지 조건은 <code>$1</code>입니다.",
+ "titleblacklist-forbidden-move": "\"$2\" 문서를 \"$3\" 제목으로 이동할 수 없습니다. 문서 만들기 금지 조건이 걸려 있습니다.\n해당 금지 조건은 <code>$1</code>입니다.",
+ "titleblacklist-forbidden-upload": "\"$2\" 파일 이름을 만드는 것이 제한되어 있습니다.\n파일 이름이 다음의 규칙에 해당됩니다: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "\"$2\" 이름으로 계정을 만드는 것이 제한되어 있습니다.\n계정 이름이 다음의 규칙에 해당됩니다: <code>$1</code>",
+ "titleblacklist-invalid": "제목 블랙리스트의 다음 {{PLURAL:$1|줄}}에 잘못된 구문이 {{PLURAL:$1|있습니다}}.\n저장하기 전에 {{PLURAL:$1}}올바르게 수정해주세요:",
+ "titleblacklist-override": "블랙리스트를 무시",
+ "titleblacklist-warning": "<strong>경고: 이 문서는 제목 금지 목록의 다음 항목과 일치하기 때문에 관리자와 <code>tboverride</code> 권한을 가진 사용자만 편집할 수 있습니다.</strong><br /><code>$1</code>",
+ "right-tboverride": "문서 제목이나 사용자 이름 블랙리스트 무시",
+ "right-tboverride-account": "사용자 이름 블랙리스트를 무시",
+ "right-titleblacklistlog": "제목 블랙리스트 기록 보기",
+ "apihelp-titleblacklist-description": "TitleBlacklist에 대해 문서 제목, 파일 이름, 사용자 이름을 검사합니다.",
+ "apihelp-titleblacklist-summary": "TitleBlacklist에 대해 문서 제목, 파일 이름, 사용자 이름을 검사합니다.",
+ "apihelp-titleblacklist-param-title": "블랙리스트에 대해 검사할 문자열입니다.",
+ "apihelp-titleblacklist-param-action": "검사할 동작입니다.",
+ "apihelp-titleblacklist-param-nooverride": "titleblacklist의 무효화를 시도하지 않습니다.",
+ "apihelp-titleblacklist-example-1": "[[Foo]] 문서가 블랙리스트에 올라가 있는지 검사하기",
+ "apihelp-titleblacklist-example-2": "편집 시 [[Bar]] 문서가 블랙리스트에 올라가 있는지 검사하기"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/krc.json b/www/wiki/extensions/TitleBlacklist/i18n/krc.json
new file mode 100644
index 00000000..ba707559
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/krc.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iltever",
+ "Ernác"
+ ]
+ },
+ "titleblacklist-override": "Къара тизмеге эс бёлме"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ksh.json b/www/wiki/extensions/TitleBlacklist/i18n/ksh.json
new file mode 100644
index 00000000..83656338
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ksh.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "action-titleblacklistlog": "donn et Logbohch vun de „schwazze Leß“ för Övvverschreffte aanlohre",
+ "log-name-titleblacklist": "De „schwazze Leß“ för Övvverschreffte",
+ "log-description-titleblacklist": "Heh di Vörjäng verfollje de Träffer en de „schwazze Leß“ för Övverschreffte vun Sigge.",
+ "logentry-titleblacklist-hit-username": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 wulld ene Zohjang för „$3“ aanlähje un dat wood övver dä Endraach „$4“ de „schwazze Leß“ för Övverschreffte vun Sigge ongerbonge.",
+ "titleblacklist-desc": "Määt et möjjelesch, bestemmpte neuje Sigge un neuje Metmaacher-Name övver en [[MediaWiki:Titleblacklist|„schwatze Leß“]] un en [[MediaWiki:Titlewhitelist|Leß met Ußnahme dofun]] ze verbeede.",
+ "titleblacklist": "# Dat hee eß en „schwatze Leß“ met verbodde Tittele för Sigge.\n# Dä ier Enhallt sen rejolähre Ußdrök,\n# wat do drop paß, kam_mer nit aanläje.\n# Wam_mer et nit ömschtällt, es Jruß- un Kleinschrevv_ejaal.\n# Donn „#“ aan der Aanfang fun en Reih, dann häß ene Kommentaa.",
+ "titlewhitelist": "# Dat hee eß en Leß met Ußnahme fun de „schwatze Leß“ met verbodde\n# Tittele för Sigge. Dä ier Enhallt sen rejolähre Ußdrök,\n# wat do drop paß, kam_mer aanläje.\n# Wam_mer et nit ömschtällt, es Jruß- un Kleinschrevv_ejaal.\n# Donn „#“ aan der Aanfang fun en Reih, dann häß ene Kommentaa.",
+ "titleblacklist-forbidden-edit": "En Sigg met dämm Tittel „$2“ aanzelääje es verbodde per dämm Enndraach <code>$1</code> en de „schwazze Leß.“",
+ "titleblacklist-forbidden-move": "Di Sigg met dä Övverschreff „$2“ op de Övverschreff „$3“ ömzenänne es verbodde per dämm Enndraach <code>$1</code> en de „schwazze Leß.“",
+ "titleblacklist-forbidden-upload": "En Datei met dämm Tittel „$2“ huhzelade es verbodde per dämm Enndraach <code>$1</code> en de „schwazze Leß.“",
+ "titleblacklist-forbidden-new-account": "Enne Metmaacher met dämm Name „$2“ aanzelääje es verbodde per dämm Enndraach <code>$1</code> en de „schwazze Leß.“",
+ "titleblacklist-invalid": "{{PLURAL:$1|De Reih unge stemmp nit un moß|De $1 Reije unge stimme nit un möße|Dat he sull}} för em Affschpeischere eets en Odenung jebraat wäde:",
+ "titleblacklist-override": "De schwazze Leß övverjonn",
+ "titleblacklist-warning": "<strong>Opjepaß:</strong> heh di Sigg kann blohß vun Wikki_Köhbeße un vun andere Metmaacher met däm Rääsch <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">tboverride</code>, weil se en dä „schwazze Leß“ för Övverschreffte op heh dä Enndraach paß:<br /><code>$1</code>",
+ "right-tboverride": "De Lėß met verbodde Nahme un Övverschreffte för Sigge övverjonn",
+ "right-tboverride-account": "De Leß met verbodde Metmaacher-Name övverjonn",
+ "right-titleblacklistlog": "Donn et Logbohch vun de „schwazze Leß“ för Övvverschreffte aanlohre",
+ "apihelp-titleblacklist-description": "Donn de Övverschreffte vun Sigge, Datteije udder de Nahme vun Metmaacher jähje de „schwazze Leß“ för Övvverschreffte pröhve.",
+ "apihelp-titleblacklist-param-title": "De Zäijschekätt, öm se jähje de „schwazze Leß“ ze pröhve.",
+ "apihelp-titleblacklist-param-action": "Der Vörjang zom Pröhve.",
+ "apihelp-titleblacklist-param-nooverride": "Donn nit versöhke, de „schwazze Leß“ för Övvverschreffte ze övverjonn.",
+ "apihelp-titleblacklist-example-1": "Donn pröhfe, ov „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Foo]]</code>“ en de „schwazze Leß“ es.",
+ "apihelp-titleblacklist-example-2": "Donn pröhfe, ov „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Bar]]</code>“ en de „schwazze Leß“ för et Verändere es.",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Övverjangk de Pröhvong op jefälschte Metmaacher (Bruch et Rääsch <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\" >tboverride</code> udder <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\" >tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ku-latn.json b/www/wiki/extensions/TitleBlacklist/i18n/ku-latn.json
new file mode 100644
index 00000000..fd7072c9
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ku-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gomada"
+ ]
+ },
+ "titleblacklist-override": "Lîsteya reş paşguh bike"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/la.json b/www/wiki/extensions/TitleBlacklist/i18n/la.json
new file mode 100644
index 00000000..178440d0
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/la.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "UV",
+ "Laurentianus"
+ ]
+ },
+ "titleblacklist": "# Hic est index titulorum prohibitorum. Tituli usoresque qui congruunt\n# cum una ex expressionibus regularis sequentibus creari non possunt.\n# Utere \"#\" pro commentariis.\n# Litterae maiusculae ab litteris minusculis distingui non solent.",
+ "titlewhitelist": "# Hic est index titulorum permissorum. Utere \"#\" pro commentariis.\n# Litterae maiusculae ab litteris minusculis distingui non solent.",
+ "titleblacklist-forbidden-edit": "Pagina cum titulo \"$2\" creari non potest. Hic titulus congruit cum expressione regulari: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Pagina cum titulo \"$2\" non ad \"$3\" moveri potest, quia titulus \"$3\" prohibitus est ne pagina creetur. Hic titulus congruit cum expressione regulari: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Fasciculus cum titulo \"$2\" imponi non potest. Hic titulus congruit cum expressione regulari: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Nomen \"$2\" nulli imponi licet.\nQui titulus congruit cum hac expressione interdicta: <code>$1</code>"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/lb.json b/www/wiki/extensions/TitleBlacklist/i18n/lb.json
new file mode 100644
index 00000000..a577d45d
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/lb.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robby",
+ "Soued031"
+ ]
+ },
+ "titleblacklist-desc": "Erlaabt den Administrateuren et d'Uleeë vu Säiten a Benotzerkonte mat spezifeschen Titelen iwwer eng [[MediaWiki:Titleblacklist|schwaarz Lëscht]] an eng [[MediaWiki:Titlewhitelist|wäiss Lëscht]] ze verbidden",
+ "titleblacklist": "# Dëst ass een Titel deen op enger schwaarzer Lëscht steet. Titelen a Benotzernimm op déi dës Ausdréck passe kann net ugeluecht ginn\n# Benotzt \"#\" fir Bemierkungen\n# Et gëtt tëscht groussen a klenge Buchstawen ënnerscheet",
+ "titlewhitelist": "# Dëst ass d'''Whitelist'' vun den Titelen. Benotzt \"#\" fir Bemierkungen.\n# Et gëtt een Ënnerscheed tëscht groussen a klenge Buchstawe gemaach",
+ "titleblacklist-forbidden-edit": "Den Titel \"$2\" dàerf net ugeluecht ginn.\nEn ass op der schwaarzer Lëscht wéint folgendem Begrëff: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" kann net op \"$3\" geréckelt ginn, well den Titel \"$3\" net däerf ugeluecht ginn.\nEn entsprécht dëser Rubrik vun der schwaarzr Lëscht: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "De Fichiersnumm \"$2\" kann net benotzt ginn.\nHien ass identesch mat dësem Numm vun der schwaarzer Lëscht (black list): <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "De Benotzermumm \"$2\" gouf gespaart fir benotzt ze ginn.\nEn ass sou op der ''schwaarzer Lëscht'': <code>$1</code>",
+ "titleblacklist-invalid": "Dës {{PLURAL:$1|Linn|Linnen}} op der schwaarzer Lëscht vun den {{PLURAL:$1|Titelen ass|Titele sinn}} net valabel;\nverbessert se virum späicheren:",
+ "titleblacklist-override": "Schwaarz Lëscht ignoréieren",
+ "right-tboverride": "D'schwaarz Lëscht vun den Titelen a Benotzernimm ignoréieren",
+ "right-tboverride-account": "Schwaarz Lëscht vun de Benotzernimm iwwergoen"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/li.json b/www/wiki/extensions/TitleBlacklist/i18n/li.json
new file mode 100644
index 00000000..304d8e30
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/li.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Matthias",
+ "Ooswesthoesbes"
+ ]
+ },
+ "titleblacklist-desc": "Veurkömp het aanmake van pagina's èn gebroekers waenger 'ne [[MediaWiki:Titleblacklist|zwarte]] en [[MediaWiki:Titlewhitelist|witte]] lies.",
+ "titleblacklist": "# Dit is 'ne zjwarte lies veur paginaname. Paginaname en gebroekers die voldoon aan 'ne regex kinne neet aangemaak waere.\n# Gebroek \"#\" veur opmerkinge.\n# Dit is autematis huidlettergeveulig",
+ "titlewhitelist": "# Dit is 'ne witte lies veur paginaname. Gebroek \"#\" veur opmerkinge.\n# Dit is autematis huidlettergeveulig",
+ "titleblacklist-forbidden-edit": "Een pagina met de naam \"$2\" kan niet aangemaakt worden. Deze paginanaam voldoet aan de volgende beperking op de zwarte lijst: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" kan niet hernoemd worden naar \"$3\", omdat pagina's met de naam \"$3\" niet aangemaakt kunnen worden. Deze paginanaam voldoet aan de volgende beperking op de zwarte lijst: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Het bestand \"$2\" kan niet toegevoegd worden. Deze bestandsnaam voldoet aan de volgende beperking op de zwarte lijst: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "De gebroekersnaam \"$2\" kan neet aangemaak waere ómdet 't voldeit aan de volgende beperking op de zwarte lies: <code>$1</code>",
+ "titleblacklist-invalid": "De volgende {{PLURAL:$1|regel|regels}} in de zwarte lijst veur paginaname {{PLURAL:$1|is|zijn}} ongeldig. Verbeter die {{PLURAL:$1|regel|regels}} asjeblieft veurdat ge de lijst opslaat:",
+ "titleblacklist-override": "Negeer zwarte lies",
+ "right-tboverride": "De zwarte lies veur pazjenaname negere",
+ "right-tboverride-account": "De zwarte lies veur gebroekersname negere"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/lki.json b/www/wiki/extensions/TitleBlacklist/i18n/lki.json
new file mode 100644
index 00000000..cec05147
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/lki.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hosseinblue"
+ ]
+ },
+ "action-titleblacklistlog": "مشاهدۀ سیاهۀ لیست سیاه عنوان",
+ "log-name-titleblacklist": "سیاهۀ لیست سیاه عنوان",
+ "log-description-titleblacklist": "این رویدادها خوردن به فهرست سیاه را دنبال می‌کنند.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|باعث}} یک برخورد با فهرست سیاه عنوان هنگام ساخت یک حساب کاربری $3 متطابق با $4 شد.",
+ "titleblacklist-desc": "امکان جلوگیری از ایجاد صفحه‌هایی با عنوان‌های خاص را می‌دهد: [[MediaWiki:Titleblacklist]] و [[MediaWiki:Titlewhitelist]]",
+ "titleblacklist": "# این یک فهرست سیاه عنوان‌ها است. عنوان‌هایی که با یک عبارت باقاعده در این صفحه مطابقت کنند را نمی‌توان ایجاد کرد.\n# از «#» برای توضیحات استفاده کنید.\n# به‌طور پیش‌فرض به بزرگ و کوچکی حروف حساس نیست.",
+ "titlewhitelist": "# این یک فهرست سفید برای عنوان‌ها است. از «#» برای افزودن توضیحات استفاده کنید.\n#این فهرست به طور پیش‌فرض به بزرگی و کوچکی حساس نیست",
+ "titleblacklist-forbidden-edit": "ایجاد عنوان «$2» ممنوع شده‌است. این عنوان با این دستور از فهرست سیاه مطابقت می‌کند: <code>$1</code>",
+ "titleblacklist-forbidden-move": "«$2» را نمی‌توان به «$3» انتقال داد. ایجاد «$3» ممنوع است. چون با این دستور از فهرست سیاه مطابقت می‌کند: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "ایجاد نام «$2» برای پرونده‌ها ممنوع است، زیرا با این دستور از فهرست سیاه مطابقت می‌کند: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "حساب کاربری «$2» در برابر ایجاد محافظت شده‌است.\nاین نام کاربری با این قسمت از فهرست سیاه مطابقت دارد: <code>$1</code>",
+ "titleblacklist-invalid": "\n{{PLURAL:$1|سطر|سطرهای}} زیر در فهرست سیاه عنوان‌ها نامجاز {{PLURAL:$1|است|هستند}}؛ لطفاً {{PLURAL:$1|آن|آن‌ها}} را قبل از ذخیره‌کردن اصلاح کنید:",
+ "titleblacklist-override": "از فهرست سیاه چشم‌پوشی کن",
+ "titleblacklist-warning": "<strong>هشدار: این صفحه فقط توسط مدیران سیستم و کاربرانی که مجوز <code>tboverride</code> دارند قابل ویرایش شدن است؛ چون صفحه منطبق با لیست‌سیاه زیر است: </strong><br /><code>$1</code>",
+ "right-tboverride": "نادیده گرفتن لیست سیاه عنوان یا نام کاربری",
+ "right-tboverride-account": "لغو فهرست سیاه نام کاربری",
+ "right-titleblacklistlog": "مشاهدۀ سیاهۀ لیست سیاه عنوان",
+ "apihelp-titleblacklist-param-action": "کنش وارسی بیه."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/lrc.json b/www/wiki/extensions/TitleBlacklist/i18n/lrc.json
new file mode 100644
index 00000000..40d3a587
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/lrc.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mogoeilor"
+ ]
+ },
+ "log-name-titleblacklist": "داسون پهرستنومه نومگه سئ",
+ "titleblacklist-override": "تیه پوشی د نومگه سئ",
+ "right-titleblacklistlog": "دیئن داسون پهرستنومه نومگه سئ",
+ "apihelp-titleblacklist-param-action": "کنشت وارسی بیه."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/lt.json b/www/wiki/extensions/TitleBlacklist/i18n/lt.json
new file mode 100644
index 00000000..abf65d61
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/lt.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200",
+ "Homo",
+ "Matasg",
+ "Albertas"
+ ]
+ },
+ "action-titleblacklistlog": "peržiūrėti pavadinimų juodojo sąrašo žurnalą",
+ "log-name-titleblacklist": "Pavadinimų juodojo sąrašo žurnalas",
+ "log-description-titleblacklist": "Šie įvykiai seka pavadinimų juodojo sąrašo sužadinimus.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|sukėlė}} pavadinimų juodojo sąrašo sužadinimą, kai bandė sukurti paskyrą $3, atitinkančią $4.",
+ "titleblacklist-desc": "Leidžia administratoriams uždrausti kurti puslapius ir vartotojų sąskaitas pagal [[MediaWiki:Titleblacklist|juodąjį sąrašą]] ir [[MediaWiki:Titlewhitelist|baltąjį sąrašą]]",
+ "titleblacklist": "# Tai pavadinimų juodasis sąrašas. Pavadinimai ir vartotojai, kurie atitinka įrašus čia, negali būti sukuriami. \n# Naudokite \"#\" komentarams. \n# Pagal nutylėjimą nejautrus raidžių dydžiui",
+ "titlewhitelist": "# Tai pavadinimų baltasis sąrašas. Naudokite \"#\" komentarams. \n# Pagal nutylėjimą nejautrus raidžių dydžiui",
+ "titleblacklist-forbidden-edit": "Pavadinimą \"$2\" buvo uždrausta sukurti.\nJis atitinką šį juodojo sąrašo įrašą: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" negali būti perkeltas į \"$3\", nes pavadinimą \"$3\" buvo uždrausta sukurti.\nJis atitinką šį juodojo sąrašo įrašą: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Failą \"$2\" buvo uždrausta sukurti.\nJis atitinką šį juodojo sąrašo įrašą: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Naudotojo vardą \"$2\" buvo uždrausta sukurti.\nJis atitinką šį juodojo sąrašo įrašą: <code>$1</code>",
+ "titleblacklist-invalid": "Žemiau {{PLURAL:$1|esanti eilutė|esančios eilutės}} pavadinimų juodajame sąraše {{PLURAL:$1|yra}} {{PLURAL:$1|netinkama|netinkamos}};\nprašome {{PLURAL:$1|ją|jas}} pataisyti prieš išsaugant:",
+ "titleblacklist-override": "Ignoruoti juodąjį sąrašą",
+ "titleblacklist-warning": "<strong>Įspėjimas: Šį puslapį gali redaguoti tik administratoriai ir kiti naudotojai, turinys <code>tboverride</code> teisę, nes jis atitinka šį pavadinimų juodojo sąrašo įrašą:</strong><br /><code>$1</code>",
+ "right-tboverride": "Nepaisyti pavadinimų arba naudotojų juodojo sąrašo",
+ "right-tboverride-account": "Nepaisyti naudotojų juodojo sąrašo",
+ "right-titleblacklistlog": "Peržiūrėti pavadinimų juodojo sąrašo žurnalą",
+ "apihelp-titleblacklist-description": "Patikrinti, ar straipsnio pavadinimas, failo vardas ar naudotojo vardas nėra įtrauktas į juodąjį sąrašą.",
+ "apihelp-titleblacklist-param-title": "Eilutė, kurią patikrinti juodajame sąraše.",
+ "apihelp-titleblacklist-param-action": "Veiksmas, kurį patikrinti.",
+ "apihelp-titleblacklist-param-nooverride": "Nebandykite perrašyti pavadinimų juodojo sąrašo.",
+ "apihelp-titleblacklist-example-1": "Patikrinti, ar [[Foo]] yra juodajame sąraše",
+ "apihelp-titleblacklist-example-2": "Patikrinti, ar [[Bar]] yra redagavimo juodajame sąraše",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Ignoruoti pokštų patikras (reikalinga bent viena iš šių teisių: <code>tboverride</code>, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/mk.json b/www/wiki/extensions/TitleBlacklist/i18n/mk.json
new file mode 100644
index 00000000..3d3818a5
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/mk.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06"
+ ]
+ },
+ "action-titleblacklistlog": "преглед на дневникот на наслови на црниот список",
+ "log-name-titleblacklist": "Дневник на наслови на црниот список",
+ "log-description-titleblacklist": "Овие настани следат наидувања на наслови на црниот список.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|наиде}} на наслов од црниот список во обид да ја направи сметката $3, совпаѓајќи ја со $4.",
+ "titleblacklist-desc": "Им овозможува на администраторите да забранат создавање на страници и кориснички сметки со помош на [[MediaWiki:Titleblacklist|црн список]] и [[MediaWiki:Titlewhitelist|бел список]]",
+ "titleblacklist": "# Ова е црн список на наслови. Насловите и корисниците кои се совпаѓаат со регуларните изрази на списокот не можат да се создадат.\n# За коментари користете го знакот „#“.\n# Ова разликува мали и големи букви по основно",
+ "titlewhitelist": "# Ова е бел список на наслови. За коментари користете го знакот „#“. \n# Ова разликува мали и големи букви по основно",
+ "titleblacklist-forbidden-edit": "Насловот „$2“ е забранет за создавање.\nСе совпаѓа со следната ставка на црниот список: <code>$1</code>",
+ "titleblacklist-forbidden-move": "„$2“ не може да се премести на „$3“, бидејќи насловот „$3“ е забранет за создавање.\nСе совпаѓа со следнава ставка на црниот список: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Податотеката по име „$2“ е забранета за создавање.\nСе совпаѓа со следнава ставка на црниот список: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Корисничкото име „$2“ е забрането за создавање.\nСе совпаѓа со следнава ставка на црниот список: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Следниов ред|Следниве редови}} во црниот список на наслови {{PLURAL:$1|е|се}} неважечки;\nпоправете {{PLURAL:$1|го|ги}} пред да зачувате:",
+ "titleblacklist-override": "Занемари го црниот список",
+ "titleblacklist-override-help": "Корисниците се доволно привилегии можат да одберат да го занемарат проверувањето на наслови во црниот список.",
+ "titleblacklist-warning": "<strong>Предупредување: Страницава можат да ја уредуваат само администратори и други корисници со правото <code>tboverride</code> бидејќи се совпаѓа со следниов наслов на црниот список:</strong><br /><code>$1</code>",
+ "right-tboverride": "Занемарување на црниот список на наслови или корисници",
+ "right-tboverride-account": "Потиснување на црниот список на кориснички имиња",
+ "right-titleblacklistlog": "Преглед на дневникот на наслови на црниот список",
+ "apihelp-titleblacklist-description": "Провери наслов на статија, име на податотека или корисничко име во Црниот список.",
+ "apihelp-titleblacklist-summary": "Провери наслов на статија, име на податотека или корисничко име во Црниот список.",
+ "apihelp-titleblacklist-param-title": "Низата што треба да се провери во црниот список.",
+ "apihelp-titleblacklist-param-action": "Дејството што треба да се провери.",
+ "apihelp-titleblacklist-param-nooverride": "Не се обидувај да наметнеш врз titleblacklist.",
+ "apihelp-titleblacklist-example-1": "Провери дали [[Foo]] е на црниот список",
+ "apihelp-titleblacklist-example-2": "Провери дали [[Bar]] е на црниот список за уредување",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Занемари ги проверките за слични имиња (бара едно од следниве права: <code>tboverride</code>, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ml.json b/www/wiki/extensions/TitleBlacklist/i18n/ml.json
new file mode 100644
index 00000000..c0604012
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ml.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Praveenp",
+ "Shijualex"
+ ]
+ },
+ "action-titleblacklistlog": "തലക്കെട്ട് കരിമ്പട്ടികയുടെ രേഖ കാണുക",
+ "log-name-titleblacklist": "തലക്കെട്ട് കരിമ്പട്ടികയുടെ രേഖ",
+ "log-description-titleblacklist": "പാഴെഴുത്ത് കരിമ്പട്ടികയെ ഉണർത്തിയ സംഭവങ്ങൾ.",
+ "logentry-titleblacklist-hit-username": "$4 പോലെയുള്ള അംഗത്വം $3 സൃഷ്ടിക്കാൻ ശ്രമിച്ചപ്പോൾ $1 തലക്കെട്ട് പാഴെഴുത്ത് കരിമ്പട്ടികയെ {{GENDER:$2|ഉണർത്തി}}",
+ "titleblacklist-desc": "[[MediaWiki:Titleblacklist]], [[MediaWiki:Titlewhitelist]] എന്നിവയിൽ കൊടുത്തിരിക്കുന്ന അംഗത്വങ്ങളും താളുകളും സൃഷ്ടിക്കുന്നത് തടയാൻ കാര്യനിർവാഹകരെ അനുവദിക്കുന്നു.",
+ "titleblacklist": "# ഇതു തലക്കെട്ടിന്റെ കരിമ്പട്ടികയാണ്‌. ഈ പട്ടികയിലുള്ള ഇനവുമായി യോജിക്കുന്ന ലേഖനങ്ങളും ഉപയോക്തൃനാമങ്ങളും സൃഷ്ടിക്കാനാവില്ല. \n# അഭിപ്രായത്തിനു \"#\" ഉപയോഗിക്കുക.\n# ഇതു സ്വതേ കേസ് സെൻസിറ്റീവ് ആണ്.",
+ "titlewhitelist": "# ഇത് തലക്കെട്ടിന്റെ ശുദ്ധപട്ടികയാണ്. കുറിപ്പിടാനായി \"#\" ഉപയോഗിക്കുക. \n# ഇത് സ്വതേ കേസ് സെൻസിറ്റീവ് ആണ്",
+ "titleblacklist-forbidden-edit": "\"$2\" എന്ന തലക്കെട്ട് സൃഷ്ടിക്കുന്നതു നിരോധിച്ചിട്ടുള്ളതാണ്‌. ആ തലക്കെട്ട് താഴെ പ്രദർശിപ്പിച്ചിരിക്കുന്ന കരിമ്പട്ടിക ഇനവുമായി യോജിക്കുന്നു: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$3\" എന്ന തലക്കെട്ട് സൃഷ്ടിക്കുന്നതു നിരോധിച്ചിട്ടുള്ളതിനാൽ, \"$2\" എന്ന താൾ \"$3\" എന്ന തലക്കെട്ടിലേക്കു മാറ്റാൻ പറ്റില്ല. ആ തലക്കെട്ട് താഴെ പ്രദർശിപ്പിച്ചിരിക്കുന്ന കരിമ്പട്ടിക ഇനവുമായി യോജിക്കുന്നു: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "\"$2\" എന്ന നാമം പ്രമാണത്തിനു കൊടുക്കുന്നത് നിരോധിച്ചിട്ടുള്ളതാണ്‌.\nആ നാമം താഴെ പ്രദർശിപ്പിച്ചിരിക്കുന്ന കരിമ്പട്ടിക ഇനവുമായി യോജിക്കുന്നു: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "ഉപയോക്തൃനാമം \"$2\" സൃഷ്ടിക്കുന്നതിൽ നിന്നും നിരോധിക്കപ്പെട്ടതാണ്.\nകരിമ്പട്ടികയിൽ കൊടുത്തിരിക്കുന്ന ഇനിപ്പറയുന്നതുമായി അതു ഒത്തുപോകുന്നു: <code>$1</code>",
+ "titleblacklist-invalid": "കരിമ്പട്ടികയിലെ താഴെ കൊടുത്തിരിക്കുന്ന {{PLURAL:$1|വരി|വരികൾ}} അസാധുവാണ്.\nദയവായി {{PLURAL:$1|അത്|അവ}} ശരിയാക്കിയ ശേഷം സേവ് ചെയ്യുക:",
+ "titleblacklist-override": "കരിമ്പട്ടിക അവഗണിക്കുക",
+ "right-tboverride": "തലക്കെട്ടിന്റെ അല്ലെങ്കിൽ ഉപയോക്തൃനാമത്തിന്റെ കരിമ്പട്ടികയെ അതിലംഘിക്കുക",
+ "right-tboverride-account": "ഉപയോക്തൃനാമ കരിമ്പട്ടികയെ അതിലംഘിക്കുക",
+ "right-titleblacklistlog": "തലക്കെട്ട് കരിമ്പട്ടികയുടെ രേഖ കാണുക",
+ "apihelp-titleblacklist-description": "ലേഖനത്തിന്റെ തലക്കെട്ട്, പ്രമാണത്തിന്റെ പേര് അല്ലെങ്കിൽ ഉപയോക്തൃനാമം തലക്കെട്ട്‌കരിമ്പട്ടികയിൽ പരിശോധിക്കുക.",
+ "apihelp-titleblacklist-param-title": "കരിമ്പട്ടികയിൽ പരിശോധിക്കേണ്ട പദം.",
+ "apihelp-titleblacklist-param-action": "പരിശോധിക്കേണ്ട പ്രവൃത്തി.",
+ "apihelp-titleblacklist-example-1": "[[Foo]] കരിമ്പട്ടികയിൽ ഉൾപ്പെട്ടിട്ടുണ്ടോയെന്ന് പരിശോധിക്കുക",
+ "apihelp-titleblacklist-example-2": "[[Bar]] തിരുത്തുന്ന കരിമ്പട്ടികയിൽ ഉണ്ടോയെന്ന് പരിശോധിക്കുക"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/mr.json b/www/wiki/extensions/TitleBlacklist/i18n/mr.json
new file mode 100644
index 00000000..61fb82fa
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/mr.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaajawa",
+ "Kaustubh",
+ "Mahitgar",
+ "Rahuldeshmukh101",
+ "V.narsikar"
+ ]
+ },
+ "titleblacklist-desc": "[[MediaWiki:Titleblacklist|ब्लॅकलीस्ट]] व [[MediaWiki:Titlewhitelist|व्हाईट लीस्ट]] ला अनुसरून पाने आणि सदस्य खात्यांना प्रतिबंधित करण्याची प्रचालकांना परवानगी द्या",
+ "titleblacklist": "# ही शीर्षकांची काळी-यादी आहे.येथील शीर्षकांसोबत व सदस्यांसोबत नियमित अभिव्यक्ति जुळणाऱ्यास ते तयार करता येणार नाहीत.\n# प्रतिक्रिया देण्यासाठी \"#\" वापरा.\n# हे अविचलरित्या केस इनसेंसेटिव्ह आहे",
+ "titlewhitelist": "# ही शीर्षकांची श्वेतयादी आहे. शेरा देण्यासाठी \"#\" वापरा.\n# ही अविचलरित्या केस इनसेंसेटिव्ह आहे",
+ "titleblacklist-forbidden-edit": "\"$2\" या शीर्षकाचा लेख बनवू शकत नाही. खाली ब्लॉक केलेल्या शीर्षकांच्या यादीतील नोंद आहे:\n<code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" चे \"$3\" ला स्थानांतरण होऊ शकत नाही, कारण \"$3\" हे ब्लॉक केलेल्या शीर्षकांच्या यादीत आहे. खाली ब्लॉक केलेल्या शीर्षकांच्या यादीतील नोंद आहे: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "\"$2\" या शीर्षकाची संचिका बनवू शकत नाही. खाली ब्लॉक केलेल्या शीर्षकांच्या यादीतील नोंद आहे:\n<code>$1</code>",
+ "titleblacklist-forbidden-new-account": "\"$2\" सदस्यनाव निर्मितीपासून प्रतिबंधीत केलेले आहे.\nते खालील वर्ज्यसूचीशी जुळते (महाराष्ट्र राज्याच्या सांस्कृतिक धोरणास अनुसरून वर्णभेदावर आधारीत मुळ इंग्रजीवाक्यातील ब्लॅकलीस्ट अनुवादकरताना टाळत आहोत): <code>$1</code>",
+ "titleblacklist-invalid": "शीर्षक ब्लॉक यादीतील खालील {{PLURAL:$1|ओळ चुकीची आहे|ओळी चुकीच्या आहेत}}; कृपया जतन करण्यापूर्वी {{PLURAL:$1|ती|त्या}} दुरुस्त करा:",
+ "titleblacklist-override": "काळ्या यादीकडे दुर्लक्ष करा",
+ "right-tboverride": "शीर्षक किंवा सदस्यनावांची काळी-यादी टाळा",
+ "right-tboverride-account": "खते काळ्या यादीकडे दुर्लक्ष करा"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ms.json b/www/wiki/extensions/TitleBlacklist/i18n/ms.json
new file mode 100644
index 00000000..85fa80ef
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ms.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Aviator",
+ "Izzudin",
+ "Pizza1016"
+ ]
+ },
+ "titleblacklist-desc": "Membolehkan penyelia untuk menghalangkan penciptaan laman dan akaun pengguna melalui [[MediaWiki:Titleblacklist|senarai hitam]] dan [[MediaWiki:Titlewhitelist|senarai putih]]",
+ "titleblacklist": "# Ini ialah senarai hitam tajuk. Tajuk atau pengguna yang sepadan dengan mana-mana ungkapan nalar di sini tidak boleh dicipta.\n# Gunakan \"#\" untuk komen.\n# Secara asali, ini tidak peka huruf (mengabaikan besar kecil huruf)",
+ "titlewhitelist": "# Ini ialah senarai hitam tajuk. Gunakan \"#\" untuk komen.\n# Secara asali, ini tidak peka huruf (mengabaikan besar kecil huruf)",
+ "titleblacklist-forbidden-edit": "Tajuk \"$2\" telah diharamkan.\nTajuk tersebut sepadan dengan entri senarai hitam berikut: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" tidak boleh dipindahkan ke \"$3\" kerana tajuk \"$3\" telah diharamkan.\nTajuk tersebut sepadan dengan entri senarai hitam berikut: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Nama fail \"$2\" telah diharamkan.\nNama tersebut sepadan dengan entri senarai hitam berikut: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Nama pengguna \"$2\" telah diharamkan kerana sepadan dengan entri senarai hitam berikut: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Baris|Baris-baris}} berikut adalah tidak sah. Sila betulkannya sebelum menyimpan:",
+ "titleblacklist-override": "Abaikan senarai hitam",
+ "right-tboverride": "Membatalkan senarai hitam tajuk atau nama pengguna",
+ "right-tboverride-account": "Mengatasi senarai hitam nama pengguna"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/mt.json b/www/wiki/extensions/TitleBlacklist/i18n/mt.json
new file mode 100644
index 00000000..c9e3fbf3
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/mt.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrisportelli"
+ ]
+ },
+ "titleblacklist-forbidden-new-account": "Il-ħolqien ta' utenti bl-isem \"$2\" ġie imblukkat. Dan jaqbel mad-daħla fil-lista s-sewda segwenti: <code>$1</code>",
+ "titleblacklist-override": "Injora l-lista s-sewda",
+ "right-tboverride": "Jinjora l-lista s-sewda tat-titli",
+ "right-tboverride-account": "Jinjora l-lista s-sewda tal-ismijiet tal-utent"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/nah.json b/www/wiki/extensions/TitleBlacklist/i18n/nah.json
new file mode 100644
index 00000000..c7fa75c1
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/nah.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fluence",
+ "Ricardo gs"
+ ]
+ },
+ "titleblacklist": "#Inīn ahcualli tēpōhualāmatl. Ahmo tihuelitiz ahmo ticyōcoyaz tōcāitl ahnozo tlatequitiltilīlli mā quinehuihuilia cemeh in nāhuatīllahtōliztli.\n#Xinemītia «#» titlacaquiztilīz.\n#Inīn ahmo quimati in huēyimachiyōtlahtōliztli intlā ahmo mopehpena"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/nap.json b/www/wiki/extensions/TitleBlacklist/i18n/nap.json
new file mode 100644
index 00000000..d995dae2
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/nap.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "C.R."
+ ]
+ },
+ "action-titleblacklistlog": "vide 'o titulo d' 'o riggistro d' 'a lista nera",
+ "log-name-titleblacklist": "Riggistro 'e titule bluccate",
+ "log-description-titleblacklist": "St'evente se pigliassero 'o cuntrollo 'e attivaziune d' 'a lista nera.",
+ "logentry-titleblacklist-hit-username": "$1, {{GENDER:$2|pe' ccausa 'e cchesta}} s'appicciaje 'a lista nera quanno se criaje nu cunto utente $3 ca currispunnesse a $4.",
+ "titleblacklist-desc": "Premmettesse l'ammenistature 'e pruteggere 'a criazione 'e paggene e cunte utente p' 'a [[MediaWiki:Titleblacklist|lista nera]] e 'a [[MediaWiki:Titlewhitelist|lista janca]]",
+ "titleblacklist": "# Chest'è na lista nera. 'E titule e l'utente ca s'azzeccassero n'espressione regolare ccà nun se ponno crià.\n# Ausate \"#\" p' 'e cummente.\n# Chest'è senzibbele a 'e maiuscole e minuscole 'e partenza",
+ "titlewhitelist": "# Chest'è na lista janca. Ausate \"#\" p' 'e cummente.\n# Chest'è senzibbele a 'e maiuscole e minuscole 'e partenza",
+ "titleblacklist-forbidden-edit": "'O titolo \"$2\" s'è cacciato pe' nun 'o putè crià.<br />\nStu titolo s'azzecca troppo 'a voce ccà, dint'a lista nera, oj cann: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" nun se pò mòvere ncopp'a \"$3\", pecché 'o titolo \"$3\" s'è luvato 'a criaziona.<br />\nÈ tropp'azzeccato 'a voce ccà, dint'a lista nera, oj cann: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "'O filename (nomme 'e file) \"$2\" s'è cacciato pe' nun 'o putè crià.<br />\nStu titolo s'azzecca troppo 'a voce ccà, dint'a lista nera, oj cann: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "'O cunto utente \"$2\" s'è cacciato pe' nun 'o putè crià.<br />\nStu titolo s'azzecca troppo 'a voce ccà, dint'a lista nera, oj cann: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|'A linea ccà abbascio|'E linee ccà abbascio}} dint'a lista nera 'e titole {{PLURAL:$1|è|songo}} invalide;\npe' piacere curriggite {{PLURAL:$1|chisto|chiste}} primm' 'e reggistrà:",
+ "titleblacklist-override": "Ignora 'a blacklist",
+ "titleblacklist-warning": "<strong>Attenziò: sta paggena se putesse cagnà surtanto 'a ll'ammenistrature o l'at'utente c' 'o deritto <code>tboverride</code> pecché currisponne 'a voce ccà d' 'a lista 'e titule bluccate, oj cann:</strong><br /><code>$1</code>",
+ "right-tboverride": "Sovrascrive 'a lista nera 'e titole o utente",
+ "right-tboverride-account": "Sovrascrive 'a lista nera 'utente",
+ "right-titleblacklistlog": "Vide 'o riggistro d' 'a lista nera",
+ "apihelp-titleblacklist-description": "Valida 'o titolo 'e narticolo, nomme 'e file, o nomme utente annanz'a l'elenco TitleBlacklist. ('a lista nera)",
+ "apihelp-titleblacklist-param-title": "'A stringa pe' validà annanz' 'a lista nira.",
+ "apihelp-titleblacklist-param-action": "L'aziona p' 'a cuntrullà.",
+ "apihelp-titleblacklist-param-nooverride": "Nun tentà 'e sovrascrivere 'a lista nera.",
+ "apihelp-titleblacklist-example-1": "Cuntrolla si [[Foo]] è miso dint'a lista nera p' 'o cagnà.",
+ "apihelp-titleblacklist-example-2": "Cuntrolla si [[Bar]] è miso dint'a lista nera p' 'o cagnà.",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Lassa perdere 'e check 'e spoofing (mbruoglie) (servesse uno d' 'e diritte ccà <code>tboverride</code>, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/nb.json b/www/wiki/extensions/TitleBlacklist/i18n/nb.json
new file mode 100644
index 00000000..222158fa
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/nb.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Danmichaelo",
+ "Nghtwlkr",
+ "Reedy",
+ "Jon Harald Søby"
+ ]
+ },
+ "action-titleblacklistlog": "se tittelsvartelisteloggen",
+ "log-name-titleblacklist": "Tittelsvartelistelogg",
+ "log-description-titleblacklist": "Disse hendelsene sporer treff på tittelsvartelista.",
+ "logentry-titleblacklist-hit-username": "$1 forårsaket et treff med tittelsvartelista da {{GENDER:$2|han|hun|vedkommende}} prøvde å opprette kontoen $3 som matchet $4.",
+ "titleblacklist-desc": "Gir muligheten til å forhindre at sider og brukerkontoer med visse titler opprettes, ved å bruke [[MediaWiki:Titleblacklist]] og [[MediaWiki:Titlewhitelist]]",
+ "titleblacklist": "# Dette er en svartlisting for titler. Titler og brukernavn som passer med regulære uttrykk her kan ikke opprettes.\n# Bruk «#» for kommentarer.\n# Det skilles ikke mellom store og små bokstaver som standard",
+ "titlewhitelist": "# Dette er en hvitelisting for titler. Bruk «#» for kommentarer.\n# Det skilles ikke mellom store og små bokstaver som standard",
+ "titleblacklist-forbidden-edit": "Tittelen «$2» er stengt for oppretting. Den blokkeres av følgende svartelistingselement: <code>$1</code>",
+ "titleblacklist-forbidden-move": "«$2» kan ikke flyttes til «$3» fordi tittelen «$3» har blitt stengt for oppretting. Den tilsvarer følgende element i svartelistinga: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Filnavnet «$2» er blokkert for oppretting. Den tilsvarer følgende svartelisteelement: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Brukernavnet «$2» kan ikke opprettes.\nDet tilsvarer følgende svartelisteelement: <code>$1</code>",
+ "titleblacklist-invalid": "Følgende {{PLURAL:$1|linje|linjer}} i tittelsvartelista er {{PLURAL:$1|ugyldig|ugyldige}}; vennligst korriger {{PLURAL:$1|den|dem}} før du lagrer:",
+ "titleblacklist-override": "Ignorer svartelista.",
+ "titleblacklist-override-help": "Brukere med tilstrekkelige rettigheter kan sette denne for å ignorere sjekker mot tittelsvartelista.",
+ "titleblacklist-warning": "<strong>Advarsel: Denne siden kan kun redigeres av administratorer og andre brukere med <code>tboverride</code>-rettigheter fordi den matcher følgende oppslag i tittelsvartelista:</strong><br /><code>$1</code>",
+ "right-tboverride": "Overkjøre svartelista for titler eller brukernavn",
+ "right-tboverride-account": "Overstyr svartelista for brukernavn",
+ "right-titleblacklistlog": "Vise tittelsvartelisteloggen",
+ "apihelp-titleblacklist-description": "Valider en sidetittel, et filnavn eller et brukernavn mot TitleBlacklist.",
+ "apihelp-titleblacklist-summary": "Valider en sidetittel, et filnavn eller et brukernavn mot TitleBlacklist.",
+ "apihelp-titleblacklist-param-title": "Strengen som skal valideres mot svartelista.",
+ "apihelp-titleblacklist-param-action": "Handlingen som skal sjekkes.",
+ "apihelp-titleblacklist-param-nooverride": "Ikke prøv å overstyre tittelsvartelista.",
+ "apihelp-titleblacklist-example-1": "Sjekk om [[Foo]] er svartelistet",
+ "apihelp-titleblacklist-example-2": "Sjekk om [[Bar]] er svartelistet for redigering",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Ignorer spoofing-sjekker (krever en av følgende rettigheter: <code>tboverride</code>, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/nds.json b/www/wiki/extensions/TitleBlacklist/i18n/nds.json
new file mode 100644
index 00000000..4456235c
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/nds.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Slomox"
+ ]
+ },
+ "titleblacklist-desc": "Verlöövt Administraters, dat Opstellen vun nich wünschte Sieden- un Brukernaams över en [[MediaWiki:Titleblacklist|Swartlist]] un [[MediaWiki:Titlewhitelist|Wittlist]] to verbeden",
+ "titleblacklist": "# Dit is de Swartlist vun Sieden- un Brukernaams, de nich opstellt warrn schöölt. Naams, op de disse regulären Utdrück todrepen doot, köönt nich opstellt warrn.\n# Bruuk „#“ för Kommentaren.\n# De List maakt keen Ünnerscheed bi grote un lütte Bookstaven",
+ "titlewhitelist": "# Dit is en Wittlist mit Utnahmen vun de Swartlist vun Siedennaams, de nich opstellt warrn schöölt. Bruuk „#“ för Kommentaren\n# De List maakt keen Ünnerscheed bi grote un lütte Bookstaven",
+ "titleblacklist-forbidden-edit": "De Siedennaam „$2“ is för dat nee Opstellen nich verlöövt.\nDat liggt an dissen Indrag in de Swartlist vun nich wünschte Siedennaams: <code>$1</code>",
+ "titleblacklist-forbidden-move": "„$2“ kann nich na „$3“ schaven warrn, de Siedennaam „$3“ is nich verlöövt.\nDat liggt an dissen Indrag in de Swartlist vun nich wünschte Siedennaams: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "De Dateinaam „$2“ is nich verlöövt.\nDat liggt an dissen Indrag in de Swartlist vun nich wünschte Dateinaams: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "De Brukernaam „$2“ is för dat nee Anmellen nich verlöövt.\nDat liggt an dissen Indrag in de Swartlist vun nich wünschte Brukernaams: <code>$1</code>",
+ "titleblacklist-invalid": "Disse {{PLURAL:$1|Reeg|Regen}} in de Sperrlist {{PLURAL:$1|is|sünd}} ungüllig; verbeter {{PLURAL:$1|ehr|jem}}, ehrdat du spiekerst:",
+ "right-tboverride": "De swarte List för Siedennaams ümgahn"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/nl.json b/www/wiki/extensions/TitleBlacklist/i18n/nl.json
new file mode 100644
index 00000000..c3420c77
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/nl.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "SPQRobin",
+ "Siebrand",
+ "Southparkfan",
+ "Sjoerddebruin",
+ "Mainframe98"
+ ]
+ },
+ "action-titleblacklistlog": "logboek zwarte lijst voor paginanamen te bekijken",
+ "log-name-titleblacklist": "Logboek zwarte lijst voor paginanamen",
+ "titleblacklist-desc": "Voorkomt het aanmaken van pagina's en gebruikers via een [[MediaWiki:Titleblacklist|zwarte lijst]] en een [[MediaWiki:Titlewhitelist|witte lijst]]",
+ "titleblacklist": "# Dit is een zwarte lijst voor paginanamen. Paginanamen en gebruikers die voldoen aan een reguliere expressie op deze pagina kunnen niet aangemaakt worden.\n# Gebruik \"#\" voor opmerkingen.\n# Regels in de zwarte lijst zijn niet hoofdlettergevoelig.",
+ "titlewhitelist": "# Dit is een witte lijst voor paginanamen. Gebruik \"#\" voor opmerkingen.\n# Regels in de witte lijst zijn niet hoofdlettergevoelig.",
+ "titleblacklist-forbidden-edit": "Een pagina met de naam \"$2\" kan niet aangemaakt worden. Deze paginanaam voldoet aan de volgende beperking op de zwarte lijst: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" kan niet hernoemd worden naar \"$3\", omdat pagina's met de naam \"$3\" niet aangemaakt kunnen worden. Deze paginanaam voldoet aan de volgende beperking op de zwarte lijst: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Het bestand \"$2\" kan niet toegevoegd worden. Deze bestandsnaam voldoet aan de volgende beperking op de zwarte lijst: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "De gebruikersnaam \"$2\" kan niet aangemaakt worden omdat die voldoet aan de volgende beperking op de zwarte lijst: <code>$1</code>",
+ "titleblacklist-invalid": "De volgende {{PLURAL:$1|regel|regels}} in de zwarte lijst voor paginanamen {{PLURAL:$1|is|zijn}} ongeldig.\nVerbeter die {{PLURAL:$1|regel|regels}} voordat u de lijst opslaat:",
+ "titleblacklist-override": "Zwarte lijst negeren",
+ "titleblacklist-warning": "<strong>Waarschuwing: Deze pagina kan alleen worden bewerkt door de beheerders en andere gebruikers met het <code>tboverride</code> recht omdat het overeenkomt met de volgende vermelding op de zwarte lijst voor titels:</strong><br /><code>$1</code>",
+ "right-tboverride": "De zwarte lijst voor pagina- en gebruikersnamen omzeilen",
+ "right-tboverride-account": "Zwarte lijst voor gebruikersnamen negeren",
+ "right-titleblacklistlog": "Logboek zwarte lijst voor paginanamen bekijken",
+ "apihelp-titleblacklist-param-action": "De handeling om te controleren.",
+ "apihelp-titleblacklist-example-1": "Controleer of [[Foo]] op de zwarte lijst staat."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/nn.json b/www/wiki/extensions/TitleBlacklist/i18n/nn.json
new file mode 100644
index 00000000..7da9a949
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/nn.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Frokor",
+ "Harald Khan",
+ "Njardarlogar"
+ ]
+ },
+ "titleblacklist-desc": "Gjev høve til å hindre at sider og brukarkontoar med visse titlar vert oppretta, ved å nytte [[MediaWiki:Titleblacklist]] og [[MediaWiki:Titlewhitelist]]",
+ "titleblacklist": "# Dette er ei svartlisting for titlar. Titlar og brukernamn som passar med regulære uttrykk her kan ikkje opprettast.\n# Bruk «#» for kommentarar.\n# Det vert som standard ikkje skilt mellom små og store bokstavar",
+ "titlewhitelist": "# Dette er ei kvitelisting for titlar. Bruk «#» for kommentarar.\n# Det vert som standard ikkje skilt mellom små og store bokstavar",
+ "titleblacklist-forbidden-edit": "Tittelen «$2» er stengd for oppretting. Han er blokkert av følgjande svartelistingselement: <code>$1</code>",
+ "titleblacklist-forbidden-move": "«$2» kan ikkje flyttast til «$3» fordi tittelen «$3» er stengd for oppretting. Han svarar til følgjande element i svartelistinga: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Filnamnet «$2» er blokkert for oppretting. Det svarar til følgjande svartelisteelement: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Brukarnamnet «$2» kan ikkje opprettast. \nDet svarar til følgjande svartelisteelement: <code>$1</code>",
+ "titleblacklist-invalid": "Følgjande {{PLURAL:$1|linje|linjer}} i tittelsvartelista er {{PLURAL:$1|ugyldig|ugyldige}}; ver venleg å rette {{PLURAL:$1|ho|dei}} før du lagrar:",
+ "titleblacklist-warning": "<strong>Åtvaring: Denne sida kan berre endrast av administratorar og andre brukarar med <code>tboverride</code>-retten av di ho passar med denne oppføringa i svartelista:</strong><br /><code>$1</code>",
+ "right-tboverride": "Overkøyre tittelsvartelista"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/oc.json b/www/wiki/extensions/TitleBlacklist/i18n/oc.json
new file mode 100644
index 00000000..c43f2047
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/oc.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "titleblacklist-desc": "Permet als administrators d'interdire la creacion de paginas e de comptes d'utilizaires en foncion d'una [[MediaWiki:Titleblacklist|lista negra]] e d'una [[MediaWiki:Titlewhitelist|lista blanca]]",
+ "titleblacklist": "# Aquò es un títol mes en lista negra. Los títols e los utilizaires que correspondon aicí a una expression regulara pòdon pas èsser creats.\n# Utilizatz \"#\" per escriure los comentaris.\n# Las entradas son pas sensiblas a la cassa per defaut.",
+ "titlewhitelist": "# Aquò es la lista blanca dels títols. Utilizatz « # » per inserir de comentaris.\n# Las entradas son pas sensiblas a la cassa per defaut.",
+ "titleblacklist-forbidden-edit": "La pagina intitolada « $2 » pòt pas èsser creada. Dins la lista negra, correspond a l'expression racionala : <code>$1</code>",
+ "titleblacklist-forbidden-move": "La page intitolada \"$2\" pòt pas èsser renomenada \"$3\". Dins la lista negra, correspond a l'expression racionala : <code>$1</code>",
+ "titleblacklist-forbidden-upload": "'''Un fichièr nomenat \"$2\" pòt pas èsser telecargat.''' <br /> Dins la lista negra, correspond a l'expression racionala : <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Lo nom d’utilizaire « $2 » es estat interdich a la creacion.\nCorrespond a l’entrada seguenta de la lista negra : <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|La linha seguenta|Las linhas seguentas}} dins la lista negra dels títols {{PLURAL:$1|es invalida|son invalidas}} : sètz convidat a {{PLURAL:$1|la|las}} corregir abans de salvar.",
+ "titleblacklist-override": "Ignorar la lista negra",
+ "right-tboverride": "Remplaçar la lista negra dels títols o dels noms d'utilizaires"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/or.json b/www/wiki/extensions/TitleBlacklist/i18n/or.json
new file mode 100644
index 00000000..64ea91a1
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/or.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jnanaranjan Sahu",
+ "Psubhashish"
+ ]
+ },
+ "titleblacklist-desc": "ପରିଛାମାନଙ୍କୁ [[MediaWiki:Titleblacklist|ବାସନ୍ଦ ତାଲିକା]] ଓ [[MediaWiki:Titlewhitelist|ଅନୁମତି ତାଲିକା]] ଅନୁସାରେ ପୃଷ୍ଠା ଓ ସଭ୍ୟ ଖାତା ତିଆରି ପାଇଁ ଅନୁମତି ଦେଇଥାଏ",
+ "titleblacklist": "# ଏହା ଏକ ନାମ ଅଟକତାଲିକା । ନାମ ଓ ସଭ୍ୟସବୁ ମେଳ ନଖାଇଲେ ଏଠାରେ ତାହା ଗଢ଼ାଯାଇପାରିବ ନାହିଁ ।\n# ମତାମତ ନିମନ୍ତେ \"#\" ବ୍ୟବହାର କରନ୍ତୁ ।\n# ଏହା ଆପେ ଆପେ ବଡ଼ ଓ ସାନ ଅକ୍ଷରକୁ ଏକ ଭାବରେ ନେଇଥାଏ",
+ "titlewhitelist": "# ଏହା ଏକ ଅନୁମୋଦିତ ନାମ ତାଲିକା । ମତାମତ ପାଇଁ \"#\" ବ୍ୟବହାର କରନ୍ତୁ । \n# ଏହା ଆପେ ଆପେ ବଡ଼ ଓ ସାନ ଅକ୍ଷରକୁ ସମଭାବେ ନେଇଥାଏ",
+ "titleblacklist-forbidden-edit": "\"$2\" ନାମଟି ତିଆରି କରିବାରୁ ଅଟକାଯାଇଛି ।\nଏହା ବାସନ୍ଦ ତାଲିକା ସହ ମେଳ ଖାଇଥାଏ: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" ରୁ \"$3\" ଘୁଞ୍ଚାଯାଇପାରିବ ନାହିଁ, କାରଣ \"$3\" ତିଆରି କରିବାରୁ ଅଟକାଯାଇଛି ।\nଏହା ଏହି ବାସନ୍ଦତାଲିକା ସହ ମେଳ ଖାଉଛି: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "\"$2\" ନାମଟି ତିଆରି କରିବାରୁ ଅଟକାଯାଇଛି ।\nଏହା ବାସନ୍ଦ ତାଲିକା ସହ ମେଳ ଖାଉଛି: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "\"$2\" ନାମଟି ତିଆରି କରିବାରୁ ଅଟକାଯାଇଛି ।\nଏହା ବାସନ୍ଦ ତାଲିକା ସହ ମେଳ ଖାଉଛି: <code>$1</code>",
+ "titleblacklist-invalid": "ବାସନ୍ଦ ତାଲିକାରେ ଥିବା ତଳଲିଖିତ {{PLURAL:$1|ଧାଡ଼ିଟି|ଧାଡ଼ିସବୁ}} ଅଚଳ {{PLURAL:$1|ଅଟେ|ଅଟନ୍ତି}};\nଦୟାକରି {{PLURAL:$1|ତାହାକୁ|ସେସବୁକୁ}} ସାଇତିବା ଆଗରୁ ସୁଧାରି ଦିଅନ୍ତୁ:",
+ "titleblacklist-override": "ଅଟକତାଲିକାକୁ ଅଣଦେଖା କରିବେ",
+ "right-tboverride": "ଅଟକ ତାଲିକାରେ ଶୀର୍ଷକ କିମ୍ବା ବ୍ୟବହାରକାରୀନାମକୁ ଅଜାଣତରେ ଅଣଦେଖା କରିବା",
+ "right-tboverride-account": "ଇଉଜର ନାମ ଅଟକ ତାଲିକାକୁ ଅଜାଣତରେ ଅଣଦେଖା କରିବା"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/pl.json b/www/wiki/extensions/TitleBlacklist/i18n/pl.json
new file mode 100644
index 00000000..267b2c8f
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/pl.json
@@ -0,0 +1,40 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beau",
+ "BeginaFelicysym",
+ "Chrumps",
+ "Derbeth",
+ "Peter Bowman",
+ "Sp5uhe",
+ "WTM",
+ "Tar Lócesilion",
+ "Woytecr"
+ ]
+ },
+ "action-titleblacklistlog": "przeglądania czarnej listy tytułów",
+ "log-name-titleblacklist": "Rejestr czarnej listy tytułów",
+ "log-description-titleblacklist": "Te zdarzenia służą do śledzenia trafień czarnej listy tytułów.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|spowodował|spowodowała}} dopasowanie do czarnej listy tytułów podczas próby stworzenia konta $3, co pasowało do $4.",
+ "titleblacklist-desc": "Pozwala na blokowanie tworzenia stron i kont użytkowników o określonych nazwach wykorzystując [[MediaWiki:Titleblacklist|czarną]] oraz [[MediaWiki:Titlewhitelist|białą]] listę",
+ "titleblacklist": "# Lista zabronionych nazw. Strony i konta o nazwach odpowiadających poniższym wyrażeniom regularnym nie będą mogły zostać utworzone.\n# Użyj znaku „#”, aby utworzyć komentarz.\n# Domyślnie we wpisach ma znaczenie wielkość znaków.",
+ "titlewhitelist": "# To jest lista dopuszczalnych nazw artykułów. Użyj znaku „#”, aby utworzyć komentarz.\n# Domyślnie we wpisach ma znaczenie wielkość znaków.",
+ "titleblacklist-forbidden-edit": "Utworzenie strony o nazwie „$2” nie jest możliwe. \nNazwa ta pasuje do wpisu z czarnej listy: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Zmiana nazwy z „$2” na „$3” nie jest możliwa, ponieważ nie można utworzyć strony o nazwie „$3”.\nNazwa ta pasuje do wpisu z czarnej listy: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Utworzenie pliku o nazwie „$2” nie jest możliwe. \nNazwa ta pasuje do wpisu z czarnej listy: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Utworzenie konta o nazwie „$2” nie jest możliwe.\nNazwa ta pasuje do wpisu z czarnej listy: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Następująca linia|Następujące linie}} na liście zabronionych tytułów stron {{PLURAL:$1|jest nieprawidłowa|są nieprawidłowe}}. Popraw {{PLURAL:$1|ją|je}} przed zapisaniem:",
+ "titleblacklist-override": "Ignoruj czarną listę",
+ "titleblacklist-override-help": "Użytkownicy z odpowiednimi uprawnieniami mogą to ustawić, aby ignorować sprawdzanie z użyciem czarnej listy tytułów.",
+ "titleblacklist-warning": "<strong>Uwaga: tę stronę mogą edytować tylko administratorzy i użytkownicy z uprawnieniem <code>tboverride</code>, ponieważ znajduje się ona na czarnej liście, w punkcie:</strong><br /><code>$1</code>",
+ "right-tboverride": "Ignorowanie czarnej listy tytułów lub nazw użytkowników",
+ "right-tboverride-account": "Ignorowanie czarnej listy użytkowników",
+ "right-titleblacklistlog": "Podgląd rejestru czarnej listy tytułów",
+ "apihelp-titleblacklist-description": "Sprawdź tytuł artykułu, pliku lub nazwy użytkownika pod kątem obecności na czarnej liście tytułów.",
+ "apihelp-titleblacklist-param-title": "Ciąg znaków, który sprawdzić pod kątem obecności na czarnej liście tytułów.",
+ "apihelp-titleblacklist-param-action": "Akcja do sprawdzenia.",
+ "apihelp-titleblacklist-param-nooverride": "Nie próbuj omijać czarnej listy tytułów.",
+ "apihelp-titleblacklist-example-1": "Sprawdź czy [[Foo]] jest na czarnej liście",
+ "apihelp-titleblacklist-example-2": "Sprawdź czy [[Bar]] jest na czarnej liście dla edytowania",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Ignoruj sprawdzenia dotyczące upodobniania (wymaga jednego z tych uprawnień: <code>tboverride</code>, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/pms.json b/www/wiki/extensions/TitleBlacklist/i18n/pms.json
new file mode 100644
index 00000000..65e2aebe
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/pms.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borichèt",
+ "Dragonòt"
+ ]
+ },
+ "titleblacklist-desc": "A përmëtt a j'aministrador ëd vieté la creassion ëd pàgine e ëd cont për na [[MediaWiki:Titleblacklist|blacklist]] e na [[MediaWiki:Titlewhitelist|whitelist]]",
+ "titleblacklist": "# Costa sì a l'é na blacklist dij tìtoj. Tìtoj e stranòm che a corispondo a n'espression regolar sì a peulo pa esse creà.\n# Dòvra \"$\" për coment.\n# Cost sì a l'é pa case sensitive për default",
+ "titlewhitelist": "# Costa a l'é na whitelist ëd tìtoj. Dòvra \"$\" për coment.\n# Sòn sì a l'é pa case sensitive për default",
+ "titleblacklist-forbidden-edit": "Ël tìtol \"$2\" a l'é stàit vietà.\nA corispond a costa intrada dla blacklist: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" a peul pa esse tramudà a \"$3\", përchè ël tìtol \"$3\" a l'é stàit vietà.\nA corispond a costa intrada dla blacklist: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Ël nòm dël file \"$2\" a l'é stàit vietà.\nA corispond a costa intrada dla blacklist: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Lë stranòm \"$2\" a l'é stàit vietà.\nA corispond a costa intrada dla blacklist: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|La linia|Le linie}} sota ant la blacklist dij tìtoj {{PLURAL:$1|a l'é pa bon-a|a son pa bon-e}};\npër piasì {{PLURAL:$1|coregg-la|coregg-je}} prima ëd salvé:",
+ "titleblacklist-override": "Ignoré la lista nèira",
+ "right-tboverride": "Rampiassé la lista nèira dij tìtoj o djë stranòm d'utent",
+ "right-tboverride-account": "Ignoré la lista nèira djë stranòm d'utent"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/pnb.json b/www/wiki/extensions/TitleBlacklist/i18n/pnb.json
new file mode 100644
index 00000000..c55b9943
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/pnb.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Khalid Mahmood",
+ "Abbas dhothar"
+ ]
+ },
+ "titleblacklist-desc": "مکھیانواں نوں اجازت دیندا اے جے اوہ صفے بنن توں روکن تے ورتن کھاتے [[MediaWiki:Titleblacklist|blacklist]] تے [[MediaWiki:Titlewhitelist|whitelist]]",
+ "titleblacklist": "# ایہ اک سرخی روک لسٹ اے۔ سرناویں تے ورتن والے اکو جۓ لگن تے تے اوہ نئیں بناۓ جاسکدے.\n# کومنٹ لئی ورتو \"#\" .\n# اے کیس سینسیٹو نئیں۔",
+ "titlewhitelist": "# ایہ اک سرناواں چٹیلسٹ اے۔ \nڈیفالٹ ولوں ای ایہ کیس سینسیٹو نئیں۔",
+ "titleblacklist-forbidden-edit": "سرناواں \"$2\" بنن توں روک دتا گیا اے۔\nایہ تھلے دتی ہوئی بلیکلسٹ انٹری نال رلدا اے: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" نوں \"$3\" ول نئیں لیایا جاسکدا کیوں جے سرناواں \"$3\" بنن توں روک دتی گئی اے۔\nاے تھلے دتی گئی کالی لسٹ انٹری نال رلدی اے: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "فائل ناں \"$2\" بنن توں روک دتی گئی اے۔\nایہ تھلے دتی گئی کالی لسٹ انٹری نال رلدا اے: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "ورتن ناں \"$2\" بنن توں روک دتا گیا اے۔\nاے تھلے دتی گئی کالیلسٹ انٹری نال رلدی اے: <code>$1</code>",
+ "titleblacklist-invalid": "تھلے دتی {{PLURAL:$1|لین|لیناں }} کالیلسٹ سرناویں {{PLURAL:$1|ہے|ہیں}}چ ناں منیا جان والا؛ مہربانی کرکے بچان توں پہلے {{PLURAL:$1|it|اوناں نون}} اینوں.",
+ "titleblacklist-override": "بلیک لسٹ بُھل جاؤ",
+ "right-tboverride": "ٹاغٹل شلیکلسٹ تے لکھو۔",
+ "right-tboverride-account": "ورتن ناں بلیکلسٹ تے لکھو۔"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ps.json b/www/wiki/extensions/TitleBlacklist/i18n/ps.json
new file mode 100644
index 00000000..94e29d00
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ps.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel"
+ ]
+ },
+ "titleblacklist-override": "تورليک بابېزه گڼل",
+ "titleblacklist-warning": "<strong>گواښنه: يوازې پازوالان او نور هغه کارنان چې د <code>tboverride</code> رښته لري کولی شي چې دا مخ سم کړي، دا ځکه چې همدا مخ د لانديني بنديزليک سرليک سره ورته دی:</strong><br /><code>$1</code>"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/pt-br.json b/www/wiki/extensions/TitleBlacklist/i18n/pt-br.json
new file mode 100644
index 00000000..000c3083
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/pt-br.json
@@ -0,0 +1,38 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cainamarques",
+ "Eduardo.mps",
+ "Giro720",
+ "Luckas",
+ "555",
+ "Felipe L. Ewald"
+ ]
+ },
+ "action-titleblacklistlog": "ver os registros da lista negra de título",
+ "log-name-titleblacklist": "Título do registro da lista negra",
+ "log-description-titleblacklist": "Esses eventos rastreiam hits no título da lista negra.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|causou}} uma correspondência com a lista negra de títulos ao tentar criar a conta $3 coincidindo $4.",
+ "titleblacklist-desc": "Permite que administradores restrinjam a criação de páginas e contas de usuários a partir de uma [[MediaWiki:Titleblacklist|lista negra]] e uma [[MediaWiki:Titlewhitelist|lista de exceções]]",
+ "titleblacklist": "# Esta é uma lista negra de títulos. Títulos de páginas e nomes de usuários que sejam filtrados por uma expressão regular desta lista não poderão ser criados.\n# Utilize \"#\" para fazer comentários.\n# Esta lista não difere maiúsculas de minúsculas",
+ "titlewhitelist": "# Esta é uma lista de títulos permitidos. Utilize \"#\" para fazer comentários\n# Esta lista não difere maiúsculas de minúsculas",
+ "titleblacklist-forbidden-edit": "O título \"$2\" foi impedido de ser criado.\nEle se encaixa na seguinte entrada da lista negra: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" não pode ser movida para \"$3\", já que \"$3\" é um título impedido de ser criado.\nSe encaixa na seguinte entrada da lista-negra: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "O arquivo nomeado como \"$2\" foi impedido de ser criado.\nEle se encaixa na seguinte entrada da lista negra: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "O nome de usuário \"$2\" foi banido de ser registrado.\nO nome corresponde na seguinte entrada da lista negra: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|A seguinte linha|As seguintes linhas}} da lista negra {{PLURAL:$1|é inválida|são inválidas}}. \n{{PLURAL:$1|Corrija-a|Corrija-as}} antes de salvar:",
+ "titleblacklist-override": "Ignorar a lista negra",
+ "titleblacklist-override-help": "Usuários com privilégios suficientes podem configurar isso para ignorar as verificações da lista negra do título.",
+ "titleblacklist-warning": "<strong>Aviso: Esta página só pode ser editada por administradores e outros usuários com o direito <code>tboverride</code> porque corresponde ao seguinte título na lista negra:</strong><br /><code>$1</code>",
+ "right-tboverride": "Contornar a lista negra de títulos e nomes de usuário",
+ "right-tboverride-account": "Contornar a lista negra de nomes de usuários",
+ "right-titleblacklistlog": "Ver o registro da lista negra de títulos",
+ "apihelp-titleblacklist-description": "Valide um título de página, nome de arquivo ou nome de usuário no TitleBlacklist.",
+ "apihelp-titleblacklist-summary": "Valide um título de página, nome de arquivo ou nome de usuário no TitleBlacklist.",
+ "apihelp-titleblacklist-param-title": "A string para validar contra a lista negra.",
+ "apihelp-titleblacklist-param-action": "A ação a ser verificada.",
+ "apihelp-titleblacklist-param-nooverride": "Não tente substituir a lista negra de títulos.",
+ "apihelp-titleblacklist-example-1": "Verifique se [[Foo]] está na lista negra",
+ "apihelp-titleblacklist-example-2": "Verificar se [[Bar]] está na lista negra para edição",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Ignorar verificações de falsificação (requer um dos seguintes direitos: <code>tboverride</code>, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/pt.json b/www/wiki/extensions/TitleBlacklist/i18n/pt.json
new file mode 100644
index 00000000..64e53a12
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/pt.json
@@ -0,0 +1,38 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cainamarques",
+ "Hamilton Abreu",
+ "Malafaya",
+ "Waldir",
+ "555",
+ "Vitorvicentevalente"
+ ]
+ },
+ "action-titleblacklistlog": "ver o registo da lista negra de títulos",
+ "log-name-titleblacklist": "Registo da lista negra de títulos",
+ "log-description-titleblacklist": "Estes eventos registam as correspondências com a lista negra de títulos.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|causou}} uma correspondência com a lista negra de títulos ao tentar criar a conta $3, que correspondeu com $4.",
+ "titleblacklist-desc": "Permite que os administradores proíbam a criação de páginas e contas de utilizadores através de uma [[MediaWiki:Titleblacklist|lista negra]] e de uma [[MediaWiki:Titlewhitelist|lista de excepções]]",
+ "titleblacklist": "# Esta é uma lista negra de títulos. Os títulos de páginas e os nomes de utilizadores que sejam filtrados por uma expressão regular desta lista, não poderão ser criados.\n# Use \"#\" para comentários.\n# Por omissão, esta lista não distingue maiúsculas de minúsculas",
+ "titlewhitelist": "# Esta é uma lista branca de títulos. Use \"#\" para comentários.\n# Por omissão, esta lista não distingue maiúsculas de minúsculas",
+ "titleblacklist-forbidden-edit": "Foi bloqueada a criação do título \"$2\".\nO título corresponde à seguinte entrada da lista negra: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" não pode ser movido para \"$3\" já que foi bloqueada a criação do título \"$3\".\nO título corresponde à seguinte entrada da lista negra: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Foi bloqueada a criação de ficheiros com o nome \"$2\".\nO nome corresponde à seguinte entrada da lista negra: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Foi bloqueada a criação de utilizadores com o nome \"$2\".\nO nome corresponde à seguinte entrada da lista negra: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|A seguinte linha|As seguintes linhas}} da lista negra {{PLURAL:$1|é inválida|são inválidas}}. Por favor, {{PLURAL:$1|corrija-a|corrija-as}} antes de gravar:",
+ "titleblacklist-override": "Ignorar a lista negra",
+ "titleblacklist-override-help": "Os utilizadores com privilégios suficientes podem configurar isto para ignorar as verificações contra a lista negra de títulos.",
+ "titleblacklist-warning": "<strong>Aviso: Esta página só pode ser editada por administradores e outros utilizadores com o privilégio <code>tboverride</code>, pois o título corresponde com a seguinte entrada da lista negra de títulos:</strong><br /><code>$1</code>",
+ "right-tboverride": "Contornar a lista negra de títulos e nomes de utilizador",
+ "right-tboverride-account": "Contornar a lista negra de nomes de utilizador",
+ "right-titleblacklistlog": "Ver o registo da lista negra de títulos",
+ "apihelp-titleblacklist-description": "Validar um título de página, nome de ficheiro ou nome de utilizador contra a lista negra.",
+ "apihelp-titleblacklist-summary": "Validar um título de página, nome de ficheiro ou nome de utilizador contra a lista negra.",
+ "apihelp-titleblacklist-param-title": "O texto a validar contra a lista negra.",
+ "apihelp-titleblacklist-param-action": "A operação a verificar.",
+ "apihelp-titleblacklist-param-nooverride": "Não tentar contornar a lista negra de títulos.",
+ "apihelp-titleblacklist-example-1": "Verificar se [[Foo]] está na lista negra",
+ "apihelp-titleblacklist-example-2": "Verificar se [[Bar]] está na lista negra para edições",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Ignorar as verificações de usurpação (''spoofing''). Requer um dos seguintes direitos: <code>tboverride</code> ou <code>tboverride-account</code>."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/qqq.json b/www/wiki/extensions/TitleBlacklist/i18n/qqq.json
new file mode 100644
index 00000000..60d347dd
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/qqq.json
@@ -0,0 +1,40 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beau",
+ "Purodha",
+ "Shirayuki",
+ "The Evil IP address",
+ "Umherirrender",
+ "Yekrats",
+ "Amire80",
+ "Nemo bis"
+ ]
+ },
+ "action-titleblacklistlog": "{{doc-action|titleblacklistlog}}",
+ "log-name-titleblacklist": "Name of log that appears on [[Special:Log]].",
+ "log-description-titleblacklist": "Description of title blacklist log",
+ "logentry-titleblacklist-hit-username": "Log entry that is created when someone tries to create an account with a name that is blacklisted on the title blacklist.\n\n{{logentry}}\nAdditional parameters:\n* $4 - the blacklist entry",
+ "titleblacklist-desc": "{{desc|name=Title Blacklist|url=https://www.mediawiki.org/wiki/Extension:TitleBlacklist}}",
+ "titleblacklist": "The [[mw:Extension:TitleBlacklist|extension Title Blacklist]] gives the ability to block certain unallowed words appearing in the title through regular expressions.\nThis will be the first explanatory paragraph of the blacklist. (Characters after the #-signs are ignored.)\nTo see an example list in context, see: https://www.mediawiki.org/wiki/MediaWiki:Titleblacklist",
+ "titlewhitelist": "The whitelist is a feature of the [[mw:Extension:TitleBlacklist|extension Title Blacklist]], which gives the ability to block certain words (or explicitly allow them) appearing in the title through regular expressions.\nThis will be the explanatory paragraph of the blacklist. (Characters after the #-signs are ignored.)\nTo see an example list in context, see: https://www.mediawiki.org/wiki/MediaWiki:Titlewhitelist",
+ "titleblacklist-forbidden-edit": "\"title\" stands for \"page title\". Parameters:\n* $1 - blacklist entry\n* $2 - page title\n{{Related|Titleblacklist-forbidden}}",
+ "titleblacklist-forbidden-move": "\"title\" stands for \"page title\". Parameters:\n* $1 - blacklist entry\n* $2 - old page title\n* $3 - new page title\n{{Related|Titleblacklist-forbidden}}",
+ "titleblacklist-forbidden-upload": "Unused at this time. Parameters:\n* $1 - blacklist entry\n* $2 - filename\n{{Related|Titleblacklist-forbidden}}",
+ "titleblacklist-forbidden-new-account": "Parameters:\n* $1 - blacklist entry\n* $2 - username\n{{Related|Titleblacklist-forbidden}}",
+ "titleblacklist-invalid": "Used as error message.\n\nThis message is followed by a list of the invalid lines.\n\nParameters:\n* $1 - number of invalid lines in the title blacklist",
+ "titleblacklist-override": "Check box label on \"Create account\" form if the user has the user right ''tboverride-account''. If checked, the [[MediaWiki:Titleblacklist]] is ignored during account creation.",
+ "titleblacklist-override-help": "API help message giving more information about {{msg-mw|titleblacklist-override}}.",
+ "titleblacklist-warning": "Displayed when a user is editing a page that only administrators (or custom user groups with the tboverride right) can edit due to the title blacklist. Parameters:\n* $1 - blacklist entry",
+ "right-tboverride": "{{doc-right|tboverride}}",
+ "right-tboverride-account": "{{doc-right|tboverride-account}}",
+ "right-titleblacklistlog": "{{doc-right|titleblacklistlog}}",
+ "apihelp-titleblacklist-description": "{{doc-apihelp-description|titleblacklist}}",
+ "apihelp-titleblacklist-summary": "{{doc-apihelp-summary|titleblacklist}}",
+ "apihelp-titleblacklist-param-title": "{{doc-apihelp-param|titleblacklist|title}}",
+ "apihelp-titleblacklist-param-action": "{{doc-apihelp-param|titleblacklist|action}}",
+ "apihelp-titleblacklist-param-nooverride": "{{doc-apihelp-param|titleblacklist|nooverride}}",
+ "apihelp-titleblacklist-example-1": "{{doc-apihelp-example|titleblacklist}}",
+ "apihelp-titleblacklist-example-2": "Replace \"Bar\" with any example string suitable for your language, for instance the translation of \"Example\".\n----\n{{doc-apihelp-example|titleblacklist}}",
+ "apihelp-createaccount-param-ignoretitleblacklist": "{{doc-apihelp-param|createaccount|ignoretitleblacklist}}"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/qu.json b/www/wiki/extensions/TitleBlacklist/i18n/qu.json
new file mode 100644
index 00000000..edd338e9
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/qu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna"
+ ]
+ },
+ "titleblacklist-override": "Yana sutisuyuta ama qhawaychu"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ro.json b/www/wiki/extensions/TitleBlacklist/i18n/ro.json
new file mode 100644
index 00000000..21db9b76
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ro.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "AdiJapan",
+ "Minisarm",
+ "Stelistcristi"
+ ]
+ },
+ "titleblacklist-desc": "Permite administratorilor să interzică crearea de pagini și de conturi de utilizator, folosind o [[MediaWiki:Titleblacklist|listă neagră]] și o [[MediaWiki:Titlewhitelist|listă albă]]",
+ "titleblacklist": "# Aceasta este lista neagră pentru titluri. Nu pot fi create titluri și conturi care corespund la una din expresiile regulate de aici.\n# Folosiți „#” pentru comentarii.\n# În mod implicit nu contează majusculele.",
+ "titlewhitelist": "# Aceasta este lista albă pentru titluri. Folosiți „#” pentru comentarii. \n# În mod implicit nu contează majusculele.",
+ "titleblacklist-forbidden-edit": "Este interzisă crearea titlului „$2”.\nInterdicția a fost declanșată de următorul element din lista neagră: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Titlul „$2” nu se poate redenumi în „$3” pentru că acesta din urmă este interzis.\nInterdicția a fost declanșată de următorul element din lista neagră: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Numele de fișier „$2” este interzis.\nInterdicția a fost declanșată de următorul element din lista neagră: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Nu se poate crea un cont de utilizator cu numele „$2”.\nInterdicția a fost declanșată de următorul element din lista neagră: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Următoarea linie|Următoarele linii}} din lista neagră a titlurilor {{PLURAL:$1|este invalidă|sînt invalide}};\ncorectați{{PLURAL:$1|-o|-le}} înainte de a salva pagina.",
+ "titleblacklist-override": "Ignoră lista neagră",
+ "right-tboverride": "Ignoră lista neagră cu titluri sau nume de utilizator",
+ "right-tboverride-account": "Suprascrie lista neagră a numelor de utilizator"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/roa-tara.json b/www/wiki/extensions/TitleBlacklist/i18n/roa-tara.json
new file mode 100644
index 00000000..b21f7287
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/roa-tara.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "action-titleblacklistlog": "'ndruche 'u titole de l'archivije de l'elenghe gnure",
+ "log-name-titleblacklist": "Archivije de le titole bloccate",
+ "log-description-titleblacklist": "Ste evende tracciane le trasute jndr'à l'elenghe gnure de le rummate.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|ave causate}} l'attivazzione d'a lista gnore de le titole pruvanne a ccrejà 'u cunde $3 ca corrisponne a $4.",
+ "titleblacklist-desc": "Permette a l'amministrature de vietà ccrejaziune de le pàggene e le cunde utinde pe 'na [[MediaWiki:Titleblacklist|lista gnore]] e [[MediaWiki:Titlewhitelist|lista vianghe]]",
+ "titleblacklist": "# Stu titele jè in lista gnore. Le titele e l'utinde ca se ponne comborndà cu le espressiune regolare aqquà non ge ponne essere ccrejate.\n# Ause \"#\" pe le commende.\n# Quiste jè sensibbele a le maiuscole e le minuscole de partenze",
+ "titlewhitelist": "# Stu titele jè in lista vianghe.\n# Ause \"#\" pe le commende.\n# Quiste jè sensibbele a le maiuscole e le minuscole de partenze",
+ "titleblacklist-forbidden-edit": "'U titele \"$2\" ha state mise fore da 'a ccrejazione.<br />\nJidde se combronde cu le seguende vosce d'a lista gnore: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" non ge pò essere sustate sus a \"$3\", purcé 'u titele \"$3\" ha state escluse da 'a ccreiazione.<br />\nJidde se combronde cu le seguende vosce d'a lista gnore: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "'U nome d'u file \"$2\" ha state escluse da 'a ccreiazione.<br />\nJidde se combronde cu le vosce d'a lista gnore: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "'U nome de l'utende \"$2\" ha state escluse da 'a ccreiazione.<br />\nJidde se combronde cu le vosce d'a lista gnore: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|'A seguenda linèe|Le seguende linèe}} jndr'à lista gnore de le titele {{PLURAL:$1|jè|sonde}} invalide;\npe piacere corregge {{PLURAL:$1|jedde|lore}} apprime de reggistrà:",
+ "titleblacklist-override": "No scè penzanne 'a lista gnore",
+ "titleblacklist-override-help": "Le utinde cu le privilegge insufficiende ponne 'mbostà st'opzione pe cacà le condrolle de lista gnore sus a 'u titole.",
+ "right-tboverride": "Sovrascrive 'a lista gnore de le titole o de le utinde",
+ "right-tboverride-account": "Sovrasrive 'a lista gnore de le utinde",
+ "right-titleblacklistlog": "'Ndruche l'archivije de le titole jndr'à l'elenghe gnure",
+ "apihelp-titleblacklist-param-action": "L'azione ha state verificate.",
+ "apihelp-titleblacklist-param-nooverride": "No pruvà a sovrascrivere l'elenghe de le titole da scettà."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ru.json b/www/wiki/extensions/TitleBlacklist/i18n/ru.json
new file mode 100644
index 00000000..ec03f4f0
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ru.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlexSm",
+ "Ferrer",
+ "Ignatus",
+ "KPu3uC B Poccuu",
+ "Kaganer",
+ "Александр Сигачёв",
+ "Okras",
+ "NBS",
+ "Mouse21"
+ ]
+ },
+ "action-titleblacklistlog": "просмотр журнала запрещённыx названий",
+ "log-name-titleblacklist": "Журнал списка запрещённыx названий",
+ "log-description-titleblacklist": "Это журнал, отслеживающий срабатывания списка запрещённых названий.",
+ "logentry-titleblacklist-hit-username": "$1 вызвал{{GENDER:$2||а}} срабатывание «чёрного списка» при попытке создания учётной записи $3, соответствиующее записи $4.",
+ "titleblacklist-desc": "Позволяет администраторам запретить создание страниц и учётных записей с помощью [[MediaWiki:Titleblacklist|чёрного]] и [[MediaWiki:Titlewhitelist|белого]] списков.",
+ "titleblacklist": "# Это список запрещённыx названий. Страницы и учётные записи, соответствующие указанным регулярным выражениям, не могут быть созданы.\n# Используйте «#» для комментариев.\n# По умолчанию нет чувствительности к регистру.",
+ "titlewhitelist": "# Это «белый список» названий. Для комментариев используйте «#».\n# По умолчанию нет чувствительности к регистру символов.",
+ "titleblacklist-forbidden-edit": "\n<div align=\"center\" style=\"border: 1px solid #f88; padding: 0.5em; margin-bottom: 3px; font-size: 95%; width: auto;\">\n'''Страница с названием \"$2\" не может быть создана''' <br />\nОна попадает под следующую запись списка запрещенных названий: '''''$1'''''\n</div>",
+ "titleblacklist-forbidden-move": "Невозможно переименовать страницу «$2» в «$3», так как новое название запрещено следующей записью в чёрном списке: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Файл с названием «$2» был запрещён к созданию. Он попадает под следующую запись списка запрещенных названий: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Запрещено использовать имя участника «$2».\nИмя соответствует следующей записи из чёрного списка: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|1=Следующая строка|Следующие строки}} в списке запрещённых названий {{PLURAL:$1|1=не является правильным регулярным выражением|не являются правильными регулярными выражениями}}. Пожалуйста, исправьте {{PLURAL:$1|1=её|их}} перед сохранением:",
+ "titleblacklist-override": "Игнорировать чёрный список",
+ "titleblacklist-override-help": "Участники с достаточными правами могут установить его для игнорирования проверок список запрещённыx названий.",
+ "titleblacklist-warning": "<strong>Примечание:</strong> Эту страницу могут редактировать только администраторы и другие участники с правами <code>tboverride</code>, потому что, похоже, она совпадает со следующей записью из «чёрного списка» названий:<br /><code>$1</code>",
+ "right-tboverride": "игнорирование чёрного списка имён страниц или участников",
+ "right-tboverride-account": "игнорирование чёрного списка имён участников",
+ "right-titleblacklistlog": "просмотр журнала запрещённыx названий",
+ "apihelp-titleblacklist-description": "Подтвердите заголовок страницы, имя файла или имя пользователя в списке TitleBlacklist.",
+ "apihelp-titleblacklist-summary": "Подтвердите заголовок страницы, имя файла или имя пользователя в списке TitleBlacklist.",
+ "apihelp-titleblacklist-param-title": "Строка для проверки против черного списка.",
+ "apihelp-titleblacklist-param-action": "Действие, которое должно быть проверено.",
+ "apihelp-titleblacklist-param-nooverride": "Не пытайтесь переопределить список запрещённыx названий.",
+ "apihelp-titleblacklist-example-1": "Проверить, занесена ли статья [[Foo]] в чёрный список",
+ "apihelp-titleblacklist-example-2": "Проверить, занесена ли статья [[Bar]] в чёрный список для редактирования",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Игнорировать проверки подмены (требует одного из следующих прав: <code>tboverride</code>, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/rue.json b/www/wiki/extensions/TitleBlacklist/i18n/rue.json
new file mode 100644
index 00000000..6182a006
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/rue.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazeb"
+ ]
+ },
+ "titleblacklist-desc": "Уможнює адміністратовам заборонити створїня сторінок і хосновательскых конт на базї [[MediaWiki:Titleblacklist|чорной листины назв]] і [[MediaWiki:Titlewhitelist|білой листины назв]]",
+ "titleblacklist": "# Тото є чорна листина назв. Сторінкы і хосновательскы конта, котрых назва одповідать дакотрому реґуларному выразу, не буде мочі створити.\n# Коментарї зачінають знаком „#“.\n# На великости букв не залежыть.",
+ "titlewhitelist": "# Тото є біла листина назв сторінок. Рядкы коментарїв зачінають знаком „#“.\n# На великости букв не залежыть.",
+ "titleblacklist-forbidden-edit": "Не є доволено створити сторінку з назвов „$2“. Одповідать наступному запису на чорній листинї: <code>$1</code>",
+ "titleblacklist-forbidden-move": "„$2“ не годен переменовати на „$3“, бо назву „$3“ є заборонене створёвати. Одповідать наступному запису на чорній листинї: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Не є доволено створити файл з назвов „$2“. Одповідать наступному запису на чорній листинї: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Не є доволено реґістровати імя хоснователя „$2“. Одповідать наступному запису на чорній листинї: <code>$1</code>",
+ "titleblacklist-invalid": "На чорній листинї назв {{PLURAL:$1|є наступный рядок неправилный реґуларный выраз|суть наступны рядкы неправилны реґуларны выразы|є наступный рядок неправилный реґуларный выраз}} і є треба {{PLURAL:$1|го|їх|їх}} перед уложінём сторінкы справити :",
+ "titleblacklist-override": "Іґноровати чорный список",
+ "right-tboverride": "іґнорованя чорной листины назв сторінок",
+ "right-tboverride-account": "Переконаня чорной листины назв сторінок"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/sa.json b/www/wiki/extensions/TitleBlacklist/i18n/sa.json
new file mode 100644
index 00000000..a8b74867
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/sa.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shubha",
+ "NehalDaveND"
+ ]
+ },
+ "titleblacklist-desc": "[[MediaWiki:Titleblacklist|blacklist]] तथा [[MediaWiki:Titlewhitelist|whitelist]] इत्येतयोः प्रबन्धकेन नूतनपृष्ठस्य सदस्यपृष्ठस्य सर्जनं च अवरुद्धम् अस्ति ।",
+ "titleblacklist": "# इदं दुरुपयुक्तशीर्षकम् । शिर्षकाणि सदस्याः ये अत्र नियताभिव्यक्तिं प्राप्नुवन्ति ते स्रष्टुं नार्हन्ति ।\n# अभिप्रायाय \"#\" उपयुज्यताम् ।\n# पूर्वनिर्देशानुसारम् इदम् अक्षरभेदसूक्ष्मरहितम् ।",
+ "titlewhitelist": "# इदं शीर्षकश्वेतावली । अभिप्रायाय \"#\" उपयुज्यताम् ।\n# पूर्वनिर्देशानुसारम् इदम् अक्षरभेदसूक्ष्मरहितम् ।",
+ "titleblacklist-forbidden-edit": "नामपद \"$2\" शिरोनाम निर्माणाय अवरुद्धं वर्तते ।\nइदं प्रवेशदुरुपयुक्तावल्या सह युज्यते: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" इत्येतत् नाम \"$3\" प्रति परिवर्तयितुम् अशक्यं, यतः \"$3\" इत्यस्य निर्माणम् अवरुद्धं वर्तते ।\nइदम् अधोनिर्दिष्टया प्रवेशदुरुपयुक्तावल्या सह युज्यते: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "सञ्चिकायाः \"$2\" शिरोनाम निर्माणाय अवरुद्धं वर्तते ।\nइदम् अधोनिर्दिष्टया प्रवेशदुरुपयुक्तावल्या सह युज्यते: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "सदस्यनाम \"$2\" निर्माणाय अवरुद्धं वर्तते ।\nइदं प्रवेशदुरुपयुक्तावल्या सह युज्यते: <code>$1</code>",
+ "titleblacklist-invalid": "दुरुपयुक्तशीर्षकावल्यां विद्यमानाः अधोनिर्दिष्टाः {{PLURAL:$1|पंक्तिः|पंङ्क्तयः}} अमान्याः {{PLURAL:$1|अस्ति|सन्ति}};\nकृपया रक्षणात् पूर्वम् {{PLURAL:$1|एताम्|एताः}} परिष्क्रियन्ताम् :",
+ "titleblacklist-override": "दुर्वृत्तावली उपेक्ष्यताम्",
+ "right-tboverride": "शिरोनामदुर्वृत्तावलीम् अथवा योजकनामदुर्वृत्तावलीम् अतिव्रजतु",
+ "right-tboverride-account": "दुर्वृत्तयोजकनाम अतिव्रजतु"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/sah.json b/www/wiki/extensions/TitleBlacklist/i18n/sah.json
new file mode 100644
index 00000000..35e075d0
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/sah.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "HalanTul"
+ ]
+ },
+ "titleblacklist-desc": "[[MediaWiki:Titleblacklist|Хара]] уонна [[MediaWiki:Titlewhitelist|Үрүҥ испииһэктэри]] туһанан сирэйдэри айары уонна саҥа дьону бэлиэтиири боборго аналлаах",
+ "titleblacklist": "# Бу бобуллубут ааттар \"хара\" испииһэктэрэ. Испииһэккэ киирбит ханнык баҕарар ыстатыйа оҥоһуллар кыаҕа суох.\n# Быһаарыыны суруйарга \"#\" бэлиэни туһан.\n# Эбии этиллибэтэҕинэ бэлиэ улахана-кырата оруолу оонньообот",
+ "titlewhitelist": "# Бу ааттар «үрүҥ испииһэктэрэ». Ырытарга «#» бэлиэни туһаныҥ.\n# Эбии этиллибэтэҕинэ бэлиэ улахана-кырата оруолу оонньообот",
+ "titleblacklist-forbidden-edit": "<div align=\"center\" style=\"border: 1px solid #f88; padding: 0.5em; margin-bottom: 3px; font-size: 95%; width: auto;\">\n'''Маннык ааттаах сирэй \"$2\" кыайан оҥоһуллубат''' <br />\nБобуллубут ааттар испииһэктэригэр киирэр: '''''$1'''''\n</div>",
+ "titleblacklist-forbidden-move": "<span class=\"error\">\n'''Маннык ааттаах сирэй \"$2\" маннык ааттанар \"$3\" кыаҕа суох, тоҕо диэтэххэ \"$3\" оҥоһуллара бобуллубут''' <br />\nБобуллубут ааттар испииһэктэригэр киирэр: '''''$1'''''\n</span>",
+ "titleblacklist-forbidden-upload": "'''Маннык ааттаах билэ \"$2\" кыстанар (киллэриллэр) кыаҕа суох''' <br />\nБобуллубут ааттар испииһэктэригэр киирэр: '''''$1'''''",
+ "titleblacklist-forbidden-new-account": "«$2» ааты туттар сатаммат. Аат хара тиһик бу суругар сөп түбэһэр: $1",
+ "titleblacklist-invalid": "Бобуллубут ааттар тиһиктэрин бу {{PLURAL:$1|строката|строкаалара}} {{PLURAL:$1|сыыһалаах|сыыһалаахтар}}. Бука диэн ону көннөр:",
+ "titleblacklist-override": "Хара тиһиги көрүмэ",
+ "right-tboverride": "Сирэйдэр ааттарын \"хара тиһигин\" туттума",
+ "right-tboverride-account": "кыттааччылар ааттарын \"хара тиһигин\" туттума"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/scn.json b/www/wiki/extensions/TitleBlacklist/i18n/scn.json
new file mode 100644
index 00000000..d5e3e78c
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/scn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pippinu",
+ "Sarvaturi"
+ ]
+ },
+ "titleblacklist-forbidden-edit": "La criazzioni di pàggini cûn tìtulu comu «$2» fu sbannuta.\nLu tìtulu currispunni a sta vuci dâ lista nìura: <code>$1</code>",
+ "titleblacklist-forbidden-move": "«$2» nun si pò spustari nta «$3», pirchì la criazzioni di tìtula comu «$3» fu sbannuta.\nStu tìtulu currispunni a sta vuci dâ lista nìura: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "La criazzioni di nomi d'utenti comu «$2» fu sbannuta.\nLu nomu currispunni a sta vuci dâ lista nìura: <code>$1</code>"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/sh.json b/www/wiki/extensions/TitleBlacklist/i18n/sh.json
new file mode 100644
index 00000000..1e259db6
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/sh.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kolega2357"
+ ]
+ },
+ "right-tboverride": "Zaobilaženje spiska zabranjenih naslova",
+ "right-tboverride-account": "Zaobilaženje spiska zabranjenih korisničkih imena"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/si.json b/www/wiki/extensions/TitleBlacklist/i18n/si.json
new file mode 100644
index 00000000..4ae791ba
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/si.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Budhajeewa",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "titleblacklist-desc": "[[MediaWiki:Titleblacklist|කළුලයිස්තුව]]කට හා [[MediaWiki:Titlewhitelist|සුදු ලයිස්තුව]]කට අනුව පිටු හා පරිශීලක නිමැවුම් වැලැක්වුමට පරිපාලකයන්ට ඉඩ දෙයි.",
+ "titleblacklist": "# This is a title blacklist. Titles and users that match a regular expression here cannot be created.\n# Use \"#\" for comments.\n# This is case insensitive by default",
+ "titlewhitelist": "# This is a title whitelist. Use \"#\" for comments. \n# This is case insensitive by default",
+ "titleblacklist-forbidden-edit": "\"$2\" මාතෘකාව නිර්මාණය වලක්වා ඇත.\nඑය පහත සඳහන් කළුලයිස්තු අංගයට ගැළපේ: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$3\" යන්න නිර්මාණය වලකා ඇති නිසා \"$2\" යන්න \"$3\" වෙත ගෙනයා නොහැක.\nඑය පහත කළුලයිස්තු අංගයට ගැළපේ: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "\"$2\" ගොනු නාමය නිර්මාණය වලක්වා ඇත.\nඑය පහත සඳහන් කළුලයිස්තු අංගයට ගැළපේ: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "\"$2\" පරිශීලක නාමය නිර්මාණය වලක්වා ඇත.\nඑය පහත සඳහන් කළුලයිස්තු අංගයට ගැළපේ: <code>$1</code>",
+ "titleblacklist-invalid": "මාතෘකා කළුලයිස්තුවේ පහත {{PLURAL:$1|පේලිය|පේලි}} වැරදිය;\nසුරැකුමට පෙර ඒවා නිවැරදි කරන්න:",
+ "titleblacklist-override": "කළුලයිස්තුව නොසලකා හරින්න",
+ "right-tboverride": "මාතෘකා හෝ පරිශීලක නාම කළුලයිස්තුව ඉක්මවා යන්න",
+ "right-tboverride-account": "පරිශීලක නාම කළුලයිස්තුව ඉක්මවායන්න"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/sk.json b/www/wiki/extensions/TitleBlacklist/i18n/sk.json
new file mode 100644
index 00000000..410e178b
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/sk.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Helix84"
+ ]
+ },
+ "titleblacklist-desc": "Umožňuje zakázať tvorbu stránok a používateľských účtov s určenými názvami na základe [[MediaWiki:Titleblacklist|čiernej listiny názvov]] a [[MediaWiki:Titlewhitelist|bielej listiny názvov]]",
+ "titleblacklist": "# Toto je čierna listina názvov stránok. Názvy stránok a účtov, ktoré zodpovedajú tu uvedenému regulárnemu výrazu nebude možné vytvoriť.\n# Komentáre začínajú znakom „#“.\n# Štandardne nezáleží na veľkosti písmen",
+ "titlewhitelist": "# Toto je biela listina názvov stránok. Riadky komentárov začínajú znakom „#“\n# Štandardne nezáleží na veľkosti písmen",
+ "titleblacklist-forbidden-edit": "Vytvorenie stránky z názovom „$2“ bolo zakázané. Zodpovedá tejto položke čiernej listiny: <code>$1</code>",
+ "titleblacklist-forbidden-move": "„$2“ nie je možné presunúť na „$3“, pretože vytvorenie stránky z názovom „$3“ bolo zakázané. Zodpovedá tejto položke čiernej listiny: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Bolo zakázané vytvorenie súboru s názvom „$2“. Zodpovedá tejto položke čiernej listiny: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Bolo zakázané vytvorenie používateľského mena „$2”.\nZodpovedá nasledovnej položke čiernej listiny: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Nasledovný riadok|Nasledovné riadky}} čiernej listiny názvov stránok {{PLURAL:$1|je neplatný|sú neplatné}} a je potrebné {{PLURAL:$1|ho|ich}} opraviť pred uložením stránky:",
+ "titleblacklist-override": "Ignorovať čiernu listinu",
+ "right-tboverride": "Prekonať čiernu listinu názvov",
+ "right-tboverride-account": "Prekonať čiernu listinu používateľských mien"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/sl.json b/www/wiki/extensions/TitleBlacklist/i18n/sl.json
new file mode 100644
index 00000000..cda927b0
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/sl.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dbc334"
+ ]
+ },
+ "titleblacklist-desc": "Omogoča administratorjem preprečiti ustvarjanje strani in uporabniških računov glede na [[MediaWiki:Titleblacklist|črni seznam]] in [[MediaWiki:Titlewhitelist|beli seznam]]",
+ "titleblacklist": "# To je črni seznam naslovov. Naslovov in uporabnikov, ki ustrezajo regularnim izrazom tukaj, ni mogoče ustvariti.\n# Uporabite »#« za pripombe. \n# Po privzetem seznam ni občutljiv na velikost črk",
+ "titlewhitelist": "# To je beli seznam naslovov. Uporabite »#« za pripombe. \n# Po privzetem seznam ni občutljiv na velikost črk",
+ "titleblacklist-forbidden-edit": "Naslov »$2« je bil preprečen pred ustvarjanjem.\nUstreza naslednjemu vnosu na črnem seznamu: <code>$1</code>",
+ "titleblacklist-forbidden-move": "»$2« ni mogoče prestaviti na »$3«, ker je bil naslov »$3« preprečen pred ustvarjanjem.\nUstreza naslednjemu vnosu na črnem seznamu: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Ime datoteke »$2« je bilo preprečeno pred ustvarjanjem.\nUstreza naslednjemu vnosu na črnem seznamu: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Uporabniško ime »$2« je bilo preprečeno pred ustvarjanjem.\nUstreza naslednjemu vnosu na črnem seznamu: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Naslednja vrstica|Naslednji vrstici|Naslednje vrstice}} v črnem seznamu naslovov {{PLURAL:$1|je neveljavna|sta neveljavni|so neveljavne}};\nprosimo, popravite {{PLURAL:$1|jo|ju|jih}} pred shranjevanjem:",
+ "titleblacklist-override": "Prezri črni seznam",
+ "right-tboverride": "Prepisovanje črnega seznama naslovov ali uporabniških imen",
+ "right-tboverride-account": "Prepis črnega seznama uporabniških imen"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/sq.json b/www/wiki/extensions/TitleBlacklist/i18n/sq.json
new file mode 100644
index 00000000..e990d452
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/sq.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Olsi"
+ ]
+ },
+ "titleblacklist-desc": "Lejon administruesit të ndalojnë krijimin e faqeve dhe llogarive të përdoruesve për një [[MediaWiki:Titleblacklist|listë të zezë]] dhe [[MediaWiki:Titlewhitelist|listë të bardhë]]",
+ "titleblacklist": "# Ky është një titull i listës së zezë. Titujt dhe përdoruesit që përputhin një shprehje të rregullt këtu nuk mund të krijohen.\n# Përdorni \"#\" për komente.\n# Ky nuk është një rast i ndjeshëm",
+ "titlewhitelist": "# Ky është në titull i listës së bardhë. Përdorni \"#\" për komente.\n# Ky nuk është një rast i ndjeshëm",
+ "titleblacklist-forbidden-edit": "Titulli \"$2\"është ndaluar nga krijimi.\nAi përputhet me hyrjen e mëposhtem të listës së zezë: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" nuk mund të zhvendoset tek \"$3\", sepse titulli \"$3\" është ndaluar nga krijimi.\nAi përputhet me hyrjen e mëposhtme të listës së zezë: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Emri i skedës \"$2\"është ndaluar nga krijimi.\nAi përputhet me hyrjen e mëposhtme të listës së zezë: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Emri i përdoruesit \"$2\"është ndaluar nga krijimi.\nAi përputhet me hyrjen e mëposhtme të listës së zezë: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Rreshti i mëposhtëm|Rreshtat e mëposhtëm}} në titullin e listës së zezë {{PLURAL:$1|është i pavlefshëm|janë të pavlefshëm}};\nju lutemi {{PLURAL:$1|korrigjojeni|korrigjojini}} përpara ruajtjes:",
+ "titleblacklist-override": "Shpërfillni listën e zezë",
+ "right-tboverride": "Refuzoni titullin e listës së zezë",
+ "right-tboverride-account": "Refuzoni emrin e përdoruesit të listës së zezë"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/sr-ec.json b/www/wiki/extensions/TitleBlacklist/i18n/sr-ec.json
new file mode 100644
index 00000000..d1d8d614
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/sr-ec.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Milicevic01",
+ "Millosh",
+ "Rancher",
+ "Sasa Stefanovic",
+ "Жељко Тодоровић",
+ "Михајло Анђелковић"
+ ]
+ },
+ "action-titleblacklistlog": "прегледање црног списка наслова",
+ "log-name-titleblacklist": "Дневник црног списка наслова",
+ "log-description-titleblacklist": "Овај дневник приказује поготке у црном списку наслова.",
+ "titleblacklist-desc": "Допушта забрану стварања страница с одређеним насловима: [[MediaWiki:Titleblacklist|црна листа]] и [[MediaWiki:Titlewhitelist|бела листа]].",
+ "titleblacklist": "# Ово је наслов црног списка. Наслови који садрже регуларни израз из овог списка не могу бити направљени.\n# Користи „#“ за коментаре.\n# Подразумевано је неосетљив на величину слова",
+ "titlewhitelist": "# Ово је бели списак наслова. Користи \"#\" за коментаре.\n# Подразумевано је неосетљив на величину слова",
+ "titleblacklist-forbidden-edit": "Наслов „$2“ налази се на црном списку.\nПоклапа се са следећим уносом на црном списку: <code>$1</code>",
+ "titleblacklist-forbidden-move": "„$2“ се не може преместити на „$3“, зато што се наслов „$3“ налази у црном списку.\nПоклапа се са следећим уносом на црном списку: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Назив датотеке „$2“ је на црном списку.\nПоклапа се са следећим уносом на црном списку: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Корисничко име „$2“ налази се на црном списку.\nПоклапа се са следећим уносом на црном списку: <code>$1</code>",
+ "titleblacklist-override": "Занемари црни списак",
+ "titleblacklist-warning": "<strong>Упозорење: ову страницу могу само да уређују администратори и корисници са следећим правом <code>tboverride</code>, зато што се поклапа са уносом у црном списку:</strong><br /><code>$1</code>",
+ "right-tboverride": "заобилажење црног списка наслова или корисничких имена",
+ "right-tboverride-account": "заобилажење црног списка корисничких имена",
+ "right-titleblacklistlog": "прегледање црног списка наслова"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/sr-el.json b/www/wiki/extensions/TitleBlacklist/i18n/sr-el.json
new file mode 100644
index 00000000..23ea66df
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/sr-el.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michaello",
+ "Milicevic01"
+ ]
+ },
+ "action-titleblacklistlog": "pregledanje crnog spiska naslova",
+ "log-name-titleblacklist": "Dnevnik crnog spiska naslova",
+ "log-description-titleblacklist": "Ovaj dnevnik prikazuje pogotke u crnom spisku naslova.",
+ "titleblacklist-desc": "Dopušta zabranu stvaranja strana s određenim naslovima: [[MediaWiki:Titleblacklist|crna lista]] i [[MediaWiki:Titlewhitelist|bela lista]].",
+ "titleblacklist": "# Ovo je naslov crnog spiska. Naslovi koji sadrže regularni izraz iz ovog spiska ne mogu biti napravljeni.\n# Koristi „#“ za komentare.\n# Podrazumevano je neosetljiv na veličinu slova",
+ "titlewhitelist": "# Ovo je beli spisak naslova. Koristi \"#\" za komentare.\n# Podrazumevano je neosetljiv na veličinu slova",
+ "titleblacklist-forbidden-edit": "Naslov „$2“ nalazi se na crnom spisku.\nPoklapa se sa sledećim unosom na crnom spisku: <code>$1</code>",
+ "titleblacklist-forbidden-move": "„$2“ se ne može premestiti na „$3“, zato što se naslov „$3“ nalazi u crnom spisku.\nPoklapa se sa sledećim unosom na crnom spisku: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Naziv datoteke „$2“ je na crnom spisku.\nPoklapa se sa sledećim unosom na crnom spisku: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Korisničko ime „$2“ nalazi se na crnom spisku.\nPoklapa se sa sledećim unosom na crnom spisku: <code>$1</code>",
+ "titleblacklist-override": "Zanemari crni spisak",
+ "titleblacklist-warning": "<strong>Upozorenje: ovu stranicu mogu samo da uređuju administratori i korisnici sa sledećim pravom <code>tboverride</code>, zato što se poklapa sa unosom u crnom spisku:</strong><br /><code>$1</code>",
+ "right-tboverride": "zaobilaženje crnog spiska naslova ili korisničkih imena",
+ "right-tboverride-account": "zaobilaženje crnog spiska korisničkih imena",
+ "right-titleblacklistlog": "pregledanje crnog spiska naslova"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/stq.json b/www/wiki/extensions/TitleBlacklist/i18n/stq.json
new file mode 100644
index 00000000..ee665f17
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/stq.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pyt"
+ ]
+ },
+ "titleblacklist-desc": "Moaket dät Administratore muugelk, dät Moakjen fon nit wonskede Sieden- un Benutsernoomen tou ferhinnerjen: [[MediaWiki:Titleblacklist]] un [[MediaWiki:Titlewhitelist]]",
+ "titleblacklist": "# Dit is ne Swotte Lieste.\n# Älke Siede- un Benutsernoome, ap dän do foulgjende reguläre Uutdrukke touträffe, kon nit moaked wäide.\n# Text bääte ne Ruute „#“ wäd as Kommentoar betrachted.\n# Standoardmäitich wäd nit twiske Groot- un Littikskrieuwenge unnerskat.",
+ "titlewhitelist": "# Dit is ju Uutnoamelieste fon ju Swotte Lieste fon nit wonskede Siedennoomen. Benuts „#“ foar Kommentoare",
+ "titleblacklist-forbidden-edit": "'''Ne Siede mäd dän Tittel „$2“ kon nit moaked wäide.''' <br />\nDie Tittel kollidiert mäd dissen Speerbegriep: '''''$1'''''",
+ "titleblacklist-forbidden-move": "'''Ju Siede „$2“ kon nit ätter „$3“ ferskäuwen wäide.''' <br />\nDie Tittel kollidiert mäd dissen Speerbegriep: '''''$1'''''",
+ "titleblacklist-forbidden-upload": "'''Ne Doatäi mäd dän Noome „$2“ kon nit hoochleeden wäide.''' <br />\nDie Tittel kollidiert mäd dissen Speerbegriep: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Ju Registrierenge fon dän Benutsernoome „$2“ is nit wonsked.\nJu foulgjende Iendraach uut ju Lieste fon nit wonskede Benutsernoomen fierde tou Oulienenge: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Ju foulgjende Riege|Do foulgjende Riegen}} in ju Speerlieste {{PLURAL:$1|is|sunt}} uungultich; korrigier do foar dät Spiekerjen:",
+ "right-tboverride": "Buute Kraft sätten fon ju swotte Lieste fon nit wonskede Siedennoomen"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/su.json b/www/wiki/extensions/TitleBlacklist/i18n/su.json
new file mode 100644
index 00000000..5a8801f9
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/su.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kandar"
+ ]
+ },
+ "titleblacklist-forbidden-edit": "Judul “$2” dicaram dijieun, luyu jeung éntri daptar hideung: <code>$1</code>",
+ "titleblacklist-forbidden-move": "“$2” teu bisa dipindahkeun ka “$3”, sababa judul “$3” dicaram dijieun, luyu jeung éntri daptar hideung: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Ngaran koropak “$2” dicaram dijieun, luyu jeung éntri daptar hideung: <code>$1</code>"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/sv.json b/www/wiki/extensions/TitleBlacklist/i18n/sv.json
new file mode 100644
index 00000000..56015907
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/sv.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ainali",
+ "Boivie",
+ "Lejonel",
+ "M.M.S.",
+ "Lokal Profil",
+ "WikiPhoenix"
+ ]
+ },
+ "action-titleblacklistlog": "visa svartlistningsloggen för titlar",
+ "log-name-titleblacklist": "Svartlistningslogg för titlar",
+ "log-description-titleblacklist": "Dessa händelser spårar svartlistningsträffar för titlar.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|orsakade}} en svartlistningsträff för titlar när denne försökte skapa kontot $3 som matchade $4.",
+ "titleblacklist-desc": "Låter administratörer förbjuda skapande av sidor och användarkonton genom en [[MediaWiki:Titleblacklist|svartlista]] och en [[MediaWiki:Titlewhitelist|vitlista]].",
+ "titleblacklist": "# Det här är en svartlista för titlar. Titlar och användarnamn som matchar ett reguljärt uttryck här kan inte skapas.\n# Använd \"#\" för kommentarer.\n# Detta är okänsligt för skiftläge som förval",
+ "titlewhitelist": "# Det är en lista över tillåtna sidtitlar. Använd \"#\" för att skriva kommentarer.\n# Detta är okänsligt för skiftläge som förval",
+ "titleblacklist-forbidden-edit": "Sidtiteln \"$2\" har stoppats från att skapas. Den matchar följande rad i svarta listan för sidtitlar: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Sidan \"$2\" kan inte flyttas till \"$3\", eftersom titeln \"$3\" har förbjudits att skapas. Titeln matchar följande rad i svarta listan för sidtitlar: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Filnamnet \"$2\" har stoppats från att skapas. Namnet matchar följande rad i svarta listan för sidtitlar: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Användarnamnet \"$2\" kan inte skapas.\nDet matchar följande element i svartlistan: <code>$1</code>",
+ "titleblacklist-invalid": "Följande {{PLURAL:$1|rad|rader}} i listan är {{PLURAL:$1|felaktig|felaktiga}}; {{PLURAL:$1|den|de}} måste rättas innan du kan spara:",
+ "titleblacklist-override": "Ignorera svartlistan",
+ "titleblacklist-warning": "<strong>Varning: Denna sida kan endast redigeras av administratörer och andra användare med <code>tboverride</code>-rättigheten eftersom den matchar följande post i svartlistan över titlar:</strong><br /><code>$1</code>",
+ "right-tboverride": "Åsidosätt svartlistan med titlar och användarnamn",
+ "right-tboverride-account": "Kör över svartlistan för användarnamn",
+ "right-titleblacklistlog": "Visa svartlistningslogg för titlar",
+ "apihelp-titleblacklist-description": "Validera en sidtitel, filnamn eller användarnamn mot TitleBlacklist.",
+ "apihelp-titleblacklist-summary": "Validera en sidtitel, filnamn eller användare mot TitleBlacklist.",
+ "apihelp-titleblacklist-param-title": "Strängen som ska valideras mot svartlistan.",
+ "apihelp-titleblacklist-param-action": "Åtgärden som ska kontrolleras.",
+ "apihelp-titleblacklist-param-nooverride": "Försök inte att åsidosätta svartlistan för titlar.",
+ "apihelp-titleblacklist-example-1": "Kontrollera om [[Foo]] är svartlistad",
+ "apihelp-titleblacklist-example-2": "Kontrollera om [[Bar]] är svartlistad för redigering"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ta.json b/www/wiki/extensions/TitleBlacklist/i18n/ta.json
new file mode 100644
index 00000000..991c20d5
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ta.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shanmugamp7",
+ "மதனாஹரன்"
+ ]
+ },
+ "titleblacklist-forbidden-edit": "தலைப்பு \"$2\" உருவாக்கத்திலிருந்து தடை செய்யப்பட்டுள்ளது.\nஅது பின்வரும் கறுப்புப் பட்டியல் பதிவை ஒத்துள்ளது: <code>$1</code>",
+ "titleblacklist-override": "கருப்புபட்டியலை புறக்கணிக்கவும்"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/tay.json b/www/wiki/extensions/TitleBlacklist/i18n/tay.json
new file mode 100644
index 00000000..be2f8c0f
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/tay.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hitaypayan"
+ ]
+ },
+ "titleblacklist-override": "Siy laxiy kya quw qnihut niya’ sa kkita’ sa binkgan"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/te.json b/www/wiki/extensions/TitleBlacklist/i18n/te.json
new file mode 100644
index 00000000..1807afc8
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/te.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kiranmayee",
+ "Veeven"
+ ]
+ },
+ "titleblacklist-desc": "[[MediaWiki:Titleblacklist|నిరోధపుజాబితా]] మరియు [[MediaWiki:Titlewhitelist|శ్వేతజాబితా]]ల ప్రకారం ప్రత్యేకిత శీర్షికలతో పేజీలను మరియు వాడుకరి ఖాతాలను సృష్టించడాన్ని నిర్వాహకులు నిరోధించే వీలుకల్పిస్తుంది.",
+ "titleblacklist": "# ఇది శీర్షికల నిరోధపు జాబితా. ఇక్కడ ఉన్న రెగ్యులర్ ఎక్స్‌ప్రెషన్లకి సరిపోలే శీర్షికలు గల పేజీలను మరియు వాడుకరులను సృష్టించలేరు.\n# వ్యాఖ్యానించడానికి \"#\"ని వాడండి.\n# ఇది స్వతహాగా పెద్ద మరియు చిన్న అక్షరాలను ఒకలాగానే చూస్తుంది",
+ "titlewhitelist": "# ఇది అనుమతించే శీర్షికల జాబితా. వ్యాఖ్యానించడానికి \"#\"ని వాడండి.\n# ఇది స్వతహాగా పెద్ద మరియు చిన్న అక్షరాలను ఒకలాగానే చూస్తుంది",
+ "titleblacklist-forbidden-edit": "\"$2\" అనే శీర్షిక గల పేజీలను సృష్టించడంపై నిషేధం విధించారు. ఇది నిరోధపు జాబితాలోని ఈ పద్దుకి సరిపోలింది: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\"ని \"$3\"కి తరలించలేము, ఎందుకంటే \"$3\" అన్న శీర్షికని సృష్టించడంపై నిషేధం ఉంది. ఇది నిరోధపు జాబితాలోని ఈ పద్దుకి సరిపోలుతుంది: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "\"$2\" అన్న పేరు గల ఫైలుని సృష్టించడాన్ని నిషేధించారు. ఇది నిషేధపు జాబితాలోని ఈ పద్దుకి సరిపోలుతుంది: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "\"$2\" అన్న పేరు గల వాడుకరిని సృష్టించడాన్ని నిషేధించారు.\nఇది నిషేధపు జాబితాలోని ఈ పద్దుకి సరిపోలుతుంది: <code>$1</code>",
+ "titleblacklist-invalid": "శీర్షికల నిరోధపు జాబితాలోని ఈ క్రింద పేర్కొన్న {{PLURAL:$1|లైను|లైన్లు}} తప్పుగా {{PLURAL:$1|ఉంది|ఉన్నాయి}}; భద్రపరిచేముందు {{PLURAL:$1|దాన్ని|వాటిని}} సరిదిద్దండి:",
+ "right-tboverride": "శీర్షికల నిరోధపు జాబితాని అధిగమించగలగడం"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/tg-cyrl.json b/www/wiki/extensions/TitleBlacklist/i18n/tg-cyrl.json
new file mode 100644
index 00000000..586d239a
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/tg-cyrl.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ibrahim"
+ ]
+ },
+ "titleblacklist-desc": "Имкони пешгирӣ аз эҷоди саҳифахое бо унвонҳои хосро медиҳад: [[MediaWiki:Titleblacklist]] ва [[MediaWiki:Titlewhitelist]]",
+ "titleblacklist": "# Ин як феҳристи сиёҳ барои унвонҳо аст. Унвонҳое, ки бо як regex дар ин саҳифа мутобиқаткунандаро наметавон эчод кард.\n# Барои илова кардани тавзеҳот аз \"#\" истифода кунед.",
+ "titlewhitelist": "# Ин як феҳристи сафед барои унвонҳо аст. Барои илова кардани тавзеҳот аз \"#\" истифода кунед",
+ "titleblacklist-forbidden-edit": "Эҷоди унвони \"$2\" манъ шудааст. Ин унвон бо ин дастур аз феҳристи сиёҳ мутобиқат мекунад: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" наметавонад ба \"$3\" кӯчонида шавад, зеро эҷоди унвони \"$3\" манъ шудааст. Чун бо ин дастур аз феҳристи сиёҳ мутобиқат мекунад: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Эҷоди номи \"$2\" барои парвандаҳо манъ аст. Он бо ин дастур аз фехристи сиёҳи зерин мутобиқат мекунад: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Сатри|Сатрҳои}} зерин дар феҳристи сиёҳи унвонҳо ғайримиҷоз {{PLURAL:$1|аст|ҳастанд}}; лутфан {{PLURAL:$1|он|онҳо}}ро қабл аз захира кардан, ислоҳ кунед:"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/tg-latn.json b/www/wiki/extensions/TitleBlacklist/i18n/tg-latn.json
new file mode 100644
index 00000000..69cef289
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/tg-latn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liangent"
+ ]
+ },
+ "titleblacklist-forbidden-edit": "Eçodi unvoni \"$2\" man' şudaast. In unvon bo in dastur az fehristi sijoh mutobiqat mekunad: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" nametavonad ba \"$3\" kūconida şavad, zero eçodi unvoni \"$3\" man' şudaast. Cun bo in dastur az fehristi sijoh mutobiqat mekunad: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Eçodi nomi \"$2\" baroi parvandaho man' ast. On bo in dastur az fexristi sijohi zerin mutobiqat mekunad: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Satri|Satrhoi}} zerin dar fehristi sijohi unvonho ƣajrimiçoz {{PLURAL:$1|ast|hastand}}; lutfan {{PLURAL:$1|on|onho}}ro qabl az zaxira kardan, isloh kuned:"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/th.json b/www/wiki/extensions/TitleBlacklist/i18n/th.json
new file mode 100644
index 00000000..a9c8556d
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/th.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Horus",
+ "Manop"
+ ]
+ },
+ "titleblacklist-forbidden-edit": "ชื่อบทความ \"$2\" ถูกห้ามสร้างในระบบนี้\n\nชื่อหัวข้อนี้ตรงกับบัญชีดำในส่วนของ: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "ไฟล์ชื่อ \"$2\" ถูกห้ามจากการสร้าง\nเนื่องจากตรงกับชื่อที่ปรากฎในบัญชีดำดังต่อไปนี้: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "ชื่อผู้ใช้ \"$2\" ถูกห้ามจากการสร้าง\nเนื่องจากตรงกับชื่อที่ปรากฎในบัญชีดำดังต่อไปนี้: <code>$1</code>",
+ "right-titleblacklistlog": "ดูปูมบัญชีดำชื่อเรื่อง"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/tk.json b/www/wiki/extensions/TitleBlacklist/i18n/tk.json
new file mode 100644
index 00000000..7d21974d
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/tk.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hanberke"
+ ]
+ },
+ "titleblacklist-desc": "Administratorlara sahypalaryň we ulanyjy hasaplarynyň döredilmegini gadagan etmeklerine [[MediaWiki:Titleblacklist|gara sanaw]] ve [[MediaWiki:Titlewhitelist|ak sanaw]] arkaly rugsat berýär.",
+ "titlewhitelist": "# Bu bir atlaryň ak sanawydyr. Teswirler üçin \"#\" ulanyň.\n# Bu gaýybana baş-setir harpa duýgur däldir.",
+ "titleblacklist-forbidden-edit": "\"$2\" adynyň döredilmegi gadagan edildi.\nŞu gara sanaw girişina gabat gelýär: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "\"$2\" faýl adynyň döredilmegi gadagan edildi.\nŞu gara sanaw girişina gabat gelýär: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "\"$2\" ulanyjy adynyň döredilmegi gadagan edildi.\nŞu gara sanaw girişina gabat gelýär: <code>$1</code>",
+ "titleblacklist-invalid": "Gara sanawdaky şu {{PLURAL:$1|setir|setirler}} nädogry;\nýazdyrmankaňyz düzediň:",
+ "right-tboverride": "At gara sanawyna pisint etme"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/tl.json b/www/wiki/extensions/TitleBlacklist/i18n/tl.json
new file mode 100644
index 00000000..68fd5da0
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/tl.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "AnakngAraw",
+ "Jojit fb"
+ ]
+ },
+ "titleblacklist-desc": "Nagpapahintulot sa mga tagapangasiwa na magbawal ng paglikha ng mga pahina at mga account sa bawat isang [[MediaWiki:Titleblacklist|talaan ng pinagbabawal (\"itim na talaan\")]] at [[MediaWiki:Titlewhitelist|talaan ng mga pinapayagan (\"puting talaan\")]]",
+ "titleblacklist": "# Isa itong itim na talaan ng pamagat. Hindi maaaring likhain ang mga pamagat at mga tagagamit na tumutugma sa isang pangkaraniwang pagsasaad na naririto.\n# Gamitin ang \"#\" para sa mga puna.\n# Likas na nakatakdang hindi ito maselan sa pagmamakinilya ng titik",
+ "titlewhitelist": "# Isa itong puting talaan ng pamagat. Gamitin ang \"#\" para sa mga puna.\n# Likas na nakatakdang hindi ito maselan sa pagmamakinilya ng titik",
+ "titleblacklist-forbidden-edit": "Pinagbawalan sa paglikha ang pamagat na \"$2\".\nTumutugma ito sa sumusunod na entradang/ipinasok na nasa talaan ng mga pinagbabawal (\"itim na talaan\"): <code>$1</code>",
+ "titleblacklist-forbidden-move": "Hindi maililipat ang \"$2\" patungo sa \"$3\", dahil pinagbawal ang paglikha sa pamagat na \"$3\".\nTumutugma ito sa sumusunod na ipinasok/entradang nasa talaan ng mga pinagbabawal (\"itim na talaan\"): <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Pinagbawal ang paglikha sa pangalan ng talaksang \"$2\".\nTumutugma ito sa sumusunod na ipinasok/entradang nasa talaan ng mga pinagbabawalan (\"itim na talaan\"): <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Ipinagbawalan ang paglikha ng pangalan ng tagagamit na \"$2\".\nTumutugma ito sa sumusunod na entrada/ipinasok sa talaan ng mga pinagbabawalan (\"itim na talaan\"): <code>$1</code>",
+ "titleblacklist-invalid": "Ang sumusunod na {{PLURAL:$1|hanay|mga hanay}} (guhit) na nasa loob ng talaan ng pinagbabawal na pamagat {{PLURAL:$1|ay|ay}} hindi tanggap;\npakitama lamang {{PLURAL:$1|ito|ang mga ito}} bago sagipin:",
+ "titleblacklist-override": "Huwag pansinin ang talaang-itim",
+ "right-tboverride": "Daigin ang talaan ng ipinagbabawal na pamagat o pangalan ng tagagamit",
+ "right-tboverride-account": "Daigin ang talaang-itim ng mga pangalan ng tagagamit"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/tr.json b/www/wiki/extensions/TitleBlacklist/i18n/tr.json
new file mode 100644
index 00000000..139047c3
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/tr.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joseph",
+ "Vito Genovese"
+ ]
+ },
+ "log-name-titleblacklist": "Ad kara listesi günlüğü",
+ "titleblacklist-desc": "Yöneticilere, sayfaların ve kullanıcı hesaplarının oluşturulmasını yasaklamalarına bir [[MediaWiki:Titleblacklist|karaliste]] ve [[MediaWiki:Titlewhitelist|beyazliste]] ile izin verir.",
+ "titleblacklist": "# Bu bir başlık karalistesi. Buradaki düzenli ifadelerle eşleşen başlıklar ve kullanıcılar oluşturulamaz.\n# Yorumlar için \"#\" kullanın.\n# Bu varsayılan olarak büyük-küçük harf duyarsızdır",
+ "titlewhitelist": "# Bu bir başlık beyaz listesidir. Yorumlar için \"#\" kullanın.\n# Varsayılan olarak büyük-küçük harfe duyarsızdır",
+ "titleblacklist-forbidden-edit": "\"$2\" başlığının oluşturulması engellendi.\nŞu karaliste girdisiyle eşleşiyor: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\", \"$3\" sayfasına taşınamaz, çünkü \"$3\" başlığının oluşturulması yasaklanmış.\nŞu karaliste girdisiyle eşleşiyor: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "\"$2\" dosya adının oluşturulması engellendi.\nŞu karaliste girdisiyle eşleşiyor: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "\"$2\" kullanıcı adının oluşturulması engellendi.\nŞu karaliste girdisiyle eşleşiyor: <code>$1</code>",
+ "titleblacklist-invalid": "Karalistedeki şu {{PLURAL:$1|satır|satırlar}} geçersiz;\nlütfen kaydetmeden önce düzeltin:",
+ "titleblacklist-override": "Karalisteyi yoksay",
+ "right-tboverride": "Başlık karalistesini geçersiz kıl",
+ "right-tboverride-account": "Kullanıcı adı karalistesini geçersiz kıl"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/uk.json b/www/wiki/extensions/TitleBlacklist/i18n/uk.json
new file mode 100644
index 00000000..890d31b3
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/uk.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "AS",
+ "Ahonc",
+ "Andriykopanytsia",
+ "Base",
+ "JenVan",
+ "Prima klasy4na",
+ "Ата",
+ "Green Zero",
+ "Piramidion"
+ ]
+ },
+ "action-titleblacklistlog": "перегляд журналу заборонених назв",
+ "log-name-titleblacklist": "Журнал чорного списку назв",
+ "log-description-titleblacklist": "Ці події відображають спрацьовування чорного списку назв.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|спричинив|спричинила}} спрацювання чорного списку назв, спробувавши створити обліковий запис $3, який містить $4.",
+ "titleblacklist-desc": "Дає змогу адміністраторам заборонити створення певних сторінок та облікових записів за допомогою [[MediaWiki:Titleblacklist|чорного]] та [[MediaWiki:Titlewhitelist|білого]] списків.",
+ "titleblacklist": "# Це список заборонених назв. Сторінки і користувачі, назви яких підпадають під регулярні вирази з цього списку, не можуть бути створені.\n# Використовуйте \"#\" для коментарів.\n# Список за замовчуванням нечутливий до регістру",
+ "titlewhitelist": "# Це «білий список» назв. Використовуйте «#» для коментарів.\n# Список за замовчуванням нечутливий до регістру",
+ "titleblacklist-forbidden-edit": "Сторінку з назвою \"$2\" заборонено створювати. Вона підпадає під наступний запис із списку заборонених назв: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Неможливо перейменувати «$2» на «$3», бо назва «$3» є забороненою.\nВона підпадає під такий запис зі списку заборонених назв: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Назва файлу \"$2\" є забороненою для створення.\nВона підпадає під наступний запис із списку заборонених назв: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Заборонено використовувати ім'я користувача «$2».\nІм'я відповідає наступному запису з чорного списку: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|1=Наступний рядок|Наступні рядки}} списку заборонених назв є {{PLURAL:$1|1=помилковим|помилковими}};\nбудь ласка, виправте {{PLURAL:$1|1=його|їх}} перед збереженням:",
+ "titleblacklist-override": "Ігнорувати чорний список",
+ "titleblacklist-override-help": "Користувачі з достатніми правами можуть встановити це для ігнорування чорного списку назв.",
+ "titleblacklist-warning": "<strong>Зверніть увагу:</strong> Цю сторінку можуть редагувати лише адміністратори та інші користувачі з правами <code>tboverride</code>, оскільки вона збігається з наступним записом із «чорного списку» назв:<br /><code>$1</code>",
+ "right-tboverride": "ігнорування чорного списку назв сторінок або користувачів",
+ "right-tboverride-account": "ігнорування чорного списку імен користувачів",
+ "right-titleblacklistlog": "перегляд чорного списку назв",
+ "apihelp-titleblacklist-description": "Перевірити назву сторінки, файлу або ім'я користувача на наявність у чорному списку назв.",
+ "apihelp-titleblacklist-summary": "Перевірити назву сторінки, файлу або ім'я користувача на наявність у чорному списку назв.",
+ "apihelp-titleblacklist-param-title": "Рядок для перевірки у чорному списку.",
+ "apihelp-titleblacklist-param-action": "Дія, яку треба перевірити.",
+ "apihelp-titleblacklist-param-nooverride": "Не намагайтеся обійти чорний список назв.",
+ "apihelp-titleblacklist-example-1": "Перевірити, чи стаття [[Foo]] занесена в чорний список",
+ "apihelp-titleblacklist-example-2": "Перевірити, чи стаття [[Bar]] занесена в чорний список редагування",
+ "apihelp-createaccount-param-ignoretitleblacklist": "Ігнорувати перевірки підмін (потребує одного з таких прав: <code>tboverride</code>, <code>tboverride-account</code>)."
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/ur.json b/www/wiki/extensions/TitleBlacklist/i18n/ur.json
new file mode 100644
index 00000000..59cb912b
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/ur.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "පසිඳු කාවින්ද",
+ "Muhammad Shuaib",
+ "BukhariSaeed"
+ ]
+ },
+ "action-titleblacklistlog": "عنوان کے نوشتۂ فہرست سیاہ کو دیکھنے",
+ "titleblacklist-override": "سیاہ فہرست کو نظر انداز کریں",
+ "right-tboverride": "صارف ناموں یا عنوان کی بلیک لسٹ کی منسوخی",
+ "right-tboverride-account": "صارف ناموں کی سیاہ فہرست کی منسوخی",
+ "right-titleblacklistlog": "عنوان کے نوشتۂ فہرست سیاہ کا معائنہ"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/vec.json b/www/wiki/extensions/TitleBlacklist/i18n/vec.json
new file mode 100644
index 00000000..b49f56ed
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/vec.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Candalua",
+ "GatoSelvadego"
+ ]
+ },
+ "titleblacklist-desc": "Consente ai aministradori de proibir la creazion de pagine con i titoli indicà su la [[MediaWiki:Titleblacklist|lista nera]] e su la [[MediaWiki:Titlewhitelist|lista bianca]]",
+ "titleblacklist": "# Lista dei titoli mìa consentìi. Xe inpedìa la creazion de le pagine el cui titolo el corisponde a na espression regolar indicà de seguito.\n# Dòpara \"#\" par le righe de comento.\n# De default no se tien conto del majuscolo/minuscolo",
+ "titlewhitelist": "# Sta qua la xe na lista bianca dei titoli. Dòpara \"#\" par le righe de comento.\n# De default no se tien conto del majuscolo/minuscolo",
+ "titleblacklist-forbidden-edit": "La creazion de pagine con titolo \"$2\" la xe stà inpedìa. La voçe corispondente ne l'elenco dei titoli mìa consentìi la xe sta chì: <code>$1</code>",
+ "titleblacklist-forbidden-move": "No se pode spostar la pagina \"$2\" al titolo \"$3\" in quanto la creazion de pagine con titolo \"$3\" la xe stà inpedìa. La voçe corispondente ne l'elenco dei titoli mìa consentìi la xe sta chì: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "La creazion de file con titolo \"$2\" la xe stà inpedìa. La voçe corispondente ne l'elenco dei titoli mìa consentìi la xe sta chì: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "La creassion de utenti co' nome \"$2\" la xe stà proibìa. La voçe corispondente in tel'elenco dei nomi mìa consentìi la xe la seguente: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|La seguente riga|Le seguenti righe}} de l'elenco dei titoli mìa consentìi {{PLURAL:$1|no la xe valida|no le xe valide}}; se prega de corègiar {{PLURAL:$1|l'eror|i erori}} prima de salvar la pagina.",
+ "titleblacklist-override": "Ignora ła lista nera",
+ "right-tboverride": "Ignora ła lista nera de i titołi o de i nome utente",
+ "right-tboverride-account": "Ignora ła lista nera de i nome utente"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/vi.json b/www/wiki/extensions/TitleBlacklist/i18n/vi.json
new file mode 100644
index 00000000..d230aa62
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/vi.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minh Nguyen",
+ "Vinhtantran"
+ ]
+ },
+ "action-titleblacklistlog": "xem nhật trình chặn tiêu đề vì danh sách đen",
+ "log-name-titleblacklist": "Nhật trình chặn tiêu đề vì danh sách đen",
+ "log-description-titleblacklist": "Nhật trình này ghi các lần chặn tiêu đề vì nằm vào danh sách đen.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2}}bị danh sách đen tiêu đề ngăn không được mở tài khoản $3 vì mục $4.",
+ "titleblacklist-desc": "Cho phép các bảo quản viên cấm không được tạo ra trang có các tên, theo [[MediaWiki:Titleblacklist|danh sách đen]] và [[MediaWiki:Titlewhitelist|danh sách trắng]]",
+ "titleblacklist": "# Đây là danh sách đen tiêu đề. Tên bài và tên thành viên trùng với biểu thức chính quy tại đây sẽ không thể tạo được.\n# Hãy dùng “#” để chú thích.\n# Nội dung theo mặc định không phân biệt chữ hoa và chữ thường.",
+ "titlewhitelist": "# Đây là danh sách trắng tiêu đề. Hãy dùng “#” để chú thích.\n# Nội dung theo mặc định không phân biệt chữ hoa và chữ thường.",
+ "titleblacklist-forbidden-edit": "Không được tạo ra trang dưới tên “$2”.\nTên này trùng với mục sau trong danh sách đen: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Không được di chuyển “$2” đến “$3” vì tiêu đề “$3” bị cấm không được tạo.\nTiêu đề trùng với mục sau trong danh sách đen: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Không được tải lên tập tin dưới tên “$2”.\nTên này trùng với khoản sau trong danh sách đen: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Không được tạo ra tài khoản “$2”.\nNó trùng tên với một khoản mục trong danh sách đen: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Dòng|Những dòng}} sau đây trong danh sách đen về tên trang không hợp lệ; xin hãy sửa chữa {{PLURAL:$1|nó|chúng}} để tuân theo cú pháp biểu thức chính quy trước khi lưu trang:",
+ "titleblacklist-override": "Bỏ qua danh sách đen",
+ "titleblacklist-override-help": "Những người dùng đủ quyền có thể đặt tùy chọn này để bỏ qua các kiểm tra danh sách đen khi đặt tên trang.",
+ "titleblacklist-warning": "<strong>Cảnh báo: Chỉ có các bảo quản viên và những người khác có quyền <code>tboverride</code> được phép sửa đổi trang này vì nó khớp với mục sau trong danh sách đen tiêu đề:</strong><br /><code>$1</code>",
+ "right-tboverride": "Bỏ qua các danh sách đen tiêu đề và tên người dùng",
+ "right-tboverride-account": "Ghi đè lên danh sách đen tên người dùng",
+ "right-titleblacklistlog": "Xem nhật trình chặn tiêu đề vì danh sách đen"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/vo.json b/www/wiki/extensions/TitleBlacklist/i18n/vo.json
new file mode 100644
index 00000000..efb25685
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/vo.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Smeira"
+ ]
+ },
+ "titleblacklist-desc": "Dälon guvanes ad proibön padi- e kalijafi medü [[MediaWiki:Titleblacklist|blägalised]] e [[MediaWiki:Titlewhitelist|vietalised]].",
+ "titlewhitelist": "# Atos binon vietalised tiädas. Gebolös el „#“ pro küpets.",
+ "titleblacklist-forbidden-edit": "Tiäd: „$2“ no dalon pajafön.\nTiäd at binon in blägalised as: <code>$1</code>",
+ "titleblacklist-forbidden-move": "Pad: „$2“ no kanon topätükön sui pad: „$3“, bi tiäd: „$3“ no dalon pajafön. Tiäd at binon in blägalised as: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Ragivanem: „$2“ no dalon pajafön. Ragivanem at binon in blägalised as: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "Gebananem: „$2“ no dalon pajafön.\nGebananem at binon in blägalised as: <code>$1</code>",
+ "titleblacklist-invalid": "{{PLURAL:$1|Lien|Liens}} sököl in tiädablägalised no {{PLURAL:$1|lonöfon|lonöfons}}; gudükumolös {{PLURAL:$1|oni|onis}} bü dakip:",
+ "right-tboverride": "Nedemön blägalisedi tiädas"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/yi.json b/www/wiki/extensions/TitleBlacklist/i18n/yi.json
new file mode 100644
index 00000000..4003a2d1
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/yi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "titlewhitelist": "# דאס איז א קעפל ווײַסליסטע. ניצט \"#\" פֿאַר באַמערקונגען.\n# ס'איז נישט קיין אונטערשיד צווישן גרויסע און קליינע בוכשטאַבן"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/yue.json b/www/wiki/extensions/TitleBlacklist/i18n/yue.json
new file mode 100644
index 00000000..58245563
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/yue.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shinjiman",
+ "CRCHF"
+ ]
+ },
+ "titleblacklist-desc": "容許禁止開指定標題嘅版: [[MediaWiki:Titleblacklist]] 同 [[MediaWiki:Titlewhitelist]]",
+ "titleblacklist": "# 呢個係標題黑名單。同呢度配合正規表達式嘅標題係唔可以新開嘅。\n# 用 \"#\" 去做註解。",
+ "titlewhitelist": "# 呢個係一個標題白名單。 用 \"#\" 去做註解",
+ "titleblacklist-forbidden-edit": "個標題 \"$2\" 已經禁止咗去開版。佢同下面黑名單嘅項目配合: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" 唔可以搬到去 \"$3\",由於個標題 \"$3\" 已經禁止咗去開。佢同下面黑名單嘅項目配合: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "個檔名 \"$2\" 已經禁止咗去開版。佢同下面黑名單嘅項目配合: <code>$1</code>",
+ "titleblacklist-invalid": "下面響標題黑名單嘅{{PLURAL:$1|一行|幾行}}無效;請響保存之前改正{{PLURAL:$1|佢|佢哋}}:",
+ "right-tboverride": "覆蓋標題黑名單"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/zh-hans.json b/www/wiki/extensions/TitleBlacklist/i18n/zh-hans.json
new file mode 100644
index 00000000..8c9eed39
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/zh-hans.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bencmq",
+ "Fdcn",
+ "Hydra",
+ "Liangent",
+ "PhiLiP",
+ "Shinjiman",
+ "Xiaomingyan",
+ "乌拉跨氪",
+ "Liuxinyu970226"
+ ]
+ },
+ "action-titleblacklistlog": "查看标题黑名单日志",
+ "log-name-titleblacklist": "标题黑名单日志",
+ "log-description-titleblacklist": "这些事件触发了标题黑名单。",
+ "logentry-titleblacklist-hit-username": "当$1尝试创建账户$3时由于匹配$4而{{GENDER:$2|触发}}标题黑名单。",
+ "titleblacklist-desc": "允许管理员通过[[MediaWiki:Titleblacklist|黑名单]]和[[MediaWiki:Titlewhitelist|白名单]]禁止页面和用户帐户的创建",
+ "titleblacklist": "# 本页面为“标题黑名单”。任何匹配本名单正则表达式的标题会被阻止建立和编辑。\n# 请使用\"#\"来添加注释。\n# 本页默认忽略大小写",
+ "titlewhitelist": "# 本页面为“标题白名单”。 请使用\"#\"来添加注释。\n# 本页默认忽略大小写",
+ "titleblacklist-forbidden-edit": "标题 \"$2\" 已被禁止创建。\n其与以下黑名单项匹配:<code>$1</code>",
+ "titleblacklist-forbidden-move": "标题 \"$3\" 已被禁止创建,\"$2\" 无法移动至 \"$3\"。\n其与以下黑名单项匹配: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "文件名称“$2”已被禁止创建。\n其与以下黑名单项匹配:<code>$1</code>",
+ "titleblacklist-forbidden-new-account": "用户名“$2”已被禁止创建。\n其与以下黑名单项匹配:<code>$1</code>",
+ "titleblacklist-invalid": "标题黑名单中以下{{PLURAL:$1|一行|多行}}无效;请在保存前改正{{PLURAL:$1|它|它们}}:",
+ "titleblacklist-override": "忽略黑名单",
+ "titleblacklist-override-help": "有足够特权的用户可以将其设置为忽略标题黑名单检查。",
+ "titleblacklist-warning": "<strong>警告:此页面只能由管理员和其他拥有<code>tboverride</code>权限的用户编辑,因为它匹配以下标题黑名单:</strong><br /><code>$1</code>",
+ "right-tboverride": "覆盖标题或用户名黑名单",
+ "right-tboverride-account": "覆盖用户名黑名单",
+ "right-titleblacklistlog": "查看标题黑名单日志",
+ "apihelp-titleblacklist-description": "验证一个页面的标题、文件名或用户名是否触发标题黑名单。",
+ "apihelp-titleblacklist-summary": "验证一个页面的标题、文件名或用户名是否触发标题黑名单。",
+ "apihelp-titleblacklist-param-title": "验证是否触发黑名单的字符串。",
+ "apihelp-titleblacklist-param-action": "要检查的操作。",
+ "apihelp-titleblacklist-param-nooverride": "不要尝试绕开标题黑名单。",
+ "apihelp-titleblacklist-example-1": "检查[[Foo]]是否被列入黑名单",
+ "apihelp-titleblacklist-example-2": "检查[[Bar]]是否被列入禁止编辑的黑名单",
+ "apihelp-createaccount-param-ignoretitleblacklist": "忽略电子欺骗检查(需要以下权限之一:<code>tboverride</code>、<code>tboverride-account</code>)。"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/i18n/zh-hant.json b/www/wiki/extensions/TitleBlacklist/i18n/zh-hant.json
new file mode 100644
index 00000000..0f879886
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/i18n/zh-hant.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fdcn",
+ "Gaoxuewei",
+ "Mark85296341",
+ "Shinjiman",
+ "Simon Shek",
+ "Waihorace",
+ "Cwlin0416",
+ "Liuxinyu970226",
+ "LNDDYL",
+ "Hello903hello"
+ ]
+ },
+ "action-titleblacklistlog": "檢視標題封鎖清單日誌",
+ "log-name-titleblacklist": "標題封鎖清單日誌",
+ "log-description-titleblacklist": "此頁記錄了所有符合標題封鎖清單的事件。",
+ "logentry-titleblacklist-hit-username": "$1 嘗試建立帳號 $3 時{{GENDER:$2|觸發}}符合條件 $4 的標題封鎖清單事件。",
+ "titleblacklist-desc": "允許管理員可使用 [[MediaWiki:Titleblacklist|封鎖清單]] 與 [[MediaWiki:Titlewhitelist|允許清單]] 來禁止建立頁面與使用者帳號。",
+ "titleblacklist": "# 此頁為標題封鎖清單,符合此處正規表示法的標題與使用者將會被禁止使用。\n# 註解使用 \"#\"。\n# 清單預設不區分大小寫",
+ "titlewhitelist": "# 此頁為標題允許清單。 註解請使用 \"#\"。\n# 清單預設不區分大小寫",
+ "titleblacklist-forbidden-edit": "標題 \"$2\" 已被禁止使用。\n該標題符合以下封鎖清單項目:<code>$1</code>",
+ "titleblacklist-forbidden-move": "標題 \"$3\" 已被禁止使用,無法移動 \"$2\" 至 \"$3\"。\n該標題符合以下封鎖清單項目:<code>$1</code>",
+ "titleblacklist-forbidden-upload": "檔案名稱 \"$2\" 已被禁止使用。\n該名稱符合以下封鎖清單項目:<code>$1</code>",
+ "titleblacklist-forbidden-new-account": "使用者名稱 \"$2\" 已被禁止使用。\n該名稱符合以下封鎖清單項目:<code>$1</code>",
+ "titleblacklist-invalid": "標題封鎖清單中的下列{{PLURAL:$1|一行|多行}}無效;\n在儲存之前請先修正:",
+ "titleblacklist-override": "忽略封鎖清單",
+ "titleblacklist-override-help": "有足夠權限的用戶可以將其設定為略過標題黑名單檢查。",
+ "titleblacklist-warning": "<strong>警告:此頁面符合下列標題封鎖清單項目,僅可由管理員或擁有 <code>tboverride</code> 權限的使用者編輯:</strong><br /><code>$1</code>",
+ "right-tboverride": "覆蓋標題或使用者名稱黑名單",
+ "right-tboverride-account": "覆蓋使用者名稱黑名單",
+ "right-titleblacklistlog": "檢視標題封鎖清單日誌",
+ "apihelp-titleblacklist-description": "檢驗一個頁面標題、檔案名稱或使用者名稱有否抵觸標題黑名單。",
+ "apihelp-titleblacklist-param-title": "要用來檢驗封鎖清單的字串。",
+ "apihelp-titleblacklist-param-action": "要檢查的操作。",
+ "apihelp-titleblacklist-param-nooverride": "不要嘗試覆蓋標題封鎖清單。",
+ "apihelp-titleblacklist-example-1": "檢查 [[Foo]] 是否已被列入封鎖名單",
+ "apihelp-titleblacklist-example-2": "檢查 [[Bar]] 是否已被列入編輯的封鎖名單",
+ "apihelp-createaccount-param-ignoretitleblacklist": "略過欺騙檢查(需要下列權限之一:<code>tboverride</code>、<code>tboverride-account</code>)"
+}
diff --git a/www/wiki/extensions/TitleBlacklist/includes/Scribunto_LuaTitleBlacklistLibrary.php b/www/wiki/extensions/TitleBlacklist/includes/Scribunto_LuaTitleBlacklistLibrary.php
new file mode 100644
index 00000000..3ed4ce06
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/includes/Scribunto_LuaTitleBlacklistLibrary.php
@@ -0,0 +1,35 @@
+<?php
+
+class Scribunto_LuaTitleBlacklistLibrary extends Scribunto_LuaLibraryBase {
+ public function register() {
+ $lib = [
+ 'test' => [ $this, 'test' ],
+ ];
+
+ return $this->getEngine()->registerInterface(
+ __DIR__ . '/mw.ext.TitleBlacklist.lua', $lib, []
+ );
+ }
+
+ public function test( $action = null, $title = null ) {
+ $this->checkType( 'mw.ext.TitleBlacklist.test', 1, $action, 'string' );
+ $this->checkTypeOptional( 'mw.ext.TitleBlacklist.test', 2, $title, 'string', '' );
+ $this->incrementExpensiveFunctionCount();
+ if ( $title == '' ) {
+ $title = $this->getParser()->mTitle->getPrefixedText();
+ }
+ $entry = TitleBlacklist::singleton()->isBlacklisted( $title, $action );
+ if ( $entry ) {
+ return [ [
+ 'params' => $entry->getParams(),
+ 'regex' => $entry->getRegex(),
+ 'raw' => $entry->getRaw(),
+ 'version' => $entry->getFormatVersion(),
+ 'message' => $entry->getErrorMessage( $action ),
+ 'custommessage' => $entry->getCustomMessage()
+ ] ];
+ }
+ return [ null ];
+ }
+
+}
diff --git a/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklist.php b/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklist.php
new file mode 100644
index 00000000..85f8ef77
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklist.php
@@ -0,0 +1,343 @@
+<?php
+/**
+ * Title Blacklist class
+ * @author Victor Vasiliev
+ * @copyright © 2007-2010 Victor Vasiliev et al
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+/**
+ * @ingroup Extensions
+ */
+
+/**
+ * Implements a title blacklist for MediaWiki
+ */
+class TitleBlacklist {
+ /** @var array */
+ private $mBlacklist = null;
+
+ /** @var array */
+ private $mWhitelist = null;
+
+ /** @var TitleBlacklist */
+ protected static $instance = null;
+
+ const VERSION = 3; // Blacklist format
+
+ /**
+ * Get an instance of this class
+ *
+ * @return TitleBlacklist
+ */
+ public static function singleton() {
+ if ( self::$instance === null ) {
+ self::$instance = new self;
+ }
+ return self::$instance;
+ }
+
+ /**
+ * Destroy/reset the current singleton instance.
+ *
+ * This is solely for testing and will fail unless MW_PHPUNIT_TEST is
+ * defined.
+ */
+ public static function destroySingleton() {
+ if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+ throw new MWException(
+ 'Can not invoke ' . __METHOD__ . '() ' .
+ 'out of tests (MW_PHPUNIT_TEST not set).'
+ );
+ }
+
+ self::$instance = null;
+ }
+
+ /**
+ * Load all configured blacklist sources
+ */
+ public function load() {
+ global $wgTitleBlacklistSources, $wgTitleBlacklistCaching;
+
+ $cache = ObjectCache::getMainWANInstance();
+ // Try to find something in the cache
+ $cachedBlacklist = $cache->get( wfMemcKey( "title_blacklist_entries" ) );
+ if ( is_array( $cachedBlacklist ) && count( $cachedBlacklist ) > 0
+ && ( $cachedBlacklist[0]->getFormatVersion() == self::VERSION )
+ ) {
+ $this->mBlacklist = $cachedBlacklist;
+ return;
+ }
+
+ $sources = $wgTitleBlacklistSources;
+ $sources['local'] = [ 'type' => 'message' ];
+ $this->mBlacklist = [];
+ foreach ( $sources as $sourceName => $source ) {
+ $this->mBlacklist = array_merge(
+ $this->mBlacklist,
+ $this->parseBlacklist( $this->getBlacklistText( $source ), $sourceName )
+ );
+ }
+ $cache->set( wfMemcKey( "title_blacklist_entries" ),
+ $this->mBlacklist, $wgTitleBlacklistCaching['expiry'] );
+ wfDebugLog( 'TitleBlacklist-cache', 'Updated ' . wfMemcKey( "title_blacklist_entries" )
+ . ' with ' . count( $this->mBlacklist ) . ' entries.' );
+ }
+
+ /**
+ * Load local whitelist
+ */
+ public function loadWhitelist() {
+ global $wgTitleBlacklistCaching;
+
+ $cache = ObjectCache::getMainWANInstance();
+ $cachedWhitelist = $cache->get( wfMemcKey( "title_whitelist_entries" ) );
+ if ( is_array( $cachedWhitelist ) && count( $cachedWhitelist ) > 0
+ && ( $cachedWhitelist[0]->getFormatVersion() != self::VERSION )
+ ) {
+ $this->mWhitelist = $cachedWhitelist;
+ return;
+ }
+ $this->mWhitelist = $this->parseBlacklist( wfMessage( 'titlewhitelist' )
+ ->inContentLanguage()->text(), 'whitelist' );
+ $cache->set( wfMemcKey( "title_whitelist_entries" ),
+ $this->mWhitelist, $wgTitleBlacklistCaching['expiry'] );
+ }
+
+ /**
+ * Get the text of a blacklist from a specified source
+ *
+ * @param array $source A blacklist source from $wgTitleBlacklistSources
+ * @return string The content of the blacklist source as a string
+ */
+ private static function getBlacklistText( $source ) {
+ if ( !is_array( $source ) || count( $source ) <= 0 ) {
+ return ''; // Return empty string in error case
+ }
+
+ if ( $source['type'] == 'message' ) {
+ return wfMessage( 'titleblacklist' )->inContentLanguage()->text();
+ } elseif ( $source['type'] == 'localpage' && count( $source ) >= 2 ) {
+ $title = Title::newFromText( $source['src'] );
+ if ( is_null( $title ) ) {
+ return '';
+ }
+ if ( $title->getNamespace() == NS_MEDIAWIKI ) {
+ $msg = wfMessage( $title->getText() )->inContentLanguage();
+ if ( !$msg->isDisabled() ) {
+ return $msg->text();
+ } else {
+ return '';
+ }
+ } else {
+ $page = WikiPage::factory( $title );
+ if ( $page->exists() ) {
+ return ContentHandler::getContentText( $page->getContent() );
+ }
+ }
+ } elseif ( $source['type'] == 'url' && count( $source ) >= 2 ) {
+ return self::getHttp( $source['src'] );
+ } elseif ( $source['type'] == 'file' && count( $source ) >= 2 ) {
+ if ( file_exists( $source['src'] ) ) {
+ return file_get_contents( $source['src'] );
+ } else {
+ return '';
+ }
+ }
+
+ return '';
+ }
+
+ /**
+ * Parse blacklist from a string
+ *
+ * @param string $list Text of a blacklist source
+ * @param string $sourceName
+ * @return array of TitleBlacklistEntry entries
+ */
+ public static function parseBlacklist( $list, $sourceName ) {
+ $lines = preg_split( "/\r?\n/", $list );
+ $result = [];
+ foreach ( $lines as $line ) {
+ $line = TitleBlacklistEntry::newFromString( $line, $sourceName );
+ if ( $line ) {
+ $result[] = $line;
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Check whether the blacklist restricts given user
+ * performing a specific action on the given Title
+ *
+ * @param Title $title Title to check
+ * @param User $user User to check
+ * @param string $action Action to check; 'edit' if unspecified
+ * @param bool $override If set to true, overrides work
+ * @return TitleBlacklistEntry|bool The corresponding TitleBlacklistEntry if
+ * blacklisted; otherwise false
+ */
+ public function userCannot( $title, $user, $action = 'edit', $override = true ) {
+ $entry = $this->isBlacklisted( $title, $action );
+ if ( !$entry ) {
+ return false;
+ }
+ $params = $entry->getParams();
+ if ( isset( $params['autoconfirmed'] ) && $user->isAllowed( 'autoconfirmed' ) ) {
+ return false;
+ }
+ if ( $override && self::userCanOverride( $user, $action ) ) {
+ return false;
+ }
+ return $entry;
+ }
+
+ /**
+ * Check whether the blacklist restricts
+ * performing a specific action on the given Title
+ *
+ * @param Title $title Title to check
+ * @param string $action Action to check; 'edit' if unspecified
+ * @return TitleBlacklistEntry|bool The corresponding TitleBlacklistEntry if blacklisted;
+ * otherwise FALSE
+ */
+ public function isBlacklisted( $title, $action = 'edit' ) {
+ if ( !( $title instanceof Title ) ) {
+ $title = Title::newFromText( $title );
+ if ( !( $title instanceof Title ) ) {
+ // The fact that the page name is invalid will stop whatever
+ // action is going through. No sense in doing more work here.
+ return false;
+ }
+ }
+ $blacklist = $this->getBlacklist();
+ $autoconfirmedItem = false;
+ foreach ( $blacklist as $item ) {
+ if ( $item->matches( $title->getFullText(), $action ) ) {
+ if ( $this->isWhitelisted( $title, $action ) ) {
+ return false;
+ }
+ $params = $item->getParams();
+ if ( !isset( $params['autoconfirmed'] ) ) {
+ return $item;
+ }
+ if ( !$autoconfirmedItem ) {
+ $autoconfirmedItem = $item;
+ }
+ }
+ }
+ return $autoconfirmedItem;
+ }
+
+ /**
+ * Check whether it has been explicitly whitelisted that the
+ * current User may perform a specific action on the given Title
+ *
+ * @param Title $title Title to check
+ * @param string $action Action to check; 'edit' if unspecified
+ * @return bool True if whitelisted; otherwise false
+ */
+ public function isWhitelisted( $title, $action = 'edit' ) {
+ if ( !( $title instanceof Title ) ) {
+ $title = Title::newFromText( $title );
+ }
+ $whitelist = $this->getWhitelist();
+ foreach ( $whitelist as $item ) {
+ if ( $item->matches( $title->getFullText(), $action ) ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Get the current blacklist
+ *
+ * @return TitleBlacklistEntry[]
+ */
+ public function getBlacklist() {
+ if ( is_null( $this->mBlacklist ) ) {
+ $this->load();
+ }
+ return $this->mBlacklist;
+ }
+
+ /**
+ * Get the current whitelist
+ *
+ * @return Array of TitleBlacklistEntry items
+ */
+ public function getWhitelist() {
+ if ( is_null( $this->mWhitelist ) ) {
+ $this->loadWhitelist();
+ }
+ return $this->mWhitelist;
+ }
+
+ /**
+ * Get the text of a blacklist source via HTTP
+ *
+ * @param string $url URL of the blacklist source
+ * @return string The content of the blacklist source as a string
+ */
+ private static function getHttp( $url ) {
+ global $messageMemc, $wgTitleBlacklistCaching;
+ $key = "title_blacklist_source:" . md5( $url ); // Global shared
+ $warnkey = wfMemcKey( "titleblacklistwarning", md5( $url ) );
+ $result = $messageMemc->get( $key );
+ $warn = $messageMemc->get( $warnkey );
+ if ( !is_string( $result )
+ || ( !$warn && !mt_rand( 0, $wgTitleBlacklistCaching['warningchance'] ) )
+ ) {
+ $result = Http::get( $url );
+ $messageMemc->set( $warnkey, 1, $wgTitleBlacklistCaching['warningexpiry'] );
+ $messageMemc->set( $key, $result, $wgTitleBlacklistCaching['expiry'] );
+ }
+ return $result;
+ }
+
+ /**
+ * Invalidate the blacklist cache
+ */
+ public function invalidate() {
+ $cache = ObjectCache::getMainWANInstance();
+ $cache->delete( wfMemcKey( "title_blacklist_entries" ) );
+ }
+
+ /**
+ * Validate a new blacklist
+ *
+ * @suppress PhanParamSuspiciousOrder The preg_match() params are in the correct order
+ * @param array $blacklist
+ * @return Array of bad entries; empty array means blacklist is valid
+ */
+ public function validate( $blacklist ) {
+ $badEntries = [];
+ foreach ( $blacklist as $e ) {
+ wfSuppressWarnings();
+ $regex = $e->getRegex();
+ if ( preg_match( "/{$regex}/u", '' ) === false ) {
+ $badEntries[] = $e->getRaw();
+ }
+ wfRestoreWarnings();
+ }
+ return $badEntries;
+ }
+
+ /**
+ * Inidcates whether user can override blacklist on certain action.
+ *
+ * @param User $user
+ * @param string $action Action
+ *
+ * @return bool
+ */
+ public static function userCanOverride( $user, $action ) {
+ return $user->isAllowed( 'tboverride' ) ||
+ ( $action == 'new-account' && $user->isAllowed( 'tboverride-account' ) );
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistAuthenticationRequest.php b/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistAuthenticationRequest.php
new file mode 100644
index 00000000..928a60e0
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistAuthenticationRequest.php
@@ -0,0 +1,22 @@
+<?php
+
+use MediaWiki\Auth\AuthenticationRequest;
+
+/**
+ * An authentication request that allows users with sufficiently high privileges to skip the
+ * title blacklist check.
+ */
+class TitleBlacklistAuthenticationRequest extends AuthenticationRequest {
+ public $ignoreTitleBlacklist;
+
+ public function getFieldInfo() {
+ return [
+ 'ignoreTitleBlacklist' => [
+ 'type' => 'checkbox',
+ 'label' => wfMessage( 'titleblacklist-override' ),
+ 'help' => wfMessage( 'titleblacklist-override-help' ),
+ 'optional' => true,
+ ],
+ ];
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistEntry.php b/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistEntry.php
new file mode 100644
index 00000000..57233680
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistEntry.php
@@ -0,0 +1,293 @@
+<?php
+/**
+ * Title Blacklist class
+ * @author Victor Vasiliev
+ * @copyright © 2007-2010 Victor Vasiliev et al
+ * @license GPL-2.0-or-later
+ * @file
+ */
+
+/**
+ * @ingroup Extensions
+ */
+
+/**
+ * Represents a title blacklist entry
+ */
+class TitleBlacklistEntry {
+ /**
+ * Raw line
+ * @var string
+ */
+ private $mRaw;
+
+ /**
+ * Regular expression to match
+ * @var string
+ */
+ private $mRegex;
+
+ /**
+ * Parameters for this entry
+ * @var array
+ */
+ private $mParams;
+
+ /**
+ * Entry format version
+ * @var string
+ */
+ private $mFormatVersion;
+
+ /**
+ * Source of this entry
+ * @var string
+ */
+ private $mSource;
+
+ /**
+ * Construct a new TitleBlacklistEntry.
+ *
+ * @param string $regex Regular expression to match
+ * @param array $params Parameters for this entry
+ * @param string $raw Raw contents of this line
+ */
+ private function __construct( $regex, $params, $raw, $source ) {
+ $this->mRaw = $raw;
+ $this->mRegex = $regex;
+ $this->mParams = $params;
+ $this->mFormatVersion = TitleBlacklist::VERSION;
+ $this->mSource = $source;
+ }
+
+ /**
+ * Returns whether this entry is capable of filtering new accounts.
+ */
+ private function filtersNewAccounts() {
+ global $wgTitleBlacklistUsernameSources;
+
+ if ( $wgTitleBlacklistUsernameSources === '*' ) {
+ return true;
+ }
+
+ if ( !$wgTitleBlacklistUsernameSources ) {
+ return false;
+ }
+
+ if ( !is_array( $wgTitleBlacklistUsernameSources ) ) {
+ throw new Exception(
+ '$wgTitleBlacklistUsernameSources must be "*", false or an array' );
+ }
+
+ return in_array( $this->mSource, $wgTitleBlacklistUsernameSources, true );
+ }
+
+ /**
+ * Check whether a user can perform the specified action on the specified Title
+ *
+ * @param string $title Title to check
+ * @param string $action Action to check
+ * @return bool TRUE if the the regex matches the title, and is not overridden
+ * else false if it doesn't match (or was overridden)
+ */
+ public function matches( $title, $action ) {
+ if ( $title == '' ) {
+ return false;
+ }
+
+ if ( $action === 'new-account' && !$this->filtersNewAccounts() ) {
+ return false;
+ }
+
+ if ( isset( $this->mParams['antispoof'] )
+ && is_callable( 'AntiSpoof::checkUnicodeString' )
+ ) {
+ if ( $action === 'edit' ) {
+ // Use process cache for frequently edited pages
+ $cache = ObjectCache::getMainWANInstance();
+ list( $ok, $norm ) = $cache->getWithSetCallback(
+ $cache->makeKey( 'titleblacklist', 'normalized-unicode', md5( $title ) ),
+ $cache::TTL_MONTH,
+ function () use ( $title ) {
+ return AntiSpoof::checkUnicodeString( $title );
+ },
+ [ 'pcTTL' => $cache::TTL_PROC_LONG ]
+ );
+ } else {
+ list( $ok, $norm ) = AntiSpoof::checkUnicodeString( $title );
+ }
+
+ if ( $ok === "OK" ) {
+ list( $ver, $title ) = explode( ':', $norm, 2 );
+ } else {
+ wfDebugLog( 'TitleBlacklist', 'AntiSpoof could not normalize "' . $title . '".' );
+ }
+ }
+
+ wfSuppressWarnings();
+ $match = preg_match(
+ "/^(?:{$this->mRegex})$/us" . ( isset( $this->mParams['casesensitive'] ) ? '' : 'i' ),
+ $title
+ );
+ wfRestoreWarnings();
+
+ if ( $match ) {
+ if ( isset( $this->mParams['moveonly'] ) && $action != 'move' ) {
+ return false;
+ }
+ if ( isset( $this->mParams['newaccountonly'] ) && $action != 'new-account' ) {
+ return false;
+ }
+ if ( !isset( $this->mParams['noedit'] ) && $action == 'edit' ) {
+ return false;
+ }
+ if ( isset( $this->mParams['reupload'] ) && $action == 'upload' ) {
+ // Special:Upload also checks 'create' permissions when not reuploading
+ return false;
+ }
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Create a new TitleBlacklistEntry from a line of text
+ *
+ * @param string $line String containing a line of blacklist text
+ * @param string $source
+ * @return TitleBlacklistEntry|null
+ */
+ public static function newFromString( $line, $source ) {
+ $raw = $line; // Keep line for raw data
+ $options = [];
+ // Strip comments
+ $line = preg_replace( "/^\\s*([^#]*)\\s*((.*)?)$/", "\\1", $line );
+ $line = trim( $line );
+ // A blank string causes problems later on
+ if ( $line === '' ) {
+ return null;
+ }
+ // Parse the rest of message
+ $pockets = [];
+ if ( !preg_match( '/^(.*?)(\s*<([^<>]*)>)?$/', $line, $pockets ) ) {
+ return null;
+ }
+ $regex = trim( $pockets[1] );
+ $regex = str_replace( '_', ' ', $regex ); // We'll be matching against text form
+ $opts_str = isset( $pockets[3] ) ? trim( $pockets[3] ) : '';
+ // Parse opts
+ $opts = preg_split( '/\s*\|\s*/', $opts_str );
+ foreach ( $opts as $opt ) {
+ $opt2 = strtolower( $opt );
+ if ( $opt2 == 'autoconfirmed' ) {
+ $options['autoconfirmed'] = true;
+ }
+ if ( $opt2 == 'moveonly' ) {
+ $options['moveonly'] = true;
+ }
+ if ( $opt2 == 'newaccountonly' ) {
+ $options['newaccountonly'] = true;
+ }
+ if ( $opt2 == 'noedit' ) {
+ $options['noedit'] = true;
+ }
+ if ( $opt2 == 'casesensitive' ) {
+ $options['casesensitive'] = true;
+ }
+ if ( $opt2 == 'reupload' ) {
+ $options['reupload'] = true;
+ }
+ if ( preg_match( '/errmsg\s*=\s*(.+)/i', $opt, $matches ) ) {
+ $options['errmsg'] = $matches[1];
+ }
+ if ( $opt2 == 'antispoof' ) {
+ $options['antispoof'] = true;
+ }
+ }
+ // Process magic words
+ preg_match_all( '/{{\s*([a-z]+)\s*:\s*(.+?)\s*}}/', $regex, $magicwords, PREG_SET_ORDER );
+ foreach ( $magicwords as $mword ) {
+ global $wgParser; // Functions we're calling don't need, nevertheless let's use it
+ switch ( strtolower( $mword[1] ) ) {
+ case 'ns':
+ $cpf_result = CoreParserFunctions::ns( $wgParser, $mword[2] );
+ if ( is_string( $cpf_result ) ) {
+ // All result will have the same value, so we can just use str_seplace()
+ $regex = str_replace( $mword[0], $cpf_result, $regex );
+ }
+ break;
+ case 'int':
+ $cpf_result = wfMessage( $mword[2] )->inContentLanguage()->text();
+ if ( is_string( $cpf_result ) ) {
+ $regex = str_replace( $mword[0], $cpf_result, $regex );
+ }
+ }
+ }
+ // Return result
+ if ( $regex ) {
+ return new TitleBlacklistEntry( $regex, $options, $raw, $source );
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string This entry's regular expression
+ */
+ public function getRegex() {
+ return $this->mRegex;
+ }
+
+ /**
+ * @return string This entry's raw line
+ */
+ public function getRaw() {
+ return $this->mRaw;
+ }
+
+ /**
+ * @return array This entry's parameters
+ */
+ public function getParams() {
+ return $this->mParams;
+ }
+
+ /**
+ * @return string Custom message for this entry
+ */
+ public function getCustomMessage() {
+ return isset( $this->mParams['errmsg'] ) ? $this->mParams['errmsg'] : null;
+ }
+
+ /**
+ * @return string The format version
+ */
+ public function getFormatVersion() {
+ return $this->mFormatVersion;
+ }
+
+ /**
+ * Set the format version
+ *
+ * @param string $v New version to set
+ */
+ public function setFormatVersion( $v ) {
+ $this->mFormatVersion = $v;
+ }
+
+ /**
+ * Return the error message name for the blacklist entry.
+ *
+ * @param string $operation Operation name (as in titleblacklist-forbidden message name)
+ *
+ * @return string The error message name
+ */
+ public function getErrorMessage( $operation ) {
+ $message = $this->getCustomMessage();
+ // For grep:
+ // titleblacklist-forbidden-edit, titleblacklist-forbidden-move,
+ // titleblacklist-forbidden-upload, titleblacklist-forbidden-new-account
+ return $message ? $message : "titleblacklist-forbidden-{$operation}";
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistHooks.php b/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistHooks.php
new file mode 100644
index 00000000..b7c3a6e1
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistHooks.php
@@ -0,0 +1,269 @@
+<?php
+/**
+ * Hooks for Title Blacklist
+ * @author Victor Vasiliev
+ * @copyright © 2007-2010 Victor Vasiliev et al
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Hooks for the TitleBlacklist class
+ *
+ * @ingroup Extensions
+ */
+class TitleBlacklistHooks {
+
+ /**
+ * getUserPermissionsErrorsExpensive hook
+ *
+ * @param Title $title
+ * @param User $user
+ * @param string $action
+ * @param array &$result
+ * @return bool
+ */
+ public static function userCan( $title, $user, $action, &$result ) {
+ # Some places check createpage, while others check create.
+ # As it stands, upload does createpage, but normalize both
+ # to the same action, to stop future similar bugs.
+ if ( $action === 'createpage' || $action === 'createtalk' ) {
+ $action = 'create';
+ }
+ if ( $action == 'create' || $action == 'edit' || $action == 'upload' ) {
+ $blacklisted = TitleBlacklist::singleton()->userCannot( $title, $user, $action );
+ if ( $blacklisted instanceof TitleBlacklistEntry ) {
+ $errmsg = $blacklisted->getErrorMessage( 'edit' );
+ $params = [
+ $blacklisted->getRaw(),
+ $title->getFullText()
+ ];
+ ApiResult::setIndexedTagName( $params, 'param' );
+ $result = ApiMessage::create(
+ wfMessage(
+ $errmsg,
+ htmlspecialchars( $blacklisted->getRaw() ),
+ $title->getFullText()
+ ),
+ 'titleblacklist-forbidden',
+ [
+ 'message' => [
+ 'key' => $errmsg,
+ 'params' => $params,
+ ],
+ 'line' => $blacklisted->getRaw(),
+ // As $errmsg usually represents a non-default message here, and ApiBase
+ // uses ->inLanguage( 'en' )->useDatabase( false ) for all messages, it will
+ // never result in useful 'info' text in the API. Try this, extra data seems
+ // to override the default.
+ 'info' => 'TitleBlacklist prevents this title from being created',
+ ]
+ );
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Display a notice if a user is only able to create or edit a page
+ * because they have tboverride.
+ *
+ * @param Title $title
+ * @param int $oldid
+ * @param array &$notices
+ * @return true
+ */
+ public static function displayBlacklistOverrideNotice( Title $title, $oldid, array &$notices ) {
+ if ( !RequestContext::getMain()->getUser()->isAllowed( 'tboverride' ) ) {
+ return true;
+ }
+
+ $blacklisted = TitleBlacklist::singleton()->isBlacklisted(
+ $title,
+ $title->exists() ? 'edit' : 'create'
+ );
+ if ( !$blacklisted ) {
+ return true;
+ }
+
+ $params = $blacklisted->getParams();
+ if ( isset( $params['autoconfirmed'] ) ) {
+ return true;
+ }
+
+ $msg = wfMessage( 'titleblacklist-warning' );
+ $notices['titleblacklist'] = $msg->rawParams(
+ htmlspecialchars( $blacklisted->getRaw() ) )->parseAsBlock();
+ return true;
+ }
+
+ /**
+ * MovePageCheckPermissions hook (1.25+)
+ *
+ * @param Title $oldTitle
+ * @param Title $newTitle
+ * @param User $user
+ * @param string $reason
+ * @param Status $status
+ * @return bool
+ */
+ public static function onMovePageCheckPermissions(
+ Title $oldTitle, Title $newTitle, User $user, $reason, Status $status
+ ) {
+ $titleBlacklist = TitleBlacklist::singleton();
+ $blacklisted = $titleBlacklist->userCannot( $newTitle, $user, 'move' );
+ if ( !$blacklisted ) {
+ $blacklisted = $titleBlacklist->userCannot( $oldTitle, $user, 'edit' );
+ }
+ if ( $blacklisted instanceof TitleBlacklistEntry ) {
+ $status->fatal( ApiMessage::create( [
+ $blacklisted->getErrorMessage( 'move' ),
+ $blacklisted->getRaw(),
+ $oldTitle->getFullText(),
+ $newTitle->getFullText()
+ ] ) );
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Check whether a user name is acceptable for account creation or autocreation, and explain
+ * why not if that's the case.
+ *
+ * @param string $userName
+ * @param User $creatingUser
+ * @param bool $override Should the test be skipped, if the user has sufficient privileges?
+ * @param bool $log Log blacklist hits to Special:Log
+ * @return StatusValue
+ */
+ public static function testUserName(
+ $userName, User $creatingUser, $override = true, $log = false
+ ) {
+ $title = Title::makeTitleSafe( NS_USER, $userName );
+ $blacklisted = TitleBlacklist::singleton()->userCannot( $title, $creatingUser,
+ 'new-account', $override );
+ if ( $blacklisted instanceof TitleBlacklistEntry ) {
+ if ( $log ) {
+ self::logFilterHitUsername( $creatingUser, $title, $blacklisted->getRaw() );
+ }
+ $message = $blacklisted->getErrorMessage( 'new-account' );
+ $params = [
+ $blacklisted->getRaw(),
+ $userName,
+ ];
+ ApiResult::setIndexedTagName( $params, 'param' );
+ return StatusValue::newFatal( ApiMessage::create(
+ [ $message, $blacklisted->getRaw(), $userName ],
+ 'titleblacklist-forbidden',
+ [
+ 'message' => [
+ 'key' => $message,
+ 'params' => $params,
+ ],
+ 'line' => $blacklisted->getRaw(),
+ // The text of the message probably isn't useful API info, so do this instead
+ 'info' => 'TitleBlacklist prevents this username from being created',
+ ]
+ ) );
+ }
+ return StatusValue::newGood();
+ }
+
+ /**
+ * EditFilter hook
+ *
+ * @param EditPage $editor
+ * @param string $text
+ * @param string $section
+ * @param string &$error
+ * @return true
+ */
+ public static function validateBlacklist( $editor, $text, $section, &$error ) {
+ $title = $editor->getTitle();
+
+ if ( $title->getNamespace() == NS_MEDIAWIKI && $title->getDBkey() == 'Titleblacklist' ) {
+ $blackList = TitleBlacklist::singleton();
+ $bl = $blackList->parseBlacklist( $text, 'page' );
+ $ok = $blackList->validate( $bl );
+ if ( count( $ok ) == 0 ) {
+ return true;
+ }
+
+ $errmsg = wfMessage( 'titleblacklist-invalid' )->numParams( count( $ok ) )->text();
+ $errlines = '* <code>' .
+ implode( "</code>\n* <code>", array_map( 'wfEscapeWikiText', $ok ) ) .
+ '</code>';
+ $error = Html::openElement( 'div', [ 'class' => 'errorbox' ] ) .
+ $errmsg .
+ "\n" .
+ $errlines .
+ Html::closeElement( 'div' ) . "\n" .
+ Html::element( 'br', [ 'clear' => 'all' ] ) . "\n";
+
+ // $error will be displayed by the edit class
+ }
+ return true;
+ }
+
+ /**
+ * PageContentSaveComplete hook
+ *
+ * @param WikiPage &$wikiPage
+ * @param User &$user
+ * @param Content $content
+ * @param string $summary
+ * @param bool $isminor
+ * @param bool $iswatch
+ * @param string $section
+ *
+ * @return true
+ */
+ public static function clearBlacklist(
+ WikiPage &$wikiPage, &$user,
+ $content, $summary, $isminor, $iswatch, $section
+ ) {
+ $title = $wikiPage->getTitle();
+ if ( $title->getNamespace() == NS_MEDIAWIKI && $title->getDBkey() == 'Titleblacklist' ) {
+ TitleBlacklist::singleton()->invalidate();
+ }
+ return true;
+ }
+
+ /**
+ * Logs the filter username hit to Special:Log if
+ * $wgTitleBlacklistLogHits is enabled.
+ *
+ * @param User $user
+ * @param Title $title
+ * @param string $entry
+ */
+ public static function logFilterHitUsername( $user, $title, $entry ) {
+ global $wgTitleBlacklistLogHits;
+ if ( $wgTitleBlacklistLogHits ) {
+ $logEntry = new ManualLogEntry( 'titleblacklist', 'hit-username' );
+ $logEntry->setPerformer( $user );
+ $logEntry->setTarget( $title );
+ $logEntry->setParameters( [
+ '4::entry' => $entry,
+ ] );
+ $logid = $logEntry->insert();
+ $logEntry->publish( $logid );
+ }
+ }
+
+ /**
+ * External Lua library for Scribunto
+ *
+ * @param string $engine
+ * @param array &$extraLibraries
+ * @return bool
+ */
+ public static function scribuntoExternalLibraries( $engine, array &$extraLibraries ) {
+ if ( $engine == 'lua' ) {
+ $extraLibraries['mw.ext.TitleBlacklist'] = 'Scribunto_LuaTitleBlacklistLibrary';
+ }
+ return true;
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistPreAuthenticationProvider.php b/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistPreAuthenticationProvider.php
new file mode 100644
index 00000000..8c737bae
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/includes/TitleBlacklistPreAuthenticationProvider.php
@@ -0,0 +1,58 @@
+<?php
+
+use MediaWiki\Auth\AbstractPreAuthenticationProvider;
+use MediaWiki\Auth\AuthenticationRequest;
+use MediaWiki\Auth\AuthManager;
+
+class TitleBlacklistPreAuthenticationProvider extends AbstractPreAuthenticationProvider {
+ protected $blockAutoAccountCreation;
+
+ public function __construct( $params = [] ) {
+ global $wgTitleBlacklistBlockAutoAccountCreation;
+
+ $params += [
+ 'blockAutoAccountCreation' => $wgTitleBlacklistBlockAutoAccountCreation
+ ];
+
+ $this->blockAutoAccountCreation = (bool)$params['blockAutoAccountCreation'];
+ }
+
+ public function getAuthenticationRequests( $action, array $options ) {
+ $needOverrideOption = false;
+ switch ( $action ) {
+ case AuthManager::ACTION_CREATE:
+ $user = User::newFromName( $options['username'] ) ?: new User();
+ $needOverrideOption = TitleBlacklist::userCanOverride( $user, 'new-account' );
+ break;
+ }
+
+ return $needOverrideOption ? [ new TitleBlacklistAuthenticationRequest() ] : [];
+ }
+
+ public function testForAccountCreation( $user, $creator, array $reqs ) {
+ /** @var TitleBlacklistAuthenticationRequest $req */
+ $req = AuthenticationRequest::getRequestByClass( $reqs,
+ TitleBlacklistAuthenticationRequest::class );
+ // For phan check, to ensure that $req is instance of \TitleBlacklistAuthenticationRequest
+ // or null
+ if ( $req instanceof TitleBlacklistAuthenticationRequest ) {
+ $override = $req->ignoreTitleBlacklist;
+ } else {
+ $override = false;
+ }
+
+ return TitleBlacklistHooks::testUserName( $user->getName(), $creator, $override, true );
+ }
+
+ public function testUserForCreation( $user, $autocreate, array $options = [] ) {
+ $sv = StatusValue::newGood();
+ $creator = RequestContext::getMain()->getUser();
+
+ if ( !$autocreate && empty( $options['creating'] ) || $this->blockAutoAccountCreation ) {
+ $sv->merge( TitleBlacklistHooks::testUserName(
+ $user->getName(), $creator, true, (bool)$autocreate
+ ) );
+ }
+ return $sv;
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/includes/api/ApiQueryTitleBlacklist.php b/www/wiki/extensions/TitleBlacklist/includes/api/ApiQueryTitleBlacklist.php
new file mode 100644
index 00000000..82e93cde
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/includes/api/ApiQueryTitleBlacklist.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * TitleBlacklist extension API
+ *
+ * Copyright © 2011 Wikimedia Foundation and Ian Baker <ian@wikimedia.org>
+ * Based on code by Victor Vasiliev, Bryan Tong Minh, Roan Kattouw, and Alex Z.
+ *
+ * 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
+ */
+
+/**
+ * Query module check a title against the blacklist
+ *
+ * @ingroup API
+ * @ingroup Extensions
+ */
+class ApiQueryTitleBlacklist extends ApiBase {
+
+ public function __construct( $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'tb' );
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $action = $params['action'];
+ $override = !$params['nooverride'];
+
+ // createtalk and createpage are useless as they're treated exactly like create
+ if ( $action === 'createpage' || $action === 'createtalk' ) {
+ $action = 'create';
+ }
+
+ $title = Title::newFromText( $params['title'] );
+ if ( !$title ) {
+ $this->dieWithError(
+ [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ]
+ );
+ }
+
+ $blacklisted = TitleBlacklist::singleton()->userCannot(
+ $title, $this->getUser(), $action, $override
+ );
+ if ( $blacklisted instanceof TitleBlacklistEntry ) {
+ // this title is blacklisted.
+ $result = [
+ htmlspecialchars( $blacklisted->getRaw() ),
+ htmlspecialchars( $params['title'] ),
+ ];
+
+ $res = $this->getResult();
+ $res->addValue( 'titleblacklist', 'result', 'blacklisted' );
+ // there aren't any messages for create(talk|page), using edit for those instead
+ $message = $blacklisted->getErrorMessage( $action !== 'create' ? $action : 'edit' );
+ $res->addValue( 'titleblacklist', 'reason', wfMessage( $message, $result )->text() );
+ $res->addValue( 'titleblacklist', 'message', $message );
+ $res->addValue( 'titleblacklist', 'line', htmlspecialchars( $blacklisted->getRaw() ) );
+ } else {
+ // not blacklisted
+ $this->getResult()->addValue( 'titleblacklist', 'result', 'ok' );
+ }
+ }
+
+ public function getAllowedParams() {
+ return [
+ 'title' => [
+ ApiBase::PARAM_REQUIRED => true,
+ ],
+ 'action' => [
+ ApiBase::PARAM_DFLT => 'edit',
+ ApiBase::PARAM_ISMULTI => false,
+ ApiBase::PARAM_TYPE => [
+ // createtalk and createpage are useless as they're treated exactly like create
+ 'create', 'edit', 'upload', 'createtalk', 'createpage', 'move', 'new-account'
+ ],
+ ],
+ 'nooverride' => [
+ ApiBase::PARAM_DFLT => false,
+ ]
+ ];
+ }
+
+ /**
+ * @see ApiBase::getExamplesMessages()
+ * @return array
+ */
+ protected function getExamplesMessages() {
+ return [
+ 'action=titleblacklist&tbtitle=Foo'
+ => 'apihelp-titleblacklist-example-1',
+ 'action=titleblacklist&tbtitle=Bar&tbaction=edit'
+ => 'apihelp-titleblacklist-example-2',
+ ];
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/includes/mw.ext.TitleBlacklist.lua b/www/wiki/extensions/TitleBlacklist/includes/mw.ext.TitleBlacklist.lua
new file mode 100644
index 00000000..1b48eed1
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/includes/mw.ext.TitleBlacklist.lua
@@ -0,0 +1,22 @@
+local TitleBlacklist = {}
+local php
+
+function TitleBlacklist.test( action, title )
+ return php.test( action, title )
+end
+
+function TitleBlacklist.setupInterface( options )
+ -- Boilerplate
+ TitleBlacklist.setupInterface = nil
+ php = mw_interface
+ mw_interface = nil
+
+ -- Register this library in the "mw" global
+ mw = mw or {}
+ mw.ext = mw.ext or {}
+ mw.ext.TitleBlacklist = TitleBlacklist
+
+ package.loaded['mw.ext.TitleBlacklist'] = TitleBlacklist
+end
+
+return TitleBlacklist
diff --git a/www/wiki/extensions/TitleBlacklist/modules/mediawiki.api.titleblacklist.js b/www/wiki/extensions/TitleBlacklist/modules/mediawiki.api.titleblacklist.js
new file mode 100644
index 00000000..63d12294
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/modules/mediawiki.api.titleblacklist.js
@@ -0,0 +1,67 @@
+/**
+ * @class mw.Api.plugin.titleblacklist
+ */
+( function ( mw, $ ) {
+
+ $.extend( mw.Api.prototype, {
+ /**
+ * Convinience method for `action=titleblacklist`.
+ *
+ * @param {mw.Title|string} title
+ * @param {Function} [ok] Success callback (deprecated)
+ * @param {Function} [err] Error callback (deprecated)
+ * @return {jQuery.Promise}
+ * @return {Function} return.done
+ * @return {Object|boolean} return.done.result False if title wasn't blacklisted, an object with 'reason', 'line'
+ * and 'message' properties if title was blacklisted.
+ */
+ isBlacklisted: function ( title, ok, err ) {
+ var d = $.Deferred();
+ // Backwards compatibility (< MW 1.20)
+ d.done( ok );
+ d.fail( err );
+
+ this.get( {
+ action: 'titleblacklist',
+ tbaction: 'create',
+ tbtitle: title.toString()
+ } )
+ .done( function ( data ) {
+ var result;
+
+ // this fails open (if nothing valid is returned by the api, allows the title)
+ // also fails open when the API is not present, which will be most of the time
+ // as this API module is part of the TitleBlacklist extension.
+ if ( data.titleblacklist && data.titleblacklist.result && data.titleblacklist.result === 'blacklisted' ) {
+ if ( data.titleblacklist.reason ) {
+ result = {
+ reason: data.titleblacklist.reason,
+ line: data.titleblacklist.line,
+ message: data.titleblacklist.message
+ };
+ } else {
+ mw.log( 'mw.Api.titleblacklist::isBlacklisted> no reason data for blacklisted title', 'debug' );
+ result = {
+ reason: 'Blacklisted, but no reason supplied',
+ line: 'Unknown',
+ message: null
+ };
+ }
+ d.resolve( result );
+ } else {
+ d.resolve( false );
+ }
+ } )
+ .fail( d.reject );
+
+ return d.promise();
+ }
+
+ } );
+
+ /**
+ * @class mw.Api
+ * @mixins mw.Api.plugin.titleblacklist
+ */
+
+}( mediaWiki, jQuery ) );
diff --git a/www/wiki/extensions/TitleBlacklist/mw.ext.TitleBlacklist.lua b/www/wiki/extensions/TitleBlacklist/mw.ext.TitleBlacklist.lua
new file mode 100644
index 00000000..1b48eed1
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/mw.ext.TitleBlacklist.lua
@@ -0,0 +1,22 @@
+local TitleBlacklist = {}
+local php
+
+function TitleBlacklist.test( action, title )
+ return php.test( action, title )
+end
+
+function TitleBlacklist.setupInterface( options )
+ -- Boilerplate
+ TitleBlacklist.setupInterface = nil
+ php = mw_interface
+ mw_interface = nil
+
+ -- Register this library in the "mw" global
+ mw = mw or {}
+ mw.ext = mw.ext or {}
+ mw.ext.TitleBlacklist = TitleBlacklist
+
+ package.loaded['mw.ext.TitleBlacklist'] = TitleBlacklist
+end
+
+return TitleBlacklist
diff --git a/www/wiki/extensions/TitleBlacklist/phpcs.xml b/www/wiki/extensions/TitleBlacklist/phpcs.xml
new file mode 100644
index 00000000..733a51be
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/phpcs.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ruleset>
+ <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
+ <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic" />
+ <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamComment" />
+ <exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
+ <exclude name="MediaWiki.Files.OneClassPerFile.MultipleFound" />
+ <exclude name="Squiz.Classes.ValidClassName.NotCamelCaps"/>
+ <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment"/>
+ </rule>
+ <rule ref="MediaWiki.NamingConventions.ValidGlobalName">
+ <properties>
+ <property name="ignoreList" type="array" value="$messageMemc" />
+ </properties>
+ </rule>
+ <file>.</file>
+ <arg name="extensions" value="php,php5,inc"/>
+ <arg name="encoding" value="UTF-8"/>
+</ruleset>
diff --git a/www/wiki/extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php b/www/wiki/extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php
new file mode 100644
index 00000000..4a2c1e17
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php
@@ -0,0 +1,138 @@
+<?php
+/**
+ * Test the TitleBlacklist API.
+ *
+ * This wants to run with phpunit.php, like so:
+ * cd $IP/tests/phpunit
+ * php phpunit.php ../../extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php
+ *
+ * The blacklist file is `testSource` and shared by all tests.
+ *
+ * Ian Baker <ian@wikimedia.org>
+ */
+
+ini_set( 'include_path', ini_get( 'include_path' ) . ':' . __DIR__ . '/../../../tests/phpunit/includes/api' );
+
+/**
+ * @group medium
+ **/
+class ApiQueryTitleBlacklistTest extends ApiTestCase {
+
+ function setUp() {
+ global $wgTitleBlacklistSources;
+ parent::setUp();
+ $this->doLogin();
+
+ TitleBlacklist::destroySingleton();
+ $wgTitleBlacklistSources = array(
+ array(
+ 'type' => 'file',
+ 'src' => __DIR__ . '/testSource',
+ ),
+ );
+ }
+
+ function tearDown() {
+ TitleBlacklist::destroySingleton();
+ parent::tearDown();
+ }
+
+ /**
+ * Verify we allow a title which is not blacklisted
+ */
+ function testCheckingUnlistedTitle() {
+ $unlisted = $this->doApiRequest( array(
+ 'action' => 'titleblacklist',
+ // evil_acc is blacklisted as <newaccountonly>
+ 'tbtitle' => 'evil_acc',
+ 'tbaction' => 'create',
+ 'tbnooverride' => true,
+ ) );
+
+ $this->assertEquals(
+ 'ok',
+ $unlisted[0]['titleblacklist']['result'],
+ 'Not blacklisted title returns ok'
+ );
+ }
+
+ /**
+ * Verify tboverride works
+ */
+ function testTboverride() {
+ global $wgGroupPermissions;
+
+ // Allow all users to override the titleblacklist
+ $wgGroupPermissions['*']['tboverride'] = true;
+
+ $unlisted = $this->doApiRequest( array(
+ 'action' => 'titleblacklist',
+ 'tbtitle' => 'bar',
+ 'tbaction' => 'create',
+ ) );
+
+ $this->assertEquals(
+ 'ok',
+ $unlisted[0]['titleblacklist']['result'],
+ 'Blacklisted title returns ok if the user is allowd to tboverride'
+ );
+ }
+
+ /**
+ * Verify a blacklisted title gives out an error.
+ */
+ function testCheckingBlackListedTitle() {
+ $listed = $this->doApiRequest( array(
+ 'action' => 'titleblacklist',
+ 'tbtitle' => 'bar',
+ 'tbaction' => 'create',
+ 'tbnooverride' => true,
+ ) );
+
+ $this->assertEquals(
+ 'blacklisted',
+ $listed[0]['titleblacklist']['result'],
+ 'Listed title returns error'
+ );
+ $this->assertEquals(
+ "The title \"bar\" has been banned from creation.\nIt matches the following blacklist entry: <code>[Bb]ar #example blacklist entry</code>",
+ $listed[0]['titleblacklist']['reason'],
+ 'Listed title error text is as expected'
+ );
+
+ $this->assertEquals(
+ "titleblacklist-forbidden-edit",
+ $listed[0]['titleblacklist']['message'],
+ 'Correct blacklist message name is returned'
+ );
+
+ $this->assertEquals(
+ "[Bb]ar #example blacklist entry",
+ $listed[0]['titleblacklist']['line'],
+ 'Correct blacklist line is returned'
+ );
+ }
+
+ /**
+ * Tests integration with the AntiSpoof extension
+ */
+ function testAntiSpoofIntegration() {
+ if ( !class_exists( 'AntiSpoof') ) {
+ $this->markTestSkipped( "This test requires the AntiSpoof extension" );
+ }
+
+ $listed = $this->doApiRequest( array(
+ 'action' => 'titleblacklist',
+ 'tbtitle' => 'AVVVV',
+ 'tbaction' => 'create',
+ 'tbnooverride' => true,
+ ) );
+
+ $this->assertEquals(
+ 'blacklisted',
+ $listed[0]['titleblacklist']['result'],
+ 'Spoofed title is blacklisted'
+ );
+
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/tests/TitleBlacklistAuthenticationRequestTest.php b/www/wiki/extensions/TitleBlacklist/tests/TitleBlacklistAuthenticationRequestTest.php
new file mode 100644
index 00000000..30e1020a
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/tests/TitleBlacklistAuthenticationRequestTest.php
@@ -0,0 +1,25 @@
+<?php
+
+use MediaWiki\Auth\AuthenticationRequestTestCase;
+use MediaWiki\Auth\AuthManager;
+
+class TitleBlacklistAuthenticationRequestTest extends AuthenticationRequestTestCase {
+ public function setUp() {
+ global $wgDisableAuthManager;
+ if ( !class_exists( AuthManager::class ) || $wgDisableAuthManager ) {
+ $this->markTestSkipped( 'AuthManager is disabled' );
+ }
+ parent::setUp();
+ }
+
+ protected function getInstance( array $args = [ ] ) {
+ return new TitleBlacklistAuthenticationRequest();
+ }
+
+ public function provideLoadFromSubmission() {
+ return [
+ 'empty' => [ [], [], [ 'ignoreTitleBlacklist' => false ] ],
+ 'true' => [ [], [ 'ignoreTitleBlacklist' => '1' ], [ 'ignoreTitleBlacklist' => true ] ],
+ ];
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/tests/TitleBlacklistPreAuthenticationProviderTest.php b/www/wiki/extensions/TitleBlacklist/tests/TitleBlacklistPreAuthenticationProviderTest.php
new file mode 100644
index 00000000..e48868b0
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/tests/TitleBlacklistPreAuthenticationProviderTest.php
@@ -0,0 +1,36 @@
+<?php
+use MediaWiki\Auth\AuthManager;
+
+/**
+ * @group Database
+ */
+class TitleBlacklistPreAuthenticationProviderTest extends MediaWikiTestCase {
+ public function setUp() {
+ global $wgDisableAuthManager;
+ if ( !class_exists( AuthManager::class ) || $wgDisableAuthManager ) {
+ $this->markTestSkipped( 'AuthManager is disabled' );
+ }
+
+ parent::setUp();
+ }
+
+ /**
+ * @dataProvider provideGetAuthenticationRequests
+ */
+ public function testGetAuthenticationRequests( $action, $username, $expectedReqs ) {
+ $provider = new TitleBlacklistPreAuthenticationProvider();
+ $provider->setManager( AuthManager::singleton() );
+ $reqs = $provider->getAuthenticationRequests( $action, [ 'username' => $username ] );
+ $this->assertEquals( $expectedReqs, $reqs );
+ }
+
+ public function provideGetAuthenticationRequests() {
+ return [
+ [ AuthManager::ACTION_LOGIN, null, [] ],
+ [ AuthManager::ACTION_CREATE, null, [] ],
+ [ AuthManager::ACTION_CREATE, 'UTSysop', [ new TitleBlacklistAuthenticationRequest() ] ],
+ [ AuthManager::ACTION_CHANGE, null, [] ],
+ [ AuthManager::ACTION_REMOVE, null, [] ],
+ ];
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/tests/phan/config.php b/www/wiki/extensions/TitleBlacklist/tests/phan/config.php
new file mode 100644
index 00000000..9a1424e9
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/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/AntiSpoof',
+ './../../extensions/Scribunto',
+ ]
+);
+$cfg['exclude_analysis_directory_list'] = array_merge(
+ $cfg['exclude_analysis_directory_list'],
+ [
+ './../../extensions/AntiSpoof',
+ './../../extensions/Scribunto',
+ ]
+);
+
+return $cfg;
diff --git a/www/wiki/extensions/TitleBlacklist/tests/phpunit/ApiQueryTitleBlacklistTest.php b/www/wiki/extensions/TitleBlacklist/tests/phpunit/ApiQueryTitleBlacklistTest.php
new file mode 100644
index 00000000..88aa723e
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/tests/phpunit/ApiQueryTitleBlacklistTest.php
@@ -0,0 +1,140 @@
+<?php
+/**
+ * Test the TitleBlacklist API.
+ *
+ * This wants to run with phpunit.php, like so:
+ * cd $IP/tests/phpunit
+ * php phpunit.php ../../extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php
+ *
+ * The blacklist file is `testSource` and shared by all tests.
+ *
+ * Ian Baker <ian@wikimedia.org>
+ */
+
+ini_set( 'include_path', ini_get( 'include_path' ) . ':' .
+ __DIR__ . '/../../../tests/phpunit/includes/api' );
+
+/**
+ * @group medium
+ * @covers ApiQueryTitleBlacklist
+ */
+class ApiQueryTitleBlacklistTest extends ApiTestCase {
+
+ function setUp() {
+ parent::setUp();
+ $this->doLogin();
+
+ TitleBlacklist::destroySingleton();
+ $this->setMwGlobals( 'wgTitleBlacklistSources', [
+ [
+ 'type' => 'file',
+ 'src' => __DIR__ . '/testSource',
+ ],
+ ] );
+ }
+
+ function tearDown() {
+ TitleBlacklist::destroySingleton();
+ parent::tearDown();
+ }
+
+ /**
+ * Verify we allow a title which is not blacklisted
+ */
+ function testCheckingUnlistedTitle() {
+ $unlisted = $this->doApiRequest( [
+ 'action' => 'titleblacklist',
+ // evil_acc is blacklisted as <newaccountonly>
+ 'tbtitle' => 'evil_acc',
+ 'tbaction' => 'create',
+ 'tbnooverride' => true,
+ ] );
+
+ $this->assertEquals(
+ 'ok',
+ $unlisted[0]['titleblacklist']['result'],
+ 'Not blacklisted title returns ok'
+ );
+ }
+
+ /**
+ * Verify tboverride works
+ */
+ function testTboverride() {
+ global $wgGroupPermissions;
+
+ // Allow all users to override the titleblacklist
+ $this->stashMwGlobals( 'wgGroupPermissions' );
+ $wgGroupPermissions['*']['tboverride'] = true;
+
+ $unlisted = $this->doApiRequest( [
+ 'action' => 'titleblacklist',
+ 'tbtitle' => 'bar',
+ 'tbaction' => 'create',
+ ] );
+
+ $this->assertEquals(
+ 'ok',
+ $unlisted[0]['titleblacklist']['result'],
+ 'Blacklisted title returns ok if the user is allowd to tboverride'
+ );
+ }
+
+ /**
+ * Verify a blacklisted title gives out an error.
+ */
+ function testCheckingBlackListedTitle() {
+ $listed = $this->doApiRequest( [
+ 'action' => 'titleblacklist',
+ 'tbtitle' => 'bar',
+ 'tbaction' => 'create',
+ 'tbnooverride' => true,
+ ] );
+
+ $this->assertEquals(
+ 'blacklisted',
+ $listed[0]['titleblacklist']['result'],
+ 'Listed title returns error'
+ );
+ $this->assertEquals(
+ "The title \"bar\" has been banned from creation.\nIt matches the following " .
+ "blacklist entry: <code>[Bb]ar #example blacklist entry</code>",
+ $listed[0]['titleblacklist']['reason'],
+ 'Listed title error text is as expected'
+ );
+
+ $this->assertEquals(
+ "titleblacklist-forbidden-edit",
+ $listed[0]['titleblacklist']['message'],
+ 'Correct blacklist message name is returned'
+ );
+
+ $this->assertEquals(
+ "[Bb]ar #example blacklist entry",
+ $listed[0]['titleblacklist']['line'],
+ 'Correct blacklist line is returned'
+ );
+ }
+
+ /**
+ * Tests integration with the AntiSpoof extension
+ */
+ function testAntiSpoofIntegration() {
+ if ( !class_exists( 'AntiSpoof' ) ) {
+ $this->markTestSkipped( "This test requires the AntiSpoof extension" );
+ }
+
+ $listed = $this->doApiRequest( [
+ 'action' => 'titleblacklist',
+ 'tbtitle' => 'AVVVV',
+ 'tbaction' => 'create',
+ 'tbnooverride' => true,
+ ] );
+
+ $this->assertEquals(
+ 'blacklisted',
+ $listed[0]['titleblacklist']['result'],
+ 'Spoofed title is blacklisted'
+ );
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/tests/phpunit/TitleBlacklistAuthenticationRequestTest.php b/www/wiki/extensions/TitleBlacklist/tests/phpunit/TitleBlacklistAuthenticationRequestTest.php
new file mode 100644
index 00000000..6d05475e
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/tests/phpunit/TitleBlacklistAuthenticationRequestTest.php
@@ -0,0 +1,28 @@
+<?php
+
+use MediaWiki\Auth\AuthenticationRequestTestCase;
+use MediaWiki\Auth\AuthManager;
+
+/**
+ * @covers TitleBlacklistAuthenticationRequest
+ */
+class TitleBlacklistAuthenticationRequestTest extends AuthenticationRequestTestCase {
+ public function setUp() {
+ global $wgDisableAuthManager;
+ if ( !class_exists( AuthManager::class ) || $wgDisableAuthManager ) {
+ $this->markTestSkipped( 'AuthManager is disabled' );
+ }
+ parent::setUp();
+ }
+
+ protected function getInstance( array $args = [] ) {
+ return new TitleBlacklistAuthenticationRequest();
+ }
+
+ public function provideLoadFromSubmission() {
+ return [
+ 'empty' => [ [], [], [ 'ignoreTitleBlacklist' => false ] ],
+ 'true' => [ [], [ 'ignoreTitleBlacklist' => '1' ], [ 'ignoreTitleBlacklist' => true ] ],
+ ];
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/tests/phpunit/TitleBlacklistPreAuthenticationProviderTest.php b/www/wiki/extensions/TitleBlacklist/tests/phpunit/TitleBlacklistPreAuthenticationProviderTest.php
new file mode 100644
index 00000000..30036853
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/tests/phpunit/TitleBlacklistPreAuthenticationProviderTest.php
@@ -0,0 +1,37 @@
+<?php
+use MediaWiki\Auth\AuthManager;
+
+/**
+ * @group Database
+ * @covers TitleBlacklistPreAuthenticationProvider
+ */
+class TitleBlacklistPreAuthenticationProviderTest extends MediaWikiTestCase {
+ public function setUp() {
+ global $wgDisableAuthManager;
+ if ( !class_exists( AuthManager::class ) || $wgDisableAuthManager ) {
+ $this->markTestSkipped( 'AuthManager is disabled' );
+ }
+
+ parent::setUp();
+ }
+
+ /**
+ * @dataProvider provideGetAuthenticationRequests
+ */
+ public function testGetAuthenticationRequests( $action, $username, $expectedReqs ) {
+ $provider = new TitleBlacklistPreAuthenticationProvider();
+ $provider->setManager( AuthManager::singleton() );
+ $reqs = $provider->getAuthenticationRequests( $action, [ 'username' => $username ] );
+ $this->assertEquals( $expectedReqs, $reqs );
+ }
+
+ public function provideGetAuthenticationRequests() {
+ return [
+ [ AuthManager::ACTION_LOGIN, null, [] ],
+ [ AuthManager::ACTION_CREATE, null, [] ],
+ [ AuthManager::ACTION_CREATE, 'UTSysop', [ new TitleBlacklistAuthenticationRequest() ] ],
+ [ AuthManager::ACTION_CHANGE, null, [] ],
+ [ AuthManager::ACTION_REMOVE, null, [] ],
+ ];
+ }
+}
diff --git a/www/wiki/extensions/TitleBlacklist/tests/phpunit/testSource b/www/wiki/extensions/TitleBlacklist/tests/phpunit/testSource
new file mode 100644
index 00000000..235cc671
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/tests/phpunit/testSource
@@ -0,0 +1,5 @@
+[Bb]ar #example blacklist entry
+.*[Ff]ail.*
+.*[Nn]yancat.* <errmsg=blacklisted-nyancat>
+.*evil_acc.* <newaccountonly>
+AW{1,10} <antispoof>
diff --git a/www/wiki/extensions/TitleBlacklist/tests/testSource b/www/wiki/extensions/TitleBlacklist/tests/testSource
new file mode 100644
index 00000000..235cc671
--- /dev/null
+++ b/www/wiki/extensions/TitleBlacklist/tests/testSource
@@ -0,0 +1,5 @@
+[Bb]ar #example blacklist entry
+.*[Ff]ail.*
+.*[Nn]yancat.* <errmsg=blacklisted-nyancat>
+.*evil_acc.* <newaccountonly>
+AW{1,10} <antispoof>