76 $endTime = ConvertibleTimestamp::time() + self::MAX_EXECUTE_SECONDS;
78 $props = array_fill_keys( $this->
getParameter(
'prop' ),
true );
79 $includeCode = isset( $props[
'code'] );
80 $includeBcp47 = isset( $props[
'bcp47'] );
81 $includeDir = isset( $props[
'dir'] );
82 $includeAutonym = isset( $props[
'autonym'] );
83 $includeName = isset( $props[
'name'] );
84 $includeVariantnames = isset( $props[
'variantnames'] );
85 $includeFallbacks = isset( $props[
'fallbacks'] );
86 $includeVariants = isset( $props[
'variants'] );
88 $targetLanguageCode = $this->
getLanguage()->getCode();
89 $include = LanguageNameUtils::ALL;
91 $availableLanguageCodes = array_keys( $this->languageNameUtils->getLanguageNames(
100 if ( $selectedLanguageCodes === [
'*' ] ) {
101 $languageCodes = $availableLanguageCodes;
103 $languageCodes = array_values( array_intersect(
104 $availableLanguageCodes,
105 $selectedLanguageCodes
107 $unrecognizedCodes = array_values( array_diff(
108 $selectedLanguageCodes,
109 $availableLanguageCodes
111 if ( $unrecognizedCodes !== [] ) {
113 'apiwarn-unrecognizedvalues',
115 Message::listParam( $unrecognizedCodes,
'comma' ),
116 count( $unrecognizedCodes ),
123 $continue = $this->
getParameter(
'continue' ) ?? reset( $languageCodes );
130 $result->addArrayType( $rootPath,
'assoc' );
132 foreach ( $languageCodes as $languageCode ) {
133 if ( $languageCode < $continue ) {
137 $now = ConvertibleTimestamp::time();
138 if ( $now >= $endTime ) {
144 ApiResult::setArrayType( $info,
'assoc' );
146 if ( $includeCode ) {
147 $info[
'code'] = $languageCode;
150 if ( $includeBcp47 ) {
151 $bcp47 = LanguageCode::bcp47( $languageCode );
152 $info[
'bcp47'] = $bcp47;
156 $dir = $this->languageFactory->getLanguage( $languageCode )->getDir();
160 if ( $includeAutonym ) {
161 $autonym = $this->languageNameUtils->getLanguageName(
163 LanguageNameUtils::AUTONYMS,
166 $info[
'autonym'] = $autonym;
169 if ( $includeName ) {
170 $name = $this->languageNameUtils->getLanguageName(
175 $info[
'name'] = $name;
178 if ( $includeFallbacks ) {
179 $fallbacks = $this->languageFallback->getAll(
182 LanguageFallback::STRICT
184 ApiResult::setIndexedTagName( $fallbacks,
'fb' );
185 $info[
'fallbacks'] = $fallbacks;
188 if ( $includeVariants || $includeVariantnames ) {
189 $language = $this->languageFactory->getLanguage( $languageCode );
190 $converter = $this->languageConverterFactory->getLanguageConverter( $language );
191 $variants = $converter->getVariants();
193 if ( $includeVariants ) {
194 $info[
'variants'] = $variants;
195 ApiResult::setIndexedTagName( $info[
'variants'],
'var' );
197 if ( $includeVariantnames ) {
198 $info[
'variantnames'] = [];
199 foreach ( $variants as $variantCode ) {
200 $info[
'variantnames'][$variantCode] = $language->getVariantname( $variantCode );
205 $fit = $result->addValue( $rootPath, $languageCode, $info );
220 ParamValidator::PARAM_DEFAULT =>
'code',
221 ParamValidator::PARAM_ISMULTI =>
true,
222 ParamValidator::PARAM_TYPE => [
232 self::PARAM_HELP_MSG_PER_VALUE => [],
235 ParamValidator::PARAM_DEFAULT =>
'*',
236 ParamValidator::PARAM_ISMULTI =>
true,
239 self::PARAM_HELP_MSG =>
'api-help-param-continue',