diff --git a/.github/tests-visual/setup--dark.png b/.github/tests-visual/setup--dark.png
index ef3bc5bcb9..6e7515f245 100644
Binary files a/.github/tests-visual/setup--dark.png and b/.github/tests-visual/setup--dark.png differ
diff --git a/.github/tests-visual/setup.png b/.github/tests-visual/setup.png
index 4a4655922e..ef1d1e0bfb 100644
Binary files a/.github/tests-visual/setup.png and b/.github/tests-visual/setup.png differ
diff --git a/.tools/bin/setup b/.tools/bin/setup
index dde108dff8..858f97a29c 100644
--- a/.tools/bin/setup
+++ b/.tools/bin/setup
@@ -31,6 +31,7 @@ if (rex::isSetup()) {
rex::setConfig('utf8mb4', $utf8mb4);
$config['setup'] = false;
+ $config['lang'] = 'de_de';
if (rex_file::putConfig($configFile, $config)) {
rex_delete_cache();
echo 'instance setup successfull', PHP_EOL;
diff --git a/redaxo/src/core/backend.php b/redaxo/src/core/backend.php
index 0b09af03d3..5dc10ac880 100644
--- a/redaxo/src/core/backend.php
+++ b/redaxo/src/core/backend.php
@@ -62,7 +62,7 @@
// ----------------- SETUP
if (rex::isSetup()) {
// ----------------- SET SETUP LANG
- $requestLang = rex_request('lang', 'string');
+ $requestLang = rex_request('lang', 'string', rex::getProperty('lang'));
if (in_array($requestLang, rex_i18n::getLocales())) {
rex::setProperty('lang', $requestLang);
} else {
diff --git a/redaxo/src/core/default.config.yml b/redaxo/src/core/default.config.yml
index be9b53cff4..686141bde9 100644
--- a/redaxo/src/core/default.config.yml
+++ b/redaxo/src/core/default.config.yml
@@ -45,7 +45,7 @@ password_policy:
# no_reuse_within: P6W
# force_renew_after: P6W
# block_account_after: P3M
-lang: de_de
+lang: en_gb
lang_fallback: [en_gb, de_de]
use_https: false
use_hsts: false
diff --git a/redaxo/src/core/lang/de_de.lang b/redaxo/src/core/lang/de_de.lang
index fe310e12cb..1d2d55f4e6 100644
--- a/redaxo/src/core/lang/de_de.lang
+++ b/redaxo/src/core/lang/de_de.lang
@@ -174,7 +174,8 @@ setup_error2 = Leider konnte die config.yml nicht beschrieben werden. Bitte trag
setup_100 = Setup: Schritt 1 von 6 / Sprache
-setup_101 = bitte wähle eine Sprache
+setup_101 = Sprache wählen
+setup_110 = Weiter zu Schritt 2
setup_199 = 1 / Sprache
setup_200 = Setup: Schritt 2 von 6 / Systemcheck
diff --git a/redaxo/src/core/lang/en_gb.lang b/redaxo/src/core/lang/en_gb.lang
index 141413fe12..7b130dae67 100644
--- a/redaxo/src/core/lang/en_gb.lang
+++ b/redaxo/src/core/lang/en_gb.lang
@@ -174,7 +174,8 @@ setup_error2 = Unfortunately, the configuration file could not be written to. Pl
setup_100 = Setup: step 1 of 6 / Language
-setup_101 = Please select a language
+setup_101 = Select a language
+setup_110 = Continue with step 2
setup_199 = 1 / Language
setup_200 = Setup: step 2 of 6 / System check
diff --git a/redaxo/src/core/lib/console/setup/run.php b/redaxo/src/core/lib/console/setup/run.php
index f895d22489..b2d707b8b5 100644
--- a/redaxo/src/core/lib/console/setup/run.php
+++ b/redaxo/src/core/lib/console/setup/run.php
@@ -74,7 +74,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
ksort($langs);
$config['lang'] = $this->getOptionOrAsk(
- new ChoiceQuestion('Please select a language', $langs),
+ new ChoiceQuestion('Please select a language', $langs, $config['lang'] ?? null),
'lang',
null,
'Language "%s" selected.',
diff --git a/redaxo/src/core/lib/setup/setup.php b/redaxo/src/core/lib/setup/setup.php
index d1171e25ba..ccd6b93b25 100644
--- a/redaxo/src/core/lib/setup/setup.php
+++ b/redaxo/src/core/lib/setup/setup.php
@@ -248,17 +248,24 @@ public static function checkDbSecurity()
*/
public static function isInitialSetup(): bool
{
+ /** @var bool|null $initial */
+ static $initial;
+
+ if (null !== $initial) {
+ return $initial;
+ }
+
try {
$userSql = rex_sql::factory();
$userSql->setQuery('select * from ' . rex::getTable('user') . ' LIMIT 1');
- return 0 == $userSql->getRows();
+ return $initial = 0 == $userSql->getRows();
} catch (rex_sql_could_not_connect_exception $e) {
- return true;
+ return $initial = true;
} catch (rex_sql_exception $e) {
$sql = $e->getSql();
if ($sql && rex_sql::ERRNO_TABLE_OR_VIEW_DOESNT_EXIST === $sql->getErrno()) {
- return true;
+ return $initial = true;
}
throw $e;
}
diff --git a/redaxo/src/core/pages/setup.step1.php b/redaxo/src/core/pages/setup.step1.php
index 463046d376..901ffa0c8e 100644
--- a/redaxo/src/core/pages/setup.step1.php
+++ b/redaxo/src/core/pages/setup.step1.php
@@ -5,10 +5,14 @@
rex_setup::init();
+$initial = rex_setup::isInitialSetup();
+$current = rex_i18n::getLocale();
+
$langs = [];
foreach (rex_i18n::getLocales() as $locale) {
$label = rex_i18n::msgInLocale('lang', $locale);
- $langs[$label] = '' . $label . '';
+ $active = !$initial && $current === $locale ? ' active' : '';
+ $langs[$label] = '' . $label . '';
}
ksort($langs);
echo rex_view::title(rex_i18n::msg('setup_100').$cancelSetupBtn);
@@ -17,4 +21,11 @@
$fragment = new rex_fragment();
$fragment->setVar('heading', rex_i18n::msg('setup_101'), false);
$fragment->setVar('content', $content, false);
+
+if (!$initial) {
+ $buttons = '' . rex_i18n::msg('setup_110') . '';
+
+ $fragment->setVar('buttons', $buttons, false);
+}
+
echo $fragment->parse('core/page/section.php');