Send installed language data to the plugin and theme update-check endpoints.
Introduces wp_get_installed_language_data() and wp_get_pomo_file_data(). see #18200. Built from https://develop.svn.wordpress.org/trunk@25520 git-svn-id: http://core.svn.wordpress.org/trunk@25440 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
980b81f0b1
commit
aede88a822
|
@ -625,3 +625,63 @@ function get_available_languages( $dir = null ) {
|
||||||
|
|
||||||
return $languages;
|
return $languages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get installed language data.
|
||||||
|
*
|
||||||
|
* Looks in the wp-content/languages directory for translations of
|
||||||
|
* plugins or themes.
|
||||||
|
*
|
||||||
|
* @since 3.7.0
|
||||||
|
*
|
||||||
|
* @param string $type What to search for. Accepts 'plugins', 'themes'.
|
||||||
|
* @return array Array of language data.
|
||||||
|
*/
|
||||||
|
function wp_get_installed_language_data( $type ) {
|
||||||
|
if ( $type !== 'themes' && $type !== 'plugins' )
|
||||||
|
return array();
|
||||||
|
|
||||||
|
if ( ! is_dir( WP_LANG_DIR ) || ! is_dir( WP_LANG_DIR . "/$type" ) )
|
||||||
|
return array();
|
||||||
|
|
||||||
|
$files = scandir( WP_LANG_DIR . "/$type" );
|
||||||
|
if ( ! $files )
|
||||||
|
return array();
|
||||||
|
|
||||||
|
$language_data = array();
|
||||||
|
|
||||||
|
foreach ( $files as $file ) {
|
||||||
|
if ( '.' === $file[0] || is_dir( $file ) )
|
||||||
|
continue;
|
||||||
|
if ( substr( $file, -3 ) !== '.po' )
|
||||||
|
continue;
|
||||||
|
if ( ! preg_match( '/(.*)-([A-Za-z_]{2,6}).po/', $file, $match ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
list( , $textdomain, $language ) = $match;
|
||||||
|
$language_data[ $textdomain ][ $language ] = wp_get_pomo_file_data( WP_LANG_DIR . "/$type/$file" );
|
||||||
|
}
|
||||||
|
return $language_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract headers from a PO file.
|
||||||
|
*
|
||||||
|
* @since 3.7.0
|
||||||
|
*
|
||||||
|
* @param string $po_file Path to PO file.
|
||||||
|
* @return array PO file headers.
|
||||||
|
*/
|
||||||
|
function wp_get_pomo_file_data( $po_file ) {
|
||||||
|
$headers = get_file_data( $po_file, array(
|
||||||
|
'POT-Creation-Date' => '"POT-Creation-Date',
|
||||||
|
'PO-Revision-Date' => '"PO-Revision-Date',
|
||||||
|
'Project-Id-Version' => '"Project-Id-Version',
|
||||||
|
'X-Generator' => '"X-Generator',
|
||||||
|
) );
|
||||||
|
foreach ( $headers as &$header ) {
|
||||||
|
// Remove possible contextual '\n' and closing double quote.
|
||||||
|
$header = preg_replace( '~(\\\n)?"$~', '', $header );
|
||||||
|
}
|
||||||
|
return $headers;
|
||||||
|
}
|
||||||
|
|
|
@ -146,6 +146,8 @@ function wp_update_plugins() {
|
||||||
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
||||||
|
|
||||||
$plugins = get_plugins();
|
$plugins = get_plugins();
|
||||||
|
$languages = wp_get_installed_language_data( 'plugins' );
|
||||||
|
|
||||||
$active = get_option( 'active_plugins', array() );
|
$active = get_option( 'active_plugins', array() );
|
||||||
$current = get_site_transient( 'update_plugins' );
|
$current = get_site_transient( 'update_plugins' );
|
||||||
if ( ! is_object($current) )
|
if ( ! is_object($current) )
|
||||||
|
@ -200,7 +202,7 @@ function wp_update_plugins() {
|
||||||
|
|
||||||
$options = array(
|
$options = array(
|
||||||
'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3),
|
'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3),
|
||||||
'body' => array( 'plugins' => json_encode( $to_send ) ),
|
'body' => array( 'plugins' => json_encode( $to_send ), 'languages' => json_encode( $languages ) ),
|
||||||
'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' )
|
'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' )
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -243,6 +245,8 @@ function wp_update_themes() {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$installed_themes = wp_get_themes();
|
$installed_themes = wp_get_themes();
|
||||||
|
$languages = wp_get_installed_language_data( 'themes' );
|
||||||
|
|
||||||
$last_update = get_site_transient( 'update_themes' );
|
$last_update = get_site_transient( 'update_themes' );
|
||||||
if ( ! is_object($last_update) )
|
if ( ! is_object($last_update) )
|
||||||
$last_update = new stdClass;
|
$last_update = new stdClass;
|
||||||
|
@ -310,7 +314,7 @@ function wp_update_themes() {
|
||||||
|
|
||||||
$options = array(
|
$options = array(
|
||||||
'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3),
|
'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3),
|
||||||
'body' => array( 'themes' => json_encode( $request ) ),
|
'body' => array( 'themes' => json_encode( $request ), 'languages' => json_encode( $languages ) ),
|
||||||
'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' )
|
'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' )
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue