I18N: Remove the requirement to call load_plugin_textdomain()
/ load_theme_textdomain()
.
By initially scanning the `wp-content/languages` directory and loading available MO files just-in-time, plugins and themes do not need to manually load text domains anymore. Props swissspidy, ocean90. Fixes #34114 git-svn-id: https://develop.svn.wordpress.org/trunk@37415 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
8dcef2785b
commit
0151b0ebae
Binary file not shown.
@ -0,0 +1,23 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"POT-Creation-Date: 2015-12-31 16:31+0100\n"
|
||||||
|
"PO-Revision-Date: 2016-04-28 18:50+0200\n"
|
||||||
|
"Last-Translator: Pascal Birchler <pascal@required.ch>\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: de_DE\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Poedit 1.8.4\n"
|
||||||
|
"X-Poedit-Basepath: .\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;"
|
||||||
|
"_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;"
|
||||||
|
"esc_html_x:1,2c\n"
|
||||||
|
"X-Textdomain-Support: yes\n"
|
||||||
|
"X-Poedit-SearchPath-0: .\n"
|
||||||
|
|
||||||
|
#: internationalized-plugin.php:11
|
||||||
|
msgid "This is a dummy plugin"
|
||||||
|
msgstr "Das ist ein Dummy Plugin"
|
Binary file not shown.
@ -0,0 +1,23 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"POT-Creation-Date: 2015-12-31 16:38+0100\n"
|
||||||
|
"PO-Revision-Date: 2016-04-28 18:50+0200\n"
|
||||||
|
"Last-Translator: Pascal Birchler <pascal@required.ch>\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: de_DE\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Poedit 1.8.4\n"
|
||||||
|
"X-Poedit-Basepath: .\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Poedit-KeywordsList: __;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;"
|
||||||
|
"_nx_noop:1,2,3c;esc_attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;"
|
||||||
|
"esc_html_x:1,2c\n"
|
||||||
|
"X-Textdomain-Support: yes\n"
|
||||||
|
"X-Poedit-SearchPath-0: .\n"
|
||||||
|
|
||||||
|
#: functions.php:7
|
||||||
|
msgid "This is a dummy theme"
|
||||||
|
msgstr "Das ist ein Dummy Theme"
|
12
tests/phpunit/data/plugins/internationalized-plugin.php
Normal file
12
tests/phpunit/data/plugins/internationalized-plugin.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
Plugin Name: Dummy Plugin
|
||||||
|
Plugin URI: https://wordpress.org/
|
||||||
|
Description: For testing purposes only.
|
||||||
|
Version: 1.0.0
|
||||||
|
Text Domain: internationalized-plugin
|
||||||
|
*/
|
||||||
|
|
||||||
|
function i18n_plugin_test() {
|
||||||
|
return __( 'This is a dummy plugin', 'internationalized-plugin' );
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Dummy theme.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function i18n_theme_test() {
|
||||||
|
return __( 'This is a dummy theme', 'internationalized-theme' );
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Dummy theme.
|
||||||
|
*/
|
@ -0,0 +1,7 @@
|
|||||||
|
/*
|
||||||
|
Theme Name: Internationalized Theme
|
||||||
|
Theme URI: https://wordpress.org/
|
||||||
|
Description: For testing purposes only.
|
||||||
|
Version: 1.0.0
|
||||||
|
Text Domain: internationalized-theme
|
||||||
|
*/
|
88
tests/phpunit/tests/l10n/loadTextdomainJustInTime.php
Normal file
88
tests/phpunit/tests/l10n/loadTextdomainJustInTime.php
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group l10n
|
||||||
|
* @group i18n
|
||||||
|
*/
|
||||||
|
class Tests_L10n_loadTextdomainJustInTime extends WP_UnitTestCase {
|
||||||
|
|
||||||
|
private $orig_theme_dir;
|
||||||
|
private $theme_root;
|
||||||
|
|
||||||
|
function setUp() {
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->theme_root = DIR_TESTDATA . '/themedir1';
|
||||||
|
$this->orig_theme_dir = $GLOBALS['wp_theme_directories'];
|
||||||
|
|
||||||
|
// /themes is necessary as theme.php functions assume /themes is the root if there is only one root.
|
||||||
|
$GLOBALS['wp_theme_directories'] = array( WP_CONTENT_DIR . '/themes', $this->theme_root );
|
||||||
|
add_filter( 'theme_root', array( $this, 'filter_theme_root' ) );
|
||||||
|
add_filter( 'stylesheet_root', array( $this, 'filter_theme_root' ) );
|
||||||
|
add_filter( 'template_root', array( $this, 'filter_theme_root' ) );
|
||||||
|
wp_clean_themes_cache();
|
||||||
|
unset( $GLOBALS['wp_themes'] );
|
||||||
|
}
|
||||||
|
|
||||||
|
function tearDown() {
|
||||||
|
$GLOBALS['wp_theme_directories'] = $this->orig_theme_dir;
|
||||||
|
remove_filter( 'theme_root', array( $this, 'filter_theme_root' ) );
|
||||||
|
remove_filter( 'stylesheet_root', array( $this, 'filter_theme_root' ) );
|
||||||
|
remove_filter( 'template_root', array( $this, 'filter_theme_root' ) );
|
||||||
|
wp_clean_themes_cache();
|
||||||
|
unset( $GLOBALS['wp_themes'] );
|
||||||
|
|
||||||
|
parent::tearDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replace the normal theme root dir with our pre-made test dir.
|
||||||
|
*/
|
||||||
|
public function filter_theme_root() {
|
||||||
|
return $this->theme_root;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function filter_set_locale_to_german() {
|
||||||
|
return 'de_DE';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ticket 34114
|
||||||
|
*/
|
||||||
|
public function test_plugin_translation_should_be_translated_without_calling_load_plugin_textdomain() {
|
||||||
|
add_filter( 'locale', array( $this, 'filter_set_locale_to_german' ) );
|
||||||
|
|
||||||
|
require_once DIR_TESTDATA . '/plugins/internationalized-plugin.php';
|
||||||
|
|
||||||
|
$is_textdomain_loaded_before = is_textdomain_loaded( 'internationalized-plugin' );
|
||||||
|
$expected_output = i18n_plugin_test();
|
||||||
|
$is_textdomain_loaded_after = is_textdomain_loaded( 'internationalized-plugin' );
|
||||||
|
|
||||||
|
remove_filter( 'locale', array( $this, 'filter_set_locale_to_german' ) );
|
||||||
|
|
||||||
|
$this->assertFalse( $is_textdomain_loaded_before );
|
||||||
|
$this->assertSame( 'Das ist ein Dummy Plugin', $expected_output );
|
||||||
|
$this->assertTrue( $is_textdomain_loaded_after );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ticket 34114
|
||||||
|
*/
|
||||||
|
public function test_theme_translation_should_be_translated_without_calling_load_theme_textdomain() {
|
||||||
|
add_filter( 'locale', array( $this, 'filter_set_locale_to_german' ) );
|
||||||
|
|
||||||
|
switch_theme( 'internationalized-theme' );
|
||||||
|
|
||||||
|
include_once get_stylesheet_directory() . '/functions.php';
|
||||||
|
|
||||||
|
$is_textdomain_loaded_before = is_textdomain_loaded( 'internationalized-theme' );
|
||||||
|
$expected_output = i18n_theme_test();
|
||||||
|
$is_textdomain_loaded_after = is_textdomain_loaded( 'internationalized-theme' );
|
||||||
|
|
||||||
|
remove_filter( 'locale', array( $this, 'filter_set_locale_to_german' ) );
|
||||||
|
|
||||||
|
$this->assertFalse( $is_textdomain_loaded_before );
|
||||||
|
$this->assertSame( 'Das ist ein Dummy Theme', $expected_output );
|
||||||
|
$this->assertTrue( $is_textdomain_loaded_after );
|
||||||
|
}
|
||||||
|
}
|
@ -159,6 +159,7 @@ class Tests_Theme_ThemeDir extends WP_UnitTestCase {
|
|||||||
'My Subdir Theme',// theme in a subdirectory should work
|
'My Subdir Theme',// theme in a subdirectory should work
|
||||||
'Page Template Theme', // theme with page templates for other test code
|
'Page Template Theme', // theme with page templates for other test code
|
||||||
'Theme with Spaces in the Directory',
|
'Theme with Spaces in the Directory',
|
||||||
|
'Internationalized Theme',
|
||||||
);
|
);
|
||||||
|
|
||||||
sort($theme_names);
|
sort($theme_names);
|
||||||
|
Loading…
Reference in New Issue
Block a user