Make WordPress Core

Changeset 44403 for trunk


Ignore:
Timestamp:
01/06/2019 04:22:46 PM (8 years ago)
Author:
ocean90
Message:

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.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class.wp-scripts.php

    r44395 r44403  
    547547                }
    548548
    549                 $output = '(function( translations ){' .
    550                                           'translations.locale_data.messages[""].domain = "' . $domain . '";' .
    551                                           'wp.i18n.setLocaleData( translations.locale_data.messages, "' . $domain . '" );' .
    552                                   '})(' . $json_translations . ');';
     549                $output = <<<JS
     550( function( domain, translations ) {
     551        var localeData = translations.locale_data[ domain ] || translations.locale_data.messages;
     552        localeData[""].domain = domain;
     553        wp.i18n.setLocaleData( localeData, domain );
     554} )( "{$domain}", {$json_translations} );
     555JS;
    553556
    554557                if ( $echo ) {
  • trunk/tests/phpunit/tests/dependencies/scripts.php

    r44239 r44403  
    55 */
    66class Tests_Dependencies_Scripts extends WP_UnitTestCase {
    7         var $old_wp_scripts;
     7        protected $old_wp_scripts;
     8
     9        protected $wp_scripts_print_translations_output;
    810
    911        function setUp() {
     
    1416                $GLOBALS['wp_scripts']                  = new WP_Scripts();
    1517                $GLOBALS['wp_scripts']->default_version = get_bloginfo( 'version' );
     18
     19                $this->wp_scripts_print_translations_output  = <<<JS
     20<script type='text/javascript'>
     21( function( domain, translations ) {
     22        var localeData = translations.locale_data[ domain ] || translations.locale_data.messages;
     23        localeData[""].domain = domain;
     24        wp.i18n.setLocaleData( localeData, domain );
     25} )( "__DOMAIN__", __JSON_TRANSLATIONS__ );
     26</script>
     27JS;
     28                $this->wp_scripts_print_translations_output .= "\n";
    1629        }
    1730
     
    782795                wp_set_script_translations( 'test-example', 'default', DIR_TESTDATA . '/languages' );
    783796
    784                 $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
    785                 $expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
    786                                          'translations.locale_data.messages[""].domain = "default";' .
    787                                          'wp.i18n.setLocaleData( translations.locale_data.messages, "default" );' .
    788                                          '})(' . file_get_contents( DIR_TESTDATA . '/languages/en_US-813e104eb47e13dd4cc5af844c618754.json' ) . ");\n</script>\n";
     797                $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>\n";
     798                $expected .= str_replace(
     799                        array(
     800                                '__DOMAIN__',
     801                                '__JSON_TRANSLATIONS__',
     802                        ),
     803                        array(
     804                                'default',
     805                                file_get_contents( DIR_TESTDATA . '/languages/en_US-813e104eb47e13dd4cc5af844c618754.json' ),
     806                        ),
     807                        $this->wp_scripts_print_translations_output
     808                );
    789809                $expected .= "<script type='text/javascript' src='/wp-includes/js/script.js'></script>\n";
    790810
     
    800820                wp_set_script_translations( 'plugin-example', 'internationalized-plugin', DIR_TESTDATA . '/languages/plugins' );
    801821
    802                 $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
    803                 $expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
    804                                          'translations.locale_data.messages[""].domain = "internationalized-plugin";' .
    805                                          'wp.i18n.setLocaleData( translations.locale_data.messages, "internationalized-plugin" );' .
    806                                          '})(' . file_get_contents( DIR_TESTDATA . '/languages/plugins/internationalized-plugin-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json' ) . ");\n</script>\n";
     822                $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>\n";
     823                $expected .= str_replace(
     824                        array(
     825                                '__DOMAIN__',
     826                                '__JSON_TRANSLATIONS__',
     827                        ),
     828                        array(
     829                                'internationalized-plugin',
     830                                file_get_contents( DIR_TESTDATA . '/languages/plugins/internationalized-plugin-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json' ),
     831                        ),
     832                        $this->wp_scripts_print_translations_output
     833                );
    807834                $expected .= "<script type='text/javascript' src='/wp-content/plugins/my-plugin/js/script.js'></script>\n";
    808835
     
    818845                wp_set_script_translations( 'theme-example', 'internationalized-theme', DIR_TESTDATA . '/languages/themes' );
    819846
    820                 $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
    821                 $expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
    822                                          'translations.locale_data.messages[""].domain = "internationalized-theme";' .
    823                                          'wp.i18n.setLocaleData( translations.locale_data.messages, "internationalized-theme" );' .
    824                                          '})(' . file_get_contents( DIR_TESTDATA . '/languages/themes/internationalized-theme-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json' ) . ");\n</script>\n";
     847                $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>\n";
     848                $expected .= str_replace(
     849                        array(
     850                                '__DOMAIN__',
     851                                '__JSON_TRANSLATIONS__',
     852                        ),
     853                        array(
     854                                'internationalized-theme',
     855                                file_get_contents( DIR_TESTDATA . '/languages/themes/internationalized-theme-en_US-2f86cb96a0233e7cb3b6f03ad573be0b.json' ),
     856                        ),
     857                        $this->wp_scripts_print_translations_output
     858                );
    825859                $expected .= "<script type='text/javascript' src='/wp-content/themes/my-theme/js/script.js'></script>\n";
    826860
     
    836870                wp_set_script_translations( 'script-handle', 'admin', DIR_TESTDATA . '/languages/' );
    837871
    838                 $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
    839                 $expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
    840                                          'translations.locale_data.messages[""].domain = "admin";' .
    841                                          'wp.i18n.setLocaleData( translations.locale_data.messages, "admin" );' .
    842                                          '})(' . file_get_contents( DIR_TESTDATA . '/languages/admin-en_US-script-handle.json' ) . ");\n</script>\n";
     872                $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>\n";
     873                $expected .= str_replace(
     874                        array(
     875                                '__DOMAIN__',
     876                                '__JSON_TRANSLATIONS__',
     877                        ),
     878                        array(
     879                                'admin',
     880                                file_get_contents( DIR_TESTDATA . '/languages/admin-en_US-script-handle.json' ),
     881                        ),
     882                        $this->wp_scripts_print_translations_output
     883                );
    843884                $expected .= "<script type='text/javascript' src='/wp-admin/js/script.js'></script>\n";
    844885
     
    869910                wp_set_script_translations( 'test-example', 'admin', DIR_TESTDATA . '/languages/' );
    870911
    871                 $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
    872                 $expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
    873                                          'translations.locale_data.messages[""].domain = "admin";' .
    874                                          'wp.i18n.setLocaleData( translations.locale_data.messages, "admin" );' .
    875                                          "})({ \"locale_data\": { \"messages\": { \"\": {} } } });\n</script>\n";
     912                $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>\n";
     913                $expected .= str_replace(
     914                        array(
     915                                '__DOMAIN__',
     916                                '__JSON_TRANSLATIONS__',
     917                        ),
     918                        array(
     919                                'admin',
     920                                '{ "locale_data": { "messages": { "": {} } } }',
     921                        ),
     922                        $this->wp_scripts_print_translations_output
     923                );
    876924                $expected .= "<script type='text/javascript' src='/wp-admin/js/script.js'></script>\n";
    877925
     
    889937                wp_enqueue_script( 'test-example' );
    890938
    891                 $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
    892                 $expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
    893                                          'translations.locale_data.messages[""].domain = "default";' .
    894                                          'wp.i18n.setLocaleData( translations.locale_data.messages, "default" );' .
    895                                          '})(' . file_get_contents( DIR_TESTDATA . '/languages/en_US-813e104eb47e13dd4cc5af844c618754.json' ) . ");\n</script>\n";
     939                $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>\n";
     940                $expected .= str_replace(
     941                        array(
     942                                '__DOMAIN__',
     943                                '__JSON_TRANSLATIONS__',
     944                        ),
     945                        array(
     946                                'default',
     947                                file_get_contents( DIR_TESTDATA . '/languages/en_US-813e104eb47e13dd4cc5af844c618754.json' ),
     948                        ),
     949                        $this->wp_scripts_print_translations_output
     950                );
    896951                $expected .= "<script type='text/javascript' src='/wp-includes/js/script.js'></script>\n";
    897952
     
    909964                wp_enqueue_script( 'test-example', '/wp-includes/js/script2.js', array( 'test-dependency' ), null );
    910965
    911                 $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>";
    912                 $expected .= "\n<script type='text/javascript'>\n(function( translations ){" .
    913                                          'translations.locale_data.messages[""].domain = "default";' .
    914                                          'wp.i18n.setLocaleData( translations.locale_data.messages, "default" );' .
    915                                          '})(' . file_get_contents( DIR_TESTDATA . '/languages/en_US-813e104eb47e13dd4cc5af844c618754.json' ) . ");\n</script>\n";
     966                $expected  = "<script type='text/javascript' src='/wp-includes/js/dist/wp-i18n.js'></script>\n";
     967                $expected .= str_replace(
     968                        array(
     969                                '__DOMAIN__',
     970                                '__JSON_TRANSLATIONS__',
     971                        ),
     972                        array(
     973                                'default',
     974                                file_get_contents( DIR_TESTDATA . '/languages/en_US-813e104eb47e13dd4cc5af844c618754.json' ),
     975                        ),
     976                        $this->wp_scripts_print_translations_output
     977                );
    916978                $expected .= "<script type='text/javascript' src='/wp-includes/js/script.js'></script>\n";
    917979                $expected .= "<script type='text/javascript' src='/wp-includes/js/script2.js'></script>\n";
Note: See TracChangeset for help on using the changeset viewer.