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'] );
62 $includeDigitTransforms = isset( $props[
'digittransforms'] );
63 $includeDigitGroupingPattern = isset( $props[
'digitgroupingpattern'] );
64 $includeMinimumGroupingDigits = isset( $props[
'minimumgroupingdigits'] );
65 $includeNamespaceNames = isset( $props[
'namespacenames'] );
66 $includeNamespaceAliases = isset( $props[
'namespacealiases'] );
68 $targetLanguageCode = $this->
getLanguage()->getCode();
69 $include = LanguageNameUtils::ALL;
71 $availableLanguageCodes = array_keys( $this->languageNameUtils->getLanguageNames(
80 if ( $selectedLanguageCodes === [
'*' ] ) {
81 $languageCodes = $availableLanguageCodes;
83 $languageCodes = array_values( array_intersect(
84 $availableLanguageCodes,
85 $selectedLanguageCodes
87 $unrecognizedCodes = array_values( array_diff(
88 $selectedLanguageCodes,
89 $availableLanguageCodes
91 if ( $unrecognizedCodes !== [] ) {
93 'apiwarn-unrecognizedvalues',
96 count( $unrecognizedCodes ),
103 $continue = $this->
getParameter(
'continue' ) ?? reset( $languageCodes );
110 $result->addArrayType( $rootPath,
'assoc' );
112 foreach ( $languageCodes as $languageCode ) {
113 if ( $languageCode < $continue ) {
117 $now = ConvertibleTimestamp::time();
118 if ( $now >= $endTime ) {
126 if ( $includeCode ) {
127 $info[
'code'] = $languageCode;
130 if ( $includeBcp47 ) {
131 $bcp47 = LanguageCode::bcp47( $languageCode );
132 $info[
'bcp47'] = $bcp47;
136 $dir = $this->languageFactory->getLanguage( $languageCode )->getDir();
140 if ( $includeAutonym ) {
141 $autonym = $this->languageNameUtils->getLanguageName(
143 LanguageNameUtils::AUTONYMS,
146 $info[
'autonym'] = $autonym;
149 if ( $includeName ) {
150 $name = $this->languageNameUtils->getLanguageName(
155 $info[
'name'] = $name;
158 if ( $includeFallbacks ) {
159 $fallbacks = $this->languageFallback->getAll(
162 LanguageFallbackMode::STRICT
165 $info[
'fallbacks'] = $fallbacks;
168 if ( $includeVariants || $includeVariantnames ) {
169 $language = $this->languageFactory->getLanguage( $languageCode );
170 $converter = $this->languageConverterFactory->getLanguageConverter( $language );
171 $variants = $converter->getVariants();
173 if ( $includeVariants ) {
174 $info[
'variants'] = $variants;
177 if ( $includeVariantnames ) {
178 $info[
'variantnames'] = [];
179 foreach ( $variants as $variantCode ) {
180 $info[
'variantnames'][$variantCode] = $language->getVariantname( $variantCode );
185 if ( $includeDigitTransforms ) {
186 $language = $this->languageFactory->getLanguage( $languageCode );
187 $digittransforms = $language->digitTransformTable();
188 if ( !$digittransforms ) {
189 $digittransforms = [];
192 $info[
'digittransforms'] = $digittransforms;
195 if ( $includeDigitGroupingPattern ) {
196 $language = $this->languageFactory->getLanguage( $languageCode );
197 $info[
'digitgroupingpattern'] = $language->digitGroupingPattern() ??
'#,##0.###';
200 if ( $includeMinimumGroupingDigits ) {
201 $language = $this->languageFactory->getLanguage( $languageCode );
202 $info[
'minimumgroupingdigits'] = $language->minimumGroupingDigits();
205 if ( $includeNamespaceNames ) {
206 $language = $this->languageFactory->getLanguage( $languageCode );
207 $info[
'namespacenames'] = $language->getNamespaces();
210 if ( $includeNamespaceAliases ) {
211 $language = $this->languageFactory->getLanguage( $languageCode );
212 $info[
'namespacealiases'] = $language->getNamespaceAliases();
215 $fit = $result->addValue( $rootPath, $languageCode, $info );