I18N/Script Loader: Support text domains other than "messages".
The inline JavaScript added by `WP_Scripts::print_translations()` should check whether `locale_data.$text_domain` exists and fall back to `locale_data.messages` otherwise. Props swissspidy. See #45441. git-svn-id: https://develop.svn.wordpress.org/trunk@44403 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
899e5163fa
commit
690b0cbf83
@ -546,10 +546,13 @@ class WP_Scripts extends WP_Dependencies {
|
||||
$json_translations = '{ "locale_data": { "messages": { "": {} } } }';
|
||||
}
|
||||
|
||||
$output = '(function( translations ){' .
|
||||
'translations.locale_data.messages[""].domain = "' . $domain . '";' .
|
||||
'wp.i18n.setLocaleData( translations.locale_data.messages, "' . $domain . '" );' .
|
||||
'})(' . $json_translations . ');';
|
||||
$output = <<<JS
|
||||
( function( domain, translations ) {
|
||||
var localeData = translations.locale_data[ domain ] || translations.locale_data.messages;
|
||||
localeData[""].domain = domain;
|
||||
wp.i18n.setLocaleData( localeData, domain );
|
||||
} )( "{$domain}", {$json_translations} );
|
||||
JS;
|
||||
|
||||
if ( $echo ) {
|
||||
printf( "<script type='text/javascript'>\n%s\n</script>\n", $output );
|
||||
|
@ -4,7 +4,9 @@
|
||||
* @group scripts
|
||||
*/
|
||||
class Tests_Dependencies_Scripts extends WP_UnitTestCase {
|
||||
var $old_wp_scripts;
|
||||
protected $old_wp_scripts;
|
||||
|
||||
protected $wp_scripts_print_translations_output;
|
||||
|
||||
function setUp() {
|
||||
parent::setUp();
|
||||
@ -13,6 +15,17 @@ class Tests_Dependencies_Scripts extends WP_UnitTestCase {
|
||||
remove_action( 'wp_default_scripts', 'wp_default_packages' );
|
||||
$GLOBALS['wp_scripts'] = new WP_Scripts();
|
||||
$GLOBALS['wp_scripts']->default_version = get_bloginfo( 'version' );
|
||||
|
||||
$this->wp_scripts_print_translations_output = <<<JS
|
||||
<script type='text/javascript'>
|
||||
( function( domain, translations ) {
|
||||
var localeData = translations.locale_data[ domain ] || translations.locale_data.messages;
|
||||
localeData[""].domain = domain;
|
||||
wp.i18n.setLocaleData( localeData, domain );
|
||||
} )( "__DOMAIN__", __JSON_TRANSLATIONS__ );
|
||||
</script>
|
||||
JS;
|
||||
$this->wp_scripts_print_translations_output .= "\n";
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
@ -781,11 +794,18 @@ class Tests_Dependencies_Scripts extends WP_UnitTestCase {
|
||||
wp_enqueue_script( 'test-example', '/wp-includes/js/script.js', array(), null );
|
||||
wp_set_script_translations( 'test-example', 'default', DIR_TESTDATA . '/languages' );
|
||||
|
||||
$expected = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
|
||||
$expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
|
||||
'translations.locale_data.messages[""].domain = "default";' .
|
||||
'wp.i18n.setLocaleData( translations.locale_data.messages, "default" );' .
|
||||
'})(' . file_get_contents( DIR_TESTDATA . '/languages/en_US-813e104eb47e13dd4cc5af844c618754.json' ) . ");\n</script>\n";
|
||||
$expected = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>\n";
|
||||
$expected .= str_replace(
|
||||
array(
|
||||
'__DOMAIN__',
|
||||
'__JSON_TRANSLATIONS__',
|
||||
),
|
||||
array(
|
||||
'default',
|
||||
file_get_contents( DIR_TESTDATA . '/languages/en_US-813e104eb47e13dd4cc5af844c618754.json' ),
|
||||
),
|
||||
$this->wp_scripts_print_translations_output
|
||||
);
|
||||
$expected .= "<script type='text/javascript' src='/wp-includes/js/script.js'></script>\n";
|
||||
|
||||
$this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) );
|
||||
@ -799,11 +819,18 @@ class Tests_Dependencies_Scripts extends WP_UnitTestCase {
|
||||
wp_enqueue_script( 'plugin-example', '/wp-content/plugins/my-plugin/js/script.js', array(), null );
|
||||
wp_set_script_translations( 'plugin-example', 'internationalized-plugin', DIR_TESTDATA . '/languages/plugins' );
|
||||
|
||||
$expected = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
|
||||
$expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
|
||||
'translations.locale_data.messages[""].domain = "internationalized-plugin";' .
|
||||
'wp.i18n.setLocaleData( translations.locale_data.messages, "internationalized-plugin" );' .
|
||||
'})(' . file_get_contents( DIR_TESTDATA . '/languages/plugins/internationalized-plugin-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json' ) . ");\n</script>\n";
|
||||
$expected = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>\n";
|
||||
$expected .= str_replace(
|
||||
array(
|
||||
'__DOMAIN__',
|
||||
'__JSON_TRANSLATIONS__',
|
||||
),
|
||||
array(
|
||||
'internationalized-plugin',
|
||||
file_get_contents( DIR_TESTDATA . '/languages/plugins/internationalized-plugin-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json' ),
|
||||
),
|
||||
$this->wp_scripts_print_translations_output
|
||||
);
|
||||
$expected .= "<script type='text/javascript' src='/wp-content/plugins/my-plugin/js/script.js'></script>\n";
|
||||
|
||||
$this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) );
|
||||
@ -817,11 +844,18 @@ class Tests_Dependencies_Scripts extends WP_UnitTestCase {
|
||||
wp_enqueue_script( 'theme-example', '/wp-content/themes/my-theme/js/script.js', array(), null );
|
||||
wp_set_script_translations( 'theme-example', 'internationalized-theme', DIR_TESTDATA . '/languages/themes' );
|
||||
|
||||
$expected = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
|
||||
$expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
|
||||
'translations.locale_data.messages[""].domain = "internationalized-theme";' .
|
||||
'wp.i18n.setLocaleData( translations.locale_data.messages, "internationalized-theme" );' .
|
||||
'})(' . file_get_contents( DIR_TESTDATA . '/languages/themes/internationalized-theme-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json' ) . ");\n</script>\n";
|
||||
$expected = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>\n";
|
||||
$expected .= str_replace(
|
||||
array(
|
||||
'__DOMAIN__',
|
||||
'__JSON_TRANSLATIONS__',
|
||||
),
|
||||
array(
|
||||
'internationalized-theme',
|
||||
file_get_contents( DIR_TESTDATA . '/languages/themes/internationalized-theme-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json' ),
|
||||
),
|
||||
$this->wp_scripts_print_translations_output
|
||||
);
|
||||
$expected .= "<script type='text/javascript' src='/wp-content/themes/my-theme/js/script.js'></script>\n";
|
||||
|
||||
$this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) );
|
||||
@ -835,11 +869,18 @@ class Tests_Dependencies_Scripts extends WP_UnitTestCase {
|
||||
wp_enqueue_script( 'script-handle', '/wp-admin/js/script.js', array(), null );
|
||||
wp_set_script_translations( 'script-handle', 'admin', DIR_TESTDATA . '/languages/' );
|
||||
|
||||
$expected = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
|
||||
$expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
|
||||
'translations.locale_data.messages[""].domain = "admin";' .
|
||||
'wp.i18n.setLocaleData( translations.locale_data.messages, "admin" );' .
|
||||
'})(' . file_get_contents( DIR_TESTDATA . '/languages/admin-en_US-script-handle.json' ) . ");\n</script>\n";
|
||||
$expected = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>\n";
|
||||
$expected .= str_replace(
|
||||
array(
|
||||
'__DOMAIN__',
|
||||
'__JSON_TRANSLATIONS__',
|
||||
),
|
||||
array(
|
||||
'admin',
|
||||
file_get_contents( DIR_TESTDATA . '/languages/admin-en_US-script-handle.json' ),
|
||||
),
|
||||
$this->wp_scripts_print_translations_output
|
||||
);
|
||||
$expected .= "<script type='text/javascript' src='/wp-admin/js/script.js'></script>\n";
|
||||
|
||||
$this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) );
|
||||
@ -868,11 +909,18 @@ class Tests_Dependencies_Scripts extends WP_UnitTestCase {
|
||||
wp_enqueue_script( 'test-example', '/wp-admin/js/script.js', array(), null );
|
||||
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'>\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-includes/js/dist/wp-i18n.js'></script>\n";
|
||||
$expected .= str_replace(
|
||||
array(
|
||||
'__DOMAIN__',
|
||||
'__JSON_TRANSLATIONS__',
|
||||
),
|
||||
array(
|
||||
'admin',
|
||||
'{ "locale_data": { "messages": { "": {} } } }',
|
||||
),
|
||||
$this->wp_scripts_print_translations_output
|
||||
);
|
||||
$expected .= "<script type='text/javascript' src='/wp-admin/js/script.js'></script>\n";
|
||||
|
||||
$this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) );
|
||||
@ -888,11 +936,18 @@ class Tests_Dependencies_Scripts extends WP_UnitTestCase {
|
||||
|
||||
wp_enqueue_script( 'test-example' );
|
||||
|
||||
$expected = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
|
||||
$expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
|
||||
'translations.locale_data.messages[""].domain = "default";' .
|
||||
'wp.i18n.setLocaleData( translations.locale_data.messages, "default" );' .
|
||||
'})(' . file_get_contents( DIR_TESTDATA . '/languages/en_US-813e104eb47e13dd4cc5af844c618754.json' ) . ");\n</script>\n";
|
||||
$expected = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>\n";
|
||||
$expected .= str_replace(
|
||||
array(
|
||||
'__DOMAIN__',
|
||||
'__JSON_TRANSLATIONS__',
|
||||
),
|
||||
array(
|
||||
'default',
|
||||
file_get_contents( DIR_TESTDATA . '/languages/en_US-813e104eb47e13dd4cc5af844c618754.json' ),
|
||||
),
|
||||
$this->wp_scripts_print_translations_output
|
||||
);
|
||||
$expected .= "<script type='text/javascript' src='/wp-includes/js/script.js'></script>\n";
|
||||
|
||||
$this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) );
|
||||
@ -908,11 +963,18 @@ class Tests_Dependencies_Scripts extends WP_UnitTestCase {
|
||||
|
||||
wp_enqueue_script( 'test-example', '/wp-includes/js/script2.js', array( 'test-dependency' ), null );
|
||||
|
||||
$expected = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
|
||||
$expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
|
||||
'translations.locale_data.messages[""].domain = "default";' .
|
||||
'wp.i18n.setLocaleData( translations.locale_data.messages, "default" );' .
|
||||
'})(' . file_get_contents( DIR_TESTDATA . '/languages/en_US-813e104eb47e13dd4cc5af844c618754.json' ) . ");\n</script>\n";
|
||||
$expected = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>\n";
|
||||
$expected .= str_replace(
|
||||
array(
|
||||
'__DOMAIN__',
|
||||
'__JSON_TRANSLATIONS__',
|
||||
),
|
||||
array(
|
||||
'default',
|
||||
file_get_contents( DIR_TESTDATA . '/languages/en_US-813e104eb47e13dd4cc5af844c618754.json' ),
|
||||
),
|
||||
$this->wp_scripts_print_translations_output
|
||||
);
|
||||
$expected .= "<script type='text/javascript' src='/wp-includes/js/script.js'></script>\n";
|
||||
$expected .= "<script type='text/javascript' src='/wp-includes/js/script2.js'></script>\n";
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user