19 public const MESSAGES = LanguageFallbackMode::MESSAGES;
29 private $siteLangCode;
32 private $localisationCache;
35 private $langNameUtils;
38 private $fallbackCache = [];
53 $this->siteLangCode = $siteLangCode;
54 $this->localisationCache = $localisationCache;
55 $this->langNameUtils = $langNameUtils;
66 return $this->
getAll( $code )[0] ??
null;
79 public function getAll( $code, $mode = LanguageFallbackMode::MESSAGES ) {
83 if ( $code ===
'en' || !$this->langNameUtils->isValidBuiltInCode( $code ) ) {
86 if ( is_int( $mode ) ) {
87 $mode = LanguageFallbackMode::from( $mode );
89 return match ( $mode ) {
90 LanguageFallbackMode::MESSAGES =>
93 $this->localisationCache->getItem( $code,
'fallbackSequence' ) ?: [
'en' ],
99 $this->localisationCache->getItem( $code,
'originalFallbackSequence' ),
113 $cacheKey =
"{$code}-{$this->siteLangCode}";
115 if ( !array_key_exists( $cacheKey, $this->fallbackCache ) ) {
116 $fallbacks = $this->
getAll( $code );
118 if ( $code === $this->siteLangCode ) {
120 $siteFallbacks = [ $code ];
123 $siteFallbacks = $this->
getAll( $this->siteLangCode );
124 array_unshift( $siteFallbacks, $this->siteLangCode );
127 $siteFallbacks = array_diff( $siteFallbacks, $fallbacks );
130 $this->fallbackCache[$cacheKey] = [ $fallbacks, $siteFallbacks ];
132 return $this->fallbackCache[$cacheKey];
137class_alias( LanguageFallback::class,
'MediaWiki\\Languages\\LanguageFallback' );
@ STRICT
Return a fallback chain for messages in getAll.