Skip to content

Upgrade/Install: Show and select translation updates on the Updates screen#11610

Draft
s-a-s-k-i-a wants to merge 2 commits intoWordPress:trunkfrom
s-a-s-k-i-a:42281-list-translation-updates
Draft

Upgrade/Install: Show and select translation updates on the Updates screen#11610
s-a-s-k-i-a wants to merge 2 commits intoWordPress:trunkfrom
s-a-s-k-i-a:42281-list-translation-updates

Conversation

@s-a-s-k-i-a
Copy link
Copy Markdown

@s-a-s-k-i-a s-a-s-k-i-a commented Apr 20, 2026

Trac ticket: https://core.trac.wordpress.org/ticket/42281

Summary

list_translation_updates() currently renders only a generic translations notice and an Update Translations button. Unlike the WordPress core, plugin, and theme update sections, it does not resolve or display the specific translation updates that are pending, and it does not allow individual translation updates to be deferred for later installation.

This PR brings the translations section closer to the existing plugin and theme update UX by:

  • listing the specific pending translation updates
  • rendering them in a checkbox table that matches the existing updates UI
  • allowing individual translation updates to be left unchecked and installed later
  • persisting those unchecked translation updates as deferred so they remain available and are skipped by background translation updates until selected again

Changes

  • add translation update display helpers in wp-admin/includes/update.php
  • add translation update identifiers and deferred-state helpers in wp-includes/update.php
  • resolve translation update names for core, themes, and plugins
  • map plugin translation slugs back to installed plugin files so WordPress.org-style slugs still display the correct plugin name
  • replace the plain translations list on update-core.php with a checkbox table styled like the existing plugin/theme update tables
  • persist unchecked translation updates in a site option and keep them visible for later installation
  • pass only selected translation updates to Language_Pack_Upgrader::bulk_upgrade()
  • skip deferred translation updates in WP_Automatic_Updater::should_update() and Language_Pack_Upgrader::async_upgrade()
  • add PHPUnit coverage for translation update display/deferred data and identifier handling

Test plan

  • php -l src/wp-admin/includes/update.php
  • php -l src/wp-admin/update-core.php
  • php -l src/wp-includes/update.php
  • php -l src/wp-admin/includes/class-language-pack-upgrader.php
  • php -l src/wp-admin/includes/class-wp-automatic-updater.php
  • php -l tests/phpunit/tests/admin/includesUpdate.php
  • vendor/bin/phpcs --standard=phpcs.xml.dist src/wp-admin/includes/update.php src/wp-admin/update-core.php src/wp-includes/update.php src/wp-admin/includes/class-language-pack-upgrader.php src/wp-admin/includes/class-wp-automatic-updater.php tests/phpunit/tests/admin/includesUpdate.php
  • git diff --check
  • Authenticated HTTP E2E validation against https://wpcore.wp-studio.dev/wp-admin/update-core.php using a temporary MU-plugin fixture and local language-pack ZIP fixtures:
  • verified the translations table rendered with 3 rows for WordPress, Hello Dolly, and Twenty Twenty-Four
  • verified all 3 translation rows were selected by default
  • submitted the form with only the core and theme translation updates selected
  • verified the upgrade screen completed with 2 successful translation updates
  • verified the remaining plugin translation update stayed available on the Updates screen and rendered unchecked
  • verified deferred_translation_updates persisted only the unchecked plugin translation update
  • verified WP_Automatic_Updater::should_update( 'translation', ... ) returned false for the deferred plugin translation update and true for a non-deferred translation update
  • verified Language_Pack_Upgrader::async_upgrade() left the deferred translation update pending
  • PHPUnit execution for Tests_Admin_IncludesUpdate could not be run in this environment because the local WordPress test configuration / Docker test environment was unavailable

Use of AI Tools

AI assistance: Yes
Tool(s): Codex
Model(s): GPT-5-based Codex
Used for: implementation, test scaffolding, server-side E2E validation orchestration, and PR drafting; outputs were reviewed and validated with syntax checks, PHPCS, git diff --check, and authenticated admin-page testing.


This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See GitHub Pull Requests for Code Review in the Core Handbook for more details.

@github-actions
Copy link
Copy Markdown

Hi @s-a-s-k-i-a! 👋

Thank you for your contribution to WordPress! 💖

It looks like this is your first pull request to wordpress-develop. Here are a few things to be aware of that may help you out!

No one monitors this repository for new pull requests. Pull requests must be attached to a Trac ticket to be considered for inclusion in WordPress Core. To attach a pull request to a Trac ticket, please include the ticket's full URL in your pull request description.

Pull requests are never merged on GitHub. The WordPress codebase continues to be managed through the SVN repository that this GitHub repository mirrors. Please feel free to open pull requests to work on any contribution you are making.

More information about how GitHub pull requests can be used to contribute to WordPress can be found in the Core Handbook.

Please include automated tests. Including tests in your pull request is one way to help your patch be considered faster. To learn about WordPress' test suites, visit the Automated Testing page in the handbook.

If you have not had a chance, please review the Contribute with Code page in the WordPress Core Handbook.

The Developer Hub also documents the various coding standards that are followed:

Thank you,
The WordPress Project

@github-actions
Copy link
Copy Markdown

Test using WordPress Playground

The changes in this pull request can previewed and tested using a WordPress Playground instance.

WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser.

Some things to be aware of

  • All changes will be lost when closing a tab with a Playground instance.
  • All changes will be lost when refreshing the page.
  • A fresh instance is created each time the link below is clicked.
  • Every time this pull request is updated, a new ZIP file containing all changes is created. If changes are not reflected in the Playground instance,
    it's possible that the most recent build failed, or has not completed. Check the list of workflow runs to be sure.

For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation.

Test this pull request with WordPress Playground.

@s-a-s-k-i-a
Copy link
Copy Markdown
Author

Playground test passed. Manually tested and reviewed. Works.

Test this pull request with WordPress Playground.

@s-a-s-k-i-a s-a-s-k-i-a force-pushed the 42281-list-translation-updates branch from a43e354 to 7955a63 Compare April 21, 2026 09:53
@s-a-s-k-i-a s-a-s-k-i-a changed the title Upgrade/Install: List available translation updates on the Updates screen Upgrade/Install: Show and select translation updates on the Updates screen Apr 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant