Commit 6ddd9afe authored by catch's avatar catch

Issue #2625820 by tstoeckler, alexpott, mirom, valthebald, pfrenssen, raman.b,...

Issue #2625820 by tstoeckler, alexpott, mirom, valthebald, pfrenssen, raman.b, Mile23, andypost: install_check_translations() sometimes incorrectly returns NULL instead of array

(cherry picked from commit cb567e62)
parent f8984e8c
......@@ -1397,8 +1397,8 @@ function install_download_translation(&$install_state) {
// Check whether all conditions are met to download. Download the translation
// if possible.
$requirements = install_check_translations($install_state['parameters']['langcode'], $install_state['server_pattern']);
// Render requirements only if any returned.
if ($requirements && $output = install_display_requirements($install_state, $requirements)) {
// Render requirements if any warnings or errors returned.
if ($output = install_display_requirements($install_state, $requirements)) {
return $output;
}
......@@ -1692,11 +1692,12 @@ function install_download_additional_translations_operations(&$install_state) {
$languages = \Drupal::languageManager()->getLanguages();
$operations = [];
foreach ($languages as $langcode => $language) {
// The installer language was already downloaded. Check downloads for the
// other languages if any. Ignore any download errors here, since we
// are in the middle of an install process and there is no way back. We
// will not import what we cannot download.
if ($langcode != 'en' && $langcode != $install_state['parameters']['langcode']) {
// The installer language was already downloaded. Available translations are
// stored in $install_state. Check downloads for the other languages if any.
// Ignore any download errors here, since we are in the middle of an install
// process and there is no way back. We will not import what we cannot
// download.
if (!isset($install_state['translations'][$langcode])) {
$operations[] = ['install_check_translations', [$langcode, $install_state['server_pattern']]];
}
}
......@@ -1887,11 +1888,9 @@ function _install_module_batch($module, $module_name, &$context) {
* @param string $server_pattern
* Server access pattern (to replace language code, version number, etc. in).
*
* @return array|null
* Requirements compliance array. If the translation was downloaded
* successfully then an empty array is returned. Otherwise the requirements
* error with detailed information. NULL if the file already exists for this
* language code.
* @return array
* Requirements compliance array. If the translation cannot be downloaded this
* will contain a requirements error with detailed information.
*/
function install_check_translations($langcode, $server_pattern) {
$requirements = [];
......@@ -1920,11 +1919,6 @@ function install_check_translations($langcode, $server_pattern) {
$translations_directory_exists = TRUE;
}
// The file already exists, no need to attempt to download.
if ($existing_file = glob($translations_directory . '/drupal-*.' . $langcode . '.po')) {
return;
}
$version = \Drupal::VERSION;
// For dev releases, remove the '-dev' part and trust the translation server
// to fall back to the latest stable release for that branch.
......
<?php
namespace Drupal\FunctionalTests\Installer;
/**
* Tests translation files for multiple languages get imported during install.
*
* @group Installer
*/
class InstallerTranslationExistingFileTest extends InstallerTestBase {
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* Overrides the language code in which to install Drupal.
*
* Choose one of the smaller languages on ftp.drupal.org. There is no way to
* avoid using ftp.drupal.org since the code being tested runs extremely early
* in the installer. However, even if the call to ftp.drupal.org fails then
* this test will not fail as it will end up on the requirements page.
*
* @var string
*/
protected $langcode = 'xx-lolspeak';
/**
* {@inheritdoc}
*/
protected function setUpLanguage() {
// Place custom local translations in the translations directory.
mkdir(DRUPAL_ROOT . '/' . $this->siteDirectory . '/files/translations', 0777, TRUE);
$po_contents = <<<ENDPO
msgid ""
msgstr ""
ENDPO;
// Create a misnamed translation file that
// \Drupal\Core\StringTranslation\Translator\FileTranslation::findTranslationFiles()
// will not find.
file_put_contents(DRUPAL_ROOT . '/' . $this->siteDirectory . '/files/translations/drupal-8.0.0-DEV.xx-lolspeak.po', $po_contents);
parent::setUpLanguage();
}
/**
* {@inheritdoc}
*/
protected function setUpProfile() {
}
/**
* {@inheritdoc}
*/
protected function setUpSettings() {
}
/**
* {@inheritdoc}
*/
protected function setUpSite() {
}
/**
* Ensures language selection has not failed.
*/
public function testInstall() {
// At this point we'll be on the profile selection or requirements screen.
$this->assertSession()->statusCodeEquals(200);
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment