Add translatiosn for newsletter creation and listings

This commit is contained in:
Tautvidas Sipavičius
2016-03-22 17:35:40 +02:00
parent 8723aa4e4e
commit 74f3fa65cd
9 changed files with 224 additions and 116 deletions

View File

@@ -2,12 +2,14 @@ define(
[ [
'react', 'react',
'react-router', 'react-router',
'classnames' 'classnames',
'mailpoet'
], ],
function( function(
React, React,
Router, Router,
classNames classNames,
MailPoet
) { ) {
var Link = Router.Link; var Link = Router.Link;
@@ -21,20 +23,20 @@ define(
steps: [ steps: [
{ {
name: 'type', name: 'type',
label: 'Select type', label: MailPoet.I18n.t('selectType'),
link: '/new' link: '/new'
}, },
{ {
name: 'template', name: 'template',
label: 'Template' label: MailPoet.I18n.t('template')
}, },
{ {
name: 'editor', name: 'editor',
label: 'Designer' label: MailPoet.I18n.t('designer')
}, },
{ {
name: 'send', name: 'send',
label: 'Send' label: MailPoet.I18n.t('send')
} }
] ]
}; };
@@ -73,4 +75,4 @@ define(
return Breadcrumb; return Breadcrumb;
} }
); );

View File

@@ -4,39 +4,41 @@ define(
'react-router', 'react-router',
'listing/listing.jsx', 'listing/listing.jsx',
'classnames', 'classnames',
'jquery' 'jquery',
'mailpoet'
], ],
function( function(
React, React,
Router, Router,
Listing, Listing,
classNames, classNames,
jQuery jQuery,
MailPoet
) { ) {
var Link = Router.Link; var Link = Router.Link;
var columns = [ var columns = [
{ {
name: 'subject', name: 'subject',
label: 'Subject', label: MailPoet.I18n.t('subject'),
sortable: true sortable: true
}, },
{ {
name: 'status', name: 'status',
label: 'Status' label: MailPoet.I18n.t('status')
}, },
{ {
name: 'segments', name: 'segments',
label: 'Lists' label: MailPoet.I18n.t('lists')
}, },
{ {
name: 'created_at', name: 'created_at',
label: 'Created on', label: MailPoet.I18n.t('createdOn'),
sortable: true sortable: true
}, },
{ {
name: 'updated_at', name: 'updated_at',
label: 'Last modified on', label: MailPoet.I18n.t('lastModifiedOn'),
sortable: true sortable: true
} }
]; ];
@@ -48,11 +50,11 @@ define(
if(count === 1) { if(count === 1) {
message = ( message = (
'1 newsletter was moved to the trash.' MailPoet.I18n.t('oneNewsletterTrashed')
); );
} else { } else {
message = ( message = (
'%$1d newsletters were moved to the trash.' MailPoet.I18n.t('multipleNewslettersTrashed')
).replace('%$1d', count); ).replace('%$1d', count);
} }
MailPoet.Notice.success(message); MailPoet.Notice.success(message);
@@ -63,11 +65,11 @@ define(
if(count === 1) { if(count === 1) {
message = ( message = (
'1 newsletter was permanently deleted.' MailPoet.I18n.t('oneNewsletterDeleted')
); );
} else { } else {
message = ( message = (
'%$1d newsletters were permanently deleted.' MailPoet.I18n.t('multipleNewslettersDeleted')
).replace('%$1d', count); ).replace('%$1d', count);
} }
MailPoet.Notice.success(message); MailPoet.Notice.success(message);
@@ -78,11 +80,11 @@ define(
if(count === 1) { if(count === 1) {
message = ( message = (
'1 newsletter has been restored from the trash.' MailPoet.I18n.t('oneNewsletterRestored')
); );
} else { } else {
message = ( message = (
'%$1d newsletters have been restored from the trash.' MailPoet.I18n.t('multipleNewslettersRestored')
).replace('%$1d', count); ).replace('%$1d', count);
} }
MailPoet.Notice.success(message); MailPoet.Notice.success(message);
@@ -92,7 +94,7 @@ define(
var bulk_actions = [ var bulk_actions = [
{ {
name: 'trash', name: 'trash',
label: 'Trash', label: MailPoet.I18n.t('trash'),
onSuccess: messages.onTrash onSuccess: messages.onTrash
} }
]; ];
@@ -103,7 +105,7 @@ define(
link: function(item) { link: function(item) {
return ( return (
<a href={ `?page=mailpoet-newsletter-editor&id=${ item.id }` }> <a href={ `?page=mailpoet-newsletter-editor&id=${ item.id }` }>
Edit {MailPoet.I18n.t('edit')}
</a> </a>
); );
} }
@@ -137,7 +139,7 @@ define(
renderStatus: function(item) { renderStatus: function(item) {
if(!item.queue) { if(!item.queue) {
return ( return (
<span>Not sent yet.</span> <span>{MailPoet.I18n.t('notSentYet')}</span>
); );
} else { } else {
var progressClasses = classNames( var progressClasses = classNames(
@@ -155,9 +157,11 @@ define(
if(item.queue.status === 'completed') { if(item.queue.status === 'completed') {
label = ( label = (
<span> <span>
Sent to { {
item.queue.count_processed - item.queue.count_failed MailPoet.I18n.t('newsletterQueueCompleted')
} out of { item.queue.count_total }. .replace("%$1d", item.queue.count_processed - item.queue.count_failed)
.replace("%$2d", item.queue.count_total)
}
</span> </span>
); );
} else { } else {
@@ -171,14 +175,14 @@ define(
style={{ display: (item.queue.status === 'paused') ? 'inline-block': 'none' }} style={{ display: (item.queue.status === 'paused') ? 'inline-block': 'none' }}
href="javascript:;" href="javascript:;"
onClick={ this.resumeSending.bind(null, item) } onClick={ this.resumeSending.bind(null, item) }
>Resume</a> >{MailPoet.I18n.t('resume')}</a>
<a <a
id={ 'pause_'+item.id } id={ 'pause_'+item.id }
className="button mailpoet_pause" className="button mailpoet_pause"
style={{ display: (item.queue.status === null) ? 'inline-block': 'none' }} style={{ display: (item.queue.status === null) ? 'inline-block': 'none' }}
href="javascript:;" href="javascript:;"
onClick={ this.pauseSending.bind(null, item) } onClick={ this.pauseSending.bind(null, item) }
>Pause</a> >{MailPoet.I18n.t('pause')}</a>
</span> </span>
); );
} }
@@ -239,7 +243,7 @@ define(
return ( return (
<div> <div>
<h2 className="title"> <h2 className="title">
Newsletters <Link className="add-new-h2" to="/new">New</Link> {MailPoet.I18n.t('pageTitle')} <Link className="add-new-h2" to="/new">{MailPoet.I18n.t('new')}</Link>
</h2> </h2>
<Listing <Listing
@@ -258,4 +262,4 @@ define(
return NewsletterList; return NewsletterList;
} }
); );

View File

@@ -21,21 +21,20 @@ define(
var fields = [ var fields = [
{ {
name: 'subject', name: 'subject',
label: 'Subject line', label: MailPoet.I18n.t('subjectLine'),
tip: "Be creative! It's the first thing your subscribers see."+ tip: MailPoet.I18n.t('subjectLineTip'),
"Tempt them to open your email.",
type: 'text', type: 'text',
validation: { validation: {
'data-parsley-required': true, 'data-parsley-required': true,
'data-parsley-required-message': 'You need to specify a subject.' 'data-parsley-required-message': MailPoet.I18n.t('emptySubjectLineError')
} }
}, },
{ {
name: 'segments', name: 'segments',
label: 'Segments', label: MailPoet.I18n.t('segments'),
tip: "The subscriber segment that will be used for this campaign.", tip: MailPoet.I18n.t('segmentsTip'),
type: 'selection', type: 'selection',
placeholder: "Select a segment", placeholder: MailPoet.I18n.t('selectSegmentPlaceholder'),
id: "mailpoet_segments", id: "mailpoet_segments",
endpoint: "segments", endpoint: "segments",
multiple: true, multiple: true,
@@ -44,18 +43,18 @@ define(
}, },
validation: { validation: {
'data-parsley-required': true, 'data-parsley-required': true,
'data-parsley-required-message': 'You need to select a segment.' 'data-parsley-required-message': MailPoet.I18n.t('noSegmentsSelectedError')
} }
}, },
{ {
name: 'sender', name: 'sender',
label: 'Sender', label: MailPoet.I18n.t('sender'),
tip: "Name & email of yourself or your company.", tip: MailPoet.I18n.t('senderTip'),
fields: [ fields: [
{ {
name: 'sender_name', name: 'sender_name',
type: 'text', type: 'text',
placeholder: 'John Doe', placeholder: MailPoet.I18n.t('senderNamePlaceholder'),
defaultValue: (settings.sender !== undefined) ? settings.sender.name : '', defaultValue: (settings.sender !== undefined) ? settings.sender.name : '',
validation: { validation: {
'data-parsley-required': true 'data-parsley-required': true
@@ -64,7 +63,7 @@ define(
{ {
name: 'sender_address', name: 'sender_address',
type: 'text', type: 'text',
placeholder: 'john.doe@email.com', placeholder: MailPoet.I18n.t('senderAddressPlaceholder'),
defaultValue: (settings.sender !== undefined) ? settings.sender.address : '', defaultValue: (settings.sender !== undefined) ? settings.sender.address : '',
validation: { validation: {
'data-parsley-required': true, 'data-parsley-required': true,
@@ -75,21 +74,20 @@ define(
}, },
{ {
name: 'reply-to', name: 'reply-to',
label: 'Reply-to', label: MailPoet.I18n.t('replyTo'),
tip: 'When the subscribers hit "reply" this is who will receive their '+ tip: MailPoet.I18n.t('replyToTip'),
'email.',
inline: true, inline: true,
fields: [ fields: [
{ {
name: 'reply_to_name', name: 'reply_to_name',
type: 'text', type: 'text',
placeholder: 'John Doe', placeholder: MailPoet.I18n.t('replyToNamePlaceholder'),
defaultValue: (settings.reply_to !== undefined) ? settings.reply_to.name : '', defaultValue: (settings.reply_to !== undefined) ? settings.reply_to.name : '',
}, },
{ {
name: 'reply_to_address', name: 'reply_to_address',
type: 'text', type: 'text',
placeholder: 'john.doe@email.com', placeholder: MailPoet.I18n.t('replyToAddressPlaceholder'),
defaultValue: (settings.reply_to !== undefined) ? settings.reply_to.address : '' defaultValue: (settings.reply_to !== undefined) ? settings.reply_to.address : ''
}, },
] ]
@@ -98,10 +96,10 @@ define(
var messages = { var messages = {
onUpdate: function() { onUpdate: function() {
MailPoet.Notice.success('Newsletter successfully updated!'); MailPoet.Notice.success(MailPoet.I18n.t('newsletterUpdated'));
}, },
onCreate: function() { onCreate: function() {
MailPoet.Notice.success('Newsletter successfully added!'); MailPoet.Notice.success(MailPoet.I18n.t('newsletterAdded'));
} }
}; };
@@ -138,15 +136,14 @@ define(
if(response.result === true) { if(response.result === true) {
this.history.pushState(null, '/'); this.history.pushState(null, '/');
MailPoet.Notice.success( MailPoet.Notice.success(
'The newsletter is being sent...' MailPoet.I18n.t('newsletterIsBeingSent')
); );
} else { } else {
if(response.errors) { if(response.errors) {
MailPoet.Notice.error(response.errors); MailPoet.Notice.error(response.errors);
} else { } else {
MailPoet.Notice.error( MailPoet.Notice.error(
'An error occurred while trying to send. '+ MailPoet.I18n.t('newsletterSendingError').replace("%$1s", '?page=mailpoet-settings')
'<a href="?page=mailpoet-settings">Check your settings.</a>'
); );
} }
} }
@@ -157,7 +154,7 @@ define(
render: function() { render: function() {
return ( return (
<div> <div>
<h1>Final step: last details</h1> <h1>{MailPoet.I18n.t('finalNewsletterStep')}</h1>
<Breadcrumb step="send" /> <Breadcrumb step="send" />
@@ -174,18 +171,18 @@ define(
className="button button-primary" className="button button-primary"
type="button" type="button"
onClick={ this.handleSend } onClick={ this.handleSend }
value="Send" /> value={MailPoet.I18n.t('send')} />
&nbsp; &nbsp;
<input <input
className="button button-secondary" className="button button-secondary"
type="submit" type="submit"
value="Save as draft and close" /> value={MailPoet.I18n.t('saveDraftAndClose')} />
&nbsp;or simply&nbsp; &nbsp;{MailPoet.I18n.t('orSimply')}&nbsp;
<a <a
href={ href={
'?page=mailpoet-newsletter-editor&id='+this.props.params.id '?page=mailpoet-newsletter-editor&id='+this.props.params.id
}> }>
go back to design {MailPoet.I18n.t('goBackToDesign')}
</a>. </a>.
</p> </p>
</Form> </Form>
@@ -196,4 +193,4 @@ define(
return NewsletterSend; return NewsletterSend;
} }
); );

View File

@@ -54,7 +54,7 @@ define(
try { try {
saveTemplate(JSON.parse(e.target.result)); saveTemplate(JSON.parse(e.target.result));
} catch (err) { } catch (err) {
MailPoet.Notice.error('This template file appears to be malformed. Please try another one.'); MailPoet.Notice.error(MailPoet.I18n.t('templateFileMalformedError'));
} }
}.bind(this); }.bind(this);
@@ -63,15 +63,15 @@ define(
render: function() { render: function() {
return ( return (
<div> <div>
<h2>Import a template</h2> <h2>{MailPoet.I18n.t('importTemplateTitle')}</h2>
<form onSubmit={this.handleSubmit}> <form onSubmit={this.handleSubmit}>
<input type="file" placeholder="Select a .json file to upload" ref="templateFile" /> <input type="file" placeholder={MailPoet.I18n.t('selectJsonFileToUpload')} ref="templateFile" />
<p className="submit"> <p className="submit">
<input <input
className="button button-primary" className="button button-primary"
type="submit" type="submit"
value="Upload" /> value={MailPoet.I18n.t('upload')} />
</p> </p>
</form> </form>
</div> </div>
@@ -108,9 +108,9 @@ define(
response = [ response = [
{ {
name: name:
"MailPoet's Guide", MailPoet.I18n.t('mailpoetGuideTemplateTitle'),
description: description:
"This is the standard template that comes with MailPoet.", MailPoet.I18n.t('mailpoetGuideTemplateDescription'),
readonly: "1" readonly: "1"
} }
] ]
@@ -155,7 +155,9 @@ define(
this.setState({ loading: true }); this.setState({ loading: true });
if( if(
window.confirm( window.confirm(
'You are about to delete the template named "'+ template.name +'"' (
MailPoet.I18n.t('confirmTemplateDeletion')
).replace("%$1s", template.name)
) )
) { ) {
MailPoet.Ajax.post({ MailPoet.Ajax.post({
@@ -187,7 +189,7 @@ define(
href="javascript:;" href="javascript:;"
onClick={ this.handleDeleteTemplate.bind(null, template) } onClick={ this.handleDeleteTemplate.bind(null, template) }
> >
Delete {MailPoet.I18n.t('delete')}
</a> </a>
</div> </div>
), thumbnail = ''; ), thumbnail = '';
@@ -218,7 +220,7 @@ define(
className="button button-primary" className="button button-primary"
onClick={ this.handleSelectTemplate.bind(null, template) } onClick={ this.handleSelectTemplate.bind(null, template) }
> >
Select {MailPoet.I18n.t('select')}
</a> </a>
&nbsp; &nbsp;
<a <a
@@ -226,7 +228,7 @@ define(
className="button button-secondary" className="button button-secondary"
onClick={ this.handlePreviewTemplate.bind(null, template) } onClick={ this.handlePreviewTemplate.bind(null, template) }
> >
Preview {MailPoet.I18n.t('preview')}
</a> </a>
</div> </div>
{ (template.readonly === "1") ? false : deleteLink } { (template.readonly === "1") ? false : deleteLink }
@@ -242,7 +244,7 @@ define(
return ( return (
<div> <div>
<h1>Select a template</h1> <h1>{MailPoet.I18n.t('selectTemplateTitle')}</h1>
<Breadcrumb step="template" /> <Breadcrumb step="template" />

View File

@@ -26,7 +26,7 @@ define(
action: 'create', action: 'create',
data: { data: {
type: type, type: type,
subject: 'Draft newsletter', subject: MailPoet.I18n.t('draftNewsletterTitle'),
} }
}).done(function(response) { }).done(function(response) {
if(response.result && response.newsletter.id) { if(response.result && response.newsletter.id) {
@@ -43,7 +43,7 @@ define(
render: function() { render: function() {
return ( return (
<div> <div>
<h1>Pick a type of campaign</h1> <h1>{MailPoet.I18n.t('pickCampaignType')}</h1>
<Breadcrumb step="type" /> <Breadcrumb step="type" />
@@ -52,10 +52,9 @@ define(
<div className="mailpoet_thumbnail"></div> <div className="mailpoet_thumbnail"></div>
<div className="mailpoet_description"> <div className="mailpoet_description">
<h3>Newsletter</h3> <h3>{MailPoet.I18n.t('regularNewsletterTypeTitle')}</h3>
<p> <p>
Send a newsletter with images, buttons, dividers, {MailPoet.I18n.t('regularNewsletterTypeDescription')}
and social bookmarks. Or a simple email.
</p> </p>
</div> </div>
@@ -64,7 +63,7 @@ define(
className="button button-primary" className="button button-primary"
onClick={ this.createNewsletter.bind(null, 'standard') } onClick={ this.createNewsletter.bind(null, 'standard') }
> >
Create {MailPoet.I18n.t('create')}
</a> </a>
</div> </div>
</li> </li>
@@ -73,9 +72,9 @@ define(
<div className="mailpoet_thumbnail"></div> <div className="mailpoet_thumbnail"></div>
<div className="mailpoet_description"> <div className="mailpoet_description">
<h3>Welcome email</h3> <h3>{MailPoet.I18n.t('welcomeNewsletterTypeTitle')}</h3>
<p> <p>
Send an email for new users. {MailPoet.I18n.t('welcomeNewsletterTypeDescription')}
</p> </p>
</div> </div>
@@ -84,7 +83,7 @@ define(
className="button button-primary" className="button button-primary"
onClick={ this.setupNewsletter.bind(null, 'welcome') } onClick={ this.setupNewsletter.bind(null, 'welcome') }
> >
Set up {MailPoet.I18n.t('setUp')}
</a> </a>
</div> </div>
</li> </li>
@@ -93,9 +92,9 @@ define(
<div className="mailpoet_thumbnail"></div> <div className="mailpoet_thumbnail"></div>
<div className="mailpoet_description"> <div className="mailpoet_description">
<h3>Post notifications</h3> <h3>{MailPoet.I18n.t('postNotificationNewsletterTypeTitle')}</h3>
<p> <p>
Automatically send posts immediately, daily, weekly or monthly. Filter by categories, if you like. {MailPoet.I18n.t('postNotificationsNewsletterTypeDescription')}
</p> </p>
</div> </div>
@@ -104,7 +103,7 @@ define(
className="button button-primary" className="button button-primary"
onClick={ this.setupNewsletter.bind(null, 'notification') } onClick={ this.setupNewsletter.bind(null, 'notification') }
> >
Set up {MailPoet.I18n.t('setUp')}
</a> </a>
</div> </div>
</li> </li>

View File

@@ -25,11 +25,11 @@ define(
var intervalField = { var intervalField = {
name: 'interval', name: 'interval',
values: { values: {
'daily': 'Once a day at...', 'daily': MailPoet.I18n.t('daily'),
'weekly': 'Weekly on...', 'weekly': MailPoet.I18n.t('weekly'),
'monthly': 'Monthly on the...', 'monthly': MailPoet.I18n.t('monthly'),
'nthWeekDay': 'Monthly every...', 'nthWeekDay': MailPoet.I18n.t('monthlyEvery'),
'immediately': 'Immediately.', 'immediately': MailPoet.I18n.t('immediately'),
}, },
}; };
@@ -53,13 +53,13 @@ define(
var weekDayField = { var weekDayField = {
name: 'weekDay', name: 'weekDay',
values: { values: {
0: 'Sunday', 0: MailPoet.I18n.t('sunday'),
1: 'Monday', 1: MailPoet.I18n.t('monday'),
2: 'Tuesday', 2: MailPoet.I18n.t('tuesday'),
3: 'Wednesday', 3: MailPoet.I18n.t('wednesday'),
4: 'Thursday', 4: MailPoet.I18n.t('thursday'),
5: 'Friday', 5: MailPoet.I18n.t('friday'),
6: 'Saturday' 6: MailPoet.I18n.t('saturday')
}, },
}; };
@@ -69,14 +69,19 @@ define(
values: _.object(_.map( values: _.object(_.map(
_.times(NUMBER_OF_DAYS_IN_MONTH, function(day) { return day; }), _.times(NUMBER_OF_DAYS_IN_MONTH, function(day) { return day; }),
function(day) { function(day) {
var suffixes = { var labels = {
0: 'st', 0: MailPoet.I18n.t('first'),
1: 'nd', 1: MailPoet.I18n.t('second'),
2: 'rd' 2: MailPoet.I18n.t('third')
}; },
var suffix = suffixes[day] || 'th'; label;
if (labels[day] !== undefined) {
label = labels[day];
} else {
label = MailPoet.I18n.t('nth').replace("%$1d", day + 1);
}
return [day, (day + 1).toString() + suffix]; return [day, label];
}, },
)), )),
}; };
@@ -84,10 +89,10 @@ define(
var nthWeekDayField = { var nthWeekDayField = {
name: 'nthWeekDay', name: 'nthWeekDay',
values: { values: {
'1': '1st', '1': MailPoet.I18n.t('first'),
'2': '2nd', '2': MailPoet.I18n.t('second'),
'3': '3rd', '3': MailPoet.I18n.t('third'),
'L': 'last', 'L': MailPoet.I18n.t('last'),
}, },
}; };
@@ -197,7 +202,7 @@ define(
return ( return (
<div> <div>
<h1>Post notifications</h1> <h1>{MailPoet.I18n.t('postNotificationNewsletterTypeTitle')}</h1>
<Breadcrumb step="type" /> <Breadcrumb step="type" />
<Select <Select
@@ -215,7 +220,7 @@ define(
className="button button-primary" className="button button-primary"
type="button" type="button"
onClick={ this.handleNext } onClick={ this.handleNext }
value="Next" /> value={MailPoet.I18n.t('next')} />
</p> </p>
</div> </div>
); );

View File

@@ -47,7 +47,7 @@ define(
render: function() { render: function() {
return ( return (
<div> <div>
<h1>Newsletter</h1> <h1>{MailPoet.I18n.t('regularNewsletterTypeTitle')}</h1>
<Breadcrumb step="type" /> <Breadcrumb step="type" />
</div> </div>
); );

View File

@@ -28,8 +28,8 @@ define(
var events = { var events = {
name: 'event', name: 'event',
values: { values: {
'segment': 'When someone subscribes to the list...', 'segment': MailPoet.I18n.t('onSubscriptionToList'),
'user': 'When a new Wordrpess user is added to your site...', 'user': MailPoet.I18n.t('onWordpressUserRegistration'),
} }
}; };
@@ -57,10 +57,10 @@ define(
var afterTimeTypeField = { var afterTimeTypeField = {
name: 'afterTimeType', name: 'afterTimeType',
values: { values: {
'immediate': 'immediately', 'immediate': MailPoet.I18n.t('delayImmediately'),
'hours': 'hour(s) after', 'hours': MailPoet.I18n.t('delayHoursAfter'),
'days': 'day(s) after', 'days': MailPoet.I18n.t('delayDaysAfter'),
'weeks': 'week(s) after', 'weeks': MailPoet.I18n.t('delayWeeksAfter'),
} }
}; };
@@ -152,7 +152,7 @@ define(
} }
return ( return (
<div> <div>
<h1>Welcome email</h1> <h1>{MailPoet.I18n.t('welcomeNewsletterTypeTitle')}</h1>
<Breadcrumb step="type" /> <Breadcrumb step="type" />
<h3>{MailPoet.I18n.t('selectEventToSendWelcomeEmail')}</h3> <h3>{MailPoet.I18n.t('selectEventToSendWelcomeEmail')}</h3>
@@ -176,7 +176,7 @@ define(
className="button button-primary" className="button button-primary"
type="button" type="button"
onClick={ this.handleNext } onClick={ this.handleNext }
value="Next" /> value={MailPoet.I18n.t('next')} />
</p> </p>
</div> </div>
); );

View File

@@ -21,6 +21,105 @@
'selectedAllLabel': __('All %d newsletters are selected.'), 'selectedAllLabel': __('All %d newsletters are selected.'),
'selectAllLink': __('Select all newsletters on all pages.'), 'selectAllLink': __('Select all newsletters on all pages.'),
'clearSelection': __('Clear selection.'), 'clearSelection': __('Clear selection.'),
'permanentlyDeleted': __('%d newsletters permanently deleted.') 'permanentlyDeleted': __('%d newsletters permanently deleted.'),
'selectType': __('Select type'),
'template': __('Template'),
'designer': __('Designer'),
'send': __('Send'),
'subject': __('Subject'),
'status': __('Status'),
'lists': __('Lists'),
'createdOn': __('Created on'),
'lastModifiedOn': __('Last modified on'),
'oneNewsletterTrashed': __('1 newsletter was moved to the trash.'),
'multipleNewslettersTrashed': __('%$1d newsletters were moved to the trash.'),
'oneNewsletterDeleted': __('1 newsletter was permanently deleted.'),
'multipleNewslettersDeleted': __('%$1d newsletters were permanently deleted.'),
'oneNewsletterRestored': __('1 newsletter has been restored from the trash.'),
'multipleNewslettersRestored': __('%$1d newsletters have been restored from the trash.'),
'trash': __('Trash'),
'edit': __('Edit'),
'notSentYet': __('Not sent yet.'),
'newsletterQueueCompleted': __('Sent to %$1d of %$2d.'),
'resume': __('Resume'),
'pause': __('Pause'),
'new': __('New'),
'templateFileMalformedError': __('This template file appears to be malformed. Please try another one.'),
'importTemplateTitle': __('Import a template'),
'selectJsonFileToUpload': __('Select a .json file to upload'),
'upload': __('Upload'),
'mailpoetGuideTemplateTitle': __("MailPoet's Guide"),
'mailpoetGuideTemplateDescription': __("This is the standard template that comes with MailPoet."),
'confirmTemplateDeletion': __('You are about to delete the template named "%$1s"'),
'delete': __('Delete'),
'select': __('Select'),
'preview': __('Preview'),
'selectTemplateTitle': __('Select a template'),
'draftNewsletterTitle': __('Draft newsletter'),
'pickCampaignType': __('Pick a type of campaign'),
'regularNewsletterTypeTitle': __('Newsletter'),
'regularNewsletterTypeDescription': __('Send a newsletter with images, buttons, dividers, and social bookmarks. Or a simple email.'),
'create': __('Create'),
'welcomeNewsletterTypeTitle': __('Welcome email'),
'welcomeNewsletterTypeDescription': __('Send an email for new users.'),
'setUp': __('Set up'),
'postNotificationNewsletterTypeTitle': __('Post notifications'),
'postNotificationsNewsletterTypeDescription': __('Automatically send posts immediately, daily, weekly or monthly. Filter by categories, if you like.'),
'daily': __('Once a day at...'),
'weekly': __('Weekly on...'),
'monthly': __('Monthly on the...'),
'monthlyEvery': __('Monthly every...'),
'immediately': __('Immediately.'),
'sunday': __('Sunday'),
'monday': __('Monday'),
'tuesday': __('Tuesday'),
'wednesday': __('Wednesday'),
'thursday': __('Thursday'),
'friday': __('Friday'),
'saturday': __('Saturday'),
'first': __('1st'),
'second': __('2nd'),
'third': __('3rd'),
'nth': __('%$1dth'),
'last': __('last'),
'next': __('Next'),
'selectEventToSendWelcomeEmail': __('Select an event to send this welcome email'),
'onSubscriptionToList': __('When someone subscribes to the list...'),
'onWordpressUserRegistration': __('When a new Wordrpess user is added to your site...'),
'delayImmediately': __('immediately'),
'delayHoursAfter': __('hour(s) after'),
'delayDaysAfter': __('day(s) after'),
'delayWeeksAfter': __('week(s) after'),
'subjectLine': __('Subject line'),
'subjectLineTip': __("Be creative! It's the first thing your subscribers see. Tempt them to open your email."),
'emptySubjectLineError': __('You need to specify a subject.'),
'segments': __('Segments'),
'segmentsTip': __('The subscriber segment that will be used for this campaign.'),
'selectSegmentPlaceholder': __('Select a segment'),
'noSegmentsSelectedError': __('You need to select a segment.'),
'sender': __('Sender'),
'senderTip': __('Name & email of yourself or your company.'),
'senderNamePlaceholder': __('John Doe'),
'senderAddressPlaceholder': __('john.doe@email.com'),
'replyTo': __('Reply-to'),
'replyToTip': __('When the subscribers hit "reply" this is who will receive their email.'),
'replyToNamePlaceholder': __('John Doe'),
'replyToAddressPlaceholder': __('john.doe@email.com'),
'newsletterUpdated': __('Newsletter successfully updated!'),
'newsletterAdded': __('Newsletter successfully added!'),
'newsletterIsBeingSent': __('The newsletter is being sent...'),
'newsletterSendingError': __('An error occurred while trying to send. <a href="%$1s">Check your settings.</a>'),
'finalNewsletterStep': __('Final step: last details'),
'saveDraftAndClose': __('Save as draft and close'),
'orSimply': __('or simply'),
'goBackToDesign': __('go back to design'),
}) %> }) %>
<% endblock %> <% endblock %>