WordPress 4.6 significantly improves the way translations are loaded for plugins and themes which are hosted in the WordPress Plugin and Theme Directory and using language packs via WordPress.org’s translation platform.
Loading Translations in Different Order
load_plugin_textdomain( $domain ) and
load_theme_textdomain( $domain ) are used to load the translations for a specific text domain, where
$domain equals the slug of your plugin or theme.
Up until now, these functions first looked inside the plugin/theme folder for available translations before checking the
wp-content/languages directory, where language packs reside. With WordPress 4.6, this order has been reversed.
The translation platform for plugins/themes was opened up in December last year. Since then 15,000 plugins and themes were imported and are now benefiting from automated translation updates. That’s why translation files are most likely to be located
wp-content/languages directory, hence this change. See  / #34213.
Just-in-time Loading for Translations
By far the biggest change is that you do not have to call
load_theme_textdomain() anymore with WordPress 4.6. Of course the same goes for
Again, since translations files are usually inside
wp-content/languages, WordPress now scans that directory for available translations and automatically loads them if it encounters a text domain for the first time. That’s handled by the new
_load_textdomain_just_in_time() function which gets called in
get_translations_for_domain(). See  / #34114.
This so-called just-in-time loading of text domains works really great and removes one more step for developers to worry about. If you do not want this to happen, however, you can still use the
override_load_textdomain filter to load your text domains manually.
Also, if you use
unload_textdomain() you will have to manually load translations afterwards if you want to use them again because it keeps a record of unloaded text domains.
Localized jQuery UI datepicker
- Support for comment number declension in
get_comments_number_text(). See #13651.
- Fallback for
TextDomain header field in
get_plugin_data(). See #36706.
- Updated list of continents and cities for the timezone selector. See #37554.
- Support for the German (Switzerland) locale in
remove_accents(). See #37076.
- Improved support for month name declension. See #36790.