class WCML_Languages_Upgrader {
public function __construct() {
add_action( 'icl_update_active_languages', [ $this, 'download_woocommerce_translations_for_active_languages' ] );
add_filter( 'upgrader_pre_download', [ $this, 'version_update' ], 10, 2 );
add_action( 'admin_notices', [ $this, 'translation_upgrade_notice' ] );
add_action( 'wp_ajax_hide_wcml_translations_message', [ $this, 'hide_wcml_translations_message' ] );
public function download_woocommerce_translations( $lang_code, $wc_version ) {
$locale = $sitepress->get_locale( $lang_code );
if ( $locale !== 'en_US' && $this->has_available_update( $locale, $wc_version ) ) {
$wc_version = $wc_version ? $wc_version : WC_VERSION;
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/plugin.php';
require_once ABSPATH . 'wp-admin/includes/template.php';
$url = 'update-core.php?action=do-translation-upgrade';
$nonce = 'upgrade-translations';
$upgrader = new Language_Pack_Upgrader( new Automatic_Upgrader_Skin( compact( 'url', 'nonce', 'title', 'context' ) ) );
$upgr_object[0] = new stdClass();
$upgr_object[0]->type = 'plugin';
$upgr_object[0]->slug = 'woocommerce';
$upgr_object[0]->language = $locale;
$upgr_object[0]->version = $wc_version;
$upgr_object[0]->updated = date( 'Y-m-d H:i:s' );
$upgr_object[0]->package = $this->get_language_pack_uri( $locale, $wc_version );
$upgr_object[0]->autoupdate = 1;
$ob_level_before = ob_get_level();
$upgrader->bulk_upgrade( $upgr_object );
$ob_level_after = ob_get_level();
if ( $ob_level_after > $ob_level_before ) {
$this->save_translation_version( $locale, false, $wc_version );