55 parent::__construct(
'MyLanguage' );
56 $this->languageNameUtils = $languageNameUtils;
57 $this->redirectLookup = $redirectLookup;
71 $title = Title::newMainPage();
92 return $this->findTitleInternal( $subpage,
false );
110 return $this->findTitleInternal( $subpage,
true );
121 private function findTitleInternal( $subpage, $forTransclusion ) {
124 $base = $provided =
null;
125 if ( $subpage !==
null ) {
126 $provided = Title::newFromText( $subpage );
129 if ( $provided && str_contains( $subpage,
'/' ) ) {
130 $pos = strrpos( $subpage,
'/' );
131 $basepage = substr( $subpage, 0, $pos );
132 $code = substr( $subpage, $pos + 1 );
133 if ( strlen( $code ) && $this->languageNameUtils->isKnownLanguageTag( $code ) ) {
134 $base = Title::newFromText( $basepage );
139 if ( !$base || !$base->canExist() ) {
145 if ( $base->isRedirect() ) {
146 $base = $this->redirectLookup->getRedirectTarget( $base );
148 $fragment = $base->getFragment();
152 $baseLang = $base->getPageLanguage();
155 if ( !$forTransclusion && $baseLang->equals( $uiLang ) ) {
162 $proposed = $base->getSubpage( $uiLang->getCode() );
163 if ( $proposed && $proposed->exists() ) {
164 if ( $fragment !==
'' ) {
165 $proposed->setFragment( $fragment );
171 if ( $provided !== $base && $provided->exists() ) {
177 $possibilities = $uiLang->getFallbackLanguages();
178 foreach ( $possibilities as $lang ) {
182 if ( !$forTransclusion && $lang === $baseLang->getCode() ) {
186 $proposed = $base->getSubpage( $lang );
187 if ( $proposed && $proposed->exists() ) {
188 if ( $fragment !==
'' ) {
189 $proposed->setFragment( $fragment );