There’s no such hook named load-themes.php in WordPress. One of the hooks you can use to add custom capabilities is after_setup_theme.
Also, there’s no need to use 'themes.php' == $pagenow && isset($_GET['activated'])
condition there. What are you trying to achieve this way?
Try to use this code instead:
add_action( 'after_setup_theme', function() {
$role = get_role( 'subscriber' );
$singular="catalog";
$plural="catalogs";
$role->add_cap( "edit_{$singular}" );
$role->add_cap( "edit_{$plural}" );
$role->add_cap( "edit_others_{$plural}" );
$role->add_cap( "publish_{$plural}" );
$role->add_cap( "read_{$singular}" );
$role->add_cap( "read_private_{$plural}" );
$role->add_cap( "delete_{$singular}" );
$role->add_cap( "delete_{$plural}" );
$role->add_cap( "delete_private_{$plural}" );
$role->add_cap( "delete_others_{$plural}" );
$role->add_cap( "edit_published_{$plural}" );
$role->add_cap( "edit_private_{$plural}" );
$role->add_cap( "delete_published_{$plural}" );
} );