Extracted strings and fixes on localization support
Language chooser in the UI
This commit is contained in:
parent
9f449c0a2f
commit
dc7789c17b
126 changed files with 2919 additions and 2028 deletions
|
@ -1,15 +1,23 @@
|
|||
'use strict';
|
||||
|
||||
import React, { Component } from 'react';
|
||||
import { translate, Trans } from 'react-i18next';
|
||||
import { requiresAuthenticatedUser, withPageHelpers, Title } from '../lib/page'
|
||||
import { withErrorHandling, withAsyncErrorHandler } from '../lib/error-handling';
|
||||
import URL from 'url-parse';
|
||||
import axios from '../lib/axios';
|
||||
import { Button } from '../lib/bootstrap-components';
|
||||
import { getUrl } from "../lib/urls";
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {Trans} from 'react-i18next';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page'
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import axios
|
||||
from '../lib/axios';
|
||||
import {Button} from '../lib/bootstrap-components';
|
||||
import {getUrl} from "../lib/urls";
|
||||
|
||||
@translate()
|
||||
@withTranslation()
|
||||
@withPageHelpers
|
||||
@withErrorHandling
|
||||
@requiresAuthenticatedUser
|
||||
|
@ -49,156 +57,156 @@ export default class API extends Component {
|
|||
|
||||
let accessTokenMsg;
|
||||
if (this.state.accessToken) {
|
||||
accessTokenMsg = <div>{t('Personal access token') + ': '}<code>{accessToken}</code></div>;
|
||||
accessTokenMsg = <div>{t('personalAccessToken') + ': '}<code>{accessToken}</code></div>;
|
||||
} else {
|
||||
accessTokenMsg = <div>{t('Access token not yet generated')}</div>;
|
||||
accessTokenMsg = <div>{t('accessTokenNotYetGenerated')}</div>;
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Title>{t('API')}</Title>
|
||||
<Title>{t('api')}</Title>
|
||||
|
||||
|
||||
<div className="panel panel-default">
|
||||
<div className="panel-body">
|
||||
<div className="pull-right">
|
||||
<Button label={this.state.accessToken ? t('Reset Access Token') : t('Generate Access Token')} icon="retweet" className="btn-info" onClickAsync={::this.resetAccessToken} />
|
||||
<Button label={this.state.accessToken ? t('resetAccessToken') : t('generateAccessToken')} icon="retweet" className="btn-info" onClickAsync={::this.resetAccessToken} />
|
||||
</div>
|
||||
{accessTokenMsg}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="well">
|
||||
<h3>{t('Notes about the API')}</h3>
|
||||
<h3>{t('notesAboutTheApi')}</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<Trans>API response is a JSON structure with <code>error</code> and <code>data</code> properties. If the response <code>error</code> has a value set then the request failed.</Trans>
|
||||
<Trans i18nKey="apiResponseIsAJsonStructureWithErrorAnd">API response is a JSON structure with <code>error</code> and <code>data</code> properties. If the response <code>error</code> has a value set then the request failed.</Trans>
|
||||
</li>
|
||||
<li>
|
||||
<Trans>You need to define proper <code>Content-Type</code> when making a request. You can either use <code>application/x-www-form-urlencoded</code> for normal form data or <code>application/json</code> for a JSON payload. Using <code>multipart/form-data</code> is not supported.</Trans>
|
||||
<Trans i18nKey="youNeedToDefineProperContentTypeWhen">You need to define proper <code>Content-Type</code> when making a request. You can either use <code>application/x-www-form-urlencoded</code> for normal form data or <code>application/json</code> for a JSON payload. Using <code>multipart/form-data</code> is not supported.</Trans>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<h3>POST /api/subscribe/:listId – {t('Add subscription')}</h3>
|
||||
<h3>POST /api/subscribe/:listId – {t('addSubscription')}</h3>
|
||||
|
||||
<p>
|
||||
{t('This API call either inserts a new subscription or updates existing. Fields not included are left as is, so if you update only LAST_NAME value, then FIRST_NAME is kept untouched for an existing subscription.')}
|
||||
{t('thisApiCallEitherInsertsANewSubscription')}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>GET</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>access_token</strong> – {t('your personal access token')}</li>
|
||||
<li><strong>access_token</strong> – {t('yourPersonalAccessToken')}</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>POST</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>EMAIL</strong> – {t('subscriber\'s email address')} (<em>{t('required')}</em>)</li>
|
||||
<li><strong>FIRST_NAME</strong> – {t('subscriber\'s first name')}</li>
|
||||
<li><strong>LAST_NAME</strong> – {t('subscriber\'s last name')}</li>
|
||||
<li><strong>TIMEZONE</strong> – {t('subscriber\'s timezone (eg. "Europe/Tallinn", "PST" or "UTC"). If not set defaults to "UTC"')}</li>
|
||||
<li><strong>MERGE_TAG_VALUE</strong> – {t('custom field value. Use yes/no for option group values (checkboxes, radios, drop downs)')}</li>
|
||||
<li><strong>EMAIL</strong> – {t('subscribersEmailAddress')} (<em>{t('required')}</em>)</li>
|
||||
<li><strong>FIRST_NAME</strong> – {t('subscribersFirstName')}</li>
|
||||
<li><strong>LAST_NAME</strong> – {t('subscribersLastName')}</li>
|
||||
<li><strong>TIMEZONE</strong> – {t('subscribersTimezoneEgEuropeTallinnPstOr')}</li>
|
||||
<li><strong>MERGE_TAG_VALUE</strong> – {t('customFieldValueUseYesnoForOptionGroup')}</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
{t('Additional POST arguments')}:
|
||||
{t('additionalPostArguments')}:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<strong>FORCE_SUBSCRIBE</strong> – {t('set to "yes" if you want to make sure the email is marked as subscribed even if it was previously marked as unsubscribed. If the email was already unsubscribed/blocked then subscription status is not changed')}
|
||||
<strong>FORCE_SUBSCRIBE</strong> – {t('setToYesIfYouWantToMakeSureTheEmailIs')}
|
||||
by default.
|
||||
</li>
|
||||
<li>
|
||||
<strong>REQUIRE_CONFIRMATION</strong> – {t('set to "yes" if you want to send confirmation email to the subscriber before actually marking as subscribed')}
|
||||
<strong>REQUIRE_CONFIRMATION</strong> – {t('setToYesIfYouWantToSendConfirmationEmail')}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>{t('Example')}</strong>
|
||||
<strong>{t('example')}</strong>
|
||||
</p>
|
||||
|
||||
<pre>curl -XPOST '{getUrl(`api/subscribe/B16uVTdW?access_token=${accessToken}`)}' \
|
||||
--data 'EMAIL=test@example.com&MERGE_CHECKBOX=yes&REQUIRE_CONFIRMATION=yes'</pre>
|
||||
|
||||
<h3>POST /api/unsubscribe/:listId – {t('Remove subscription')}</h3>
|
||||
<h3>POST /api/unsubscribe/:listId – {t('removeSubscription')}</h3>
|
||||
|
||||
<p>
|
||||
{t('This API call marks a subscription as unsubscribed')}
|
||||
{t('thisApiCallMarksASubscriptionAs')}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>GET</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>access_token</strong> – {t('your personal access token')}</li>
|
||||
<li><strong>access_token</strong> – {t('yourPersonalAccessToken')}</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>POST</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>EMAIL</strong> – {t('subscriber\'s email address')} (<em>{t('required')}</em>)</li>
|
||||
<li><strong>EMAIL</strong> – {t('subscribersEmailAddress')} (<em>{t('required')}</em>)</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>{t('Example')}</strong>
|
||||
<strong>{t('example')}</strong>
|
||||
</p>
|
||||
|
||||
<pre>curl -XPOST '{getUrl(`api/unsubscribe/B16uVTdW?access_token=${accessToken}`)}' \
|
||||
--data 'EMAIL=test@example.com'</pre>
|
||||
|
||||
<h3>POST /api/delete/:listId – {t('Delete subscription')}</h3>
|
||||
<h3>POST /api/delete/:listId – {t('deleteSubscription')}</h3>
|
||||
|
||||
<p>
|
||||
{t('This API call deletes a subscription')}
|
||||
{t('thisApiCallDeletesASubscription')}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>GET</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>access_token</strong> – {t('your personal access token')}</li>
|
||||
<li><strong>access_token</strong> – {t('yourPersonalAccessToken')}</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>POST</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>EMAIL</strong> – {t('subscriber\'s email address')} (<em>{t('required')}</em>)</li>
|
||||
<li><strong>EMAIL</strong> – {t('subscribersEmailAddress')} (<em>{t('required')}</em>)</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>{t('Example')}</strong>
|
||||
<strong>{t('example')}</strong>
|
||||
</p>
|
||||
|
||||
<pre>curl -XPOST '{getUrl(`api/delete/B16uVTdW?access_token=${accessToken}`)}' \
|
||||
--data 'EMAIL=test@example.com'</pre>
|
||||
|
||||
<h3>POST /api/field/:listId – {t('Add new custom field')}</h3>
|
||||
<h3>POST /api/field/:listId – {t('addNewCustomField')}</h3>
|
||||
|
||||
<p>
|
||||
{t('This API call creates a new custom field for a list.')}
|
||||
{t('thisApiCallCreatesANewCustomFieldForA')}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>GET</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>access_token</strong> – {t('your personal access token')}</li>
|
||||
<li><strong>access_token</strong> – {t('yourPersonalAccessToken')}</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>POST</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>NAME</strong> – {t('field name')} (<em>{t('required')}</em>)</li>
|
||||
<li><strong>TYPE</strong> – {t('one of the following types:')}
|
||||
<li><strong>NAME</strong> – {t('fieldName')} (<em>{t('required')}</em>)</li>
|
||||
<li><strong>TYPE</strong> – {t('oneOfTheFollowingTypes')}
|
||||
<ul>
|
||||
<li><strong>text</strong> – Text</li>
|
||||
<li><strong>website</strong> – Website</li>
|
||||
|
@ -216,112 +224,112 @@ export default class API extends Component {
|
|||
<li><strong>option</strong> – Option</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>GROUP</strong> – {t('If the type is \'option\' then you also need to specify the parent element ID')}</li>
|
||||
<li><strong>GROUP_TEMPLATE</strong> – {t('Template for the group element. If not set, then values of the elements are joined with commas')}</li>
|
||||
<li><strong>VISIBLE</strong> – yes/no, {t('if not visible then the subscriber can not view or modify this value at the profile page')}</li>
|
||||
<li><strong>GROUP</strong> – {t('ifTheTypeIsOptionThenYouAlsoNeedTo')}</li>
|
||||
<li><strong>GROUP_TEMPLATE</strong> – {t('templateForTheGroupElementIfNotSetThen')}</li>
|
||||
<li><strong>VISIBLE</strong> – yes/no, {t('ifNotVisibleThenTheSubscriberCanNotView')}</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>{t('Example')}</strong>
|
||||
<strong>{t('example')}</strong>
|
||||
</p>
|
||||
|
||||
<pre>curl -XPOST '{getUrl(`api/field/B16uVTdW?access_token=${accessToken}`)}' \
|
||||
--data 'NAME=Birthday&TYPE=birthday-us&VISIBLE=yes'</pre>
|
||||
|
||||
<h3>GET /api/blacklist/get – {t('Get list of blacklisted emails')}</h3>
|
||||
<h3>GET /api/blacklist/get – {t('getListOfBlacklistedEmails')}</h3>
|
||||
|
||||
<p>
|
||||
{t('This API call get list of blacklisted emails.')}
|
||||
{t('thisApiCallGetListOfBlacklistedEmails')}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>GET</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>access_token</strong> – {t('your personal access token')}
|
||||
<li><strong>access_token</strong> – {t('yourPersonalAccessToken')}
|
||||
<ul>
|
||||
<li><strong>start</strong> – {t('Start position')} (<em>{t('optional, default 0')}</em>)</li>
|
||||
<li><strong>limit</strong> – {t('limit emails count in response')} (<em>{t('optional, default 10000')}</em>)</li>
|
||||
<li><strong>search</strong> – {t('filter by part of email')} (<em>{t('optional, default ""')}</em>)</li>
|
||||
<li><strong>start</strong> – {t('startPosition')} (<em>{t('optionalDefault0')}</em>)</li>
|
||||
<li><strong>limit</strong> – {t('limitEmailsCountInResponse')} (<em>{t('optionalDefault10000')}</em>)</li>
|
||||
<li><strong>search</strong> – {t('filterByPartOfEmail')} (<em>{t('optionalDefault')}</em>)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>{t('Example')}</strong>
|
||||
<strong>{t('example')}</strong>
|
||||
</p>
|
||||
|
||||
<pre>curl -XGET '{getUrl(`api/blacklist/get?access_token=${accessToken}&limit=10&start=10&search=gmail`)}' </pre>
|
||||
|
||||
<h3>POST /api/blacklist/add – {t('Add email to blacklist')}</h3>
|
||||
<h3>POST /api/blacklist/add – {t('addEmailToBlacklist')}</h3>
|
||||
|
||||
<p>
|
||||
{t('This API call either add emails to blacklist')}
|
||||
{t('thisApiCallEitherAddEmailsToBlacklist')}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>GET</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>access_token</strong> – {t('your personal access token')}</li>
|
||||
<li><strong>access_token</strong> – {t('yourPersonalAccessToken')}</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>POST</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>EMAIL</strong> – {t('email address')} (<em>{t('required')}</em>)</li>
|
||||
<li><strong>EMAIL</strong> – {t('emailAddress')} (<em>{t('required')}</em>)</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>{t('Example')}</strong>
|
||||
<strong>{t('example')}</strong>
|
||||
</p>
|
||||
|
||||
<pre>curl -XPOST '{getUrl(`api/blacklist/add?access_token={accessToken}`)}' \
|
||||
--data 'EMAIL=test@example.com&'</pre>
|
||||
|
||||
<h3>POST /api/blacklist/delete – {t('Delete email from blacklist')}</h3>
|
||||
<h3>POST /api/blacklist/delete – {t('deleteEmailFromBlacklist')}</h3>
|
||||
|
||||
<p>
|
||||
{t('This API call either delete emails from blacklist')}
|
||||
{t('thisApiCallEitherDeleteEmailsFrom')}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>GET</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>access_token</strong> – {t('your personal access token')}</li>
|
||||
<li><strong>access_token</strong> – {t('yourPersonalAccessToken')}</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>POST</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>EMAIL</strong> – {t('email address')} (<em>{t('required')}</em>)</li>
|
||||
<li><strong>EMAIL</strong> – {t('emailAddress')} (<em>{t('required')}</em>)</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>{t('Example')}</strong>
|
||||
<strong>{t('example')}</strong>
|
||||
</p>
|
||||
|
||||
<pre>curl -XPOST '{getUrl(`api/blacklist/delete?access_token=${accessToken}`)}' \
|
||||
--data 'EMAIL=test@example.com&'</pre>
|
||||
|
||||
<h3>GET /api/lists/:email – {t('Get the lists a user has subscribed to')}</h3>
|
||||
<h3>GET /api/lists/:email – {t('getTheListsAUserHasSubscribedTo')}</h3>
|
||||
|
||||
<p>
|
||||
{t('Retrieve the lists that the user with :email has subscribed to.')}
|
||||
{t('retrieveTheListsThatTheUserWithEmailHas')}
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>GET</strong> {t('arguments')}
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>access_token</strong> – {t('your personal access token')}</li>
|
||||
<li><strong>access_token</strong> – {t('yourPersonalAccessToken')}</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
<strong>{t('Example')}</strong>
|
||||
<strong>{t('example')}</strong>
|
||||
</p>
|
||||
|
||||
<pre>curl -XGET '{getUrl(`api/lists/test@example.com?access_token=${accessToken}`)}'</pre>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue