31 parent::__construct(
'MyLanguage' );
45 $title = Title::newMainPage();
66 return $this->findTitleInternal( $subpage,
false );
84 return $this->findTitleInternal( $subpage,
true );
95 private function findTitleInternal( $subpage, $forTransclusion ) {
98 $base = $provided =
null;
99 if ( $subpage !==
null ) {
100 $provided = Title::newFromText( $subpage );
103 if ( $provided && str_contains( $subpage,
'/' ) ) {
104 $pos = strrpos( $subpage,
'/' );
105 $basepage = substr( $subpage, 0, $pos );
106 $code = substr( $subpage, $pos + 1 );
107 if ( $code !==
'' && $this->languageNameUtils->isKnownLanguageTag( $code ) ) {
108 $base = Title::newFromText( $basepage );
113 if ( !$base || !$base->canExist() ) {
119 if ( $base->isRedirect() ) {
120 $target = $this->redirectLookup->getRedirectTarget( $base );
121 if ( $target !==
null ) {
122 $base = Title::newFromLinkTarget( $target );
124 $fragment = $base->getFragment();
129 $baseLang = $base->getPageLanguage();
132 if ( !$forTransclusion && $baseLang->equals( $uiLang ) ) {
139 $proposed = $base->getSubpage( $uiLang->getCode() );
140 if ( $proposed && $proposed->exists() ) {
141 if ( $fragment !==
'' ) {
142 $proposed->setFragment( $fragment );
148 if ( $provided !== $base && $provided->exists() ) {
154 $possibilities = $uiLang->getFallbackLanguages();
155 foreach ( $possibilities as $lang ) {
159 if ( !$forTransclusion && $lang === $baseLang->getCode() ) {
163 $proposed = $base->getSubpage( $lang );
164 if ( $proposed && $proposed->exists() ) {
165 if ( $fragment !==
'' ) {
166 $proposed->setFragment( $fragment );