Make WordPress Core

10/20/2020 04:03:58 PM (3 years ago)

I18N: Introduce WP_Textdomain_Registry to store text domains and their language directory paths.

Previously, when using switch_to_locale() all current loaded text domains were unloaded and added to the $l10n_unloaded global. This prevented the just-in-time loading for text domains after a switch. The just-in-time loading was also only possible if the translations were stored in WP_LANG_DIR. Both issues have been fixed.

  • Adds WP_Textdomain_Registry to keep track of the language directory paths for all plugins and themes.
  • Updates all load_*_textdomain() functions to store the path in WP_Textdomain_Registry.
  • Adds $reloadable parameter to unload_textdomain() to define whether a text domain can be loaded just-in-time again. This is used by WP_Locale_Switcher::load_translations().
  • Extends _load_textdomain_just_in_time() to also support text domains of plugins and themes with custom language directories.
  • Fixes the incorrect test_plugin_translation_after_switching_locale_twice() test which should have catch this issue earlier.
  • Adds a new test plugin/theme to test the loading of translations with a custom language directory.
  • Deprecates the now unused and private _get_path_to_translation() and _get_path_to_translation_from_lang_dir() functions.

Props yoavf, swissspidy, dd32, ocean90.
See #26511.
Fixes #39210.

1 edited


  • trunk/src/wp-settings.php

    r49226 r49236  
    153153// Load the L10n library.
    154154require_once ABSPATH . WPINC . '/l10n.php';
     155require_once ABSPATH . WPINC . '/class-wp-textdomain-registry.php';
    155156require_once ABSPATH . WPINC . '/class-wp-locale.php';
    156157require_once ABSPATH . WPINC . '/class-wp-locale-switcher.php';
    302303$GLOBALS['wp_embed'] = new WP_Embed();
     306 * WordPress Textdomain Registry object.
     307 *
     308 * Used to support just-in-time translations for manually loaded textdomains.
     309 *
     310 * @since 5.6.0
     311 *
     312 * @global WP_Locale_Switcher $wp_locale_switcher WordPress Textdomain Registry.
     313 */
     314$GLOBALS['wp_textdomain_registry'] = new WP_Textdomain_Registry();
    304316// Load multisite-specific files.
    305317if ( is_multisite() ) {
Note: See TracChangeset for help on using the changeset viewer.