WordPress.org

Make WordPress Core

Ticket #37997: 37997.2.diff

File 37997.2.diff, 2.8 KB (added by swissspidy, 4 years ago)
  • src/wp-includes/l10n.php

    diff --git src/wp-includes/l10n.php src/wp-includes/l10n.php
    index aaa7611..10364c9 100644
    function load_textdomain( $domain, $mofile ) { 
    556556        $mo = new MO();
    557557        if ( !$mo->import_from_file( $mofile ) ) return false;
    558558
    559         if ( isset( $l10n[$domain] ) )
    560                 $mo->merge_with( $l10n[$domain] );
     559        if ( is_textdomain_loaded( $domain ) ) {
     560                $mo->merge_with( $l10n[ $domain ] );
     561        }
    561562
    562563        unset( $l10n_unloaded[ $domain ] );
    563564
    function _load_textdomain_just_in_time( $domain ) { 
    864865 */
    865866function get_translations_for_domain( $domain ) {
    866867        global $l10n;
    867         if ( isset( $l10n[ $domain ] ) || ( _load_textdomain_just_in_time( $domain ) && isset( $l10n[ $domain ] ) ) ) {
     868
     869        if ( isset( $l10n[ $domain ] ) ) {
    868870                return $l10n[ $domain ];
    869871        }
    870872
    function get_translations_for_domain( $domain ) { 
    873875                $noop_translations = new NOOP_Translations;
    874876        }
    875877
     878        if ( ! ( _load_textdomain_just_in_time( $domain ) && isset( $l10n[ $domain ] ) ) ) {
     879                $l10n[ $domain ] = $noop_translations;
     880        }
     881
    876882        return $noop_translations;
    877883}
    878884
    function get_translations_for_domain( $domain ) { 
    888894 */
    889895function is_textdomain_loaded( $domain ) {
    890896        global $l10n;
    891         return isset( $l10n[ $domain ] );
     897        return isset( $l10n[ $domain ] ) && ! $l10n[ $domain ] instanceof NOOP_Translations;
    892898}
    893899
    894900/**
    function is_rtl() { 
    11481154                return false;
    11491155        }
    11501156        return $wp_locale->is_rtl();
    1151 }
    1152  No newline at end of file
     1157}
  • tests/phpunit/tests/l10n/loadTextdomainJustInTime.php

    diff --git tests/phpunit/tests/l10n/loadTextdomainJustInTime.php tests/phpunit/tests/l10n/loadTextdomainJustInTime.php
    index f73cfd5..fb02bad 100644
     
    55 * @group i18n
    66 */
    77class Tests_L10n_loadTextdomainJustInTime extends WP_UnitTestCase {
    8 
    98        private $orig_theme_dir;
    109        private $theme_root;
     10        private $get_locale_count;
    1111
    1212        function setUp() {
    1313                parent::setUp();
    class Tests_L10n_loadTextdomainJustInTime extends WP_UnitTestCase { 
    141141                $this->assertSame( 'Das ist ein Dummy Plugin', $expected_output_final );
    142142                $this->assertTrue( $is_textdomain_loaded_final );
    143143        }
     144
     145        public function _filter_get_locale( $locale  ) {
     146                ++$this->get_locale_count;
     147
     148                return $locale;
     149        }
     150
     151        /**
     152         * @ticket 37997
     153         */
     154        public function test_get_locale_is_called_only_once_per_textdomain(  ) {
     155                $textdomain = 'foo-bar-baz';
     156
     157                add_filter( 'locale', array( $this, '_filter_get_locale' ) );
     158
     159                __( 'Foo', $textdomain );
     160                __( 'Bar', $textdomain );
     161                __( 'Baz', $textdomain );
     162                __( 'Foo Bar', $textdomain );
     163                __( 'Foo Bar Baz', $textdomain );
     164
     165                remove_filter( 'locale', array( $this, '_filter_get_locale' ) );
     166
     167                $this->assertFalse( is_textdomain_loaded( $textdomain ) );
     168                $this->assertSame( 1, $this->get_locale_count );
     169        }
    144170}