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;
}