WordPress.org

Make WordPress Core

Ticket #43700: 43700.2.diff

File 43700.2.diff, 7.1 KB (added by Nikschavan, 3 months ago)
  • src/wp-admin/css/login.css

    diff --git src/wp-admin/css/login.css src/wp-admin/css/login.css
    index 12590f27f4..3ccae2afa3 100644
    p { 
    232232}
    233233
    234234.login #nav,
    235 .login #backtoblog {
     235.login #backtoblog,
     236.language-switcher {
    236237        font-size: 13px;
    237238        padding: 0 24px 0;
    238239}
    body.interim-login { 
    328329        margin: 0;
    329330}
    330331
     332#language-switcher {
     333    padding: 0;
     334    background: none;
     335    box-shadow: none;
     336}
     337
     338#language-switcher select {
     339    height: 30px;
     340}
     341
     342.screen-reader-text {
     343    border: 0;
     344    clip: rect(1px, 1px, 1px, 1px);
     345    -webkit-clip-path: inset(50%);
     346    clip-path: inset(50%);
     347    height: 1px;
     348    margin: -1px;
     349    overflow: hidden;
     350    padding: 0;
     351    position: absolute;
     352    width: 1px;
     353    word-wrap: normal !important;
     354}
     355
     356.language-switcher {
     357    width: 320px;
     358    margin: 0 auto 24px;
     359    box-sizing: border-box;
     360}
     361
     362.language-switcher label {
     363    margin-right: .5em;
     364}
     365
     366.language-switcher .dashicons {
     367    line-height: 30px;
     368}
     369
    331370@-ms-viewport {
    332371        width: device-width;
    333372}
  • src/wp-includes/l10n.php

    diff --git src/wp-includes/l10n.php src/wp-includes/l10n.php
    index d77b15ee5b..db8ae88a7c 100644
    function determine_locale() { 
    143143                $determined_locale = get_user_locale();
    144144        }
    145145
    146         if ( ! empty( $_GET['wp_lang'] ) && ! empty( $GLOBALS['pagenow'] ) && 'wp-login.php' === $GLOBALS['pagenow'] ) {
    147                 $determined_locale = sanitize_text_field( $_GET['wp_lang'] );
     146        $wp_lang = '';
     147
     148        if ( ! empty( $_GET['wp_lang'] ) ) {
     149                $wp_lang = $_GET['wp_lang'];
     150        } elseif ( ! empty( $_COOKIE['wp_lang'] ) ) {
     151                $wp_lang = $_COOKIE['wp_lang'];
     152        }
     153
     154        if ( ! empty( $wp_lang ) && ! empty( $GLOBALS['pagenow'] ) && 'wp-login.php' === $GLOBALS['pagenow'] ) {
     155                $determined_locale = sanitize_text_field( $wp_lang );
    148156        }
    149157
    150158        /**
    function wp_get_pomo_file_data( $po_file ) { 
    13971405 * @since 4.3.0 Introduced the `echo` argument.
    13981406 * @since 4.7.0 Introduced the `show_option_site_default` argument.
    13991407 * @since 5.1.0 Introduced the `show_option_en_us` argument.
     1408 * @since x.x.x Introduced the `explicit_option_en_us` argument.
    14001409 *
    14011410 * @see get_available_languages()
    14021411 * @see wp_get_available_translations()
    function wp_get_pomo_file_data( $po_file ) { 
    14161425 *     @type bool     $show_available_translations  Whether to show available translations. Default true.
    14171426 *     @type bool     $show_option_site_default     Whether to show an option to fall back to the site's locale. Default false.
    14181427 *     @type bool     $show_option_en_us            Whether to show an option for English (United States). Default true.
     1428 *     @type bool     $explicit_option_en_us        Whether the English (United States) option uses an explict value of en_US
     1429 *                                                  instead of an empty value. Default false.
    14191430 * }
    14201431 * @return string HTML content
    14211432 */
    function wp_dropdown_languages( $args = array() ) { 
    14331444                        'show_available_translations' => true,
    14341445                        'show_option_site_default'    => false,
    14351446                        'show_option_en_us'           => true,
     1447                        'explicit_option_en_us'       => false,
    14361448                )
    14371449        );
    14381450
    function wp_dropdown_languages( $args = array() ) { 
    14421454        }
    14431455
    14441456        // English (United States) uses an empty string for the value attribute.
    1445         if ( 'en_US' === $parsed_args['selected'] ) {
     1457        if ( 'en_US' === $parsed_args['selected'] && ! $parsed_args['explicit_option_en_us'] ) {
    14461458                $parsed_args['selected'] = '';
    14471459        }
    14481460
    function wp_dropdown_languages( $args = array() ) { 
    14971509        }
    14981510
    14991511        if ( $parsed_args['show_option_en_us'] ) {
     1512                $value = ( $parsed_args['explicit_option_en_us'] ) ? 'en_US' : '';
    15001513                $structure[] = sprintf(
    1501                         '<option value="" lang="en" data-installed="1"%s>English (United States)</option>',
     1514                        '<option value="%s" lang="en" data-installed="1"%s>English (United States)</option>',
     1515                        esc_attr( $value ),
    15021516                        selected( '', $parsed_args['selected'], false )
    15031517                );
    15041518        }
  • src/wp-login.php

    diff --git src/wp-login.php src/wp-login.php
    index f7f0fa16ea..a5d23cd66c 100644
    function login_footer( $input_id = '' ) { 
    291291        </div><?php // End of <div id="login"> ?>
    292292
    293293        <?php
     294    $languages = get_available_languages();
     295
     296    if ( ! empty( $languages ) ) { ?>
     297
     298        <div class="language-switcher">
     299                <form id="language-switcher" action="" method="GET">
     300
     301                <label for="language-switcher-locales">
     302                        <span aria-hidden="true" class="dashicons dashicons-translation"></span>
     303                        <span class="screen-reader-text"><?php _e( 'Language' ); ?></span>
     304                </label>
     305
     306                <?php
     307                        $args = array(
     308                                'id'                          => 'language-switcher-locales',
     309                                'name'                        => 'wp_lang',
     310                                'selected'                    => determine_locale(),
     311                                'show_available_translations' => false,
     312                                'explicit_option_en_us'       => true,
     313                                'languages'                   => $languages,
     314                        );
     315
     316                        /**
     317                         * Filters default arguments for the Languages dropdown on the login screen.
     318                         *
     319                         * @since x.x.x
     320                         *
     321                         * @param Array $args Arguments for the Languages dropdown on the login screen.
     322                         */
     323                        wp_dropdown_languages( apply_filters( 'wp_login_language_switcher_args', $args ) );
     324                ?>
     325
     326                <?php if ( $interim_login ) { ?>
     327                        <input type="hidden" name="interim-login" value="1" />
     328                <?php } ?>
     329
     330                <?php if ( isset( $_GET['redirect_to'] ) && '' !== $_GET['redirect_to'] ) { ?>
     331                        <input type="hidden" name="redirect_to" value="<?php echo esc_url_raw( $_GET['redirect_to'] ) ?>" />
     332                <?php } ?>
     333
     334                <?php if ( isset( $_GET['action'] ) && '' !== $_GET['action'] ) { ?>
     335                        <input type="hidden" name="action" value="<?php echo sanitize_text_field( $_GET['action'] ) ?>" />
     336                <?php } ?>
     337
     338                </form>
     339        </div>
     340
     341        <script>
     342        var switcherForm  = document.getElementById( 'language-switcher' );
     343        var localesSelect = document.getElementById( 'language-switcher-locales' );
     344        localesSelect.addEventListener( 'change', function() {
     345                switcherForm.submit()
     346        } );
     347        </script>
     348
     349<?php } ?>
     350
     351        <?php
    294352
    295353        if ( ! empty( $input_id ) ) {
    296354                ?>
    if ( SITECOOKIEPATH != COOKIEPATH ) { 
    513571        setcookie( TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN, $secure );
    514572}
    515573
     574if ( isset( $_GET['wp_lang'] ) ) {
     575        setcookie( 'wp_lang', $_GET['wp_lang'], 0, COOKIEPATH, COOKIE_DOMAIN, $secure );
     576}
     577
    516578/**
    517579 * Fires when the login form is initialized.
    518580 *