isEmailConfirmed() ) { // 'translate-pref-nonewsletter' is used as opt-out for // users with a confirmed email address $preferences['translate-nonewsletter'] = [ 'type' => 'toggle', 'section' => 'personal/email', 'label-message' => 'translate-pref-nonewsletter' ]; } } /** * Add 'translate-editlangs' preference. * These are the languages also shown when translating. * * @param User $user * @param array &$preferences * @return bool true */ public static function translationAssistLanguages( User $user, &$preferences ) { // Get selector. $select = self::languageSelector(); // Set target ID. $select->setTargetId( 'mw-input-translate-editlangs' ); // Get available languages. $languages = Language::fetchLanguageNames(); $preferences['translate-editlangs'] = [ 'class' => 'HTMLJsSelectToInputField', // prefs-translate 'section' => 'editing/translate', 'label-message' => 'translate-pref-editassistlang', 'help-message' => 'translate-pref-editassistlang-help', 'select' => $select, 'valid-values' => array_keys( $languages ), 'name' => 'translate-editlangs', ]; return true; } /** * JavsScript selector for language codes. * @return JsSelectToInput */ protected static function languageSelector() { if ( is_callable( [ 'LanguageNames', 'getNames' ] ) ) { $lang = RequestContext::getMain()->getLanguage(); $languages = LanguageNames::getNames( $lang->getCode(), LanguageNames::FALLBACK_NORMAL ); } else { $languages = Language::fetchLanguageNames(); } ksort( $languages ); $selector = new XmlSelect( false, 'mw-language-selector' ); foreach ( $languages as $code => $name ) { $selector->addOption( "$code - $name", $code ); } $jsSelect = new JsSelectToInput( $selector ); return $jsSelect; } }