Index: src/wp-admin/css/l10n.css
===================================================================
--- src/wp-admin/css/l10n.css	(revision 32993)
+++ src/wp-admin/css/l10n.css	(working copy)
@@ -58,16 +58,20 @@
 .locale-zh-cn #sort-buttons { font-size: 1em !important; }
 
 /* de_DE: Text needs more space for translation */
-.locale-de-de .inline-edit-row fieldset label span.title {
+.locale-de-de .inline-edit-row fieldset label span.title,
+.locale-de-de-formal .inline-edit-row fieldset label span.title {
 	width: 7em; /* default 5em */
 }
-.locale-de-de .inline-edit-row fieldset label span.input-text-wrap {
+.locale-de-de .inline-edit-row fieldset label span.input-text-wrap,
+.locale-de-de-formal .inline-edit-row fieldset label span.input-text-wrap {
 	margin-left: 7em; /* default 5em */
 }
-.locale-de-de #customize-header-actions .button {
+.locale-de-de #customize-header-actions .button,
+.locale-de-de-formal #customize-header-actions .button {
 	padding: 0 5px 1px; /* default 0 10px 1px */
 }
-.locale-de-de #customize-header-actions .spinner {
+.locale-de-de #customize-header-actions .spinner,
+.locale-de-de-formal #customize-header-actions .spinner {
 	margin: 16px 3px 0; /* default 16px 4px 0 5px */
 }
 
Index: src/wp-includes/formatting.php
===================================================================
--- src/wp-includes/formatting.php	(revision 32993)
+++ src/wp-includes/formatting.php	(working copy)
@@ -1138,7 +1138,7 @@
 		// Used for locale-specific rules
 		$locale = get_locale();
 
-		if ( 'de_DE' == $locale ) {
+		if ( 'de_DE' == $locale || 'de_DE_formal' == $locale ) {
 			$chars[ chr(195).chr(132) ] = 'Ae';
 			$chars[ chr(195).chr(164) ] = 'ae';
 			$chars[ chr(195).chr(150) ] = 'Oe';
Index: src/wp-includes/general-template.php
===================================================================
--- src/wp-includes/general-template.php	(revision 32993)
+++ src/wp-includes/general-template.php	(working copy)
@@ -665,8 +665,11 @@
 			$output = $wp_version;
 			break;
 		case 'language':
-			$output = get_locale();
-			$output = str_replace('_', '-', $output);
+			$output = '';
+			preg_match( '/^([a-z]{2,3}(_[A-Z]{2})?)/', get_locale(), $matches );
+			if ( ! empty( $matches[1] ) ) {
+				$output = str_replace( '_', '-', $matches[1] );
+			}
 			break;
 		case 'text_direction':
 			_deprecated_argument( __FUNCTION__, '2.2', sprintf(
Index: src/wp-includes/l10n.php
===================================================================
--- src/wp-includes/l10n.php	(revision 32993)
+++ src/wp-includes/l10n.php	(working copy)
@@ -820,7 +820,7 @@
 		if ( substr( $file, -3 ) !== '.po' ) {
 			continue;
 		}
-		if ( ! preg_match( '/(?:(.+)-)?([A-Za-z_]{2,6}).po/', $file, $match ) ) {
+		if ( ! preg_match( '/(?:(.+)-)?([a-z]{2,3}(?:_[A-Z]{2})?(?:_[a-z]+)?).po/', $file, $match ) ) {
 			continue;
 		}
 		if ( ! in_array( substr( $file, 0, -3 ) . '.mo', $files ) )  {
