Index: src/wp-includes/link-template.php
===================================================================
--- src/wp-includes/link-template.php	(revision 45881)
+++ src/wp-includes/link-template.php	(working copy)
@@ -2546,10 +2546,16 @@
  *     @type array|string $excluded_terms     Array or comma-separated list of excluded term IDs. Default empty.
  *     @type string       $taxonomy           Taxonomy, if `$in_same_term` is true. Default 'category'.
  *     @type string       $screen_reader_text Screen reader text for nav element. Default 'Post navigation'.
+ *     @type string       $aria_label         ARIA label text for nav element. Default 'Posts'.
  * }
  * @return string Markup for post links.
  */
 function get_the_post_navigation( $args = array() ) {
+	// Is screen_reader_text customized but not aria_label?
+	if( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
+		$args['aria_label'] = $args['screen_reader_text'];
+	}
+
 	$args = wp_parse_args(
 		$args,
 		array(
@@ -2559,6 +2565,7 @@
 			'excluded_terms'     => '',
 			'taxonomy'           => 'category',
 			'screen_reader_text' => __( 'Post navigation' ),
+			'aria_label'         => __( 'Posts' ),
 		)
 	);
 
@@ -2582,7 +2589,7 @@
 
 	// Only add markup if there's somewhere to navigate to.
 	if ( $previous || $next ) {
-		$navigation = _navigation_markup( $previous . $next, 'post-navigation', $args['screen_reader_text'] );
+		$navigation = _navigation_markup( $previous . $next, 'post-navigation', $args['screen_reader_text'], $args['aria_label'] );
 	}
 
 	return $navigation;
@@ -2616,6 +2623,8 @@
  *                                      Default 'Newer posts'.
  *     @type string $screen_reader_text Screen reader text for nav element.
  *                                      Default 'Posts navigation'.
+ *     @type string $aria_label         ARIA label text for nav element.
+ *                                      Default 'Posts'.
  * }
  * @return string Markup for posts links.
  */
@@ -2624,12 +2633,18 @@
 
 	// Don't print empty markup if there's only one page.
 	if ( $GLOBALS['wp_query']->max_num_pages > 1 ) {
+		// Is screen_reader_text customized but not aria_label?
+		if( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
+			$args['aria_label'] = $args['screen_reader_text'];
+		}
+
 		$args = wp_parse_args(
 			$args,
 			array(
 				'prev_text'          => __( 'Older posts' ),
 				'next_text'          => __( 'Newer posts' ),
 				'screen_reader_text' => __( 'Posts navigation' ),
+				'aria_label'         => __( 'Posts' ),
 			)
 		);
 
@@ -2644,7 +2659,7 @@
 			$navigation .= '<div class="nav-next">' . $next_link . '</div>';
 		}
 
-		$navigation = _navigation_markup( $navigation, 'posts-navigation', $args['screen_reader_text'] );
+		$navigation = _navigation_markup( $navigation, 'posts-navigation', $args['screen_reader_text'], $args['aria_label'] );
 	}
 
 	return $navigation;
@@ -2672,6 +2687,8 @@
  *
  *     @type string $screen_reader_text Screen reader text for navigation element.
  *                                      Default 'Posts navigation'.
+ *     @type string $aria_label         ARIA label text for nav element.
+ *                                      Default 'Posts'.
  * }
  * @return string Markup for pagination links.
  */
@@ -2680,6 +2697,11 @@
 
 	// Don't print empty markup if there's only one page.
 	if ( $GLOBALS['wp_query']->max_num_pages > 1 ) {
+		// Is screen_reader_text customized but not aria_label?
+		if( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
+			$args['aria_label'] = $args['screen_reader_text'];
+		}
+
 		$args = wp_parse_args(
 			$args,
 			array(
@@ -2687,6 +2709,7 @@
 				'prev_text'          => _x( 'Previous', 'previous set of posts' ),
 				'next_text'          => _x( 'Next', 'next set of posts' ),
 				'screen_reader_text' => __( 'Posts navigation' ),
+				'aria_label'         => __( 'Posts' ),
 			)
 		);
 
@@ -2699,7 +2722,7 @@
 		$links = paginate_links( $args );
 
 		if ( $links ) {
-			$navigation = _navigation_markup( $links, 'pagination', $args['screen_reader_text'] );
+			$navigation = _navigation_markup( $links, 'pagination', $args['screen_reader_text'], $args['aria_label'] );
 		}
 	}
 
@@ -2727,15 +2750,19 @@
  * @param string $links              Navigational links.
  * @param string $class              Optional. Custom class for nav element. Default: 'posts-navigation'.
  * @param string $screen_reader_text Optional. Screen reader text for nav element. Default: 'Posts navigation'.
+ * @param string $aria_label         Optional. ARIA label for nav element. Default: same value as $screen_reader_text.
  * @return string Navigation template tag.
  */
-function _navigation_markup( $links, $class = 'posts-navigation', $screen_reader_text = '' ) {
+function _navigation_markup( $links, $class = 'posts-navigation', $screen_reader_text = '', $aria_label = '' ) {
 	if ( empty( $screen_reader_text ) ) {
 		$screen_reader_text = __( 'Posts navigation' );
 	}
+	if ( empty( $aria_label ) ) {
+		$aria_label = $screen_reader_text;
+	}
 
 	$template = '
-	<nav class="navigation %1$s" role="navigation">
+	<nav class="navigation %1$s" role="navigation" aria-label="%4$s">
 		<h2 class="screen-reader-text">%2$s</h2>
 		<div class="nav-links">%3$s</div>
 	</nav>';
@@ -2744,10 +2771,10 @@
 	 * Filters the navigation markup template.
 	 *
 	 * Note: The filtered template HTML must contain specifiers for the navigation
-	 * class (%1$s), the screen-reader-text value (%2$s), and placement of the
-	 * navigation links (%3$s):
+	 * class (%1$s), the screen-reader-text value (%2$s), placement of the navigation
+	 * links (%3$s), and ARIA label text if screen-reader-text does not fit that (%4$s):
 	 *
-	 *     <nav class="navigation %1$s" role="navigation">
+	 *     <nav class="navigation %1$s" role="navigation" aria-label="%4$s">
 	 *         <h2 class="screen-reader-text">%2$s</h2>
 	 *         <div class="nav-links">%3$s</div>
 	 *     </nav>
@@ -2760,7 +2787,7 @@
 	 */
 	$template = apply_filters( 'navigation_markup_template', $template, $class );
 
-	return sprintf( $template, sanitize_html_class( $class ), esc_html( $screen_reader_text ), $links );
+	return sprintf( $template, sanitize_html_class( $class ), esc_html( $screen_reader_text ), $links, esc_html( $aria_label ) );
 }
 
 /**
@@ -2978,6 +3005,7 @@
  *     @type string $next_text          Anchor text to display in the next comments link.
  *                                      Default 'Newer comments'.
  *     @type string $screen_reader_text Screen reader text for nav element. Default 'Comments navigation'.
+ *     @type string $aria_label         ARIA label text for nav element. Default 'Comments'.
  * }
  * @return string Markup for comments links.
  */
@@ -2986,12 +3014,18 @@
 
 	// Are there comments to navigate through?
 	if ( get_comment_pages_count() > 1 ) {
+		// Is screen_reader_text customized but not aria_label?
+		if( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
+			$args['aria_label'] = $args['screen_reader_text'];
+		}
+
 		$args = wp_parse_args(
 			$args,
 			array(
 				'prev_text'          => __( 'Older comments' ),
 				'next_text'          => __( 'Newer comments' ),
 				'screen_reader_text' => __( 'Comments navigation' ),
+				'aria_label'         => __( 'Comments' ),
 			)
 		);
 
@@ -3006,7 +3040,7 @@
 			$navigation .= '<div class="nav-next">' . $next_link . '</div>';
 		}
 
-		$navigation = _navigation_markup( $navigation, 'comment-navigation', $args['screen_reader_text'] );
+		$navigation = _navigation_markup( $navigation, 'comment-navigation', $args['screen_reader_text'], $args['aria_label'] );
 	}
 
 	return $navigation;
@@ -3034,15 +3068,23 @@
  *     Optional. Default pagination arguments.
  *
  *     @type string $screen_reader_text Screen reader text for nav element. Default 'Comments navigation'.
+ *     @type string $aria_label         ARIA label text for nav element. Default 'Comments'.
  * }
  * @return string Markup for pagination links.
  */
 function get_the_comments_pagination( $args = array() ) {
 	$navigation   = '';
+
+	// Is screen_reader_text customized but not aria_label?
+	if( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
+		$args['aria_label'] = $args['screen_reader_text'];
+	}
+
 	$args         = wp_parse_args(
 		$args,
 		array(
 			'screen_reader_text' => __( 'Comments navigation' ),
+			'aria_label'         => __( 'Comments' ),
 		)
 	);
 	$args['echo'] = false;
@@ -3055,7 +3097,7 @@
 	$links = paginate_comments_links( $args );
 
 	if ( $links ) {
-		$navigation = _navigation_markup( $links, 'comments-pagination', $args['screen_reader_text'] );
+		$navigation = _navigation_markup( $links, 'comments-pagination', $args['screen_reader_text'], $args['aria_label'] );
 	}
 
 	return $navigation;
