finished localizations except for download.js

This commit is contained in:
Abhinav Adduri 2017-07-18 15:46:44 -07:00
parent 45eccc1cad
commit 7ed30f497b
8 changed files with 546 additions and 2461 deletions

View File

@ -17,7 +17,7 @@ $(document).ready(function() {
const $copyBtn = $('#copy-btn'); const $copyBtn = $('#copy-btn');
$copyBtn.attr('disabled', false); $copyBtn.attr('disabled', false);
$('#link').attr('disabled', false); $('#link').attr('disabled', false);
$copyBtn.html('Copy to Clipboard'); $copyBtn.attr('data-l10n-id', 'copyUrlFormButton');
$('#upload-progress').hide(); $('#upload-progress').hide();
$('#share-link').hide(); $('#share-link').hide();
@ -51,7 +51,7 @@ $(document).ready(function() {
window.setTimeout(() => { window.setTimeout(() => {
$copyBtn.attr('disabled', false); $copyBtn.attr('disabled', false);
$('#link').attr('disabled', false); $('#link').attr('disabled', false);
$copyBtn.html('Copy to Clipboard'); $copyBtn.attr('data-l10n-id', 'copyUrlFormButton');
}, 3000); }, 3000);
}); });
@ -75,7 +75,7 @@ $(document).ready(function() {
$('#upload-error').hide(); $('#upload-error').hide();
$copyBtn.attr('disabled', false); $copyBtn.attr('disabled', false);
$('#link').attr('disabled', false); $('#link').attr('disabled', false);
$copyBtn.html('Copy to Clipboard'); $copyBtn.attr('data-l10n-id', 'copyUrlFormButton');
$('.upload-window').removeClass('ondrag'); $('.upload-window').removeClass('ondrag');
$('#page-one').show(); $('#page-one').show();
}); });
@ -164,7 +164,7 @@ $(document).ready(function() {
expiry: expiration expiry: expiration
}; };
localStorage.setItem(info.fileId, JSON.stringify(fileData)); localStorage.setItem(info.fileId, JSON.stringify(fileData));
$('#upload-filename').html('Ready to Send'); $('#upload-filename').attr('data-l10n-id', 'uploadSuccessConfirmHeader');
t = window.setTimeout(() => { t = window.setTimeout(() => {
$('#page-one').hide(); $('#page-one').hide();
$('#upload-progress').hide(); $('#upload-progress').hide();
@ -173,7 +173,9 @@ $(document).ready(function() {
}, 2000); }, 2000);
populateFileList(JSON.stringify(fileData)); populateFileList(JSON.stringify(fileData));
notify('Your upload has finished.'); document.l10n.formatValue('notifyUploadDone').then(str => {
notify(str);
});
}) })
.catch(err => { .catch(err => {
Raven.captureException(err); Raven.captureException(err);
@ -225,17 +227,30 @@ $(document).ready(function() {
const url = file.url.trim() + `#${file.secretKey}`.trim(); const url = file.url.trim() + `#${file.secretKey}`.trim();
$('#link').attr('value', url); $('#link').attr('value', url);
$('#copy-text').html( $('#copy-text').attr(
'Copy and share the link to send your file: ' + file.name 'data-l10n-args',
'{"filename": "' + file.name + '"}'
);
$('#copy-text').attr(
'data-l10n-id',
'copyUrlFormLabelWithName'
); );
$popupText.attr('tabindex', '-1'); $popupText.attr('tabindex', '-1');
name.appendChild(cellText); name.appendChild(cellText);
// create delete button // create delete button
del.innerHTML = '<span class="icon-cancel-1" title="Delete"></span>';
link.innerHTML = '<span class="icon-docs" title="Copy URL"></span>'; const delSpan = document.createElement('span');
$(delSpan).addClass('icon-cancel-1');
$(delSpan).attr('data-l10n-id', 'deleteButtonHover');
del.appendChild(delSpan);
const linkSpan = document.createElement('span');
$(linkSpan).addClass('icon-docs');
$(linkSpan).attr('data-l10n-id', 'copyUrlHover');
link.appendChild(linkSpan);
link.style.color = '#0A8DFF'; link.style.color = '#0A8DFF';
//copy link to clipboard when icon clicked //copy link to clipboard when icon clicked
$(link).click(function() { $(link).click(function() {
@ -245,9 +260,15 @@ $(document).ready(function() {
aux.select(); aux.select();
document.execCommand('copy'); document.execCommand('copy');
document.body.removeChild(aux); document.body.removeChild(aux);
link.innerHTML = 'Copied!'; document.l10n.formatValue('copiedUrl')
.then(translated => {
link.innerHTML = translated;
})
window.setTimeout(() => { window.setTimeout(() => {
link.innerHTML = '<span class="icon-docs" title="Copy URL"></span>'; const linkSpan = document.createElement('span');
$(linkSpan).addClass('icon-docs');
$(linkSpan).attr('data-l10n-id', 'copyUrlHover');
$(link).html(linkSpan);
}, 500); }, 500);
}); });
@ -293,9 +314,19 @@ $(document).ready(function() {
// create popup // create popup
popupDiv.classList.add('popup'); popupDiv.classList.add('popup');
$popupText.html( const popupDelSpan = document.createElement('span');
'<span class="del-file">Delete</span><span class="nvm" > Nevermind</span>' $(popupDelSpan).addClass('del-file');
); $(popupDelSpan).attr('data-l10n-id', 'sentFilesTitle4');
const popupNvmSpan = document.createElement('span');
$(popupNvmSpan).addClass('nvm');
$(popupNvmSpan).attr('data-l10n-id', 'nevermindButton');
$popupText.html([
popupDelSpan,
'&nbsp;',
popupNvmSpan
]);
// delete file // delete file
$popupText.find('.del-file').click(e => { $popupText.find('.del-file').click(e => {

2738
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -15,6 +15,7 @@
"helmet": "^3.6.1", "helmet": "^3.6.1",
"jquery": "^3.2.1", "jquery": "^3.2.1",
"jquery-circle-progress": "^1.2.2", "jquery-circle-progress": "^1.2.2",
"l20n": "^5.0.0",
"mozlog": "^2.1.1", "mozlog": "^2.1.1",
"raven": "^2.1.0", "raven": "^2.1.0",
"raven-js": "^3.16.0", "raven-js": "^3.16.0",

View File

@ -0,0 +1,77 @@
title = Firefox Send
uploadPageHeader = Private, Encrypted File Sharing
uploadPageExplainer = Send files through a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever.
uploadPageLearnMore = Learn more
uploadPageDropMessage = Drop your files here to start uploading
uploadPageBrowseButton = Select a file on your computer
.title = {uploadPageBrowseButtonTitle}
uploadPageBrowseButtonTitle = Upload file
uploadingPageHeader = Uploading Your File
notifyUploadDone = Your upload has finished.
uploadingPageMessage = Once your file uploads you will be able to set expiry options.
uploadingPageCancel = Cancel upload
.title = {uploadingPageCancel}
uploadingPageLargeFileMessage = This file is large and may take awhile to upload. Sit tight!
uploadingFileNotification = Notify me when the upload is complete.
uploadSuccessConfirmHeader = Ready to Send
//Notethe spec suggests that this string is editable. That feature will not appear at Launch
uploadSuccessTimingHeader = The link to your file will expire after 1 download or in 24 hours.
copyUrlFormLabel = Copy and share the link to send your file:
copyUrlFormLabelWithName = Copy and share the link to send your file: { $filename }
// Note: Title text for button should be the same
copyUrlFormButton = Copy to clipboard
.title = {copyUrlFormButton}
copiedUrl = Copied!
deleteFileButton = Delete file
.title = {deleteFileButton}
sendAnotherFileLink = Send another file
.title = {sendAnotherFileLink}
downloadFileName = Download { $filename }
downloadFileSize = ({ $size })
downloadMessage = Your friend is sending you a file with Firefox Send, a service that allows you to share files with a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever.
downloadButtonLabel = Download
.title = {downloadButtonLabel}
sendYourFilesLink = Try Firefox Send
.title = {sendYourFilesLink}
downloadingPageProgress = Downloading { $filename } ({ $size })
downloadingPageMessage = Please leave this tab open while we fetch your file and decrypt it.
errorPageHeader = Something went wrong!
errorPageMessage = There has been an error uploading the file.
errorPageLink = Send another file
expiredPageHeader = This link has expired or never existed in the first place!
notSupportedHeader = Your browser is not supported.
notSupportedDetail = Unfortunately this browser does not support the web technology that powers Firefox Send. You'll need to try another browser. We recommend Firefox!
downloadFirefoxButtonSub = Free Download
sentFilesTitle1 = File
sentFilesTitle2 = Copy URL
sentFilesTitle3 = Expires In
sentFilesTitle4 = Delete
nevermindButton = Nevermind
deleteButtonHover.title = {sentFilesTitle4}
copyUrlHover.title = {sentFilesTitle2}
footerLinkLegal = Legal
footerLinkAbout = About Test Pilot
footerLinkPrivacy = Privacy
footerLinkTerms = Terms
footerLinkCookies = Cookies

View File

@ -19,6 +19,8 @@ const mozlog = require('./log.js');
const log = mozlog('send.server'); const log = mozlog('send.server');
const STATIC_PATH = path.join(__dirname, '../public'); const STATIC_PATH = path.join(__dirname, '../public');
const L20N = path.join(__dirname, '../node_modules/l20n');
const LOCALES = path.join(__dirname, '../public/locales');
const app = express(); const app = express();
@ -63,6 +65,9 @@ app.use(
app.use(busboy()); app.use(busboy());
app.use(bodyParser.json()); app.use(bodyParser.json());
app.use(express.static(STATIC_PATH)); app.use(express.static(STATIC_PATH));
app.use('/l20n', express.static(L20N));
app.use('/download/*/l20n', express.static(L20N));
app.use('/download/*/locales', express.static(LOCALES));
app.get('/', (req, res) => { app.get('/', (req, res) => {
res.render('index', { res.render('index', {

View File

@ -1,4 +1,3 @@
<div class="send-logo"> <div class="send-logo">
<img src="/resources/send_logo.svg"/> <img src="/resources/send_logo.svg"/>
<img src="/resources/send_logo_type.svg"/> <img src="/resources/send_logo_type.svg"/>
@ -8,24 +7,25 @@
{{#if filename}} {{#if filename}}
<div id="download-page-one"> <div id="download-page-one">
<div class="title"> <div class="title">
Download <span id="dl-filename">{{{filename}}}</span> ({{{filesize}}}) <span id="dl-filename"
</div> data-l10n-id="downloadFileName"
<div class="description"> data-l10n-args='{"filename": "{{{filename}}}"}'></span>
Your friend is sending you a file with Firefox Send, a service that allows you to share files with a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever. <span data-l10n-id="downloadFileSize"
data-l10n-args='{"size": "{{{filesize}}}"}'></span>
</div> </div>
<div class="description" data-l10n-id="downloadMessage"></div>
<img src="/resources/illustration_download.svg" id="download-img" alt="Download"/> <img src="/resources/illustration_download.svg" id="download-img" alt="Download"/>
<div> <div>
<button id="download-btn" title="Download">Download</button> <button id="download-btn" data-l10n-id="downloadButtonLabel"></button>
</div> </div>
</div> </div>
<div id="download-progress"> <div id="download-progress">
<div class="title"> <div class="title"
Downloading {{{filename}}} ({{{filesize}}}) data-l10n-id="downloadingPageProgress"
</div> data-l10n-args='{"filename": "{{{filename}}}", "size": "{{{filesize}}}"}'>
<div class="description">
Please leave this tab open while we fetch your file and decrypt it.
</div> </div>
<div class="description" data-l10n-id="downloadingPageMessage"></div>
<!-- progress bar here --> <!-- progress bar here -->
<div class="progress-bar" id="dl-progress"> <div class="progress-bar" id="dl-progress">
<div class="percentage"> <div class="percentage">
@ -38,23 +38,15 @@
</div> </div>
</div> </div>
<div class="send-new" title="Try Firefox Send"> <div class="send-new" data-l10n-id="sendYourFilesLink"></div>
Try Firefox Send
</div>
{{else}} {{else}}
<div class="title"> <div class="title" data-l10n-id="expiredPageHeader"></div>
This link has expired or never existed in the first place.
</div>
<div class="share-window"> <div class="share-window">
<img src="/resources/illustration_expired.svg" id="expired-img" alt="Link expired" /> <img src="/resources/illustration_expired.svg" id="expired-img" alt="Link expired" />
</div> </div>
<div class="expired-description"> <div class="expired-description" data-l10n-id="uploadPageExplainer"></div>
Send files through a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever. <div class="send-new" data-l10n-id="sendYourFilesLink"></div>
</div>
<div class="send-new" title="Try Firefox Send">
Try Firefox Send
</div>
{{/if}} {{/if}}
</div> </div>
</div> </div>

View File

@ -4,20 +4,18 @@
</div> </div>
<div class="all"> <div class="all">
<div id="page-one"> <div id="page-one">
<div class="title"> <div class="title" data-l10n-id="uploadPageHeader"></div>
Private, Encrypted File Sharing
</div>
<div class="description"> <div class="description">
Send files through a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever.<br> <a href="https://testpilot.firefox.com/experiments/send" class="link">Learn more</a> <div data-l10n-id="uploadPageExplainer"></div>
<a href="https://testpilot.firefox.com/experiments/send" class="link" data-l10n-id="uploadPageLearnMore"></a>
</div> </div>
<div class="upload-window" > <div class="upload-window" >
<div id="upload-img"><img src="/resources/upload.svg" alt="Upload"/></div> <div id="upload-img"><img src="/resources/upload.svg" alt="Upload"/></div>
<div id="upload-text"> <div id="upload-text" data-l10n-id="uploadPageDropMessage"></div>
Drop your files here to start uploading
</div>
<form method="post" action="upload" enctype="multipart/form-data"> <form method="post" action="upload" enctype="multipart/form-data">
<label for="file-upload" id="browse" title="Upload file">Select a file on your computer</label> <label for="file-upload" id="browse"
data-l10n-id="uploadPageBrowseButton"></label>
<input id="file-upload" type="file" name="fileUploaded" /> <input id="file-upload" type="file" name="fileUploaded" />
</form> </form>
</div> </div>
@ -27,10 +25,10 @@
<thead> <thead>
<tr> <tr>
<!-- htmllint attr-bans="false" --> <!-- htmllint attr-bans="false" -->
<th width="35%">File</th> <th width="35%" data-l10n-id="sentFilesTitle1"></th>
<th width="25%">Copy URL</th> <th width="25%" data-l10n-id="sentFilesTitle2"></th>
<th width="21%">Expires in</th> <th width="21%" data-l10n-id="sentFilesTitle3"></th>
<th width="12%">Delete</th> <th width="12%" data-l10n-id="sentFilesTitle4"></th>
<!-- htmllint tag-bans="$previous" --> <!-- htmllint tag-bans="$previous" -->
</tr> </tr>
</thead> </thead>
@ -42,9 +40,7 @@
</div> </div>
<div id="upload-progress"> <div id="upload-progress">
<div class="title" id="upload-filename"> <div class="title" id="upload-filename" data-l10n-id="uploadingPageHeader"></div>
Uploading Your File
</div>
<div class="description"> <div class="description">
</div> </div>
@ -57,57 +53,41 @@
</div> </div>
<div class="upload"> <div class="upload">
<div class="progress-text"></div> <div class="progress-text"></div>
<div id="cancel-upload" title="Cancel Upload">Cancel Upload</div> <div id="cancel-upload"
data-l10n-id="uploadingPageCancel"></div>
</div> </div>
</div> </div>
<div id="share-link"> <div id="share-link">
<div class="title"> <div class="title" data-l10n-id="uploadSuccessTimingHeader"></div>
This encrypted link will expire after 1 download or in 24 hours
</div>
<div id="share-window"> <div id="share-window">
<div id="copy-text"> <div id="copy-text" data-l10n-id="copyUrlFormLabel"></div>
Copy and share the link to send your file:
</div>
<div id="copy"> <div id="copy">
<input id="link" type="url" value="" readonly/> <input id="link" type="url" value="" readonly/>
<button id="copy-btn" title="Copy to Clipboard">Copy to Clipboard</button> <button id="copy-btn" data-l10n-id="copyUrlFormButton"></button>
</div>
<button id="delete-file" title="Delete file">Delete file</button>
<div class="send-new" title="Send another file">
Send another file
</div> </div>
<button id="delete-file" data-l10n-id="deleteFileButton"></button>
<div class="send-new" data-l10n-id="sendAnotherFileLink"></div>
</div> </div>
</div> </div>
<div id="upload-error"> <div id="upload-error">
<div class="title"> <div class="title" data-l10n-id="errorPageHeader"></div>
Something went wrong! <div class="expired-description" data-l10n-id="errorPageMessage"></div>
</div>
<div class="expired-description">
There has been an error uploading the file.
</div>
<img id="upload-error-img" src="/resources/illustration_error.svg" alt="Upload error" /> <img id="upload-error-img" src="/resources/illustration_error.svg" alt="Upload error" />
<div class="send-new" title="Send another file"> <div class="send-new" data-l10n-id="sendAnotherFileLink"></div>
Send another file
</div>
</div> </div>
<div id="unsupported-browser"> <div id="unsupported-browser">
<div class="title"> <div class="title" data-l10n-id="notSupportedHeader"></div>
Your browser is not supported. <div class="description" data-l10n-id="notSupportedDetail"></div>
</div>
<div class="description">
Unfortunately this browser does not support the web technology that powers Firefox Send. You'll need to try another browser. We recommend Firefox!
</div>
<a id="dl-firefox" href="https://www.mozilla.org/firefox/new/?scene=2" target="_blank"> <a id="dl-firefox" href="https://www.mozilla.org/firefox/new/?scene=2" target="_blank">
<img src="/resources/firefox_logo-only.svg" id="firefox-logo" alt="Firefox"/> <img src="/resources/firefox_logo-only.svg" id="firefox-logo" alt="Firefox"/>
<div id="dl-firefox-text">Firefox<br><span>Free Download</span></div> <div id="dl-firefox-text">Firefox<br>
<span data-l10n-id="downloadFirefoxButtonSub"></span>
</div>
</a> </a>
<div class="unsupported-description"> <div class="unsupported-description" data-l10n-id="uploadPageExplainer"></div>
Send files through a safe, private, and encrypted link that automatically expires to ensure your stuff does not remain online forever.
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -12,17 +12,22 @@
{{#if trackerId}} {{#if trackerId}}
{{> analytics trackerId=trackerId}} {{> analytics trackerId=trackerId}}
{{/if}} {{/if}}
<meta name="defaultLanguage" content="en-US">
<meta name="availableLanguages" content="en-US">
<link rel="localization" href="locales/send.{locale}.ftl">
<script defer src="/l20n/dist/web/l20n.js"></script>
</head> </head>
<body> <body>
{{{body}}} {{{body}}}
<div class="footer"> <div class="footer">
<div class="legal-links"> <div class="legal-links">
<a href="https://www.mozilla.org"><img class="mozilla-logo" src="/resources/mozilla-logo.svg"/></a> <a href="https://www.mozilla.org"><img class="mozilla-logo" src="/resources/mozilla-logo.svg"/></a>
<a href="https://www.mozilla.org/about/legal/">Legal</a> <a href="https://www.mozilla.org/about/legal/" data-l10n-id="footerLinkLegal"></a>
<a href="https://testpilot.firefox.com/about">About Test Pilot</a> <a href="https://testpilot.firefox.com/about" data-l10n-id="footerLinkAbout"></a>
<a href="https://testpilot.firefox.com/privacy">Privacy</a> <a href="https://testpilot.firefox.com/privacy" data-l10n-id="footerLinkPrivacy"></a>
<a href="https://testpilot.firefox.com/terms">Terms</a> <a href="https://testpilot.firefox.com/terms" data-l10n-id="footerLinkTerms"></a>
<a href="https://www.mozilla.org/en-US/privacy/websites/#cookies">Cookies</a> <a href="https://www.mozilla.org/en-US/privacy/websites/#cookies" data-l10n-id="footerLinkCookies"></a>
</div> </div>
<div class="social-links"> <div class="social-links">
<a href="https://github.com/mozilla/send" target="_blank"><img class="github" src="/resources/github-icon.svg"/></a> <a href="https://github.com/mozilla/send" target="_blank"><img class="github" src="/resources/github-icon.svg"/></a>