/** * (non-PHPdoc) * @see EPPager::getFormattedValue() */ public function getFormattedValue($name, $value) { switch ($name) { case 'name': $value = EPCourse::getLinkFor($value); break; case 'org_id': $value = EPOrg::selectRow('name', array('id' => $value))->getLink(); break; case 'term': $value = htmlspecialchars($value); break; case 'lang': $langs = LanguageNames::getNames($this->getLanguage()->getCode()); if (array_key_exists($value, $langs)) { $value = htmlspecialchars($langs[$value]); } else { $value = '<i>' . htmlspecialchars($this->getMsg('invalid-lang')) . '</i>'; } break; case 'start': case 'end': $value = htmlspecialchars($this->getLanguage()->date($value)); break; case '_status': $value = htmlspecialchars(EPCourse::getStatusMessage($this->currentObject->getStatus())); case 'students': $value = htmlspecialchars($this->getLanguage()->formatNum($value)); break; } return $value; }
public static function languageName(&$parser, $code = '', $outputLanguage = '') { global $wgLang; if (!$code) { return ''; } if (!$outputLanguage) { $outputLanguage = $parser->getOptions()->getUserLang(); } $cldr = is_callable(array('LanguageNames', 'getNames')); if ($outputLanguage !== 'native' && $cldr) { $languages = LanguageNames::getNames($outputLanguage, LanguageNames::FALLBACK_NORMAL, LanguageNames::LIST_MW_AND_CLDR); } else { $languages = Language::getLanguageNames(false); } return isset($languages[$code]) ? $languages[$code] : $code; }
/** * JavsScript selector for language codes. * @return JsSelectToInput */ protected static function languageSelector() { if (is_callable(array('LanguageNames', 'getNames'))) { $lang = RequestContext::getMain()->getLanguage(); $languages = LanguageNames::getNames($lang->getCode(), LanguageNames::FALLBACK_NORMAL); } else { $languages = Language::fetchLanguageNames(); } ksort($languages); $selector = new XmlSelect('mw-language-selector', 'mw-language-selector'); foreach ($languages as $code => $name) { $selector->addOption("{$code} - {$name}", $code); } $jsSelect = new JsSelectToInput($selector); $jsSelect->setSourceId('mw-language-selector'); return $jsSelect; }
public static function trailerForm(&$items, $opts) { $opts->consumeValue('trailer'); global $wgRequest; $default = $wgRequest->getVal('trailer', ''); global $wgLang; if (is_callable(array('LanguageNames', 'getNames'))) { $languages = LanguageNames::getNames($wgLang->getCode(), LanguageNames::FALLBACK_NORMAL, LanguageNames::LIST_MW); } else { $languages = Language::getLanguageNames(false); } ksort($languages); $options = Xml::option(wfMsg('cleanchanges-language-na'), '', $default === ''); foreach ($languages as $code => $name) { $selected = "/{$code}" === $default; $options .= Xml::option("{$code} - {$name}", "/{$code}", $selected) . "\n"; } $str = Xml::openElement('select', array('name' => 'trailer', 'class' => 'mw-language-selector', 'id' => 'sp-rc-language')) . $options . Xml::closeElement('select'); $items['tailer'] = array(wfMsgHtml('cleanchanges-language'), $str); return true; }
/** * Returns a list of language names that can be used by * a select input localized in the lang of which the code is provided. * * @since 0.1 * * @param string $langCode * * @return array */ public static function getLanguageOptions($langCode) { return self::getKeyPrefixedValues(LanguageNames::getNames($langCode)); }
/** * @return array */ public static function getLocalLanguageNames() { if (class_exists('LanguageNames')) { global $wgLang; return LanguageNames::getNames($wgLang->getCode()); } return array(); }
/** * Generates a multiple select list of all languages. * @param $selected The language codes of the selected languages * @param $customisedOnly If true only languages which have some content are listed * @return multiple select list */ function languageMultiSelector($selected = array(), $customisedOnly = true) { global $wgLanguageCode, $wgExtensionAssetsPath, $wgLang; $scriptPath = "{$wgExtensionAssetsPath}/CentralNotice"; if (is_callable(array('LanguageNames', 'getNames'))) { // Retrieve the list of languages in user's language (via CLDR) $languages = LanguageNames::getNames($wgLang->getCode(), LanguageNames::FALLBACK_NORMAL, LanguageNames::LIST_MW); } else { // Use this as fallback if CLDR extension is not enabled $languages = Language::getLanguageNames(); } // Make sure the site language is in the list; a custom language code // might not have a defined name... if (!array_key_exists($wgLanguageCode, $languages)) { $languages[$wgLanguageCode] = $wgLanguageCode; } ksort($languages); $options = "\n"; foreach ($languages as $code => $name) { $options .= Xml::option(wfMsg('centralnotice-language-listing', $code, $name), $code, in_array($code, $selected)) . "\n"; } $htmlOut = ''; if ($this->editable) { $htmlOut .= Xml::tags('select', array('multiple' => 'multiple', 'size' => 6, 'id' => 'project_languages[]', 'name' => 'project_languages[]'), $options); $buttons = array(); $buttons[] = '<a href="#" onclick="selectLanguages(true);return false;">' . wfMsg('powersearch-toggleall') . '</a>'; $buttons[] = '<a href="#" onclick="selectLanguages(false);return false;">' . wfMsg('powersearch-togglenone') . '</a>'; $buttons[] = '<a href="#" onclick="top10Languages();return false;">' . wfMsg('centralnotice-top-ten-languages') . '</a>'; $htmlOut .= Xml::tags('div', array('style' => 'margin-top: 0.2em;'), '<img src="' . $scriptPath . '/up-arrow.png" style="vertical-align:baseline;"/>' . wfMsg('centralnotice-select', $wgLang->commaList($buttons))); } else { $htmlOut .= Xml::tags('select', array('multiple' => 'multiple', 'size' => 6, 'id' => 'project_languages[]', 'name' => 'project_languages[]', 'disabled' => 'disabled'), $options); } return $htmlOut; }
/** * JavsScript selector for language codes. * @return \JsSelectToInput */ protected static function languageSelector() { global $wgLang; if ( is_callable( array( 'LanguageNames', 'getNames' ) ) ) { $languages = LanguageNames::getNames( $wgLang->getCode(), LanguageNames::FALLBACK_NORMAL ); } else { $languages = Language::getLanguageNames( false ); } ksort( $languages ); $selector = new XmlSelect( 'mw-language-selector', 'mw-language-selector' ); foreach ( $languages as $code => $name ) { $selector->addOption( "$code - $name", $code ); } $jsSelect = new JsSelectToInput( $selector ); $jsSelect->setSourceId( 'mw-language-selector' ); return $jsSelect; }
/** * Construct a language selector appropriate for use in a form or preferences * * @param string $selected The language code of the selected language * @param boolean $customisedOnly If true only languages which have some content are listed * @param string $language The ISO code of the language to display the select list in (optional) * @return array containing 2 items: label HTML and select list HTML */ public static function languageSelector($selected, $customisedOnly = true, $language = null) { global $wgLanguageCode; // If a specific language was requested and CLDR is installed, use it if ($language && is_callable(array('LanguageNames', 'getNames'))) { if ($customisedOnly) { $listType = LanguageNames::LIST_MW_SUPPORTED; // Only pull names that have localisation in MediaWiki } else { $listType = LanguageNames::LIST_MW; // Pull all languages that are in Names.php } // Retrieve the list of languages in the requested language (via CLDR) $languages = LanguageNames::getNames($language, LanguageNames::FALLBACK_NORMAL, $listType); } else { $languages = Language::getLanguageNames($customisedOnly); } // Make sure the site language is in the list; a custom language code might not have a // defined name... if (!array_key_exists($wgLanguageCode, $languages)) { $languages[$wgLanguageCode] = $wgLanguageCode; } ksort($languages); /** * If a bogus value is set, default to the content language. * Otherwise, no default is selected and the user ends up * with an Afrikaans interface since it's first in the list. */ $selected = isset($languages[$selected]) ? $selected : $wgLanguageCode; $options = "\n"; foreach ($languages as $code => $name) { $options .= Xml::option("{$code} - {$name}", $code, $code == $selected) . "\n"; } return array(Xml::label(wfMsg('yourlanguage'), 'wpUserLanguage'), Xml::tags('select', array('id' => 'wpUserLanguage', 'name' => 'wpUserLanguage'), $options)); }
/** * Itterate through available languages, loading and parsing the data * message from the MediaWiki namespace and writing the data to its output * file handle. */ protected function writeFiles() { $langs = self::parseLanguageCodes( '*' ); unset( $langs[array_search( 'en', $langs )] ); $langs = array_merge( array( 'en' ), $langs ); foreach ( $langs as $l ) { // Load message page. switch ( $this->type ) { case 'special': $title = Title::makeTitleSafe( NS_MEDIAWIKI, 'Sp-translate-data-SpecialPageAliases/' . $l ); break; case 'magic': $title = Title::makeTitleSafe( NS_MEDIAWIKI, 'Sp-translate-data-MagicWords/' . $l ); break; default: exit( 1 ); } // Parse message page. if ( !$title || !$title->exists() ) { $this->output( "Skiping $l...\n" ); $messagesNew = array(); } else { $this->output( "Processing $l...\n" ); $article = new Article( $title ); $data = $article->getContent(); // Parse message file. $segments = explode( "\n", $data ); array_shift( $segments ); array_shift( $segments ); unset( $segments[count( $segments ) -1] ); unset( $segments[count( $segments ) -1] ); $messagesNew = array(); foreach ( $segments as $segment ) { $parts = explode( ' = ', $segment ); $key = array_shift( $parts ); $translations = explode( ', ', implode( $parts ) ); $messagesNew[$key] = $translations; } } // Write data to handles. $namesEn = LanguageNames::getNames( 'en' ); $namesNative = Language::getLanguageNames(); foreach ( $this->handles as $group => $handle ) { // Find messages to write to this handle. $messagesOut = array(); foreach ( $this->messagesOld[$group]['en'] as $key => $message ) { if ( array_key_exists( $key, $messagesNew ) ) { $messagesOut[$key] = $messagesNew[$key]; } elseif ( isset( $this->messagesOld[$group][$l][$key] ) ) { $messagesOut[$key] = $this->messagesOld[$group][$l][$key]; } } // If there are messages to write, write them. if ( count( $messagesOut ) > 0 ) { switch( $this->type ) { case 'special': $out = "\n\n/** {$namesEn[$l]} ({$namesNative[$l]}) */\n\$specialPageAliases['{$l}'] = array(\n"; break; case 'magic': $out = "\n\n/** {$namesEn[$l]} ({$namesNative[$l]}) */\n\$magicWords['{$l}'] = array(\n"; break; } foreach ( $messagesOut as $key => $translations ) { foreach ( $translations as $id => $translation ) { $translations[$id] = addslashes( $translation ); if ( $this->type === 'magic' && $translation == '0' ) { unset( $translations[$id] ); } } $translations = implode( "', '", $translations ); switch( $this->type ) { case 'special': $out .= "\t'$key' => array( '$translations' ),\n"; break; case 'magic': if ( $this->messagesOld[$group]['en'][$key][0] === 0 ) { $out .= "\t'$key' => array( 0, '$translations' ),\n"; } else { $out .= "\t'$key' => array( '$translations' ),\n"; } break; } } $out .= ");"; fwrite( $handle, $out ); } } } }
/** * Get translated language names. * @return array */ public static function getLanguageNames( /*string */ $code ) { if ( is_callable( array( 'Language', 'getTranslatedLanguageNames' ) ) ) { return Language::getTranslatedLanguageNames( $code ); } elseif ( is_callable( array( 'LanguageNames', 'getNames' ) ) ) { return LanguageNames::getNames( $code, LanguageNames::FALLBACK_NORMAL, LanguageNames::LIST_MW ); } else { return Language::getLanguageNames( false ); } }
/** * @param $wm Wikimania * @param $u User * @return array */ private function getFields( Wikimania $wm, User $u ) { static $fields; if( !$fields ) { $langList = array_flip( LanguageNames::getNames( $u->getOption( 'lang') ) ); $langListWithEmpty = $langList; $langListWithEmpty[''] = ''; $fields = array( /** PERSONAL INFORMATION **/ 'reg_fname' => array( 'type' => 'text', 'label-message' => 'wikimania-reg-fname', 'section' => 'personal-info', 'required' => true, ), 'reg_lname' => array( 'type' => 'text', 'label-message' => 'wikimania-reg-lname', 'section' => 'personal-info', 'required' => true, ), 'reg_gender' => array( 'type' => 'radio', 'label-message' => 'wikimania-reg-gender', 'options' => self::getGenderPossibilities(), 'section' => 'personal-info', 'required' => true, ), 'reg_country' => array( 'type' => 'select', 'options' => array(), 'section' => 'personal-info', 'required' => true, ), /** LINGUISTIC ABILItIES **/ 'langn' => array( 'type' => 'select', 'label-message' => 'wikimania-reg-langn', 'options' => $langList, 'section' => 'linguistic-abilities', 'required' => true, ), 'lang1' => array( 'type' => 'select', 'label-message' => 'wikimania-reg-lang1', 'options' => $langListWithEmpty, 'section' => 'linguistic-abilities', ), 'lang2' => array( 'type' => 'select', 'label-message' => 'wikimania-reg-lang2', 'options' => $langListWithEmpty, 'section' => 'linguistic-abilities', ), 'lang3' => array( 'type' => 'select', 'label-message' => 'wikimania-reg-lang3', 'options' => $langListWithEmpty, 'section' => 'linguistic-abilities', ), ); } return $fields; }
/** * Hook: SpecialSearchProfileForm */ public static function searchProfileForm( SpecialSearch $search, &$form, /*string*/ $profile, $term, array $opts ) { if ( $profile !== 'translation' ) { return true; } if ( !$search->getSearchEngine()->supports( 'title-suffix-filter' ) ) { return false; } $hidden = ''; foreach ( $opts as $key => $value ) { $hidden .= Html::hidden( $key, $value ); } $context = $search->getContext(); $code = $context->getLanguage()->getCode(); $selected = $context->getRequest()->getVal( 'languagefilter' ); if ( is_callable( array( 'LanguageNames', 'getNames' ) ) ) { $languages = LanguageNames::getNames( $code, LanguageNames::FALLBACK_NORMAL, LanguageNames::LIST_MW ); } else { $languages = Language::getLanguageNames( false ); } ksort( $languages ); $selector = new XmlSelect( 'languagefilter', 'languagefilter' ); $selector->setDefault( $selected ); $selector->addOption( wfMessage( 'translate-search-nofilter' )->text(), '-' ); foreach ( $languages as $code => $name ) { $selector->addOption( "$code - $name", $code ); } $selector = $selector->getHTML(); $label = Xml::label( wfMessage( 'translate-search-languagefilter' )->text(), 'languagefilter' ) . ' '; $params = array( 'id' => 'mw-searchoptions' ); $form = Xml::fieldset( false, false, $params ) . $hidden . $label . $selector . Html::closeElement( 'fieldset' ); return false; }
public function execute( $par ) { global $wgLang, $wgOut, $wgRequest; $this->purge = $wgRequest->getVal( 'action' ) === 'purge'; $this->setHeaders(); $wgOut->addModules( 'ext.translate.special.supportedlanguages' ); $cache = wfGetCache( CACHE_ANYTHING ); $cachekey = wfMemcKey( 'translate-supportedlanguages', $wgLang->getCode() ); $data = $cache->get( $cachekey ); if ( !$this->purge && is_string( $data ) ) { $wgOut->addHtml( $data ); return; } $this->outputHeader(); $wgOut->addWikiMsg( 'supportedlanguages-colorlegend', $this->getColorLegend() ); $wgOut->addWikiMsg( 'supportedlanguages-localsummary' ); // Check if CLDR extension has been installed. $cldrInstalled = class_exists( 'LanguageNames' ); if ( $cldrInstalled ) { $locals = LanguageNames::getNames( $wgLang->getCode(), LanguageNames::FALLBACK_NORMAL, LanguageNames::LIST_MW_AND_CLDR ); } $natives = Language::getLanguageNames( false ); ksort( $natives ); $this->outputLanguageCloud( $natives ); // Requires NS_PORTAL. If not present, display error text. if ( !defined( 'NS_PORTAL' ) ) { $users = $this->fetchTranslatorsAuto(); } else { $users = $this->fetchTranslatorsPortal( $natives ); } $this->preQueryUsers( $users ); list( $editcounts, $lastedits ) = $this->getUserStats(); global $wgUser; $skin = $wgUser->getSkin(); // Information to be used inside the foreach loop. $linkInfo['rc']['title'] = SpecialPage::getTitleFor( 'Recentchanges' ); $linkInfo['rc']['msg'] = wfMsg( 'supportedlanguages-recenttranslations' ); $linkInfo['stats']['title'] = SpecialPage::getTitleFor( 'LanguageStats' ); $linkInfo['stats']['msg'] = wfMsg( 'languagestats' ); foreach ( array_keys( $natives ) as $code ) { if ( !isset( $users[$code] ) ) continue; // If CLDR is installed, add localised header and link title. if ( $cldrInstalled ) { $headerText = wfMsg( 'supportedlanguages-portallink', $code, $locals[$code], $natives[$code] ); } else { // No CLDR, so a less localised header and link title. $headerText = wfMsg( 'supportedlanguages-portallink-nocldr', $code, $natives[$code] ); } $headerText = htmlspecialchars( $headerText ); $wgOut->addHtml( Html::openElement( 'h2', array( 'id' => $code ) ) ); if ( defined( 'NS_PORTAL' ) ) { $portalTitle = Title::makeTitleSafe( NS_PORTAL, $code ); $wgOut->addHtml( $skin->linkKnown( $portalTitle, $headerText ) ); } else { $wgOut->addHtml( $headerText ); } $wgOut->addHTML( "</h2>" ); // Add useful links for language stats and recent changes for the language. $links = array(); $links[] = $skin->link( $linkInfo['stats']['title'], $linkInfo['stats']['msg'], array(), array( 'code' => $code, 'suppresscomplete' => '1' ), array( 'known', 'noclasses' ) ); $links[] = $skin->link( $linkInfo['rc']['title'], $linkInfo['rc']['msg'], array(), array( 'translations' => 'only', 'trailer' => "/" . $code ), array( 'known', 'noclasses' ) ); $linkList = $wgLang->listToText( $links ); $wgOut->addHTML( "<p>" . $linkList . "</p>\n" ); $this->makeUserList( $users[$code], $editcounts, $lastedits ); } $wgOut->addHtml( Html::element( 'hr' ) ); $wgOut->addWikiMsg( 'supportedlanguages-count', $wgLang->formatNum( count( $users ) ) ); $cache->set( $cachekey, $wgOut->getHTML(), 3600 ); }
protected function languages( $language ) { if ( is_callable( array( 'LanguageNames', 'getNames' ) ) ) { $languages = LanguageNames::getNames( $language, LanguageNames::FALLBACK_NORMAL, LanguageNames::LIST_MW ); } else { $languages = Language::getLanguageNames( false ); } ksort( $languages ); $options = array(); foreach ( $languages as $code => $name ) { $options["$code - $name"] = $code; } return $options; }