11 private LanguageFallback $languageFallback;
13 public function __construct( LanguageFallback $languageFallback ) {
14 $this->languageFallback = $languageFallback;
29 $translations = $this->getTranslationsWithFallback( $messageBundle, $languageCode, $skipFallbacks );
30 $normalizedTranslations = [];
31 foreach ( $translations as $key => $translation ) {
32 $normalizedTranslations[
33 str_replace(
"{$messageBundle->getTitle()->getDBkey()}/",
'', $key )
37 return $normalizedTranslations;
40 private function getTranslationsWithFallback(
41 MessageBundle $messageBundle,
45 $messageBundleGroup = MessageGroups::getGroup( $messageBundle->getMessageGroupId() );
46 if ( !$messageBundleGroup ) {
47 throw new RuntimeException(
48 "Did not find message group for message bundle: {$messageBundle->getTitle()->getPrefixedText()}"
52 if ( $skipFallbacks ) {
53 $fallbackChain = [ $languageCode ];
57 ...$this->languageFallback->getAll( $languageCode ),
58 $messageBundleGroup->getSourceLanguage()
62 $collection = $messageBundleGroup->initCollection( $fallbackChain[0] );
65 foreach ( $fallbackChain as $fallbackLanguageCode ) {
66 $collection->resetForNewLanguage( $fallbackLanguageCode );
68 $collection->setTags(
'ignored', array_keys( $translations ) );
69 $collection->filter(
'ignored' );
70 if ( count( $collection ) === 0 ) {
74 $collection->loadTranslations();
75 $collection->filter(
'hastranslation',
false );
76 foreach ( $collection as $key => $message ) {
77 if ( $message->translation() !==
null ) {
78 $translations[ $key ] = $message->translation();