/** * @param array $package_content_schema Package content schema * @param Log $logger Logger instance * @param string $package_content_path Package content path * * @return array First element is a list of languages to be installed, second element is a list languages failed to install */ public function installLanguages($package_content_schema, Log $logger, $package_content_path) { $failed_to_install = array(); $installed_languages = array_keys(Languages::getAvailable('A', true)); if (empty($package_content_schema['languages'])) { $logger->add('Installing languages using upgraded *.po files'); $po_pack_basepath = $this->config['dir']['lang_packs']; $lang_codes_to_install = $this->getLangCodesToReinstallFromContentSchema($package_content_schema); } else { $logger->add('Installing languages provided by package'); $po_pack_basepath = $package_content_path . 'languages/'; $lang_codes_to_install = (array) $package_content_schema['languages']; } $logger->add(sprintf('Already installed languages: %s', implode(', ', $installed_languages))); $logger->add(sprintf('Languages to be installed: %s', implode(', ', $lang_codes_to_install))); if (in_array(CART_LANGUAGE, $lang_codes_to_install)) { $fallback_lang_code = CART_LANGUAGE; } elseif (in_array('en', $lang_codes_to_install)) { $fallback_lang_code = 'en'; } else { $fallback_lang_code = null; } foreach ($installed_languages as $lang_code) { $logger->lineStart(sprintf('Installing "%s" language... ', $lang_code)); if (in_array($lang_code, $lang_codes_to_install)) { Output::display(__('install') . ': ' . $lang_code, '', false); if (false === Languages::installCrowdinPack($po_pack_basepath . $lang_code, array('install_newly_added' => true, 'validate_lang_code' => $lang_code, 'reinstall' => true))) { $logger->lineEnd('FAILED'); $failed_to_install[] = $lang_code; } else { $logger->lineEnd('OK'); } } elseif ($fallback_lang_code !== null) { if (false === Languages::installCrowdinPack($po_pack_basepath . $fallback_lang_code, array('reinstall' => true, 'force_lang_code' => $lang_code, 'install_newly_added' => true))) { $logger->lineEnd('FAILED'); $failed_to_install[] = $lang_code; } else { $logger->lineEnd('OK'); } } else { $logger->lineEnd('SKIPPED'); } } return array($lang_codes_to_install, $failed_to_install); }