Updated translation support

This commit is contained in:
Andris Reinman 2017-03-07 16:30:56 +02:00
parent b1e8cd68cd
commit d25565b6f8
114 changed files with 42095 additions and 1902 deletions

View file

@ -1,17 +1,17 @@
<ol class="breadcrumb">
<li><a href="/">Home</a></li>
<li class="active">Account</li>
<li><a href="/">{{#translate}}Home{{/translate}}</a></li>
<li class="active">{{#translate}}Account{{/translate}}</li>
</ol>
<h2>Account</h2>
<h2>{{#translate}}Account{{/translate}}</h2>
<hr>
{{#if ldap.enabled}}
<p>
This account is managed through LDAP.
{{#translate}}This account is managed through LDAP.{{/translate}}
<br/>
<br/> Associated Email Address: <a href="mailto:{{email}}">{{email}}</a>
<br/> {{#translate}}Associated Email Address{{/translate}}: <a href="mailto:{{email}}">{{email}}</a>
</p>
{{else}}
<form class="form-horizontal" method="post" action="/users/account">
@ -20,43 +20,43 @@
<fieldset>
<legend>
General Settings
{{#translate}}General Settings{{/translate}}
</legend>
<div class="form-group">
<label for="email" class="col-sm-2 control-label">Email Address</label>
<label for="email" class="col-sm-2 control-label">{{#translate}}Email Address{{/translate}}</label>
<div class="col-sm-10">
<input type="email" class="form-control" name="email" id="email" value="{{email}}" placeholder="Your e-mail address" required>
<span class="help-block">This address is used for account recovery in case you loose your password</span>
<input type="email" class="form-control" name="email" id="email" value="{{email}}" placeholder="{{#translate}}Your e-mail address{{/translate}}" required>
<span class="help-block">{{#translate}}This address is used for account recovery in case you loose your password{{/translate}}</span>
</div>
</div>
</fieldset>
<fieldset>
<legend>
Password change
{{#translate}}Password change{{/translate}}
</legend>
<p>
You only need to fill out this form if you want to change your current password
{{#translate}}You only need to fill out this form if you want to change your current password{{/translate}}
</p>
<div class="form-group">
<label for="currentPassword" class="col-sm-2 control-label">Current Password</label>
<label for="currentPassword" class="col-sm-2 control-label">{{#translate}}Current Password{{/translate}}</label>
<div class="col-sm-10">
<input type="password" class="form-control" name="currentPassword" id="currentPassword" placeholder="Current Password">
<input type="password" class="form-control" name="currentPassword" id="currentPassword" placeholder="{{#translate}}Current Password{{/translate}}">
</div>
</div>
<div class="form-group">
<label for="password" class="col-sm-2 control-label">New Password</label>
<label for="password" class="col-sm-2 control-label">{{#translate}}New Password{{/translate}}</label>
<div class="col-sm-10">
<input type="password" class="form-control" name="password" id="password" placeholder="New Password">
<input type="password" class="form-control" name="password" id="password" placeholder="{{#translate}}New Password{{/translate}}">
</div>
</div>
<div class="form-group">
<label for="password2" class="col-sm-2 control-label">Confirm Password</label>
<label for="password2" class="col-sm-2 control-label">{{#translate}}Confirm Password{{/translate}}</label>
<div class="col-sm-10">
<input type="password" class="form-control" name="password2" id="password2" placeholder="Confirm New Password">
<input type="password" class="form-control" name="password2" id="password2" placeholder="{{#translate}}Confirm New Password{{/translate}}">
</div>
</div>
@ -64,7 +64,7 @@
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary"><i class="glyphicon glyphicon-ok"></i> Update</button>
<button type="submit" class="btn btn-primary"><i class="glyphicon glyphicon-ok"></i> {{#translate}}Update{{/translate}}</button>
</div>
</div>

View file

@ -1,166 +1,166 @@
<ol class="breadcrumb">
<li><a href="/">Home</a></li>
<li class="active">API</li>
<li><a href="/">{{#translate}}Home{{/translate}}</a></li>
<li class="active">{{#translate}}API{{/translate}}</li>
</ol>
<h2>API</h2>
<h2>{{#translate}}API{{/translate}}</h2>
<hr>
<div class="panel panel-default">
<div class="panel-body">
<div class="pull-right">
<form class="form-horizontal confirm-submit" {{#if accessToken}} data-confirm-message="Are you sure? Resetting would invalidate the currently existing token." {{else}} data-confirm-message="Are you sure?" {{/if}} method="post" action="/users/api/reset-token">
<form class="form-horizontal confirm-submit" {{#if accessToken}} data-confirm-message="{{#translate}}Are you sure? Resetting would invalidate the currently existing token.{{/translate}}" {{else}} data-confirm-message="{{#translate}}Are you sure?{{/translate}}" {{/if}} method="post" action="/users/api/reset-token">
<input type="hidden" name="_csrf" value="{{csrfToken}}">
<button type="submit" class="btn btn-info"><span class="glyphicon glyphicon-retweet" aria-hidden="true"></span>
{{#if accessToken}}
Reset Access Token
{{#translate}}Reset Access Token{{/translate}}
{{else}}
Generate Access Token
{{#translate}}Generate Access Token{{/translate}}
{{/if}}
</button>
</form>
</div>
{{#if accessToken}}
Personal access token: <code>{{accessToken}}</code>
{{#translate}}Personal access token:{{/translate}} <code>{{accessToken}}</code>
{{else}}
Access token not yet generated
{{#translate}}Access token not yet generated{{/translate}}
{{/if}}
</div>
</div>
<div class="well">
<h3>Notes about the API</h3>
<h3>{{#translate}}Notes about the API{{/translate}}</h3>
<ul>
<li>
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.
{{#translate}}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.{{/translate}}
</li>
<li>
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.
{{#translate}}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.{{/translate}}
</li>
</ul>
</div>
<h3>POST /api/subscribe/:listId Add subscription</h3>
<h3>POST /api/subscribe/:listId {{#translate}}Add subscription{{/translate}}</h3>
<p>
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.
{{#translate}}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.{{/translate}}
</p>
<p>
<strong>GET</strong> arguments
<strong>GET</strong> {{#translate}}arguments{{/translate}}
</p>
<ul>
<li><strong>access_token</strong> your personal access token
<li><strong>access_token</strong> {{#translate}}your personal access token{{/translate}}
</ul>
<p>
<strong>POST</strong> arguments
<strong>POST</strong> {{#translate}}arguments{{/translate}}
</p>
<ul>
<li><strong>EMAIL</strong> subscriber's email address (<em>required</em>)</li>
<li><strong>FIRST_NAME</strong> subscriber's first name</li>
<li><strong>LAST_NAME</strong> subscriber's last name</li>
<li><strong>TIMEZONE</strong> subscriber's timezone (eg. "Europe/Tallinn", "PST" or "UTC"). If not set defaults to "UTC"</li>
<li><strong>MERGE_TAG_VALUE</strong> custom field value. Use yes/no for option group values (checkboxes, radios, drop downs)</li>
<li><strong>EMAIL</strong> {{#translate}}subscriber's email address{{/translate}} (<em>{{#translate}}required{{/translate}}</em>)</li>
<li><strong>FIRST_NAME</strong> {{#translate}}subscriber's first name{{/translate}}</li>
<li><strong>LAST_NAME</strong> {{#translate}}subscriber's last name{{/translate}}</li>
<li><strong>TIMEZONE</strong> {{#translate}}subscriber's timezone (eg. "Europe/Tallinn", "PST" or "UTC"). If not set defaults to "UTC"{{/translate}}</li>
<li><strong>MERGE_TAG_VALUE</strong> {{#translate}}custom field value. Use yes/no for option group values (checkboxes, radios, drop downs){{/translate}}</li>
</ul>
<p>
Additional <strong>POST</strong> arguments:
{{#translate}}Additional POST arguments{{/translate}}:
</p>
<ul>
<li>
<strong>FORCE_SUBSCRIBE</strong> 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> {{#translate}}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{{/translate}}
by default.
</li>
<li>
<strong>REQUIRE_CONFIRMATION</strong> set to "yes" if you want to send confirmation email to the subscriber before actually marking as subscribed
<strong>REQUIRE_CONFIRMATION</strong> {{#translate}}set to "yes" if you want to send confirmation email to the subscriber before actually marking as subscribed{{/translate}}
</li>
</ul>
<p>
<strong>Example</strong>
<strong>{{#translate}}Example{{/translate}}</strong>
</p>
<pre>curl -XPOST {{serviceUrl}}api/subscribe/B16uVTdW?access_token={{accessToken}} \
--data 'EMAIL=test@example.com&amp;MERGE_CHECKBOX=yes&amp;REQUIRE_CONFIRMATION=yes'</pre>
<h3>POST /api/unsubscribe/:listId Remove subscription</h3>
<h3>POST /api/unsubscribe/:listId {{#translate}}Remove subscription{{/translate}}</h3>
<p>
This API call marks a subscription as unsubscribed
{{#translate}}This API call marks a subscription as unsubscribed{{/translate}}
</p>
<p>
<strong>GET</strong> arguments
<strong>GET</strong> {{#translate}}arguments{{/translate}}
</p>
<ul>
<li><strong>access_token</strong> your personal access token
<li><strong>access_token</strong> {{#translate}}your personal access token{{/translate}}
</ul>
<p>
<strong>POST</strong> arguments
<strong>POST</strong> {{#translate}}arguments{{/translate}}
</p>
<ul>
<li><strong>EMAIL</strong> subscriber's email address (<em>required</em>)
<li><strong>EMAIL</strong> {{#translate}}subscriber's email address{{/translate}} (<em>{{#translate}}required{{/translate}}</em>)
</ul>
<p>
<strong>Example</strong>
<strong>{{#translate}}Example{{/translate}}</strong>
</p>
<pre>curl -XPOST {{serviceUrl}}api/unsubscribe/B16uVTdW?access_token={{accessToken}} \
--data 'EMAIL=test@example.com'</pre>
<h3>POST /api/delete/:listId Delete subscription</h3>
<h3>POST /api/delete/:listId {{#translate}}Delete subscription{{/translate}}</h3>
<p>
This API call deletes a subscription
{{#translate}}This API call deletes a subscription{{/translate}}
</p>
<p>
<strong>GET</strong> arguments
<strong>GET</strong> {{#translate}}arguments{{/translate}}
</p>
<ul>
<li><strong>access_token</strong> your personal access token
<li><strong>access_token</strong> {{#translate}}your personal access token{{/translate}}
</ul>
<p>
<strong>POST</strong> arguments
<strong>POST</strong> {{#translate}}arguments{{/translate}}
</p>
<ul>
<li><strong>EMAIL</strong> subscriber's email address (<em>required</em>)
<li><strong>EMAIL</strong> {{#translate}}subscriber's email address{{/translate}} (<em>{{#translate}}required{{/translate}}</em>)
</ul>
<p>
<strong>Example</strong>
<strong>{{#translate}}Example{{/translate}}</strong>
</p>
<pre>curl -XPOST {{serviceUrl}}api/delete/B16uVTdW?access_token={{accessToken}} \
--data 'EMAIL=test@example.com'</pre>
<h3>POST /api/field/:listId Add new custom field</h3>
<h3>POST /api/field/:listId {{#translate}}Add new custom field{{/translate}}</h3>
<p>
This API call creates a new custom field for a list.
{{#translate}}This API call creates a new custom field for a list.{{/translate}}
</p>
<p>
<strong>GET</strong> arguments
<strong>GET</strong> {{#translate}}arguments{{/translate}}
</p>
<ul>
<li><strong>access_token</strong> your personal access token
<li><strong>access_token</strong> {{#translate}}your personal access token{{/translate}}
</ul>
<p>
<strong>POST</strong> arguments
<strong>POST</strong> {{#translate}}arguments{{/translate}}
</p>
<ul>
<li><strong>NAME</strong> field name (<em>required</em>)</li>
<li><strong>TYPE</strong> one of the following types:
<li><strong>NAME</strong> {{#translate}}field name{{/translate}} (<em>{{#translate}}required{{/translate}}</em>)</li>
<li><strong>TYPE</strong> {{#translate}}one of the following types:{{/translate}}
<ul>
{{#each allowedTypes}}
<li>
@ -169,13 +169,13 @@
{{/each}}
</ul>
</li>
<li><strong>GROUP</strong> If the type is 'option' then you also need to specify the parent element ID</li>
<li><strong>GROUP_TEMPLATE</strong> Template for the group element. If not set, then values of the elements are joined with commas</li>
<li><strong>VISIBLE</strong> yes/no, if not visible then the subscriber can not view or modify this value at the profile page</li>
<li><strong>GROUP</strong> {{#translate}}If the type is 'option' then you also need to specify the parent element ID{{/translate}}</li>
<li><strong>GROUP_TEMPLATE</strong> {{#translate}}Template for the group element. If not set, then values of the elements are joined with commas{{/translate}}</li>
<li><strong>VISIBLE</strong> yes/no, {{#translate}}if not visible then the subscriber can not view or modify this value at the profile page{{/translate}}</li>
</ul>
<p>
<strong>Example</strong>
<strong>{{#translate}}Example{{/translate}}</strong>
</p>
<pre>curl -XPOST {{serviceUrl}}api/field/B16uVTdW?access_token={{accessToken}} \

View file

@ -1,37 +1,37 @@
<ol class="breadcrumb">
<li><a href="/">Home</a></li>
<li><a href="/users/login">Sign in</a></li>
<li class="active">Password Reset</li>
<li><a href="/">{{#translate}}Home{{/translate}}</a></li>
<li><a href="/users/login">{{#translate}}Sign in{{/translate}}</a></li>
<li class="active">{{#translate}}Password Reset{{/translate}}</li>
</ol>
<h2>Reset your password?</h2>
<h2>{{#translate}}Reset your password?{{/translate}}</h2>
<hr>
{{#if ldap.enabled}}
<p>
Accounts are managed through LDAP.
{{#translate}}Accounts are managed through LDAP.{{/translate}}
<br/>
<br/>
<a href="{{ldap.passwordresetlink}}">Reset Password</a>
<a href="{{ldap.passwordresetlink}}">{{#translate}}Reset Password{{/translate}}</a>
</p>
{{else}}
<p>Please provide the username or email address that you used when you signed up for your Mailtrain account.</p>
<p>We will send you an email that will allow you to reset your password.</p>
<p>{{#translate}}Please provide the username or email address that you used when you signed up for your Mailtrain account.{{/translate}}</p>
<p>{{#translate}}We will send you an email that will allow you to reset your password.{{/translate}}</p>
<form class="form-horizontal" role="login" method="post" action="/users/forgot">
<input type="hidden" name="_csrf" value="{{csrfToken}}">
<div class="form-group">
<label for="usernameMain" class="col-sm-2 control-label">Username</label>
<label for="usernameMain" class="col-sm-2 control-label">{{#translate}}Username{{/translate}}</label>
<div class="col-xs-4">
<input type="text" class="form-control" name="username" id="usernameMain" placeholder="Username or email address" autofocus required>
<input type="text" class="form-control" name="username" id="usernameMain" placeholder="{{#translate}}Username or email address{{/translate}}" autofocus required>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-xs-4">
<button type="submit" class="btn btn-primary">Send verification email</button>
<button type="submit" class="btn btn-primary">{{#translate}}Send verification email{{/translate}}</button>
</div>
</div>
</form>

View file

@ -1,42 +1,42 @@
<ol class="breadcrumb">
<li><a href="/">Home</a></li>
<li class="active">Sign in</li>
<li><a href="/">{{#translate}}Home{{/translate}}</a></li>
<li class="active">{{#translate}}Sign in{{/translate}}</li>
</ol>
<h2>Sign in</h2>
<h2>{{#translate}}Sign in{{/translate}}</h2>
<hr>
<form class="form-horizontal" role="login" method="post" action="/users/login">
<input type="hidden" name="next" value="{{next}}" />
<div class="form-group">
<label for="usernameMain" class="col-sm-2 control-label">Username</label>
<label for="usernameMain" class="col-sm-2 control-label">{{#translate}}Username{{/translate}}</label>
<div class="col-xs-4">
<input type="text" class="form-control" name="username" id="usernameMain" placeholder="Username" autofocus required>
<input type="text" class="form-control" name="username" id="usernameMain" placeholder="{{#translate}}Username{{/translate}}" autofocus required>
</div>
</div>
<div class="form-group">
<label for="passwordMain" class="col-sm-2 control-label">Password</label>
<label for="passwordMain" class="col-sm-2 control-label">{{#translate}}Password{{/translate}}</label>
<div class="col-xs-4">
<input type="password" class="form-control" name="password" id="passwordMain" placeholder="Password" required>
<input type="password" class="form-control" name="password" id="passwordMain" placeholder="{{#translate}}Password{{/translate}}" required>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-xs-4">
<div class="checkbox">
<label>
<input type="checkbox" name="remember"> Remember me
<input type="checkbox" name="remember"> {{#translate}}Remember me{{/translate}}
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-xs-4">
<button type="submit" class="btn btn-primary">Sign in</button> or
<button type="submit" class="btn btn-primary">{{#translate}}Sign in{{/translate}}</button> {{#translate}}or{{/translate}}
{{#if ldap.enabled}}
<a href="{{ldap.passwordresetlink}}">Forgot password?</a>
<a href="{{ldap.passwordresetlink}}">{{#translate}}Forgot password?{{/translate}}</a>
{{else}}
<a href="/users/forgot">Forgot password?</a>
<a href="/users/forgot">{{#translate}}Forgot password?{{/translate}}</a>
{{/if}}
</div>
</div>

View file

@ -1,10 +1,10 @@
<ol class="breadcrumb">
<li><a href="/">Home</a></li>
<li><a href="/users/login">Sign in</a></li>
<li class="active">Password Reset</li>
<li><a href="/">{{#translate}}Home{{/translate}}</a></li>
<li><a href="/users/login">{{#translate}}Sign in{{/translate}}</a></li>
<li class="active">{{#translate}}Password Reset{{/translate}}</li>
</ol>
<h2>Choose your new password</h2>
<h2>{{#translate}}Choose your new password{{/translate}}</h2>
<hr>
@ -15,25 +15,25 @@
<input type="hidden" name="reset-token" value="{{resetToken}}">
<p>
Please enter a new password.
{{#translate}}Please enter a new password.{{/translate}}
</p>
<div class="form-group">
<label for="password" class="col-sm-2 control-label">New Password</label>
<label for="password" class="col-sm-2 control-label">{{#translate}}New Password{{/translate}}</label>
<div class="col-sm-10">
<input type="password" class="form-control" name="password" id="password" placeholder="New Password">
<input type="password" class="form-control" name="password" id="password" placeholder="{{#translate}}New Password{{/translate}}">
</div>
</div>
<div class="form-group">
<label for="password2" class="col-sm-2 control-label">Confirm Password</label>
<label for="password2" class="col-sm-2 control-label">{{#translate}}Confirm Password{{translate}}</label>
<div class="col-sm-10">
<input type="password" class="form-control" name="password2" id="password2" placeholder="Confirm New Password">
<input type="password" class="form-control" name="password2" id="password2" placeholder="{{#translate}}Confirm New Password{{/translate}}">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">Reset</button>
<button type="submit" class="btn btn-primary">{{#translate}}Reset Password{{/translate}}</button>
</div>
</div>