# Read language names
global $wgLanguageNames;
-require_once( dirname( __FILE__ ) . '/Names.php' );
+require_once( __DIR__ . '/Names.php' );
if ( function_exists( 'mb_strtoupper' ) ) {
mb_internal_encoding( 'UTF-8' );
*/
public static function isValidBuiltInCode( $code ) {
- if( !is_string($code) ) {
+ if ( !is_string( $code ) ) {
$type = gettype( $code );
- if( $type === 'object' ) {
+ if ( $type === 'object' ) {
$addmsg = " of class " . get_class( $code );
} else {
$addmsg = '';
$names = array();
- if( $inLanguage ) {
+ if ( $inLanguage ) {
# TODO: also include when $inLanguage is null, when this code is more efficient
wfRunHooks( 'LanguageGetTranslatedLanguageNames', array( &$names, $inLanguage ) );
}
$returnMw = array();
$coreCodes = array_keys( $mwNames );
- foreach( $coreCodes as $coreCode ) {
+ foreach ( $coreCodes as $coreCode ) {
$returnMw[$coreCode] = $names[$coreCode];
}
- if( $include === 'mwfile' ) {
+ if ( $include === 'mwfile' ) {
$namesMwFile = array();
# We do this using a foreach over the codes instead of a directory
# loop so that messages files in extensions will work correctly.
* @return string
*/
function getMessageFromDB( $msg ) {
- return wfMsgExt( $msg, array( 'parsemag', 'language' => $this ) );
+ return wfMessage( $msg )->inLanguage( $this )->text();
}
/**
$s .= $num;
$raw = false;
} elseif ( $roman ) {
- $s .= self::romanNumeral( $num );
+ $s .= Language::romanNumeral( $num );
$roman = false;
} elseif ( $hebrewNum ) {
$s .= self::hebrewNumeral( $num );
}
/**
- * Roman number formatting up to 3000
+ * Roman number formatting up to 10000
*
* @param $num int
*
array( '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X' ),
array( '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', 'C' ),
array( '', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', 'M' ),
- array( '', 'M', 'MM', 'MMM' )
+ array( '', 'M', 'MM', 'MMM', 'MMMM', 'MMMMM', 'MMMMMM', 'MMMMMMM', 'MMMMMMMM', 'MMMMMMMMM', 'MMMMMMMMMM' )
);
$num = intval( $num );
- if ( $num > 3000 || $num <= 0 ) {
+ if ( $num > 10000 || $num <= 0 ) {
return $num;
}
*
* @param $opposite Boolean Get the direction mark opposite to your language
* @return string
+ * @since 1.20
*/
function getDirMarkEntity( $opposite = false ) {
if ( $opposite ) { return $this->isRTL() ? '‎' : '‏'; }
*
* An example of this function being called:
* <code>
- * wfMsg( 'message', $wgLang->formatNum( $num ) )
+ * wfMessage( 'message' )->numParams( $num )->text()
* </code>
*
* See LanguageGu.php for the Gujarati implementation and
* Take a list of strings and build a locale-friendly comma-separated
* list, using the local comma-separator message.
* The last two strings are chained with an "and".
+ * NOTE: This function will only work with standard numeric array keys (0, 1, 2…)
*
* @param $l Array
* @return string
function listToText( array $l ) {
$s = '';
$m = count( $l ) - 1;
- if ( $m == 1 ) {
+
+ if ( $m === 0 ) {
+ return $l[0];
+ } elseif ( $m === 1 ) {
return $l[0] . $this->getMessageFromDB( 'and' ) . $this->getMessageFromDB( 'word-separator' ) . $l[1];
} else {
for ( $i = $m; $i >= 0; $i-- ) {
*/
function commaList( array $list ) {
return implode(
- wfMsgExt(
- 'comma-separator',
- array( 'parsemag', 'escapenoentities', 'language' => $this )
- ),
+ wfMessage( 'comma-separator' )->inLanguage( $this )->escaped(),
$list
);
}
*/
function semicolonList( array $list ) {
return implode(
- wfMsgExt(
- 'semicolon-separator',
- array( 'parsemag', 'escapenoentities', 'language' => $this )
- ),
+ wfMessage( 'semicolon-separator' )->inLanguage( $this )->escaped(),
$list
);
}
*/
function pipeList( array $list ) {
return implode(
- wfMsgExt(
- 'pipe-separator',
- array( 'escapenoentities', 'language' => $this )
- ),
+ wfMessage( 'pipe-separator' )->inLanguage( $this )->escaped(),
$list
);
}
function truncate( $string, $length, $ellipsis = '...', $adjustLength = true ) {
# Use the localized ellipsis character
if ( $ellipsis == '...' ) {
- $ellipsis = wfMsgExt( 'ellipsis', array( 'escapenoentities', 'language' => $this ) );
+ $ellipsis = wfMessage( 'ellipsis' )->inLanguage( $this )->escaped();
}
# Check if there is no need to truncate
if ( $length == 0 ) {
function truncateHtml( $text, $length, $ellipsis = '...' ) {
# Use the localized ellipsis character
if ( $ellipsis == '...' ) {
- $ellipsis = wfMsgExt( 'ellipsis', array( 'escapenoentities', 'language' => $this ) );
+ $ellipsis = wfMessage( 'ellipsis' )->inLanguage( $this )->escaped();
}
# Check if there is clearly no need to truncate
if ( $length <= 0 ) {
if ( !count( $forms ) ) {
return '';
}
- $forms = $this->preConvertPlural( $forms, 2 );
-
- return ( $count == 1 ) ? $forms[0] : $forms[1];
+ $pluralForm = $this->getPluralForm( $count );
+ $pluralForm = min( $pluralForm, count( $forms ) - 1 );
+ return $forms[$pluralForm];
}
/**
* @param $format Bool|Int true to process using language functions, or TS_ constant
* to return the expiry in a given timestamp
* @return String
+ * @since 1.18
*/
public function formatExpiry( $expiry, $format = true ) {
static $infinity, $infinityMsg;
$dirmark = ( $oppositedm ? $this->getDirMark( true ) : '' ) .
$this->getDirMark();
$details = $details ? $dirmark . $this->getMessageFromDB( 'word-separator' ) .
- wfMsgExt( 'parentheses', array( 'escape', 'replaceafter', 'language' => $this ), $details ) : '';
+ wfMessage( 'parentheses' )->rawParams( $details )->inLanguage( $this )->escaped() : '';
return $page . $details;
}
public function getConvRuleTitle() {
return $this->mConverter->getConvRuleTitle();
}
+
+ /**
+ * Get the compiled plural rules for the language
+ * @since 1.20
+ * @return array Associative array with plural form, and plural rule as key-value pairs
+ */
+ public function getCompiledPluralRules() {
+ return self::$dataCache->getItem( strtolower( $this->mCode ), 'compiledPluralRules' );
+ }
+
+ /**
+ * Get the plural rules for the language
+ * @since 1.20
+ * @return array Associative array with plural form, and plural rule as key-value pairs
+ */
+ public function getPluralRules() {
+ return self::$dataCache->getItem( strtolower( $this->mCode ), 'pluralRules' );
+ }
+
+ /**
+ * Find the plural form matching to the given number
+ * It return the form index.
+ * @return int The index of the plural form
+ */
+ private function getPluralForm( $number ) {
+ $pluralRules = $this->getCompiledPluralRules();
+ $form = CLDRPluralRuleEvaluator::evaluateCompiled( $number, $pluralRules );
+ return $form;
+ }
+
}