From your comment:
Those
htaccesschanges don’t happen as a result of anadd_action.
Perhaps they should?
Yes, they should.
And here’s why
insert_with_markers() calls switch_to_locale() which uses $GLOBALS['wp_locale_switcher'] (or $wp_locale_switcher) which is initialized in wp-settings.php, but only after WordPress runs the setup_theme hook.
And looking at the error in question and line #1582 in wp-includes/l10n.php which is return $wp_locale_switcher->switch_to_locale( $locale );, that error occurred most likely because the global variable $wp_locale_switcher has not yet been defined or initialized. Which indicates that you called insert_with_markers() too early.
So if you want to use insert_with_markers(), make sure you use the proper hook; for example, load-{$page_hook} or update_option_{$option}:
// Example 1:
add_action( 'admin_menu', function () {
$hookname = add_menu_page( ... );
add_action( 'load-' . $hookname, function () {
// Call insert_with_markers()
} );
} );
// Example 2:
add_action( 'update_option_my_field', function ( $old_value, $value ) {
// Call insert_with_markers()
}, 10, 2 );
Both tried & tested working on WordPress 5.2.4 and 5.3.
But it’s also possible there’s a plugin or custom code which is messing with $wp_locale_switcher, so if using a hook later than setup_theme doesn’t work for you, you can try deactivating plugins..