A new event, Drupal\Core\Config\ConfigLangcodeResolveEvent, resolves the langcode for configuration saved without one. Core subscribes to it and answers with system.site:default_langcode. Configuration entities and installed configuration get this resolved langcode when they have none.
Config::save() adds a langcode when configuration becomes translatable and has none, and removes it when configuration stops being translatable.
Changing system.site:default_langcode now triggers a batch, built by Drupal\language\DefaultLangcodeConfigUpdater, that updates existing configuration whose langcode matches the old default to the new one. Modules can add batch operations through Drupal\language\Event\LanguageDefaultLangcodeChangeEvent</ode>, and can exclude configuration names with <code>hook_language_update_config_langcode_list_alter().
API additions
StorableConfigBase::castValue()takes a new$is_translatableparameter.ConfigEntityStorage::__construct(), and the field storage classes that extend it, take a new $event_dispatcher parameter.LocaleConfigSubscriber::updateLocaleStorage()and::processTranslatableData()take a new$original_configparameter.
Deprecations
Drupal\locale\LocaleConfigManager::updateDefaultConfigLangcodes()Drupal\locale\LocaleConfigBatch::batchUpdateDefaultConfigLangcodes()$update_default_config_langcodesparameter fromLocaleConfigBatch::buildBatch()
There are no replacements.