aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.babelrc9
-rw-r--r--package-lock.json38
-rw-r--r--package.json3
-rw-r--r--src/components/subscription/SubscriptionForm.js60
-rw-r--r--src/containers/settings/EditUserScreen.js44
-rw-r--r--src/features/shareFranz/Component.js52
-rw-r--r--translations/manage-translations.js10
-rw-r--r--translations/messages/src/components/auth/Import.json54
-rw-r--r--translations/messages/src/components/auth/Invite.json93
-rw-r--r--translations/messages/src/components/auth/Login.json119
-rw-r--r--translations/messages/src/components/auth/Password.json93
-rw-r--r--translations/messages/src/components/auth/Pricing.json54
-rw-r--r--translations/messages/src/components/auth/Signup.json158
-rw-r--r--translations/messages/src/components/auth/Welcome.json28
-rw-r--r--translations/messages/src/components/layout/AppLayout.json80
-rw-r--r--translations/messages/src/components/layout/Sidebar.json54
-rw-r--r--translations/messages/src/components/services/content/ErrorHandlers/WebviewErrorHandler.json67
-rw-r--r--translations/messages/src/components/services/content/ServiceDisabled.json28
-rw-r--r--translations/messages/src/components/services/content/Services.json28
-rw-r--r--translations/messages/src/components/services/content/WebviewCrashHandler.json54
-rw-r--r--translations/messages/src/components/services/tabs/TabItem.json119
-rw-r--r--translations/messages/src/components/settings/account/AccountDashboard.json210
-rw-r--r--translations/messages/src/components/settings/navigation/SettingsNavigation.json80
-rw-r--r--translations/messages/src/components/settings/recipes/RecipesDashboard.json106
-rw-r--r--translations/messages/src/components/settings/services/EditServiceForm.json288
-rw-r--r--translations/messages/src/components/settings/services/ServiceError.json54
-rw-r--r--translations/messages/src/components/settings/services/ServiceItem.json41
-rw-r--r--translations/messages/src/components/settings/services/ServicesDashboard.json119
-rw-r--r--translations/messages/src/components/settings/settings/EditSettingsForm.json223
-rw-r--r--translations/messages/src/components/settings/user/EditUserForm.json80
-rw-r--r--translations/messages/src/components/subscription/SubscriptionForm.json171
-rw-r--r--translations/messages/src/components/subscription/SubscriptionPopup.json28
-rw-r--r--translations/messages/src/components/ui/PremiumFeatureContainer/index.json15
-rw-r--r--translations/messages/src/components/util/ErrorBoundary/index.json28
-rw-r--r--translations/messages/src/containers/settings/EditServiceScreen.json197
-rw-r--r--translations/messages/src/containers/settings/EditSettingsScreen.json158
-rw-r--r--translations/messages/src/containers/settings/EditUserScreen.json119
-rw-r--r--translations/messages/src/features/delayApp/Component.json41
-rw-r--r--translations/messages/src/features/shareFranz/Component.json93
-rw-r--r--translations/messages/src/helpers/validation-helpers.json67
-rw-r--r--translations/messages/src/i18n/globalMessages.json93
-rw-r--r--translations/messages/src/lib/Menu.json561
42 files changed, 3933 insertions, 84 deletions
diff --git a/.babelrc b/.babelrc
index 299d5b4a0..dd23bdabf 100644
--- a/.babelrc
+++ b/.babelrc
@@ -25,7 +25,12 @@
25 } 25 }
26 ], 26 ],
27 "@babel/proposal-throw-expressions", 27 "@babel/proposal-throw-expressions",
28 "@babel/syntax-dynamic-import" 28 "@babel/syntax-dynamic-import",
29 ["react-intl", {
30 "messagesDir": "./translations/messages/",
31 "enforceDescriptions": false,
32 "extractSourceLocation": true
33 }]
29 ], 34 ],
30 "sourceMaps": "inline" 35 "sourceMaps": "inline"
31} \ No newline at end of file 36}
diff --git a/package-lock.json b/package-lock.json
index 1a66f4ffd..82e9c9997 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3157,6 +3157,17 @@
3157 } 3157 }
3158 } 3158 }
3159 }, 3159 },
3160 "babel-plugin-react-intl": {
3161 "version": "3.0.1",
3162 "resolved": "https://registry.npmjs.org/babel-plugin-react-intl/-/babel-plugin-react-intl-3.0.1.tgz",
3163 "integrity": "sha512-FqnEO+Tq7kJVUPKsSG3s5jaHi3pAC4RUR11IrscvjsfkOApLP2DtzNo6dtQ+tX+OzEzJx7cUms8aCw5BFyW5xg==",
3164 "dev": true,
3165 "requires": {
3166 "@babel/runtime": "^7.0.0",
3167 "intl-messageformat-parser": "^1.2.0",
3168 "mkdirp": "^0.5.1"
3169 }
3170 },
3160 "babel-runtime": { 3171 "babel-runtime": {
3161 "version": "6.26.0", 3172 "version": "6.26.0",
3162 "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 3173 "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
@@ -11228,6 +11239,15 @@
11228 "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 11239 "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
11229 "dev": true 11240 "dev": true
11230 }, 11241 },
11242 "json-stable-stringify": {
11243 "version": "1.0.1",
11244 "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
11245 "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
11246 "dev": true,
11247 "requires": {
11248 "jsonify": "~0.0.0"
11249 }
11250 },
11231 "json-stable-stringify-without-jsonify": { 11251 "json-stable-stringify-without-jsonify": {
11232 "version": "1.0.1", 11252 "version": "1.0.1",
11233 "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 11253 "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
@@ -11263,6 +11283,12 @@
11263 "graceful-fs": "^4.1.6" 11283 "graceful-fs": "^4.1.6"
11264 } 11284 }
11265 }, 11285 },
11286 "jsonify": {
11287 "version": "0.0.0",
11288 "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
11289 "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
11290 "dev": true
11291 },
11266 "jsonparse": { 11292 "jsonparse": {
11267 "version": "1.3.1", 11293 "version": "1.3.1",
11268 "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 11294 "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
@@ -14967,6 +14993,18 @@
14967 } 14993 }
14968 } 14994 }
14969 }, 14995 },
14996 "react-intl-translations-manager": {
14997 "version": "5.0.3",
14998 "resolved": "https://registry.npmjs.org/react-intl-translations-manager/-/react-intl-translations-manager-5.0.3.tgz",
14999 "integrity": "sha512-EfBeugnOGFcdUbQyY9TqBMbuauQ8wm73ZqFr0UqCljhbXl7YDHQcVzclWFRkVmlUffzxitLQFhAZEVVeRNQSwA==",
15000 "dev": true,
15001 "requires": {
15002 "chalk": "^2.3.2",
15003 "glob": "^7.1.2",
15004 "json-stable-stringify": "^1.0.1",
15005 "mkdirp": "^0.5.1"
15006 }
15007 },
14970 "react-is": { 15008 "react-is": {
14971 "version": "16.8.1", 15009 "version": "16.8.1",
14972 "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.1.tgz", 15010 "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.1.tgz",
diff --git a/package.json b/package.json
index c28d29e90..33a0fb0d9 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,7 @@
16 "start:live": "cross-env LIVE_API=1 npm start", 16 "start:live": "cross-env LIVE_API=1 npm start",
17 "dev": "cross-env NODE_ENV=development gulp dev", 17 "dev": "cross-env NODE_ENV=development gulp dev",
18 "lint": "eslint src", 18 "lint": "eslint src",
19 "manage-translations": "node ./translations/manage-translations.js",
19 "sign": "gulp sign", 20 "sign": "gulp sign",
20 "prebuild": "gulp build", 21 "prebuild": "gulp build",
21 "build": "npx electron-builder --publish onTag", 22 "build": "npx electron-builder --publish onTag",
@@ -108,6 +109,7 @@
108 "@types/uuid": "3.4.4", 109 "@types/uuid": "3.4.4",
109 "babel-eslint": "10.0.1", 110 "babel-eslint": "10.0.1",
110 "babel-loader": "^8.0.4", 111 "babel-loader": "^8.0.4",
112 "babel-plugin-react-intl": "3.0.1",
111 "conventional-changelog-cli": "2.0.11", 113 "conventional-changelog-cli": "2.0.11",
112 "cross-env": "^5.0.5", 114 "cross-env": "^5.0.5",
113 "cz-conventional-changelog": "2.1.0", 115 "cz-conventional-changelog": "2.1.0",
@@ -137,6 +139,7 @@
137 "mocha": "5.2.0", 139 "mocha": "5.2.0",
138 "node-sass": "4.11.0", 140 "node-sass": "4.11.0",
139 "prettier": "1.15.2", 141 "prettier": "1.15.2",
142 "react-intl-translations-manager": "5.0.3",
140 "terser-webpack-plugin": "1.2.1", 143 "terser-webpack-plugin": "1.2.1",
141 "ts-loader": "5.3.2", 144 "ts-loader": "5.3.2",
142 "tslint": "5.12.0", 145 "tslint": "5.12.0",
diff --git a/src/components/subscription/SubscriptionForm.js b/src/components/subscription/SubscriptionForm.js
index 90da8ddc3..7a818d100 100644
--- a/src/components/subscription/SubscriptionForm.js
+++ b/src/components/subscription/SubscriptionForm.js
@@ -35,31 +35,29 @@ const messages = defineMessages({
35 id: 'subscription.includedFeatures', 35 id: 'subscription.includedFeatures',
36 defaultMessage: '!!!The Franz Premium Supporter Account includes', 36 defaultMessage: '!!!The Franz Premium Supporter Account includes',
37 }, 37 },
38 features: { 38 onpremise: {
39 onpremise: { 39 id: 'subscription.features.onpremise.mattermost',
40 id: 'subscription.features.onpremise.mattermost', 40 defaultMessage: '!!!Add on-premise/hosted services like Mattermost',
41 defaultMessage: '!!!Add on-premise/hosted services like Mattermost', 41 },
42 }, 42 noInterruptions: {
43 noInterruptions: { 43 id: 'subscription.features.noInterruptions',
44 id: 'subscription.features.noInterruptions', 44 defaultMessage: '!!!No app delays & nagging to upgrade license',
45 defaultMessage: '!!!No app delays & nagging to upgrade license', 45 },
46 }, 46 proxy: {
47 proxy: { 47 id: 'subscription.features.proxy',
48 id: 'subscription.features.proxy', 48 defaultMessage: '!!!Proxy support for services',
49 defaultMessage: '!!!Proxy support for services', 49 },
50 }, 50 spellchecker: {
51 spellchecker: { 51 id: 'subscription.features.spellchecker',
52 id: 'subscription.features.spellchecker', 52 defaultMessage: '!!!Support for Spellchecker',
53 defaultMessage: '!!!Support for Spellchecker', 53 },
54 }, 54 ads: {
55 ads: { 55 id: 'subscription.features.ads',
56 id: 'subscription.features.ads', 56 defaultMessage: '!!!No ads, ever!',
57 defaultMessage: '!!!No ads, ever!', 57 },
58 }, 58 comingSoon: {
59 comingSoon: { 59 id: 'subscription.features.comingSoon',
60 id: 'subscription.features.comingSoon', 60 defaultMessage: '!!!coming soon',
61 defaultMessage: '!!!coming soon',
62 },
63 }, 61 },
64 euTaxInfo: { 62 euTaxInfo: {
65 id: 'subscription.euTaxInfo', 63 id: 'subscription.euTaxInfo',
@@ -85,7 +83,7 @@ export default @observer class SubscriptionForm extends Component {
85 showSkipOption: false, 83 showSkipOption: false,
86 skipAction: () => null, 84 skipAction: () => null,
87 skipButtonLabel: '', 85 skipButtonLabel: '',
88 } 86 };
89 87
90 static contextTypes = { 88 static contextTypes = {
91 intl: intlShape, 89 intl: intlShape,
@@ -162,18 +160,18 @@ export default @observer class SubscriptionForm extends Component {
162 </p> 160 </p>
163 <div className="subscription"> 161 <div className="subscription">
164 <ul className="subscription__premium-features"> 162 <ul className="subscription__premium-features">
165 <li>{intl.formatMessage(messages.features.onpremise)}</li> 163 <li>{intl.formatMessage(messages.onpremise)}</li>
166 <li> 164 <li>
167 {intl.formatMessage(messages.features.noInterruptions)} 165 {intl.formatMessage(messages.noInterruptions)}
168 </li> 166 </li>
169 <li> 167 <li>
170 {intl.formatMessage(messages.features.spellchecker)} 168 {intl.formatMessage(messages.spellchecker)}
171 </li> 169 </li>
172 <li> 170 <li>
173 {intl.formatMessage(messages.features.proxy)} 171 {intl.formatMessage(messages.proxy)}
174 </li> 172 </li>
175 <li> 173 <li>
176 {intl.formatMessage(messages.features.ads)} 174 {intl.formatMessage(messages.ads)}
177 </li> 175 </li>
178 </ul> 176 </ul>
179 </div> 177 </div>
diff --git a/src/containers/settings/EditUserScreen.js b/src/containers/settings/EditUserScreen.js
index bade928a0..81f689400 100644
--- a/src/containers/settings/EditUserScreen.js
+++ b/src/containers/settings/EditUserScreen.js
@@ -23,23 +23,21 @@ const messages = defineMessages({
23 id: 'settings.user.form.email', 23 id: 'settings.user.form.email',
24 defaultMessage: '!!!Email', 24 defaultMessage: '!!!Email',
25 }, 25 },
26 accountType: { 26 accountTypeLabel: {
27 label: { 27 id: 'settings.user.form.accountType.label',
28 id: 'settings.user.form.accountType.label', 28 defaultMessage: '!!!Account type',
29 defaultMessage: '!!!Account type', 29 },
30 }, 30 accountTypeIndividual: {
31 individual: { 31 id: 'settings.user.form.accountType.individual',
32 id: 'settings.user.form.accountType.individual', 32 defaultMessage: '!!!Individual',
33 defaultMessage: '!!!Individual', 33 },
34 }, 34 accountTypeNonProfit: {
35 nonProfit: { 35 id: 'settings.user.form.accountType.non-profit',
36 id: 'settings.user.form.accountType.non-profit', 36 defaultMessage: '!!!Non-Profit',
37 defaultMessage: '!!!Non-Profit', 37 },
38 }, 38 accountTypeCompany: {
39 company: { 39 id: 'settings.user.form.accountType.company',
40 id: 'settings.user.form.accountType.company', 40 defaultMessage: '!!!Company',
41 defaultMessage: '!!!Company',
42 },
43 }, 41 },
44 currentPassword: { 42 currentPassword: {
45 id: 'settings.user.form.currentPassword', 43 id: 'settings.user.form.currentPassword',
@@ -94,21 +92,21 @@ export default @inject('stores', 'actions') @observer class EditUserScreen exten
94 accountType: { 92 accountType: {
95 value: user.accountType, 93 value: user.accountType,
96 validators: [required], 94 validators: [required],
97 label: intl.formatMessage(messages.accountType.label), 95 label: intl.formatMessage(messages.accountTypeLabel),
98 options: [{ 96 options: [{
99 value: 'individual', 97 value: 'individual',
100 label: intl.formatMessage(messages.accountType.individual), 98 label: intl.formatMessage(messages.accountTypeIndividual),
101 }, { 99 }, {
102 value: 'non-profit', 100 value: 'non-profit',
103 label: intl.formatMessage(messages.accountType.nonProfit), 101 label: intl.formatMessage(messages.accountTypeNonProfit),
104 }, { 102 }, {
105 value: 'company', 103 value: 'company',
106 label: intl.formatMessage(messages.accountType.company), 104 label: intl.formatMessage(messages.accountTypeCompany),
107 }], 105 }],
108 }, 106 },
109 organization: { 107 organization: {
110 label: intl.formatMessage(messages.accountType.company), 108 label: intl.formatMessage(messages.accountTypeCompany),
111 placeholder: intl.formatMessage(messages.accountType.company), 109 placeholder: intl.formatMessage(messages.accountTypeCompany),
112 value: user.organization, 110 value: user.organization,
113 }, 111 },
114 oldPassword: { 112 oldPassword: {
diff --git a/src/features/shareFranz/Component.js b/src/features/shareFranz/Component.js
index d463664df..ef43a54fa 100644
--- a/src/features/shareFranz/Component.js
+++ b/src/features/shareFranz/Component.js
@@ -20,29 +20,25 @@ const messages = defineMessages({
20 id: 'feature.shareFranz.text', 20 id: 'feature.shareFranz.text',
21 defaultMessage: '!!!Tell your friends and colleagues how awesome Franz is and help us to spread the word.', 21 defaultMessage: '!!!Tell your friends and colleagues how awesome Franz is and help us to spread the word.',
22 }, 22 },
23 actions: { 23 actionsEmail: {
24 email: { 24 id: 'feature.shareFranz.action.email',
25 id: 'feature.shareFranz.action.email', 25 defaultMessage: '!!!Share as email',
26 defaultMessage: '!!!Share as email',
27 },
28 facebook: {
29 id: 'feature.shareFranz.action.facebook',
30 defaultMessage: '!!!Share on Facebook',
31 },
32 twitter: {
33 id: 'feature.shareFranz.action.twitter',
34 defaultMessage: '!!!Share on Twitter',
35 },
36 }, 26 },
37 shareText: { 27 actionsFacebook: {
38 email: { 28 id: 'feature.shareFranz.action.facebook',
39 id: 'feature.shareFranz.shareText.email', 29 defaultMessage: '!!!Share on Facebook',
40 defaultMessage: '!!! I\'ve added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com', 30 },
41 }, 31 actionsTwitter: {
42 twitter: { 32 id: 'feature.shareFranz.action.twitter',
43 id: 'feature.shareFranz.shareText.twitter', 33 defaultMessage: '!!!Share on Twitter',
44 defaultMessage: '!!! I\'ve added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @MeetFranz', 34 },
45 }, 35 shareTextEmail: {
36 id: 'feature.shareFranz.shareText.email',
37 defaultMessage: '!!! I\'ve added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com',
38 },
39 shareTextTwitter: {
40 id: 'feature.shareFranz.shareText.twitter',
41 defaultMessage: '!!! I\'ve added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @MeetFranz',
46 }, 42 },
47}); 43});
48 44
@@ -90,7 +86,7 @@ const styles = theme => ({
90export default @injectSheet(styles) @inject('stores') @observer class ShareFranzModal extends Component { 86export default @injectSheet(styles) @inject('stores') @observer class ShareFranzModal extends Component {
91 static propTypes = { 87 static propTypes = {
92 classes: PropTypes.object.isRequired, 88 classes: PropTypes.object.isRequired,
93 } 89 };
94 90
95 static contextTypes = { 91 static contextTypes = {
96 intl: intlShape, 92 intl: intlShape,
@@ -128,17 +124,17 @@ export default @injectSheet(styles) @inject('stores') @observer class ShareFranz
128 <p>{intl.formatMessage(messages.text)}</p> 124 <p>{intl.formatMessage(messages.text)}</p>
129 <div className={classes.actions}> 125 <div className={classes.actions}>
130 <Button 126 <Button
131 label={intl.formatMessage(messages.actions.email)} 127 label={intl.formatMessage(messages.actionsEmail)}
132 className={classes.cta} 128 className={classes.cta}
133 icon="mdiEmail" 129 icon="mdiEmail"
134 href={`mailto:?subject=Meet the cool app Franz&body=${intl.formatMessage(messages.shareText.email, { count: serviceCount })}}`} 130 href={`mailto:?subject=Meet the cool app Franz&body=${intl.formatMessage(messages.shareTextEmail, { count: serviceCount })}}`}
135 target="_blank" 131 target="_blank"
136 onClick={() => { 132 onClick={() => {
137 gaEvent('Share Franz', 'share', 'Share via email'); 133 gaEvent('Share Franz', 'share', 'Share via email');
138 }} 134 }}
139 /> 135 />
140 <Button 136 <Button
141 label={intl.formatMessage(messages.actions.facebook)} 137 label={intl.formatMessage(messages.actionsFacebook)}
142 className={classes.cta} 138 className={classes.cta}
143 icon="mdiFacebookBox" 139 icon="mdiFacebookBox"
144 href="https://www.facebook.com/sharer/sharer.php?u=https://www.meetfranz.com?utm_source=facebook&utm_medium=referral&utm_campaign=share-button" 140 href="https://www.facebook.com/sharer/sharer.php?u=https://www.meetfranz.com?utm_source=facebook&utm_medium=referral&utm_campaign=share-button"
@@ -148,10 +144,10 @@ export default @injectSheet(styles) @inject('stores') @observer class ShareFranz
148 }} 144 }}
149 /> 145 />
150 <Button 146 <Button
151 label={intl.formatMessage(messages.actions.twitter)} 147 label={intl.formatMessage(messages.actionsTwitter)}
152 className={classes.cta} 148 className={classes.cta}
153 icon="mdiTwitter" 149 icon="mdiTwitter"
154 href={`http://twitter.com/intent/tweet?status=${intl.formatMessage(messages.shareText.twitter, { count: serviceCount })}`} 150 href={`http://twitter.com/intent/tweet?status=${intl.formatMessage(messages.shareTextTwitter, { count: serviceCount })}`}
155 target="_blank" 151 target="_blank"
156 onClick={() => { 152 onClick={() => {
157 gaEvent('Share Franz', 'share', 'Share via Twitter'); 153 gaEvent('Share Franz', 'share', 'Share via Twitter');
diff --git a/translations/manage-translations.js b/translations/manage-translations.js
new file mode 100644
index 000000000..adbbe2363
--- /dev/null
+++ b/translations/manage-translations.js
@@ -0,0 +1,10 @@
1require('@babel/register');
2const manageTranslations = require('react-intl-translations-manager').default;
3// const { APP_LOCALES } = require('../src/i18n/languages');
4
5manageTranslations({
6 messagesDirectory: 'translations/messages',
7 translationsDirectory: 'src/i18n/locales',
8 singleMessagesFile: true,
9 languages: ['en-US'], // Object.keys(APP_LOCALES),
10});
diff --git a/translations/messages/src/components/auth/Import.json b/translations/messages/src/components/auth/Import.json
new file mode 100644
index 000000000..264fc729b
--- /dev/null
+++ b/translations/messages/src/components/auth/Import.json
@@ -0,0 +1,54 @@
1[
2 {
3 "id": "import.headline",
4 "defaultMessage": "!!!Import your Franz 4 services",
5 "file": "src/components/auth/Import.js",
6 "start": {
7 "line": 13,
8 "column": 12
9 },
10 "end": {
11 "line": 16,
12 "column": 3
13 }
14 },
15 {
16 "id": "import.notSupportedHeadline",
17 "defaultMessage": "!!!Services not yet supported in Franz 5",
18 "file": "src/components/auth/Import.js",
19 "start": {
20 "line": 17,
21 "column": 24
22 },
23 "end": {
24 "line": 20,
25 "column": 3
26 }
27 },
28 {
29 "id": "import.submit.label",
30 "defaultMessage": "!!!Import {count} services",
31 "file": "src/components/auth/Import.js",
32 "start": {
33 "line": 21,
34 "column": 21
35 },
36 "end": {
37 "line": 24,
38 "column": 3
39 }
40 },
41 {
42 "id": "import.skip.label",
43 "defaultMessage": "!!!I want to add services manually",
44 "file": "src/components/auth/Import.js",
45 "start": {
46 "line": 25,
47 "column": 19
48 },
49 "end": {
50 "line": 28,
51 "column": 3
52 }
53 }
54] \ No newline at end of file
diff --git a/translations/messages/src/components/auth/Invite.json b/translations/messages/src/components/auth/Invite.json
new file mode 100644
index 000000000..57c9bddcf
--- /dev/null
+++ b/translations/messages/src/components/auth/Invite.json
@@ -0,0 +1,93 @@
1[
2 {
3 "id": "settings.invite.headline",
4 "defaultMessage": "!!!Invite Friends",
5 "file": "src/components/auth/Invite.js",
6 "start": {
7 "line": 16,
8 "column": 20
9 },
10 "end": {
11 "line": 19,
12 "column": 3
13 }
14 },
15 {
16 "id": "invite.headline.friends",
17 "defaultMessage": "!!!Invite 3 of your friends or colleagues",
18 "file": "src/components/auth/Invite.js",
19 "start": {
20 "line": 20,
21 "column": 12
22 },
23 "end": {
24 "line": 23,
25 "column": 3
26 }
27 },
28 {
29 "id": "invite.name.label",
30 "defaultMessage": "!!!Name",
31 "file": "src/components/auth/Invite.js",
32 "start": {
33 "line": 24,
34 "column": 13
35 },
36 "end": {
37 "line": 27,
38 "column": 3
39 }
40 },
41 {
42 "id": "invite.email.label",
43 "defaultMessage": "!!!Email address",
44 "file": "src/components/auth/Invite.js",
45 "start": {
46 "line": 28,
47 "column": 14
48 },
49 "end": {
50 "line": 31,
51 "column": 3
52 }
53 },
54 {
55 "id": "invite.submit.label",
56 "defaultMessage": "!!!Send invites",
57 "file": "src/components/auth/Invite.js",
58 "start": {
59 "line": 32,
60 "column": 21
61 },
62 "end": {
63 "line": 35,
64 "column": 3
65 }
66 },
67 {
68 "id": "invite.skip.label",
69 "defaultMessage": "!!!I want to do this later",
70 "file": "src/components/auth/Invite.js",
71 "start": {
72 "line": 36,
73 "column": 19
74 },
75 "end": {
76 "line": 39,
77 "column": 3
78 }
79 },
80 {
81 "id": "invite.successInfo",
82 "defaultMessage": "!!!Invitations sent successfully",
83 "file": "src/components/auth/Invite.js",
84 "start": {
85 "line": 40,
86 "column": 21
87 },
88 "end": {
89 "line": 43,
90 "column": 3
91 }
92 }
93] \ No newline at end of file
diff --git a/translations/messages/src/components/auth/Login.json b/translations/messages/src/components/auth/Login.json
new file mode 100644
index 000000000..177f6000b
--- /dev/null
+++ b/translations/messages/src/components/auth/Login.json
@@ -0,0 +1,119 @@
1[
2 {
3 "id": "login.headline",
4 "defaultMessage": "!!!Sign in",
5 "file": "src/components/auth/Login.js",
6 "start": {
7 "line": 17,
8 "column": 12
9 },
10 "end": {
11 "line": 20,
12 "column": 3
13 }
14 },
15 {
16 "id": "login.email.label",
17 "defaultMessage": "!!!Email address",
18 "file": "src/components/auth/Login.js",
19 "start": {
20 "line": 21,
21 "column": 14
22 },
23 "end": {
24 "line": 24,
25 "column": 3
26 }
27 },
28 {
29 "id": "login.password.label",
30 "defaultMessage": "!!!Password",
31 "file": "src/components/auth/Login.js",
32 "start": {
33 "line": 25,
34 "column": 17
35 },
36 "end": {
37 "line": 28,
38 "column": 3
39 }
40 },
41 {
42 "id": "login.submit.label",
43 "defaultMessage": "!!!Sign in",
44 "file": "src/components/auth/Login.js",
45 "start": {
46 "line": 29,
47 "column": 21
48 },
49 "end": {
50 "line": 32,
51 "column": 3
52 }
53 },
54 {
55 "id": "login.invalidCredentials",
56 "defaultMessage": "!!!Email or password not valid",
57 "file": "src/components/auth/Login.js",
58 "start": {
59 "line": 33,
60 "column": 22
61 },
62 "end": {
63 "line": 36,
64 "column": 3
65 }
66 },
67 {
68 "id": "login.tokenExpired",
69 "defaultMessage": "!!!Your session expired, please login again.",
70 "file": "src/components/auth/Login.js",
71 "start": {
72 "line": 37,
73 "column": 16
74 },
75 "end": {
76 "line": 40,
77 "column": 3
78 }
79 },
80 {
81 "id": "login.serverLogout",
82 "defaultMessage": "!!!Your session expired, please login again.",
83 "file": "src/components/auth/Login.js",
84 "start": {
85 "line": 41,
86 "column": 16
87 },
88 "end": {
89 "line": 44,
90 "column": 3
91 }
92 },
93 {
94 "id": "login.link.signup",
95 "defaultMessage": "!!!Create a free account",
96 "file": "src/components/auth/Login.js",
97 "start": {
98 "line": 45,
99 "column": 14
100 },
101 "end": {
102 "line": 48,
103 "column": 3
104 }
105 },
106 {
107 "id": "login.link.password",
108 "defaultMessage": "!!!Forgot password",
109 "file": "src/components/auth/Login.js",
110 "start": {
111 "line": 49,
112 "column": 16
113 },
114 "end": {
115 "line": 52,
116 "column": 3
117 }
118 }
119] \ No newline at end of file
diff --git a/translations/messages/src/components/auth/Password.json b/translations/messages/src/components/auth/Password.json
new file mode 100644
index 000000000..f335b3acb
--- /dev/null
+++ b/translations/messages/src/components/auth/Password.json
@@ -0,0 +1,93 @@
1[
2 {
3 "id": "password.headline",
4 "defaultMessage": "!!!Forgot password",
5 "file": "src/components/auth/Password.js",
6 "start": {
7 "line": 14,
8 "column": 12
9 },
10 "end": {
11 "line": 17,
12 "column": 3
13 }
14 },
15 {
16 "id": "password.email.label",
17 "defaultMessage": "!!!Email address",
18 "file": "src/components/auth/Password.js",
19 "start": {
20 "line": 18,
21 "column": 14
22 },
23 "end": {
24 "line": 21,
25 "column": 3
26 }
27 },
28 {
29 "id": "password.submit.label",
30 "defaultMessage": "!!!Submit",
31 "file": "src/components/auth/Password.js",
32 "start": {
33 "line": 22,
34 "column": 21
35 },
36 "end": {
37 "line": 25,
38 "column": 3
39 }
40 },
41 {
42 "id": "password.successInfo",
43 "defaultMessage": "!!!Your new password was sent to your email address",
44 "file": "src/components/auth/Password.js",
45 "start": {
46 "line": 26,
47 "column": 15
48 },
49 "end": {
50 "line": 29,
51 "column": 3
52 }
53 },
54 {
55 "id": "password.noUser",
56 "defaultMessage": "!!!No user affiliated with that email address",
57 "file": "src/components/auth/Password.js",
58 "start": {
59 "line": 30,
60 "column": 10
61 },
62 "end": {
63 "line": 33,
64 "column": 3
65 }
66 },
67 {
68 "id": "password.link.signup",
69 "defaultMessage": "!!!Create a free account",
70 "file": "src/components/auth/Password.js",
71 "start": {
72 "line": 34,
73 "column": 14
74 },
75 "end": {
76 "line": 37,
77 "column": 3
78 }
79 },
80 {
81 "id": "password.link.login",
82 "defaultMessage": "!!!Sign in to your account",
83 "file": "src/components/auth/Password.js",
84 "start": {
85 "line": 38,
86 "column": 13
87 },
88 "end": {
89 "line": 41,
90 "column": 3
91 }
92 }
93] \ No newline at end of file
diff --git a/translations/messages/src/components/auth/Pricing.json b/translations/messages/src/components/auth/Pricing.json
new file mode 100644
index 000000000..f711a55b4
--- /dev/null
+++ b/translations/messages/src/components/auth/Pricing.json
@@ -0,0 +1,54 @@
1[
2 {
3 "id": "pricing.headline",
4 "defaultMessage": "!!!Support Franz",
5 "file": "src/components/auth/Pricing.js",
6 "start": {
7 "line": 13,
8 "column": 12
9 },
10 "end": {
11 "line": 16,
12 "column": 3
13 }
14 },
15 {
16 "id": "pricing.support.label",
17 "defaultMessage": "!!!Select your support plan",
18 "file": "src/components/auth/Pricing.js",
19 "start": {
20 "line": 17,
21 "column": 23
22 },
23 "end": {
24 "line": 20,
25 "column": 3
26 }
27 },
28 {
29 "id": "pricing.submit.label",
30 "defaultMessage": "!!!Support the development of Franz",
31 "file": "src/components/auth/Pricing.js",
32 "start": {
33 "line": 21,
34 "column": 21
35 },
36 "end": {
37 "line": 24,
38 "column": 3
39 }
40 },
41 {
42 "id": "pricing.link.skipPayment",
43 "defaultMessage": "!!!I don't want to support the development of Franz.",
44 "file": "src/components/auth/Pricing.js",
45 "start": {
46 "line": 25,
47 "column": 15
48 },
49 "end": {
50 "line": 28,
51 "column": 3
52 }
53 }
54] \ No newline at end of file
diff --git a/translations/messages/src/components/auth/Signup.json b/translations/messages/src/components/auth/Signup.json
new file mode 100644
index 000000000..a09745048
--- /dev/null
+++ b/translations/messages/src/components/auth/Signup.json
@@ -0,0 +1,158 @@
1[
2 {
3 "id": "signup.headline",
4 "defaultMessage": "!!!Sign up",
5 "file": "src/components/auth/Signup.js",
6 "start": {
7 "line": 18,
8 "column": 12
9 },
10 "end": {
11 "line": 21,
12 "column": 3
13 }
14 },
15 {
16 "id": "signup.firstname.label",
17 "defaultMessage": "!!!Firstname",
18 "file": "src/components/auth/Signup.js",
19 "start": {
20 "line": 22,
21 "column": 18
22 },
23 "end": {
24 "line": 25,
25 "column": 3
26 }
27 },
28 {
29 "id": "signup.lastname.label",
30 "defaultMessage": "!!!Lastname",
31 "file": "src/components/auth/Signup.js",
32 "start": {
33 "line": 26,
34 "column": 17
35 },
36 "end": {
37 "line": 29,
38 "column": 3
39 }
40 },
41 {
42 "id": "signup.email.label",
43 "defaultMessage": "!!!Email address",
44 "file": "src/components/auth/Signup.js",
45 "start": {
46 "line": 30,
47 "column": 14
48 },
49 "end": {
50 "line": 33,
51 "column": 3
52 }
53 },
54 {
55 "id": "signup.company.label",
56 "defaultMessage": "!!!Company",
57 "file": "src/components/auth/Signup.js",
58 "start": {
59 "line": 34,
60 "column": 16
61 },
62 "end": {
63 "line": 37,
64 "column": 3
65 }
66 },
67 {
68 "id": "signup.password.label",
69 "defaultMessage": "!!!Password",
70 "file": "src/components/auth/Signup.js",
71 "start": {
72 "line": 38,
73 "column": 17
74 },
75 "end": {
76 "line": 41,
77 "column": 3
78 }
79 },
80 {
81 "id": "signup.legal.info",
82 "defaultMessage": "!!!By creating a Franz account you accept the",
83 "file": "src/components/auth/Signup.js",
84 "start": {
85 "line": 42,
86 "column": 13
87 },
88 "end": {
89 "line": 45,
90 "column": 3
91 }
92 },
93 {
94 "id": "signup.legal.terms",
95 "defaultMessage": "!!!Terms of service",
96 "file": "src/components/auth/Signup.js",
97 "start": {
98 "line": 46,
99 "column": 9
100 },
101 "end": {
102 "line": 49,
103 "column": 3
104 }
105 },
106 {
107 "id": "signup.legal.privacy",
108 "defaultMessage": "!!!Privacy Statement",
109 "file": "src/components/auth/Signup.js",
110 "start": {
111 "line": 50,
112 "column": 11
113 },
114 "end": {
115 "line": 53,
116 "column": 3
117 }
118 },
119 {
120 "id": "signup.submit.label",
121 "defaultMessage": "!!!Create account",
122 "file": "src/components/auth/Signup.js",
123 "start": {
124 "line": 54,
125 "column": 21
126 },
127 "end": {
128 "line": 57,
129 "column": 3
130 }
131 },
132 {
133 "id": "signup.link.login",
134 "defaultMessage": "!!!Already have an account, sign in?",
135 "file": "src/components/auth/Signup.js",
136 "start": {
137 "line": 58,
138 "column": 13
139 },
140 "end": {
141 "line": 61,
142 "column": 3
143 }
144 },
145 {
146 "id": "signup.emailDuplicate",
147 "defaultMessage": "!!!A user with that email address already exists",
148 "file": "src/components/auth/Signup.js",
149 "start": {
150 "line": 62,
151 "column": 18
152 },
153 "end": {
154 "line": 65,
155 "column": 3
156 }
157 }
158] \ No newline at end of file
diff --git a/translations/messages/src/components/auth/Welcome.json b/translations/messages/src/components/auth/Welcome.json
new file mode 100644
index 000000000..b4d2ce689
--- /dev/null
+++ b/translations/messages/src/components/auth/Welcome.json
@@ -0,0 +1,28 @@
1[
2 {
3 "id": "welcome.signupButton",
4 "defaultMessage": "!!!Create a free account",
5 "file": "src/components/auth/Welcome.js",
6 "start": {
7 "line": 9,
8 "column": 16
9 },
10 "end": {
11 "line": 12,
12 "column": 3
13 }
14 },
15 {
16 "id": "welcome.loginButton",
17 "defaultMessage": "!!!Login to your account",
18 "file": "src/components/auth/Welcome.js",
19 "start": {
20 "line": 13,
21 "column": 15
22 },
23 "end": {
24 "line": 16,
25 "column": 3
26 }
27 }
28] \ No newline at end of file
diff --git a/translations/messages/src/components/layout/AppLayout.json b/translations/messages/src/components/layout/AppLayout.json
new file mode 100644
index 000000000..07603d062
--- /dev/null
+++ b/translations/messages/src/components/layout/AppLayout.json
@@ -0,0 +1,80 @@
1[
2 {
3 "id": "infobar.servicesUpdated",
4 "defaultMessage": "!!!Your services have been updated.",
5 "file": "src/components/layout/AppLayout.js",
6 "start": {
7 "line": 22,
8 "column": 19
9 },
10 "end": {
11 "line": 25,
12 "column": 3
13 }
14 },
15 {
16 "id": "infobar.updateAvailable",
17 "defaultMessage": "!!!A new update for Franz is available.",
18 "file": "src/components/layout/AppLayout.js",
19 "start": {
20 "line": 26,
21 "column": 19
22 },
23 "end": {
24 "line": 29,
25 "column": 3
26 }
27 },
28 {
29 "id": "infobar.buttonReloadServices",
30 "defaultMessage": "!!!Reload services",
31 "file": "src/components/layout/AppLayout.js",
32 "start": {
33 "line": 30,
34 "column": 24
35 },
36 "end": {
37 "line": 33,
38 "column": 3
39 }
40 },
41 {
42 "id": "infobar.buttonChangelog",
43 "defaultMessage": "!!!Changelog",
44 "file": "src/components/layout/AppLayout.js",
45 "start": {
46 "line": 34,
47 "column": 13
48 },
49 "end": {
50 "line": 37,
51 "column": 3
52 }
53 },
54 {
55 "id": "infobar.buttonInstallUpdate",
56 "defaultMessage": "!!!Restart & install update",
57 "file": "src/components/layout/AppLayout.js",
58 "start": {
59 "line": 38,
60 "column": 23
61 },
62 "end": {
63 "line": 41,
64 "column": 3
65 }
66 },
67 {
68 "id": "infobar.requiredRequestsFailed",
69 "defaultMessage": "!!!Could not load services and user information",
70 "file": "src/components/layout/AppLayout.js",
71 "start": {
72 "line": 42,
73 "column": 26
74 },
75 "end": {
76 "line": 45,
77 "column": 3
78 }
79 }
80] \ No newline at end of file
diff --git a/translations/messages/src/components/layout/Sidebar.json b/translations/messages/src/components/layout/Sidebar.json
new file mode 100644
index 000000000..7aa00a186
--- /dev/null
+++ b/translations/messages/src/components/layout/Sidebar.json
@@ -0,0 +1,54 @@
1[
2 {
3 "id": "sidebar.settings",
4 "defaultMessage": "!!!Settings",
5 "file": "src/components/layout/Sidebar.js",
6 "start": {
7 "line": 11,
8 "column": 12
9 },
10 "end": {
11 "line": 14,
12 "column": 3
13 }
14 },
15 {
16 "id": "sidebar.addNewService",
17 "defaultMessage": "!!!Add new service",
18 "file": "src/components/layout/Sidebar.js",
19 "start": {
20 "line": 15,
21 "column": 17
22 },
23 "end": {
24 "line": 18,
25 "column": 3
26 }
27 },
28 {
29 "id": "sidebar.muteApp",
30 "defaultMessage": "!!!Disable notifications & audio",
31 "file": "src/components/layout/Sidebar.js",
32 "start": {
33 "line": 19,
34 "column": 8
35 },
36 "end": {
37 "line": 22,
38 "column": 3
39 }
40 },
41 {
42 "id": "sidebar.unmuteApp",
43 "defaultMessage": "!!!Enable notifications & audio",
44 "file": "src/components/layout/Sidebar.js",
45 "start": {
46 "line": 23,
47 "column": 10
48 },
49 "end": {
50 "line": 26,
51 "column": 3
52 }
53 }
54] \ No newline at end of file
diff --git a/translations/messages/src/components/services/content/ErrorHandlers/WebviewErrorHandler.json b/translations/messages/src/components/services/content/ErrorHandlers/WebviewErrorHandler.json
new file mode 100644
index 000000000..c8fe802df
--- /dev/null
+++ b/translations/messages/src/components/services/content/ErrorHandlers/WebviewErrorHandler.json
@@ -0,0 +1,67 @@
1[
2 {
3 "id": "service.errorHandler.headline",
4 "defaultMessage": "!!!Oh no!",
5 "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js",
6 "start": {
7 "line": 12,
8 "column": 12
9 },
10 "end": {
11 "line": 15,
12 "column": 3
13 }
14 },
15 {
16 "id": "service.errorHandler.text",
17 "defaultMessage": "!!!{name} has failed to load.",
18 "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js",
19 "start": {
20 "line": 16,
21 "column": 8
22 },
23 "end": {
24 "line": 19,
25 "column": 3
26 }
27 },
28 {
29 "id": "service.errorHandler.action",
30 "defaultMessage": "!!!Reload {name}",
31 "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js",
32 "start": {
33 "line": 20,
34 "column": 10
35 },
36 "end": {
37 "line": 23,
38 "column": 3
39 }
40 },
41 {
42 "id": "service.errorHandler.editAction",
43 "defaultMessage": "!!!Edit {name}",
44 "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js",
45 "start": {
46 "line": 24,
47 "column": 14
48 },
49 "end": {
50 "line": 27,
51 "column": 3
52 }
53 },
54 {
55 "id": "service.errorHandler.message",
56 "defaultMessage": "!!!Error:",
57 "file": "src/components/services/content/ErrorHandlers/WebviewErrorHandler.js",
58 "start": {
59 "line": 28,
60 "column": 16
61 },
62 "end": {
63 "line": 31,
64 "column": 3
65 }
66 }
67] \ No newline at end of file
diff --git a/translations/messages/src/components/services/content/ServiceDisabled.json b/translations/messages/src/components/services/content/ServiceDisabled.json
new file mode 100644
index 000000000..8bfad28c7
--- /dev/null
+++ b/translations/messages/src/components/services/content/ServiceDisabled.json
@@ -0,0 +1,28 @@
1[
2 {
3 "id": "service.disabledHandler.headline",
4 "defaultMessage": "!!!{name} is disabled",
5 "file": "src/components/services/content/ServiceDisabled.js",
6 "start": {
7 "line": 9,
8 "column": 12
9 },
10 "end": {
11 "line": 12,
12 "column": 3
13 }
14 },
15 {
16 "id": "service.disabledHandler.action",
17 "defaultMessage": "!!!Enable {name}",
18 "file": "src/components/services/content/ServiceDisabled.js",
19 "start": {
20 "line": 13,
21 "column": 10
22 },
23 "end": {
24 "line": 16,
25 "column": 3
26 }
27 }
28] \ No newline at end of file
diff --git a/translations/messages/src/components/services/content/Services.json b/translations/messages/src/components/services/content/Services.json
new file mode 100644
index 000000000..884ab0c90
--- /dev/null
+++ b/translations/messages/src/components/services/content/Services.json
@@ -0,0 +1,28 @@
1[
2 {
3 "id": "services.welcome",
4 "defaultMessage": "!!!Welcome to Franz",
5 "file": "src/components/services/content/Services.js",
6 "start": {
7 "line": 11,
8 "column": 11
9 },
10 "end": {
11 "line": 14,
12 "column": 3
13 }
14 },
15 {
16 "id": "services.getStarted",
17 "defaultMessage": "!!!Get started",
18 "file": "src/components/services/content/Services.js",
19 "start": {
20 "line": 15,
21 "column": 14
22 },
23 "end": {
24 "line": 18,
25 "column": 3
26 }
27 }
28] \ No newline at end of file
diff --git a/translations/messages/src/components/services/content/WebviewCrashHandler.json b/translations/messages/src/components/services/content/WebviewCrashHandler.json
new file mode 100644
index 000000000..c3d6c41a5
--- /dev/null
+++ b/translations/messages/src/components/services/content/WebviewCrashHandler.json
@@ -0,0 +1,54 @@
1[
2 {
3 "id": "service.crashHandler.headline",
4 "defaultMessage": "!!!Oh no!",
5 "file": "src/components/services/content/WebviewCrashHandler.js",
6 "start": {
7 "line": 10,
8 "column": 12
9 },
10 "end": {
11 "line": 13,
12 "column": 3
13 }
14 },
15 {
16 "id": "service.crashHandler.text",
17 "defaultMessage": "!!!{name} has caused an error.",
18 "file": "src/components/services/content/WebviewCrashHandler.js",
19 "start": {
20 "line": 14,
21 "column": 8
22 },
23 "end": {
24 "line": 17,
25 "column": 3
26 }
27 },
28 {
29 "id": "service.crashHandler.action",
30 "defaultMessage": "!!!Reload {name}",
31 "file": "src/components/services/content/WebviewCrashHandler.js",
32 "start": {
33 "line": 18,
34 "column": 10
35 },
36 "end": {
37 "line": 21,
38 "column": 3
39 }
40 },
41 {
42 "id": "service.crashHandler.autoReload",
43 "defaultMessage": "!!!Trying to automatically restore {name} in {seconds} seconds",
44 "file": "src/components/services/content/WebviewCrashHandler.js",
45 "start": {
46 "line": 22,
47 "column": 14
48 },
49 "end": {
50 "line": 25,
51 "column": 3
52 }
53 }
54] \ No newline at end of file
diff --git a/translations/messages/src/components/services/tabs/TabItem.json b/translations/messages/src/components/services/tabs/TabItem.json
new file mode 100644
index 000000000..08a07845c
--- /dev/null
+++ b/translations/messages/src/components/services/tabs/TabItem.json
@@ -0,0 +1,119 @@
1[
2 {
3 "id": "tabs.item.reload",
4 "defaultMessage": "!!!Reload",
5 "file": "src/components/services/tabs/TabItem.js",
6 "start": {
7 "line": 15,
8 "column": 10
9 },
10 "end": {
11 "line": 18,
12 "column": 3
13 }
14 },
15 {
16 "id": "tabs.item.edit",
17 "defaultMessage": "!!!Edit",
18 "file": "src/components/services/tabs/TabItem.js",
19 "start": {
20 "line": 19,
21 "column": 8
22 },
23 "end": {
24 "line": 22,
25 "column": 3
26 }
27 },
28 {
29 "id": "tabs.item.disableNotifications",
30 "defaultMessage": "!!!Disable notifications",
31 "file": "src/components/services/tabs/TabItem.js",
32 "start": {
33 "line": 23,
34 "column": 24
35 },
36 "end": {
37 "line": 26,
38 "column": 3
39 }
40 },
41 {
42 "id": "tabs.item.enableNotification",
43 "defaultMessage": "!!!Enable notifications",
44 "file": "src/components/services/tabs/TabItem.js",
45 "start": {
46 "line": 27,
47 "column": 23
48 },
49 "end": {
50 "line": 30,
51 "column": 3
52 }
53 },
54 {
55 "id": "tabs.item.disableAudio",
56 "defaultMessage": "!!!Disable audio",
57 "file": "src/components/services/tabs/TabItem.js",
58 "start": {
59 "line": 31,
60 "column": 16
61 },
62 "end": {
63 "line": 34,
64 "column": 3
65 }
66 },
67 {
68 "id": "tabs.item.enableAudio",
69 "defaultMessage": "!!!Enable audio",
70 "file": "src/components/services/tabs/TabItem.js",
71 "start": {
72 "line": 35,
73 "column": 15
74 },
75 "end": {
76 "line": 38,
77 "column": 3
78 }
79 },
80 {
81 "id": "tabs.item.disableService",
82 "defaultMessage": "!!!Disable Service",
83 "file": "src/components/services/tabs/TabItem.js",
84 "start": {
85 "line": 39,
86 "column": 18
87 },
88 "end": {
89 "line": 42,
90 "column": 3
91 }
92 },
93 {
94 "id": "tabs.item.enableService",
95 "defaultMessage": "!!!Enable Service",
96 "file": "src/components/services/tabs/TabItem.js",
97 "start": {
98 "line": 43,
99 "column": 17
100 },
101 "end": {
102 "line": 46,
103 "column": 3
104 }
105 },
106 {
107 "id": "tabs.item.deleteService",
108 "defaultMessage": "!!!Delete Service",
109 "file": "src/components/services/tabs/TabItem.js",
110 "start": {
111 "line": 47,
112 "column": 17
113 },
114 "end": {
115 "line": 50,
116 "column": 3
117 }
118 }
119] \ No newline at end of file
diff --git a/translations/messages/src/components/settings/account/AccountDashboard.json b/translations/messages/src/components/settings/account/AccountDashboard.json
new file mode 100644
index 000000000..271328792
--- /dev/null
+++ b/translations/messages/src/components/settings/account/AccountDashboard.json
@@ -0,0 +1,210 @@
1[
2 {
3 "id": "settings.account.headline",
4 "defaultMessage": "!!!Account",
5 "file": "src/components/settings/account/AccountDashboard.js",
6 "start": {
7 "line": 15,
8 "column": 12
9 },
10 "end": {
11 "line": 18,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.account.headlineSubscription",
17 "defaultMessage": "!!!Your Subscription",
18 "file": "src/components/settings/account/AccountDashboard.js",
19 "start": {
20 "line": 19,
21 "column": 24
22 },
23 "end": {
24 "line": 22,
25 "column": 3
26 }
27 },
28 {
29 "id": "settings.account.headlineUpgrade",
30 "defaultMessage": "!!!Upgrade your Account",
31 "file": "src/components/settings/account/AccountDashboard.js",
32 "start": {
33 "line": 23,
34 "column": 19
35 },
36 "end": {
37 "line": 26,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.account.headlineInvoices",
43 "defaultMessage": "!!Invoices",
44 "file": "src/components/settings/account/AccountDashboard.js",
45 "start": {
46 "line": 27,
47 "column": 20
48 },
49 "end": {
50 "line": 30,
51 "column": 3
52 }
53 },
54 {
55 "id": "settings.account.headlineDangerZone",
56 "defaultMessage": "!!Danger Zone",
57 "file": "src/components/settings/account/AccountDashboard.js",
58 "start": {
59 "line": 31,
60 "column": 22
61 },
62 "end": {
63 "line": 34,
64 "column": 3
65 }
66 },
67 {
68 "id": "settings.account.manageSubscription.label",
69 "defaultMessage": "!!!Manage your subscription",
70 "file": "src/components/settings/account/AccountDashboard.js",
71 "start": {
72 "line": 35,
73 "column": 33
74 },
75 "end": {
76 "line": 38,
77 "column": 3
78 }
79 },
80 {
81 "id": "settings.account.accountType.basic",
82 "defaultMessage": "!!!Basic Account",
83 "file": "src/components/settings/account/AccountDashboard.js",
84 "start": {
85 "line": 39,
86 "column": 20
87 },
88 "end": {
89 "line": 42,
90 "column": 3
91 }
92 },
93 {
94 "id": "settings.account.accountType.premium",
95 "defaultMessage": "!!!Premium Supporter Account",
96 "file": "src/components/settings/account/AccountDashboard.js",
97 "start": {
98 "line": 43,
99 "column": 22
100 },
101 "end": {
102 "line": 46,
103 "column": 3
104 }
105 },
106 {
107 "id": "settings.account.accountType.enterprise",
108 "defaultMessage": "!!!Enterprise Account",
109 "file": "src/components/settings/account/AccountDashboard.js",
110 "start": {
111 "line": 47,
112 "column": 25
113 },
114 "end": {
115 "line": 50,
116 "column": 3
117 }
118 },
119 {
120 "id": "settings.account.account.editButton",
121 "defaultMessage": "!!!Edit Account",
122 "file": "src/components/settings/account/AccountDashboard.js",
123 "start": {
124 "line": 51,
125 "column": 21
126 },
127 "end": {
128 "line": 54,
129 "column": 3
130 }
131 },
132 {
133 "id": "settings.account.invoiceDownload",
134 "defaultMessage": "!!!Download",
135 "file": "src/components/settings/account/AccountDashboard.js",
136 "start": {
137 "line": 55,
138 "column": 19
139 },
140 "end": {
141 "line": 58,
142 "column": 3
143 }
144 },
145 {
146 "id": "settings.account.userInfoRequestFailed",
147 "defaultMessage": "!!!Could not load user information",
148 "file": "src/components/settings/account/AccountDashboard.js",
149 "start": {
150 "line": 59,
151 "column": 25
152 },
153 "end": {
154 "line": 62,
155 "column": 3
156 }
157 },
158 {
159 "id": "settings.account.tryReloadUserInfoRequest",
160 "defaultMessage": "!!!Try again",
161 "file": "src/components/settings/account/AccountDashboard.js",
162 "start": {
163 "line": 63,
164 "column": 28
165 },
166 "end": {
167 "line": 66,
168 "column": 3
169 }
170 },
171 {
172 "id": "settings.account.deleteAccount",
173 "defaultMessage": "!!!Delete account",
174 "file": "src/components/settings/account/AccountDashboard.js",
175 "start": {
176 "line": 67,
177 "column": 17
178 },
179 "end": {
180 "line": 70,
181 "column": 3
182 }
183 },
184 {
185 "id": "settings.account.deleteInfo",
186 "defaultMessage": "!!!If you don't need your Franz account any longer, you can delete your account and all related data here.",
187 "file": "src/components/settings/account/AccountDashboard.js",
188 "start": {
189 "line": 71,
190 "column": 14
191 },
192 "end": {
193 "line": 74,
194 "column": 3
195 }
196 },
197 {
198 "id": "settings.account.deleteEmailSent",
199 "defaultMessage": "!!!You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!",
200 "file": "src/components/settings/account/AccountDashboard.js",
201 "start": {
202 "line": 75,
203 "column": 19
204 },
205 "end": {
206 "line": 78,
207 "column": 3
208 }
209 }
210] \ No newline at end of file
diff --git a/translations/messages/src/components/settings/navigation/SettingsNavigation.json b/translations/messages/src/components/settings/navigation/SettingsNavigation.json
new file mode 100644
index 000000000..785ce9f29
--- /dev/null
+++ b/translations/messages/src/components/settings/navigation/SettingsNavigation.json
@@ -0,0 +1,80 @@
1[
2 {
3 "id": "settings.navigation.availableServices",
4 "defaultMessage": "!!!Available services",
5 "file": "src/components/settings/navigation/SettingsNavigation.js",
6 "start": {
7 "line": 9,
8 "column": 21
9 },
10 "end": {
11 "line": 12,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.navigation.yourServices",
17 "defaultMessage": "!!!Your services",
18 "file": "src/components/settings/navigation/SettingsNavigation.js",
19 "start": {
20 "line": 13,
21 "column": 16
22 },
23 "end": {
24 "line": 16,
25 "column": 3
26 }
27 },
28 {
29 "id": "settings.navigation.account",
30 "defaultMessage": "!!!Account",
31 "file": "src/components/settings/navigation/SettingsNavigation.js",
32 "start": {
33 "line": 17,
34 "column": 11
35 },
36 "end": {
37 "line": 20,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.navigation.settings",
43 "defaultMessage": "!!!Settings",
44 "file": "src/components/settings/navigation/SettingsNavigation.js",
45 "start": {
46 "line": 21,
47 "column": 12
48 },
49 "end": {
50 "line": 24,
51 "column": 3
52 }
53 },
54 {
55 "id": "settings.navigation.inviteFriends",
56 "defaultMessage": "!!!Invite Friends",
57 "file": "src/components/settings/navigation/SettingsNavigation.js",
58 "start": {
59 "line": 25,
60 "column": 17
61 },
62 "end": {
63 "line": 28,
64 "column": 3
65 }
66 },
67 {
68 "id": "settings.navigation.logout",
69 "defaultMessage": "!!!Logout",
70 "file": "src/components/settings/navigation/SettingsNavigation.js",
71 "start": {
72 "line": 29,
73 "column": 10
74 },
75 "end": {
76 "line": 32,
77 "column": 3
78 }
79 }
80] \ No newline at end of file
diff --git a/translations/messages/src/components/settings/recipes/RecipesDashboard.json b/translations/messages/src/components/settings/recipes/RecipesDashboard.json
new file mode 100644
index 000000000..7d9ed3283
--- /dev/null
+++ b/translations/messages/src/components/settings/recipes/RecipesDashboard.json
@@ -0,0 +1,106 @@
1[
2 {
3 "id": "settings.recipes.headline",
4 "defaultMessage": "!!!Available Services",
5 "file": "src/components/settings/recipes/RecipesDashboard.js",
6 "start": {
7 "line": 15,
8 "column": 12
9 },
10 "end": {
11 "line": 18,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.searchService",
17 "defaultMessage": "!!!Search service",
18 "file": "src/components/settings/recipes/RecipesDashboard.js",
19 "start": {
20 "line": 19,
21 "column": 17
22 },
23 "end": {
24 "line": 22,
25 "column": 3
26 }
27 },
28 {
29 "id": "settings.recipes.mostPopular",
30 "defaultMessage": "!!!Most popular",
31 "file": "src/components/settings/recipes/RecipesDashboard.js",
32 "start": {
33 "line": 23,
34 "column": 22
35 },
36 "end": {
37 "line": 26,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.recipes.all",
43 "defaultMessage": "!!!All services",
44 "file": "src/components/settings/recipes/RecipesDashboard.js",
45 "start": {
46 "line": 27,
47 "column": 14
48 },
49 "end": {
50 "line": 30,
51 "column": 3
52 }
53 },
54 {
55 "id": "settings.recipes.dev",
56 "defaultMessage": "!!!Development",
57 "file": "src/components/settings/recipes/RecipesDashboard.js",
58 "start": {
59 "line": 31,
60 "column": 14
61 },
62 "end": {
63 "line": 34,
64 "column": 3
65 }
66 },
67 {
68 "id": "settings.recipes.nothingFound",
69 "defaultMessage": "!!!Sorry, but no service matched your search term.",
70 "file": "src/components/settings/recipes/RecipesDashboard.js",
71 "start": {
72 "line": 35,
73 "column": 16
74 },
75 "end": {
76 "line": 38,
77 "column": 3
78 }
79 },
80 {
81 "id": "settings.recipes.servicesSuccessfulAddedInfo",
82 "defaultMessage": "!!!Service successfully added",
83 "file": "src/components/settings/recipes/RecipesDashboard.js",
84 "start": {
85 "line": 39,
86 "column": 31
87 },
88 "end": {
89 "line": 42,
90 "column": 3
91 }
92 },
93 {
94 "id": "settings.recipes.missingService",
95 "defaultMessage": "!!!Missing a service?",
96 "file": "src/components/settings/recipes/RecipesDashboard.js",
97 "start": {
98 "line": 43,
99 "column": 18
100 },
101 "end": {
102 "line": 46,
103 "column": 3
104 }
105 }
106] \ No newline at end of file
diff --git a/translations/messages/src/components/settings/services/EditServiceForm.json b/translations/messages/src/components/settings/services/EditServiceForm.json
new file mode 100644
index 000000000..42b741b7a
--- /dev/null
+++ b/translations/messages/src/components/settings/services/EditServiceForm.json
@@ -0,0 +1,288 @@
1[
2 {
3 "id": "settings.service.form.saveButton",
4 "defaultMessage": "!!!Save service",
5 "file": "src/components/settings/services/EditServiceForm.js",
6 "start": {
7 "line": 22,
8 "column": 15
9 },
10 "end": {
11 "line": 25,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.service.form.deleteButton",
17 "defaultMessage": "!!!Delete Service",
18 "file": "src/components/settings/services/EditServiceForm.js",
19 "start": {
20 "line": 26,
21 "column": 17
22 },
23 "end": {
24 "line": 29,
25 "column": 3
26 }
27 },
28 {
29 "id": "settings.service.form.availableServices",
30 "defaultMessage": "!!!Available services",
31 "file": "src/components/settings/services/EditServiceForm.js",
32 "start": {
33 "line": 30,
34 "column": 21
35 },
36 "end": {
37 "line": 33,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.service.form.yourServices",
43 "defaultMessage": "!!!Your services",
44 "file": "src/components/settings/services/EditServiceForm.js",
45 "start": {
46 "line": 34,
47 "column": 16
48 },
49 "end": {
50 "line": 37,
51 "column": 3
52 }
53 },
54 {
55 "id": "settings.service.form.addServiceHeadline",
56 "defaultMessage": "!!!Add {name}",
57 "file": "src/components/settings/services/EditServiceForm.js",
58 "start": {
59 "line": 38,
60 "column": 22
61 },
62 "end": {
63 "line": 41,
64 "column": 3
65 }
66 },
67 {
68 "id": "settings.service.form.editServiceHeadline",
69 "defaultMessage": "!!!Edit {name}",
70 "file": "src/components/settings/services/EditServiceForm.js",
71 "start": {
72 "line": 42,
73 "column": 23
74 },
75 "end": {
76 "line": 45,
77 "column": 3
78 }
79 },
80 {
81 "id": "settings.service.form.tabHosted",
82 "defaultMessage": "!!!Hosted",
83 "file": "src/components/settings/services/EditServiceForm.js",
84 "start": {
85 "line": 46,
86 "column": 13
87 },
88 "end": {
89 "line": 49,
90 "column": 3
91 }
92 },
93 {
94 "id": "settings.service.form.tabOnPremise",
95 "defaultMessage": "!!!Self hosted ⭐️",
96 "file": "src/components/settings/services/EditServiceForm.js",
97 "start": {
98 "line": 50,
99 "column": 16
100 },
101 "end": {
102 "line": 53,
103 "column": 3
104 }
105 },
106 {
107 "id": "settings.service.form.useHostedService",
108 "defaultMessage": "!!!Use the hosted {name} service.",
109 "file": "src/components/settings/services/EditServiceForm.js",
110 "start": {
111 "line": 54,
112 "column": 20
113 },
114 "end": {
115 "line": 57,
116 "column": 3
117 }
118 },
119 {
120 "id": "settings.service.form.customUrlValidationError",
121 "defaultMessage": "!!!Could not validate custom {name} server.",
122 "file": "src/components/settings/services/EditServiceForm.js",
123 "start": {
124 "line": 58,
125 "column": 28
126 },
127 "end": {
128 "line": 61,
129 "column": 3
130 }
131 },
132 {
133 "id": "settings.service.form.customUrlPremiumInfo",
134 "defaultMessage": "!!!To add self hosted services, you need a Franz Premium Supporter Account.",
135 "file": "src/components/settings/services/EditServiceForm.js",
136 "start": {
137 "line": 62,
138 "column": 24
139 },
140 "end": {
141 "line": 65,
142 "column": 3
143 }
144 },
145 {
146 "id": "settings.service.form.customUrlUpgradeAccount",
147 "defaultMessage": "!!!Upgrade your account",
148 "file": "src/components/settings/services/EditServiceForm.js",
149 "start": {
150 "line": 66,
151 "column": 27
152 },
153 "end": {
154 "line": 69,
155 "column": 3
156 }
157 },
158 {
159 "id": "settings.service.form.indirectMessageInfo",
160 "defaultMessage": "!!!You will be notified about all new messages in a channel, not just @username, @channel, @here, ...",
161 "file": "src/components/settings/services/EditServiceForm.js",
162 "start": {
163 "line": 70,
164 "column": 23
165 },
166 "end": {
167 "line": 73,
168 "column": 3
169 }
170 },
171 {
172 "id": "settings.service.form.isMutedInfo",
173 "defaultMessage": "!!!When disabled, all notification sounds and audio playback are muted",
174 "file": "src/components/settings/services/EditServiceForm.js",
175 "start": {
176 "line": 74,
177 "column": 15
178 },
179 "end": {
180 "line": 77,
181 "column": 3
182 }
183 },
184 {
185 "id": "settings.service.form.headlineNotifications",
186 "defaultMessage": "!!!Notifications",
187 "file": "src/components/settings/services/EditServiceForm.js",
188 "start": {
189 "line": 78,
190 "column": 25
191 },
192 "end": {
193 "line": 81,
194 "column": 3
195 }
196 },
197 {
198 "id": "settings.service.form.headlineBadges",
199 "defaultMessage": "!!!Unread message badges",
200 "file": "src/components/settings/services/EditServiceForm.js",
201 "start": {
202 "line": 82,
203 "column": 18
204 },
205 "end": {
206 "line": 85,
207 "column": 3
208 }
209 },
210 {
211 "id": "settings.service.form.headlineGeneral",
212 "defaultMessage": "!!!General",
213 "file": "src/components/settings/services/EditServiceForm.js",
214 "start": {
215 "line": 86,
216 "column": 19
217 },
218 "end": {
219 "line": 89,
220 "column": 3
221 }
222 },
223 {
224 "id": "settings.service.form.iconDelete",
225 "defaultMessage": "!!!Delete",
226 "file": "src/components/settings/services/EditServiceForm.js",
227 "start": {
228 "line": 90,
229 "column": 14
230 },
231 "end": {
232 "line": 93,
233 "column": 3
234 }
235 },
236 {
237 "id": "settings.service.form.iconUpload",
238 "defaultMessage": "!!!Drop your image, or click here",
239 "file": "src/components/settings/services/EditServiceForm.js",
240 "start": {
241 "line": 94,
242 "column": 14
243 },
244 "end": {
245 "line": 97,
246 "column": 3
247 }
248 },
249 {
250 "id": "settings.service.form.proxy.headline",
251 "defaultMessage": "!!!HTTP/HTTPS Proxy Settings",
252 "file": "src/components/settings/services/EditServiceForm.js",
253 "start": {
254 "line": 98,
255 "column": 17
256 },
257 "end": {
258 "line": 101,
259 "column": 3
260 }
261 },
262 {
263 "id": "settings.service.form.proxy.restartInfo",
264 "defaultMessage": "!!!Please restart Franz after changing proxy Settings.",
265 "file": "src/components/settings/services/EditServiceForm.js",
266 "start": {
267 "line": 102,
268 "column": 20
269 },
270 "end": {
271 "line": 105,
272 "column": 3
273 }
274 },
275 {
276 "id": "settings.service.form.proxy.info",
277 "defaultMessage": "!!!Proxy settings will not be synchronized with the Franz servers.",
278 "file": "src/components/settings/services/EditServiceForm.js",
279 "start": {
280 "line": 106,
281 "column": 13
282 },
283 "end": {
284 "line": 109,
285 "column": 3
286 }
287 }
288] \ No newline at end of file
diff --git a/translations/messages/src/components/settings/services/ServiceError.json b/translations/messages/src/components/settings/services/ServiceError.json
new file mode 100644
index 000000000..648fc5b3e
--- /dev/null
+++ b/translations/messages/src/components/settings/services/ServiceError.json
@@ -0,0 +1,54 @@
1[
2 {
3 "id": "settings.service.error.headline",
4 "defaultMessage": "!!!Error",
5 "file": "src/components/settings/services/ServiceError.js",
6 "start": {
7 "line": 10,
8 "column": 12
9 },
10 "end": {
11 "line": 13,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.service.error.goBack",
17 "defaultMessage": "!!!Back to services",
18 "file": "src/components/settings/services/ServiceError.js",
19 "start": {
20 "line": 14,
21 "column": 10
22 },
23 "end": {
24 "line": 17,
25 "column": 3
26 }
27 },
28 {
29 "id": "settings.service.form.availableServices",
30 "defaultMessage": "!!!Available services",
31 "file": "src/components/settings/services/ServiceError.js",
32 "start": {
33 "line": 18,
34 "column": 21
35 },
36 "end": {
37 "line": 21,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.service.error.message",
43 "defaultMessage": "!!!Could not load service recipe.",
44 "file": "src/components/settings/services/ServiceError.js",
45 "start": {
46 "line": 22,
47 "column": 16
48 },
49 "end": {
50 "line": 25,
51 "column": 3
52 }
53 }
54] \ No newline at end of file
diff --git a/translations/messages/src/components/settings/services/ServiceItem.json b/translations/messages/src/components/settings/services/ServiceItem.json
new file mode 100644
index 000000000..ffea8b9e1
--- /dev/null
+++ b/translations/messages/src/components/settings/services/ServiceItem.json
@@ -0,0 +1,41 @@
1[
2 {
3 "id": "settings.services.tooltip.isDisabled",
4 "defaultMessage": "!!!Service is disabled",
5 "file": "src/components/settings/services/ServiceItem.js",
6 "start": {
7 "line": 11,
8 "column": 21
9 },
10 "end": {
11 "line": 14,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.services.tooltip.notificationsDisabled",
17 "defaultMessage": "!!!Notifications are disabled",
18 "file": "src/components/settings/services/ServiceItem.js",
19 "start": {
20 "line": 15,
21 "column": 32
22 },
23 "end": {
24 "line": 18,
25 "column": 3
26 }
27 },
28 {
29 "id": "settings.services.tooltip.isMuted",
30 "defaultMessage": "!!!All sounds are muted",
31 "file": "src/components/settings/services/ServiceItem.js",
32 "start": {
33 "line": 19,
34 "column": 18
35 },
36 "end": {
37 "line": 22,
38 "column": 3
39 }
40 }
41] \ No newline at end of file
diff --git a/translations/messages/src/components/settings/services/ServicesDashboard.json b/translations/messages/src/components/settings/services/ServicesDashboard.json
new file mode 100644
index 000000000..3803c6512
--- /dev/null
+++ b/translations/messages/src/components/settings/services/ServicesDashboard.json
@@ -0,0 +1,119 @@
1[
2 {
3 "id": "settings.services.headline",
4 "defaultMessage": "!!!Your services",
5 "file": "src/components/settings/services/ServicesDashboard.js",
6 "start": {
7 "line": 14,
8 "column": 12
9 },
10 "end": {
11 "line": 17,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.searchService",
17 "defaultMessage": "!!!Search service",
18 "file": "src/components/settings/services/ServicesDashboard.js",
19 "start": {
20 "line": 18,
21 "column": 17
22 },
23 "end": {
24 "line": 21,
25 "column": 3
26 }
27 },
28 {
29 "id": "settings.services.noServicesAdded",
30 "defaultMessage": "!!!You haven't added any services yet.",
31 "file": "src/components/settings/services/ServicesDashboard.js",
32 "start": {
33 "line": 22,
34 "column": 19
35 },
36 "end": {
37 "line": 25,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.recipes.nothingFound",
43 "defaultMessage": "!!!Sorry, but no service matched your search term.",
44 "file": "src/components/settings/services/ServicesDashboard.js",
45 "start": {
46 "line": 26,
47 "column": 18
48 },
49 "end": {
50 "line": 29,
51 "column": 3
52 }
53 },
54 {
55 "id": "settings.services.discoverServices",
56 "defaultMessage": "!!!Discover services",
57 "file": "src/components/settings/services/ServicesDashboard.js",
58 "start": {
59 "line": 30,
60 "column": 20
61 },
62 "end": {
63 "line": 33,
64 "column": 3
65 }
66 },
67 {
68 "id": "settings.services.servicesRequestFailed",
69 "defaultMessage": "!!!Could not load your services",
70 "file": "src/components/settings/services/ServicesDashboard.js",
71 "start": {
72 "line": 34,
73 "column": 25
74 },
75 "end": {
76 "line": 37,
77 "column": 3
78 }
79 },
80 {
81 "id": "settings.account.tryReloadServices",
82 "defaultMessage": "!!!Try again",
83 "file": "src/components/settings/services/ServicesDashboard.js",
84 "start": {
85 "line": 38,
86 "column": 21
87 },
88 "end": {
89 "line": 41,
90 "column": 3
91 }
92 },
93 {
94 "id": "settings.services.updatedInfo",
95 "defaultMessage": "!!!Your changes have been saved",
96 "file": "src/components/settings/services/ServicesDashboard.js",
97 "start": {
98 "line": 42,
99 "column": 15
100 },
101 "end": {
102 "line": 45,
103 "column": 3
104 }
105 },
106 {
107 "id": "settings.services.deletedInfo",
108 "defaultMessage": "!!!Service has been deleted",
109 "file": "src/components/settings/services/ServicesDashboard.js",
110 "start": {
111 "line": 46,
112 "column": 15
113 },
114 "end": {
115 "line": 49,
116 "column": 3
117 }
118 }
119] \ No newline at end of file
diff --git a/translations/messages/src/components/settings/settings/EditSettingsForm.json b/translations/messages/src/components/settings/settings/EditSettingsForm.json
new file mode 100644
index 000000000..c64f477be
--- /dev/null
+++ b/translations/messages/src/components/settings/settings/EditSettingsForm.json
@@ -0,0 +1,223 @@
1[
2 {
3 "id": "settings.app.headline",
4 "defaultMessage": "!!!Settings",
5 "file": "src/components/settings/settings/EditSettingsForm.js",
6 "start": {
7 "line": 16,
8 "column": 12
9 },
10 "end": {
11 "line": 19,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.app.headlineGeneral",
17 "defaultMessage": "!!!General",
18 "file": "src/components/settings/settings/EditSettingsForm.js",
19 "start": {
20 "line": 20,
21 "column": 19
22 },
23 "end": {
24 "line": 23,
25 "column": 3
26 }
27 },
28 {
29 "id": "settings.app.headlineLanguage",
30 "defaultMessage": "!!!Language",
31 "file": "src/components/settings/settings/EditSettingsForm.js",
32 "start": {
33 "line": 24,
34 "column": 20
35 },
36 "end": {
37 "line": 27,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.app.headlineUpdates",
43 "defaultMessage": "!!!Updates",
44 "file": "src/components/settings/settings/EditSettingsForm.js",
45 "start": {
46 "line": 28,
47 "column": 19
48 },
49 "end": {
50 "line": 31,
51 "column": 3
52 }
53 },
54 {
55 "id": "settings.app.headlineAppearance",
56 "defaultMessage": "!!!Appearance",
57 "file": "src/components/settings/settings/EditSettingsForm.js",
58 "start": {
59 "line": 32,
60 "column": 22
61 },
62 "end": {
63 "line": 35,
64 "column": 3
65 }
66 },
67 {
68 "id": "settings.app.headlineAdvanced",
69 "defaultMessage": "!!!Advanced",
70 "file": "src/components/settings/settings/EditSettingsForm.js",
71 "start": {
72 "line": 36,
73 "column": 20
74 },
75 "end": {
76 "line": 39,
77 "column": 3
78 }
79 },
80 {
81 "id": "settings.app.translationHelp",
82 "defaultMessage": "!!!Help us to translate Franz into your language.",
83 "file": "src/components/settings/settings/EditSettingsForm.js",
84 "start": {
85 "line": 40,
86 "column": 19
87 },
88 "end": {
89 "line": 43,
90 "column": 3
91 }
92 },
93 {
94 "id": "settings.app.subheadlineCache",
95 "defaultMessage": "!!!Cache",
96 "file": "src/components/settings/settings/EditSettingsForm.js",
97 "start": {
98 "line": 44,
99 "column": 20
100 },
101 "end": {
102 "line": 47,
103 "column": 3
104 }
105 },
106 {
107 "id": "settings.app.cacheInfo",
108 "defaultMessage": "!!!Franz cache is currently using {size} of disk space.",
109 "file": "src/components/settings/settings/EditSettingsForm.js",
110 "start": {
111 "line": 48,
112 "column": 13
113 },
114 "end": {
115 "line": 51,
116 "column": 3
117 }
118 },
119 {
120 "id": "settings.app.buttonClearAllCache",
121 "defaultMessage": "!!!Clear cache",
122 "file": "src/components/settings/settings/EditSettingsForm.js",
123 "start": {
124 "line": 52,
125 "column": 23
126 },
127 "end": {
128 "line": 55,
129 "column": 3
130 }
131 },
132 {
133 "id": "settings.app.buttonSearchForUpdate",
134 "defaultMessage": "!!!Check for updates",
135 "file": "src/components/settings/settings/EditSettingsForm.js",
136 "start": {
137 "line": 56,
138 "column": 25
139 },
140 "end": {
141 "line": 59,
142 "column": 3
143 }
144 },
145 {
146 "id": "settings.app.buttonInstallUpdate",
147 "defaultMessage": "!!!Restart & install update",
148 "file": "src/components/settings/settings/EditSettingsForm.js",
149 "start": {
150 "line": 60,
151 "column": 23
152 },
153 "end": {
154 "line": 63,
155 "column": 3
156 }
157 },
158 {
159 "id": "settings.app.updateStatusSearching",
160 "defaultMessage": "!!!Is searching for update",
161 "file": "src/components/settings/settings/EditSettingsForm.js",
162 "start": {
163 "line": 64,
164 "column": 25
165 },
166 "end": {
167 "line": 67,
168 "column": 3
169 }
170 },
171 {
172 "id": "settings.app.updateStatusAvailable",
173 "defaultMessage": "!!!Update available, downloading...",
174 "file": "src/components/settings/settings/EditSettingsForm.js",
175 "start": {
176 "line": 68,
177 "column": 25
178 },
179 "end": {
180 "line": 71,
181 "column": 3
182 }
183 },
184 {
185 "id": "settings.app.updateStatusUpToDate",
186 "defaultMessage": "!!!You are using the latest version of Franz",
187 "file": "src/components/settings/settings/EditSettingsForm.js",
188 "start": {
189 "line": 72,
190 "column": 24
191 },
192 "end": {
193 "line": 75,
194 "column": 3
195 }
196 },
197 {
198 "id": "settings.app.currentVersion",
199 "defaultMessage": "!!!Current version:",
200 "file": "src/components/settings/settings/EditSettingsForm.js",
201 "start": {
202 "line": 76,
203 "column": 18
204 },
205 "end": {
206 "line": 79,
207 "column": 3
208 }
209 },
210 {
211 "id": "settings.app.restartRequired",
212 "defaultMessage": "!!!Changes require restart",
213 "file": "src/components/settings/settings/EditSettingsForm.js",
214 "start": {
215 "line": 80,
216 "column": 29
217 },
218 "end": {
219 "line": 83,
220 "column": 3
221 }
222 }
223] \ No newline at end of file
diff --git a/translations/messages/src/components/settings/user/EditUserForm.json b/translations/messages/src/components/settings/user/EditUserForm.json
new file mode 100644
index 000000000..3a59f8681
--- /dev/null
+++ b/translations/messages/src/components/settings/user/EditUserForm.json
@@ -0,0 +1,80 @@
1[
2 {
3 "id": "settings.account.headline",
4 "defaultMessage": "!!!Account",
5 "file": "src/components/settings/user/EditUserForm.js",
6 "start": {
7 "line": 15,
8 "column": 12
9 },
10 "end": {
11 "line": 18,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.account.headlineProfile",
17 "defaultMessage": "!!!Update Profile",
18 "file": "src/components/settings/user/EditUserForm.js",
19 "start": {
20 "line": 19,
21 "column": 19
22 },
23 "end": {
24 "line": 22,
25 "column": 3
26 }
27 },
28 {
29 "id": "settings.account.headlineAccount",
30 "defaultMessage": "!!!Account Information",
31 "file": "src/components/settings/user/EditUserForm.js",
32 "start": {
33 "line": 23,
34 "column": 19
35 },
36 "end": {
37 "line": 26,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.account.headlinePassword",
43 "defaultMessage": "!!!Change Password",
44 "file": "src/components/settings/user/EditUserForm.js",
45 "start": {
46 "line": 27,
47 "column": 20
48 },
49 "end": {
50 "line": 30,
51 "column": 3
52 }
53 },
54 {
55 "id": "settings.account.successInfo",
56 "defaultMessage": "!!!Your changes have been saved",
57 "file": "src/components/settings/user/EditUserForm.js",
58 "start": {
59 "line": 31,
60 "column": 15
61 },
62 "end": {
63 "line": 34,
64 "column": 3
65 }
66 },
67 {
68 "id": "settings.account.buttonSave",
69 "defaultMessage": "!!!Update profile",
70 "file": "src/components/settings/user/EditUserForm.js",
71 "start": {
72 "line": 35,
73 "column": 14
74 },
75 "end": {
76 "line": 38,
77 "column": 3
78 }
79 }
80] \ No newline at end of file
diff --git a/translations/messages/src/components/subscription/SubscriptionForm.json b/translations/messages/src/components/subscription/SubscriptionForm.json
new file mode 100644
index 000000000..cc7470358
--- /dev/null
+++ b/translations/messages/src/components/subscription/SubscriptionForm.json
@@ -0,0 +1,171 @@
1[
2 {
3 "id": "subscription.submit.label",
4 "defaultMessage": "!!!Support the development of Franz",
5 "file": "src/components/subscription/SubscriptionForm.js",
6 "start": {
7 "line": 14,
8 "column": 21
9 },
10 "end": {
11 "line": 17,
12 "column": 3
13 }
14 },
15 {
16 "id": "subscription.paymentSessionError",
17 "defaultMessage": "!!!Could not initialize payment form",
18 "file": "src/components/subscription/SubscriptionForm.js",
19 "start": {
20 "line": 18,
21 "column": 23
22 },
23 "end": {
24 "line": 21,
25 "column": 3
26 }
27 },
28 {
29 "id": "subscription.type.free",
30 "defaultMessage": "!!!free",
31 "file": "src/components/subscription/SubscriptionForm.js",
32 "start": {
33 "line": 22,
34 "column": 12
35 },
36 "end": {
37 "line": 25,
38 "column": 3
39 }
40 },
41 {
42 "id": "subscription.type.month",
43 "defaultMessage": "!!!month",
44 "file": "src/components/subscription/SubscriptionForm.js",
45 "start": {
46 "line": 26,
47 "column": 15
48 },
49 "end": {
50 "line": 29,
51 "column": 3
52 }
53 },
54 {
55 "id": "subscription.type.year",
56 "defaultMessage": "!!!year",
57 "file": "src/components/subscription/SubscriptionForm.js",
58 "start": {
59 "line": 30,
60 "column": 14
61 },
62 "end": {
63 "line": 33,
64 "column": 3
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.ads",
134 "defaultMessage": "!!!No ads, ever!",
135 "file": "src/components/subscription/SubscriptionForm.js",
136 "start": {
137 "line": 54,
138 "column": 7
139 },
140 "end": {
141 "line": 57,
142 "column": 3
143 }
144 },
145 {
146 "id": "subscription.features.comingSoon",
147 "defaultMessage": "!!!coming soon",
148 "file": "src/components/subscription/SubscriptionForm.js",
149 "start": {
150 "line": 58,
151 "column": 14
152 },
153 "end": {
154 "line": 61,
155 "column": 3
156 }
157 },
158 {
159 "id": "subscription.euTaxInfo",
160 "defaultMessage": "!!!EU residents: local sales tax may apply",
161 "file": "src/components/subscription/SubscriptionForm.js",
162 "start": {
163 "line": 62,
164 "column": 13
165 },
166 "end": {
167 "line": 65,
168 "column": 3
169 }
170 }
171] \ No newline at end of file
diff --git a/translations/messages/src/components/subscription/SubscriptionPopup.json b/translations/messages/src/components/subscription/SubscriptionPopup.json
new file mode 100644
index 000000000..c06da7531
--- /dev/null
+++ b/translations/messages/src/components/subscription/SubscriptionPopup.json
@@ -0,0 +1,28 @@
1[
2 {
3 "id": "subscriptionPopup.buttonCancel",
4 "defaultMessage": "!!!Cancel",
5 "file": "src/components/subscription/SubscriptionPopup.js",
6 "start": {
7 "line": 11,
8 "column": 16
9 },
10 "end": {
11 "line": 14,
12 "column": 3
13 }
14 },
15 {
16 "id": "subscriptionPopup.buttonDone",
17 "defaultMessage": "!!!Done",
18 "file": "src/components/subscription/SubscriptionPopup.js",
19 "start": {
20 "line": 15,
21 "column": 14
22 },
23 "end": {
24 "line": 18,
25 "column": 3
26 }
27 }
28] \ No newline at end of file
diff --git a/translations/messages/src/components/ui/PremiumFeatureContainer/index.json b/translations/messages/src/components/ui/PremiumFeatureContainer/index.json
new file mode 100644
index 000000000..582d546fa
--- /dev/null
+++ b/translations/messages/src/components/ui/PremiumFeatureContainer/index.json
@@ -0,0 +1,15 @@
1[
2 {
3 "id": "premiumFeature.button.upgradeAccount",
4 "defaultMessage": "!!!Upgrade account",
5 "file": "src/components/ui/PremiumFeatureContainer/index.js",
6 "start": {
7 "line": 14,
8 "column": 10
9 },
10 "end": {
11 "line": 17,
12 "column": 3
13 }
14 }
15] \ No newline at end of file
diff --git a/translations/messages/src/components/util/ErrorBoundary/index.json b/translations/messages/src/components/util/ErrorBoundary/index.json
new file mode 100644
index 000000000..43c323031
--- /dev/null
+++ b/translations/messages/src/components/util/ErrorBoundary/index.json
@@ -0,0 +1,28 @@
1[
2 {
3 "id": "app.errorHandler.headline",
4 "defaultMessage": "!!!Something went wrong.",
5 "file": "src/components/util/ErrorBoundary/index.js",
6 "start": {
7 "line": 11,
8 "column": 12
9 },
10 "end": {
11 "line": 14,
12 "column": 3
13 }
14 },
15 {
16 "id": "app.errorHandler.action",
17 "defaultMessage": "!!!Reload",
18 "file": "src/components/util/ErrorBoundary/index.js",
19 "start": {
20 "line": 15,
21 "column": 10
22 },
23 "end": {
24 "line": 18,
25 "column": 3
26 }
27 }
28] \ No newline at end of file
diff --git a/translations/messages/src/containers/settings/EditServiceScreen.json b/translations/messages/src/containers/settings/EditServiceScreen.json
new file mode 100644
index 000000000..42ca42125
--- /dev/null
+++ b/translations/messages/src/containers/settings/EditServiceScreen.json
@@ -0,0 +1,197 @@
1[
2 {
3 "id": "settings.service.form.name",
4 "defaultMessage": "!!!Name",
5 "file": "src/containers/settings/EditServiceScreen.js",
6 "start": {
7 "line": 28,
8 "column": 8
9 },
10 "end": {
11 "line": 31,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.service.form.enableService",
17 "defaultMessage": "!!!Enable service",
18 "file": "src/containers/settings/EditServiceScreen.js",
19 "start": {
20 "line": 32,
21 "column": 17
22 },
23 "end": {
24 "line": 35,
25 "column": 3
26 }
27 },
28 {
29 "id": "settings.service.form.enableNotification",
30 "defaultMessage": "!!!Enable Notifications",
31 "file": "src/containers/settings/EditServiceScreen.js",
32 "start": {
33 "line": 36,
34 "column": 22
35 },
36 "end": {
37 "line": 39,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.service.form.enableBadge",
43 "defaultMessage": "!!!Show unread message badges",
44 "file": "src/containers/settings/EditServiceScreen.js",
45 "start": {
46 "line": 40,
47 "column": 15
48 },
49 "end": {
50 "line": 43,
51 "column": 3
52 }
53 },
54 {
55 "id": "settings.service.form.enableAudio",
56 "defaultMessage": "!!!Enable audio",
57 "file": "src/containers/settings/EditServiceScreen.js",
58 "start": {
59 "line": 44,
60 "column": 15
61 },
62 "end": {
63 "line": 47,
64 "column": 3
65 }
66 },
67 {
68 "id": "settings.service.form.team",
69 "defaultMessage": "!!!Team",
70 "file": "src/containers/settings/EditServiceScreen.js",
71 "start": {
72 "line": 48,
73 "column": 8
74 },
75 "end": {
76 "line": 51,
77 "column": 3
78 }
79 },
80 {
81 "id": "settings.service.form.customUrl",
82 "defaultMessage": "!!!Custom server",
83 "file": "src/containers/settings/EditServiceScreen.js",
84 "start": {
85 "line": 52,
86 "column": 13
87 },
88 "end": {
89 "line": 55,
90 "column": 3
91 }
92 },
93 {
94 "id": "settings.service.form.indirectMessages",
95 "defaultMessage": "!!!Show message badge for all new messages",
96 "file": "src/containers/settings/EditServiceScreen.js",
97 "start": {
98 "line": 56,
99 "column": 20
100 },
101 "end": {
102 "line": 59,
103 "column": 3
104 }
105 },
106 {
107 "id": "settings.service.form.icon",
108 "defaultMessage": "!!!Custom icon",
109 "file": "src/containers/settings/EditServiceScreen.js",
110 "start": {
111 "line": 60,
112 "column": 8
113 },
114 "end": {
115 "line": 63,
116 "column": 3
117 }
118 },
119 {
120 "id": "settings.service.form.enableDarkMode",
121 "defaultMessage": "!!!Enable Dark Mode",
122 "file": "src/containers/settings/EditServiceScreen.js",
123 "start": {
124 "line": 64,
125 "column": 18
126 },
127 "end": {
128 "line": 67,
129 "column": 3
130 }
131 },
132 {
133 "id": "settings.service.form.proxy.isEnabled",
134 "defaultMessage": "!!!Use Proxy",
135 "file": "src/containers/settings/EditServiceScreen.js",
136 "start": {
137 "line": 68,
138 "column": 15
139 },
140 "end": {
141 "line": 71,
142 "column": 3
143 }
144 },
145 {
146 "id": "settings.service.form.proxy.host",
147 "defaultMessage": "!!!Proxy Host/IP",
148 "file": "src/containers/settings/EditServiceScreen.js",
149 "start": {
150 "line": 72,
151 "column": 13
152 },
153 "end": {
154 "line": 75,
155 "column": 3
156 }
157 },
158 {
159 "id": "settings.service.form.proxy.port",
160 "defaultMessage": "!!!Port",
161 "file": "src/containers/settings/EditServiceScreen.js",
162 "start": {
163 "line": 76,
164 "column": 13
165 },
166 "end": {
167 "line": 79,
168 "column": 3
169 }
170 },
171 {
172 "id": "settings.service.form.proxy.user",
173 "defaultMessage": "!!!User",
174 "file": "src/containers/settings/EditServiceScreen.js",
175 "start": {
176 "line": 80,
177 "column": 13
178 },
179 "end": {
180 "line": 83,
181 "column": 3
182 }
183 },
184 {
185 "id": "settings.service.form.proxy.password",
186 "defaultMessage": "!!!Password",
187 "file": "src/containers/settings/EditServiceScreen.js",
188 "start": {
189 "line": 84,
190 "column": 17
191 },
192 "end": {
193 "line": 87,
194 "column": 3
195 }
196 }
197] \ No newline at end of file
diff --git a/translations/messages/src/containers/settings/EditSettingsScreen.json b/translations/messages/src/containers/settings/EditSettingsScreen.json
new file mode 100644
index 000000000..d3b413540
--- /dev/null
+++ b/translations/messages/src/containers/settings/EditSettingsScreen.json
@@ -0,0 +1,158 @@
1[
2 {
3 "id": "settings.app.form.autoLaunchOnStart",
4 "defaultMessage": "!!!Launch Franz on start",
5 "file": "src/containers/settings/EditSettingsScreen.js",
6 "start": {
7 "line": 22,
8 "column": 21
9 },
10 "end": {
11 "line": 25,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.app.form.autoLaunchInBackground",
17 "defaultMessage": "!!!Open in background",
18 "file": "src/containers/settings/EditSettingsScreen.js",
19 "start": {
20 "line": 26,
21 "column": 26
22 },
23 "end": {
24 "line": 29,
25 "column": 3
26 }
27 },
28 {
29 "id": "settings.app.form.runInBackground",
30 "defaultMessage": "!!!Keep Franz in background when closing the window",
31 "file": "src/containers/settings/EditSettingsScreen.js",
32 "start": {
33 "line": 30,
34 "column": 19
35 },
36 "end": {
37 "line": 33,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.app.form.enableSystemTray",
43 "defaultMessage": "!!!Show Franz in system tray",
44 "file": "src/containers/settings/EditSettingsScreen.js",
45 "start": {
46 "line": 34,
47 "column": 20
48 },
49 "end": {
50 "line": 37,
51 "column": 3
52 }
53 },
54 {
55 "id": "settings.app.form.minimizeToSystemTray",
56 "defaultMessage": "!!!Minimize Franz to system tray",
57 "file": "src/containers/settings/EditSettingsScreen.js",
58 "start": {
59 "line": 38,
60 "column": 24
61 },
62 "end": {
63 "line": 41,
64 "column": 3
65 }
66 },
67 {
68 "id": "settings.app.form.language",
69 "defaultMessage": "!!!Language",
70 "file": "src/containers/settings/EditSettingsScreen.js",
71 "start": {
72 "line": 42,
73 "column": 12
74 },
75 "end": {
76 "line": 45,
77 "column": 3
78 }
79 },
80 {
81 "id": "settings.app.form.darkMode",
82 "defaultMessage": "!!!Dark Mode",
83 "file": "src/containers/settings/EditSettingsScreen.js",
84 "start": {
85 "line": 46,
86 "column": 12
87 },
88 "end": {
89 "line": 49,
90 "column": 3
91 }
92 },
93 {
94 "id": "settings.app.form.showDisabledServices",
95 "defaultMessage": "!!!Display disabled services tabs",
96 "file": "src/containers/settings/EditSettingsScreen.js",
97 "start": {
98 "line": 50,
99 "column": 24
100 },
101 "end": {
102 "line": 53,
103 "column": 3
104 }
105 },
106 {
107 "id": "settings.app.form.showMessagesBadgesWhenMuted",
108 "defaultMessage": "!!!Show unread message badge when notifications are disabled",
109 "file": "src/containers/settings/EditSettingsScreen.js",
110 "start": {
111 "line": 54,
112 "column": 29
113 },
114 "end": {
115 "line": 57,
116 "column": 3
117 }
118 },
119 {
120 "id": "settings.app.form.enableSpellchecking",
121 "defaultMessage": "!!!Enable spell checking",
122 "file": "src/containers/settings/EditSettingsScreen.js",
123 "start": {
124 "line": 58,
125 "column": 23
126 },
127 "end": {
128 "line": 61,
129 "column": 3
130 }
131 },
132 {
133 "id": "settings.app.form.enableGPUAcceleration",
134 "defaultMessage": "!!!Enable GPU Acceleration",
135 "file": "src/containers/settings/EditSettingsScreen.js",
136 "start": {
137 "line": 62,
138 "column": 25
139 },
140 "end": {
141 "line": 65,
142 "column": 3
143 }
144 },
145 {
146 "id": "settings.app.form.beta",
147 "defaultMessage": "!!!Include beta versions",
148 "file": "src/containers/settings/EditSettingsScreen.js",
149 "start": {
150 "line": 66,
151 "column": 8
152 },
153 "end": {
154 "line": 69,
155 "column": 3
156 }
157 }
158] \ No newline at end of file
diff --git a/translations/messages/src/containers/settings/EditUserScreen.json b/translations/messages/src/containers/settings/EditUserScreen.json
new file mode 100644
index 000000000..70ff29945
--- /dev/null
+++ b/translations/messages/src/containers/settings/EditUserScreen.json
@@ -0,0 +1,119 @@
1[
2 {
3 "id": "settings.user.form.firstname",
4 "defaultMessage": "!!!Firstname",
5 "file": "src/containers/settings/EditUserScreen.js",
6 "start": {
7 "line": 14,
8 "column": 13
9 },
10 "end": {
11 "line": 17,
12 "column": 3
13 }
14 },
15 {
16 "id": "settings.user.form.lastname",
17 "defaultMessage": "!!!Lastname",
18 "file": "src/containers/settings/EditUserScreen.js",
19 "start": {
20 "line": 18,
21 "column": 12
22 },
23 "end": {
24 "line": 21,
25 "column": 3
26 }
27 },
28 {
29 "id": "settings.user.form.email",
30 "defaultMessage": "!!!Email",
31 "file": "src/containers/settings/EditUserScreen.js",
32 "start": {
33 "line": 22,
34 "column": 9
35 },
36 "end": {
37 "line": 25,
38 "column": 3
39 }
40 },
41 {
42 "id": "settings.user.form.accountType.label",
43 "defaultMessage": "!!!Account type",
44 "file": "src/containers/settings/EditUserScreen.js",
45 "start": {
46 "line": 26,
47 "column": 20
48 },
49 "end": {
50 "line": 29,
51 "column": 3
52 }
53 },
54 {
55 "id": "settings.user.form.accountType.individual",
56 "defaultMessage": "!!!Individual",
57 "file": "src/containers/settings/EditUserScreen.js",
58 "start": {
59 "line": 30,
60 "column": 25
61 },
62 "end": {
63 "line": 33,
64 "column": 3
65 }
66 },
67 {
68 "id": "settings.user.form.accountType.non-profit",
69 "defaultMessage": "!!!Non-Profit",
70 "file": "src/containers/settings/EditUserScreen.js",
71 "start": {
72 "line": 34,
73 "column": 24
74 },
75 "end": {
76 "line": 37,
77 "column": 3
78 }
79 },
80 {
81 "id": "settings.user.form.accountType.company",
82 "defaultMessage": "!!!Company",
83 "file": "src/containers/settings/EditUserScreen.js",
84 "start": {
85 "line": 38,
86 "column": 22
87 },
88 "end": {
89 "line": 41,
90 "column": 3
91 }
92 },
93 {
94 "id": "settings.user.form.currentPassword",
95 "defaultMessage": "!!!Current password",
96 "file": "src/containers/settings/EditUserScreen.js",
97 "start": {
98 "line": 42,
99 "column": 19
100 },
101 "end": {
102 "line": 45,
103 "column": 3
104 }
105 },
106 {
107 "id": "settings.user.form.newPassword",
108 "defaultMessage": "!!!New password",
109 "file": "src/containers/settings/EditUserScreen.js",
110 "start": {
111 "line": 46,
112 "column": 15
113 },
114 "end": {
115 "line": 49,
116 "column": 3
117 }
118 }
119] \ No newline at end of file
diff --git a/translations/messages/src/features/delayApp/Component.json b/translations/messages/src/features/delayApp/Component.json
new file mode 100644
index 000000000..bacd9444a
--- /dev/null
+++ b/translations/messages/src/features/delayApp/Component.json
@@ -0,0 +1,41 @@
1[
2 {
3 "id": "feature.delayApp.headline",
4 "defaultMessage": "!!!Please purchase license to skip waiting",
5 "file": "src/features/delayApp/Component.js",
6 "start": {
7 "line": 15,
8 "column": 12
9 },
10 "end": {
11 "line": 18,
12 "column": 3
13 }
14 },
15 {
16 "id": "feature.delayApp.action",
17 "defaultMessage": "!!!Get a Franz Supporter License",
18 "file": "src/features/delayApp/Component.js",
19 "start": {
20 "line": 19,
21 "column": 10
22 },
23 "end": {
24 "line": 22,
25 "column": 3
26 }
27 },
28 {
29 "id": "feature.delayApp.text",
30 "defaultMessage": "!!!Franz will continue in {seconds} seconds.",
31 "file": "src/features/delayApp/Component.js",
32 "start": {
33 "line": 23,
34 "column": 8
35 },
36 "end": {
37 "line": 26,
38 "column": 3
39 }
40 }
41] \ No newline at end of file
diff --git a/translations/messages/src/features/shareFranz/Component.json b/translations/messages/src/features/shareFranz/Component.json
new file mode 100644
index 000000000..0fec9db64
--- /dev/null
+++ b/translations/messages/src/features/shareFranz/Component.json
@@ -0,0 +1,93 @@
1[
2 {
3 "id": "feature.shareFranz.headline",
4 "defaultMessage": "!!!Franz is better together!",
5 "file": "src/features/shareFranz/Component.js",
6 "start": {
7 "line": 15,
8 "column": 12
9 },
10 "end": {
11 "line": 18,
12 "column": 3
13 }
14 },
15 {
16 "id": "feature.shareFranz.text",
17 "defaultMessage": "!!!Tell your friends and colleagues how awesome Franz is and help us to spread the word.",
18 "file": "src/features/shareFranz/Component.js",
19 "start": {
20 "line": 19,
21 "column": 8
22 },
23 "end": {
24 "line": 22,
25 "column": 3
26 }
27 },
28 {
29 "id": "feature.shareFranz.action.email",
30 "defaultMessage": "!!!Share as email",
31 "file": "src/features/shareFranz/Component.js",
32 "start": {
33 "line": 23,
34 "column": 16
35 },
36 "end": {
37 "line": 26,
38 "column": 3
39 }
40 },
41 {
42 "id": "feature.shareFranz.action.facebook",
43 "defaultMessage": "!!!Share on Facebook",
44 "file": "src/features/shareFranz/Component.js",
45 "start": {
46 "line": 27,
47 "column": 19
48 },
49 "end": {
50 "line": 30,
51 "column": 3
52 }
53 },
54 {
55 "id": "feature.shareFranz.action.twitter",
56 "defaultMessage": "!!!Share on Twitter",
57 "file": "src/features/shareFranz/Component.js",
58 "start": {
59 "line": 31,
60 "column": 18
61 },
62 "end": {
63 "line": 34,
64 "column": 3
65 }
66 },
67 {
68 "id": "feature.shareFranz.shareText.email",
69 "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com",
70 "file": "src/features/shareFranz/Component.js",
71 "start": {
72 "line": 35,
73 "column": 18
74 },
75 "end": {
76 "line": 38,
77 "column": 3
78 }
79 },
80 {
81 "id": "feature.shareFranz.shareText.twitter",
82 "defaultMessage": "!!! I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @MeetFranz",
83 "file": "src/features/shareFranz/Component.js",
84 "start": {
85 "line": 39,
86 "column": 20
87 },
88 "end": {
89 "line": 42,
90 "column": 3
91 }
92 }
93] \ No newline at end of file
diff --git a/translations/messages/src/helpers/validation-helpers.json b/translations/messages/src/helpers/validation-helpers.json
new file mode 100644
index 000000000..86bfe1500
--- /dev/null
+++ b/translations/messages/src/helpers/validation-helpers.json
@@ -0,0 +1,67 @@
1[
2 {
3 "id": "validation.required",
4 "defaultMessage": "!!!Field is required",
5 "file": "src/helpers/validation-helpers.js",
6 "start": {
7 "line": 4,
8 "column": 12
9 },
10 "end": {
11 "line": 7,
12 "column": 3
13 }
14 },
15 {
16 "id": "validation.email",
17 "defaultMessage": "!!!Email not valid",
18 "file": "src/helpers/validation-helpers.js",
19 "start": {
20 "line": 8,
21 "column": 9
22 },
23 "end": {
24 "line": 11,
25 "column": 3
26 }
27 },
28 {
29 "id": "validation.url",
30 "defaultMessage": "!!!Not a valid URL",
31 "file": "src/helpers/validation-helpers.js",
32 "start": {
33 "line": 12,
34 "column": 7
35 },
36 "end": {
37 "line": 15,
38 "column": 3
39 }
40 },
41 {
42 "id": "validation.minLength",
43 "defaultMessage": "!!!Too few characters",
44 "file": "src/helpers/validation-helpers.js",
45 "start": {
46 "line": 16,
47 "column": 13
48 },
49 "end": {
50 "line": 19,
51 "column": 3
52 }
53 },
54 {
55 "id": "validation.oneRequired",
56 "defaultMessage": "!!!At least one is required",
57 "file": "src/helpers/validation-helpers.js",
58 "start": {
59 "line": 20,
60 "column": 15
61 },
62 "end": {
63 "line": 23,
64 "column": 3
65 }
66 }
67] \ No newline at end of file
diff --git a/translations/messages/src/i18n/globalMessages.json b/translations/messages/src/i18n/globalMessages.json
new file mode 100644
index 000000000..46c43291c
--- /dev/null
+++ b/translations/messages/src/i18n/globalMessages.json
@@ -0,0 +1,93 @@
1[
2 {
3 "id": "global.premium.upgradeAccount",
4 "defaultMessage": "!!!Please upgrade your account to add a new service.",
5 "file": "src/i18n/globalMessages.js",
6 "start": {
7 "line": 4,
8 "column": 18
9 },
10 "end": {
11 "line": 7,
12 "column": 3
13 }
14 },
15 {
16 "id": "global.api.unhealthy",
17 "defaultMessage": "!!!Can't connect to Franz Online Services",
18 "file": "src/i18n/globalMessages.js",
19 "start": {
20 "line": 8,
21 "column": 16
22 },
23 "end": {
24 "line": 11,
25 "column": 3
26 }
27 },
28 {
29 "id": "global.notConnectedToTheInternet",
30 "defaultMessage": "!!!You are not connected to the internet.",
31 "file": "src/i18n/globalMessages.js",
32 "start": {
33 "line": 12,
34 "column": 29
35 },
36 "end": {
37 "line": 15,
38 "column": 3
39 }
40 },
41 {
42 "id": "global.spellchecking.language",
43 "defaultMessage": "!!!Spell checking language",
44 "file": "src/i18n/globalMessages.js",
45 "start": {
46 "line": 16,
47 "column": 24
48 },
49 "end": {
50 "line": 19,
51 "column": 3
52 }
53 },
54 {
55 "id": "global.spellchecker.useDefault",
56 "defaultMessage": "!!!Use System Default ({default})",
57 "file": "src/i18n/globalMessages.js",
58 "start": {
59 "line": 20,
60 "column": 29
61 },
62 "end": {
63 "line": 23,
64 "column": 3
65 }
66 },
67 {
68 "id": "global.spellchecking.autodetect",
69 "defaultMessage": "!!!Detect language automatically",
70 "file": "src/i18n/globalMessages.js",
71 "start": {
72 "line": 24,
73 "column": 34
74 },
75 "end": {
76 "line": 27,
77 "column": 3
78 }
79 },
80 {
81 "id": "global.spellchecking.autodetect.short",
82 "defaultMessage": "!!!Automatic",
83 "file": "src/i18n/globalMessages.js",
84 "start": {
85 "line": 28,
86 "column": 39
87 },
88 "end": {
89 "line": 31,
90 "column": 3
91 }
92 }
93] \ No newline at end of file
diff --git a/translations/messages/src/lib/Menu.json b/translations/messages/src/lib/Menu.json
new file mode 100644
index 000000000..6958f0219
--- /dev/null
+++ b/translations/messages/src/lib/Menu.json
@@ -0,0 +1,561 @@
1[
2 {
3 "id": "menu.edit",
4 "defaultMessage": "!!!Edit",
5 "file": "src/lib/Menu.js",
6 "start": {
7 "line": 10,
8 "column": 8
9 },
10 "end": {
11 "line": 13,
12 "column": 3
13 }
14 },
15 {
16 "id": "menu.edit.undo",
17 "defaultMessage": "!!!Undo",
18 "file": "src/lib/Menu.js",
19 "start": {
20 "line": 14,
21 "column": 8
22 },
23 "end": {
24 "line": 17,
25 "column": 3
26 }
27 },
28 {
29 "id": "menu.edit.redo",
30 "defaultMessage": "!!!Redo",
31 "file": "src/lib/Menu.js",
32 "start": {
33 "line": 18,
34 "column": 8
35 },
36 "end": {
37 "line": 21,
38 "column": 3
39 }
40 },
41 {
42 "id": "menu.edit.cut",
43 "defaultMessage": "!!!Cut",
44 "file": "src/lib/Menu.js",
45 "start": {
46 "line": 22,
47 "column": 7
48 },
49 "end": {
50 "line": 25,
51 "column": 3
52 }
53 },
54 {
55 "id": "menu.edit.copy",
56 "defaultMessage": "!!!Copy",
57 "file": "src/lib/Menu.js",
58 "start": {
59 "line": 26,
60 "column": 8
61 },
62 "end": {
63 "line": 29,
64 "column": 3
65 }
66 },
67 {
68 "id": "menu.edit.paste",
69 "defaultMessage": "!!!Paste",
70 "file": "src/lib/Menu.js",
71 "start": {
72 "line": 30,
73 "column": 9
74 },
75 "end": {
76 "line": 33,
77 "column": 3
78 }
79 },
80 {
81 "id": "menu.edit.pasteAndMatchStyle",
82 "defaultMessage": "!!!Paste And Match Style",
83 "file": "src/lib/Menu.js",
84 "start": {
85 "line": 34,
86 "column": 22
87 },
88 "end": {
89 "line": 37,
90 "column": 3
91 }
92 },
93 {
94 "id": "menu.edit.delete",
95 "defaultMessage": "!!!Delete",
96 "file": "src/lib/Menu.js",
97 "start": {
98 "line": 38,
99 "column": 10
100 },
101 "end": {
102 "line": 41,
103 "column": 3
104 }
105 },
106 {
107 "id": "menu.edit.selectAll",
108 "defaultMessage": "!!!Select All",
109 "file": "src/lib/Menu.js",
110 "start": {
111 "line": 42,
112 "column": 13
113 },
114 "end": {
115 "line": 45,
116 "column": 3
117 }
118 },
119 {
120 "id": "menu.edit.speech",
121 "defaultMessage": "!!!Speech",
122 "file": "src/lib/Menu.js",
123 "start": {
124 "line": 46,
125 "column": 10
126 },
127 "end": {
128 "line": 49,
129 "column": 3
130 }
131 },
132 {
133 "id": "menu.edit.startSpeaking",
134 "defaultMessage": "!!!Start Speaking",
135 "file": "src/lib/Menu.js",
136 "start": {
137 "line": 50,
138 "column": 17
139 },
140 "end": {
141 "line": 53,
142 "column": 3
143 }
144 },
145 {
146 "id": "menu.edit.stopSpeaking",
147 "defaultMessage": "!!!Stop Speaking",
148 "file": "src/lib/Menu.js",
149 "start": {
150 "line": 54,
151 "column": 16
152 },
153 "end": {
154 "line": 57,
155 "column": 3
156 }
157 },
158 {
159 "id": "menu.edit.startDictation",
160 "defaultMessage": "!!!Start Dictation",
161 "file": "src/lib/Menu.js",
162 "start": {
163 "line": 58,
164 "column": 18
165 },
166 "end": {
167 "line": 61,
168 "column": 3
169 }
170 },
171 {
172 "id": "menu.edit.emojiSymbols",
173 "defaultMessage": "!!!Emoji & Symbols",
174 "file": "src/lib/Menu.js",
175 "start": {
176 "line": 62,
177 "column": 16
178 },
179 "end": {
180 "line": 65,
181 "column": 3
182 }
183 },
184 {
185 "id": "menu.view.resetZoom",
186 "defaultMessage": "!!!Actual Size",
187 "file": "src/lib/Menu.js",
188 "start": {
189 "line": 66,
190 "column": 13
191 },
192 "end": {
193 "line": 69,
194 "column": 3
195 }
196 },
197 {
198 "id": "menu.view.zoomIn",
199 "defaultMessage": "!!!Zoom In",
200 "file": "src/lib/Menu.js",
201 "start": {
202 "line": 70,
203 "column": 10
204 },
205 "end": {
206 "line": 73,
207 "column": 3
208 }
209 },
210 {
211 "id": "menu.view.zoomOut",
212 "defaultMessage": "!!!Zoom Out",
213 "file": "src/lib/Menu.js",
214 "start": {
215 "line": 74,
216 "column": 11
217 },
218 "end": {
219 "line": 77,
220 "column": 3
221 }
222 },
223 {
224 "id": "menu.view.enterFullScreen",
225 "defaultMessage": "!!!Enter Full Screen",
226 "file": "src/lib/Menu.js",
227 "start": {
228 "line": 78,
229 "column": 19
230 },
231 "end": {
232 "line": 81,
233 "column": 3
234 }
235 },
236 {
237 "id": "menu.view.exitFullScreen",
238 "defaultMessage": "!!!Exit Full Screen",
239 "file": "src/lib/Menu.js",
240 "start": {
241 "line": 82,
242 "column": 18
243 },
244 "end": {
245 "line": 85,
246 "column": 3
247 }
248 },
249 {
250 "id": "menu.view.toggleFullScreen",
251 "defaultMessage": "!!!Toggle Full Screen",
252 "file": "src/lib/Menu.js",
253 "start": {
254 "line": 86,
255 "column": 20
256 },
257 "end": {
258 "line": 89,
259 "column": 3
260 }
261 },
262 {
263 "id": "menu.view.toggleDevTools",
264 "defaultMessage": "!!!Toggle Developer Tools",
265 "file": "src/lib/Menu.js",
266 "start": {
267 "line": 90,
268 "column": 18
269 },
270 "end": {
271 "line": 93,
272 "column": 3
273 }
274 },
275 {
276 "id": "menu.view.toggleServiceDevTools",
277 "defaultMessage": "!!!Toggle Service Developer Tools",
278 "file": "src/lib/Menu.js",
279 "start": {
280 "line": 94,
281 "column": 25
282 },
283 "end": {
284 "line": 97,
285 "column": 3
286 }
287 },
288 {
289 "id": "menu.view.reloadService",
290 "defaultMessage": "!!!Reload Service",
291 "file": "src/lib/Menu.js",
292 "start": {
293 "line": 98,
294 "column": 17
295 },
296 "end": {
297 "line": 101,
298 "column": 3
299 }
300 },
301 {
302 "id": "menu.view.reloadFranz",
303 "defaultMessage": "!!!Reload Franz",
304 "file": "src/lib/Menu.js",
305 "start": {
306 "line": 102,
307 "column": 15
308 },
309 "end": {
310 "line": 105,
311 "column": 3
312 }
313 },
314 {
315 "id": "menu.window.minimize",
316 "defaultMessage": "!!!Minimize",
317 "file": "src/lib/Menu.js",
318 "start": {
319 "line": 106,
320 "column": 12
321 },
322 "end": {
323 "line": 109,
324 "column": 3
325 }
326 },
327 {
328 "id": "menu.window.close",
329 "defaultMessage": "!!!Close",
330 "file": "src/lib/Menu.js",
331 "start": {
332 "line": 110,
333 "column": 9
334 },
335 "end": {
336 "line": 113,
337 "column": 3
338 }
339 },
340 {
341 "id": "menu.help.learnMore",
342 "defaultMessage": "!!!Learn More",
343 "file": "src/lib/Menu.js",
344 "start": {
345 "line": 114,
346 "column": 13
347 },
348 "end": {
349 "line": 117,
350 "column": 3
351 }
352 },
353 {
354 "id": "menu.help.changelog",
355 "defaultMessage": "!!!Changelog",
356 "file": "src/lib/Menu.js",
357 "start": {
358 "line": 118,
359 "column": 13
360 },
361 "end": {
362 "line": 121,
363 "column": 3
364 }
365 },
366 {
367 "id": "menu.help.support",
368 "defaultMessage": "!!!Support",
369 "file": "src/lib/Menu.js",
370 "start": {
371 "line": 122,
372 "column": 11
373 },
374 "end": {
375 "line": 125,
376 "column": 3
377 }
378 },
379 {
380 "id": "menu.help.tos",
381 "defaultMessage": "!!!Terms of Service",
382 "file": "src/lib/Menu.js",
383 "start": {
384 "line": 126,
385 "column": 7
386 },
387 "end": {
388 "line": 129,
389 "column": 3
390 }
391 },
392 {
393 "id": "menu.help.privacy",
394 "defaultMessage": "!!!Privacy Statement",
395 "file": "src/lib/Menu.js",
396 "start": {
397 "line": 130,
398 "column": 11
399 },
400 "end": {
401 "line": 133,
402 "column": 3
403 }
404 },
405 {
406 "id": "menu.file",
407 "defaultMessage": "!!!File",
408 "file": "src/lib/Menu.js",
409 "start": {
410 "line": 134,
411 "column": 8
412 },
413 "end": {
414 "line": 137,
415 "column": 3
416 }
417 },
418 {
419 "id": "menu.view",
420 "defaultMessage": "!!!View",
421 "file": "src/lib/Menu.js",
422 "start": {
423 "line": 138,
424 "column": 8
425 },
426 "end": {
427 "line": 141,
428 "column": 3
429 }
430 },
431 {
432 "id": "menu.services",
433 "defaultMessage": "!!!Services",
434 "file": "src/lib/Menu.js",
435 "start": {
436 "line": 142,
437 "column": 12
438 },
439 "end": {
440 "line": 145,
441 "column": 3
442 }
443 },
444 {
445 "id": "menu.window",
446 "defaultMessage": "!!!Window",
447 "file": "src/lib/Menu.js",
448 "start": {
449 "line": 146,
450 "column": 10
451 },
452 "end": {
453 "line": 149,
454 "column": 3
455 }
456 },
457 {
458 "id": "menu.help",
459 "defaultMessage": "!!!Help",
460 "file": "src/lib/Menu.js",
461 "start": {
462 "line": 150,
463 "column": 8
464 },
465 "end": {
466 "line": 153,
467 "column": 3
468 }
469 },
470 {
471 "id": "menu.app.about",
472 "defaultMessage": "!!!About Franz",
473 "file": "src/lib/Menu.js",
474 "start": {
475 "line": 154,
476 "column": 9
477 },
478 "end": {
479 "line": 157,
480 "column": 3
481 }
482 },
483 {
484 "id": "menu.app.settings",
485 "defaultMessage": "!!!Settings",
486 "file": "src/lib/Menu.js",
487 "start": {
488 "line": 158,
489 "column": 12
490 },
491 "end": {
492 "line": 161,
493 "column": 3
494 }
495 },
496 {
497 "id": "menu.app.hide",
498 "defaultMessage": "!!!Hide",
499 "file": "src/lib/Menu.js",
500 "start": {
501 "line": 162,
502 "column": 8
503 },
504 "end": {
505 "line": 165,
506 "column": 3
507 }
508 },
509 {
510 "id": "menu.app.hideOthers",
511 "defaultMessage": "!!!Hide Others",
512 "file": "src/lib/Menu.js",
513 "start": {
514 "line": 166,
515 "column": 14
516 },
517 "end": {
518 "line": 169,
519 "column": 3
520 }
521 },
522 {
523 "id": "menu.app.unhide",
524 "defaultMessage": "!!!Unhide",
525 "file": "src/lib/Menu.js",
526 "start": {
527 "line": 170,
528 "column": 10
529 },
530 "end": {
531 "line": 173,
532 "column": 3
533 }
534 },
535 {
536 "id": "menu.app.quit",
537 "defaultMessage": "!!!Quit",
538 "file": "src/lib/Menu.js",
539 "start": {
540 "line": 174,
541 "column": 8
542 },
543 "end": {
544 "line": 177,
545 "column": 3
546 }
547 },
548 {
549 "id": "menu.services.addNewService",
550 "defaultMessage": "!!!Add New Service...",
551 "file": "src/lib/Menu.js",
552 "start": {
553 "line": 178,
554 "column": 17
555 },
556 "end": {
557 "line": 181,
558 "column": 3
559 }
560 }
561] \ No newline at end of file