Drupal CMS in German – how our solution works¶
An explanation for everyone who is not a developer.
A thank-you first¶
I thank Gábor Hojtsy for his work on Default Content Locale. Without him, this project would not have been possible.
Default Content Locale is a small Drupal module with a big idea: when a website is installed with ready-made sample content – texts, menus, image descriptions – that content should arrive in the website's language, not in English. To do so, the module takes the translations the Drupal community has collected on localize.drupal.org and applies them while the content is being created. Gábor built a bridge between two worlds that knew nothing about each other before: the sample content of site templates and the translation work of the community.
Our module, Default Content Locale Extended, stands on his shoulders. It is a further development (a "fork") of his module, tailored to the site templates of Drupal CMS.
For German installations there is a second, independent project alongside it: the Drupal CMS German Installer. It translates the installation itself and fixes bugs in other projects. Who does what is explained in Dubbed film and cinema. This page is about the module.
What does Default Content Locale Extended do?¶
When you install Drupal CMS, it offers ready-made site templates, for example for:
- non-profits: Haven and CareSphere,
- portfolios: Forma (warm and earthy) and Everbright (black and white),
- a SaaS product: Byte,
- government and councils: Convivial Gov and Local Council,
- schools and universities: Archimedes and Provus Edu,
- health: Healthcare for medical practices and clinics, Pulse as a health and wellness platform,
- events: Summit for conferences with user-submitted sessions, and Convene,
- plus Starter and Blank as plain starting points, and Mercury Demo, which showcases the components of the Mercury theme.
Each template brings pages, articles, menus, forms, images and settings – a complete sample website.
The problem: all of this content is in English. Anyone installing Drupal CMS in German used to get a German administration interface – but a website whose front page, menus, articles and forms were English.
Default Content Locale Extended makes sure that after a German installation the whole template is German:
- the template's pages and articles,
- menus, headings, buttons and image descriptions (important for screen readers),
- pages built with the Canvas page builder, including header and footer,
- contact and newsletter forms,
- labels in the administration (fields, content types, views),
- texts that the design (the "theme") brings along,
- and even page addresses (
/housingbecomes/wohnen) – without breaking old links.
A few texts are hard-coded so deeply into themes that no translation file can reach them. For German installations, the German Installer fixes those.
All 16 free templates above now have complete German translations, several thousand texts in total. The Nuxt Starter (Lupus Decoupled Starter) is translated as well, but on Drupal CMS 2.2 it currently only installs with the fixes from bug reports #13, #40 and #03. Dashi is translated too; it ships its content in English and Spanish, and German is added as the original language while English and Spanish stay. Four texts of its theme stay English (#43). Not included is only the paid template Meridian Charter School; the six templates newly listed in October 2026 are translated too. After every installation a tool automatically checks whether anything English is left.
Why do we need this at all?¶
Because people expect it. In the German-speaking countries this expectation is particularly strong, and it did not start with the internet. It has grown over decades: in the cinema, in front of the television and later at the computer. To understand why a half-English website feels so odd here, it is best to start where this habit began – with the dubbing of films.
Germany is a country that has its world translated¶
If you watch a film with Leonardo DiCaprio in Germany, you hear him speak German – since "Titanic" in 1997 with the voice of Gerrit Schmidt-Foß. This is so normal in Germany that hardly anyone notices it. And yet it is special: in the Netherlands, Denmark, Sweden or Norway films usually run in the original language with subtitles, and in Poland a single voice is sometimes simply spoken over the original sound. In his video on German dubbing culture, journalist Matthias Schwarzer therefore calls Germany the "world champion of dubbing" (German video).
A large market. Around 100 million people speak German in Germany, Austria and Switzerland. For a language area that large, elaborate dubbing pays off; smaller countries long got subtitles only, because anything more did not pay (video, from 8:04).
A long history. When sound film arrived around 1930, foreign films suddenly had to "speak". Many approaches were tried: subtitles, versions in which the same actors played their roles in several languages, complete remakes – and dubbing. German audiences disliked subtitles even then, but the first dubbed versions still sounded wooden. Dubbing got a boost under National Socialism, which used it for propaganda. The video quotes Cologne film scholar Joseph Garncarz, who told Deutschlandfunk about a study from 1950: of 60 countries examined, only three accepted dubbed versions exclusively – Germany, Italy and Spain. That does not make dubbing fascist, Garncarz stresses; countries that hold their own language and culture in particularly high regard simply want to hear foreign works in their own language (video, from 8:59).
Dubbing truly flourished after the Second World War: the Allies had films from the USA, Britain, France and the Soviet Union dubbed into German to convey their values. Audiences received dubbed versions best, and by 1950 they had become the standard everywhere (video, from 12:22). Until the early 1960s, voice actors had plenty of time to prepare for their roles. This set a standard of quality that is still felt today. The Goethe-Institut therefore called Germany a "dubbing nation" ("Synchronnation").
High standards. Today, writers rework the dialogue so that it matches the lip movements, and a 90-minute feature film takes at least five to six days in the studio. In the interview, Schmidt-Foß calls dubbing "barrier-free access to the art of film": subtitles convey only about 60 per cent of the spoken word, and irony or nuance gets lost.
The effects are still visible: many German dubbing voices are better known than the faces of the actors they lend their voices to. And what began in the cinema has carried on: series, computer games, operating systems and apps naturally come in German here. Generations have grown up with this. To them a translated interface is not an achievement but the normal case – and anything else stands out.
The numbers confirm this: in a large EU survey (Eurobarometer 2006) only 19 % of Germans said they preferred subtitles to dubbing – in Sweden, Finland, Denmark or the Netherlands it was over 90 %. Germany is clearly one of the "dubbing countries".
From the cinema to the screen¶
This habit does not stay behind at the box office. People bring it along when they visit a website or install software. And how strongly it shapes their decisions can be measured – and not only in Germany. A global study by CSA Research ("Can't Read, Won't Buy", 2020, 8,709 respondents in 29 countries) found:
- 76 % of people prefer to buy when the information is in their own language,
- 40 % never buy from websites in another language.
For a German council, a medical practice, a school or a club this means: a website whose menu says "About us" and whose button says "Submit" feels like a dubbed film that suddenly switches to the original soundtrack in the middle of a scene – unfinished, at best. At worst, it excludes people who do not speak English and fails accessibility requirements, because screen readers then read out English image descriptions too.
First impressions count¶
Drupal CMS wants to make getting started with Drupal easy – also for people without a technical background. The templates are their first impression. Someone who installs in German and gets a half-English website does not think "the translation is still missing", but: "Why is everything here still in English? I installed the software in German. This can't be a good content management system!" That is exactly the first impression we want to avoid and get right instead: choose German, get German.
How does Default Content Locale Extended actually do it?¶
Think of installing a template like the premiere of a foreign film. For a German audience to see it in German, it takes a script with the translations, a dubbing studio that puts the voices in – in time –, and someone who checks before the premiere that everything is right. The module is built exactly like that.
1. The translations (the "script")¶
For each template there is a translation file (translations/<template>.de.po)
– a list with the German translation next to each English text. We created
these files for every template, sentence by sentence, in the polite form of
address ("Sie").
There is a second, smaller list per template
(translations/content-only/<template>.de.po). It contains texts that must
not go through Drupal's general translation system – more on that under
"sealed film reels" below.
2. The right moment (when the show starts)¶
The module has to be active before the template creates its content – a dubbing studio that turns up after the premiere is no use to anyone. There are two ways to get there:
drush dcle:site-templatesadds variants such as "Haven (localized)" to the Drupal CMS installer, which install the module first and the template second. This works in any language.- The Drupal CMS German Installer does this itself for German installations, together with its other tasks (see Dubbed film and cinema).
3. The module (the "dubbing studio")¶
While the template creates its content, our module briefly looks at every single piece of content – before it is saved:
- Replace instead of duplicate: The original module added a German translation next to the English content. On a German-only website this left an English "ghost version" behind, and content showed up twice. Our module replaces the English texts directly instead – every piece of content exists once, in German.
- Even fields that are "not translatable": Some templates mark their text fields as not translatable. Because we replace rather than add a second language, we can make these fields German too.
- Canvas pages: Pages from the Canvas page builder consist of building blocks (heading, card, quote …). The module goes through these blocks and translates exactly the texts you see – but not technical values such as colours, icon names or links.
- Forms: Contact forms store all their fields in a single technical block of text. The module translates field names, placeholders, options and buttons one by one – the internal keys under which submissions are stored later stay untouched.
- Page addresses: When titles are translated, German addresses are created
(
/wohneninstead of/housing). So that links in the template that point to the English address keep working, the module automatically adds a redirect. - Settings a template changes itself: Some templates adjust the settings of other recipes, for example Educare, which renames the search field to "Search the site". Drupal's translation system only knows the original settings, so the module writes the German text in directly, from the "content-only" list. The same goes for texts a view hands to a building block of the theme, such as Horizon Aid's "Where We Work", and for settings a template ships in place of a module's own, such as Provus EDU's share links ("Print this").
- Images inside text: An image embedded in a text can carry its own alternative text. The module translates it along with the text.
- Alternative texts that look like code: Single lowercase words are usually technical values (icon names) and stay untouched. Alternative texts of images are an exception: Provus EDU names its images "contact" or "news", and those are translated; only file names are not.
- Building blocks for lists: Canvas fingerprints the default label of a block that shows a view, and that label follows the site language. So that a page exported in English still finds its block, the module points it at the block's current version while importing.
The "sealed film reels" (Canvas versions)¶
This is where it gets a little tricky. For each component, Canvas keeps a kind of fingerprint of its basic settings – including sample texts. Every page stores which fingerprint its components belong to. If one of these sample texts were translated (for example "Webform"), the fingerprint would change – and the page could no longer find its component. The result: an error page instead of the front page.
Our module therefore recognises all texts inside such "sealed" settings and deliberately leaves them alone in Drupal's general translation system. Where the same text also appears as visible content on a page, it translates it specifically from the second list ("content-only") – going around the sealed spot.
What must not be translated¶
Not everything that looks like text is text. Icon names ("arrow-right"), file names, addresses, CSS classes, data formats or search conditions would break if translated. The module recognises such technical values with a set of rules and leaves them unchanged.
4. The check (before the "premiere")¶
The module includes a checking tool. After a test installation it
- lists all texts of a template and reports which ones do not have a German translation yet, and
- opens the finished pages – front page, menu items, all articles – and looks for texts that still look English.
Only when both report "0" is a template considered done. This check has pointed us to bugs again and again that are easy to miss with the naked eye.
Which bugs we found – and how they were solved¶
While translating the templates we ran into a whole series of bugs – in Drupal CMS, in Canvas, in the templates and themes, and in our own tools too. The table below summarises them. For every bug that is not ours, there is an English issue report ready to be filed on drupal.org; the last column links it. All reports, including those without a row here, are listed under Bug reports.
The Project column shows where the solution lives: in the module (Default Content Locale Extended, for all languages) or in the installer (Drupal CMS German Installer, German installations only). Why it is split this way is explained in Dubbed film and cinema.
| Where | What happened | How we solved it | Project | drupal.org report |
|---|---|---|---|---|
| Drupal core up to 11.4.7 | The installation broke on the very first page because a new version of the Twig template engine does not fit Drupal. | With an older core, the installer limits Twig to a compatible version. Fixed in Drupal core 11.4.8. | Installer | #01 |
| Drupal core (Locale) | Translations containing underlined text (<u>) were silently dropped on import. |
We translate such texts through the "content-only" list. | Module | #25 |
| Canvas | Translated sample texts changed the "fingerprint" of components – pages showed errors. | Sealed texts are recognised and translated around the translation system. | Module | #02 |
| Canvas | Formatted text and quotes in components were not marked as translatable (Provus testimonials, Morphos cards). | The module recognises such texts itself. | Module | #04, #05 |
| Canvas + Archimedes, Healthcare, Pulse, CareSphere, Convene | These five templates could not be installed at all – not even in English – because they store components in an older format that one Canvas check cannot handle. | The installer fixes the affected spot in Canvas; the module reads the old format too. All five install now. | Module + installer | #03 |
| Drupal CMS installer | Summit was set up in German in the language "undefined"; every page crashed. | The installer ignores "language-less" content when detecting a template's language. | Installer | #06 |
| Drupal CMS installer | Inserted installation steps were discarded because they looked identical. | Every step now carries a unique key. | Installer | #28 |
| Drupal CMS installer + Dashi | Dashi ships its content in English and Spanish. A German installation ran in English, and German content was missing; the importer then even made Spanish the original language. | The installer accepts German as a language of the template when this module translates it; the module adds German as the original language and keeps English and Spanish, with German page addresses. | Module + installer | #42 |
| Dashi (theme) | "Featured recipe", "View recipe", "Recipe" and "Directions" stay English: the theme uses the same words as Canvas uses for its components, which must not be translated. | Reported only. | – | #43 |
| Hourglass (theme of Hourglass Corporate) | About 40 interface texts – "Published", "Share", "Read More", the search, screen reader labels – are hard-coded in English. | The installer makes them translatable; the module ships the German texts. | Module + installer | #44 |
| Hourglass Corporate | A wrong FAQ answer, texts cut off at 255 characters, typos and a sentence copied from another company. | Reported; typos and cut-off sentences corrected in the translation. | Module | #45 |
| Goodwell (theme) | About 20 interface texts – the premium calculator with its " / month" added in JavaScript, the testimonial slider, screen reader labels – are hard-coded in English. | The installer makes them translatable; the module ships the German texts. | Module + installer | #46 |
| Goodwell | A wrong FAQ answer, text of another company, typos, mixed currencies and three images that are missing from the template. | Reported; typos not carried over into the translation. | Module | #47 |
| Varbase Starter | Links to pages that do not exist, blog summaries without a space after the heading, a post that ends mid-sentence. | Reported; summaries and the cut-off sentence corrected in the translation. | Module | #48 |
| Varbase (varbase_performance_base) | Switches the image toolkit to ImageMagick even on hosts without it; every image operation then logs an error. | Reported only. | – | #49 |
| Vartheme BS5 (theme of the Varbase templates, and its copy in The Rightup) | "By", the slider buttons "Previous"/"Next" and two navigation labels are hard-coded in English. | The installer makes them translatable; the module ships the missing German text. | Module + installer | #50 |
| The Rightup | Text copied from Varbase Starter (security modules, a setup FAQ), the same filler sentences in most articles – some of them about another topic –, three spellings of the name and a recipe description of another template. | Reported; translated as it is. | Module | #51 |
| Educare | Paragraphs copied from MIT and Stanford, a news report about smartphone use on a page about another topic, placeholders and typos. The template also renames the search field through a config action, which Drupal's translation system never sees. | Reported; copied texts left untranslated. The module translates values set by config actions. | Module | #52 |
| Horizon Aid | All four FAQ questions show the same answer; the 26 field reports repeat the same paragraphs. | Reported; translated as it is. | Module | #53 |
| Drupal Canvas + Horizon Aid | On a German site the views block on the home page gets a new version, because its default label follows the site language. The import stopped and the front page returned 404. With the web installer the same broke Dashi's header (500 on every page) and the installation of Varbase and The Rightup. | References to block components are pointed at their current version while importing content, before config actions are applied and after each recipe. | Module | #54 |
| Convivial Gov | The template switched the site to English during the import – all content ended up in a language that no longer existed afterwards. | The installer sets German again before the import. | Installer | #15 |
| Haven, Byte and others | Page addresses were hard-coded as English – the front page returned "page not found". | The module sets the language of the addresses to German during the import. | Module | #16 |
| Local Council (+ Klaro cookie banner) | Links in the text pointed to English addresses that no longer existed after translation. One link was already wrong in the original. | Automatic redirects from the old addresses; the wrong link was corrected in the translation. | Module | #17 |
| Forma | The complete article and project texts stayed English because the fields are marked "not translatable". | The module replaces the texts directly. | Module | #18 |
| Summit | The "All the details" button stayed English because a piece of content was exported without a language. | Content without a language is treated as language-neutral and translated directly. | Module | #10 |
| Summit (Smart Menu Links) | Menu items like "News" could not be translated. | The module makes these texts translatable. | Module | #08 |
| Summit (Event Horizon) | Texts of the design (e.g. "Thank you to … sponsor") had no German translation. | A dedicated translation file for the theme. | Module | – |
| Archimedes (Eureka) | The "Emergency contact" notice in the header could not be translated. | The module makes the text translatable and writes the translation straight into the setting. | Module | #12 |
| All templates with forms | Field names, placeholders and buttons of forms stayed English. | New form translator in the module. | Module | #11 |
| Mercury, Haven, Byte, Everbright, Forma | "Follow us on …" on social media links was not translatable and incomplete for screen readers. | The installer fixes the theme template. | Installer | #22, #23, #21 |
| Mercury themes | The notice "Your browser does not support the video tag" was not translatable. | The installer fixes the theme template. | Installer | #24 |
| Mercury Demo | The "page not found" error page showed the wrong page (hard-coded number). | Reported only – happens in English too. | – | #14 |
| Convene | The footer line "Crafted together with the community." stayed English: the theme ignores the inputs of its copyright component and hard-codes the sentence in the template. | The installer makes the sentence translatable. | Installer | #35 |
| Provus Edu | In the installer the template is called "Drush Site-Install" and has no description – a leftover in the recipe. | The installer shows the right name and a German description. | Installer | #36 |
| Drupal CMS installer | The template selection page used the informal "du" in its heading and showed the new descriptions of some templates in English. | The installer consistently uses the formal "Sie" and translates all descriptions. | Installer | – |
| Default Content Locale (original) | Translated taxonomy terms broke the import; content showed up twice. | Fixed in the fork. | Module | #27 |
| Provus Edu, Pulse, Everbright, Forma, Convivial Gov, Summit | Typos, broken special characters, placeholders as image descriptions, dead links. | Reported; quietly corrected in the translations where possible. | Module | #09, #19, #20, #30, #31, #32, #33, #34 |
| Our own checking tool | At first it visited neither article nor form pages – so the Forma texts and the forms went unnoticed for a long time. | The check now opens all content pages; form texts are collected separately. | – | – |
What's next?¶
- The issue reports will be filed with the respective projects on drupal.org. Once a bug is fixed there, our workaround can be removed.
- Default Content Locale Extended is now a project of its own on drupal.org (dcle), and so is the Drupal CMS German Installer (dcgi). The module's approach works for any language: the French translation of Haven is already included.
- Anyone who wants to translate a template into another language only needs the two translation files per template – the checking tool shows exactly which texts are still missing. The guide for translators explains every step, the guide for developers shows how to build templates that translate well.
- Why none of this is built into Drupal CMS yet is explained in Why isn't this built in already?
Sources¶
- Matthias Schwarzer: Warum Deutschland Filme synchronisiert (und andere Länder nicht), YouTube, including an interview with Gerrit Schmidt-Foß (German)
- Goethe-Institut: Wie Deutschland zur Synchronnation wurde (German; archived copy from 12 March 2023, the original page is no longer online)
- Wikipedia: Synchronisation (Film) (German)
- European Commission: Eurobarometer "Europeans and their languages", February 2006
- CSA Research: Consumers Prefer their Own Language and Survey of 8,709 Consumers in 29 Countries