Add translatiosn for newsletter creation and listings
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@@ -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')} />
|
||||||
|
|
||||||
<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')} />
|
||||||
or simply
|
{MailPoet.I18n.t('orSimply')}
|
||||||
<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;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@@ -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>
|
||||||
|
|
||||||
<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" />
|
||||||
|
|
||||||
|
@@ -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>
|
||||||
|
@@ -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>
|
||||||
);
|
);
|
||||||
|
@@ -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>
|
||||||
);
|
);
|
||||||
|
@@ -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>
|
||||||
);
|
);
|
||||||
|
@@ -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 %>
|
||||||
|
Reference in New Issue
Block a user