Synopsis
Changing the language of a translatable node with a translatable menu link from a "real" language (e.g. en
) to a "pseudo" language (und
or zxx
) will result in an invalid argument exception: Invalid translation language (und) specified. or Invalid translation language (zxx) specified. respectively.
Note: If you are using the contributed token
module, you will get a similar error in token_node_menu_link_submit()
instead, since that function uses code very similar to _menu_ui_node_save()
.
Steps to reproduce
- Install Drupal 8.4.x-dev (Standard profile) in English language
- Enable Content Translation module
- Add a second language (e.g. German) at Configuration > Regional and language > Language
- Enable content translation with default settings for Content/Basic page and Custom menu link/Custom menu link at Configuration > Regional and language > Content language translation
- Add a new basic page in English:
- Fill in the title field (e.g. "123")
- Check "Provide a menu link"
- Leave everything else at default settings
- Hit "Save and publish"
- Edit your new basic page:
- Set the language to either "- Not specified - " (
und
) or "- Not applicable -" (zxx
) - Change the title of the menu link to "234"
- Leave everything else alone
- Hit Save
Expected result
- Language of basic page is either
und
or zxx
, depending on your choice above - Title of menu link is "234"
- Language of menu link is equal to language of basic page
- Neither basic page nor menu link have any translations
Actual result
White page with error message:
The website encountered an unexpected error. Please try again later.
InvalidArgumentException: Invalid translation language (und) specified. in Drupal\Core\Entity\ContentEntityBase->addTranslation() (line 863 of core/lib/Drupal/Core/Entity/ContentEntityBase.php).
_menu_ui_node_save(Object, Array) (Line: 398)
menu_ui_form_node_form_submit(Array, Object)
call_user_func_array('menu_ui_form_node_form_submit', Array) (Line: 111)
Drupal\Core\Form\FormSubmitter->executeSubmitHandlers(Array, Object) (Line: 51)
Drupal\Core\Form\FormSubmitter->doSubmitForm(Array, Object) (Line: 585)
Drupal\Core\Form\FormBuilder->processForm('node_page_edit_form', Array, Object) (Line: 314)
Drupal\Core\Form\FormBuilder->buildForm('node_page_edit_form', Object) (Line: 74)
Drupal\Core\Controller\FormController->getContentResult(Object, Object)
call_user_func_array(Array, Array) (Line: 123)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 574)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 124)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) (Line: 97)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
call_user_func_array(Object, Array) (Line: 153)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 68)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 57)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 47)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 99)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 78)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 47)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 50)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 656)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)