From 07736dc37c7fbaa357e29832bcc6741b7fdad421 Mon Sep 17 00:00:00 2001 From: herregroen Date: Thu, 15 Nov 2018 14:36:39 +0000 Subject: [PATCH] I18N: Fix warnings in JavaScript translations. Fixes an undefined index PHP warning in the load_script_textdomain function and a non-interrupting JS error when registering a domain which has no translations. Props omarreiss, ocean90, georgestephanis. Fixes #45256. git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43898 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class.wp-scripts.php | 3 ++- src/wp-includes/l10n.php | 20 ++++++++------------ tests/phpunit/tests/dependencies/scripts.php | 6 +++++- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/wp-includes/class.wp-scripts.php b/src/wp-includes/class.wp-scripts.php index aa9d4261c9..0562d70bb9 100644 --- a/src/wp-includes/class.wp-scripts.php +++ b/src/wp-includes/class.wp-scripts.php @@ -528,7 +528,8 @@ class WP_Scripts extends WP_Dependencies { $json_translations = load_script_textdomain( $handle, $domain, $path ); if ( ! $json_translations ) { - return false; + // Register empty locale data object to ensure the domain still exists. + $json_translations = '{ "locale_data": { "messages": { "": {} } } }'; } $output = '(function( translations ){' . diff --git a/src/wp-includes/l10n.php b/src/wp-includes/l10n.php index feaf89d653..b46607ae61 100644 --- a/src/wp-includes/l10n.php +++ b/src/wp-includes/l10n.php @@ -923,18 +923,14 @@ function load_script_textdomain( $handle, $domain, $path = null ) { $relative = array_slice( $relative, 2 ); $relative = implode( '/', $relative ); - } else if ( - ! isset( $site_url['path'] ) && - ( ! isset( $src_url['host'] ) || $src_url['host'] !== $site_url['host'] ) - ) { - $relative = trim( $src_url['path'], '/' ); - } else if ( - ( strpos( $src_url['path'], $site_url['path'] ) === 0 ) && - ( ! isset( $src_url['host'] ) || $src_url['host'] !== $site_url['host'] ) - ) { - // Make the src relative to the WP root. - $relative = substr( $src, strlen( $site_url['path'] ) ); - $relative = trim( $relative, '/' ); + } elseif ( ! isset( $src_url['host'] ) || $src_url['host'] !== $site_url['host'] ) { + if ( ! isset( $site_url['path'] ) ) { + $relative = trim( $src_url['path'], '/' ); + } elseif ( ( strpos( $src_url['path'], $site_url['path'] ) === 0 ) ) { + // Make the src relative to the WP root. + $relative = substr( $src, strlen( $site_url['path'] ) ); + $relative = trim( $relative, '/' ); + } } // If the source is not from WP. diff --git a/tests/phpunit/tests/dependencies/scripts.php b/tests/phpunit/tests/dependencies/scripts.php index 977d74ad12..6b84a81ae7 100644 --- a/tests/phpunit/tests/dependencies/scripts.php +++ b/tests/phpunit/tests/dependencies/scripts.php @@ -863,7 +863,11 @@ class Tests_Dependencies_Scripts extends WP_UnitTestCase { wp_set_script_translations( 'test-example', 'admin', DIR_TESTDATA . '/languages/' ); $expected = ""; - $expected .= "\n\n"; + $expected .= "\n\n"; + $expected .= "\n"; $this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) ); }