From 220f04c2009b31314181937125d21acaa726857d Mon Sep 17 00:00:00 2001
From: quietone <quietone@2572884.no-reply.drupal.org>
Date: Tue, 30 Jan 2024 12:51:47 +1300
Subject: [PATCH] Issue #3406697 by alexpott, chr.fritsch: Fix notice in
 _install_prepare_import() due to alternate approach to translations

---
 core/includes/install.core.inc                |  5 ++-
 ...lerTranslationNonStandardFilenamesTest.php | 41 +++++++++++++++++++
 2 files changed, 44 insertions(+), 2 deletions(-)
 create mode 100644 core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationNonStandardFilenamesTest.php

diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index 15ec5704b38b..1bea5ddee7e1 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -1792,8 +1792,9 @@ function _install_prepare_import($langcodes, $server_pattern) {
     if (is_object($file)) {
       $filename = $file->filename;
       preg_match('/drupal-([0-9a-z\.-]+)\.' . $langcode . '\.po/', $filename, $matches);
-      // Get the version information.
-      if ($version = $matches[1]) {
+      // Get the version information. Custom translation files may not have a
+      // version number.
+      if (isset($matches[1]) && $version = $matches[1]) {
         $info = _install_get_version_info($version);
         // Picking the first file does not necessarily result in the right file. So
         // we check if at least the major version number is available.
diff --git a/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationNonStandardFilenamesTest.php b/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationNonStandardFilenamesTest.php
new file mode 100644
index 000000000000..f2eb8ef7c219
--- /dev/null
+++ b/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationNonStandardFilenamesTest.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace Drupal\FunctionalTests\Installer;
+
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Tests non-standard named translation files get imported during install.
+ *
+ * @group Installer
+ */
+class InstallerTranslationNonStandardFilenamesTest extends InstallerTranslationMultipleLanguageNonInteractiveTest {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function prepareEnvironment() {
+    BrowserTestBase::prepareEnvironment();
+    // Place custom local translations in the translations directory.
+    mkdir(DRUPAL_ROOT . '/' . $this->siteDirectory . '/files/translations', 0777, TRUE);
+    file_put_contents(DRUPAL_ROOT . '/' . $this->siteDirectory . '/files/translations/drupal.de.po', $this->getPo('de'));
+    file_put_contents(DRUPAL_ROOT . '/' . $this->siteDirectory . '/files/translations/drupal.es.po', $this->getPo('es'));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function prepareSettings() {
+    parent::prepareSettings();
+    $settings['config']['locale.settings']['translation']['default_filename'] = (object) [
+      'value' => '%project.%language.po',
+      'required' => TRUE,
+    ];
+    $settings['config']['locale.settings']['translation']['default_server_pattern'] = (object) [
+      'value' => 'translations://%project.%language.po',
+      'required' => TRUE,
+    ];
+    $this->writeSettings($settings);
+  }
+
+}
-- 
GitLab