diff --git a/core/modules/menu/lib/Drupal/menu/MenuFormController.php b/core/modules/menu/lib/Drupal/menu/MenuFormController.php
index 4eeab27..2712290 100644
--- a/core/modules/menu/lib/Drupal/menu/MenuFormController.php
+++ b/core/modules/menu/lib/Drupal/menu/MenuFormController.php
@@ -7,7 +7,9 @@
 
 namespace Drupal\menu;
 
+use Drupal;
 use Drupal\Core\Entity\EntityFormController;
+use Drupal\Core\Language\Language;
 
 /**
  * Base form controller for menu edit forms.
@@ -18,7 +20,6 @@ class MenuFormController extends EntityFormController {
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
   public function form(array $form, array &$form_state) {
-    $form = parent::form($form, $form_state);
     $menu = $this->entity;
     $system_menus = menu_list_system_menus();
     $form_state['menu'] = &$menu;
@@ -63,7 +64,32 @@ public function form(array $form, array &$form_state) {
       $form['links'] = menu_overview_form($form['links'], $form_state);
     }
 
-    return $form;
+    // $form['langcode'] is not wrapped in a check if language module exists
+    // check because the language_select form element works also without the
+    // language module being installed.
+    // http://drupal.org/node/1749954 documents the new element.
+    $form['langcode'] = array(
+      '#type' => 'language_select',
+      '#title' => t('Menu language'),
+      '#languages' => Language::STATE_ALL,
+      '#default_value' => $menu->langcode,
+    );
+    if (Drupal::moduleHandler()->moduleExists('language')) {
+      $form['default_menu_links_language'] = array(
+        '#type' => 'details',
+        '#title' => t('Menu links language'),
+      );
+      $form['default_menu_links_language']['default_language'] = array(
+        '#type' => 'language_configuration',
+        '#entity_information' => array(
+          'entity_type' => 'menu_link',
+          'bundle' => $menu->id(),
+        ),
+        '#default_value' => language_get_default_configuration('menu_link', $menu->id()),
+      );
+    }
+
+    return parent::form($form, $form_state);
   }
 
   /**
@@ -76,6 +102,18 @@ protected function actions(array $form, array &$form_state) {
     $system_menus = menu_list_system_menus();
     $actions['delete']['#access'] = !$menu->isNew() && !isset($system_menus[$menu->id()]);
 
+    // Add the language configuration submit handler. This is needed because the
+    // submit button has custom submit handlers.
+    if (Drupal::moduleHandler()->moduleExists('language')) {
+      array_unshift($actions['submit']['#submit'],'language_configuration_element_submit');
+    }
+    // We cannot leverage the regular submit handler definition because we have
+    // button-specific ones here. Hence we need to explicitly set it for the
+    // submit action, otherwise it would be ignored.
+    if (Drupal::moduleHandler()->moduleExists('translation_entity')) {
+      array_unshift($actions['submit']['#submit'], 'translation_entity_language_configuration_element_submit');
+    }
+
     return $actions;
   }
 
diff --git a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php
index 9aa76d4..ba688bc 100644
--- a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php
+++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php
@@ -54,6 +54,11 @@ public static function createInstance(ContainerInterface $container, $entity_typ
    */
   public function form(array $form, array &$form_state) {
     $menu_link = $this->entity;
+    // This is always loading 'tools' no matter which menu the link is added to.
+    $menu = menu_load($menu_link->bundle());
+    //dpm($menu_link);
+    //dpm($menu);
+
     // Since menu_link_load() no longer returns a translated and access checked
     // item, do it here instead.
     _menu_link_translate($menu_link);
@@ -156,11 +161,13 @@ public function form(array $form, array &$form_state) {
       '#description' => t('Optional. In the menu, the heavier links will sink and the lighter links will be positioned nearer the top.'),
     );
 
+    $language_configuration = module_invoke('language', 'get_default_configuration', 'menu_link', $menu->id());
     $form['langcode'] = array(
       '#type' => 'language_select',
       '#title' => t('Language'),
       '#languages' => Language::STATE_ALL,
       '#default_value' => $menu_link->langcode,
+      '#access' => !is_null($language_configuration['language_show']) && $language_configuration['language_show'],
     );
 
     return parent::form($form, $form_state, $menu_link);
diff --git a/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php b/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php
index 5af23d7..098e4d2 100644
--- a/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php
+++ b/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php
@@ -14,6 +14,7 @@
 use Drupal\Core\Annotation\Translation;
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\Entity;
+use Drupal\Core\Language\Language;
 
 /**
  * Defines the menu link entity class.
@@ -32,6 +33,7 @@
  *   static_cache = FALSE,
  *   base_table = "menu_links",
  *   uri_callback = "menu_link_uri",
+ *   translatable = TRUE,
  *   entity_keys = {
  *     "id" = "mlid",
  *     "label" = "link_title",
@@ -164,6 +166,16 @@ class MenuLink extends Entity implements \ArrayAccess, MenuLinkInterface {
   public $depth;
 
   /**
+   * Default values for the link.
+   *
+   * @var array
+   */
+  protected $values = array(
+    'langcode' => array(Language::LANGCODE_DEFAULT => array(0 => array('value' => Language::LANGCODE_NOT_SPECIFIED))),
+    'weight' => array(Language::LANGCODE_DEFAULT => array(0 => array('value' => 0))),
+  );
+
+  /**
    * A flag to indicate that the user has manually created or edited the link.
    *
    * @var int
