Skip to content

How it works

The Drupal CMS German Installer is a theme for the Drupal CMS installer with a few scripts. It builds on the official installer theme drupal_cms_installer_theme and only steps in when German is the chosen language.

The parts

File Purpose
installer_de_patch.sh Creates a new Drupal CMS or prepares an existing one, downloads the installer, adds the add-on modules and cleans up after installation.
scripts/theme-fix.php Makes this installer the theme of the Drupal CMS installer.
scripts/i18n-extras-fix.php Inserts the installation steps for the module, the add-on modules and the fixes at the right places in the Drupal CMS installation flow.
recipes/i18n_extras Recipe with the add-on modules, runs right after the chosen template.
js/installer-translations.js Translates texts that are missing or wrong on localize.drupal.org right in the browser, including aria-label, placeholder and title for screen readers.
js/progress-override.js Translates the status messages during installation.
js/langcode.js Remembers the chosen language, even if the installer later switches the langcode parameter to the template's language.
js/vendor-highlight.js, js/submit-transition.js Highlights the vendor name of a template and fades smoothly when moving on.
css/ Dark mode in Drupal navy, typography and animations.
tests/web-installer/ Installs a template through the web installer in German and checks its pages, see Tests.

The installation speaks German

Since Drupal CMS 2.2 the installer itself loads an official German translation from localize.drupal.org. The German Installer only adds what is missing or wrong there:

  • the language dialog ("Install your site in a different language", search field, close button),
  • the template descriptions, "Learn more" and "License key". These texts come from an online list and cannot be translated officially at all. Provus Edu also gets its real name instead of "Drush Site-Install",
  • the final page ("Your site is almost ready"),
  • the status messages of the progress bar ("Installed 20 modules", "Completed 3 of 22"). Drupal only loads the German translations at the very end, and some messages have none at all,
  • corrections to individual official translations, such as "Frei" → "Kostenlos" and the informal heading "Wähle eine Website-Vorlage aus" → "Wählen Sie eine Website-Vorlage aus".

As soon as localize.drupal.org knows one of these texts, the official translation appears and the installer has nothing left to do there.

The template is German

The translations of the templates come from the module Default Content Locale Extended. It only works if it is active before a template creates its content. The Drupal CMS installer has no place for this, so the German Installer inserts a step of its own before every content import that installs the module – and, as soon as Canvas is active, its Canvas submodule too.

installer_de_patch.sh adds the module to the project as drupal/dcle:1.0.x-dev@dev until there is a stable release. Older projects with the original Default Content Locale module are switched to Default Content Locale Extended along the way.

Fixes to other projects' code

Some bugs in other projects make a German installation fail or leave texts in English. They can only be fixed properly in those projects. Until then the installer fixes them from the outside. Every fix looks for one specific spot and does nothing if it is gone, for example because the project has fixed the bug itself.

Where What happened Bug report
Drupal core up to 11.4.7 Twig 3.30 makes the very first installation page crash. Fixed in Drupal core 11.4.8. #01, #3625969
Canvas Archimedes, Healthcare, Pulse, CareSphere and Convene could not be installed at all, not even in English. #03
Drupal CMS installer Summit was set up in the language "undefined"; every page broke. #06
Drupal CMS installer Inserted installation steps were dropped as duplicates. #28
Drupal CMS installer Dashi (content in English and Spanish) was set up in English although German was chosen. Now German counts as a language of the template as soon as Default Content Locale Extended ships a translation; English and Spanish are kept. #42
Convivial Gov The template switched the site to English in the middle of the installation. #15
Mercury and themes derived from it "Follow us on …" on the social media links was not translatable and didn't even name the network for screen readers. Now: "Folgen Sie uns auf Instagram". #22, #23, #21
Mercury themes The notice "Your browser does not support the video tag" was not translatable. #24
Convene The footer line "Crafted together with the community." is hard-coded in the template. #35
Hourglass About 40 texts of the theme – "Published", "Share", "Read More", the search, screen reader labels – were hard-coded in English. #44
Goodwell About 20 texts of the theme – the premium calculator with its " / month" added in JavaScript, the testimonial slider, screen reader labels – were hard-coded in English. #46
Vartheme BS5 (Varbase templates) "By", the slider buttons "Previous"/"Next" and the labels "Toggle navigation" and "User actions" were hard-coded in English. #50
Varbase (Varbase Starter, The Rightup, Educare, Horizon Aid) The templates switch the image toolkit to ImageMagick, even where it is not installed. No image style could be generated, and the pages showed no images in their content. The installer switches back to GD if ImageMagick is missing. #49
Themes of the templates (Vartheme BS5, Haven, Event Horizon, Goodwell, Pulse, Eureka, Provus, Mercury, Byte, Diagnosis) Dates were formatted with Twig's date filter, which knows no translation: "Oct 1, 2026". The installer switches them to Drupal's date formatter with a translatable pattern: "1. Okt 2026". #58
AI SEO (Provus EDU) Line breaks in a prompt made a configuration file of the module unreadable; Provus EDU could not be installed. The installer indents the affected lines after the download, the text stays the same. #55

After each content import, the installer also moves URL aliases that a template ships hard-coded as English to German. Otherwise, for example, Haven's front page returns "page not found".

All bug reports are collected in the module's documentation.

Add-on modules

The recipe recipes/i18n_extras runs right after the chosen template and installs:

  • pb_localizer and Project Browser, with installing modules from the user interface enabled,
  • yoast_seo_i18n,
  • the admin theme Gin with automatic dark mode.

Tests

Installing with Drush is not enough: some errors only appear with the web installer, because it runs the steps in a different order (Dashi showed a 500 on every page only after install.php). The GitLab job web-installer therefore installs every free template the way a person would, one job per template:

  1. installer_de_patch.sh creates Drupal CMS with the tested commit of the installer and the current 1.0.x-dev of Default Content Locale Extended.
  2. PHP gets 512 MB, as recommended in Installation.
  3. Playwright clicks through install.php in German: site name, template card, account.
  4. scripts/check-pages.php of Default Content Locale Extended fetches the front page and all content pages and looks for English text.

A job fails if the template card is missing, the installation does not finish, the front page does not return 200 or a page returns a server error. English text is listed in summary.txt but does not fail the job. The results (summary.txt, screenshots of every step, pages.json, logged errors) are kept as job artifacts for two weeks.

The jobs run in scheduled pipelines and when a pipeline is started with Build → Pipelines → Run pipeline; after a push they wait to be started by hand. The variable TEMPLATES limits a run to some templates, e.g. dashi varbase_starter. Run locally, tests/web-installer/run.sh takes a checkout of Default Content Locale Extended from DCLE_DIR instead of the released version. Nuxt Starter currently fails because of a bug in another project and runs in the job web-installer-known-issues, which may fail.

Technical details

  • Project: dcgi on drupal.org
  • Theme machine name: drupal_cms_installer_de
  • Base theme: drupal_cms_installer_theme
  • License: GPL-2.0-or-later