function getParsedTitle() { return ''; }
function markNoConversion( $text, $noParse = false ) { return $text; }
function convertCategoryKey( $key ) { return $key; }
- function convertLinkToAllVariants( $text ) { return $this->autoConvertToAllVariants( $text ); }
/** @deprecated since 1.22 is no longer used */
function armourMath( $text ) { return $text; }
function validateVariant( $variant = null ) { return $variant === $this->mLang->getCode() ? $variant : null; }
* @since 1.21
*/
public static function isSupportedLanguage( $code ) {
- return $code === strtolower( $code ) && is_readable( self::getMessagesFileName( $code ) );
+ return self::isValidBuiltInCode( $code )
+ && ( is_readable( self::getMessagesFileName( $code ) )
+ || is_readable( self::getJsonMessagesFileName( $code ) )
+ );
}
/**
/**
* Returns true if a language code is of a valid form for the purposes of
- * internal customisation of MediaWiki, via Messages*.php.
+ * internal customisation of MediaWiki, via Messages*.php or *.json.
*
* @param $code string
*
/**
* Returns gender-dependent namespace alias if available.
+ * See https://www.mediawiki.org/wiki/Manual:$wgExtraGenderNamespaces
* @param $index Int: namespace index
* @param $gender String: gender key (male, female... )
* @return String
}
/**
- * Whether this language makes distinguishes genders for example in
- * namespaces.
+ * Whether this language uses gender-dependent namespace aliases.
+ * See https://www.mediawiki.org/wiki/Manual:$wgExtraGenderNamespaces
* @return bool
* @since 1.18
*/
# We do this using a foreach over the codes instead of a directory
# loop so that messages files in extensions will work correctly.
foreach ( $returnMw as $code => $value ) {
- if ( is_readable( self::getMessagesFileName( $code ) ) ) {
+ if ( is_readable( self::getMessagesFileName( $code ) )
+ || is_readable( self::getJsonMessagesFileName( $code ) )
+ ) {
$namesMwFile[$code] = $names[$code];
}
}
+
return $namesMwFile;
}
+
# 'mw' option; default if it's not one of the other two options (all/mwfile)
return $returnMw;
}
* wfMessage( 'message' )->numParams( $num )->text()
* </code>
*
- * See LanguageGu.php for the Gujarati implementation and
- * $separatorTransformTable on MessageIs.php for
+ * See $separatorTransformTable on MessageIs.php for
* the , => . and . => , implementation.
*
* @todo check if it's viable to use localeconv() for the decimal
}
/**
* Provides an alternative text depending on specified gender.
- * Usage {{gender:username|masculine|feminine|neutral}}.
+ * Usage {{gender:username|masculine|feminine|unknown}}.
* username is optional, in which case the gender of current user is used,
* but only in (some) interface messages; otherwise default gender is used.
*
* given, it will be returned unconditionally. These details are implied by
* the caller and cannot be overridden in subclasses.
*
- * If more than one form is given, the default is to use the neutral one
- * if it is specified, and to use the masculine one otherwise. These
- * details can be overridden in subclasses.
+ * If three forms are given, the default is to use the third (unknown) form.
+ * If fewer than three forms are given, the default is to use the first (masculine) form.
+ * These details can be overridden in subclasses.
*
* @param $gender string
* @param $forms array
$this->mConverter->findVariantLink( $link, $nt, $ignoreOtherCond );
}
- /**
- * If a language supports multiple variants, converts text
- * into an array of all possible variants of the text:
- * 'variant' => text in that variant
- *
- * @deprecated since 1.17 Use autoConvertToAllVariants()
- *
- * @param $text string
- *
- * @return string
- */
- public function convertLinkToAllVariants( $text ) {
- return $this->mConverter->convertLinkToAllVariants( $text );
- }
-
/**
* returns language specific options used by User::getPageRenderHash()
* for example, the preferred language variant
* @return string $prefix . $mangledCode . $suffix
*/
public static function getFileName( $prefix = 'Language', $code, $suffix = '.php' ) {
- // Protect against path traversal
- if ( !Language::isValidCode( $code )
- || strcspn( $code, ":/\\\000" ) !== strlen( $code )
- ) {
+ if ( !self::isValidBuiltInCode( $code ) ) {
throw new MWException( "Invalid language code \"$code\"" );
}
return $file;
}
+ /**
+ * @param $code string
+ * @return string
+ * @since 1.23
+ */
+ public static function getJsonMessagesFileName( $code ) {
+ global $IP;
+
+ if ( !self::isValidBuiltInCode( $code ) ) {
+ throw new MWException( "Invalid language code \"$code\"" );
+ }
+
+ return "$IP/languages/i18n/$code.json" ;
+ }
+
/**
* @param $code string
* @return string