51 $endTime = ConvertibleTimestamp::time() + self::MAX_EXECUTE_SECONDS;
53 $props = array_fill_keys( $this->
getParameter(
'prop' ),
true );
54 $includeCode = isset( $props[
'code'] );
55 $includeBcp47 = isset( $props[
'bcp47'] );
56 $includeDir = isset( $props[
'dir'] );
57 $includeAutonym = isset( $props[
'autonym'] );
58 $includeName = isset( $props[
'name'] );
59 $includeVariantnames = isset( $props[
'variantnames'] );
60 $includeFallbacks = isset( $props[
'fallbacks'] );
61 $includeVariants = isset( $props[
'variants'] );
63 $targetLanguageCode = $this->
getLanguage()->getCode();
64 $include = LanguageNameUtils::ALL;
66 $availableLanguageCodes = array_keys( $this->languageNameUtils->getLanguageNames(
75 if ( $selectedLanguageCodes === [
'*' ] ) {
76 $languageCodes = $availableLanguageCodes;
78 $languageCodes = array_values( array_intersect(
79 $availableLanguageCodes,
80 $selectedLanguageCodes
82 $unrecognizedCodes = array_values( array_diff(
83 $selectedLanguageCodes,
84 $availableLanguageCodes
86 if ( $unrecognizedCodes !== [] ) {
88 'apiwarn-unrecognizedvalues',
91 count( $unrecognizedCodes ),
98 $continue = $this->
getParameter(
'continue' ) ?? reset( $languageCodes );
105 $result->addArrayType( $rootPath,
'assoc' );
107 foreach ( $languageCodes as $languageCode ) {
108 if ( $languageCode < $continue ) {
112 $now = ConvertibleTimestamp::time();
113 if ( $now >= $endTime ) {
121 if ( $includeCode ) {
122 $info[
'code'] = $languageCode;
125 if ( $includeBcp47 ) {
126 $bcp47 = LanguageCode::bcp47( $languageCode );
127 $info[
'bcp47'] = $bcp47;
131 $dir = $this->languageFactory->getLanguage( $languageCode )->getDir();
135 if ( $includeAutonym ) {
136 $autonym = $this->languageNameUtils->getLanguageName(
138 LanguageNameUtils::AUTONYMS,
141 $info[
'autonym'] = $autonym;
144 if ( $includeName ) {
145 $name = $this->languageNameUtils->getLanguageName(
150 $info[
'name'] = $name;
153 if ( $includeFallbacks ) {
154 $fallbacks = $this->languageFallback->getAll(
157 LanguageFallbackMode::STRICT
160 $info[
'fallbacks'] = $fallbacks;
163 if ( $includeVariants || $includeVariantnames ) {
164 $language = $this->languageFactory->getLanguage( $languageCode );
165 $converter = $this->languageConverterFactory->getLanguageConverter( $language );
166 $variants = $converter->getVariants();
168 if ( $includeVariants ) {
169 $info[
'variants'] = $variants;
172 if ( $includeVariantnames ) {
173 $info[
'variantnames'] = [];
174 foreach ( $variants as $variantCode ) {
175 $info[
'variantnames'][$variantCode] = $language->getVariantname( $variantCode );
180 $fit = $result->addValue( $rootPath, $languageCode, $info );
197 ParamValidator::PARAM_DEFAULT =>
'code',
198 ParamValidator::PARAM_ISMULTI =>
true,
199 ParamValidator::PARAM_TYPE => [
209 self::PARAM_HELP_MSG_PER_VALUE => [],
212 ParamValidator::PARAM_DEFAULT =>
'*',
213 ParamValidator::PARAM_ISMULTI =>
true,
216 self::PARAM_HELP_MSG =>
'api-help-param-continue',