diff --git a/includes/htmlform/HTMLFormField.php b/includes/htmlform/HTMLFormField.php index 390fa412e87..572de80a6d2 100644 --- a/includes/htmlform/HTMLFormField.php +++ b/includes/htmlform/HTMLFormField.php @@ -10,6 +10,7 @@ use InvalidArgumentException; use MediaWiki\Context\RequestContext; use MediaWiki\Html\Html; use MediaWiki\Linker\Linker; +use MediaWiki\Logger\LoggerFactory; use MediaWiki\Message\Message; use MediaWiki\Request\WebRequest; use MediaWiki\Status\Status; @@ -1261,8 +1262,21 @@ abstract class HTMLFormField { $ret = []; foreach ( $options as $key => $value ) { $msg = $this->msg( $key ); - $key = $needsParse ? $msg->parse() : $msg->plain(); - $ret[$key] = is_array( $value ) + $msgAsText = $needsParse ? $msg->parse() : $msg->plain(); + if ( array_key_exists( $msgAsText, $ret ) ) { + LoggerFactory::getInstance( 'error' )->error( + 'The option that uses the message key {msg_key_one} has the same translation as ' . + 'another option in {lang}. This means that {msg_key_one} will not be used as an option.', + [ + 'msg_key_one' => $key, + 'lang' => $this->mParent ? + $this->mParent->getLanguageCode()->toBcp47Code() : + RequestContext::getMain()->getLanguageCode()->toBcp47Code(), + ] + ); + continue; + } + $ret[$msgAsText] = is_array( $value ) ? $this->lookupOptionsKeys( $value, $needsParse ) : strval( $value ); } diff --git a/includes/logging/LogEventsList.php b/includes/logging/LogEventsList.php index ceda37c3175..e8d70f6efeb 100644 --- a/includes/logging/LogEventsList.php +++ b/includes/logging/LogEventsList.php @@ -30,6 +30,7 @@ use MediaWiki\HookContainer\HookRunner; use MediaWiki\Html\Html; use MediaWiki\Linker\Linker; use MediaWiki\Linker\LinkRenderer; +use MediaWiki\Logger\LoggerFactory; use MediaWiki\MainConfigNames; use MediaWiki\MediaWikiServices; use MediaWiki\Output\OutputPage; @@ -216,8 +217,21 @@ class LogEventsList extends ContextSource { // Load the log names foreach ( LogPage::validTypes() as $type ) { $page = new LogPage( $type ); + $pageText = $page->getName()->text(); + if ( in_array( $pageText, $typesByName ) ) { + LoggerFactory::getInstance( 'error' )->error( + 'The log type {log_type_one} has the same translation as {log_type_two} for {lang}. ' . + '{log_type_one} will not be displayed in the drop down menu on Special:Log.', + [ + 'log_type_one' => $type, + 'log_type_two' => array_search( $pageText, $typesByName ), + 'lang' => $this->getLanguage()->getCode(), + ] + ); + continue; + } if ( $this->getAuthority()->isAllowed( $page->getRestriction() ) ) { - $typesByName[$type] = $page->getName()->text(); + $typesByName[$type] = $pageText; } } diff --git a/includes/specials/pagers/UsersPager.php b/includes/specials/pagers/UsersPager.php index c8172f19f3f..48c9403fd75 100644 --- a/includes/specials/pagers/UsersPager.php +++ b/includes/specials/pagers/UsersPager.php @@ -38,6 +38,7 @@ use MediaWiki\HookContainer\HookRunner; use MediaWiki\Html\Html; use MediaWiki\HTMLForm\HTMLForm; use MediaWiki\Linker\Linker; +use MediaWiki\Logger\LoggerFactory; use MediaWiki\MainConfigNames; use MediaWiki\Title\Title; use MediaWiki\User\UserGroupManager; @@ -410,6 +411,18 @@ class UsersPager extends AlphabeticPager { $groupOptions = [ $this->msg( 'group-all' )->text() => '' ]; foreach ( $this->getAllGroups() as $group => $groupText ) { + if ( array_key_exists( $groupText, $groupOptions ) ) { + LoggerFactory::getInstance( 'error' )->error( + 'The group {group_one} has the same translation as {group_two} for {lang}. ' . + '{group_one} will not be displayed in group dropdown of the UsersPager.', + [ + 'group_one' => $group, + 'group_two' => $groupOptions[$groupText], + 'lang' => $this->getLanguage()->getCode(), + ] + ); + continue; + } $groupOptions[ $groupText ] = $group; }