MediaWiki  master
LanguageConverter Class Reference

Base class for language conversion. More...

Inheritance diagram for LanguageConverter:
Collaboration diagram for LanguageConverter:

Public Member Functions

 __construct (Language $langobj, $maincode, $variants=[], $variantfallbacks=[], $flags=[], $manualLevel=[])
 
 autoConvert ( $text, $toVariant=false)
 Dictionary-based conversion. More...
 
 autoConvertToAllVariants ( $text)
 Call translate() to convert text to all valid variants. More...
 
 convert ( $text)
 Convert text to different variants of a language. More...
 
 convertCategoryKey ( $key)
 Convert the sorting key for category links. More...
 
 convertNamespace ( $index, $variant=null)
 Get the namespace display name in the preferred variant. More...
 
 convertTitle ( $title)
 Auto convert a Title object to a readable string in the preferred variant. More...
 
 convertTo ( $text, $variant)
 Same as convert() except a extra parameter to custom variant. More...
 
 findVariantLink (&$link, &$nt, $ignoreOtherCond=false)
 If a language supports multiple variants, it is possible that non-existing link in one variant actually exists in another variant. More...
 
 getConvRuleTitle ()
 Get the title produced by the conversion rule. More...
 
 getDefaultVariant ()
 Get default variant. More...
 
 getExtraHashOptions ()
 Returns language specific hash options. More...
 
 getPreferredVariant ()
 Get preferred language variant. More...
 
 getURLVariant ()
 Get the variant specified in the URL. More...
 
 getVariantFallbacks ( $variant)
 In case some variant is not defined in the markup, we need to have some fallback. More...
 
 getVariants ()
 Get all valid variants. More...
 
 getVarSeparatorPattern ()
 Get the cached separator pattern for ConverterRule::parseRules() More...
 
 guessVariant ( $text, $variant)
 Guess if a text is written in a variant. More...
 
 loadDefaultTables ()
 Load default conversion tables. More...
 
 loadTables ( $fromCache=true)
 Load conversion tables either from the cache or the disk. More...
 
 markNoConversion ( $text, $noParse=false)
 Enclose a string with the "no conversion" tag. More...
 
 parseCachedTable ( $code, $subpage='', $recursive=true)
 Parse the conversion table stored in the cache. More...
 
 postLoadTables ()
 Hook for post processing after conversion tables are loaded. More...
 
 translate ( $text, $variant)
 Translate a string to a variant. More...
 
 updateConversionTable (Title $titleobj)
 Refresh the cache of conversion tables when MediaWiki:Conversiontable* is updated. More...
 
 validateVariant ( $variant=null)
 Validate the variant and return an appropriate strict internal variant code if one exists. More...
 

Public Attributes

 $mConvRuleTitle = false
 
 $mDescCodeSep = ':'
 
 $mDescVarSep = ';'
 
 $mFlags
 
 $mHeaderVariant
 
 $mLangObj
 
 $mMainLanguageCode
 
 $mManualLevel
 
 $mMaxDepth = 10
 
ReplacementArray [] bool [] $mTables
 
 $mTablesLoaded = false
 
 $mUcfirst = false
 
 $mURLVariant
 
 $mUserVariant
 
 $mVariantFallbacks
 
 $mVariantNames
 
string [] $mVariants
 
 $mVarSeparatorPattern
 
const CACHE_VERSION_KEY = 'VERSION 7'
 

Static Public Attributes

static array $languagesWithVariants
 languages supporting variants More...
 

Protected Member Functions

 applyManualConv ( $convRule)
 Apply manual conversion rules. More...
 
 getHeaderVariant ()
 Determine the language variant from the Accept-Language header. More...
 
 getUserVariant ()
 Determine if the user has a variant set. More...
 
 recursiveConvertRule ( $text, $variant, &$startPos, $depth=0)
 Recursively convert text on the inside. More...
 
 recursiveConvertTopLevel ( $text, $variant, $depth=0)
 Recursively convert text on the outside. More...
 

Private Member Functions

 reloadTables ()
 Reload the conversion tables. More...
 

Detailed Description

Constructor & Destructor Documentation

◆ __construct()

LanguageConverter::__construct ( Language  $langobj,
  $maincode,
  $variants = [],
  $variantfallbacks = [],
  $flags = [],
  $manualLevel = [] 
)
Parameters
Language$langobj
string$maincodeThe main language code of this language
string[]$variants The supported variants of this language
array$variantfallbacksThe fallback language of each variant
array$flagsDefining the custom strings that maps to the flags
array$manualLevelLimit for supported variants

Definition at line 94 of file LanguageConverter.php.

References $wgDisabledVariants, and Language\fetchLanguageNames().

Member Function Documentation

◆ applyManualConv()

LanguageConverter::applyManualConv (   $convRule)
protected

Apply manual conversion rules.

Parameters
ConverterRule$convRule

Definition at line 565 of file LanguageConverter.php.

References validateVariant().

Referenced by recursiveConvertRule().

◆ autoConvert()

LanguageConverter::autoConvert (   $text,
  $toVariant = false 
)

Dictionary-based conversion.

This function would not parse the conversion rules. If you want to parse rules, try to use convert() or convertTo().

Parameters
string$textThe text to be converted
bool | string$toVariantThe target language code
Returns
string The converted text

Definition at line 374 of file LanguageConverter.php.

References Sanitizer\decodeTagAttributes(), Html\expandAttributes(), StringUtils\explode(), getPreferredVariant(), guessVariant(), loadTables(), Parser\MARKER_PREFIX, recursiveConvertTopLevel(), and translate().

Referenced by GanConverter\convertCategoryKey(), ZhConverter\convertCategoryKey(), KkConverter\convertCategoryKey(), recursiveConvertRule(), and recursiveConvertTopLevel().

◆ autoConvertToAllVariants()

LanguageConverter::autoConvertToAllVariants (   $text)

Call translate() to convert text to all valid variants.

Parameters
string$textThe text to be converted
Returns
array Variant => converted text

Definition at line 549 of file LanguageConverter.php.

References loadTables(), and translate().

Referenced by findVariantLink().

◆ convert()

LanguageConverter::convert (   $text)

Convert text to different variants of a language.

The automatic conversion is done in autoConvert(). Here we parse the text marked with -{}-, which specifies special conversions of the text that can not be accomplished in autoConvert().

Syntax of the markup: -{code1:text1;code2:text2;...}- or -{flags|code1:text1;code2:text2;...}- or -{text}- in which case no conversion should take place for text

Warning
Glossary state is maintained between calls. Never feed this method input that hasn't properly been escaped as it may result in an XSS in subsequent calls, even if those subsequent calls properly escape things.
Parameters
string$textText to be converted, already html escaped.
Returns
string Converted text (html)

Definition at line 682 of file LanguageConverter.php.

References convertTo(), and getPreferredVariant().

◆ convertCategoryKey()

LanguageConverter::convertCategoryKey (   $key)

Convert the sorting key for category links.

This should make different keys that are variants of each other map to the same key.

Parameters
string$key
Returns
string

Definition at line 1151 of file LanguageConverter.php.

◆ convertNamespace()

LanguageConverter::convertNamespace (   $index,
  $variant = null 
)

Get the namespace display name in the preferred variant.

Parameters
int$indexNamespace id
string | null$variantVariant code or null for preferred variant
Returns
string Namespace name for display

Definition at line 622 of file LanguageConverter.php.

References $cache, getPreferredVariant(), NS_MAIN, translate(), and wfMessage().

Referenced by convertTitle().

◆ convertTitle()

LanguageConverter::convertTitle (   $title)

Auto convert a Title object to a readable string in the preferred variant.

Parameters
Title$titleA object of Title
Returns
string Converted title text

Definition at line 603 of file LanguageConverter.php.

References $title, convertNamespace(), getPreferredVariant(), NS_MAIN, and translate().

◆ convertTo()

LanguageConverter::convertTo (   $text,
  $variant 
)

Same as convert() except a extra parameter to custom variant.

Parameters
string$textText to be converted, already html escaped

Definition at line 696 of file LanguageConverter.php.

References $wgDisableLangConversion, and recursiveConvertTopLevel().

Referenced by convert().

◆ findVariantLink()

LanguageConverter::findVariantLink ( $link,
$nt,
  $ignoreOtherCond = false 
)

If a language supports multiple variants, it is possible that non-existing link in one variant actually exists in another variant.

This function tries to find it. See e.g. LanguageZh.php The input parameters may be modified upon return

Parameters
string&$linkThe name of the link
Title&$ntThe title object of the link
bool$ignoreOtherCondTo disable other conditions when we need to transclude a template or update a category's link

Definition at line 848 of file LanguageConverter.php.

References $wgDisableLangConversion, $wgDisableTitleConversion, $wgRequest, autoConvertToAllVariants(), Title\newFromText(), and NS_MAIN.

◆ getConvRuleTitle()

LanguageConverter::getConvRuleTitle ( )

Get the title produced by the conversion rule.

Returns
string The converted title text

Definition at line 156 of file LanguageConverter.php.

References $mConvRuleTitle.

◆ getDefaultVariant()

LanguageConverter::getDefaultVariant ( )

Get default variant.

This function would not be affected by user's settings

Returns
string The default variant code

Definition at line 198 of file LanguageConverter.php.

References $mMainLanguageCode, $wgDefaultLanguageVariant, getHeaderVariant(), getURLVariant(), and validateVariant().

◆ getExtraHashOptions()

LanguageConverter::getExtraHashOptions ( )

Returns language specific hash options.

Returns
string

Definition at line 915 of file LanguageConverter.php.

References getPreferredVariant().

◆ getHeaderVariant()

LanguageConverter::getHeaderVariant ( )
protected

Determine the language variant from the Accept-Language header.

Returns
mixed Variant if one found, null otherwise

Definition at line 317 of file LanguageConverter.php.

References $languages, $mHeaderVariant, $wgRequest, getVariantFallbacks(), and validateVariant().

Referenced by getDefaultVariant(), and getPreferredVariant().

◆ getPreferredVariant()

◆ getURLVariant()

LanguageConverter::getURLVariant ( )

Get the variant specified in the URL.

Returns
mixed Variant if one found, null otherwise

Definition at line 254 of file LanguageConverter.php.

References $mURLVariant, $wgRequest, and validateVariant().

Referenced by getDefaultVariant(), and getPreferredVariant().

◆ getUserVariant()

LanguageConverter::getUserVariant ( )
protected

Determine if the user has a variant set.

Returns
mixed Variant if one found, null otherwise

Definition at line 277 of file LanguageConverter.php.

References $mUserVariant, and validateVariant().

Referenced by getPreferredVariant().

◆ getVariantFallbacks()

LanguageConverter::getVariantFallbacks (   $variant)

In case some variant is not defined in the markup, we need to have some fallback.

For example, in zh, normally people will define zh-hans and zh-hant, but less so for zh-sg or zh-hk. when zh-sg is preferred but not defined, we will pick zh-hans in this case. Right now this is only used by zh.

Parameters
string$variantThe language code of the variant
Returns
string|array The code of the fallback language or the main code if there is no fallback

Definition at line 148 of file LanguageConverter.php.

References $mMainLanguageCode.

Referenced by getHeaderVariant().

◆ getVariants()

LanguageConverter::getVariants ( )

Get all valid variants.

Call this instead of using $this->mVariants directly.

Returns
string[] Contains all valid variants

Definition at line 133 of file LanguageConverter.php.

References $mVariants.

◆ getVarSeparatorPattern()

LanguageConverter::getVarSeparatorPattern ( )

Get the cached separator pattern for ConverterRule::parseRules()

Returns
string

Definition at line 1178 of file LanguageConverter.php.

References $mVarSeparatorPattern, LanguageCode\bcp47(), and LanguageCode\getDeprecatedCodeMapping().

◆ guessVariant()

LanguageConverter::guessVariant (   $text,
  $variant 
)

Guess if a text is written in a variant.

This should be implemented in subclasses.

Parameters
string$textThe text to be checked
string$variantLanguage code of the variant to be checked for
Returns
bool True if $text appears to be written in $variant, false if not
Author
Nikola Smolenski smole.nosp@m.nsk@.nosp@m.eunet.nosp@m..rs
Since
1.19

Definition at line 931 of file LanguageConverter.php.

Referenced by autoConvert(), and recursiveConvertTopLevel().

◆ loadDefaultTables()

LanguageConverter::loadDefaultTables ( )

Load default conversion tables.

This method must be implemented in derived class.

Access:
private
Exceptions
MWException

Definition at line 942 of file LanguageConverter.php.

Referenced by loadTables().

◆ loadTables()

LanguageConverter::loadTables (   $fromCache = true)

Load conversion tables either from the cache or the disk.

Access:
private
Parameters
bool$fromCacheLoad from memcached? Defaults to true.

Definition at line 952 of file LanguageConverter.php.

References $cache, $wgLanguageConverterCacheType, ObjectCache\getInstance(), loadDefaultTables(), parseCachedTable(), and postLoadTables().

Referenced by autoConvert(), autoConvertToAllVariants(), reloadTables(), ShiConverter\translate(), SrConverter\translate(), IuConverter\translate(), KuConverter\translate(), and translate().

◆ markNoConversion()

LanguageConverter::markNoConversion (   $text,
  $noParse = false 
)

Enclose a string with the "no conversion" tag.

This is used by various functions in the Parser.

Parameters
string$textText to be tagged for no conversion
bool$noParseUnused
Returns
string The tagged text

Definition at line 1133 of file LanguageConverter.php.

◆ parseCachedTable()

LanguageConverter::parseCachedTable (   $code,
  $subpage = '',
  $recursive = true 
)

Parse the conversion table stored in the cache.

The tables should be in blocks of the following form: -{ word => word ; word => word ; ... }-

To make the tables more manageable, subpages are allowed and will be parsed recursively if $recursive == true.

Parameters
string$codeLanguage code
string$subpageSubpage name
bool$recursiveParse subpages recursively? Defaults to true.
Returns
array

Definition at line 1025 of file LanguageConverter.php.

References $s, $t, $title, CONTENT_MODEL_WIKITEXT, StringUtils\explode(), Title\makeTitleSafe(), Revision\newFromTitle(), NS_MEDIAWIKI, and MessageCache\singleton().

Referenced by loadTables().

◆ postLoadTables()

LanguageConverter::postLoadTables ( )

Hook for post processing after conversion tables are loaded.

Definition at line 986 of file LanguageConverter.php.

Referenced by loadTables().

◆ recursiveConvertRule()

LanguageConverter::recursiveConvertRule (   $text,
  $variant,
$startPos,
  $depth = 0 
)
protected

Recursively convert text on the inside.

Parameters
string$textText to be converted
string$variantThe target variant code
int&$startPos
int$depthDepth of recursion
Exceptions
MWException
Returns
string Converted text

Definition at line 770 of file LanguageConverter.php.

References applyManualConv(), autoConvert(), and wfMessage().

Referenced by recursiveConvertTopLevel().

◆ recursiveConvertTopLevel()

LanguageConverter::recursiveConvertTopLevel (   $text,
  $variant,
  $depth = 0 
)
protected

Recursively convert text on the outside.

Allow to use nested markups to custom rules.

Parameters
string$textText to be converted
string$variantThe target variant code
int$depthDepth of recursion
Returns
string Converted text

Definition at line 715 of file LanguageConverter.php.

References autoConvert(), guessVariant(), and recursiveConvertRule().

Referenced by autoConvert(), and convertTo().

◆ reloadTables()

LanguageConverter::reloadTables ( )
private

Reload the conversion tables.

Also used by test suites which need to reset the converter state.

Access:
private

Definition at line 996 of file LanguageConverter.php.

References loadTables().

Referenced by updateConversionTable().

◆ translate()

LanguageConverter::translate (   $text,
  $variant 
)

Translate a string to a variant.

Doesn't parse rules or do any of that other stuff, for that use convert() or convertTo().

Parameters
string$textText to convert
string$variantVariant language code
Returns
string Translated text

Definition at line 533 of file LanguageConverter.php.

References loadTables().

Referenced by autoConvert(), autoConvertToAllVariants(), convertNamespace(), and convertTitle().

◆ updateConversionTable()

LanguageConverter::updateConversionTable ( Title  $titleobj)

Refresh the cache of conversion tables when MediaWiki:Conversiontable* is updated.

Parameters
Title$titleobjThe Title of the page being updated

Definition at line 1161 of file LanguageConverter.php.

References $t, $title, Title\getDBkey(), Title\getNamespace(), NS_MEDIAWIKI, reloadTables(), and validateVariant().

◆ validateVariant()

LanguageConverter::validateVariant (   $variant = null)

Validate the variant and return an appropriate strict internal variant code if one exists.

Compare to Language::hasVariant() which does a strict test.

Parameters
string | null$variantThe variant to validate
Returns
mixed Returns an equivalent valid variant code if possible, null otherwise

Definition at line 226 of file LanguageConverter.php.

References LanguageCode\bcp47(), and LanguageCode\replaceDeprecatedCodes().

Referenced by applyManualConv(), getDefaultVariant(), getHeaderVariant(), getPreferredVariant(), getURLVariant(), getUserVariant(), and updateConversionTable().

Member Data Documentation

◆ $languagesWithVariants

array LanguageConverter::$languagesWithVariants
static
Initial value:
= [
'en',
'crh',
'gan',
'iu',
'kk',
'ku',
'shi',
'sr',
'tg',
'uz',
'zh',
]

languages supporting variants

Since
1.20

Definition at line 41 of file LanguageConverter.php.

Referenced by ApiQuerySiteinfo\appendLanguageVariants(), ListVariants\execute(), ApiPageSet\getAllowedParams(), User\getDefaultOptions(), Language\getParentLanguage(), and MediaWiki\Preferences\DefaultPreferencesFactory\profilePreferences().

◆ $mConvRuleTitle

LanguageConverter::$mConvRuleTitle = false

Definition at line 77 of file LanguageConverter.php.

Referenced by getConvRuleTitle().

◆ $mDescCodeSep

LanguageConverter::$mDescCodeSep = ':'

Definition at line 75 of file LanguageConverter.php.

◆ $mDescVarSep

LanguageConverter::$mDescVarSep = ';'

Definition at line 75 of file LanguageConverter.php.

◆ $mFlags

LanguageConverter::$mFlags

Definition at line 74 of file LanguageConverter.php.

◆ $mHeaderVariant

LanguageConverter::$mHeaderVariant

Definition at line 80 of file LanguageConverter.php.

Referenced by getHeaderVariant().

◆ $mLangObj

LanguageConverter::$mLangObj

Definition at line 73 of file LanguageConverter.php.

◆ $mMainLanguageCode

LanguageConverter::$mMainLanguageCode

◆ $mManualLevel

LanguageConverter::$mManualLevel

Definition at line 71 of file LanguageConverter.php.

◆ $mMaxDepth

LanguageConverter::$mMaxDepth = 10

Definition at line 81 of file LanguageConverter.php.

◆ $mTables

ReplacementArray [] bool [] LanguageConverter::$mTables

Definition at line 68 of file LanguageConverter.php.

◆ $mTablesLoaded

LanguageConverter::$mTablesLoaded = false

Definition at line 63 of file LanguageConverter.php.

◆ $mUcfirst

LanguageConverter::$mUcfirst = false

Definition at line 76 of file LanguageConverter.php.

◆ $mURLVariant

LanguageConverter::$mURLVariant

Definition at line 78 of file LanguageConverter.php.

Referenced by getURLVariant().

◆ $mUserVariant

LanguageConverter::$mUserVariant

Definition at line 79 of file LanguageConverter.php.

Referenced by getUserVariant().

◆ $mVariantFallbacks

LanguageConverter::$mVariantFallbacks

Definition at line 61 of file LanguageConverter.php.

◆ $mVariantNames

LanguageConverter::$mVariantNames

Definition at line 62 of file LanguageConverter.php.

◆ $mVariants

string [] LanguageConverter::$mVariants

Definition at line 60 of file LanguageConverter.php.

Referenced by getVariants().

◆ $mVarSeparatorPattern

LanguageConverter::$mVarSeparatorPattern

Definition at line 82 of file LanguageConverter.php.

Referenced by getVarSeparatorPattern().

◆ CACHE_VERSION_KEY

const LanguageConverter::CACHE_VERSION_KEY = 'VERSION 7'

Definition at line 84 of file LanguageConverter.php.


The documentation for this class was generated from the following file: