Added Translations
authorveltr
Tue, 04 Dec 2012 18:59:07 +0100
changeset 104 1b84c7b2aeee
parent 97 213e81430f7a
child 105 5b753c18e329
Added Translations
integration/edition.html
integration/hashcut.html
integration/home.html
integration/js/common.js
integration/js/compile.bat
integration/js/compile.sh
integration/js/editor.js
integration/js/i18n.js
integration/js/init.js
integration/js/mashupcore.js
integration/js/mediaplayer.js
integration/media.html
src/hashcut/locale/en/LC_MESSAGES/django.mo
src/hashcut/locale/en/LC_MESSAGES/django.po
src/hashcut/locale/en/LC_MESSAGES/djangojs.mo
src/hashcut/locale/en/LC_MESSAGES/djangojs.po
src/hashcut/locale/fr/LC_MESSAGES/django.mo
src/hashcut/locale/fr/LC_MESSAGES/django.po
src/hashcut/locale/fr/LC_MESSAGES/djangojs.mo
src/hashcut/locale/fr/LC_MESSAGES/djangojs.po
src/hashcut/static/hashcut/js/common.js
src/hashcut/static/hashcut/js/hashcut.js
src/hashcut/static/hashcut/js/social.js
src/hashcut/templates/mashup_all_mashups.html
src/hashcut/templates/mashup_content.html
src/hashcut/templates/mashup_edit.html
src/hashcut/templates/mashup_hashcut.html
src/hashcut/templates/mashup_home.html
src/hashcut/templates/mashup_profile.html
src/hashcut/templates/partial/hashcut_social.html
src/hashcut/templates/partial/iri_top_header.html
src/hashcut/templates/partial/mashup_popin_user.html
src/hashcut/urls.py
--- a/integration/edition.html	Tue Dec 04 13:31:01 2012 +0100
+++ b/integration/edition.html	Tue Dec 04 18:59:07 2012 +0100
@@ -346,6 +346,7 @@
         <script type="text/javascript" src="lib/tag-it.js"></script>
         <script type="text/javascript" src="lib/underscore-min.js"></script>
         <script type="text/javascript" src="lib/popcorn-complete.min.js"></script>
+        <script type="text/javascript" src="js/i18n.js"></script>
         <script type="text/javascript" src="js/hashcut.js"></script>
         <script type="text/javascript" src="js/common.js"></script>
         <script type="text/javascript">
--- a/integration/hashcut.html	Tue Dec 04 13:31:01 2012 +0100
+++ b/integration/hashcut.html	Tue Dec 04 18:59:07 2012 +0100
@@ -256,6 +256,7 @@
         <script type="text/javascript" src="lib/underscore-min.js"></script>
         <script type="text/javascript" src="lib/popcorn-complete.min.js"></script>
         <script type="text/javascript" src="lib/ZeroClipboard.js"></script>
+        <script type="text/javascript" src="js/i18n.js"></script>
         <script type="text/javascript" src="js/hashcut.js"></script>
         <script type="text/javascript" src="js/common.js"></script>
         <script type="text/javascript">
--- a/integration/home.html	Tue Dec 04 13:31:01 2012 +0100
+++ b/integration/home.html	Tue Dec 04 18:59:07 2012 +0100
@@ -207,6 +207,7 @@
         <!-- JavaScript -->
         <script type="text/javascript" src="lib/jquery.min.js"></script>
         <script type="text/javascript" src="lib/jquery-ui.min.js"></script>
+        <script type="text/javascript" src="js/i18n.js"></script>
         <script type="text/javascript" src="js/common.js"></script>
         <script>
             
--- a/integration/js/common.js	Tue Dec 04 13:31:01 2012 +0100
+++ b/integration/js/common.js	Tue Dec 04 18:59:07 2012 +0100
@@ -37,17 +37,46 @@
     
     var opts = opts || {};
     opts.sel = opts.sel || $(".Ldt-Social");
-    opts.url = opts.url || document.location.href;
+    opts.url = opts.url || document.location.href
+    opts.text = opts.text || $("title").text();
+    
+    if (!opts.sel.length) {
+        return;
+    }
+    
+    opts.sel.addClass("Ldt-Social");
     
     if (opts.swf) {
         ZeroClipboard.setMoviePath(opts.swf);
     }
     
-    var text = opts.sel.find("title").text(),
-        clipId = "Social-Clip-" + (++uid),
-        clip;
-
-    opts.sel.find(".Ldt-Social-CopyBtn").attr("id", clipId);
+    var clipId = "Social-Clip-" + (++uid),
+        clip,
+        html = '<div class="Ldt-Social-Url-Container"><a href="#" target="_blank" class="Ldt-Social-Square Ldt-Social-Url" title="'
+            + gettext("Share URL")
+            + '"></a><span class="Ldt-Social-UrlPop"><input class="Ldt-Social-Input"/><div class="Ldt-Social-CopyBtn" id="'
+            + clipId
+            + '">'
+            + gettext("Copy")
+            + '</div></span></div><a href="http://www.facebook.com/share.php?'
+            + $.param({ u: opts.url, t: opts.text })
+            + '" target="_blank" class="Ldt-Social-Fb Ldt-Social-Ext" title="'
+            + gettext("Share on Facebook")
+            + '"></a><a href="https://twitter.com/intent/tweet?'
+            + $.param({ url: opts.url, text: opts.text })
+            + '" target="_blank" class="Ldt-Social-Twitter Ldt-Social-Ext" title="'
+            + gettext("Share on Twitter")
+            + '"></a><a href="https://plus.google.com/share?'
+            + $.param({ url: opts.url, title: opts.text })
+            + '" target="_blank" class="Ldt-Social-Gplus Ldt-Social-Ext" title="'
+            + gettext("Share on Google+")
+            + '"></a><a href="mailto:?'
+            + $.param({ subject: opts.text, body: opts.text + ": " + opts.url })
+            + '" target="_blank" class="Ldt-Social-Mail" title="'
+            + gettext("Share via E-Mail")
+            + '"></a></div>';
+            
+    opts.sel.html(html);
 
     opts.sel.find(".Ldt-Social-Url").click(function() {
         var _pop = opts.sel.find(".Ldt-Social-UrlPop");
@@ -81,10 +110,5 @@
             "height=300,width=450,left=100,top=100,toolbar=0,menubar=0,status=0,location=0");
         return false;
     });
-    
-    opts.sel.find(".Ldt-Social-Fb").attr("href", "http://www.facebook.com/share.php?" + $.param({ u: opts.url, t: text }));
-    opts.sel.find(".Ldt-Social-Twitter").attr("href", "https://twitter.com/intent/tweet?" + $.param({ url: opts.url, text: text }));
-    opts.sel.find(".Ldt-Social-Gplus").attr("href", "https://plus.google.com/share?" + $.param({ url: opts.url, title: text }));
-    opts.sel.find(".Ldt-Social-Mail").attr("href", "mailto:?" + $.param({ subject: text, body: text + ": " + opts.url }));
 }
 }());
\ No newline at end of file
--- a/integration/js/compile.bat	Tue Dec 04 13:31:01 2012 +0100
+++ b/integration/js/compile.bat	Tue Dec 04 18:59:07 2012 +0100
@@ -2,7 +2,7 @@
 
 type init.js > hashcut.js
 
-set jsfiles=i18n model ldt-serializer segmentapi-serializer contentapi-serializer mashupcore editor mashupplayer mediaplayer
+set jsfiles=model ldt-serializer segmentapi-serializer contentapi-serializer mashupcore editor mashupplayer mediaplayer
 
 FOR %%f IN (%jsfiles%) DO (type %%f.js >> hashcut.js)
 
--- a/integration/js/compile.sh	Tue Dec 04 13:31:01 2012 +0100
+++ b/integration/js/compile.sh	Tue Dec 04 18:59:07 2012 +0100
@@ -2,7 +2,7 @@
 
 cat init.js > hashcut.js
 
-jsfiles="i18n model ldt-serializer segmentapi-serializer contentapi-serializer mashupcore editor mashupplayer mediaplayer"
+jsfiles="model ldt-serializer segmentapi-serializer contentapi-serializer mashupcore editor mashupplayer mediaplayer"
 
 for jsfile in $jsfiles
 do
--- a/integration/js/editor.js	Tue Dec 04 13:31:01 2012 +0100
+++ b/integration/js/editor.js	Tue Dec 04 18:59:07 2012 +0100
@@ -14,22 +14,22 @@
             '<li class="item-video media" data-media-id="<%= id %>"><div class="media-count-wrap"><span class="media-count"></span></div>'
             + '<img class="thumbnail" src="<%= thumbnail %>" alt="<%= title %>" />'
             + '<div class="video-info"><h3 class="title-video"><%= title %></h3><p class="description"><%= description %></p>'
-            + '<p class="time-length"><%= IriSP.translate("Duration:") %> <span><%= duration.toString() %></span></p></div><div class="media-found-segments"></div></li>'
+            + '<p class="time-length"><%= gettext("Duration:") %> <span><%= duration.toString() %></span></p></div><div class="media-found-segments"></div></li>'
         ),
         segmenttemplate = _.template(
             '<li class="item-video annotation" data-segment-id="<%= annotation.id %>" data-media-id="<%= annotation.getMedia().id %>">'
             + '<img class="thumbnail" src="<%= annotation.thumbnail %>" alt="<%= annotation.getMedia().title %>" />'
             + '<div class="validate <%= annotation.status %>"><div class="validate-tooltip"><ul><li><%= annotation.status_messages.join("</li><li>") %></li></ul></div></div><div class="video-info"><h3 class="title-video"><%= annotation.getMedia().title %></h3>'
             + '<p class="subtitle"><%= annotation.title %></p><p class="duration"><%= annotation.begin.toString() %> - <%= annotation.end.toString() %> (<%= annotation.getDuration().toString() %>)</p>'
-            + '<ul class="tools"><li><a class="edit" href="#" title="<%= IriSP.translate("Edit segment") %>"></a></li><li><a class="bottom" href="#" title="<%= IriSP.translate("Move segment down") %>"></a></li>'
-            + '<li><a class="top" href="#" title="<%= IriSP.translate("Move segment up") %>"></a></li><li><a class="delete" href="#" title="<%= IriSP.translate("Delete segment") %>"></a></li></ul></div></li>'
+            + '<ul class="tools"><li><a class="edit" href="#" title="<%= gettext("Edit segment") %>"></a></li><li><a class="bottom" href="#" title="<%= gettext("Move segment down") %>"></a></li>'
+            + '<li><a class="top" href="#" title="<%= gettext("Move segment up") %>"></a></li><li><a class="delete" href="#" title="<%= gettext("Delete segment") %>"></a></li></ul></div></li>'
         ),
         mediasegmenttemplate = _.template(
             '<div class="media-segment">'
             + '<div class="media-segment-section" style="left:<%= left %>px; width:<%= width %>px; background:<%= color %>; top: <%= top %>px;" data-segment-id="<%= annotation.id %>"></div>'
             + '<div class="popin media-segment-popin" style="left:<%= popleft %>px; top: <%= 5+top %>px;"><div style="left:<%= pointerpos %>px;" class="pointer"></div><div class="popin-content">'
-            + '<h3><%= annotation.title %></h3><a href="#" class="button reprendre-segment" data-segment-id="<%= annotation.id %>"><%= IriSP.translate("Clone segment") %></a>'
-            + '<p><%= IriSP.translate("From:") %> <span><%= annotation.begin.toString() %></span> <%= IriSP.translate("to:") %> <span><%= annotation.end.toString() %></span> (<%= IriSP.translate("duration:") %> <span><%= annotation.getDuration().toString() %></span>)</p>'
+            + '<h3><%= annotation.title %></h3><a href="#" class="button reprendre-segment" data-segment-id="<%= annotation.id %>"><%= gettext("Clone segment") %></a>'
+            + '<p><%= gettext("From:") %> <span><%= annotation.begin.toString() %></span> <%= gettext("to:") %> <span><%= annotation.end.toString() %></span> (<%= gettext("duration:") %> <span><%= annotation.getDuration().toString() %></span>)</p>'
             + '</div></div></div>'
         ),
         mediasegmentlisttemplate = _.template(
@@ -38,7 +38,7 @@
         mediafoundtemplate = _.template(
             '<div class="media-segment"><div class="media-segment-section" style="left:<%= left %>px; width:<%= width %>px; background:<%= color %>; top: <%= top %>px;"></div>'
             + '<div class="popin media-found-popin" style="left:<%= popleft %>px; top: <%= 5+top %>px;"><div style="left:<%= pointerpos %>px;" class="pointer"></div><div class="popin-content">'
-            + '<h3><%= title %></h3><a href="#" class="button clone-segment" data-segment-id="<%= annotation.id %>"><%= IriSP.translate("Clone segment") %></a>'
+            + '<h3><%= title %></h3><a href="#" class="button clone-segment" data-segment-id="<%= annotation.id %>"><%= gettext("Clone segment") %></a>'
             + '</div></div></div>'
         ),
         mediafoundlisttemplate = _.template(
@@ -59,19 +59,19 @@
             validate: function(_s) {
                 return (_s.getDuration() >= 1000);
             },
-            message: "A segment must be at least one second long"
+            message: gettext("A segment must be at least one second long")
         },
         {
             validate: function(_s) {
                 return (_s.getDuration() < 180000);
             },
-            message: "A segment must be at most three minutes long"
+            message: gettext("A segment must be at most three minutes long")
         },
         {
             validate: function(_s) {
-                return (!!_s.title && _s.title !== IriSP.translate("Untitled segment"));
+                return (!!_s.title && _s.title !== gettext("Untitled segment"));
             },
-            message: "A segment must have a title"
+            message: gettext("A segment must have a title")
         }
     ];
     var segmentwarning = [
@@ -79,13 +79,13 @@
             validate: function(_s) {
                 return (!!_s.description);
             },
-            message: "A segment should have a description"
+            message: gettext("A segment should have a description")
         },
         {
             validate: function(_s) {
                 return (!!_s.keywords.length);
             },
-            message: "A segment should have tags"
+            message: gettext("A segment should have tags")
         }
     ];
     
@@ -94,13 +94,13 @@
             validate: function(_m) {
                 return _m.segments.length > 2;
             },
-            message: "A hashcut must be made from at least three segments"
+            message: gettext("A hashcut must be made from at least three segments")
         },
         {
             validate: function(_m) {
-                return (!!_m.title && _m.title !== IriSP.translate("Untitled Hashcut"));
+                return (!!_m.title && _m.title !== gettext("Untitled Hashcut"));
             },
-            message: "A hashcut must have a title"
+            message: gettext("A hashcut must have a title")
         }
     ];
     var mashupwarning = [
@@ -108,7 +108,7 @@
             validate: function(_m) {
                 return !!_m.description
             },
-            message: "A hashcut should have a description"
+            message: gettext("A hashcut should have a description")
         }
     ];
 
@@ -245,7 +245,7 @@
         if (!messages.length) {
             messages.push("Your hashcut is valid!");
         }
-        mashupstatus = ' - ' + _(messages).map(IriSP.translate).join('\n - ');
+        mashupstatus = ' - ' + _(messages).join('\n - ');
         
         $(".publier-button").toggleClass("disable", critical);
         
@@ -350,7 +350,7 @@
             if (!messages.length) {
                 messages.push("This segment is valid!")
             }
-            currentSegment.status_messages = _(messages).map(IriSP.translate);
+            currentSegment.status_messages = _(messages);
             
             $(".segmentation .validate").removeClass("critical warning valid").addClass(currentSegment.status);
             $(".segmentation .validate-tooltip").html("<ul><li>" + currentSegment.status_messages.join("</li><li>")+"</li></ul>");
@@ -374,7 +374,7 @@
                 currentSegment.setMedia(currentMedia.id);
                 currentSegment.setBegin(currentMedia.getCurrentTime());
                 currentSegment.setEnd(Math.min(currentMedia.getCurrentTime() +  180000, currentMedia.duration));
-                currentSegment.title = IriSP.translate("Untitled segment");
+                currentSegment.title = gettext("Untitled segment");
                 currentSegment.color = currentMedia.color;
                 currentSegment.thumbnail = currentMedia.thumbnail;
                 currentSegment.created = new Date();
@@ -396,8 +396,8 @@
             if (currentMedia.loaded) {
                 currentMedia.setCurrentTime(currentSegment.begin);
             }
-            $(".add-segment").val(IriSP.translate(addMode ? "Add segment to hashcut" : "Save segment"));
-            $(".create-or-edit").text(IriSP.translate(addMode ? "Create new segment" : "Edit existing segment"));
+            $(".add-segment").val(addMode ? gettext("Add segment to hashcut") : gettext("Save segment"));
+            $(".create-or-edit").text(addMode ? gettext("Create new segment") : gettext("Edit existing segment"));
             $("#segment-title").val(currentSegment.title);
             $("#segment-description").val(currentSegment.description);
             var segment_tags = $("#segment-tags");
@@ -499,7 +499,7 @@
         }
     });
     $("#segment-title").on("focus click", function() {
-        if ($(this).val() === IriSP.translate("Untitled segment")) {
+        if ($(this).val() === gettext("Untitled segment")) {
             $(this).val("");
         }
     });
@@ -755,7 +755,7 @@
         currentSegment.setMedia(media.id);
         currentSegment.setBegin(s.begin);
         currentSegment.setEnd(s.end);
-        currentSegment.title = IriSP.translate("Copy of ") + s.title;
+        currentSegment.title = gettext("Copy of ") + s.title;
         currentSegment.description = s.description;
         currentSegment.keywords = s.keywords;
         currentSegment.color = media.color;
@@ -801,7 +801,7 @@
     });
     /* Changing Hashcut Title and description */
     
-    mashup.title = IriSP.translate("Untitled Hashcut");
+    mashup.title = gettext("Untitled Hashcut");
     $(".title-video-wrap a").text(mashup.title);
     $("#hashcut-title").val(mashup.title);
     
@@ -811,7 +811,7 @@
         mashup.trigger("change");
     });
     $("#hashcut-title").on("focus click", function() {
-        if ($(this).val() === IriSP.translate("Untitled Hashcut")) {
+        if ($(this).val() === gettext("Untitled Hashcut")) {
             $(this).val("");
         }
     });
@@ -829,14 +829,14 @@
     /* Publication */
    
     function onLeave() {
-        return IriSP.translate("You haven't published your hashcut yet.\nIf you leave this page, it will be lost");
+        return gettext("You haven't published your hashcut yet.\nIf you leave this page, it will be lost.");
     }
     
     $(window).on("beforeunload", onLeave);
    
     $(".publier-button").click(function() {
         if ($(this).hasClass("disable")) {
-            alert(IriSP.translate("The mashup can't be published because:")+"\n\n"+mashupstatus);
+            alert(gettext("The hashcut can't be published because:")+"\n\n"+mashupstatus);
             return false;
         }
         var postproject = directory.newLocalSource(),
@@ -895,7 +895,7 @@
                 document.location.href = destination;
             },
             error: function(jqXHR, textStatus, errorThrown){
-                alert(IriSP.translate("Server error\nYour hashcut couldn't be published"));
+                alert(gettext("Server error\nYour hashcut couldn't be published"));
                 waitscreen.remove();
             }
         });
--- a/integration/js/i18n.js	Tue Dec 04 13:31:01 2012 +0100
+++ b/integration/js/i18n.js	Tue Dec 04 18:59:07 2012 +0100
@@ -1,52 +1,52 @@
-IriSP.messages = {
-    fr: {
-        "Duration:" : "Durée :",
-        "duration:" : "durée :",
-        "Edit segment": "Éditer le segment",
-        "Move segment down": "Descendre le segment",
-        "Move segment up": "Remonter le segment",
-        "Delete segment": "Supprimer le segment",
-        "Clone segment": "Cloner le segment",
-        "From:": "De :",
-        "to:": "à :",
-        "Untitled segment": "Segment sans titre",
-        "Untitled Hashcut": "Hashcut sans titre",
-        "Copy of ": "Copie de ",
-        "A segment must be at least one second long": "Le segment doit durer au moins une seconde",
-        "A segment must be at most three minutes long": "Le segment doit durer moins de trois minutes",
-        "A segment must have a title": "Le segment doit avoir un titre",
-        "A segment should have a description": "Il est recommandé de donner une description au segment",
-        "A segment should have tags": "Il est recommandé de taguer le segment",
-        "A hashcut must be made from at least three segments": "Un hashcut doit être composé d'au moins trois segments",
-        "A hashcut must have a title": "Un titre doit être donné au hashcut",
-        "A hashcut should have a description": "Il est recommandé de donner une description au hashcut",
-        "One or more segments are invalid": "Un ou plusieurs segments ne sont pas valides",
-        "Your hashcut is valid!": "Votre hashcut est valide !",
-        "This segment is valid!": "Ce segment est valide !",
-        "Add segment to hashcut": "Ajouter au Hashcut",
-        "Save segment": "Sauvegarder",
-        "Create new segment": "Créer un nouveau segment",
-        "Edit existing segment": "Modifier le segment",
-        "The hashcut can't be published because:": "Le Hashcut ne peut pas être publié pour les raisons suivantes :",
-        "Server error\nYour hashcut couldn't be published": "Erreur serveur\nVotre hashcut n'a pas pu être publié",
-        "You haven't published your hashcut yet.\nIf you leave this page, it will be lost": "Vous n'avez pas encore publié votre Hashcut.\nSi vous quittez cette page, il sera perdu.",
-        "From hashcut:": "Du hashcut :"
+((function() {
+    var messages = {
+        fr: {
+            "Duration:" : "Durée :",
+            "duration:" : "durée :",
+            "Edit segment": "Éditer le segment",
+            "Move segment down": "Descendre le segment",
+            "Move segment up": "Remonter le segment",
+            "Delete segment": "Supprimer le segment",
+            "Clone segment": "Cloner le segment",
+            "From:": "De :",
+            "to:": "à :",
+            "Untitled segment": "Segment sans titre",
+            "Untitled Hashcut": "Hashcut sans titre",
+            "Copy of ": "Copie de ",
+            "A segment must be at least one second long": "Le segment doit durer au moins une seconde",
+            "A segment must be at most three minutes long": "Le segment doit durer moins de trois minutes",
+            "A segment must have a title": "Le segment doit avoir un titre",
+            "A segment should have a description": "Il est recommandé de donner une description au segment",
+            "A segment should have tags": "Il est recommandé de taguer le segment",
+            "A hashcut must be made from at least three segments": "Un hashcut doit être composé d'au moins trois segments",
+            "A hashcut must have a title": "Un titre doit être donné au hashcut",
+            "A hashcut should have a description": "Il est recommandé de donner une description au hashcut",
+            "One or more segments are invalid": "Un ou plusieurs segments ne sont pas valides",
+            "Your hashcut is valid!": "Votre hashcut est valide !",
+            "This segment is valid!": "Ce segment est valide !",
+            "Add segment to hashcut": "Ajouter au Hashcut",
+            "Save segment": "Sauvegarder",
+            "Create new segment": "Créer un nouveau segment",
+            "Edit existing segment": "Modifier le segment",
+            "The hashcut can't be published because:": "Le Hashcut ne peut pas être publié pour les raisons suivantes :",
+            "Server error\nYour hashcut couldn't be published": "Erreur serveur\nVotre hashcut n'a pas pu être publié",
+            "You haven't published your hashcut yet.\nIf you leave this page, it will be lost.": "Vous n'avez pas encore publié votre Hashcut.\nSi vous quittez cette page, il sera perdu.",
+            "From hashcut:": "Du hashcut :"
+        }
+    };
+
+    var lang = navigator.language || navigator.userLanguage || "en",
+        srcs = [ ];
+    if (typeof messages[lang] === "object") {
+        srcs.push(messages[lang])
     }
-};
-
-((function() {
-    var lang = IriSP.language || navigator.language || navigator.userLanguage || "en",
-        srcs = [ ];
-    if (typeof IriSP.messages[lang] === "object") {
-        srcs.push(IriSP.messages[lang])
-    }
-    if (lang.substr(0,2) !== lang && typeof IriSP.messages[lang.substr(0,2)] === "object") {
-        srcs.push(IriSP.messages[lang.substr(0,2)])
+    if (lang.substr(0,2) !== lang && typeof messages[lang.substr(0,2)] === "object") {
+        srcs.push(messages[lang.substr(0,2)])
     }
     srcs.push({});
     var l = srcs.length;
     
-    IriSP.translate = function(_str) {
+    window.gettext = function(_str) {
         for (var i = 0; i < l; i++) {
             if (typeof srcs[i][_str] !== "undefined") {
                 return srcs[i][_str];
--- a/integration/js/init.js	Tue Dec 04 13:31:01 2012 +0100
+++ b/integration/js/init.js	Tue Dec 04 18:59:07 2012 +0100
@@ -16,9 +16,11 @@
  *  knowledge of the CeCILL-C license and that you accept its terms.
 */
 
-var IriSP = {
-    serializers: {}
-};
+if (typeof window.IriSP === "undefined") {
+    window.IriSP = {};
+}
+
+IriSP.serializers = {};
 
 IriSP._ = _;
 
--- a/integration/js/mashupcore.js	Tue Dec 04 13:31:01 2012 +0100
+++ b/integration/js/mashupcore.js	Tue Dec 04 18:59:07 2012 +0100
@@ -185,14 +185,14 @@
             var _soundCtl = $(".Ldt-Ctrl-Sound");
             _soundCtl.removeClass("Ldt-Ctrl-Sound-Mute Ldt-Ctrl-Sound-Half Ldt-Ctrl-Sound-Full");
             if (_muted) {        
-                _soundCtl.attr("title", "Activer le son")
+                _soundCtl.attr("title", gettext("Unmute"))
                     .addClass("Ldt-Ctrl-Sound-Mute");    
             } else {
-                _soundCtl.attr("title", "Couper le son")
+                _soundCtl.attr("title", gettext("mute"))
                     .addClass(_vol < .5 ? "Ldt-Ctrl-Sound-Half" : "Ldt-Ctrl-Sound-Full" )
             }
             volBar.slider("value", _muted ? 0 : 100 * _vol);
-            volBar.attr("title",'Volume : ' + Math.floor(100 * _vol) + '%');
+            volBar.attr("title",gettext("Volume:") + Math.floor(100 * _vol) + '%');
         }
     }
     
@@ -218,14 +218,14 @@
 
     function onCurrentMediaPlay() {
         $(".Ldt-Ctrl-Play")
-            .attr("title", "Pause")
+            .attr("title", gettext("Pause"))
             .removeClass("Ldt-Ctrl-Play-PlayState")
             .addClass("Ldt-Ctrl-Play-PauseState")
     }
     
     function onCurrentMediaPause() {
         $(".Ldt-Ctrl-Play")
-            .attr("title", "Lecture")
+            .attr("title", gettext("Play"))
             .removeClass("Ldt-Ctrl-Play-PauseState")
             .addClass("Ldt-Ctrl-Play-PlayState")
     }
--- a/integration/js/mediaplayer.js	Tue Dec 04 13:31:01 2012 +0100
+++ b/integration/js/mediaplayer.js	Tue Dec 04 18:59:07 2012 +0100
@@ -11,8 +11,8 @@
             + '<div class="media-segment-section" style="left:<%= left %>px; width:<%= width %>px; background:<%= color %>; top: <%= top %>px;" data-segment-id="<%= annotation.id %>"></div>'
             + '<div class="popin media-segment-popin" style="left:<%= popleft %>px; top: <%= 5+top %>px;"><div style="left:<%= pointerpos %>px;" class="pointer"></div><div class="popin-content">'
             + '<h3><%= annotation.title %></h3>'
-            + '<p><%= IriSP.translate("From:") %> <span><%= annotation.begin.toString() %></span> <%= IriSP.translate("to:") %> <span><%= annotation.end.toString() %></span> (<%= IriSP.translate("duration:") %> <span><%= annotation.getDuration().toString() %></span>)</p>'
-            + '<p class="mashup-link"><%= IriSP.translate("From hashcut:") %> <a href="<%= IriSP.endpoints.hashcut_page + annotation.project_id %>"></a></p>'
+            + '<p><%= gettext("From:") %> <span><%= annotation.begin.toString() %></span> <%= gettext("to:") %> <span><%= annotation.end.toString() %></span> (<%= gettext("duration:") %> <span><%= annotation.getDuration().toString() %></span>)</p>'
+            + '<p class="mashup-link"><%= gettext("From hashcut:") %> <a href="<%= IriSP.endpoints.hashcut_page + annotation.project_id %>"></a></p>'
             + '</div></div></div>'
         ),
         segmentlisttemplate = _.template(
--- a/integration/media.html	Tue Dec 04 13:31:01 2012 +0100
+++ b/integration/media.html	Tue Dec 04 18:59:07 2012 +0100
@@ -227,6 +227,7 @@
         <script type="text/javascript" src="lib/popcorn-complete.min.js"></script>
         <script type="text/javascript" src="lib/ZeroClipboard.js"></script>
         <script type="text/javascript" src="js/hashcut.js"></script>
+        <script type="text/javascript" src="js/i18n.js"></script>
         <script type="text/javascript" src="js/common.js"></script>
         <script type="text/javascript">
         
Binary file src/hashcut/locale/en/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/locale/en/LC_MESSAGES/django.po	Tue Dec 04 18:59:07 2012 +0100
@@ -0,0 +1,328 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-12-04 17:01+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: templates/mashup_all_mashups.html:22 templates/mashup_content.html:26
+#: templates/mashup_edit.html:44 templates/mashup_home.html:15
+#: templates/mashup_profile.html:26
+msgid "Home"
+msgstr "Home"
+
+#: templates/mashup_all_mashups.html:23 templates/mashup_content.html:27
+#: templates/mashup_profile.html:27
+msgid "New hashcut"
+msgstr "New Hashcut"
+
+#: templates/mashup_all_mashups.html:24 templates/mashup_content.html:28
+#: templates/mashup_edit.html:45 templates/mashup_home.html:46
+#: templates/mashup_profile.html:28
+msgid "My profile"
+msgstr "My profile"
+
+#: templates/mashup_content.html:6
+#, python-format
+msgid "Playing video %(title)s"
+msgstr "Playing Video “%(title)s”"
+
+#: templates/mashup_content.html:18
+msgid "Video"
+msgstr "Video"
+
+#: templates/mashup_content.html:51 templates/mashup_edit.html:94
+#: templates/mashup_hashcut.html:50
+msgid "Play/Pause"
+msgstr "Play/Pause"
+
+#: templates/mashup_content.html:57 templates/mashup_edit.html:106
+#: templates/mashup_hashcut.html:56
+msgid "Elapsed time"
+msgstr "Elapsed time"
+
+#: templates/mashup_content.html:59 templates/mashup_edit.html:108
+#: templates/mashup_hashcut.html:58
+msgid "Total time"
+msgstr "Total time"
+
+#: templates/mashup_content.html:62 templates/mashup_edit.html:111
+#: templates/mashup_hashcut.html:61
+msgid "Mute/Unmute"
+msgstr "Mute/Unmute"
+
+#: templates/mashup_content.html:64 templates/mashup_edit.html:113
+#: templates/mashup_hashcut.html:63
+msgid "Set volume"
+msgstr "Set volume"
+
+#: templates/mashup_content.html:75
+msgid "More informations"
+msgstr "More informations"
+
+#: templates/mashup_content.html:80 templates/mashup_edit.html:22
+#: templates/mashup_edit.html.py:142 templates/mashup_hashcut.html:114
+msgid "Title:"
+msgstr "Title:"
+
+#: templates/mashup_content.html:84 templates/mashup_edit.html:40
+#: templates/mashup_hashcut.html:118
+msgid "Duration:"
+msgstr "Duration:"
+
+#: templates/mashup_content.html:88 templates/mashup_edit.html:26
+#: templates/mashup_edit.html.py:152 templates/mashup_edit.html:210
+#: templates/mashup_hashcut.html:94 templates/mashup_hashcut.html.py:126
+msgid "Description:"
+msgstr "Description:"
+
+#: templates/mashup_content.html:92 templates/mashup_edit.html:146
+#: templates/mashup_edit.html.py:214 templates/mashup_hashcut.html:98
+msgid "Tags:"
+msgstr "Tags:"
+
+#: templates/mashup_content.html:99
+msgid "Hashcuts using this video"
+msgstr "Hashcuts using this video"
+
+#: templates/mashup_edit.html:6
+msgid "Hashcut editor"
+msgstr "Hashcut editor"
+
+#: templates/mashup_edit.html:23 templates/mashup_edit.html.py:38
+msgid "Untitled Hashcut"
+msgstr "Untitled Hashcut"
+
+#: templates/mashup_edit.html:57
+msgid "Select videos"
+msgstr "Select videos"
+
+#: templates/mashup_edit.html:58
+msgid "Search videos"
+msgstr "Search videos"
+
+#: templates/mashup_edit.html:68
+msgid "Segment"
+msgstr "Segment"
+
+#: templates/mashup_edit.html:69
+msgid "Preview and publish"
+msgstr "Preview and publish"
+
+#: templates/mashup_edit.html:74
+msgid "Creating a hashcut is easy!"
+msgstr "Creating a Hashcut is easy!"
+
+#: templates/mashup_edit.html:76
+msgid "Start by selecting a video in the left hand column."
+msgstr "Start by selecting a video in the left hand column."
+
+#: templates/mashup_edit.html:77
+msgid "Create a segment in your video and annotate it."
+msgstr "Create a segment in your video and annotate it."
+
+#: templates/mashup_edit.html:78
+msgid "Append your segment to the hashcut and reorder the segments"
+msgstr "Append your segment to the hashcut and reorder the segments"
+
+#: templates/mashup_edit.html:79
+msgid "Add a few comments to your hashcut. You are ready to publish!"
+msgstr "Add a few comments to your hashcut. You are ready to publish!"
+
+#: templates/mashup_edit.html:97
+msgid "Begin segment here"
+msgstr "Begin segment here"
+
+#: templates/mashup_edit.html:99
+msgid "End segment here"
+msgstr "End segment here"
+
+#: templates/mashup_edit.html:131
+msgid "Create a new segment"
+msgstr "Create a new segment"
+
+#: templates/mashup_edit.html:132
+msgid "from"
+msgstr "from"
+
+#: templates/mashup_edit.html:134
+msgid "to"
+msgstr "to"
+
+#: templates/mashup_edit.html:136
+msgid "duration:"
+msgstr "duration:"
+
+#: templates/mashup_edit.html:156
+msgid "Add to hashcut"
+msgstr "Add to Hashcut"
+
+#: templates/mashup_edit.html:163
+msgid "My segments on this media:"
+msgstr "My segments on this media:"
+
+#: templates/mashup_edit.html:169
+msgid "Existing segments on this media:"
+msgstr "Existing segments on this media:"
+
+#: templates/mashup_edit.html:206 templates/mashup_hashcut.html:90
+msgid "Excerpt from:"
+msgstr "Excerpt from:"
+
+#: templates/mashup_edit.html:230
+msgid "Segment list"
+msgstr "Segment list"
+
+#: templates/mashup_edit.html:232
+msgid "No segment"
+msgstr "No segment"
+
+#: templates/mashup_hashcut.html:6
+#, python-format
+msgid "Playing hashcut %(title)s"
+msgstr "Playing Hashcut “%(title)s”"
+
+#: templates/mashup_hashcut.html:18 templates/mashup_home.html:15
+msgid "Hashcut"
+msgstr "Hashcut"
+
+#: templates/mashup_hashcut.html:109
+msgid "More information"
+msgstr "More information"
+
+#: templates/mashup_hashcut.html:122
+msgid "Author:"
+msgstr "Author:"
+
+#: templates/mashup_hashcut.html:132
+msgid "Videos used in this Hashcut"
+msgstr "Videos used in this Hashcut"
+
+#: templates/mashup_home.html:42
+msgid "Create a new hashcut!"
+msgstr "Create a new hashcut!"
+
+#: templates/mashup_home.html:59
+msgid "Featured Hashcuts"
+msgstr "Featured Hashcuts"
+
+#: templates/mashup_home.html:64 templates/mashup_home.html.py:70
+#: templates/mashup_home.html:80
+msgid "by"
+msgstr "by"
+
+#: templates/mashup_home.html:75
+msgid "Newest Hashcuts"
+msgstr "Newest Hashcuts"
+
+#: templates/mashup_home.html:86
+msgid "All Hashcuts"
+msgstr "All Hashcuts"
+
+#: templates/mashup_home.html:92
+msgid "What's a Hashcut?"
+msgstr "What's a Hashcut?"
+
+#: templates/mashup_home.html:97
+msgid "How to?"
+msgstr "How to?"
+
+#: templates/mashup_home.html:100
+msgid "Sign up"
+msgstr "Sign up"
+
+#: templates/mashup_home.html:101
+msgid "Start by creating your own profile on this platform."
+msgstr "Start by creating your own profile on this platform."
+
+#: templates/mashup_home.html:105
+msgid "Create a new hashcut"
+msgstr "Create a new Hashcut"
+
+#: templates/mashup_home.html:106
+msgid ""
+"Choose videos, define and organize segments and comment them to create your "
+"own hashcut."
+msgstr ""
+"Choose videos, define and organize segments and comment them to create your "
+"own hashcut."
+
+#: templates/mashup_home.html:110
+msgid "Publish and share"
+msgstr "Publish and share"
+
+#: templates/mashup_home.html:111
+msgid ""
+"Once your hashcut is done, publish it here and share your work on social "
+"networks."
+msgstr ""
+"Once your hashcut is done, publish it here and share your work on social "
+"networks."
+
+#: templates/mashup_profile.html:6
+#, python-format
+msgid "%(username)s's profile"
+msgstr "%(username)s's profile"
+
+#: templates/mashup_profile.html:18
+msgid "Profile"
+msgstr "Profile"
+
+#: templates/partial/mashup_popin_user.html:11
+#, python-format
+msgid "%(nb_mashup_creator)s Hashcut"
+msgid_plural "%(nb_mashup_creator)s Hashcuts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/partial/mashup_popin_user.html:13
+msgid "Switch account"
+msgstr "Switch account"
+
+#: templates/partial/mashup_popin_user.html:18
+msgid "Create account:"
+msgstr "Create account:"
+
+#: templates/partial/mashup_popin_user.html:22
+#: templates/partial/mashup_popin_user.html:47
+msgid "Login:"
+msgstr "Login"
+
+#: templates/partial/mashup_popin_user.html:26
+msgid "E-mail:"
+msgstr "E-mail:"
+
+#: templates/partial/mashup_popin_user.html:30
+#: templates/partial/mashup_popin_user.html:51
+msgid "Password:"
+msgstr "Password:"
+
+#: templates/partial/mashup_popin_user.html:34
+msgid "Confirm password:"
+msgstr "Confirm password:"
+
+#: templates/partial/mashup_popin_user.html:38
+#: templates/partial/mashup_popin_user.html:58
+msgid "Create account"
+msgstr "Create account"
+
+#: templates/partial/mashup_popin_user.html:43
+msgid "Log In:"
+msgstr "Log In:"
+
+#: templates/partial/mashup_popin_user.html:55
+msgid "Log In"
+msgstr "Log In"
Binary file src/hashcut/locale/en/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/locale/en/LC_MESSAGES/djangojs.po	Tue Dec 04 18:59:07 2012 +0100
@@ -0,0 +1,186 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-12-04 18:45+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: static/hashcut/js/common.js:56
+msgid "Share URL"
+msgstr "Share URL"
+
+#: static/hashcut/js/common.js:60
+msgid "Copy"
+msgstr "Copy"
+
+#: static/hashcut/js/common.js:64
+msgid "Share on Facebook"
+msgstr "Share on Facebook"
+
+#: static/hashcut/js/common.js:68
+msgid "Share on Twitter"
+msgstr "Share on Twitter"
+
+#: static/hashcut/js/common.js:72
+msgid "Share on Google+"
+msgstr "Share on Google+"
+
+#: static/hashcut/js/common.js:76
+msgid "Share via E-Mail"
+msgstr "Share via E-Mail"
+
+#: static/hashcut/js/hashcut.js:1704
+msgid "Unmute"
+msgstr "Unmute"
+
+#: static/hashcut/js/hashcut.js:1707
+msgid "mute"
+msgstr "Mute"
+
+#: static/hashcut/js/hashcut.js:1711
+msgid "Volume:"
+msgstr "Volume:"
+
+#: static/hashcut/js/hashcut.js:1737
+msgid "Pause"
+msgstr "Pause"
+
+#: static/hashcut/js/hashcut.js:1744
+msgid "Play"
+msgstr "Play"
+
+#: static/hashcut/js/hashcut.js:2235
+msgid "A segment must be at least one second long"
+msgstr "A segment must be at least one second long"
+
+#: static/hashcut/js/hashcut.js:2241
+msgid "A segment must be at most three minutes long"
+msgstr "A segment must be at most three minutes long"
+
+#: static/hashcut/js/hashcut.js:2245 static/hashcut/js/hashcut.js.c:2550
+#: static/hashcut/js/hashcut.js:2675
+msgid "Untitled segment"
+msgstr "Untitled segment"
+
+#: static/hashcut/js/hashcut.js:2247
+msgid "A segment must have a title"
+msgstr "A segment must have a title"
+
+#: static/hashcut/js/hashcut.js:2255
+msgid "A segment should have a description"
+msgstr "A segment should have a description"
+
+#: static/hashcut/js/hashcut.js:2261
+msgid "A segment should have tags"
+msgstr "A segment should have tags"
+
+#: static/hashcut/js/hashcut.js:2270
+msgid "A hashcut must be made from at least three segments"
+msgstr "A hashcut must be made from at least three segments"
+
+#: static/hashcut/js/hashcut.js:2274 static/hashcut/js/hashcut.js.c:2977
+#: static/hashcut/js/hashcut.js:2987
+msgid "Untitled Hashcut"
+msgstr "Untitled Hashcut"
+
+#: static/hashcut/js/hashcut.js:2276
+msgid "A hashcut must have a title"
+msgstr "A hashcut must have a title"
+
+#: static/hashcut/js/hashcut.js:2284
+msgid "A hashcut should have a description"
+msgstr "A hashcut should have a description"
+
+#: static/hashcut/js/hashcut.js:2572
+msgid "Add segment to hashcut"
+msgstr "Add segment to hashcut"
+
+#: static/hashcut/js/hashcut.js:2572
+msgid "Save segment"
+msgstr "Save segment"
+
+#: static/hashcut/js/hashcut.js:2573
+msgid "Create new segment"
+msgstr "Create new segment"
+
+#: static/hashcut/js/hashcut.js:2573
+msgid "Edit existing segment"
+msgstr "Edit existing segment"
+
+#: static/hashcut/js/hashcut.js:2931
+msgid "Copy of "
+msgstr "Copy of "
+
+#: static/hashcut/js/hashcut.js:3005
+msgid ""
+"You haven't published your hashcut yet.\n"
+"If you leave this page, it will be lost."
+msgstr ""
+"You haven't published your hashcut yet.\n"
+"If you leave this page, it will be lost."
+
+#: static/hashcut/js/hashcut.js:3012
+msgid "The hashcut can't be published because:"
+msgstr "The hashcut can't be published because:"
+
+#: static/hashcut/js/hashcut.js:3071
+msgid ""
+"Server error\n"
+"Your hashcut couldn't be published"
+msgstr ""
+"Server error\n"
+"Your hashcut couldn't be published"
+
+msgid "The mashup can't be published because:"
+msgstr "The hashcut can't be published because:"
+
+msgid "Duration:"
+msgstr "Duration:"
+
+msgid "duration:"
+msgstr "duration:"
+
+msgid "Edit segment"
+msgstr "Edit segment"
+
+msgid "Move segment down"
+msgstr "Move segment down"
+
+msgid "Move segment up"
+msgstr "Move segment up"
+
+msgid "Delete segment"
+msgstr "Delete segment"
+
+msgid "Clone segment"
+msgstr "Clone segment"
+
+msgid "From:"
+msgstr "From:"
+
+msgid "to:"
+msgstr "to:"
+
+msgid "One or more segments are invalid"
+msgstr "One or more segments are invalid"
+
+msgid "Your hashcut is valid!"
+msgstr "Your hashcut is valid!"
+
+msgid "This segment is valid!"
+msgstr "This segment is valid"
+
+msgid "From hashcut:"
+msgstr "From hashcut:"
Binary file src/hashcut/locale/fr/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/locale/fr/LC_MESSAGES/django.po	Tue Dec 04 18:59:07 2012 +0100
@@ -0,0 +1,330 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-12-04 17:01+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: templates/mashup_all_mashups.html:22 templates/mashup_content.html:26
+#: templates/mashup_edit.html:44 templates/mashup_home.html:15
+#: templates/mashup_profile.html:26
+msgid "Home"
+msgstr "Accueil"
+
+#: templates/mashup_all_mashups.html:23 templates/mashup_content.html:27
+#: templates/mashup_profile.html:27
+msgid "New hashcut"
+msgstr "Créer un Hashcut"
+
+#: templates/mashup_all_mashups.html:24 templates/mashup_content.html:28
+#: templates/mashup_edit.html:45 templates/mashup_home.html:46
+#: templates/mashup_profile.html:28
+msgid "My profile"
+msgstr "Mon profil"
+
+#: templates/mashup_content.html:6
+#, python-format
+msgid "Playing video %(title)s"
+msgstr "Lecture de la Vidéo « %(title)s »"
+
+#: templates/mashup_content.html:18
+msgid "Video"
+msgstr "Vidéo"
+
+#: templates/mashup_content.html:51 templates/mashup_edit.html:94
+#: templates/mashup_hashcut.html:50
+msgid "Play/Pause"
+msgstr "Lecture/Pause"
+
+#: templates/mashup_content.html:57 templates/mashup_edit.html:106
+#: templates/mashup_hashcut.html:56
+msgid "Elapsed time"
+msgstr "Temps écoulé"
+
+#: templates/mashup_content.html:59 templates/mashup_edit.html:108
+#: templates/mashup_hashcut.html:58
+msgid "Total time"
+msgstr "Durée totale"
+
+#: templates/mashup_content.html:62 templates/mashup_edit.html:111
+#: templates/mashup_hashcut.html:61
+msgid "Mute/Unmute"
+msgstr "Couper/Activer le son"
+
+#: templates/mashup_content.html:64 templates/mashup_edit.html:113
+#: templates/mashup_hashcut.html:63
+msgid "Set volume"
+msgstr "Régler le volume"
+
+#: templates/mashup_content.html:75
+msgid "More informations"
+msgstr "Plus d'informations"
+
+#: templates/mashup_content.html:80 templates/mashup_edit.html:22
+#: templates/mashup_edit.html.py:142 templates/mashup_hashcut.html:114
+msgid "Title:"
+msgstr "Titre :"
+
+#: templates/mashup_content.html:84 templates/mashup_edit.html:40
+#: templates/mashup_hashcut.html:118
+msgid "Duration:"
+msgstr "Durée :"
+
+#: templates/mashup_content.html:88 templates/mashup_edit.html:26
+#: templates/mashup_edit.html.py:152 templates/mashup_edit.html:210
+#: templates/mashup_hashcut.html:94 templates/mashup_hashcut.html.py:126
+msgid "Description:"
+msgstr "Description :"
+
+#: templates/mashup_content.html:92 templates/mashup_edit.html:146
+#: templates/mashup_edit.html.py:214 templates/mashup_hashcut.html:98
+msgid "Tags:"
+msgstr "Mots-clés :"
+
+#: templates/mashup_content.html:99
+msgid "Hashcuts using this video"
+msgstr "Hashcuts utilisant cette vidéo"
+
+#: templates/mashup_edit.html:6
+msgid "Hashcut editor"
+msgstr "Éditeur de Hashcut"
+
+#: templates/mashup_edit.html:23 templates/mashup_edit.html.py:38
+msgid "Untitled Hashcut"
+msgstr "Hashcut sans titre"
+
+#: templates/mashup_edit.html:57
+msgid "Select videos"
+msgstr "Sélectionner les vidéos"
+
+#: templates/mashup_edit.html:58
+msgid "Search videos"
+msgstr "Rechercher une vidéo"
+
+#: templates/mashup_edit.html:68
+msgid "Segment"
+msgstr "Segmenter"
+
+#: templates/mashup_edit.html:69
+msgid "Preview and publish"
+msgstr "Prévisualiser et publier"
+
+#: templates/mashup_edit.html:74
+msgid "Creating a hashcut is easy!"
+msgstr "Créer un Hashcut, c’est facile !"
+
+#: templates/mashup_edit.html:76
+msgid "Start by selecting a video in the left hand column."
+msgstr "Commencez par choisir une vidéo dans le volet de gauche"
+
+#: templates/mashup_edit.html:77
+msgid "Create a segment in your video and annotate it."
+msgstr ""
+"Créez un segment dans la vidéo et profitez-en pour annoter votre segment"
+
+#: templates/mashup_edit.html:78
+msgid "Append your segment to the hashcut and reorder the segments"
+msgstr "Ajoutez votre segment à la liste, réorganisez les segments entre eux"
+
+#: templates/mashup_edit.html:79
+msgid "Add a few comments to your hashcut. You are ready to publish!"
+msgstr ""
+"Rajoutez quelques commentaires à votre Hashcut. Vous êtes prêts à publier !"
+
+#: templates/mashup_edit.html:97
+msgid "Begin segment here"
+msgstr "Débuter le segment ici"
+
+#: templates/mashup_edit.html:99
+msgid "End segment here"
+msgstr "Finir le segment ici"
+
+#: templates/mashup_edit.html:131
+msgid "Create a new segment"
+msgstr "Créer un nouveau segment"
+
+#: templates/mashup_edit.html:132
+msgid "from"
+msgstr "de"
+
+#: templates/mashup_edit.html:134
+msgid "to"
+msgstr "à"
+
+#: templates/mashup_edit.html:136
+msgid "duration:"
+msgstr "durée :"
+
+#: templates/mashup_edit.html:156
+msgid "Add to hashcut"
+msgstr "Ajouter au Hashcut"
+
+#: templates/mashup_edit.html:163
+msgid "My segments on this media:"
+msgstr "Mes segments sur cette vidéo :"
+
+#: templates/mashup_edit.html:169
+msgid "Existing segments on this media:"
+msgstr "Segments existants sur cette vidéo :"
+
+#: templates/mashup_edit.html:206 templates/mashup_hashcut.html:90
+msgid "Excerpt from:"
+msgstr "Extrait de :"
+
+#: templates/mashup_edit.html:230
+msgid "Segment list"
+msgstr "Liste des segments"
+
+#: templates/mashup_edit.html:232
+msgid "No segment"
+msgstr "Aucun segment"
+
+#: templates/mashup_hashcut.html:6
+#, python-format
+msgid "Playing hashcut %(title)s"
+msgstr "Lecture du Hashcut « %(title)s »"
+
+#: templates/mashup_hashcut.html:18 templates/mashup_home.html:15
+msgid "Hashcut"
+msgstr "Hashcut"
+
+#: templates/mashup_hashcut.html:109
+msgid "More information"
+msgstr "Plus d'informations"
+
+#: templates/mashup_hashcut.html:122
+msgid "Author:"
+msgstr "Auteur :"
+
+#: templates/mashup_hashcut.html:132
+msgid "Videos used in this Hashcut"
+msgstr "Vidéos utilisées dans ce Hashcut"
+
+#: templates/mashup_home.html:42
+msgid "Create a new hashcut!"
+msgstr "Créer un Hashcut !"
+
+#: templates/mashup_home.html:59
+msgid "Featured Hashcuts"
+msgstr "Hashcuts à la Une"
+
+#: templates/mashup_home.html:64 templates/mashup_home.html.py:70
+#: templates/mashup_home.html:80
+msgid "by"
+msgstr "par"
+
+#: templates/mashup_home.html:75
+msgid "Newest Hashcuts"
+msgstr "Derniers Hashcuts"
+
+#: templates/mashup_home.html:86
+msgid "All Hashcuts"
+msgstr "Tous les Hashcuts"
+
+#: templates/mashup_home.html:92
+msgid "What's a Hashcut?"
+msgstr "Hashcut ?"
+
+#: templates/mashup_home.html:97
+msgid "How to?"
+msgstr "Comment faire ?"
+
+#: templates/mashup_home.html:100
+msgid "Sign up"
+msgstr "S'inscrire"
+
+#: templates/mashup_home.html:101
+msgid "Start by creating your own profile on this platform."
+msgstr "Commencez par créer votre espace personnel sur cette plateforme."
+
+#: templates/mashup_home.html:105
+msgid "Create a new hashcut"
+msgstr "Créer un Hashcut"
+
+#: templates/mashup_home.html:106
+msgid ""
+"Choose videos, define and organize segments and comment them to create your "
+"own hashcut."
+msgstr ""
+"Choisissez des médias, segmentez les, assemblez les segments et rajoutez des "
+"commentaires sur le Hashcut."
+
+#: templates/mashup_home.html:110
+msgid "Publish and share"
+msgstr "Publier et partager"
+
+#: templates/mashup_home.html:111
+msgid ""
+"Once your hashcut is done, publish it here and share your work on social "
+"networks."
+msgstr ""
+"Une fois le hashcut terminé, publiez-le sur cette plateforme et partagez "
+"votre création sur les réseaux sociaux"
+
+#: templates/mashup_profile.html:6
+#, python-format
+msgid "%(username)s's profile"
+msgstr "Profil de %(username)s"
+
+#: templates/mashup_profile.html:18
+msgid "Profile"
+msgstr "Profil"
+
+#: templates/partial/mashup_popin_user.html:11
+#, python-format
+msgid "%(nb_mashup_creator)s Hashcut"
+msgid_plural "%(nb_mashup_creator)s Hashcuts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/partial/mashup_popin_user.html:13
+msgid "Switch account"
+msgstr "Changer de compte"
+
+#: templates/partial/mashup_popin_user.html:18
+msgid "Create account:"
+msgstr "Créer un compte"
+
+#: templates/partial/mashup_popin_user.html:22
+#: templates/partial/mashup_popin_user.html:47
+msgid "Login:"
+msgstr "Pseudonyme :"
+
+#: templates/partial/mashup_popin_user.html:26
+msgid "E-mail:"
+msgstr "E-mail :"
+
+#: templates/partial/mashup_popin_user.html:30
+#: templates/partial/mashup_popin_user.html:51
+msgid "Password:"
+msgstr "Mot de passe :"
+
+#: templates/partial/mashup_popin_user.html:34
+msgid "Confirm password:"
+msgstr "Confirmer le mot de passe :"
+
+#: templates/partial/mashup_popin_user.html:38
+#: templates/partial/mashup_popin_user.html:58
+msgid "Create account"
+msgstr "Créer un compte"
+
+#: templates/partial/mashup_popin_user.html:43
+msgid "Log In:"
+msgstr "Se connecter :"
+
+#: templates/partial/mashup_popin_user.html:55
+msgid "Log In"
+msgstr "Se connecter"
Binary file src/hashcut/locale/fr/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/locale/fr/LC_MESSAGES/djangojs.po	Tue Dec 04 18:59:07 2012 +0100
@@ -0,0 +1,187 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-12-04 18:46+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: static/hashcut/js/common.js:56
+msgid "Share URL"
+msgstr "Partager l'URL"
+
+#: static/hashcut/js/common.js:60
+msgid "Copy"
+msgstr "Copier"
+
+#: static/hashcut/js/common.js:64
+msgid "Share on Facebook"
+msgstr "Partager sur Facebook"
+
+#: static/hashcut/js/common.js:68
+msgid "Share on Twitter"
+msgstr "Partager sur Twitter"
+
+#: static/hashcut/js/common.js:72
+msgid "Share on Google+"
+msgstr "Partager sur Google+"
+
+#: static/hashcut/js/common.js:76
+msgid "Share via E-Mail"
+msgstr "Partager par E-Mail"
+
+#: static/hashcut/js/hashcut.js:1704
+msgid "Unmute"
+msgstr "Couper le son"
+
+#: static/hashcut/js/hashcut.js:1707
+msgid "mute"
+msgstr "Activer le son"
+
+#: static/hashcut/js/hashcut.js:1711
+msgid "Volume:"
+msgstr "Volume :"
+
+#: static/hashcut/js/hashcut.js:1737
+msgid "Pause"
+msgstr "Pause"
+
+#: static/hashcut/js/hashcut.js:1744
+msgid "Play"
+msgstr "Lecture"
+
+#: static/hashcut/js/hashcut.js:2235
+msgid "A segment must be at least one second long"
+msgstr "Le segment doit durer au moins une seconde"
+
+#: static/hashcut/js/hashcut.js:2241
+msgid "A segment must be at most three minutes long"
+msgstr "Le segment doit durer moins de trois minutes"
+
+#: static/hashcut/js/hashcut.js:2245 static/hashcut/js/hashcut.js.c:2550
+#: static/hashcut/js/hashcut.js:2675
+msgid "Untitled segment"
+msgstr "Segment sans titre"
+
+#: static/hashcut/js/hashcut.js:2247
+msgid "A segment must have a title"
+msgstr "Le segment doit avoir un titre"
+
+#: static/hashcut/js/hashcut.js:2255
+msgid "A segment should have a description"
+msgstr "Il est recommandé de donner une description au segment"
+
+#: static/hashcut/js/hashcut.js:2261
+msgid "A segment should have tags"
+msgstr "Il est recommandé de taguer le segment"
+
+#: static/hashcut/js/hashcut.js:2270
+msgid "A hashcut must be made from at least three segments"
+msgstr "Un hashcut doit être composé d'au moins trois segments"
+
+#: static/hashcut/js/hashcut.js:2274 static/hashcut/js/hashcut.js.c:2977
+#: static/hashcut/js/hashcut.js:2987
+msgid "Untitled Hashcut"
+msgstr "Hashcut sans titre"
+
+#: static/hashcut/js/hashcut.js:2276
+msgid "A hashcut must have a title"
+msgstr "Un titre doit être donné au hashcut"
+
+#: static/hashcut/js/hashcut.js:2284
+msgid "A hashcut should have a description"
+msgstr "Il est recommandé de donner une description au hashcut"
+
+#: static/hashcut/js/hashcut.js:2572
+msgid "Add segment to hashcut"
+msgstr "Ajouter au Hashcut"
+
+#: static/hashcut/js/hashcut.js:2572
+msgid "Save segment"
+msgstr "Sauvegarder"
+
+#: static/hashcut/js/hashcut.js:2573
+msgid "Create new segment"
+msgstr "Créer un nouveau segment"
+
+#: static/hashcut/js/hashcut.js:2573
+msgid "Edit existing segment"
+msgstr "Modifier le segment"
+
+#: static/hashcut/js/hashcut.js:2931
+msgid "Copy of "
+msgstr "Copie de "
+
+#: static/hashcut/js/hashcut.js:3005
+msgid ""
+"You haven't published your hashcut yet.\n"
+"If you leave this page, it will be lost."
+msgstr ""
+"Vous n'avez pas encore publié votre Hashcut.\n"
+"Si vous quittez cette page, il sera perdu."
+
+#: static/hashcut/js/hashcut.js:3012
+msgid "The hashcut can't be published because:"
+msgstr "Le Hashcut ne peut pas être publié pour les raisons suivantes :"
+
+#: static/hashcut/js/hashcut.js:3071
+msgid ""
+"Server error\n"
+"Your hashcut couldn't be published"
+msgstr ""
+"Erreur serveur\n"
+"Votre hashcut n'a pas pu être publié"
+
+msgid "The mashup can't be published because:"
+msgstr "Le Hashcut ne peut pas être publié pour les raisons suivantes :"
+
+msgid "Duration:"
+msgstr "Durée :"
+
+msgid "duration:"
+msgstr "durée :"
+
+msgid "Edit segment"
+msgstr "Éditer le segment"
+
+msgid "Move segment down"
+msgstr "Descendre le segment"
+
+msgid "Move segment up"
+msgstr "Remonter le segment"
+
+msgid "Delete segment"
+msgstr "Supprimer le segment"
+
+msgid "Clone segment"
+msgstr "Cloner le segment"
+
+msgid "From:"
+msgstr "De :"
+
+msgid "to:"
+msgstr "à :"
+
+msgid "One or more segments are invalid"
+msgstr "Un ou plusieurs segments ne sont pas valides"
+
+msgid "Your hashcut is valid!"
+msgstr "Votre hashcut est valide !"
+
+msgid "This segment is valid!"
+msgstr "Ce segment est valide !"
+
+msgid "From hashcut:"
+msgstr "Du hashcut :"
--- a/src/hashcut/static/hashcut/js/common.js	Tue Dec 04 13:31:01 2012 +0100
+++ b/src/hashcut/static/hashcut/js/common.js	Tue Dec 04 18:59:07 2012 +0100
@@ -37,17 +37,46 @@
     
     var opts = opts || {};
     opts.sel = opts.sel || $(".Ldt-Social");
-    opts.url = opts.url || document.location.href;
+    opts.url = opts.url || document.location.href
+    opts.text = opts.text || $("title").text();
+    
+    if (!opts.sel.length) {
+        return;
+    }
+    
+    opts.sel.addClass("Ldt-Social");
     
     if (opts.swf) {
         ZeroClipboard.setMoviePath(opts.swf);
     }
     
-    var text = opts.sel.find("title").text(),
-        clipId = "Social-Clip-" + (++uid),
-        clip;
-
-    opts.sel.find(".Ldt-Social-CopyBtn").attr("id", clipId);
+    var clipId = "Social-Clip-" + (++uid),
+        clip,
+        html = '<div class="Ldt-Social-Url-Container"><a href="#" target="_blank" class="Ldt-Social-Square Ldt-Social-Url" title="'
+            + gettext("Share URL")
+            + '"></a><span class="Ldt-Social-UrlPop"><input class="Ldt-Social-Input"/><div class="Ldt-Social-CopyBtn" id="'
+            + clipId
+            + '">'
+            + gettext("Copy")
+            + '</div></span></div><a href="http://www.facebook.com/share.php?'
+            + $.param({ u: opts.url, t: opts.text })
+            + '" target="_blank" class="Ldt-Social-Fb Ldt-Social-Ext" title="'
+            + gettext("Share on Facebook")
+            + '"></a><a href="https://twitter.com/intent/tweet?'
+            + $.param({ url: opts.url, text: opts.text })
+            + '" target="_blank" class="Ldt-Social-Twitter Ldt-Social-Ext" title="'
+            + gettext("Share on Twitter")
+            + '"></a><a href="https://plus.google.com/share?'
+            + $.param({ url: opts.url, title: opts.text })
+            + '" target="_blank" class="Ldt-Social-Gplus Ldt-Social-Ext" title="'
+            + gettext("Share on Google+")
+            + '"></a><a href="mailto:?'
+            + $.param({ subject: opts.text, body: opts.text + ": " + opts.url })
+            + '" target="_blank" class="Ldt-Social-Mail" title="'
+            + gettext("Share via E-Mail")
+            + '"></a></div>';
+            
+    opts.sel.html(html);
 
     opts.sel.find(".Ldt-Social-Url").click(function() {
         var _pop = opts.sel.find(".Ldt-Social-UrlPop");
@@ -81,10 +110,5 @@
             "height=300,width=450,left=100,top=100,toolbar=0,menubar=0,status=0,location=0");
         return false;
     });
-    
-    opts.sel.find(".Ldt-Social-Fb").attr("href", "http://www.facebook.com/share.php?" + $.param({ u: opts.url, t: text }));
-    opts.sel.find(".Ldt-Social-Twitter").attr("href", "https://twitter.com/intent/tweet?" + $.param({ url: opts.url, text: text }));
-    opts.sel.find(".Ldt-Social-Gplus").attr("href", "https://plus.google.com/share?" + $.param({ url: opts.url, title: text }));
-    opts.sel.find(".Ldt-Social-Mail").attr("href", "mailto:?" + $.param({ subject: text, body: text + ": " + opts.url }));
 }
 }());
\ No newline at end of file
--- a/src/hashcut/static/hashcut/js/hashcut.js	Tue Dec 04 13:31:01 2012 +0100
+++ b/src/hashcut/static/hashcut/js/hashcut.js	Tue Dec 04 18:59:07 2012 +0100
@@ -16,9 +16,11 @@
  *  knowledge of the CeCILL-C license and that you accept its terms.
 */
 
-var IriSP = {
-    serializers: {}
-};
+if (typeof window.IriSP === "undefined") {
+    window.IriSP = {};
+}
+
+IriSP.serializers = {};
 
 IriSP._ = _;
 
@@ -37,66 +39,6 @@
 IriSP.vizcolors = ["#1f77b4 ", "#aec7e8 ", "#ff7f0e ", "#ffbb78 ", "#2ca02c ", "#98df8a ", "#d62728 ", "#ff9896 ", "#9467bd ", "#c5b0d5 ", "#8c564b ", "#c49c94 ", "#e377c2 ", "#f7b6d2 ", "#7f7f7f ", "#c7c7c7 ", "#bcbd22 ", "#dbdb8d ", "#17becf ", "#9edae5"];
 
 /* END init.js */
-IriSP.messages = {
-    fr: {
-        "Duration:" : "Durée :",
-        "duration:" : "durée :",
-        "Edit segment": "Éditer le segment",
-        "Move segment down": "Descendre le segment",
-        "Move segment up": "Remonter le segment",
-        "Delete segment": "Supprimer le segment",
-        "Clone segment": "Cloner le segment",
-        "From:": "De :",
-        "to:": "à :",
-        "Untitled segment": "Segment sans titre",
-        "Untitled Hashcut": "Hashcut sans titre",
-        "Copy of ": "Copie de ",
-        "A segment must be at least one second long": "Le segment doit durer au moins une seconde",
-        "A segment must be at most three minutes long": "Le segment doit durer moins de trois minutes",
-        "A segment must have a title": "Le segment doit avoir un titre",
-        "A segment should have a description": "Il est recommandé de donner une description au segment",
-        "A segment should have tags": "Il est recommandé de taguer le segment",
-        "A hashcut must be made from at least three segments": "Un hashcut doit être composé d'au moins trois segments",
-        "A hashcut must have a title": "Un titre doit être donné au hashcut",
-        "A hashcut should have a description": "Il est recommandé de donner une description au hashcut",
-        "One or more segments are invalid": "Un ou plusieurs segments ne sont pas valides",
-        "Your hashcut is valid!": "Votre hashcut est valide !",
-        "This segment is valid!": "Ce segment est valide !",
-        "Add segment to hashcut": "Ajouter au Hashcut",
-        "Save segment": "Sauvegarder",
-        "Create new segment": "Créer un nouveau segment",
-        "Edit existing segment": "Modifier le segment",
-        "The hashcut can't be published because:": "Le Hashcut ne peut pas être publié pour les raisons suivantes :",
-        "Server error\nYour hashcut couldn't be published": "Erreur serveur\nVotre hashcut n'a pas pu être publié",
-        "You haven't published your hashcut yet.\nIf you leave this page, it will be lost": "Vous n'avez pas encore publié votre Hashcut.\nSi vous quittez cette page, il sera perdu.",
-        "From hashcut:": "Du hashcut :"
-    }
-};
-
-((function() {
-    var lang = IriSP.language || navigator.language || navigator.userLanguage || "en",
-        srcs = [ ];
-    if (typeof IriSP.messages[lang] === "object") {
-        srcs.push(IriSP.messages[lang])
-    }
-    if (lang.substr(0,2) !== lang && typeof IriSP.messages[lang.substr(0,2)] === "object") {
-        srcs.push(IriSP.messages[lang.substr(0,2)])
-    }
-    srcs.push({});
-    var l = srcs.length;
-    
-    IriSP.translate = function(_str) {
-        for (var i = 0; i < l; i++) {
-            if (typeof srcs[i][_str] !== "undefined") {
-                return srcs[i][_str];
-            }
-        }
-        return _str;
-    }
-    
-}) ());
-
-/* END i18n.js */
 /* TODO: Separate Project-specific data from Source */
 
 /* model.js is where data is stored in a standard form, whatever the serializer */
@@ -1759,14 +1701,14 @@
             var _soundCtl = $(".Ldt-Ctrl-Sound");
             _soundCtl.removeClass("Ldt-Ctrl-Sound-Mute Ldt-Ctrl-Sound-Half Ldt-Ctrl-Sound-Full");
             if (_muted) {        
-                _soundCtl.attr("title", "Activer le son")
+                _soundCtl.attr("title", gettext("Unmute"))
                     .addClass("Ldt-Ctrl-Sound-Mute");    
             } else {
-                _soundCtl.attr("title", "Couper le son")
+                _soundCtl.attr("title", gettext("mute"))
                     .addClass(_vol < .5 ? "Ldt-Ctrl-Sound-Half" : "Ldt-Ctrl-Sound-Full" )
             }
             volBar.slider("value", _muted ? 0 : 100 * _vol);
-            volBar.attr("title",'Volume : ' + Math.floor(100 * _vol) + '%');
+            volBar.attr("title",gettext("Volume:") + Math.floor(100 * _vol) + '%');
         }
     }
     
@@ -1792,14 +1734,14 @@
 
     function onCurrentMediaPlay() {
         $(".Ldt-Ctrl-Play")
-            .attr("title", "Pause")
+            .attr("title", gettext("Pause"))
             .removeClass("Ldt-Ctrl-Play-PlayState")
             .addClass("Ldt-Ctrl-Play-PauseState")
     }
     
     function onCurrentMediaPause() {
         $(".Ldt-Ctrl-Play")
-            .attr("title", "Lecture")
+            .attr("title", gettext("Play"))
             .removeClass("Ldt-Ctrl-Play-PauseState")
             .addClass("Ldt-Ctrl-Play-PlayState")
     }
@@ -2245,22 +2187,22 @@
             '<li class="item-video media" data-media-id="<%= id %>"><div class="media-count-wrap"><span class="media-count"></span></div>'
             + '<img class="thumbnail" src="<%= thumbnail %>" alt="<%= title %>" />'
             + '<div class="video-info"><h3 class="title-video"><%= title %></h3><p class="description"><%= description %></p>'
-            + '<p class="time-length"><%= IriSP.translate("Duration:") %> <span><%= duration.toString() %></span></p></div><div class="media-found-segments"></div></li>'
+            + '<p class="time-length"><%= gettext("Duration:") %> <span><%= duration.toString() %></span></p></div><div class="media-found-segments"></div></li>'
         ),
         segmenttemplate = _.template(
             '<li class="item-video annotation" data-segment-id="<%= annotation.id %>" data-media-id="<%= annotation.getMedia().id %>">'
             + '<img class="thumbnail" src="<%= annotation.thumbnail %>" alt="<%= annotation.getMedia().title %>" />'
             + '<div class="validate <%= annotation.status %>"><div class="validate-tooltip"><ul><li><%= annotation.status_messages.join("</li><li>") %></li></ul></div></div><div class="video-info"><h3 class="title-video"><%= annotation.getMedia().title %></h3>'
             + '<p class="subtitle"><%= annotation.title %></p><p class="duration"><%= annotation.begin.toString() %> - <%= annotation.end.toString() %> (<%= annotation.getDuration().toString() %>)</p>'
-            + '<ul class="tools"><li><a class="edit" href="#" title="<%= IriSP.translate("Edit segment") %>"></a></li><li><a class="bottom" href="#" title="<%= IriSP.translate("Move segment down") %>"></a></li>'
-            + '<li><a class="top" href="#" title="<%= IriSP.translate("Move segment up") %>"></a></li><li><a class="delete" href="#" title="<%= IriSP.translate("Delete segment") %>"></a></li></ul></div></li>'
+            + '<ul class="tools"><li><a class="edit" href="#" title="<%= gettext("Edit segment") %>"></a></li><li><a class="bottom" href="#" title="<%= gettext("Move segment down") %>"></a></li>'
+            + '<li><a class="top" href="#" title="<%= gettext("Move segment up") %>"></a></li><li><a class="delete" href="#" title="<%= gettext("Delete segment") %>"></a></li></ul></div></li>'
         ),
         mediasegmenttemplate = _.template(
             '<div class="media-segment">'
             + '<div class="media-segment-section" style="left:<%= left %>px; width:<%= width %>px; background:<%= color %>; top: <%= top %>px;" data-segment-id="<%= annotation.id %>"></div>'
             + '<div class="popin media-segment-popin" style="left:<%= popleft %>px; top: <%= 5+top %>px;"><div style="left:<%= pointerpos %>px;" class="pointer"></div><div class="popin-content">'
-            + '<h3><%= annotation.title %></h3><a href="#" class="button reprendre-segment" data-segment-id="<%= annotation.id %>"><%= IriSP.translate("Clone segment") %></a>'
-            + '<p><%= IriSP.translate("From:") %> <span><%= annotation.begin.toString() %></span> <%= IriSP.translate("to:") %> <span><%= annotation.end.toString() %></span> (<%= IriSP.translate("duration:") %> <span><%= annotation.getDuration().toString() %></span>)</p>'
+            + '<h3><%= annotation.title %></h3><a href="#" class="button reprendre-segment" data-segment-id="<%= annotation.id %>"><%= gettext("Clone segment") %></a>'
+            + '<p><%= gettext("From:") %> <span><%= annotation.begin.toString() %></span> <%= gettext("to:") %> <span><%= annotation.end.toString() %></span> (<%= gettext("duration:") %> <span><%= annotation.getDuration().toString() %></span>)</p>'
             + '</div></div></div>'
         ),
         mediasegmentlisttemplate = _.template(
@@ -2269,7 +2211,7 @@
         mediafoundtemplate = _.template(
             '<div class="media-segment"><div class="media-segment-section" style="left:<%= left %>px; width:<%= width %>px; background:<%= color %>; top: <%= top %>px;"></div>'
             + '<div class="popin media-found-popin" style="left:<%= popleft %>px; top: <%= 5+top %>px;"><div style="left:<%= pointerpos %>px;" class="pointer"></div><div class="popin-content">'
-            + '<h3><%= title %></h3><a href="#" class="button clone-segment" data-segment-id="<%= annotation.id %>"><%= IriSP.translate("Clone segment") %></a>'
+            + '<h3><%= title %></h3><a href="#" class="button clone-segment" data-segment-id="<%= annotation.id %>"><%= gettext("Clone segment") %></a>'
             + '</div></div></div>'
         ),
         mediafoundlisttemplate = _.template(
@@ -2277,7 +2219,9 @@
         ),
         mashupstatus = '',
         mediasegmentscache = {},
-        addMode, currentMedia, currentSegment;
+        mashupModeAfterSave = false,
+        addMode = false,
+        currentMedia, currentSegment;
         
     IriSP.mashupcore(project, mashup);
     
@@ -2288,19 +2232,19 @@
             validate: function(_s) {
                 return (_s.getDuration() >= 1000);
             },
-            message: "A segment must be at least one second long"
+            message: gettext("A segment must be at least one second long")
         },
         {
             validate: function(_s) {
                 return (_s.getDuration() < 180000);
             },
-            message: "A segment must be at most three minutes long"
+            message: gettext("A segment must be at most three minutes long")
         },
         {
             validate: function(_s) {
-                return (!!_s.title && _s.title !== IriSP.translate("Untitled segment"));
+                return (!!_s.title && _s.title !== gettext("Untitled segment"));
             },
-            message: "A segment must have a title"
+            message: gettext("A segment must have a title")
         }
     ];
     var segmentwarning = [
@@ -2308,13 +2252,13 @@
             validate: function(_s) {
                 return (!!_s.description);
             },
-            message: "A segment should have a description"
+            message: gettext("A segment should have a description")
         },
         {
             validate: function(_s) {
                 return (!!_s.keywords.length);
             },
-            message: "A segment should have tags"
+            message: gettext("A segment should have tags")
         }
     ];
     
@@ -2323,13 +2267,13 @@
             validate: function(_m) {
                 return _m.segments.length > 2;
             },
-            message: "A hashcut must be made from at least three segments"
+            message: gettext("A hashcut must be made from at least three segments")
         },
         {
             validate: function(_m) {
-                return (!!_m.title && _m.title !== IriSP.translate("Untitled Hashcut"));
+                return (!!_m.title && _m.title !== gettext("Untitled Hashcut"));
             },
-            message: "A hashcut must have a title"
+            message: gettext("A hashcut must have a title")
         }
     ];
     var mashupwarning = [
@@ -2337,7 +2281,7 @@
             validate: function(_m) {
                 return !!_m.description
             },
-            message: "A hashcut should have a description"
+            message: gettext("A hashcut should have a description")
         }
     ];
 
@@ -2474,7 +2418,7 @@
         if (!messages.length) {
             messages.push("Your hashcut is valid!");
         }
-        mashupstatus = ' - ' + _(messages).map(IriSP.translate).join('\n - ');
+        mashupstatus = ' - ' + _(messages).join('\n - ');
         
         $(".publier-button").toggleClass("disable", critical);
         
@@ -2579,7 +2523,7 @@
             if (!messages.length) {
                 messages.push("This segment is valid!")
             }
-            currentSegment.status_messages = _(messages).map(IriSP.translate);
+            currentSegment.status_messages = _(messages);
             
             $(".segmentation .validate").removeClass("critical warning valid").addClass(currentSegment.status);
             $(".segmentation .validate-tooltip").html("<ul><li>" + currentSegment.status_messages.join("</li><li>")+"</li></ul>");
@@ -2603,7 +2547,7 @@
                 currentSegment.setMedia(currentMedia.id);
                 currentSegment.setBegin(currentMedia.getCurrentTime());
                 currentSegment.setEnd(Math.min(currentMedia.getCurrentTime() +  180000, currentMedia.duration));
-                currentSegment.title = IriSP.translate("Untitled segment");
+                currentSegment.title = gettext("Untitled segment");
                 currentSegment.color = currentMedia.color;
                 currentSegment.thumbnail = currentMedia.thumbnail;
                 currentSegment.created = new Date();
@@ -2625,8 +2569,8 @@
             if (currentMedia.loaded) {
                 currentMedia.setCurrentTime(currentSegment.begin);
             }
-            $(".add-segment").val(IriSP.translate(addMode ? "Add segment to hashcut" : "Save segment"));
-            $(".create-or-edit").text(IriSP.translate(addMode ? "Create new segment" : "Edit existing segment"));
+            $(".add-segment").val(addMode ? gettext("Add segment to hashcut") : gettext("Save segment"));
+            $(".create-or-edit").text(addMode ? gettext("Create new segment") : gettext("Edit existing segment"));
             $("#segment-title").val(currentSegment.title);
             $("#segment-description").val(currentSegment.description);
             var segment_tags = $("#segment-tags");
@@ -2728,7 +2672,7 @@
         }
     });
     $("#segment-title").on("focus click", function() {
-        if ($(this).val() === IriSP.translate("Untitled segment")) {
+        if ($(this).val() === gettext("Untitled segment")) {
             $(this).val("");
         }
     });
@@ -2752,10 +2696,14 @@
             mashup.trigger("change");
             var segment = mashup.getAnnotation(currentSegment);
             currentSegment = undefined;
-            setMedia(mashup);
-            if (segment) {
-                mashup.setCurrentTime(segment.begin);
-                mashup.trigger("enter-annotation",segment);
+            if (mashupModeAfterSave) {
+                setMedia(mashup);
+                if (segment) {
+                    mashup.setCurrentTime(segment.begin);
+                    mashup.trigger("enter-annotation",segment);
+                }
+            } else {
+                
             }
         }
         return false;
@@ -2857,6 +2805,7 @@
         var currentItem = $(this).parents(".item-video"),
             media = project.getElement(currentItem.attr("data-media-id")),
             segment = project.getElement(currentItem.attr("data-segment-id"));
+        mashupModeAfterSave = !!(currentMedia === mashup);
         currentSegment = segment;
         setMedia(media);
         return false;
@@ -2962,6 +2911,7 @@
     
     $(".mashup-description .edit").click(function() {
         if (mashup.currentAnnotation) {
+            mashupModeAfterSave = !!(currentMedia === mashup);
             currentSegment = mashup.currentAnnotation.annotation;
             setMedia(mashup.currentAnnotation.getMedia());
         }
@@ -2978,7 +2928,7 @@
         currentSegment.setMedia(media.id);
         currentSegment.setBegin(s.begin);
         currentSegment.setEnd(s.end);
-        currentSegment.title = IriSP.translate("Copy of ") + s.title;
+        currentSegment.title = gettext("Copy of ") + s.title;
         currentSegment.description = s.description;
         currentSegment.keywords = s.keywords;
         currentSegment.color = media.color;
@@ -3024,7 +2974,7 @@
     });
     /* Changing Hashcut Title and description */
     
-    mashup.title = IriSP.translate("Untitled Hashcut");
+    mashup.title = gettext("Untitled Hashcut");
     $(".title-video-wrap a").text(mashup.title);
     $("#hashcut-title").val(mashup.title);
     
@@ -3034,7 +2984,7 @@
         mashup.trigger("change");
     });
     $("#hashcut-title").on("focus click", function() {
-        if ($(this).val() === IriSP.translate("Untitled Hashcut")) {
+        if ($(this).val() === gettext("Untitled Hashcut")) {
             $(this).val("");
         }
     });
@@ -3052,14 +3002,14 @@
     /* Publication */
    
     function onLeave() {
-        return IriSP.translate("You haven't published your hashcut yet.\nIf you leave this page, it will be lost");
+        return gettext("You haven't published your hashcut yet.\nIf you leave this page, it will be lost.");
     }
     
     $(window).on("beforeunload", onLeave);
    
     $(".publier-button").click(function() {
         if ($(this).hasClass("disable")) {
-            alert(IriSP.translate("The mashup can't be published because:")+"\n\n"+mashupstatus);
+            alert(gettext("The hashcut can't be published because:")+"\n\n"+mashupstatus);
             return false;
         }
         var postproject = directory.newLocalSource(),
@@ -3118,7 +3068,7 @@
                 document.location.href = destination;
             },
             error: function(jqXHR, textStatus, errorThrown){
-                alert(IriSP.translate("Server error\nYour hashcut couldn't be published"));
+                alert(gettext("Server error\nYour hashcut couldn't be published"));
                 waitscreen.remove();
             }
         });
@@ -3242,8 +3192,8 @@
             + '<div class="media-segment-section" style="left:<%= left %>px; width:<%= width %>px; background:<%= color %>; top: <%= top %>px;" data-segment-id="<%= annotation.id %>"></div>'
             + '<div class="popin media-segment-popin" style="left:<%= popleft %>px; top: <%= 5+top %>px;"><div style="left:<%= pointerpos %>px;" class="pointer"></div><div class="popin-content">'
             + '<h3><%= annotation.title %></h3>'
-            + '<p><%= IriSP.translate("From:") %> <span><%= annotation.begin.toString() %></span> <%= IriSP.translate("to:") %> <span><%= annotation.end.toString() %></span> (<%= IriSP.translate("duration:") %> <span><%= annotation.getDuration().toString() %></span>)</p>'
-            + '<p class="mashup-link"><%= IriSP.translate("From hashcut:") %> <a href="<%= IriSP.endpoints.hashcut_page + annotation.project_id %>"></a></p>'
+            + '<p><%= gettext("From:") %> <span><%= annotation.begin.toString() %></span> <%= gettext("to:") %> <span><%= annotation.end.toString() %></span> (<%= gettext("duration:") %> <span><%= annotation.getDuration().toString() %></span>)</p>'
+            + '<p class="mashup-link"><%= gettext("From hashcut:") %> <a href="<%= IriSP.endpoints.hashcut_page + annotation.project_id %>"></a></p>'
             + '</div></div></div>'
         ),
         segmentlisttemplate = _.template(
--- a/src/hashcut/static/hashcut/js/social.js	Tue Dec 04 13:31:01 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-(function() {
-
-var uid = 0;
-
-window.social = function(opts) {
-    
-    var opts = opts || {};
-    opts.sel = opts.sel || $(".Ldt-Social");
-    opts.url = opts.url || document.location.href;
-    
-    if (opts.swf) {
-        ZeroClipboard.setMoviePath(opts.swf);
-    }
-    
-    var text = opts.sel.find("title").text(),
-        clipId = "Social-Clip-" + (++uid),
-        clip;
-
-    opts.sel.find(".Ldt-Social-CopyBtn").attr("id", clipId);
-
-    opts.sel.find(".Ldt-Social-Url").click(function() {
-        var _pop = opts.sel.find(".Ldt-Social-UrlPop");
-        _pop.toggle();
-        if (_pop.is(":visible")) {
-            if (typeof clip == "undefined") {
-                clip = new ZeroClipboard.Client();
-                clip.setHandCursor( true );
-                clip.glue(clipId);
-                
-                clip.addEventListener( 'onMouseUp', function() {
-                    _pop.hide();
-                    clip.hide();
-                });
-            }
-            clip.show();
-            clip.setText( opts.url );
-            opts.sel.find(".Ldt-Social-Input").val(opts.url).focus();
-        } else {
-            clip.hide();
-        }
-        return false;
-    });
-    opts.sel.find(".Ldt-Social-Input").focus(function() {
-        this.select();
-    });
-    opts.sel.find(".Ldt-Social-Ext").click(function() {
-        window.open(
-            opts.sel.find(this).attr("href"),
-            "_blank",
-            "height=300,width=450,left=100,top=100,toolbar=0,menubar=0,status=0,location=0");
-        return false;
-    });
-    
-    opts.sel.find(".Ldt-Social-Fb").attr("href", "http://www.facebook.com/share.php?" + $.param({ u: opts.url, t: text }));
-    opts.sel.find(".Ldt-Social-Twitter").attr("href", "https://twitter.com/intent/tweet?" + $.param({ url: opts.url, text: text }));
-    opts.sel.find(".Ldt-Social-Gplus").attr("href", "https://plus.google.com/share?" + $.param({ url: opts.url, title: text }));
-    opts.sel.find(".Ldt-Social-Mail").attr("href", "mailto:?" + $.param({ subject: text, body: text + ": " + opts.url }));
-}
-}());
-/* END social.js */
--- a/src/hashcut/templates/mashup_all_mashups.html	Tue Dec 04 13:31:01 2012 +0100
+++ b/src/hashcut/templates/mashup_all_mashups.html	Tue Dec 04 18:59:07 2012 +0100
@@ -19,9 +19,9 @@
         </div>
         <div class="profil-wrap">
             <ul>
-                <li><a href="{% url mashup_home branding=branding %}" class="all-hashcut">Accueil</a></li>
-                <li><a href="{% url mashup_edit branding=branding %}" class="new-hashcut">Créer un Hashcut</a></li>
-                <li><a href="#user" class="my-profil open-popin">Mon profil</a></li>
+                <li><a href="{% url mashup_home branding=branding %}" class="all-hashcut">{% trans "Home" %}</a></li>
+                <li><a href="{% url mashup_edit branding=branding %}" class="new-hashcut">{% trans "New hashcut" %}</a></li>
+                <li><a href="#user" class="my-profil open-popin">{% trans "My profile" %}</a></li>
             </ul>
         </div>
     </div><!-- header -->
--- a/src/hashcut/templates/mashup_content.html	Tue Dec 04 13:31:01 2012 +0100
+++ b/src/hashcut/templates/mashup_content.html	Tue Dec 04 18:59:07 2012 +0100
@@ -3,10 +3,38 @@
 {% load i18n %}
 {% load analytics %}
 {% load thumbnail %}
-    {% block title %}Lecture du média '{{content.title}}'{% endblock %}   
+    {% block title %}{% blocktrans with title=content.title %}Playing video {{title}}{% endblocktrans %}{% endblock %}   
     {% block css_page %}
     <link rel="stylesheet" href="{% static 'hashcut' %}/{{branding}}/css/players.css" />
-    {% endblock %} 
+    {% endblock %}
+    
+    {% block js_import %}
+    {{block.super}}
+    <script type="text/javascript" src="{% static 'hashcut/lib/underscore-min.js' %}"></script>
+    <script type="text/javascript" src="{% static 'hashcut/lib/popcorn-complete.min.js' %}"></script>
+    <script type="text/javascript" src="{% static 'hashcut/js/hashcut.js' %}"></script>
+    <script type="text/javascript">
+        IriSP.endpoints = {
+            content: "{% url api_dispatch_list api_name='1.0' resource_name='contents' %}",
+            project: "{% url api_dispatch_list api_name='1.0' resource_name='projects' %}",
+            segment: "{% url api_dispatch_list api_name='1.0' resource_name='segments' %}",
+            ldt: "{% url projectjson_id id='' %}",
+            hashcut_page: "{% url mashup_hashcut branding=branding ldt_id='' %}"
+        };
+        
+        $(function() {
+            IriSP.video_url_transform = function(oldurl) {
+                var newurl = oldurl.replace(/mp4:/i,'');
+                newurl = newurl.replace(/ddc_player\//i,'');
+                newurl = newurl.replace(/rtmp/i,'http');
+                return newurl;
+            };
+            IriSP.mediaplayer({
+                id: "{{ctt_id}}"
+            });
+        });
+    </script>
+    {% endblock %}
 
 {% block wrap_header %}
 <div class="wrap-header">  
@@ -15,17 +43,17 @@
         {% include 'partial/hashcut_logo.html' %}
         <div class="title-video-wrap">
             <p class="title-video" href="#">
-                <span class="category">Média</span>
+                <span class="category">{% trans "Video" %}</span>
                 <span class="separator">&raquo;</span>
                 {{content.title}}
             </p>
         </div>
-        {% include 'partial/hashcut_social.html' %}
+        <div class="Ldt-Social"></div>
         <div class="profil-wrap">
             <ul>
-                <li><a href="{% url mashup_home branding=branding %}" class="all-hashcut">Accueil</a></li>
-                <li><a href="{% url mashup_edit branding=branding %}" class="new-hashcut">Créer un Hashcut</a></li>
-                <li><a href="#user" class="my-profil open-popin">Mon profil</a></li>
+                <li><a href="{% url mashup_home branding=branding %}" class="all-hashcut">{% trans "Home" %}</a></li>
+                <li><a href="{% url mashup_edit branding=branding %}" class="new-hashcut">{% trans "New hashcut" %}</a></li>
+                <li><a href="#user" class="my-profil open-popin">{% trans "My profile" %}</a></li>
             </ul>
         </div>
     </div><!-- header -->
@@ -36,7 +64,6 @@
 <div class="content clearfix">
 
     <div class="left-content">
-        <h2>Lire le Média</h2>
         <div class="bloc-video">
             <div class="video">
                 <div class="video-wait"></div>
@@ -49,26 +76,20 @@
 
             <div class="Ldt-Ctrl">
                 <div class="Ldt-Ctrl-Left">
-                    <div title="Lecture" class="Ldt-Ctrl-button Ldt-Ctrl-Play Ldt-Ctrl-Play-PlayState"></div>
+                    <div title="{% trans 'Play/Pause' %}" class="Ldt-Ctrl-button Ldt-Ctrl-Play Ldt-Ctrl-Play-PlayState"></div>
                     <div class="Ldt-Ctrl-spacer"></div>
-                    <div class="Ldt-Ctrl-InOutBlock">
-                        <div title="Débuter le segment ici" class="Ldt-Ctrl-button Ldt-Ctrl-SetIn"></div>
-                        <div class="Ldt-Ctrl-spacer"></div>
-                        <div title="Finir le segment ici" class="Ldt-Ctrl-button Ldt-Ctrl-SetOut"></div>
-                        <div class="Ldt-Ctrl-spacer"></div>
-                    </div>
                 </div>
                 <div class="Ldt-Ctrl-Right">
                    <div class="Ldt-Ctrl-spacer"></div>
                    <div class="Ldt-Ctrl-Time">
-                       <div title="Temps écoulé" class="Ldt-Ctrl-Time-Elapsed">00:00</div>
+                       <div class="Ldt-Ctrl-Time-Elapsed" title="{% trans 'Elapsed time' %}">00:00</div>
                        <div class="Ldt-Ctrl-Time-Separator">/</div>
-                       <div title="Temps total" class="Ldt-Ctrl-Time-Total">00:00</div>
+                       <div class="Ldt-Ctrl-Time-Total" title="{% trans 'Total time' %}">00:00</div>
                    </div>
                    <div class="Ldt-Ctrl-spacer"></div>
-                   <div title="Couper le son" class="Ldt-Ctrl-button Ldt-Ctrl-Sound Ldt-Ctrl-Sound-Full"></div>
+                   <div class="Ldt-Ctrl-button Ldt-Ctrl-Sound Ldt-Ctrl-Sound-Full" title="{% trans 'Mute/Unmute' %}"></div>
                 </div>
-                <div title="Changer le volume" class="Ldt-Ctrl-Volume-Control">
+                <div class="Ldt-Ctrl-Volume-Control" title="{% trans 'Set volume' %}">
                    <div class="Ldt-Ctrl-Volume-Bar"></div>
                 </div>
             </div>
@@ -79,68 +100,35 @@
     </div><!-- left-content -->
     
     <div class="right-content">
-        <h2>Plus d’informations</h2>
+        <h2>{% trans 'More informations' %}</h2>
         <div class="more-info-wrap">
             <table class="more-info ">
                 <tbody>
                     <tr class="info-title">
-                        <th>Titre :</th>
+                        <th>{% trans 'Title:' %}</th>
                         <td><a href="#">{{content.title}}</a></td>
                     </tr>
                     <tr class="info-duration">
-                        <th>Durée :</th>
+                        <th>{% trans 'Duration:' %}</th>
                         <td></td>
                     </tr>
                     <tr class="info-description">
-                        <th>Description : </th>
+                        <th>{% trans 'Description:' %}</th>
                         <td></td>
                     </tr>
                     <tr class="info-tags">
-                        <th>Tags : </th>
+                        <th>{% trans 'Tags:' %}</th>
                         <td></td>
                     </tr>
                 </tbody>
             </table>
         </div>
         </ul>
-        <h2>Hashcuts utilisant le média</h2>
+        <h2>{% trans 'Hashcuts using this video' %}</h2>
         <ul class="list-video">
             
         </ul>
     </div><!-- right-content -->
 </div><!-- content -->
 {% endblock %}
-<!-- JavaScript -->
-{% block js_import %}
-<script type="text/javascript" src="{% static 'hashcut/lib/jquery.min.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/lib/jquery-ui.min.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/js/common.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/lib/underscore-min.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/lib/popcorn-complete.min.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/js/hashcut.js' %}"></script>
-<script type="text/javascript">
-    IriSP.endpoints = {
-   		content: "{% url api_dispatch_list api_name='1.0' resource_name='contents' %}",
-        project: "{% url api_dispatch_list api_name='1.0' resource_name='projects' %}",
-        segment: "{% url api_dispatch_list api_name='1.0' resource_name='segments' %}",
-        ldt: "{% url projectjson_id id='' %}",
-        hashcut_page: "{% url mashup_hashcut branding=branding ldt_id='' %}"
-    };
-    
-    $(function() {
-    	IriSP.video_url_transform = function(oldurl) {
-            var newurl = oldurl.replace(/mp4:/i,'');
-            newurl = newurl.replace(/ddc_player\//i,'');
-            newurl = newurl.replace(/rtmp/i,'http');
-            return newurl;
-        };
-        IriSP.mediaplayer({
-            id: "{{ctt_id}}"
-        });
-        social({
-            swf: "{% static 'hashcut/lib/ZeroClipboard.swf' %}"
-        });
-    });
-</script>
-{% endblock %}
 
--- a/src/hashcut/templates/mashup_edit.html	Tue Dec 04 13:31:01 2012 +0100
+++ b/src/hashcut/templates/mashup_edit.html	Tue Dec 04 18:59:07 2012 +0100
@@ -3,12 +3,46 @@
 {% load i18n %}
 {% load analytics %}
 {% load thumbnail %}
-    {% block title %}Création de Hashcut{% endblock %}
+    {% block title %}{% trans "Hashcut editor" %}{% endblock %}
     {% block css_page %}
     <link rel="stylesheet" href="{% static 'hashcut/lib/jquery.tagit.css' %}" />
     <link rel="stylesheet" href="{% static 'hashcut' %}/{{branding}}/css/edition.css" />
     {% endblock %}
 
+    {% block js_import %}
+    {{ block.super }}
+    <script type="text/javascript" src="{% static 'hashcut/lib/tag-it.js' %}"></script>
+    <script type="text/javascript" src="{% static 'hashcut/lib/underscore-min.js' %}"></script>
+    <script type="text/javascript" src="{% static 'hashcut/lib/popcorn-complete.min.js' %}"></script>
+    <script type="text/javascript" src="{% static 'hashcut/js/hashcut.js' %}"></script>
+    <script type="text/javascript">
+        IriSP.endpoints = {
+            content: "{% url api_dispatch_list api_name='1.0' resource_name='contents' %}",
+            //project: "{% url api_dispatch_list api_name='1.0' resource_name='projects' %}",
+            project: "{% url mashup_save branding=branding %}",
+            segment: "{% url api_dispatch_list api_name='1.0' resource_name='segments' %}",
+            ldt: "{% url projectjson_id id='' %}",
+            hashcut_page: "{% url mashup_hashcut branding=branding ldt_id='' %}"
+        };
+        $(function() {
+            IriSP.video_url_transform = function(oldurl) {
+                var newurl = oldurl.replace(/mp4:/i,'');
+                newurl = newurl.replace(/ddc_player\//i,'');
+                newurl = newurl.replace(/rtmp/i,'http');
+                return newurl;
+            };
+            var hashcut = IriSP.editor({
+                creator: "{{user.username}}",
+                csrf_token: "{{csrf_token}}",
+                filter: {
+                    tags__icontains: "{{branding}}"
+                }
+           });
+           $(".change-account").remove();
+        });
+    </script>
+    {% endblock %}
+
 {% block wrap_header %}
 <div class="wrap-header"> 
     <div class="header">
@@ -19,11 +53,11 @@
             <div class="popin-content">
                 <form class="clearfix" action="#" id="hashcut-form" method="">
                     <p>
-                        <label for="hashcut-title">Titre :</label>
-                        <input type="text" id="hashcut-title" name="" value="Hashcut sans titre" />
+                        <label for="hashcut-title">{% trans "Title:" %}</label>
+                        <input type="text" id="hashcut-title" name="" value="{% trans 'Untitled Hashcut' %}" />
                     </p>
                     <p>
-                        <label for="hashcut-description">Description :</label>
+                        <label for="hashcut-description">{% trans "Description:" %}</label>
                         <textarea name="" id="hashcut-description"></textarea>
                     </p>
                 </form>
@@ -35,14 +69,14 @@
     
         <div class="title-video-wrap">
             <p class="title-video">
-                <a title="Modifier le titre et la description" class="open-popin" href="#update-title">Hashcut sans titre</a>
+                <a title="Modifier le titre et la description" class="open-popin" href="#update-title">{% trans "Untitled Hashcut" %}</a>
             </p>
-            <p class="time-length">Durée: <span class="mashup-total-duration">00:00</span></p>
+            <p class="time-length">{% trans "Duration:" %} <span class="mashup-total-duration">00:00</span></p>
         </div>
         <div class="profil-wrap">
 	        <ul class="space-top">
-	            <li><a href="{% url mashup_home branding=branding %}" class="all-hashcut">Accueil</a></li>
-	            <li><a href="#user" class="my-profil open-popin">Mon profil</a></li>
+	            <li><a href="{% url mashup_home branding=branding %}" class="all-hashcut">{% trans "Home" %}</a></li>
+	            <li><a href="#user" class="my-profil open-popin">{% trans "My profile" %}</a></li>
 	        </ul>
 	    </div>
     </div><!-- header -->
@@ -54,8 +88,8 @@
 
     <div class="col-left">
         <div class="left-head">
-            <h2>Sélectionner les vidéos</h2>
-            <input type="text" name="" placeholder="Rechercher une vidéo" />
+            <h2>{% trans "Select videos" %}</h2>
+            <input type="text" name="" placeholder="{% trans 'Search videos' %}" />
         </div>
         <ul class="list-video">
 
@@ -65,18 +99,18 @@
     <div class="col-middle empty-mode">
         
         <div class="col-middle-header">
-            <a href="#" class="tab tab-segment">Segmenter <span class="tab-media-title"></span></a>
-            <a href="#" class="tab tab-pvw">Prévisualiser et Publier</a>
+            <a href="#" class="tab tab-segment">{% trans "Segment" %} <span class="tab-media-title"></span></a>
+            <a href="#" class="tab tab-pvw">{% trans "Preview and publish" %}</a>
         </div>
         
         <div class="video">
             <div class="tutorial">
-                <h2>Créer un Hashcut, c’est facile !</h2>
+                <h2>{% trans "Creating a hashcut is easy!" %}</h2>
                 <ol>
-                    <li>Commencez par choisir une vidéo dans le volet de gauche</li>
-                    <li>Créez un segment dans la vidéo et profitez-en pour annoter votre segment</li>
-                    <li>Ajoutez votre segment à la liste, réorganisez les segments entre eux</li>
-                    <li>Rajoutez quelques commentaires à votre Hashcut. Vous êtes prêts à publier !</li>
+                    <li>{% trans "Start by selecting a video in the left hand column." %}</li>
+                    <li>{% trans "Create a segment in your video and annotate it." %}</li>
+                    <li>{% trans "Append your segment to the hashcut and reorder the segments" %}</li>
+                    <li>{% trans "Add a few comments to your hashcut. You are ready to publish!" %}</li>
                 </ol>
             </div>
             <div class="video-wait"></div>
@@ -91,26 +125,26 @@
 
             <div class="Ldt-Ctrl">
                 <div class="Ldt-Ctrl-Left">
-                    <div class="Ldt-Ctrl-button Ldt-Ctrl-Play Ldt-Ctrl-Play-PlayState" title="Lecture/Pause"></div>
+                    <div class="Ldt-Ctrl-button Ldt-Ctrl-Play Ldt-Ctrl-Play-PlayState" title="{% trans 'Play/Pause' %}"></div>
                     <div class="Ldt-Ctrl-spacer"></div>
                     <div class="Ldt-Ctrl-InOutBlock">
-                        <div class="Ldt-Ctrl-button Ldt-Ctrl-SetIn" title="Débuter le segment ici"></div>
+                        <div class="Ldt-Ctrl-button Ldt-Ctrl-SetIn" title="{% trans 'Begin segment here' %}"></div>
                         <div class="Ldt-Ctrl-spacer"></div>
-                        <div class="Ldt-Ctrl-button Ldt-Ctrl-SetOut" title="Finir le segment ici"></div>
+                        <div class="Ldt-Ctrl-button Ldt-Ctrl-SetOut" title="{% trans 'End segment here' %}"></div>
                         <div class="Ldt-Ctrl-spacer"></div>
                     </div>
                 </div>
                 <div class="Ldt-Ctrl-Right">
                    <div class="Ldt-Ctrl-spacer"></div>
                    <div class="Ldt-Ctrl-Time">
-                       <div class="Ldt-Ctrl-Time-Elapsed" title="Temps écoulé">00:00</div>
+                       <div class="Ldt-Ctrl-Time-Elapsed" title="{% trans 'Elapsed time' %}">00:00</div>
                        <div class="Ldt-Ctrl-Time-Separator">/</div>
-                       <div class="Ldt-Ctrl-Time-Total" title="Temps total">00:00</div>
+                       <div class="Ldt-Ctrl-Time-Total" title="{% trans 'Total time' %}">00:00</div>
                    </div>
                    <div class="Ldt-Ctrl-spacer"></div>
-                   <div class="Ldt-Ctrl-button Ldt-Ctrl-Sound Ldt-Ctrl-Sound-Full" title="Couper/Activer le son"></div>
+                   <div class="Ldt-Ctrl-button Ldt-Ctrl-Sound Ldt-Ctrl-Sound-Full" title="{% trans 'Mute/Unmute' %}"></div>
                 </div>
-                <div class="Ldt-Ctrl-Volume-Control" title="Changer le volume">
+                <div class="Ldt-Ctrl-Volume-Control" title="{% trans 'Set volume' %}">
                    <div class="Ldt-Ctrl-Volume-Bar"></div>
                 </div>
             </div>
@@ -128,45 +162,45 @@
                         <div class="validate-tooltip"></div>
                     </div>
                     <h2>
-                        <span class="create-or-edit">Créer un nouveau segment</span>
-                        de
+                        <span class="create-or-edit">{% trans 'Create a new segment' %}</span>
+                        {% trans 'from' %}
                         <span class="time-tangle tangle-start"></span>
-                        à
+                        {% trans 'to' %}
                         <span class="time-tangle tangle-end"></span>
-                        (durée:
+                        ({% trans 'duration:' %}
                         <span class="time-tangle tangle-duration"></span>)
                     </h2>
                     <form action="#" id="segment-form">
                         <div class="form-segment-left">
                             <p>
-                                <label for="segment-title">Titre :</label>
+                                <label for="segment-title">{% trans 'Title:' %}</label>
                                 <input type="text" id="segment-title" />
                             </p>
                             <p>
-                                <label for="segment-tags">Tags :</label>
+                                <label for="segment-tags">{% trans 'Tags:' %}</label>
                                 <ul id="segment-tags"></ul>
                             </p>
                         </div>
                         <div class="form-segment-right">
                             <p>
-                                <label for="segment-description">Description :</label>
+                                <label for="segment-description">{% trans 'Description:' %}</label>
                                 <textarea id="segment-description"></textarea>
                             </p>
                         </div>
-                        <input class="button add-segment" type="submit" value="Ajouter au Hashcut" />
+                        <input class="button add-segment" type="submit" value="{% trans 'Add to hashcut' %}" />
 
                     </form>
                 </div>
             </div><!-- popin segmentation -->
             
             <div class="media-segments self-media-segments">
-                <h2>Mes segments sur ce média :</h2>
+                <h2>{% trans 'My segments on this media:' %}</h2>
                 <div class="media-segments-list">
                 </div>
             </div>
             
             <div class="media-segments other-media-segments">
-                <h2>Segments existants sur ce média :</h2>
+                <h2>{% trans 'Existing segments on this media:' %}</h2>
                 <div class="media-segments-list">
                 </div>
             </div>
@@ -203,15 +237,15 @@
                         <table>
                             <tbody>
                                 <tr>
-                                    <th>Extrait de :</th>
+                                    <th>{% trans 'Excerpt from:' %}</th>
                                     <td><span class="annotation-media-title"></span> (<span class="annotation-time annotation-begin"></span> - <span class="annotation-time annotation-end"></span>)</td>
                                 </tr>
                                 <tr>
-                                    <th>Description :</th>
+                                    <th>{% trans 'Description:' %}</th>
                                     <td><span class="annotation-description"></span></td>
                                 </tr>
                                 <tr>
-                                    <th>Tags :</th>
+                                    <th>{% trans 'Tags:' %}</th>
                                     <td><span class="annotation-tags"></span></td>
                                 </tr>
                             </tbody>
@@ -227,9 +261,9 @@
             <div class="validate critical">
                 <div class="validate-tooltip"></div>
             </div>
-            <h2>Liste des segments</h2>
+            <h2>{% trans 'Segment list' %}</h2>
             <div class="frise mashup-frise">
-                <p class="aucun-segment">Aucun segment</p>
+                <p class="aucun-segment">{% trans 'No segment' %}</p>
                 <div class="frise-overflow">
                     <div class="frise-segments">
                     </div>
@@ -251,38 +285,4 @@
 
 </div><!-- content -->
 {% endblock %}
-<!-- JavaScript -->
-{% block js_import %}
-{{ block.super }}
-<script type="text/javascript" src="{% static 'hashcut/lib/tag-it.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/lib/underscore-min.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/lib/popcorn-complete.min.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/js/hashcut.js' %}"></script>
-<script type="text/javascript">
-    IriSP.endpoints = {
-        content: "{% url api_dispatch_list api_name='1.0' resource_name='contents' %}",
-        //project: "{% url api_dispatch_list api_name='1.0' resource_name='projects' %}",
-        project: "{% url mashup_save branding=branding %}",
-        segment: "{% url api_dispatch_list api_name='1.0' resource_name='segments' %}",
-        ldt: "{% url projectjson_id id='' %}",
-        hashcut_page: "{% url mashup_hashcut branding=branding ldt_id='' %}"
-    };
-    $(function() {
-   	    IriSP.video_url_transform = function(oldurl) {
-   		    var newurl = oldurl.replace(/mp4:/i,'');
-   		    newurl = newurl.replace(/ddc_player\//i,'');
-   		    newurl = newurl.replace(/rtmp/i,'http');
-   		    return newurl;
-   		};
-        var hashcut = IriSP.editor({
-            creator: "{{user.username}}",
-            csrf_token: "{{csrf_token}}",
-            filter: {
-                tags__icontains: "{{branding}}"
-            }
-       });
-       $(".change-account").remove();
-    });
-</script>
-{% endblock %}
 
--- a/src/hashcut/templates/mashup_hashcut.html	Tue Dec 04 13:31:01 2012 +0100
+++ b/src/hashcut/templates/mashup_hashcut.html	Tue Dec 04 18:59:07 2012 +0100
@@ -3,11 +3,39 @@
 {% load i18n %}
 {% load analytics %}
 {% load thumbnail %}
-    {% block title %}Lecture du Hashcut '{{proj.title}}'{% endblock %}
+    {% block title %}{% blocktrans with title=proj.title %}Playing hashcut {{title}}{% endblocktrans %}{% endblock %}
     {% block css_page %}
     <link rel="stylesheet" href="{% static 'hashcut' %}/{{branding}}/css/players.css" />
     {% endblock %}
 
+    {% block js_import %}
+    {{ block.super }}
+    <script type="text/javascript" src="{% static 'hashcut/lib/underscore-min.js' %}"></script>
+    <script type="text/javascript" src="{% static 'hashcut/lib/popcorn-complete.min.js' %}"></script>
+    <script type="text/javascript" src="{% static 'hashcut/js/hashcut.js' %}"></script>
+    <script type="text/javascript">
+        IriSP.endpoints = {
+            content: "{% url api_dispatch_list api_name='1.0' resource_name='contents' %}",
+            project: "{% url api_dispatch_list api_name='1.0' resource_name='projects' %}",
+            segment: "{% url api_dispatch_list api_name='1.0' resource_name='segments' %}",
+            ldt: "{% url projectjson_id id='' %}",
+            media_page: "{% url mashup_content branding=branding ctt_id='' %}"
+        };
+        
+        $(function() {
+            IriSP.video_url_transform = function(oldurl) {
+                var newurl = oldurl.replace(/mp4:/i,'');
+                newurl = newurl.replace(/ddc_player\//i,'');
+                newurl = newurl.replace(/rtmp/i,'http');
+                return newurl;
+            };
+            IriSP.mashupplayer({
+                id: "{{ldt_id}}"
+            });
+        });
+    </script>
+    {% endblock %}
+
 {% block wrap_header %}
 <div class="wrap-header">  
     <div class="header">
@@ -15,12 +43,12 @@
         {% include 'partial/hashcut_logo.html' %}
         <div class="title-video-wrap">
             <p class="title-video" href="#">
-                <span class="category">Hashcut</span>
+                <span class="category">{% trans 'Hashcut' %}</span>
                 <span class="separator">&raquo;</span>
                 {{proj.title}}
             </p>
         </div>
-        {% include 'partial/hashcut_social.html' %}
+        <div class="Ldt-Social"></div>
         <div class="profil-wrap">
             <ul>
                 <li><a href="{% url mashup_home branding=branding %}" class="all-hashcut">Accueil</a></li>
@@ -35,7 +63,6 @@
 {% block content %}
 <div class="content clearfix">
     <div class="left-content">
-        <h2>Lire le Hashcut</h2>
         <div class="bloc-video">
             <div class="video">
                 <div class="video-wait"></div>
@@ -48,26 +75,20 @@
 
             <div class="Ldt-Ctrl">
                 <div class="Ldt-Ctrl-Left">
-                    <div title="Lecture" class="Ldt-Ctrl-button Ldt-Ctrl-Play Ldt-Ctrl-Play-PlayState"></div>
+                    <div title="{% trans 'Play/Pause' %}" class="Ldt-Ctrl-button Ldt-Ctrl-Play Ldt-Ctrl-Play-PlayState"></div>
                     <div class="Ldt-Ctrl-spacer"></div>
-                    <div class="Ldt-Ctrl-InOutBlock">
-                        <div title="Débuter le segment ici" class="Ldt-Ctrl-button Ldt-Ctrl-SetIn"></div>
-                        <div class="Ldt-Ctrl-spacer"></div>
-                        <div title="Finir le segment ici" class="Ldt-Ctrl-button Ldt-Ctrl-SetOut"></div>
-                        <div class="Ldt-Ctrl-spacer"></div>
-                    </div>
                 </div>
                 <div class="Ldt-Ctrl-Right">
                    <div class="Ldt-Ctrl-spacer"></div>
                    <div class="Ldt-Ctrl-Time">
-                       <div title="Temps écoulé" class="Ldt-Ctrl-Time-Elapsed">00:00</div>
+                       <div class="Ldt-Ctrl-Time-Elapsed" title="{% trans 'Elapsed time' %}">00:00</div>
                        <div class="Ldt-Ctrl-Time-Separator">/</div>
-                       <div title="Temps total" class="Ldt-Ctrl-Time-Total">00:00</div>
+                       <div class="Ldt-Ctrl-Time-Total" title="{% trans 'Total time' %}">00:00</div>
                    </div>
                    <div class="Ldt-Ctrl-spacer"></div>
-                   <div title="Couper le son" class="Ldt-Ctrl-button Ldt-Ctrl-Sound Ldt-Ctrl-Sound-Full"></div>
+                   <div class="Ldt-Ctrl-button Ldt-Ctrl-Sound Ldt-Ctrl-Sound-Full" title="{% trans 'Mute/Unmute' %}"></div>
                 </div>
-                <div title="Changer le volume" class="Ldt-Ctrl-Volume-Control">
+                <div class="Ldt-Ctrl-Volume-Control" title="{% trans 'Set volume' %}">
                    <div class="Ldt-Ctrl-Volume-Bar"></div>
                 </div>
             </div>
@@ -94,15 +115,15 @@
                     <table>
                         <tbody>
                             <tr>
-                                <th>Extrait de :</th>
+                                <th>{% trans 'Excerpt from:' %}</th>
                                 <td><span class="annotation-media-title"></span> (<span class="annotation-time annotation-begin"></span> - <span class="annotation-time annotation-end"></span>)</td>
                             </tr>
                             <tr>
-                                <th>Description :</th>
+                                <th>{% trans 'Description:' %}</th>
                                 <td><span class="annotation-description"></span></td>
                             </tr>
                             <tr>
-                                <th>Tags :</th>
+                                <th>{% trans 'Tags:' %}</th>
                                 <td><span class="annotation-tags"></span></td>
                             </tr>
                         </tbody>
@@ -113,65 +134,34 @@
     </div><!-- left-content -->
     
     <div class="right-content">
-        <h2>Plus d’informations</h2>
+        <h2>{% trans 'More information' %}</h2>
         <div class="more-info-wrap">
             <table class="more-info ">
                 <tbody>
                     <tr class="info-title">
-                        <th>Titre :</th>
+                        <th>{% trans 'Title:' %}</th>
                         <td>{{proj.title}}</td>
                     </tr>
                     <tr class="info-duration">
-                        <th>Durée :</th>
+                        <th>{% trans 'Duration:' %}</th>
                         <td></td>
                     </tr>
                     <tr class="info-author">
-                        <th>Auteur : </th>
+                        <th>{% trans 'Author:' %}</th>
                         <td><a href="{% url mashup_profile branding=branding username=proj.created_by %}">{{proj.created_by}}</a></td>
                     </tr>
                     <tr class="info-description">
-                        <th>Description : </th>
+                        <th>{% trans 'Description:' %}</th>
                         <td></td>
                     </tr>
                 </tbody>
             </table>
         </div>
-        <h2>Médias utilisés dans le Hashcut</h2>
+        <h2>{% trans 'Videos used in this Hashcut' %}</h2>
         <ul class="list-video">
             
         </ul>
     </div><!-- right-content -->
 </div><!-- content -->
 {% endblock %}
-<!-- JavaScript -->
-{% block js_import %}
-{{ block.super }}
-<script type="text/javascript" src="{% static 'hashcut/lib/underscore-min.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/lib/popcorn-complete.min.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/js/hashcut.js' %}"></script>
-<script type="text/javascript">
-    IriSP.endpoints = {
-   		content: "{% url api_dispatch_list api_name='1.0' resource_name='contents' %}",
-        project: "{% url api_dispatch_list api_name='1.0' resource_name='projects' %}",
-        segment: "{% url api_dispatch_list api_name='1.0' resource_name='segments' %}",
-        ldt: "{% url projectjson_id id='' %}",
-        media_page: "{% url mashup_content branding=branding ctt_id='' %}"
-    };
-    
-    $(function() {
-    	IriSP.video_url_transform = function(oldurl) {
-            var newurl = oldurl.replace(/mp4:/i,'');
-            newurl = newurl.replace(/ddc_player\//i,'');
-            newurl = newurl.replace(/rtmp/i,'http');
-            return newurl;
-        };
-        IriSP.mashupplayer({
-            id: "{{ldt_id}}"
-        });
-        social({
-            swf: "{% static 'hashcut/lib/ZeroClipboard.swf' %}"
-        });
-    });
-</script>
-{% endblock %}
 
--- a/src/hashcut/templates/mashup_home.html	Tue Dec 04 13:31:01 2012 +0100
+++ b/src/hashcut/templates/mashup_home.html	Tue Dec 04 18:59:07 2012 +0100
@@ -12,7 +12,7 @@
     <meta name="description" content="Interface d'édition de Hashcuts (Mashups vidéo cliquables)" />
     <meta name="copyright" content="Institut de Recherche et d'Innovation (IRI), 2012" />
     <meta name="author" content="Anthony Ly, Raphaël Velt, Thibaut Cavalié" />
-    <title>Hashcut {{branding}} &raquo; {% block title %}Accueil{% endblock %}</title>
+    <title>{% trans "Hashcut" %} {{branding}} &raquo; {% block title %}{% trans "Home" %}{% endblock %}</title>
     {% block css_declaration %}
     {% endblock %}
     
@@ -25,8 +25,27 @@
     <link rel="stylesheet" href="{% static 'hashcut' %}/{{branding}}/css/home.css" />
     {% endblock %}
     
-    {% block js_declaration %}
+    {% block js_import %}
+    
+    <script type="text/javascript" src="{% static 'hashcut/lib/jquery.min.js' %}"></script>
+    <script type="text/javascript" src="{% static 'hashcut/lib/jquery-ui.min.js' %}"></script>
+    <script type="text/javascript" src="{% static 'hashcut/js/common.js' %}"></script>
+    <script type="text/javascript" src="{% url jsi18n 'hashcut' %}"></script>
+    {% if not user.is_authenticated %}
+    <script type="text/javascript">
+    /* Forbid access to edit page if not connected */
+    $(function() {
+        $("a[href='{% url mashup_edit branding=branding %}']").click(function() {
+            $("#user").show();
+            return false;
+        });
+    });
+    
+    </script>
+    
+    {% endif %}
     {% endblock %}
+    
 {% endblock %}
 </head>
 <body>
@@ -39,11 +58,11 @@
         {% include 'partial/mashup_popin_user.html' %}
         {% include 'partial/hashcut_logo.html' %}
         <div class="title-header">
-            <h2><a href="{% url mashup_edit branding=branding %}">Créer un hashcut !</a></h2>
+            <h2><a href="{% url mashup_edit branding=branding %}">{% trans "Create a new hashcut!" %}</a></h2>
         </div>
         <div class="profil-wrap">
             <ul class="space-top-2">
-                <li><a href="#user" class="my-profil open-popin">Mon profil</a></li>
+                <li><a href="#user" class="my-profil open-popin">{% trans "My profile" %}</a></li>
             </ul>
         </div>
     </div><!-- header -->
@@ -56,59 +75,59 @@
         {% block content %}
         <div class="content">
             <div class="left-content">
-                <h2>Hashcuts à la Une</h2>
+                <h2>{% trans "Featured Hashcuts" %}</h2>
                 <div class="hashcut-video-wrap news">
                     <div class="video-item">
                         {% if m1 %}
                         <a href="{% url mashup_hashcut branding=branding ldt_id=m1.project.ldt_id %}" class="screenshot">{% thumbnail m1.project.image "302x202" crop="center" format="PNG" as im %}<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" alt=""/>{% empty %}&nbsp;{% endthumbnail %}</a>
-                        <h3><a class="title" href="{% url mashup_hashcut branding=branding ldt_id=m1.project.ldt_id %}">{{ m1.project.title }}</a> par <a class="author" href="{% url mashup_profile branding=branding username=m1.creator %}">{{ m1.creator }}</a><!-- | <span class="duration">02:24</span> --></h3>
+                        <h3><a class="title" href="{% url mashup_hashcut branding=branding ldt_id=m1.project.ldt_id %}">{{ m1.project.title }}</a> {% trans "by" %} <a class="author" href="{% url mashup_profile branding=branding username=m1.creator %}">{{ m1.creator }}</a><!-- | <span class="duration">02:24</span> --></h3>
                         {% endif %}
                     </div>
                     <div class="video-item">
                         {% if m2 %}
                         <a href="{% url mashup_hashcut branding=branding ldt_id=m2.project.ldt_id %}" class="screenshot">{% thumbnail m2.project.image "302x202" crop="center" format="PNG" as im %}<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" alt=""/>{% empty %}&nbsp;{% endthumbnail %}</a>
-                        <h3><a class="title" href="{% url mashup_hashcut branding=branding ldt_id=m2.project.ldt_id %}">{{ m2.project.title }}</a> par <a class="author" href="{% url mashup_profile branding=branding username=m2.creator %}">{{ m2.creator }}</a><!-- | <span class="duration">02:24</span> --></h3>
+                        <h3><a class="title" href="{% url mashup_hashcut branding=branding ldt_id=m2.project.ldt_id %}">{{ m2.project.title }}</a> {% trans "by" %} <a class="author" href="{% url mashup_profile branding=branding username=m2.creator %}">{{ m2.creator }}</a><!-- | <span class="duration">02:24</span> --></h3>
                         {% endif %}
                     </div>
                 </div>
 
-                <h2>Derniers Hashcuts</h2>
+                <h2>{% trans "Newest Hashcuts" %}</h2>
                 <div class="hashcut-video-wrap last">
                     {% for m in mashups %}
                     <div class="video-item">
                         <a href="{% url mashup_hashcut branding=branding ldt_id=m.project.ldt_id %}" class="screenshot">{% thumbnail m.project.image "142x95" crop="center" format="PNG" as im %}<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" alt=""/>{% empty %}&nbsp;{% endthumbnail %}</a>
-                        <h3><a class="title" href="{% url mashup_hashcut branding=branding ldt_id=m2.project.ldt_id %}">{% if m.project.title|length > 30 %}{{m.project.title|slice:":30"}}...{% else %}{{m.project.title}}{% endif %}</a> par <a class="author" href="{% url mashup_profile branding=branding username=m.creator %}">{{ m.creator }}</a><!-- | <span class="duration">02:24</span> --></h3>
+                        <h3><a class="title" href="{% url mashup_hashcut branding=branding ldt_id=m2.project.ldt_id %}">{% if m.project.title|length > 30 %}{{m.project.title|slice:":30"}}...{% else %}{{m.project.title}}{% endif %}</a> {% trans "by" %} <a class="author" href="{% url mashup_profile branding=branding username=m.creator %}">{{ m.creator }}</a><!-- | <span class="duration">02:24</span> --></h3>
                     </div>
                     {% endfor %}
                 </div>
                 
                 <div class="pagination">
-                    <a href="{% url mashup_all branding=branding %}">Tous les Hashcuts</a>
+                    <a href="{% url mashup_all branding=branding %}">{% trans 'All Hashcuts' %}</a>
                 </div>
            
             </div><!-- left-content -->
             <div class="right-content">
                 <div class="definition">
-                    <h2>Hashcuts ?</h2>
+                    <h2>{% trans "What's a Hashcut?" %}</h2>
                     <p>Un <strong>Hashcut</strong> est à la fois une <a href="http://fr.wikipedia.org/wiki/Hypervid%C3%A9o" target="_blank">Hypervidéo</a> (vidéo cliquable) et un <a href="http://fr.wikipedia.org/wiki/Mashup_%28video%29" target="_blank">Mashup</a> (mélange de médias, de l’anglais mash, «purée»).</p>
                     <p>Un <strong>Hashcut</strong> est un assemblage de citations de vidéos, mises bout à bout, sans altération des médias d’origine, et permet à chacun de proposer un nouveau regard, une porte d’entrée éditorialisée sur ces médias.</p>
                 </div>
                 <div class="how-to">
-                    <h2>Comment faire ?</h2>
+                    <h2>{% trans "How to?" %}</h2>
                     <ul>
                         <li class="inscription">
-                            <h3><a class="open-popin" href="#user">1. S’inscrire</a></h3>
-                            <p>Commencez par créer votre espace personnel sur cette plateforme !</p>
+                            <h3><a class="open-popin" href="#user">1. {% trans "Sign up" %}</a></h3>
+                            <p>{% trans "Start by creating your own profile on this platform." %}</p>
                         </li>
                         <li class="next-step"></li>
                         <li class="creation">
-                            <h3><a href="{% url mashup_edit branding=branding %}">2. Créer un hashcut</a></h3>
-                            <p>Choisissez des médias, segmentez les, assemblez les segments et rajoutez des commentaires sur le Hashcut.</p>
+                            <h3><a href="{% url mashup_edit branding=branding %}">2. {% trans "Create a new hashcut" %}</a></h3>
+                            <p>{% trans "Choose videos, define and organize segments and comment them to create your own hashcut." %}</p>
                         </li>
                         <li class="next-step"></li>
                         <li class="publier">
-                            <h3><a href="#">3. Publier et partager</a></h3>
-                            <p>Une fois le hashcut terminé, publiez-le sur cette plateforme etpartagez votre création sur les réseaux sociaux</p>
+                            <h3><a href="#">3. {% trans "Publish and share" %}</a></h3>
+                            <p>{% trans "Once your hashcut is done, publish it here and share your work on social networks." %}</p>
                         </li>
                     </ul>
                 </div>
@@ -118,13 +137,9 @@
         {% endblock %}
         {% block footer %}
         <div class="footer clearfix">
-            <ul class="links-left">
-                <li><a href="#">Mentions légales</a></li>
-                <li><a href="#">Contacts</a></li>
-            </ul>
             <ul class="links-right">
-                <li><a title="IRI" href="http://www.iri.centrepompidou.fr/" target="_blank"> <img src="{% static 'hashcut' %}/{{branding}}/img/logo-iri.png" alt="iri" /></a></li>
-                <li><a title="cinecast" href="http://cinecast.fr/" target="_blank"><img src="{% static 'hashcut' %}/{{branding}}/img/logo-cinecast.png" alt="cinecast" /></a></li>
+                <li><a title="IRI" href="http://www.iri.centrepompidou.fr/" target="_blank"> <img src="{% static 'hashcut' %}/{{branding}}/img/logo-iri.png" alt="IRI" /></a></li>
+                <li><a title="cinecast" href="http://cinecast.fr/" target="_blank"><img src="{% static 'hashcut' %}/{{branding}}/img/logo-cinecast.png" alt="Cinecast" /></a></li>
                 <li>© 2012</li>
             </ul>
         </div><!-- footer -->
@@ -132,26 +147,6 @@
     </div><!-- wrap -->
 </div><!-- wrapper -->
 {% endblock %}
-<!-- JavaScript -->
-{% block js_import %}
-<script type="text/javascript" src="{% static 'hashcut/lib/jquery.min.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/lib/jquery-ui.min.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/js/common.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/js/social.js' %}"></script>
-<script type="text/javascript" src="{% static 'hashcut/lib/ZeroClipboard.js' %}"></script>
-{% if not user.is_authenticated %}
-<script type="text/javascript">
-/* Forbid access to edit page if not connected */
-$(function() {
-    $("a[href='{% url mashup_edit branding=branding %}']").click(function() {
-        $("#user").show();
-        return false;
-    });
-});
-
-</script>
-{% endif %}
-{% endblock %}
 {% endblock %}
 {% analytics %}
 </body>
--- a/src/hashcut/templates/mashup_profile.html	Tue Dec 04 13:31:01 2012 +0100
+++ b/src/hashcut/templates/mashup_profile.html	Tue Dec 04 18:59:07 2012 +0100
@@ -3,7 +3,8 @@
 {% load i18n %}
 {% load analytics %}
 {% load thumbnail %}
-    {% block title %}Profil de '{{username}}'{% endblock %}
+
+    {% block title %}{% blocktrans %}{{username}}'s profile{% endblocktrans %}{% endblock %}
     {% block css_page %}
     <link rel="stylesheet" href="{% static 'hashcut' %}/{{branding}}/css/profil.css" />
     {% endblock %}
@@ -15,17 +16,17 @@
     {% include 'partial/hashcut_logo.html' %}
         <div class="title-video-wrap">
             <p class="title-video" href="#">
-                <span class="category">Profil</span>
+                <span class="category">{% trans "Profile" %}</span>
                 <span class="separator">&raquo;</span>
                 {{username}}
             </p>
         </div>
-    {% include 'partial/hashcut_social.html' %}
+        <div class="Ldt-Social"></div>
         <div class="profil-wrap">
             <ul>
-                <li><a href="{% url mashup_home branding=branding %}" class="all-hashcut">Accueil</a></li>
-                <li><a href="{% url mashup_edit branding=branding %}" class="new-hashcut">Créer un Hashcut</a></li>
-                <li><a href="#user" class="my-profil open-popin">Mon profil</a></li>
+                <li><a href="{% url mashup_home branding=branding %}" class="all-hashcut">{% trans "Home" %}</a></li>
+                <li><a href="{% url mashup_edit branding=branding %}" class="new-hashcut">{% trans "New hashcut" %}</a></li>
+                <li><a href="#user" class="my-profil open-popin">{% trans "My profile" %}</a></li>
             </ul>
         </div>
     </div><!-- header -->
@@ -54,14 +55,4 @@
     </div-->
 </div><!-- content -->
 {% endblock %}
-{% block js_import %}
-{{block.super}}
-<script type="text/javascript">
-    $(function() {
-        social({
-            swf: "{% static 'hashcut/lib/ZeroClipboard.swf' %}"
-        });
-    });
-</script>
-{% endblock %}
 
--- a/src/hashcut/templates/partial/hashcut_social.html	Tue Dec 04 13:31:01 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-        <div class="Ldt-Social">
-            <div class="Ldt-Social-Url-Container">
-                <a href="#" target="_blank" class="Ldt-Social-Square Ldt-Social-Url" title="Partager le lien"></a>
-                <span class="Ldt-Social-UrlPop">
-                    <input class="Ldt-Social-Input"/>
-                    <div class="Ldt-Social-CopyBtn">Copier</div>
-                </span>
-            </div>
-            <a href="#" target="_blank" class="Ldt-Social-Fb Ldt-Social-Ext" title="Partager sur Facebook"></a>
-            <a href="#" target="_blank" class="Ldt-Social-Twitter Ldt-Social-Ext" title="Partager sur Twitter"></a>
-            <a href="#" target="_blank" class="Ldt-Social-Gplus Ldt-Social-Ext" title="Partager sur Google+"></a>
-            <a href="#" target="_blank" class="Ldt-Social-Mail" title="Partager par mail"></a>
-        </div>
\ No newline at end of file
--- a/src/hashcut/templates/partial/iri_top_header.html	Tue Dec 04 13:31:01 2012 +0100
+++ b/src/hashcut/templates/partial/iri_top_header.html	Tue Dec 04 18:59:07 2012 +0100
@@ -0,0 +1,9 @@
+{% load static %}
+<script type="text/javascript" src="{% static 'hashcut/lib/ZeroClipboard.js' %}"></script>
+<script type="text/javascript">
+    $(function() {
+        social({
+            swf: "{% static 'hashcut/lib/ZeroClipboard.swf' %}"
+        });
+    })
+</script>
--- a/src/hashcut/templates/partial/mashup_popin_user.html	Tue Dec 04 13:31:01 2012 +0100
+++ b/src/hashcut/templates/partial/mashup_popin_user.html	Tue Dec 04 18:59:07 2012 +0100
@@ -1,3 +1,4 @@
+{% load i18n %}
     <!-- popin user -->
     
         <div class="popin user" id="user">
@@ -7,54 +8,54 @@
                 <div class="user-screen info">
                     <h2>{{user.username}}</h2>
                     <h3>{{user.email}}</h3>
-                    <a href="{% url mashup_profile branding=branding username=user.username %}" class="nb-hashcut">{{nb_mashup_creator}} Hashcuts</a>
+                    <a href="{% url mashup_profile branding=branding username=user.username %}" class="nb-hashcut">{% blocktrans count counter=nb_mashup_creator %}{{nb_mashup_creator}} Hashcut{% plural %}{{nb_mashup_creator}} Hashcuts{% endblocktrans %}</a>
                     <p>
-                        <a href="#" class="change-account button">Changer de compte</a>
+                        <a href="#" class="change-account button">{% trans 'Switch account' %}</a>
                     </p>
                 </div>
             {% endif %}
                 <div class="user-screen signup hide">
-                    <h2>Créer un compte :</h2>
+                    <h2>{% trans 'Create account:' %}</h2>
                     <form action="{% url mashup_create_user branding=branding %}" class="signup-form" method="post">
                     {% csrf_token %}
                         <p>
-                            <label for="signup-pseudo">Pseudonyme : </label>
+                            <label for="signup-pseudo">{% trans 'Login:' %}</label>
                             <input type="text" id="signup-pseudo" name="signup-pseudo" />
                         </p>
                         <p >
-                            <label for="signup-email">Email : </label>
+                            <label for="signup-email">{% trans 'E-mail:' %}</label>
                             <input type="text" id="signup-email" name="signup-email" />
                         </p>
                         <p >
-                            <label for="signup-password">Mot de passe : </label>
+                            <label for="signup-password">{% trans 'Password:' %}</label>
                             <input type="password" id="signup-password" name="signup-password" />
                         </p>
                         <p>
-                            <label for="signup-password">Confirmer le mot de passe : </label>
+                            <label for="signup-password">{% trans 'Confirm password:' %}</label>
                             <input type="password" id="signup-confirm-password" name="signup-confirm-password" />
                         </p>
                         <p>
-                            <input class="button" type="submit" value="Créer le compte">
+                            <input class="button" type="submit" value="{% trans 'Create account' %}">
                         </p>
                     </form>
                 </div>
                 <div class="user-screen login{% if user.is_authenticated %} hide{% endif %}">
-                    <h2>Connexion :</h2>
+                    <h2>{% trans 'Log In:' %}</h2>
                     <form action="{% url mashup_identicate_user branding=branding %}" class="login-form" method="post">
                     {% csrf_token %}
                         <p>
-                            <label for="signup-pseudo">Pseudonyme : </label>
+                            <label for="signup-pseudo">{% trans 'Login:' %}</label>
                             <input type="text" id="signup-pseudo" name="signup-pseudo" />
                         </p>
                         <p >
-                            <label for="signup-email">Mot de passe : </label>
+                            <label for="signup-email">{% trans 'Password:' %}</label>
                             <input type="password" id="signup-password" name="signup-password" />
                         </p>
                         <p>
-                            <input class="button" type="submit" value="Se connecter">
+                            <input class="button" type="submit" value="{% trans 'Log In' %}">
                         </p>
                         <p>
-                            <a class="button signup-button" href="#">Créer un compte</a>
+                            <a class="button signup-button" href="#">{% trans 'Create account' %}</a>
                         </p>
                     </form>
                 </div>
--- a/src/hashcut/urls.py	Tue Dec 04 13:31:01 2012 +0100
+++ b/src/hashcut/urls.py	Tue Dec 04 18:59:07 2012 +0100
@@ -3,6 +3,7 @@
     MashupCreateUser, MashupIdenticateUser
 
 urlpatterns = patterns('',
+    url(r'^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog', name='jsi18n'),
     url(r'^(?P<branding>.*)/edit/$', MashupEdit.as_view(), name="mashup_edit"),
     url(r'^(?P<branding>.*)/save/$', 'hashcut.views.save_mashup', name="mashup_save"),
     url(r'^(?P<branding>.*)/hashcut/(?P<ldt_id>.*)/$', MashupHashcut.as_view(), name="mashup_hashcut"),