diff --git a/src/wp-admin/admin-header.php b/src/wp-admin/admin-header.php index 9ec3999ac8..b5bbec0e98 100644 --- a/src/wp-admin/admin-header.php +++ b/src/wp-admin/admin-header.php @@ -156,7 +156,7 @@ if ( $current_screen->taxonomy ) $admin_body_class .= ' branch-' . str_replace( array( '.', ',' ), '-', floatval( get_bloginfo( 'version' ) ) ); $admin_body_class .= ' version-' . str_replace( '.', '-', preg_replace( '/^([.0-9]+).*/', '$1', get_bloginfo( 'version' ) ) ); $admin_body_class .= ' admin-color-' . sanitize_html_class( get_user_option( 'admin_color' ), 'fresh' ); -$admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_locale() ) ) ); +$admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_user_locale() ) ) ); if ( wp_is_mobile() ) $admin_body_class .= ' mobile'; diff --git a/src/wp-admin/includes/class-wp-plugin-install-list-table.php b/src/wp-admin/includes/class-wp-plugin-install-list-table.php index 475c95e8af..c4bdaf9a15 100644 --- a/src/wp-admin/includes/class-wp-plugin-install-list-table.php +++ b/src/wp-admin/includes/class-wp-plugin-install-list-table.php @@ -134,7 +134,7 @@ class WP_Plugin_Install_List_Table extends WP_List_Table { 'active_installs' => true ), // Send the locale and installed plugin slugs to the API so it can provide context-sensitive results. - 'locale' => get_locale(), + 'locale' => get_user_locale(), 'installed_plugins' => $this->get_installed_plugin_slugs(), ); diff --git a/src/wp-admin/includes/class-wp-press-this.php b/src/wp-admin/includes/class-wp-press-this.php index 3ff242bed8..e275b16e5b 100644 --- a/src/wp-admin/includes/class-wp-press-this.php +++ b/src/wp-admin/includes/class-wp-press-this.php @@ -1312,7 +1312,7 @@ class WP_Press_This { $admin_body_class .= ' branch-' . str_replace( array( '.', ',' ), '-', floatval( $wp_version ) ); $admin_body_class .= ' version-' . str_replace( '.', '-', preg_replace( '/^([.0-9]+).*/', '$1', $wp_version ) ); $admin_body_class .= ' admin-color-' . sanitize_html_class( get_user_option( 'admin_color' ), 'fresh' ); - $admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_locale() ) ) ); + $admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_user_locale() ) ) ); /** This filter is documented in wp-admin/admin-header.php */ $admin_body_classes = apply_filters( 'admin_body_class', '' ); diff --git a/src/wp-admin/includes/credits.php b/src/wp-admin/includes/credits.php index 6634724c84..005858c384 100644 --- a/src/wp-admin/includes/credits.php +++ b/src/wp-admin/includes/credits.php @@ -16,7 +16,7 @@ */ function wp_credits() { $wp_version = get_bloginfo( 'version' ); - $locale = get_locale(); + $locale = get_user_locale(); $results = get_site_transient( 'wordpress_credits_' . $locale ); diff --git a/src/wp-admin/includes/dashboard.php b/src/wp-admin/includes/dashboard.php index 659e0600d8..a338f4c48d 100644 --- a/src/wp-admin/includes/dashboard.php +++ b/src/wp-admin/includes/dashboard.php @@ -1353,7 +1353,7 @@ function wp_dashboard_browser_nag() { $notice .= "
{$msg}
"; $browsehappy = 'http://browsehappy.com/'; - $locale = get_locale(); + $locale = get_user_locale(); if ( 'en_US' !== $locale ) $browsehappy = add_query_arg( 'locale', $locale, $browsehappy ); diff --git a/src/wp-admin/includes/import.php b/src/wp-admin/includes/import.php index 4f0b78536f..0d534422c2 100644 --- a/src/wp-admin/includes/import.php +++ b/src/wp-admin/includes/import.php @@ -125,13 +125,13 @@ function wp_import_handle_upload() { function wp_get_popular_importers() { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version - $locale = get_locale(); + $locale = get_user_locale(); $cache_key = 'popular_importers_' . md5( $locale . $wp_version ); $popular_importers = get_site_transient( $cache_key ); if ( ! $popular_importers ) { $url = add_query_arg( array( - 'locale' => get_locale(), + 'locale' => get_user_locale(), 'version' => $wp_version, ), 'http://api.wordpress.org/core/importers/1.1/' ); $options = array( 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url() ); diff --git a/src/wp-admin/includes/plugin-install.php b/src/wp-admin/includes/plugin-install.php index 10568b0158..b569d7679d 100644 --- a/src/wp-admin/includes/plugin-install.php +++ b/src/wp-admin/includes/plugin-install.php @@ -109,7 +109,7 @@ function plugins_api( $action, $args = array() ) { } if ( ! isset( $args->locale ) ) { - $args->locale = get_locale(); + $args->locale = get_user_locale(); } /** diff --git a/src/wp-admin/includes/template.php b/src/wp-admin/includes/template.php index f9f463b62f..d6fcab06ee 100644 --- a/src/wp-admin/includes/template.php +++ b/src/wp-admin/includes/template.php @@ -1622,7 +1622,7 @@ do_action( "admin_head-$hook_suffix" ); /** This action is documented in wp-admin/admin-header.php */ do_action( 'admin_head' ); -$admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_locale() ) ) ); +$admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_user_locale() ) ) ); if ( is_rtl() ) $admin_body_class .= ' rtl'; diff --git a/src/wp-admin/includes/theme.php b/src/wp-admin/includes/theme.php index 95aaec1618..b5fc98042d 100644 --- a/src/wp-admin/includes/theme.php +++ b/src/wp-admin/includes/theme.php @@ -412,7 +412,7 @@ function themes_api( $action, $args = array() ) { } if ( ! isset( $args->locale ) ) { - $args->locale = get_locale(); + $args->locale = get_user_locale(); } /** diff --git a/src/wp-admin/includes/user.php b/src/wp-admin/includes/user.php index fc46dd3ad2..6bf826bb2a 100644 --- a/src/wp-admin/includes/user.php +++ b/src/wp-admin/includes/user.php @@ -94,6 +94,16 @@ function edit_user( $user_id = 0 ) { $user->rich_editing = isset( $_POST['rich_editing'] ) && 'false' == $_POST['rich_editing'] ? 'false' : 'true'; $user->admin_color = isset( $_POST['admin_color'] ) ? sanitize_text_field( $_POST['admin_color'] ) : 'fresh'; $user->show_admin_bar_front = isset( $_POST['admin_bar_front'] ) ? 'true' : 'false'; + $user->locale = ''; + + if ( isset( $_POST['locale'] ) ) { + $locale = sanitize_text_field( $_POST['locale'] ); + if ( ! in_array( $locale, get_available_languages(), true ) ) { + $locale = ''; + } + + $user->locale = ( '' === $locale ) ? 'en_US' : $locale; + } } $user->comment_shortcuts = isset( $_POST['comment_shortcuts'] ) && 'true' == $_POST['comment_shortcuts'] ? 'true' : ''; diff --git a/src/wp-admin/options.php b/src/wp-admin/options.php index f319d5208e..93c69bc1e4 100644 --- a/src/wp-admin/options.php +++ b/src/wp-admin/options.php @@ -209,19 +209,23 @@ if ( 'update' == $action ) { $value = null; if ( isset( $_POST[ $option ] ) ) { $value = $_POST[ $option ]; - if ( ! is_array( $value ) ) + if ( ! is_array( $value ) ) { $value = trim( $value ); + } $value = wp_unslash( $value ); } update_option( $option, $value ); } // Switch translation in case WPLANG was changed. - $language = get_option( 'WPLANG' ); - if ( $language ) { - load_default_textdomain( $language ); - } else { - unload_textdomain( 'default' ); + $language = get_option( 'WPLANG' ); + $user_language = get_user_locale(); + if ( $language === $user_language ) { + if ( $language ) { + load_default_textdomain( $language ); + } else { + unload_textdomain( 'default' ); + } } } diff --git a/src/wp-admin/plugin-editor.php b/src/wp-admin/plugin-editor.php index a5dd63dba1..f9bdc80f8f 100644 --- a/src/wp-admin/plugin-editor.php +++ b/src/wp-admin/plugin-editor.php @@ -260,7 +260,7 @@ foreach ( $plugin_files as $plugin_file ) : - + diff --git a/src/wp-admin/theme-editor.php b/src/wp-admin/theme-editor.php index cd9f8392f1..145ff5a94d 100644 --- a/src/wp-admin/theme-editor.php +++ b/src/wp-admin/theme-editor.php @@ -263,7 +263,7 @@ else : ?> diff --git a/src/wp-admin/user-edit.php b/src/wp-admin/user-edit.php index b97cdddd95..0e183e71d7 100644 --- a/src/wp-admin/user-edit.php +++ b/src/wp-admin/user-edit.php @@ -269,6 +269,38 @@ if ( !( IS_PROFILE_PAGE && !$user_can_edit ) ) : ?> + + +