51 parent::__construct( $queryModule, $moduleName,
'li' );
52 $this->languageFactory = $languageFactory;
53 $this->languageNameUtils = $languageNameUtils;
54 $this->languageFallback = $languageFallback;
55 $this->languageConverterFactory = $languageConverterFactory;
60 $endTime = ConvertibleTimestamp::time() + self::MAX_EXECUTE_SECONDS;
62 $props = array_fill_keys( $this->
getParameter(
'prop' ),
true );
63 $includeCode = isset( $props[
'code'] );
64 $includeBcp47 = isset( $props[
'bcp47'] );
65 $includeDir = isset( $props[
'dir'] );
66 $includeAutonym = isset( $props[
'autonym'] );
67 $includeName = isset( $props[
'name'] );
68 $includeVariantnames = isset( $props[
'variantnames'] );
69 $includeFallbacks = isset( $props[
'fallbacks'] );
70 $includeVariants = isset( $props[
'variants'] );
72 $targetLanguageCode = $this->
getLanguage()->getCode();
73 $include = LanguageNameUtils::ALL;
75 $availableLanguageCodes = array_keys( $this->languageNameUtils->getLanguageNames(
84 if ( $selectedLanguageCodes === [
'*' ] ) {
85 $languageCodes = $availableLanguageCodes;
87 $languageCodes = array_values( array_intersect(
88 $availableLanguageCodes,
89 $selectedLanguageCodes
91 $unrecognizedCodes = array_values( array_diff(
92 $selectedLanguageCodes,
93 $availableLanguageCodes
95 if ( $unrecognizedCodes !== [] ) {
97 'apiwarn-unrecognizedvalues',
100 count( $unrecognizedCodes ),
107 $continue = $this->
getParameter(
'continue' ) ?? reset( $languageCodes );
114 $result->addArrayType( $rootPath,
'assoc' );
116 foreach ( $languageCodes as $languageCode ) {
117 if ( $languageCode < $continue ) {
121 $now = ConvertibleTimestamp::time();
122 if ( $now >= $endTime ) {
130 if ( $includeCode ) {
131 $info[
'code'] = $languageCode;
134 if ( $includeBcp47 ) {
135 $bcp47 = LanguageCode::bcp47( $languageCode );
136 $info[
'bcp47'] = $bcp47;
140 $dir = $this->languageFactory->getLanguage( $languageCode )->getDir();
144 if ( $includeAutonym ) {
145 $autonym = $this->languageNameUtils->getLanguageName(
147 LanguageNameUtils::AUTONYMS,
150 $info[
'autonym'] = $autonym;
153 if ( $includeName ) {
154 $name = $this->languageNameUtils->getLanguageName(
159 $info[
'name'] = $name;
162 if ( $includeFallbacks ) {
163 $fallbacks = $this->languageFallback->getAll(
166 LanguageFallbackMode::STRICT
169 $info[
'fallbacks'] = $fallbacks;
172 if ( $includeVariants || $includeVariantnames ) {
173 $language = $this->languageFactory->getLanguage( $languageCode );
174 $converter = $this->languageConverterFactory->getLanguageConverter( $language );
175 $variants = $converter->getVariants();
177 if ( $includeVariants ) {
178 $info[
'variants'] = $variants;
181 if ( $includeVariantnames ) {
182 $info[
'variantnames'] = [];
183 foreach ( $variants as $variantCode ) {
184 $info[
'variantnames'][$variantCode] = $language->getVariantname( $variantCode );
189 $fit = $result->addValue( $rootPath, $languageCode, $info );
206 ParamValidator::PARAM_DEFAULT =>
'code',
207 ParamValidator::PARAM_ISMULTI =>
true,
208 ParamValidator::PARAM_TYPE => [
218 self::PARAM_HELP_MSG_PER_VALUE => [],
221 ParamValidator::PARAM_DEFAULT =>
'*',
222 ParamValidator::PARAM_ISMULTI =>
true,
225 self::PARAM_HELP_MSG =>
'api-help-param-continue',