Find the following code (lines 312-318) in wp-admin/admin-ajax.php:
if ( category_exists( trim( $_POST['cat_name'] ) ) ) {
$x = new WP_Ajax_Response( array(
'what' => 'cat',
'id' => new WP_Error( 'cat_exists', __('The category you are trying to create already exists.'), array( 'form-field' => 'cat_name' ) ),
) );
$x->send();
}
Replace with this code:
if ( category_exists( trim( $_POST['category_nicename'] ) ) ) {
$x = new WP_Ajax_Response( array(
'what' => 'cat',
'id' => new WP_Error( 'cat_exists', __('The category you are trying to create already exists.'), array( 'form-field' => 'category_nicename' ) ),
) );
$x->send();
}
What you are doing is changing the instances of "cat_name" with "category_nicename", This has it check the slug for uniqueness, and not the name.
I tested briefly for myself and it seems to be working.