<?php

function translations_api($type, $args = null)
{
    require ABSPATH . WPINC . '/version.php';
    if (!in_array($type, array('plugins', 'themes', 'core'), true)) {
        return new WP_Error('invalid_type', __('Invalid translation type.'));
    }
    $res = apply_filters('translations_api', false, $type, $args);
    if (false === $res) {
        $url = 'http://api.wordpress.org/translations/' . $type . '/1.0/';
        $http_url = $url;
        $ssl = wp_http_supports(array('ssl'));
        if ($ssl) {
            $url = set_url_scheme($url, 'https');
        }
        $options = array('timeout' => 3, 'body' => array('wp_version' => $wp_version, 'locale' => get_locale(), 'version' => $args['version']));
        if ('core' !== $type) {
            $options['body']['slug'] = $args['slug'];
        }
        $request = wp_remote_post($url, $options);
        if ($ssl && is_wp_error($request)) {
            trigger_error(sprintf(__('An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="%s">support forums</a>.'), __('https://wordpress.org/support/forums/')) . ' ' . __('(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)'), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE);
            $request = wp_remote_post($http_url, $options);
        }
        if (is_wp_error($request)) {
            $res = new WP_Error('translations_api_failed', sprintf(__('An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="%s">support forums</a>.'), __('https://wordpress.org/support/forums/')), $request->get_error_message());
        } else {
            $res = json_decode(wp_remote_retrieve_body($request), true);
            if (!is_object($res) && !is_array($res)) {
                $res = new WP_Error('translations_api_failed', sprintf(__('An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="%s">support forums</a>.'), __('https://wordpress.org/support/forums/')), wp_remote_retrieve_body($request));
            }
        }
    }
    return apply_filters('translations_api_result', $res, $type, $args);
}
function wp_get_available_translations()
{
    if (!wp_installing()) {
        $translations = get_site_transient('available_translations');
        if (false !== $translations) {
            return $translations;
        }
    }
    require ABSPATH . WPINC . '/version.php';
    $api = translations_api('core', array('version' => $wp_version));
    if (is_wp_error($api) || empty($api['translations'])) {
        return array();
    }
    $translations = array();
    foreach ($api['translations'] as $translation) {
        $translations[$translation['language']] = $translation;
    }
    if (!defined('WP_INSTALLING')) {
        set_site_transient('available_translations', $translations, 3 * HOUR_IN_SECONDS);
    }
    return $translations;
}
function wp_install_language_form($languages)
{
    global $wp_local_package;
    $installed_languages = get_available_languages();
    echo "<label class='screen-reader-text' for='language'>Select a default language</label>\n";
    echo "<select size='14' name='language' id='language'>\n";
    echo '<option value="" lang="en" selected="selected" data-continue="Continue" data-installed="1">English (United States)</option>';
    echo "\n";
    if (!empty($wp_local_package) && isset($languages[$wp_local_package])) {
        if (isset($languages[$wp_local_package])) {
            $language = $languages[$wp_local_package];
            printf('<option value="%s" lang="%s" data-continue="%s"%s>%s</option>' . "\n", esc_attr($language['language']), esc_attr(current($language['iso'])), esc_attr($language['strings']['continue'] ? $language['strings']['continue'] : 'Continue'), in_array($language['language'], $installed_languages, true) ? ' data-installed="1"' : '', esc_html($language['native_name']));
            unset($languages[$wp_local_package]);
        }
    }
    foreach ($languages as $language) {
        printf('<option value="%s" lang="%s" data-continue="%s"%s>%s</option>' . "\n", esc_attr($language['language']), esc_attr(current($language['iso'])), esc_attr($language['strings']['continue'] ? $language['strings']['continue'] : 'Continue'), in_array($language['language'], $installed_languages, true) ? ' data-installed="1"' : '', esc_html($language['native_name']));
    }
    echo "</select>\n";
    echo '<p class="step"><span class="spinner"></span><input id="language-continue" type="submit" class="button button-primary button-large" value="Continue" /></p>';
}
function wp_download_language_pack($download)
{
    if (in_array($download, get_available_languages(), true)) {
        return $download;
    }
    if (!wp_is_file_mod_allowed('download_language_pack')) {
        return false;
    }
    $translations = wp_get_available_translations();
    if (!$translations) {
        return false;
    }
    foreach ($translations as $translation) {
        if ($translation['language'] === $download) {
            $translation_to_load = true;
            break;
        }
    }
    if (empty($translation_to_load)) {
        return false;
    }
    $translation = (object) $translation;
    require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
    $skin = new Automatic_Upgrader_Skin();
    $upgrader = new Language_Pack_Upgrader($skin);
    $translation->type = 'core';
    $result = $upgrader->upgrade($translation, array('clear_update_cache' => false));
    if (!$result || is_wp_error($result)) {
        return false;
    }
    return $translation->language;
}
function wp_can_install_language_pack()
{
    if (!wp_is_file_mod_allowed('can_install_language_pack')) {
        return false;
    }
    require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
    $skin = new Automatic_Upgrader_Skin();
    $upgrader = new Language_Pack_Upgrader($skin);
    $upgrader->init();
    $check = $upgrader->fs_connect(array(WP_CONTENT_DIR, WP_LANG_DIR));
    if (!$check || is_wp_error($check)) {
        return false;
    }
    return true;
}