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
This commit is contained in:
herregroen 2018-11-15 14:36:39 +00:00
parent 4b791ecf5f
commit 07736dc37c
3 changed files with 15 additions and 14 deletions

View File

@ -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 ){' .

View File

@ -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.

View File

@ -863,7 +863,11 @@ class Tests_Dependencies_Scripts extends WP_UnitTestCase {
wp_set_script_translations( 'test-example', 'admin', DIR_TESTDATA . '/languages/' );
$expected = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
$expected .= "\n<script type='text/javascript' src='/wp-admin/js/script.js'></script>\n";
$expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
"translations.locale_data.messages[\"\"].domain = \"admin\";" .
"wp.i18n.setLocaleData( translations.locale_data.messages, \"admin\" );" .
"})({ \"locale_data\": { \"messages\": { \"\": {} } } });\n</script>\n";
$expected .= "<script type='text/javascript' src='/wp-admin/js/script.js'></script>\n";
$this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) );
}