Merge branch 'translations' of github.com:xwiki-labs/cryptpad

pull/1/head
ansuz 8 years ago
commit 498b24d389

@ -2,32 +2,21 @@
<div> <div>
<div class="bottom-bar"> <div class="bottom-bar">
<div class="bottom-bar-left"> <div class="bottom-bar-left">
<p> <p data-localization="bottom_love">
<a href="http://www.xwiki.com/" target="_blank">
Made with
<img class="bottom-bar-heart" src="/customize/heart.png" />
in
<img class="bottom-bar-fr" src="/customize/fr.png" />
</a>
</p> </p>
<span class="bottom-bar-language">
<select id="language-selector">
<option value="en">English</option>
<option value="fr">Français</option>
</select>
</span>
</div> </div>
<!-- <!--
<div class="bottom-bar-center"> <div class="bottom-bar-center">
<p><a href="https://github.com/xwiki-labs/cryptpad">Fork me on GitHub</a></p> <p><a href="https://github.com/xwiki-labs/cryptpad">Fork me on GitHub</a></p>
</div> --> </div> -->
<div class="bottom-bar-right"> <div class="bottom-bar-right">
<p> <p data-localization="bottom_support">
<a href="http://labs.xwiki.com/" title="XWiki Labs" target="_blank">
An
<img src="/customize/logo-xwiki2.png"
alt="XWiki SAS"
class="bottom-bar-xwiki"
/> Labs Project </a> with the support of
<a href="http://ng.open-paas.org/" title="OpenPaaS::ng" target="_blank"> <img src="/customize/openpaasng.png"
alt="OpenPaaS-ng"
class="bottom-bar-openpaas" />
</a>
</a>
</p> </p>
</div> </div>
</div> </div>

@ -2,8 +2,10 @@
globals define globals define
*/ */
define([ define([
'/customize/languageSelector.js',
'/customize/messages.js',
'/bower_components/jquery/dist/jquery.min.js' '/bower_components/jquery/dist/jquery.min.js'
], function () { ], function (LS, Messages) {
var $ = window.jQuery; var $ = window.jQuery;
var main = function () { var main = function () {
$.ajax({ $.ajax({
@ -15,6 +17,8 @@ define([
rel: 'stylesheet', rel: 'stylesheet',
href: '/customize/main.css' href: '/customize/main.css'
})); }));
LS.main();
Messages._applyTranslation();
} }
}); });
}; };

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Cryptpad: Zero Knowledge, Collaborative Real Time Editing</title> <title data-localization="main_title">Cryptpad: Zero Knowledge, Collaborative Real Time Editing</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<link rel="stylesheet" type="text/css" href="customize/main.css" /> <link rel="stylesheet" type="text/css" href="customize/main.css" />
<link rel="icon" type="image/png" href="/customize/main-favicon.png" id="favicon"/> <link rel="icon" type="image/png" href="/customize/main-favicon.png" id="favicon"/>
@ -43,35 +43,34 @@
<h1>Unity is Strength - Collaboration is Key</h1> <h1>Unity is Strength - Collaboration is Key</h1>
</center> </center>
<p>CryptPad is the <strong>zero knowledge</strong> realtime collaborative editor. Encryption carried out in your web browser protects the data from the server, the cloud, and the NSA. The secret encryption key is stored in the URL <a href="https://en.wikipedia.org/wiki/Fragment_identifier">fragment identifier</a> which is never sent to the server but is available to javascript so by sharing the URL, you give authorization to others who want to participate.</p> <p data-localization="main_p1"><!-- Zero Knowledge collaborative realtime editor. Protected from the NSA. --></p>
<p>This project uses the <a href="http://ckeditor.com/">CKEditor</a> Visual Editor, <a href="https://codemirror.net/">CodeMirror</a>, and the <a href="https://github.com/xwiki-contrib/chainpad">ChainPad</a> realtime engine.</p> <p data-localization="main_p2"><!-- CkEditor, CodeMirror, Chainpad --></p>
<h2 id="howitworks">How It Works</h2> <h2 id="howitworks" data-localization="main_howitworks"></h2>
<p>CryptPad uses a variant of the <a href="https://en.wikipedia.org/wiki/Operational_transformation">Operational transformation</a> algorithm which is able to find distributed consensus using a Nakamoto Blockchain, a construct popularized by <a href="https://en.wikipedia.org/wiki/Bitcoin">Bitcoin</a>. This way the algorithm can avoid the need for a central server to resolve Operational Transform Edit Conflicts and without the need for resolving conflicts, the server can be kept unaware of the content which is being edited on the pad.</p> <p data-localization="main_howitworks_p1"><!-- Operational transform, Nakamoto blockchain, server kept unaware of the content--></p>
<h2 id="about-us">About</h2> <h2 id="about-us" data-localization="main_about"></h2>
<p>You can read more about our <a href="/privacy.html" title="">privacy policy</a> and <a href="/terms.html">terms of service</a>.</p> <p data-localization="main_about_p1"><!-- Privacy policy, terms of service --></p>
<p>If you have any questions or comments, you can <a href="https://twitter.com/cryptpad">tweet us</a>, open an issue <a href="https://github.com/xwiki-labs/cryptpad/issues/" title="our issue tracker">on github</a>, come say hi on irc (<a href="http://webchat.freenode.net?channels=%23cryptpad&uio=MT1mYWxzZSY5PXRydWUmMTE9Mjg3JjE1PXRydWUe7" title="freenode webchat">irc.freenode.net</a>), or <a href="mailto:sftfbsdiAyxjlj/dpn">send us an email</a>.</p> <p data-localization="main_about_p2"><!-- Contact us--></p>
<center> <center>
<noscript> <noscript>
<p> <p data-localization="main_oops">
<strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <!-- JS required -->
<strong>really</strong> required.
</p> </p>
</noscript> </noscript>
<h5 id="tryit">Try it out!</h5> <h5 id="tryit" data-localization="tryIt"></h5>
<table class="recent scroll" style="display:none"> <table class="recent scroll" style="display:none">
<tbody> <tbody>
<tr> <tr>
<th>Type</th> <th data-localization="table_type"></th>
<th>Link</th> <th data-localization="table_link"></th>
<th>Created</th> <th data-localization="table_created"></th>
<th>Last Accessed</th> <th data-localization="table_last"></th>
<th></th> <th></th>
</tr> </tr>
@ -79,10 +78,10 @@
</table> </table>
<div id="buttons" class="buttons"> <div id="buttons" class="buttons">
<a id="create-pad" class="button create" href="/pad/">CREATE NEW WYSIWYG PAD</a> <a id="create-pad" class="button create" href="/pad/" data-localization="button_newpad"></a>
<a id="create-code" class="button create" href="/code/">CREATE NEW CODE PAD</a> <a id="create-code" class="button create" href="/code/" data-localization="button_newcode"></a>
<a id="create-poll" class="button create" href="/poll/">CREATE NEW POLL</a> <a id="create-poll" class="button create" href="/poll/" data-localization="button_newpoll"></a>
<a id="create-slide" class="button create" href="/slide/">CREATE NEW PRESENTATION</a> <a id="create-slide" class="button create" href="/slide/" data-localization="button_newslide"></a>
</div> </div>
</center> </center>

@ -0,0 +1,49 @@
define(['/bower_components/jquery/dist/jquery.min.js'], function() {
var $ = window.jQuery;
var out = {};
var LS_LANG = "CRYPTPAD_LANG";
var getStoredLanguage = function () {
return localStorage.getItem(LS_LANG);
};
var storeLanguage = function (l) {
localStorage.setItem(LS_LANG, l);
};
var getBrowserLanguage = function () {
return navigator.language || navigator.userLanguage;;
};
var getLanguage = out.getLanguage = function () {
return getStoredLanguage() || getBrowserLanguage();
};
var main = out.main = function () {
var selector = $('#language-selector');
if (!selector.length) { return; }
// Select the current language in the list
var language = getLanguage();
var option = $(selector).find('option[value="' + language + '"]');
if ($(option).length) {
$(selector).val(language);
}
else {
$(selector).val('en');
}
// Listen for language change
$(selector).on('change', function () {
var newLanguage = $(selector).val();
storeLanguage(newLanguage);
if (newLanguage !== language) {
window.location.reload();
}
});
};
return out;
});

@ -147,8 +147,13 @@ tr {
margin-top: 12px; margin-top: 12px;
margin-bottom: 12px; margin-bottom: 12px;
white-space: nowrap; white-space: nowrap;
}
.create {
display: none; display: none;
} }
.action {
display: inline-block;
}
/* Tables */ /* Tables */
table { table {
border-collapse: collapse; border-collapse: collapse;

@ -28,10 +28,10 @@ define([
Cryptpad.styleAlerts(); Cryptpad.styleAlerts();
var padTypes = { var padTypes = {
'/pad/': 'Pad', '/pad/': Messages.type.pad,
'/code/': 'Code', '/code/': Messages.type.code,
'/poll/': 'Poll', '/poll/': Messages.type.poll,
'/slide/': 'Presentation', '/slide/': Messages.type.slide,
}; };
var $table = $('table.scroll'); var $table = $('table.scroll');
@ -85,7 +85,7 @@ define([
var $remove = $('<td>', { var $remove = $('<td>', {
'class': 'remove', 'class': 'remove',
title: "forget '"+shortTitle + "'" title: Messages.forget + " '"+shortTitle + "'"
}).text('✖').click(function () { }).text('✖').click(function () {
Cryptpad.confirm(Messages.forgetPrompt + ' (' + Cryptpad.fixHTML(shortTitle) + ')', function (yes) { Cryptpad.confirm(Messages.forgetPrompt + ' (' + Cryptpad.fixHTML(shortTitle) + ')', function (yes) {
if (!yes) { return; } if (!yes) { return; }

@ -1,52 +1,51 @@
define(function () { define(['/customize/languageSelector.js',
var out = {}; '/customize/translations/messages.js',
'/customize/translations/messages.fr.js',
out.errorBox_errorType_disconnected = 'Connection Lost'; '/bower_components/jquery/dist/jquery.min.js'], function(LS, Default, French) {
out.errorBox_errorExplanation_disconnected = [ var $ = window.jQuery;
'Lost connection to server, you may reconnect by reloading the page or review your work ',
'by clicking outside of this box.' var map = {
].join(''); 'fr': French
};
out.editingAlone = 'Editing alone';
out.editingWithOneOtherPerson = 'Editing with one other person'; var defaultLanguage = 'en';
out.editingWith = 'Editing with';
out.otherPeople = 'other people'; var language = LS.getLanguage();
out.disconnected = 'Disconnected';
out.synchronizing = 'Synchronizing'; var messages;
out.reconnecting = 'Reconnecting...';
out.lag = 'Lag'; if (!language || language === defaultLanguage || language === 'default' || !map[language]) {
messages = Default;
out.importButton = 'IMPORT'; }
out.importButtonTitle = 'Import a document from a local file'; else {
// Add the translated keys to the returned object
out.exportButton = 'EXPORT'; messages = $.extend(true, {}, Default, map[language]);
out.exportButtonTitle = 'Export this document to a local file'; }
out.exportPrompt = 'What would you like to name your file?';
// Get keys with parameters
out.back = '&#8656; Back'; messages._getKey = function (key, argArray) {
out.backToCryptpad = '&#8656; Back to Cryptpad'; if (!messages[key]) { return '?'; }
var text = messages[key];
out.changeNameButton = 'Change name'; return text.replace(/\{(\d+)\}/g, function (str, p1) {
out.changeNamePrompt = 'Change your name: '; return argArray[p1] || null;
});
out.renameButton = 'RENAME'; };
out.renameButtonTitle = 'Change the title under which this document is listed on your home page';
out.renamePrompt = 'How would you like to title this pad?';
out.renameConflict = 'Another pad already has that title';
out.forgetButton = 'FORGET';
out.forgetButtonTitle = 'remove this document from your home page listings';
out.forgetPrompt = 'Clicking OK will remove the URL for this pad from localStorage, are you sure?';
out.disconnectAlert = 'Network connection lost!';
out.tryIt = 'Try it out!';
out.recentPads = 'Your recent pads (stored only in your browser)';
out.okButton = 'OK (enter)'; messages._applyTranslation = function () {
out.cancelButton = 'Cancel (esc)'; $('[data-localization]').each(function (i, e) {
var $el = $(this);
var key = $el.data('localization');
$el.html(messages[key]);
});
$('[data-localization-title]').each(function (i, e) {
var $el = $(this);
var key = $el.data('localization-title');
$el.attr('title', messages[key]);
});
};
out.initialState = [ // Non translatable keys
messages.initialState = [
'<p>', '<p>',
'This is <strong>CryptPad</strong>, the zero knowledge realtime collaborative editor.', 'This is <strong>CryptPad</strong>, the zero knowledge realtime collaborative editor.',
'<br>', '<br>',
@ -61,7 +60,7 @@ define(function () {
'</p>', '</p>',
].join(''); ].join('');
out.codeInitialState = [ messages.codeInitialState = [
'/*\n', '/*\n',
' This is CryptPad, the zero knowledge realtime collaborative editor.\n', ' This is CryptPad, the zero knowledge realtime collaborative editor.\n',
' What you type here is encrypted so only people who have the link can access it.\n', ' What you type here is encrypted so only people who have the link can access it.\n',
@ -70,14 +69,5 @@ define(function () {
'*/' '*/'
].join(''); ].join('');
out.loginText = '<p>Your username and password are used to generate a unique key which is never known by our server.</p>\n' + return messages;
'<p>Be careful not to forget your credentials, as they are impossible to recover</p>';
out.type = {};
out.type.pad = 'Pad';
out.type.code = 'Code';
out.type.poll = 'Poll';
out.type.slide = 'Presentation';
return out;
}); });

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Cryptpad: Zero Knowledge, Collaborative Real Time Editing</title> <title data-localization="main_title">Cryptpad: Zero Knowledge, Collaborative Real Time Editing</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<link rel="stylesheet" type="text/css" href="customize/main.css" /> <link rel="stylesheet" type="text/css" href="customize/main.css" />
<link rel="icon" type="image/png" href="/customize/main-favicon.png" id="favicon"/> <link rel="icon" type="image/png" href="/customize/main-favicon.png" id="favicon"/>
@ -28,6 +28,7 @@
})(); })();
} }
</script> </script>
<script src="/common/cryptpad-commons.js"></script>
<!-- End Piwik Code --> <!-- End Piwik Code -->
@ -40,42 +41,33 @@
<div id="main"> <div id="main">
<center> <center>
<img class="imgcenter cryptofist" src="/customize/cryptofist_small.png" /> <img class="imgcenter cryptofist" src="/customize/cryptofist_small.png" />
<h1>Cryptpad Privacy Policy</h1> <h1 data-localization="policy_title"></h1>
</center> </center>
<h2>What we know about you</h2> <h2 data-localization="policy_whatweknow"></h2>
<p>As an application that is hosted on the web, Cryptpad has access to metadata exposed by the HTTP protocol. <p data-localization="policy_whatweknow_p1"><!-- HTTP headers, IP address--></p>
This includes your IP address, and various other HTTP headers that can be used to identify your particular browser. <p data-localization="policy_whatweknow_p2"><!-- Piwik --></p>
You can see what information your browser is sharing by visiting <a target="_blank" href="https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending" title="what http headers is my browser sending">WhatIsMyBrowser.com</a>.
</p>
<p>We use <a href="https://piwik.org/" target="_blank" title="open source analytics platform">Piwik</a>, an open source analytics platform, to learn more about our users.
Piwik tells us about how you found Cryptpad, via direct entry, through a search engine, or via a referral from another web service like Reddit or Twitter.
We also learn when you visit, what links you click while on our informational pages, and how long you stay on a particular page.
</p>
<p> <p>
<strong>These analytics tools are only used on informational pages. We do not collect any information about your usage of our zero-knowledge applications.</strong> <strong data-localization="policy_whatweknow_p3"><!-- Piwik disabled in pads --></strong>
</p> </p>
<h2>How we use what we learn</h2> <h2 data-localization="policy_howweuse"></h2>
<p>We use this information to make better decisions about promoting Cryptpad, by evaluating which of our past efforts were successful. <p data-localization="policy_howweuse_p1"><!-- Referrer : promoting--></p>
Information about your location lets us know whether we should consider providing better support for languages other than English. <p data-localization="policy_howweuse_p2"><!-- Browser : prioritizing new features--></p>
</p>
<p>Information about your browser (whether it's a desktop or mobile operating system) helps us make decisions when prioritizing feature improvements.
Our development team is small, and we try to make choices that will improve as many users' experience as possible.</p>
<h2>What we tell others about you</h2> <h2 data-localization="policy_whatwetell"></h2>
<p>We do not furnish to third parties the information that we gather or that you provide to us unless we are legally required to do so.</p> <p data-localization="policy_whatwetell_p1"></p>
<h2>Links to other sites</h2> <h2 data-localization="policy_links"></h2>
<p>This site contains links to other sites, including those produced by other organizations. We are not responsible for the privacy practices or the contents of any outside sites. As a general rule, links to outside sites are launched in a new browser window, to make clear that you are leaving Cryptpad.fr.</p> <p data-localization="policy_links_p1"></p>
<h2>Advertisement</h2> <h2 data-localization="policy_ads"></h2>
<p>We do not display any online advertising, though we may link to the bodies which are financing our research.</p> <p data-localization="policy_ads_p1"></p>
<h2>Choices you have</h2> <h2 data-localization="policy_choices"></h2>
<p>Our code is open source, so you always have the option of hosting your own instance of Cryptpad.</p> <p data-localization="policy_choices_open"></p>
<p>If you want to use our hosted instance, but don't want to expose your IP address, you can protect your IP using the <a href="https://www.torproject.org/projects/torbrowser.html.en" title="downloads from the Tor project" target="_blank">Tor browser bundle</a>, or a <a href="https://riseup.net/en/vpn" title="VPNs provided by Riseup" target="_blank">VPN</a>.</p> <p data-localization="policy_choices_vpn"></p>
<p>If you just want to block our analytics platform, you can use adblocking tools like <a href="https://www.eff.org/privacybadger" title="download privacy badger" target="_blank">Privacy Badger</a>.</p> <p data-localization="policy_choices_ads"></p>
<br /> <br />

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Cryptpad: Zero Knowledge, Collaborative Real Time Editing</title> <title data-localization="main_title">Cryptpad: Zero Knowledge, Collaborative Real Time Editing</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<link rel="stylesheet" type="text/css" href="customize/main.css" /> <link rel="stylesheet" type="text/css" href="customize/main.css" />
<link rel="icon" type="image/png" href="/customize/main-favicon.png" id="favicon"/> <link rel="icon" type="image/png" href="/customize/main-favicon.png" id="favicon"/>
@ -28,6 +28,7 @@
})(); })();
} }
</script> </script>
<script src="/common/cryptpad-commons.js"></script>
<!-- End Piwik Code --> <!-- End Piwik Code -->
@ -40,15 +41,14 @@
<div id="main"> <div id="main">
<center> <center>
<img class="imgcenter cryptofist" src="/customize/cryptofist_small.png" /> <img class="imgcenter cryptofist" src="/customize/cryptofist_small.png" />
<h1>Cryptpad Terms of Service</h1> <h1 data-localization="tos_title"></h1>
</center> </center>
<p>Please don't be malicious, abusive, or do anything illegal.</p> <p data-localization="tos_legal"></p>
<p>We hope you find this service useful, but availability or performance cannot be guaranteed. Please export your data regularly.</p> <p data-localization="tos_availability"></p>
<p>Cryptpad documents can be read or modified by anyone who can guess or otherwise obtain the document's fragment identifier. <p data-localization="tos_e2ee"></p>
We recommend that you use end-to-end-encrypted (e2ee) messaging technology to share URLs, and assume no liability in the event that such a URL is leaked.</p> <p data-localization="tos_logs"></p>
<p>Metadata provided by your browser to the server may be logged for the purpose of maintaining the service.</p> <p data-localization="tos_3rdparties"></p>
<p>We do not provide individualized data to third parties unless required to by law.</p>
</div> </div>

@ -1,15 +1,20 @@
define(function () { define(function () {
var out = {}; var out = {};
out.main_title = "Cryptpad: Editeur collaboratif en temps réel, zero knowledge";
out.errorBox_errorType_disconnected = 'Connexion perdue'; out.errorBox_errorType_disconnected = 'Connexion perdue';
out.errorBox_errorExplanation_disconnected = [ out.errorBox_errorExplanation_disconnected = [
'La connexion au serveur a été perdue. Vous pouvez essayer de vous reconnecter en rechargeant la page', 'La connexion au serveur a été perdue. Vous pouvez essayer de vous reconnecter en rechargeant la page',
'ou vous pouvez revoir votre travail en fermant cette boîte de dialogue.', 'ou vous pouvez revoir votre travail en fermant cette boîte de dialogue.',
].join(''); ].join('');
out.editingAlone = 'Edition seul(e)'; out.common_connectionLost = 'Connexion au serveur perdue';
out.editingWithOneOtherPerson = 'Edition avec une autre personne';
out.editingWith = 'Edition avec'; out.editingAlone = 'Pas d\'autre participant';
out.editingWithOneOtherPerson = 'Édition avec une autre personne';
out.editingWith = 'Édition avec';
out.otherPeople = 'autres personnes'; out.otherPeople = 'autres personnes';
out.disconnected = 'Déconnecté'; out.disconnected = 'Déconnecté';
out.synchronizing = 'Synchronisation'; out.synchronizing = 'Synchronisation';
@ -17,14 +22,14 @@ define(function () {
out.lag = 'Latence'; out.lag = 'Latence';
out.importButton = 'IMPORTER'; out.importButton = 'IMPORTER';
out.importButtonTitle = 'Importer un document depuis un fichir local'; out.importButtonTitle = 'Importer un document depuis un fichier local';
out.exportButton = 'EXPORTER'; out.exportButton = 'EXPORTER';
out.exportButtonTitle = 'Exporter ce document vers un fichier local'; out.exportButtonTitle = 'Exporter ce document vers un fichier local';
out.exportPrompt = 'Comment souhaitez-vous nommer ce fichier ?'; out.exportPrompt = 'Comment souhaitez-vous nommer ce fichier ?';
out.back = '&#8656; Retour'; out.back = '&#8656; Retour';
out.backToCryptpad = '&#8656; Retour vers Cryptpad'; out.backToCryptpad = ' Retour vers Cryptpad';
out.changeNameButton = 'Changer de nom'; out.changeNameButton = 'Changer de nom';
out.changeNamePrompt = 'Changer votre nom : '; out.changeNamePrompt = 'Changer votre nom : ';
@ -38,6 +43,17 @@ define(function () {
out.forgetButtonTitle = 'Enlever ce document de la liste en page d\'accueil'; out.forgetButtonTitle = 'Enlever ce document de la liste en page d\'accueil';
out.forgetPrompt = 'Cliquer sur OK supprimera l\'URL de ce document de la mémoire de votre navigateur (localStorage), êtes-vous sûr ?'; out.forgetPrompt = 'Cliquer sur OK supprimera l\'URL de ce document de la mémoire de votre navigateur (localStorage), êtes-vous sûr ?';
out.shareButton = 'PARTAGER';
out.shareButtonTitle = "Copier l'URL dans le presse-papiers";
out.shareSuccess = 'URL copiée dans le presse-papiers';
out.shareFailed = "Échec de la copie de l'URL dans le presse-papiers";
out.presentButton = 'PRÉSENTER';
out.presentButtonTitle = "Entrer en mode présentation";
out.presentSuccess = 'Appuyer sur Échap pour quitter le mode présentation';
out.commitButton = 'VALIDER';
out.disconnectAlert = 'Perte de la connexion au réseau !'; out.disconnectAlert = 'Perte de la connexion au réseau !';
out.tryIt = 'Essayez-le !'; out.tryIt = 'Essayez-le !';
@ -46,29 +62,116 @@ define(function () {
out.okButton = 'OK (Entrée)'; out.okButton = 'OK (Entrée)';
out.cancelButton = 'Annuler (Echap)'; out.cancelButton = 'Annuler (Echap)';
out.initialState = [ out.loginText = '<p>Votre nom d\'utilisateur et votre mot de passe sont utilisés pour générer une clé unique qui reste inconnue de notre serveur.</p>\n' +
'<p>', '<p>Faites attention de ne pas oublier vos identifiants puisqu\'ils seront impossible à récupérer.</p>';
'Voici <strong>CryptPad</strong>, l\'éditeur collaboratif en temps-réel "zero knowledge".',
'<br>',
'Ce que vous tapez ici est crypté et donc seules les personnes possédant l\'adresse de la page y ont accès.',
'<br>',
'Même le serveur ne peut pas voir ce que vous tapez.',
'</p>',
'<p>',
'<small>',
'<i>Ce que vous voyez ici, ce que vous entendez ici, quand vous quittez, ça reste ici</i>',
'</small>',
'</p>',
].join('');
out.codeInitialState = [ out.type = {};
'/*\n', out.type.pad = 'Pad';
' Voici Cryptpad, l\'éditeur collaboratif en temps-réel "zero knowledge".\n', out.type.code = 'Code';
' Ce que vous tapez ici est crypté et donc seules les personnes possédant l\'adresse de la page y ont accès.\n', out.type.poll = 'Sondage';
' Même le serveur ne peut pas voir ce que vous tape.\n', out.type.slide = 'Présentation';
' Ce que vous voyez ici, ce que vous entendez ici, quand vous quittez, ça reste ici.\n',
'*/' out.forget = "Oublier";
].join('');
// Polls
out.poll_title = "Sélecteur de date Zero Knowledge";
out.poll_subtitle = "Planification de rendez-vous et sondages en <em>temps-réel</em> et Zero Knowledge";
out.poll_p_save = "Vos modifications sont mises à jour instantanément, donc vous n'avez jamais besoin de sauver le contenu.";
out.poll_p_encryption = "Tout ce que vous entrez est crypté donc seules les personnes possédant le lien du sondage y ont accès. Même le serveur ne peut pas voir le contenu.";
out.poll_p_howtouse = "Entrez votre nom dans le champ ci-dessous et cochez les cases lorsque les options vous conviennent.";
out.promptName = "Quel est votre nom ?";
out.wizardButton = 'ASSISTANT';
out.wizardLog = "Cliquez sur le bouton dans le coin supérieur gauche pour retourner au sondage";
out.wizardTitle = "Utiliser l'assistant pour créer votre sondage";
out.wizardConfirm = "Êtes-vous vraiment prêt à ajouter ces options au sondage ?";
out.poll_closeWizardButton = "Fermer l'assistant";
out.poll_closeWizardButtonTitle = "Fermer l'assistant";
out.poll_wizardComputeButton = "Générer les options";
out.poll_wizardClearButton = "Vider le tableau";
out.poll_wizardDescription = "Créer automatiquement des options en entrant des dates et des horaires correspondant";
out.poll_wizardAddDateButton = "+ Dates";
out.poll_wizardAddTimeButton = "+ Horaires";
out.poll_addUserButton = "+ Utilisateurs";
out.poll_addUserButtonTitle = "Cliquer pour ajouter un utilisateur";
out.poll_addOptionButton = "+ Options";
out.poll_addOptionButtonTitle = "Cliquer pour ajouter une option";
out.poll_addOption = "Indiquer la nouvelle option";
out.poll_optionPlaceholder = "Option";
out.poll_addUser = "Entrer un nom";
out.poll_userPlaceholder = "Votre nom";
out.poll_removeOption = "Êtes-vous sûr de vouloir supprimer cette option ?";
out.poll_removeOptionTitle = "Supprimer la ligne";
out.poll_removeUser = "Êtes-vous sûr de vouloir supprimer cet utilisateur ?";
out.poll_removeUserTitle = "Supprimer la colonne";
out.poll_editOption = "Êtes-vous sûr de vouloir éditer cette option ?";
out.poll_editOptionTitle = "Éditer la ligne";
out.poll_editUser = "Êtes-vous sûr de vouloir éditer les choix de cet utilisateur ?";
out.poll_editUserTitle = "Éditer la colonne";
out.poll_titleHint = "Titre";
out.poll_descriptionHint = "Description";
// index.html
out.main_p1 = 'CryptPad est l\'éditeur collaboratif en temps réel <strong>zero knowledge</strong>. Le cryptage est effectué depuis votre navigateur, ce qui protège les données contre le serveur, le cloud, et la NSA. La clé de cryptage est stockée dans l\'<a href="https://fr.wikipedia.org/wiki/Identificateur_de_fragment">identifieur de fragment</a> de l\'URL qui n\'est jamais envoyée au serveur mais est accessible depuis javascript, de sorte qu\'en partageant l\'URL, vous donner l\'accès au pad à ceux qui souhaitent participer.';
out.main_p2 = 'Ce projet utilise l\'éditeur visuel (WYSIWYG) <a href="http://ckeditor.com/">CKEditor</a>, l\'éditeur de code source <a href="https://codemirror.net/">CodeMirror</a>, et le moteur temps-réel <a href="https://github.com/xwiki-contrib/chainpad">ChainPad</a>.';
out.main_howitworks = 'Comment ça fonctionne';
out.main_howitworks_p1 = 'CryptPad utilise une variante de l\'algorithme d\'<a href="https://en.wikipedia.org/wiki/Operational_transformation">Operational transformation</a> qui est capable de trouver un consensus distribué en utilisant une chaîne de bloc Nakamoto, un outil popularisé par le <a href="https://fr.wikipedia.org/wiki/Bitcoin">Bitcoin</a>. De cette manière, l\'algorithme évite la nécessité d\'utiliser un serveur central pour résoudre les conflits d\'édition de l\'Operational Transformation, et sans ce besoin de résolution des conflits le serveur peut rester ignorant du contenu qui est édité dans le pad.';
out.main_about = 'À propos';
out.main_about_p1 = 'Vous pouvez en apprendre davantage sur notre <a href="/privacy.html" title="">politique de confidentialité</a> et nos <a href="/terms.html">conditions d\'utilisation</a>.';
out.main_about_p2 = 'Si vous avez des questions ou commentaires, vous pouvez <a href="https://twitter.com/cryptpad">nous tweeter</a>, ouvrir une issue sur <a href="https://github.com/xwiki-labs/cryptpad/issues/" title="our issue tracker">Github</a>, venir dire bonjour sur IRC (<a href="http://webchat.freenode.net?channels=%23cryptpad&uio=MT1mYWxzZSY5PXRydWUmMTE9Mjg3JjE1PXRydWUe7" title="freenode webchat">irc.freenode.net</a>), ou <a href="mailto:sftfbsdiAyxjlj/dpn">nous envoyer un email</a>.';
out.main_oops = '<strong>OUPS</strong> Afin de pouvoir réaliser le cryptage depuis votre navigateur, Javascript est <strong>vraiment</strong> requis.';
out.table_type = 'Type';
out.table_link = 'Lien';
out.table_created = 'Créé le';
out.table_last = 'Dernier accès';
out.button_newpad = 'CRÉER UN PAD WYSIWYG';
out.button_newcode = 'CRÉER UN PAD DE CODE';
out.button_newpoll = 'CRÉER UN SONDAGE';
out.button_newslide = 'CRÉER UNE PRÉSENTATION';
// privacy.html
out.policy_title = 'Politique de confidentialité de Cryptpad';
out.policy_whatweknow = 'Ce que nous savons de vous';
out.policy_whatweknow_p1 = 'En tant qu\'application hébergée sur le web, Cryptpad a accès aux meta-données exposées par le protocole HTTP. Ceci inclus votre adresse IP et d\'autres en-têtes HTTP qui peuvent être utilisées pour identifier votre propre navigateur. Vous pouvez voir quelles informations votre navigateur partage en visitant <a target="_blank" href="https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending" title="what http headers is my browser sending">WhatIsMyBrowser.com</a>.';
out.policy_whatweknow_p2 = 'Nous utilisons <a href="https://piwik.org/" target="_blank" title="open source analytics platform">Piwik</a>, une plateforme open source d\'analytique, afin d\'en apprendre plus sur nos utilisateurs. Piwik nous indique comment vous avez trouvé Cryptpad, que ce soit par une entrée directe, par un moteur de recherche ou depuis un lien provenant d\'un autre site web tel que Reddit ou Twitter. Nous savons également quand vous visitez le site, sur quels liens vous cliquez dans les pages informatives et combien de temps vous restez sur une page donnée.';
out.policy_whatweknow_p3 = 'Ces outils d\'analytique sont utilisés uniquement sur les pages informatives. Nous ne collectons aucune information concernant votre utilisation de nos applications "zero knowledge".';
out.policy_howweuse = 'Comment nous utilisons ce que nous apprenons';
out.policy_howweuse_p1 = 'Nous utilisons ces informations pour prendre de meilleures décisions concernant la communication autour de Cryptpad, en évaluant le succès de ce qui a été realisé par le passé. Les informations concernant votre localisation nous permettent de savoir si nous devons considérer l\'ajout de traductions de Cryptpad dans d\'autres langues que l\'anglais.';
out.policy_howweuse_p2 = "Les informations concernant votre navigateur (que ce soit un système d\'exploitation de bureau ou d\'appareil portable) nous aident à prendre des décisions lors de la priorisation des ajouts et améliorations de fonctionnalités. Notre équipe de développement est petite, et nous essayons de prendre des décisions qui amélioreront l\'expérience du plus grand nombre d\'utilisateurs possible.";
out.policy_whatwetell = 'Ce que nous dévoilons à d\'autres à propos de vous';
out.policy_whatwetell_p1 = 'Nous ne fournissons aucune information que nous récoltons ou que vous nous fournissez à des tierces parties à moins d\'y être contraints par la loi.';
out.policy_links = 'Liens vers d\'autres sites';
out.policy_links_p1 = 'Ce site contient des liens vers d\'autres sites, certains étant produits par d\'autres organisations. Nous ne sommes responsables des pratiques de confidentialité ou du contenu d\'aucun site externe. De manière générale, les liens vers des sites externes sont lancés dans une nouvelle fenêtre (ou onglet) du navigateur, pour rendre clair le fait que vous quittez Cryptpad.fr.';
out.policy_ads = 'Publicité';
out.policy_ads_p1 = 'Nous n\'affichons pas de publicité en ligne, bien que nous puissions afficher des liens vers les sites des organisations qui financent nos recherches.';
out.policy_choices = 'Vos choix';
out.policy_choices_open = 'Notre code est open source, ce qui signifie que vous avez toujours la possibilité d\'héberger votre propre instance de Cryptpad.';
out.policy_choices_vpn = 'Si vous souhaitez utiliser notre instance hébergée (cryptpad.fr) mais que vous ne souhaitez pas exposer votre adresse IP, vous pouvez la protéger en utilisant le <a href="https://www.torproject.org/projects/torbrowser.html.en" title="downloads from the Tor project" target="_blank">navigateur Tor</a>, ou un <a href="https://riseup.net/fr/vpn" title="VPNs provided by Riseup" target="_blank">VPN</a>.';
out.policy_choices_ads = 'Si vous souhaitez uniquement bloquer notre plateforme d\'analytique, vous pouvez utiliser un bloqueur de publicités tel que <a href="https://www.eff.org/fr/privacybadger" title="download privacy badger" target="_blank">Privacy Badger</a>.';
// terms.html
out.tos_title = "Conditions d'utilisation de Cryptpad";
out.tos_legal = "Veuillez ne pas être malveillant, abusif, ou faire quoi que ce soit d'illégal.";
out.tos_availability = "Nous espérons que vous trouvez ce service utile, mais nous ne pouvons garantir ses performances et disponibilités. Nous vous recommandons d'exporter vos données régurlièrement.";
out.tos_e2ee = "Les document sur Cryptpad peuvent être lus et modifiés par quiconque est en mesure de deviner ou d'obtenir de quelque manière que ce soit l'identificateur de fragment (hash) du document. Nous vous recommandons d'utiliser des technologies de messagerie cryptées de bout à bout (end-to-end encryption ou e2ee) pour partager les URLs, et déclinons toute responsabilité dans le cas ou une telle URL serait divulguée.";
out.tos_logs = "Les meta-données fournies par votre navigateur au serveur peuvent être enregistrées dans le but de maintenir le service.";
out.tos_3rdparties = "Nous ne fournissons aucune donnée individuelle à des tierces parties à moins d'y être contraints par la loi.";
// BottomBar.html
out.bottom_love = '<a href="http://www.xwiki.com/fr" target="_blank">Fait avec <img class="bottom-bar-heart" src="/customize/heart.png" /> en <img class="bottom-bar-fr" src="/customize/fr.png" /></a>';
out.bottom_support = '<a href="http://labs.xwiki.com/" title="XWiki Labs" target="_blank">Un projet <img src="/customize/logo-xwiki2.png" alt="XWiki SAS" class="bottom-bar-xwiki"/> Labs</a> avec le soutien de <a href="http://ng.open-paas.org/" title="OpenPaaS::ng" target="_blank"> <img src="/customize/openpaasng.png" alt="OpenPaaS-ng" class="bottom-bar-openpaas" /></a>';
return out; return out;
}); });

@ -0,0 +1,178 @@
define(function () {
var out = {};
out.main_title = "Cryptpad: Zero Knowledge, Collaborative Real Time Editing";
out.errorBox_errorType_disconnected = 'Connection Lost';
out.errorBox_errorExplanation_disconnected = [
'Lost connection to server, you may reconnect by reloading the page or review your work ',
'by clicking outside of this box.'
].join('');
out.common_connectionLost = 'Server Connection Lost';
out.editingAlone = 'Editing alone';
out.editingWithOneOtherPerson = 'Editing with one other person';
out.editingWith = 'Editing with';
out.otherPeople = 'other people';
out.disconnected = 'Disconnected';
out.synchronizing = 'Synchronizing';
out.reconnecting = 'Reconnecting...';
out.lag = 'Lag';
out.importButton = 'IMPORT';
out.importButtonTitle = 'Import a document from a local file';
out.exportButton = 'EXPORT';
out.exportButtonTitle = 'Export this document to a local file';
out.exportPrompt = 'What would you like to name your file?';
out.back = '&#8656; Back';
out.backToCryptpad = '⇐ Back to Cryptpad';
out.changeNameButton = 'Change name';
out.changeNamePrompt = 'Change your name: ';
out.renameButton = 'RENAME';
out.renameButtonTitle = 'Change the title under which this document is listed on your home page';
out.renamePrompt = 'How would you like to title this pad?';
out.renameConflict = 'Another pad already has that title';
out.forgetButton = 'FORGET';
out.forgetButtonTitle = 'remove this document from your home page listings';
out.forgetPrompt = 'Clicking OK will remove the URL for this pad from localStorage, are you sure?';
out.shareButton = 'SHARE';
out.shareButtonTitle = "Copy URL to clipboard";
out.shareSuccess = 'Copied URL to clipboard';
out.shareFailed = "Failed to copy URL to clipboard";
out.presentButton = 'PRESENT';
out.presentButtonTitle = "Enter presentation mode";
out.presentSuccess = 'Hit ESC to exit presentation mode';
out.commitButton = 'COMMIT';
out.disconnectAlert = 'Network connection lost!';
out.tryIt = ' out!';
out.recentPads = 'Your recent pads (stored only in your browser)';
out.okButton = 'OK (enter)';
out.cancelButton = 'Cancel (esc)';
out.loginText = '<p>Your username and password are used to generate a unique key which is never known by our server.</p>\n' +
'<p>Be careful not to forget your credentials, as they are impossible to recover</p>';
// TODO : move at the beginning
out.type = {};
out.type.pad = 'Pad';
out.type.code = 'Code';
out.type.poll = 'Poll';
out.type.slide = 'Presentation';
out.forget = "Forget";
// Polls
out.poll_title = "Zero Knowledge Date Picker";
out.poll_subtitle = "Zero Knowledge, <em>realtime</em> scheduling";
out.poll_p_save = "Your settings are updated instantly, so you never need to save.";
out.poll_p_encryption = "All your input is encrypted so only people who have the link can access it. Even the server cannot see what you change.";
out.poll_p_howtouse = "Enter your name in the input field below and check the box for times when you are available";
out.promptName = "What is you name ?";
out.wizardButton = 'WIZARD';
out.wizardLog = "Click the button in the top left to return to your poll";
out.wizardTitle = "Use the wizard to create your poll";
out.wizardConfirm = "Are you really ready to add these options to your poll?";
out.poll_closeWizardButton = "Close wizard";
out.poll_closeWizardButtonTitle = "Close wizard";
out.poll_wizardComputeButton = "Compute Options";
out.poll_wizardClearButton = "Clear Table";
out.poll_wizardDescription = "Automatically create a number of options by entering any number of dates and times segments";
out.poll_wizardAddDateButton = "+ Dates";
out.poll_wizardAddTimeButton = "+ Times";
out.poll_addUserButton = "+ Users";
out.poll_addUserButtonTitle = "Click to add a user";
out.poll_addOptionButton = "+ Options";
out.poll_addOptionButtonTitle = "Click to add an option";
out.poll_addOption = "Propose an option";
out.poll_optionPlaceholder = "Option";
out.poll_addUser = "Enter a name";
out.poll_userPlaceholder = "Your name";
out.poll_removeOption = "Are you sure you'd like to remove this option?";
out.poll_removeOptionTitle = "Remove the row";
out.poll_removeUser = "Are you sure you'd like to remove this user?";
out.poll_removeUserTitle = "Remove the column";
out.poll_editOption = "Are you sure you'd like to edit this option?";
out.poll_editOptionTitle = "Edit the row";
out.poll_editUser = "Are you sure you'd like to edit this user?";
out.poll_editUserTitle = "Edit the column";
out.poll_titleHint = "Title";
out.poll_descriptionHint = "Description";
// index.html
out.main_p1 = 'CryptPad is the <strong>zero knowledge</strong> realtime collaborative editor. Encryption carried out in your web browser protects the data from the server, the cloud, and the NSA. The secret encryption key is stored in the URL <a href="https://en.wikipedia.org/wiki/Fragment_identifier">fragment identifier</a> which is never sent to the server but is available to javascript so by sharing the URL, you give authorization to others who want to participate.';
out.main_p2 = 'This project uses the <a href="http://ckeditor.com/">CKEditor</a> Visual Editor, <a href="https://codemirror.net/">CodeMirror</a>, and the <a href="https://github.com/xwiki-contrib/chainpad">ChainPad</a> realtime engine.';
out.main_howitworks = 'How It Works';
out.main_howitworks_p1 = 'CryptPad uses a variant of the <a href="https://en.wikipedia.org/wiki/Operational_transformation">Operational transformation</a> algorithm which is able to find distributed consensus using a Nakamoto Blockchain, a construct popularized by <a href="https://en.wikipedia.org/wiki/Bitcoin">Bitcoin</a>. This way the algorithm can avoid the need for a central server to resolve Operational Transform Edit Conflicts and without the need for resolving conflicts, the server can be kept unaware of the content which is being edited on the pad.';
out.main_about = 'About';
out.main_about_p1 = 'You can read more about our <a href="/privacy.html" title="">privacy policy</a> and <a href="/terms.html">terms of service</a>.';
out.main_about_p2 = 'If you have any questions or comments, you can <a href="https://twitter.com/cryptpad">tweet us</a>, open an issue <a href="https://github.com/xwiki-labs/cryptpad/issues/" title="our issue tracker">on github</a>, come say hi on irc (<a href="http://webchat.freenode.net?channels=%23cryptpad&uio=MT1mYWxzZSY5PXRydWUmMTE9Mjg3JjE1PXRydWUe7" title="freenode webchat">irc.freenode.net</a>), or <a href="mailto:sftfbsdiAyxjlj/dpn">send us an email</a>.';
out.main_oops = '<strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.';
out.table_type = 'Type';
out.table_link = 'Link';
out.table_created = 'Created';
out.table_last = 'Last Accessed';
out.button_newpad = 'CREATE NEW WYSIWYG PAD';
out.button_newcode = 'CREATE NEW CODE PAD';
out.button_newpoll = 'CREATE NEW POLL';
out.button_newslide = 'CREATE NEW PRESENTATION';
// privacy.html
out.policy_title = 'Cryptpad Privacy Policy';
out.policy_whatweknow = 'What we know about you';
out.policy_whatweknow_p1 = 'As an application that is hosted on the web, Cryptpad has access to metadata exposed by the HTTP protocol. This includes your IP address, and various other HTTP headers that can be used to identify your particular browser. You can see what information your browser is sharing by visiting <a target="_blank" href="https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending" title="what http headers is my browser sending">WhatIsMyBrowser.com</a>.';
out.policy_whatweknow_p2 = 'We use <a href="https://piwik.org/" target="_blank" title="open source analytics platform">Piwik</a>, an open source analytics platform, to learn more about our users. Piwik tells us about how you found Cryptpad, via direct entry, through a search engine, or via a referral from another web service like Reddit or Twitter. We also learn when you visit, what links you click while on our informational pages, and how long you stay on a particular page.';
out.policy_whatweknow_p3 = 'These analytics tools are only used on informational pages. We do not collect any information about your usage of our zero-knowledge applications.';
out.policy_howweuse = 'How we use what we learn';
out.policy_howweuse_p1 = 'We use this information to make better decisions about promoting Cryptpad, by evaluating which of our past efforts were successful. Information about your location lets us know whether we should consider providing better support for languages other than English.';
out.policy_howweuse_p2 = "Information about your browser (whether it's a desktop or mobile operating system) helps us make decisions when prioritizing feature improvements. Our development team is small, and we try to make choices that will improve as many users' experience as possible.";
out.policy_whatwetell = 'What we tell others about you';
out.policy_whatwetell_p1 = 'We do not furnish to third parties the information that we gather or that you provide to us unless we are legally required to do so.';
out.policy_links = 'Links to other sites';
out.policy_links_p1 = 'This site contains links to other sites, including those produced by other organizations. We are not responsible for the privacy practices or the contents of any outside sites. As a general rule, links to outside sites are launched in a new browser window, to make clear that you are leaving Cryptpad.fr.';
out.policy_ads = 'Advertisement';
out.policy_ads_p1 = 'We do not display any online advertising, though we may link to the bodies which are financing our research.';
out.policy_choices = 'Choices you have';
out.policy_choices_open = 'Our code is open source, so you always have the option of hosting your own instance of Cryptpad.';
out.policy_choices_vpn = 'If you want to use our hosted instance, but don\'t want to expose your IP address, you can protect your IP using the <a href="https://www.torproject.org/projects/torbrowser.html.en" title="downloads from the Tor project" target="_blank">Tor browser bundle</a>, or a <a href="https://riseup.net/en/vpn" title="VPNs provided by Riseup" target="_blank">VPN</a>.';
out.policy_choices_ads = 'If you just want to block our analytics platform, you can use adblocking tools like <a href="https://www.eff.org/privacybadger" title="download privacy badger" target="_blank">Privacy Badger</a>.';
// terms.html
out.tos_title = "Cryptpad Terms of Service";
out.tos_legal = "Please don't be malicious, abusive, or do anything illegal.";
out.tos_availability = "We hope you find this service useful, but availability or performance cannot be guaranteed. Please export your data regularly.";
out.tos_e2ee = "Cryptpad documents can be read or modified by anyone who can guess or otherwise obtain the document's fragment identifier. We recommend that you use end-to-end-encrypted (e2ee) messaging technology to share URLs, and assume no liability in the event that such a URL is leaked.";
out.tos_logs = "Metadata provided by your browser to the server may be logged for the purpose of maintaining the service.";
out.tos_3rdparties = "We do not provide individualized data to third parties unless required to by law.";
// BottomBar.html
out.bottom_love = '<a href="http://www.xwiki.com/" target="_blank">Made with <img class="bottom-bar-heart" src="/customize/heart.png" /> in <img class="bottom-bar-fr" src="/customize/fr.png" /></a>';
out.bottom_support = '<a href="http://labs.xwiki.com/" title="XWiki Labs" target="_blank">An <img src="/customize/logo-xwiki2.png" alt="XWiki SAS" class="bottom-bar-xwiki"/> Labs Project </a> with the support of <a href="http://ng.open-paas.org/" title="OpenPaaS::ng" target="_blank"> <img src="/customize/openpaasng.png" alt="OpenPaaS-ng" class="bottom-bar-openpaas" /></a>';
return out;
});

@ -716,5 +716,7 @@ define([
}; };
}; };
Messages._applyTranslation();
return common; return common;
}); });

@ -224,7 +224,7 @@ define([
return { return {
failed: function () { failed: function () {
connected = false; connected = false;
userListElement.textContent = 'Disconnected'; userListElement.textContent = Messages.disconnected;
lagElement.textContent = ''; lagElement.textContent = '';
}, },
reconnecting: function (userId) { reconnecting: function (userId) {

@ -3,7 +3,7 @@
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Zero Knowledge Date Picker</title> <title data-localization="poll_title">Zero Knowledge Date Picker</title>
<link rel="icon" type="image/png" <link rel="icon" type="image/png"
href="/customize/main-favicon.png" href="/customize/main-favicon.png"
data-main-favicon="/customize/main-favicon.png" data-main-favicon="/customize/main-favicon.png"
@ -41,10 +41,10 @@
<sub><a href="/"></a></sub> <sub><a href="/"></a></sub>
</div> </div>
<h1>CryptPoll</h1> <h1>CryptPoll</h1>
<h2>Zero Knowledge, <em>realtime</em> scheduling</h2> <h2 data-localization="poll_subtitle"></h2>
<p>Your settings are updated instantly, so you never need to save.</p> <p data-localization="poll_p_save"></p>
<p>All your input is encrypted so only people who have the link can access it. Even the server cannot see what you change.</p> <p data-localization="poll_p_encryption"></p>
<hr> <hr>
<br> <br>
@ -53,7 +53,7 @@
<input type="text" id="title" placeholder="title"><br /> <input type="text" id="title" placeholder="title"><br />
<textarea id="description" placeholder="description"></textarea> <textarea id="description" placeholder="description"></textarea>
<p>Enter your name in the input field below and check the box for times when you are available</p> <p data-localization="poll_p_howtouse"></p>
<!-- Table markup--> <!-- Table markup-->
<table id="table"> <table id="table">
@ -62,7 +62,7 @@
<thead> <thead>
<tr> <tr>
<td> <td>
<div id="adduser" class="clickable" title="click to add a user">+ Users</div> <div id="adduser" class="clickable" data-localization="poll_addUserButton" data-localization-title="poll_addUserButtonTitle"></div>
</td> </td>
</tr> </tr>
</thead> </thead>
@ -70,7 +70,7 @@
<tfoot> <tfoot>
<tr> <tr>
<td> <td>
<div id="addoption" class="clickable" title="click to add an option">+ Options</div> <div id="addoption" class="clickable" data-localization="poll_addOptionButton" data-localization-title="poll_addOptionButtonTitle"></div>
</td> </td>
</tr> </tr>
</tfoot> </tfoot>
@ -82,28 +82,28 @@
<div class="modal" id="wizard-modal"> <div class="modal" id="wizard-modal">
<button id="close-wizard" class="button action" title="close wizard">Close wizard</button> <button id="close-wizard" class="button action" data-localization="poll_closeWizardButton" data-localization-title="poll_closeWizardButtonTitle"></button>
<div class="center"> <div class="center">
<div id="modal-toolbar"> <div id="modal-toolbar">
<button id="get-options" class="action button">Compute Options</button> <button id="get-options" class="action button" data-localization="poll_wizardComputeButton"></button>
<button id="clear-table" class="action button">Clear Table</button> <button id="clear-table" class="action button" data-localization="poll_wizardClearButton"></button>
</div> </div>
<h2>Automatically create a number of options by entering any number of dates and times segments </h2> <h2 data-localization="poll_wizardDescription"></h2>
<table id="wizard-table"> <table id="wizard-table">
<thead> <thead>
<tr> <tr>
<td> <td>
<div id="adddate" class="clickable">+ Dates</div> <div id="adddate" class="clickable" data-localization="poll_wizardAddDateButton"></div>
</td> </td>
</tr> </tr>
</thead> </thead>
<tfoot> <tfoot>
<tr> <tr>
<td> <td>
<div id="addtime" class="clickable">+ Times</div> <div id="addtime" class="clickable" data-localization="poll_wizardAddTimeButton"></div>
</td> </td>
</tr> </tr>
</tfoot> </tfoot>

@ -67,8 +67,8 @@ define([
module.Wizard = Wizard; module.Wizard = Wizard;
// special UI elements // special UI elements
var $title = $('#title').attr('placeholder', Messages.dateTitleHint || 'title'); var $title = $('#title').attr('placeholder', Messages.poll_titleHint || 'title');
var $description = $('#description').attr('placeholder', Messages.dateDescription || 'description'); var $description = $('#description').attr('placeholder', Messages.poll_descriptionHint || 'description');
var items = [$title, $description]; var items = [$title, $description];
@ -231,7 +231,7 @@ define([
'class': 'save action', 'class': 'save action',
'for': id, 'for': id,
}) })
.text('COMMIT') // TODO translate .text(Messages.commitButton)
.click(function () { .click(function () {
module.activeColumn = ''; module.activeColumn = '';
makeUserEditable(id, false); makeUserEditable(id, false);
@ -254,7 +254,7 @@ define([
var $user = Input({ var $user = Input({
id: id, id: id,
type: 'text', type: 'text',
placeholder: 'your name', placeholder: Messages.poll_userPlaceholder,
disabled: true, disabled: true,
}).on('keyup change', function () { }).on('keyup change', function () {
proxy.table.cols[id] = $user.val() || ""; proxy.table.cols[id] = $user.val() || "";
@ -262,10 +262,10 @@ define([
var $edit = $('<span>', { var $edit = $('<span>', {
'class': 'edit', 'class': 'edit',
title: 'edit column', // TODO translate title: Messages.poll_editUserTitle,
}).click(function () { }).click(function () {
if ($edit.hasClass('editable')) { return; } if ($edit.hasClass('editable')) { return; }
Cryptpad.confirm("Are you sure you'd like to edit this user?", Cryptpad.confirm(Messages.poll_editUser,
function (yes) { function (yes) {
if (!yes) { return; } if (!yes) { return; }
makeUserEditable(id, true); makeUserEditable(id, true);
@ -277,9 +277,9 @@ define([
var $remove = $('<span>', { var $remove = $('<span>', {
'class': 'remove', 'class': 'remove',
'title': 'remove column', // TODO translate 'title': Messages.poll_removeUserTitle,
}).text('✖').click(function () { }).text('✖').click(function () {
Cryptpad.confirm("Are you sure you'd like to remove this user?", // TODO translate Cryptpad.confirm(Messages.poll_removeUser,
function (yes) { function (yes) {
if (!yes) { return; } if (!yes) { return; }
// remove commit button, and anything else... // remove commit button, and anything else...
@ -329,7 +329,7 @@ define([
var makeOption = function (proxy, id, value) { var makeOption = function (proxy, id, value) {
var $option = Input({ var $option = Input({
type: 'text', type: 'text',
placeholder: 'option', placeholder: Messages.optionPlaceholder,
id: id, id: id,
}).on('keyup change', function () { }).on('keyup change', function () {
proxy.table.rows[id] = $option.val(); proxy.table.rows[id] = $option.val();
@ -337,11 +337,11 @@ define([
var $edit = $('<span>', { var $edit = $('<span>', {
'class': 'edit', 'class': 'edit',
title: 'edit option', // TODO translate title: Messages.poll_editOptionTitle,
}) })
.click(function () { .click(function () {
if ($edit.hasClass('editable')) { return; } if ($edit.hasClass('editable')) { return; }
Cryptpad.confirm("Are you sure you'd like to edit this option?", Cryptpad.confirm(Messages.poll_editOption,
function (yes) { function (yes) {
if (!yes) { return; } if (!yes) { return; }
makeOptionEditable(id, true); makeOptionEditable(id, true);
@ -353,10 +353,9 @@ define([
var $remove = $('<span>', { var $remove = $('<span>', {
'class': 'remove', 'class': 'remove',
'title': 'remove row', // TODO translate 'title': Messages.poll_removeOptionTitle,
}).text('✖').click(function () { }).text('✖').click(function () {
// TODO translate var msg = Messages.poll_removeOption;
var msg = "Are you sure you'd like to remove this option?";
Cryptpad.confirm(msg, function (yes) { Cryptpad.confirm(msg, function (yes) {
if (!yes) { return; } if (!yes) { return; }
removeRow(proxy, id); removeRow(proxy, id);
@ -384,7 +383,7 @@ define([
if (!module.isEditable) { return; } if (!module.isEditable) { return; }
var id = coluid(); var id = coluid();
var msg = "Enter a name"; // TODO translate var msg = Messages.poll_addUser;
Cryptpad.prompt(msg, "", function (name) { Cryptpad.prompt(msg, "", function (name) {
if (name === null) { return; } if (name === null) { return; }
makeUser(module.rt.proxy, id, name).val(name); makeUser(module.rt.proxy, id, name).val(name);
@ -396,7 +395,7 @@ define([
if (!module.isEditable) { return; } if (!module.isEditable) { return; }
var id = rowuid(); var id = rowuid();
var msg = "Propose an option"; var msg = Messages.poll_addOption;
Cryptpad.prompt(msg, "", function (option) { Cryptpad.prompt(msg, "", function (option) {
if (option === null || !option) { return; } if (option === null || !option) { return; }
makeOption(module.rt.proxy, id, option).val(option).focus(); makeOption(module.rt.proxy, id, option).val(option).focus();
@ -405,7 +404,7 @@ define([
}); });
Wizard.$getOptions.click(function () { Wizard.$getOptions.click(function () {
Cryptpad.confirm("Are you really ready to add these options to your poll?", function (yes) { Cryptpad.confirm(Messages.wizardConfirm, function (yes) {
if (!yes) { return; } if (!yes) { return; }
var options = Wizard.computeSlots(function (a, b) { var options = Wizard.computeSlots(function (a, b) {
return a + ' ('+ b + ')'; return a + ' ('+ b + ')';
@ -652,7 +651,7 @@ define([
var $toolbar = $('#toolbar'); var $toolbar = $('#toolbar');
$toolbar.find('sub a').text('⇐ back to Cryptpad'); $toolbar.find('sub a').text(Messages.backToCryptpad);
var Button = function (opt) { var Button = function (opt) {
return $('<button>', opt); return $('<button>', opt);
@ -719,11 +718,11 @@ define([
$toolbar.append(Button({ $toolbar.append(Button({
id: 'wizard', id: 'wizard',
'class': 'wizard button action', 'class': 'wizard button action',
title: 'wizard!', title: Messages.wizardTitle,
}).text('WIZARD').click(function () { }).text(Messages.wizardButton).click(function () {
Wizard.show(); Wizard.show();
if (Wizard.hasBeenDisplayed) { return; } if (Wizard.hasBeenDisplayed) { return; }
Cryptpad.log("click the button in the top left to return to your poll"); Cryptpad.log(Messages.wizardLog);
Wizard.hasBeenDisplayed = true; Wizard.hasBeenDisplayed = true;
})); }));
@ -793,7 +792,7 @@ define([
module.activeColumn = ''; module.activeColumn = '';
var promptForName = function () { var promptForName = function () {
// HERE // HERE
Cryptpad.prompt("What is your name?", "", function (name, ev) { Cryptpad.prompt(Messages.promptName, "", function (name, ev) {
if (name === null) { if (name === null) {
name = ''; name = '';
} }
@ -860,7 +859,7 @@ define([
}).on('ready', ready) }).on('ready', ready)
.on('disconnect', function () { .on('disconnect', function () {
setEditable(false); setEditable(false);
Cryptpad.alert("Network connection lost!"); Cryptpad.alert(Messages.common_connectionLost);
}); });
}); });

@ -116,12 +116,12 @@ define([
var $present = Button({ var $present = Button({
id: 'present', id: 'present',
'class': 'present button action', 'class': 'present button action',
title: 'enter presentation mode', title: Messages.presentButtonTitle,
}) })
.text("PRESENT") .text(Messages.presentButton)
.click(function () { .click(function () {
Slide.show(true, $textarea.val()); Slide.show(true, $textarea.val());
Cryptpad.log("Hit ESC to exit presentation mode"); Cryptpad.log(Messages.presentSuccess);
}); });
var $forget = Button({ var $forget = Button({
@ -206,18 +206,18 @@ define([
var $share = Button({ var $share = Button({
id: 'share', id: 'share',
'class': 'export button action', 'class': 'share button action',
title: 'copy url', // TODO translate title: Messages.shareButtonTitle,
}) })
.text('SHARE') .text(Messages.shareButton)
.click(function () { .click(function () {
var text = window.location.href; var text = window.location.href;
var success = Clipboard.copy(text); var success = Clipboard.copy(text);
if (success) { if (success) {
Cryptpad.log("copied URL to clipboard"); Cryptpad.log(Messages.shareSuccess);
return; return;
} }
Cryptpad.warn("failed to copy URL to clipboard"); Cryptpad.warn(Messages.shareFailed);
}); });
$bar $bar
@ -283,7 +283,7 @@ define([
var onAbort = config.onAbort = function (info) { var onAbort = config.onAbort = function (info) {
$textarea.attr('disabled', true); $textarea.attr('disabled', true);
Cryptpad.alert("Server Connection Lost"); Cryptpad.alert(Messages.common_connectionLost);
}; };
Cryptpad.ready(function () { Cryptpad.ready(function () {

Loading…
Cancel
Save