Universities and colleges
Admissions, financial aid and international student pages for applicants and families, across dozens of department sites run by different teams.
SiteTran makes a Drupal site multilingual from one block in Block layout. Pages, Views, AJAX filters, menus and forms are translated as they render, so you don't make every content type and field translatable or keep a copy of each node per language.
Driving growth for companies with millions of users
Drupal's own multilingual system is powerful, and it's real work. SiteTran is for teams that need their existing site readable in more languages without budgeting developer time to rebuild the content model.
Admissions, financial aid and international student pages for applicants and families, across dozens of department sites run by different teams.
Service, benefits and public notice pages in the languages your residents speak, with staff or contracted translators reviewing what matters.
Program and donation pages in more languages on a small budget, with volunteer translators invited per language and no agency invoice per word.
One team for every Drupal site, with Shared Resources so a Glossary, Similar Phrases and Translation Rules built for one site can be used by others in the same team.
Site builders can do this from the admin in a few minutes. The steps below are for Drupal 10 and 11 with CKEditor 5. Developers can use a theme template instead.
Sign up free, add your Drupal site's address and pick your languages. Copy your Widget Code from the Dropdown Style page.
On your front-end theme's tab, click Place block next to the region where the dropdown should appear, then + Add content block. Set Text format to Full HTML, click Source and paste.
Uncheck Display title, choose the region and click Save block. Open your site, pick a language, and SiteTran starts discovering your text so you can translate and publish it.
<script>var sitetran = {site_id: your_site_id};</script> <script src="//c.sitetran.com/widget/v3.js"></script> <div id="sitetran_translate_element"></div>
SiteTran gives you your own ready-to-paste code, with your site ID already in it. The div is where the language dropdown is created, so the region you place the block in decides where visitors see it.
Add the three lines to html.html.twig in your custom or sub-theme, never in a core theme, then rebuild caches with drush cr. Put the div in page.html.twig if you want the dropdown inside a region.
{# templates/html.html.twig #} {{ page_bottom }} <script>var sitetran = {site_id: 12345};</script> <script src="//c.sitetran.com/widget/v3.js"></script> <div id="sitetran_translate_element"></div>
Drupal CMS doesn't include a Full HTML text format by default. Create one under Configuration › Content authoring › Text formats and editors, give only administrators access, and set its editor to None so nothing rewrites your code. Or use the template method.
Modules like Asset Injector add JavaScript and CSS files, not HTML. If you load SiteTran that way, you still need the <div id="sitetran_translate_element"> on the page, in a block or template, so the widget knows where to draw the dropdown.
Drupal pages are assembled from blocks, Views and fields, and many parts load after the first paint. SiteTran keeps watching the page, so text that appears later is translated when it appears.
Directories, event listings and search pages are translated, including results that refresh through AJAX when someone changes a filter or clicks the next page. Filter labels and options switch too.
When BigPipe swaps a placeholder for its real content after the page loads, SiteTran sees the new text and translates it. The same goes for accordions, tabs, modals and Drupal status messages.
Labels, help text, placeholders, buttons and error messages on your forms are translated. Whatever a visitor types is submitted exactly as typed, so your submissions and handlers don't change.
Menu links, taxonomy terms, Layout Builder sections, Paragraphs and Canvas components are translated wherever they render. Nothing is written back to Drupal, so you don't need translatable fields or config translation.
Drupal keeps serving one cached copy of each page, and translations are applied in the visitor's browser. You don't add language cache contexts, extra Varnish variants or CDN rules.
The block lives on your front-end theme only, so the admin theme isn't affected. Editors keep working in one language, and when they publish a change, the new text shows up in SiteTran ready to translate.
Drupal core ships four multilingual modules: Language, Interface Translation, Content Translation and Configuration Translation. Here's what a typical setup involves, next to what SiteTran needs.
Each translated node, block, menu link and term is stored in Drupal and edited separately.
admin/config/regional/content-language, tick each entity type and bundle, then decide field by field what's translatable.|t or t() before it can be translated.Translations live in SiteTran and are applied to the page as it renders.
SiteTran translates what your pages show, from node content to text hard-coded in templates, and you decide exactly what stays as written.
Whether Drupal rendered it on the server or JavaScript added it later, SiteTran translates it.
Mark anything that should never change, and SiteTran leaves it alone.
notranslate class.sitetran.ignore_selectors, or replaced with variables so it's never stored as a phrase.There are three realistic approaches: Drupal core multilingual (often with TMGMT), a translation service that plugs in through a module or script, or SiteTran.
| Drupal core multilingualPlus TMGMT for machine or agency translation | Translation servicesWeglot, GTranslate, ConveyThis, Localize | SiteTranOne block or template | |
|---|---|---|---|
| How it works | Translations are stored in Drupal as separate versions of each node, block, menu link, term and configuration item. | A module or JavaScript snippet sends your rendered pages to the service, which translates them in its cloud. | SiteTran translates your pages as they render, from translations your team controls. |
| Setup | Four core modules, language detection, translatable entity types and fields, config translation and template strings. Usually developer time. | A module or snippet in minutes. Language URLs need DNS records or a proxy, often on higher plans. | One content block with Full HTML, or a theme template. No module. |
| New and edited content | Each translation is updated separately when the original changes. | Usually detected and translated when the page is visited. | Discovered as it appears. Machine Translation Auto Translate can translate it right away. |
| Machine translation | Not included in core. TMGMT plugins connect DeepL, Google or Microsoft with your own API key. | Included, within a word allowance per plan. | DeepL, Google Translate and OpenAI. 7K machine translations on the Free plan. |
| Languages | No limit, but every language adds content to maintain. | Often capped by plan. Weglot's paid plans include 1, 3, 5, 10 or 20 languages. | 187+ languages, unlimited on every plan. |
| Language URLs | Path prefixes such as /es/ or a domain per language, handled by Drupal. | Subdirectories or subdomains, typically on paid or higher plans. | Same URL by default, with translated meta tags. Language URLs through the Static Translation API. |
| Review workflow | Drupal roles and permissions, Content Moderation, and TMGMT jobs. | An editor in the service's dashboard. Team features vary by plan. | Translators and reviewers per language, approval and publishing, Glossary and Translation Rules, with unlimited teammates. |
| Cost | Free software. You pay for developer time and translation, by people or a machine translation API. | A subscription based on words, languages or pageviews. GTranslate's free tier is for non-commercial use. | Free, then from $3 per month, based on words and translated pageviews. |
Drupal details are from drupal.org documentation and project pages. Weglot plan limits are from weglot.com/pricing, and GTranslate's are from its drupal.org project page, checked October 20, 2026. Choose core multilingual if each language needs its own content or URLs managed inside Drupal.
Start with machine translation and route the pages that carry risk, such as deadlines, eligibility rules and fees, to a reviewer. You decide what's approved and when it goes live.
Get suggestions for any phrase, or translate new phrases automatically. You choose whether they're approved automatically or reviewed first.
Invite staff, volunteers, an agency or a professional translator for each language, and choose who can approve. Turn on AI Translation Review for a second opinion.
Keep office, program and department names consistent in the Glossary, set Translation Rules that AI translation follows, such as a formal tone, and reuse past work with Similar Phrases.
Choose from three dropdown types, with or without flags, and add your own CSS. Visitors are switched to their browser language automatically.
Public-sector and campus sites are held to accessibility standards in every language. Here's what SiteTran does, and what stays in your hands.
When a visitor switches language, SiteTran updates the page's lang attribute, so screen readers use the right pronunciation. Image alt text, ARIA labels, placeholders and tooltips are translated with the visible text.
SiteTran changes text, not your theme's structure, so headings, landmarks, focus order and the accessibility work you've done in Drupal stay as they are. Use per-language CSS if a long translation needs more room.
Keep a language hidden until a reviewer has checked key pages, keep legal or official notices in their original language with notranslate, and add a short note that explains how your pages are translated.
Here's what's translated as soon as you place the block, and what it takes to give each language its own indexable address.
SiteTran translates more than visible text. When a visitor switches language, the title and meta tags Drupal outputs, including those set with the Metatag module, switch with it.
lang attribute, set to the selected languageBy default, every language uses your existing Drupal URL and the visitor's choice is remembered. For a separate, indexable page per language, SiteTran's Static Translation API returns translated HTML that your edge can serve:
Most Drupal sites already sit behind Varnish, a CDN or a load balancer you control, so routing /es/ paths to cached API responses is realistic. Each page then lists its language URLs in sitetran.static_url_language_code_lookup for hreflang. Don't run Drupal's own language path prefixes on the same paths.
Translate Drupal with SiteTran walks through copying your Widget Code and placing it in a content block in Block layout, step by step.
Most Drupal setup problems come down to the text format, the theme the block was placed in, a cache in front of the site, or a security policy.
<script> tags. If CKEditor keeps changing the code, use a text format whose editor is set to None.div. In SiteTran, the language must be both Active and Live.c.sitetran.com and www.sitetran.com for scripts and connections, and c.sitetran.com for images.notranslate class in your theme, or list those selectors in sitetran.ignore_selectors.Every plan includes unlimited languages and teammates, so adding Somali or Haitian Creole for a new audience never means a bigger plan. Start free and upgrade when your traffic grows.
For small sites and testing
For sites with moderate translation needs
For larger sites or several smaller ones
For large-scale international sites
Can't find your answer? Our team is happy to help with your Drupal setup, including multisite and language URLs.
Email supportnotranslate class or the translate="no" attribute to any element, for example in a Twig template or a Full HTML field, or list selectors in sitetran.ignore_selectors. Use this for names, addresses, legal text you only publish in one language, and other content that should stay as written.Place one block, pick your languages, and let your reviewers approve what goes live. No modules, no content model changes, and no per-language plan fees.