diff --git a/app/models/communication/website/with_menus.rb b/app/models/communication/website/with_menus.rb
index 8ed45032fc4cdc2f4c721ab795b723444d17da9e..256f7343ff18133830966dd02c807762e30192a6 100644
--- a/app/models/communication/website/with_menus.rb
+++ b/app/models/communication/website/with_menus.rb
@@ -66,33 +66,34 @@ module Communication::Website::WithMenus
   def initialize_menus
     find_or_create_menu 'primary'
     find_or_create_menu 'social'
-    menu = find_or_create_menu 'legal'
-    fill_legal_menu menu
+    find_or_create_menu('legal') do |menu|
+      # Only executed after menu creation
+      fill_legal_menu(menu)
+    end
+  end
+
+  def find_or_create_menu(identifier)
+    menu = menus.where(identifier: identifier, university: university, language: default_language).first_or_initialize do |menu|
+      menu.title = t("communication.menus.default_title.#{identifier}")
+    end
+    unless menu.persisted?
+      menu.save
+      yield(menu) if block_given?
+    end
+    menu
   end
 
   def fill_legal_menu(menu)
-    return if menu.items.any?
     [
       Communication::Website::Page::LegalTerm,
       Communication::Website::Page::PrivacyPolicy,
       Communication::Website::Page::Accessibility,
       Communication::Website::Page::Sitemap
     ].each do |page_class|
-      page = special_page(page_class)
-      menu.items.where( kind: 'page', 
-                        about: page,
-                        university: university,
-                        website: self)
-                .first_or_create do |item|
+      page = special_page(page_class, language: menu.language)
+      menu.items.where(kind: 'page', about: page, university: university, website: self).first_or_create do |item|
         item.title = page.title
       end
     end
   end
-
-  def find_or_create_menu(identifier)
-    title = Communication::Website::Menu.human_attribute_name(identifier)
-    menus.where(identifier: identifier, university: university).first_or_create do |menu|
-      menu.title = title
-    end
-  end
 end
diff --git a/config/locales/communication/en.yml b/config/locales/communication/en.yml
index 1c6fb718b1c1b80e08dc75920e6c04ba2a5532d9..fd15b9cdb5477b9f980f69406c75c899e5876a11 100644
--- a/config/locales/communication/en.yml
+++ b/config/locales/communication/en.yml
@@ -97,9 +97,6 @@ en:
       communication/website/menu:
         identifier: Identifier
         items: Items
-        legal: Legal
-        primary: Main menu
-        social: Social
         title: Title
       communication/website/menu/item:
         about: Target
@@ -569,6 +566,11 @@ en:
         pending: Import in progress
       last_pages: Last pages
       last_posts: Last posts
+      menus:
+        default_title:
+          legal: Legal
+          primary: Main menu
+          social: Social
       pages:
         defaults:
           accessibility:
diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml
index 2e66b0651c8b0d7c72328421100bbe9b4f893582..2b8feaaae71c88531856cac8a6c34355223216a5 100644
--- a/config/locales/communication/fr.yml
+++ b/config/locales/communication/fr.yml
@@ -97,9 +97,6 @@ fr:
       communication/website/menu:
         identifier: Identifiant
         items: Éléments
-        legal: Informations légales
-        primary: Menu principal
-        social: Liens sociaux
         title: Titre
       communication/website/menu/item:
         about: Cible
@@ -569,6 +566,11 @@ fr:
         pending: Import en cours
       last_pages: Dernières pages
       last_posts: Dernières actualités
+      menus:
+        default_title:
+          legal: Informations légales
+          primary: Menu principal
+          social: Liens sociaux
       pages:
         defaults:
           accessibility: