Localized strings
This commit is contained in:
parent
3d956ec141
commit
19fe5331d2
13 changed files with 123 additions and 80 deletions
|
@ -117,14 +117,14 @@ export default class Statistics extends Component {
|
||||||
<div>
|
<div>
|
||||||
<Title>{t('campaignStatistics')}</Title>
|
<Title>{t('campaignStatistics')}</Title>
|
||||||
|
|
||||||
{renderMetrics('total', t('Total'), false)}
|
{renderMetrics('total', t('total'), false)}
|
||||||
{renderMetrics('delivered', t('Delivered'))}
|
{renderMetrics('delivered', t('delivered'))}
|
||||||
{renderMetrics('blacklisted', t('Blacklisted'), false)}
|
{renderMetrics('blacklisted', t('blacklisted'), false)}
|
||||||
{renderMetricsWithProgress('bounced', t('Bounced'), 'info')}
|
{renderMetricsWithProgress('bounced', t('bounced'), 'info')}
|
||||||
{renderMetricsWithProgress('complained', t('Complaints'), 'danger')}
|
{renderMetricsWithProgress('complained', t('complaints'), 'danger')}
|
||||||
{renderMetricsWithProgress('unsubscribed', t('Unsubscribed'), 'warning')}
|
{renderMetricsWithProgress('unsubscribed', t('unsubscribed'), 'warning')}
|
||||||
{!entity.open_tracking_disabled && renderMetricsWithProgress('opened', t('Opened'), 'success')}
|
{!entity.open_tracking_disabled && renderMetricsWithProgress('opened', t('opened'), 'success')}
|
||||||
{!entity.click_tracking_disabled && renderMetricsWithProgress('clicks', t('Clicked'), 'success')}
|
{!entity.click_tracking_disabled && renderMetricsWithProgress('clicks', t('clicked'), 'success')}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,14 +36,14 @@ export default class StatisticsLinkClicks extends Component {
|
||||||
const t = this.props.t;
|
const t = this.props.t;
|
||||||
|
|
||||||
const linksColumns = [
|
const linksColumns = [
|
||||||
{ data: 0, title: t('URL'), render: data => <code>{data}</code> },
|
{ data: 0, title: t('url'), render: data => <code>{data}</code> },
|
||||||
{ data: 1, title: t('Unique visitors') },
|
{ data: 1, title: t('uniqueVisitors') },
|
||||||
{ data: 2, title: t('Total clicks') }
|
{ data: 2, title: t('totalClicks') }
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Title>{t('Campaign links')}</Title>
|
<Title>{t('campaignLinks')}</Title>
|
||||||
|
|
||||||
<Table ref={node => this.table = node} withHeader dataUrl={`rest/campaigns-link-clicks-table/${this.props.entity.id}`} columns={linksColumns} />
|
<Table ref={node => this.table = node} withHeader dataUrl={`rest/campaigns-link-clicks-table/${this.props.entity.id}`} columns={linksColumns} />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -99,12 +99,12 @@ export default class StatisticsOpened extends Component {
|
||||||
const stats = this.state.statisticsOpened;
|
const stats = this.state.statisticsOpened;
|
||||||
|
|
||||||
const subscribersColumns = [
|
const subscribersColumns = [
|
||||||
{ data: 0, title: t('Email') },
|
{ data: 0, title: t('email') },
|
||||||
{ data: 1, title: t('subscriptionId'), render: data => <code>{data}</code> },
|
{ data: 1, title: t('subscriptionId'), render: data => <code>{data}</code> },
|
||||||
{ data: 2, title: t('listId'), render: data => <code>{data}</code> },
|
{ data: 2, title: t('listId'), render: data => <code>{data}</code> },
|
||||||
{ data: 3, title: t('list') },
|
{ data: 3, title: t('list') },
|
||||||
{ data: 4, title: t('listNamespace') },
|
{ data: 4, title: t('listNamespace') },
|
||||||
{ data: 5, title: t('Opens count') }
|
{ data: 5, title: t('opensCount') }
|
||||||
];
|
];
|
||||||
|
|
||||||
console.log(this.state.statisticsOpened);
|
console.log(this.state.statisticsOpened);
|
||||||
|
@ -117,8 +117,8 @@ export default class StatisticsOpened extends Component {
|
||||||
|
|
||||||
const navPills = (
|
const navPills = (
|
||||||
<ul className={`nav nav-pills ${styles.navPills}`}>
|
<ul className={`nav nav-pills ${styles.navPills}`}>
|
||||||
{renderNavPill('countries', t('Countries'))}
|
{renderNavPill('countries', t('countries'))}
|
||||||
{renderNavPill('devices', t('Devices'))}
|
{renderNavPill('devices', t('devices'))}
|
||||||
</ul>
|
</ul>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -126,28 +126,28 @@ export default class StatisticsOpened extends Component {
|
||||||
let charts = null;
|
let charts = null;
|
||||||
|
|
||||||
const deviceTypes = {
|
const deviceTypes = {
|
||||||
desktop: t('Desktop'),
|
desktop: t('desktop'),
|
||||||
tv: t('TV'),
|
tv: t('tv'),
|
||||||
tablet: t('Tablet'),
|
tablet: t('tablet'),
|
||||||
phone: t('Phone'),
|
phone: t('phone'),
|
||||||
bot: t('Bot'),
|
bot: t('bot'),
|
||||||
car: t('Car'),
|
car: t('car'),
|
||||||
console: t('Console')
|
console: t('console')
|
||||||
};
|
};
|
||||||
|
|
||||||
if (agg === 'devices') {
|
if (agg === 'devices') {
|
||||||
charts = (
|
charts = (
|
||||||
<div className={styles.charts}>
|
<div className={styles.charts}>
|
||||||
{navPills}
|
{navPills}
|
||||||
<h4 className={styles.chartTitle}>{t('Distribution by device type')}</h4>
|
<h4 className={styles.chartTitle}>{t('distributionByDeviceType')}</h4>
|
||||||
<Chart
|
<Chart
|
||||||
width="100%"
|
width="100%"
|
||||||
height="380px"
|
height="380px"
|
||||||
chartType="PieChart"
|
chartType="PieChart"
|
||||||
loader={<div>{t('Loading chart')}</div>}
|
loader={<div>{t('loadingChart')}</div>}
|
||||||
data={[
|
data={[
|
||||||
[t('Device type'), t('Count')],
|
[t('deviceType'), t('count')],
|
||||||
...stats.devices.map(entry => [deviceTypes[entry.key] || t('Unknown'), entry.count])
|
...stats.devices.map(entry => [deviceTypes[entry.key] || t('unknown'), entry.count])
|
||||||
]}
|
]}
|
||||||
options={{
|
options={{
|
||||||
chartArea: {
|
chartArea: {
|
||||||
|
@ -174,17 +174,17 @@ export default class StatisticsOpened extends Component {
|
||||||
charts = (
|
charts = (
|
||||||
<div className={styles.charts}>
|
<div className={styles.charts}>
|
||||||
{navPills}
|
{navPills}
|
||||||
<h4 className={styles.sectionTitle}>{t('Distribution by country')}</h4>
|
<h4 className={styles.sectionTitle}>{t('distributionByCountry')}</h4>
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className={`col-md-6 ${styles.chart}`}>
|
<div className={`col-md-6 ${styles.chart}`}>
|
||||||
<Chart
|
<Chart
|
||||||
width="100%"
|
width="100%"
|
||||||
height="380px"
|
height="380px"
|
||||||
chartType="PieChart"
|
chartType="PieChart"
|
||||||
loader={<div>{t('Loading chart')}</div>}
|
loader={<div>{t('loadingChart')}</div>}
|
||||||
data={[
|
data={[
|
||||||
[t('Country'), t('Count')],
|
[t('country'), t('count')],
|
||||||
...stats.countries.map(entry => [entry.key || t('Unknown'), entry.count])
|
...stats.countries.map(entry => [entry.key || t('unknown'), entry.count])
|
||||||
]}
|
]}
|
||||||
options={{
|
options={{
|
||||||
chartArea: {
|
chartArea: {
|
||||||
|
@ -213,7 +213,7 @@ export default class StatisticsOpened extends Component {
|
||||||
chartType="GeoChart"
|
chartType="GeoChart"
|
||||||
data={[
|
data={[
|
||||||
['Country', 'Count'],
|
['Country', 'Count'],
|
||||||
...stats.countries.map(entry => [entry.key || t('Unknown'), entry.count])
|
...stats.countries.map(entry => [entry.key || t('unknown'), entry.count])
|
||||||
]}
|
]}
|
||||||
mapsApiKey={mailtrainConfig.mapsApiKey}
|
mapsApiKey={mailtrainConfig.mapsApiKey}
|
||||||
/>
|
/>
|
||||||
|
@ -227,13 +227,13 @@ export default class StatisticsOpened extends Component {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Title>{t('Detailed Statistics')}</Title>
|
<Title>{t('detailedStatistics')}</Title>
|
||||||
|
|
||||||
{charts}
|
{charts}
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<h4 className={styles.sectionTitle}>{t('List of subscribers that opened the campaign')}</h4>
|
<h4 className={styles.sectionTitle}>{t('listOfSubscribersThatOpenedTheCampaign')}</h4>
|
||||||
<Table ref={node => this.table = node} withHeader dataUrl={`rest/campaigns-opens-table/${entity.id}`} columns={subscribersColumns} />
|
<Table ref={node => this.table = node} withHeader dataUrl={`rest/campaigns-opens-table/${entity.id}`} columns={subscribersColumns} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -37,7 +37,7 @@ export default class StatisticsSubsList extends Component {
|
||||||
const t = this.props.t;
|
const t = this.props.t;
|
||||||
|
|
||||||
const subscribersColumns = [
|
const subscribersColumns = [
|
||||||
{ data: 0, title: t('Email') },
|
{ data: 0, title: t('email') },
|
||||||
{ data: 1, title: t('subscriptionId'), render: data => <code>{data}</code> },
|
{ data: 1, title: t('subscriptionId'), render: data => <code>{data}</code> },
|
||||||
{ data: 2, title: t('listId'), render: data => <code>{data}</code> },
|
{ data: 2, title: t('listId'), render: data => <code>{data}</code> },
|
||||||
{ data: 3, title: t('list') },
|
{ data: 3, title: t('list') },
|
||||||
|
|
|
@ -217,8 +217,8 @@ class SendControls extends Component {
|
||||||
async resetAsync() {
|
async resetAsync() {
|
||||||
const t = this.props.t;
|
const t = this.props.t;
|
||||||
this.actionDialog(
|
this.actionDialog(
|
||||||
t('Confirm reset'),
|
t('confirmReset'),
|
||||||
t('Do you want to reset the campaign? All statistics and the track of delivered messages will be lost.'),
|
t('doYouWantToResetTheCampaign?All'),
|
||||||
async () => {
|
async () => {
|
||||||
await this.postAndMaskStateError(`rest/campaign-reset/${this.props.entity.id}`);
|
await this.postAndMaskStateError(`rest/campaign-reset/${this.props.entity.id}`);
|
||||||
await this.refreshEntity();
|
await this.refreshEntity();
|
||||||
|
@ -479,7 +479,7 @@ export default class Status extends Component {
|
||||||
<Title>{t('campaignStatus')}</Title>
|
<Title>{t('campaignStatus')}</Title>
|
||||||
|
|
||||||
<AlignedRow label={t('name')}>{entity.name}</AlignedRow>
|
<AlignedRow label={t('name')}>{entity.name}</AlignedRow>
|
||||||
<AlignedRow label={t('Delivered')}>{entity.delivered}</AlignedRow>
|
<AlignedRow label={t('delivered')}>{entity.delivered}</AlignedRow>
|
||||||
<AlignedRow label={t('status')}>{this.campaignStatusLabels[entity.status]}</AlignedRow>
|
<AlignedRow label={t('status')}>{this.campaignStatusLabels[entity.status]}</AlignedRow>
|
||||||
|
|
||||||
{sendSettings}
|
{sendSettings}
|
||||||
|
|
|
@ -37,8 +37,8 @@ import StatisticsLinkClicks
|
||||||
|
|
||||||
function getMenus(t) {
|
function getMenus(t) {
|
||||||
const aggLabels = {
|
const aggLabels = {
|
||||||
'countries': t('Countries'),
|
'countries': t('countries'),
|
||||||
'devices': t('Devices')
|
'devices': t('devices')
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -67,27 +67,27 @@ function getMenus(t) {
|
||||||
panelRender: props => <Statistics entity={props.resolved.campaign} />,
|
panelRender: props => <Statistics entity={props.resolved.campaign} />,
|
||||||
children: {
|
children: {
|
||||||
delivered: {
|
delivered: {
|
||||||
title: t('Delivered'),
|
title: t('delivered'),
|
||||||
link: params => `/campaigns/${params.campaignId}/statistics/delivered`,
|
link: params => `/campaigns/${params.campaignId}/statistics/delivered`,
|
||||||
panelRender: props => <StatisticsSubsList entity={props.resolved.campaign} title={t('Delivered Emails')} status={SubscriptionStatus.SUBSCRIBED} />
|
panelRender: props => <StatisticsSubsList entity={props.resolved.campaign} title={t('deliveredEmails')} status={SubscriptionStatus.SUBSCRIBED} />
|
||||||
},
|
},
|
||||||
complained: {
|
complained: {
|
||||||
title: t('Complained'),
|
title: t('complained'),
|
||||||
link: params => `/campaigns/${params.campaignId}/statistics/complained`,
|
link: params => `/campaigns/${params.campaignId}/statistics/complained`,
|
||||||
panelRender: props => <StatisticsSubsList entity={props.resolved.campaign} title={t('Subscribers that Complained')} status={SubscriptionStatus.COMPLAINED} />
|
panelRender: props => <StatisticsSubsList entity={props.resolved.campaign} title={t('subscribersThatComplained')} status={SubscriptionStatus.COMPLAINED} />
|
||||||
},
|
},
|
||||||
bounced: {
|
bounced: {
|
||||||
title: t('Bounced'),
|
title: t('bounced'),
|
||||||
link: params => `/campaigns/${params.campaignId}/statistics/bounced`,
|
link: params => `/campaigns/${params.campaignId}/statistics/bounced`,
|
||||||
panelRender: props => <StatisticsSubsList entity={props.resolved.campaign} title={t('Emails that Bounced')} status={SubscriptionStatus.BOUNCED} />
|
panelRender: props => <StatisticsSubsList entity={props.resolved.campaign} title={t('emailsThatBounced')} status={SubscriptionStatus.BOUNCED} />
|
||||||
},
|
},
|
||||||
unsubscribed: {
|
unsubscribed: {
|
||||||
title: t('Unsubscribed'),
|
title: t('unsubscribed'),
|
||||||
link: params => `/campaigns/${params.campaignId}/statistics/unsubscribed`,
|
link: params => `/campaigns/${params.campaignId}/statistics/unsubscribed`,
|
||||||
panelRender: props => <StatisticsSubsList entity={props.resolved.campaign} title={t('Subscribers that Unsubscribed')} status={SubscriptionStatus.UNSUBSCRIBED} />
|
panelRender: props => <StatisticsSubsList entity={props.resolved.campaign} title={t('subscribersThatUnsubscribed')} status={SubscriptionStatus.UNSUBSCRIBED} />
|
||||||
},
|
},
|
||||||
'opened': {
|
'opened': {
|
||||||
title: t('Opened'),
|
title: t('opened'),
|
||||||
resolve: {
|
resolve: {
|
||||||
statisticsOpened: params => `rest/campaign-statistics/${params.campaignId}/opened`
|
statisticsOpened: params => `rest/campaign-statistics/${params.campaignId}/opened`
|
||||||
},
|
},
|
||||||
|
@ -101,7 +101,7 @@ function getMenus(t) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'clicks': {
|
'clicks': {
|
||||||
title: t('Clicks'),
|
title: t('clicks'),
|
||||||
link: params => `/campaigns/${params.campaignId}/statistics/clicks`,
|
link: params => `/campaigns/${params.campaignId}/statistics/clicks`,
|
||||||
panelRender: props => <StatisticsLinkClicks entity={props.resolved.campaign} />
|
panelRender: props => <StatisticsLinkClicks entity={props.resolved.campaign} />
|
||||||
}
|
}
|
||||||
|
|
|
@ -216,7 +216,7 @@ export default class CUD extends Component {
|
||||||
|
|
||||||
<TextArea id="description" label={t('description')}/>
|
<TextArea id="description" label={t('description')}/>
|
||||||
|
|
||||||
<InputField id="contact_email" label={t('contactEmail')} help={t('Contact email shown in the list subscription and management forms. If no contact email is given, the admin email from Global settings is used.')}/>
|
<InputField id="contact_email" label={t('contactEmail')} help={t('contactEmailShownInTheListSubscription')}/>
|
||||||
<InputField id="homepage" label={t('homepage')} help={t('homepageUrlUsedInSubscriptionFormsAnd')}/>
|
<InputField id="homepage" label={t('homepage')} help={t('homepageUrlUsedInSubscriptionFormsAnd')}/>
|
||||||
<InputField id="to_name" label={t('recipientsNameTemplate')} help={t('specifyUsingMergeTagsOfThisListHowTo')}/>
|
<InputField id="to_name" label={t('recipientsNameTemplate')} help={t('specifyUsingMergeTagsOfThisListHowTo')}/>
|
||||||
<TableSelect id="send_configuration" label={t('sendConfiguration')} withHeader dropdown dataUrl='rest/send-configurations-table' columns={sendConfigurationsColumns} selectionLabelIndex={1} help={t('sendConfigurationThatWillBeUsedFor')}/>
|
<TableSelect id="send_configuration" label={t('sendConfiguration')} withHeader dropdown dataUrl='rest/send-configurations-table' columns={sendConfigurationsColumns} selectionLabelIndex={1} help={t('sendConfigurationThatWillBeUsedFor')}/>
|
||||||
|
|
|
@ -473,7 +473,7 @@ export default class CUD extends Component {
|
||||||
<AlignedRow>
|
<AlignedRow>
|
||||||
<div className="help-block">
|
<div className="help-block">
|
||||||
<small>
|
<small>
|
||||||
{t('Note: These links are solely for a quick preview. To get the address of the subscription form, go to the list\'s subscribers and click on "Subscription Form".')}
|
{t('noteTheseLinksAreSolelyForAQuickPreview')}
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
<p>
|
<p>
|
||||||
|
@ -504,7 +504,7 @@ export default class CUD extends Component {
|
||||||
<div className={this.state.previewFullscreen ? formsStyles.editorFullscreen : formsStyles.editor}>
|
<div className={this.state.previewFullscreen ? formsStyles.editorFullscreen : formsStyles.editor}>
|
||||||
<div className={formsStyles.navbar}>
|
<div className={formsStyles.navbar}>
|
||||||
{this.state.fullscreen && <img className={formsStyles.logo} src={getTrustedUrl('static/mailtrain-notext.png')}/>}
|
{this.state.fullscreen && <img className={formsStyles.logo} src={getTrustedUrl('static/mailtrain-notext.png')}/>}
|
||||||
<div className={formsStyles.title}>{t('Form preview:') + ' ' + this.state.previewLabel}</div>
|
<div className={formsStyles.title}>{t('formPreview') + ' ' + this.state.previewLabel}</div>
|
||||||
<a className={formsStyles.btn} onClick={() => this.setState({previewContents: null, previewFullscreen: false})}><Icon icon="remove"/></a>
|
<a className={formsStyles.btn} onClick={() => this.setState({previewContents: null, previewFullscreen: false})}><Icon icon="remove"/></a>
|
||||||
<a className={formsStyles.btn} onClick={() => this.setState({previewFullscreen: !this.state.previewFullscreen})}><Icon icon="fullscreen"/></a>
|
<a className={formsStyles.btn} onClick={() => this.setState({previewFullscreen: !this.state.previewFullscreen})}><Icon icon="fullscreen"/></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -105,7 +105,7 @@ export default class ViewAndOutput extends Component {
|
||||||
if (this.state.report.state === ReportState.FINISHED) {
|
if (this.state.report.state === ReportState.FINISHED) {
|
||||||
reportContent = viewType.getContent(this.state.content);
|
reportContent = viewType.getContent(this.state.content);
|
||||||
} else if (this.state.report.state === ReportState.SCHEDULED || this.state.report.state === ReportState.PROCESSING) {
|
} else if (this.state.report.state === ReportState.SCHEDULED || this.state.report.state === ReportState.PROCESSING) {
|
||||||
reportContent = <div className="alert alert-info" role="alert">{t('Report is being generated')}</div>;
|
reportContent = <div className="alert alert-info" role="alert">{t('reportIsBeingGenerated')}</div>;
|
||||||
} else {
|
} else {
|
||||||
reportContent = <div className="alert alert-danger" role="alert">{t('reportNotGenerated')}</div>;
|
reportContent = <div className="alert alert-danger" role="alert">{t('reportNotGenerated')}</div>;
|
||||||
}
|
}
|
||||||
|
@ -113,7 +113,7 @@ export default class ViewAndOutput extends Component {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Toolbar>
|
<Toolbar>
|
||||||
<Button className="btn-primary" icon="repeat" label={t('Refresh')} onClickAsync={::this.refresh}/>
|
<Button className="btn-primary" icon="repeat" label={t('refresh')} onClickAsync={::this.refresh}/>
|
||||||
</Toolbar>
|
</Toolbar>
|
||||||
|
|
||||||
<Title>{viewType.getTitle(this.state.report.name)}</Title>
|
<Title>{viewType.getTitle(this.state.report.name)}</Title>
|
||||||
|
|
|
@ -88,9 +88,9 @@ export default class List extends Component {
|
||||||
<Toolbar>
|
<Toolbar>
|
||||||
<DropdownMenu className="btn-primary" label={t('createReportTemplate')}>
|
<DropdownMenu className="btn-primary" label={t('createReportTemplate')}>
|
||||||
<MenuLink to="/reports/templates/create">{t('blank')}</MenuLink>
|
<MenuLink to="/reports/templates/create">{t('blank')}</MenuLink>
|
||||||
<MenuLink to="/reports/templates/create/open-counts">{t('Open counts')}</MenuLink>
|
<MenuLink to="/reports/templates/create/open-counts">{t('openCounts')}</MenuLink>
|
||||||
<MenuLink to="/reports/templates/create/open-counts-csv">{t('Open counts as CSV')}</MenuLink>
|
<MenuLink to="/reports/templates/create/open-counts-csv">{t('openCountsAsCsv')}</MenuLink>
|
||||||
<MenuLink to="/reports/templates/create/aggregated-open-counts">{t('Aggregrated open counts')}</MenuLink>
|
<MenuLink to="/reports/templates/create/aggregated-open-counts">{t('aggregratedOpenCounts')}</MenuLink>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
</Toolbar>
|
</Toolbar>
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,11 +154,11 @@ export function getMailerTypes(t) {
|
||||||
const zoneMtaTypeOptions = [];
|
const zoneMtaTypeOptions = [];
|
||||||
|
|
||||||
if (mailtrainConfig.builtinZoneMTAEnabled) {
|
if (mailtrainConfig.builtinZoneMTAEnabled) {
|
||||||
zoneMtaTypeOptions.push({ key: ZoneMTAType.BUILTIN, label: t('Built-in ZoneMTA')});
|
zoneMtaTypeOptions.push({ key: ZoneMTAType.BUILTIN, label: t('builtinZoneMta')});
|
||||||
}
|
}
|
||||||
zoneMtaTypeOptions.push({ key: ZoneMTAType.WITH_MAILTRAIN_HEADER_CONF, label: t('Dynamic configuration of DKIM keys via ZoneMTA\'s Mailtrain plugin (use this option for builtin ZoneMTA)')});
|
zoneMtaTypeOptions.push({ key: ZoneMTAType.WITH_MAILTRAIN_HEADER_CONF, label: t('dynamicConfigurationOfDkimKeysViaZoneMt')});
|
||||||
zoneMtaTypeOptions.push({ key: ZoneMTAType.WITH_HTTP_CONF, label: t('Dynamic configuration of DKIM keys via ZoneMTA\'s HTTP config plugin')});
|
zoneMtaTypeOptions.push({ key: ZoneMTAType.WITH_HTTP_CONF, label: t('dynamicConfigurationOfDkimKeysViaZoneMt-1')});
|
||||||
zoneMtaTypeOptions.push({ key: ZoneMTAType.REGULAR, label: t('No dynamic configuration of DKIM keys')});
|
zoneMtaTypeOptions.push({ key: ZoneMTAType.REGULAR, label: t('noDynamicConfigurationOfDkimKeys')});
|
||||||
|
|
||||||
mailerTypes[MailerType.GENERIC_SMTP] = {
|
mailerTypes[MailerType.GENERIC_SMTP] = {
|
||||||
typeName: typeNames[MailerType.GENERIC_SMTP],
|
typeName: typeNames[MailerType.GENERIC_SMTP],
|
||||||
|
@ -211,7 +211,7 @@ export function getMailerTypes(t) {
|
||||||
<div>
|
<div>
|
||||||
<Fieldset label={t('mailerSettings')}>
|
<Fieldset label={t('mailerSettings')}>
|
||||||
<Dropdown id="mailer_type" label={t('mailerType')} options={typeOptions}/>
|
<Dropdown id="mailer_type" label={t('mailerType')} options={typeOptions}/>
|
||||||
<Dropdown id="zoneMtaType" label={t('Dynamic configuration')} options={zoneMtaTypeOptions}/>
|
<Dropdown id="zoneMtaType" label={t('dynamicConfiguration')} options={zoneMtaTypeOptions}/>
|
||||||
{(zoneMtaType === ZoneMTAType.REGULAR || zoneMtaType === ZoneMTAType.WITH_MAILTRAIN_HEADER_CONF || zoneMtaType === ZoneMTAType.WITH_HTTP_CONF) &&
|
{(zoneMtaType === ZoneMTAType.REGULAR || zoneMtaType === ZoneMTAType.WITH_MAILTRAIN_HEADER_CONF || zoneMtaType === ZoneMTAType.WITH_HTTP_CONF) &&
|
||||||
<div>
|
<div>
|
||||||
<InputField id="smtpHostname" label={t('hostname')} placeholder={t('hostnameEgSmtpexamplecom')}/>
|
<InputField id="smtpHostname" label={t('hostname')} placeholder={t('hostnameEgSmtpexamplecom')}/>
|
||||||
|
|
|
@ -79,7 +79,7 @@ export default class Update extends Component {
|
||||||
<InputField id="defaultHomepage" label={t('defaultHomepageUrl')} help={t('thisUrlWillBeUsedInListSubscriptionForms')}/>
|
<InputField id="defaultHomepage" label={t('defaultHomepageUrl')} help={t('thisUrlWillBeUsedInListSubscriptionForms')}/>
|
||||||
|
|
||||||
<InputField id="uaCode" label={t('trackingId')} placeholder={t('uaxxxxxxx')} help={t('enterGoogleAnalyticsTrackingCode')}/>
|
<InputField id="uaCode" label={t('trackingId')} placeholder={t('uaxxxxxxx')} help={t('enterGoogleAnalyticsTrackingCode')}/>
|
||||||
<InputField id="mapsApiKey" label={t('Google Maps API Key')} placeholder={t('XXXXXX')} help={t('The map overview in campaign statistics requires a Google Maps API key. Please enter it here. If no key is given, Google may throttle map requests, which will result in occassional unavailability of the map in the campaign statistics.')}/>
|
<InputField id="mapsApiKey" label={t('googleMapsApiKey')} placeholder={t('xxxxxx')} help={t('theMapOverviewInCampaignStatistics')}/>
|
||||||
|
|
||||||
<TextArea id="shoutout" label={t('frontpageShoutOut')} help={t('htmlCodeShownInTheFrontPageHeaderSection')}/>
|
<TextArea id="shoutout" label={t('frontpageShoutOut')} help={t('htmlCodeShownInTheFrontPageHeaderSection')}/>
|
||||||
|
|
||||||
|
|
|
@ -203,16 +203,50 @@
|
||||||
"triggered": "Triggered",
|
"triggered": "Triggered",
|
||||||
"campaigns": "Campaigns",
|
"campaigns": "Campaigns",
|
||||||
"campaignStatistics": "Campaign Statistics",
|
"campaignStatistics": "Campaign Statistics",
|
||||||
"subscriptionHasToBeSelectedToShowThe": "Subscription has to be selected to show the campaign for a test user.",
|
"total": "Total",
|
||||||
|
"delivered": "Delivered",
|
||||||
|
"blacklisted": "Blacklisted",
|
||||||
|
"bounced": "Bounced",
|
||||||
|
"complaints": "Complaints",
|
||||||
|
"unsubscribed": "Unsubscribed",
|
||||||
|
"opened": "Opened",
|
||||||
|
"clicked": "Clicked",
|
||||||
|
"uniqueVisitors": "Unique visitors",
|
||||||
|
"totalClicks": "Total clicks",
|
||||||
|
"campaignLinks": "Campaign links",
|
||||||
"subscriptionId": "Subscription ID",
|
"subscriptionId": "Subscription ID",
|
||||||
"listId": "List ID",
|
"listId": "List ID",
|
||||||
"listNamespace": "List namespace",
|
"listNamespace": "List namespace",
|
||||||
|
"opensCount": "Opens count",
|
||||||
|
"countries": "Countries",
|
||||||
|
"devices": "Devices",
|
||||||
|
"desktop": "Desktop",
|
||||||
|
"tv": "TV",
|
||||||
|
"tablet": "Tablet",
|
||||||
|
"phone": "Phone",
|
||||||
|
"bot": "Bot",
|
||||||
|
"car": "Car",
|
||||||
|
"console": "Console",
|
||||||
|
"distributionByDeviceType": "Distribution by device type",
|
||||||
|
"loadingChart": "Loading chart",
|
||||||
|
"deviceType": "Device type",
|
||||||
|
"count": "Count",
|
||||||
|
"unknown": "Unknown",
|
||||||
|
"distributionByCountry": "Distribution by country",
|
||||||
|
"country": "Country",
|
||||||
|
"detailedStatistics": "Detailed Statistics",
|
||||||
|
"listOfSubscribersThatOpenedTheCampaign": "List of subscribers that opened the campaign",
|
||||||
|
"subscriptionHasToBeSelectedToShowThe": "Subscription has to be selected to show the campaign for a test user.",
|
||||||
"previewCampaignAs": "Preview campaign as",
|
"previewCampaignAs": "Preview campaign as",
|
||||||
"preview": "Preview",
|
"preview": "Preview",
|
||||||
"dateMustNotBeEmpty": "Date must not be empty",
|
"dateMustNotBeEmpty": "Date must not be empty",
|
||||||
"dateIsInvalid": "Date is invalid",
|
"dateIsInvalid": "Date is invalid",
|
||||||
"timeMustNotBeEmpty": "Time must not be empty",
|
"timeMustNotBeEmpty": "Time must not be empty",
|
||||||
"timeIsInvalid": "Time is invalid",
|
"timeIsInvalid": "Time is invalid",
|
||||||
|
"confirmReset": "Confirm reset",
|
||||||
|
"doYouWantToResetTheCampaign?All": "Do you want to reset the campaign? All statistics and the track of delivered messages will be lost.",
|
||||||
|
"no": "No",
|
||||||
|
"yes": "Yes",
|
||||||
"subscribers-1": "subscribers",
|
"subscribers-1": "subscribers",
|
||||||
"sendStatus": "Send status",
|
"sendStatus": "Send status",
|
||||||
"campaignIsScheduledForDelivery": "Campaign is scheduled for delivery.",
|
"campaignIsScheduledForDelivery": "Campaign is scheduled for delivery.",
|
||||||
|
@ -236,7 +270,6 @@
|
||||||
"yourCampaignIsEnabledAndSendingMessages": "Your campaign is enabled and sending messages.",
|
"yourCampaignIsEnabledAndSendingMessages": "Your campaign is enabled and sending messages.",
|
||||||
"disable": "Disable",
|
"disable": "Disable",
|
||||||
"campaignStatus": "Campaign Status",
|
"campaignStatus": "Campaign Status",
|
||||||
"computing": "computing ...",
|
|
||||||
"targetListssegments": "Target lists/segments",
|
"targetListssegments": "Target lists/segments",
|
||||||
"ifANewEntryIsFoundFromCampaignFeedANew": "If a new entry is found from campaign feed a new subcampaign is created of that entry and it will be listed here",
|
"ifANewEntryIsFoundFromCampaignFeedANew": "If a new entry is found from campaign feed a new subcampaign is created of that entry and it will be listed here",
|
||||||
"sendingTestEmail": "Sending test email",
|
"sendingTestEmail": "Sending test email",
|
||||||
|
@ -251,6 +284,12 @@
|
||||||
"inactive": "Inactive",
|
"inactive": "Inactive",
|
||||||
"active": "Active",
|
"active": "Active",
|
||||||
"campaignName": "Campaign \"{{name}}\"",
|
"campaignName": "Campaign \"{{name}}\"",
|
||||||
|
"deliveredEmails": "Delivered Emails",
|
||||||
|
"complained": "Complained",
|
||||||
|
"subscribersThatComplained": "Subscribers that Complained",
|
||||||
|
"emailsThatBounced": "Emails that Bounced",
|
||||||
|
"subscribersThatUnsubscribed": "Subscribers that Unsubscribed",
|
||||||
|
"clicks": "Clicks",
|
||||||
"theseFilesArePubliclyAvailableViaHttpSo": "These files are publicly available via HTTP so that they can be linked to from the content of the campaign.",
|
"theseFilesArePubliclyAvailableViaHttpSo": "These files are publicly available via HTTP so that they can be linked to from the content of the campaign.",
|
||||||
"theseFilesWillBeAttachedToTheCampaign": "These files will be attached to the campaign emails as proper attachments. This means they count towards to the eventual size of the email.",
|
"theseFilesWillBeAttachedToTheCampaign": "These files will be attached to the campaign emails as proper attachments. This means they count towards to the eventual size of the email.",
|
||||||
"triggerName": "Trigger \"{{name}}\"",
|
"triggerName": "Trigger \"{{name}}\"",
|
||||||
|
@ -270,13 +309,8 @@
|
||||||
"selectTheEventThatTriggersSendingThe": "Select the event that triggers sending the campaign.",
|
"selectTheEventThatTriggersSendingThe": "Select the event that triggers sending the campaign.",
|
||||||
"enabled": "Enabled",
|
"enabled": "Enabled",
|
||||||
"daysAfter": "Days after",
|
"daysAfter": "Days after",
|
||||||
"yes": "Yes",
|
|
||||||
"no": "No",
|
|
||||||
"latestOpen": "Latest open",
|
"latestOpen": "Latest open",
|
||||||
"latestClick": "Latest click",
|
"latestClick": "Latest click",
|
||||||
"delivered": "Delivered",
|
|
||||||
"opened": "Opened",
|
|
||||||
"clicked": "Clicked",
|
|
||||||
"notOpened": "Not opened",
|
"notOpened": "Not opened",
|
||||||
"notClicked": "Not clicked",
|
"notClicked": "Not clicked",
|
||||||
"close": "Close",
|
"close": "Close",
|
||||||
|
@ -339,7 +373,7 @@
|
||||||
"createList": "Create List",
|
"createList": "Create List",
|
||||||
"thisIsTheListIdDisplayedToTheSubscribers": "This is the list ID displayed to the subscribers",
|
"thisIsTheListIdDisplayedToTheSubscribers": "This is the list ID displayed to the subscribers",
|
||||||
"contactEmail": "Contact email",
|
"contactEmail": "Contact email",
|
||||||
"contactEmailUsedInSubscriptionFormsAnd": "Contact email used in subscription forms and emails that are sent out. If not filled in, the admin email from the global settings will be used.",
|
"contactEmailShownInTheListSubscription": "Contact email shown in the list subscription and management forms. If no contact email is given, the admin email from Global settings is used.",
|
||||||
"homepage": "Homepage",
|
"homepage": "Homepage",
|
||||||
"homepageUrlUsedInSubscriptionFormsAnd": "Homepage URL used in subscription forms and emails that are sent out. If not filled in, the default homepage from global settings will be used.",
|
"homepageUrlUsedInSubscriptionFormsAnd": "Homepage URL used in subscription forms and emails that are sent out. If not filled in, the default homepage from global settings will be used.",
|
||||||
"recipientsNameTemplate": "Recipients name template",
|
"recipientsNameTemplate": "Recipients name template",
|
||||||
|
@ -451,6 +485,8 @@
|
||||||
"formsPreview": "Forms Preview",
|
"formsPreview": "Forms Preview",
|
||||||
"listToPreviewOn": "List To Preview On",
|
"listToPreviewOn": "List To Preview On",
|
||||||
"selectListWhoseFieldsWillBeUsedToPreview": "Select list whose fields will be used to preview the forms.",
|
"selectListWhoseFieldsWillBeUsedToPreview": "Select list whose fields will be used to preview the forms.",
|
||||||
|
"noteTheseLinksAreSolelyForAQuickPreview": "Note: These links are solely for a quick preview. To get the address of the subscription form, go to the list\\'s subscribers and click on \"Subscription Form\".",
|
||||||
|
"formPreview": "Form preview:",
|
||||||
"templates": "Templates",
|
"templates": "Templates",
|
||||||
"customFormsUseMjmlForFormattingSeeThe": "Custom forms use MJML for formatting. See the MJML documentation <1>here</1>",
|
"customFormsUseMjmlForFormattingSeeThe": "Custom forms use MJML for formatting. See the MJML documentation <1>here</1>",
|
||||||
"createCustomForm": "Create Custom Form",
|
"createCustomForm": "Create Custom Form",
|
||||||
|
@ -628,7 +664,6 @@
|
||||||
"testUser?": "Test user?",
|
"testUser?": "Test user?",
|
||||||
"ifCheckedThenThisSubscriptionCanBeUsed": "If checked then this subscription can be used for previewing campaign messages",
|
"ifCheckedThenThisSubscriptionCanBeUsed": "If checked then this subscription can be used for previewing campaign messages",
|
||||||
"erased": "[ERASED]",
|
"erased": "[ERASED]",
|
||||||
"blacklisted": "Blacklisted",
|
|
||||||
"confirmUnsubscription": "Confirm Unsubscription",
|
"confirmUnsubscription": "Confirm Unsubscription",
|
||||||
"areYouSureYouWantToUnsubscribeEmail?": "Are you sure you want to unsubscribe {{email}}?",
|
"areYouSureYouWantToUnsubscribeEmail?": "Are you sure you want to unsubscribe {{email}}?",
|
||||||
"unsubscribingEmail": "Unsubscribing {{email}}",
|
"unsubscribingEmail": "Unsubscribing {{email}}",
|
||||||
|
@ -643,8 +678,6 @@
|
||||||
"addSubscriber": "Add Subscriber",
|
"addSubscriber": "Add Subscriber",
|
||||||
"subscribed": "Subscribed",
|
"subscribed": "Subscribed",
|
||||||
"unubscribed": "Unubscribed",
|
"unubscribed": "Unubscribed",
|
||||||
"bounced": "Bounced",
|
|
||||||
"complained": "Complained",
|
|
||||||
"parentNamespaceMustBeSelected": "Parent Namespace must be selected",
|
"parentNamespaceMustBeSelected": "Parent Namespace must be selected",
|
||||||
"namespaceSaved": "Namespace saved",
|
"namespaceSaved": "Namespace saved",
|
||||||
"thereHasBeenALoopDetectedInTheAssignment": "There has been a loop detected in the assignment of the parent namespace. This is most likely because someone else has changed the parent of some namespace in the meantime. Refresh your page to start anew. Please note that your changes will be lost.",
|
"thereHasBeenALoopDetectedInTheAssignment": "There has been a loop detected in the assignment of the parent namespace. This is most likely because someone else has changed the parent of some namespace in the meantime. Refresh your page to start anew. Please note that your changes will be lost.",
|
||||||
|
@ -678,11 +711,13 @@
|
||||||
"viewConsoleOutput": "View console output",
|
"viewConsoleOutput": "View console output",
|
||||||
"reportTemplates": "Report Templates",
|
"reportTemplates": "Report Templates",
|
||||||
"reports": "Reports",
|
"reports": "Reports",
|
||||||
|
"reportName": "Report {{name}}",
|
||||||
|
"loadingReport": "Loading report ...",
|
||||||
"outputForReportName": "Output for report {{name}}",
|
"outputForReportName": "Output for report {{name}}",
|
||||||
"loadingReportOutput": "Loading report output ...",
|
"loadingReportOutput": "Loading report output ...",
|
||||||
"reportName": "Report {{name}}",
|
"reportIsBeingGenerated": "Report is being generated",
|
||||||
"reportNotGenerated": "Report not generated",
|
"reportNotGenerated": "Report not generated",
|
||||||
"loadingReport": "Loading report ...",
|
"refresh": "Refresh",
|
||||||
"reportName-1": "Report \"{{name}}\"",
|
"reportName-1": "Report \"{{name}}\"",
|
||||||
"output": "Output",
|
"output": "Output",
|
||||||
"templateName": "Template \"{{name}}\"",
|
"templateName": "Template \"{{name}}\"",
|
||||||
|
@ -701,9 +736,9 @@
|
||||||
"writeTheBodyOfTheJavaScriptFunctionWith": "Write the body of the JavaScript function with signature <1>function(inputs, callback)</1> that returns an object to be rendered by the Handlebars template below.",
|
"writeTheBodyOfTheJavaScriptFunctionWith": "Write the body of the JavaScript function with signature <1>function(inputs, callback)</1> that returns an object to be rendered by the Handlebars template below.",
|
||||||
"useHtmlWithHandlebarsSyntaxSee": "Use HTML with Handlebars syntax. See documentation <1>here</1>.",
|
"useHtmlWithHandlebarsSyntaxSee": "Use HTML with Handlebars syntax. See documentation <1>here</1>.",
|
||||||
"blank": "Blank",
|
"blank": "Blank",
|
||||||
"allSubscribers": "All Subscribers",
|
"openCounts": "Open counts",
|
||||||
"groupedSubscribers": "Grouped Subscribers",
|
"openCountsAsCsv": "Open counts as CSV",
|
||||||
"exportListAsCsv": "Export List as CSV",
|
"aggregratedOpenCounts": "Aggregrated open counts",
|
||||||
"current": "(current)",
|
"current": "(current)",
|
||||||
"toggleNavigation": "Toggle navigation",
|
"toggleNavigation": "Toggle navigation",
|
||||||
"administration": "Administration",
|
"administration": "Administration",
|
||||||
|
@ -748,6 +783,10 @@
|
||||||
"useast1": "US-EAST-1",
|
"useast1": "US-EAST-1",
|
||||||
"uswest2": "US-WEST-2",
|
"uswest2": "US-WEST-2",
|
||||||
"euwest1": "EU-WEST-1",
|
"euwest1": "EU-WEST-1",
|
||||||
|
"builtinZoneMta": "Built-in ZoneMTA",
|
||||||
|
"dynamicConfigurationOfDkimKeysViaZoneMt": "Dynamic configuration of DKIM keys via ZoneMTA\\'s Mailtrain plugin (use this option for builtin ZoneMTA)",
|
||||||
|
"dynamicConfigurationOfDkimKeysViaZoneMt-1": "Dynamic configuration of DKIM keys via ZoneMTA\\'s HTTP config plugin",
|
||||||
|
"noDynamicConfigurationOfDkimKeys": "No dynamic configuration of DKIM keys",
|
||||||
"mailerSettings": "Mailer Settings",
|
"mailerSettings": "Mailer Settings",
|
||||||
"mailerType": "Mailer type",
|
"mailerType": "Mailer type",
|
||||||
"hostname": "Hostname",
|
"hostname": "Hostname",
|
||||||
|
@ -769,6 +808,7 @@
|
||||||
"throttling": "Throttling",
|
"throttling": "Throttling",
|
||||||
"messagesPerHourEg1000": "Messages per hour eg. 1000",
|
"messagesPerHourEg1000": "Messages per hour eg. 1000",
|
||||||
"maximumNumberOfMessagesToSendInAnHour": "Maximum number of messages to send in an hour. Leave empty or zero for no throttling. If your provider uses a different speed limit (messages/minute or messages/second) then convert this limit into messages/hour (1m/s => 3600m/h). This limit is per sending process.",
|
"maximumNumberOfMessagesToSendInAnHour": "Maximum number of messages to send in an hour. Leave empty or zero for no throttling. If your provider uses a different speed limit (messages/minute or messages/second) then convert this limit into messages/hour (1m/s => 3600m/h). This limit is per sending process.",
|
||||||
|
"dynamicConfiguration": "Dynamic configuration",
|
||||||
"dkimSigning": "DKIM Signing",
|
"dkimSigning": "DKIM Signing",
|
||||||
"zoneMtaDkimApiKey": "ZoneMTA DKIM API key",
|
"zoneMtaDkimApiKey": "ZoneMTA DKIM API key",
|
||||||
"secretValueKnownToZoneMtaForRequesting": "Secret value known to ZoneMTA for requesting DKIM key information. If this value was generated by the Mailtrain installation script then you can keep it as it is.",
|
"secretValueKnownToZoneMtaForRequesting": "Secret value known to ZoneMTA for requesting DKIM key information. If this value was generated by the Mailtrain installation script then you can keep it as it is.",
|
||||||
|
@ -793,6 +833,9 @@
|
||||||
"trackingId": "Tracking ID",
|
"trackingId": "Tracking ID",
|
||||||
"uaxxxxxxx": "UA-XXXXX-XX",
|
"uaxxxxxxx": "UA-XXXXX-XX",
|
||||||
"enterGoogleAnalyticsTrackingCode": "Enter Google Analytics tracking code",
|
"enterGoogleAnalyticsTrackingCode": "Enter Google Analytics tracking code",
|
||||||
|
"googleMapsApiKey": "Google Maps API Key",
|
||||||
|
"xxxxxx": "XXXXXX",
|
||||||
|
"theMapOverviewInCampaignStatistics": "The map overview in campaign statistics requires a Google Maps API key. Please enter it here. If no key is given, Google may throttle map requests, which will result in occassional unavailability of the map in the campaign statistics.",
|
||||||
"frontpageShoutOut": "Frontpage shout out",
|
"frontpageShoutOut": "Frontpage shout out",
|
||||||
"htmlCodeShownInTheFrontPageHeaderSection": "HTML code shown in the front page header section",
|
"htmlCodeShownInTheFrontPageHeaderSection": "HTML code shown in the front page header section",
|
||||||
"gpgSigning": "GPG Signing",
|
"gpgSigning": "GPG Signing",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue