summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Evans <grknight@gentoo.org>2018-11-20 11:16:21 -0500
committerBrian Evans <grknight@gentoo.org>2018-11-20 11:16:21 -0500
commit1c4e122e1193fedfdd349140a04704fddb5e1dd9 (patch)
tree8f1f8a2aa87fb13707e01edc5eaacaa40f8e3c3f
parentUserFunctions: Update for MW1.30 and upstream version 2.7.0 (diff)
downloadextensions-1c4e122e1193fedfdd349140a04704fddb5e1dd9.tar.gz
extensions-1c4e122e1193fedfdd349140a04704fddb5e1dd9.tar.bz2
extensions-1c4e122e1193fedfdd349140a04704fddb5e1dd9.zip
UserMerge: Update to REL_1_30
Signed-off-by: Brian Evans <grknight@gentoo.org>
-rw-r--r--UserMerge/.gitignore25
-rw-r--r--UserMerge/.gitreview2
-rw-r--r--UserMerge/CODE_OF_CONDUCT.md1
-rw-r--r--UserMerge/COPYING339
-rw-r--r--UserMerge/Gruntfile.js33
-rw-r--r--UserMerge/IUserMergeLogger.php2
-rw-r--r--UserMerge/MergeUser.php428
-rw-r--r--UserMerge/SpecialUserMerge.php57
-rw-r--r--UserMerge/UserMerge.alias.php336
-rw-r--r--UserMerge/UserMerge.i18n.php35
-rw-r--r--UserMerge/UserMerge.php79
-rw-r--r--UserMerge/UserMergeLogger.php8
-rw-r--r--UserMerge/composer.json14
-rw-r--r--UserMerge/extension.json56
-rw-r--r--UserMerge/gitinfo.json1
-rw-r--r--UserMerge/i18n/af.json2
-rw-r--r--UserMerge/i18n/aln.json2
-rw-r--r--UserMerge/i18n/ar.json19
-rw-r--r--UserMerge/i18n/arz.json2
-rw-r--r--UserMerge/i18n/ast.json17
-rw-r--r--UserMerge/i18n/azb.json8
-rw-r--r--UserMerge/i18n/be-tarask.json16
-rw-r--r--UserMerge/i18n/bg.json7
-rw-r--r--UserMerge/i18n/bn.json42
-rw-r--r--UserMerge/i18n/br.json5
-rw-r--r--UserMerge/i18n/bs.json19
-rw-r--r--UserMerge/i18n/ce.json25
-rw-r--r--UserMerge/i18n/crh-cyrl.json8
-rw-r--r--UserMerge/i18n/crh-latn.json8
-rw-r--r--UserMerge/i18n/cs.json17
-rw-r--r--UserMerge/i18n/de.json12
-rw-r--r--UserMerge/i18n/diq.json10
-rw-r--r--UserMerge/i18n/dsb.json7
-rw-r--r--UserMerge/i18n/en.json58
-rw-r--r--UserMerge/i18n/eo.json7
-rw-r--r--UserMerge/i18n/es.json26
-rw-r--r--UserMerge/i18n/et.json3
-rw-r--r--UserMerge/i18n/eu.json4
-rw-r--r--UserMerge/i18n/fa.json10
-rw-r--r--UserMerge/i18n/fi.json5
-rw-r--r--UserMerge/i18n/fr.json17
-rw-r--r--UserMerge/i18n/frp.json6
-rw-r--r--UserMerge/i18n/gl.json20
-rw-r--r--UserMerge/i18n/gsw.json6
-rw-r--r--UserMerge/i18n/he.json4
-rw-r--r--UserMerge/i18n/hr.json8
-rw-r--r--UserMerge/i18n/hsb.json7
-rw-r--r--UserMerge/i18n/ht.json2
-rw-r--r--UserMerge/i18n/hu.json2
-rw-r--r--UserMerge/i18n/ia.json18
-rw-r--r--UserMerge/i18n/id.json7
-rw-r--r--UserMerge/i18n/ie.json2
-rw-r--r--UserMerge/i18n/it.json19
-rw-r--r--UserMerge/i18n/ja.json20
-rw-r--r--UserMerge/i18n/jv.json8
-rw-r--r--UserMerge/i18n/ka.json9
-rw-r--r--UserMerge/i18n/km.json1
-rw-r--r--UserMerge/i18n/ko.json26
-rw-r--r--UserMerge/i18n/ksh.json26
-rw-r--r--UserMerge/i18n/ku-latn.json3
-rw-r--r--UserMerge/i18n/ml.json17
-rw-r--r--UserMerge/i18n/mr.json4
-rw-r--r--UserMerge/i18n/ms.json7
-rw-r--r--UserMerge/i18n/nb.json23
-rw-r--r--UserMerge/i18n/nds-nl.json7
-rw-r--r--UserMerge/i18n/nl.json23
-rw-r--r--UserMerge/i18n/nn.json2
-rw-r--r--UserMerge/i18n/oc.json14
-rw-r--r--UserMerge/i18n/pl.json10
-rw-r--r--UserMerge/i18n/pms.json6
-rw-r--r--UserMerge/i18n/pt-br.json29
-rw-r--r--UserMerge/i18n/pt.json14
-rw-r--r--UserMerge/i18n/qqq.json8
-rw-r--r--UserMerge/i18n/ro.json9
-rw-r--r--UserMerge/i18n/roa-tara.json17
-rw-r--r--UserMerge/i18n/ru.json2
-rw-r--r--UserMerge/i18n/rue.json3
-rw-r--r--UserMerge/i18n/si.json6
-rw-r--r--UserMerge/i18n/sk.json2
-rw-r--r--UserMerge/i18n/sl.json17
-rw-r--r--UserMerge/i18n/sr-ec.json48
-rw-r--r--UserMerge/i18n/sr-el.json8
-rw-r--r--UserMerge/i18n/stq.json2
-rw-r--r--UserMerge/i18n/szl.json2
-rw-r--r--UserMerge/i18n/te.json1
-rw-r--r--UserMerge/i18n/tl.json6
-rw-r--r--UserMerge/i18n/tr.json15
-rw-r--r--UserMerge/i18n/ug-arab.json3
-rw-r--r--UserMerge/i18n/uk.json19
-rw-r--r--UserMerge/i18n/uz.json3
-rw-r--r--UserMerge/i18n/vi.json11
-rw-r--r--UserMerge/i18n/yue.json1
-rw-r--r--UserMerge/i18n/zh-hant.json6
-rw-r--r--UserMerge/install.settings4
-rw-r--r--UserMerge/package.json15
-rw-r--r--UserMerge/phpcs.xml17
-rw-r--r--UserMerge/tests/phpunit/MergeUserTest.php101
-rw-r--r--UserMerge/version6
98 files changed, 1544 insertions, 910 deletions
diff --git a/UserMerge/.gitignore b/UserMerge/.gitignore
index c798be9c..322df574 100644
--- a/UserMerge/.gitignore
+++ b/UserMerge/.gitignore
@@ -1,5 +1,24 @@
-.svn
-*~
+.idea
+node_modules/
+composer.lock
+vendor/
+
+# Editors
*.kate-swp
+*~
+\#*#
+.#*
.*.swp
-.idea
+.project
+.buildpath
+.classpath
+.settings
+cscope.files
+cscope.out
+*.orig
+## NetBeans
+nbproject*
+project.index
+## Sublime
+sublime-*
+sftp-config.json
diff --git a/UserMerge/.gitreview b/UserMerge/.gitreview
index fa5457f2..cd2409f4 100644
--- a/UserMerge/.gitreview
+++ b/UserMerge/.gitreview
@@ -2,5 +2,5 @@
host=gerrit.wikimedia.org
port=29418
project=mediawiki/extensions/UserMerge
-defaultbranch=REL1_24
+track=1
defaultrebase=0 \ No newline at end of file
diff --git a/UserMerge/CODE_OF_CONDUCT.md b/UserMerge/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000..d8e5d087
--- /dev/null
+++ b/UserMerge/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/UserMerge/COPYING b/UserMerge/COPYING
new file mode 100644
index 00000000..d159169d
--- /dev/null
+++ b/UserMerge/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/UserMerge/Gruntfile.js b/UserMerge/Gruntfile.js
new file mode 100644
index 00000000..78ba56a3
--- /dev/null
+++ b/UserMerge/Gruntfile.js
@@ -0,0 +1,33 @@
+/*!
+ * Grunt file
+ *
+ * @package UserMerge
+ */
+
+/*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/**'
+ ]
+ }
+ } );
+
+ grunt.registerTask( 'test', [ 'jsonlint', 'banana', 'jshint' ] );
+ grunt.registerTask( 'default', 'test' );
+};
diff --git a/UserMerge/IUserMergeLogger.php b/UserMerge/IUserMergeLogger.php
index f468b3ea..da9febc7 100644
--- a/UserMerge/IUserMergeLogger.php
+++ b/UserMerge/IUserMergeLogger.php
@@ -18,4 +18,4 @@ interface IUserMergeLogger {
* @param User $oldUser
*/
public function addDeleteEntry( User $perfomer, User $oldUser );
-} \ No newline at end of file
+}
diff --git a/UserMerge/MergeUser.php b/UserMerge/MergeUser.php
index 70630ef5..6b3e09d5 100644
--- a/UserMerge/MergeUser.php
+++ b/UserMerge/MergeUser.php
@@ -1,11 +1,11 @@
<?php
+use MediaWiki\MediaWikiServices;
/**
* Contains the actual database backend logic for merging users
*
*/
class MergeUser {
-
/**
* @var User
*/
@@ -16,19 +16,36 @@ class MergeUser {
*/
private $logger;
+ /** @var integer */
+ private $flags;
+
+ const USE_MULTI_COMMIT = 1; // allow begin/commit; useful for jobs or CLI mode
+
+ /**
+ * @param User $oldUser
+ * @param User $newUser
+ * @param IUserMergeLogger $logger
+ * @param int $flags Bitfield (Supports MergeUser::USE_*)
+ */
public function __construct(
User $oldUser,
User $newUser,
- IUserMergeLogger $logger
+ IUserMergeLogger $logger,
+ $flags = 0
) {
$this->newUser = $newUser;
$this->oldUser = $oldUser;
$this->logger = $logger;
+ $this->flags = $flags;
}
- public function merge( User $performer ) {
+ /**
+ * @param User $performer
+ * @param string $fnameTrxOwner
+ */
+ public function merge( User $performer, $fnameTrxOwner = __METHOD__ ) {
$this->mergeEditcount();
- $this->mergeDatabaseTables();
+ $this->mergeDatabaseTables( $fnameTrxOwner );
$this->logger->addMergeEntry( $performer, $this->oldUser, $this->newUser );
}
@@ -38,7 +55,7 @@ class MergeUser {
*
* @return array Array of failed page moves, see MergeUser::movePages
*/
- public function delete( User $performer, /* callable */ $msg ) {
+ public function delete( User $performer, /* callable */ $msg ) {
$failed = $this->movePages( $performer, $msg );
$this->deleteUser();
$this->logger->addDeleteEntry( $performer, $this->oldUser );
@@ -51,32 +68,130 @@ class MergeUser {
*/
private function mergeEditcount() {
$dbw = wfGetDB( DB_MASTER );
+ $dbw->startAtomic( __METHOD__ );
$totalEdits = $dbw->selectField(
'user',
'SUM(user_editcount)',
- array( 'user_id' => array( $this->newUser->getId(), $this->oldUser->getId() ) ),
+ [ 'user_id' => [ $this->newUser->getId(), $this->oldUser->getId() ] ],
__METHOD__
);
- $totalEdits = intval( $totalEdits );
+ $totalEdits = (int)$totalEdits;
# don't run queries if neither user has any edits
if ( $totalEdits > 0 ) {
# update new user with total edits
$dbw->update( 'user',
- array( 'user_editcount' => $totalEdits ),
- array( 'user_id' => $this->newUser->getId() ),
+ [ 'user_editcount' => $totalEdits ],
+ [ 'user_id' => $this->newUser->getId() ],
__METHOD__
);
# clear old user's edits
$dbw->update( 'user',
- array( 'user_editcount' => 0 ),
- array( 'user_id' => $this->oldUser->getId() ),
+ [ 'user_editcount' => 0 ],
+ [ 'user_id' => $this->oldUser->getId() ],
__METHOD__
);
}
+
+ $dbw->endAtomic( __METHOD__ );
+ }
+
+ private function mergeBlocks( DatabaseBase $dbw ) {
+ $dbw->startAtomic( __METHOD__ );
+
+ // Pull blocks directly from master
+ $rows = $dbw->select(
+ 'ipblocks',
+ '*',
+ [
+ 'ipb_user' => [ $this->oldUser->getId(), $this->newUser->getId() ],
+ ]
+ );
+
+ $newBlock = false;
+ $oldBlock = false;
+ foreach ( $rows as $row ) {
+ if ( (int)$row->ipb_user === $this->oldUser->getId() ) {
+ $oldBlock = $row;
+ } elseif ( (int)$row->ipb_user === $this->newUser->getId() ) {
+ $newBlock = $row;
+ }
+ }
+
+ if ( !$newBlock && !$oldBlock ) {
+ // No one is blocked, yaaay
+ $dbw->endAtomic( __METHOD__ );
+ return;
+ } elseif ( $newBlock && !$oldBlock ) {
+ // Only the new user is blocked, so nothing to do.
+ $dbw->endAtomic( __METHOD__ );
+ return;
+ } elseif ( $oldBlock && !$newBlock ) {
+ // Just move the old block to the new username
+ $dbw->update(
+ 'ipblocks',
+ [ 'ipb_user' => $this->newUser->getId() ],
+ [ 'ipb_id' => $oldBlock->ipb_id ],
+ __METHOD__
+ );
+ $dbw->endAtomic( __METHOD__ );
+ return;
+ }
+
+ // Okay, lets pick the "strongest" block, and re-apply it to
+ // the new user.
+ $oldBlockObj = Block::newFromRow( $oldBlock );
+ $newBlockObj = Block::newFromRow( $newBlock );
+
+ $winner = $this->chooseBlock( $oldBlockObj, $newBlockObj );
+ if ( $winner->getId() === $newBlockObj->getId() ) {
+ $oldBlockObj->delete();
+ } else { // Old user block won
+ $newBlockObj->delete(); // Delete current new block
+ $dbw->update(
+ 'ipblocks',
+ [ 'ipb_user' => $this->newUser->getId() ],
+ [ 'ipb_id' => $winner->getId() ],
+ __METHOD__
+ );
+ }
+
+ $dbw->endAtomic( __METHOD__ );
+ }
+
+ /**
+ * @param Block $b1
+ * @param Block $b2
+ * @return Block
+ */
+ private function chooseBlock( Block $b1, Block $b2 ) {
+ // First, see if one is longer than the other.
+ if ( $b1->getExpiry() !== $b2->getExpiry() ) {
+ // This works for infinite blocks because:
+ // "infinity" > "20141024234513"
+ if ( $b1->getExpiry() > $b2->getExpiry() ) {
+ return $b1;
+ } else {
+ return $b2;
+ }
+ }
+
+ // Next check what they block, in order
+ foreach ( [ 'createaccount', 'sendemail', 'editownusertalk' ] as $action ) {
+ if ( $b1->prevents( $action ) xor $b2->prevents( $action ) ) {
+ if ( $b1->prevents( $action ) ) {
+ return $b1;
+ } else {
+ return $b2;
+ }
+ }
+ }
+
+ // Give up, return the second one.
+ return $b2;
}
/**
@@ -84,115 +199,167 @@ class MergeUser {
*
* Merges database references from one user ID or username to another user ID or username
* to preserve referential integrity.
+ *
+ * @param string $fnameTrxOwner
*/
- private function mergeDatabaseTables() {
+ private function mergeDatabaseTables( $fnameTrxOwner ) {
// Fields to update with the format:
- // array( tableName, idField, textField, 'options' => array() )
- // textField and options are optional
- $updateFields = array(
- array( 'archive', 'ar_user', 'ar_user_text' ),
- array( 'revision', 'rev_user', 'rev_user_text' ),
- array( 'filearchive', 'fa_user', 'fa_user_text' ),
- array( 'image', 'img_user', 'img_user_text' ),
- array( 'oldimage', 'oi_user', 'oi_user_text' ),
- array( 'recentchanges', 'rc_user', 'rc_user_text' ),
- array( 'logging', 'log_user' ),
- array( 'ipblocks', 'ipb_user', 'ipb_address' ),
- array( 'ipblocks', 'ipb_by', 'ipb_by_text' ),
- array( 'watchlist', 'wl_user' ),
- array( 'user_groups', 'ug_user', 'options' => array( 'IGNORE' ) ),
- array( 'user_properties', 'up_user', 'options' => array( 'IGNORE' ) ),
- array( 'user_former_groups', 'ufg_user', 'options' => array( 'IGNORE' ) ),
- );
-
- wfRunHooks( 'UserMergeAccountFields', array( &$updateFields ) );
+ // [
+ // tableName, idField, textField,
+ // 'batchKey' => unique field, 'options' => array(), 'db' => DatabaseBase
+ // ];
+ // textField, batchKey, db, and options are optional
+ $updateFields = [
+ [ 'archive', 'ar_user', 'ar_user_text', 'batchKey' => 'ar_id' ],
+ [ 'revision', 'rev_user', 'rev_user_text', 'batchKey' => 'rev_id' ],
+ [ 'filearchive', 'fa_user', 'fa_user_text', 'batchKey' => 'fa_id' ],
+ [ 'image', 'img_user', 'img_user_text', 'batchKey' => 'img_name' ],
+ [ 'oldimage', 'oi_user', 'oi_user_text', 'batchKey' => 'oi_archive_name' ],
+ [ 'recentchanges', 'rc_user', 'rc_user_text', 'batchKey' => 'rc_id' ],
+ [ 'logging', 'log_user', 'batchKey' => 'log_id' ],
+ [ 'ipblocks', 'ipb_by', 'ipb_by_text', 'batchKey' => 'ipb_id' ],
+ [ 'watchlist', 'wl_user', 'batchKey' => 'wl_title' ],
+ [ 'user_groups', 'ug_user', 'options' => [ 'IGNORE' ] ],
+ [ 'user_properties', 'up_user', 'options' => [ 'IGNORE' ] ],
+ [ 'user_former_groups', 'ufg_user', 'options' => [ 'IGNORE' ] ],
+ ];
+
+ Hooks::run( 'UserMergeAccountFields', [ &$updateFields ] );
$dbw = wfGetDB( DB_MASTER );
+ $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+ $ticket = $lbFactory->getEmptyTransactionTicket( __METHOD__ );
+
+ $this->deduplicateWatchlistEntries( $dbw );
+ $this->mergeBlocks( $dbw );
- $this->deduplicateWatchlistEntries();
+ if ( $this->flags & self::USE_MULTI_COMMIT ) {
+ // Flush prior writes; this actives the non-transaction path in the loop below.
+ $lbFactory->commitMasterChanges( $fnameTrxOwner );
+ }
foreach ( $updateFields as $fieldInfo ) {
- $options = isset( $fieldInfo['options'] ) ? $fieldInfo['options'] : array();
+ $options = isset( $fieldInfo['options'] ) ? $fieldInfo['options'] : [];
unset( $fieldInfo['options'] );
+ $db = isset( $fieldInfo['db'] ) ? $fieldInfo['db'] : $dbw;
+ unset( $fieldInfo['db'] );
$tableName = array_shift( $fieldInfo );
$idField = array_shift( $fieldInfo );
- $dbw->update(
- $tableName,
- array( $idField => $this->newUser->getId() ) + array_fill_keys( $fieldInfo, $this->newUser->getName() ),
- array( $idField => $this->oldUser->getId() ),
- __METHOD__,
- $options
- );
+ $keyField = isset( $fieldInfo['batchKey'] ) ? $fieldInfo['batchKey'] : null;
+ unset( $fieldInfo['batchKey'] );
+
+ if ( $db->trxLevel() || $keyField === null ) {
+ // Can't batch/wait when in a transaction or when no batch key is given
+ $db->update(
+ $tableName,
+ [ $idField => $this->newUser->getId() ]
+ + array_fill_keys( $fieldInfo, $this->newUser->getName() ),
+ [ $idField => $this->oldUser->getId() ],
+ __METHOD__,
+ $options
+ );
+ } else {
+ $limit = 200;
+ do {
+ $checkSince = microtime( true );
+ // Note that UPDATE with ORDER BY + LIMIT is not well supported.
+ // Grab a batch of values on a mostly unique column for this user ID.
+ $res = $db->select(
+ $tableName,
+ [ $keyField ],
+ [ $idField => $this->oldUser->getId() ],
+ __METHOD__,
+ [ 'LIMIT' => $limit ]
+ );
+ $keyValues = [];
+ foreach ( $res as $row ) {
+ $keyValues[] = $row->$keyField;
+ }
+ // Update only those rows with the given column values
+ if ( count( $keyValues ) ) {
+ $db->update(
+ $tableName,
+ [ $idField => $this->newUser->getId() ]
+ + array_fill_keys( $fieldInfo, $this->newUser->getName() ),
+ [ $idField => $this->oldUser->getId(), $keyField => $keyValues ],
+ __METHOD__,
+ $options
+ );
+ }
+ // Wait for replication to catch up
+ $opts = [ 'ifWritesSince' => $checkSince ];
+ $lbFactory->commitAndWaitForReplication( __METHOD__, $ticket, $opts );
+ } while ( count( $keyValues ) >= $limit );
+ }
}
- $dbw->delete( 'user_newtalk', array( 'user_id' => $this->oldUser->getId() ) );
+ $dbw->delete( 'user_newtalk', [ 'user_id' => $this->oldUser->getId() ] );
- wfRunHooks( 'MergeAccountFromTo', array( &$this->oldUser, &$this->newUser ) );
+ Hooks::run( 'MergeAccountFromTo', [ &$this->oldUser, &$this->newUser ] );
}
/**
* Deduplicate watchlist entries
* which old (merge-from) and new (merge-to) users are watching
+ *
+ * @param DatabaseBase $dbw
*/
- private function deduplicateWatchlistEntries() {
-
- $dbw = wfGetDB( DB_MASTER );
- $dbw->begin( __METHOD__ );
+ private function deduplicateWatchlistEntries( $dbw ) {
+ $dbw->startAtomic( __METHOD__ );
+ // Get all titles both watched by the old and new user accounts.
+ // Avoid using self-joins as this fails on temporary tables (e.g. unit tests).
+ // See https://bugs.mysql.com/bug.php?id=10327.
+ $titlesToDelete = [];
$res = $dbw->select(
- array(
- 'w1' => 'watchlist',
- 'w2' => 'watchlist'
- ),
- array(
- 'w2.wl_namespace',
- 'w2.wl_title'
- ),
- array(
- 'w1.wl_user' => $this->newUser->getID(),
- 'w2.wl_user' => $this->oldUser->getID()
- ),
+ 'watchlist',
+ [ 'wl_namespace', 'wl_title' ],
+ [ 'wl_user' => $this->oldUser->getId() ],
__METHOD__,
- array( 'FOR UPDATE' ),
- array(
- 'w2' => array(
- 'INNER JOIN',
- array(
- 'w1.wl_namespace = w2.wl_namespace',
- 'w1.wl_title = w2.wl_title'
- ),
- )
- )
+ [ 'FOR UPDATE' ]
);
+ foreach ( $res as $row ) {
+ $titlesToDelete[$row->wl_namespace . "|" . $row->wl_title] = false;
+ }
+ $res = $dbw->select(
+ 'watchlist',
+ [ 'wl_namespace', 'wl_title' ],
+ [ 'wl_user' => $this->newUser->getId() ],
+ __METHOD__,
+ [ 'FOR UPDATE' ]
+ );
+ foreach ( $res as $row ) {
+ $key = $row->wl_namespace . "|" . $row->wl_title;
+ if ( isset( $titlesToDelete[$key] ) ) {
+ $titlesToDelete[$key] = true;
+ }
+ }
+ $dbw->freeResult( $res );
+ $titlesToDelete = array_filter( $titlesToDelete );
- # Construct an array to delete all watched pages of the old user
- # which the new user already watches
- $conds = array();
-
- foreach ( $res as $result ) {
+ $conds = [];
+ foreach ( $titlesToDelete as $tuple ) {
+ list( $ns, $dbKey ) = explode( "|", $tuple, 2 );
$conds[] = $dbw->makeList(
- array(
- 'wl_user' => $this->oldUser->getID(),
- 'wl_namespace' => $result->wl_namespace,
- 'wl_title' => $result->wl_title
- ),
+ [
+ 'wl_user' => $this->oldUser->getId(),
+ 'wl_namespace' => $ns,
+ 'wl_title' => $dbKey
+ ],
LIST_AND
);
}
- if ( empty( $conds ) ) {
- $dbw->commit( __METHOD__ );
- return;
+ if ( count( $conds ) ) {
+ # Perform a multi-row delete
+ $dbw->delete(
+ 'watchlist',
+ $dbw->makeList( $conds, LIST_OR ),
+ __METHOD__
+ );
}
- # Perform a multi-row delete
- $dbw->delete(
- 'watchlist',
- $dbw->makeList( $conds, LIST_OR ),
- __METHOD__
- );
-
- $dbw->commit( __METHOD__ );
+ $dbw->endAtomic( __METHOD__ );
}
/**
@@ -218,54 +385,61 @@ class MergeUser {
# select all user pages and sub-pages
$dbr = wfGetDB( DB_SLAVE );
- $pages = $dbr->select( 'page',
- array( 'page_namespace', 'page_title' ),
- array(
- 'page_namespace' => array( NS_USER, NS_USER_TALK ),
- $dbr->makeList( array(
- 'page_title' => $dbr->buildLike( $oldusername->getDBkey() . '/', $dbr->anyString() ),
- 'page_title' => $oldusername->getDBkey()
- ),
- LIST_OR
- )
- )
+ $pages = $dbr->select(
+ 'page',
+ [ 'page_namespace', 'page_title' ],
+ [
+ 'page_namespace' => [ NS_USER, NS_USER_TALK ],
+ 'page_title' . $dbr->buildLike( $oldusername->getDBkey() . '/', $dbr->anyString() )
+ . ' OR page_title = ' . $dbr->addQuotes( $oldusername->getDBkey() ),
+ ]
);
+ $message = function ( /* ... */ ) use ( $msg ) {
+ return call_user_func_array( $msg, func_get_args() );
+ };
+
// Need to set $wgUser to attribute log properly.
$oldUser = $wgUser;
$wgUser = $performer;
- $failedMoves = array();
+ $failedMoves = [];
foreach ( $pages as $row ) {
-
$oldPage = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
$newPage = Title::makeTitleSafe( $row->page_namespace,
preg_replace( '!^[^/]+!', $newusername->getDBkey(), $row->page_title ) );
- if ( $this->newUser->getName() === "Anonymous" ) { # delete ALL old pages
+ if ( $this->newUser->getName() === 'Anonymous' ) { # delete ALL old pages
if ( $oldPage->exists() ) {
$oldPageArticle = new Article( $oldPage, 0 );
- $oldPageArticle->doDeleteArticle( $msg( 'usermerge-autopagedelete' )->inContentLanguage()->text() );
+ $oldPageArticle->doDeleteArticle(
+ $message( 'usermerge-autopagedelete' )->inContentLanguage()->text()
+ );
}
} elseif ( $newPage->exists()
&& !$oldPage->isValidMoveTarget( $newPage )
- && $newPage->getLength() > 0 ) { # delete old pages that can't be moved
-
+ && $newPage->getLength() > 0
+ ) {
+ # delete old pages that can't be moved
$oldPageArticle = new Article( $oldPage, 0 );
- $oldPageArticle->doDeleteArticle( $msg( 'usermerge-autopagedelete' )->inContentLanguage()->text() );
+ $oldPageArticle->doDeleteArticle(
+ $message( 'usermerge-autopagedelete' )->inContentLanguage()->text()
+ );
} else { # move content to new page
# delete target page if it exists and is blank
if ( $newPage->exists() ) {
$newPageArticle = new Article( $newPage, 0 );
- $newPageArticle->doDeleteArticle( $msg( 'usermerge-autopagedelete' )->inContentLanguage()->text() );
+ $newPageArticle->doDeleteArticle(
+ $message( 'usermerge-autopagedelete' )->inContentLanguage()->text()
+ );
}
# move to target location
$errors = $oldPage->moveTo(
$newPage,
false,
- $msg(
+ $message(
'usermerge-move-log',
$oldusername->getText(),
$newusername->getText() )->inContentLanguage()->text()
@@ -277,13 +451,15 @@ class MergeUser {
# check if any pages link here
$res = $dbr->selectField( 'pagelinks',
'pl_title',
- array( 'pl_title' => $this->oldUser->getName() ),
+ [ 'pl_title' => $this->oldUser->getName() ],
__METHOD__
);
if ( !$dbr->numRows( $res ) ) {
# nothing links here, so delete unmoved page/redirect
$oldPageArticle = new Article( $oldPage, 0 );
- $oldPageArticle->doDeleteArticle( $msg( 'usermerge-autopagedelete' )->inContentLanguage()->text() );
+ $oldPageArticle->doDeleteArticle(
+ $message( 'usermerge-autopagedelete' )->inContentLanguage()->text()
+ );
}
}
}
@@ -293,7 +469,6 @@ class MergeUser {
return $failedMoves;
}
-
/**
* Function to delete users following a successful mergeUser call.
*
@@ -303,27 +478,38 @@ class MergeUser {
private function deleteUser() {
$dbw = wfGetDB( DB_MASTER );
- $tablesToDelete = array(
+ /**
+ * Format is: table => user_id column
+ *
+ * If you want it to use a different db object:
+ * table => array( user_id colum, 'db' => DatabaseBase );
+ */
+ $tablesToDelete = [
'user_groups' => 'ug_user',
'user_properties' => 'up_user',
'user_former_groups' => 'ufg_user',
- );
+ ];
- wfRunHooks( 'UserMergeAccountDeleteTables', array( &$tablesToDelete ) );
+ Hooks::run( 'UserMergeAccountDeleteTables', [ &$tablesToDelete ] );
$tablesToDelete['user'] = 'user_id'; // Make sure this always set and last
foreach ( $tablesToDelete as $table => $field ) {
- $dbw->delete(
+ // Check if a different database object was passed (Echo or Flow)
+ if ( is_array( $field ) ) {
+ $db = isset( $field['db'] ) ? $field['db'] : $dbw;
+ $field = $field[0];
+ } else {
+ $db = $dbw;
+ }
+ $db->delete(
$table,
- array( $field => $this->oldUser->getId() )
+ [ $field => $this->oldUser->getId() ]
);
}
- wfRunHooks( 'DeleteAccount', array( &$this->oldUser ) );
+ Hooks::run( 'DeleteAccount', [ &$this->oldUser ] );
- DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'users' => -1 ) ) );
+ DeferredUpdates::addUpdate( SiteStatsUpdate::factory( [ 'users' => -1 ] ) );
}
-
-
}
diff --git a/UserMerge/SpecialUserMerge.php b/UserMerge/SpecialUserMerge.php
index 6ec194fd..9af48d51 100644
--- a/UserMerge/SpecialUserMerge.php
+++ b/UserMerge/SpecialUserMerge.php
@@ -16,7 +16,7 @@
*/
class SpecialUserMerge extends FormSpecialPage {
- function __construct() {
+ public function __construct() {
parent::__construct( 'UserMerge', 'usermerge' );
}
@@ -25,36 +25,46 @@ class SpecialUserMerge extends FormSpecialPage {
*/
protected function getFormFields() {
$us = $this;
- return array(
- 'olduser' => array(
+ return [
+ 'olduser' => [
'type' => 'text',
'label-message' => 'usermerge-olduser',
'required' => true,
- 'validation-callback' => function( $val ) use ( $us ) {
+ 'validation-callback' => function ( $val ) use ( $us ) {
+ // only pass strings to User::newFromName
+ if ( !is_string( $val ) ) {
+ return true;
+ }
+
$key = $us->validateOldUser( $val );
if ( is_string( $key ) || is_array( $key ) ) {
return $us->msg( $key )->escaped();
}
return true;
},
- ),
- 'newuser' => array(
+ ],
+ 'newuser' => [
'type' => 'text',
'required' => true,
'label-message' => 'usermerge-newuser',
- 'validation-callback' => function( $val ) use ( $us ) {
+ 'validation-callback' => function ( $val ) use ( $us ) {
+ // only pass strings to User::newFromName
+ if ( !is_string( $val ) ) {
+ return true;
+ }
+
$key = $us->validateNewUser( $val );
if ( is_string( $key ) ) {
return $us->msg( $key )->escaped();
}
return true;
},
- ),
- 'delete' => array(
+ ],
+ 'delete' => [
'type' => 'check',
'label-message' => 'usermerge-deleteolduser',
- ),
- );
+ ],
+ ];
}
/**
@@ -68,10 +78,10 @@ class SpecialUserMerge extends FormSpecialPage {
return 'usermerge-badolduser';
}
if ( $this->getUser()->getId() === $oldUser->getId() ) {
- return array( 'usermerge-noselfdelete', $this->getUser()->getName() );
+ return [ 'usermerge-noselfdelete', $this->getUser()->getName() ];
}
if ( count( array_intersect( $oldUser->getGroups(), $wgUserMergeProtectedGroups ) ) ) {
- return array( 'usermerge-protectedgroup', $oldUser->getName() );
+ return [ 'usermerge-protectedgroup', $oldUser->getName() ];
}
return true;
@@ -123,7 +133,7 @@ class SpecialUserMerge extends FormSpecialPage {
// Validation passed, let's merge the user now.
$um = new MergeUser( $oldUser, $newUser, new UserMergeLogger() );
- $um->merge( $this->getUser() );
+ $um->merge( $this->getUser(), __METHOD__ );
$out = $this->getOutput();
@@ -134,7 +144,7 @@ class SpecialUserMerge extends FormSpecialPage {
);
if ( $data['delete'] ) {
- $failed = $um->delete( $this->getUser(), array( $this, 'msg' ) );
+ $failed = $um->delete( $this->getUser(), [ $this, 'msg' ] );
$out->addWikiMsg(
'usermerge-userdeleted', $oldUser->getName(), $oldUser->getId()
);
@@ -142,13 +152,14 @@ class SpecialUserMerge extends FormSpecialPage {
if ( $failed ) {
// Output an error message for failed moves
$out->addHTML( Html::openElement( 'ul' ) );
+ $linkRenderer = $this->getLinkRenderer();
foreach ( $failed as $oldTitleText => $newTitle ) {
$oldTitle = Title::newFromText( $oldTitleText );
$out->addHTML(
- Html::rawElement( 'li', array(),
+ Html::rawElement( 'li', [],
$this->msg( 'usermerge-page-unmoved' )->rawParams(
- Linker::link( $oldTitle ),
- Linker::link( $newTitle )
+ $linkRenderer->makeLink( $oldTitle ),
+ $linkRenderer->makeLink( $newTitle )
)->escaped()
)
);
@@ -159,10 +170,8 @@ class SpecialUserMerge extends FormSpecialPage {
return Status::newGood();
}
-}
-/**
- * Former class name, for backwards compatability
- * @deprecated
- */
-class UserMerge extends SpecialUserMerge {}
+ protected function getGroupName() {
+ return 'users';
+ }
+}
diff --git a/UserMerge/UserMerge.alias.php b/UserMerge/UserMerge.alias.php
index 7e6a864c..b5aef905 100644
--- a/UserMerge/UserMerge.alias.php
+++ b/UserMerge/UserMerge.alias.php
@@ -5,276 +5,280 @@
* @file
* @ingroup Extensions
*/
-// @codingStandardsIgnoreFile
-$specialPageAliases = array();
+$specialPageAliases = [];
/** English (English) */
-$specialPageAliases['en'] = array(
- 'UserMerge' => array( 'UserMerge' ),
-);
+$specialPageAliases['en'] = [
+ 'UserMerge' => [ 'UserMerge' ],
+];
/** Arabic (العربية) */
-$specialPageAliases['ar'] = array(
- 'UserMerge' => array( 'دمج_مستخدم' ),
-);
+$specialPageAliases['ar'] = [
+ 'UserMerge' => [ 'دمج_مستخدم' ],
+];
-/** Egyptian Spoken Arabic (مصرى) */
-$specialPageAliases['arz'] = array(
- 'UserMerge' => array( 'دمج_يوزر' ),
-);
+/** Egyptian Arabic (مصرى) */
+$specialPageAliases['arz'] = [
+ 'UserMerge' => [ 'دمج_يوزر' ],
+];
/** Assamese (অসমীয়া) */
-$specialPageAliases['as'] = array(
- 'UserMerge' => array( 'সদস্য_একত্ৰীকৰণ_কৰক' ),
-);
+$specialPageAliases['as'] = [
+ 'UserMerge' => [ 'সদস্য_একত্ৰীকৰণ_কৰক' ],
+];
+
+/** Western Balochi (بلوچی رخشانی) */
+$specialPageAliases['bgn'] = [
+ 'UserMerge' => [ 'کارمرزوکی_ادغام' ],
+];
/** Banjar (Bahasa Banjar) */
-$specialPageAliases['bjn'] = array(
- 'UserMerge' => array( 'Panggabungan_pamakai' ),
-);
+$specialPageAliases['bjn'] = [
+ 'UserMerge' => [ 'Panggabungan_pamakai' ],
+];
/** Breton (brezhoneg) */
-$specialPageAliases['br'] = array(
- 'UserMerge' => array( 'KendeuziñImplijer' ),
-);
+$specialPageAliases['br'] = [
+ 'UserMerge' => [ 'KendeuziñImplijer' ],
+];
/** Bosnian (bosanski) */
-$specialPageAliases['bs'] = array(
- 'UserMerge' => array( 'SpajanjeKorisnika' ),
-);
+$specialPageAliases['bs'] = [
+ 'UserMerge' => [ 'SpajanjeKorisnika' ],
+];
/** буряад (буряад) */
-$specialPageAliases['bxr'] = array(
- 'UserMerge' => array( 'Хэрэглэгшые_нэгэдхэхэ' ),
-);
+$specialPageAliases['bxr'] = [
+ 'UserMerge' => [ 'Хэрэглэгшые_нэгэдхэхэ' ],
+];
/** Min Dong Chinese (Mìng-dĕ̤ng-ngṳ̄) */
-$specialPageAliases['cdo'] = array(
- 'UserMerge' => array( '用戶合併' ),
-);
+$specialPageAliases['cdo'] = [
+ 'UserMerge' => [ '用戶合併' ],
+];
/** German (Deutsch) */
-$specialPageAliases['de'] = array(
- 'UserMerge' => array( 'Benutzerkonten_vereinigen' ),
-);
+$specialPageAliases['de'] = [
+ 'UserMerge' => [ 'Benutzerkonten_vereinigen' ],
+];
/** Zazaki (Zazaki) */
-$specialPageAliases['diq'] = array(
- 'UserMerge' => array( 'KarberaPétewrke' ),
-);
+$specialPageAliases['diq'] = [
+ 'UserMerge' => [ 'KarberaPétewrke' ],
+];
/** Lower Sorbian (dolnoserbski) */
-$specialPageAliases['dsb'] = array(
- 'UserMerge' => array( 'Wužywarjow zjadnośiś' ),
-);
+$specialPageAliases['dsb'] = [
+ 'UserMerge' => [ 'Wužywarjow zjadnośiś' ],
+];
/** Greek (Ελληνικά) */
-$specialPageAliases['el'] = array(
- 'UserMerge' => array( 'ΣυγχώνευσηΧρήστη' ),
-);
+$specialPageAliases['el'] = [
+ 'UserMerge' => [ 'ΣυγχώνευσηΧρήστη' ],
+];
/** Esperanto (Esperanto) */
-$specialPageAliases['eo'] = array(
- 'UserMerge' => array( 'Kunigi_uzanton' ),
-);
+$specialPageAliases['eo'] = [
+ 'UserMerge' => [ 'Kunigi_uzanton' ],
+];
/** Spanish (español) */
-$specialPageAliases['es'] = array(
- 'UserMerge' => array( 'FusionarUsuario', 'Fusionar_usuario' ),
-);
+$specialPageAliases['es'] = [
+ 'UserMerge' => [ 'FusionarUsuario', 'Fusionar_usuario' ],
+];
/** Persian (فارسی) */
-$specialPageAliases['fa'] = array(
- 'UserMerge' => array( 'ادغام_کاربر' ),
-);
+$specialPageAliases['fa'] = [
+ 'UserMerge' => [ 'ادغام_کاربر' ],
+];
/** Finnish (suomi) */
-$specialPageAliases['fi'] = array(
- 'UserMerge' => array( 'Tunnusten_yhdistäminen' ),
-);
+$specialPageAliases['fi'] = [
+ 'UserMerge' => [ 'Tunnusten_yhdistäminen' ],
+];
/** French (français) */
-$specialPageAliases['fr'] = array(
- 'UserMerge' => array( 'Fusionner_les_utilisateurs', 'FusionnerLesUtilisateurs', 'Fusionner_utilisateurs', 'FusionnerUtilisateurs', 'Fusionner_utilisateur', 'FusionnerUtilisateur' ),
-);
+$specialPageAliases['fr'] = [
+ 'UserMerge' => [ 'Fusionner_les_utilisateurs', 'FusionnerLesUtilisateurs', 'Fusionner_utilisateurs', 'FusionnerUtilisateurs', 'Fusionner_utilisateur', 'FusionnerUtilisateur' ],
+];
-/** Franco-Provençal (arpetan) */
-$specialPageAliases['frp'] = array(
- 'UserMerge' => array( 'Fusionar_los_usanciérs', 'FusionarLosUsanciérs' ),
-);
+/** Arpitan (arpetan) */
+$specialPageAliases['frp'] = [
+ 'UserMerge' => [ 'Fusionar_los_usanciérs', 'FusionarLosUsanciérs' ],
+];
/** Galician (galego) */
-$specialPageAliases['gl'] = array(
- 'UserMerge' => array( 'Fusionar_o_usuario', 'Fusionar_usuario', 'Fusionar_a_usuaria', 'Fusionar_usuaria' ),
-);
+$specialPageAliases['gl'] = [
+ 'UserMerge' => [ 'Fusionar_o_usuario', 'Fusionar_usuario', 'Fusionar_a_usuaria', 'Fusionar_usuaria' ],
+];
/** Swiss German (Alemannisch) */
-$specialPageAliases['gsw'] = array(
- 'UserMerge' => array( 'Benutzer_zämmefiere' ),
-);
+$specialPageAliases['gsw'] = [
+ 'UserMerge' => [ 'Benutzer_zämmefiere' ],
+];
/** Hebrew (עברית) */
-$specialPageAliases['he'] = array(
- 'UserMerge' => array( 'מיזוג_משתמשים' ),
-);
+$specialPageAliases['he'] = [
+ 'UserMerge' => [ 'מיזוג_משתמשים' ],
+];
/** Upper Sorbian (hornjoserbsce) */
-$specialPageAliases['hsb'] = array(
- 'UserMerge' => array( 'Wužiwarjow_zjednoćić' ),
-);
+$specialPageAliases['hsb'] = [
+ 'UserMerge' => [ 'Wužiwarjow_zjednoćić' ],
+];
/** Haitian (Kreyòl ayisyen) */
-$specialPageAliases['ht'] = array(
- 'UserMerge' => array( 'FizyonItilizatè' ),
-);
+$specialPageAliases['ht'] = [
+ 'UserMerge' => [ 'FizyonItilizatè' ],
+];
/** Hungarian (magyar) */
-$specialPageAliases['hu'] = array(
- 'UserMerge' => array( 'Felhasználók_egyesítése' ),
-);
+$specialPageAliases['hu'] = [
+ 'UserMerge' => [ 'Felhasználók_egyesítése' ],
+];
/** Interlingua (interlingua) */
-$specialPageAliases['ia'] = array(
- 'UserMerge' => array( 'Fusionar_usatores' ),
-);
+$specialPageAliases['ia'] = [
+ 'UserMerge' => [ 'Fusionar_usatores' ],
+];
/** Indonesian (Bahasa Indonesia) */
-$specialPageAliases['id'] = array(
- 'UserMerge' => array( 'Penggabungan_pengguna', 'PenggabunganPengguna' ),
-);
+$specialPageAliases['id'] = [
+ 'UserMerge' => [ 'Penggabungan_pengguna', 'PenggabunganPengguna' ],
+];
/** Italian (italiano) */
-$specialPageAliases['it'] = array(
- 'UserMerge' => array( 'UnisciUtenze' ),
-);
+$specialPageAliases['it'] = [
+ 'UserMerge' => [ 'UnisciUtenze' ],
+];
/** Japanese (日本語) */
-$specialPageAliases['ja'] = array(
- 'UserMerge' => array( '利用者の統合' ),
-);
+$specialPageAliases['ja'] = [
+ 'UserMerge' => [ '利用者の統合' ],
+];
/** Korean (한국어) */
-$specialPageAliases['ko'] = array(
- 'UserMerge' => array( '사용자병합' ),
-);
+$specialPageAliases['ko'] = [
+ 'UserMerge' => [ '사용자병합' ],
+];
/** Colognian (Ripoarisch) */
-$specialPageAliases['ksh'] = array(
- 'UserMerge' => array( 'Metmaacher zosammelääje', 'Medmaacher zosammelääje' ),
-);
+$specialPageAliases['ksh'] = [
+ 'UserMerge' => [ 'Metmaacher zosammelääje', 'Medmaacher zosammelääje' ],
+];
/** Cornish (kernowek) */
-$specialPageAliases['kw'] = array(
- 'UserMerge' => array( 'KesunyaDevnydhyer' ),
-);
+$specialPageAliases['kw'] = [
+ 'UserMerge' => [ 'KesunyaDevnydhyer' ],
+];
/** Luxembourgish (Lëtzebuergesch) */
-$specialPageAliases['lb'] = array(
- 'UserMerge' => array( 'Benotzerkonten_zesummeleeën' ),
-);
+$specialPageAliases['lb'] = [
+ 'UserMerge' => [ 'Benotzerkonten_zesummeleeën' ],
+];
/** Macedonian (македонски) */
-$specialPageAliases['mk'] = array(
- 'UserMerge' => array( 'СпојКорисник' ),
-);
+$specialPageAliases['mk'] = [
+ 'UserMerge' => [ 'СпојКорисник' ],
+];
/** Malayalam (മലയാളം) */
-$specialPageAliases['ml'] = array(
- 'UserMerge' => array( 'ഉപയോക്തൃലയനം' ),
-);
+$specialPageAliases['ml'] = [
+ 'UserMerge' => [ 'ഉപയോക്തൃലയനം' ],
+];
/** Marathi (मराठी) */
-$specialPageAliases['mr'] = array(
- 'UserMerge' => array( 'सदस्यविलीनीकरण' ),
-);
+$specialPageAliases['mr'] = [
+ 'UserMerge' => [ 'सदस्यविलीनीकरण' ],
+];
/** Norwegian Bokmål (norsk bokmål) */
-$specialPageAliases['nb'] = array(
- 'UserMerge' => array( 'Slå_sammen_brukere' ),
-);
+$specialPageAliases['nb'] = [
+ 'UserMerge' => [ 'Slå_sammen_brukere' ],
+];
/** Low Saxon (Netherlands) (Nedersaksies) */
-$specialPageAliases['nds-nl'] = array(
- 'UserMerge' => array( 'Gebrukers_samenvoegen' ),
-);
+$specialPageAliases['nds-nl'] = [
+ 'UserMerge' => [ 'Gebrukers_samenvoegen' ],
+];
/** Dutch (Nederlands) */
-$specialPageAliases['nl'] = array(
- 'UserMerge' => array( 'GebruikersSamenvoegen' ),
-);
+$specialPageAliases['nl'] = [
+ 'UserMerge' => [ 'GebruikersSamenvoegen' ],
+];
/** Occitan (occitan) */
-$specialPageAliases['oc'] = array(
- 'UserMerge' => array( 'Fusionar los utilizaires', 'FusionarLosUtilizaire', 'Fusionar utilizaires', 'FusionarUtilizaires', 'Fusionar utilizaire', 'FusionarUtilizaire' ),
-);
+$specialPageAliases['oc'] = [
+ 'UserMerge' => [ 'Fusionar los utilizaires', 'FusionarLosUtilizaire', 'Fusionar utilizaires', 'FusionarUtilizaires', 'Fusionar utilizaire', 'FusionarUtilizaire' ],
+];
/** Portuguese (português) */
-$specialPageAliases['pt'] = array(
- 'UserMerge' => array( 'Fundir_utilizadores' ),
-);
+$specialPageAliases['pt'] = [
+ 'UserMerge' => [ 'Fundir_utilizadores' ],
+];
/** Brazilian Portuguese (português do Brasil) */
-$specialPageAliases['pt-br'] = array(
- 'UserMerge' => array( 'Fundir_contas' ),
-);
+$specialPageAliases['pt-br'] = [
+ 'UserMerge' => [ 'Fundir_contas' ],
+];
/** Sanskrit (संस्कृतम्) */
-$specialPageAliases['sa'] = array(
- 'UserMerge' => array( 'सदस्यसंयोग' ),
-);
+$specialPageAliases['sa'] = [
+ 'UserMerge' => [ 'सदस्यसंयोग' ],
+];
/** Sicilian (sicilianu) */
-$specialPageAliases['scn'] = array(
- 'UserMerge' => array( 'UnisciUtenze' ),
-);
+$specialPageAliases['scn'] = [
+ 'UserMerge' => [ 'UnisciUtenze' ],
+];
/** Slovak (slovenčina) */
-$specialPageAliases['sk'] = array(
- 'UserMerge' => array( 'ZlúčeniePoužívateľov' ),
-);
+$specialPageAliases['sk'] = [
+ 'UserMerge' => [ 'ZlúčeniePoužívateľov' ],
+];
/** Telugu (తెలుగు) */
-$specialPageAliases['te'] = array(
- 'UserMerge' => array( 'సభ్యునివిలీనం' ),
-);
+$specialPageAliases['te'] = [
+ 'UserMerge' => [ 'సభ్యునివిలీనం' ],
+];
/** Thai (ไทย) */
-$specialPageAliases['th'] = array(
- 'UserMerge' => array( 'รวมบัญชีผู้ใช้' ),
-);
+$specialPageAliases['th'] = [
+ 'UserMerge' => [ 'รวมบัญชีผู้ใช้' ],
+];
/** Tagalog (Tagalog) */
-$specialPageAliases['tl'] = array(
- 'UserMerge' => array( 'Pagsasanib_ng_tagagamit' ),
-);
+$specialPageAliases['tl'] = [
+ 'UserMerge' => [ 'Pagsasanib_ng_tagagamit' ],
+];
/** Turkish (Türkçe) */
-$specialPageAliases['tr'] = array(
- 'UserMerge' => array( 'KullanıcıBirleştir' ),
-);
+$specialPageAliases['tr'] = [
+ 'UserMerge' => [ 'KullanıcıBirleştir' ],
+];
/** Ukrainian (українська) */
-$specialPageAliases['uk'] = array(
- 'UserMerge' => array( 'Об\'єднання_користувачів' ),
-);
+$specialPageAliases['uk'] = [
+ 'UserMerge' => [ 'Об\'єднання_користувачів' ],
+];
/** Vietnamese (Tiếng Việt) */
-$specialPageAliases['vi'] = array(
- 'UserMerge' => array( 'Hợp_nhất_người_dùng' ),
-);
+$specialPageAliases['vi'] = [
+ 'UserMerge' => [ 'Hợp_nhất_người_dùng' ],
+];
/** Yiddish (ייִדיש) */
-$specialPageAliases['yi'] = array(
- 'UserMerge' => array( 'צונויפגיסן_באניצער' ),
-);
+$specialPageAliases['yi'] = [
+ 'UserMerge' => [ 'צונויפגיסן_באניצער' ],
+];
/** Simplified Chinese (中文(简体)‎) */
-$specialPageAliases['zh-hans'] = array(
- 'UserMerge' => array( '合并用户' ),
-);
+$specialPageAliases['zh-hans'] = [
+ 'UserMerge' => [ '合并用户' ],
+];
/** Traditional Chinese (中文(繁體)‎) */
-$specialPageAliases['zh-hant'] = array(
- 'UserMerge' => array( '合併使用者' ),
-); \ No newline at end of file
+$specialPageAliases['zh-hant'] = [
+ 'UserMerge' => [ '合併使用者' ],
+];
diff --git a/UserMerge/UserMerge.i18n.php b/UserMerge/UserMerge.i18n.php
deleted file mode 100644
index 841f8561..00000000
--- a/UserMerge/UserMerge.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim12288ddd27589de3' ) ) {
- function wfJsonI18nShim12288ddd27589de3( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim12288ddd27589de3';
-}
diff --git a/UserMerge/UserMerge.php b/UserMerge/UserMerge.php
deleted file mode 100644
index b8596e47..00000000
--- a/UserMerge/UserMerge.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-/** \file
- * \brief Contains setup code for the User Merge and Delete Extension.
- */
-
-/**
- * UserMerge Extension for MediaWiki
- *
- * Copyright (C) Tim Laqua
- * Copyright (C) Thomas Gries
- * Copyright (C) Matthew April
- *
- * 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
- */
-
-# Not a valid entry point, skip unless MEDIAWIKI is defined
-if ( !defined( 'MEDIAWIKI' ) ) {
- die( 'This file is a MediaWiki extension, it is not a valid entry point' );
-}
-
-$wgExtensionCredits['specialpage'][] = array(
- 'path' => __FILE__,
- 'name' => 'User Merge and Delete',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:User_Merge_and_Delete',
- 'author' => array( 'Tim Laqua', 'Thomas Gries', 'Matthew April' ),
- 'descriptionmsg' => 'usermerge-desc',
- 'version' => '1.9.0'
-);
-
-// Configuration options:
-
-/**
- * Whether to allow users to delete other users.
- * If false, users with the "usermerge" right
- * will only be able to merge other users.
- *
- * @var bool
- */
-$wgUserMergeEnableDelete = true;
-
-
-$wgAvailableRights[] = 'usermerge';
-# $wgGroupPermissions['bureaucrat']['usermerge'] = true;
-
-$dir = __DIR__ . '/';
-$wgAutoloadClasses['SpecialUserMerge'] = $dir . 'SpecialUserMerge.php';
-$wgAutoloadClasses['UserMerge'] = $dir . 'SpecialUserMerge.php'; // back-compat
-$wgAutoloadClasses['MergeUser'] = $dir . 'MergeUser.php';
-$wgAutoloadClasses['IUserMergeLogger'] = $dir . 'IUserMergeLogger.php';
-$wgAutoloadClasses['UserMergeLogger'] = $dir . 'UserMergeLogger.php';
-
-
-$wgMessagesDirs['UserMerge'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['UserMerge'] = $dir . 'UserMerge.i18n.php';
-$wgExtensionMessagesFiles['UserMergeAlias'] = $dir . 'UserMerge.alias.php';
-$wgSpecialPages['UserMerge'] = 'UserMerge';
-$wgSpecialPageGroups['UserMerge'] = 'users';
-
-$wgUserMergeProtectedGroups = array( "sysop" );
-
-# Add a new log type
-$wgLogTypes[] = 'usermerge';
-$wgLogNames['usermerge'] = 'usermerge-logpage';
-$wgLogHeaders['usermerge'] = 'usermerge-logpagetext';
-$wgLogActions['usermerge/mergeuser'] = 'usermerge-success-log';
-$wgLogActions['usermerge/deleteuser'] = 'usermerge-userdeleted-log';
diff --git a/UserMerge/UserMergeLogger.php b/UserMerge/UserMergeLogger.php
index 6e050bfe..89f38ac4 100644
--- a/UserMerge/UserMergeLogger.php
+++ b/UserMerge/UserMergeLogger.php
@@ -16,10 +16,11 @@ class UserMergeLogger implements IUserMergeLogger {
'mergeuser',
$performer->getUserPage(),
'',
- array(
+ [
$oldUser->getName(), $oldUser->getId(),
$newUser->getName(), $newUser->getId()
- )
+ ],
+ $performer
);
}
@@ -36,7 +37,8 @@ class UserMergeLogger implements IUserMergeLogger {
'deleteuser',
$perfomer->getUserPage(),
'',
- array( $oldUser->getName(), $oldUser->getId() )
+ [ $oldUser->getName(), $oldUser->getId() ],
+ $perfomer
);
}
}
diff --git a/UserMerge/composer.json b/UserMerge/composer.json
new file mode 100644
index 00000000..7c63cad5
--- /dev/null
+++ b/UserMerge/composer.json
@@ -0,0 +1,14 @@
+{
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "0.9.2",
+ "mediawiki/mediawiki-codesniffer": "0.12.0",
+ "jakub-onderka/php-console-highlighter": "0.3.2"
+ },
+ "scripts": {
+ "fix": "phpcbf",
+ "test": [
+ "parallel-lint . --exclude vendor",
+ "phpcs -p -s"
+ ]
+ }
+}
diff --git a/UserMerge/extension.json b/UserMerge/extension.json
new file mode 100644
index 00000000..ddca3eb4
--- /dev/null
+++ b/UserMerge/extension.json
@@ -0,0 +1,56 @@
+{
+ "name": "UserMerge",
+ "version": "1.10.1",
+ "author": [
+ "Tim Laqua",
+ "Thomas Gries",
+ "Matthew April"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:UserMerge",
+ "descriptionmsg": "usermerge-desc",
+ "license-name": "GPL-2.0+",
+ "requires": {
+ "MediaWiki": ">= 1.28.0"
+ },
+ "type": "specialpage",
+ "AvailableRights": [
+ "usermerge"
+ ],
+ "SpecialPages": {
+ "UserMerge": "SpecialUserMerge"
+ },
+ "LogTypes": [
+ "usermerge"
+ ],
+ "LogNames": {
+ "usermerge": "usermerge-logpage"
+ },
+ "LogHeaders": {
+ "usermerge": "usermerge-logpagetext"
+ },
+ "LogActions": {
+ "usermerge/mergeuser": "usermerge-success-log",
+ "usermerge/deleteuser": "usermerge-userdeleted-log"
+ },
+ "MessagesDirs": {
+ "UserMerge": [
+ "i18n"
+ ]
+ },
+ "ExtensionMessagesFiles": {
+ "UserMergeAlias": "UserMerge.alias.php"
+ },
+ "AutoloadClasses": {
+ "SpecialUserMerge": "SpecialUserMerge.php",
+ "MergeUser": "MergeUser.php",
+ "IUserMergeLogger": "IUserMergeLogger.php",
+ "UserMergeLogger": "UserMergeLogger.php"
+ },
+ "config": {
+ "UserMergeEnableDelete": true,
+ "UserMergeProtectedGroups": [
+ "sysop"
+ ]
+ },
+ "manifest_version": 1
+}
diff --git a/UserMerge/gitinfo.json b/UserMerge/gitinfo.json
new file mode 100644
index 00000000..86d4d6a1
--- /dev/null
+++ b/UserMerge/gitinfo.json
@@ -0,0 +1 @@
+{"headSHA1": "45465372c950653e260aa41e57522b4d58ab632a\n", "head": "45465372c950653e260aa41e57522b4d58ab632a\n", "remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/extensions/UserMerge", "branch": "45465372c950653e260aa41e57522b4d58ab632a\n", "headCommitDate": "1504241965"} \ No newline at end of file
diff --git a/UserMerge/i18n/af.json b/UserMerge/i18n/af.json
index a6b69575..0d4f2d60 100644
--- a/UserMerge/i18n/af.json
+++ b/UserMerge/i18n/af.json
@@ -18,13 +18,11 @@
"usermerge-badtoken": "Ongeldige wysigingsteken (\"edit token\")",
"usermerge-userdeleted": "$1 ($2) is verwyder.",
"usermerge-userdeleted-log": "Verwyderde gebruiker: $2 ($3)",
- "usermerge-updating": "Tabel $1 aan die verander ($2 na $3)",
"usermerge-success": "Versmelting van $1 ($2) na $3 ($4) is voltooi.",
"usermerge-success-log": "Gebruiker $2 ($3) is versmelt na $4 ($5)",
"usermerge-logpage": "Logboek van gebruikersversmeltings",
"usermerge-logpagetext": "Die is 'n logboek van gebruikersversmeltings.",
"usermerge-noselfdelete": "U kan nie uself verwyder of versmelt nie!",
- "usermerge-unmergable": "Hierdie gebruiker kan nie versmelt word nie. Die ID of naam is gesteld as nie versmeltbaar nie.",
"usermerge-protectedgroup": "Dit is nie moontlik om die gebruikers saam te voeg nie. Die gebruiker is in 'n beskermde groep.",
"right-usermerge": "Versmelt gebruikers"
}
diff --git a/UserMerge/i18n/aln.json b/UserMerge/i18n/aln.json
index b103dcad..991ad581 100644
--- a/UserMerge/i18n/aln.json
+++ b/UserMerge/i18n/aln.json
@@ -18,13 +18,11 @@
"usermerge-badtoken": "Pavlefshme redakto shenjë",
"usermerge-userdeleted": "$1 ($2) është fshirë.",
"usermerge-userdeleted-log": "përdorues Deleted: $2 ($3)",
- "usermerge-updating": "Tabela Përditësimi $1 ($2 në $3)",
"usermerge-success": "Merge nga $1 ($2) për $3 ($4), është i kompletuar.",
"usermerge-success-log": "User $2 ($3) bashkohen në $4 ($5)",
"usermerge-logpage": "Përdoruesi bashkojë log",
"usermerge-logpagetext": "Ky është një regjistër i përdoruesit bashkojë veprimet.",
"usermerge-noselfdelete": "Ju nuk mund të fshini ose përpuqni nga vetë!",
- "usermerge-unmergable": "Në pamundësi për të bashkuar nga përdoruesit - ID ose emër është përcaktuar si unmergable.",
"usermerge-protectedgroup": "Në pamundësi për të bashkuar nga përdoruesi - user është në një grup të mbrojtura.",
"right-usermerge": "Merge përdoruesit"
}
diff --git a/UserMerge/i18n/ar.json b/UserMerge/i18n/ar.json
index 903f850b..ba4a2c90 100644
--- a/UserMerge/i18n/ar.json
+++ b/UserMerge/i18n/ar.json
@@ -3,7 +3,9 @@
"authors": [
"Meno25",
"OsamaK",
- "روخو"
+ "روخو",
+ "محمد أحمد عبد الفتاح",
+ "ديفيد"
]
},
"usermerge": "دمج وحذف المستخدمين",
@@ -18,16 +20,15 @@
"usermerge-deleteolduser": "حذف المستخدم القديم",
"usermerge-submit": "دمج المستخدم",
"usermerge-badtoken": "نص تعديل غير صحيح",
- "usermerge-userdeleted": "$1($2) تم حذفه.",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) تم حذفه.",
"usermerge-userdeleted-log": "حذف المستخدم: $2($3)",
- "usermerge-updating": "تحديث $1 جدول ($2 إلى $3)",
- "usermerge-success": "الدمج من $1($2) إلى $3($4) اكتمل.",
- "usermerge-success-log": "المستخدم $2($3) تم دمجه مع $4($5)",
+ "usermerge-success": "الدمج من {{GENDER:$1|$1}} ($2) إلى{{GENDER:$3|$3}} ($4) اكتمل.",
+ "usermerge-success-log": "المستخدم {{GENDER:$2|$2}} ($3) تم دمجه مع {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "سجل دمج المستخدم",
"usermerge-logpagetext": "هذا سجل بأفعال دمج المستخدمين.",
- "usermerge-noselfdelete": "لا يمكنك حذف أو دمج من نفسك!",
- "usermerge-unmergable": "غير قادر على الدمج من مستخدم - الرقم أو الاسم تم تعريفه كغير قابل للدمج.",
- "usermerge-protectedgroup": "غير قادر على الدمج من المستخدم - المستخدم في مجموعة محمية.",
+ "usermerge-noselfdelete": "لا يمكنك حذف أو دمج {{GENDER:$1|نفسك}}!",
+ "usermerge-protectedgroup": "غير قادر على دمج {{GENDER:$1|المستخدم}}: المستخدم في مجموعة محمية.",
"right-usermerge": "دمج المستخدمين",
- "usermerge-page-deleted": "صفحة محذوفة $1"
+ "action-usermerge": "دمج المستخدمين",
+ "usermerge-page-unmoved": "تعذر نقل الصفحة $1 إلى $2."
}
diff --git a/UserMerge/i18n/arz.json b/UserMerge/i18n/arz.json
index 28ae5dd8..4b1854e9 100644
--- a/UserMerge/i18n/arz.json
+++ b/UserMerge/i18n/arz.json
@@ -19,13 +19,11 @@
"usermerge-badtoken": "نص تعديل غير صحيح",
"usermerge-userdeleted": "$1($2) تم حذفه.",
"usermerge-userdeleted-log": "حذف اليوزر: $2($3)",
- "usermerge-updating": "تحديث $1 جدول ($2 إلى $3)",
"usermerge-success": "الدمج من $1($2) إلى $3($4) اكتمل.",
"usermerge-success-log": "اليوزر $2($3) تم دمجه مع $4($5)",
"usermerge-logpage": "سجل دمج اليوزر",
"usermerge-logpagetext": "ده سجل بأفعال دمج اليوزرز.",
"usermerge-noselfdelete": "لا يمكنك حذف أو دمج من نفسك!",
- "usermerge-unmergable": "مش قادر يدمج من يوزر - الرقم أو الاسم تم تعريفه على انه مش قابل للدمج.",
"usermerge-protectedgroup": "مش قادر يدمج من اليوزر - اليوزر فى مجموعة محمية.",
"right-usermerge": "دمج اليوزرز"
}
diff --git a/UserMerge/i18n/ast.json b/UserMerge/i18n/ast.json
index 07d93ead..bdcbcf14 100644
--- a/UserMerge/i18n/ast.json
+++ b/UserMerge/i18n/ast.json
@@ -17,22 +17,17 @@
"usermerge-deleteolduser": "Desaniciar l'usuariu antiguu",
"usermerge-submit": "Fusionar usuariu",
"usermerge-badtoken": "Pase d'edición inválidu",
- "usermerge-userdeleted": "Desaniciáu l'usuariu $1 ($2).",
+ "usermerge-userdeleted": "Desanicióse {{GENDER:$1|l'usuariu|la usuaria}} $1 ($2).",
"usermerge-userdeleted-log": "Usuariu desaniciáu: $2 ($3)",
- "usermerge-updating": "Actualizando la tabla $1 ($2 a $3)",
- "usermerge-success": "La fusión dende $1 ($2) a {{GENDER:$3|$3}} ($4) ta completa.",
- "usermerge-success-log": "Usuariu $2 ($3) fusionáu con {{GENDER:$4|$4}} ($5)",
+ "usermerge-success": "La fusión dende {{GENDER:$1|$1}} ($2) a {{GENDER:$3|$3}} ($4) ta completa.",
+ "usermerge-success-log": "{{GENDER:$2|L'usuariu|La usuaria}} $2 ($3) fusionóse con {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Rexistru de fusión d'usuarios",
"usermerge-logpagetext": "Esti ye un rexistru d'aiciones de fusión d'usuarios.",
- "usermerge-noselfdelete": "¡Nun pue desaniciase o fusionar dende sigo mesmu!",
- "usermerge-unmergable": "Nun pue fusionar dende l'usuariu: La ID o'l nome definieronse como non fusionables.",
- "usermerge-protectedgroup": "Nun pue fusionase dende l'usuariu: L'usuariu ta nun grupu protexíu.",
+ "usermerge-noselfdelete": "¡Nun pues desaniciate o fusionate dende {{GENDER:$1|tu mesmu}}!",
+ "usermerge-protectedgroup": "Nun puede fusionase dende {{GENDER:$1|l'usuariu|la usuaria}}: Ta nun grupu protexíu.",
"right-usermerge": "Fusionar usuarios",
"action-usermerge": "fusionar usuarios",
- "usermerge-editcount-merge-success": "Amestando $1 {{PLURAL:$1|edición|ediciones}} del usuariu $2 a $3 {{PLURAL:$3|edición|ediciones}} del usuariu $4 ($5 {{PLURAL:$5|edición|ediciones}} dempués de fusionar)",
"usermerge-autopagedelete": "Desaniciao automáticamente al fusionar usuarios",
"usermerge-page-unmoved": "La páxina $1 nun pudo treslladase a $2.",
- "usermerge-page-moved": "La páxina $1 treslladóse a $2.",
- "usermerge-move-log": "Treslladóse la páxina automáticamente al fusionar al usuariu \"[[User:$1|$1]]\" en \"[[User:$2|{{GENDER:$2|$2}}]]\"",
- "usermerge-page-deleted": "Páxina \"$1\" desaniciada"
+ "usermerge-move-log": "Treslladóse la páxina automáticamente al fusionar al usuariu \"[[User:$1|$1]]\" en \"[[User:$2|{{GENDER:$2|$2}}]]\""
}
diff --git a/UserMerge/i18n/azb.json b/UserMerge/i18n/azb.json
new file mode 100644
index 00000000..ff5ae29a
--- /dev/null
+++ b/UserMerge/i18n/azb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alp Er Tunqa"
+ ]
+ },
+ "usermerge-logpage": "ایشلدن بیرلشدیرمه ژورنالی"
+}
diff --git a/UserMerge/i18n/be-tarask.json b/UserMerge/i18n/be-tarask.json
index c445fa90..2c978287 100644
--- a/UserMerge/i18n/be-tarask.json
+++ b/UserMerge/i18n/be-tarask.json
@@ -12,7 +12,7 @@
"usermerge-desc": "[[Special:UserMerge|Аб'ядноўвае спасылкі аднаго ўдзельніка на іншага]] ў базе зьвестак вікі — адначасова выдаляе старыя рахункі пасьля аб'яднаньня. Патрабуе правы на ''аб'яданьне рахункаў удзельнікаў''",
"usermerge-badolduser": "Няслушнае старое імя ўдзельніка",
"usermerge-badnewuser": "Няслушнае новае імя ўдзельніка",
- "usermerge-nonewuser": "Пустое новае імя ўдзельніка — мяркуецца аб'яднаньне з «$1».<br />\nНацісьніце «{{int:usermerge-submit}}» каб пагадзіцца.",
+ "usermerge-nonewuser": "Пустое новае імя ўдзельніка. Мяркуецца аб'яднаньне з «{{GENDER:$1|$1}}».<br />\nНацісьніце «{{int:usermerge-submit}}», каб пагадзіцца.",
"usermerge-noolduser": "Пустое старое імя ўдзельніка",
"usermerge-same-old-and-new-user": "Старое і новае імя ўдзельніка мусяць адрозьнівацца.",
"usermerge-fieldset": "Імёны ўдзельнікаў для аб'яднаньня",
@@ -21,21 +21,17 @@
"usermerge-deleteolduser": "Выдаліць стары рахунак удзельніка",
"usermerge-submit": "Аб'яднаць рахункі ўдзельнікаў",
"usermerge-badtoken": "Няслушны знак рэдагаваньня",
- "usermerge-userdeleted": "$1 ($2) быў выдалены.",
+ "usermerge-userdeleted": "$1 ($2) {{GENDER:$1|быў выдалены|была выдаленая}}.",
"usermerge-userdeleted-log": "Выдалены рахунак удзельніка: $2 ($3)",
- "usermerge-updating": "Абнаўленьне табліцы $1 ($2 да $3)",
- "usermerge-success": "Аб'яднаньне $1 ($2) з {{GENDER:$3|$3}} ($4) скончанае.",
+ "usermerge-success": "Аб'яднаньне {{GENDER:$1|$1}} ($2) з {{GENDER:$3|$3}} ($4) скончанае.",
"usermerge-success-log": "{{GENDER:$2|Удзельнік|Удзельніца}} $2 ($3) {{GENDER:$2|аб’яднаны|аб’яднаная}} з $4 ($5)",
"usermerge-logpage": "Журнал аб’яднаньня рахункаў удзельнікаў",
"usermerge-logpagetext": "Гэта журнал аб’яднаньня рахункаў удзельнікаў.",
- "usermerge-noselfdelete": "Вы ня можаце выдаліць ці аб'яднаць уласны рахунак!",
- "usermerge-unmergable": "Немагчыма аб'яднаць рахунак удзельніка — ідэнтыфікатар ці імя былі пазначаны як неаб'яднальныя.",
- "usermerge-protectedgroup": "Немагчыма аб'яднаць рахунак удзельніка — удзельнік знаходзіцца ў абароненай групе.",
+ "usermerge-noselfdelete": "Вы ня можаце выдаліць ці аб’яднаць {{GENDER:$1|уласны рахунак}}!",
+ "usermerge-protectedgroup": "Немагчыма аб’яднаць рахунак {{GENDER:$1|удзельніка|удзельніцы}}: {{GENDER:$1|ён|яна}} знаходзіцца ў абароненай групе.",
"right-usermerge": "аб'яднаньне рахункаў удзельнікаў",
"action-usermerge": "аб’ядноўваць удзельнікаў",
"usermerge-autopagedelete": "Аўтаматычна выдалены падчас аб’яднаньня рахункаў ўдзельнікаў",
"usermerge-page-unmoved": "Старонка $1 ня можа быць перанесеная ў $2.",
- "usermerge-page-moved": "Старонка $1 перанесеная ў $2.",
- "usermerge-move-log": "Аўтаматычна перанесеная старонка падчас аб’яднаньня рахунку ўдзельніка «[[User:$1|$1]]» з «[[User:$2|$2]]»",
- "usermerge-page-deleted": "Выдаленая старонка $1"
+ "usermerge-move-log": "Аўтаматычна перанесеная старонка падчас аб’яднаньня рахунку ўдзельніка «[[User:$1|$1]]» з «[[User:$2|{{GENDER:$2|$2}}]]»"
}
diff --git a/UserMerge/i18n/bg.json b/UserMerge/i18n/bg.json
index c819b92c..c0d3f3fc 100644
--- a/UserMerge/i18n/bg.json
+++ b/UserMerge/i18n/bg.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "DCLXVI"
+ "DCLXVI",
+ "Termininja"
]
},
"usermerge": "Сливане и изтриване на потребители",
@@ -21,7 +22,7 @@
"usermerge-logpage": "Дневник на потребителските сливания",
"usermerge-logpagetext": "Тази страница съдържа дневник на потребителските сливания.",
"usermerge-noselfdelete": "Не е възможно да изтривате или сливате от себе си!",
- "usermerge-unmergable": "Сливането от потребителя е невъзможно - името или ID е отбелязано като несливаемо.",
"usermerge-protectedgroup": "Невъзможно е да се извърши сливане от потребител - потребителят е в защитена група.",
- "right-usermerge": "сливане на потребители"
+ "right-usermerge": "сливане на потребители",
+ "action-usermerge": "сливане на потребителски сметки"
}
diff --git a/UserMerge/i18n/bn.json b/UserMerge/i18n/bn.json
index c388cb6d..67ef192e 100644
--- a/UserMerge/i18n/bn.json
+++ b/UserMerge/i18n/bn.json
@@ -3,28 +3,34 @@
"authors": [
"Bellayet",
"Zaheen",
- "Aftab1995"
+ "Aftab1995",
+ "Aftabuzzaman"
]
},
"usermerge": "ব্যবহারকারী একত্রীকরণ এবং মুছে ফেলা",
"usermerge-desc": "উইকি ডাটাবেজে [[Special:UserMerge|একজন ব্যবহারকারী থেকে অপর ব্যবহারকারীর প্রতি নির্দেশনাগুলি একত্রিত করে]] - এছাড়া একত্রীকরণের পরে পুরনো ব্যবহারকারীদের মুছে দেবে। বিশেষ ''usermerge'' অধিকার আবশ্যক",
- "usermerge-badolduser": "অবৈধ পুরনো ব্যবহারকারী নাম",
- "usermerge-badnewuser": "অবৈধ নতুন ব্যবহারকারী নাম",
- "usermerge-nonewuser": "খালি নতুন ব্যবহারকারী নাম - $1-এর সাথে একত্রীকরণ করা হচ্ছে ধরা হলে। <br />\"{{int:usermerge-submit}}\" ক্লিক করে সম্মতি দিন।",
- "usermerge-noolduser": "খালি পুরনো ব্যবহারকারী নাম",
- "usermerge-fieldset": "একত্রিক করার জন্য ব্যবহারকারীনাম",
- "usermerge-olduser": "পুরনো ব্যবহারকারী (যার থেকে একত্রীকরণ):",
- "usermerge-newuser": "নতুন ব্যবহারকারী (যার সাথে একত্রীকরণ)ঃ",
- "usermerge-deleteolduser": "পুরনো ব্যবহারকারী অপসারণ",
- "usermerge-submit": "ব্যবহারকারী একত্রিত করা হোক",
- "usermerge-badtoken": "সম্পাদনা টোকেন অবৈধ",
- "usermerge-userdeleted": "$1 ($2) মুছে ফেলা হয়েছে।",
- "usermerge-userdeleted-log": "ব্যবহারকারী মুছে ফেলে হয়েছে: $2 ($3)",
- "usermerge-success": "$1 ($2) থেকে {{GENDER:$3|$3}} ($4)-এ একত্রীকরণ সম্পন্ন হয়েছে।",
- "usermerge-success-log": "ব্যবহারকারী $2 ($3)-কে {{GENDER:$4|$4}} ($5)-এর সাথে একত্রিত করা হয়েছে",
+ "usermerge-badolduser": "পুরনো ব্যবহারকারী নাম অবৈধ।",
+ "usermerge-badnewuser": "নতুন ব্যবহারকারী নাম অবৈধ।",
+ "usermerge-nonewuser": "নতুন ব্যবহারকারী নাম খালি। \"{{GENDER:$1|$1}}\"-এর সাথে একত্রীকরণ করা হচ্ছে ধরা হল।<br />সম্মতি দিতে \"{{int:usermerge-submit}}\" ক্লিক করুন।",
+ "usermerge-noolduser": "পুরনো ব্যবহারকারী নাম খালি।",
+ "usermerge-same-old-and-new-user": "পুরনো এবং নতুন ব্যবহারকারী নাম স্বতন্ত্র হতে হবে।",
+ "usermerge-fieldset": "একত্রীত করার জন্য ব্যবহারকারী নাম",
+ "usermerge-olduser": "পুরনো ব্যবহারকারী (যার থেকে একত্রীকরণ হবে):",
+ "usermerge-newuser": "নতুন ব্যবহারকারী (যার সাথে একত্রীকরণ হবে):",
+ "usermerge-deleteolduser": "পুরনো ব্যবহারকারী অপসারণ করুন",
+ "usermerge-submit": "ব্যবহারকারী একত্রীত করুন",
+ "usermerge-badtoken": "সম্পাদনা টোকেন অবৈধ।",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) মুছে ফেলা হয়েছে।",
+ "usermerge-userdeleted-log": "অপসারিত ব্যবহারকারী: $2 ($3)",
+ "usermerge-success": "{{GENDER:$1|$1}} ($2) থেকে {{GENDER:$3|$3}} ($4)-এ একত্রীকরণ সম্পন্ন হয়েছে।",
+ "usermerge-success-log": "ব্যবহারকারী {{GENDER:$2|$2}} ($3)-কে {{GENDER:$4|$4}} ($5)-এর সাথে একত্রিত করা হয়েছে",
"usermerge-logpage": "ব্যবহারকারী একত্রীকরণ লগ",
"usermerge-logpagetext": "এটি ব্যবহারকারী একত্রীকরনের একটি লগ।",
- "usermerge-noselfdelete": "আপনি নিজের ব্যবহারকারী নাম মুছে ফেলতে বা এটি থেকে অন্য নামে একত্রিত করতে পারবেন না!",
- "usermerge-protectedgroup": "ব্যবহারকারী নাম থেকে একত্রিত করা যায়নি - ব্যবহারকারীটি একটি সুরক্ষিত দলে আছেন।",
- "right-usermerge": "ব্যবহারকারী একত্রিত করা হোক"
+ "usermerge-noselfdelete": "আপনি {{GENDER:$1|নিজের}} ব্যবহারকারী নাম মুছে ফেলতে বা এটি থেকে অন্য নামে একত্রিত করতে পারবেন না!",
+ "usermerge-protectedgroup": "{{GENDER:$1|ব্যবহারকারী}} থেকে একত্রিত করা যায়নি: ব্যবহারকারীটি একটি সুরক্ষিত দলে আছেন।",
+ "right-usermerge": "ব্যবহারকারী একত্রীত করা",
+ "action-usermerge": "ব্যবহারকারী একত্রিত করার",
+ "usermerge-autopagedelete": "ব্যবহারকারী একত্রীত করার সময় স্বয়ংক্রিয়ভাবে অপসারিত",
+ "usermerge-page-unmoved": "$1 পাতাটি $2-এ সরিয়ে নেওয়া সম্ভব নয়।",
+ "usermerge-move-log": "ব্যবহারকারী \"[[User:$1|$1]]\" কে \"[[User:$2|{{GENDER:$2|$2}}]]\"-এ একত্রীত করার সময় স্বয়ংক্রিয়ভাবে পাতা স্থানান্তরিত"
}
diff --git a/UserMerge/i18n/br.json b/UserMerge/i18n/br.json
index 522642ff..0708be67 100644
--- a/UserMerge/i18n/br.json
+++ b/UserMerge/i18n/br.json
@@ -19,15 +19,12 @@
"usermerge-badtoken": "Jedouer aozañ direizh",
"usermerge-userdeleted": "Diverket eo bet $1 ($2).",
"usermerge-userdeleted-log": "Implijer diverket : $2($3)",
- "usermerge-updating": "Oc'h hizivaat an daolenn $1 (eus $2 da $3)",
"usermerge-success": "Kendeuzadenn adal $1 ($2) davet $3 ($4) kaset da benn vat.",
"usermerge-success-log": "Implijer $2 ($3) kendeuzet davet $4 ($5)",
"usermerge-logpage": "Marilh kendeuzadennoù an implijerien",
"usermerge-logpagetext": "Setu aze marilh kendeuzadennoù an implijerien.",
"usermerge-noselfdelete": "N'hallit ket diverkañ pe kendeuziñ adal pe davedoc'h hoc'h-unan",
- "usermerge-unmergable": "Dibosupl kendeuziñ adal un implijer - un niv. anaout pe un anv bet termenet evel digendeuzadus.",
"usermerge-protectedgroup": "Dibosupl kendeuziñ an implijer - emañ-eñ en ur strollad gwarezet",
"right-usermerge": "Kendeuziñ implijerien",
- "action-usermerge": "kendeuziñ implijerien",
- "usermerge-page-deleted": "Pajenn $1 diverket"
+ "action-usermerge": "kendeuziñ implijerien"
}
diff --git a/UserMerge/i18n/bs.json b/UserMerge/i18n/bs.json
index 67517ed5..05a3376f 100644
--- a/UserMerge/i18n/bs.json
+++ b/UserMerge/i18n/bs.json
@@ -1,14 +1,15 @@
{
"@metadata": {
"authors": [
- "CERminator"
+ "CERminator",
+ "Srdjan m"
]
},
"usermerge": "Spajanje i brisanje korisnika",
- "usermerge-desc": "[[Special:UserMerge|Spajanje referenci sa jednog na drugog kornisnika]] u wiki bazi podataka - također će obrisaiti stare korisnike nakon spajanja. Zahtjeva ''usermerge'' privilegije.",
+ "usermerge-desc": "[[Special:UserMerge|Spaja doprinose jednog korisnika na drugog]] u bazi podataka wikija – obrisat će i stare korisnike po spajanju. Zahtijeva pravo ''usermerge''",
"usermerge-badolduser": "Nevaljano staro korisničko ime",
"usermerge-badnewuser": "Nevaljano novo korisničko ime",
- "usermerge-nonewuser": "Prazno novo korisničko ime - pretpostavljam da se spaja na \"$1\".<br />\nKliknite na \"{{int:usermerge-submit}}\" za prihvatanje.",
+ "usermerge-nonewuser": "Upišite novo korisničko ime. Pretpostavljam da se spaja na \"{{GENDER:$1|$1}}\".<br />\nKliknite na \"{{int:usermerge-submit}}\" za prihvatanje.",
"usermerge-noolduser": "Prazno staro korisničko ime",
"usermerge-fieldset": "Korisnička imena za spajanje",
"usermerge-olduser": "Stari korisnik (spajanje sa):",
@@ -16,15 +17,13 @@
"usermerge-deleteolduser": "Obriši starog korisnika",
"usermerge-submit": "Spoji korisnika",
"usermerge-badtoken": "Nevaljan token izmjene",
- "usermerge-userdeleted": "$1 ($2) je obrisan.",
+ "usermerge-userdeleted": "{{GENDER:$1|Korisnik|Korisnica}} $1 ($2) {{GENDER:$1|obrisan|obrisana}} je.",
"usermerge-userdeleted-log": "Obrisani korisnik: $2 ($3)",
- "usermerge-updating": "Ažuriram $1 tabelu ($2 do $3)",
- "usermerge-success": "Spajanje sa $1 ($2) na $3 ($4) je završeno.",
- "usermerge-success-log": "Korisnik $2 ($3) spojen na $4 ($5)",
+ "usermerge-success": "Spajanje sa {{GENDER:$1|$1}} ($2) na {{GENDER:$3|$3}} ($4) je završeno.",
+ "usermerge-success-log": "{{GENDER:$2|Korisnik|Korisnica}} $2 ($3) {{GENDER:$2|spojen|spojena}} je sa {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Zapisnik spajanja korisnika",
"usermerge-logpagetext": "Ovo je zapisnik akcija spajanja korisnika.",
- "usermerge-noselfdelete": "Ne možete obrisati ili spajati od samog sebe!",
- "usermerge-unmergable": "Ne može se spajati od korisnika - ID ili naziv je definisan kao nespojiv.",
- "usermerge-protectedgroup": "Ne može se spajati od korisnika - korisnik je u zaštićenoj grupi.",
+ "usermerge-noselfdelete": "Ne možete se obrisati niti spojiti {{GENDER:$1|sami sa sobom}}!",
+ "usermerge-protectedgroup": "Ne mogu spojiti {{GENDER:$1|korisnika|korisnicu}} jer je u zaštićenoj grupi.",
"right-usermerge": "Spajanje korisnika"
}
diff --git a/UserMerge/i18n/ce.json b/UserMerge/i18n/ce.json
index 4ea3d858..c109c09a 100644
--- a/UserMerge/i18n/ce.json
+++ b/UserMerge/i18n/ce.json
@@ -4,7 +4,30 @@
"Умар"
]
},
+ "usermerge": "Декъашхойн дӀаяздарш вовшахтохар а, дӀадаха а",
+ "usermerge-desc": "[[Special:UserMerge|Декъашхочун тӀера кхечун тӀе]] викин базан чохь, шира декъашхой дӀабохар бу. Оьшу бакъо ''usermerge''",
+ "usermerge-badolduser": "Нийса йоцу декъашхочун шира цӀе",
+ "usermerge-badnewuser": "Нийса йоцу декъашхочун керла цӀе",
+ "usermerge-nonewuser": "Декъашхочун керла цӀе еса ю — вовшахтухучу хенахь «{{GENDER:$1|$1}}».<br />\nТӀетаӀае «{{int:usermerge-submit}}», дешдерг кхочушдан.",
+ "usermerge-noolduser": "Декъашхочун шира цӀе еса ю",
+ "usermerge-same-old-and-new-user": "Шира а керла цӀе башха хела еза.",
+ "usermerge-fieldset": "Вовшахтухуш долу декъашхойн дӀяздарш",
+ "usermerge-olduser": "Шира декъашхочун дӀаяздар (вовшахтоха):",
+ "usermerge-newuser": "Керла декъашхочун дӀаяздар (вовшахтоха):",
+ "usermerge-deleteolduser": "ДӀадаккха декъашхочун шира дӀаяздар",
+ "usermerge-submit": "декъашхой вовшахтохар",
"usermerge-badtoken": "Нисдаран билгало нийса яц",
"usermerge-userdeleted": "$1 ($2) {{GENDER:$1|дӀаяьккхина хилла}}.",
- "action-usermerge": "декъашхой цхьаьнатохар"
+ "usermerge-userdeleted-log": "Декъашхочун дӀаяздар $2 ($3) дӀадаьккхина",
+ "usermerge-success": "Вовшахтохар {{GENDER:$1|$1}} ($2) {{GENDER:$3|$3}} ($4) чекхдели.",
+ "usermerge-success-log": "{{GENDER:$2|Декъашхочун дӀаяздар}} $2 ($3) {{GENDER:$2|тоьхна}} {{GENDER:$4|$4}} ($5) тӀе",
+ "usermerge-logpage": "Декъашхой вовшахтохаран тептар",
+ "usermerge-logpagetext": "ХӀара декъашхой вовшахтохаран тептар ду.",
+ "usermerge-noselfdelete": "{{GENDER:$1|Хьайн декъашхочун дӀаяздар}} дӀадаккха я вовшахтоха хьа таро яц!",
+ "usermerge-protectedgroup": "{{GENDER:$1|Декъашхой}} вовшахтоха цало — декъашхо Ӏалашйина тобан юкъахь хилар бахьнехь.",
+ "right-usermerge": "декъашхой вовшахтохар",
+ "action-usermerge": "декъашхой цхьаьнатохар",
+ "usermerge-autopagedelete": "Декъашхой вовшахтоьхча авто. дӀайохуш ю",
+ "usermerge-page-unmoved": "АгӀона $1 цӀе → $2 хуьйцийла яц.",
+ "usermerge-move-log": "Автоматически цӀе хийцина декъашхочун дӀаяздар вовшахтоьхна дела «[[User:$1|$1]]» → «[[User:$2|$2]]»"
}
diff --git a/UserMerge/i18n/crh-cyrl.json b/UserMerge/i18n/crh-cyrl.json
new file mode 100644
index 00000000..4a3ac888
--- /dev/null
+++ b/UserMerge/i18n/crh-cyrl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Don Alessandro"
+ ]
+ },
+ "usermerge-page-unmoved": "$1 саифесининъ ады $2 оларакъ денъиштирилип оламай."
+}
diff --git a/UserMerge/i18n/crh-latn.json b/UserMerge/i18n/crh-latn.json
new file mode 100644
index 00000000..0a510727
--- /dev/null
+++ b/UserMerge/i18n/crh-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Don Alessandro"
+ ]
+ },
+ "usermerge-page-unmoved": "$1 saifesiniñ adı $2 olaraq deñiştirilip olamay."
+}
diff --git a/UserMerge/i18n/cs.json b/UserMerge/i18n/cs.json
index 0a9eb242..929542fd 100644
--- a/UserMerge/i18n/cs.json
+++ b/UserMerge/i18n/cs.json
@@ -18,22 +18,17 @@
"usermerge-deleteolduser": "Smazat původního uživatele",
"usermerge-submit": "Sloučit uživatele",
"usermerge-badtoken": "Neplatný editační token",
- "usermerge-userdeleted": "$1 ($2) byl smazán.",
+ "usermerge-userdeleted": "$1 ($2) {{GENDER:$1|byl smazán|byla smazána}}.",
"usermerge-userdeleted-log": "Smazaný uživatel: $2 ($3)",
- "usermerge-updating": "Aktualizuje se tabulka $1 ($2 na $3)",
- "usermerge-success": "Sloučení z $1 ($2) do $3 ($4) je dokončeno.",
- "usermerge-success-log": "{{GENDER:$4|Uživatel|Uživatelka}} $2 ($3) {{GENDER:$4|byl sloučen|byla sloučena}} do {{GENDER:$4|uživatele|uživatelky}} $4 ($5)",
+ "usermerge-success": "Sloučení z {{GENDER:$1|$1}} ($2) do {{GENDER:$3|$3}} ($4) je dokončeno.",
+ "usermerge-success-log": "{{GENDER:$2|Uživatel|Uživatelka}} $2 ($3) {{GENDER:$2|byl sloučen|byla sloučena}} do {{GENDER:$4|uživatele|uživatelky}} $4 ($5)",
"usermerge-logpage": "Kniha slučování uživatelů",
"usermerge-logpagetext": "Toto je záznam slučování uživatelů.",
- "usermerge-noselfdelete": "Nemůžete smazat nebo sloučit svůj vlastní účet!",
- "usermerge-unmergable": "Nebylo možné sloučit uživatele – zdrojové jméno nebo ID bylo definováno jako neslučitelné.",
- "usermerge-protectedgroup": "Nebylo možné sloučit uvedeného uživatele – uživatel je v chráněné skupině.",
+ "usermerge-noselfdelete": "{{GENDER:$1|Nemůžete}} smazat nebo sloučit svůj vlastní účet!",
+ "usermerge-protectedgroup": "Nebylo možné sloučit {{GENDER:$1|uvedeného uživatele|uvedenou uživatelku}} – uživatel je v chráněné skupině.",
"right-usermerge": "Slučování uživatelů",
"action-usermerge": "slučovat uživatele",
- "usermerge-editcount-merge-success2": "Počítadla editací uživatelů $1 a $2 sloučena, nový výsledný počet $3 {{PLURAL:$3|editace|editace|editací}}.",
"usermerge-autopagedelete": "Automaticky smazáno při sloučení uživatelů",
"usermerge-page-unmoved": "Stránku $1 nebylo možno přesunout na $2.",
- "usermerge-page-moved": "Stránka $1 byla přesunuta na $2.",
- "usermerge-move-log": "Automaticky přesunuto při sloučení {{GENDER:$1|uživatele|uživatelky}} „[[User:$1|$1]]“ do [[User:$2|$2]]“",
- "usermerge-page-deleted": "Stránka $1 smazána"
+ "usermerge-move-log": "Automaticky přesunuto při sloučení {{GENDER:$1|uživatele|uživatelky}} „[[User:$1|$1]]“ do [[User:$2|$2]]“"
}
diff --git a/UserMerge/i18n/de.json b/UserMerge/i18n/de.json
index 86c88486..857a236a 100644
--- a/UserMerge/i18n/de.json
+++ b/UserMerge/i18n/de.json
@@ -11,9 +11,9 @@
]
},
"usermerge": "Benutzerkonten zusammenführen und löschen",
- "usermerge-desc": "Ergänzt eine [[Special:UserMerge|Spezialseite]] zum Zusammenführen von Benutzerkonten und der anschließenden Löschung des alten Benutzerkontos in der Datenbank des Wikis",
- "usermerge-badolduser": "Ungültiger alter Benutzername",
- "usermerge-badnewuser": "Ungültiger neuer Benutzername",
+ "usermerge-desc": "Ergänzt eine [[Special:UserMerge|Spezialseite]] zum Zusammenführen von Benutzerkonten und der anschließenden Löschung des alten Benutzerkontos",
+ "usermerge-badolduser": "Der alte Benutzername ist ungültig.",
+ "usermerge-badnewuser": "Der neue Benutzername ist ungültig.",
"usermerge-nonewuser": "Es wurde kein neuer Benutzername angegeben. Daher wird eine Zusammenführung mit „{{GENDER:$1|$1}}“ angenommen.<br />\nZum Ausführen auf „{{int:usermerge-submit}}“ klicken.",
"usermerge-noolduser": "Es wurde kein neuer Benutzername angegeben.",
"usermerge-same-old-and-new-user": "Die alten und neuen Benutzernamen müssen unterschiedlich sein.",
@@ -29,11 +29,11 @@
"usermerge-success-log": "hat „{{GENDER:$2|$2}}“ ($3) mit „{{GENDER:$4|$4}}“ ($5) zusammengeführt",
"usermerge-logpage": "Benutzerkontenzusammenführungs-Logbuch",
"usermerge-logpagetext": "Dies ist das Logbuch der Benutzerkontenzusammenführungen.",
- "usermerge-noselfdelete": "Die Zusammenführung mit {{GENDER:$1|sich selbst}} ist nicht möglich.",
- "usermerge-protectedgroup": "Die Zusammenführung ist nicht möglich: {{GENDER:$1|Der Benutzer|Die Benutzerin}} befindet sich in einer geschützten Gruppe.",
+ "usermerge-noselfdelete": "Die Zusammenführung mit {{GENDER:$1|dem eigenen Benutzerkonto}} ist nicht möglich.",
+ "usermerge-protectedgroup": "Die Zusammenführung ist nicht möglich: {{GENDER:$1|Der Benutzer|Die Benutzerin}} befindet sich in einer hierfür geschützten Benutzergruppe.",
"right-usermerge": "Benutzerkonten zusammenführen",
"action-usermerge": "Benutzer zusammenzuführen",
"usermerge-autopagedelete": "Automatisch während der Benutzerkontenzusammenführung gelöscht",
"usermerge-page-unmoved": "Die Seite „$1“ konnte nicht nach „$2“ verschoben werden.",
- "usermerge-move-log": "Seite während der Benutzerkontenzusammenführung von „[[User:$1|$1]]“ nach „[[User:$2|{{GENDER:$2|$2}}]]“ automatisch verschoben"
+ "usermerge-move-log": "Die Seite wurde während der Benutzerkontenzusammenführung von „[[User:$1|$1]]“ nach „[[User:$2|{{GENDER:$2|$2}}]]“ automatisch verschoben"
}
diff --git a/UserMerge/i18n/diq.json b/UserMerge/i18n/diq.json
index 0be6e0e7..4b474479 100644
--- a/UserMerge/i18n/diq.json
+++ b/UserMerge/i18n/diq.json
@@ -2,14 +2,16 @@
"@metadata": {
"authors": [
"Erdemaslancan",
- "Marmase"
+ "Marmase",
+ "Mirzali",
+ "Kumkumuk",
+ "Asmen"
]
},
"usermerge-submit": "Karbera zewkerden",
"usermerge-userdeleted": "$1 ($2) besterna.",
"usermerge-userdeleted-log": "Karbero ke besteriya: $2 ($3)",
- "usermerge-updating": "Tabloy $1'i oyo ($2 ra hetê $3 ya) neweyêno",
+ "usermerge-logpage": "Qeydê bestnayışê karberi",
"right-usermerge": "Karberan zewkerden",
- "action-usermerge": "Karberan zewkerden",
- "usermerge-page-deleted": "$1 per besteriye"
+ "action-usermerge": "Karberan zewkerden"
}
diff --git a/UserMerge/i18n/dsb.json b/UserMerge/i18n/dsb.json
index edb9778a..67fd7961 100644
--- a/UserMerge/i18n/dsb.json
+++ b/UserMerge/i18n/dsb.json
@@ -19,20 +19,15 @@
"usermerge-badtoken": "Njepłaśiwy wobźěłowański token",
"usermerge-userdeleted": "$1 ($2) jo se wulašował.",
"usermerge-userdeleted-log": "Wulašowany wužywaŕ: $2 ($3)",
- "usermerge-updating": "Aktualizěrujo se tabela $1 ($2 do $3)",
"usermerge-success": "Zjadnosénje wot $1 ($2) z {{GENDER:$3|$3}} ($4) jo skóńcone.",
"usermerge-success-log": "Wužywaŕ $2 ($3) jo se z {{GENDER:$4|$4}} ($5) zjadnośił",
"usermerge-logpage": "Protokol wužywarskich zjadnośenjow",
"usermerge-logpagetext": "To jo protokol akcijow wužywarskich zjadnośenjow.",
"usermerge-noselfdelete": "Njamóžoš se ze sobu zjadnośiś!",
- "usermerge-unmergable": "Zjadnosénja wót wužywarja njemóžno - ID abo wužywarske mě jo se ako njezjadnośujobne definěrowane.",
"usermerge-protectedgroup": "Zjadnośenje wót wužywarja njemóžno - wužywaŕ jo w šćitanej kupce.",
"right-usermerge": "Wužywarjow zjadnośiś",
"action-usermerge": "wužywarjow zjadnośiś",
- "usermerge-editcount-merge-success": "$1 {{PLURAL:$1|změna|změnje|změny|změnow}} wužywarja $2 {{PLURAL:$1|pśidawa|pśidawatej|pśidawaju|pśidawa}} se $3 {{PLURAL:$3|změnje|změnoma|změnam}} wužywarja $4 ($5 {{PLURAL:$5|změna|změnje|změny|změnow}} pó zjadnośenju)",
"usermerge-autopagedelete": "Pśi zjadnośenju wužywarjow awtomatiski wulašowany",
"usermerge-page-unmoved": "Bok $1 njejo se do $2 pśesunuś dał.",
- "usermerge-page-moved": "Bok $1 jo se do $2 pśesunuł.",
- "usermerge-move-log": "Bok za zjadnośenje wužywarja \"[[User:$1|$1]]\" z \"[[User:$2|{{GENDER:$2|$2}}]]\" awtomatiski pśesunjony",
- "usermerge-page-deleted": "Bok $1 wulašowany"
+ "usermerge-move-log": "Bok za zjadnośenje wužywarja \"[[User:$1|$1]]\" z \"[[User:$2|{{GENDER:$2|$2}}]]\" awtomatiski pśesunjony"
}
diff --git a/UserMerge/i18n/en.json b/UserMerge/i18n/en.json
index 56676855..87affa08 100644
--- a/UserMerge/i18n/en.json
+++ b/UserMerge/i18n/en.json
@@ -1,31 +1,31 @@
{
- "@metadata": {
- "authors": []
- },
- "usermerge": "Merge and delete users",
- "usermerge-desc": "[[Special:UserMerge|Merges references from one user to another user]] in the wiki database - will also delete old users following merge. Requires ''usermerge'' privileges",
- "usermerge-badolduser": "Invalid old username.",
- "usermerge-badnewuser": "Invalid new username.",
- "usermerge-nonewuser": "Empty new username. Assuming merge to \"{{GENDER:$1|$1}}\".<br />\nClick \"{{int:usermerge-submit}}\" to accept.",
- "usermerge-noolduser": "Empty old username.",
- "usermerge-same-old-and-new-user": "The old and new usernames need to be distinct.",
- "usermerge-fieldset": "Usernames to merge",
- "usermerge-olduser": "Old user (merge from):",
- "usermerge-newuser": "New user (merge to):",
- "usermerge-deleteolduser": "Delete old user",
- "usermerge-submit": "Merge user",
- "usermerge-badtoken": "Invalid edit token.",
- "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) has been deleted.",
- "usermerge-userdeleted-log": "Deleted user: $2 ($3)",
- "usermerge-success": "Merge from {{GENDER:$1|$1}} ($2) to {{GENDER:$3|$3}} ($4) is complete.",
- "usermerge-success-log": "User {{GENDER:$2|$2}} ($3) merged to {{GENDER:$4|$4}} ($5)",
- "usermerge-logpage": "User merge log",
- "usermerge-logpagetext": "This is a log of user merge actions.",
- "usermerge-noselfdelete": "You cannot delete or merge from {{GENDER:$1|yourself}}!",
- "usermerge-protectedgroup": "Unable to merge from {{GENDER:$1|user}}: User is in a protected group.",
- "right-usermerge": "Merge users",
- "action-usermerge": "merge users",
- "usermerge-autopagedelete": "Automatically deleted when merging users",
- "usermerge-page-unmoved": "The page $1 could not be moved to $2.",
- "usermerge-move-log": "Automatically moved page while merging the user \"[[User:$1|$1]]\" to \"[[User:$2|{{GENDER:$2|$2}}]]\""
+ "@metadata": {
+ "authors": []
+ },
+ "usermerge": "Merge and delete users",
+ "usermerge-desc": "[[Special:UserMerge|Merges references from one user to another user]] in the wiki database - will also delete old users following merge. Requires ''usermerge'' privileges",
+ "usermerge-badolduser": "Invalid old username.",
+ "usermerge-badnewuser": "Invalid new username.",
+ "usermerge-nonewuser": "Empty new username. Assuming merge to \"{{GENDER:$1|$1}}\".<br />\nClick \"{{int:usermerge-submit}}\" to accept.",
+ "usermerge-noolduser": "Empty old username.",
+ "usermerge-same-old-and-new-user": "The old and new usernames need to be distinct.",
+ "usermerge-fieldset": "Usernames to merge",
+ "usermerge-olduser": "Old user (merge from):",
+ "usermerge-newuser": "New user (merge to):",
+ "usermerge-deleteolduser": "Delete old user",
+ "usermerge-submit": "Merge user",
+ "usermerge-badtoken": "Invalid edit token.",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) has been deleted.",
+ "usermerge-userdeleted-log": "Deleted user: $2 ($3)",
+ "usermerge-success": "Merge from {{GENDER:$1|$1}} ($2) to {{GENDER:$3|$3}} ($4) is complete.",
+ "usermerge-success-log": "User {{GENDER:$2|$2}} ($3) merged to {{GENDER:$4|$4}} ($5)",
+ "usermerge-logpage": "User merge log",
+ "usermerge-logpagetext": "This is a log of user merge actions.",
+ "usermerge-noselfdelete": "You cannot delete or merge from {{GENDER:$1|yourself}}!",
+ "usermerge-protectedgroup": "Unable to merge from {{GENDER:$1|user}}: User is in a protected group.",
+ "right-usermerge": "Merge users",
+ "action-usermerge": "merge users",
+ "usermerge-autopagedelete": "Automatically deleted when merging users",
+ "usermerge-page-unmoved": "The page $1 could not be moved to $2.",
+ "usermerge-move-log": "Automatically moved page while merging the user \"[[User:$1|$1]]\" to \"[[User:$2|{{GENDER:$2|$2}}]]\""
}
diff --git a/UserMerge/i18n/eo.json b/UserMerge/i18n/eo.json
index 47950cb3..88b0ec60 100644
--- a/UserMerge/i18n/eo.json
+++ b/UserMerge/i18n/eo.json
@@ -3,7 +3,8 @@
"authors": [
"Melancholie",
"Michawiki",
- "Yekrats"
+ "Yekrats",
+ "KuboF"
]
},
"usermerge": "Kunigi kaj forigi uzantojn",
@@ -18,12 +19,12 @@
"usermerge-badtoken": "Nevalida redakta ĵetono",
"usermerge-userdeleted": "$1 ($2) estis forigita.",
"usermerge-userdeleted-log": "Forigis uzanton: $2 ($3)",
- "usermerge-updating": "Ĝisdatigante tabelon $1 ($2 al $3)",
"usermerge-success": "Kunigado de $1 ($2) al $3 ($4) kompletiĝis.",
"usermerge-success-log": "Uzanto $2 ($3) kunigita al $4 ($5)",
"usermerge-logpage": "Protokolo pri kunigado de uzantoj",
"usermerge-logpagetext": "Jen protokolo de kunigadoj de uzantoj",
"usermerge-noselfdelete": "Vi ne povas forigi aŭ kunigi de vi mem!",
"usermerge-protectedgroup": "Ne eblis kunigi de uzanto - uzanto estas en protektita grupo.",
- "right-usermerge": "Kunfandi uzantojn"
+ "right-usermerge": "Kunfandi uzantojn",
+ "usermerge-page-unmoved": "La paĝo $1 ne povas esti alinomita al $2."
}
diff --git a/UserMerge/i18n/es.json b/UserMerge/i18n/es.json
index 6007583a..667159d7 100644
--- a/UserMerge/i18n/es.json
+++ b/UserMerge/i18n/es.json
@@ -7,36 +7,36 @@
"Imre",
"MarcoAurelio",
"Sanbec",
- "Fitoschido"
+ "Fitoschido",
+ "Nemo bis",
+ "Macofe",
+ "Dgstranz"
]
},
"usermerge": "Fusionar y borrar usuarios",
"usermerge-desc": "[[Special:UserMerge|Fusiona referencias de un usuario a otro usuario]] en la base de datos wiki - también borrará los usuarios antiguos como consecuencia de la fusión. Se requieren los permisos de ''usermerge''",
- "usermerge-badolduser": "Nombre de usuario antiguo inválido",
- "usermerge-badnewuser": "Nombre de usuario nuevo inválido",
+ "usermerge-badolduser": "El nombre de usuario anterior no es válido.",
+ "usermerge-badnewuser": "El nombre de usuario nuevo no es válido.",
"usermerge-nonewuser": "Nuevo nombre de usuario vacío - asumiendo fusión en «$1».<br />\nHaga clic en «{{int:usermerge-submit}}» para aceptar.",
"usermerge-noolduser": "Nombre de usuario antiguo vacío",
- "usermerge-fieldset": "Nombres de usuario a fusionar",
+ "usermerge-same-old-and-new-user": "Los nombres de usuario anterior y nuevo deben ser distintos.",
+ "usermerge-fieldset": "Nombres de usuario que fusionar",
"usermerge-olduser": "Antiguo usuario (fusionar de):",
"usermerge-newuser": "Nuevo usuario (fusionar a):",
"usermerge-deleteolduser": "Borrar antiguo usuario",
"usermerge-submit": "Fusionar usuario",
"usermerge-badtoken": "Ficha de edición inválida",
- "usermerge-userdeleted": "El usuario «$1» ($2) ha sido borrado.",
+ "usermerge-userdeleted": "Se borró {{GENDER:$1|el usuario|la usuaria}} $1 ($2).",
"usermerge-userdeleted-log": "borró la cuenta de usuario «$2» ($3)",
- "usermerge-updating": "Actualizando tabla $1 ($2 to $3)",
"usermerge-success": "La fusión de $1 ($2) a $3 ($4) ha sido completada.",
"usermerge-success-log": "fusionó al usuario «$2» ($3) con el usuario «$4» ($5)",
"usermerge-logpage": "Registro de fusiones del usuario",
"usermerge-logpagetext": "Este es un registro de fusiones de cuentas de usuario.",
- "usermerge-noselfdelete": "¡No puede borrarse o fusionarse usted mismo!",
- "usermerge-unmergable": "Incapaz de fusionar desde el usuario - La identidad o el nombre ha sido definido como no fusionable.",
- "usermerge-protectedgroup": "Imposible fusionar desde el usuario - el usuario está incluido en un grupo protegido.",
+ "usermerge-noselfdelete": "No puedes borrarte o fusionarte tú {{GENDER:$1|mismo|misma}}.",
+ "usermerge-protectedgroup": "Imposible fusionar desde {{GENDER:$1|el usuario|la usuaria}}: está en un grupo protegido.",
"right-usermerge": "Fusionar usuarios",
"action-usermerge": "fusionar usuarios",
"usermerge-autopagedelete": "Eliminado automáticamente al fusionar usuarios",
- "usermerge-page-unmoved": "La página $1 no pudo ser trasladada a $2.",
- "usermerge-page-moved": "La página $1 ha sido trasladada a $2.",
- "usermerge-move-log": "Página trasladada automáticamente al fusionar al usuario \"[[User:$1|$1]]\" con el usuario \"[[User:$2|$2]]\"",
- "usermerge-page-deleted": "La página $1 fue eliminada"
+ "usermerge-page-unmoved": "La página $1 no pudo trasladarse a $2.",
+ "usermerge-move-log": "Página trasladada automáticamente al fusionar al usuario «[[User:$1|$1]]» con «[[User:$2|$2]]»"
}
diff --git a/UserMerge/i18n/et.json b/UserMerge/i18n/et.json
index c6a3533e..a13834ae 100644
--- a/UserMerge/i18n/et.json
+++ b/UserMerge/i18n/et.json
@@ -4,9 +4,10 @@
"Pikne"
]
},
+ "usermerge-desc": "[[Special:UserMerge|Ühendab vikiandmebaasis kasutaja nimetamised teise kasutajaga]]. Ühendamise järel kustutab vanad kasutajad. Nõuab õigust \"usermerge\".",
"usermerge-badolduser": "Vigane vana kasutajanimi",
"usermerge-badnewuser": "Vigane uus kasutajanimi",
"usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) on kustutatud.",
- "usermerge-logpage": "Kasutaja ühendamislogi",
+ "usermerge-logpage": "Kasutajate ühendamislogi",
"usermerge-logpagetext": "See on kasutajaühendamistoimingute logi."
}
diff --git a/UserMerge/i18n/eu.json b/UserMerge/i18n/eu.json
index 9073a0e3..c74b8871 100644
--- a/UserMerge/i18n/eu.json
+++ b/UserMerge/i18n/eu.json
@@ -16,12 +16,10 @@
"usermerge-badtoken": "Aldaketa token ez baliagarria",
"usermerge-userdeleted": "$1 ($2) ezabatua izan da.",
"usermerge-userdeleted-log": "Ezabatutako lankidea: $2 ($3)",
- "usermerge-updating": "$1 taula berritzen ($2(e)tik $3(e)ra)",
"usermerge-success": "$1(e)tik ($2) $3(e)ra ($4) batzea burutu da.",
"usermerge-success-log": "$2 ($3) lankidea $4 ($5) lankidera batu da",
"usermerge-logpage": "Lankide batze loga",
"usermerge-logpagetext": "Log hau lankide batze ekintzena da.",
"usermerge-noselfdelete": "Ezin duzu zure burua ezabatu edo batu!",
- "right-usermerge": "Lankideak bateratu",
- "usermerge-page-moved": "«$1» orria «$2» izenera aldatu da."
+ "right-usermerge": "Lankideak bateratu"
}
diff --git a/UserMerge/i18n/fa.json b/UserMerge/i18n/fa.json
index ef65c829..8d2db599 100644
--- a/UserMerge/i18n/fa.json
+++ b/UserMerge/i18n/fa.json
@@ -25,14 +25,14 @@
"usermerge-deleteolduser": "پاک‌کردن کاربر قدیمی",
"usermerge-submit": "یکی کردن کاربر",
"usermerge-badtoken": "نشانهٔ ویرایش نامعتبر.",
- "usermerge-userdeleted": "$1 ($2) پاک شد.",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) پاک شد.",
"usermerge-userdeleted-log": "کاربر حذف شده: $2 ($3)",
- "usermerge-success": "ادغام از $1 ($2) به {{GENDER:$3|$3}} ($4) کامل است.",
- "usermerge-success-log": "کاربر $2 ($3) ادغام به {{GENDER:$4|$4}} ($5)",
+ "usermerge-success": "یکی‌کردن از {{GENDER:$1|$1}} ($2) به {{GENDER:$3|$3}} ($4) کامل شد.",
+ "usermerge-success-log": "کاربر {{GENDER:$2|$2}} ($3) با {{GENDER:$4|$4}} ($5) یکی شد",
"usermerge-logpage": "سیاههٔ ادغام کاربر",
"usermerge-logpagetext": "این سیاهه‌ی ادغام فعالیت‌های کاربر است.",
- "usermerge-noselfdelete": "شما نمی‌توانید از خودتان حذف یا ادغام کنید!",
- "usermerge-protectedgroup": "قادر به ادغام از کاربر نیستː کاربر در گروه محافظت شده‌است.",
+ "usermerge-noselfdelete": "شما نمی‌توانید {{GENDER:$1|خودتان}} را یکی یا حذف کنید!",
+ "usermerge-protectedgroup": "ناتوان در یکی‌کردن از {{GENDER:$1|کاربر}}: کاربر در یک گروه حفاظت‌شده است.",
"right-usermerge": "ادغام حساب‌های کاربری",
"action-usermerge": "ادغام کاربران",
"usermerge-autopagedelete": "حذف به طور خودکار هنگام ادغام کاربران",
diff --git a/UserMerge/i18n/fi.json b/UserMerge/i18n/fi.json
index fd4f6c0a..8a93c6c7 100644
--- a/UserMerge/i18n/fi.json
+++ b/UserMerge/i18n/fi.json
@@ -24,7 +24,6 @@
"usermerge-badtoken": "Virheellinen muokkauslipuke",
"usermerge-userdeleted": "$1 ($2) on poistettu.",
"usermerge-userdeleted-log": "Poistettiin käyttäjä: $2 ($3)",
- "usermerge-updating": "Päivitetään taulukko $1 ($2 arvoon $3)",
"usermerge-success": "Yhdistäminen tunnuksesta $1 ($2) tunnukseen {{GENDER:$3|$3}} ($4) on suoritettu.",
"usermerge-success-log": "Käyttäjä $2 ($3) yhdistettiin käyttäjään {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Käyttäjien yhdistämisloki",
@@ -34,7 +33,5 @@
"right-usermerge": "Yhdistää käyttäjiä",
"usermerge-autopagedelete": "Poistettiin automaattisesti käyttäjien yhdistämisessä",
"usermerge-page-unmoved": "Sivua $1 ei voitu siirtää nimelle $2.",
- "usermerge-page-moved": "Sivu $1 siirrettiin nimelle $2.",
- "usermerge-move-log": "Sivu siirretty automaattisesti yhdistettäessä käyttäjä \"[[User:$1|$1]]\" käyttäjään \"[[User:$2|{{GENDER:$2|$2}}]]\"",
- "usermerge-page-deleted": "Sivu $1 poistettiin"
+ "usermerge-move-log": "Sivu siirretty automaattisesti yhdistettäessä käyttäjä \"[[User:$1|$1]]\" käyttäjään \"[[User:$2|{{GENDER:$2|$2}}]]\""
}
diff --git a/UserMerge/i18n/fr.json b/UserMerge/i18n/fr.json
index 237a085f..fce8e046 100644
--- a/UserMerge/i18n/fr.json
+++ b/UserMerge/i18n/fr.json
@@ -26,22 +26,17 @@
"usermerge-deleteolduser": "Supprimer l’ancien utilisateur",
"usermerge-submit": "Fusionner l’utilisateur",
"usermerge-badtoken": "Jeton de modification invalide",
- "usermerge-userdeleted": "$1 ($2) a été supprimé.",
+ "usermerge-userdeleted": "$1 ($2) a été supprimé{{GENDER:$1||e}}.",
"usermerge-userdeleted-log": "Contributeur supprimé : $2 ($3)",
- "usermerge-updating": "Mise à jour de la table $1 (de $2 à $3)",
- "usermerge-success": "La fusion de $1 ($2) à {{GENDER:$3|$3}} ($4) est terminée.",
- "usermerge-success-log": "Utilisateur $2 ($3) fusionné avec {{GENDER:$4|$4}} ($5)",
+ "usermerge-success": "La fusion de {{GENDER:$1|$1}} ($2) avec {{GENDER:$3|$3}} ($4) est terminée.",
+ "usermerge-success-log": "{{GENDER:$2|Utilisateur|Utilisatrice}} $2 ($3) fusionné{{GENDER:$2||e}} avec {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Journal des fusions de comptes utilisateur",
"usermerge-logpagetext": "Voici un journal des actions de fusions d’utilisateurs.",
- "usermerge-noselfdelete": "Vous ne pouvez pas vous supprimer ou vous fusionner vous-même !",
- "usermerge-unmergable": "Impossible de fusionner l’utilisateur : le numéro ou le nom a été défini comme non fusionnable.",
- "usermerge-protectedgroup": "Impossible de fusionner l’utilisateur : l’utilisateur est dans un groupe protégé.",
+ "usermerge-noselfdelete": "Vous ne pouvez pas vous supprimer ou vous fusionner {{GENDER:$1|vous-même}} !",
+ "usermerge-protectedgroup": "Impossible de fusionner l’{{GENDER:$1|utilisateur|utilisatrice}} : l’{{GENDER:$1|utilisateur|utilisatrice}} est dans un groupe protégé.",
"right-usermerge": "Fusionner des utilisateurs",
"action-usermerge": "fusionner les utilisateurs",
- "usermerge-editcount-merge-success2": "Nombres de modifications fusionnées de $1 et $2 pour un nouveau total de $3 {{PLURAL:$3|modification|modifications}}",
"usermerge-autopagedelete": "Supprimé automatiquement lors de la fusion de utilisateurs",
"usermerge-page-unmoved": "Cette page $1 ne peut pas être déplacée vers $2.",
- "usermerge-page-moved": "La page $1 a été déplacée vers $2.",
- "usermerge-move-log": "Page déplacée automatiquement lors de la fusion de l’utilisateur \"[[User:$1|$1]]\" en \"[[User:$2|{{GENDER:$2|$2}}]]\"",
- "usermerge-page-deleted": "Page $1 effacée"
+ "usermerge-move-log": "Page déplacée automatiquement lors de la fusion de l’utilisateur \"[[User:$1|$1]]\" en \"[[User:$2|{{GENDER:$2|$2}}]]\""
}
diff --git a/UserMerge/i18n/frp.json b/UserMerge/i18n/frp.json
index 445af55f..ad9795fd 100644
--- a/UserMerge/i18n/frp.json
+++ b/UserMerge/i18n/frp.json
@@ -16,18 +16,14 @@
"usermerge-badtoken": "Jeton de changement envalido",
"usermerge-userdeleted": "$1 ($2) at étâ suprimâ.",
"usermerge-userdeleted-log": "Contributor suprimâ : $2 ($3)",
- "usermerge-updating": "Misa a jorn de la trâbla $1 (de $2 a $3)",
"usermerge-success": "La fusion de $1 ($2) a $3 ($4) est chavonâ.",
"usermerge-success-log": "Usanciér $2 ($3) fusionâ avouéc $4 ($5)",
"usermerge-logpage": "Jornal de les fusions d’usanciérs",
"usermerge-logpagetext": "O est un jornal de les accions de fusions d’usanciérs.",
"usermerge-noselfdelete": "Vos vos pouede pas suprimar ou ben fusionar vos-mémo !",
- "usermerge-unmergable": "Empossiblo de fusionar l’usanciér : lo numerô ou ben lo nom at étâ dèfeni coment pas fusionâblo.",
"usermerge-protectedgroup": "Empossiblo de fusionar l’usanciér : l’usanciér est dens una tropa protègiê.",
"right-usermerge": "Fusionar des usanciérs",
"usermerge-autopagedelete": "Suprimâ ôtomaticament pendent la fusion d’usanciérs",
"usermerge-page-unmoved": "La pâge $1 pôt pas étre dèplaciê vers $2.",
- "usermerge-page-moved": "La pâge $1 at étâ dèplaciê vers $2.",
- "usermerge-move-log": "Pâge dèplaciê ôtomaticament pendent la fusion de l’usanciér « [[User:$1|$1]] » en « [[User:$2|$2]] »",
- "usermerge-page-deleted": "Pâge suprimâ $1"
+ "usermerge-move-log": "Pâge dèplaciê ôtomaticament pendent la fusion de l’usanciér « [[User:$1|$1]] » en « [[User:$2|$2]] »"
}
diff --git a/UserMerge/i18n/gl.json b/UserMerge/i18n/gl.json
index af4aa1c4..19690558 100644
--- a/UserMerge/i18n/gl.json
+++ b/UserMerge/i18n/gl.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Alma",
- "Toliño"
+ "Toliño",
+ "Elisardojm"
]
},
"usermerge": "Fusionar e eliminar usuario",
@@ -18,22 +19,17 @@
"usermerge-deleteolduser": "Borrar o usuario antigo",
"usermerge-submit": "Fusionar o usuario",
"usermerge-badtoken": "Sinal de edición non válido",
- "usermerge-userdeleted": "$1 ($2) foi eliminado.",
+ "usermerge-userdeleted": "Borrouse {{GENDER:$1|o usuario|a usuaria}} $1 ($2).",
"usermerge-userdeleted-log": "Usuario eliminado: $2 ($3)",
- "usermerge-updating": "Actualizando táboa $1 ($2 a $3)",
- "usermerge-success": "A fusión desde $1 ($2) a {{GENDER:$3|$3}} ($4) foi completada.",
- "usermerge-success-log": "Usuario $2 ($3) fusionado con {{GENDER:$4|$4}} ($5)",
+ "usermerge-success": "A fusión desde {{GENDER:$1|$1}} ($2) a {{GENDER:$3|$3}} ($4) foi completada.",
+ "usermerge-success-log": "Usuario {{GENDER:$2|$2}} ($3) fusionado con {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Rexistro de fusión de usuarios",
"usermerge-logpagetext": "Este é un rexistro das accións de fusión de usuarios.",
- "usermerge-noselfdelete": "Non se pode eliminar ou fusionar a si mesmo!",
- "usermerge-unmergable": "Non se pode fusionar o usuario (o ID ou o nome foron definidos como \"non fusionables\").",
- "usermerge-protectedgroup": "Non se pode fusionar o usuario (o usuario está nun frupo protexido).",
+ "usermerge-noselfdelete": "Non se pode eliminar ou fusionar a si {{GENDER:$1|mesmo|mesma}}!",
+ "usermerge-protectedgroup": "Non se pode fusionar {{GENDER:$1|o usuario|a usuaria}}: Está nun grupo protexido.",
"right-usermerge": "Fusionar usuarios",
"action-usermerge": "fusionar usuarios",
- "usermerge-editcount-merge-success": "Engadindo $1 {{PLURAL:$1|edición|edicións}} do usuario $2 a $3 {{PLURAL:$3|edición|edicións}} do usuario $4 ($5 {{PLURAL:$5|edición|edicións}} despois da fusión)",
"usermerge-autopagedelete": "Borrada automaticamente ao fusionar os usuarios",
"usermerge-page-unmoved": "A páxina \"$1\" non pode ser movida a \"$2\".",
- "usermerge-page-moved": "A páxina \"$1\" foi movida a \"$2\".",
- "usermerge-move-log": "A páxina moveuse automaticamente cando se fusionou o usuario \"[[User:$1|$1]]\" con \"[[User:$2|{{GENDER:$2|$2}}]]\"",
- "usermerge-page-deleted": "A páxina \"$1\" foi borrada"
+ "usermerge-move-log": "A páxina moveuse automaticamente cando se fusionou o usuario \"[[User:$1|$1]]\" con \"[[User:$2|{{GENDER:$2|$2}}]]\""
}
diff --git a/UserMerge/i18n/gsw.json b/UserMerge/i18n/gsw.json
index 1c597b14..546e5a69 100644
--- a/UserMerge/i18n/gsw.json
+++ b/UserMerge/i18n/gsw.json
@@ -19,18 +19,14 @@
"usermerge-badtoken": "Uugiltig Bearbeite-Token",
"usermerge-userdeleted": "„$1“ ($2) isch glescht wore.",
"usermerge-userdeleted-log": "Gleschter Benutzername: „$2“ ($3)",
- "usermerge-updating": "Aktualisierig $1 Tabälle ($2 noch $3)",
"usermerge-success": "D Zämmefierig vu „$1“ ($2) noch „$3“ ($4) isch vollständig.",
"usermerge-success-log": "Benutzername „$2“ ($3) zämmegfiert mit „$4“ ($5)",
"usermerge-logpage": "Benutzerkonte-Zämmefierigs-Logbuech",
"usermerge-logpagetext": "Des isch s Logbuech vu dr Benutzerkonte-Zämmefierige.",
"usermerge-noselfdelete": "Zämmefierig mit sich sälber isch nit megli!",
- "usermerge-unmergable": "Zämmefierig nit megli - ID oder Benutzername isch nit as zämmefierbar definiert.",
"usermerge-protectedgroup": "Zämmefierig nit megli - Benutzername isch in ere gschitze Gruppe.",
"right-usermerge": "Benutzerkonte zämmefiere",
"usermerge-autopagedelete": "Derwyylischt de Benutzerchontezämmefierig automatisch glöscht",
"usermerge-page-unmoved": "D Syte „$1“ het nüt chönne uf „$2“ verschobe werde.",
- "usermerge-page-moved": "D Syte „$1“ isch uff „$2“ verschobe worde.",
- "usermerge-move-log": "Dur d Benutzerchontezämmefierig vu „[[User:$1|$1]]“ noch „[[User:$2|$2]]“ automatisch verschobeni Syte",
- "usermerge-page-deleted": "Gleschti Syte $1"
+ "usermerge-move-log": "Dur d Benutzerchontezämmefierig vu „[[User:$1|$1]]“ noch „[[User:$2|$2]]“ automatisch verschobeni Syte"
}
diff --git a/UserMerge/i18n/he.json b/UserMerge/i18n/he.json
index 6a8583c5..0ab3c12d 100644
--- a/UserMerge/i18n/he.json
+++ b/UserMerge/i18n/he.json
@@ -21,9 +21,9 @@
"usermerge-submit": "מיזוג משתמש",
"usermerge-badtoken": "אסימון עריכה שגוי.",
"usermerge-userdeleted": "$1 ($2) {{GENDER:$1|נמחק|נמחקה}}.",
- "usermerge-userdeleted-log": "המשתמש נמחק: $2 ($3)",
+ "usermerge-userdeleted-log": "המשתמש נמחק: $2&rlm; ($3)",
"usermerge-success": "המיזוג מ־$1‏ ($2) ל־$3‏ ($4) בוצע בהצלחה.",
- "usermerge-success-log": "ה{{GENDER:$2|משתמש|משתמשת}} $2 ($3) {{GENDER:$2|מוזג|מוזגה}} אל $4 ($5)",
+ "usermerge-success-log": "ה{{GENDER:$2|משתמש|משתמשת}} $2&rlm; ($3) {{GENDER:$2|מוזג|מוזגה}} אל $4&rlm; ($5)",
"usermerge-logpage": "יומן מיזוג משתמשים",
"usermerge-logpagetext": "זהו יומן של פעולות מיזוג המשתמשים.",
"usermerge-noselfdelete": "לא ניתן למחוק או למזג מ{{GENDER:$1|עצמך}}!",
diff --git a/UserMerge/i18n/hr.json b/UserMerge/i18n/hr.json
new file mode 100644
index 00000000..eb951f7d
--- /dev/null
+++ b/UserMerge/i18n/hr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bugoslav"
+ ]
+ },
+ "usermerge-logpage": "Evidencija spajanja povijesti suradnikâ"
+}
diff --git a/UserMerge/i18n/hsb.json b/UserMerge/i18n/hsb.json
index dc3c9a30..bc5a0cc9 100644
--- a/UserMerge/i18n/hsb.json
+++ b/UserMerge/i18n/hsb.json
@@ -19,20 +19,15 @@
"usermerge-badtoken": "Njepłaćiwe wobdźěłanske znamjo",
"usermerge-userdeleted": "$1($2) bu zničeny.",
"usermerge-userdeleted-log": "Wušmórnjeny wužiwar: $2($3)",
- "usermerge-updating": "$1 tabela so aktualizuje ($2 do $3)",
"usermerge-success": "Zjednoćenje wot $1 ($2) do {{GENDER:$3|$3}} ($4) je dokónčene.",
"usermerge-success-log": "Wužiwar $2 ($3) je so z {{GENDER:$4|$4}} ($5) zjednoćił",
"usermerge-logpage": "Protokol wužiwarskich zjednoćenjow",
"usermerge-logpagetext": "To je protokol wužiwarskich zjednoćenjow.",
"usermerge-noselfdelete": "Njemóžeš sam wušmórnyć abo zjednoćić!",
- "usermerge-unmergable": "Zjednoćenje wužiwarjow njemóžno - ID abo wužiwarske mjeno bu jako njezjednoćujomne definowane.",
"usermerge-protectedgroup": "Zjednoćenje wužiwarjow njemóžno - wužiwar je w škitanej skupinje",
"right-usermerge": "Wužiwarjow zjednoćić",
"action-usermerge": "wužiwarjow zjednoćić",
- "usermerge-editcount-merge-success": "$1 {{PLURAL:$1|změna|změnje|změny|změnow}} wužiwarja $2 so $3 {{PLURAL:$3|změnje|změnomaj|změnam}} wužiwarja $4 {{PLURAL:$1|přidawa|přidawatej|přidawaja|přidawa}} ($5 {{PLURAL:$5|změna|změnje|změny|změnow}} po zjednoćenju)",
"usermerge-autopagedelete": "Při zjednoćenju wužiwarjow awtomatisce zhašany",
"usermerge-page-unmoved": "Strona $1 njeda so do $2 přesunyć.",
- "usermerge-page-moved": "Strona $1 bu do $2 přesunjena.",
- "usermerge-move-log": "Strona za zjednoćenje wužiwarja \"[[User:$1|$1]]\" z \"[[User:$2|{{GENDER:$2|$2}}]]\" awtomatisce přesunjena",
- "usermerge-page-deleted": "Zhašana strona $1"
+ "usermerge-move-log": "Strona za zjednoćenje wužiwarja \"[[User:$1|$1]]\" z \"[[User:$2|{{GENDER:$2|$2}}]]\" awtomatisce přesunjena"
}
diff --git a/UserMerge/i18n/ht.json b/UserMerge/i18n/ht.json
index a6bd9ed7..789f16dc 100644
--- a/UserMerge/i18n/ht.json
+++ b/UserMerge/i18n/ht.json
@@ -18,12 +18,10 @@
"usermerge-badtoken": "Tikè pou modifikasyon pa bon",
"usermerge-userdeleted": "$1 ($2) efase.",
"usermerge-userdeleted-log": "Non itilizatè ki efase a: $2 ($3)",
- "usermerge-updating": "Mete ajou tablo $1 (depi $2 jouk $3)",
"usermerge-success": "Nou rive mèt ansanm $1 ($2) ak $3 ($4), depi premye kont an.",
"usermerge-success-log": "Itilizatè $2 ($3) fizyone ak $4 ($5)",
"usermerge-logpage": "Jounal pou fizyon kont itilizatè",
"usermerge-logpagetext": "Men jounal ki dekri tout aksyon ki te fèt pou fizyon kont itilizatè yo.",
"usermerge-noselfdelete": "Ou pa kapab efase tèt ou oubyen fizyone tèt ou.",
- "usermerge-unmergable": "Nou pa kapab mèt ansanm kont sa yo - ID an oubyen non an pa kapab mete ansanm, li sanble l make nan definisyon yo.",
"usermerge-protectedgroup": "Nou pa kapab mèt ansanm kont itilizatè yo - itilizatè sa a nan yon gwoup ki pwoteje."
}
diff --git a/UserMerge/i18n/hu.json b/UserMerge/i18n/hu.json
index f3cfd58c..3b906f19 100644
--- a/UserMerge/i18n/hu.json
+++ b/UserMerge/i18n/hu.json
@@ -19,13 +19,11 @@
"usermerge-badtoken": "Érvénytelen szerkesztési token",
"usermerge-userdeleted": "„$1” ($2) törölve.",
"usermerge-userdeleted-log": "Törölt felhasználó: $2 ($3)",
- "usermerge-updating": "$1 tábla frissítése ($2 → $3)",
"usermerge-success": "„$1” ($2) fiók beolvasztása a(z) „$3” ($4) felhasználói fiókba elkészült.",
"usermerge-success-log": "„$2” ($3) felhasználó beolvasztva a(z) „$4” ($5) felhasználói fiókba",
"usermerge-logpage": "Felhasználói nevek egyesítésének naplója",
"usermerge-logpagetext": "Ez a felhasználó nevek összevonásának naplója.",
"usermerge-noselfdelete": "Nem tudsz törölni vagy összevonni a saját fiókodból!",
- "usermerge-unmergable": "Nem lehetséges beolvasztani a felhasználói fiókot – az azonosító vagy a név be van jelölve összevonhatatlannak.",
"usermerge-protectedgroup": "Nem lehetséges beolvasztani a felhasználói fiókot – a felhasználó védett csoportban van.",
"right-usermerge": "szerkesztők egyesítése"
}
diff --git a/UserMerge/i18n/ia.json b/UserMerge/i18n/ia.json
index 07fc8d93..e23ac464 100644
--- a/UserMerge/i18n/ia.json
+++ b/UserMerge/i18n/ia.json
@@ -8,7 +8,7 @@
"usermerge-desc": "[[Special:UserMerge|Fusiona le referentias ab un usator verso un altere usator]] in le base de datos wiki - delera equalmente le ancian usatores post le fusion. Require le privilegio ''usermerge''",
"usermerge-badolduser": "Nomine de usator ancian invalide",
"usermerge-badnewuser": "Nomine de nove usator invalide",
- "usermerge-nonewuser": "Nomine de nove usator vacue; nos assume un fusion con $1.<br />\nClicca \"{{int:usermerge-submit}}\" pro acceptar.",
+ "usermerge-nonewuser": "Nomine de nove usator vacue. Es assumite un fusion in \"{{GENDER:$1|$1}}\".<br />\nClicca sur \"{{int:usermerge-submit}}\" pro acceptar.",
"usermerge-noolduser": "Nomine de usator ancian vacue",
"usermerge-fieldset": "Nomines de usator a fusionar",
"usermerge-olduser": "Ancian usator (fusionar ab):",
@@ -16,20 +16,16 @@
"usermerge-deleteolduser": "Deler ancian usator",
"usermerge-submit": "Fusionar usator",
"usermerge-badtoken": "Indicio de modification invalide",
- "usermerge-userdeleted": "$1 ($2) ha essite delite.",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) ha essite delite.",
"usermerge-userdeleted-log": "Usator delite: $2 ($3)",
- "usermerge-updating": "Actualisa le tabella $1 (de $2 a $3)",
- "usermerge-success": "Le fusion de $1 ($2) a $3 ($4) es complete.",
- "usermerge-success-log": "Usator $2 ($3) fusionate con $4 ($5)",
+ "usermerge-success": "Le fusion de {{GENDER:$1|$1}} ($2) in {{GENDER:$3|$3}} ($4) ha succedite.",
+ "usermerge-success-log": "Le usator {{GENDER:$2|$2}} ($3) ha essite fusionate in {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Registro de fusiones de usatores",
"usermerge-logpagetext": "Isto es un registro de actiones de fusion de usatores.",
- "usermerge-noselfdelete": "Tu non pote deler o fusionar ab te mesme!",
- "usermerge-unmergable": "Impossibile fusionar ab iste usator - le ID o nomine ha essite definite como non fusionabile.",
- "usermerge-protectedgroup": "Impossibile fusionar ab iste usator - le usator es membro de un gruppo protegite.",
+ "usermerge-noselfdelete": "Tu non pote deler o fusionar ab {{GENDER:$1|te mesme}}!",
+ "usermerge-protectedgroup": "Impossibile fusionar ab iste {{GENDER:$1|usator}}: le usator es in un gruppo protegite.",
"right-usermerge": "Fusionar usatores",
"usermerge-autopagedelete": "Automaticamente delite durante le fusion de usatores",
"usermerge-page-unmoved": "Le pagina $1 non poteva esser renominate a $2.",
- "usermerge-page-moved": "Le pagina $1 ha essite renominate a $2.",
- "usermerge-move-log": "Le pagina ha essite automaticamente renominate con le fusion del usator \"[[User:$1|$1]]\" in \"[[User:$2|$2]]\"",
- "usermerge-page-deleted": "Pagina $1 delite"
+ "usermerge-move-log": "Le pagina ha essite automaticamente renominate durante le fusion del usator \"[[User:$1|$1]]\" in \"[[User:$2|{{GENDER:$2|$2}}]]\""
}
diff --git a/UserMerge/i18n/id.json b/UserMerge/i18n/id.json
index de30559f..b0f2a222 100644
--- a/UserMerge/i18n/id.json
+++ b/UserMerge/i18n/id.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"IvanLanin",
- "Rex"
+ "Rex",
+ "Bennylin"
]
},
"usermerge": "Penggabungan dan penghapusan Pengguna",
@@ -19,13 +20,11 @@
"usermerge-badtoken": "Token penyuntingan tidak sah",
"usermerge-userdeleted": "$1 ($2) telah dihapuskan.",
"usermerge-userdeleted-log": "Pengguna telah dihapuskan: $2 ($3)",
- "usermerge-updating": "Memperbaharui tabel $1 ($2 hingga $3)",
"usermerge-success": "$1 ($2) telah selesai digabungkan ke $3 ($4).",
"usermerge-success-log": "Pengguna $2 ($3) telah digabungkan ke $4 ($5)",
- "usermerge-logpage": "Log penggabungan pengguna",
+ "usermerge-logpage": "Catatan penggabungan pengguna",
"usermerge-logpagetext": "Ini adalah catatan tindakan penggabungan pengguna.",
"usermerge-noselfdelete": "Anda tidak dapat menghapus atau menggabungkan dari Anda sendiri!",
- "usermerge-unmergable": "Tidak dapat menggabungkan dari pengguna ini - nomor ID atau nama akun ini telah ditandai sebagai akun yang tidak dapat digabungkan.",
"usermerge-protectedgroup": "Tidak dapat menggabungkan dari pengguna ini - pengguna ini termasuk dalam kelompok terproteksi.",
"right-usermerge": "Menggabungkan pengguna"
}
diff --git a/UserMerge/i18n/ie.json b/UserMerge/i18n/ie.json
index 53f9a57c..66b50ff4 100644
--- a/UserMerge/i18n/ie.json
+++ b/UserMerge/i18n/ie.json
@@ -18,11 +18,9 @@
"usermerge-badtoken": "Simbol de redaction ínvalid",
"usermerge-userdeleted": "$1 ($2) ha esset deletet.",
"usermerge-userdeleted-log": "Usator deletet: $2 ($3)",
- "usermerge-updating": "Modernisant tabelle $1 ($2 por $3)",
"usermerge-success": "Fuser se de $1 ($2) por $3 ($4) es complet.",
"usermerge-logpage": "Diarium de fusion de usator",
"usermerge-logpagetext": "Ti es un diarium de actiones de fusion de usator.",
"usermerge-noselfdelete": "Vu ne posse deleter o fuser se vu self!",
- "usermerge-unmergable": "Ne posse fuser se de ti usator - ID o nómine ha esset definit quam ínfusibil.",
"usermerge-protectedgroup": "Ne posse fuser de ti usator - usator es in un gruppe protectet."
}
diff --git a/UserMerge/i18n/it.json b/UserMerge/i18n/it.json
index a93ccbc4..820f3259 100644
--- a/UserMerge/i18n/it.json
+++ b/UserMerge/i18n/it.json
@@ -19,23 +19,18 @@
"usermerge-newuser": "Nuovo utente (unisci a):",
"usermerge-deleteolduser": "Cancella vecchio utente",
"usermerge-submit": "Unisci utente",
- "usermerge-badtoken": "Edit token non valido",
- "usermerge-userdeleted": "$1 ($2) è stato cancellato.",
+ "usermerge-badtoken": "Token di modifica non valido.",
+ "usermerge-userdeleted": "$1 ($2) è {{GENDER:$1|stato cancellato|stata cancellata}}.",
"usermerge-userdeleted-log": "Utente cancellato: $2 ($3)",
- "usermerge-updating": "Aggiornamento tabella $1 ($2 a $3)",
- "usermerge-success": "L'unione di $1 ($2) a {{GENDER:$3|$3}} ($4) è completa.",
- "usermerge-success-log": "Utente $2 ($3) unito a {{GENDER:$4|$4}} ($5)",
+ "usermerge-success": "L'unione di {{GENDER:$1|$1}} ($2) a {{GENDER:$3|$3}} ($4) è completa.",
+ "usermerge-success-log": "Utente $2 ($3) {{GENDER:$2|unito|unita}} a {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Unioni delle utenze",
"usermerge-logpagetext": "Di seguito sono elencate le azioni di unione di utenti.",
- "usermerge-noselfdelete": "Non puoi cancellare o unire la tua stessa utenza!",
- "usermerge-unmergable": "Impossibile unire da questo utente - l'ID o il nome è stato definito non unibile.",
- "usermerge-protectedgroup": "Impossibile unire da questo utente - l'utente fa parte di un gruppo protetto.",
+ "usermerge-noselfdelete": "Non puoi cancellare o unire la {{GENDER:$1|tua}} stessa utenza!",
+ "usermerge-protectedgroup": "Impossibile unire da {{GENDER:$1|questo|questa}} utente - l'utente fa parte di un gruppo protetto.",
"right-usermerge": "Unisce utenti",
"action-usermerge": "unire utenti",
- "usermerge-editcount-merge-success2": "Uniti i contributi di $1 e $2 per un totale di $3 {{PLURAL:$3|modifica|modifiche}}",
"usermerge-autopagedelete": "Cancellata automaticamente quando si uniscono gli utenti",
"usermerge-page-unmoved": "La pagina $1 non può essere spostata a $2.",
- "usermerge-page-moved": "La pagina $1 è stata spostata a $2.",
- "usermerge-move-log": "Pagina spostata automaticamente durante l'unione dell'utente \"[[User:$1|$1]]\" a \"[[User:$2|{{GENDER:$2|$2}}]]\"",
- "usermerge-page-deleted": "Pagina cancellata $1"
+ "usermerge-move-log": "Pagina spostata automaticamente durante l'unione dell'utente \"[[User:$1|$1]]\" a \"[[User:$2|{{GENDER:$2|$2}}]]\""
}
diff --git a/UserMerge/i18n/ja.json b/UserMerge/i18n/ja.json
index b79cc8f8..4acb0199 100644
--- a/UserMerge/i18n/ja.json
+++ b/UserMerge/i18n/ja.json
@@ -5,7 +5,8 @@
"Fievarsty",
"Fryed-peach",
"Mzm5zbC3",
- "Shirayuki"
+ "Shirayuki",
+ "Azeha"
]
},
"usermerge": "利用者の統合と削除",
@@ -21,22 +22,17 @@
"usermerge-deleteolduser": "旧利用者を削除",
"usermerge-submit": "利用者の統合",
"usermerge-badtoken": "編集トークンが無効です。",
- "usermerge-userdeleted": "$1 ($2) は削除されました。",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) は削除されました。",
"usermerge-userdeleted-log": "利用者: $2 ($3) を削除しました",
- "usermerge-updating": "$1 のテーブルを更新 ($2 を $3 へ)",
- "usermerge-success": "$1 ($2) の {{GENDER:$3|$3}} ($4) への統合が完了しました。",
- "usermerge-success-log": "利用者 $2 ($3) を {{GENDER:$4|$4}} ($5) へ統合しました",
+ "usermerge-success": "{{GENDER:$1|$1}} ($2) の {{GENDER:$3|$3}} ($4) への統合が完了しました。",
+ "usermerge-success-log": "利用者 {{GENDER:$2|$2}} ($3) を {{GENDER:$4|$4}} ($5) へ統合しました",
"usermerge-logpage": "利用者統合記録",
"usermerge-logpagetext": "これは、利用者の統合を記録したものです。",
- "usermerge-noselfdelete": "あなたは、自身を統合あるいは削除することはできません。",
- "usermerge-unmergable": "利用者を統合できません: IDまたは名前が統合不可能となっています。",
- "usermerge-protectedgroup": "利用者を統合できません: この利用者は被保護グループに属しています。",
+ "usermerge-noselfdelete": "{{GENDER:$1|自分自身}}の削除や{{GENDER:$1|自分自身}}との統合はできません。",
+ "usermerge-protectedgroup": "{{GENDER:$1|利用者}}を統合できません: この利用者は被保護グループに属しています。",
"right-usermerge": "利用者を統合",
"action-usermerge": "利用者の統合",
- "usermerge-editcount-merge-success": "利用者 $2 の $1 回の{{PLURAL:$1|編集}}を利用者 $4 の $3 回の{{PLURAL:$3|編集}}へ追加 (統合後は $5 回の{{PLURAL:$5|編集}})",
"usermerge-autopagedelete": "利用者の統合と共に自動的に削除しました",
"usermerge-page-unmoved": "ページ「$1」を「$2」に移動できませんでした。",
- "usermerge-page-moved": "ページ「$1」を「$2」に移動しました。",
- "usermerge-move-log": "統合と共に「[[User:$1|$1]]」を「[[User:$2|{{GENDER:$2|$2}}]]」へ自動的に移動しました",
- "usermerge-page-deleted": "ページ「$1」を削除しました"
+ "usermerge-move-log": "統合と共に「[[User:$1|$1]]」を「[[User:$2|{{GENDER:$2|$2}}]]」へ自動的に移動しました"
}
diff --git a/UserMerge/i18n/jv.json b/UserMerge/i18n/jv.json
index 48576b76..a4c3cef9 100644
--- a/UserMerge/i18n/jv.json
+++ b/UserMerge/i18n/jv.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Meursault2004",
- "Pras"
+ "Pras",
+ "NoiX180"
]
},
"usermerge": "Panggabungan lan pambusakan panganggo",
@@ -18,13 +19,12 @@
"usermerge-badtoken": "Token panyuntingan ora absah",
"usermerge-userdeleted": "$1 ($2) wis dibusak.",
"usermerge-userdeleted-log": "Panganggo dibusak: $2 ($3)",
- "usermerge-updating": "Nganyari tabèl $1 ($2 menyang $3)",
"usermerge-success": "$1 ($2) wis rampung digabungaké menyang $3 ($4).",
"usermerge-success-log": "Panganggo $2 ($3) wis digabungaké menyang $4 ($5)",
"usermerge-logpage": "Log panggabungan panganggo",
"usermerge-logpagetext": "Iki sawijining log aksi panggabungan panganggo.",
"usermerge-noselfdelete": "Panjenengan ora bisa mbusak utawa nggabung saka panjenengan dhéwé!",
- "usermerge-unmergable": "Ora bisa nggabungaké saka panganggo iki - nomer ID utawa jeneng akun iki wis ditandhani minangka akun sing ora bisa digabungaké.",
"usermerge-protectedgroup": "Ora bisa nggabungaké saka panganggo iki - panganggo ana jroning klompok kareksa.",
- "right-usermerge": "Gabung panganggo"
+ "right-usermerge": "Gabung panganggo",
+ "usermerge-move-log": "Otomatis ngalih kaca nalika nggabungaké panganggo \"[[User:$1|$1]]\" karo \"[[User:$2|{{GENDER:$2|$2}}]]\""
}
diff --git a/UserMerge/i18n/ka.json b/UserMerge/i18n/ka.json
index afa51bd5..0faa25cc 100644
--- a/UserMerge/i18n/ka.json
+++ b/UserMerge/i18n/ka.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "David1010"
+ "David1010",
+ "Otogi"
]
},
"usermerge-badolduser": "არასწორი ძველი მომხმარებლის სახელი",
@@ -12,8 +13,8 @@
"usermerge-newuser": "ახალი მომხმარებელი (გაერთიანება):",
"usermerge-deleteolduser": "ძველი მომხმარებლის წაშლა",
"usermerge-submit": "მომხმარებლების გაერთიანება",
- "usermerge-userdeleted": "$1 ($2) წაიშალა.",
+ "usermerge-userdeleted": "მომხმარებელი {{GENDER:$1|$1}} ($2) წაიშალა.",
"usermerge-userdeleted-log": "წაშლილი მომხმარებელი: $2 ($3)",
- "right-usermerge": "მომხმარებლების გაერთიანება",
- "usermerge-page-deleted": "წაშლილი გვერდი $1"
+ "usermerge-logpage": "მომხმარებელთა შერწყმის ჟურნალი",
+ "right-usermerge": "მომხმარებლების გაერთიანება"
}
diff --git a/UserMerge/i18n/km.json b/UserMerge/i18n/km.json
index 550093ac..4c98dbb8 100644
--- a/UserMerge/i18n/km.json
+++ b/UserMerge/i18n/km.json
@@ -16,7 +16,6 @@
"usermerge-submit": "បញ្ចូលរួមគ្នា អ្នកប្រើប្រាស់",
"usermerge-userdeleted": "$1 ($2) ត្រូវបានលុបហើយ។",
"usermerge-userdeleted-log": "បានលុបអ្នកប្រើប្រាស់៖ $2($3)",
- "usermerge-updating": "បន្ទាន់សម័យ $1 តារាង ($2 to $3)",
"usermerge-success": "ការបញ្ចូលរួមគ្នាពី$1($2)ទៅ$3($4)បានបញ្ចប់ដោយពេញលេញ។",
"usermerge-success-log": "អ្នកប្រើប្រាស់ $2 ($3) បញ្ចូលរួមគ្នាទៅ $4 ($5)",
"usermerge-logpage": "កំណត់ហេតុនៃការបញ្ចួលអ្នកប្រើប្រាស់រួមគ្នា",
diff --git a/UserMerge/i18n/ko.json b/UserMerge/i18n/ko.json
index 7120792a..0db9c5a7 100644
--- a/UserMerge/i18n/ko.json
+++ b/UserMerge/i18n/ko.json
@@ -2,14 +2,15 @@
"@metadata": {
"authors": [
"Kwj2772",
- "아라"
+ "아라",
+ "Hwangjy9"
]
},
"usermerge": "사용자 합치기 및 삭제",
"usermerge-desc": "위키 데이터베이스에서 [[Special:UserMerge|참고한 한 사용자에서 다른 사용자로 합치며]], 합치고 나서 이에 따라 이전 사용자는 삭제됩니다. '''usermerge''' 권한 필요",
"usermerge-badolduser": "잘못된 이전 사용자 이름입니다.",
"usermerge-badnewuser": "잘못된 새 사용자 이름입니다.",
- "usermerge-nonewuser": "빈 새 사용자 이름입니다. \"{{GENDER:$1|$1}}\" 사용자로 가정하여 합칩니다.<br />\n동의하면 \"{{int:usermerge-submit}}\"을 클릭하세요.",
+ "usermerge-nonewuser": "빈 새 사용자 이름입니다. \"{{GENDER:$1|$1}}\"(으)로 가정하여 합칩니다.<br />\n동의하면 \"{{int:usermerge-submit}}\"을 클릭하세요.",
"usermerge-noolduser": "이전 사용자 이름이 비어 있음",
"usermerge-same-old-and-new-user": "이전과 새 사용자 이름은 달라야 합니다.",
"usermerge-fieldset": "사용자 이름 합치기",
@@ -18,22 +19,17 @@
"usermerge-deleteolduser": "이전 사용자를 삭제하기",
"usermerge-submit": "사용자 합치기",
"usermerge-badtoken": "잘못된 편집 토큰",
- "usermerge-userdeleted": "$1 ($2) 사용자가 삭제되었습니다.",
- "usermerge-userdeleted-log": "사용자가 $2 ($3) 사용자를 삭제했습니다",
- "usermerge-updating": "사용자가 $1 테이블을 업데이트했습니다 ($2부터 $3까지)",
- "usermerge-success": "$1 ($2) 사용자를 {{GENDER:$3|$3}} ($4) 사용자에 합치는 것을 완료했습니다.",
- "usermerge-success-log": "$2 ($3) 사용자를 {{GENDER:$4|$4}} ($5) 로 합쳤습니다",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2)님이 삭제되었습니다.",
+ "usermerge-userdeleted-log": "님이 사용자: $2 ($3) 계정을 삭제했습니다",
+ "usermerge-success": "{{GENDER:$1|$1}} ($2)님을 {{GENDER:$3|$3}} ($4)에 합치는 것을 완료했습니다.",
+ "usermerge-success-log": "님이 {{GENDER:$2|$2}} ($3) 사용자를 {{GENDER:$4|$4}} ($5) 계정으로 합쳤습니다",
"usermerge-logpage": "사용자 병합 기록",
- "usermerge-logpagetext": "사용자 병합 행위의 기록입니다.",
- "usermerge-noselfdelete": "자신으로부터 삭제나 합치기를 할 수 없습니다!",
- "usermerge-unmergable": "사용자로부터 합칠 수 없습니다 - ID나 이름이 합칠 수 없도록 지정되어 있습니다.",
- "usermerge-protectedgroup": "사용자로부터 합칠 수 없습니다 - 사용자는 보호된 그룹에 있습니다.",
+ "usermerge-logpagetext": "사용자 병합 동작의 기록입니다.",
+ "usermerge-noselfdelete": "{{GENDER:$1|자신}}으로부터 삭제나 합치기를 할 수 없습니다!",
+ "usermerge-protectedgroup": "{{GENDER:$1|사용자}}로부터 합칠 수 없습니다: 사용자는 보호된 그룹에 있습니다.",
"right-usermerge": "사용자 합치기",
"action-usermerge": "사용자 합치기",
- "usermerge-editcount-merge-success": "$2 사용자의 {{PLURAL:$1|편집}} $1회를 $4 사용자의 {{PLURAL:$3|편집}} $3회를 추가 (합치고 나서 {{PLURAL:$5|편집}} $5회)",
"usermerge-autopagedelete": "사용자를 합칠 때 자동으로 삭제했습니다",
"usermerge-page-unmoved": "$1 문서를 $2 문서로 이동하지 못했습니다.",
- "usermerge-page-moved": "$1 문서를 $2 문서로 옮겼습니다.",
- "usermerge-move-log": "\"[[User:$1|$1]]\" 사용자를 \"[[User:$2|{{GENDER:$2|$2}}]]\" 사용자로 합치면서 문서를 자동으로 옮겼습니다",
- "usermerge-page-deleted": "$1 문서를 삭제했습니다"
+ "usermerge-move-log": "\"[[User:$1|$1]]\" 사용자를 \"[[User:$2|{{GENDER:$2|$2}}]]\"(으)로 합치면서 문서를 자동으로 이동했습니다"
}
diff --git a/UserMerge/i18n/ksh.json b/UserMerge/i18n/ksh.json
index 1d4dd0fc..5e970e42 100644
--- a/UserMerge/i18n/ksh.json
+++ b/UserMerge/i18n/ksh.json
@@ -8,28 +8,26 @@
"usermerge-desc": "[[Special:UserMerge|Läät de Date fun einem Metmaacher met anem andere Metmaacher komplät zosamme]] en dem Wiki singe Datebank, un kann donoh och de övverhollte Metmaacher fottschmieße. Doför bruch mer et „{{int:right-usermerge}}“ Rääsch (<em lang=\"en\">usermerge</em>)",
"usermerge-badolduser": "Dä ahle Metmaachername es nit jöltesch",
"usermerge-badnewuser": "Dä neue Metmaachername es nit jöltesch",
- "usermerge-nonewuser": "Keine neue Metmaachername aanjejovve. Mer vermoode, dat De met „$1“ zosamme lääje wells.<br />\nKleck op „{{int:usermerge-submit}}“ öm dat esu ze maache.",
+ "usermerge-nonewuser": "Keine neue Metmaachername aanjejovve. Mer vermoode, dat De {{GENDER:$1|mem|mem|med dämm Metmaacher|met dä|mem}} „$1“ zosamme lääje wells.<br />\nKleck op „{{int:usermerge-submit}}“ öm dat esu ze maache.",
"usermerge-noolduser": "Keine ahle Metmaachername aanjejovve",
+ "usermerge-same-old-and-new-user": "Dä ahle un der neue Nahme för dä Metmaacher möße onejahl sin.",
"usermerge-fieldset": "De Name vun dä Metmaacher zum Zosamme lääje",
"usermerge-olduser": "Dä ahle Metmaachername (Zosamme lääje fun&nbsp;…):",
"usermerge-newuser": "Dä neuje Metmaachername (Zosamme lääje noh&nbsp;…):",
- "usermerge-deleteolduser": "Dä ahle Metmaacher fott schmieße",
+ "usermerge-deleteolduser": "Dä ahle Metmaacher fott schmiiße",
"usermerge-submit": "Zosammelääje",
"usermerge-badtoken": "Onjöltesch Kennzeiche",
- "usermerge-userdeleted": "„$1“ ($2) es jetz fott jeschmeße.",
+ "usermerge-userdeleted": "{{GENDER:$1|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ ($2) es jetz fott jeschmeße.",
"usermerge-userdeleted-log": "Fott jeschmeße Metmaacherame: „$2“ ($3)",
- "usermerge-updating": "Jeändert: Tabäll $1 (vun $2 noh $3)",
- "usermerge-success": "Et Zosammelääje vun „$1“ ($2) noh „$3“ ($4) es komplätt.",
- "usermerge-success-log": "Metmaacher Name „$2“ ($3) zosammejelaat met „$4“ ($5)",
- "usermerge-logpage": "Logboch övver et Metmaacher-Zosammelääje",
- "usermerge-logpagetext": "Dat hee es et Logboch övver de zosammejelaate Metmaachere.",
- "usermerge-noselfdelete": "Ene Metmaacher met sesch sellver zosamme ze lääje, wat ene Quatsch! Dat jeiht nit.",
- "usermerge-unmergable": "Schadt. Die esu zosamme ze Lääje es nit müjjelech. Dat dä Metmaacher nit zosamme jelaat wääde kann, es övver singe Name odder per sing Nommer esu faßjelaat woode.",
- "usermerge-protectedgroup": "Schadt. Die esu zosamme ze Lääje es nit müjjelech. Dä Metmaacher es en en Jropp, die et Zosammelääje verbeede deiht.",
+ "usermerge-success": "Et Zosammelääje {{GENDER:$1|vum|vum|vumm Metmaacher|vun dä|vum}} „$1“ ($2) {{GENDER:$3|mem|mem|med dämm Metmaacher|met dä|mem}} „$3“ {{GENDER:$3|nohm|nohm|nohm|noh dä|nohm}} „$3“ ($4) es komplätt.",
+ "usermerge-success-log": "{{GENDER:$2|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} mem Nahme „$2“ ($3) es zosammejelaat met {{GENDER:$4|däm Metmaacher|dä Metmaacherėn|däm Metmaacher|dä Metmaacherėn|däm Metmaacher}} mem Name „$4“ ($5)",
+ "usermerge-logpage": "Logbohch övver et Metmaacher_Zosammelähje",
+ "usermerge-logpagetext": "Dat heh es et Logbohch övver de zosammejelaate Metmaachere.",
+ "usermerge-noselfdelete": "Ene Metmaacher met sesch sellver zosamme ze lääje, wat ene Quatsch! Dat jeiht nit.{{GENDER:$1|}}",
+ "usermerge-protectedgroup": "Schahdt. Di esu zosamme ze lähje es nit müjjelesch. {{GENDER:$1|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} „$1“ es en en Jropp, di et Zosammelähje verbehdt.",
"right-usermerge": "Metmaacher zosammelääje",
+ "action-usermerge": "Metmaacher zosammelähje",
"usermerge-autopagedelete": "Automattesch fottjeschmeße beim Metmaacher Zusammelääje",
"usermerge-page-unmoved": "Mer kůnnte di Sigg „$1“ nit op „$2“ ömnänne.",
- "usermerge-page-moved": "De Sigg „$1“ wood wood op „$2“ ömjenannt.",
- "usermerge-move-log": "Di Sigg weet automatesch ömjenannt weil mer {{GENDER:$1|dä Metmaacher|de Metmaacherėn|dä Metmaacher|de Metmaacherėn|dä Metmaacher}} „[[User:$1|$1]]“ met {{GENDER:$2|däm Metmaacher|dä Metmaacherėn|däm Metmaacher|dä Metmaacherėn|däm Metmaacher}} „[[User:$2|$2]]“ aam zesamme lääje sin.",
- "usermerge-page-deleted": "De Sigg „$1“ es fottjeschmeße."
+ "usermerge-move-log": "Di Sigg weet automatesch ömjenannt weil mer {{GENDER:$1|dä Metmaacher|de Metmaacherėn|dä Metmaacher|de Metmaacherėn|dä Metmaacher}} „[[User:$1|$1]]“ met {{GENDER:$2|däm Metmaacher|dä Metmaacherėn|däm Metmaacher|dä Metmaacherėn|däm Metmaacher}} „[[User:$2|$2]]“ aam zesamme lääje sin."
}
diff --git a/UserMerge/i18n/ku-latn.json b/UserMerge/i18n/ku-latn.json
index 1c8a092d..1e85a324 100644
--- a/UserMerge/i18n/ku-latn.json
+++ b/UserMerge/i18n/ku-latn.json
@@ -3,6 +3,5 @@
"authors": [
"Gomada"
]
- },
- "usermerge-page-deleted": "Rûpela $1 jê bir"
+ }
}
diff --git a/UserMerge/i18n/ml.json b/UserMerge/i18n/ml.json
index 354b9713..811f7bb4 100644
--- a/UserMerge/i18n/ml.json
+++ b/UserMerge/i18n/ml.json
@@ -5,21 +5,30 @@
"Shijualex"
]
},
+ "usermerge": "ഉപയോക്താക്കളെ ലയിപ്പിക്കുക, മായ്ക്കുക",
+ "usermerge-desc": "വിക്കി ഡേറ്റാബേസിൽ [[Special:UserMerge|ഒരു ഉപയോക്താവിന്റെ വിവരങ്ങൾ മറ്റൊരു ഉപയോക്താവിന്റേതുമായി സംയോജിപ്പിക്കുന്നു]] - സംയോജനത്തിനു ശേഷം പഴയ ഉപയോക്താക്കളെ മായ്ക്കുകയും ചെയ്യും. ''usermerge'' പദവി ആവശ്യമാണ്.",
"usermerge-badolduser": "അസാധുവായ പഴയ ഉപയോക്തൃനാമം",
"usermerge-badnewuser": "അസാധുവായ പുതിയ ഉപയോക്തൃനാമം",
- "usermerge-noolduser": "പഴയ ഉപയോക്തൃനാമം ശൂന്യമാക്കുക",
+ "usermerge-nonewuser": "ശൂന്യമായ പുതിയ ഉപയോക്തൃനാമം. \"{{GENDER:$1|$1}}\" എന്നതിലേക്കാണ് ലയിപ്പിക്കേണ്ടതെന്ന് ഊഹിക്കുന്നു.<br />\nസ്വീകാര്യമെങ്കിൽ \"{{int:usermerge-submit}}\" ഞെക്കുക.",
+ "usermerge-noolduser": "പഴയ ഉപയോക്തൃനാമം ശൂന്യമാക്കുക.",
"usermerge-same-old-and-new-user": "പുതിയ ഉപയോക്തൃനാമം പഴയതിൽ നിന്നും വ്യത്യസ്തമായിരിക്കണം",
+ "usermerge-fieldset": "സംയോജിപ്പിക്കാനുള്ള ഉപയോക്തൃനാമങ്ങൾ",
"usermerge-olduser": "പഴയ ഉപയോക്താവ് (ലയിപ്പിക്കാനുള്ളത്):",
"usermerge-newuser": "പുതിയ ഉപയോക്താവ് (ഇതിലേക്കു സം‌യോജിപ്പിക്കണം):",
"usermerge-deleteolduser": "പഴയ ഉപയോക്താവിനെ മായ്ക്കുക",
"usermerge-submit": "ഉപയോക്താവിനെ സം‌യോജിപ്പിക്കുക",
- "usermerge-userdeleted": "$1 ($2) മായ്ച്ചു.",
+ "usermerge-badtoken": "അസാധുവായ തിരുത്തൽ ചീട്ട്.",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) മായ്ച്ചു.",
"usermerge-userdeleted-log": "ഉപയോക്താവിനെ മായ്ച്ചു: $2 ($3)",
- "usermerge-updating": "$1 പട്ടിക ($2 to $3) പുതുക്കുന്നു",
"usermerge-success": "$1 ($2) നെ $3 ($4) ലേക്കു സം‌യോജിപ്പിക്കുന്ന പ്രക്രിയ പൂർത്തിയായി.",
"usermerge-success-log": "$2 ($3) എന്ന ഉപയോക്താവിനെ $4 ($5)ലേക്കു സം‌യോജിപ്പിച്ചു",
"usermerge-logpage": "ഉപയോക്തൃസം‌യോജന പ്രവർത്തനരേഖ",
"usermerge-logpagetext": "ഉപയോക്താക്കളെ സം‌യോജിപ്പിച്ചതിന്റെ പ്രവർത്തനരേഖയാണിത്",
"usermerge-noselfdelete": "താങ്കൾക്ക് താങ്കളെത്തന്നെ മായ്ക്കാനോ, മറ്റൊരു അക്കുണ്ടിലേക്കു സം‌യോജിപ്പിക്കാനോ പറ്റില്ല!",
- "right-usermerge": "ഉപയോക്താക്കളെ സം‌യോജിപ്പിക്കുക"
+ "usermerge-protectedgroup": "{{GENDER:$1|ഉപയോക്താവിനെ}} സംയോജിപ്പിക്കാൻ കഴിഞ്ഞില്ല: ഉപയോക്താവ് സംരക്ഷിത സംഘത്തിലുള്ളതാണ്.",
+ "right-usermerge": "ഉപയോക്താക്കളെ സം‌യോജിപ്പിക്കുക",
+ "action-usermerge": "ഉപയോക്താക്കളേ സംയോജിപ്പിക്കുക",
+ "usermerge-autopagedelete": "ഉപയോക്താക്കളെ സംയോജിപ്പിച്ചപ്പോൾ സ്വയം മായ്ച്ചവ",
+ "usermerge-page-unmoved": "$1 എന്ന താൾ $2 വിലേക്കു മാറ്റാൻ സാദ്ധ്യമല്ല.",
+ "usermerge-move-log": "\"[[User:$1|$1]]\" ഉപയോക്താവിനെ \"[[User:$2|{{GENDER:$2|$2}}]]\" എന്നതിലേക്ക് ലയിപ്പിച്ചപ്പോൾ സ്വയം മാറിയ താൾ"
}
diff --git a/UserMerge/i18n/mr.json b/UserMerge/i18n/mr.json
index 36c99fbb..3540980f 100644
--- a/UserMerge/i18n/mr.json
+++ b/UserMerge/i18n/mr.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Kaustubh",
- "V.narsikar"
+ "V.narsikar",
+ "संतोष दहिवळ"
]
},
"usermerge": "सदस्य एकत्रीकरण व वगळणे",
@@ -17,7 +18,6 @@
"usermerge-badtoken": "चुकीचे एडीट टोकन",
"usermerge-userdeleted": "$1 ($2) ला वगळण्यात आलेले आहे.",
"usermerge-userdeleted-log": "सदस्य वगळला: $2 ($3)",
- "usermerge-updating": "$1 सारणी ताजीतवानी करीत आहोत ($2 ते $3)",
"usermerge-success-log": "सदस्य $2 ($3) ला $4 ($5) मध्ये एकत्र केले",
"usermerge-logpage": "सदस्य एकत्रीकरण नोंद",
"usermerge-logpagetext": "ही सदस्य एकत्रीकरणाची सूची आहे",
diff --git a/UserMerge/i18n/ms.json b/UserMerge/i18n/ms.json
index f3d7b0e6..6f54efc2 100644
--- a/UserMerge/i18n/ms.json
+++ b/UserMerge/i18n/ms.json
@@ -19,20 +19,15 @@
"usermerge-badtoken": "Token penyuntingan tidak sah",
"usermerge-userdeleted": "$1 ($2) telah dihapuskan.",
"usermerge-userdeleted-log": "Pengguna terhapus: $2 ($3)",
- "usermerge-updating": "Mengemaskinikan jadual $1 ($2 kepada $3)",
"usermerge-success": "Penggabungan dari $1 ($2) kepada {{GENDER:$3|$3}} ($4) selesai.",
"usermerge-success-log": "Pengguna $2 ($3) digabungkan kepada {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Log penggabungan pengguna",
"usermerge-logpagetext": "Ini merupakan log tindakan menggabungkan pengguna.",
"usermerge-noselfdelete": "Anda tidak boleh menghapuskan atau menggabungkan diri anda sendiri!",
- "usermerge-unmergable": "Tidak dapat menggabungkan pengguna - ID atau namanya telah ditakrifkan sebagai tidak boleh digabungkan.",
"usermerge-protectedgroup": "Tidak dapat menggabungkan pengguna - pengguna menganggotai kumpulan yang terlindung.",
"right-usermerge": "Menggabungkan pengguna",
"action-usermerge": "menggabungkan pengguna",
- "usermerge-editcount-merge-success": "Menambahkan $1 {{PLURAL:$1|suntingan}} pengguna $2 kepada $3 {{PLURAL:$3|suntingan}} pengguna $4 ($5 {{PLURAL:$5|suntingan}} selepas penggabungan)",
"usermerge-autopagedelete": "Dihapuskan secara automatik apabila menggabungkan pengguna",
"usermerge-page-unmoved": "Halaman $1 tidak dapat dipindahkan ke $2.",
- "usermerge-page-moved": "Halaman $1 telah dipindahkan ke $2.",
- "usermerge-move-log": "Halaman dipindahkan secara automatik ketika menukar nama \"[[User:$1|$1]]\" menjadi \"[[User:$2|{{GENDER:$2|$2}}]]\"",
- "usermerge-page-deleted": "Halaman $1 dipadamkan"
+ "usermerge-move-log": "Halaman dipindahkan secara automatik ketika menukar nama \"[[User:$1|$1]]\" menjadi \"[[User:$2|{{GENDER:$2|$2}}]]\""
}
diff --git a/UserMerge/i18n/nb.json b/UserMerge/i18n/nb.json
index e2263da5..4dff2d7c 100644
--- a/UserMerge/i18n/nb.json
+++ b/UserMerge/i18n/nb.json
@@ -2,35 +2,34 @@
"@metadata": {
"authors": [
"Event",
- "Nghtwlkr"
+ "Nghtwlkr",
+ "Jon Harald Søby"
]
},
"usermerge": "Brukersammenslåing og -sletting",
"usermerge-desc": "Gir muligheten til å [[Special:UserMerge|slå sammen kontoer]] ved at alle referanser til en bruker byttes ut til en annen bruker i databasen, for så å slette den ene kontoen. Trenger rettigheten ''usermerge''.",
"usermerge-badolduser": "Gammelt brukernavn ugyldig",
"usermerge-badnewuser": "Nytt brukernavn ugyldig",
- "usermerge-nonewuser": "Nytt brukernavn tomt &ndash; antar sammenslåing til «$1».<br />\nKlikk «{{int:usermerge-submit}}» for å godta.",
+ "usermerge-nonewuser": "Nytt brukernavn tomt &ndash; antar sammenslåing til «{{GENDER:$1|$1}}».<br />\nKlikk «{{int:usermerge-submit}}» for å godta.",
"usermerge-noolduser": "Gammelt brukernavn tomt",
+ "usermerge-same-old-and-new-user": "Det gamle og det nye brukernavnet må være forskjellige.",
"usermerge-fieldset": "Brukernavn som skal slås sammen",
"usermerge-olduser": "Gammelt brukernavn (slå sammen fra):",
"usermerge-newuser": "Nytt brukernavn (slå sammen til):",
"usermerge-deleteolduser": "Slett gammel bruker",
"usermerge-submit": "Slå sammen brukere",
"usermerge-badtoken": "Ugyldig redigeringstegn",
- "usermerge-userdeleted": "$1 ($2) har blitt slettet.",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) har blitt slettet.",
"usermerge-userdeleted-log": "Slettet bruker: $2 ($3)",
- "usermerge-updating": "Oppdaterer $1-tabell ($2 til $3)",
- "usermerge-success": "Sammenslåing fra $1 ($2) til $3 ($4) er fullført.",
- "usermerge-success-log": "Brukeren $2 ($3) slått sammen med $4 ($5)",
+ "usermerge-success": "Sammenslåing fra {{GENDER:$1|$1}} ($2) til {{GENDER:$3|$3}} ($4) er fullført.",
+ "usermerge-success-log": "Brukeren {{GENDER:$2|$2}} ($3) slått sammen med {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Brukersammenslåingslogg",
"usermerge-logpagetext": "Dette er en logg over brukersammenslåinger.",
- "usermerge-noselfdelete": "Du kan ikke slette eller slå sammen din egen konto!",
- "usermerge-unmergable": "Kan ikke slå sammen den gamle kontoen. ID-en eller navnet anses som ikke-sammenslåbart.",
- "usermerge-protectedgroup": "Kan ikke slå sammen den gamle kontoen. Brukeren er medlem i en beskyttet brukergruppe.",
+ "usermerge-noselfdelete": "Du kan ikke slette eller slå sammen {{GENDER:$1|din}} egen konto!",
+ "usermerge-protectedgroup": "Kan ikke slå sammen den gamle {{GENDER:$1|kontoen}}: Brukeren er medlem i en beskyttet brukergruppe.",
"right-usermerge": "Slå sammen kontoer",
+ "action-usermerge": "slå sammen brukere",
"usermerge-autopagedelete": "Automatisk slettet ved brukersammenslåing",
"usermerge-page-unmoved": "Side $1 kunne ikke flyttes til $2.",
- "usermerge-page-moved": "Side $1 er flyttet til $2.",
- "usermerge-move-log": "Flyttet siden automatisk i forbindelse med sammenslåing av bruker \"[[User:$1|$1]]\" til \"[[User:$2|$2]]\"",
- "usermerge-page-deleted": "Slettet side $1"
+ "usermerge-move-log": "Flyttet siden automatisk i forbindelse med sammenslåing av bruker \"[[User:$1|$1]]\" til \"[[User:$2|{{GENDER:$2|$2}}]]\""
}
diff --git a/UserMerge/i18n/nds-nl.json b/UserMerge/i18n/nds-nl.json
index 1393c3a7..c5225216 100644
--- a/UserMerge/i18n/nds-nl.json
+++ b/UserMerge/i18n/nds-nl.json
@@ -18,20 +18,15 @@
"usermerge-badtoken": "Ongeldig bewarkingstoken",
"usermerge-userdeleted": "$1 ($2) is vort-edaon.",
"usermerge-userdeleted-log": "Vort-edaone gebruker: $2 ($3)",
- "usermerge-updating": "Tabel $1 an t biewarken ($2 naor $3)",
"usermerge-success": "Samenvoegen van $1 ($2) naor {{GENDER:$3|$3}} ($4) is aoferond.",
"usermerge-success-log": "Gebruker $2 ($3) samenevoegd naor {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Logboek gebrukerssamenvoegingen",
"usermerge-logpagetext": "Dit is t logboek van gebrukerssamenvoegingen.",
"usermerge-noselfdelete": "Je kunnen je eigen niet vortdoon of samenvoegen!",
- "usermerge-unmergable": "Disse gebruker kan niet samenevoeg wörden. De gebrukersnaam of t gebrukersnummer is in-esteld as niet samenvoegen.",
"usermerge-protectedgroup": "Kan de gebrukers niet samenvoegen. De gebruker zit in n bescharmde groep.",
"right-usermerge": "Gebrukers samenvoegen",
"action-usermerge": "gebrukers samenvoegen",
- "usermerge-editcount-merge-success": "$1 {{PLURAL:$1|bewarking|bewarkingen}} van de gebruker $2 bie $3 {{PLURAL:$3|bewarking|bewarkingen}} van de gebruker $4 zetten ($5 {{PLURAL:$5|bewarking|bewarkingen}} nao samenvoegen)",
"usermerge-autopagedelete": "Automaties vortedaon bie t samenvoegen van gebrukers",
"usermerge-page-unmoved": "De zied $1 kon niet herneumd wörden naor $2.",
- "usermerge-page-moved": "De zied $1 is herneumd naor $2.",
- "usermerge-move-log": "Zied is automaties verplaotst bie t herneumen van de gebruker \"[[User:$1|$1]]\" naor \"[[User:$2|$2]]\"",
- "usermerge-page-deleted": "Vortedaone zied $1"
+ "usermerge-move-log": "Zied is automaties verplaotst bie t herneumen van de gebruker \"[[User:$1|$1]]\" naor \"[[User:$2|$2]]\""
}
diff --git a/UserMerge/i18n/nl.json b/UserMerge/i18n/nl.json
index fcab9cef..414044cf 100644
--- a/UserMerge/i18n/nl.json
+++ b/UserMerge/i18n/nl.json
@@ -4,7 +4,11 @@
"McDutchie",
"SPQRobin",
"Siebrand",
- "Southparkfan"
+ "Southparkfan",
+ "Sjoerddebruin",
+ "Nemo bis",
+ "HanV",
+ "Mainframe98"
]
},
"usermerge": "Gebruikers samenvoegen en verwijderen",
@@ -20,22 +24,17 @@
"usermerge-deleteolduser": "Oude gebruiker verwijderen",
"usermerge-submit": "Gebruiker samenvoegen",
"usermerge-badtoken": "Ongeldig bewerkingstoken",
- "usermerge-userdeleted": "$1 ($2) is verwijderd.",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) is verwijderd.",
"usermerge-userdeleted-log": "Verwijderde gebruiker: $2 ($3)",
- "usermerge-updating": "Tabel $1 aan het bijwerken ($2 naar $3)",
- "usermerge-success": "Samenvoegen van $1 ($2) naar {{GENDER:$3|$3}} ($4) is afgerond.",
- "usermerge-success-log": "Gebruiker $2 ($3) samengevoegd naar {{GENDER:$4|$4}} ($5)",
+ "usermerge-success": "Samenvoegen van {{GENDER:$1|$1}} ($2) naar {{GENDER:$3|$3}} ($4) is afgerond.",
+ "usermerge-success-log": "Gebruiker {{GENDER:$2|$2}} ($3) samengevoegd naar {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Logboek gebruikerssamenvoegingen",
"usermerge-logpagetext": "Dit is het logboek van gebruikerssamenvoegingen.",
- "usermerge-noselfdelete": "U kunt uzelf niet verwijderen of samenvoegen!",
- "usermerge-unmergable": "Deze gebruiker kan niet samengevoegd worden. De gebruikersnaam of het gebruikersnummer is ingesteld als niet samen te voegen.",
- "usermerge-protectedgroup": "Het is niet mogelijk de gebruikers samen te voegen. De gebruiker zit in een beschermde groep.",
+ "usermerge-noselfdelete": "U kunt niet verwijderen of samenvoegen van {{GENDER:$1|uzelf}}!",
+ "usermerge-protectedgroup": "Het is niet mogelijk de {{GENDER:$1|gebruiker}} samen te voegen. De gebruiker zit in een beschermde groep.",
"right-usermerge": "Gebruikers samenvoegen",
"action-usermerge": "gebruikers samen te voegen",
- "usermerge-editcount-merge-success": "$1 {{PLURAL:$1|bewerking|bewerkingen}} of van $2 aan het toevoegen aan $3 {{PLURAL:$3|bewerking|bewerkingen}} van gebruiker $4 ($5 {{PLURAL:$5|bewerking|bewerkingen}} na samenvoegen)",
"usermerge-autopagedelete": "Automatisch verwijderd bij het samenvoegen van gebruikers",
"usermerge-page-unmoved": "De pagina $1 kon niet hernoemd worden naar $2.",
- "usermerge-page-moved": "De pagina $1 is hernoemd naar $2.",
- "usermerge-move-log": "Pagina automatisch hernoemd bij het samenvoegen van gebruiker \"[[User:$1|$1]]\" naar \"[[User:$2|{{GENDER:$2|$2}}]]\"",
- "usermerge-page-deleted": "Verwijderde pagina $1"
+ "usermerge-move-log": "Pagina automatisch hernoemd bij het samenvoegen van gebruiker \"[[User:$1|$1]]\" naar \"[[User:$2|{{GENDER:$2|$2}}]]\""
}
diff --git a/UserMerge/i18n/nn.json b/UserMerge/i18n/nn.json
index 43629ab6..1d916547 100644
--- a/UserMerge/i18n/nn.json
+++ b/UserMerge/i18n/nn.json
@@ -21,13 +21,11 @@
"usermerge-badtoken": "Ugyldig redigeringsteikn",
"usermerge-userdeleted": "$1 ($2) er sletta.",
"usermerge-userdeleted-log": "Sletta brukar: $2 ($3)",
- "usermerge-updating": "Oppdaterer $1-tabell ($2 til $3)",
"usermerge-success": "Samanslåing frå $1 ($2) til $3 ($4) er ferdig.",
"usermerge-success-log": "Brukaren $2 ($3) slått saman med $4 ($5)",
"usermerge-logpage": "Brukarsamanslåingslogg",
"usermerge-logpagetext": "Dette er ein logg over brukarsamanslåingar.",
"usermerge-noselfdelete": "Du kan ikkje slette eller slå saman din eigen konto!",
- "usermerge-unmergable": "Kan ikkje slå saman den gamle kontoen. ID-en eller namnet vert ikkje rekna som samanslåbart.",
"usermerge-protectedgroup": "Kan ikkje slå saman den gamle kontoen. Brukaren er medlem i ei verna brukargruppe.",
"right-usermerge": "Slå saman kontoar"
}
diff --git a/UserMerge/i18n/oc.json b/UserMerge/i18n/oc.json
index 78141a71..b12f6f6e 100644
--- a/UserMerge/i18n/oc.json
+++ b/UserMerge/i18n/oc.json
@@ -5,7 +5,7 @@
]
},
"usermerge": "Fusionar utilizaire e destruire",
- "usermerge-desc": "[[Special:UserMerge|Fusiona las referéncias d'un utilizaire cap a un autre]] dins la banca de donadas wiki - suprimirà tanben las fusions d'utilizaires ancianas seguentas.",
+ "usermerge-desc": "[[Special:UserMerge|Fusiona las referéncias d'un utilizaire cap a un autre]] dins la basa de donadas wiki - suprimirà tanben las fusions d'utilizaires ancianas seguentas.",
"usermerge-badolduser": "Nom d'utilizaire ancian invalid",
"usermerge-badnewuser": "Nom d'utilizaire novèl invalid",
"usermerge-nonewuser": "Nom d'utilizaire novèl void. Supausam que volètz fusionar dins \"{{GENDER:$1|$1}}\".<br />\nClicatz sus « {{int:usermerge-submit}} » per acceptar.",
@@ -16,15 +16,13 @@
"usermerge-deleteolduser": "Suprimir l'utilizaire ancian",
"usermerge-submit": "Fusionar utilizaire",
"usermerge-badtoken": "Geton d'edicion invalid",
- "usermerge-userdeleted": "$1($2) es destruch.",
+ "usermerge-userdeleted": "$1 ($2) es estat suprimi{{GENDER:$1|t|da}}.",
"usermerge-userdeleted-log": "Contributor escafat : $2($3)",
- "usermerge-updating": "Mesa a jorn de la taula $1 (de $2 a $3)",
- "usermerge-success": "La fusion de $1($2) a {{GENDER:$3|$3}} ($4) es completada.",
- "usermerge-success-log": "Contributor $2($3) fusionat amb {{GENDER:$4|$4}} ($5)",
+ "usermerge-success": "La fusion de {{GENDER:$1|$1}} ($2) amb {{GENDER:$3|$3}} ($4) es acabada.",
+ "usermerge-success-log": "{{GENDER:$2|Utilizator|Utilizatritz}} $2 ($3) fusiona{{GENDER:$2|t|da}} amb {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Jornal de las fusions de contributors",
"usermerge-logpagetext": "Aquò es un jornal de las accions de fusions de contributors.",
- "usermerge-noselfdelete": "Podètz pas, vos-meteis, vos suprimir ni vos fusionar !",
- "usermerge-unmergable": "Pòt pas fusionar a partir d'un utilizaire, d'un numèro d'identificacion o un nom que son estats definits coma non fusionables.",
- "usermerge-protectedgroup": "Impossible de fusionar a partir d'un utilizaire - l'utilizaire se tròba dins un grop protegit.",
+ "usermerge-noselfdelete": "Podètz pas, vos-{{GENDER:$1|meteis|meteissa}}, vos suprimir ni vos fusionar !",
+ "usermerge-protectedgroup": "Impossible de fusionar a partir d'un {{GENDER:$1|utilizaire|utilizaira}} - l'{{GENDER:$1|utilizaire|utilizaira}} se tròba dins un grop protegit.",
"right-usermerge": "Fusionar d'utilizaires"
}
diff --git a/UserMerge/i18n/pl.json b/UserMerge/i18n/pl.json
index bb6e1954..2cb7fc49 100644
--- a/UserMerge/i18n/pl.json
+++ b/UserMerge/i18n/pl.json
@@ -7,7 +7,9 @@
"Sp5uhe",
"Wpedzich",
"Alan ffm",
- "Chrumps"
+ "Chrumps",
+ "Michał Sobkowski",
+ "Matma Rex"
]
},
"usermerge": "Integruj i usuń użytkowników",
@@ -21,15 +23,15 @@
"usermerge-newuser": "Nowy użytkownik (integruj z)",
"usermerge-deleteolduser": "Usuń dotychczasowego użytkownika",
"usermerge-submit": "Integruj użytkowników",
- "usermerge-badtoken": "Nieprawidłowy żeton edycji",
+ "usermerge-badtoken": "Nieprawidłowy kod weryfikacyjny (token).",
"usermerge-userdeleted": "$1 ($2) {{GENDER:$1|został usunięty|została usunięta}}.",
"usermerge-userdeleted-log": "usunął użytkownika „$2” ($3)",
- "usermerge-success": "Integracja $1 ($2) z $3 ($4) zakończona.",
+ "usermerge-success": "Integracja {{GENDER:$1|$1}} ($2) z {{GENDER:$3|$3}} ($4) została zakończona.",
"usermerge-success-log": "zintegrował użytkownika „$2” ($3) do „$4” ($5)",
"usermerge-logpage": "Rejestr integracji użytkowników",
"usermerge-logpagetext": "To jest rejestr operacji integracji użytkowników.",
"usermerge-noselfdelete": "Nie możesz usunąć lub zintegrować {{GENDER:$1|samego|samej}} siebie!",
- "usermerge-protectedgroup": "Nie można zintegrować użytkownika – jest członkiem zabezpieczonej grupy.",
+ "usermerge-protectedgroup": "Nie można zintegrować {{GENDER:$1|użytkownika|użytkowniczki}} – jest członkiem zabezpieczonej grupy.",
"right-usermerge": "Łączenie kont użytkowników",
"action-usermerge": "łączenie kont użytkowników",
"usermerge-autopagedelete": "Automatycznie usuwane podczas scalania użytkowników",
diff --git a/UserMerge/i18n/pms.json b/UserMerge/i18n/pms.json
index 92390924..92fbb4f7 100644
--- a/UserMerge/i18n/pms.json
+++ b/UserMerge/i18n/pms.json
@@ -20,19 +20,15 @@
"usermerge-badtoken": "Geton d'edission nen bon",
"usermerge-userdeleted": "$1($2) a l'é stàit scancelà.",
"usermerge-userdeleted-log": "Utent scanselà: $2 ($3)",
- "usermerge-updating": "Antramentr ch'i agiornoma la tàola $1 ($2 a $3)",
"usermerge-success": "Union da $1($2) a {{GENDER:$3}} ($4) completà.",
"usermerge-success-log": "Utent $2 ($3) unì a {{GENDER:$4}} ($5)",
"usermerge-logpage": "Registr dle union utent",
"usermerge-logpagetext": "Sto sì a l'é un registr ëd le assion d'union utent.",
"usermerge-noselfdelete": "It peule pa scanselé o unì ti midem!",
- "usermerge-unmergable": "As peul pa unì l'utent - l'ID o ël nòm a l'é stàit definì pa unificàbil.",
"usermerge-protectedgroup": "As peul pa unì l'utent - l'utent a l'é ant na partìa protegiùa.",
"right-usermerge": "Uniss j'utent",
"action-usermerge": "uniss j'utent",
"usermerge-autopagedelete": "Scancelà automaticament an unificand j'utent",
"usermerge-page-unmoved": "La pàgina $1 a peul pa esse tramudà a $2.",
- "usermerge-page-moved": "La pàgina $1 a l'ha fàit San Martin a $2.",
- "usermerge-move-log": "Pàgina tramudà n'automàtich damëntrè ch'as arbatiava \"[[User:$1|$1]]\" an \"[[User:$2|{{GENDER:$2|$2}}]]\"",
- "usermerge-page-deleted": "Scancelà la pagina $1"
+ "usermerge-move-log": "Pàgina tramudà n'automàtich damëntrè ch'as arbatiava \"[[User:$1|$1]]\" an \"[[User:$2|{{GENDER:$2|$2}}]]\""
}
diff --git a/UserMerge/i18n/pt-br.json b/UserMerge/i18n/pt-br.json
index 7021c23f..768f35b6 100644
--- a/UserMerge/i18n/pt-br.json
+++ b/UserMerge/i18n/pt-br.json
@@ -5,28 +5,39 @@
"Eduardo.mps",
"Jorge Morais",
"Luckas",
- "Helder.wiki"
+ "Helder.wiki",
+ "He7d3r",
+ "Nemo bis",
+ "Araceletorres",
+ "Opraco",
+ "!Silent",
+ "Felipe L. Ewald"
]
},
"usermerge": "Fusão e eliminação de utilizadores",
"usermerge-desc": "[[Special:UserMerge|Unifica as referências de um usuário em outro usuário]] no banco de dados da wiki - também apagará o antigo usuário após a fusão. Requer privilégio ''usermerge''",
- "usermerge-badolduser": "Nome antigo inválido",
- "usermerge-badnewuser": "Nome novo inválido",
+ "usermerge-badolduser": "Nome antigo inválido.",
+ "usermerge-badnewuser": "Nome novo inválido.",
"usermerge-nonewuser": "Novo nome de usuário vazio. Assumida fusão com \"{{GENDER:$1|$1}}\".<br />\nClique \"{{int:usermerge-submit}}\" para aceitar.",
- "usermerge-noolduser": "Limpar nome antigo",
+ "usermerge-noolduser": "Limpar nome antigo.",
+ "usermerge-same-old-and-new-user": "O antigo e o novo nome de usuário necessitam devem ser distintos.",
"usermerge-fieldset": "Nomes de usuário a unificar",
"usermerge-olduser": "Usuário antigo (fundir de):",
"usermerge-newuser": "Usuário novo (fundir para):",
"usermerge-deleteolduser": "Apagar usuário antigo",
"usermerge-submit": "Fundir usuário",
- "usermerge-badtoken": "Token de edição inválida",
+ "usermerge-badtoken": "Token de edição inválido.",
"usermerge-userdeleted": "$1 ($2) foi eliminado.",
"usermerge-userdeleted-log": "Usuário apagado: $2 ($3)",
"usermerge-success": "Fusão de $1 ($2) para $3 ($4) está completa.",
"usermerge-success-log": "Usuário $2 ($3) fundido com {{GENDER:$4|$4}} ($5)",
- "usermerge-logpage": "Registro de fusão de utilizadores",
+ "usermerge-logpage": "Registro de fusão de usuários",
"usermerge-logpagetext": "Este é um registro de ações de fusão de utilizadores.",
- "usermerge-noselfdelete": "Você não pode apagar ou fundir a partir de si próprio!",
- "usermerge-protectedgroup": "Não é possível fundir este usuário: Usuário está em um grupo protegido.",
- "right-usermerge": "Fundir usuários"
+ "usermerge-noselfdelete": "Não pode apagar ou fundir a sua {{GENDER:$1|própria}} conta!",
+ "usermerge-protectedgroup": "Não é possível fundir a conta {{GENDER:$1|deste usuário|desta usuária}}: {{GENDER:$1|o usuário|a usuária}} está num grupo protegido.",
+ "right-usermerge": "Fundir usuários",
+ "action-usermerge": "fundir usuários",
+ "usermerge-autopagedelete": "Excluída automaticamente ao fundir usuários",
+ "usermerge-page-unmoved": "A página $1 não pode ser movida para $2.",
+ "usermerge-move-log": "Página movida automaticamente ao fundir {{GENDER:$1|o usuário|os usuários}} \"[[User:$1|$1]]\" com \"[[User:$2|$2]]\""
}
diff --git a/UserMerge/i18n/pt.json b/UserMerge/i18n/pt.json
index 79e7ecad..5b91108c 100644
--- a/UserMerge/i18n/pt.json
+++ b/UserMerge/i18n/pt.json
@@ -10,27 +10,29 @@
"Sir Lestaty de Lioncourt",
"Waldir",
"Vitorvicentevalente",
- "Helder.wiki"
+ "Helder.wiki",
+ "He7d3r"
]
},
"usermerge": "Fusão e eliminação de utilizadores",
"usermerge-desc": "[[Special:UserMerge|Faz a fusão das referências a um utilizador com as de outro utilizador]] na base de dados da wiki - também apaga o utilizador antigo após a fusão. Requer o privilégio ''usermerge''",
- "usermerge-badolduser": "Nome antigo inválido",
- "usermerge-badnewuser": "Nome novo inválido",
+ "usermerge-badolduser": "Nome antigo inválido.",
+ "usermerge-badnewuser": "Nome novo inválido.",
"usermerge-nonewuser": "O nome de utilizador novo está vazio. Será assumida a fusão com {{GENDER:$1|$1}}.<br />\nClique \"{{int:usermerge-submit}}\" para aceitar.",
"usermerge-noolduser": "O nome de utilizador antigo está vazio.",
- "usermerge-fieldset": "Nomes de utilizadores a fundir",
+ "usermerge-same-old-and-new-user": "O nome de utilizador(a) antigo e novo têm de ser distintos.",
+ "usermerge-fieldset": "Nomes de utilizador a fundir",
"usermerge-olduser": "Utilizador antigo (fundir de):",
"usermerge-newuser": "Utilizador novo (fundir para):",
"usermerge-deleteolduser": "Apagar utilizador antigo",
"usermerge-submit": "Fundir utilizador",
- "usermerge-badtoken": "Chave de edição inválida",
+ "usermerge-badtoken": "Chave de edição inválida.",
"usermerge-userdeleted": "$1 ($2) foi {{GENDER:$1|eliminado|eliminada|eliminado(a)}}.",
"usermerge-userdeleted-log": "Utilizador apagado: $2 ($3)",
"usermerge-success": "A fusão de {{GENDER:$1|$1}} ($2) com {{GENDER:$3|$3}} ($4) está completa.",
"usermerge-success-log": "Conta de {{GENDER:$2|utilizador $2|utilizadora $2}} ($3) fundida com {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Registo de fusão de utilizadores",
- "usermerge-logpagetext": "Este é um registro de ações de fusão de utilizadores.",
+ "usermerge-logpagetext": "Este é um registo de ações de fusão de utilizadores.",
"usermerge-noselfdelete": "Não pode apagar ou fundir a sua {{GENDER:$1|própria}} conta!",
"usermerge-protectedgroup": "Não é possível fundir a conta {{GENDER:$1|deste utilizador|desta utilizadora}}: {{GENDER:$1|o utilizador|a utilizadora}} está num grupo protegido.",
"right-usermerge": "Fundir utilizadores",
diff --git a/UserMerge/i18n/qqq.json b/UserMerge/i18n/qqq.json
index 96068560..07640ef7 100644
--- a/UserMerge/i18n/qqq.json
+++ b/UserMerge/i18n/qqq.json
@@ -13,7 +13,7 @@
]
},
"usermerge": "{{doc-special|UserMerge}}",
- "usermerge-desc": "{{desc|name=User Merge|url=http://www.mediawiki.org/wiki/Extension:User_Merge_and_Delete}}",
+ "usermerge-desc": "{{desc|name=User Merge|url=https://www.mediawiki.org/wiki/Extension:User_Merge_and_Delete}}",
"usermerge-badolduser": "Used as error message.",
"usermerge-badnewuser": "Used as error message.",
"usermerge-nonewuser": "{{doc-important|Do not translate <code><nowiki>{{int:usermerge-submit}}</nowiki></code>.}}\nUsed as error message.\n\nRefers to {{msg-mw|Usermerge-submit}}.\n\nParameters:\n* $1 - username \"Anonymous\" (hard-coded)",
@@ -28,11 +28,11 @@
"usermerge-userdeleted": "Status message. Parameters:\n* $1 is the name of a user that was deleted (not linked).\n* $2 is the ID of a user that was deleted.",
"usermerge-userdeleted-log": "Parameters:\n* $2 is a user name (not linked) of the deleted user\n* $3 is a user ID of the deleted user",
"usermerge-success": "Status message. Parameters:\n* $1 is a user name (not linked) that is merged into another user\n* $2 is a user ID of the source user\n* $3 is a user name (not linked) that the other user is merged into; can be used for GENDER\n* $4 is a user ID of the target user",
- "usermerge-success-log": "Parameters:\n* $2 is a user name (not linked) that is merged into another user\n* $3 is a user ID of the source user\n* $4 is a user name (not linked) that the other user is merged into; can be used for GENDER\n* $5 is a user ID of the target user",
+ "usermerge-success-log": "Parameters:\n* $1 - (Unused)\n* $2 - a user name (not linked) that is merged into another user\n* $3 - a user ID of the source user\n* $4 - a user name (not linked) that the other user is merged into; can be used for GENDER\n* $5 - a user ID of the target user",
"usermerge-logpage": "{{doc-logpage}}",
"usermerge-logpagetext": "Used as heading in [[Special:Log/usermerge]].",
- "usermerge-noselfdelete": "Used as error message when merging users. $1 is the current user's name, for GENDER.",
- "usermerge-protectedgroup": "Used as error message when merging users. $1 is the user's name, for GENDER.",
+ "usermerge-noselfdelete": "Used as error message when merging users. Parameters:\n* $1 - the current user's name, for GENDER",
+ "usermerge-protectedgroup": "Used as error message when merging users. Parameters:\n* $1 - the user's name, for GENDER",
"right-usermerge": "{{doc-right|usermerge}}\n{{Identical|Merge user}}",
"action-usermerge": "{{doc-action|usermerge}}\n{{Identical|Merge user}}",
"usermerge-autopagedelete": "Used as reason for deleting page.",
diff --git a/UserMerge/i18n/ro.json b/UserMerge/i18n/ro.json
index bc5037c4..34da2827 100644
--- a/UserMerge/i18n/ro.json
+++ b/UserMerge/i18n/ro.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"KlaudiuMihaila",
- "Mihai"
+ "Mihai",
+ "XXN"
]
},
"usermerge": "Contopire și ștergere utilizatori",
@@ -14,18 +15,16 @@
"usermerge-fieldset": "Nume de utilizator de contopit",
"usermerge-olduser": "Utilizator vechi (redenumește din):",
"usermerge-newuser": "Utilizator nou (contopește în):",
- "usermerge-deleteolduser": "Şterge contul de utilizator vechi",
+ "usermerge-deleteolduser": "Șterge contul de utilizator vechi",
"usermerge-submit": "Contopește utilizatorul",
"usermerge-badtoken": "Jetonul de modificare este invalid",
"usermerge-userdeleted": "$1 ($2) a fost șters.",
- "usermerge-userdeleted-log": "Şterge utilizator: $2 ($3)",
- "usermerge-updating": "Actualizarea tabelului $1 ($2 în $3)",
+ "usermerge-userdeleted-log": "Șters utilizator: $2 ($3)",
"usermerge-success": "Contopirea din $1 ($2) în $3 ($4) este completă.",
"usermerge-success-log": "Utilizatorul $2 ($3) a fost contopit în $4 ($5)",
"usermerge-logpage": "Jurnal contopire utilizatori",
"usermerge-logpagetext": "Acesta este jurnalul acțiunilor de contopire a conturilor de utilizator.",
"usermerge-noselfdelete": "Nu poate fi șters sau contopit contul propriu!",
- "usermerge-unmergable": "Nu poate fi contopit utilizatorul - ID-ul sau numele a fost definit ca fiind de necontopit.",
"usermerge-protectedgroup": "Nu poate fi contopit utilizatorul - utilizatorul face parte dintr-un grup protejat.",
"right-usermerge": "Contopire conturi de utilizator"
}
diff --git a/UserMerge/i18n/roa-tara.json b/UserMerge/i18n/roa-tara.json
index e6b6628f..2b7c2cd5 100644
--- a/UserMerge/i18n/roa-tara.json
+++ b/UserMerge/i18n/roa-tara.json
@@ -17,22 +17,17 @@
"usermerge-deleteolduser": "Scangellate vecchie utende",
"usermerge-submit": "Scuagghie l'utende",
"usermerge-badtoken": "Gettone de cangiamende invalide.",
- "usermerge-userdeleted": "$1 ($2) ha state scangellate.",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) ha state scangellate.",
"usermerge-userdeleted-log": "Utende scangellate: $2 ($3)",
- "usermerge-updating": "Stoche aggiorne $1 tabbelle ($2 a $3)",
- "usermerge-success": "'U scuagghiamende da $1 ($2) a {{GENDER:$3|$3}} ($4) ha state combletate.",
- "usermerge-success-log": "Utende $2 ($3) scuagghiate jndr'à {{GENDER:$4|$4}} ($5)",
+ "usermerge-success": "'U scuagghiamende da {{GENDER:$1|$1}} ($2) a {{GENDER:$3|$3}} ($4) ha state combletate.",
+ "usermerge-success-log": "Utende {{GENDER:$2|$2}} ($3) scuagghiate jndr'à {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Archivije de le scuagghiaminde de le utinde",
"usermerge-logpagetext": "Quiste jè 'n'archivie de le aziune de scuagghiamende de l'utende.",
- "usermerge-noselfdelete": "Non ge puà scangellarte o scuagghiarte da sule!",
- "usermerge-unmergable": "Non ge pozze scuagghià l'utende: L'ID o 'u nome ha state definite cumme none scuagghiabbile.",
- "usermerge-protectedgroup": "Non ge pozze scuagghia cu l'utende: L'utende ste jndr'à 'nu gruppe prutette.",
+ "usermerge-noselfdelete": "Non ge puà scangellarte o scuagghiarte {{GENDER:$1|da sule}}!",
+ "usermerge-protectedgroup": "Non ge pozze scuagghia cu {{GENDER:$1|l'utende}}: L'utende ste jndr'à 'nu gruppe prutette.",
"right-usermerge": "Scuagghie le utinde",
"action-usermerge": "scuagghie le utinde",
- "usermerge-editcount-merge-success": "Stoche aggiunge $1 {{PLURAL:$1|'u cangiamende|le cangiaminde}} de l'utende $2 jndr'à $3 {{PLURAL:$3|'u cangiamende|le cangiaminde}} de l'utende $4 ($5 {{PLURAL:$5|'u cangiamende|le cangiaminde}} apprisse 'u scuagghiamende)",
"usermerge-autopagedelete": "Automaticamende scangellate quanne onne state scuagghiate le utinde",
"usermerge-page-unmoved": "'A pàgene $1 non ge pò essere spustate sus a $2.",
- "usermerge-page-moved": "'A pàgene $1 ha state spustete sus a $2.",
- "usermerge-move-log": "Automaticamende spustate 'a pàgene quanne ha state scuagghiate l'utende \"[[User:$1|$1]]\" jndr'à \"[[User:$2|{{GENDER:$2|$2}}]]\"",
- "usermerge-page-deleted": "Pàgene scangellate $1"
+ "usermerge-move-log": "Automaticamende spustate 'a pàgene quanne ha state scuagghiate l'utende \"[[User:$1|$1]]\" jndr'à \"[[User:$2|{{GENDER:$2|$2}}]]\""
}
diff --git a/UserMerge/i18n/ru.json b/UserMerge/i18n/ru.json
index 1137b229..d599e066 100644
--- a/UserMerge/i18n/ru.json
+++ b/UserMerge/i18n/ru.json
@@ -17,7 +17,7 @@
"usermerge-badnewuser": "Неправильное новое имя участника",
"usermerge-nonewuser": "Пустое новое имя участника — при слиянии с «{{GENDER:$1|$1}}».<br />\nНажмите «{{int:usermerge-submit}}», чтобы подтвердить действие.",
"usermerge-noolduser": "Пустое старое имя участника",
- "usermerge-same-old-and-new-user": "Старое и новое имя пользователя должны быть различны.",
+ "usermerge-same-old-and-new-user": "Старое и новое имена учётных записей должны различаться.",
"usermerge-fieldset": "Учётные записи для объединения",
"usermerge-olduser": "Старая учётная запись (объединить с):",
"usermerge-newuser": "Новая учётная запись (объединить в):",
diff --git a/UserMerge/i18n/rue.json b/UserMerge/i18n/rue.json
index 4d8ee366..2ef808b3 100644
--- a/UserMerge/i18n/rue.json
+++ b/UserMerge/i18n/rue.json
@@ -7,6 +7,5 @@
"usermerge-noolduser": "Порожнє старе мено хоснователя",
"usermerge-deleteolduser": "Змазати старого хоснователя",
"usermerge-userdeleted": "$1 ($2) быв змазаный.",
- "usermerge-userdeleted-log": "Змазаный хоснователь: $2 ($3)",
- "usermerge-updating": "Актуалізує ся таблиця $1 ($2 на $3)"
+ "usermerge-userdeleted-log": "Змазаный хоснователь: $2 ($3)"
}
diff --git a/UserMerge/i18n/si.json b/UserMerge/i18n/si.json
index d6ba3343..0cd89c6c 100644
--- a/UserMerge/i18n/si.json
+++ b/UserMerge/i18n/si.json
@@ -19,16 +19,12 @@
"usermerge-badtoken": "වලංගු නොවන සංස්කරණ සංඥාව",
"usermerge-userdeleted": "$1 ($2) මකනු ලැබ ඇත.",
"usermerge-userdeleted-log": "මකනු ලැබූ පරිශීලක: $2 ($3)",
- "usermerge-updating": "$1 වගුව යාවත්කාලීන කිරීම ($2 ,$3ට )",
"usermerge-success": "$1 ($2) සිට $3 ($4) දක්වා මුසු කිරීම සම්පූර්ණ විය.",
"usermerge-success-log": "$2 ($3) පරිශීලකයා $4 ($5) ට මුසු කරන ලදී",
"usermerge-logpage": "පරිශීලක මුසු කිරීම් ලඝු සටහන",
"usermerge-logpagetext": "මෙය පරිශීලක මුසු කිරීම් කාර්යයන්වල ලඝු සටහනකි.",
"usermerge-noselfdelete": "ඔබ විසින්ම මැකීම හෝ මුසු කිරීම සිදු කරනු ලැබිය නොහැකිය!",
- "usermerge-unmergable": "පරිශීලකයා මඟින් මුසු කළ නොහැකියි - ID හෝ නම හඳුන්වා දී තිබෙන්නේ මුසු කළ නොහැකි ලෙසයි.",
"usermerge-protectedgroup": "පරිශිලකයා මඟින් මුසු කළ නොහැකියි - පරිශීලකයා සිටින්නේ ආරක්ෂිත කණ්ඩායමකය.",
"right-usermerge": "පරිශීලකයින් මුසු කිරීම",
- "usermerge-page-unmoved": "$1 පිටුව $2 වෙත ගෙනයා නොහැක.",
- "usermerge-page-moved": "$1 පිටුව $2 වෙත ගෙනයන ලදි.",
- "usermerge-page-deleted": "$1 මකාදැමූ පිටුව"
+ "usermerge-page-unmoved": "$1 පිටුව $2 වෙත ගෙනයා නොහැක."
}
diff --git a/UserMerge/i18n/sk.json b/UserMerge/i18n/sk.json
index ef52bbeb..fcd79e95 100644
--- a/UserMerge/i18n/sk.json
+++ b/UserMerge/i18n/sk.json
@@ -18,13 +18,11 @@
"usermerge-badtoken": "Neplatný token úprav",
"usermerge-userdeleted": "$1($2) bol zmazaný.",
"usermerge-userdeleted-log": "Zmazaný používateľ: $2($3)",
- "usermerge-updating": "Aktualizuje sa tabuľka $1 ($2 na $3)",
"usermerge-success": "Zlúčenie z $1($2) do $3($4) je dokončené.",
"usermerge-success-log": "Používateľ $2($3) bol zlúčený do $4($5)",
"usermerge-logpage": "Záznam zlúčení používateľov",
"usermerge-logpagetext": "Toto je záznam zlúčení používateľov.",
"usermerge-noselfdelete": "Nemôžete zmazať alebo zlúčiť svoj účet!",
- "usermerge-unmergable": "Nebolo možné vykonať zlúčenie používateľa - zdrojové meno alebo ID bolo definované ako nezlúčiteľné.",
"usermerge-protectedgroup": "Nebolo možné zlúčiť uvedeného používateľa - používateľ je v chránenej skupine.",
"right-usermerge": "Zlučovať používateľov"
}
diff --git a/UserMerge/i18n/sl.json b/UserMerge/i18n/sl.json
index cfe772ac..3cdb129c 100644
--- a/UserMerge/i18n/sl.json
+++ b/UserMerge/i18n/sl.json
@@ -17,22 +17,17 @@
"usermerge-deleteolduser": "Izbriši starega uporabnika",
"usermerge-submit": "Spoji uporabnika",
"usermerge-badtoken": "Neveljavni žeton urejanja",
- "usermerge-userdeleted": "$1 ($2) je bil izbrisan.",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) smo izbrisali.",
"usermerge-userdeleted-log": "Izbrisal(-a) uporabnika: $2 ($3)",
- "usermerge-updating": "Posodabljanje tabele $1 ($2 v $3)",
- "usermerge-success": "Združitev iz $1 ($2) v {{GENDER:$3|$3}} ($4) je končana.",
- "usermerge-success-log": "Uporabnik $2 ($3) je spojen z {{GENDER:$4|$4}} ($5)",
+ "usermerge-success": "Združitev iz {{GENDER:$1|$1}} ($2) v {{GENDER:$3|$3}} ($4) je končana.",
+ "usermerge-success-log": "{{GENDER:$2|Uporabnika|Uporabnico}} $2 ($3) smo spojili z {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Dnevnik spajanja uporabnikov",
"usermerge-logpagetext": "To je dnevnik dejanj spajanja uporabnikov.",
- "usermerge-noselfdelete": "Ne morete izbrisati ali združevati sebe!",
- "usermerge-unmergable": "Ne morem združiti uporabnika – ID ali ime je opredeljeno kot nezdružljivo.",
- "usermerge-protectedgroup": "Ne morem združiti uporabnika – uporabnik je v zaščiteni skupini.",
+ "usermerge-noselfdelete": "Ne morete izbrisati ali združevati {{GENDER:$1|sebe}}!",
+ "usermerge-protectedgroup": "Ne morem združiti {{GENDER:$1|uporabnika|uporabnice}} – {{GENDER:$1|uporabnik|uporabnica}} je v zaščiteni skupini.",
"right-usermerge": "Spajanje uporabnikov",
"action-usermerge": "spajanje uporabnikov",
- "usermerge-editcount-merge-success2": "Združi število urejanj $1 in $2 v novo vsoto $3 {{PLURAL:$3|urejanja|urejanj}}",
"usermerge-autopagedelete": "Samodejno izbrisano med združevanjem uporabnikov",
"usermerge-page-unmoved": "Strani $1 ni bilo mogoče prestaviti na $2.",
- "usermerge-page-moved": "Stran $1 je bila prestavljena na $2.",
- "usermerge-move-log": "Samodejno prestavljena stran med združevanjem uporabnika »[[User:$1|$1]]« z »[[User:$2|{{GENDER:$2|$2}}]]«",
- "usermerge-page-deleted": "Izbrisana stran $1"
+ "usermerge-move-log": "Samodejno prestavljena stran med združevanjem uporabnika »[[User:$1|$1]]« z »[[User:$2|{{GENDER:$2|$2}}]]«"
}
diff --git a/UserMerge/i18n/sr-ec.json b/UserMerge/i18n/sr-ec.json
index 8007857e..90a7336b 100644
--- a/UserMerge/i18n/sr-ec.json
+++ b/UserMerge/i18n/sr-ec.json
@@ -7,26 +7,30 @@
"Михајло Анђелковић"
]
},
- "usermerge": "Спаја и брише кориснике",
- "usermerge-badolduser": "Неисправно старо корисничко име",
- "usermerge-badnewuser": "Неисправно ново корисничко име",
- "usermerge-noolduser": "Испразни старо корисничко име",
- "usermerge-same-old-and-new-user": "Старо и ново корисничко име се морају разликовати.",
- "usermerge-fieldset": "Корисничка имена за спајање",
- "usermerge-olduser": "Стари корисник (спајање од):",
- "usermerge-newuser": "Нови корисник (спајање са):",
- "usermerge-deleteolduser": "Обриши старог корисника",
- "usermerge-submit": "Споји корисника",
- "usermerge-userdeleted": "$1 ($2) је {{GENDER:$1|обрисан|обрисана}}.",
- "usermerge-userdeleted-log": "Обрисан корисник: $2 ($3)",
- "usermerge-success": "Спајање {{GENDER:$1|$1}} ($2) са {{GENDER:$3|$3}} ($4) је завршено.",
- "usermerge-success-log": "{{GENDER:$2|Корисник|Корисница}} $2 ($3) је {{GENDER:$2|спојен|спојена}} са {{GENDER:$4|$4}} ($5)",
- "usermerge-logpage": "Дневник спајања корисника",
- "usermerge-logpagetext": "Ово је историја спајања корисника.",
- "usermerge-noselfdelete": "Не можете да се обришете или спојите са {{GENDER:$1|самим собом}}!",
- "usermerge-protectedgroup": "Није могуће спојити овог {{GENDER:$1|корисника}} са другим — налази се у заштићеној групи.",
- "right-usermerge": "спајање корисника",
- "action-usermerge": "спајање корисника",
- "usermerge-autopagedelete": "Аутоматски обрисано због спајања корисника",
- "usermerge-move-log": "Аутоматско премештање странице због спајања корисника „[[User:$1|$1]]“ у „[[User:$2|{{GENDER:$2|$2}}]]“"
+ "usermerge": "Обједињавање и брисање налога",
+ "usermerge-desc": "[[Special:UserMerge|Преноси доприносе једног корисника на другог]] у бази викија; биће избрисани и стари корисници. Потребно је право ''usermerge''.",
+ "usermerge-badolduser": "Неисправно старо корисничко име.",
+ "usermerge-badnewuser": "Неисправно ново корисничко име.",
+ "usermerge-nonewuser": "Ново корисничко име је празно. Предложено је обједињавање са „{{GENDER:$1|$1}}“.<br />\nКликните на „{{int:usermerge-submit}}“ да бисте прихватили.",
+ "usermerge-noolduser": "Старо корисничко име је празно.",
+ "usermerge-same-old-and-new-user": "Ново име налога се мора разликовати од старог.",
+ "usermerge-fieldset": "Налози за обједињавање",
+ "usermerge-olduser": "Стари налог:",
+ "usermerge-newuser": "Нови налог:",
+ "usermerge-deleteolduser": "Избриши стари налог",
+ "usermerge-submit": "Обједини налоге",
+ "usermerge-badtoken": "Неисправан токен измене.",
+ "usermerge-userdeleted": "$1 ($2) је {{GENDER:$1|избрисан|избрисана}}.",
+ "usermerge-userdeleted-log": "Избрисан корисник: $2 ($3)",
+ "usermerge-success": "Обједињавање корисника {{GENDER:$1|$1}} ($2) и {{GENDER:$3|$3}} ($4) је завршено.",
+ "usermerge-success-log": "Налози корисника $2 ($3) и $4 ($5) су обједињени.",
+ "usermerge-logpage": "Дневник обједињавања налога",
+ "usermerge-logpagetext": "Ово је дневник обједињавања налога.",
+ "usermerge-noselfdelete": "Не можете избрисати или објединити {{GENDER:$1|сами себе}}!",
+ "usermerge-protectedgroup": "Не могу да објединим налоге {{GENDER:$1|корисника|кориснице}} јер је у заштићеној групи.",
+ "right-usermerge": "обједињавање налога",
+ "action-usermerge": "обједињавање налога",
+ "usermerge-autopagedelete": "Аутоматски се брише при обједињавању налога.",
+ "usermerge-page-unmoved": "Не могу да преместим страницу $1 у $2.",
+ "usermerge-move-log": "Аутоматски премештено при обједињавању налога „[[User:$1|$1]]“ и „[[User:$2|$2]]“."
}
diff --git a/UserMerge/i18n/sr-el.json b/UserMerge/i18n/sr-el.json
index 3f83379f..4ae50131 100644
--- a/UserMerge/i18n/sr-el.json
+++ b/UserMerge/i18n/sr-el.json
@@ -10,6 +10,7 @@
"usermerge-badolduser": "Neispravno staro korisničko ime",
"usermerge-badnewuser": "Neispravno novo korisničko ime",
"usermerge-noolduser": "Isprazni staro korisničko ime",
+ "usermerge-same-old-and-new-user": "Staro i novo korisničko ime se moraju razlikovati.",
"usermerge-fieldset": "Korisnička imena za spajanje",
"usermerge-olduser": "Stari korisnik (spajanje od):",
"usermerge-newuser": "Novi korisnik (spajanje sa):",
@@ -20,8 +21,11 @@
"usermerge-success": "Spajanje {{GENDER:$1|$1}} ($2) sa {{GENDER:$3|$3}} ($4) je završeno.",
"usermerge-success-log": "{{GENDER:$2|Korisnik|Korisnica}} $2 ($3) je {{GENDER:$2|spojen|spojena}} sa {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Dnevnik spajanja korisnika",
- "usermerge-logpagetext": "Ovo je istorija spajanja korisnika.",
+ "usermerge-logpagetext": "Ovo je dnevnik spajanja korisnika.",
"usermerge-noselfdelete": "Ne možete da se obrišete ili spojite sa {{GENDER:$1|samim sobom}}!",
"usermerge-protectedgroup": "Nije moguđe spojiti ovog korisnika sa drugim — nalazi se u zaštićenoj grupi.",
- "right-usermerge": "spajanje korisnika"
+ "right-usermerge": "spajanje korisnika",
+ "action-usermerge": "spajanje korisnika",
+ "usermerge-autopagedelete": "Automatski obrisano zbog spajanja korisnika",
+ "usermerge-move-log": "Automatsko premeštanje stranice zbog spajanja korisnika „[[User:$1|$1]]“ u „[[User:$2|{{GENDER:$2|$2}}]]“"
}
diff --git a/UserMerge/i18n/stq.json b/UserMerge/i18n/stq.json
index 1a1c8cf5..10d95a42 100644
--- a/UserMerge/i18n/stq.json
+++ b/UserMerge/i18n/stq.json
@@ -17,13 +17,11 @@
"usermerge-badtoken": "Uungultich Beoarbaidjen-Token",
"usermerge-userdeleted": "„$1“ ($2) wuud läsked.",
"usermerge-userdeleted-log": "Läskeden Benutsernoome: „$2“ ($3)",
- "usermerge-updating": "Aktualisierenge $1 Tabelle ($2 ätter $3)",
"usermerge-success": "Ju Touhoopefierenge fon „$1“ ($2) ätter „$3“ ($4) is fulboodich.",
"usermerge-success-log": "Benutsernoome „$2“ ($3) touhoopefierd mäd „$4“ ($5)",
"usermerge-logpage": "Benutserkonten-Touhoopefierenge-Logbouk",
"usermerge-logpagetext": "Dit is dät Logbouk fon do Benutserkonten-Touhoopefierengen.",
"usermerge-noselfdelete": "Touhoopefierenge mäd aan sälwen is nit muugelk!",
- "usermerge-unmergable": "Touhoopefierenge nit muugelk - ID of Benutsernoome wuud as nit touhoopefierboar definierd.",
"usermerge-protectedgroup": "Touhoopefierenge nit muugelk - Benutsernoome is in ne skutsede Gruppe.",
"right-usermerge": "Benutserkonten fereenje"
}
diff --git a/UserMerge/i18n/szl.json b/UserMerge/i18n/szl.json
index 89dce39d..c410313a 100644
--- a/UserMerge/i18n/szl.json
+++ b/UserMerge/i18n/szl.json
@@ -17,13 +17,11 @@
"usermerge-badtoken": "Ńyprowidłowy żetůn sprowjyńo",
"usermerge-userdeleted": "$1 ($2) zostoł wyćepany.",
"usermerge-userdeleted-log": "wyćepoł użytkowńika „$2” ($3)",
- "usermerge-updating": "Uodśwjeżańy tabuli $1 ($2 do $3)",
"usermerge-success": "Kuplowańy $1 ($2) s $3 ($4) zakończůne.",
"usermerge-success-log": "skuplowoł użytkowńika „$2” ($3) do „$4” ($5)",
"usermerge-logpage": "Rejer kuplowańo użytkowńików",
"usermerge-logpagetext": "To je rejer uoperacyji kuplowańo użytkowńikůw.",
"usermerge-noselfdelete": "Ńy idźe wyćepać abo kuplować samygo śebje!",
- "usermerge-unmergable": "Ńy idźe skuplować użytkowńika - identyfikator abo mjano uostoły zidentyfikowane kej ńykuplowalne.",
"usermerge-protectedgroup": "Ńy idźe skulować użytkowńika - je uůn człůnkym zabezpjeczůnyj grupy.",
"right-usermerge": "Kuplowańy użytkowńikůw"
}
diff --git a/UserMerge/i18n/te.json b/UserMerge/i18n/te.json
index 2a89a531..ba4fa51b 100644
--- a/UserMerge/i18n/te.json
+++ b/UserMerge/i18n/te.json
@@ -15,7 +15,6 @@
"usermerge-submit": "వాడుకరిని విలీనం చేయ్యండి",
"usermerge-userdeleted": "$1 ($2)ని తొలగించాం.",
"usermerge-userdeleted-log": "వాడుకరిని తొలగించాం: $2 ($3)",
- "usermerge-updating": "$1 పట్టిక ($2 నుండి $3 వరకు) ని తాజాకరిస్తున్నాం",
"usermerge-success": "$1 ($2) నుండి $3 ($4) కి విలీనం పూర్తయ్యింది.",
"usermerge-success-log": "$2 ($3) వాడుకరి $4 ($5)లో విలీనమయ్యారు",
"usermerge-logpage": "వాడుకరి విలీనాల చిట్టా",
diff --git a/UserMerge/i18n/tl.json b/UserMerge/i18n/tl.json
index 6369cbee..5db9754f 100644
--- a/UserMerge/i18n/tl.json
+++ b/UserMerge/i18n/tl.json
@@ -18,18 +18,14 @@
"usermerge-badtoken": "Hindi tanggap na pananda ng pagbabago",
"usermerge-userdeleted": "Nabura na ang $1 ($2).",
"usermerge-userdeleted-log": "Binurang tagagamit: $2 ($3)",
- "usermerge-updating": "Isinasapanahon ang $1 na tabla ($2 hanggang $3)",
"usermerge-success": "Ganap na ang pagsanib mula sa $1 ($2) patungo sa $3 ($4).",
"usermerge-success-log": "Tagagamit na $2 ($3) isinanib sa $4 ($5)",
"usermerge-logpage": "Talaan ng pagsasanib ng tagagamit",
"usermerge-logpagetext": "Isa itong talaan ng mga galaw na pangpagsasanib ng tagagamit.",
"usermerge-noselfdelete": "Hindi ka maaaring magbura o sumanib mula sa sarili mo!",
- "usermerge-unmergable": "Hindi naisanib mula sa tagagamit - nilarawan ang ID o pangalan bilang hindi mapagsasanib.",
"usermerge-protectedgroup": "Hindi naisanib mula sa tagagamit - nasa loob ng isang nakasanggalang na pangkat ang tagagamit.",
"right-usermerge": "Pagsanibin ang mga tagagamit",
"usermerge-autopagedelete": "Kusang nabubura kapag pinagsasanib ang mga tagagamit",
"usermerge-page-unmoved": "Hindi mailipat ang pahinang $1 papunta sa $2.",
- "usermerge-page-moved": "Ang pahinang $1 ay nailipat papunta sa $2.",
- "usermerge-move-log": "Kusang inilipat ang pahina habang pinagsasanib ang tagagamit na si \"[[User:$1|$1]]\" papunta sa \"[[User:$2|$2]]\"",
- "usermerge-page-deleted": "Binura ang pahinang $1"
+ "usermerge-move-log": "Kusang inilipat ang pahina habang pinagsasanib ang tagagamit na si \"[[User:$1|$1]]\" papunta sa \"[[User:$2|$2]]\""
}
diff --git a/UserMerge/i18n/tr.json b/UserMerge/i18n/tr.json
index 1d1b6c6f..e12a614b 100644
--- a/UserMerge/i18n/tr.json
+++ b/UserMerge/i18n/tr.json
@@ -3,7 +3,8 @@
"authors": [
"Joseph",
"Karduelis",
- "Srhat"
+ "Srhat",
+ "Violetanka"
]
},
"usermerge": "Kullanıcıları birleştir ve sil",
@@ -18,15 +19,13 @@
"usermerge-deleteolduser": "Eski kullanıcıyı sil",
"usermerge-submit": "Kullanıcıyı birleştir",
"usermerge-badtoken": "Geçersiz değişiklik dizgeciği",
- "usermerge-userdeleted": "$1 ($2) silindi.",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) silindi.",
"usermerge-userdeleted-log": "Silinen kullanıcı: $2 ($3)",
- "usermerge-updating": "$1 tablosu ($2 den $3 e) güncelleniyor",
- "usermerge-success": "$1 ($2) kullanıcısından $3 ($4) kullanıcısına birleştirme tamamlandı.",
- "usermerge-success-log": "$2 ($3) kullanıcısı $4 ($5) kullanıcısına birleştirildi",
+ "usermerge-success": "{{GENDER:$1|$1}} ($2) kullanıcısından {{GENDER:$3|$3}} ($4) kullanıcısına birleştirme tamamlandı.",
+ "usermerge-success-log": "{{GENDER:$2|$2}} ($3) kullanıcısı {{GENDER:$4|$4}} ($5) kullanıcısıyla birleştirildi",
"usermerge-logpage": "Kullanıcı birleştirme günlüğü",
"usermerge-logpagetext": "Bu bir kullanıcı birleştirme eylemleri günlüğüdür.",
- "usermerge-noselfdelete": "Kendinizden birleştiremez ya da silemezsiniz!",
- "usermerge-unmergable": "Kullanıcıdan birleştirilemiyor - ID ya da isim birleştirilemez olarak tanımlanmış.",
- "usermerge-protectedgroup": "Kullanıcıdan birleştirilemiyor - kullanıcı korunan bir grupta bulunuyor.",
+ "usermerge-noselfdelete": "{{GENDER:$1|kendinizi}} birleştiremez ya da silemezsiniz!",
+ "usermerge-protectedgroup": "{{GENDER:$1|kullanıcısından}}:birleştirilemiyor: Kullanıcı korunan bir grupta bulunuyor.",
"right-usermerge": "Kullanıcıları birleştir"
}
diff --git a/UserMerge/i18n/ug-arab.json b/UserMerge/i18n/ug-arab.json
index ddde8cdb..7224eef5 100644
--- a/UserMerge/i18n/ug-arab.json
+++ b/UserMerge/i18n/ug-arab.json
@@ -4,6 +4,5 @@
"Sahran"
]
},
- "usermerge-page-unmoved": "$1 بەتنى $2 گە يۆتكىيەلمىدى.",
- "usermerge-page-moved": "$1 بەت $2 گە يۆتكەلدى."
+ "usermerge-page-unmoved": "$1 بەتنى $2 گە يۆتكىيەلمىدى."
}
diff --git a/UserMerge/i18n/uk.json b/UserMerge/i18n/uk.json
index 8ac33110..5e5f02f5 100644
--- a/UserMerge/i18n/uk.json
+++ b/UserMerge/i18n/uk.json
@@ -21,22 +21,17 @@
"usermerge-deleteolduser": "Вилучити старий обліковий запис",
"usermerge-submit": "Об'єднати користувачів",
"usermerge-badtoken": "Недійсний маркер редагування",
- "usermerge-userdeleted": "$1 ($2) був вилучений.",
+ "usermerge-userdeleted": "$1 ($2) {{GENDER:$1|був вилучений|була вилучена}}.",
"usermerge-userdeleted-log": "Вилучений користувач: $2 ($3)",
- "usermerge-updating": "Оновлення таблиці $1 ($2 з $3)",
- "usermerge-success": "Об'єднання $1 ($2) з {{GENDER:$3|$3}} ($4) виконане.",
- "usermerge-success-log": "Користувач $2 ($3) приєднаний до {{GENDER:$4|$4}} ($5)",
+ "usermerge-success": "Об'єднання {{GENDER:$1|$1}} ($2) з {{GENDER:$3|$3}} ($4) завершене.",
+ "usermerge-success-log": "{{GENDER:$2|Користувач|Користувачка}} $2 ($3) {{GENDER:$2|приєднаний|приєднана}} до {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "Журнал об'єднання користувачів",
"usermerge-logpagetext": "Це журнал об'єднання облікових записів.",
- "usermerge-noselfdelete": "Ви не можете вилучати або приєднувати самого себе!",
- "usermerge-unmergable": "Неможливо об'єднати користувачів — ідентифікатор або ім'я було визначене як необ'єднуване.",
- "usermerge-protectedgroup": "Неможливо об'єднати користувачів — користувач належить до захищеної групи.",
- "right-usermerge": "об'єднання користувачів",
+ "usermerge-noselfdelete": "Ви не можете вилучати або приєднувати {{GENDER:$1|самого себе|саму себе}}!",
+ "usermerge-protectedgroup": "Неможливо об'єднати {{GENDER:$1|користувача|користувачку}} — користувач належить до захищеної групи.",
+ "right-usermerge": "об'єднування користувачів",
"action-usermerge": "об'єднування користувачів",
- "usermerge-editcount-merge-success": "Додавання $1 {{PLURAL:$1|1=редагування|редагувань}} користувача $2 до $3 {{PLURAL:$3|1=редагування|редагувань}} користувача $4 ($5 {{PLURAL:$5|1=edit|edits}} після злиття)",
"usermerge-autopagedelete": "Автоматично видаляються при об'єднанні користувачів",
"usermerge-page-unmoved": "Сторінка $1 не може бути перейменована на $2.",
- "usermerge-page-moved": "Сторінка $1 була перейменована на $2.",
- "usermerge-move-log": "Автоматичне перейменування сторінки при об'єднанні користувача «[[User:$1|$1]]» з «[[User:$2|{{GENDER:$2|$2}}]]»",
- "usermerge-page-deleted": "Сторінку $1 вилучено"
+ "usermerge-move-log": "Автоматичне перейменування сторінки при об'єднанні користувача «[[User:$1|$1]]» з «[[User:$2|{{GENDER:$2|$2}}]]»"
}
diff --git a/UserMerge/i18n/uz.json b/UserMerge/i18n/uz.json
index cc7c08e5..6c8a665b 100644
--- a/UserMerge/i18n/uz.json
+++ b/UserMerge/i18n/uz.json
@@ -7,6 +7,5 @@
},
"usermerge-userdeleted-log": "Foydalanuvchi $2 ($3) chetlatilgan",
"usermerge-success-log": "Foydalanuvchi $2 ($3) {{GENDER:$4|$4}} ($5) bilan birlashtirilgan",
- "usermerge-logpage": "Foydalanuvchilarni birlashtirish qaydlari",
- "usermerge-page-deleted": "$1 sahifasini oʻchirish"
+ "usermerge-logpage": "Foydalanuvchilarni birlashtirish qaydlari"
}
diff --git a/UserMerge/i18n/vi.json b/UserMerge/i18n/vi.json
index 3bcd6a7e..d138d462 100644
--- a/UserMerge/i18n/vi.json
+++ b/UserMerge/i18n/vi.json
@@ -20,20 +20,15 @@
"usermerge-badtoken": "Thẻ sửa đổi không hợp lệ",
"usermerge-userdeleted": "$1 ($2) đã bị xóa.",
"usermerge-userdeleted-log": "Người đã xóa: $2 ($3)",
- "usermerge-updating": "Đang cập nhật bảng $1 ($2 sang $3)",
"usermerge-success": "Việc trộn từ $1 ($2) đến $3 ($4) đã hoàn thành.",
"usermerge-success-log": "Thành viên $2 ($3) đã được trộn sang $4 ($5)",
"usermerge-logpage": "Nhật trình trộn thành viên",
"usermerge-logpagetext": "Đây là nhật trình ghi lại các tác vụ trộn thành viên.",
- "usermerge-noselfdelete": "Bạn không thể xóa hoặc trộn từ chính bạn!",
- "usermerge-unmergable": "Không thể trộn từ thành viên này: mã số hoặc tên đã được định nghĩa là không thể trộn.",
- "usermerge-protectedgroup": "Không thể trộn từ thành viên này: thành viên này thuộc nhóm được bảo vệ.",
+ "usermerge-noselfdelete": "Bạn không thể xóa hoặc trộn từ {{GENDER:$1}}chính bạn!",
+ "usermerge-protectedgroup": "Không thể trộn từ {{GENDER:$1}}thành viên này: thành viên này thuộc nhóm được bảo vệ.",
"right-usermerge": "Trộn thành viên",
"action-usermerge": "trộn người dùng",
- "usermerge-editcount-merge-success2": "Đã hợp nhất các sửa đổi của $1 và $2 thành tất cả $3 sửa đổi",
"usermerge-autopagedelete": "Được tự động xóa khi trộn người dùng",
"usermerge-page-unmoved": "Trang $1 không thể di chuyển đến $2.",
- "usermerge-page-moved": "Trang $1 đã được di chuyển đến $2.",
- "usermerge-move-log": "Đã tự động di chuyển trang khi trộn thành viên “[[User:$1|$1]]” vào “[[User:$2|$2]]”",
- "usermerge-page-deleted": "Đã xóa trang $1"
+ "usermerge-move-log": "Đã tự động di chuyển trang khi trộn thành viên “[[User:$1|$1]]” vào “[[User:$2|$2]]”"
}
diff --git a/UserMerge/i18n/yue.json b/UserMerge/i18n/yue.json
index c606182a..f8630a49 100644
--- a/UserMerge/i18n/yue.json
+++ b/UserMerge/i18n/yue.json
@@ -11,6 +11,5 @@
"usermerge-submit": "合併用戶",
"usermerge-badtoken": "無效嘅編輯幣",
"usermerge-userdeleted": "$1($2) 已經刪除咗。",
- "usermerge-updating": "更新緊 $1 表 ($2 到 $3)",
"usermerge-success": "由 $1($2) 到 $3($4) 嘅合併已經完成。"
}
diff --git a/UserMerge/i18n/zh-hant.json b/UserMerge/i18n/zh-hant.json
index 97ad6470..70ecaa15 100644
--- a/UserMerge/i18n/zh-hant.json
+++ b/UserMerge/i18n/zh-hant.json
@@ -21,11 +21,11 @@
"usermerge-newuser": "新使用者 (合併至):",
"usermerge-deleteolduser": "刪除舊使用者",
"usermerge-submit": "合併使用者",
- "usermerge-badtoken": "無效的編輯密鑰。",
- "usermerge-userdeleted": "{{GENDER:$1|$1}}($2)已刪除。",
+ "usermerge-badtoken": "無效的編輯權杖。",
+ "usermerge-userdeleted": "{{GENDER:$1|$1}} ($2) 已刪除。",
"usermerge-userdeleted-log": "已刪除使用者:$2 ($3)",
"usermerge-success": "已完成由 {{GENDER:$1|$1}} ($2) 至 {{GENDER:$3|$3}} ($4) 的合併。",
- "usermerge-success-log": "使用者 {{GENDER:$2|$2}}($3)已合併至 {{GENDER:$4|$4}}($5)",
+ "usermerge-success-log": "使用者 {{GENDER:$2|$2}} ($3) 已合併至 {{GENDER:$4|$4}} ($5)",
"usermerge-logpage": "使用者合併日誌",
"usermerge-logpagetext": "此頁為使用者合併動作的記錄。",
"usermerge-noselfdelete": "您無法刪除或合併{{GENDER:$1|自己}}!",
diff --git a/UserMerge/install.settings b/UserMerge/install.settings
deleted file mode 100644
index 9d9bac51..00000000
--- a/UserMerge/install.settings
+++ /dev/null
@@ -1,4 +0,0 @@
-require_once( "$IP/extensions/UserMerge/UserMerge.php" );
-# Assign the usermerge right to a usergroup, i.e. to the bureaucrats:
-$wgGroupPermissions['bureaucrat']['usermerge'] = true;
-
diff --git a/UserMerge/package.json b/UserMerge/package.json
new file mode 100644
index 00000000..d0e4bbfd
--- /dev/null
+++ b/UserMerge/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "usermerge",
+ "version": "0.0.0",
+ "private": true,
+ "description": "Build tools for the UserMerge extension.",
+ "scripts": {
+ "test": "grunt test"
+ },
+ "devDependencies": {
+ "grunt": "1.0.1",
+ "grunt-banana-checker": "0.4.0",
+ "grunt-contrib-jshint": "1.1.0",
+ "grunt-jsonlint": "1.0.7"
+ }
+}
diff --git a/UserMerge/phpcs.xml b/UserMerge/phpcs.xml
new file mode 100644
index 00000000..68d59638
--- /dev/null
+++ b/UserMerge/phpcs.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<ruleset>
+ <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
+ <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamComment" />
+ <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamName" />
+ <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamTag" />
+ <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected" />
+ <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment" />
+ </rule>
+ <rule ref="Generic.Files.LineLength">
+ <exclude-pattern>UserMerge.alias.php</exclude-pattern>
+ </rule>
+ <file>.</file>
+ <arg name="extensions" value="php,php5,inc" />
+ <arg name="encoding" value="UTF-8" />
+ <exclude-pattern>vendor</exclude-pattern>
+</ruleset>
diff --git a/UserMerge/tests/phpunit/MergeUserTest.php b/UserMerge/tests/phpunit/MergeUserTest.php
new file mode 100644
index 00000000..6ae2e4e4
--- /dev/null
+++ b/UserMerge/tests/phpunit/MergeUserTest.php
@@ -0,0 +1,101 @@
+<?php
+
+/**
+ * @todo this should use the Database group
+ */
+class MergeUserTest extends MediaWikiTestCase {
+
+ private $counter = 0;
+
+ private function getNewTestUser() {
+ $this->counter++;
+ $name = __CLASS__ . (string)$this->counter;
+ $user = User::newFromName( $name );
+ if ( $user->getId() ) { // Already exists, try again.
+ return $this->getNewTestUser();
+ }
+ $user->setName( $name );
+ $user->addToDatabase();
+ return $user;
+ }
+
+ /**
+ * Clear all instance caches
+ *
+ * @param User $u
+ */
+ private function reallyClearInstanceCache( User &$u ) {
+ $u = User::newFromName( $u->getName() );
+ }
+
+ public function testBasicMerge() {
+ $user1 = $this->getNewTestUser();
+ $user1->addToDatabase();
+ $user1->setOption( 'foo', 'baz' );
+ $user1->saveSettings();
+ $user2 = $this->getNewTestUser();
+ $user2->addToDatabase();
+
+ $mu = new MergeUser( $user1, $user2, $this->getMock( 'UserMergeLogger' ) );
+ $mu->merge( $this->getMock( 'User' ) );
+
+ $this->reallyClearInstanceCache( $user1 );
+ $this->reallyClearInstanceCache( $user2 );
+ $this->assertEquals( null, $user1->getOption( 'foo' ) );
+ $this->assertEquals( 'baz', $user2->getOption( 'foo' ) );
+ }
+
+ public function testMergeOfUserGroups() {
+ $user1 = $this->getNewTestUser();
+ $user1->addGroup( 'group1' );
+ $user1->addGroup( 'group2' );
+ $user2 = $this->getNewTestUser();
+ $user2->addGroup( 'group2' );
+
+ $mu = new MergeUser( $user1, $user2, $this->getMock( 'UserMergeLogger' ) );
+ $mu->merge( $this->getMock( 'User' ) );
+
+ $this->reallyClearInstanceCache( $user1 );
+ $this->reallyClearInstanceCache( $user2 );
+
+ $this->assertArrayEquals( [ 'group2' ], $user1->getGroups() );
+ $this->assertArrayEquals( [ 'group1', 'group2' ], $user2->getGroups() );
+ }
+
+ public function testDeleteUser() {
+ $user1 = $this->getNewTestUser();
+ $user2 = $this->getNewTestUser();
+
+ $this->reallyClearInstanceCache( $user1 );
+ $this->assertGreaterThan( 0, $user1->getId() );
+
+ $mu = new MergeUser( $user1, $user2, $this->getMock( 'UserMergeLogger' ) );
+ $mu->delete( $this->getMock( 'User' ), 'wfMessage' );
+
+ $this->reallyClearInstanceCache( $user1 );
+ $this->assertEquals( 0, $user1->getId() );
+ }
+
+ /**
+ * @covers MergeUser::mergeEditcount
+ */
+ public function testMergeEditcount() {
+ $user1 = $this->getNewTestUser();
+ $user2 = $this->getNewTestUser();
+ $count = 0;
+ $user1->incEditCount();
+ while ( $count < 10 ) {
+ $user1->incEditCount();
+ $user2->incEditCount();
+ $count++;
+ }
+
+ $mu = new MergeUser( $user1, $user2, $this->getMock( 'UserMergeLogger' ) );
+ $mu->merge( $this->getMock( 'User' ) );
+
+ $this->reallyClearInstanceCache( $user1 );
+ $this->reallyClearInstanceCache( $user2 );
+ $this->assertEquals( 0, $user1->getEditCount() );
+ $this->assertEquals( 21, $user2->getEditCount() );
+ }
+}
diff --git a/UserMerge/version b/UserMerge/version
index 83f22b14..eaf77c86 100644
--- a/UserMerge/version
+++ b/UserMerge/version
@@ -1,4 +1,4 @@
-UserMerge: REL1_24
-2014-11-25T20:26:42
+UserMerge: REL1_30
+2017-09-21T22:24:00
-3a8651b
+4546537