/** * Accord a verb to its past form * * @param Message $message * @return Message */ public static function past(Message $message) { // Get translated form of the state $state = Babel::state('past.' . $message->state); // Pluralize if necessary switch (Babel::lang()) { case 'fr': if ($message->isPlural()) { $state = str_replace('a été', 'ont été', $state); } break; case 'en': if ($message->isPlural()) { $state = str_replace('was', 'were', $state); } break; } // Save it $message->state = $state; return static::conjugate($message); }
/** * Generate a babel box for the given language and level. * * @param $code String: Language code to use. * @param $level String or Integer: Level of ability to use. * @return String: A single babel box, in wikitext format. */ protected static function mGenerateBox($code, $level) { wfProfileIn(__METHOD__); $lang = wfBCP47($code); $portal = wfMessage('babel-portal', $code)->inContentLanguage()->plain(); if ($portal !== '') { $portal = "[[{$portal}|{$lang}]]"; } else { $portal = $lang; } $header = "{$portal}<span class=\"mw-babel-box-level-{$level}\">-{$level}</span>"; $code = strtolower($code); $name = BabelLanguageCodes::getName($code); $code = BabelLanguageCodes::getCode($code); $text = self::mGetText($name, $code, $level); $dir_current = Language::factory($code)->getDir(); $spacing = Babel::mCssAttrib('border-spacing', 'babel-cellspacing', true); $padding = Babel::mCssAttrib('padding', 'babel-cellpadding', true); $style = ''; if ($spacing === '') { $style = $padding === '' ? '' : 'style="' . $padding . '"'; } else { $style = $padding === '' ? 'style="' . $spacing . '"' : 'style="' . $padding . ' ' . $spacing . '"'; } $dir_head = self::$title->getPageLanguage()->getDir(); $box = <<<EOT <div class="mw-babel-box mw-babel-box-{$level}" dir="{$dir_head}"> {|{$style} ! dir="{$dir_head}" | {$header} | dir="{$dir_current}" lang="{$lang}" | {$text} |} </div> EOT; wfProfileOut(__METHOD__); return $box; }
protected function getBabel($languageCode, $user) { $babel = array(); $babelCategoryNames = $this->getBabelCategoryNames(); if (count($babelCategoryNames)) { // A little redundant but it's the only way to get required information with current Babel API. $previousLevelBabel = array(); foreach ($babelCategoryNames as $level => $_) { // Make the current language at the top of the chain. $levelBabel = array_unique(array_merge(array($languageCode), \Babel::getUserLanguages($user, $level))); $babel[$level] = array_diff($levelBabel, $previousLevelBabel); $previousLevelBabel = $levelBabel; } } else { $babel['N'] = array($languageCode); } return $babel; }
/** * Generate a babel box for the given language and level. * * @param $code String: Language code to use. * @param $level String or Integer: Level of ability to use. * @return String: A single babel box, in wikitext format. */ protected static function mGenerateBox($code, $level) { $lang = wfBCP47($code); $portal = wfMessage('babel-portal', $code)->inContentLanguage()->plain(); if ($portal !== '') { $portal = "[[{$portal}|{$lang}]]"; } else { $portal = $lang; } $header = "{$portal}<span class=\"mw-babel-box-level-{$level}\">-{$level}</span>"; $code = strtolower($code); $name = BabelLanguageCodes::getName($code); $code = BabelLanguageCodes::getCode($code); $text = self::mGetText($name, $code, $level); $dir_current = Language::factory($code)->getDir(); $cellspacing = Babel::mHtmlAttrib('cellspacing', 'babel-cellspacing'); $cellpadding = Babel::mHtmlAttrib('cellpadding', 'babel-cellpadding'); $dir_head = self::$title->getPageLanguage()->getDir(); $box = <<<EOT <div class="mw-babel-box mw-babel-box-{$level}" dir="{$dir_head}"> {|{$cellspacing}{$cellpadding} ! dir="{$dir_head}" | {$header} | dir="{$dir_current}" | {$text} |} </div> EOT; return $box; }