Canvas Multilingual Module Addresses Drupal Canvas Translation Failures
A contributed module for Drupal Canvas introduces asymmetric translation support, addressing failures that occur when multilingual configurations are enabled. Developed by David Palmero Jara, the module targets issues observed in production environments where language-prefixed URLs such as /en/, /es/, and /ca/ prevent the Canvas editor from loading correctly and disrupt content integrity.
The work responds to a broader limitation in Drupal Canvas, which does not currently support multilingual sites. When language prefixes are enabled, the editor renders blank screens, CSS assets return 404 errors, and autosave operations overwrite translations. These failures affect both routing behaviour and data persistence, making Canvas unsuitable for multilingual deployments in its current state.
The module identifies specific causes in the Canvas implementation. The CanvasController::__invoke() method relies on getInternalPath(), which removes language context from requests. The React-based editor constructs API calls without language awareness. In addition, AutoSaveManager::getAutoSaveEntity() recreates entities using $storage->create($data), discarding existing translations. The CanvasPageVariant::build() method also enforces a non-empty title, triggering errors for translated content where the title field is unset.
Canvas Multilingual introduces fixes across these layers. It restores language-aware routing, ensures autosave operations preserve sibling translations, and prevents assertion failures in translation contexts. The module also adds a language selector to the editor interface, enabling direct switching between language variants during editing.
The implementation follows an asymmetric translation model. Each language version is treated independently, so editing one translation does not affect others. Additional safeguards include safe deletion of non-default translations, automatic creation of translations when accessing new language contexts, and controlled handling of duplicate translation attempts.
The module consists of 18 files and approximately 2,500 lines of code. It passes PHPCS checks, reaches PHPStan level 9, and includes 13 kernel tests with 196 assertions. Testing was conducted with Canvas 1.3.1 and Drupal 11.3.5, indicating compatibility with current Drupal 11 environments.
Released as 1.0.0-beta1 on 25 March 2026, the project is not covered by Drupal’s security advisory policy. The developer states that the long-term objective is to contribute these fixes to Canvas core through individual merge requests, suggesting that multilingual support may be addressed upstream rather than remaining module-specific.
The announcement provides detailed technical tracing and reproducible issues, supported by implementation changes and test coverage. However, the module remains in beta, and validation is limited to the author’s testing context.

