diff -r 7b1b88e27a20 -r 48c4eec2b7e6 wp/wp-admin/includes/class-language-pack-upgrader.php --- a/wp/wp-admin/includes/class-language-pack-upgrader.php Thu Sep 29 08:06:27 2022 +0200 +++ b/wp/wp-admin/includes/class-language-pack-upgrader.php Fri Sep 05 18:40:08 2025 +0200 @@ -62,7 +62,7 @@ * Avoid messing with VCS installations, at least for now. * Noted: this is not the ideal way to accomplish this. */ - $check_vcs = new WP_Automatic_Updater; + $check_vcs = new WP_Automatic_Updater(); if ( $check_vcs->is_vcs_checkout( WP_CONTENT_DIR ) ) { return; } @@ -105,7 +105,7 @@ } /** - * Initialize the upgrade strings. + * Initializes the upgrade strings. * * @since 3.7.0 */ @@ -114,7 +114,7 @@ $this->strings['up_to_date'] = __( 'Your translations are all up to date.' ); $this->strings['no_package'] = __( 'Update package not available.' ); /* translators: %s: Package URL. */ - $this->strings['downloading_package'] = sprintf( __( 'Downloading translation from %s…' ), '%s' ); + $this->strings['downloading_package'] = sprintf( __( 'Downloading translation from %s…' ), '%s' ); $this->strings['unpack_package'] = __( 'Unpacking the update…' ); $this->strings['process_failed'] = __( 'Translation update failed.' ); $this->strings['process_success'] = __( 'Translation updated successfully.' ); @@ -123,7 +123,7 @@ } /** - * Upgrade a language pack. + * Upgrades a language pack. * * @since 3.7.0 * @@ -147,13 +147,13 @@ } /** - * Bulk upgrade language packs. + * Upgrades several language packs at once. * * @since 3.7.0 * * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass. * - * @param object[] $language_updates Optional. Array of language packs to update. @see wp_get_translation_updates(). + * @param object[] $language_updates Optional. Array of language packs to update. See {@see wp_get_translation_updates()}. * Default empty array. * @param array $args { * Other arguments for upgrading multiple language packs. Default empty array. @@ -238,7 +238,7 @@ $destination .= '/themes'; } - $this->update_current++; + ++$this->update_current; $options = array( 'package' => $language_update->package, @@ -332,26 +332,34 @@ // Check that the folder contains a valid language. $files = $wp_filesystem->dirlist( $remote_source ); - // Check to see if a .po and .mo exist in the folder. - $po = false; - $mo = false; + // Check to see if the expected files exist in the folder. + $po = false; + $mo = false; + $php = false; foreach ( (array) $files as $file => $filedata ) { - if ( '.po' === substr( $file, -3 ) ) { + if ( str_ends_with( $file, '.po' ) ) { $po = true; - } elseif ( '.mo' === substr( $file, -3 ) ) { + } elseif ( str_ends_with( $file, '.mo' ) ) { $mo = true; + } elseif ( str_ends_with( $file, '.l10n.php' ) ) { + $php = true; } } + if ( $php ) { + return $source; + } + if ( ! $mo || ! $po ) { return new WP_Error( 'incompatible_archive_pomo', $this->strings['incompatible_archive'], sprintf( - /* translators: 1: .po, 2: .mo */ - __( 'The language pack is missing either the %1$s or %2$s files.' ), + /* translators: 1: .po, 2: .mo, 3: .l10n.php */ + __( 'The language pack is missing either the %1$s, %2$s, or %3$s files.' ), '.po', - '.mo' + '.mo', + '.l10n.php' ) ); } @@ -360,7 +368,7 @@ } /** - * Get the name of an item being updated. + * Gets the name of an item being updated. * * @since 3.7.0 * @@ -409,12 +417,16 @@ $files = array( $remote_destination . $language_update->language . '.po', $remote_destination . $language_update->language . '.mo', + $remote_destination . $language_update->language . '.l10n.php', $remote_destination . 'admin-' . $language_update->language . '.po', $remote_destination . 'admin-' . $language_update->language . '.mo', + $remote_destination . 'admin-' . $language_update->language . '.l10n.php', $remote_destination . 'admin-network-' . $language_update->language . '.po', $remote_destination . 'admin-network-' . $language_update->language . '.mo', + $remote_destination . 'admin-network-' . $language_update->language . '.l10n.php', $remote_destination . 'continents-cities-' . $language_update->language . '.po', $remote_destination . 'continents-cities-' . $language_update->language . '.mo', + $remote_destination . 'continents-cities-' . $language_update->language . '.l10n.php', ); $json_translation_files = glob( $language_directory . $language_update->language . '-*.json' ); @@ -427,6 +439,7 @@ $files = array( $remote_destination . $language_update->slug . '-' . $language_update->language . '.po', $remote_destination . $language_update->slug . '-' . $language_update->language . '.mo', + $remote_destination . $language_update->slug . '-' . $language_update->language . '.l10n.php', ); $language_directory = $language_directory . $language_update->type . 's/';