diff --git a/src/wp-includes/l10n.php b/src/wp-includes/l10n.php index de02d5a846..ed0b940c13 100644 --- a/src/wp-includes/l10n.php +++ b/src/wp-includes/l10n.php @@ -793,10 +793,16 @@ function load_child_theme_textdomain( $domain, $path = false ) { */ function get_translations_for_domain( $domain ) { global $l10n; - if ( !isset( $l10n[$domain] ) ) { - $l10n[$domain] = new NOOP_Translations; + if ( isset( $l10n[ $domain ] ) ) { + return $l10n[ $domain ]; } - return $l10n[$domain]; + + static $noop_translations = null; + if ( null === $noop_translations ) { + $noop_translations = new NOOP_Translations; + } + + return $noop_translations; } /** @@ -811,7 +817,7 @@ function get_translations_for_domain( $domain ) { */ function is_textdomain_loaded( $domain ) { global $l10n; - return isset( $l10n[$domain] ); + return isset( $l10n[ $domain ] ); } /** diff --git a/tests/phpunit/tests/l10n.php b/tests/phpunit/tests/l10n.php index 62357f0409..62e89ceac9 100644 --- a/tests/phpunit/tests/l10n.php +++ b/tests/phpunit/tests/l10n.php @@ -26,4 +26,24 @@ class Tests_L10n extends WP_UnitTestCase { $this->assertEquals( 'first-before-bar|second-before-bar', before_last_bar( 'first-before-bar|second-before-bar|after-last-bar' ) ); } + /** + * @ticket 21319 + */ + function test_is_textdomain_loaded_for_no_translations() { + $this->assertFalse( load_textdomain( 'wp-tests-domain', DIR_TESTDATA . '/non-existent-file' ) ); + $this->assertFalse( is_textdomain_loaded( 'wp-tests-domain' ) ); + $this->assertInstanceOf( 'NOOP_Translations', get_translations_for_domain( 'wp-tests-domain' ) ); + // Ensure that we don't confuse NOOP_Translations to be a loaded text domain. + $this->assertFalse( is_textdomain_loaded( 'wp-tests-domain' ) ); + $this->assertFalse( unload_textdomain( 'wp-tests-domain' ) ); + } + + /** + * @ticket 21319 + */ + function test_is_textdomain_is_not_loaded_after_gettext_call_with_no_translations() { + $this->assertFalse( is_textdomain_loaded( 'wp-tests-domain' ) ); + __( 'just some string', 'wp-tests-domain' ); + $this->assertFalse( is_textdomain_loaded( 'wp-tests-domain' ) ); + } }