diff options
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‏ ($3)", "usermerge-success": "המיזוג מ־$1 ($2) ל־$3 ($4) בוצע בהצלחה.", - "usermerge-success-log": "ה{{GENDER:$2|משתמש|משתמשת}} $2 ($3) {{GENDER:$2|מוזג|מוזגה}} אל $4 ($5)", + "usermerge-success-log": "ה{{GENDER:$2|משתמש|משתמשת}} $2‏ ($3) {{GENDER:$2|מוזג|מוזגה}} אל $4‏ ($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 …):", "usermerge-newuser": "Dä neuje Metmaachername (Zosamme lääje noh …):", - "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 – antar sammenslåing til «$1».<br />\nKlikk «{{int:usermerge-submit}}» for å godta.", + "usermerge-nonewuser": "Nytt brukernavn tomt – 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 |