67 parent::__construct( $query, $moduleName,
'am' );
68 $this->contentLanguage = $contentLanguage;
69 $this->languageFactory = $languageFactory;
70 $this->languageNameUtils = $languageNameUtils;
71 $this->localisationCache = $localisationCache;
72 $this->messageCache = $messageCache;
77 if ( $params[
'lang'] ===
null ) {
79 } elseif ( !$this->languageNameUtils->isValidCode( $params[
'lang'] ) ) {
81 [
'apierror-invalidlang', $this->
encodeParamName(
'lang' ) ],
'invalidlang'
84 $langObj = $this->languageFactory->getLanguage( $params[
'lang'] );
87 if ( $params[
'enableparser'] ) {
88 if ( $params[
'title'] !==
null ) {
89 $title = Title::newFromText( $params[
'title'] );
94 $title = Title::newFromText(
'API' );
98 $prop = array_fill_keys( (array)$params[
'prop'],
true );
101 if ( in_array(
'*', $params[
'messages'] ) ) {
102 $message_names = $this->localisationCache->getSubitemList( $langObj->getCode(),
'messages' ) ?? [];
103 if ( $params[
'includelocal'] ) {
104 $message_names = array_unique( array_merge(
110 $this->messageCache->getAllMessageKeys( $this->contentLanguage->getCode() )
113 sort( $message_names );
114 $messages_target = $message_names;
116 $messages_target = $params[
'messages'];
121 if ( isset( $params[
'prefix'] ) ) {
123 $messages_filtered = [];
124 foreach ( $messages_target as $message ) {
126 if ( strpos( $message, $params[
'prefix'] ) === 0 ) {
130 $messages_filtered[] = $message;
135 $messages_target = $messages_filtered;
139 if ( isset( $params[
'filter'] ) ) {
140 $messages_filtered = [];
141 foreach ( $messages_target as $message ) {
143 if ( strpos( $message, $params[
'filter'] ) !==
false ) {
144 $messages_filtered[] = $message;
147 $messages_target = $messages_filtered;
151 $customiseFilterEnabled = $params[
'customised'] !==
'all';
152 if ( $customiseFilterEnabled ) {
155 [ $langObj,
'ucfirst' ],
159 !$langObj->equals( $this->contentLanguage ),
163 $customised = $params[
'customised'] ===
'modified';
167 $skip = $params[
'from'] !==
null;
168 $useto = $params[
'to'] !==
null;
170 foreach ( $messages_target as $message ) {
172 if ( $skip && $message === $params[
'from'] ) {
176 if ( $useto && $message > $params[
'to'] ) {
183 'normalizedname' => MessageCache::normalizeKey( $message ),
187 if ( isset( $params[
'args'] ) && count( $params[
'args'] ) != 0 ) {
188 $args = $params[
'args'];
191 if ( $customiseFilterEnabled ) {
192 $messageIsCustomised = isset( $customisedMessages[
'pages'][$langObj->ucfirst( $message )] );
194 if ( $customised === $messageIsCustomised ) {
197 $a[
'customised'] =
true;
204 $msg = $this->
msg( $message,
$args )->inLanguage( $langObj );
206 if ( !$msg->exists() ) {
207 $a[
'missing'] =
true;
210 if ( $params[
'enableparser'] ) {
212 $msgString = $msg->page(
$title )->text();
214 $msgString = $msg->plain();
216 if ( !$params[
'nocontent'] ) {
217 ApiResult::setContentValue( $a,
'content', $msgString );
219 if ( isset( $prop[
'default'] ) ) {
220 $default = $this->
msg( $message )->inLanguage( $langObj )->useDatabase(
false );
221 if ( !$default->exists() ) {
222 $a[
'defaultmissing'] =
true;
223 } elseif ( $default->plain() != $msgString ) {
224 $a[
'default'] = $default->plain();
228 $fit = $result->addValue( [
'query', $this->
getModuleName() ],
null, $a );
235 $result->addIndexedTagName( [
'query', $this->
getModuleName() ],
'message' );
254 ParamValidator::PARAM_DEFAULT =>
'*',
255 ParamValidator::PARAM_ISMULTI =>
true,
258 ParamValidator::PARAM_ISMULTI =>
true,
259 ParamValidator::PARAM_TYPE => [
263 'enableparser' =>
false,
264 'nocontent' =>
false,
265 'includelocal' =>
false,
267 ParamValidator::PARAM_ISMULTI =>
true,
268 ParamValidator::PARAM_ALLOW_DUPLICATES =>
true,
272 ParamValidator::PARAM_DEFAULT =>
'all',
273 ParamValidator::PARAM_TYPE => [