diff --git a/app/assets/images/communication/blocks/templates/gallery.jpg b/app/assets/images/communication/blocks/templates/gallery.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..35fc171d2ff8a59043b087fc82ba86de70de1110
Binary files /dev/null and b/app/assets/images/communication/blocks/templates/gallery.jpg differ
diff --git a/app/controllers/admin/communication/blocks_controller.rb b/app/controllers/admin/communication/blocks_controller.rb
index 3b6bd66e7fe16d3e0185d0010ec1e4c4308ff51f..0b3569d0dac4e90c3fded0f11d1be0c640ab9846 100644
--- a/app/controllers/admin/communication/blocks_controller.rb
+++ b/app/controllers/admin/communication/blocks_controller.rb
@@ -21,6 +21,7 @@ class Admin::Communication::BlocksController < Admin::Communication::Application
 
   def edit
     breadcrumb
+    add_breadcrumb t('edit')
   end
 
   def create
@@ -37,6 +38,7 @@ class Admin::Communication::BlocksController < Admin::Communication::Application
       @block.about.save_and_sync
       redirect_to about_path, notice: t('admin.successfully_updated_html', model: @block.to_s)
     else
+      add_breadcrumb t('edit')
       render :edit, status: :unprocessable_entity
     end
   end
@@ -63,11 +65,10 @@ class Admin::Communication::BlocksController < Admin::Communication::Application
   def breadcrumb
     short_breadcrumb
     add_breadcrumb @block.about, about_path
-    # Le block
     if @block.new_record?
       add_breadcrumb t('communication.block.choose_template')
     else
-      add_breadcrumb @block
+      add_breadcrumb @block, [:admin, @block]
     end
   end
 
diff --git a/app/models/communication/block.rb b/app/models/communication/block.rb
index d5f3de0e051fbd7f7c46e42512771f8ef65ee357..47222ead15c5e5e93062dc0e59b3cac939ad2e31 100644
--- a/app/models/communication/block.rb
+++ b/app/models/communication/block.rb
@@ -29,7 +29,8 @@ class Communication::Block < ApplicationRecord
 
   enum template: {
     organization_chart: 100,
-    partners: 200
+    partners: 200,
+    gallery: 300
   }
 
   def data=(value)
diff --git a/app/models/communication/block/gallery.rb b/app/models/communication/block/gallery.rb
new file mode 100644
index 0000000000000000000000000000000000000000..69cae74f7a0c71548889e4b64cedc1c11bd32ec0
--- /dev/null
+++ b/app/models/communication/block/gallery.rb
@@ -0,0 +1,13 @@
+class Communication::Block::Gallery < Communication::Block::Template
+  def git_dependencies
+    dependencies = []
+    data['elements'].each do |image|
+      id = image.dig('file', 'id')
+      next if id.blank?
+      blob = university.active_storage_blobs.find id
+      next if blob.nil?
+      dependencies += [blob]
+    end
+    dependencies.uniq
+  end
+end
diff --git a/app/views/admin/communication/blocks/edit.html.erb b/app/views/admin/communication/blocks/edit.html.erb
index 56e47eaa93da35e33bc23f0dae26a5449a899d86..1f8af34ec3850f7eaf8371308ffc213d49a15277 100644
--- a/app/views/admin/communication/blocks/edit.html.erb
+++ b/app/views/admin/communication/blocks/edit.html.erb
@@ -3,7 +3,7 @@
 @block.data = {} if @block.data.nil? || @block.data.blank?
 @block.data['elements'] ||= []
 %>
-<div id="app">
+<div id="app" v-cloak>
   <%= simple_form_for [:admin, @block] do |f| %>
     <%= render "admin/communication/blocks/templates/#{@block.template}/edit", f: f %>
     <textarea name="communication_block[data]" rows="20" cols="200" class="d-none">
diff --git a/app/views/admin/communication/blocks/templates/gallery/_edit.html.erb b/app/views/admin/communication/blocks/templates/gallery/_edit.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..6f63b728ec45a9450b852b8768456f5f1f808e3e
--- /dev/null
+++ b/app/views/admin/communication/blocks/templates/gallery/_edit.html.erb
@@ -0,0 +1,57 @@
+
+<div class="mb-3">
+  <label  aria-label="Title"
+          for="title">
+          Title
+  </label>
+  <input  class="form-control form-control-lg"
+          type="text"
+          v-model="data.title"
+          placeholder="Type gallery title here"
+          id="title">
+</div>
+
+<a  class="<%= button_classes('mb-4') %>"
+    v-on:click="data.elements.push({alt: '', file: {}})">
+    Add image
+</a>
+
+<draggable :list="data.elements" handle=".imageHandle" class="row">
+  <div v-for="(image, imageIndex) in data.elements" class="col-xxl-2 col-xl-3 col-6">
+    <div class="card">
+      <div class="card-header border-bottom">
+        <a class="btn ps-0 imageHandle">
+          <i class="fa fa-bars handle"></i>
+        </a>
+        <div class="float-end">
+          <a  class="btn btn-sm btn-danger"
+              v-on:click="data.elements.splice(data.elements.indexOf(image), 1)">
+              <i class="fas fa-times"></i>
+          </a>
+        </div>
+      </div>
+      <img :src="getImageUrl(image.file)" class="img-fluid d-block" v-if="image.file.id" />
+      <div class="card-body">
+        <label  class="form-label"
+                :for="'image-file-' + imageIndex">
+          Image
+        </label>
+        <input  class="form-control mb-2"
+                type="file"
+                accept="image/*"
+                @change="onFileImageChange( $event, image, 'file' )"
+                :id="'image-file-' + imageIndex">
+        <div class="mb-3">
+          <label  aria-label="Title"
+                  :for="'image-alt-' + imageIndex">
+                  Alt
+          </label>
+          <input  class="form-control form-control-lg"
+                  type="text"
+                  v-model="image.alt"
+                  :id="'image-alt-' + imageIndex">
+        </div>
+      </div>
+    </div>
+  </div>
+</draggable>
diff --git a/app/views/admin/communication/blocks/templates/gallery/_show.html.erb b/app/views/admin/communication/blocks/templates/gallery/_show.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..6043b61ce4e72859ee15e7157526e79981e099d5
--- /dev/null
+++ b/app/views/admin/communication/blocks/templates/gallery/_show.html.erb
@@ -0,0 +1,16 @@
+<h2><%= @block.data['title'] %></h2>
+<div class="row">
+<% @block.data['elements'].each do |image| %>
+    <div class="col-xxl-2 col-xl-3 col-6">
+      <article class="card">
+        <% unless image.dig('file', 'id').blank? %>
+          <% blob = ActiveStorage::Blob.find(image.dig('file', 'id')) %>
+          <%= kamifusen_tag blob, width: 500, class: 'img-fluid mb-2' %>
+        <% end %>
+        <div class="card-body">
+          <p class="mb-0"><%= image['alt'] %></p>
+        </div>
+      </article>
+    </div>
+<% end %>
+</div>
diff --git a/app/views/admin/communication/blocks/templates/gallery/_static.html.erb b/app/views/admin/communication/blocks/templates/gallery/_static.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..d9b7f93e2ef7623deb6113f4660aafb50d6c1ea9
--- /dev/null
+++ b/app/views/admin/communication/blocks/templates/gallery/_static.html.erb
@@ -0,0 +1,20 @@
+<% if !block.data.nil? && !block.data.is_a?(String) && block.data.has_key?('elements') %>
+      title: >
+          <%= prepare_text_for_static block.data['title'] %>
+      images:
+<% block.data['elements'].each do |image|
+  file_id = nil
+  if image.has_key?('file')
+    file = image['file']
+    if file.is_a?(Hash) && file.has_key?('id')
+      file_id = file['id']
+    end
+  end
+%>
+        - alt: >
+            <%= prepare_text_for_static image['alt'] %>
+          <% if file_id %>
+          file: "<%= file_id %>"
+          <% end %>
+<% end %>
+<% end %>
diff --git a/app/views/admin/communication/blocks/templates/organization_chart/_static.html.erb b/app/views/admin/communication/blocks/templates/organization_chart/_static.html.erb
index 4829d02c51bf61ae2a95feec95cd37fc7e9b63ff..d9a5b0442b0ac546b2f7c8ca5cd8b0ea2c75ea4e 100644
--- a/app/views/admin/communication/blocks/templates/organization_chart/_static.html.erb
+++ b/app/views/admin/communication/blocks/templates/organization_chart/_static.html.erb
@@ -1,7 +1,7 @@
 <% if !block.data.nil? && !block.data.is_a?(String) && block.data.has_key?('elements') %>
 <% block.data['elements'].each do |element| %>
       - title: >
-          <%= element['title'] %>
+          <%= prepare_text_for_static element['title'] %>
         persons:
 <%
 element['persons'].each do |person|
@@ -9,7 +9,7 @@ element['persons'].each do |person|
 %>
           - slug: "<%= p.slug %>"
             role: >
-              <%= person['role'] %>
+              <%= prepare_text_for_static person['role'] %>
 <% end %>
 <% end %>
 <% end %>
diff --git a/app/views/admin/communication/blocks/templates/partners/_show.html.erb b/app/views/admin/communication/blocks/templates/partners/_show.html.erb
index 86a1cb21a5b221dbb3953748dbd6a6e85b915fe5..22a91333e3f70a264a33e2b9c43ce868d5b6130f 100644
--- a/app/views/admin/communication/blocks/templates/partners/_show.html.erb
+++ b/app/views/admin/communication/blocks/templates/partners/_show.html.erb
@@ -2,14 +2,13 @@
   <h2><%= element['title'] %></h2>
   <div class="row">
     <% element['partners'].each do |partner| %>
-      <div class="col-md-3">
+      <div class="col-md-2">
         <article class="card">
+          <% unless partner.dig('logo', 'id').blank? %>
+            <% blob = ActiveStorage::Blob.find(partner.dig('logo', 'id')) %>
+            <%= kamifusen_tag blob, width: 300, class: 'img-fluid mb-2' %>
+          <% end %>
           <div class="card-body">
-            <% unless partner.dig('logo', 'id').blank? %>
-              <% blob = ActiveStorage::Blob.find(partner.dig('logo', 'id')) %>
-              <%= kamifusen_tag blob, width: 300, class: 'img-fluid mb-2' %>
-            <% end %>
-
             <h3 class="card-title h5"><%= partner['name'] %></h3>
             <p class="mb-0"><%= partner['url'] %></p>
           </div>
diff --git a/app/views/admin/communication/blocks/templates/partners/_static.html.erb b/app/views/admin/communication/blocks/templates/partners/_static.html.erb
index 2aa6816edc1e174a192864550c25889ffaff9842..fd0bf2c78cd1aaab93504ac5c4be06e0af9b6154 100644
--- a/app/views/admin/communication/blocks/templates/partners/_static.html.erb
+++ b/app/views/admin/communication/blocks/templates/partners/_static.html.erb
@@ -13,8 +13,10 @@ element['partners'].each do |partner|
     end
   end
 %>
-          - name: "<%= partner['name'] %>"
-            url: "<%= partner['url'] %>"
+          - name: >
+              <%= prepare_text_for_static partner['name'] %>
+            url: >
+              <%= prepare_text_for_static partner['url'] %>
             <% if logo_id %>
             logo: "<%= logo_id %>"
             <% end %>
diff --git a/config/locales/communication/en.yml b/config/locales/communication/en.yml
index 92b18c1964b5918270673cc679288175bcf5eaf0..086ba6cf799056a11390ecafcacb48521e95bb27 100644
--- a/config/locales/communication/en.yml
+++ b/config/locales/communication/en.yml
@@ -178,6 +178,7 @@ en:
     communication:
       block:
         template:
+          gallery: Gallery
           organization_chart: Organization chart
           partners: Partners
       website:
diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml
index 397faa04acfc3bd5f9dee3493b10fa130580fcfb..e8671cbb3b8ab834656790f5a289c7ee83f44828 100644
--- a/config/locales/communication/fr.yml
+++ b/config/locales/communication/fr.yml
@@ -178,6 +178,7 @@ fr:
     communication:
       block:
         template:
+          gallery: Galerie
           organization_chart: Organigramme
           partners: Partenaires
       website:
diff --git a/docs/communication/blocks.md b/docs/communication/blocks.md
index 2ccecf8a71432ad654a536aa89e97dfeb9d72c42..d7251e6e01f7e53322b87b0e3a1e4b49178d2222 100644
--- a/docs/communication/blocks.md
+++ b/docs/communication/blocks.md
@@ -93,4 +93,5 @@ end
 1. Déclarer le template dans l'enum du modèle block
 2. Créer l'edit, le show et le static dans la vue du template
 3. Créer la classe du template pour gérer les dépendances
-4. Créer la vignette dans les images 
+4. Créer la vignette dans les images
+5. Ecrire les locales fr et en