aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/components/auth/Pricing.js2
-rw-r--r--src/components/settings/account/AccountDashboard.js114
-rw-r--r--src/components/subscription/SubscriptionForm.js238
-rw-r--r--src/config.js24
-rw-r--r--src/containers/subscription/SubscriptionFormScreen.js18
-rw-r--r--src/helpers/plan-helpers.js43
-rw-r--r--src/i18n/locales/defaultMessages.json328
-rw-r--r--src/i18n/locales/en-US.json57
-rw-r--r--src/i18n/messages/src/components/settings/account/AccountDashboard.json116
-rw-r--r--src/i18n/messages/src/components/subscription/SubscriptionForm.json145
-rw-r--r--src/i18n/messages/src/helpers/plan-helpers.json80
-rw-r--r--src/i18n/messages/src/helpers/pricing-helpers.json80
-rw-r--r--src/stores/AppStore.js2
-rw-r--r--src/styles/settings.scss1
14 files changed, 780 insertions, 468 deletions
diff --git a/src/components/auth/Pricing.js b/src/components/auth/Pricing.js
index d20779025..cbeaaa5d9 100644
--- a/src/components/auth/Pricing.js
+++ b/src/components/auth/Pricing.js
@@ -8,7 +8,7 @@ import classnames from 'classnames';
8 8
9import { Button } from '@meetfranz/forms'; 9import { Button } from '@meetfranz/forms';
10import { FeatureItem } from '../ui/FeatureItem'; 10import { FeatureItem } from '../ui/FeatureItem';
11import FeatureList from '../ui/FeatureList'; 11import { FeatureList } from '../ui/FeatureList';
12 12
13 13
14const messages = defineMessages({ 14const messages = defineMessages({
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js
index 0366dc1ee..079d50380 100644
--- a/src/components/settings/account/AccountDashboard.js
+++ b/src/components/settings/account/AccountDashboard.js
@@ -1,14 +1,18 @@
1import React, { Component, Fragment } from 'react'; 1import React, { Component } from 'react';
2import PropTypes from 'prop-types'; 2import PropTypes from 'prop-types';
3import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; 3import { observer, PropTypes as MobxPropTypes } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl'; 4import { defineMessages, intlShape } from 'react-intl';
5import ReactTooltip from 'react-tooltip'; 5import ReactTooltip from 'react-tooltip';
6import { ProBadge } from '@meetfranz/ui'; 6import {
7 ProBadge, H2, H1, H3,
8} from '@meetfranz/ui';
9import moment from 'moment';
7 10
8import Loader from '../../ui/Loader'; 11import Loader from '../../ui/Loader';
9import Button from '../../ui/Button'; 12import Button from '../../ui/Button';
10import Infobox from '../../ui/Infobox'; 13import Infobox from '../../ui/Infobox';
11import SubscriptionForm from '../../../containers/subscription/SubscriptionFormScreen'; 14import SubscriptionForm from '../../../containers/subscription/SubscriptionFormScreen';
15import { i18nPlanName } from '../../../helpers/plan-helpers';
12 16
13const messages = defineMessages({ 17const messages = defineMessages({
14 headline: { 18 headline: {
@@ -20,8 +24,8 @@ const messages = defineMessages({
20 defaultMessage: '!!!Your Subscription', 24 defaultMessage: '!!!Your Subscription',
21 }, 25 },
22 headlineUpgrade: { 26 headlineUpgrade: {
23 id: 'settings.account.headlineUpgrade', 27 id: 'settings.account.headlineTrialUpgrade',
24 defaultMessage: '!!!Upgrade your Account', 28 defaultMessage: '!!!Get the free 14 day Franz Professional Trial',
25 }, 29 },
26 headlineDangerZone: { 30 headlineDangerZone: {
27 id: 'settings.account.headlineDangerZone', 31 id: 'settings.account.headlineDangerZone',
@@ -71,6 +75,22 @@ const messages = defineMessages({
71 id: 'settings.account.deleteEmailSent', 75 id: 'settings.account.deleteEmailSent',
72 defaultMessage: '!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!', 76 defaultMessage: '!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!',
73 }, 77 },
78 trial: {
79 id: 'settings.account.trial',
80 defaultMessage: '!!!Free Trial',
81 },
82 yourLicense: {
83 id: 'settings.account.yourLicense',
84 defaultMessage: '!!!Your license:',
85 },
86 trialEndsIn: {
87 id: 'settings.account.trialEndsIn',
88 defaultMessage: '!!!Your free trial ends in {duration}.',
89 },
90 trialUpdateBillingInformation: {
91 id: 'settings.account.trialUpdateBillingInfo',
92 defaultMessage: '!!!Please update your billing info to continue using {license} after your trial period.',
93 },
74}); 94});
75 95
76export default @observer class AccountDashboard extends Component { 96export default @observer class AccountDashboard extends Component {
@@ -110,6 +130,13 @@ export default @observer class AccountDashboard extends Component {
110 } = this.props; 130 } = this.props;
111 const { intl } = this.context; 131 const { intl } = this.context;
112 132
133 let planName = '';
134
135 if (user.team && user.team.plan) {
136 planName = i18nPlanName(user.team.plan, intl);
137 console.log(planName);
138 }
139
113 return ( 140 return (
114 <div className="settings__main"> 141 <div className="settings__main">
115 <div className="settings__header"> 142 <div className="settings__header">
@@ -147,7 +174,7 @@ export default @observer class AccountDashboard extends Component {
147 /> 174 />
148 </div> 175 </div>
149 <div className="account__info"> 176 <div className="account__info">
150 <h2> 177 <H1>
151 <span className="username">{`${user.firstname} ${user.lastname}`}</span> 178 <span className="username">{`${user.firstname} ${user.lastname}`}</span>
152 {user.isPremium && ( 179 {user.isPremium && (
153 <> 180 <>
@@ -156,7 +183,7 @@ export default @observer class AccountDashboard extends Component {
156 {/* <span className="badge badge--premium">{intl.formatMessage(messages.accountTypePremium)}</span> */} 183 {/* <span className="badge badge--premium">{intl.formatMessage(messages.accountTypePremium)}</span> */}
157 </> 184 </>
158 )} 185 )}
159 </h2> 186 </H1>
160 <p> 187 <p>
161 {user.organization && `${user.organization}, `} 188 {user.organization && `${user.organization}, `}
162 {user.email} 189 {user.email}
@@ -197,54 +224,61 @@ export default @observer class AccountDashboard extends Component {
197 {user.isSubscriptionOwner && ( 224 {user.isSubscriptionOwner && (
198 <div className="account"> 225 <div className="account">
199 <div className="account__box"> 226 <div className="account__box">
200 <h2> 227 <H2>
201 Your license: {user.team.plan} 228 {intl.formatMessage(messages.yourLicense)}
202 </h2> 229 </H2>
230 <H3>
231 {planName}
232 {user.team.isTrial && (
233 <>
234 {' – '}
235 {intl.formatMessage(messages.trial)}
236 </>
237 )}
238 </H3>
203 {user.team.isTrial && ( 239 {user.team.isTrial && (
204 <> 240 <>
205 <p> 241 <p>
206 Trial ends in 14 days 242 {intl.formatMessage(messages.trialEndsIn, {
243 duration: moment.duration(moment().diff(user.team.trialEnd)).humanize(),
244 })}
245 </p>
246 <p>
247 {intl.formatMessage(messages.trialUpdateBillingInformation, {
248 license: planName,
249 })}
207 </p> 250 </p>
208 </> 251 </>
209 )} 252 )}
210 {user.isPremium && ( 253 <div className="manage-user-links">
211 <div className="manage-user-links"> 254 <Button
212 <Button 255 label={intl.formatMessage(messages.manageSubscriptionButtonLabel)}
213 label={intl.formatMessage(messages.manageSubscriptionButtonLabel)} 256 className="franz-form__button--inverted"
214 className="franz-form__button--inverted" 257 onClick={openBilling}
215 onClick={openBilling} 258 />
216 /> 259 <Button
217 <Button 260 label={intl.formatMessage(messages.invoicesButton)}
218 label={intl.formatMessage(messages.invoicesButton)} 261 className="franz-form__button--inverted"
219 className="franz-form__button--inverted" 262 onClick={openInvoices}
220 onClick={openInvoices} 263 />
221 /> 264 </div>
222 </div>
223 )}
224 </div> 265 </div>
225 </div> 266 </div>
226 )} 267 )}
227 </> 268 {!user.isPremium && (
228 )} 269 <div className="account franz-form">
229 270 <div className="account__box">
230 {!user.isPremium && ( 271 <H2>{intl.formatMessage(messages.headlineUpgrade)}</H2>
231 isLoadingPlans ? ( 272 <SubscriptionForm />
232 <Loader /> 273 </div>
233 ) : (
234 <div className="account franz-form">
235 <div className="account__box">
236 <h2>{intl.formatMessage(messages.headlineUpgrade)}</h2>
237 <SubscriptionForm
238 onCloseWindow={onCloseSubscriptionWindow}
239 />
240 </div> 274 </div>
241 </div> 275 )}
242 ) 276 </>
243 )} 277 )}
244 278
245 <div className="account franz-form"> 279 <div className="account franz-form">
246 <div className="account__box"> 280 <div className="account__box">
247 <h2>{intl.formatMessage(messages.headlineDangerZone)}</h2> 281 <H2>{intl.formatMessage(messages.headlineDangerZone)}</H2>
248 {!isDeleteAccountSuccessful && ( 282 {!isDeleteAccountSuccessful && (
249 <div className="account__subscription"> 283 <div className="account__subscription">
250 <p>{intl.formatMessage(messages.deleteInfo)}</p> 284 <p>{intl.formatMessage(messages.deleteInfo)}</p>
diff --git a/src/components/subscription/SubscriptionForm.js b/src/components/subscription/SubscriptionForm.js
index 50f1e0522..0c630f047 100644
--- a/src/components/subscription/SubscriptionForm.js
+++ b/src/components/subscription/SubscriptionForm.js
@@ -1,214 +1,94 @@
1import React, { Component, Fragment } from 'react'; 1import React, { Component } from 'react';
2import PropTypes from 'prop-types'; 2import PropTypes from 'prop-types';
3import { observer, PropTypes as MobxPropTypes } from 'mobx-react'; 3import { observer } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl'; 4import { defineMessages, intlShape } from 'react-intl';
5import injectSheet from 'react-jss';
5 6
6import Form from '../../lib/Form'; 7import { H3 } from '@meetfranz/ui';
7import Radio from '../ui/Radio';
8import Button from '../ui/Button';
9import Loader from '../ui/Loader';
10 8
11import { required } from '../../helpers/validation-helpers'; 9import { Button } from '@meetfranz/forms';
10import { FeatureList } from '../ui/FeatureList';
11import { FeatureItem } from '../ui/FeatureItem';
12 12
13const messages = defineMessages({ 13const messages = defineMessages({
14 submitButtonLabel: { 14 submitButtonLabel: {
15 id: 'subscription.submit.label', 15 id: 'subscription.cta.activateTrial',
16 defaultMessage: '!!!Support the development of Franz', 16 defaultMessage: '!!!Yes, upgrade my account to Franz Professional',
17 },
18 paymentSessionError: {
19 id: 'subscription.paymentSessionError',
20 defaultMessage: '!!!Could not initialize payment form',
21 },
22 typeFree: {
23 id: 'subscription.type.free',
24 defaultMessage: '!!!free',
25 },
26 typeMonthly: {
27 id: 'subscription.type.month',
28 defaultMessage: '!!!month',
29 },
30 typeYearly: {
31 id: 'subscription.type.year',
32 defaultMessage: '!!!year',
33 }, 17 },
34 includedFeatures: { 18 includedFeatures: {
35 id: 'subscription.includedFeatures', 19 id: 'subscription.includedProFeatures',
36 defaultMessage: '!!!The Franz Premium Supporter Account includes', 20 defaultMessage: '!!!The Franz Professional Plan includes:',
37 },
38 onpremise: {
39 id: 'subscription.features.onpremise.mattermost',
40 defaultMessage: '!!!Add on-premise/hosted services like Mattermost',
41 },
42 noInterruptions: {
43 id: 'subscription.features.noInterruptions',
44 defaultMessage: '!!!No app delays & nagging to upgrade license',
45 }, 21 },
46 proxy: { 22 noStringsAttachedHeadline: {
47 id: 'subscription.features.proxy', 23 id: 'pricing.trial.terms.headline',
48 defaultMessage: '!!!Proxy support for services', 24 defaultMessage: '!!!No strings attached',
49 }, 25 },
50 spellchecker: { 26 noCreditCard: {
51 id: 'subscription.features.spellchecker', 27 id: 'pricing.trial.terms.noCreditCard',
52 defaultMessage: '!!!Support for Spellchecker', 28 defaultMessage: '!!!No credit card required',
53 }, 29 },
54 workspaces: { 30 automaticTrialEnd: {
55 id: 'subscription.features.workspaces', 31 id: 'pricing.trial.terms.automaticTrialEnd',
56 defaultMessage: '!!!Organize your services in workspaces', 32 defaultMessage: '!!!Your free trial ends automatically after 14 days',
57 }, 33 },
58 ads: { 34});
59 id: 'subscription.features.ads', 35
60 defaultMessage: '!!!No ads, ever!', 36const styles = () => ({
61 }, 37 activateTrialButton: {
62 comingSoon: { 38 margin: [40, 0, 50],
63 id: 'subscription.features.comingSoon',
64 defaultMessage: '!!!coming soon',
65 }, 39 },
66 euTaxInfo: { 40 keyTerms: {
67 id: 'subscription.euTaxInfo', 41 marginTop: 20,
68 defaultMessage: '!!!EU residents: local sales tax may apply',
69 }, 42 },
70}); 43});
71 44
72export default @observer class SubscriptionForm extends Component { 45export default @observer @injectSheet(styles) class SubscriptionForm extends Component {
73 static propTypes = { 46 static propTypes = {
74 plan: MobxPropTypes.objectOrObservableObject.isRequired, 47 activateTrial: PropTypes.func.isRequired,
75 isLoading: PropTypes.bool.isRequired, 48 isActivatingTrial: PropTypes.bool.isRequired,
76 handlePayment: PropTypes.func.isRequired, 49 classes: PropTypes.object.isRequired,
77 retryPlanRequest: PropTypes.func.isRequired,
78 isCreatingHostedPage: PropTypes.bool.isRequired,
79 error: PropTypes.bool.isRequired,
80 showSkipOption: PropTypes.bool,
81 skipAction: PropTypes.func,
82 skipButtonLabel: PropTypes.string,
83 hideInfo: PropTypes.bool.isRequired,
84 };
85
86 static defaultProps = {
87 showSkipOption: false,
88 skipAction: () => null,
89 skipButtonLabel: '',
90 }; 50 };
91 51
92 static contextTypes = { 52 static contextTypes = {
93 intl: intlShape, 53 intl: intlShape,
94 }; 54 };
95 55
96 componentWillMount() {
97 this.form = this.prepareForm();
98 }
99
100 prepareForm() {
101 const { intl } = this.context;
102
103 const form = {
104 fields: {
105 paymentTier: {
106 value: 'year',
107 validators: [required],
108 options: [{
109 value: 'month',
110 label: `€ ${Object.hasOwnProperty.call(this.props.plan, 'month')
111 ? `${this.props.plan.month.price} / ${intl.formatMessage(messages.typeMonthly)}`
112 : 'monthly'}`,
113 }, {
114 value: 'year',
115 label: `€ ${Object.hasOwnProperty.call(this.props.plan, 'year')
116 ? `${this.props.plan.year.price} / ${intl.formatMessage(messages.typeYearly)}`
117 : 'yearly'}`,
118 }],
119 },
120 },
121 };
122
123 if (this.props.showSkipOption) {
124 form.fields.paymentTier.options.unshift({
125 value: 'skip',
126 label: `€ 0 / ${intl.formatMessage(messages.typeFree)}`,
127 });
128 }
129
130 return new Form(form, this.context.intl);
131 }
132
133 render() { 56 render() {
134 const { 57 const {
135 isLoading, 58 isActivatingTrial,
136 isCreatingHostedPage, 59 activateTrial,
137 handlePayment, 60 classes,
138 retryPlanRequest,
139 error,
140 showSkipOption,
141 skipAction,
142 skipButtonLabel,
143 hideInfo,
144 } = this.props; 61 } = this.props;
145 const { intl } = this.context; 62 const { intl } = this.context;
146 63
147 if (error) { 64 console.log('isActivatingTrial', isActivatingTrial);
148 return (
149 <Button
150 label="Reload"
151 onClick={retryPlanRequest}
152 isLoaded={!isLoading}
153 />
154 );
155 }
156 65
157 return ( 66 return (
158 <Loader loaded={!isLoading}> 67 <>
159 <Radio field={this.form.$('paymentTier')} showLabel={false} className="paymentTiers" /> 68 <H3 className={classes.keyTerms}>
160 {!hideInfo && ( 69 {intl.formatMessage(messages.noStringsAttachedHeadline)}
161 <div className="subscription__premium-info"> 70 </H3>
162 <p> 71 <ul>
163 <strong>{intl.formatMessage(messages.includedFeatures)}</strong> 72 <FeatureItem icon="👉" name={intl.formatMessage(messages.noCreditCard)} />
164 </p> 73 <FeatureItem icon="👉" name={intl.formatMessage(messages.automaticTrialEnd)} />
165 <div className="subscription"> 74 </ul>
166 <ul className="subscription__premium-features"> 75
167 <li>{intl.formatMessage(messages.onpremise)}</li> 76 <Button
168 <li> 77 label={intl.formatMessage(messages.submitButtonLabel)}
169 {intl.formatMessage(messages.noInterruptions)} 78 className={classes.activateTrialButton}
170 </li> 79 busy={isActivatingTrial}
171 <li> 80 onClick={activateTrial}
172 {intl.formatMessage(messages.spellchecker)} 81 stretch
173 </li> 82 />
174 <li> 83 <div className="subscription__premium-info">
175 {intl.formatMessage(messages.proxy)} 84 <H3>
176 </li> 85 {intl.formatMessage(messages.includedFeatures)}
177 <li> 86 </H3>
178 {intl.formatMessage(messages.workspaces)} 87 <div className="subscription">
179 </li> 88 <FeatureList />
180 <li>
181 {intl.formatMessage(messages.ads)}
182 </li>
183 </ul>
184 </div>
185 </div> 89 </div>
186 )} 90 </div>
187 <Fragment> 91 </>
188 {error.code === 'no-payment-session' && (
189 <p className="error-message center">{intl.formatMessage(messages.paymentSessionError)}</p>
190 )}
191 </Fragment>
192 {showSkipOption && this.form.$('paymentTier').value === 'skip' ? (
193 <Button
194 label={skipButtonLabel}
195 className="auth__button"
196 onClick={skipAction}
197 />
198 ) : (
199 <Button
200 label={intl.formatMessage(messages.submitButtonLabel)}
201 className="auth__button"
202 loaded={!isCreatingHostedPage}
203 onClick={() => handlePayment(this.form.$('paymentTier').value)}
204 />
205 )}
206 {this.form.$('paymentTier').value !== 'skip' && (
207 <p className="legal">
208 {intl.formatMessage(messages.euTaxInfo)}
209 </p>
210 )}
211 </Loader>
212 ); 92 );
213 } 93 }
214} 94}
diff --git a/src/config.js b/src/config.js
index 3c8b0f0d0..edcae9df1 100644
--- a/src/config.js
+++ b/src/config.js
@@ -84,3 +84,27 @@ export const ALLOWED_PROTOCOLS = [
84 'http:', 84 'http:',
85 'ftp:', 85 'ftp:',
86]; 86];
87
88export const PLANS = {
89 PERSONAL_MONTHLY: 'PERSONAL_MONTHLY',
90 PERSONAL_YEARLY: 'PERSONAL_YEARLY',
91 PRO_MONTHLY: 'PRO_MONTHLY',
92 PRO_YEARLY: 'PRO_YEARLY',
93 LEGACY: 'LEGACY',
94 FREE: 'FREE',
95};
96
97export const PLANS_MAPPING = {
98 'franz-personal-monthly': PLANS.PERSONAL_MONTHLY,
99 'franz-personal-yearly': PLANS.PERSONAL_YEARLY,
100 'franz-pro-monthly': PLANS.PRO_MONTHLY,
101 'franz-pro-yearly': PLANS.PRO_YEARLY,
102 'franz-supporter-license': PLANS.LEGACY,
103 'franz-supporter-license-x1': PLANS.LEGACY,
104 'franz-supporter-license-x2': PLANS.LEGACY,
105 'franz-supporter-license-year': PLANS.LEGACY,
106 'franz-supporter-license-year-x1': PLANS.LEGACY,
107 'franz-supporter-license-year-x2': PLANS.LEGACY,
108 'franz-supporter-license-year-2019': PLANS.LEGACY,
109 free: PLANS.FREE,
110};
diff --git a/src/containers/subscription/SubscriptionFormScreen.js b/src/containers/subscription/SubscriptionFormScreen.js
index aa1166f5e..7486cc498 100644
--- a/src/containers/subscription/SubscriptionFormScreen.js
+++ b/src/containers/subscription/SubscriptionFormScreen.js
@@ -74,28 +74,14 @@ export default @inject('stores', 'actions') @observer class SubscriptionFormScre
74 74
75 render() { 75 render() {
76 const { 76 const {
77 content,
78 actions, 77 actions,
79 stores, 78 stores,
80 showSkipOption,
81 skipAction,
82 skipButtonLabel,
83 hideInfo,
84 } = this.props; 79 } = this.props;
85 return ( 80 return (
86 <SubscriptionForm 81 <SubscriptionForm
87 plan={stores.payment.plan} 82 plan={stores.payment.plan}
88 isLoading={stores.payment.plansRequest.isExecuting} 83 activateTrial={() => actions.user.activateTrial({ planId: stores.features.features.defaultTrialPlan })}
89 retryPlanRequest={() => stores.payment.plansRequest.reload()} 84 isActivatingTrial={stores.user.activateTrialRequest.isExecuting || stores.user.getUserInfoRequest.isExecuting}
90 isCreatingHostedPage={stores.payment.createHostedPageRequest.isExecuting}
91 handlePayment={price => this.handlePayment(price)}
92 content={content}
93 error={stores.payment.plansRequest.isError}
94 showSkipOption={showSkipOption}
95 skipAction={skipAction}
96 skipButtonLabel={skipButtonLabel}
97 hideInfo={hideInfo}
98 openExternalUrl={actions.app.openExternalUrl}
99 /> 85 />
100 ); 86 );
101 } 87 }
diff --git a/src/helpers/plan-helpers.js b/src/helpers/plan-helpers.js
new file mode 100644
index 000000000..37a4457af
--- /dev/null
+++ b/src/helpers/plan-helpers.js
@@ -0,0 +1,43 @@
1import { defineMessages } from 'react-intl';
2import { PLANS_MAPPING, PLANS } from '../config';
3
4const messages = defineMessages({
5 [PLANS.PRO_YEARLY]: {
6 id: 'pricing.plan.pro-yearly',
7 defaultMessage: '!!!Franz Professional Yearly',
8 },
9 [PLANS.PRO_MONTHLY]: {
10 id: 'pricing.plan.pro-monthly',
11 defaultMessage: '!!!Franz Professional Monthly',
12 },
13 [PLANS.PERSONAL_YEARLY]: {
14 id: 'pricing.plan.personal-yearly',
15 defaultMessage: '!!!Franz Personal Yearly',
16 },
17 [PLANS.PERSONAL_MONTHLY]: {
18 id: 'pricing.plan.personal-monthly',
19 defaultMessage: '!!!Franz Personal Monthly',
20 },
21 [PLANS.FREE]: {
22 id: 'pricing.plan.free',
23 defaultMessage: '!!!Franz Free',
24 },
25 [PLANS.LEGACY]: {
26 id: 'pricing.plan.legacy',
27 defaultMessage: '!!!Franz Premium',
28 },
29});
30
31export function i18nPlanName(planId, intl) {
32 if (!planId) {
33 throw new Error('planId is required');
34 }
35
36 if (!intl) {
37 throw new Error('intl context is required');
38 }
39
40 const plan = PLANS_MAPPING[planId];
41
42 return intl.formatMessage(messages[plan]);
43}
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json
index 930f6752e..836fe3b24 100644
--- a/src/i18n/locales/defaultMessages.json
+++ b/src/i18n/locales/defaultMessages.json
@@ -734,39 +734,39 @@
734 "defaultMessage": "!!!Your services have been updated.", 734 "defaultMessage": "!!!Your services have been updated.",
735 "end": { 735 "end": {
736 "column": 3, 736 "column": 3,
737 "line": 29 737 "line": 30
738 }, 738 },
739 "file": "src/components/layout/AppLayout.js", 739 "file": "src/components/layout/AppLayout.js",
740 "id": "infobar.servicesUpdated", 740 "id": "infobar.servicesUpdated",
741 "start": { 741 "start": {
742 "column": 19, 742 "column": 19,
743 "line": 26 743 "line": 27
744 } 744 }
745 }, 745 },
746 { 746 {
747 "defaultMessage": "!!!Reload services", 747 "defaultMessage": "!!!Reload services",
748 "end": { 748 "end": {
749 "column": 3, 749 "column": 3,
750 "line": 33 750 "line": 34
751 }, 751 },
752 "file": "src/components/layout/AppLayout.js", 752 "file": "src/components/layout/AppLayout.js",
753 "id": "infobar.buttonReloadServices", 753 "id": "infobar.buttonReloadServices",
754 "start": { 754 "start": {
755 "column": 24, 755 "column": 24,
756 "line": 30 756 "line": 31
757 } 757 }
758 }, 758 },
759 { 759 {
760 "defaultMessage": "!!!Could not load services and user information", 760 "defaultMessage": "!!!Could not load services and user information",
761 "end": { 761 "end": {
762 "column": 3, 762 "column": 3,
763 "line": 37 763 "line": 38
764 }, 764 },
765 "file": "src/components/layout/AppLayout.js", 765 "file": "src/components/layout/AppLayout.js",
766 "id": "infobar.requiredRequestsFailed", 766 "id": "infobar.requiredRequestsFailed",
767 "start": { 767 "start": {
768 "column": 26, 768 "column": 26,
769 "line": 34 769 "line": 35
770 } 770 }
771 } 771 }
772 ], 772 ],
@@ -1242,195 +1242,247 @@
1242 "defaultMessage": "!!!Account", 1242 "defaultMessage": "!!!Account",
1243 "end": { 1243 "end": {
1244 "column": 3, 1244 "column": 3,
1245 "line": 17 1245 "line": 19
1246 }, 1246 },
1247 "file": "src/components/settings/account/AccountDashboard.js", 1247 "file": "src/components/settings/account/AccountDashboard.js",
1248 "id": "settings.account.headline", 1248 "id": "settings.account.headline",
1249 "start": { 1249 "start": {
1250 "column": 12, 1250 "column": 12,
1251 "line": 14 1251 "line": 16
1252 } 1252 }
1253 }, 1253 },
1254 { 1254 {
1255 "defaultMessage": "!!!Your Subscription", 1255 "defaultMessage": "!!!Your Subscription",
1256 "end": { 1256 "end": {
1257 "column": 3, 1257 "column": 3,
1258 "line": 21 1258 "line": 23
1259 }, 1259 },
1260 "file": "src/components/settings/account/AccountDashboard.js", 1260 "file": "src/components/settings/account/AccountDashboard.js",
1261 "id": "settings.account.headlineSubscription", 1261 "id": "settings.account.headlineSubscription",
1262 "start": { 1262 "start": {
1263 "column": 24, 1263 "column": 24,
1264 "line": 18 1264 "line": 20
1265 } 1265 }
1266 }, 1266 },
1267 { 1267 {
1268 "defaultMessage": "!!!Upgrade your Account", 1268 "defaultMessage": "!!!Upgrade your Account",
1269 "end": { 1269 "end": {
1270 "column": 3, 1270 "column": 3,
1271 "line": 25 1271 "line": 27
1272 }, 1272 },
1273 "file": "src/components/settings/account/AccountDashboard.js", 1273 "file": "src/components/settings/account/AccountDashboard.js",
1274 "id": "settings.account.headlineUpgrade", 1274 "id": "settings.account.headlineUpgrade",
1275 "start": { 1275 "start": {
1276 "column": 19, 1276 "column": 19,
1277 "line": 22 1277 "line": 24
1278 } 1278 }
1279 }, 1279 },
1280 { 1280 {
1281 "defaultMessage": "!!Danger Zone", 1281 "defaultMessage": "!!Danger Zone",
1282 "end": { 1282 "end": {
1283 "column": 3, 1283 "column": 3,
1284 "line": 29 1284 "line": 31
1285 }, 1285 },
1286 "file": "src/components/settings/account/AccountDashboard.js", 1286 "file": "src/components/settings/account/AccountDashboard.js",
1287 "id": "settings.account.headlineDangerZone", 1287 "id": "settings.account.headlineDangerZone",
1288 "start": { 1288 "start": {
1289 "column": 22, 1289 "column": 22,
1290 "line": 26 1290 "line": 28
1291 } 1291 }
1292 }, 1292 },
1293 { 1293 {
1294 "defaultMessage": "!!!Manage your subscription", 1294 "defaultMessage": "!!!Manage your subscription",
1295 "end": { 1295 "end": {
1296 "column": 3, 1296 "column": 3,
1297 "line": 33 1297 "line": 35
1298 }, 1298 },
1299 "file": "src/components/settings/account/AccountDashboard.js", 1299 "file": "src/components/settings/account/AccountDashboard.js",
1300 "id": "settings.account.manageSubscription.label", 1300 "id": "settings.account.manageSubscription.label",
1301 "start": { 1301 "start": {
1302 "column": 33, 1302 "column": 33,
1303 "line": 30 1303 "line": 32
1304 } 1304 }
1305 }, 1305 },
1306 { 1306 {
1307 "defaultMessage": "!!!Basic Account", 1307 "defaultMessage": "!!!Basic Account",
1308 "end": { 1308 "end": {
1309 "column": 3, 1309 "column": 3,
1310 "line": 37 1310 "line": 39
1311 }, 1311 },
1312 "file": "src/components/settings/account/AccountDashboard.js", 1312 "file": "src/components/settings/account/AccountDashboard.js",
1313 "id": "settings.account.accountType.basic", 1313 "id": "settings.account.accountType.basic",
1314 "start": { 1314 "start": {
1315 "column": 20, 1315 "column": 20,
1316 "line": 34 1316 "line": 36
1317 } 1317 }
1318 }, 1318 },
1319 { 1319 {
1320 "defaultMessage": "!!!Premium Supporter Account", 1320 "defaultMessage": "!!!Premium Supporter Account",
1321 "end": { 1321 "end": {
1322 "column": 3, 1322 "column": 3,
1323 "line": 41 1323 "line": 43
1324 }, 1324 },
1325 "file": "src/components/settings/account/AccountDashboard.js", 1325 "file": "src/components/settings/account/AccountDashboard.js",
1326 "id": "settings.account.accountType.premium", 1326 "id": "settings.account.accountType.premium",
1327 "start": { 1327 "start": {
1328 "column": 22, 1328 "column": 22,
1329 "line": 38 1329 "line": 40
1330 } 1330 }
1331 }, 1331 },
1332 { 1332 {
1333 "defaultMessage": "!!!Edit Account", 1333 "defaultMessage": "!!!Edit Account",
1334 "end": { 1334 "end": {
1335 "column": 3, 1335 "column": 3,
1336 "line": 45 1336 "line": 47
1337 }, 1337 },
1338 "file": "src/components/settings/account/AccountDashboard.js", 1338 "file": "src/components/settings/account/AccountDashboard.js",
1339 "id": "settings.account.account.editButton", 1339 "id": "settings.account.account.editButton",
1340 "start": { 1340 "start": {
1341 "column": 21, 1341 "column": 21,
1342 "line": 42 1342 "line": 44
1343 } 1343 }
1344 }, 1344 },
1345 { 1345 {
1346 "defaultMessage": "!!Invoices", 1346 "defaultMessage": "!!Invoices",
1347 "end": { 1347 "end": {
1348 "column": 3, 1348 "column": 3,
1349 "line": 49 1349 "line": 51
1350 }, 1350 },
1351 "file": "src/components/settings/account/AccountDashboard.js", 1351 "file": "src/components/settings/account/AccountDashboard.js",
1352 "id": "settings.account.headlineInvoices", 1352 "id": "settings.account.headlineInvoices",
1353 "start": { 1353 "start": {
1354 "column": 18, 1354 "column": 18,
1355 "line": 46 1355 "line": 48
1356 } 1356 }
1357 }, 1357 },
1358 { 1358 {
1359 "defaultMessage": "!!!Download", 1359 "defaultMessage": "!!!Download",
1360 "end": { 1360 "end": {
1361 "column": 3, 1361 "column": 3,
1362 "line": 53 1362 "line": 55
1363 }, 1363 },
1364 "file": "src/components/settings/account/AccountDashboard.js", 1364 "file": "src/components/settings/account/AccountDashboard.js",
1365 "id": "settings.account.invoiceDownload", 1365 "id": "settings.account.invoiceDownload",
1366 "start": { 1366 "start": {
1367 "column": 19, 1367 "column": 19,
1368 "line": 50 1368 "line": 52
1369 } 1369 }
1370 }, 1370 },
1371 { 1371 {
1372 "defaultMessage": "!!!Could not load user information", 1372 "defaultMessage": "!!!Could not load user information",
1373 "end": { 1373 "end": {
1374 "column": 3, 1374 "column": 3,
1375 "line": 57 1375 "line": 59
1376 }, 1376 },
1377 "file": "src/components/settings/account/AccountDashboard.js", 1377 "file": "src/components/settings/account/AccountDashboard.js",
1378 "id": "settings.account.userInfoRequestFailed", 1378 "id": "settings.account.userInfoRequestFailed",
1379 "start": { 1379 "start": {
1380 "column": 25, 1380 "column": 25,
1381 "line": 54 1381 "line": 56
1382 } 1382 }
1383 }, 1383 },
1384 { 1384 {
1385 "defaultMessage": "!!!Try again", 1385 "defaultMessage": "!!!Try again",
1386 "end": { 1386 "end": {
1387 "column": 3, 1387 "column": 3,
1388 "line": 61 1388 "line": 63
1389 }, 1389 },
1390 "file": "src/components/settings/account/AccountDashboard.js", 1390 "file": "src/components/settings/account/AccountDashboard.js",
1391 "id": "settings.account.tryReloadUserInfoRequest", 1391 "id": "settings.account.tryReloadUserInfoRequest",
1392 "start": { 1392 "start": {
1393 "column": 28, 1393 "column": 28,
1394 "line": 58 1394 "line": 60
1395 } 1395 }
1396 }, 1396 },
1397 { 1397 {
1398 "defaultMessage": "!!!Delete account", 1398 "defaultMessage": "!!!Delete account",
1399 "end": { 1399 "end": {
1400 "column": 3, 1400 "column": 3,
1401 "line": 65 1401 "line": 67
1402 }, 1402 },
1403 "file": "src/components/settings/account/AccountDashboard.js", 1403 "file": "src/components/settings/account/AccountDashboard.js",
1404 "id": "settings.account.deleteAccount", 1404 "id": "settings.account.deleteAccount",
1405 "start": { 1405 "start": {
1406 "column": 17, 1406 "column": 17,
1407 "line": 62 1407 "line": 64
1408 } 1408 }
1409 }, 1409 },
1410 { 1410 {
1411 "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.", 1411 "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.",
1412 "end": { 1412 "end": {
1413 "column": 3, 1413 "column": 3,
1414 "line": 69 1414 "line": 71
1415 }, 1415 },
1416 "file": "src/components/settings/account/AccountDashboard.js", 1416 "file": "src/components/settings/account/AccountDashboard.js",
1417 "id": "settings.account.deleteInfo", 1417 "id": "settings.account.deleteInfo",
1418 "start": { 1418 "start": {
1419 "column": 14, 1419 "column": 14,
1420 "line": 66 1420 "line": 68
1421 } 1421 }
1422 }, 1422 },
1423 { 1423 {
1424 "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", 1424 "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!",
1425 "end": { 1425 "end": {
1426 "column": 3, 1426 "column": 3,
1427 "line": 73 1427 "line": 75
1428 }, 1428 },
1429 "file": "src/components/settings/account/AccountDashboard.js", 1429 "file": "src/components/settings/account/AccountDashboard.js",
1430 "id": "settings.account.deleteEmailSent", 1430 "id": "settings.account.deleteEmailSent",
1431 "start": { 1431 "start": {
1432 "column": 19, 1432 "column": 19,
1433 "line": 70 1433 "line": 72
1434 }
1435 },
1436 {
1437 "defaultMessage": "!!!Free Trial",
1438 "end": {
1439 "column": 3,
1440 "line": 79
1441 },
1442 "file": "src/components/settings/account/AccountDashboard.js",
1443 "id": "settings.account.trial",
1444 "start": {
1445 "column": 9,
1446 "line": 76
1447 }
1448 },
1449 {
1450 "defaultMessage": "!!!Your license:",
1451 "end": {
1452 "column": 3,
1453 "line": 83
1454 },
1455 "file": "src/components/settings/account/AccountDashboard.js",
1456 "id": "settings.account.yourLicense",
1457 "start": {
1458 "column": 15,
1459 "line": 80
1460 }
1461 },
1462 {
1463 "defaultMessage": "!!!Your free trial ends in {duration}.",
1464 "end": {
1465 "column": 3,
1466 "line": 87
1467 },
1468 "file": "src/components/settings/account/AccountDashboard.js",
1469 "id": "settings.account.trialEndsIn",
1470 "start": {
1471 "column": 15,
1472 "line": 84
1473 }
1474 },
1475 {
1476 "defaultMessage": "!!!Please update your billing info to continue using {license} after your trial period.",
1477 "end": {
1478 "column": 3,
1479 "line": 91
1480 },
1481 "file": "src/components/settings/account/AccountDashboard.js",
1482 "id": "settings.account.trialUpdateBillingInfo",
1483 "start": {
1484 "column": 33,
1485 "line": 88
1434 } 1486 }
1435 } 1487 }
1436 ], 1488 ],
@@ -2872,6 +2924,24 @@
2872 { 2924 {
2873 "descriptors": [ 2925 "descriptors": [
2874 { 2926 {
2927 "defaultMessage": "!!!Your trial was successfully activated. Happy messaging!",
2928 "end": {
2929 "column": 3,
2930 "line": 14
2931 },
2932 "file": "src/components/TrialActivationInfoBar.js",
2933 "id": "infobar.trialActivated",
2934 "start": {
2935 "column": 11,
2936 "line": 11
2937 }
2938 }
2939 ],
2940 "path": "src/components/TrialActivationInfoBar.json"
2941 },
2942 {
2943 "descriptors": [
2944 {
2875 "defaultMessage": "!!!Add unlimited services", 2945 "defaultMessage": "!!!Add unlimited services",
2876 "end": { 2946 "end": {
2877 "column": 3, 2947 "column": 3,
@@ -3578,65 +3648,65 @@
3578 "defaultMessage": "!!!Please purchase license to skip waiting", 3648 "defaultMessage": "!!!Please purchase license to skip waiting",
3579 "end": { 3649 "end": {
3580 "column": 3, 3650 "column": 3,
3581 "line": 19 3651 "line": 20
3582 }, 3652 },
3583 "file": "src/features/delayApp/Component.js", 3653 "file": "src/features/delayApp/Component.js",
3584 "id": "feature.delayApp.headline", 3654 "id": "feature.delayApp.headline",
3585 "start": { 3655 "start": {
3586 "column": 12, 3656 "column": 12,
3587 "line": 16 3657 "line": 17
3588 } 3658 }
3589 }, 3659 },
3590 { 3660 {
3591 "defaultMessage": "!!!Get the free Franz Professional 14 day trial and skip the line", 3661 "defaultMessage": "!!!Get the free Franz Professional 14 day trial and skip the line",
3592 "end": { 3662 "end": {
3593 "column": 3, 3663 "column": 3,
3594 "line": 23 3664 "line": 24
3595 }, 3665 },
3596 "file": "src/features/delayApp/Component.js", 3666 "file": "src/features/delayApp/Component.js",
3597 "id": "feature.delayApp.trial.headline", 3667 "id": "feature.delayApp.trial.headline",
3598 "start": { 3668 "start": {
3599 "column": 17, 3669 "column": 17,
3600 "line": 20 3670 "line": 21
3601 } 3671 }
3602 }, 3672 },
3603 { 3673 {
3604 "defaultMessage": "!!!Get a Franz Supporter License", 3674 "defaultMessage": "!!!Get a Franz Supporter License",
3605 "end": { 3675 "end": {
3606 "column": 3, 3676 "column": 3,
3607 "line": 27 3677 "line": 28
3608 }, 3678 },
3609 "file": "src/features/delayApp/Component.js", 3679 "file": "src/features/delayApp/Component.js",
3610 "id": "feature.delayApp.upgrade.action", 3680 "id": "feature.delayApp.upgrade.action",
3611 "start": { 3681 "start": {
3612 "column": 10, 3682 "column": 10,
3613 "line": 24 3683 "line": 25
3614 } 3684 }
3615 }, 3685 },
3616 { 3686 {
3617 "defaultMessage": "!!!Yes, I want the free 14 day trial of Franz Professional", 3687 "defaultMessage": "!!!Yes, I want the free 14 day trial of Franz Professional",
3618 "end": { 3688 "end": {
3619 "column": 3, 3689 "column": 3,
3620 "line": 31 3690 "line": 32
3621 }, 3691 },
3622 "file": "src/features/delayApp/Component.js", 3692 "file": "src/features/delayApp/Component.js",
3623 "id": "feature.delayApp.trial.action", 3693 "id": "feature.delayApp.trial.action",
3624 "start": { 3694 "start": {
3625 "column": 15, 3695 "column": 15,
3626 "line": 28 3696 "line": 29
3627 } 3697 }
3628 }, 3698 },
3629 { 3699 {
3630 "defaultMessage": "!!!Franz will continue in {seconds} seconds.", 3700 "defaultMessage": "!!!Franz will continue in {seconds} seconds.",
3631 "end": { 3701 "end": {
3632 "column": 3, 3702 "column": 3,
3633 "line": 35 3703 "line": 36
3634 }, 3704 },
3635 "file": "src/features/delayApp/Component.js", 3705 "file": "src/features/delayApp/Component.js",
3636 "id": "feature.delayApp.text", 3706 "id": "feature.delayApp.text",
3637 "start": { 3707 "start": {
3638 "column": 8, 3708 "column": 8,
3639 "line": 32 3709 "line": 33
3640 } 3710 }
3641 } 3711 }
3642 ], 3712 ],
@@ -4184,6 +4254,172 @@
4184 { 4254 {
4185 "descriptors": [ 4255 "descriptors": [
4186 { 4256 {
4257 "defaultMessage": "!!!Franz Professional Yearly",
4258 "end": {
4259 "column": 3,
4260 "line": 8
4261 },
4262 "file": "src/helpers/plan-helpers.js",
4263 "id": "pricing.plan.pro-yearly",
4264 "start": {
4265 "column": 22,
4266 "line": 5
4267 }
4268 },
4269 {
4270 "defaultMessage": "!!!Franz Professional Monthly",
4271 "end": {
4272 "column": 3,
4273 "line": 12
4274 },
4275 "file": "src/helpers/plan-helpers.js",
4276 "id": "pricing.plan.pro-monthly",
4277 "start": {
4278 "column": 23,
4279 "line": 9
4280 }
4281 },
4282 {
4283 "defaultMessage": "!!!Franz Personal Yearly",
4284 "end": {
4285 "column": 3,
4286 "line": 16
4287 },
4288 "file": "src/helpers/plan-helpers.js",
4289 "id": "pricing.plan.personal-yearly",
4290 "start": {
4291 "column": 27,
4292 "line": 13
4293 }
4294 },
4295 {
4296 "defaultMessage": "!!!Franz Personal Monthly",
4297 "end": {
4298 "column": 3,
4299 "line": 20
4300 },
4301 "file": "src/helpers/plan-helpers.js",
4302 "id": "pricing.plan.personal-monthly",
4303 "start": {
4304 "column": 28,
4305 "line": 17
4306 }
4307 },
4308 {
4309 "defaultMessage": "!!!Franz Free",
4310 "end": {
4311 "column": 3,
4312 "line": 24
4313 },
4314 "file": "src/helpers/plan-helpers.js",
4315 "id": "pricing.plan.free",
4316 "start": {
4317 "column": 16,
4318 "line": 21
4319 }
4320 },
4321 {
4322 "defaultMessage": "!!!Franz Premium",
4323 "end": {
4324 "column": 3,
4325 "line": 28
4326 },
4327 "file": "src/helpers/plan-helpers.js",
4328 "id": "pricing.plan.legacy",
4329 "start": {
4330 "column": 18,
4331 "line": 25
4332 }
4333 }
4334 ],
4335 "path": "src/helpers/plan-helpers.json"
4336 },
4337 {
4338 "descriptors": [
4339 {
4340 "defaultMessage": "!!!Franz Professional Yearly",
4341 "end": {
4342 "column": 3,
4343 "line": 8
4344 },
4345 "file": "src/helpers/pricing-helpers.js",
4346 "id": "pricing.plan.pro-yearly",
4347 "start": {
4348 "column": 22,
4349 "line": 5
4350 }
4351 },
4352 {
4353 "defaultMessage": "!!!Franz Professional Monthly",
4354 "end": {
4355 "column": 3,
4356 "line": 12
4357 },
4358 "file": "src/helpers/pricing-helpers.js",
4359 "id": "pricing.plan.pro-monthly",
4360 "start": {
4361 "column": 23,
4362 "line": 9
4363 }
4364 },
4365 {
4366 "defaultMessage": "!!!Franz Personal Yearly",
4367 "end": {
4368 "column": 3,
4369 "line": 16
4370 },
4371 "file": "src/helpers/pricing-helpers.js",
4372 "id": "pricing.plan.personal-yearly",
4373 "start": {
4374 "column": 27,
4375 "line": 13
4376 }
4377 },
4378 {
4379 "defaultMessage": "!!!Franz Personal Monthly",
4380 "end": {
4381 "column": 3,
4382 "line": 20
4383 },
4384 "file": "src/helpers/pricing-helpers.js",
4385 "id": "pricing.plan.personal-monthly",
4386 "start": {
4387 "column": 28,
4388 "line": 17
4389 }
4390 },
4391 {
4392 "defaultMessage": "!!!Franz Free",
4393 "end": {
4394 "column": 3,
4395 "line": 24
4396 },
4397 "file": "src/helpers/pricing-helpers.js",
4398 "id": "pricing.plan.free",
4399 "start": {
4400 "column": 16,
4401 "line": 21
4402 }
4403 },
4404 {
4405 "defaultMessage": "!!!Franz Premium",
4406 "end": {
4407 "column": 3,
4408 "line": 28
4409 },
4410 "file": "src/helpers/pricing-helpers.js",
4411 "id": "pricing.plan.legacy",
4412 "start": {
4413 "column": 18,
4414 "line": 25
4415 }
4416 }
4417 ],
4418 "path": "src/helpers/pricing-helpers.json"
4419 },
4420 {
4421 "descriptors": [
4422 {
4187 "defaultMessage": "!!!Field is required", 4423 "defaultMessage": "!!!Field is required",
4188 "end": { 4424 "end": {
4189 "column": 3, 4425 "column": 3,
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 4049e9400..eb0027424 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -4,9 +4,9 @@
4 "feature.announcements.changelog.headline": "Changes in Franz {version}", 4 "feature.announcements.changelog.headline": "Changes in Franz {version}",
5 "feature.delayApp.headline": "Please purchase a Franz Supporter License to skip waiting", 5 "feature.delayApp.headline": "Please purchase a Franz Supporter License to skip waiting",
6 "feature.delayApp.text": "Franz will continue in {seconds} seconds.", 6 "feature.delayApp.text": "Franz will continue in {seconds} seconds.",
7 "feature.delayApp.trial.action": "!!!Yes, I want the free 14 day trial of Franz Professional", 7 "feature.delayApp.trial.action": "Yes, I want the free 14 day trial of Franz Professional",
8 "feature.delayApp.trial.headline": "!!!Get the free Franz Professional 14 day trial and skip the line", 8 "feature.delayApp.trial.headline": "Get the free Franz Professional 14 day trial and skip the line",
9 "feature.delayApp.upgrade.action": "!!!Get a Franz Supporter License", 9 "feature.delayApp.upgrade.action": "Get a Franz Supporter License",
10 "feature.serviceLimit.limitReached": "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.", 10 "feature.serviceLimit.limitReached": "You have added {amount} out of {limit} services that are included in your plan. Please upgrade your account to add more services.",
11 "feature.shareFranz.action.email": "Send as email", 11 "feature.shareFranz.action.email": "Send as email",
12 "feature.shareFranz.action.facebook": "Share on Facebook", 12 "feature.shareFranz.action.facebook": "Share on Facebook",
@@ -30,6 +30,7 @@
30 "infobar.buttonReloadServices": "Reload services", 30 "infobar.buttonReloadServices": "Reload services",
31 "infobar.requiredRequestsFailed": "Could not load services and user information", 31 "infobar.requiredRequestsFailed": "Could not load services and user information",
32 "infobar.servicesUpdated": "Your services have been updated.", 32 "infobar.servicesUpdated": "Your services have been updated.",
33 "infobar.trialActivated": "Your trial was successfully activated. Happy messaging!",
33 "infobar.updateAvailable": "A new update for Franz is available.", 34 "infobar.updateAvailable": "A new update for Franz is available.",
34 "invite.email.label": "Email address", 35 "invite.email.label": "Email address",
35 "invite.headline.friends": "Invite 3 of your friends or colleagues", 36 "invite.headline.friends": "Invite 3 of your friends or colleagues",
@@ -106,25 +107,31 @@
106 "password.submit.label": "Submit", 107 "password.submit.label": "Submit",
107 "password.successInfo": "Please check your email", 108 "password.successInfo": "Please check your email",
108 "premiumFeature.button.upgradeAccount": "Upgrade account", 109 "premiumFeature.button.upgradeAccount": "Upgrade account",
109 "pricing.features.adFree": "!!!Forever ad-free", 110 "pricing.features.adFree": "Forever ad-free",
110 "pricing.features.appDelays": "!!!No Waiting Screens", 111 "pricing.features.appDelays": "No Waiting Screens",
111 "pricing.features.customWebsites": "!!!Add Custom Websites", 112 "pricing.features.customWebsites": "Add Custom Websites",
112 "pricing.features.onPremise": "!!!On-premise & other Hosted Services", 113 "pricing.features.onPremise": "On-premise & other Hosted Services",
113 "pricing.features.serviceProxies": "!!!Service Proxies", 114 "pricing.features.serviceProxies": "Service Proxies",
114 "pricing.features.spellchecker": "!!!Spellchecker support", 115 "pricing.features.spellchecker": "Spellchecker support",
115 "pricing.features.teamManagement": "!!!Team Management", 116 "pricing.features.teamManagement": "Team Management",
116 "pricing.features.thirdPartyServices": "!!!Install 3rd party services", 117 "pricing.features.thirdPartyServices": "Install 3rd party services",
117 "pricing.features.unlimitedServices": "!!!Add unlimited services", 118 "pricing.features.unlimitedServices": "Add unlimited services",
118 "pricing.features.workspaces": "!!!Workspaces", 119 "pricing.features.workspaces": "Workspaces",
119 "pricing.trial.cta.accept": "!!!Yes, upgrade my account to Franz Professional", 120 "pricing.plan.free": "Franz Free",
120 "pricing.trial.cta.skip": "!!!Continue to Franz", 121 "pricing.plan.legacy": "Franz Premium",
121 "pricing.trial.error": "!!!Sorry, we could not activate your trial!", 122 "pricing.plan.personal-monthly": "Franz Personal Monthly",
122 "pricing.trial.features.headline": "!!!Franz Professional includes:", 123 "pricing.plan.personal-yearly": "Franz Personal Yearly",
123 "pricing.trial.headline": "!!!Franz Professional", 124 "pricing.plan.pro-monthly": "Franz Professional Monthly",
124 "pricing.trial.subheadline": "!!!Your personal welcome offer:", 125 "pricing.plan.pro-yearly": "Franz Professional Yearly",
125 "pricing.trial.terms.automaticTrialEnd": "!!!Your free trial ends automatically after 14 days", 126 "pricing.trial.cta.accept": "Yes, upgrade my account to Franz Professional",
126 "pricing.trial.terms.headline": "!!!No strings attached", 127 "pricing.trial.cta.skip": "Continue to Franz",
127 "pricing.trial.terms.noCreditCard": "!!!No credit card required", 128 "pricing.trial.error": "Sorry, we could not activate your trial!",
129 "pricing.trial.features.headline": "Franz Professional includes:",
130 "pricing.trial.headline": "Franz Professional",
131 "pricing.trial.subheadline": "Your personal welcome offer:",
132 "pricing.trial.terms.automaticTrialEnd": "Your free trial ends automatically after 14 days",
133 "pricing.trial.terms.headline": "No strings attached",
134 "pricing.trial.terms.noCreditCard": "No credit card required",
128 "service.crashHandler.action": "Reload {name}", 135 "service.crashHandler.action": "Reload {name}",
129 "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds", 136 "service.crashHandler.autoReload": "Trying to automatically restore {name} in {seconds} seconds",
130 "service.crashHandler.headline": "Oh no!", 137 "service.crashHandler.headline": "Oh no!",
@@ -162,9 +169,13 @@
162 "settings.account.invoiceDownload": "Download", 169 "settings.account.invoiceDownload": "Download",
163 "settings.account.manageSubscription.label": "Manage your subscription", 170 "settings.account.manageSubscription.label": "Manage your subscription",
164 "settings.account.successInfo": "Your changes have been saved", 171 "settings.account.successInfo": "Your changes have been saved",
172 "settings.account.trial": "Free Trial",
173 "settings.account.trialEndsIn": "Your free trial ends in {duration}.",
174 "settings.account.trialUpdateBillingInfo": "Please update your billing info to continue using {license} after your trial period.",
165 "settings.account.tryReloadServices": "Try again", 175 "settings.account.tryReloadServices": "Try again",
166 "settings.account.tryReloadUserInfoRequest": "Try again", 176 "settings.account.tryReloadUserInfoRequest": "Try again",
167 "settings.account.userInfoRequestFailed": "Could not load user information", 177 "settings.account.userInfoRequestFailed": "Could not load user information",
178 "settings.account.yourLicense": "Your license:",
168 "settings.app.buttonClearAllCache": "Clear cache", 179 "settings.app.buttonClearAllCache": "Clear cache",
169 "settings.app.buttonInstallUpdate": "Restart & install update", 180 "settings.app.buttonInstallUpdate": "Restart & install update",
170 "settings.app.buttonSearchForUpdate": "Check for updates", 181 "settings.app.buttonSearchForUpdate": "Check for updates",
@@ -358,4 +369,4 @@
358 "workspaceDrawer.workspaceFeatureInfo": "<p>Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.</p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.</p>", 369 "workspaceDrawer.workspaceFeatureInfo": "<p>Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.</p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.</p>",
359 "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", 370 "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings",
360 "workspaces.switchingIndicator.switchingTo": "Switching to" 371 "workspaces.switchingIndicator.switchingTo": "Switching to"
361} \ No newline at end of file 372}
diff --git a/src/i18n/messages/src/components/settings/account/AccountDashboard.json b/src/i18n/messages/src/components/settings/account/AccountDashboard.json
index 4969db910..1e21bad69 100644
--- a/src/i18n/messages/src/components/settings/account/AccountDashboard.json
+++ b/src/i18n/messages/src/components/settings/account/AccountDashboard.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Account", 4 "defaultMessage": "!!!Account",
5 "file": "src/components/settings/account/AccountDashboard.js", 5 "file": "src/components/settings/account/AccountDashboard.js",
6 "start": { 6 "start": {
7 "line": 14, 7 "line": 18,
8 "column": 12 8 "column": 12
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 17, 11 "line": 21,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,24 +17,24 @@
17 "defaultMessage": "!!!Your Subscription", 17 "defaultMessage": "!!!Your Subscription",
18 "file": "src/components/settings/account/AccountDashboard.js", 18 "file": "src/components/settings/account/AccountDashboard.js",
19 "start": { 19 "start": {
20 "line": 18, 20 "line": 22,
21 "column": 24 21 "column": 24
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 21, 24 "line": 25,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
28 { 28 {
29 "id": "settings.account.headlineUpgrade", 29 "id": "settings.account.headlineTrialUpgrade",
30 "defaultMessage": "!!!Upgrade your Account", 30 "defaultMessage": "!!!Get the free 14 day Franz Professional Trial",
31 "file": "src/components/settings/account/AccountDashboard.js", 31 "file": "src/components/settings/account/AccountDashboard.js",
32 "start": { 32 "start": {
33 "line": 22, 33 "line": 26,
34 "column": 19 34 "column": 19
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 25, 37 "line": 29,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!Danger Zone", 43 "defaultMessage": "!!Danger Zone",
44 "file": "src/components/settings/account/AccountDashboard.js", 44 "file": "src/components/settings/account/AccountDashboard.js",
45 "start": { 45 "start": {
46 "line": 26, 46 "line": 30,
47 "column": 22 47 "column": 22
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 29, 50 "line": 33,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Manage your subscription", 56 "defaultMessage": "!!!Manage your subscription",
57 "file": "src/components/settings/account/AccountDashboard.js", 57 "file": "src/components/settings/account/AccountDashboard.js",
58 "start": { 58 "start": {
59 "line": 30, 59 "line": 34,
60 "column": 33 60 "column": 33
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 33, 63 "line": 37,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!Basic Account", 69 "defaultMessage": "!!!Basic Account",
70 "file": "src/components/settings/account/AccountDashboard.js", 70 "file": "src/components/settings/account/AccountDashboard.js",
71 "start": { 71 "start": {
72 "line": 34, 72 "line": 38,
73 "column": 20 73 "column": 20
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 37, 76 "line": 41,
77 "column": 3 77 "column": 3
78 } 78 }
79 }, 79 },
@@ -82,11 +82,11 @@
82 "defaultMessage": "!!!Premium Supporter Account", 82 "defaultMessage": "!!!Premium Supporter Account",
83 "file": "src/components/settings/account/AccountDashboard.js", 83 "file": "src/components/settings/account/AccountDashboard.js",
84 "start": { 84 "start": {
85 "line": 38, 85 "line": 42,
86 "column": 22 86 "column": 22
87 }, 87 },
88 "end": { 88 "end": {
89 "line": 41, 89 "line": 45,
90 "column": 3 90 "column": 3
91 } 91 }
92 }, 92 },
@@ -95,11 +95,11 @@
95 "defaultMessage": "!!!Edit Account", 95 "defaultMessage": "!!!Edit Account",
96 "file": "src/components/settings/account/AccountDashboard.js", 96 "file": "src/components/settings/account/AccountDashboard.js",
97 "start": { 97 "start": {
98 "line": 42, 98 "line": 46,
99 "column": 21 99 "column": 21
100 }, 100 },
101 "end": { 101 "end": {
102 "line": 45, 102 "line": 49,
103 "column": 3 103 "column": 3
104 } 104 }
105 }, 105 },
@@ -108,11 +108,11 @@
108 "defaultMessage": "!!Invoices", 108 "defaultMessage": "!!Invoices",
109 "file": "src/components/settings/account/AccountDashboard.js", 109 "file": "src/components/settings/account/AccountDashboard.js",
110 "start": { 110 "start": {
111 "line": 46, 111 "line": 50,
112 "column": 18 112 "column": 18
113 }, 113 },
114 "end": { 114 "end": {
115 "line": 49, 115 "line": 53,
116 "column": 3 116 "column": 3
117 } 117 }
118 }, 118 },
@@ -121,11 +121,11 @@
121 "defaultMessage": "!!!Download", 121 "defaultMessage": "!!!Download",
122 "file": "src/components/settings/account/AccountDashboard.js", 122 "file": "src/components/settings/account/AccountDashboard.js",
123 "start": { 123 "start": {
124 "line": 50, 124 "line": 54,
125 "column": 19 125 "column": 19
126 }, 126 },
127 "end": { 127 "end": {
128 "line": 53, 128 "line": 57,
129 "column": 3 129 "column": 3
130 } 130 }
131 }, 131 },
@@ -134,11 +134,11 @@
134 "defaultMessage": "!!!Could not load user information", 134 "defaultMessage": "!!!Could not load user information",
135 "file": "src/components/settings/account/AccountDashboard.js", 135 "file": "src/components/settings/account/AccountDashboard.js",
136 "start": { 136 "start": {
137 "line": 54, 137 "line": 58,
138 "column": 25 138 "column": 25
139 }, 139 },
140 "end": { 140 "end": {
141 "line": 57, 141 "line": 61,
142 "column": 3 142 "column": 3
143 } 143 }
144 }, 144 },
@@ -147,11 +147,11 @@
147 "defaultMessage": "!!!Try again", 147 "defaultMessage": "!!!Try again",
148 "file": "src/components/settings/account/AccountDashboard.js", 148 "file": "src/components/settings/account/AccountDashboard.js",
149 "start": { 149 "start": {
150 "line": 58, 150 "line": 62,
151 "column": 28 151 "column": 28
152 }, 152 },
153 "end": { 153 "end": {
154 "line": 61, 154 "line": 65,
155 "column": 3 155 "column": 3
156 } 156 }
157 }, 157 },
@@ -160,11 +160,11 @@
160 "defaultMessage": "!!!Delete account", 160 "defaultMessage": "!!!Delete account",
161 "file": "src/components/settings/account/AccountDashboard.js", 161 "file": "src/components/settings/account/AccountDashboard.js",
162 "start": { 162 "start": {
163 "line": 62, 163 "line": 66,
164 "column": 17 164 "column": 17
165 }, 165 },
166 "end": { 166 "end": {
167 "line": 65, 167 "line": 69,
168 "column": 3 168 "column": 3
169 } 169 }
170 }, 170 },
@@ -173,11 +173,11 @@
173 "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.", 173 "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.",
174 "file": "src/components/settings/account/AccountDashboard.js", 174 "file": "src/components/settings/account/AccountDashboard.js",
175 "start": { 175 "start": {
176 "line": 66, 176 "line": 70,
177 "column": 14 177 "column": 14
178 }, 178 },
179 "end": { 179 "end": {
180 "line": 69, 180 "line": 73,
181 "column": 3 181 "column": 3
182 } 182 }
183 }, 183 },
@@ -186,11 +186,63 @@
186 "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", 186 "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!",
187 "file": "src/components/settings/account/AccountDashboard.js", 187 "file": "src/components/settings/account/AccountDashboard.js",
188 "start": { 188 "start": {
189 "line": 70, 189 "line": 74,
190 "column": 19 190 "column": 19
191 }, 191 },
192 "end": { 192 "end": {
193 "line": 73, 193 "line": 77,
194 "column": 3
195 }
196 },
197 {
198 "id": "settings.account.trial",
199 "defaultMessage": "!!!Free Trial",
200 "file": "src/components/settings/account/AccountDashboard.js",
201 "start": {
202 "line": 78,
203 "column": 9
204 },
205 "end": {
206 "line": 81,
207 "column": 3
208 }
209 },
210 {
211 "id": "settings.account.yourLicense",
212 "defaultMessage": "!!!Your license:",
213 "file": "src/components/settings/account/AccountDashboard.js",
214 "start": {
215 "line": 82,
216 "column": 15
217 },
218 "end": {
219 "line": 85,
220 "column": 3
221 }
222 },
223 {
224 "id": "settings.account.trialEndsIn",
225 "defaultMessage": "!!!Your free trial ends in {duration}.",
226 "file": "src/components/settings/account/AccountDashboard.js",
227 "start": {
228 "line": 86,
229 "column": 15
230 },
231 "end": {
232 "line": 89,
233 "column": 3
234 }
235 },
236 {
237 "id": "settings.account.trialUpdateBillingInfo",
238 "defaultMessage": "!!!Please update your billing info to continue using {license} after your trial period.",
239 "file": "src/components/settings/account/AccountDashboard.js",
240 "start": {
241 "line": 90,
242 "column": 33
243 },
244 "end": {
245 "line": 93,
194 "column": 3 246 "column": 3
195 } 247 }
196 } 248 }
diff --git a/src/i18n/messages/src/components/subscription/SubscriptionForm.json b/src/i18n/messages/src/components/subscription/SubscriptionForm.json
index f98eb986f..224a78c4c 100644
--- a/src/i18n/messages/src/components/subscription/SubscriptionForm.json
+++ b/src/i18n/messages/src/components/subscription/SubscriptionForm.json
@@ -1,7 +1,7 @@
1[ 1[
2 { 2 {
3 "id": "subscription.submit.label", 3 "id": "subscription.cta.activateTrial",
4 "defaultMessage": "!!!Support the development of Franz", 4 "defaultMessage": "!!!Yes, upgrade my account to Franz Professional",
5 "file": "src/components/subscription/SubscriptionForm.js", 5 "file": "src/components/subscription/SubscriptionForm.js",
6 "start": { 6 "start": {
7 "line": 14, 7 "line": 14,
@@ -13,12 +13,12 @@
13 } 13 }
14 }, 14 },
15 { 15 {
16 "id": "subscription.paymentSessionError", 16 "id": "subscription.includedProFeatures",
17 "defaultMessage": "!!!Could not initialize payment form", 17 "defaultMessage": "!!!The Franz Professional Plan includes:",
18 "file": "src/components/subscription/SubscriptionForm.js", 18 "file": "src/components/subscription/SubscriptionForm.js",
19 "start": { 19 "start": {
20 "line": 18, 20 "line": 18,
21 "column": 23 21 "column": 20
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 21, 24 "line": 21,
@@ -26,12 +26,12 @@
26 } 26 }
27 }, 27 },
28 { 28 {
29 "id": "subscription.type.free", 29 "id": "pricing.trial.terms.headline",
30 "defaultMessage": "!!!free", 30 "defaultMessage": "!!!No strings attached",
31 "file": "src/components/subscription/SubscriptionForm.js", 31 "file": "src/components/subscription/SubscriptionForm.js",
32 "start": { 32 "start": {
33 "line": 22, 33 "line": 22,
34 "column": 12 34 "column": 29
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 25, 37 "line": 25,
@@ -39,12 +39,12 @@
39 } 39 }
40 }, 40 },
41 { 41 {
42 "id": "subscription.type.month", 42 "id": "pricing.trial.terms.noCreditCard",
43 "defaultMessage": "!!!month", 43 "defaultMessage": "!!!No credit card required",
44 "file": "src/components/subscription/SubscriptionForm.js", 44 "file": "src/components/subscription/SubscriptionForm.js",
45 "start": { 45 "start": {
46 "line": 26, 46 "line": 26,
47 "column": 15 47 "column": 16
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 29, 50 "line": 29,
@@ -52,133 +52,16 @@
52 } 52 }
53 }, 53 },
54 { 54 {
55 "id": "subscription.type.year", 55 "id": "pricing.trial.terms.automaticTrialEnd",
56 "defaultMessage": "!!!year", 56 "defaultMessage": "!!!Your free trial ends automatically after 14 days",
57 "file": "src/components/subscription/SubscriptionForm.js", 57 "file": "src/components/subscription/SubscriptionForm.js",
58 "start": { 58 "start": {
59 "line": 30, 59 "line": 30,
60 "column": 14 60 "column": 21
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 33, 63 "line": 33,
64 "column": 3 64 "column": 3
65 } 65 }
66 },
67 {
68 "id": "subscription.includedFeatures",
69 "defaultMessage": "!!!The Franz Premium Supporter Account includes",
70 "file": "src/components/subscription/SubscriptionForm.js",
71 "start": {
72 "line": 34,
73 "column": 20
74 },
75 "end": {
76 "line": 37,
77 "column": 3
78 }
79 },
80 {
81 "id": "subscription.features.onpremise.mattermost",
82 "defaultMessage": "!!!Add on-premise/hosted services like Mattermost",
83 "file": "src/components/subscription/SubscriptionForm.js",
84 "start": {
85 "line": 38,
86 "column": 13
87 },
88 "end": {
89 "line": 41,
90 "column": 3
91 }
92 },
93 {
94 "id": "subscription.features.noInterruptions",
95 "defaultMessage": "!!!No app delays & nagging to upgrade license",
96 "file": "src/components/subscription/SubscriptionForm.js",
97 "start": {
98 "line": 42,
99 "column": 19
100 },
101 "end": {
102 "line": 45,
103 "column": 3
104 }
105 },
106 {
107 "id": "subscription.features.proxy",
108 "defaultMessage": "!!!Proxy support for services",
109 "file": "src/components/subscription/SubscriptionForm.js",
110 "start": {
111 "line": 46,
112 "column": 9
113 },
114 "end": {
115 "line": 49,
116 "column": 3
117 }
118 },
119 {
120 "id": "subscription.features.spellchecker",
121 "defaultMessage": "!!!Support for Spellchecker",
122 "file": "src/components/subscription/SubscriptionForm.js",
123 "start": {
124 "line": 50,
125 "column": 16
126 },
127 "end": {
128 "line": 53,
129 "column": 3
130 }
131 },
132 {
133 "id": "subscription.features.workspaces",
134 "defaultMessage": "!!!Organize your services in workspaces",
135 "file": "src/components/subscription/SubscriptionForm.js",
136 "start": {
137 "line": 54,
138 "column": 14
139 },
140 "end": {
141 "line": 57,
142 "column": 3
143 }
144 },
145 {
146 "id": "subscription.features.ads",
147 "defaultMessage": "!!!No ads, ever!",
148 "file": "src/components/subscription/SubscriptionForm.js",
149 "start": {
150 "line": 58,
151 "column": 7
152 },
153 "end": {
154 "line": 61,
155 "column": 3
156 }
157 },
158 {
159 "id": "subscription.features.comingSoon",
160 "defaultMessage": "!!!coming soon",
161 "file": "src/components/subscription/SubscriptionForm.js",
162 "start": {
163 "line": 62,
164 "column": 14
165 },
166 "end": {
167 "line": 65,
168 "column": 3
169 }
170 },
171 {
172 "id": "subscription.euTaxInfo",
173 "defaultMessage": "!!!EU residents: local sales tax may apply",
174 "file": "src/components/subscription/SubscriptionForm.js",
175 "start": {
176 "line": 66,
177 "column": 13
178 },
179 "end": {
180 "line": 69,
181 "column": 3
182 }
183 } 66 }
184] \ No newline at end of file 67] \ No newline at end of file
diff --git a/src/i18n/messages/src/helpers/plan-helpers.json b/src/i18n/messages/src/helpers/plan-helpers.json
new file mode 100644
index 000000000..de27dfcfd
--- /dev/null
+++ b/src/i18n/messages/src/helpers/plan-helpers.json
@@ -0,0 +1,80 @@
1[
2 {
3 "id": "pricing.plan.pro-yearly",
4 "defaultMessage": "!!!Franz Professional Yearly",
5 "file": "src/helpers/plan-helpers.js",
6 "start": {
7 "line": 5,
8 "column": 22
9 },
10 "end": {
11 "line": 8,
12 "column": 3
13 }
14 },
15 {
16 "id": "pricing.plan.pro-monthly",
17 "defaultMessage": "!!!Franz Professional Monthly",
18 "file": "src/helpers/plan-helpers.js",
19 "start": {
20 "line": 9,
21 "column": 23
22 },
23 "end": {
24 "line": 12,
25 "column": 3
26 }
27 },
28 {
29 "id": "pricing.plan.personal-yearly",
30 "defaultMessage": "!!!Franz Personal Yearly",
31 "file": "src/helpers/plan-helpers.js",
32 "start": {
33 "line": 13,
34 "column": 27
35 },
36 "end": {
37 "line": 16,
38 "column": 3
39 }
40 },
41 {
42 "id": "pricing.plan.personal-monthly",
43 "defaultMessage": "!!!Franz Personal Monthly",
44 "file": "src/helpers/plan-helpers.js",
45 "start": {
46 "line": 17,
47 "column": 28
48 },
49 "end": {
50 "line": 20,
51 "column": 3
52 }
53 },
54 {
55 "id": "pricing.plan.free",
56 "defaultMessage": "!!!Franz Free",
57 "file": "src/helpers/plan-helpers.js",
58 "start": {
59 "line": 21,
60 "column": 16
61 },
62 "end": {
63 "line": 24,
64 "column": 3
65 }
66 },
67 {
68 "id": "pricing.plan.legacy",
69 "defaultMessage": "!!!Franz Premium",
70 "file": "src/helpers/plan-helpers.js",
71 "start": {
72 "line": 25,
73 "column": 18
74 },
75 "end": {
76 "line": 28,
77 "column": 3
78 }
79 }
80] \ No newline at end of file
diff --git a/src/i18n/messages/src/helpers/pricing-helpers.json b/src/i18n/messages/src/helpers/pricing-helpers.json
new file mode 100644
index 000000000..4030a3e3b
--- /dev/null
+++ b/src/i18n/messages/src/helpers/pricing-helpers.json
@@ -0,0 +1,80 @@
1[
2 {
3 "id": "pricing.plan.pro-yearly",
4 "defaultMessage": "!!!Franz Professional Yearly",
5 "file": "src/helpers/pricing-helpers.js",
6 "start": {
7 "line": 5,
8 "column": 22
9 },
10 "end": {
11 "line": 8,
12 "column": 3
13 }
14 },
15 {
16 "id": "pricing.plan.pro-monthly",
17 "defaultMessage": "!!!Franz Professional Monthly",
18 "file": "src/helpers/pricing-helpers.js",
19 "start": {
20 "line": 9,
21 "column": 23
22 },
23 "end": {
24 "line": 12,
25 "column": 3
26 }
27 },
28 {
29 "id": "pricing.plan.personal-yearly",
30 "defaultMessage": "!!!Franz Personal Yearly",
31 "file": "src/helpers/pricing-helpers.js",
32 "start": {
33 "line": 13,
34 "column": 27
35 },
36 "end": {
37 "line": 16,
38 "column": 3
39 }
40 },
41 {
42 "id": "pricing.plan.personal-monthly",
43 "defaultMessage": "!!!Franz Personal Monthly",
44 "file": "src/helpers/pricing-helpers.js",
45 "start": {
46 "line": 17,
47 "column": 28
48 },
49 "end": {
50 "line": 20,
51 "column": 3
52 }
53 },
54 {
55 "id": "pricing.plan.free",
56 "defaultMessage": "!!!Franz Free",
57 "file": "src/helpers/pricing-helpers.js",
58 "start": {
59 "line": 21,
60 "column": 16
61 },
62 "end": {
63 "line": 24,
64 "column": 3
65 }
66 },
67 {
68 "id": "pricing.plan.legacy",
69 "defaultMessage": "!!!Franz Premium",
70 "file": "src/helpers/pricing-helpers.js",
71 "start": {
72 "line": 25,
73 "column": 18
74 },
75 "end": {
76 "line": 28,
77 "column": 3
78 }
79 }
80] \ No newline at end of file
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js
index 72c4b4d0b..55ee52b18 100644
--- a/src/stores/AppStore.js
+++ b/src/stores/AppStore.js
@@ -334,6 +334,8 @@ export default class AppStore extends Store {
334 this.locale = this._getDefaultLocale(); 334 this.locale = this._getDefaultLocale();
335 } 335 }
336 336
337 moment.locale(this.locale);
338
337 debug(`Set locale to "${this.locale}"`); 339 debug(`Set locale to "${this.locale}"`);
338 } 340 }
339 341
diff --git a/src/styles/settings.scss b/src/styles/settings.scss
index 1baff8b54..0955aaa0c 100644
--- a/src/styles/settings.scss
+++ b/src/styles/settings.scss
@@ -360,6 +360,7 @@
360 .account__subscription-button { margin-left: auto; } 360 .account__subscription-button { margin-left: auto; }
361 .franz-form__button { white-space: nowrap; } 361 .franz-form__button { white-space: nowrap; }
362 div { height: auto; } 362 div { height: auto; }
363 [data-type="franz-button"] div { height: 100% }
363 364
364 .invoices { 365 .invoices {
365 width: 100%; 366 width: 100%;