63 parent::__construct( $queryModule, $moduleName,
'li' );
64 $this->languageFactory = $languageFactory;
65 $this->languageNameUtils = $languageNameUtils;
66 $this->languageFallback = $languageFallback;
67 $this->languageConverterFactory = $languageConverterFactory;
72 $endTime = ConvertibleTimestamp::time() + self::MAX_EXECUTE_SECONDS;
74 $props = array_fill_keys( $this->
getParameter(
'prop' ),
true );
75 $includeCode = isset( $props[
'code'] );
76 $includeBcp47 = isset( $props[
'bcp47'] );
77 $includeDir = isset( $props[
'dir'] );
78 $includeAutonym = isset( $props[
'autonym'] );
79 $includeName = isset( $props[
'name'] );
80 $includeVariantnames = isset( $props[
'variantnames'] );
81 $includeFallbacks = isset( $props[
'fallbacks'] );
82 $includeVariants = isset( $props[
'variants'] );
84 $targetLanguageCode = $this->
getLanguage()->getCode();
85 $include = LanguageNameUtils::ALL;
87 $availableLanguageCodes = array_keys( $this->languageNameUtils->getLanguageNames(
96 if ( $selectedLanguageCodes === [
'*' ] ) {
97 $languageCodes = $availableLanguageCodes;
99 $languageCodes = array_values( array_intersect(
100 $availableLanguageCodes,
101 $selectedLanguageCodes
103 $unrecognizedCodes = array_values( array_diff(
104 $selectedLanguageCodes,
105 $availableLanguageCodes
107 if ( $unrecognizedCodes !== [] ) {
109 'apiwarn-unrecognizedvalues',
112 count( $unrecognizedCodes ),
119 $continue = $this->
getParameter(
'continue' ) ?? reset( $languageCodes );
126 $result->addArrayType( $rootPath,
'assoc' );
128 foreach ( $languageCodes as $languageCode ) {
129 if ( $languageCode < $continue ) {
133 $now = ConvertibleTimestamp::time();
134 if ( $now >= $endTime ) {
142 if ( $includeCode ) {
143 $info[
'code'] = $languageCode;
146 if ( $includeBcp47 ) {
147 $bcp47 = LanguageCode::bcp47( $languageCode );
148 $info[
'bcp47'] = $bcp47;
152 $dir = $this->languageFactory->getLanguage( $languageCode )->getDir();
156 if ( $includeAutonym ) {
157 $autonym = $this->languageNameUtils->getLanguageName(
159 LanguageNameUtils::AUTONYMS,
162 $info[
'autonym'] = $autonym;
165 if ( $includeName ) {
166 $name = $this->languageNameUtils->getLanguageName(
171 $info[
'name'] = $name;
174 if ( $includeFallbacks ) {
175 $fallbacks = $this->languageFallback->getAll(
178 LanguageFallback::STRICT
181 $info[
'fallbacks'] = $fallbacks;
184 if ( $includeVariants || $includeVariantnames ) {
185 $language = $this->languageFactory->getLanguage( $languageCode );
186 $converter = $this->languageConverterFactory->getLanguageConverter( $language );
187 $variants = $converter->getVariants();
189 if ( $includeVariants ) {
190 $info[
'variants'] = $variants;
193 if ( $includeVariantnames ) {
194 $info[
'variantnames'] = [];
195 foreach ( $variants as $variantCode ) {
196 $info[
'variantnames'][$variantCode] = $language->getVariantname( $variantCode );
201 $fit = $result->addValue( $rootPath, $languageCode, $info );
216 ParamValidator::PARAM_DEFAULT =>
'code',
217 ParamValidator::PARAM_ISMULTI =>
true,
218 ParamValidator::PARAM_TYPE => [
228 self::PARAM_HELP_MSG_PER_VALUE => [],
231 ParamValidator::PARAM_DEFAULT =>
'*',
232 ParamValidator::PARAM_ISMULTI =>
true,
235 self::PARAM_HELP_MSG =>
'api-help-param-continue',