Drupal multilingual site setup

A multilingual Drupal site is built from core Language, Content Translation, Configuration Translation and Interface Translation modules. This page covers the decisions, build sequence, effort drivers and handover.

On this page

Drupal multilingual site setup starts with the content model, not the language list

If your site must serve several languages, the decisions that are hardest to reverse are which content gets translated and how language appears in URLs. Adding a language to a Drupal site takes minutes. Deciding which entities, fields and menus carry translations, and whether each language lives under a path prefix, a subdomain or a separate domain, shapes every page, editor workflow and search index that follows. Settle those choices on paper before you enable modules or import any content. Drupal core splits multilingual work across four modules, and each one needs its own plan. The Language module stores the languages and the rules that detect which one a visitor sees. Content Translation makes entities such as nodes, taxonomy terms and blocks translatable, with a separate translation per language. Configuration Translation covers site configuration labels such as menu titles, view titles and field labels. Interface Translation handles the strings that come from Drupal core, contributed modules and themes. Enabling all four is easy. Deciding who translates what, and in which module, is the work.

The hard part is usually the content model. Each field on each content type must be marked as translatable or not. A shared image or a reference to a category can stay untranslated, while the title, body and summary need a translation for each language. Get this wrong and editors will either retype data that should be shared or find that a page in one language silently shows content from another. Review every content type, paragraph type and taxonomy vocabulary with the editors who will use them, and record the decision for each field. Menus, block titles and view labels are a separate list, because they depend on Configuration Translation rather than on the content itself. Editorial workflow is the second area that changes the build. If you use Content Moderation, decide whether each language moves through its own review state, whether a translator can publish, and who signs off before a page goes live. Translation requests and updates to the source language also need a rule, because a change to the source text does not automatically flag the other translations as out of date. Confirm with your editors how they will track stale translations, since that process has to be designed rather than assumed. Migrated translations need their own check. If you move content from an older Drupal site or from another system, confirm that translations arrive attached to the correct source entity, with the correct language code, and with their URLs and aliases intact. Test a sample of each content type in every language before cutover. Also confirm, with your own environment and the module documentation for your chosen Drupal version, which translation features your migration path supports, because support varies between source versions and contributed modules. This is an open-source, self-hosted build. Drupal and its core modules are licensed under GPL-2.0-or-later, so there is no license fee for the multilingual functionality itself. The costs that remain are the planning and build effort, the translation work your organization pays for or contracts out, hosting in your own infrastructure, and the ongoing maintenance of the modules and languages you choose. Ask any partner to show the content model, translation scope and workflow as written decisions before the build estimate is finalized.

Which core modules handle which part of translation

Drupal splits multilingual work across four core modules, each responsible for a different kind of text. Knowing which module owns which string tells you where translations are stored, who can edit them and what needs separate setup before editors start work.

Language module for definitions and detection

The Language module defines the languages your site uses and sets how Drupal decides which language to show a visitor, such as URL prefix, domain, session or browser preference. It holds the language list that every other translation module relies on. Check which detection methods you enable, the order Drupal evaluates them in, and whether the language switcher block and URL pattern match your content plan before building anything else.

Content Translation for nodes and entities

Content Translation lets editors create translations of nodes and other content entities, such as taxonomy terms, media or custom entities where the entity type is translatable. Each translation holds its own fields, revisions and publishing state. Confirm which content types and entity types you enable for translation, and decide whether translations of fields like images or dates are shared or entered separately, because that choice drives editorial effort.

Configuration Translation for site labels

Configuration Translation covers labels stored in site configuration, including menu link titles, block titles, view titles and some form labels. These strings are not content entities, so Content Translation does not reach them. Plan an explicit review of menus, blocks and views for each language, since untranslated navigation labels are a common gap on launch. Confirm the behavior of the module against your target Drupal version, as the set of translatable configuration can change between releases.

Interface Translation for theme and module strings

Interface Translation handles strings in code, such as theme templates, module messages and form buttons. Translations are imported from translation files or entered through the user interface, and they apply to the whole site rather than to one piece of content. Check that your theme wraps user-facing text in translatable functions, and confirm which translation sources your target Drupal version supports for importing and updating these strings.

Permissions set per translation module

Each of the four modules provides its own permissions, so a translator who can edit content translations may still be unable to change menu labels or interface strings. Map each editorial role to the specific permissions it needs before you assign roles, and test them with a non-administrator account in every language. Permission names and grouping can differ between Drupal versions, so confirm them against the version you target.

Core workflow without contributed modules

The core workflow for translation runs on these four modules alone, so a standard multilingual site does not need contributed modules to create and publish translations. Contributed modules can add translation management, machine translation or workflow features, and those add dependencies to maintain on every upgrade. Decide early which gaps the core workflow leaves for your editors, then assess each contributed option against your Drupal version and maintenance plan.

Which URL pattern and translation model fit your organization

This table compares the three common ways to expose language versions in Drupal and the two translation models, showing when each fits and what it asks of DNS, certificates, caching, SEO and editors. Read each row as a decision to settle before content entry starts, because changing URL pattern or translation scope later usually means reworking routing, aliases and editorial workflow.

DecisionOption and when it fitsOperational cost to plan for
URL pattern: path prefixFits one domain serving several languages, such as example.org/fr/. Common when one brand and one editorial team cover all markets.One certificate and DNS record. Caches must vary by language path. Alternate language URLs need hreflang tags configured per page.
URL pattern: domain per languageFits separate country or regional brands, or markets with local domain expectations, such as example.fr and example.de.A DNS record and TLS certificate per domain, plus separate analytics and cache rules. Each domain needs its own hreflang mapping and redirect review.
URL pattern: query or negotiated languageFits internal tools or sites where URLs must stay identical across languages. Confirm with your SEO team before choosing, since search engines need distinct crawlable URLs per language.Language is chosen by parameter or browser setting, so shared caches must vary on the parameter or header. Indexing of alternate versions is harder to control.
Translation scope: full-siteFits sites where every page, menu, block and taxonomy term must exist in every language, such as a regulated disclosure site.Highest editorial effort. Every entity needs translation tracking, and workflow tools such as Content Moderation must run per language.
Translation scope: selective by content type or fieldFits sites where only marketing pages or specific fields, such as titles and summaries, need translation while legal or technical content stays in one language.Lower translation volume, but editors must understand which fields translate. Untranslated fields fall back to the default language, so confirm fallback behavior with stakeholders.
Configuration and interface stringsFits every multilingual site, since menus, labels and theme text sit outside content entities. Decide early who owns string translation.Interface translation is maintained in the site, and configuration translation affects deployment. Plan a review step before each release that changes labels.

How Drupal decides which language a visitor sees

Drupal chooses the language for each request by running language negotiation, an ordered list of detection methods set in the site configuration. The usual inputs are the language prefix or domain in the URL, the language saved on a signed-in user's account, the session, the browser's Accept-Language header and the site default language. Drupal checks the enabled methods in the order shown on the language detection settings page and uses the first one that returns a language enabled on the site. Because the order is configuration, a change made in the admin interface can move visitors to a different language without any code change. Confirm which methods your build enables and in what order before launch.

The user preference step matters most for editors and members who sign in. A saved language follows the person across devices, while anonymous visitors depend on the URL, the session or the browser. Browser detection is the least predictable input because it reflects a device setting the site cannot see, and it can select a language the organization would not choose to show first. Decide whether browser detection is needed at all. If it is, decide whether it should only drive the first redirect on the homepage or apply to every page. Write this decision down, since editors and support staff will otherwise assume the answer.

Language fallback covers the case where a translation does not exist for the chosen language. For content, Drupal follows the fallback chain configured for the site, which can end at the default language. How a missing node appears depends on the translation settings for its content type, so a visitor may see the source text in another language or see nothing at all. Interface strings follow a separate path: when no translation exists for a string, the English source text is shown. Ask the content owners which behavior they want for each content type, then test it with a node that has only one translation.

The chosen language changes what the cache stores. Drupal's caches vary rendered output by context, including the interface language, so a page built for one language should not be served to another. Reverse proxies and CDNs sit outside this logic and only know what the cache key contains. If language is chosen from a cookie, the session or the Accept-Language header, the proxy must include that input in its cache key or it may return an English page to a visitor who asked for another language. If language comes only from the URL path, each language already has its own cache entry, but the proxy configuration still needs review. Confirm this behavior with your proxy vendor and your Drupal version.

Test the negotiation order in your own environment after the build and after every change to detection, caching or translation settings. A simple matrix works well: an anonymous visitor with each supported browser language, a signed-in user with a saved preference, each URL prefix or domain, and a node with a missing translation. Record which language each request receives, and repeat the checks through the reverse proxy or CDN, not only directly against the web server. Testing this way shows both the negotiation result and whether the cache returns the correct version, which is the failure most likely to reach visitors unnoticed.

Build sequence for a multilingual Drupal site

This sequence turns a single-language Drupal site into one that publishes, translates and falls back across languages in a predictable way. Each step closes with a check the team can run before moving on, so problems surface while the configuration is still small.

  1. Confirm the language list and default language

    Before enabling any module, the content owner, editorial lead and marketing team agree on the list of languages, the default language and any regional variants that need their own text. The default language should match the language of the source content, because it is the baseline every translation is written against. Record the decision in the project documentation, since changing the default later affects existing content and fallback behavior. Done when the agreed list is signed off in writing and nobody is still debating which languages launch first.

  2. Enable Language and Interface Translation

    A Drupal developer enables the core Language module and the Interface Translation module on a development environment, then adds the agreed languages under the language configuration screens. Confirm the default language and the language detection order at this point, even though URL rules come in the next step. Store the change in configuration so it can be exported and promoted with the rest of the site. Done when the administrative interface and the front end both render in the default language and the new languages appear in the language switcher list.

  3. Decide the URL and domain structure

    The architect chooses how each language is addressed, typically as path prefixes, subdomains or separate domains, and sets the language detection and selection rules to match. This choice affects SEO, hreflang output, cookies, caching and the DNS and certificate work for the hosting team, so it should be settled before content is translated. Ask the platform team to confirm that the load balancer, CDN and any cache layer will vary or pass through the chosen language signal. Done when a test request to each language URL returns the correct language in the page and the response headers, and the hosting team has confirmed the routing.

  4. Enable Content Translation on agreed entity types

    Enable the core Content Translation module and then switch translation on only for the entity types and bundles listed in the content model, such as articles, landing pages and products, leaving internal or technical content untranslated. Each translatable field should be reviewed so that shared values such as images, dates and IDs are not duplicated across languages. A developer creates a test node in the default language, adds a translation and confirms the translation tab, status and URL behave as designed. Done when switching languages on the test node shows the translated title and body, and the non-translatable fields stay identical across versions.

  5. Enable Configuration Translation and translate menus

    Enable Configuration Translation so that labels outside content, including menu items, the site name, slogan and block titles, can be translated without editing code. Translators then update the main menu and footer menu for each language and the site name in its regional form. Confirm that translated menu items are stored as separate configuration rather than overwriting the default labels. Done when switching to a second language changes the main menu labels and the site name in the header, while the default language remains unchanged.

  6. Import or translate interface strings

    Import existing translation files or use the translation interface to translate strings from core, contributed modules and the custom theme. Translators should work from exported string sets so that changes made in the interface can be tracked and reapplied after a Drupal or module update. The team should also agree who owns strings added by custom modules, since developers typically add them during feature work. Done when a list of untranslated strings is reviewed on a key page, such as the login form, search results and the cookie or footer messages, and the expected translations appear in each language.

  7. Set up translator and editor roles

    The site owner creates roles that separate content authors, translators and reviewers, and grants each role only the permissions it needs to create, translate or publish translations. Confirm which roles can change the default language content, which can publish a translation and whether an approval step is required before publication. If Content Moderation is in use, check that the workflow states apply to each translation. A test account in each role should be used to confirm it can perform its tasks and cannot publish or edit beyond its scope. Done when each test account completes its assigned action on the test node and is blocked from the actions reserved for other roles.

  8. Define and test the fallback chain

    The site owner documents what visitors see when a page has no translation in their language, for example falling back to the default language, to a regional parent language, or showing nothing. Configure the language negotiation and content fallback settings to match, then test an untranslated node and an untranslated menu item in a non-default language. Make sure the result is a deliberate choice for each content type, including a clear rule for pages that should be hidden until translated. Done when the untranslated test node shows the expected fallback content or returns the configured not-found response, and the decision is recorded for editors and the QA team.

How to verify a multilingual Drupal site before launch

Verification before launch should test language behavior across every part of the site, and each test should record the language, the user role and the content state involved. Start with language switching on each template type: the front page, content nodes, taxonomy term pages, Views listings, user profiles and any Layout Builder pages. For each one, confirm that the language switcher block lands on the translation of the same entity and that the path alias, page title and browser language all match. Repeat the check for menus, blocks, forms and the site header and footer, since these are often built once in the default language and missed later.

Next, test translated and untranslated content side by side. For every content type, create or select one item with a full translation and one with a partial or missing translation, then confirm that the fallback behavior matches the design your team signed off on, whether that is a fallback language, a notice or a designed not-found response. Check that the 403 and 404 error pages render in the visitor's language. Run search queries in each language and confirm that results link to the correct translation. Trigger account and content moderation emails for users with different preferred languages, and test redirects after a path change in each language.

Cache checks need their own pass. Clear caches, then load the same pages in each language as a logged-out visitor and as a logged-in user with a different role, in both orders. The goal is to catch a page cached in one language or for one role being served to another. If a reverse proxy, CDN or external cache sits in front of Drupal, confirm that it varies on the language and session context Drupal sends. After editing a translation, confirm the change appears for the right language without a manual flush. Use the team's own accessibility and SEO tooling to confirm the language attribute on the html element and the alternate links between translations, and record any gaps as defects.

Role-based testing should cover at least four viewpoints: an anonymous visitor, a translator, an editor and an administrator. Translators should reach only the translation tasks and content they are assigned, and they should not be able to publish. Editors should publish translations within the workflow you designed. Anonymous visitors should never see an unpublished translation, whether they reach it by direct URL, through search, a View, a feed or a related-content block. Build an explicit check for this: create a draft translation in a moderated workflow, then confirm it stays hidden from every anonymous path until it is published. Ask any partner to include this matrix in the written test scope.

What drives effort and cost in a multilingual Drupal build

This table lists the factors that change how much work a multilingual Drupal build takes, why each one matters, and how to keep it under control. Use it to see which decisions to settle before asking for a quote. The main takeaway is that translatable scope, not the number of languages alone, usually determines the effort.

DriverWhy it changes effortHow to reduce it
Number of languagesEach language adds configuration, URL handling, interface strings and a translation pass for every translated item.Launch with the languages needed in the first phase and add the rest in later phases.
Translatable content types and fieldsEvery field marked translatable needs translation storage, editor support and review for each language.Limit translatable fields to text that readers see, and keep codes, dates and internal references untranslated.
Volume of existing contentExisting nodes must be translated, reviewed and checked for missing or outdated versions in each language.Translate the most visited or most required pages first and archive low-value content instead of translating it.
Translation workflowIn-house editors, freelance translators and a translation management system each need different roles, handoffs and tooling.Choose one workflow for all languages and document the review and approval steps before build starts.
Migrated translationsTranslations from a Drupal 7 or other source must be mapped to the new content model, checked for completeness and re-linked to the right nodes.Ask for a translation inventory during the content audit and decide which migrated translations are kept.
Custom entity typesEntities outside core node, taxonomy and menu handling need custom translation support and testing.Confirm early whether a custom entity needs translation at all and keep the entity model simple where it does not.
Menus and configuration stringsMenus, blocks, views labels and site settings often need separate translations through Configuration Translation.Consolidate menus and reuse shared labels so fewer strings need translation.
Number of environmentsTranslation settings, language sync and test content must be deployed and verified in each environment.Keep configuration in version control and deploy the same language setup through the same pipeline to every environment.
URL pattern and domain strategyPath prefixes, subdomains or separate domains change routing, hreflang output and redirect testing.Pick one URL pattern before build and ask for it to be stated in the written scope.

How the starting point changes the multilingual setup

A new build gives the team the most freedom, because no legacy URLs, translations or theme assets need to be carried forward. The main decisions are which languages to enable, how URLs will be structured and which core modules will handle content, configuration and interface translation. Drupal 11 requires PHP 8.3 or later, so the hosting image, PHP version and extension set should be confirmed before any language configuration is built on top of them.

What to settle early:

  • Languages and URL pattern: Decide on language prefixes, country-specific domains or a mix before content types are created, since changing the pattern later affects every indexed page.
  • Translatable content model: Mark which fields, bundles and menus are translatable, and which stay shared across languages, such as images and identifiers.
  • Translation workflow: Choose between human translators working inside Drupal, an external translation service or a hybrid, and define who approves each language.
  • Configuration translation: Block labels, menu names and view titles are configuration, so the Configuration Translation module must be part of the plan.
  • Interface strings: Confirm which theme and module strings need translation and where the translated files will be stored.

If the site will be built from Drupal CMS, the recipe may already enable some of these modules and set defaults. Confirm the translation settings against that recipe before use, and check them again after any recipe update.

Access control and data handling for translated content

Multilingual Drupal sites give more people access to more content, and each language adds its own editorial path. The cards below cover the decisions that keep translators, editors and publishers in their lane, the settings that define which hostnames the site answers to, and the places where translated personal data can leak. General hardening controls are covered in the security hardening topic.

Per-language roles and permissions

Design roles around the language and the step in the workflow, not only around the job title. A translator role should create and edit translations in assigned languages without publish rights, while an editor role should change content only in languages they own. Use the Content Translation permissions and content moderation transitions together, then test each role by logging in as a user in every language to confirm the matrix holds.

Approval gates between languages

Decide who may move a translation from draft to published, and whether a second language owner must review it before release. Without a gate, an editor who is trusted in one language can publish changes in another that they cannot read. Confirm the moderation workflow in a staging copy, including what happens when the source language node is updated after a translation was approved.

Language domains and trusted host patterns

When you use language-specific domains or subdomains, every hostname the site answers to must be listed in the trusted host patterns in settings.php. A permissive or missing pattern lets attackers send requests with forged Host headers, which can poison generated links and password reset emails. Review the patterns with each new language domain, and confirm that the web server rejects unknown hostnames before they reach Drupal.

Translation imports and file handling

Imports of translation files, such as PO files for interface strings or spreadsheets for content, can alter site text and configuration if the source is not controlled. Restrict who can upload and run imports, keep translation files outside the public file directory, and review the diff before applying changes. Treat machine-translation output as untrusted input until a human reviewer has checked it.

Logs that hold translated personal data

Translated content can include names, addresses or health details, and Drupal's watchdog entries, debug output and revision messages may record them. Check which log channels capture entity titles and form submissions, set retention limits that match your data rules, and restrict who can view the reports interface. Ask your team to confirm whether translation-related modules write payloads to the log in your environment.

Secrets for translation integrations

Contributed translation connectors, such as those that call an external translation service or a translation management system, add API keys, service accounts and callback endpoints. Store these credentials outside the database and version-controlled configuration, using environment variables or a secrets manager, and give each integration its own scoped credential. Rotate keys on a schedule and document who can read them.

Keeping translations current after launch

After launch, translations usually go stale through neglect, so monitoring should focus on age and backlog. Track how long each translated node, block and menu item has been out of step with its source, using the change timestamps that Content Translation keeps for each language. Watch the translation queue for jobs that sit unassigned or stall, and review failed jobs in the log of whichever translation management tool your team uses. Agree a threshold for each content type with your editors, such as the number of days a page may stay untranslated before it is flagged. Confirm which report or view will show these items, because the reporting you need often depends on contributed modules and on how your workflow is configured.

Back up the database and the configuration together so that a restore returns a consistent state. Translated content sits in the same entity tables as source content, with separate rows for each language, and interface strings are stored in the locale tables that Interface Translation populates. Configuration Translation stores overrides for translated configuration, so those overrides must be included in your configuration exports. Keep the exports in version control alongside any translation files your team imports or exports. Test a restore on a staging copy and confirm that a page in each language comes back intact. Ask your hosting provider whether database and files backups are taken at the same point in time, and confirm the retention period your editors need for rollback.

Monthly bugfix releases arrive on the first Wednesday of each month, and security releases arrive on the third Wednesday, according to the Drupal core release schedule. Either type of update can change translated interface strings. A core or contributed update may rename, add or remove source strings, which leaves existing translations unmatched, and the affected text then displays in the source language until someone translates it. Read the change notes for each release to see which strings changed, and check how your translation status reports show them. Apply updates to staging first, export configuration before and after, and plan a short translation pass for any module that changed its interface text.

After each upgrade, retest every language on staging before the change reaches production. Build a short checklist that covers the home page, a long form, search results, error pages, the language switcher and a sample of content in each language. Check the URL pattern, the hreflang output and the fallback behavior for each page. Include forms and outgoing emails, because they carry interface strings too. Record the results in a table so that the next release can be compared with the last one. Assign the checklist to a named person and agree in advance who signs off if a language fails.

Keep four documents current and stored with the project repository. The language matrix lists each language, its code, its content owner, its review process and the content types it covers. The URL and domain map records the URL pattern or domain for each language, the default language and the redirects in place. The translator roles document lists who translates, who reviews, who publishes and who may access the translation interface, along with the permissions each role needs. The fallback rules state which language a missing translation falls back to, for each content type and for interface strings, so that editors and support staff can answer questions without reading the configuration. Review all four documents after every major change to languages or modules.

What do teams ask before building a multilingual Drupal site?

What drives the cost of a multilingual Drupal site?

The cost depends on the written scope, so the price follows from what is agreed on paper. The main drivers are the number of languages, how many content types and fields need translation, whether configuration such as menus, blocks and views labels must be translated, the URL pattern and language negotiation rules, and how many translation sources and review steps the workflow includes. Drupal core and the Language, Content Translation, Configuration Translation and Interface Translation modules carry no license fee under GPL-2.0-or-later, so the spend is on people and hosting. Ask for a quote that lists each language, each translated entity type and each approval step separately, so you can compare options fairly.

How long does it take to set up multilingual Drupal?

Duration is set by the same factors as scope: how many languages go live, how much content and configuration must be translated, how complex the approval workflow is, and whether the site is new or migrated. Interface translation and language setup are usually quick compared with translating content models and running a review workflow for every language. Any timeline should appear in the written scope with its assumptions, such as when translations and approvers will be available. Ask the vendor to name the dependencies that could move the schedule, including content readiness and sign-off capacity.

Can our own developers build a multilingual Drupal site without a partner?

Yes, a team with Drupal experience can build a multilingual site in-house, because the core language modules are part of Drupal and need no separate purchase. The harder parts are usually the editorial process, configuration translation across environments, and testing URL patterns, hreflang output and fallback behavior before launch. Assess your team on those points, not only on installing modules. A partner is most useful when the team lacks recent Drupal experience, needs a fixed scope with delivery dates, or must hand over documentation and tests along with the build.

What does the client need to provide for a multilingual Drupal project?

Plan to supply the list of target languages and which ones are the default, the content types and fields that must be translated, and the source of translations, whether that is an internal team, a translation agency or a machine-assisted step with human review. You also need named approvers for each language, because a translation is not publishable until someone accountable signs it off. Provide access to hosting environments, brand and terminology glossaries, and a decision on the URL pattern, such as language prefixes or domains. Missing inputs in these areas are a common cause of delay, so confirm them in the scope.

How are translations migrated from Drupal 7 different from new translations?

Drupal 6 and 7 sites cannot be updated in place to Drupal 10 or later, so translations move through a new site built with the core Migrate, Migrate Drupal and Migrate Drupal UI modules or with Drush. Migrated translations must be mapped to the new language and entity structure, and any content type or field that changed must be reconciled. Themes must be rebuilt because they cannot be migrated, and language switcher and URL behavior must be rechecked. Newly created translations start clean in the new site, while migrated ones need a validation pass against the source data before editors rely on them.

Should we translate configuration as well as content in Drupal?

Yes, if menus, block labels, views titles or site-wide settings must appear in each language. Content Translation covers entities such as nodes and taxonomy terms, while Configuration Translation covers labels stored in configuration, and Interface Translation covers strings in modules and themes. Each one has its own workflow and its own owner, so list them separately in the scope. Teams often underestimate the configuration and interface layer, which can leave untranslated navigation or form labels on an otherwise finished site.

What ongoing work follows a multilingual Drupal launch?

Multilingual sites carry recurring work on top of normal Drupal maintenance. New content has to be translated and reviewed, new strings added by module updates need translation, and language coverage should be checked after each release. Drupal core ships bugfix releases on the first Wednesday of each month and security releases on the third Wednesday, so plan testing of translated pages after updates. Major version upgrades also need translation checks. Ask whether the support arrangement covers these tasks or only the platform itself, and confirm how translation work is priced in ongoing support.

How DeployOpen scopes, builds and hands over multilingual Drupal work

DeployOpen plans and builds multilingual Drupal sites inside the client's own infrastructure, using the core Language, Content Translation, Configuration Translation and Interface Translation modules. Engagements are fixed-scope, with the scope, deliverables and timelines agreed in writing before work starts.

How we scope

  • Confirm the languages, regional variants and URL pattern before any build work begins.
  • Inventory which content types, menus, blocks and configuration need translation and which stay single-language.
  • Agree in writing who translates, who reviews, and how machine translation is used, if at all.

How we build

  • Enable the core language and translation modules and configure language detection and URL prefixes.
  • Set up translatable fields, content moderation states per language and translator access roles.
  • Test language switching, hreflang output, fallback behavior and search indexing on every language.

How we hand over

  • Document the URL structure, translation workflow, and the configuration that is translated versus shared.
  • Deliver an editor guide covering how to create, translate and publish each content type in every language.
  • Walk the internal team through the Configuration Management export so language settings move safely between environments.

How we support

  • Offer ongoing support as a retainer covering updates to language modules and new languages as they are added.
  • Confirm with us how translation changes are reviewed and deployed between staging and production.
  • Ask us to include monitoring of Drupal security advisories that affect the modules used on the multilingual site.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.