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.